{
  "version": 3,
  "sources": ["../../../node_modules/@hotwired/turbo/dist/turbo.es2017-esm.js", "../../../node_modules/@hotwired/turbo-rails/node_modules/@rails/actioncable/src/adapters.js", "../../../node_modules/@hotwired/turbo-rails/node_modules/@rails/actioncable/src/logger.js", "../../../node_modules/@hotwired/turbo-rails/node_modules/@rails/actioncable/src/connection_monitor.js", "../../../node_modules/@hotwired/turbo-rails/node_modules/@rails/actioncable/src/internal.js", "../../../node_modules/@hotwired/turbo-rails/node_modules/@rails/actioncable/src/connection.js", "../../../node_modules/@hotwired/turbo-rails/node_modules/@rails/actioncable/src/subscription.js", "../../../node_modules/@hotwired/turbo-rails/node_modules/@rails/actioncable/src/subscription_guarantor.js", "../../../node_modules/@hotwired/turbo-rails/node_modules/@rails/actioncable/src/subscriptions.js", "../../../node_modules/@hotwired/turbo-rails/node_modules/@rails/actioncable/src/consumer.js", "../../../node_modules/@hotwired/turbo-rails/node_modules/@rails/actioncable/src/index.js", "../../../node_modules/@hotwired/turbo-rails/app/javascript/turbo/cable.js", "../../../node_modules/@hotwired/turbo-rails/app/javascript/turbo/snakeize.js", "../../../node_modules/@hotwired/turbo-rails/app/javascript/turbo/cable_stream_source_element.js", "../../../node_modules/@hotwired/turbo-rails/app/javascript/turbo/fetch_requests.js", "../../../node_modules/@hotwired/turbo-rails/app/javascript/turbo/index.js", "../../../node_modules/@rails/activestorage/app/assets/javascripts/activestorage.esm.js", "../../../node_modules/filepond/dist/filepond.js", "../../../node_modules/filepond-plugin-image-validate-size/dist/filepond-plugin-image-validate-size.js", "../../../node_modules/filepond-plugin-file-validate-size/dist/filepond-plugin-file-validate-size.js", "../../../node_modules/filepond-plugin-file-validate-type/dist/filepond-plugin-file-validate-type.js", "../../../node_modules/filepond-plugin-image-preview/dist/filepond-plugin-image-preview.js", "../../javascript/commons/filepond-rails.js", "../../../node_modules/fslightbox/index.js", "../../javascript/commons/index.js", "../../../node_modules/@hotwired/stimulus/dist/stimulus.js", "../../javascript/controllers/application.js", "../../components/suggestions_widget/suggestions_widget_controller.js", "../../components/trending_conferences_widget/trending_conferences_widget_controller.js", "../../components/upcoming_meetings_widget/upcoming_meetings_widget_controller.js", "../../components/trending_articles_widget/trending_articles_widget_controller.js", "../../components/governance_vote_widget/governance_vote_widget_controller.js", "../../components/trending_communities_widget/trending_communities_widget_controller.js", "../../components/recommended_users_widget/recommended_users_widget_controller.js", "../../components/research_areas_widget/research_areas_widget_controller.js", "../../components/modal/modal_controller.js", "../../components/modal_trigger_link/modal_trigger_link_controller.js", "../../../node_modules/@popperjs/core/lib/enums.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getNodeName.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getWindow.js", "../../../node_modules/@popperjs/core/lib/dom-utils/instanceOf.js", "../../../node_modules/@popperjs/core/lib/modifiers/applyStyles.js", "../../../node_modules/@popperjs/core/lib/utils/getBasePlacement.js", "../../../node_modules/@popperjs/core/lib/utils/math.js", "../../../node_modules/@popperjs/core/lib/utils/userAgent.js", "../../../node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js", "../../../node_modules/@popperjs/core/lib/dom-utils/contains.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js", "../../../node_modules/@popperjs/core/lib/dom-utils/isTableElement.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getParentNode.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js", "../../../node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js", "../../../node_modules/@popperjs/core/lib/utils/within.js", "../../../node_modules/@popperjs/core/lib/utils/getFreshSideObject.js", "../../../node_modules/@popperjs/core/lib/utils/mergePaddingObject.js", "../../../node_modules/@popperjs/core/lib/utils/expandToHashMap.js", "../../../node_modules/@popperjs/core/lib/modifiers/arrow.js", "../../../node_modules/@popperjs/core/lib/utils/getVariation.js", "../../../node_modules/@popperjs/core/lib/modifiers/computeStyles.js", "../../../node_modules/@popperjs/core/lib/modifiers/eventListeners.js", "../../../node_modules/@popperjs/core/lib/utils/getOppositePlacement.js", "../../../node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js", "../../../node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js", "../../../node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js", "../../../node_modules/@popperjs/core/lib/utils/rectToClientRect.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js", "../../../node_modules/@popperjs/core/lib/utils/computeOffsets.js", "../../../node_modules/@popperjs/core/lib/utils/detectOverflow.js", "../../../node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js", "../../../node_modules/@popperjs/core/lib/modifiers/flip.js", "../../../node_modules/@popperjs/core/lib/modifiers/hide.js", "../../../node_modules/@popperjs/core/lib/modifiers/offset.js", "../../../node_modules/@popperjs/core/lib/modifiers/popperOffsets.js", "../../../node_modules/@popperjs/core/lib/utils/getAltAxis.js", "../../../node_modules/@popperjs/core/lib/modifiers/preventOverflow.js", "../../../node_modules/@popperjs/core/lib/modifiers/index.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js", "../../../node_modules/@popperjs/core/lib/utils/orderModifiers.js", "../../../node_modules/@popperjs/core/lib/utils/debounce.js", "../../../node_modules/@popperjs/core/lib/utils/mergeByName.js", "../../../node_modules/@popperjs/core/lib/createPopper.js", "../../../node_modules/@popperjs/core/lib/popper.js", "../../../node_modules/@popperjs/core/lib/index.js", "../../../node_modules/tippy.js/src/constants.ts", "../../../node_modules/tippy.js/src/utils.ts", "../../../node_modules/tippy.js/src/dom-utils.ts", "../../../node_modules/tippy.js/src/bindGlobalEventListeners.ts", "../../../node_modules/tippy.js/src/browser.ts", "../../../node_modules/tippy.js/src/validation.ts", "../../../node_modules/tippy.js/src/props.ts", "../../../node_modules/tippy.js/src/template.ts", "../../../node_modules/tippy.js/src/createTippy.ts", "../../../node_modules/tippy.js/src/index.ts", "../../../node_modules/tippy.js/src/addons/createSingleton.ts", "../../../node_modules/tippy.js/src/addons/delegate.ts", "../../../node_modules/tippy.js/src/plugins/animateFill.ts", "../../../node_modules/tippy.js/src/plugins/followCursor.ts", "../../../node_modules/tippy.js/src/plugins/inlinePositioning.ts", "../../../node_modules/tippy.js/src/plugins/sticky.ts", "../../../node_modules/tippy.js/build/base.js", "../../components/dropdown_menu/dropdown_menu_controller.js", "../../components/dropdown_menu_v2/dropdown_menu_v2_controller.js", "../../../node_modules/@codemirror/state/dist/index.js", "../../../node_modules/style-mod/src/style-mod.js", "../../../node_modules/w3c-keyname/index.js", "../../../node_modules/@codemirror/view/dist/index.js", "../../components/editor/codemirror-themes/light-autocomplete-theme.ts", "../../components/editor/codemirror-themes/light-search-panel-theme.ts", "../../components/editor/codemirror-themes/light-theme.ts", "../../../node_modules/@lezer/common/dist/index.js", "../../../node_modules/@lezer/highlight/dist/index.js", "../../../node_modules/@codemirror/language/dist/index.js", "../../components/editor/codemirror-themes/dark-autocomplete-theme.ts", "../../components/editor/codemirror-themes/dark-search-panel-theme.ts", "../../components/editor/codemirror-themes/dark-theme.ts", "../../../node_modules/@codemirror/commands/dist/index.js", "../../components/editor/codemirror-drop-fold-gutter/index.ts", "../../components/editor/codemirror-helper.ts", "../../components/editor/lezer-parser-markdown/markdown.ts", "../../components/editor/codemirror-markdow-gutter/icons.ts", "../../../node_modules/mdast-util-to-string/lib/index.js", "../../../node_modules/mdast-util-to-string/index.js", "../../../node_modules/decode-named-character-reference/index.dom.js", "../../../node_modules/micromark-util-chunked/index.js", "../../../node_modules/micromark-util-combine-extensions/index.js", "../../../node_modules/micromark-util-decode-numeric-character-reference/index.js", "../../../node_modules/micromark-util-encode/index.js", "../../../node_modules/micromark-util-normalize-identifier/index.js", "../../../node_modules/micromark-util-character/index.js", "../../../node_modules/micromark-util-sanitize-uri/index.js", "../../../node_modules/micromark/lib/compile.js", "../../../node_modules/micromark-factory-space/index.js", "../../../node_modules/micromark/lib/initialize/content.js", "../../../node_modules/micromark/lib/initialize/document.js", "../../../node_modules/micromark-util-classify-character/index.js", "../../../node_modules/micromark-util-resolve-all/index.js", "../../../node_modules/micromark-core-commonmark/lib/attention.js", "../../../node_modules/micromark-core-commonmark/lib/autolink.js", "../../../node_modules/micromark-core-commonmark/lib/blank-line.js", "../../../node_modules/micromark-core-commonmark/lib/block-quote.js", "../../../node_modules/micromark-core-commonmark/lib/character-escape.js", "../../../node_modules/micromark-core-commonmark/lib/character-reference.js", "../../../node_modules/micromark-core-commonmark/lib/code-fenced.js", "../../../node_modules/micromark-core-commonmark/lib/code-indented.js", "../../../node_modules/micromark-core-commonmark/lib/code-text.js", "../../../node_modules/micromark-util-subtokenize/index.js", "../../../node_modules/micromark-core-commonmark/lib/content.js", "../../../node_modules/micromark-factory-destination/index.js", "../../../node_modules/micromark-factory-label/index.js", "../../../node_modules/micromark-factory-title/index.js", "../../../node_modules/micromark-factory-whitespace/index.js", "../../../node_modules/micromark-core-commonmark/lib/definition.js", "../../../node_modules/micromark-core-commonmark/lib/hard-break-escape.js", "../../../node_modules/micromark-core-commonmark/lib/heading-atx.js", "../../../node_modules/micromark-util-html-tag-name/index.js", "../../../node_modules/micromark-core-commonmark/lib/html-flow.js", "../../../node_modules/micromark-core-commonmark/lib/html-text.js", "../../../node_modules/micromark-core-commonmark/lib/label-end.js", "../../../node_modules/micromark-core-commonmark/lib/label-start-image.js", "../../../node_modules/micromark-core-commonmark/lib/label-start-link.js", "../../../node_modules/micromark-core-commonmark/lib/line-ending.js", "../../../node_modules/micromark-core-commonmark/lib/thematic-break.js", "../../../node_modules/micromark-core-commonmark/lib/list.js", "../../../node_modules/micromark-core-commonmark/lib/setext-underline.js", "../../../node_modules/micromark-core-commonmark/index.js", "../../../node_modules/micromark/lib/initialize/flow.js", "../../../node_modules/micromark/lib/initialize/text.js", "../../../node_modules/micromark/lib/create-tokenizer.js", "../../../node_modules/micromark/lib/constructs.js", "../../../node_modules/micromark/lib/parse.js", "../../../node_modules/micromark/lib/postprocess.js", "../../../node_modules/micromark/lib/preprocess.js", "../../../node_modules/micromark/index.js", "../../../node_modules/micromark-util-decode-string/index.js", "../../../node_modules/unist-util-stringify-position/lib/index.js", "../../../node_modules/unist-util-stringify-position/index.js", "../../../node_modules/mdast-util-from-markdown/lib/index.js", "../../../node_modules/mdast-util-from-markdown/index.js", "../../../node_modules/unist-util-is/lib/index.js", "../../../node_modules/unist-util-is/index.js", "../../../node_modules/unist-util-visit-parents/lib/color.js", "../../../node_modules/unist-util-visit-parents/lib/index.js", "../../../node_modules/unist-util-visit-parents/index.js", "../../../node_modules/unist-util-visit/lib/index.js", "../../../node_modules/unist-util-visit/index.js", "../../../node_modules/zwitch/index.js", "../../../node_modules/mdast-util-to-markdown/lib/configure.js", "../../../node_modules/mdast-util-to-markdown/lib/handle/blockquote.js", "../../../node_modules/mdast-util-to-markdown/lib/util/pattern-in-scope.js", "../../../node_modules/mdast-util-to-markdown/lib/handle/break.js", "../../../node_modules/longest-streak/index.js", "../../../node_modules/mdast-util-to-markdown/lib/util/format-code-as-indented.js", "../../../node_modules/mdast-util-to-markdown/lib/util/check-fence.js", "../../../node_modules/mdast-util-to-markdown/lib/handle/code.js", "../../../node_modules/mdast-util-to-markdown/lib/util/check-quote.js", "../../../node_modules/mdast-util-to-markdown/lib/handle/definition.js", "../../../node_modules/mdast-util-to-markdown/lib/util/check-emphasis.js", "../../../node_modules/mdast-util-to-markdown/lib/handle/emphasis.js", "../../../node_modules/mdast-util-to-markdown/lib/util/format-heading-as-setext.js", "../../../node_modules/mdast-util-to-markdown/lib/handle/heading.js", "../../../node_modules/mdast-util-to-markdown/lib/handle/html.js", "../../../node_modules/mdast-util-to-markdown/lib/handle/image.js", "../../../node_modules/mdast-util-to-markdown/lib/handle/image-reference.js", "../../../node_modules/mdast-util-to-markdown/lib/handle/inline-code.js", "../../../node_modules/mdast-util-to-markdown/lib/util/format-link-as-autolink.js", "../../../node_modules/mdast-util-to-markdown/lib/handle/link.js", "../../../node_modules/mdast-util-to-markdown/lib/handle/link-reference.js", "../../../node_modules/mdast-util-to-markdown/lib/util/check-bullet.js", "../../../node_modules/mdast-util-to-markdown/lib/util/check-bullet-other.js", "../../../node_modules/mdast-util-to-markdown/lib/util/check-bullet-ordered.js", "../../../node_modules/mdast-util-to-markdown/lib/util/check-rule.js", "../../../node_modules/mdast-util-to-markdown/lib/handle/list.js", "../../../node_modules/mdast-util-to-markdown/lib/util/check-list-item-indent.js", "../../../node_modules/mdast-util-to-markdown/lib/handle/list-item.js", "../../../node_modules/mdast-util-to-markdown/lib/handle/paragraph.js", "../../../node_modules/mdast-util-phrasing/lib/index.js", "../../../node_modules/mdast-util-phrasing/index.js", "../../../node_modules/mdast-util-to-markdown/lib/handle/root.js", "../../../node_modules/mdast-util-to-markdown/lib/util/check-strong.js", "../../../node_modules/mdast-util-to-markdown/lib/handle/strong.js", "../../../node_modules/mdast-util-to-markdown/lib/handle/text.js", "../../../node_modules/mdast-util-to-markdown/lib/util/check-rule-repetition.js", "../../../node_modules/mdast-util-to-markdown/lib/handle/thematic-break.js", "../../../node_modules/mdast-util-to-markdown/lib/handle/index.js", "../../../node_modules/mdast-util-to-markdown/lib/join.js", "../../../node_modules/mdast-util-to-markdown/lib/unsafe.js", "../../../node_modules/mdast-util-to-markdown/lib/util/association.js", "../../../node_modules/mdast-util-to-markdown/lib/util/compile-pattern.js", "../../../node_modules/mdast-util-to-markdown/lib/util/container-phrasing.js", "../../../node_modules/mdast-util-to-markdown/lib/util/container-flow.js", "../../../node_modules/mdast-util-to-markdown/lib/util/indent-lines.js", "../../../node_modules/mdast-util-to-markdown/lib/util/safe.js", "../../../node_modules/mdast-util-to-markdown/lib/util/track.js", "../../../node_modules/mdast-util-to-markdown/lib/index.js", "../../../node_modules/mdast-util-to-markdown/index.js", "../../components/editor/codemirror-tooltips-action/index.ts", "../../components/editor/codemirror-markdow-gutter/index.ts", "../../../node_modules/@codemirror/autocomplete/dist/index.js", "../../../node_modules/crelt/index.js", "../../../node_modules/@codemirror/search/dist/index.js", "../../../node_modules/prettier/standalone.mjs", "../../../node_modules/prettier/plugins/markdown.mjs", "../../components/editor/codemirror-suggestions/mention_node.ts", "../../../node_modules/emoji-mart/dist/packages/emoji-mart/src/index.ts", "../../../node_modules/emoji-mart/dist/packages/emoji-mart/src/components/Picker/index.ts", "../../../node_modules/emoji-mart/dist/packages/emoji-mart/src/components/Picker/Picker.tsx", "../../../node_modules/emoji-mart/dist/node_modules/@swc/helpers/src/_define_property.mjs", "../../../node_modules/emoji-mart/dist/node_modules/preact/jsx-runtime/dist/jsxRuntime.module.js", "../../../node_modules/emoji-mart/dist/node_modules/preact/jsx-runtime/src/index.js", "../../../node_modules/emoji-mart/dist/node_modules/preact/dist/preact.module.js", "../../../node_modules/emoji-mart/dist/node_modules/preact/src/constants.js", "../../../node_modules/emoji-mart/dist/node_modules/preact/src/util.js", "../../../node_modules/emoji-mart/dist/node_modules/preact/src/options.js", "../../../node_modules/emoji-mart/dist/node_modules/preact/src/create-element.js", "../../../node_modules/emoji-mart/dist/node_modules/preact/src/component.js", "../../../node_modules/emoji-mart/dist/node_modules/preact/src/create-context.js", "../../../node_modules/emoji-mart/dist/node_modules/preact/src/diff/children.js", "../../../node_modules/emoji-mart/dist/node_modules/preact/src/diff/props.js", "../../../node_modules/emoji-mart/dist/node_modules/preact/src/diff/index.js", "../../../node_modules/emoji-mart/dist/node_modules/preact/src/render.js", "../../../node_modules/emoji-mart/dist/node_modules/preact/src/clone-element.js", "../../../node_modules/emoji-mart/dist/node_modules/preact/src/diff/catch-error.js", "../../../node_modules/emoji-mart/dist/packages/emoji-mart/src/utils.ts", "../../../node_modules/emoji-mart/dist/packages/emoji-mart/src/helpers/index.ts", "../../../node_modules/emoji-mart/dist/packages/emoji-mart/src/helpers/store.ts", "../../../node_modules/emoji-mart/dist/packages/emoji-mart/src/helpers/native-support.ts", "../../../node_modules/emoji-mart/dist/packages/emoji-mart/src/helpers/frequently-used.ts", "../../../node_modules/emoji-mart/dist/packages/emoji-mart/src/helpers/search-index.ts", "../../../node_modules/emoji-mart/dist/packages/emoji-mart/src/config.ts", "../../../node_modules/emoji-mart/dist/packages/emoji-mart-data/i18n/en.json", "../../../node_modules/emoji-mart/dist/packages/emoji-mart/src/components/Picker/PickerProps.ts", "../../../node_modules/emoji-mart/dist/packages/emoji-mart/src/icons.tsx", "../../../node_modules/emoji-mart/dist/packages/emoji-mart/src/components/Emoji/index.ts", "../../../node_modules/emoji-mart/dist/packages/emoji-mart/src/components/Emoji/Emoji.tsx", "../../../node_modules/emoji-mart/dist/packages/emoji-mart/src/components/Emoji/EmojiElement.jsx", "../../../node_modules/emoji-mart/dist/packages/emoji-mart/src/components/HTMLElement/index.ts", "../../../node_modules/emoji-mart/dist/packages/emoji-mart/src/components/HTMLElement/HTMLElement.ts", "../../../node_modules/emoji-mart/dist/packages/emoji-mart/src/components/HTMLElement/ShadowElement.ts", "../../../node_modules/emoji-mart/dist/packages/emoji-mart/src/components/Emoji/EmojiProps.ts", "../../../node_modules/emoji-mart/dist/packages/emoji-mart/src/components/Navigation/index.ts", "../../../node_modules/emoji-mart/dist/packages/emoji-mart/src/components/Navigation/Navigation.tsx", "../../../node_modules/emoji-mart/dist/node_modules/preact/compat/dist/compat.module.js", "../../../node_modules/emoji-mart/dist/node_modules/preact/compat/src/util.js", "../../../node_modules/emoji-mart/dist/node_modules/preact/compat/src/PureComponent.js", "../../../node_modules/emoji-mart/dist/node_modules/preact/compat/src/memo.js", "../../../node_modules/emoji-mart/dist/node_modules/preact/compat/src/forwardRef.js", "../../../node_modules/emoji-mart/dist/node_modules/preact/compat/src/Children.js", "../../../node_modules/emoji-mart/dist/node_modules/preact/compat/src/suspense.js", "../../../node_modules/emoji-mart/dist/node_modules/preact/compat/src/suspense-list.js", "../../../node_modules/emoji-mart/dist/node_modules/preact/compat/src/portals.js", "../../../node_modules/emoji-mart/dist/node_modules/preact/compat/src/render.js", "../../../node_modules/emoji-mart/dist/node_modules/preact/compat/src/index.js", "../../../node_modules/emoji-mart/dist/node_modules/preact/hooks/dist/hooks.module.js", "../../../node_modules/emoji-mart/dist/node_modules/preact/hooks/src/index.js", "../../../node_modules/emoji-mart/dist/packages/emoji-mart/src/components/HOCs/index.ts", "../../../node_modules/emoji-mart/dist/packages/emoji-mart/src/components/HOCs/PureInlineComponent.ts", "../../../node_modules/emoji-mart/dist/packages/emoji-mart/src/components/Picker/PickerElement.tsx", "../../../node_modules/emoji-mart/dist/node_modules/@parcel/runtime-js/lib/bundles/runtime-1b9572f9f2947a02.js", "../../components/editor/codemirror-suggestions/emoji_node.ts", "../../components/editor/codemirror-suggestions/mention.ts", "../../../node_modules/@emoji-mart/data/sets/14/native.json", "../../components/editor/codemirror-suggestions/emojis.ts", "../../components/editor/codemirror-hyper-link/index.ts", "../../components/editor/codemirror-cmd/range-highlighting.js", "../../components/editor/codemirror-panels/file-panel.ts", "../../components/editor/codemirror-panels/image-panel.ts", "../../components/editor/codemirror-panels/emoji-panel.ts", "../../components/editor/codemirror-cmd/count-words.js", "../../components/editor/lezer-parser-markdown/nest.ts", "../../components/editor/lezer-parser-markdown/extension.ts", "../../components/editor/lezer-parser-markdown/index.ts", "../../../node_modules/@lezer/lr/dist/index.js", "../../../node_modules/@lezer/html/dist/index.js", "../../../node_modules/@lezer/css/dist/index.js", "../../../node_modules/@codemirror/lang-css/dist/index.js", "../../../node_modules/@lezer/javascript/dist/index.js", "../../../node_modules/@codemirror/lang-javascript/dist/index.js", "../../../node_modules/@codemirror/lang-html/dist/index.js", "../../components/editor/codemirror-lang-markdown/markdown.ts", "../../components/editor/codemirror-lang-markdown/commands.ts", "../../components/editor/codemirror-lang-markdown/index.ts", "../../../node_modules/micromark-extension-gfm-autolink-literal/lib/syntax.js", "../../../node_modules/micromark-extension-gfm-autolink-literal/lib/html.js", "../../../node_modules/micromark-extension-gfm-autolink-literal/index.js", "../../../node_modules/micromark-extension-gfm-footnote/lib/syntax.js", "../../../node_modules/micromark-extension-gfm-footnote/lib/html.js", "../../../node_modules/micromark-extension-gfm-footnote/index.js", "../../../node_modules/micromark-extension-gfm-strikethrough/lib/html.js", "../../../node_modules/micromark-extension-gfm-strikethrough/lib/syntax.js", "../../../node_modules/micromark-extension-gfm-strikethrough/index.js", "../../../node_modules/micromark-extension-gfm-table/lib/html.js", "../../../node_modules/micromark-extension-gfm-table/lib/edit-map.js", "../../../node_modules/micromark-extension-gfm-table/lib/infer.js", "../../../node_modules/micromark-extension-gfm-table/lib/syntax.js", "../../../node_modules/micromark-extension-gfm-table/index.js", "../../../node_modules/micromark-extension-gfm-tagfilter/lib/index.js", "../../../node_modules/micromark-extension-gfm-tagfilter/index.js", "../../../node_modules/micromark-extension-gfm-task-list-item/lib/html.js", "../../../node_modules/micromark-extension-gfm-task-list-item/lib/syntax.js", "../../../node_modules/micromark-extension-gfm-task-list-item/index.js", "../../../node_modules/micromark-extension-gfm/index.js", "../../components/editor/codemirror-preview-panel/index.ts", "../../components/editor/codemirror-floatmenu-widget/index.ts", "../../components/editor/codemirror-wrapper.ts", "../../../node_modules/@rails/request.js/src/fetch_response.js", "../../../node_modules/@rails/request.js/src/request_interceptor.js", "../../../node_modules/@rails/request.js/src/lib/utils.js", "../../../node_modules/@rails/request.js/src/fetch_request.js", "../../../node_modules/@rails/request.js/src/verbs.js", "../../../node_modules/@rails/request.js/src/index.js", "../../../node_modules/@yaireo/tagify/dist/tagify.min.js", "../../../node_modules/ethers/src.ts/_version.ts", "../../../node_modules/ethers/src.ts/utils/properties.ts", "../../../node_modules/ethers/src.ts/utils/errors.ts", "../../../node_modules/ethers/src.ts/utils/data.ts", "../../../node_modules/ethers/src.ts/utils/maths.ts", "../../../node_modules/ethers/src.ts/utils/base58.ts", "../../../node_modules/ethers/src.ts/utils/base64-browser.ts", "../../../node_modules/ethers/src.ts/utils/events.ts", "../../../node_modules/ethers/src.ts/utils/utf8.ts", "../../../node_modules/ethers/src.ts/utils/geturl-browser.ts", "../../../node_modules/ethers/src.ts/utils/fetch.ts", "../../../node_modules/ethers/src.ts/utils/fixednumber.ts", "../../../node_modules/ethers/src.ts/utils/rlp-decode.ts", "../../../node_modules/ethers/src.ts/utils/rlp-encode.ts", "../../../node_modules/ethers/src.ts/utils/units.ts", "../../../node_modules/ethers/src.ts/utils/uuid.ts", "../../../node_modules/ethers/src.ts/utils/index.ts", "../../../node_modules/ethers/src.ts/abi/coders/abstract-coder.ts", "../../../node_modules/@noble/hashes/src/_assert.ts", "../../../node_modules/@noble/hashes/src/crypto.ts", "../../../node_modules/@noble/hashes/src/utils.ts", "../../../node_modules/@noble/hashes/src/hmac.ts", "../../../node_modules/@noble/hashes/src/pbkdf2.ts", "../../../node_modules/@noble/hashes/src/_sha2.ts", "../../../node_modules/@noble/hashes/src/sha256.ts", "../../../node_modules/@noble/hashes/src/_u64.ts", "../../../node_modules/@noble/hashes/src/sha512.ts", "../../../node_modules/ethers/src.ts/crypto/crypto-browser.ts", "../../../node_modules/ethers/src.ts/crypto/hmac.ts", "../../../node_modules/@noble/hashes/src/sha3.ts", "../../../node_modules/ethers/src.ts/crypto/keccak.ts", "../../../node_modules/@noble/hashes/src/ripemd160.ts", "../../../node_modules/ethers/src.ts/crypto/ripemd160.ts", "../../../node_modules/ethers/src.ts/crypto/pbkdf2.ts", "../../../node_modules/ethers/src.ts/crypto/random.ts", "../../../node_modules/@noble/hashes/src/scrypt.ts", "../../../node_modules/ethers/src.ts/crypto/scrypt.ts", "../../../node_modules/ethers/src.ts/crypto/sha2.ts", "../../../node_modules/@noble/curves/src/abstract/utils.ts", "../../../node_modules/@noble/curves/src/abstract/modular.ts", "../../../node_modules/@noble/curves/src/abstract/curve.ts", "../../../node_modules/@noble/curves/src/abstract/weierstrass.ts", "../../../node_modules/@noble/curves/src/_shortw_utils.ts", "../../../node_modules/@noble/curves/src/secp256k1.ts", "../../../node_modules/ethers/src.ts/constants/addresses.ts", "../../../node_modules/ethers/src.ts/constants/hashes.ts", "../../../node_modules/ethers/src.ts/constants/numbers.ts", "../../../node_modules/ethers/src.ts/constants/strings.ts", "../../../node_modules/ethers/src.ts/constants/index.ts", "../../../node_modules/ethers/src.ts/crypto/signature.ts", "../../../node_modules/ethers/src.ts/crypto/signing-key.ts", "../../../node_modules/ethers/src.ts/crypto/index.ts", "../../../node_modules/ethers/src.ts/address/address.ts", "../../../node_modules/ethers/src.ts/address/contract-address.ts", "../../../node_modules/ethers/src.ts/address/checks.ts", "../../../node_modules/ethers/src.ts/address/index.ts", "../../../node_modules/ethers/src.ts/abi/typed.ts", "../../../node_modules/ethers/src.ts/abi/coders/address.ts", "../../../node_modules/ethers/src.ts/abi/coders/anonymous.ts", "../../../node_modules/ethers/src.ts/abi/coders/array.ts", "../../../node_modules/ethers/src.ts/abi/coders/boolean.ts", "../../../node_modules/ethers/src.ts/abi/coders/bytes.ts", "../../../node_modules/ethers/src.ts/abi/coders/fixed-bytes.ts", "../../../node_modules/ethers/src.ts/abi/coders/null.ts", "../../../node_modules/ethers/src.ts/abi/coders/number.ts", "../../../node_modules/ethers/src.ts/abi/coders/string.ts", "../../../node_modules/ethers/src.ts/abi/coders/tuple.ts", "../../../node_modules/ethers/src.ts/hash/id.ts", "../../../node_modules/@adraffy/ens-normalize/dist/index.mjs", "../../../node_modules/ethers/src.ts/hash/namehash.ts", "../../../node_modules/ethers/src.ts/transaction/accesslist.ts", "../../../node_modules/ethers/src.ts/transaction/address.ts", "../../../node_modules/ethers/src.ts/transaction/transaction.ts", "../../../node_modules/ethers/src.ts/transaction/index.ts", "../../../node_modules/ethers/src.ts/hash/message.ts", "../../../node_modules/ethers/src.ts/hash/solidity.ts", "../../../node_modules/ethers/src.ts/hash/typed-data.ts", "../../../node_modules/ethers/src.ts/hash/index.ts", "../../../node_modules/ethers/src.ts/abi/fragments.ts", "../../../node_modules/ethers/src.ts/abi/abi-coder.ts", "../../../node_modules/ethers/src.ts/abi/bytes32.ts", "../../../node_modules/ethers/src.ts/abi/interface.ts", "../../../node_modules/ethers/src.ts/abi/index.ts", "../../../node_modules/ethers/src.ts/providers/provider.ts", "../../../node_modules/ethers/src.ts/contract/wrappers.ts", "../../../node_modules/ethers/src.ts/contract/contract.ts", "../../../node_modules/ethers/src.ts/contract/factory.ts", "../../../node_modules/ethers/src.ts/contract/index.ts", "../../../node_modules/ethers/src.ts/providers/ens-resolver.ts", "../../../node_modules/ethers/src.ts/providers/format.ts", "../../../node_modules/ethers/src.ts/providers/plugins-network.ts", "../../../node_modules/ethers/src.ts/providers/network.ts", "../../../node_modules/ethers/src.ts/providers/subscriber-polling.ts", "../../../node_modules/ethers/src.ts/providers/abstract-provider.ts", "../../../node_modules/ethers/src.ts/providers/abstract-signer.ts", "../../../node_modules/ethers/src.ts/providers/community.ts", "../../../node_modules/ethers/src.ts/providers/subscriber-filterid.ts", "../../../node_modules/ethers/src.ts/providers/provider-jsonrpc.ts", "../../../node_modules/ethers/src.ts/providers/provider-ankr.ts", "../../../node_modules/ethers/src.ts/providers/provider-alchemy.ts", "../../../node_modules/ethers/src.ts/providers/provider-cloudflare.ts", "../../../node_modules/ethers/src.ts/providers/provider-etherscan.ts", "../../../node_modules/ethers/src.ts/providers/ws-browser.ts", "../../../node_modules/ethers/src.ts/providers/provider-socket.ts", "../../../node_modules/ethers/src.ts/providers/provider-websocket.ts", "../../../node_modules/ethers/src.ts/providers/provider-infura.ts", "../../../node_modules/ethers/src.ts/providers/provider-quicknode.ts", "../../../node_modules/ethers/src.ts/providers/provider-fallback.ts", "../../../node_modules/ethers/src.ts/providers/default-provider.ts", "../../../node_modules/ethers/src.ts/providers/signer-noncemanager.ts", "../../../node_modules/ethers/src.ts/providers/provider-browser.ts", "../../../node_modules/ethers/src.ts/providers/provider-pocket.ts", "../../../node_modules/ethers/src.ts/providers/provider-ipcsocket-browser.ts", "../../../node_modules/ethers/src.ts/providers/index.ts", "../../../node_modules/ethers/src.ts/wallet/base-wallet.ts", "../../../node_modules/ethers/src.ts/wordlists/decode-owl.ts", "../../../node_modules/ethers/src.ts/wordlists/wordlist.ts", "../../../node_modules/ethers/src.ts/wordlists/wordlist-owl.ts", "../../../node_modules/ethers/src.ts/wordlists/lang-en.ts", "../../../node_modules/ethers/src.ts/wallet/mnemonic.ts", "../../../node_modules/aes-js/src.ts/aes.ts", "../../../node_modules/aes-js/src.ts/mode.ts", "../../../node_modules/aes-js/src.ts/mode-cbc.ts", "../../../node_modules/aes-js/src.ts/mode-cfb.ts", "../../../node_modules/aes-js/src.ts/mode-ctr.ts", "../../../node_modules/aes-js/src.ts/mode-ecb.ts", "../../../node_modules/aes-js/src.ts/mode-ofb.ts", "../../../node_modules/aes-js/src.ts/padding.ts", "../../../node_modules/aes-js/src.ts/index.ts", "../../../node_modules/ethers/src.ts/wallet/utils.ts", "../../../node_modules/ethers/src.ts/wallet/json-keystore.ts", "../../../node_modules/ethers/src.ts/wallet/hdwallet.ts", "../../../node_modules/ethers/src.ts/wallet/json-crowdsale.ts", "../../../node_modules/ethers/src.ts/wallet/wallet.ts", "../../../node_modules/ethers/src.ts/wallet/index.ts", "../../../node_modules/ethers/src.ts/wordlists/bit-reader.ts", "../../../node_modules/ethers/src.ts/wordlists/decode-owla.ts", "../../../node_modules/ethers/src.ts/wordlists/wordlist-owla.ts", "../../../node_modules/ethers/src.ts/wordlists/wordlists-browser.ts", "../../../node_modules/ethers/src.ts/wordlists/index.ts", "../../../node_modules/ethers/src.ts/ethers.ts", "../../../node_modules/ethers/src.ts/index.ts", "../../../node_modules/notyf/notyf.es.js", "../../javascript/controllers/gairdao_controller.js", "../../components/editor/editor_controller.js", "../../components/index.js", "../../javascript/commons/codemirror-themes/light-autocomplete-theme.ts", "../../javascript/commons/codemirror-themes/light-search-panel-theme.ts", "../../javascript/commons/codemirror-themes/light-theme.ts", "../../javascript/commons/codemirror-themes/dark-autocomplete-theme.ts", "../../javascript/commons/codemirror-themes/dark-search-panel-theme.ts", "../../javascript/commons/codemirror-themes/dark-theme.ts", "../../javascript/commons/codemirror-drop-fold-gutter/index.ts", "../../javascript/commons/codemirror-helper.ts", "../../javascript/commons/lezer-parser-markdown/markdown.ts", "../../javascript/commons/codemirror-markdow-gutter/icons.ts", "../../javascript/commons/codemirror-tooltips-action/index.ts", "../../javascript/commons/codemirror-markdow-gutter/index.ts", "../../javascript/commons/codemirror-suggestions/mention_node.ts", "../../javascript/commons/codemirror-suggestions/emoji_node.ts", "../../javascript/commons/codemirror-suggestions/mention.ts", "../../javascript/commons/codemirror-suggestions/emojis.ts", "../../javascript/commons/codemirror-hyper-link/index.ts", "../../javascript/commons/codemirror-cmd/range-highlighting.js", "../../javascript/commons/codemirror-cmd/toolbar-panel.js", "../../javascript/commons/codemirror-cmd/count-words.js", "../../javascript/commons/lezer-parser-markdown/nest.ts", "../../javascript/commons/lezer-parser-markdown/extension.ts", "../../javascript/commons/lezer-parser-markdown/index.ts", "../../javascript/commons/codemirror-lang-markdown/markdown.ts", "../../javascript/commons/codemirror-lang-markdown/commands.ts", "../../javascript/commons/codemirror-lang-markdown/index.ts", "../../javascript/commons/codemirror-preview-panel/index.ts", "../../javascript/commons/codemirror-wrapper.ts", "../../javascript/controllers/articles/article_form_component_controller.js", "../../javascript/controllers/articles/article_controller.js", "../../javascript/controllers/articles/articles_controller.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/webpack/universalModuleDefinition", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/webpack/bootstrap", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/@babel/runtime-corejs3/helpers/interopRequireDefault.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/@babel/runtime-corejs3/core-js-stable/object/define-property.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/tslib/tslib.es6.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/utils/dom-core.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/@babel/runtime-corejs3/core-js-stable/instance/for-each.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/export.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/utils/util.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/utils/const.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/global.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/path.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/well-known-symbol.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/fails.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/define-well-known-symbol.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/is-object.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/descriptors.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/entry-virtual.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/has.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/@babel/runtime-corejs3/core-js-stable/instance/trim.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/object-define-property.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/create-non-enumerable-property.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/css-loader/dist/runtime/api.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/array-method-uses-to-length.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/menus/menu-constructors/BtnMenu.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/menus/menu-constructors/DropListMenu.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/an-object.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/@babel/runtime-corejs3/core-js-stable/instance/map.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/@babel/runtime-corejs3/core-js-stable/instance/index-of.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/@babel/runtime-corejs3/core-js-stable/instance/includes.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/@babel/runtime-corejs3/core-js-stable/instance/find.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/to-indexed-object.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/to-object.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/array-iteration.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/menus/menu-constructors/Panel.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/classof-raw.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/to-length.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/get-built-in.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/set-to-string-tag.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/menus/menu-constructors/PanelMenu.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/menus/menu-constructors/Tooltip.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/function-bind-context.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/a-function.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/internal-state.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/is-pure.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/iterators.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/@babel/runtime-corejs3/core-js-stable/instance/slice.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/@babel/runtime-corejs3/core-js-stable/set-timeout.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/menus/list/utils.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/create-property-descriptor.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/require-object-coercible.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/modules/es.string.iterator.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/hidden-keys.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/object-keys.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/redefine.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/modules/web.dom-collections.iterator.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/is-array.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/array-method-has-species-support.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/@babel/runtime-corejs3/core-js-stable/instance/bind.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/menus/list/ListHandle/ListHandle.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/object-property-is-enumerable.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/to-primitive.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/modules/es.object.to-string.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/to-integer.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/shared-key.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/uid.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/classof.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/iterate.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/array-method-is-strict.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/whitespaces.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/create-property.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/@babel/runtime-corejs3/core-js-stable/instance/filter.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/object-get-own-property-descriptor.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/indexed-object.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/document-create-element.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/shared.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/define-iterator.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/native-symbol.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/object-create.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/array-includes.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/to-absolute-index.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/enum-bug-keys.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/to-string-tag-support.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/add-to-unscopables.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/an-instance.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/engine-user-agent.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/new-promise-capability.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/engine-v8-version.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/editor/index.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/array-species-create.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/@babel/runtime-corejs3/core-js-stable/array/is-array.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/string-trim.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/@babel/runtime-corejs3/core-js-stable/instance/splice.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/@babel/runtime-corejs3/helpers/typeof.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/well-known-symbol-wrapped.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/@babel/runtime-corejs3/core-js-stable/object/entries.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/menus/menu-constructors/Menu.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/menus/link/is-active.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/menus/img/upload-img.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/menus/todo/util.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/utils/data-structure/cache.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/ie8-dom-define.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/is-forced.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/inspect-source.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/shared-store.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/iterators-core.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/object-get-prototype-of.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/use-symbol-as-uid.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/object-keys-internal.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/html.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/native-promise-constructor.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/redefine-all.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/set-species.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/is-array-iterator-method.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/get-iterator-method.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/call-with-safe-iteration-closing.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/check-correctness-of-iteration.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/species-constructor.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/task.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/engine-is-ios.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/promise-resolve.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/perform.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/@babel/runtime-corejs3/core-js-stable/map.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/collection.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/internal-metadata.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/collection-strong.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/modules/es.symbol.iterator.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/object-get-own-property-names.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/object-get-own-property-symbols.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/@babel/runtime-corejs3/core-js-stable/object/assign.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/config/style.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/config/text.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/text/paste/paste-event.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/@babel/runtime-corejs3/core-js-stable/set.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/@babel/runtime-corejs3/core-js-stable/instance/some.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/menus/menu-constructors/DropList.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/editor/upload/upload-core.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/editor/upload/progress.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/menus/list/index.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/@babel/runtime-corejs3/core-js-stable/array/from.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/menus/code/is-active.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/menus/todo/todo.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/wangEditor.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/stable/object/define-property.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/es/object/define-property.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/modules/es.object.define-property.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/(webpack)/buildin/global.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/assets/style/common.less?4672", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/assets/style/common.less", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/assets/style/icon.less?c1d5", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/assets/style/icon.less", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/css-loader/dist/runtime/getUrl.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/assets/font/w-e-icon.woff", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/assets/style/menus.less?3c63", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/assets/style/menus.less", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/assets/style/text.less?71cc", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/assets/style/text.less", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/assets/style/panel.less?63fd", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/assets/style/panel.less", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/assets/style/droplist.less?4262", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/assets/style/droplist.less", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/utils/polyfill.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/@babel/runtime-corejs3/core-js-stable/promise.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/stable/promise/index.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/es/promise/index.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/string-multibyte.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/native-weak-map.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/set-global.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/create-iterator-constructor.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/correct-prototype-getter.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/object-define-properties.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/object-to-string.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/object-set-prototype-of.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/a-possible-prototype.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/modules/es.array.iterator.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/dom-iterables.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/modules/es.promise.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/microtask.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/host-report-errors.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/modules/es.promise.all-settled.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/modules/es.promise.finally.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/stable/instance/for-each.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/stable/array/virtual/for-each.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/es/array/virtual/for-each.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/modules/es.array.for-each.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/array-for-each.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/stable/array/is-array.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/es/array/is-array.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/modules/es.array.is-array.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/stable/instance/map.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/es/instance/map.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/es/array/virtual/map.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/modules/es.array.map.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/stable/instance/trim.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/es/instance/trim.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/es/string/virtual/trim.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/modules/es.string.trim.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/string-trim-forced.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/stable/map/index.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/es/map/index.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/modules/es.map.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/freezing.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/stable/instance/index-of.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/es/instance/index-of.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/es/array/virtual/index-of.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/modules/es.array.index-of.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/stable/instance/splice.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/es/instance/splice.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/es/array/virtual/splice.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/modules/es.array.splice.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/stable/instance/filter.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/es/instance/filter.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/es/array/virtual/filter.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/modules/es.array.filter.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/stable/instance/includes.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/es/instance/includes.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/es/array/virtual/includes.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/modules/es.array.includes.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/es/string/virtual/includes.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/modules/es.string.includes.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/not-a-regexp.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/is-regexp.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/correct-is-regexp-logic.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/stable/instance/bind.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/es/instance/bind.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/es/function/virtual/bind.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/modules/es.function.bind.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/function-bind.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/@babel/runtime-corejs3/core-js/symbol/iterator.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/features/symbol/iterator.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/es/symbol/iterator.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/@babel/runtime-corejs3/core-js/symbol.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/features/symbol/index.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/es/symbol/index.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/modules/es.array.concat.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/modules/es.symbol.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/object-get-own-property-names-external.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/modules/es.symbol.async-iterator.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/modules/es.symbol.description.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/modules/es.symbol.has-instance.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/modules/es.symbol.is-concat-spreadable.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/modules/es.symbol.match.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/modules/es.symbol.match-all.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/modules/es.symbol.replace.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/modules/es.symbol.search.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/modules/es.symbol.species.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/modules/es.symbol.split.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/modules/es.symbol.to-primitive.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/modules/es.symbol.to-string-tag.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/modules/es.symbol.unscopables.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/modules/es.math.to-string-tag.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/modules/es.json.to-string-tag.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/modules/esnext.symbol.async-dispose.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/modules/esnext.symbol.dispose.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/modules/esnext.symbol.observable.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/modules/esnext.symbol.pattern-match.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/modules/esnext.symbol.replace-all.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/@babel/runtime-corejs3/core-js-stable/parse-int.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/stable/parse-int.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/es/parse-int.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/modules/es.parse-int.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/number-parse-int.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/stable/instance/slice.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/es/instance/slice.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/es/array/virtual/slice.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/modules/es.array.slice.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/stable/set-timeout.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/modules/web.timers.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/config/index.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/stable/object/assign.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/es/object/assign.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/modules/es.object.assign.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/object-assign.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/config/menus.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/config/events.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/config/paste.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/config/cmd.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/config/image.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/config/lang.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/config/history.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/config/video.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/editor/selection.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/editor/command.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/text/index.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/stable/instance/find.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/es/instance/find.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/es/array/virtual/find.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/modules/es.array.find.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/text/event-hooks/index.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/text/event-hooks/enter-to-create-p.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/text/event-hooks/del-to-keep-p.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/text/event-hooks/tab-to-space.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/text/event-hooks/paste-text-html.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/text/paste/parse-html.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/text/paste/tags.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/stable/set/index.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/es/set/index.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/modules/es.set.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/lib/simplehtmlparser.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/text/event-hooks/img-click-active.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/text/getChildrenJSON.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/text/getHtmlByNodeList.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/menus/index.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/@babel/runtime-corejs3/core-js-stable/object/keys.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/stable/object/keys.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/es/object/keys.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/modules/es.object.keys.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/stable/object/entries.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/es/object/entries.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/modules/es.object.entries.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/object-to-array.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/stable/instance/some.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/es/instance/some.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/es/array/virtual/some.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/modules/es.array.some.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/menus/menu-list.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/menus/bold/index.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/menus/head/index.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/@babel/runtime-corejs3/core-js-stable/json/stringify.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/stable/json/stringify.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/es/json/stringify.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/modules/es.json.stringify.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/menus/link/index.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/menus/link/create-panel-conf.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/menus/link/util.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/menus/link/bind-event/index.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/menus/link/bind-event/tooltip-event.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/menus/italic/index.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/menus/underline/index.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/menus/strike-through/index.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/menus/font-style/index.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/menus/font-style/FontStyleList.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/menus/font-size/index.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/menus/font-size/FontSizeList.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/menus/justify/index.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/menus/quote/index.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/menus/quote/bind-event/index.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/menus/quote/create-quote-node.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/menus/back-color/index.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/menus/font-color/index.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/menus/video/index.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/menus/video/create-panel-conf.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/menus/video/upload-video.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/@babel/runtime-corejs3/core-js-stable/date/now.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/stable/date/now.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/es/date/now.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/modules/es.date.now.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/menus/video/bind-event/index.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/menus/video/bind-event/tooltip-event.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/menus/video/bind-event/video-alignment.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/menus/video/bind-event/keyboard.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/menus/img/index.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/menus/img/bind-event/index.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/menus/img/bind-event/paste-img.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/menus/img/bind-event/drop-img.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/menus/img/bind-event/drag-size.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/@babel/runtime-corejs3/core-js-stable/parse-float.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/stable/parse-float.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/es/parse-float.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/modules/es.parse-float.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/number-parse-float.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/assets/style/drag-size.less?198e", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/assets/style/drag-size.less", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/menus/img/bind-event/tooltip-event.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/menus/img/bind-event/keyboard-event.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/menus/img/create-panel-conf.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/menus/indent/index.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/menus/indent/operate-element.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/menus/indent/increase-indent-style.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/menus/indent/decrease-indent-style.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/menus/emoticon/index.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/menus/emoticon/create-panel-conf.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/menus/list/ListHandle/index.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/menus/list/ListHandle/WrapListHandle.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/menus/list/SelectionRangeElem.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/menus/list/ListHandle/JoinListHandle.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/menus/list/ListHandle/StartJoinListHandle.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/menus/list/ListHandle/EndJoinListHandle.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/menus/list/ListHandle/OtherListHandle.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/menus/lineHeight/index.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/menus/lineHeight/lineHeightList.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/menus/undo/index.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/menus/redo/index.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/menus/table/index.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/menus/table/create-panel-conf.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/@babel/runtime-corejs3/core-js-stable/number/is-integer.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/stable/number/is-integer.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/es/number/is-integer.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/modules/es.number.is-integer.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/is-integer.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/assets/style/create-panel-conf.less?d818", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/assets/style/create-panel-conf.less", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/menus/table/create-table.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/menus/table/bind-event/index.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/menus/table/bind-event/tooltip-event.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/menus/table/bind-event/event/operating-event.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/stable/array/from.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/es/array/from.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/modules/es.array.from.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/internals/array-from.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/menus/table/bind-event/event/getNode.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/menus/table/bind-event/table-event.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/menus/code/index.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/menus/code/create-panel-conf.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/menus/code/bind-event/index.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/menus/code/bind-event/tooltip-event.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/menus/code/bind-event/jump-code-block-down.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/menus/split-line/index.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/menus/split-line/bind-event/index.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/menus/split-line/bind-event/tooltip-event.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/menus/todo/index.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/@babel/runtime-corejs3/core-js-stable/instance/every.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/stable/instance/every.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/es/instance/every.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/es/array/virtual/every.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/node_modules/core-js-pure/modules/es.array.every.js", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/menus/todo/bind-event/index.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/editor/init-fns/init-dom.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/editor/init-fns/init-selection.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/editor/init-fns/bind-event.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/editor/init-fns/i18next-init.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/editor/init-fns/set-full-screen.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/assets/style/full-screen.less?b9eb", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/assets/style/full-screen.less", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/editor/init-fns/scroll-to-head.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/editor/z-index/index.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/editor/change/index.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/utils/observer/mutation.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/editor/history/index.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/editor/history/data/content.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/editor/history/data/node/index.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/utils/data-structure/stack.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/editor/history/data/node/compile.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/editor/history/data/node/decompilation.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/editor/history/data/html/index.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/utils/data-structure/chain.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/editor/history/data/scroll/index.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/editor/history/data/range/index.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/editor/disable/index.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/assets/style/disable.less?38a7", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/assets/style/disable.less", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/editor/selection-change/index.ts", "../../../node_modules/wangeditor/dist/webpack:/wangEditor/src/plugins/index.ts", "../../javascript/controllers/posts/post_form_component_controller.js", "../../javascript/controllers/posts/post_controller.js", "../../javascript/controllers/posts/posts_controller.js", "../../../node_modules/autosize/dist/autosize.esm.js", "../../javascript/controllers/comments/comments_controller.js", "../../javascript/controllers/comments/comment_controller.js", "../../../node_modules/choices.js/public/assets/scripts/choices.js", "../../javascript/controllers/users/registration_steps/profile_form_controller.js", "../../javascript/controllers/communities/group_form_controller.js", "../../javascript/commons/sticky.js", "../../javascript/controllers/main_app_controller.js", "../../../node_modules/stimulus-use/dist/index.js", "../../javascript/controllers/groups/collections_sidebar_controller.js", "../../../node_modules/@simonwep/pickr/dist/webpack:/webpack/universalModuleDefinition", "../../../node_modules/@simonwep/pickr/dist/webpack:/webpack/bootstrap", "../../../node_modules/@simonwep/pickr/dist/webpack:/webpack/runtime/define property getters", "../../../node_modules/@simonwep/pickr/dist/webpack:/webpack/runtime/hasOwnProperty shorthand", "../../../node_modules/@simonwep/pickr/dist/webpack:/webpack/runtime/make namespace object", "../../../node_modules/@simonwep/pickr/dist/webpack:/src/js/utils/utils.js", "../../../node_modules/@simonwep/pickr/dist/webpack:/src/js/utils/color.js", "../../../node_modules/@simonwep/pickr/dist/webpack:/src/js/utils/hsvacolor.js", "../../../node_modules/@simonwep/pickr/dist/webpack:/src/js/libs/moveable.js", "../../../node_modules/@simonwep/pickr/dist/webpack:/src/js/libs/selectable.js", "../../../node_modules/@simonwep/pickr/dist/webpack:/src/js/template.js", "../../../node_modules/@simonwep/pickr/dist/src/index.ts", "../../../node_modules/@simonwep/pickr/dist/webpack:/src/js/pickr.js", "../../javascript/controllers/groups/collection_form_controller.js", "../../javascript/controllers/groups/document_form_controller.js", "../../javascript/controllers/groups/collection_controller.js", "../../javascript/controllers/groups/group_overview_form_controller.js", "../../javascript/controllers/groups/group_controller.js", "../../javascript/controllers/groups/conferences_controller.js", "../../javascript/controllers/groups/conference_controller.js", "../../javascript/controllers/groups/conferences_sidebar_controller.js", "../../javascript/controllers/groups/conferences/member_form_controller.js", "../../javascript/controllers/groups/conferences/members_controller.js", "../../javascript/controllers/groups/conferences/program_agendas_controller.js", "../../javascript/controllers/groups/conferences/topic_form_controller.js", "../../javascript/controllers/groups/conferences/member_group_controller.js", "../../javascript/controllers/groups/conferences/organization_form_controller.js", "../../javascript/controllers/groups/conferences/conference_form_controller.js", "../../javascript/controllers/groups/conferences/registrations_controller.js", "../../javascript/controllers/groups/conferences/ticket_types_controller.js", "../../javascript/controllers/groups/conferences/channel_form_controller.js", "../../javascript/controllers/groups/conferences/channels_controller.js", "../../javascript/controllers/groups/conferences/invite_community_users_controller.js", "../../javascript/controllers/groups/conferences/orders_controller.js", "../../javascript/controllers/videos/youtube_oembed_controller.js", "../../javascript/controllers/metamask_controller.js", "../../javascript/controllers/shopping_cart_controller.js", "../../javascript/controllers/index.js", "../../javascript/config/activestorage.js", "../../../node_modules/turbo_power/dist/turbo_power.js", "../../javascript/config/turbo_power.js", "../../javascript/config/index.js", "../../../node_modules/@rails/actioncable/app/assets/javascripts/actioncable.esm.js", "../../javascript/channels/consumer.js", "../../javascript/channels/notification_channel.js", "../../javascript/channels/sync_progress_channel.js", "../../javascript/channels/index.js", "../../javascript/application.js"],
  "sourcesContent": ["/*\nTurbo 7.3.0\nCopyright \u00A9 2023 37signals LLC\n */\n(function () {\n    if (window.Reflect === undefined ||\n        window.customElements === undefined ||\n        window.customElements.polyfillWrapFlushCallback) {\n        return;\n    }\n    const BuiltInHTMLElement = HTMLElement;\n    const wrapperForTheName = {\n        HTMLElement: function HTMLElement() {\n            return Reflect.construct(BuiltInHTMLElement, [], this.constructor);\n        },\n    };\n    window.HTMLElement = wrapperForTheName[\"HTMLElement\"];\n    HTMLElement.prototype = BuiltInHTMLElement.prototype;\n    HTMLElement.prototype.constructor = HTMLElement;\n    Object.setPrototypeOf(HTMLElement, BuiltInHTMLElement);\n})();\n\n/**\n * The MIT License (MIT)\n * \n * Copyright (c) 2019 Javan Makhmali\n * \n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n * \n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n * \n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\n(function(prototype) {\n  if (typeof prototype.requestSubmit == \"function\") return\n\n  prototype.requestSubmit = function(submitter) {\n    if (submitter) {\n      validateSubmitter(submitter, this);\n      submitter.click();\n    } else {\n      submitter = document.createElement(\"input\");\n      submitter.type = \"submit\";\n      submitter.hidden = true;\n      this.appendChild(submitter);\n      submitter.click();\n      this.removeChild(submitter);\n    }\n  };\n\n  function validateSubmitter(submitter, form) {\n    submitter instanceof HTMLElement || raise(TypeError, \"parameter 1 is not of type 'HTMLElement'\");\n    submitter.type == \"submit\" || raise(TypeError, \"The specified element is not a submit button\");\n    submitter.form == form || raise(DOMException, \"The specified element is not owned by this form element\", \"NotFoundError\");\n  }\n\n  function raise(errorConstructor, message, name) {\n    throw new errorConstructor(\"Failed to execute 'requestSubmit' on 'HTMLFormElement': \" + message + \".\", name)\n  }\n})(HTMLFormElement.prototype);\n\nconst submittersByForm = new WeakMap();\nfunction findSubmitterFromClickTarget(target) {\n    const element = target instanceof Element ? target : target instanceof Node ? target.parentElement : null;\n    const candidate = element ? element.closest(\"input, button\") : null;\n    return (candidate === null || candidate === void 0 ? void 0 : candidate.type) == \"submit\" ? candidate : null;\n}\nfunction clickCaptured(event) {\n    const submitter = findSubmitterFromClickTarget(event.target);\n    if (submitter && submitter.form) {\n        submittersByForm.set(submitter.form, submitter);\n    }\n}\n(function () {\n    if (\"submitter\" in Event.prototype)\n        return;\n    let prototype = window.Event.prototype;\n    if (\"SubmitEvent\" in window && /Apple Computer/.test(navigator.vendor)) {\n        prototype = window.SubmitEvent.prototype;\n    }\n    else if (\"SubmitEvent\" in window) {\n        return;\n    }\n    addEventListener(\"click\", clickCaptured, true);\n    Object.defineProperty(prototype, \"submitter\", {\n        get() {\n            if (this.type == \"submit\" && this.target instanceof HTMLFormElement) {\n                return submittersByForm.get(this.target);\n            }\n        },\n    });\n})();\n\nvar FrameLoadingStyle;\n(function (FrameLoadingStyle) {\n    FrameLoadingStyle[\"eager\"] = \"eager\";\n    FrameLoadingStyle[\"lazy\"] = \"lazy\";\n})(FrameLoadingStyle || (FrameLoadingStyle = {}));\nclass FrameElement extends HTMLElement {\n    static get observedAttributes() {\n        return [\"disabled\", \"complete\", \"loading\", \"src\"];\n    }\n    constructor() {\n        super();\n        this.loaded = Promise.resolve();\n        this.delegate = new FrameElement.delegateConstructor(this);\n    }\n    connectedCallback() {\n        this.delegate.connect();\n    }\n    disconnectedCallback() {\n        this.delegate.disconnect();\n    }\n    reload() {\n        return this.delegate.sourceURLReloaded();\n    }\n    attributeChangedCallback(name) {\n        if (name == \"loading\") {\n            this.delegate.loadingStyleChanged();\n        }\n        else if (name == \"complete\") {\n            this.delegate.completeChanged();\n        }\n        else if (name == \"src\") {\n            this.delegate.sourceURLChanged();\n        }\n        else {\n            this.delegate.disabledChanged();\n        }\n    }\n    get src() {\n        return this.getAttribute(\"src\");\n    }\n    set src(value) {\n        if (value) {\n            this.setAttribute(\"src\", value);\n        }\n        else {\n            this.removeAttribute(\"src\");\n        }\n    }\n    get loading() {\n        return frameLoadingStyleFromString(this.getAttribute(\"loading\") || \"\");\n    }\n    set loading(value) {\n        if (value) {\n            this.setAttribute(\"loading\", value);\n        }\n        else {\n            this.removeAttribute(\"loading\");\n        }\n    }\n    get disabled() {\n        return this.hasAttribute(\"disabled\");\n    }\n    set disabled(value) {\n        if (value) {\n            this.setAttribute(\"disabled\", \"\");\n        }\n        else {\n            this.removeAttribute(\"disabled\");\n        }\n    }\n    get autoscroll() {\n        return this.hasAttribute(\"autoscroll\");\n    }\n    set autoscroll(value) {\n        if (value) {\n            this.setAttribute(\"autoscroll\", \"\");\n        }\n        else {\n            this.removeAttribute(\"autoscroll\");\n        }\n    }\n    get complete() {\n        return !this.delegate.isLoading;\n    }\n    get isActive() {\n        return this.ownerDocument === document && !this.isPreview;\n    }\n    get isPreview() {\n        var _a, _b;\n        return (_b = (_a = this.ownerDocument) === null || _a === void 0 ? void 0 : _a.documentElement) === null || _b === void 0 ? void 0 : _b.hasAttribute(\"data-turbo-preview\");\n    }\n}\nfunction frameLoadingStyleFromString(style) {\n    switch (style.toLowerCase()) {\n        case \"lazy\":\n            return FrameLoadingStyle.lazy;\n        default:\n            return FrameLoadingStyle.eager;\n    }\n}\n\nfunction expandURL(locatable) {\n    return new URL(locatable.toString(), document.baseURI);\n}\nfunction getAnchor(url) {\n    let anchorMatch;\n    if (url.hash) {\n        return url.hash.slice(1);\n    }\n    else if ((anchorMatch = url.href.match(/#(.*)$/))) {\n        return anchorMatch[1];\n    }\n}\nfunction getAction(form, submitter) {\n    const action = (submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"formaction\")) || form.getAttribute(\"action\") || form.action;\n    return expandURL(action);\n}\nfunction getExtension(url) {\n    return (getLastPathComponent(url).match(/\\.[^.]*$/) || [])[0] || \"\";\n}\nfunction isHTML(url) {\n    return !!getExtension(url).match(/^(?:|\\.(?:htm|html|xhtml|php))$/);\n}\nfunction isPrefixedBy(baseURL, url) {\n    const prefix = getPrefix(url);\n    return baseURL.href === expandURL(prefix).href || baseURL.href.startsWith(prefix);\n}\nfunction locationIsVisitable(location, rootLocation) {\n    return isPrefixedBy(location, rootLocation) && isHTML(location);\n}\nfunction getRequestURL(url) {\n    const anchor = getAnchor(url);\n    return anchor != null ? url.href.slice(0, -(anchor.length + 1)) : url.href;\n}\nfunction toCacheKey(url) {\n    return getRequestURL(url);\n}\nfunction urlsAreEqual(left, right) {\n    return expandURL(left).href == expandURL(right).href;\n}\nfunction getPathComponents(url) {\n    return url.pathname.split(\"/\").slice(1);\n}\nfunction getLastPathComponent(url) {\n    return getPathComponents(url).slice(-1)[0];\n}\nfunction getPrefix(url) {\n    return addTrailingSlash(url.origin + url.pathname);\n}\nfunction addTrailingSlash(value) {\n    return value.endsWith(\"/\") ? value : value + \"/\";\n}\n\nclass FetchResponse {\n    constructor(response) {\n        this.response = response;\n    }\n    get succeeded() {\n        return this.response.ok;\n    }\n    get failed() {\n        return !this.succeeded;\n    }\n    get clientError() {\n        return this.statusCode >= 400 && this.statusCode <= 499;\n    }\n    get serverError() {\n        return this.statusCode >= 500 && this.statusCode <= 599;\n    }\n    get redirected() {\n        return this.response.redirected;\n    }\n    get location() {\n        return expandURL(this.response.url);\n    }\n    get isHTML() {\n        return this.contentType && this.contentType.match(/^(?:text\\/([^\\s;,]+\\b)?html|application\\/xhtml\\+xml)\\b/);\n    }\n    get statusCode() {\n        return this.response.status;\n    }\n    get contentType() {\n        return this.header(\"Content-Type\");\n    }\n    get responseText() {\n        return this.response.clone().text();\n    }\n    get responseHTML() {\n        if (this.isHTML) {\n            return this.response.clone().text();\n        }\n        else {\n            return Promise.resolve(undefined);\n        }\n    }\n    header(name) {\n        return this.response.headers.get(name);\n    }\n}\n\nfunction activateScriptElement(element) {\n    if (element.getAttribute(\"data-turbo-eval\") == \"false\") {\n        return element;\n    }\n    else {\n        const createdScriptElement = document.createElement(\"script\");\n        const cspNonce = getMetaContent(\"csp-nonce\");\n        if (cspNonce) {\n            createdScriptElement.nonce = cspNonce;\n        }\n        createdScriptElement.textContent = element.textContent;\n        createdScriptElement.async = false;\n        copyElementAttributes(createdScriptElement, element);\n        return createdScriptElement;\n    }\n}\nfunction copyElementAttributes(destinationElement, sourceElement) {\n    for (const { name, value } of sourceElement.attributes) {\n        destinationElement.setAttribute(name, value);\n    }\n}\nfunction createDocumentFragment(html) {\n    const template = document.createElement(\"template\");\n    template.innerHTML = html;\n    return template.content;\n}\nfunction dispatch(eventName, { target, cancelable, detail } = {}) {\n    const event = new CustomEvent(eventName, {\n        cancelable,\n        bubbles: true,\n        composed: true,\n        detail,\n    });\n    if (target && target.isConnected) {\n        target.dispatchEvent(event);\n    }\n    else {\n        document.documentElement.dispatchEvent(event);\n    }\n    return event;\n}\nfunction nextAnimationFrame() {\n    return new Promise((resolve) => requestAnimationFrame(() => resolve()));\n}\nfunction nextEventLoopTick() {\n    return new Promise((resolve) => setTimeout(() => resolve(), 0));\n}\nfunction nextMicrotask() {\n    return Promise.resolve();\n}\nfunction parseHTMLDocument(html = \"\") {\n    return new DOMParser().parseFromString(html, \"text/html\");\n}\nfunction unindent(strings, ...values) {\n    const lines = interpolate(strings, values).replace(/^\\n/, \"\").split(\"\\n\");\n    const match = lines[0].match(/^\\s+/);\n    const indent = match ? match[0].length : 0;\n    return lines.map((line) => line.slice(indent)).join(\"\\n\");\n}\nfunction interpolate(strings, values) {\n    return strings.reduce((result, string, i) => {\n        const value = values[i] == undefined ? \"\" : values[i];\n        return result + string + value;\n    }, \"\");\n}\nfunction uuid() {\n    return Array.from({ length: 36 })\n        .map((_, i) => {\n        if (i == 8 || i == 13 || i == 18 || i == 23) {\n            return \"-\";\n        }\n        else if (i == 14) {\n            return \"4\";\n        }\n        else if (i == 19) {\n            return (Math.floor(Math.random() * 4) + 8).toString(16);\n        }\n        else {\n            return Math.floor(Math.random() * 15).toString(16);\n        }\n    })\n        .join(\"\");\n}\nfunction getAttribute(attributeName, ...elements) {\n    for (const value of elements.map((element) => element === null || element === void 0 ? void 0 : element.getAttribute(attributeName))) {\n        if (typeof value == \"string\")\n            return value;\n    }\n    return null;\n}\nfunction hasAttribute(attributeName, ...elements) {\n    return elements.some((element) => element && element.hasAttribute(attributeName));\n}\nfunction markAsBusy(...elements) {\n    for (const element of elements) {\n        if (element.localName == \"turbo-frame\") {\n            element.setAttribute(\"busy\", \"\");\n        }\n        element.setAttribute(\"aria-busy\", \"true\");\n    }\n}\nfunction clearBusyState(...elements) {\n    for (const element of elements) {\n        if (element.localName == \"turbo-frame\") {\n            element.removeAttribute(\"busy\");\n        }\n        element.removeAttribute(\"aria-busy\");\n    }\n}\nfunction waitForLoad(element, timeoutInMilliseconds = 2000) {\n    return new Promise((resolve) => {\n        const onComplete = () => {\n            element.removeEventListener(\"error\", onComplete);\n            element.removeEventListener(\"load\", onComplete);\n            resolve();\n        };\n        element.addEventListener(\"load\", onComplete, { once: true });\n        element.addEventListener(\"error\", onComplete, { once: true });\n        setTimeout(resolve, timeoutInMilliseconds);\n    });\n}\nfunction getHistoryMethodForAction(action) {\n    switch (action) {\n        case \"replace\":\n            return history.replaceState;\n        case \"advance\":\n        case \"restore\":\n            return history.pushState;\n    }\n}\nfunction isAction(action) {\n    return action == \"advance\" || action == \"replace\" || action == \"restore\";\n}\nfunction getVisitAction(...elements) {\n    const action = getAttribute(\"data-turbo-action\", ...elements);\n    return isAction(action) ? action : null;\n}\nfunction getMetaElement(name) {\n    return document.querySelector(`meta[name=\"${name}\"]`);\n}\nfunction getMetaContent(name) {\n    const element = getMetaElement(name);\n    return element && element.content;\n}\nfunction setMetaContent(name, content) {\n    let element = getMetaElement(name);\n    if (!element) {\n        element = document.createElement(\"meta\");\n        element.setAttribute(\"name\", name);\n        document.head.appendChild(element);\n    }\n    element.setAttribute(\"content\", content);\n    return element;\n}\nfunction findClosestRecursively(element, selector) {\n    var _a;\n    if (element instanceof Element) {\n        return (element.closest(selector) ||\n            findClosestRecursively(element.assignedSlot || ((_a = element.getRootNode()) === null || _a === void 0 ? void 0 : _a.host), selector));\n    }\n}\n\nvar FetchMethod;\n(function (FetchMethod) {\n    FetchMethod[FetchMethod[\"get\"] = 0] = \"get\";\n    FetchMethod[FetchMethod[\"post\"] = 1] = \"post\";\n    FetchMethod[FetchMethod[\"put\"] = 2] = \"put\";\n    FetchMethod[FetchMethod[\"patch\"] = 3] = \"patch\";\n    FetchMethod[FetchMethod[\"delete\"] = 4] = \"delete\";\n})(FetchMethod || (FetchMethod = {}));\nfunction fetchMethodFromString(method) {\n    switch (method.toLowerCase()) {\n        case \"get\":\n            return FetchMethod.get;\n        case \"post\":\n            return FetchMethod.post;\n        case \"put\":\n            return FetchMethod.put;\n        case \"patch\":\n            return FetchMethod.patch;\n        case \"delete\":\n            return FetchMethod.delete;\n    }\n}\nclass FetchRequest {\n    constructor(delegate, method, location, body = new URLSearchParams(), target = null) {\n        this.abortController = new AbortController();\n        this.resolveRequestPromise = (_value) => { };\n        this.delegate = delegate;\n        this.method = method;\n        this.headers = this.defaultHeaders;\n        this.body = body;\n        this.url = location;\n        this.target = target;\n    }\n    get location() {\n        return this.url;\n    }\n    get params() {\n        return this.url.searchParams;\n    }\n    get entries() {\n        return this.body ? Array.from(this.body.entries()) : [];\n    }\n    cancel() {\n        this.abortController.abort();\n    }\n    async perform() {\n        const { fetchOptions } = this;\n        this.delegate.prepareRequest(this);\n        await this.allowRequestToBeIntercepted(fetchOptions);\n        try {\n            this.delegate.requestStarted(this);\n            const response = await fetch(this.url.href, fetchOptions);\n            return await this.receive(response);\n        }\n        catch (error) {\n            if (error.name !== \"AbortError\") {\n                if (this.willDelegateErrorHandling(error)) {\n                    this.delegate.requestErrored(this, error);\n                }\n                throw error;\n            }\n        }\n        finally {\n            this.delegate.requestFinished(this);\n        }\n    }\n    async receive(response) {\n        const fetchResponse = new FetchResponse(response);\n        const event = dispatch(\"turbo:before-fetch-response\", {\n            cancelable: true,\n            detail: { fetchResponse },\n            target: this.target,\n        });\n        if (event.defaultPrevented) {\n            this.delegate.requestPreventedHandlingResponse(this, fetchResponse);\n        }\n        else if (fetchResponse.succeeded) {\n            this.delegate.requestSucceededWithResponse(this, fetchResponse);\n        }\n        else {\n            this.delegate.requestFailedWithResponse(this, fetchResponse);\n        }\n        return fetchResponse;\n    }\n    get fetchOptions() {\n        var _a;\n        return {\n            method: FetchMethod[this.method].toUpperCase(),\n            credentials: \"same-origin\",\n            headers: this.headers,\n            redirect: \"follow\",\n            body: this.isSafe ? null : this.body,\n            signal: this.abortSignal,\n            referrer: (_a = this.delegate.referrer) === null || _a === void 0 ? void 0 : _a.href,\n        };\n    }\n    get defaultHeaders() {\n        return {\n            Accept: \"text/html, application/xhtml+xml\",\n        };\n    }\n    get isSafe() {\n        return this.method === FetchMethod.get;\n    }\n    get abortSignal() {\n        return this.abortController.signal;\n    }\n    acceptResponseType(mimeType) {\n        this.headers[\"Accept\"] = [mimeType, this.headers[\"Accept\"]].join(\", \");\n    }\n    async allowRequestToBeIntercepted(fetchOptions) {\n        const requestInterception = new Promise((resolve) => (this.resolveRequestPromise = resolve));\n        const event = dispatch(\"turbo:before-fetch-request\", {\n            cancelable: true,\n            detail: {\n                fetchOptions,\n                url: this.url,\n                resume: this.resolveRequestPromise,\n            },\n            target: this.target,\n        });\n        if (event.defaultPrevented)\n            await requestInterception;\n    }\n    willDelegateErrorHandling(error) {\n        const event = dispatch(\"turbo:fetch-request-error\", {\n            target: this.target,\n            cancelable: true,\n            detail: { request: this, error: error },\n        });\n        return !event.defaultPrevented;\n    }\n}\n\nclass AppearanceObserver {\n    constructor(delegate, element) {\n        this.started = false;\n        this.intersect = (entries) => {\n            const lastEntry = entries.slice(-1)[0];\n            if (lastEntry === null || lastEntry === void 0 ? void 0 : lastEntry.isIntersecting) {\n                this.delegate.elementAppearedInViewport(this.element);\n            }\n        };\n        this.delegate = delegate;\n        this.element = element;\n        this.intersectionObserver = new IntersectionObserver(this.intersect);\n    }\n    start() {\n        if (!this.started) {\n            this.started = true;\n            this.intersectionObserver.observe(this.element);\n        }\n    }\n    stop() {\n        if (this.started) {\n            this.started = false;\n            this.intersectionObserver.unobserve(this.element);\n        }\n    }\n}\n\nclass StreamMessage {\n    static wrap(message) {\n        if (typeof message == \"string\") {\n            return new this(createDocumentFragment(message));\n        }\n        else {\n            return message;\n        }\n    }\n    constructor(fragment) {\n        this.fragment = importStreamElements(fragment);\n    }\n}\nStreamMessage.contentType = \"text/vnd.turbo-stream.html\";\nfunction importStreamElements(fragment) {\n    for (const element of fragment.querySelectorAll(\"turbo-stream\")) {\n        const streamElement = document.importNode(element, true);\n        for (const inertScriptElement of streamElement.templateElement.content.querySelectorAll(\"script\")) {\n            inertScriptElement.replaceWith(activateScriptElement(inertScriptElement));\n        }\n        element.replaceWith(streamElement);\n    }\n    return fragment;\n}\n\nvar FormSubmissionState;\n(function (FormSubmissionState) {\n    FormSubmissionState[FormSubmissionState[\"initialized\"] = 0] = \"initialized\";\n    FormSubmissionState[FormSubmissionState[\"requesting\"] = 1] = \"requesting\";\n    FormSubmissionState[FormSubmissionState[\"waiting\"] = 2] = \"waiting\";\n    FormSubmissionState[FormSubmissionState[\"receiving\"] = 3] = \"receiving\";\n    FormSubmissionState[FormSubmissionState[\"stopping\"] = 4] = \"stopping\";\n    FormSubmissionState[FormSubmissionState[\"stopped\"] = 5] = \"stopped\";\n})(FormSubmissionState || (FormSubmissionState = {}));\nvar FormEnctype;\n(function (FormEnctype) {\n    FormEnctype[\"urlEncoded\"] = \"application/x-www-form-urlencoded\";\n    FormEnctype[\"multipart\"] = \"multipart/form-data\";\n    FormEnctype[\"plain\"] = \"text/plain\";\n})(FormEnctype || (FormEnctype = {}));\nfunction formEnctypeFromString(encoding) {\n    switch (encoding.toLowerCase()) {\n        case FormEnctype.multipart:\n            return FormEnctype.multipart;\n        case FormEnctype.plain:\n            return FormEnctype.plain;\n        default:\n            return FormEnctype.urlEncoded;\n    }\n}\nclass FormSubmission {\n    static confirmMethod(message, _element, _submitter) {\n        return Promise.resolve(confirm(message));\n    }\n    constructor(delegate, formElement, submitter, mustRedirect = false) {\n        this.state = FormSubmissionState.initialized;\n        this.delegate = delegate;\n        this.formElement = formElement;\n        this.submitter = submitter;\n        this.formData = buildFormData(formElement, submitter);\n        this.location = expandURL(this.action);\n        if (this.method == FetchMethod.get) {\n            mergeFormDataEntries(this.location, [...this.body.entries()]);\n        }\n        this.fetchRequest = new FetchRequest(this, this.method, this.location, this.body, this.formElement);\n        this.mustRedirect = mustRedirect;\n    }\n    get method() {\n        var _a;\n        const method = ((_a = this.submitter) === null || _a === void 0 ? void 0 : _a.getAttribute(\"formmethod\")) || this.formElement.getAttribute(\"method\") || \"\";\n        return fetchMethodFromString(method.toLowerCase()) || FetchMethod.get;\n    }\n    get action() {\n        var _a;\n        const formElementAction = typeof this.formElement.action === \"string\" ? this.formElement.action : null;\n        if ((_a = this.submitter) === null || _a === void 0 ? void 0 : _a.hasAttribute(\"formaction\")) {\n            return this.submitter.getAttribute(\"formaction\") || \"\";\n        }\n        else {\n            return this.formElement.getAttribute(\"action\") || formElementAction || \"\";\n        }\n    }\n    get body() {\n        if (this.enctype == FormEnctype.urlEncoded || this.method == FetchMethod.get) {\n            return new URLSearchParams(this.stringFormData);\n        }\n        else {\n            return this.formData;\n        }\n    }\n    get enctype() {\n        var _a;\n        return formEnctypeFromString(((_a = this.submitter) === null || _a === void 0 ? void 0 : _a.getAttribute(\"formenctype\")) || this.formElement.enctype);\n    }\n    get isSafe() {\n        return this.fetchRequest.isSafe;\n    }\n    get stringFormData() {\n        return [...this.formData].reduce((entries, [name, value]) => {\n            return entries.concat(typeof value == \"string\" ? [[name, value]] : []);\n        }, []);\n    }\n    async start() {\n        const { initialized, requesting } = FormSubmissionState;\n        const confirmationMessage = getAttribute(\"data-turbo-confirm\", this.submitter, this.formElement);\n        if (typeof confirmationMessage === \"string\") {\n            const answer = await FormSubmission.confirmMethod(confirmationMessage, this.formElement, this.submitter);\n            if (!answer) {\n                return;\n            }\n        }\n        if (this.state == initialized) {\n            this.state = requesting;\n            return this.fetchRequest.perform();\n        }\n    }\n    stop() {\n        const { stopping, stopped } = FormSubmissionState;\n        if (this.state != stopping && this.state != stopped) {\n            this.state = stopping;\n            this.fetchRequest.cancel();\n            return true;\n        }\n    }\n    prepareRequest(request) {\n        if (!request.isSafe) {\n            const token = getCookieValue(getMetaContent(\"csrf-param\")) || getMetaContent(\"csrf-token\");\n            if (token) {\n                request.headers[\"X-CSRF-Token\"] = token;\n            }\n        }\n        if (this.requestAcceptsTurboStreamResponse(request)) {\n            request.acceptResponseType(StreamMessage.contentType);\n        }\n    }\n    requestStarted(_request) {\n        var _a;\n        this.state = FormSubmissionState.waiting;\n        (_a = this.submitter) === null || _a === void 0 ? void 0 : _a.setAttribute(\"disabled\", \"\");\n        this.setSubmitsWith();\n        dispatch(\"turbo:submit-start\", {\n            target: this.formElement,\n            detail: { formSubmission: this },\n        });\n        this.delegate.formSubmissionStarted(this);\n    }\n    requestPreventedHandlingResponse(request, response) {\n        this.result = { success: response.succeeded, fetchResponse: response };\n    }\n    requestSucceededWithResponse(request, response) {\n        if (response.clientError || response.serverError) {\n            this.delegate.formSubmissionFailedWithResponse(this, response);\n        }\n        else if (this.requestMustRedirect(request) && responseSucceededWithoutRedirect(response)) {\n            const error = new Error(\"Form responses must redirect to another location\");\n            this.delegate.formSubmissionErrored(this, error);\n        }\n        else {\n            this.state = FormSubmissionState.receiving;\n            this.result = { success: true, fetchResponse: response };\n            this.delegate.formSubmissionSucceededWithResponse(this, response);\n        }\n    }\n    requestFailedWithResponse(request, response) {\n        this.result = { success: false, fetchResponse: response };\n        this.delegate.formSubmissionFailedWithResponse(this, response);\n    }\n    requestErrored(request, error) {\n        this.result = { success: false, error };\n        this.delegate.formSubmissionErrored(this, error);\n    }\n    requestFinished(_request) {\n        var _a;\n        this.state = FormSubmissionState.stopped;\n        (_a = this.submitter) === null || _a === void 0 ? void 0 : _a.removeAttribute(\"disabled\");\n        this.resetSubmitterText();\n        dispatch(\"turbo:submit-end\", {\n            target: this.formElement,\n            detail: Object.assign({ formSubmission: this }, this.result),\n        });\n        this.delegate.formSubmissionFinished(this);\n    }\n    setSubmitsWith() {\n        if (!this.submitter || !this.submitsWith)\n            return;\n        if (this.submitter.matches(\"button\")) {\n            this.originalSubmitText = this.submitter.innerHTML;\n            this.submitter.innerHTML = this.submitsWith;\n        }\n        else if (this.submitter.matches(\"input\")) {\n            const input = this.submitter;\n            this.originalSubmitText = input.value;\n            input.value = this.submitsWith;\n        }\n    }\n    resetSubmitterText() {\n        if (!this.submitter || !this.originalSubmitText)\n            return;\n        if (this.submitter.matches(\"button\")) {\n            this.submitter.innerHTML = this.originalSubmitText;\n        }\n        else if (this.submitter.matches(\"input\")) {\n            const input = this.submitter;\n            input.value = this.originalSubmitText;\n        }\n    }\n    requestMustRedirect(request) {\n        return !request.isSafe && this.mustRedirect;\n    }\n    requestAcceptsTurboStreamResponse(request) {\n        return !request.isSafe || hasAttribute(\"data-turbo-stream\", this.submitter, this.formElement);\n    }\n    get submitsWith() {\n        var _a;\n        return (_a = this.submitter) === null || _a === void 0 ? void 0 : _a.getAttribute(\"data-turbo-submits-with\");\n    }\n}\nfunction buildFormData(formElement, submitter) {\n    const formData = new FormData(formElement);\n    const name = submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"name\");\n    const value = submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"value\");\n    if (name) {\n        formData.append(name, value || \"\");\n    }\n    return formData;\n}\nfunction getCookieValue(cookieName) {\n    if (cookieName != null) {\n        const cookies = document.cookie ? document.cookie.split(\"; \") : [];\n        const cookie = cookies.find((cookie) => cookie.startsWith(cookieName));\n        if (cookie) {\n            const value = cookie.split(\"=\").slice(1).join(\"=\");\n            return value ? decodeURIComponent(value) : undefined;\n        }\n    }\n}\nfunction responseSucceededWithoutRedirect(response) {\n    return response.statusCode == 200 && !response.redirected;\n}\nfunction mergeFormDataEntries(url, entries) {\n    const searchParams = new URLSearchParams();\n    for (const [name, value] of entries) {\n        if (value instanceof File)\n            continue;\n        searchParams.append(name, value);\n    }\n    url.search = searchParams.toString();\n    return url;\n}\n\nclass Snapshot {\n    constructor(element) {\n        this.element = element;\n    }\n    get activeElement() {\n        return this.element.ownerDocument.activeElement;\n    }\n    get children() {\n        return [...this.element.children];\n    }\n    hasAnchor(anchor) {\n        return this.getElementForAnchor(anchor) != null;\n    }\n    getElementForAnchor(anchor) {\n        return anchor ? this.element.querySelector(`[id='${anchor}'], a[name='${anchor}']`) : null;\n    }\n    get isConnected() {\n        return this.element.isConnected;\n    }\n    get firstAutofocusableElement() {\n        const inertDisabledOrHidden = \"[inert], :disabled, [hidden], details:not([open]), dialog:not([open])\";\n        for (const element of this.element.querySelectorAll(\"[autofocus]\")) {\n            if (element.closest(inertDisabledOrHidden) == null)\n                return element;\n            else\n                continue;\n        }\n        return null;\n    }\n    get permanentElements() {\n        return queryPermanentElementsAll(this.element);\n    }\n    getPermanentElementById(id) {\n        return getPermanentElementById(this.element, id);\n    }\n    getPermanentElementMapForSnapshot(snapshot) {\n        const permanentElementMap = {};\n        for (const currentPermanentElement of this.permanentElements) {\n            const { id } = currentPermanentElement;\n            const newPermanentElement = snapshot.getPermanentElementById(id);\n            if (newPermanentElement) {\n                permanentElementMap[id] = [currentPermanentElement, newPermanentElement];\n            }\n        }\n        return permanentElementMap;\n    }\n}\nfunction getPermanentElementById(node, id) {\n    return node.querySelector(`#${id}[data-turbo-permanent]`);\n}\nfunction queryPermanentElementsAll(node) {\n    return node.querySelectorAll(\"[id][data-turbo-permanent]\");\n}\n\nclass FormSubmitObserver {\n    constructor(delegate, eventTarget) {\n        this.started = false;\n        this.submitCaptured = () => {\n            this.eventTarget.removeEventListener(\"submit\", this.submitBubbled, false);\n            this.eventTarget.addEventListener(\"submit\", this.submitBubbled, false);\n        };\n        this.submitBubbled = ((event) => {\n            if (!event.defaultPrevented) {\n                const form = event.target instanceof HTMLFormElement ? event.target : undefined;\n                const submitter = event.submitter || undefined;\n                if (form &&\n                    submissionDoesNotDismissDialog(form, submitter) &&\n                    submissionDoesNotTargetIFrame(form, submitter) &&\n                    this.delegate.willSubmitForm(form, submitter)) {\n                    event.preventDefault();\n                    event.stopImmediatePropagation();\n                    this.delegate.formSubmitted(form, submitter);\n                }\n            }\n        });\n        this.delegate = delegate;\n        this.eventTarget = eventTarget;\n    }\n    start() {\n        if (!this.started) {\n            this.eventTarget.addEventListener(\"submit\", this.submitCaptured, true);\n            this.started = true;\n        }\n    }\n    stop() {\n        if (this.started) {\n            this.eventTarget.removeEventListener(\"submit\", this.submitCaptured, true);\n            this.started = false;\n        }\n    }\n}\nfunction submissionDoesNotDismissDialog(form, submitter) {\n    const method = (submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"formmethod\")) || form.getAttribute(\"method\");\n    return method != \"dialog\";\n}\nfunction submissionDoesNotTargetIFrame(form, submitter) {\n    if ((submitter === null || submitter === void 0 ? void 0 : submitter.hasAttribute(\"formtarget\")) || form.hasAttribute(\"target\")) {\n        const target = (submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"formtarget\")) || form.target;\n        for (const element of document.getElementsByName(target)) {\n            if (element instanceof HTMLIFrameElement)\n                return false;\n        }\n        return true;\n    }\n    else {\n        return true;\n    }\n}\n\nclass View {\n    constructor(delegate, element) {\n        this.resolveRenderPromise = (_value) => { };\n        this.resolveInterceptionPromise = (_value) => { };\n        this.delegate = delegate;\n        this.element = element;\n    }\n    scrollToAnchor(anchor) {\n        const element = this.snapshot.getElementForAnchor(anchor);\n        if (element) {\n            this.scrollToElement(element);\n            this.focusElement(element);\n        }\n        else {\n            this.scrollToPosition({ x: 0, y: 0 });\n        }\n    }\n    scrollToAnchorFromLocation(location) {\n        this.scrollToAnchor(getAnchor(location));\n    }\n    scrollToElement(element) {\n        element.scrollIntoView();\n    }\n    focusElement(element) {\n        if (element instanceof HTMLElement) {\n            if (element.hasAttribute(\"tabindex\")) {\n                element.focus();\n            }\n            else {\n                element.setAttribute(\"tabindex\", \"-1\");\n                element.focus();\n                element.removeAttribute(\"tabindex\");\n            }\n        }\n    }\n    scrollToPosition({ x, y }) {\n        this.scrollRoot.scrollTo(x, y);\n    }\n    scrollToTop() {\n        this.scrollToPosition({ x: 0, y: 0 });\n    }\n    get scrollRoot() {\n        return window;\n    }\n    async render(renderer) {\n        const { isPreview, shouldRender, newSnapshot: snapshot } = renderer;\n        if (shouldRender) {\n            try {\n                this.renderPromise = new Promise((resolve) => (this.resolveRenderPromise = resolve));\n                this.renderer = renderer;\n                await this.prepareToRenderSnapshot(renderer);\n                const renderInterception = new Promise((resolve) => (this.resolveInterceptionPromise = resolve));\n                const options = { resume: this.resolveInterceptionPromise, render: this.renderer.renderElement };\n                const immediateRender = this.delegate.allowsImmediateRender(snapshot, options);\n                if (!immediateRender)\n                    await renderInterception;\n                await this.renderSnapshot(renderer);\n                this.delegate.viewRenderedSnapshot(snapshot, isPreview);\n                this.delegate.preloadOnLoadLinksForView(this.element);\n                this.finishRenderingSnapshot(renderer);\n            }\n            finally {\n                delete this.renderer;\n                this.resolveRenderPromise(undefined);\n                delete this.renderPromise;\n            }\n        }\n        else {\n            this.invalidate(renderer.reloadReason);\n        }\n    }\n    invalidate(reason) {\n        this.delegate.viewInvalidated(reason);\n    }\n    async prepareToRenderSnapshot(renderer) {\n        this.markAsPreview(renderer.isPreview);\n        await renderer.prepareToRender();\n    }\n    markAsPreview(isPreview) {\n        if (isPreview) {\n            this.element.setAttribute(\"data-turbo-preview\", \"\");\n        }\n        else {\n            this.element.removeAttribute(\"data-turbo-preview\");\n        }\n    }\n    async renderSnapshot(renderer) {\n        await renderer.render();\n    }\n    finishRenderingSnapshot(renderer) {\n        renderer.finishRendering();\n    }\n}\n\nclass FrameView extends View {\n    missing() {\n        this.element.innerHTML = `<strong class=\"turbo-frame-error\">Content missing</strong>`;\n    }\n    get snapshot() {\n        return new Snapshot(this.element);\n    }\n}\n\nclass LinkInterceptor {\n    constructor(delegate, element) {\n        this.clickBubbled = (event) => {\n            if (this.respondsToEventTarget(event.target)) {\n                this.clickEvent = event;\n            }\n            else {\n                delete this.clickEvent;\n            }\n        };\n        this.linkClicked = ((event) => {\n            if (this.clickEvent && this.respondsToEventTarget(event.target) && event.target instanceof Element) {\n                if (this.delegate.shouldInterceptLinkClick(event.target, event.detail.url, event.detail.originalEvent)) {\n                    this.clickEvent.preventDefault();\n                    event.preventDefault();\n                    this.delegate.linkClickIntercepted(event.target, event.detail.url, event.detail.originalEvent);\n                }\n            }\n            delete this.clickEvent;\n        });\n        this.willVisit = ((_event) => {\n            delete this.clickEvent;\n        });\n        this.delegate = delegate;\n        this.element = element;\n    }\n    start() {\n        this.element.addEventListener(\"click\", this.clickBubbled);\n        document.addEventListener(\"turbo:click\", this.linkClicked);\n        document.addEventListener(\"turbo:before-visit\", this.willVisit);\n    }\n    stop() {\n        this.element.removeEventListener(\"click\", this.clickBubbled);\n        document.removeEventListener(\"turbo:click\", this.linkClicked);\n        document.removeEventListener(\"turbo:before-visit\", this.willVisit);\n    }\n    respondsToEventTarget(target) {\n        const element = target instanceof Element ? target : target instanceof Node ? target.parentElement : null;\n        return element && element.closest(\"turbo-frame, html\") == this.element;\n    }\n}\n\nclass LinkClickObserver {\n    constructor(delegate, eventTarget) {\n        this.started = false;\n        this.clickCaptured = () => {\n            this.eventTarget.removeEventListener(\"click\", this.clickBubbled, false);\n            this.eventTarget.addEventListener(\"click\", this.clickBubbled, false);\n        };\n        this.clickBubbled = (event) => {\n            if (event instanceof MouseEvent && this.clickEventIsSignificant(event)) {\n                const target = (event.composedPath && event.composedPath()[0]) || event.target;\n                const link = this.findLinkFromClickTarget(target);\n                if (link && doesNotTargetIFrame(link)) {\n                    const location = this.getLocationForLink(link);\n                    if (this.delegate.willFollowLinkToLocation(link, location, event)) {\n                        event.preventDefault();\n                        this.delegate.followedLinkToLocation(link, location);\n                    }\n                }\n            }\n        };\n        this.delegate = delegate;\n        this.eventTarget = eventTarget;\n    }\n    start() {\n        if (!this.started) {\n            this.eventTarget.addEventListener(\"click\", this.clickCaptured, true);\n            this.started = true;\n        }\n    }\n    stop() {\n        if (this.started) {\n            this.eventTarget.removeEventListener(\"click\", this.clickCaptured, true);\n            this.started = false;\n        }\n    }\n    clickEventIsSignificant(event) {\n        return !((event.target && event.target.isContentEditable) ||\n            event.defaultPrevented ||\n            event.which > 1 ||\n            event.altKey ||\n            event.ctrlKey ||\n            event.metaKey ||\n            event.shiftKey);\n    }\n    findLinkFromClickTarget(target) {\n        return findClosestRecursively(target, \"a[href]:not([target^=_]):not([download])\");\n    }\n    getLocationForLink(link) {\n        return expandURL(link.getAttribute(\"href\") || \"\");\n    }\n}\nfunction doesNotTargetIFrame(anchor) {\n    if (anchor.hasAttribute(\"target\")) {\n        for (const element of document.getElementsByName(anchor.target)) {\n            if (element instanceof HTMLIFrameElement)\n                return false;\n        }\n        return true;\n    }\n    else {\n        return true;\n    }\n}\n\nclass FormLinkClickObserver {\n    constructor(delegate, element) {\n        this.delegate = delegate;\n        this.linkInterceptor = new LinkClickObserver(this, element);\n    }\n    start() {\n        this.linkInterceptor.start();\n    }\n    stop() {\n        this.linkInterceptor.stop();\n    }\n    willFollowLinkToLocation(link, location, originalEvent) {\n        return (this.delegate.willSubmitFormLinkToLocation(link, location, originalEvent) &&\n            link.hasAttribute(\"data-turbo-method\"));\n    }\n    followedLinkToLocation(link, location) {\n        const form = document.createElement(\"form\");\n        const type = \"hidden\";\n        for (const [name, value] of location.searchParams) {\n            form.append(Object.assign(document.createElement(\"input\"), { type, name, value }));\n        }\n        const action = Object.assign(location, { search: \"\" });\n        form.setAttribute(\"data-turbo\", \"true\");\n        form.setAttribute(\"action\", action.href);\n        form.setAttribute(\"hidden\", \"\");\n        const method = link.getAttribute(\"data-turbo-method\");\n        if (method)\n            form.setAttribute(\"method\", method);\n        const turboFrame = link.getAttribute(\"data-turbo-frame\");\n        if (turboFrame)\n            form.setAttribute(\"data-turbo-frame\", turboFrame);\n        const turboAction = getVisitAction(link);\n        if (turboAction)\n            form.setAttribute(\"data-turbo-action\", turboAction);\n        const turboConfirm = link.getAttribute(\"data-turbo-confirm\");\n        if (turboConfirm)\n            form.setAttribute(\"data-turbo-confirm\", turboConfirm);\n        const turboStream = link.hasAttribute(\"data-turbo-stream\");\n        if (turboStream)\n            form.setAttribute(\"data-turbo-stream\", \"\");\n        this.delegate.submittedFormLinkToLocation(link, location, form);\n        document.body.appendChild(form);\n        form.addEventListener(\"turbo:submit-end\", () => form.remove(), { once: true });\n        requestAnimationFrame(() => form.requestSubmit());\n    }\n}\n\nclass Bardo {\n    static async preservingPermanentElements(delegate, permanentElementMap, callback) {\n        const bardo = new this(delegate, permanentElementMap);\n        bardo.enter();\n        await callback();\n        bardo.leave();\n    }\n    constructor(delegate, permanentElementMap) {\n        this.delegate = delegate;\n        this.permanentElementMap = permanentElementMap;\n    }\n    enter() {\n        for (const id in this.permanentElementMap) {\n            const [currentPermanentElement, newPermanentElement] = this.permanentElementMap[id];\n            this.delegate.enteringBardo(currentPermanentElement, newPermanentElement);\n            this.replaceNewPermanentElementWithPlaceholder(newPermanentElement);\n        }\n    }\n    leave() {\n        for (const id in this.permanentElementMap) {\n            const [currentPermanentElement] = this.permanentElementMap[id];\n            this.replaceCurrentPermanentElementWithClone(currentPermanentElement);\n            this.replacePlaceholderWithPermanentElement(currentPermanentElement);\n            this.delegate.leavingBardo(currentPermanentElement);\n        }\n    }\n    replaceNewPermanentElementWithPlaceholder(permanentElement) {\n        const placeholder = createPlaceholderForPermanentElement(permanentElement);\n        permanentElement.replaceWith(placeholder);\n    }\n    replaceCurrentPermanentElementWithClone(permanentElement) {\n        const clone = permanentElement.cloneNode(true);\n        permanentElement.replaceWith(clone);\n    }\n    replacePlaceholderWithPermanentElement(permanentElement) {\n        const placeholder = this.getPlaceholderById(permanentElement.id);\n        placeholder === null || placeholder === void 0 ? void 0 : placeholder.replaceWith(permanentElement);\n    }\n    getPlaceholderById(id) {\n        return this.placeholders.find((element) => element.content == id);\n    }\n    get placeholders() {\n        return [...document.querySelectorAll(\"meta[name=turbo-permanent-placeholder][content]\")];\n    }\n}\nfunction createPlaceholderForPermanentElement(permanentElement) {\n    const element = document.createElement(\"meta\");\n    element.setAttribute(\"name\", \"turbo-permanent-placeholder\");\n    element.setAttribute(\"content\", permanentElement.id);\n    return element;\n}\n\nclass Renderer {\n    constructor(currentSnapshot, newSnapshot, renderElement, isPreview, willRender = true) {\n        this.activeElement = null;\n        this.currentSnapshot = currentSnapshot;\n        this.newSnapshot = newSnapshot;\n        this.isPreview = isPreview;\n        this.willRender = willRender;\n        this.renderElement = renderElement;\n        this.promise = new Promise((resolve, reject) => (this.resolvingFunctions = { resolve, reject }));\n    }\n    get shouldRender() {\n        return true;\n    }\n    get reloadReason() {\n        return;\n    }\n    prepareToRender() {\n        return;\n    }\n    finishRendering() {\n        if (this.resolvingFunctions) {\n            this.resolvingFunctions.resolve();\n            delete this.resolvingFunctions;\n        }\n    }\n    async preservingPermanentElements(callback) {\n        await Bardo.preservingPermanentElements(this, this.permanentElementMap, callback);\n    }\n    focusFirstAutofocusableElement() {\n        const element = this.connectedSnapshot.firstAutofocusableElement;\n        if (elementIsFocusable(element)) {\n            element.focus();\n        }\n    }\n    enteringBardo(currentPermanentElement) {\n        if (this.activeElement)\n            return;\n        if (currentPermanentElement.contains(this.currentSnapshot.activeElement)) {\n            this.activeElement = this.currentSnapshot.activeElement;\n        }\n    }\n    leavingBardo(currentPermanentElement) {\n        if (currentPermanentElement.contains(this.activeElement) && this.activeElement instanceof HTMLElement) {\n            this.activeElement.focus();\n            this.activeElement = null;\n        }\n    }\n    get connectedSnapshot() {\n        return this.newSnapshot.isConnected ? this.newSnapshot : this.currentSnapshot;\n    }\n    get currentElement() {\n        return this.currentSnapshot.element;\n    }\n    get newElement() {\n        return this.newSnapshot.element;\n    }\n    get permanentElementMap() {\n        return this.currentSnapshot.getPermanentElementMapForSnapshot(this.newSnapshot);\n    }\n}\nfunction elementIsFocusable(element) {\n    return element && typeof element.focus == \"function\";\n}\n\nclass FrameRenderer extends Renderer {\n    static renderElement(currentElement, newElement) {\n        var _a;\n        const destinationRange = document.createRange();\n        destinationRange.selectNodeContents(currentElement);\n        destinationRange.deleteContents();\n        const frameElement = newElement;\n        const sourceRange = (_a = frameElement.ownerDocument) === null || _a === void 0 ? void 0 : _a.createRange();\n        if (sourceRange) {\n            sourceRange.selectNodeContents(frameElement);\n            currentElement.appendChild(sourceRange.extractContents());\n        }\n    }\n    constructor(delegate, currentSnapshot, newSnapshot, renderElement, isPreview, willRender = true) {\n        super(currentSnapshot, newSnapshot, renderElement, isPreview, willRender);\n        this.delegate = delegate;\n    }\n    get shouldRender() {\n        return true;\n    }\n    async render() {\n        await nextAnimationFrame();\n        this.preservingPermanentElements(() => {\n            this.loadFrameElement();\n        });\n        this.scrollFrameIntoView();\n        await nextAnimationFrame();\n        this.focusFirstAutofocusableElement();\n        await nextAnimationFrame();\n        this.activateScriptElements();\n    }\n    loadFrameElement() {\n        this.delegate.willRenderFrame(this.currentElement, this.newElement);\n        this.renderElement(this.currentElement, this.newElement);\n    }\n    scrollFrameIntoView() {\n        if (this.currentElement.autoscroll || this.newElement.autoscroll) {\n            const element = this.currentElement.firstElementChild;\n            const block = readScrollLogicalPosition(this.currentElement.getAttribute(\"data-autoscroll-block\"), \"end\");\n            const behavior = readScrollBehavior(this.currentElement.getAttribute(\"data-autoscroll-behavior\"), \"auto\");\n            if (element) {\n                element.scrollIntoView({ block, behavior });\n                return true;\n            }\n        }\n        return false;\n    }\n    activateScriptElements() {\n        for (const inertScriptElement of this.newScriptElements) {\n            const activatedScriptElement = activateScriptElement(inertScriptElement);\n            inertScriptElement.replaceWith(activatedScriptElement);\n        }\n    }\n    get newScriptElements() {\n        return this.currentElement.querySelectorAll(\"script\");\n    }\n}\nfunction readScrollLogicalPosition(value, defaultValue) {\n    if (value == \"end\" || value == \"start\" || value == \"center\" || value == \"nearest\") {\n        return value;\n    }\n    else {\n        return defaultValue;\n    }\n}\nfunction readScrollBehavior(value, defaultValue) {\n    if (value == \"auto\" || value == \"smooth\") {\n        return value;\n    }\n    else {\n        return defaultValue;\n    }\n}\n\nclass ProgressBar {\n    static get defaultCSS() {\n        return unindent `\n      .turbo-progress-bar {\n        position: fixed;\n        display: block;\n        top: 0;\n        left: 0;\n        height: 3px;\n        background: #0076ff;\n        z-index: 2147483647;\n        transition:\n          width ${ProgressBar.animationDuration}ms ease-out,\n          opacity ${ProgressBar.animationDuration / 2}ms ${ProgressBar.animationDuration / 2}ms ease-in;\n        transform: translate3d(0, 0, 0);\n      }\n    `;\n    }\n    constructor() {\n        this.hiding = false;\n        this.value = 0;\n        this.visible = false;\n        this.trickle = () => {\n            this.setValue(this.value + Math.random() / 100);\n        };\n        this.stylesheetElement = this.createStylesheetElement();\n        this.progressElement = this.createProgressElement();\n        this.installStylesheetElement();\n        this.setValue(0);\n    }\n    show() {\n        if (!this.visible) {\n            this.visible = true;\n            this.installProgressElement();\n            this.startTrickling();\n        }\n    }\n    hide() {\n        if (this.visible && !this.hiding) {\n            this.hiding = true;\n            this.fadeProgressElement(() => {\n                this.uninstallProgressElement();\n                this.stopTrickling();\n                this.visible = false;\n                this.hiding = false;\n            });\n        }\n    }\n    setValue(value) {\n        this.value = value;\n        this.refresh();\n    }\n    installStylesheetElement() {\n        document.head.insertBefore(this.stylesheetElement, document.head.firstChild);\n    }\n    installProgressElement() {\n        this.progressElement.style.width = \"0\";\n        this.progressElement.style.opacity = \"1\";\n        document.documentElement.insertBefore(this.progressElement, document.body);\n        this.refresh();\n    }\n    fadeProgressElement(callback) {\n        this.progressElement.style.opacity = \"0\";\n        setTimeout(callback, ProgressBar.animationDuration * 1.5);\n    }\n    uninstallProgressElement() {\n        if (this.progressElement.parentNode) {\n            document.documentElement.removeChild(this.progressElement);\n        }\n    }\n    startTrickling() {\n        if (!this.trickleInterval) {\n            this.trickleInterval = window.setInterval(this.trickle, ProgressBar.animationDuration);\n        }\n    }\n    stopTrickling() {\n        window.clearInterval(this.trickleInterval);\n        delete this.trickleInterval;\n    }\n    refresh() {\n        requestAnimationFrame(() => {\n            this.progressElement.style.width = `${10 + this.value * 90}%`;\n        });\n    }\n    createStylesheetElement() {\n        const element = document.createElement(\"style\");\n        element.type = \"text/css\";\n        element.textContent = ProgressBar.defaultCSS;\n        if (this.cspNonce) {\n            element.nonce = this.cspNonce;\n        }\n        return element;\n    }\n    createProgressElement() {\n        const element = document.createElement(\"div\");\n        element.className = \"turbo-progress-bar\";\n        return element;\n    }\n    get cspNonce() {\n        return getMetaContent(\"csp-nonce\");\n    }\n}\nProgressBar.animationDuration = 300;\n\nclass HeadSnapshot extends Snapshot {\n    constructor() {\n        super(...arguments);\n        this.detailsByOuterHTML = this.children\n            .filter((element) => !elementIsNoscript(element))\n            .map((element) => elementWithoutNonce(element))\n            .reduce((result, element) => {\n            const { outerHTML } = element;\n            const details = outerHTML in result\n                ? result[outerHTML]\n                : {\n                    type: elementType(element),\n                    tracked: elementIsTracked(element),\n                    elements: [],\n                };\n            return Object.assign(Object.assign({}, result), { [outerHTML]: Object.assign(Object.assign({}, details), { elements: [...details.elements, element] }) });\n        }, {});\n    }\n    get trackedElementSignature() {\n        return Object.keys(this.detailsByOuterHTML)\n            .filter((outerHTML) => this.detailsByOuterHTML[outerHTML].tracked)\n            .join(\"\");\n    }\n    getScriptElementsNotInSnapshot(snapshot) {\n        return this.getElementsMatchingTypeNotInSnapshot(\"script\", snapshot);\n    }\n    getStylesheetElementsNotInSnapshot(snapshot) {\n        return this.getElementsMatchingTypeNotInSnapshot(\"stylesheet\", snapshot);\n    }\n    getElementsMatchingTypeNotInSnapshot(matchedType, snapshot) {\n        return Object.keys(this.detailsByOuterHTML)\n            .filter((outerHTML) => !(outerHTML in snapshot.detailsByOuterHTML))\n            .map((outerHTML) => this.detailsByOuterHTML[outerHTML])\n            .filter(({ type }) => type == matchedType)\n            .map(({ elements: [element] }) => element);\n    }\n    get provisionalElements() {\n        return Object.keys(this.detailsByOuterHTML).reduce((result, outerHTML) => {\n            const { type, tracked, elements } = this.detailsByOuterHTML[outerHTML];\n            if (type == null && !tracked) {\n                return [...result, ...elements];\n            }\n            else if (elements.length > 1) {\n                return [...result, ...elements.slice(1)];\n            }\n            else {\n                return result;\n            }\n        }, []);\n    }\n    getMetaValue(name) {\n        const element = this.findMetaElementByName(name);\n        return element ? element.getAttribute(\"content\") : null;\n    }\n    findMetaElementByName(name) {\n        return Object.keys(this.detailsByOuterHTML).reduce((result, outerHTML) => {\n            const { elements: [element], } = this.detailsByOuterHTML[outerHTML];\n            return elementIsMetaElementWithName(element, name) ? element : result;\n        }, undefined);\n    }\n}\nfunction elementType(element) {\n    if (elementIsScript(element)) {\n        return \"script\";\n    }\n    else if (elementIsStylesheet(element)) {\n        return \"stylesheet\";\n    }\n}\nfunction elementIsTracked(element) {\n    return element.getAttribute(\"data-turbo-track\") == \"reload\";\n}\nfunction elementIsScript(element) {\n    const tagName = element.localName;\n    return tagName == \"script\";\n}\nfunction elementIsNoscript(element) {\n    const tagName = element.localName;\n    return tagName == \"noscript\";\n}\nfunction elementIsStylesheet(element) {\n    const tagName = element.localName;\n    return tagName == \"style\" || (tagName == \"link\" && element.getAttribute(\"rel\") == \"stylesheet\");\n}\nfunction elementIsMetaElementWithName(element, name) {\n    const tagName = element.localName;\n    return tagName == \"meta\" && element.getAttribute(\"name\") == name;\n}\nfunction elementWithoutNonce(element) {\n    if (element.hasAttribute(\"nonce\")) {\n        element.setAttribute(\"nonce\", \"\");\n    }\n    return element;\n}\n\nclass PageSnapshot extends Snapshot {\n    static fromHTMLString(html = \"\") {\n        return this.fromDocument(parseHTMLDocument(html));\n    }\n    static fromElement(element) {\n        return this.fromDocument(element.ownerDocument);\n    }\n    static fromDocument({ head, body }) {\n        return new this(body, new HeadSnapshot(head));\n    }\n    constructor(element, headSnapshot) {\n        super(element);\n        this.headSnapshot = headSnapshot;\n    }\n    clone() {\n        const clonedElement = this.element.cloneNode(true);\n        const selectElements = this.element.querySelectorAll(\"select\");\n        const clonedSelectElements = clonedElement.querySelectorAll(\"select\");\n        for (const [index, source] of selectElements.entries()) {\n            const clone = clonedSelectElements[index];\n            for (const option of clone.selectedOptions)\n                option.selected = false;\n            for (const option of source.selectedOptions)\n                clone.options[option.index].selected = true;\n        }\n        for (const clonedPasswordInput of clonedElement.querySelectorAll('input[type=\"password\"]')) {\n            clonedPasswordInput.value = \"\";\n        }\n        return new PageSnapshot(clonedElement, this.headSnapshot);\n    }\n    get headElement() {\n        return this.headSnapshot.element;\n    }\n    get rootLocation() {\n        var _a;\n        const root = (_a = this.getSetting(\"root\")) !== null && _a !== void 0 ? _a : \"/\";\n        return expandURL(root);\n    }\n    get cacheControlValue() {\n        return this.getSetting(\"cache-control\");\n    }\n    get isPreviewable() {\n        return this.cacheControlValue != \"no-preview\";\n    }\n    get isCacheable() {\n        return this.cacheControlValue != \"no-cache\";\n    }\n    get isVisitable() {\n        return this.getSetting(\"visit-control\") != \"reload\";\n    }\n    getSetting(name) {\n        return this.headSnapshot.getMetaValue(`turbo-${name}`);\n    }\n}\n\nvar TimingMetric;\n(function (TimingMetric) {\n    TimingMetric[\"visitStart\"] = \"visitStart\";\n    TimingMetric[\"requestStart\"] = \"requestStart\";\n    TimingMetric[\"requestEnd\"] = \"requestEnd\";\n    TimingMetric[\"visitEnd\"] = \"visitEnd\";\n})(TimingMetric || (TimingMetric = {}));\nvar VisitState;\n(function (VisitState) {\n    VisitState[\"initialized\"] = \"initialized\";\n    VisitState[\"started\"] = \"started\";\n    VisitState[\"canceled\"] = \"canceled\";\n    VisitState[\"failed\"] = \"failed\";\n    VisitState[\"completed\"] = \"completed\";\n})(VisitState || (VisitState = {}));\nconst defaultOptions = {\n    action: \"advance\",\n    historyChanged: false,\n    visitCachedSnapshot: () => { },\n    willRender: true,\n    updateHistory: true,\n    shouldCacheSnapshot: true,\n    acceptsStreamResponse: false,\n};\nvar SystemStatusCode;\n(function (SystemStatusCode) {\n    SystemStatusCode[SystemStatusCode[\"networkFailure\"] = 0] = \"networkFailure\";\n    SystemStatusCode[SystemStatusCode[\"timeoutFailure\"] = -1] = \"timeoutFailure\";\n    SystemStatusCode[SystemStatusCode[\"contentTypeMismatch\"] = -2] = \"contentTypeMismatch\";\n})(SystemStatusCode || (SystemStatusCode = {}));\nclass Visit {\n    constructor(delegate, location, restorationIdentifier, options = {}) {\n        this.identifier = uuid();\n        this.timingMetrics = {};\n        this.followedRedirect = false;\n        this.historyChanged = false;\n        this.scrolled = false;\n        this.shouldCacheSnapshot = true;\n        this.acceptsStreamResponse = false;\n        this.snapshotCached = false;\n        this.state = VisitState.initialized;\n        this.delegate = delegate;\n        this.location = location;\n        this.restorationIdentifier = restorationIdentifier || uuid();\n        const { action, historyChanged, referrer, snapshot, snapshotHTML, response, visitCachedSnapshot, willRender, updateHistory, shouldCacheSnapshot, acceptsStreamResponse, } = Object.assign(Object.assign({}, defaultOptions), options);\n        this.action = action;\n        this.historyChanged = historyChanged;\n        this.referrer = referrer;\n        this.snapshot = snapshot;\n        this.snapshotHTML = snapshotHTML;\n        this.response = response;\n        this.isSamePage = this.delegate.locationWithActionIsSamePage(this.location, this.action);\n        this.visitCachedSnapshot = visitCachedSnapshot;\n        this.willRender = willRender;\n        this.updateHistory = updateHistory;\n        this.scrolled = !willRender;\n        this.shouldCacheSnapshot = shouldCacheSnapshot;\n        this.acceptsStreamResponse = acceptsStreamResponse;\n    }\n    get adapter() {\n        return this.delegate.adapter;\n    }\n    get view() {\n        return this.delegate.view;\n    }\n    get history() {\n        return this.delegate.history;\n    }\n    get restorationData() {\n        return this.history.getRestorationDataForIdentifier(this.restorationIdentifier);\n    }\n    get silent() {\n        return this.isSamePage;\n    }\n    start() {\n        if (this.state == VisitState.initialized) {\n            this.recordTimingMetric(TimingMetric.visitStart);\n            this.state = VisitState.started;\n            this.adapter.visitStarted(this);\n            this.delegate.visitStarted(this);\n        }\n    }\n    cancel() {\n        if (this.state == VisitState.started) {\n            if (this.request) {\n                this.request.cancel();\n            }\n            this.cancelRender();\n            this.state = VisitState.canceled;\n        }\n    }\n    complete() {\n        if (this.state == VisitState.started) {\n            this.recordTimingMetric(TimingMetric.visitEnd);\n            this.state = VisitState.completed;\n            this.followRedirect();\n            if (!this.followedRedirect) {\n                this.adapter.visitCompleted(this);\n                this.delegate.visitCompleted(this);\n            }\n        }\n    }\n    fail() {\n        if (this.state == VisitState.started) {\n            this.state = VisitState.failed;\n            this.adapter.visitFailed(this);\n        }\n    }\n    changeHistory() {\n        var _a;\n        if (!this.historyChanged && this.updateHistory) {\n            const actionForHistory = this.location.href === ((_a = this.referrer) === null || _a === void 0 ? void 0 : _a.href) ? \"replace\" : this.action;\n            const method = getHistoryMethodForAction(actionForHistory);\n            this.history.update(method, this.location, this.restorationIdentifier);\n            this.historyChanged = true;\n        }\n    }\n    issueRequest() {\n        if (this.hasPreloadedResponse()) {\n            this.simulateRequest();\n        }\n        else if (this.shouldIssueRequest() && !this.request) {\n            this.request = new FetchRequest(this, FetchMethod.get, this.location);\n            this.request.perform();\n        }\n    }\n    simulateRequest() {\n        if (this.response) {\n            this.startRequest();\n            this.recordResponse();\n            this.finishRequest();\n        }\n    }\n    startRequest() {\n        this.recordTimingMetric(TimingMetric.requestStart);\n        this.adapter.visitRequestStarted(this);\n    }\n    recordResponse(response = this.response) {\n        this.response = response;\n        if (response) {\n            const { statusCode } = response;\n            if (isSuccessful(statusCode)) {\n                this.adapter.visitRequestCompleted(this);\n            }\n            else {\n                this.adapter.visitRequestFailedWithStatusCode(this, statusCode);\n            }\n        }\n    }\n    finishRequest() {\n        this.recordTimingMetric(TimingMetric.requestEnd);\n        this.adapter.visitRequestFinished(this);\n    }\n    loadResponse() {\n        if (this.response) {\n            const { statusCode, responseHTML } = this.response;\n            this.render(async () => {\n                if (this.shouldCacheSnapshot)\n                    this.cacheSnapshot();\n                if (this.view.renderPromise)\n                    await this.view.renderPromise;\n                if (isSuccessful(statusCode) && responseHTML != null) {\n                    await this.view.renderPage(PageSnapshot.fromHTMLString(responseHTML), false, this.willRender, this);\n                    this.performScroll();\n                    this.adapter.visitRendered(this);\n                    this.complete();\n                }\n                else {\n                    await this.view.renderError(PageSnapshot.fromHTMLString(responseHTML), this);\n                    this.adapter.visitRendered(this);\n                    this.fail();\n                }\n            });\n        }\n    }\n    getCachedSnapshot() {\n        const snapshot = this.view.getCachedSnapshotForLocation(this.location) || this.getPreloadedSnapshot();\n        if (snapshot && (!getAnchor(this.location) || snapshot.hasAnchor(getAnchor(this.location)))) {\n            if (this.action == \"restore\" || snapshot.isPreviewable) {\n                return snapshot;\n            }\n        }\n    }\n    getPreloadedSnapshot() {\n        if (this.snapshotHTML) {\n            return PageSnapshot.fromHTMLString(this.snapshotHTML);\n        }\n    }\n    hasCachedSnapshot() {\n        return this.getCachedSnapshot() != null;\n    }\n    loadCachedSnapshot() {\n        const snapshot = this.getCachedSnapshot();\n        if (snapshot) {\n            const isPreview = this.shouldIssueRequest();\n            this.render(async () => {\n                this.cacheSnapshot();\n                if (this.isSamePage) {\n                    this.adapter.visitRendered(this);\n                }\n                else {\n                    if (this.view.renderPromise)\n                        await this.view.renderPromise;\n                    await this.view.renderPage(snapshot, isPreview, this.willRender, this);\n                    this.performScroll();\n                    this.adapter.visitRendered(this);\n                    if (!isPreview) {\n                        this.complete();\n                    }\n                }\n            });\n        }\n    }\n    followRedirect() {\n        var _a;\n        if (this.redirectedToLocation && !this.followedRedirect && ((_a = this.response) === null || _a === void 0 ? void 0 : _a.redirected)) {\n            this.adapter.visitProposedToLocation(this.redirectedToLocation, {\n                action: \"replace\",\n                response: this.response,\n                shouldCacheSnapshot: false,\n                willRender: false,\n            });\n            this.followedRedirect = true;\n        }\n    }\n    goToSamePageAnchor() {\n        if (this.isSamePage) {\n            this.render(async () => {\n                this.cacheSnapshot();\n                this.performScroll();\n                this.changeHistory();\n                this.adapter.visitRendered(this);\n            });\n        }\n    }\n    prepareRequest(request) {\n        if (this.acceptsStreamResponse) {\n            request.acceptResponseType(StreamMessage.contentType);\n        }\n    }\n    requestStarted() {\n        this.startRequest();\n    }\n    requestPreventedHandlingResponse(_request, _response) { }\n    async requestSucceededWithResponse(request, response) {\n        const responseHTML = await response.responseHTML;\n        const { redirected, statusCode } = response;\n        if (responseHTML == undefined) {\n            this.recordResponse({\n                statusCode: SystemStatusCode.contentTypeMismatch,\n                redirected,\n            });\n        }\n        else {\n            this.redirectedToLocation = response.redirected ? response.location : undefined;\n            this.recordResponse({ statusCode: statusCode, responseHTML, redirected });\n        }\n    }\n    async requestFailedWithResponse(request, response) {\n        const responseHTML = await response.responseHTML;\n        const { redirected, statusCode } = response;\n        if (responseHTML == undefined) {\n            this.recordResponse({\n                statusCode: SystemStatusCode.contentTypeMismatch,\n                redirected,\n            });\n        }\n        else {\n            this.recordResponse({ statusCode: statusCode, responseHTML, redirected });\n        }\n    }\n    requestErrored(_request, _error) {\n        this.recordResponse({\n            statusCode: SystemStatusCode.networkFailure,\n            redirected: false,\n        });\n    }\n    requestFinished() {\n        this.finishRequest();\n    }\n    performScroll() {\n        if (!this.scrolled && !this.view.forceReloaded) {\n            if (this.action == \"restore\") {\n                this.scrollToRestoredPosition() || this.scrollToAnchor() || this.view.scrollToTop();\n            }\n            else {\n                this.scrollToAnchor() || this.view.scrollToTop();\n            }\n            if (this.isSamePage) {\n                this.delegate.visitScrolledToSamePageLocation(this.view.lastRenderedLocation, this.location);\n            }\n            this.scrolled = true;\n        }\n    }\n    scrollToRestoredPosition() {\n        const { scrollPosition } = this.restorationData;\n        if (scrollPosition) {\n            this.view.scrollToPosition(scrollPosition);\n            return true;\n        }\n    }\n    scrollToAnchor() {\n        const anchor = getAnchor(this.location);\n        if (anchor != null) {\n            this.view.scrollToAnchor(anchor);\n            return true;\n        }\n    }\n    recordTimingMetric(metric) {\n        this.timingMetrics[metric] = new Date().getTime();\n    }\n    getTimingMetrics() {\n        return Object.assign({}, this.timingMetrics);\n    }\n    getHistoryMethodForAction(action) {\n        switch (action) {\n            case \"replace\":\n                return history.replaceState;\n            case \"advance\":\n            case \"restore\":\n                return history.pushState;\n        }\n    }\n    hasPreloadedResponse() {\n        return typeof this.response == \"object\";\n    }\n    shouldIssueRequest() {\n        if (this.isSamePage) {\n            return false;\n        }\n        else if (this.action == \"restore\") {\n            return !this.hasCachedSnapshot();\n        }\n        else {\n            return this.willRender;\n        }\n    }\n    cacheSnapshot() {\n        if (!this.snapshotCached) {\n            this.view.cacheSnapshot(this.snapshot).then((snapshot) => snapshot && this.visitCachedSnapshot(snapshot));\n            this.snapshotCached = true;\n        }\n    }\n    async render(callback) {\n        this.cancelRender();\n        await new Promise((resolve) => {\n            this.frame = requestAnimationFrame(() => resolve());\n        });\n        await callback();\n        delete this.frame;\n    }\n    cancelRender() {\n        if (this.frame) {\n            cancelAnimationFrame(this.frame);\n            delete this.frame;\n        }\n    }\n}\nfunction isSuccessful(statusCode) {\n    return statusCode >= 200 && statusCode < 300;\n}\n\nclass BrowserAdapter {\n    constructor(session) {\n        this.progressBar = new ProgressBar();\n        this.showProgressBar = () => {\n            this.progressBar.show();\n        };\n        this.session = session;\n    }\n    visitProposedToLocation(location, options) {\n        this.navigator.startVisit(location, (options === null || options === void 0 ? void 0 : options.restorationIdentifier) || uuid(), options);\n    }\n    visitStarted(visit) {\n        this.location = visit.location;\n        visit.loadCachedSnapshot();\n        visit.issueRequest();\n        visit.goToSamePageAnchor();\n    }\n    visitRequestStarted(visit) {\n        this.progressBar.setValue(0);\n        if (visit.hasCachedSnapshot() || visit.action != \"restore\") {\n            this.showVisitProgressBarAfterDelay();\n        }\n        else {\n            this.showProgressBar();\n        }\n    }\n    visitRequestCompleted(visit) {\n        visit.loadResponse();\n    }\n    visitRequestFailedWithStatusCode(visit, statusCode) {\n        switch (statusCode) {\n            case SystemStatusCode.networkFailure:\n            case SystemStatusCode.timeoutFailure:\n            case SystemStatusCode.contentTypeMismatch:\n                return this.reload({\n                    reason: \"request_failed\",\n                    context: {\n                        statusCode,\n                    },\n                });\n            default:\n                return visit.loadResponse();\n        }\n    }\n    visitRequestFinished(_visit) {\n        this.progressBar.setValue(1);\n        this.hideVisitProgressBar();\n    }\n    visitCompleted(_visit) { }\n    pageInvalidated(reason) {\n        this.reload(reason);\n    }\n    visitFailed(_visit) { }\n    visitRendered(_visit) { }\n    formSubmissionStarted(_formSubmission) {\n        this.progressBar.setValue(0);\n        this.showFormProgressBarAfterDelay();\n    }\n    formSubmissionFinished(_formSubmission) {\n        this.progressBar.setValue(1);\n        this.hideFormProgressBar();\n    }\n    showVisitProgressBarAfterDelay() {\n        this.visitProgressBarTimeout = window.setTimeout(this.showProgressBar, this.session.progressBarDelay);\n    }\n    hideVisitProgressBar() {\n        this.progressBar.hide();\n        if (this.visitProgressBarTimeout != null) {\n            window.clearTimeout(this.visitProgressBarTimeout);\n            delete this.visitProgressBarTimeout;\n        }\n    }\n    showFormProgressBarAfterDelay() {\n        if (this.formProgressBarTimeout == null) {\n            this.formProgressBarTimeout = window.setTimeout(this.showProgressBar, this.session.progressBarDelay);\n        }\n    }\n    hideFormProgressBar() {\n        this.progressBar.hide();\n        if (this.formProgressBarTimeout != null) {\n            window.clearTimeout(this.formProgressBarTimeout);\n            delete this.formProgressBarTimeout;\n        }\n    }\n    reload(reason) {\n        var _a;\n        dispatch(\"turbo:reload\", { detail: reason });\n        window.location.href = ((_a = this.location) === null || _a === void 0 ? void 0 : _a.toString()) || window.location.href;\n    }\n    get navigator() {\n        return this.session.navigator;\n    }\n}\n\nclass CacheObserver {\n    constructor() {\n        this.selector = \"[data-turbo-temporary]\";\n        this.deprecatedSelector = \"[data-turbo-cache=false]\";\n        this.started = false;\n        this.removeTemporaryElements = ((_event) => {\n            for (const element of this.temporaryElements) {\n                element.remove();\n            }\n        });\n    }\n    start() {\n        if (!this.started) {\n            this.started = true;\n            addEventListener(\"turbo:before-cache\", this.removeTemporaryElements, false);\n        }\n    }\n    stop() {\n        if (this.started) {\n            this.started = false;\n            removeEventListener(\"turbo:before-cache\", this.removeTemporaryElements, false);\n        }\n    }\n    get temporaryElements() {\n        return [...document.querySelectorAll(this.selector), ...this.temporaryElementsWithDeprecation];\n    }\n    get temporaryElementsWithDeprecation() {\n        const elements = document.querySelectorAll(this.deprecatedSelector);\n        if (elements.length) {\n            console.warn(`The ${this.deprecatedSelector} selector is deprecated and will be removed in a future version. Use ${this.selector} instead.`);\n        }\n        return [...elements];\n    }\n}\n\nclass FrameRedirector {\n    constructor(session, element) {\n        this.session = session;\n        this.element = element;\n        this.linkInterceptor = new LinkInterceptor(this, element);\n        this.formSubmitObserver = new FormSubmitObserver(this, element);\n    }\n    start() {\n        this.linkInterceptor.start();\n        this.formSubmitObserver.start();\n    }\n    stop() {\n        this.linkInterceptor.stop();\n        this.formSubmitObserver.stop();\n    }\n    shouldInterceptLinkClick(element, _location, _event) {\n        return this.shouldRedirect(element);\n    }\n    linkClickIntercepted(element, url, event) {\n        const frame = this.findFrameElement(element);\n        if (frame) {\n            frame.delegate.linkClickIntercepted(element, url, event);\n        }\n    }\n    willSubmitForm(element, submitter) {\n        return (element.closest(\"turbo-frame\") == null &&\n            this.shouldSubmit(element, submitter) &&\n            this.shouldRedirect(element, submitter));\n    }\n    formSubmitted(element, submitter) {\n        const frame = this.findFrameElement(element, submitter);\n        if (frame) {\n            frame.delegate.formSubmitted(element, submitter);\n        }\n    }\n    shouldSubmit(form, submitter) {\n        var _a;\n        const action = getAction(form, submitter);\n        const meta = this.element.ownerDocument.querySelector(`meta[name=\"turbo-root\"]`);\n        const rootLocation = expandURL((_a = meta === null || meta === void 0 ? void 0 : meta.content) !== null && _a !== void 0 ? _a : \"/\");\n        return this.shouldRedirect(form, submitter) && locationIsVisitable(action, rootLocation);\n    }\n    shouldRedirect(element, submitter) {\n        const isNavigatable = element instanceof HTMLFormElement\n            ? this.session.submissionIsNavigatable(element, submitter)\n            : this.session.elementIsNavigatable(element);\n        if (isNavigatable) {\n            const frame = this.findFrameElement(element, submitter);\n            return frame ? frame != element.closest(\"turbo-frame\") : false;\n        }\n        else {\n            return false;\n        }\n    }\n    findFrameElement(element, submitter) {\n        const id = (submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"data-turbo-frame\")) || element.getAttribute(\"data-turbo-frame\");\n        if (id && id != \"_top\") {\n            const frame = this.element.querySelector(`#${id}:not([disabled])`);\n            if (frame instanceof FrameElement) {\n                return frame;\n            }\n        }\n    }\n}\n\nclass History {\n    constructor(delegate) {\n        this.restorationIdentifier = uuid();\n        this.restorationData = {};\n        this.started = false;\n        this.pageLoaded = false;\n        this.onPopState = (event) => {\n            if (this.shouldHandlePopState()) {\n                const { turbo } = event.state || {};\n                if (turbo) {\n                    this.location = new URL(window.location.href);\n                    const { restorationIdentifier } = turbo;\n                    this.restorationIdentifier = restorationIdentifier;\n                    this.delegate.historyPoppedToLocationWithRestorationIdentifier(this.location, restorationIdentifier);\n                }\n            }\n        };\n        this.onPageLoad = async (_event) => {\n            await nextMicrotask();\n            this.pageLoaded = true;\n        };\n        this.delegate = delegate;\n    }\n    start() {\n        if (!this.started) {\n            addEventListener(\"popstate\", this.onPopState, false);\n            addEventListener(\"load\", this.onPageLoad, false);\n            this.started = true;\n            this.replace(new URL(window.location.href));\n        }\n    }\n    stop() {\n        if (this.started) {\n            removeEventListener(\"popstate\", this.onPopState, false);\n            removeEventListener(\"load\", this.onPageLoad, false);\n            this.started = false;\n        }\n    }\n    push(location, restorationIdentifier) {\n        this.update(history.pushState, location, restorationIdentifier);\n    }\n    replace(location, restorationIdentifier) {\n        this.update(history.replaceState, location, restorationIdentifier);\n    }\n    update(method, location, restorationIdentifier = uuid()) {\n        const state = { turbo: { restorationIdentifier } };\n        method.call(history, state, \"\", location.href);\n        this.location = location;\n        this.restorationIdentifier = restorationIdentifier;\n    }\n    getRestorationDataForIdentifier(restorationIdentifier) {\n        return this.restorationData[restorationIdentifier] || {};\n    }\n    updateRestorationData(additionalData) {\n        const { restorationIdentifier } = this;\n        const restorationData = this.restorationData[restorationIdentifier];\n        this.restorationData[restorationIdentifier] = Object.assign(Object.assign({}, restorationData), additionalData);\n    }\n    assumeControlOfScrollRestoration() {\n        var _a;\n        if (!this.previousScrollRestoration) {\n            this.previousScrollRestoration = (_a = history.scrollRestoration) !== null && _a !== void 0 ? _a : \"auto\";\n            history.scrollRestoration = \"manual\";\n        }\n    }\n    relinquishControlOfScrollRestoration() {\n        if (this.previousScrollRestoration) {\n            history.scrollRestoration = this.previousScrollRestoration;\n            delete this.previousScrollRestoration;\n        }\n    }\n    shouldHandlePopState() {\n        return this.pageIsLoaded();\n    }\n    pageIsLoaded() {\n        return this.pageLoaded || document.readyState == \"complete\";\n    }\n}\n\nclass Navigator {\n    constructor(delegate) {\n        this.delegate = delegate;\n    }\n    proposeVisit(location, options = {}) {\n        if (this.delegate.allowsVisitingLocationWithAction(location, options.action)) {\n            if (locationIsVisitable(location, this.view.snapshot.rootLocation)) {\n                this.delegate.visitProposedToLocation(location, options);\n            }\n            else {\n                window.location.href = location.toString();\n            }\n        }\n    }\n    startVisit(locatable, restorationIdentifier, options = {}) {\n        this.stop();\n        this.currentVisit = new Visit(this, expandURL(locatable), restorationIdentifier, Object.assign({ referrer: this.location }, options));\n        this.currentVisit.start();\n    }\n    submitForm(form, submitter) {\n        this.stop();\n        this.formSubmission = new FormSubmission(this, form, submitter, true);\n        this.formSubmission.start();\n    }\n    stop() {\n        if (this.formSubmission) {\n            this.formSubmission.stop();\n            delete this.formSubmission;\n        }\n        if (this.currentVisit) {\n            this.currentVisit.cancel();\n            delete this.currentVisit;\n        }\n    }\n    get adapter() {\n        return this.delegate.adapter;\n    }\n    get view() {\n        return this.delegate.view;\n    }\n    get history() {\n        return this.delegate.history;\n    }\n    formSubmissionStarted(formSubmission) {\n        if (typeof this.adapter.formSubmissionStarted === \"function\") {\n            this.adapter.formSubmissionStarted(formSubmission);\n        }\n    }\n    async formSubmissionSucceededWithResponse(formSubmission, fetchResponse) {\n        if (formSubmission == this.formSubmission) {\n            const responseHTML = await fetchResponse.responseHTML;\n            if (responseHTML) {\n                const shouldCacheSnapshot = formSubmission.isSafe;\n                if (!shouldCacheSnapshot) {\n                    this.view.clearSnapshotCache();\n                }\n                const { statusCode, redirected } = fetchResponse;\n                const action = this.getActionForFormSubmission(formSubmission);\n                const visitOptions = {\n                    action,\n                    shouldCacheSnapshot,\n                    response: { statusCode, responseHTML, redirected },\n                };\n                this.proposeVisit(fetchResponse.location, visitOptions);\n            }\n        }\n    }\n    async formSubmissionFailedWithResponse(formSubmission, fetchResponse) {\n        const responseHTML = await fetchResponse.responseHTML;\n        if (responseHTML) {\n            const snapshot = PageSnapshot.fromHTMLString(responseHTML);\n            if (fetchResponse.serverError) {\n                await this.view.renderError(snapshot, this.currentVisit);\n            }\n            else {\n                await this.view.renderPage(snapshot, false, true, this.currentVisit);\n            }\n            this.view.scrollToTop();\n            this.view.clearSnapshotCache();\n        }\n    }\n    formSubmissionErrored(formSubmission, error) {\n        console.error(error);\n    }\n    formSubmissionFinished(formSubmission) {\n        if (typeof this.adapter.formSubmissionFinished === \"function\") {\n            this.adapter.formSubmissionFinished(formSubmission);\n        }\n    }\n    visitStarted(visit) {\n        this.delegate.visitStarted(visit);\n    }\n    visitCompleted(visit) {\n        this.delegate.visitCompleted(visit);\n    }\n    locationWithActionIsSamePage(location, action) {\n        const anchor = getAnchor(location);\n        const currentAnchor = getAnchor(this.view.lastRenderedLocation);\n        const isRestorationToTop = action === \"restore\" && typeof anchor === \"undefined\";\n        return (action !== \"replace\" &&\n            getRequestURL(location) === getRequestURL(this.view.lastRenderedLocation) &&\n            (isRestorationToTop || (anchor != null && anchor !== currentAnchor)));\n    }\n    visitScrolledToSamePageLocation(oldURL, newURL) {\n        this.delegate.visitScrolledToSamePageLocation(oldURL, newURL);\n    }\n    get location() {\n        return this.history.location;\n    }\n    get restorationIdentifier() {\n        return this.history.restorationIdentifier;\n    }\n    getActionForFormSubmission({ submitter, formElement }) {\n        return getVisitAction(submitter, formElement) || \"advance\";\n    }\n}\n\nvar PageStage;\n(function (PageStage) {\n    PageStage[PageStage[\"initial\"] = 0] = \"initial\";\n    PageStage[PageStage[\"loading\"] = 1] = \"loading\";\n    PageStage[PageStage[\"interactive\"] = 2] = \"interactive\";\n    PageStage[PageStage[\"complete\"] = 3] = \"complete\";\n})(PageStage || (PageStage = {}));\nclass PageObserver {\n    constructor(delegate) {\n        this.stage = PageStage.initial;\n        this.started = false;\n        this.interpretReadyState = () => {\n            const { readyState } = this;\n            if (readyState == \"interactive\") {\n                this.pageIsInteractive();\n            }\n            else if (readyState == \"complete\") {\n                this.pageIsComplete();\n            }\n        };\n        this.pageWillUnload = () => {\n            this.delegate.pageWillUnload();\n        };\n        this.delegate = delegate;\n    }\n    start() {\n        if (!this.started) {\n            if (this.stage == PageStage.initial) {\n                this.stage = PageStage.loading;\n            }\n            document.addEventListener(\"readystatechange\", this.interpretReadyState, false);\n            addEventListener(\"pagehide\", this.pageWillUnload, false);\n            this.started = true;\n        }\n    }\n    stop() {\n        if (this.started) {\n            document.removeEventListener(\"readystatechange\", this.interpretReadyState, false);\n            removeEventListener(\"pagehide\", this.pageWillUnload, false);\n            this.started = false;\n        }\n    }\n    pageIsInteractive() {\n        if (this.stage == PageStage.loading) {\n            this.stage = PageStage.interactive;\n            this.delegate.pageBecameInteractive();\n        }\n    }\n    pageIsComplete() {\n        this.pageIsInteractive();\n        if (this.stage == PageStage.interactive) {\n            this.stage = PageStage.complete;\n            this.delegate.pageLoaded();\n        }\n    }\n    get readyState() {\n        return document.readyState;\n    }\n}\n\nclass ScrollObserver {\n    constructor(delegate) {\n        this.started = false;\n        this.onScroll = () => {\n            this.updatePosition({ x: window.pageXOffset, y: window.pageYOffset });\n        };\n        this.delegate = delegate;\n    }\n    start() {\n        if (!this.started) {\n            addEventListener(\"scroll\", this.onScroll, false);\n            this.onScroll();\n            this.started = true;\n        }\n    }\n    stop() {\n        if (this.started) {\n            removeEventListener(\"scroll\", this.onScroll, false);\n            this.started = false;\n        }\n    }\n    updatePosition(position) {\n        this.delegate.scrollPositionChanged(position);\n    }\n}\n\nclass StreamMessageRenderer {\n    render({ fragment }) {\n        Bardo.preservingPermanentElements(this, getPermanentElementMapForFragment(fragment), () => document.documentElement.appendChild(fragment));\n    }\n    enteringBardo(currentPermanentElement, newPermanentElement) {\n        newPermanentElement.replaceWith(currentPermanentElement.cloneNode(true));\n    }\n    leavingBardo() { }\n}\nfunction getPermanentElementMapForFragment(fragment) {\n    const permanentElementsInDocument = queryPermanentElementsAll(document.documentElement);\n    const permanentElementMap = {};\n    for (const permanentElementInDocument of permanentElementsInDocument) {\n        const { id } = permanentElementInDocument;\n        for (const streamElement of fragment.querySelectorAll(\"turbo-stream\")) {\n            const elementInStream = getPermanentElementById(streamElement.templateElement.content, id);\n            if (elementInStream) {\n                permanentElementMap[id] = [permanentElementInDocument, elementInStream];\n            }\n        }\n    }\n    return permanentElementMap;\n}\n\nclass StreamObserver {\n    constructor(delegate) {\n        this.sources = new Set();\n        this.started = false;\n        this.inspectFetchResponse = ((event) => {\n            const response = fetchResponseFromEvent(event);\n            if (response && fetchResponseIsStream(response)) {\n                event.preventDefault();\n                this.receiveMessageResponse(response);\n            }\n        });\n        this.receiveMessageEvent = (event) => {\n            if (this.started && typeof event.data == \"string\") {\n                this.receiveMessageHTML(event.data);\n            }\n        };\n        this.delegate = delegate;\n    }\n    start() {\n        if (!this.started) {\n            this.started = true;\n            addEventListener(\"turbo:before-fetch-response\", this.inspectFetchResponse, false);\n        }\n    }\n    stop() {\n        if (this.started) {\n            this.started = false;\n            removeEventListener(\"turbo:before-fetch-response\", this.inspectFetchResponse, false);\n        }\n    }\n    connectStreamSource(source) {\n        if (!this.streamSourceIsConnected(source)) {\n            this.sources.add(source);\n            source.addEventListener(\"message\", this.receiveMessageEvent, false);\n        }\n    }\n    disconnectStreamSource(source) {\n        if (this.streamSourceIsConnected(source)) {\n            this.sources.delete(source);\n            source.removeEventListener(\"message\", this.receiveMessageEvent, false);\n        }\n    }\n    streamSourceIsConnected(source) {\n        return this.sources.has(source);\n    }\n    async receiveMessageResponse(response) {\n        const html = await response.responseHTML;\n        if (html) {\n            this.receiveMessageHTML(html);\n        }\n    }\n    receiveMessageHTML(html) {\n        this.delegate.receivedMessageFromStream(StreamMessage.wrap(html));\n    }\n}\nfunction fetchResponseFromEvent(event) {\n    var _a;\n    const fetchResponse = (_a = event.detail) === null || _a === void 0 ? void 0 : _a.fetchResponse;\n    if (fetchResponse instanceof FetchResponse) {\n        return fetchResponse;\n    }\n}\nfunction fetchResponseIsStream(response) {\n    var _a;\n    const contentType = (_a = response.contentType) !== null && _a !== void 0 ? _a : \"\";\n    return contentType.startsWith(StreamMessage.contentType);\n}\n\nclass ErrorRenderer extends Renderer {\n    static renderElement(currentElement, newElement) {\n        const { documentElement, body } = document;\n        documentElement.replaceChild(newElement, body);\n    }\n    async render() {\n        this.replaceHeadAndBody();\n        this.activateScriptElements();\n    }\n    replaceHeadAndBody() {\n        const { documentElement, head } = document;\n        documentElement.replaceChild(this.newHead, head);\n        this.renderElement(this.currentElement, this.newElement);\n    }\n    activateScriptElements() {\n        for (const replaceableElement of this.scriptElements) {\n            const parentNode = replaceableElement.parentNode;\n            if (parentNode) {\n                const element = activateScriptElement(replaceableElement);\n                parentNode.replaceChild(element, replaceableElement);\n            }\n        }\n    }\n    get newHead() {\n        return this.newSnapshot.headSnapshot.element;\n    }\n    get scriptElements() {\n        return document.documentElement.querySelectorAll(\"script\");\n    }\n}\n\nclass PageRenderer extends Renderer {\n    static renderElement(currentElement, newElement) {\n        if (document.body && newElement instanceof HTMLBodyElement) {\n            document.body.replaceWith(newElement);\n        }\n        else {\n            document.documentElement.appendChild(newElement);\n        }\n    }\n    get shouldRender() {\n        return this.newSnapshot.isVisitable && this.trackedElementsAreIdentical;\n    }\n    get reloadReason() {\n        if (!this.newSnapshot.isVisitable) {\n            return {\n                reason: \"turbo_visit_control_is_reload\",\n            };\n        }\n        if (!this.trackedElementsAreIdentical) {\n            return {\n                reason: \"tracked_element_mismatch\",\n            };\n        }\n    }\n    async prepareToRender() {\n        await this.mergeHead();\n    }\n    async render() {\n        if (this.willRender) {\n            await this.replaceBody();\n        }\n    }\n    finishRendering() {\n        super.finishRendering();\n        if (!this.isPreview) {\n            this.focusFirstAutofocusableElement();\n        }\n    }\n    get currentHeadSnapshot() {\n        return this.currentSnapshot.headSnapshot;\n    }\n    get newHeadSnapshot() {\n        return this.newSnapshot.headSnapshot;\n    }\n    get newElement() {\n        return this.newSnapshot.element;\n    }\n    async mergeHead() {\n        const mergedHeadElements = this.mergeProvisionalElements();\n        const newStylesheetElements = this.copyNewHeadStylesheetElements();\n        this.copyNewHeadScriptElements();\n        await mergedHeadElements;\n        await newStylesheetElements;\n    }\n    async replaceBody() {\n        await this.preservingPermanentElements(async () => {\n            this.activateNewBody();\n            await this.assignNewBody();\n        });\n    }\n    get trackedElementsAreIdentical() {\n        return this.currentHeadSnapshot.trackedElementSignature == this.newHeadSnapshot.trackedElementSignature;\n    }\n    async copyNewHeadStylesheetElements() {\n        const loadingElements = [];\n        for (const element of this.newHeadStylesheetElements) {\n            loadingElements.push(waitForLoad(element));\n            document.head.appendChild(element);\n        }\n        await Promise.all(loadingElements);\n    }\n    copyNewHeadScriptElements() {\n        for (const element of this.newHeadScriptElements) {\n            document.head.appendChild(activateScriptElement(element));\n        }\n    }\n    async mergeProvisionalElements() {\n        const newHeadElements = [...this.newHeadProvisionalElements];\n        for (const element of this.currentHeadProvisionalElements) {\n            if (!this.isCurrentElementInElementList(element, newHeadElements)) {\n                document.head.removeChild(element);\n            }\n        }\n        for (const element of newHeadElements) {\n            document.head.appendChild(element);\n        }\n    }\n    isCurrentElementInElementList(element, elementList) {\n        for (const [index, newElement] of elementList.entries()) {\n            if (element.tagName == \"TITLE\") {\n                if (newElement.tagName != \"TITLE\") {\n                    continue;\n                }\n                if (element.innerHTML == newElement.innerHTML) {\n                    elementList.splice(index, 1);\n                    return true;\n                }\n            }\n            if (newElement.isEqualNode(element)) {\n                elementList.splice(index, 1);\n                return true;\n            }\n        }\n        return false;\n    }\n    removeCurrentHeadProvisionalElements() {\n        for (const element of this.currentHeadProvisionalElements) {\n            document.head.removeChild(element);\n        }\n    }\n    copyNewHeadProvisionalElements() {\n        for (const element of this.newHeadProvisionalElements) {\n            document.head.appendChild(element);\n        }\n    }\n    activateNewBody() {\n        document.adoptNode(this.newElement);\n        this.activateNewBodyScriptElements();\n    }\n    activateNewBodyScriptElements() {\n        for (const inertScriptElement of this.newBodyScriptElements) {\n            const activatedScriptElement = activateScriptElement(inertScriptElement);\n            inertScriptElement.replaceWith(activatedScriptElement);\n        }\n    }\n    async assignNewBody() {\n        await this.renderElement(this.currentElement, this.newElement);\n    }\n    get newHeadStylesheetElements() {\n        return this.newHeadSnapshot.getStylesheetElementsNotInSnapshot(this.currentHeadSnapshot);\n    }\n    get newHeadScriptElements() {\n        return this.newHeadSnapshot.getScriptElementsNotInSnapshot(this.currentHeadSnapshot);\n    }\n    get currentHeadProvisionalElements() {\n        return this.currentHeadSnapshot.provisionalElements;\n    }\n    get newHeadProvisionalElements() {\n        return this.newHeadSnapshot.provisionalElements;\n    }\n    get newBodyScriptElements() {\n        return this.newElement.querySelectorAll(\"script\");\n    }\n}\n\nclass SnapshotCache {\n    constructor(size) {\n        this.keys = [];\n        this.snapshots = {};\n        this.size = size;\n    }\n    has(location) {\n        return toCacheKey(location) in this.snapshots;\n    }\n    get(location) {\n        if (this.has(location)) {\n            const snapshot = this.read(location);\n            this.touch(location);\n            return snapshot;\n        }\n    }\n    put(location, snapshot) {\n        this.write(location, snapshot);\n        this.touch(location);\n        return snapshot;\n    }\n    clear() {\n        this.snapshots = {};\n    }\n    read(location) {\n        return this.snapshots[toCacheKey(location)];\n    }\n    write(location, snapshot) {\n        this.snapshots[toCacheKey(location)] = snapshot;\n    }\n    touch(location) {\n        const key = toCacheKey(location);\n        const index = this.keys.indexOf(key);\n        if (index > -1)\n            this.keys.splice(index, 1);\n        this.keys.unshift(key);\n        this.trim();\n    }\n    trim() {\n        for (const key of this.keys.splice(this.size)) {\n            delete this.snapshots[key];\n        }\n    }\n}\n\nclass PageView extends View {\n    constructor() {\n        super(...arguments);\n        this.snapshotCache = new SnapshotCache(10);\n        this.lastRenderedLocation = new URL(location.href);\n        this.forceReloaded = false;\n    }\n    renderPage(snapshot, isPreview = false, willRender = true, visit) {\n        const renderer = new PageRenderer(this.snapshot, snapshot, PageRenderer.renderElement, isPreview, willRender);\n        if (!renderer.shouldRender) {\n            this.forceReloaded = true;\n        }\n        else {\n            visit === null || visit === void 0 ? void 0 : visit.changeHistory();\n        }\n        return this.render(renderer);\n    }\n    renderError(snapshot, visit) {\n        visit === null || visit === void 0 ? void 0 : visit.changeHistory();\n        const renderer = new ErrorRenderer(this.snapshot, snapshot, ErrorRenderer.renderElement, false);\n        return this.render(renderer);\n    }\n    clearSnapshotCache() {\n        this.snapshotCache.clear();\n    }\n    async cacheSnapshot(snapshot = this.snapshot) {\n        if (snapshot.isCacheable) {\n            this.delegate.viewWillCacheSnapshot();\n            const { lastRenderedLocation: location } = this;\n            await nextEventLoopTick();\n            const cachedSnapshot = snapshot.clone();\n            this.snapshotCache.put(location, cachedSnapshot);\n            return cachedSnapshot;\n        }\n    }\n    getCachedSnapshotForLocation(location) {\n        return this.snapshotCache.get(location);\n    }\n    get snapshot() {\n        return PageSnapshot.fromElement(this.element);\n    }\n}\n\nclass Preloader {\n    constructor(delegate) {\n        this.selector = \"a[data-turbo-preload]\";\n        this.delegate = delegate;\n    }\n    get snapshotCache() {\n        return this.delegate.navigator.view.snapshotCache;\n    }\n    start() {\n        if (document.readyState === \"loading\") {\n            return document.addEventListener(\"DOMContentLoaded\", () => {\n                this.preloadOnLoadLinksForView(document.body);\n            });\n        }\n        else {\n            this.preloadOnLoadLinksForView(document.body);\n        }\n    }\n    preloadOnLoadLinksForView(element) {\n        for (const link of element.querySelectorAll(this.selector)) {\n            this.preloadURL(link);\n        }\n    }\n    async preloadURL(link) {\n        const location = new URL(link.href);\n        if (this.snapshotCache.has(location)) {\n            return;\n        }\n        try {\n            const response = await fetch(location.toString(), { headers: { \"VND.PREFETCH\": \"true\", Accept: \"text/html\" } });\n            const responseText = await response.text();\n            const snapshot = PageSnapshot.fromHTMLString(responseText);\n            this.snapshotCache.put(location, snapshot);\n        }\n        catch (_) {\n        }\n    }\n}\n\nclass Session {\n    constructor() {\n        this.navigator = new Navigator(this);\n        this.history = new History(this);\n        this.preloader = new Preloader(this);\n        this.view = new PageView(this, document.documentElement);\n        this.adapter = new BrowserAdapter(this);\n        this.pageObserver = new PageObserver(this);\n        this.cacheObserver = new CacheObserver();\n        this.linkClickObserver = new LinkClickObserver(this, window);\n        this.formSubmitObserver = new FormSubmitObserver(this, document);\n        this.scrollObserver = new ScrollObserver(this);\n        this.streamObserver = new StreamObserver(this);\n        this.formLinkClickObserver = new FormLinkClickObserver(this, document.documentElement);\n        this.frameRedirector = new FrameRedirector(this, document.documentElement);\n        this.streamMessageRenderer = new StreamMessageRenderer();\n        this.drive = true;\n        this.enabled = true;\n        this.progressBarDelay = 500;\n        this.started = false;\n        this.formMode = \"on\";\n    }\n    start() {\n        if (!this.started) {\n            this.pageObserver.start();\n            this.cacheObserver.start();\n            this.formLinkClickObserver.start();\n            this.linkClickObserver.start();\n            this.formSubmitObserver.start();\n            this.scrollObserver.start();\n            this.streamObserver.start();\n            this.frameRedirector.start();\n            this.history.start();\n            this.preloader.start();\n            this.started = true;\n            this.enabled = true;\n        }\n    }\n    disable() {\n        this.enabled = false;\n    }\n    stop() {\n        if (this.started) {\n            this.pageObserver.stop();\n            this.cacheObserver.stop();\n            this.formLinkClickObserver.stop();\n            this.linkClickObserver.stop();\n            this.formSubmitObserver.stop();\n            this.scrollObserver.stop();\n            this.streamObserver.stop();\n            this.frameRedirector.stop();\n            this.history.stop();\n            this.started = false;\n        }\n    }\n    registerAdapter(adapter) {\n        this.adapter = adapter;\n    }\n    visit(location, options = {}) {\n        const frameElement = options.frame ? document.getElementById(options.frame) : null;\n        if (frameElement instanceof FrameElement) {\n            frameElement.src = location.toString();\n            frameElement.loaded;\n        }\n        else {\n            this.navigator.proposeVisit(expandURL(location), options);\n        }\n    }\n    connectStreamSource(source) {\n        this.streamObserver.connectStreamSource(source);\n    }\n    disconnectStreamSource(source) {\n        this.streamObserver.disconnectStreamSource(source);\n    }\n    renderStreamMessage(message) {\n        this.streamMessageRenderer.render(StreamMessage.wrap(message));\n    }\n    clearCache() {\n        this.view.clearSnapshotCache();\n    }\n    setProgressBarDelay(delay) {\n        this.progressBarDelay = delay;\n    }\n    setFormMode(mode) {\n        this.formMode = mode;\n    }\n    get location() {\n        return this.history.location;\n    }\n    get restorationIdentifier() {\n        return this.history.restorationIdentifier;\n    }\n    historyPoppedToLocationWithRestorationIdentifier(location, restorationIdentifier) {\n        if (this.enabled) {\n            this.navigator.startVisit(location, restorationIdentifier, {\n                action: \"restore\",\n                historyChanged: true,\n            });\n        }\n        else {\n            this.adapter.pageInvalidated({\n                reason: \"turbo_disabled\",\n            });\n        }\n    }\n    scrollPositionChanged(position) {\n        this.history.updateRestorationData({ scrollPosition: position });\n    }\n    willSubmitFormLinkToLocation(link, location) {\n        return this.elementIsNavigatable(link) && locationIsVisitable(location, this.snapshot.rootLocation);\n    }\n    submittedFormLinkToLocation() { }\n    willFollowLinkToLocation(link, location, event) {\n        return (this.elementIsNavigatable(link) &&\n            locationIsVisitable(location, this.snapshot.rootLocation) &&\n            this.applicationAllowsFollowingLinkToLocation(link, location, event));\n    }\n    followedLinkToLocation(link, location) {\n        const action = this.getActionForLink(link);\n        const acceptsStreamResponse = link.hasAttribute(\"data-turbo-stream\");\n        this.visit(location.href, { action, acceptsStreamResponse });\n    }\n    allowsVisitingLocationWithAction(location, action) {\n        return this.locationWithActionIsSamePage(location, action) || this.applicationAllowsVisitingLocation(location);\n    }\n    visitProposedToLocation(location, options) {\n        extendURLWithDeprecatedProperties(location);\n        this.adapter.visitProposedToLocation(location, options);\n    }\n    visitStarted(visit) {\n        if (!visit.acceptsStreamResponse) {\n            markAsBusy(document.documentElement);\n        }\n        extendURLWithDeprecatedProperties(visit.location);\n        if (!visit.silent) {\n            this.notifyApplicationAfterVisitingLocation(visit.location, visit.action);\n        }\n    }\n    visitCompleted(visit) {\n        clearBusyState(document.documentElement);\n        this.notifyApplicationAfterPageLoad(visit.getTimingMetrics());\n    }\n    locationWithActionIsSamePage(location, action) {\n        return this.navigator.locationWithActionIsSamePage(location, action);\n    }\n    visitScrolledToSamePageLocation(oldURL, newURL) {\n        this.notifyApplicationAfterVisitingSamePageLocation(oldURL, newURL);\n    }\n    willSubmitForm(form, submitter) {\n        const action = getAction(form, submitter);\n        return (this.submissionIsNavigatable(form, submitter) &&\n            locationIsVisitable(expandURL(action), this.snapshot.rootLocation));\n    }\n    formSubmitted(form, submitter) {\n        this.navigator.submitForm(form, submitter);\n    }\n    pageBecameInteractive() {\n        this.view.lastRenderedLocation = this.location;\n        this.notifyApplicationAfterPageLoad();\n    }\n    pageLoaded() {\n        this.history.assumeControlOfScrollRestoration();\n    }\n    pageWillUnload() {\n        this.history.relinquishControlOfScrollRestoration();\n    }\n    receivedMessageFromStream(message) {\n        this.renderStreamMessage(message);\n    }\n    viewWillCacheSnapshot() {\n        var _a;\n        if (!((_a = this.navigator.currentVisit) === null || _a === void 0 ? void 0 : _a.silent)) {\n            this.notifyApplicationBeforeCachingSnapshot();\n        }\n    }\n    allowsImmediateRender({ element }, options) {\n        const event = this.notifyApplicationBeforeRender(element, options);\n        const { defaultPrevented, detail: { render }, } = event;\n        if (this.view.renderer && render) {\n            this.view.renderer.renderElement = render;\n        }\n        return !defaultPrevented;\n    }\n    viewRenderedSnapshot(_snapshot, _isPreview) {\n        this.view.lastRenderedLocation = this.history.location;\n        this.notifyApplicationAfterRender();\n    }\n    preloadOnLoadLinksForView(element) {\n        this.preloader.preloadOnLoadLinksForView(element);\n    }\n    viewInvalidated(reason) {\n        this.adapter.pageInvalidated(reason);\n    }\n    frameLoaded(frame) {\n        this.notifyApplicationAfterFrameLoad(frame);\n    }\n    frameRendered(fetchResponse, frame) {\n        this.notifyApplicationAfterFrameRender(fetchResponse, frame);\n    }\n    applicationAllowsFollowingLinkToLocation(link, location, ev) {\n        const event = this.notifyApplicationAfterClickingLinkToLocation(link, location, ev);\n        return !event.defaultPrevented;\n    }\n    applicationAllowsVisitingLocation(location) {\n        const event = this.notifyApplicationBeforeVisitingLocation(location);\n        return !event.defaultPrevented;\n    }\n    notifyApplicationAfterClickingLinkToLocation(link, location, event) {\n        return dispatch(\"turbo:click\", {\n            target: link,\n            detail: { url: location.href, originalEvent: event },\n            cancelable: true,\n        });\n    }\n    notifyApplicationBeforeVisitingLocation(location) {\n        return dispatch(\"turbo:before-visit\", {\n            detail: { url: location.href },\n            cancelable: true,\n        });\n    }\n    notifyApplicationAfterVisitingLocation(location, action) {\n        return dispatch(\"turbo:visit\", { detail: { url: location.href, action } });\n    }\n    notifyApplicationBeforeCachingSnapshot() {\n        return dispatch(\"turbo:before-cache\");\n    }\n    notifyApplicationBeforeRender(newBody, options) {\n        return dispatch(\"turbo:before-render\", {\n            detail: Object.assign({ newBody }, options),\n            cancelable: true,\n        });\n    }\n    notifyApplicationAfterRender() {\n        return dispatch(\"turbo:render\");\n    }\n    notifyApplicationAfterPageLoad(timing = {}) {\n        return dispatch(\"turbo:load\", {\n            detail: { url: this.location.href, timing },\n        });\n    }\n    notifyApplicationAfterVisitingSamePageLocation(oldURL, newURL) {\n        dispatchEvent(new HashChangeEvent(\"hashchange\", {\n            oldURL: oldURL.toString(),\n            newURL: newURL.toString(),\n        }));\n    }\n    notifyApplicationAfterFrameLoad(frame) {\n        return dispatch(\"turbo:frame-load\", { target: frame });\n    }\n    notifyApplicationAfterFrameRender(fetchResponse, frame) {\n        return dispatch(\"turbo:frame-render\", {\n            detail: { fetchResponse },\n            target: frame,\n            cancelable: true,\n        });\n    }\n    submissionIsNavigatable(form, submitter) {\n        if (this.formMode == \"off\") {\n            return false;\n        }\n        else {\n            const submitterIsNavigatable = submitter ? this.elementIsNavigatable(submitter) : true;\n            if (this.formMode == \"optin\") {\n                return submitterIsNavigatable && form.closest('[data-turbo=\"true\"]') != null;\n            }\n            else {\n                return submitterIsNavigatable && this.elementIsNavigatable(form);\n            }\n        }\n    }\n    elementIsNavigatable(element) {\n        const container = findClosestRecursively(element, \"[data-turbo]\");\n        const withinFrame = findClosestRecursively(element, \"turbo-frame\");\n        if (this.drive || withinFrame) {\n            if (container) {\n                return container.getAttribute(\"data-turbo\") != \"false\";\n            }\n            else {\n                return true;\n            }\n        }\n        else {\n            if (container) {\n                return container.getAttribute(\"data-turbo\") == \"true\";\n            }\n            else {\n                return false;\n            }\n        }\n    }\n    getActionForLink(link) {\n        return getVisitAction(link) || \"advance\";\n    }\n    get snapshot() {\n        return this.view.snapshot;\n    }\n}\nfunction extendURLWithDeprecatedProperties(url) {\n    Object.defineProperties(url, deprecatedLocationPropertyDescriptors);\n}\nconst deprecatedLocationPropertyDescriptors = {\n    absoluteURL: {\n        get() {\n            return this.toString();\n        },\n    },\n};\n\nclass Cache {\n    constructor(session) {\n        this.session = session;\n    }\n    clear() {\n        this.session.clearCache();\n    }\n    resetCacheControl() {\n        this.setCacheControl(\"\");\n    }\n    exemptPageFromCache() {\n        this.setCacheControl(\"no-cache\");\n    }\n    exemptPageFromPreview() {\n        this.setCacheControl(\"no-preview\");\n    }\n    setCacheControl(value) {\n        setMetaContent(\"turbo-cache-control\", value);\n    }\n}\n\nconst StreamActions = {\n    after() {\n        this.targetElements.forEach((e) => { var _a; return (_a = e.parentElement) === null || _a === void 0 ? void 0 : _a.insertBefore(this.templateContent, e.nextSibling); });\n    },\n    append() {\n        this.removeDuplicateTargetChildren();\n        this.targetElements.forEach((e) => e.append(this.templateContent));\n    },\n    before() {\n        this.targetElements.forEach((e) => { var _a; return (_a = e.parentElement) === null || _a === void 0 ? void 0 : _a.insertBefore(this.templateContent, e); });\n    },\n    prepend() {\n        this.removeDuplicateTargetChildren();\n        this.targetElements.forEach((e) => e.prepend(this.templateContent));\n    },\n    remove() {\n        this.targetElements.forEach((e) => e.remove());\n    },\n    replace() {\n        this.targetElements.forEach((e) => e.replaceWith(this.templateContent));\n    },\n    update() {\n        this.targetElements.forEach((targetElement) => {\n            targetElement.innerHTML = \"\";\n            targetElement.append(this.templateContent);\n        });\n    },\n};\n\nconst session = new Session();\nconst cache = new Cache(session);\nconst { navigator: navigator$1 } = session;\nfunction start() {\n    session.start();\n}\nfunction registerAdapter(adapter) {\n    session.registerAdapter(adapter);\n}\nfunction visit(location, options) {\n    session.visit(location, options);\n}\nfunction connectStreamSource(source) {\n    session.connectStreamSource(source);\n}\nfunction disconnectStreamSource(source) {\n    session.disconnectStreamSource(source);\n}\nfunction renderStreamMessage(message) {\n    session.renderStreamMessage(message);\n}\nfunction clearCache() {\n    console.warn(\"Please replace `Turbo.clearCache()` with `Turbo.cache.clear()`. The top-level function is deprecated and will be removed in a future version of Turbo.`\");\n    session.clearCache();\n}\nfunction setProgressBarDelay(delay) {\n    session.setProgressBarDelay(delay);\n}\nfunction setConfirmMethod(confirmMethod) {\n    FormSubmission.confirmMethod = confirmMethod;\n}\nfunction setFormMode(mode) {\n    session.setFormMode(mode);\n}\n\nvar Turbo = /*#__PURE__*/Object.freeze({\n    __proto__: null,\n    navigator: navigator$1,\n    session: session,\n    cache: cache,\n    PageRenderer: PageRenderer,\n    PageSnapshot: PageSnapshot,\n    FrameRenderer: FrameRenderer,\n    start: start,\n    registerAdapter: registerAdapter,\n    visit: visit,\n    connectStreamSource: connectStreamSource,\n    disconnectStreamSource: disconnectStreamSource,\n    renderStreamMessage: renderStreamMessage,\n    clearCache: clearCache,\n    setProgressBarDelay: setProgressBarDelay,\n    setConfirmMethod: setConfirmMethod,\n    setFormMode: setFormMode,\n    StreamActions: StreamActions\n});\n\nclass TurboFrameMissingError extends Error {\n}\n\nclass FrameController {\n    constructor(element) {\n        this.fetchResponseLoaded = (_fetchResponse) => { };\n        this.currentFetchRequest = null;\n        this.resolveVisitPromise = () => { };\n        this.connected = false;\n        this.hasBeenLoaded = false;\n        this.ignoredAttributes = new Set();\n        this.action = null;\n        this.visitCachedSnapshot = ({ element }) => {\n            const frame = element.querySelector(\"#\" + this.element.id);\n            if (frame && this.previousFrameElement) {\n                frame.replaceChildren(...this.previousFrameElement.children);\n            }\n            delete this.previousFrameElement;\n        };\n        this.element = element;\n        this.view = new FrameView(this, this.element);\n        this.appearanceObserver = new AppearanceObserver(this, this.element);\n        this.formLinkClickObserver = new FormLinkClickObserver(this, this.element);\n        this.linkInterceptor = new LinkInterceptor(this, this.element);\n        this.restorationIdentifier = uuid();\n        this.formSubmitObserver = new FormSubmitObserver(this, this.element);\n    }\n    connect() {\n        if (!this.connected) {\n            this.connected = true;\n            if (this.loadingStyle == FrameLoadingStyle.lazy) {\n                this.appearanceObserver.start();\n            }\n            else {\n                this.loadSourceURL();\n            }\n            this.formLinkClickObserver.start();\n            this.linkInterceptor.start();\n            this.formSubmitObserver.start();\n        }\n    }\n    disconnect() {\n        if (this.connected) {\n            this.connected = false;\n            this.appearanceObserver.stop();\n            this.formLinkClickObserver.stop();\n            this.linkInterceptor.stop();\n            this.formSubmitObserver.stop();\n        }\n    }\n    disabledChanged() {\n        if (this.loadingStyle == FrameLoadingStyle.eager) {\n            this.loadSourceURL();\n        }\n    }\n    sourceURLChanged() {\n        if (this.isIgnoringChangesTo(\"src\"))\n            return;\n        if (this.element.isConnected) {\n            this.complete = false;\n        }\n        if (this.loadingStyle == FrameLoadingStyle.eager || this.hasBeenLoaded) {\n            this.loadSourceURL();\n        }\n    }\n    sourceURLReloaded() {\n        const { src } = this.element;\n        this.ignoringChangesToAttribute(\"complete\", () => {\n            this.element.removeAttribute(\"complete\");\n        });\n        this.element.src = null;\n        this.element.src = src;\n        return this.element.loaded;\n    }\n    completeChanged() {\n        if (this.isIgnoringChangesTo(\"complete\"))\n            return;\n        this.loadSourceURL();\n    }\n    loadingStyleChanged() {\n        if (this.loadingStyle == FrameLoadingStyle.lazy) {\n            this.appearanceObserver.start();\n        }\n        else {\n            this.appearanceObserver.stop();\n            this.loadSourceURL();\n        }\n    }\n    async loadSourceURL() {\n        if (this.enabled && this.isActive && !this.complete && this.sourceURL) {\n            this.element.loaded = this.visit(expandURL(this.sourceURL));\n            this.appearanceObserver.stop();\n            await this.element.loaded;\n            this.hasBeenLoaded = true;\n        }\n    }\n    async loadResponse(fetchResponse) {\n        if (fetchResponse.redirected || (fetchResponse.succeeded && fetchResponse.isHTML)) {\n            this.sourceURL = fetchResponse.response.url;\n        }\n        try {\n            const html = await fetchResponse.responseHTML;\n            if (html) {\n                const document = parseHTMLDocument(html);\n                const pageSnapshot = PageSnapshot.fromDocument(document);\n                if (pageSnapshot.isVisitable) {\n                    await this.loadFrameResponse(fetchResponse, document);\n                }\n                else {\n                    await this.handleUnvisitableFrameResponse(fetchResponse);\n                }\n            }\n        }\n        finally {\n            this.fetchResponseLoaded = () => { };\n        }\n    }\n    elementAppearedInViewport(element) {\n        this.proposeVisitIfNavigatedWithAction(element, element);\n        this.loadSourceURL();\n    }\n    willSubmitFormLinkToLocation(link) {\n        return this.shouldInterceptNavigation(link);\n    }\n    submittedFormLinkToLocation(link, _location, form) {\n        const frame = this.findFrameElement(link);\n        if (frame)\n            form.setAttribute(\"data-turbo-frame\", frame.id);\n    }\n    shouldInterceptLinkClick(element, _location, _event) {\n        return this.shouldInterceptNavigation(element);\n    }\n    linkClickIntercepted(element, location) {\n        this.navigateFrame(element, location);\n    }\n    willSubmitForm(element, submitter) {\n        return element.closest(\"turbo-frame\") == this.element && this.shouldInterceptNavigation(element, submitter);\n    }\n    formSubmitted(element, submitter) {\n        if (this.formSubmission) {\n            this.formSubmission.stop();\n        }\n        this.formSubmission = new FormSubmission(this, element, submitter);\n        const { fetchRequest } = this.formSubmission;\n        this.prepareRequest(fetchRequest);\n        this.formSubmission.start();\n    }\n    prepareRequest(request) {\n        var _a;\n        request.headers[\"Turbo-Frame\"] = this.id;\n        if ((_a = this.currentNavigationElement) === null || _a === void 0 ? void 0 : _a.hasAttribute(\"data-turbo-stream\")) {\n            request.acceptResponseType(StreamMessage.contentType);\n        }\n    }\n    requestStarted(_request) {\n        markAsBusy(this.element);\n    }\n    requestPreventedHandlingResponse(_request, _response) {\n        this.resolveVisitPromise();\n    }\n    async requestSucceededWithResponse(request, response) {\n        await this.loadResponse(response);\n        this.resolveVisitPromise();\n    }\n    async requestFailedWithResponse(request, response) {\n        await this.loadResponse(response);\n        this.resolveVisitPromise();\n    }\n    requestErrored(request, error) {\n        console.error(error);\n        this.resolveVisitPromise();\n    }\n    requestFinished(_request) {\n        clearBusyState(this.element);\n    }\n    formSubmissionStarted({ formElement }) {\n        markAsBusy(formElement, this.findFrameElement(formElement));\n    }\n    formSubmissionSucceededWithResponse(formSubmission, response) {\n        const frame = this.findFrameElement(formSubmission.formElement, formSubmission.submitter);\n        frame.delegate.proposeVisitIfNavigatedWithAction(frame, formSubmission.formElement, formSubmission.submitter);\n        frame.delegate.loadResponse(response);\n        if (!formSubmission.isSafe) {\n            session.clearCache();\n        }\n    }\n    formSubmissionFailedWithResponse(formSubmission, fetchResponse) {\n        this.element.delegate.loadResponse(fetchResponse);\n        session.clearCache();\n    }\n    formSubmissionErrored(formSubmission, error) {\n        console.error(error);\n    }\n    formSubmissionFinished({ formElement }) {\n        clearBusyState(formElement, this.findFrameElement(formElement));\n    }\n    allowsImmediateRender({ element: newFrame }, options) {\n        const event = dispatch(\"turbo:before-frame-render\", {\n            target: this.element,\n            detail: Object.assign({ newFrame }, options),\n            cancelable: true,\n        });\n        const { defaultPrevented, detail: { render }, } = event;\n        if (this.view.renderer && render) {\n            this.view.renderer.renderElement = render;\n        }\n        return !defaultPrevented;\n    }\n    viewRenderedSnapshot(_snapshot, _isPreview) { }\n    preloadOnLoadLinksForView(element) {\n        session.preloadOnLoadLinksForView(element);\n    }\n    viewInvalidated() { }\n    willRenderFrame(currentElement, _newElement) {\n        this.previousFrameElement = currentElement.cloneNode(true);\n    }\n    async loadFrameResponse(fetchResponse, document) {\n        const newFrameElement = await this.extractForeignFrameElement(document.body);\n        if (newFrameElement) {\n            const snapshot = new Snapshot(newFrameElement);\n            const renderer = new FrameRenderer(this, this.view.snapshot, snapshot, FrameRenderer.renderElement, false, false);\n            if (this.view.renderPromise)\n                await this.view.renderPromise;\n            this.changeHistory();\n            await this.view.render(renderer);\n            this.complete = true;\n            session.frameRendered(fetchResponse, this.element);\n            session.frameLoaded(this.element);\n            this.fetchResponseLoaded(fetchResponse);\n        }\n        else if (this.willHandleFrameMissingFromResponse(fetchResponse)) {\n            this.handleFrameMissingFromResponse(fetchResponse);\n        }\n    }\n    async visit(url) {\n        var _a;\n        const request = new FetchRequest(this, FetchMethod.get, url, new URLSearchParams(), this.element);\n        (_a = this.currentFetchRequest) === null || _a === void 0 ? void 0 : _a.cancel();\n        this.currentFetchRequest = request;\n        return new Promise((resolve) => {\n            this.resolveVisitPromise = () => {\n                this.resolveVisitPromise = () => { };\n                this.currentFetchRequest = null;\n                resolve();\n            };\n            request.perform();\n        });\n    }\n    navigateFrame(element, url, submitter) {\n        const frame = this.findFrameElement(element, submitter);\n        frame.delegate.proposeVisitIfNavigatedWithAction(frame, element, submitter);\n        this.withCurrentNavigationElement(element, () => {\n            frame.src = url;\n        });\n    }\n    proposeVisitIfNavigatedWithAction(frame, element, submitter) {\n        this.action = getVisitAction(submitter, element, frame);\n        if (this.action) {\n            const pageSnapshot = PageSnapshot.fromElement(frame).clone();\n            const { visitCachedSnapshot } = frame.delegate;\n            frame.delegate.fetchResponseLoaded = (fetchResponse) => {\n                if (frame.src) {\n                    const { statusCode, redirected } = fetchResponse;\n                    const responseHTML = frame.ownerDocument.documentElement.outerHTML;\n                    const response = { statusCode, redirected, responseHTML };\n                    const options = {\n                        response,\n                        visitCachedSnapshot,\n                        willRender: false,\n                        updateHistory: false,\n                        restorationIdentifier: this.restorationIdentifier,\n                        snapshot: pageSnapshot,\n                    };\n                    if (this.action)\n                        options.action = this.action;\n                    session.visit(frame.src, options);\n                }\n            };\n        }\n    }\n    changeHistory() {\n        if (this.action) {\n            const method = getHistoryMethodForAction(this.action);\n            session.history.update(method, expandURL(this.element.src || \"\"), this.restorationIdentifier);\n        }\n    }\n    async handleUnvisitableFrameResponse(fetchResponse) {\n        console.warn(`The response (${fetchResponse.statusCode}) from <turbo-frame id=\"${this.element.id}\"> is performing a full page visit due to turbo-visit-control.`);\n        await this.visitResponse(fetchResponse.response);\n    }\n    willHandleFrameMissingFromResponse(fetchResponse) {\n        this.element.setAttribute(\"complete\", \"\");\n        const response = fetchResponse.response;\n        const visit = async (url, options = {}) => {\n            if (url instanceof Response) {\n                this.visitResponse(url);\n            }\n            else {\n                session.visit(url, options);\n            }\n        };\n        const event = dispatch(\"turbo:frame-missing\", {\n            target: this.element,\n            detail: { response, visit },\n            cancelable: true,\n        });\n        return !event.defaultPrevented;\n    }\n    handleFrameMissingFromResponse(fetchResponse) {\n        this.view.missing();\n        this.throwFrameMissingError(fetchResponse);\n    }\n    throwFrameMissingError(fetchResponse) {\n        const message = `The response (${fetchResponse.statusCode}) did not contain the expected <turbo-frame id=\"${this.element.id}\"> and will be ignored. To perform a full page visit instead, set turbo-visit-control to reload.`;\n        throw new TurboFrameMissingError(message);\n    }\n    async visitResponse(response) {\n        const wrapped = new FetchResponse(response);\n        const responseHTML = await wrapped.responseHTML;\n        const { location, redirected, statusCode } = wrapped;\n        return session.visit(location, { response: { redirected, statusCode, responseHTML } });\n    }\n    findFrameElement(element, submitter) {\n        var _a;\n        const id = getAttribute(\"data-turbo-frame\", submitter, element) || this.element.getAttribute(\"target\");\n        return (_a = getFrameElementById(id)) !== null && _a !== void 0 ? _a : this.element;\n    }\n    async extractForeignFrameElement(container) {\n        let element;\n        const id = CSS.escape(this.id);\n        try {\n            element = activateElement(container.querySelector(`turbo-frame#${id}`), this.sourceURL);\n            if (element) {\n                return element;\n            }\n            element = activateElement(container.querySelector(`turbo-frame[src][recurse~=${id}]`), this.sourceURL);\n            if (element) {\n                await element.loaded;\n                return await this.extractForeignFrameElement(element);\n            }\n        }\n        catch (error) {\n            console.error(error);\n            return new FrameElement();\n        }\n        return null;\n    }\n    formActionIsVisitable(form, submitter) {\n        const action = getAction(form, submitter);\n        return locationIsVisitable(expandURL(action), this.rootLocation);\n    }\n    shouldInterceptNavigation(element, submitter) {\n        const id = getAttribute(\"data-turbo-frame\", submitter, element) || this.element.getAttribute(\"target\");\n        if (element instanceof HTMLFormElement && !this.formActionIsVisitable(element, submitter)) {\n            return false;\n        }\n        if (!this.enabled || id == \"_top\") {\n            return false;\n        }\n        if (id) {\n            const frameElement = getFrameElementById(id);\n            if (frameElement) {\n                return !frameElement.disabled;\n            }\n        }\n        if (!session.elementIsNavigatable(element)) {\n            return false;\n        }\n        if (submitter && !session.elementIsNavigatable(submitter)) {\n            return false;\n        }\n        return true;\n    }\n    get id() {\n        return this.element.id;\n    }\n    get enabled() {\n        return !this.element.disabled;\n    }\n    get sourceURL() {\n        if (this.element.src) {\n            return this.element.src;\n        }\n    }\n    set sourceURL(sourceURL) {\n        this.ignoringChangesToAttribute(\"src\", () => {\n            this.element.src = sourceURL !== null && sourceURL !== void 0 ? sourceURL : null;\n        });\n    }\n    get loadingStyle() {\n        return this.element.loading;\n    }\n    get isLoading() {\n        return this.formSubmission !== undefined || this.resolveVisitPromise() !== undefined;\n    }\n    get complete() {\n        return this.element.hasAttribute(\"complete\");\n    }\n    set complete(value) {\n        this.ignoringChangesToAttribute(\"complete\", () => {\n            if (value) {\n                this.element.setAttribute(\"complete\", \"\");\n            }\n            else {\n                this.element.removeAttribute(\"complete\");\n            }\n        });\n    }\n    get isActive() {\n        return this.element.isActive && this.connected;\n    }\n    get rootLocation() {\n        var _a;\n        const meta = this.element.ownerDocument.querySelector(`meta[name=\"turbo-root\"]`);\n        const root = (_a = meta === null || meta === void 0 ? void 0 : meta.content) !== null && _a !== void 0 ? _a : \"/\";\n        return expandURL(root);\n    }\n    isIgnoringChangesTo(attributeName) {\n        return this.ignoredAttributes.has(attributeName);\n    }\n    ignoringChangesToAttribute(attributeName, callback) {\n        this.ignoredAttributes.add(attributeName);\n        callback();\n        this.ignoredAttributes.delete(attributeName);\n    }\n    withCurrentNavigationElement(element, callback) {\n        this.currentNavigationElement = element;\n        callback();\n        delete this.currentNavigationElement;\n    }\n}\nfunction getFrameElementById(id) {\n    if (id != null) {\n        const element = document.getElementById(id);\n        if (element instanceof FrameElement) {\n            return element;\n        }\n    }\n}\nfunction activateElement(element, currentURL) {\n    if (element) {\n        const src = element.getAttribute(\"src\");\n        if (src != null && currentURL != null && urlsAreEqual(src, currentURL)) {\n            throw new Error(`Matching <turbo-frame id=\"${element.id}\"> element has a source URL which references itself`);\n        }\n        if (element.ownerDocument !== document) {\n            element = document.importNode(element, true);\n        }\n        if (element instanceof FrameElement) {\n            element.connectedCallback();\n            element.disconnectedCallback();\n            return element;\n        }\n    }\n}\n\nclass StreamElement extends HTMLElement {\n    static async renderElement(newElement) {\n        await newElement.performAction();\n    }\n    async connectedCallback() {\n        try {\n            await this.render();\n        }\n        catch (error) {\n            console.error(error);\n        }\n        finally {\n            this.disconnect();\n        }\n    }\n    async render() {\n        var _a;\n        return ((_a = this.renderPromise) !== null && _a !== void 0 ? _a : (this.renderPromise = (async () => {\n            const event = this.beforeRenderEvent;\n            if (this.dispatchEvent(event)) {\n                await nextAnimationFrame();\n                await event.detail.render(this);\n            }\n        })()));\n    }\n    disconnect() {\n        try {\n            this.remove();\n        }\n        catch (_a) { }\n    }\n    removeDuplicateTargetChildren() {\n        this.duplicateChildren.forEach((c) => c.remove());\n    }\n    get duplicateChildren() {\n        var _a;\n        const existingChildren = this.targetElements.flatMap((e) => [...e.children]).filter((c) => !!c.id);\n        const newChildrenIds = [...(((_a = this.templateContent) === null || _a === void 0 ? void 0 : _a.children) || [])].filter((c) => !!c.id).map((c) => c.id);\n        return existingChildren.filter((c) => newChildrenIds.includes(c.id));\n    }\n    get performAction() {\n        if (this.action) {\n            const actionFunction = StreamActions[this.action];\n            if (actionFunction) {\n                return actionFunction;\n            }\n            this.raise(\"unknown action\");\n        }\n        this.raise(\"action attribute is missing\");\n    }\n    get targetElements() {\n        if (this.target) {\n            return this.targetElementsById;\n        }\n        else if (this.targets) {\n            return this.targetElementsByQuery;\n        }\n        else {\n            this.raise(\"target or targets attribute is missing\");\n        }\n    }\n    get templateContent() {\n        return this.templateElement.content.cloneNode(true);\n    }\n    get templateElement() {\n        if (this.firstElementChild === null) {\n            const template = this.ownerDocument.createElement(\"template\");\n            this.appendChild(template);\n            return template;\n        }\n        else if (this.firstElementChild instanceof HTMLTemplateElement) {\n            return this.firstElementChild;\n        }\n        this.raise(\"first child element must be a <template> element\");\n    }\n    get action() {\n        return this.getAttribute(\"action\");\n    }\n    get target() {\n        return this.getAttribute(\"target\");\n    }\n    get targets() {\n        return this.getAttribute(\"targets\");\n    }\n    raise(message) {\n        throw new Error(`${this.description}: ${message}`);\n    }\n    get description() {\n        var _a, _b;\n        return (_b = ((_a = this.outerHTML.match(/<[^>]+>/)) !== null && _a !== void 0 ? _a : [])[0]) !== null && _b !== void 0 ? _b : \"<turbo-stream>\";\n    }\n    get beforeRenderEvent() {\n        return new CustomEvent(\"turbo:before-stream-render\", {\n            bubbles: true,\n            cancelable: true,\n            detail: { newStream: this, render: StreamElement.renderElement },\n        });\n    }\n    get targetElementsById() {\n        var _a;\n        const element = (_a = this.ownerDocument) === null || _a === void 0 ? void 0 : _a.getElementById(this.target);\n        if (element !== null) {\n            return [element];\n        }\n        else {\n            return [];\n        }\n    }\n    get targetElementsByQuery() {\n        var _a;\n        const elements = (_a = this.ownerDocument) === null || _a === void 0 ? void 0 : _a.querySelectorAll(this.targets);\n        if (elements.length !== 0) {\n            return Array.prototype.slice.call(elements);\n        }\n        else {\n            return [];\n        }\n    }\n}\n\nclass StreamSourceElement extends HTMLElement {\n    constructor() {\n        super(...arguments);\n        this.streamSource = null;\n    }\n    connectedCallback() {\n        this.streamSource = this.src.match(/^ws{1,2}:/) ? new WebSocket(this.src) : new EventSource(this.src);\n        connectStreamSource(this.streamSource);\n    }\n    disconnectedCallback() {\n        if (this.streamSource) {\n            disconnectStreamSource(this.streamSource);\n        }\n    }\n    get src() {\n        return this.getAttribute(\"src\") || \"\";\n    }\n}\n\nFrameElement.delegateConstructor = FrameController;\nif (customElements.get(\"turbo-frame\") === undefined) {\n    customElements.define(\"turbo-frame\", FrameElement);\n}\nif (customElements.get(\"turbo-stream\") === undefined) {\n    customElements.define(\"turbo-stream\", StreamElement);\n}\nif (customElements.get(\"turbo-stream-source\") === undefined) {\n    customElements.define(\"turbo-stream-source\", StreamSourceElement);\n}\n\n(() => {\n    let element = document.currentScript;\n    if (!element)\n        return;\n    if (element.hasAttribute(\"data-turbo-suppress-warning\"))\n        return;\n    element = element.parentElement;\n    while (element) {\n        if (element == document.body) {\n            return console.warn(unindent `\n        You are loading Turbo from a <script> element inside the <body> element. This is probably not what you meant to do!\n\n        Load your application\u2019s JavaScript bundle inside the <head> element instead. <script> elements in <body> are evaluated with each page change.\n\n        For more information, see: https://turbo.hotwired.dev/handbook/building#working-with-script-elements\n\n        \u2014\u2014\n        Suppress this warning by adding a \"data-turbo-suppress-warning\" attribute to: %s\n      `, element.outerHTML);\n        }\n        element = element.parentElement;\n    }\n})();\n\nwindow.Turbo = Turbo;\nstart();\n\nexport { FrameElement, FrameLoadingStyle, FrameRenderer, PageRenderer, PageSnapshot, StreamActions, StreamElement, StreamSourceElement, cache, clearCache, connectStreamSource, disconnectStreamSource, navigator$1 as navigator, registerAdapter, renderStreamMessage, session, setConfirmMethod, setFormMode, setProgressBarDelay, start, visit };\n", "export default {\n  logger: self.console,\n  WebSocket: self.WebSocket\n}\n", "import adapters from \"./adapters\"\n\n// The logger is disabled by default. You can enable it with:\n//\n//   ActionCable.logger.enabled = true\n//\n//   Example:\n//\n//   import * as ActionCable from '@rails/actioncable'\n//\n//   ActionCable.logger.enabled = true\n//   ActionCable.logger.log('Connection Established.')\n//\n\nexport default {\n  log(...messages) {\n    if (this.enabled) {\n      messages.push(Date.now())\n      adapters.logger.log(\"[ActionCable]\", ...messages)\n    }\n  },\n}\n", "import logger from \"./logger\"\n\n// Responsible for ensuring the cable connection is in good health by validating the heartbeat pings sent from the server, and attempting\n// revival reconnections if things go astray. Internal class, not intended for direct user manipulation.\n\nconst now = () => new Date().getTime()\n\nconst secondsSince = time => (now() - time) / 1000\n\nclass ConnectionMonitor {\n  constructor(connection) {\n    this.visibilityDidChange = this.visibilityDidChange.bind(this)\n    this.connection = connection\n    this.reconnectAttempts = 0\n  }\n\n  start() {\n    if (!this.isRunning()) {\n      this.startedAt = now()\n      delete this.stoppedAt\n      this.startPolling()\n      addEventListener(\"visibilitychange\", this.visibilityDidChange)\n      logger.log(`ConnectionMonitor started. stale threshold = ${this.constructor.staleThreshold} s`)\n    }\n  }\n\n  stop() {\n    if (this.isRunning()) {\n      this.stoppedAt = now()\n      this.stopPolling()\n      removeEventListener(\"visibilitychange\", this.visibilityDidChange)\n      logger.log(\"ConnectionMonitor stopped\")\n    }\n  }\n\n  isRunning() {\n    return this.startedAt && !this.stoppedAt\n  }\n\n  recordPing() {\n    this.pingedAt = now()\n  }\n\n  recordConnect() {\n    this.reconnectAttempts = 0\n    this.recordPing()\n    delete this.disconnectedAt\n    logger.log(\"ConnectionMonitor recorded connect\")\n  }\n\n  recordDisconnect() {\n    this.disconnectedAt = now()\n    logger.log(\"ConnectionMonitor recorded disconnect\")\n  }\n\n  // Private\n\n  startPolling() {\n    this.stopPolling()\n    this.poll()\n  }\n\n  stopPolling() {\n    clearTimeout(this.pollTimeout)\n  }\n\n  poll() {\n    this.pollTimeout = setTimeout(() => {\n      this.reconnectIfStale()\n      this.poll()\n    }\n    , this.getPollInterval())\n  }\n\n  getPollInterval() {\n    const { staleThreshold, reconnectionBackoffRate } = this.constructor\n    const backoff = Math.pow(1 + reconnectionBackoffRate, Math.min(this.reconnectAttempts, 10))\n    const jitterMax = this.reconnectAttempts === 0 ? 1.0 : reconnectionBackoffRate\n    const jitter = jitterMax * Math.random()\n    return staleThreshold * 1000 * backoff * (1 + jitter)\n  }\n\n  reconnectIfStale() {\n    if (this.connectionIsStale()) {\n      logger.log(`ConnectionMonitor detected stale connection. reconnectAttempts = ${this.reconnectAttempts}, time stale = ${secondsSince(this.refreshedAt)} s, stale threshold = ${this.constructor.staleThreshold} s`)\n      this.reconnectAttempts++\n      if (this.disconnectedRecently()) {\n        logger.log(`ConnectionMonitor skipping reopening recent disconnect. time disconnected = ${secondsSince(this.disconnectedAt)} s`)\n      } else {\n        logger.log(\"ConnectionMonitor reopening\")\n        this.connection.reopen()\n      }\n    }\n  }\n\n  get refreshedAt() {\n    return this.pingedAt ? this.pingedAt : this.startedAt\n  }\n\n  connectionIsStale() {\n    return secondsSince(this.refreshedAt) > this.constructor.staleThreshold\n  }\n\n  disconnectedRecently() {\n    return this.disconnectedAt && (secondsSince(this.disconnectedAt) < this.constructor.staleThreshold)\n  }\n\n  visibilityDidChange() {\n    if (document.visibilityState === \"visible\") {\n      setTimeout(() => {\n        if (this.connectionIsStale() || !this.connection.isOpen()) {\n          logger.log(`ConnectionMonitor reopening stale connection on visibilitychange. visibilityState = ${document.visibilityState}`)\n          this.connection.reopen()\n        }\n      }\n      , 200)\n    }\n  }\n\n}\n\nConnectionMonitor.staleThreshold = 6 // Server::Connections::BEAT_INTERVAL * 2 (missed two pings)\nConnectionMonitor.reconnectionBackoffRate = 0.15\n\nexport default ConnectionMonitor\n", "export default {\n  \"message_types\": {\n    \"welcome\": \"welcome\",\n    \"disconnect\": \"disconnect\",\n    \"ping\": \"ping\",\n    \"confirmation\": \"confirm_subscription\",\n    \"rejection\": \"reject_subscription\"\n  },\n  \"disconnect_reasons\": {\n    \"unauthorized\": \"unauthorized\",\n    \"invalid_request\": \"invalid_request\",\n    \"server_restart\": \"server_restart\",\n    \"remote\": \"remote\"\n  },\n  \"default_mount_path\": \"/cable\",\n  \"protocols\": [\n    \"actioncable-v1-json\",\n    \"actioncable-unsupported\"\n  ]\n}\n", "import adapters from \"./adapters\"\nimport ConnectionMonitor from \"./connection_monitor\"\nimport INTERNAL from \"./internal\"\nimport logger from \"./logger\"\n\n// Encapsulate the cable connection held by the consumer. This is an internal class not intended for direct user manipulation.\n\nconst {message_types, protocols} = INTERNAL\nconst supportedProtocols = protocols.slice(0, protocols.length - 1)\n\nconst indexOf = [].indexOf\n\nclass Connection {\n  constructor(consumer) {\n    this.open = this.open.bind(this)\n    this.consumer = consumer\n    this.subscriptions = this.consumer.subscriptions\n    this.monitor = new ConnectionMonitor(this)\n    this.disconnected = true\n  }\n\n  send(data) {\n    if (this.isOpen()) {\n      this.webSocket.send(JSON.stringify(data))\n      return true\n    } else {\n      return false\n    }\n  }\n\n  open() {\n    if (this.isActive()) {\n      logger.log(`Attempted to open WebSocket, but existing socket is ${this.getState()}`)\n      return false\n    } else {\n      const socketProtocols = [...protocols, ...this.consumer.subprotocols || []]\n      logger.log(`Opening WebSocket, current state is ${this.getState()}, subprotocols: ${socketProtocols}`)\n      if (this.webSocket) { this.uninstallEventHandlers() }\n      this.webSocket = new adapters.WebSocket(this.consumer.url, socketProtocols)\n      this.installEventHandlers()\n      this.monitor.start()\n      return true\n    }\n  }\n\n  close({allowReconnect} = {allowReconnect: true}) {\n    if (!allowReconnect) { this.monitor.stop() }\n    // Avoid closing websockets in a \"connecting\" state due to Safari 15.1+ bug. See: https://github.com/rails/rails/issues/43835#issuecomment-1002288478\n    if (this.isOpen()) {\n      return this.webSocket.close()\n    }\n  }\n\n  reopen() {\n    logger.log(`Reopening WebSocket, current state is ${this.getState()}`)\n    if (this.isActive()) {\n      try {\n        return this.close()\n      } catch (error) {\n        logger.log(\"Failed to reopen WebSocket\", error)\n      }\n      finally {\n        logger.log(`Reopening WebSocket in ${this.constructor.reopenDelay}ms`)\n        setTimeout(this.open, this.constructor.reopenDelay)\n      }\n    } else {\n      return this.open()\n    }\n  }\n\n  getProtocol() {\n    if (this.webSocket) {\n      return this.webSocket.protocol\n    }\n  }\n\n  isOpen() {\n    return this.isState(\"open\")\n  }\n\n  isActive() {\n    return this.isState(\"open\", \"connecting\")\n  }\n\n  triedToReconnect() {\n    return this.monitor.reconnectAttempts > 0\n  }\n\n  // Private\n\n  isProtocolSupported() {\n    return indexOf.call(supportedProtocols, this.getProtocol()) >= 0\n  }\n\n  isState(...states) {\n    return indexOf.call(states, this.getState()) >= 0\n  }\n\n  getState() {\n    if (this.webSocket) {\n      for (let state in adapters.WebSocket) {\n        if (adapters.WebSocket[state] === this.webSocket.readyState) {\n          return state.toLowerCase()\n        }\n      }\n    }\n    return null\n  }\n\n  installEventHandlers() {\n    for (let eventName in this.events) {\n      const handler = this.events[eventName].bind(this)\n      this.webSocket[`on${eventName}`] = handler\n    }\n  }\n\n  uninstallEventHandlers() {\n    for (let eventName in this.events) {\n      this.webSocket[`on${eventName}`] = function() {}\n    }\n  }\n\n}\n\nConnection.reopenDelay = 500\n\nConnection.prototype.events = {\n  message(event) {\n    if (!this.isProtocolSupported()) { return }\n    const {identifier, message, reason, reconnect, type} = JSON.parse(event.data)\n    switch (type) {\n      case message_types.welcome:\n        if (this.triedToReconnect()) {\n          this.reconnectAttempted = true\n        }\n        this.monitor.recordConnect()\n        return this.subscriptions.reload()\n      case message_types.disconnect:\n        logger.log(`Disconnecting. Reason: ${reason}`)\n        return this.close({allowReconnect: reconnect})\n      case message_types.ping:\n        return this.monitor.recordPing()\n      case message_types.confirmation:\n        this.subscriptions.confirmSubscription(identifier)\n        if (this.reconnectAttempted) {\n          this.reconnectAttempted = false\n          return this.subscriptions.notify(identifier, \"connected\", {reconnected: true})\n        } else {\n          return this.subscriptions.notify(identifier, \"connected\", {reconnected: false})\n        }\n      case message_types.rejection:\n        return this.subscriptions.reject(identifier)\n      default:\n        return this.subscriptions.notify(identifier, \"received\", message)\n    }\n  },\n\n  open() {\n    logger.log(`WebSocket onopen event, using '${this.getProtocol()}' subprotocol`)\n    this.disconnected = false\n    if (!this.isProtocolSupported()) {\n      logger.log(\"Protocol is unsupported. Stopping monitor and disconnecting.\")\n      return this.close({allowReconnect: false})\n    }\n  },\n\n  close(event) {\n    logger.log(\"WebSocket onclose event\")\n    if (this.disconnected) { return }\n    this.disconnected = true\n    this.monitor.recordDisconnect()\n    return this.subscriptions.notifyAll(\"disconnected\", {willAttemptReconnect: this.monitor.isRunning()})\n  },\n\n  error() {\n    logger.log(\"WebSocket onerror event\")\n  }\n}\n\nexport default Connection\n", "// A new subscription is created through the ActionCable.Subscriptions instance available on the consumer.\n// It provides a number of callbacks and a method for calling remote procedure calls on the corresponding\n// Channel instance on the server side.\n//\n// An example demonstrates the basic functionality:\n//\n//   App.appearance = App.cable.subscriptions.create(\"AppearanceChannel\", {\n//     connected() {\n//       // Called once the subscription has been successfully completed\n//     },\n//\n//     disconnected({ willAttemptReconnect: boolean }) {\n//       // Called when the client has disconnected with the server.\n//       // The object will have an `willAttemptReconnect` property which\n//       // says whether the client has the intention of attempting\n//       // to reconnect.\n//     },\n//\n//     appear() {\n//       this.perform('appear', {appearing_on: this.appearingOn()})\n//     },\n//\n//     away() {\n//       this.perform('away')\n//     },\n//\n//     appearingOn() {\n//       $('main').data('appearing-on')\n//     }\n//   })\n//\n// The methods #appear and #away forward their intent to the remote AppearanceChannel instance on the server\n// by calling the `perform` method with the first parameter being the action (which maps to AppearanceChannel#appear/away).\n// The second parameter is a hash that'll get JSON encoded and made available on the server in the data parameter.\n//\n// This is how the server component would look:\n//\n//   class AppearanceChannel < ApplicationActionCable::Channel\n//     def subscribed\n//       current_user.appear\n//     end\n//\n//     def unsubscribed\n//       current_user.disappear\n//     end\n//\n//     def appear(data)\n//       current_user.appear on: data['appearing_on']\n//     end\n//\n//     def away\n//       current_user.away\n//     end\n//   end\n//\n// The \"AppearanceChannel\" name is automatically mapped between the client-side subscription creation and the server-side Ruby class name.\n// The AppearanceChannel#appear/away public methods are exposed automatically to client-side invocation through the perform method.\n\nconst extend = function(object, properties) {\n  if (properties != null) {\n    for (let key in properties) {\n      const value = properties[key]\n      object[key] = value\n    }\n  }\n  return object\n}\n\nexport default class Subscription {\n  constructor(consumer, params = {}, mixin) {\n    this.consumer = consumer\n    this.identifier = JSON.stringify(params)\n    extend(this, mixin)\n  }\n\n  // Perform a channel action with the optional data passed as an attribute\n  perform(action, data = {}) {\n    data.action = action\n    return this.send(data)\n  }\n\n  send(data) {\n    return this.consumer.send({command: \"message\", identifier: this.identifier, data: JSON.stringify(data)})\n  }\n\n  unsubscribe() {\n    return this.consumer.subscriptions.remove(this)\n  }\n}\n", "import logger from \"./logger\"\n\n// Responsible for ensuring channel subscribe command is confirmed, retrying until confirmation is received.\n// Internal class, not intended for direct user manipulation.\n\nclass SubscriptionGuarantor {\n  constructor(subscriptions) {\n    this.subscriptions = subscriptions\n    this.pendingSubscriptions = []\n  }\n\n  guarantee(subscription) {\n    if(this.pendingSubscriptions.indexOf(subscription) == -1){ \n      logger.log(`SubscriptionGuarantor guaranteeing ${subscription.identifier}`)\n      this.pendingSubscriptions.push(subscription) \n    }\n    else {\n      logger.log(`SubscriptionGuarantor already guaranteeing ${subscription.identifier}`)\n    }\n    this.startGuaranteeing()\n  }\n\n  forget(subscription) {\n    logger.log(`SubscriptionGuarantor forgetting ${subscription.identifier}`)\n    this.pendingSubscriptions = (this.pendingSubscriptions.filter((s) => s !== subscription))\n  }\n\n  startGuaranteeing() {\n    this.stopGuaranteeing()\n    this.retrySubscribing()\n  }\n  \n  stopGuaranteeing() {\n    clearTimeout(this.retryTimeout)\n  }\n\n  retrySubscribing() {\n    this.retryTimeout = setTimeout(() => {\n      if (this.subscriptions && typeof(this.subscriptions.subscribe) === \"function\") {\n        this.pendingSubscriptions.map((subscription) => {\n          logger.log(`SubscriptionGuarantor resubscribing ${subscription.identifier}`)\n          this.subscriptions.subscribe(subscription)\n        })\n      }\n    }\n    , 500)\n  }\n}\n\nexport default SubscriptionGuarantor", "import Subscription from \"./subscription\"\nimport SubscriptionGuarantor from \"./subscription_guarantor\"\nimport logger from \"./logger\"\n\n// Collection class for creating (and internally managing) channel subscriptions.\n// The only method intended to be triggered by the user is ActionCable.Subscriptions#create,\n// and it should be called through the consumer like so:\n//\n//   App = {}\n//   App.cable = ActionCable.createConsumer(\"ws://example.com/accounts/1\")\n//   App.appearance = App.cable.subscriptions.create(\"AppearanceChannel\")\n//\n// For more details on how you'd configure an actual channel subscription, see ActionCable.Subscription.\n\nexport default class Subscriptions {\n  constructor(consumer) {\n    this.consumer = consumer\n    this.guarantor = new SubscriptionGuarantor(this)\n    this.subscriptions = []\n  }\n\n  create(channelName, mixin) {\n    const channel = channelName\n    const params = typeof channel === \"object\" ? channel : {channel}\n    const subscription = new Subscription(this.consumer, params, mixin)\n    return this.add(subscription)\n  }\n\n  // Private\n\n  add(subscription) {\n    this.subscriptions.push(subscription)\n    this.consumer.ensureActiveConnection()\n    this.notify(subscription, \"initialized\")\n    this.subscribe(subscription)\n    return subscription\n  }\n\n  remove(subscription) {\n    this.forget(subscription)\n    if (!this.findAll(subscription.identifier).length) {\n      this.sendCommand(subscription, \"unsubscribe\")\n    }\n    return subscription\n  }\n\n  reject(identifier) {\n    return this.findAll(identifier).map((subscription) => {\n      this.forget(subscription)\n      this.notify(subscription, \"rejected\")\n      return subscription\n    })\n  }\n\n  forget(subscription) {\n    this.guarantor.forget(subscription)\n    this.subscriptions = (this.subscriptions.filter((s) => s !== subscription))\n    return subscription\n  }\n\n  findAll(identifier) {\n    return this.subscriptions.filter((s) => s.identifier === identifier)\n  }\n\n  reload() {\n    return this.subscriptions.map((subscription) =>\n      this.subscribe(subscription))\n  }\n\n  notifyAll(callbackName, ...args) {\n    return this.subscriptions.map((subscription) =>\n      this.notify(subscription, callbackName, ...args))\n  }\n\n  notify(subscription, callbackName, ...args) {\n    let subscriptions\n    if (typeof subscription === \"string\") {\n      subscriptions = this.findAll(subscription)\n    } else {\n      subscriptions = [subscription]\n    }\n\n    return subscriptions.map((subscription) =>\n      (typeof subscription[callbackName] === \"function\" ? subscription[callbackName](...args) : undefined))\n  }\n\n  subscribe(subscription) {\n    if (this.sendCommand(subscription, \"subscribe\")) {\n      this.guarantor.guarantee(subscription)\n    }\n  }\n\n  confirmSubscription(identifier) {\n    logger.log(`Subscription confirmed ${identifier}`)\n    this.findAll(identifier).map((subscription) =>\n      this.guarantor.forget(subscription))\n  }\n\n  sendCommand(subscription, command) {\n    const {identifier} = subscription\n    return this.consumer.send({command, identifier})\n  }\n}\n", "import Connection from \"./connection\"\nimport Subscriptions from \"./subscriptions\"\n\n// The ActionCable.Consumer establishes the connection to a server-side Ruby Connection object. Once established,\n// the ActionCable.ConnectionMonitor will ensure that its properly maintained through heartbeats and checking for stale updates.\n// The Consumer instance is also the gateway to establishing subscriptions to desired channels through the #createSubscription\n// method.\n//\n// The following example shows how this can be set up:\n//\n//   App = {}\n//   App.cable = ActionCable.createConsumer(\"ws://example.com/accounts/1\")\n//   App.appearance = App.cable.subscriptions.create(\"AppearanceChannel\")\n//\n// For more details on how you'd configure an actual channel subscription, see ActionCable.Subscription.\n//\n// When a consumer is created, it automatically connects with the server.\n//\n// To disconnect from the server, call\n//\n//   App.cable.disconnect()\n//\n// and to restart the connection:\n//\n//   App.cable.connect()\n//\n// Any channel subscriptions which existed prior to disconnecting will\n// automatically resubscribe.\n\nexport default class Consumer {\n  constructor(url) {\n    this._url = url\n    this.subscriptions = new Subscriptions(this)\n    this.connection = new Connection(this)\n    this.subprotocols = []\n  }\n\n  get url() {\n    return createWebSocketURL(this._url)\n  }\n\n  send(data) {\n    return this.connection.send(data)\n  }\n\n  connect() {\n    return this.connection.open()\n  }\n\n  disconnect() {\n    return this.connection.close({allowReconnect: false})\n  }\n\n  ensureActiveConnection() {\n    if (!this.connection.isActive()) {\n      return this.connection.open()\n    }\n  }\n\n  addSubProtocol(subprotocol) {\n    this.subprotocols = [...this.subprotocols, subprotocol]\n  }\n}\n\nexport function createWebSocketURL(url) {\n  if (typeof url === \"function\") {\n    url = url()\n  }\n\n  if (url && !/^wss?:/i.test(url)) {\n    const a = document.createElement(\"a\")\n    a.href = url\n    // Fix populating Location properties in IE. Otherwise, protocol will be blank.\n    a.href = a.href\n    a.protocol = a.protocol.replace(\"http\", \"ws\")\n    return a.href\n  } else {\n    return url\n  }\n}\n", "import Connection from \"./connection\"\nimport ConnectionMonitor from \"./connection_monitor\"\nimport Consumer, { createWebSocketURL } from \"./consumer\"\nimport INTERNAL from \"./internal\"\nimport Subscription from \"./subscription\"\nimport Subscriptions from \"./subscriptions\"\nimport SubscriptionGuarantor from \"./subscription_guarantor\"\nimport adapters from \"./adapters\"\nimport logger from \"./logger\"\n\nexport {\n  Connection,\n  ConnectionMonitor,\n  Consumer,\n  INTERNAL,\n  Subscription,\n  Subscriptions,\n  SubscriptionGuarantor,\n  adapters,\n  createWebSocketURL,\n  logger,\n}\n\nexport function createConsumer(url = getConfig(\"url\") || INTERNAL.default_mount_path) {\n  return new Consumer(url)\n}\n\nexport function getConfig(name) {\n  const element = document.head.querySelector(`meta[name='action-cable-${name}']`)\n  if (element) {\n    return element.getAttribute(\"content\")\n  }\n}\n", "let consumer\n\nexport async function getConsumer() {\n  return consumer || setConsumer(createConsumer().then(setConsumer))\n}\n\nexport function setConsumer(newConsumer) {\n  return consumer = newConsumer\n}\n\nexport async function createConsumer() {\n  const { createConsumer } = await import(/* webpackChunkName: \"actioncable\" */ \"@rails/actioncable/src\")\n  return createConsumer()\n}\n\nexport async function subscribeTo(channel, mixin) {\n  const { subscriptions } = await getConsumer()\n  return subscriptions.create(channel, mixin)\n}\n", "// Based on https://github.com/nathan7/snakeize\n//\n// This software is released under the MIT license:\n// Permission is hereby granted, free of charge, to any person obtaining a copy of\n// this software and associated documentation files (the \"Software\"), to deal in\n// the Software without restriction, including without limitation the rights to\n// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n// the Software, and to permit persons to whom the Software is furnished to do so,\n// subject to the following conditions:\n\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\nexport default function walk (obj) {\n    if (!obj || typeof obj !== 'object') return obj;\n    if (obj instanceof Date || obj instanceof RegExp) return obj;\n    if (Array.isArray(obj)) return obj.map(walk);\n    return Object.keys(obj).reduce(function (acc, key) {\n        var camel = key[0].toLowerCase() + key.slice(1).replace(/([A-Z]+)/g, function (m, x) {\n            return '_' + x.toLowerCase();\n        });\n        acc[camel] = walk(obj[key]);\n        return acc;\n    }, {});\n};", "import { connectStreamSource, disconnectStreamSource } from \"@hotwired/turbo\"\nimport { subscribeTo } from \"./cable\"\nimport snakeize from \"./snakeize\"\n\nclass TurboCableStreamSourceElement extends HTMLElement {\n  async connectedCallback() {\n    connectStreamSource(this)\n    this.subscription = await subscribeTo(this.channel, {\n      received: this.dispatchMessageEvent.bind(this),\n      connected: this.subscriptionConnected.bind(this),\n      disconnected: this.subscriptionDisconnected.bind(this)\n    })\n  }\n\n  disconnectedCallback() {\n    disconnectStreamSource(this)\n    if (this.subscription) this.subscription.unsubscribe()\n  }\n\n  dispatchMessageEvent(data) {\n    const event = new MessageEvent(\"message\", { data })\n    return this.dispatchEvent(event)\n  }\n\n  subscriptionConnected() {\n    this.setAttribute(\"connected\", \"\")\n  }\n\n  subscriptionDisconnected() {\n    this.removeAttribute(\"connected\")\n  }\n\n  get channel() {\n    const channel = this.getAttribute(\"channel\")\n    const signed_stream_name = this.getAttribute(\"signed-stream-name\")\n    return { channel, signed_stream_name, ...snakeize({ ...this.dataset }) }\n  }\n}\n\n\nif (customElements.get(\"turbo-cable-stream-source\") === undefined) {\n  customElements.define(\"turbo-cable-stream-source\", TurboCableStreamSourceElement)\n}\n", "export function encodeMethodIntoRequestBody(event) {\n  if (event.target instanceof HTMLFormElement) {\n    const { target: form, detail: { fetchOptions } } = event\n\n    form.addEventListener(\"turbo:submit-start\", ({ detail: { formSubmission: { submitter } } }) => {\n      const body = isBodyInit(fetchOptions.body) ? fetchOptions.body : new URLSearchParams()\n      const method = determineFetchMethod(submitter, body, form)\n\n      if (!/get/i.test(method)) {\n        if (/post/i.test(method)) {\n          body.delete(\"_method\")\n        } else {\n          body.set(\"_method\", method)\n        }\n\n        fetchOptions.method = \"post\"\n      }\n    }, { once: true })\n  }\n}\n\nfunction determineFetchMethod(submitter, body, form) {\n  const formMethod = determineFormMethod(submitter)\n  const overrideMethod = body.get(\"_method\")\n  const method = form.getAttribute(\"method\") || \"get\"\n\n  if (typeof formMethod == \"string\") {\n    return formMethod\n  } else if (typeof overrideMethod == \"string\") {\n    return overrideMethod\n  } else {\n    return method\n  }\n}\n\nfunction determineFormMethod(submitter) {\n  if (submitter instanceof HTMLButtonElement || submitter instanceof HTMLInputElement) {\n    if (submitter.hasAttribute(\"formmethod\")) {\n      return submitter.formMethod\n    } else {\n      return null\n    }\n  } else {\n    return null\n  }\n}\n\nfunction isBodyInit(body) {\n  return body instanceof FormData || body instanceof URLSearchParams\n}\n", "import \"./cable_stream_source_element\"\n\nimport * as Turbo from \"@hotwired/turbo\"\nexport { Turbo }\n\nimport * as cable from \"./cable\"\nexport { cable }\n\nimport { encodeMethodIntoRequestBody } from \"./fetch_requests\"\n\naddEventListener(\"turbo:before-fetch-request\", encodeMethodIntoRequestBody)\n", "var sparkMd5 = {\n  exports: {}\n};\n\n(function(module, exports) {\n  (function(factory) {\n    {\n      module.exports = factory();\n    }\n  })((function(undefined$1) {\n    var hex_chr = [ \"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"a\", \"b\", \"c\", \"d\", \"e\", \"f\" ];\n    function md5cycle(x, k) {\n      var a = x[0], b = x[1], c = x[2], d = x[3];\n      a += (b & c | ~b & d) + k[0] - 680876936 | 0;\n      a = (a << 7 | a >>> 25) + b | 0;\n      d += (a & b | ~a & c) + k[1] - 389564586 | 0;\n      d = (d << 12 | d >>> 20) + a | 0;\n      c += (d & a | ~d & b) + k[2] + 606105819 | 0;\n      c = (c << 17 | c >>> 15) + d | 0;\n      b += (c & d | ~c & a) + k[3] - 1044525330 | 0;\n      b = (b << 22 | b >>> 10) + c | 0;\n      a += (b & c | ~b & d) + k[4] - 176418897 | 0;\n      a = (a << 7 | a >>> 25) + b | 0;\n      d += (a & b | ~a & c) + k[5] + 1200080426 | 0;\n      d = (d << 12 | d >>> 20) + a | 0;\n      c += (d & a | ~d & b) + k[6] - 1473231341 | 0;\n      c = (c << 17 | c >>> 15) + d | 0;\n      b += (c & d | ~c & a) + k[7] - 45705983 | 0;\n      b = (b << 22 | b >>> 10) + c | 0;\n      a += (b & c | ~b & d) + k[8] + 1770035416 | 0;\n      a = (a << 7 | a >>> 25) + b | 0;\n      d += (a & b | ~a & c) + k[9] - 1958414417 | 0;\n      d = (d << 12 | d >>> 20) + a | 0;\n      c += (d & a | ~d & b) + k[10] - 42063 | 0;\n      c = (c << 17 | c >>> 15) + d | 0;\n      b += (c & d | ~c & a) + k[11] - 1990404162 | 0;\n      b = (b << 22 | b >>> 10) + c | 0;\n      a += (b & c | ~b & d) + k[12] + 1804603682 | 0;\n      a = (a << 7 | a >>> 25) + b | 0;\n      d += (a & b | ~a & c) + k[13] - 40341101 | 0;\n      d = (d << 12 | d >>> 20) + a | 0;\n      c += (d & a | ~d & b) + k[14] - 1502002290 | 0;\n      c = (c << 17 | c >>> 15) + d | 0;\n      b += (c & d | ~c & a) + k[15] + 1236535329 | 0;\n      b = (b << 22 | b >>> 10) + c | 0;\n      a += (b & d | c & ~d) + k[1] - 165796510 | 0;\n      a = (a << 5 | a >>> 27) + b | 0;\n      d += (a & c | b & ~c) + k[6] - 1069501632 | 0;\n      d = (d << 9 | d >>> 23) + a | 0;\n      c += (d & b | a & ~b) + k[11] + 643717713 | 0;\n      c = (c << 14 | c >>> 18) + d | 0;\n      b += (c & a | d & ~a) + k[0] - 373897302 | 0;\n      b = (b << 20 | b >>> 12) + c | 0;\n      a += (b & d | c & ~d) + k[5] - 701558691 | 0;\n      a = (a << 5 | a >>> 27) + b | 0;\n      d += (a & c | b & ~c) + k[10] + 38016083 | 0;\n      d = (d << 9 | d >>> 23) + a | 0;\n      c += (d & b | a & ~b) + k[15] - 660478335 | 0;\n      c = (c << 14 | c >>> 18) + d | 0;\n      b += (c & a | d & ~a) + k[4] - 405537848 | 0;\n      b = (b << 20 | b >>> 12) + c | 0;\n      a += (b & d | c & ~d) + k[9] + 568446438 | 0;\n      a = (a << 5 | a >>> 27) + b | 0;\n      d += (a & c | b & ~c) + k[14] - 1019803690 | 0;\n      d = (d << 9 | d >>> 23) + a | 0;\n      c += (d & b | a & ~b) + k[3] - 187363961 | 0;\n      c = (c << 14 | c >>> 18) + d | 0;\n      b += (c & a | d & ~a) + k[8] + 1163531501 | 0;\n      b = (b << 20 | b >>> 12) + c | 0;\n      a += (b & d | c & ~d) + k[13] - 1444681467 | 0;\n      a = (a << 5 | a >>> 27) + b | 0;\n      d += (a & c | b & ~c) + k[2] - 51403784 | 0;\n      d = (d << 9 | d >>> 23) + a | 0;\n      c += (d & b | a & ~b) + k[7] + 1735328473 | 0;\n      c = (c << 14 | c >>> 18) + d | 0;\n      b += (c & a | d & ~a) + k[12] - 1926607734 | 0;\n      b = (b << 20 | b >>> 12) + c | 0;\n      a += (b ^ c ^ d) + k[5] - 378558 | 0;\n      a = (a << 4 | a >>> 28) + b | 0;\n      d += (a ^ b ^ c) + k[8] - 2022574463 | 0;\n      d = (d << 11 | d >>> 21) + a | 0;\n      c += (d ^ a ^ b) + k[11] + 1839030562 | 0;\n      c = (c << 16 | c >>> 16) + d | 0;\n      b += (c ^ d ^ a) + k[14] - 35309556 | 0;\n      b = (b << 23 | b >>> 9) + c | 0;\n      a += (b ^ c ^ d) + k[1] - 1530992060 | 0;\n      a = (a << 4 | a >>> 28) + b | 0;\n      d += (a ^ b ^ c) + k[4] + 1272893353 | 0;\n      d = (d << 11 | d >>> 21) + a | 0;\n      c += (d ^ a ^ b) + k[7] - 155497632 | 0;\n      c = (c << 16 | c >>> 16) + d | 0;\n      b += (c ^ d ^ a) + k[10] - 1094730640 | 0;\n      b = (b << 23 | b >>> 9) + c | 0;\n      a += (b ^ c ^ d) + k[13] + 681279174 | 0;\n      a = (a << 4 | a >>> 28) + b | 0;\n      d += (a ^ b ^ c) + k[0] - 358537222 | 0;\n      d = (d << 11 | d >>> 21) + a | 0;\n      c += (d ^ a ^ b) + k[3] - 722521979 | 0;\n      c = (c << 16 | c >>> 16) + d | 0;\n      b += (c ^ d ^ a) + k[6] + 76029189 | 0;\n      b = (b << 23 | b >>> 9) + c | 0;\n      a += (b ^ c ^ d) + k[9] - 640364487 | 0;\n      a = (a << 4 | a >>> 28) + b | 0;\n      d += (a ^ b ^ c) + k[12] - 421815835 | 0;\n      d = (d << 11 | d >>> 21) + a | 0;\n      c += (d ^ a ^ b) + k[15] + 530742520 | 0;\n      c = (c << 16 | c >>> 16) + d | 0;\n      b += (c ^ d ^ a) + k[2] - 995338651 | 0;\n      b = (b << 23 | b >>> 9) + c | 0;\n      a += (c ^ (b | ~d)) + k[0] - 198630844 | 0;\n      a = (a << 6 | a >>> 26) + b | 0;\n      d += (b ^ (a | ~c)) + k[7] + 1126891415 | 0;\n      d = (d << 10 | d >>> 22) + a | 0;\n      c += (a ^ (d | ~b)) + k[14] - 1416354905 | 0;\n      c = (c << 15 | c >>> 17) + d | 0;\n      b += (d ^ (c | ~a)) + k[5] - 57434055 | 0;\n      b = (b << 21 | b >>> 11) + c | 0;\n      a += (c ^ (b | ~d)) + k[12] + 1700485571 | 0;\n      a = (a << 6 | a >>> 26) + b | 0;\n      d += (b ^ (a | ~c)) + k[3] - 1894986606 | 0;\n      d = (d << 10 | d >>> 22) + a | 0;\n      c += (a ^ (d | ~b)) + k[10] - 1051523 | 0;\n      c = (c << 15 | c >>> 17) + d | 0;\n      b += (d ^ (c | ~a)) + k[1] - 2054922799 | 0;\n      b = (b << 21 | b >>> 11) + c | 0;\n      a += (c ^ (b | ~d)) + k[8] + 1873313359 | 0;\n      a = (a << 6 | a >>> 26) + b | 0;\n      d += (b ^ (a | ~c)) + k[15] - 30611744 | 0;\n      d = (d << 10 | d >>> 22) + a | 0;\n      c += (a ^ (d | ~b)) + k[6] - 1560198380 | 0;\n      c = (c << 15 | c >>> 17) + d | 0;\n      b += (d ^ (c | ~a)) + k[13] + 1309151649 | 0;\n      b = (b << 21 | b >>> 11) + c | 0;\n      a += (c ^ (b | ~d)) + k[4] - 145523070 | 0;\n      a = (a << 6 | a >>> 26) + b | 0;\n      d += (b ^ (a | ~c)) + k[11] - 1120210379 | 0;\n      d = (d << 10 | d >>> 22) + a | 0;\n      c += (a ^ (d | ~b)) + k[2] + 718787259 | 0;\n      c = (c << 15 | c >>> 17) + d | 0;\n      b += (d ^ (c | ~a)) + k[9] - 343485551 | 0;\n      b = (b << 21 | b >>> 11) + c | 0;\n      x[0] = a + x[0] | 0;\n      x[1] = b + x[1] | 0;\n      x[2] = c + x[2] | 0;\n      x[3] = d + x[3] | 0;\n    }\n    function md5blk(s) {\n      var md5blks = [], i;\n      for (i = 0; i < 64; i += 4) {\n        md5blks[i >> 2] = s.charCodeAt(i) + (s.charCodeAt(i + 1) << 8) + (s.charCodeAt(i + 2) << 16) + (s.charCodeAt(i + 3) << 24);\n      }\n      return md5blks;\n    }\n    function md5blk_array(a) {\n      var md5blks = [], i;\n      for (i = 0; i < 64; i += 4) {\n        md5blks[i >> 2] = a[i] + (a[i + 1] << 8) + (a[i + 2] << 16) + (a[i + 3] << 24);\n      }\n      return md5blks;\n    }\n    function md51(s) {\n      var n = s.length, state = [ 1732584193, -271733879, -1732584194, 271733878 ], i, length, tail, tmp, lo, hi;\n      for (i = 64; i <= n; i += 64) {\n        md5cycle(state, md5blk(s.substring(i - 64, i)));\n      }\n      s = s.substring(i - 64);\n      length = s.length;\n      tail = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ];\n      for (i = 0; i < length; i += 1) {\n        tail[i >> 2] |= s.charCodeAt(i) << (i % 4 << 3);\n      }\n      tail[i >> 2] |= 128 << (i % 4 << 3);\n      if (i > 55) {\n        md5cycle(state, tail);\n        for (i = 0; i < 16; i += 1) {\n          tail[i] = 0;\n        }\n      }\n      tmp = n * 8;\n      tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n      lo = parseInt(tmp[2], 16);\n      hi = parseInt(tmp[1], 16) || 0;\n      tail[14] = lo;\n      tail[15] = hi;\n      md5cycle(state, tail);\n      return state;\n    }\n    function md51_array(a) {\n      var n = a.length, state = [ 1732584193, -271733879, -1732584194, 271733878 ], i, length, tail, tmp, lo, hi;\n      for (i = 64; i <= n; i += 64) {\n        md5cycle(state, md5blk_array(a.subarray(i - 64, i)));\n      }\n      a = i - 64 < n ? a.subarray(i - 64) : new Uint8Array(0);\n      length = a.length;\n      tail = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ];\n      for (i = 0; i < length; i += 1) {\n        tail[i >> 2] |= a[i] << (i % 4 << 3);\n      }\n      tail[i >> 2] |= 128 << (i % 4 << 3);\n      if (i > 55) {\n        md5cycle(state, tail);\n        for (i = 0; i < 16; i += 1) {\n          tail[i] = 0;\n        }\n      }\n      tmp = n * 8;\n      tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n      lo = parseInt(tmp[2], 16);\n      hi = parseInt(tmp[1], 16) || 0;\n      tail[14] = lo;\n      tail[15] = hi;\n      md5cycle(state, tail);\n      return state;\n    }\n    function rhex(n) {\n      var s = \"\", j;\n      for (j = 0; j < 4; j += 1) {\n        s += hex_chr[n >> j * 8 + 4 & 15] + hex_chr[n >> j * 8 & 15];\n      }\n      return s;\n    }\n    function hex(x) {\n      var i;\n      for (i = 0; i < x.length; i += 1) {\n        x[i] = rhex(x[i]);\n      }\n      return x.join(\"\");\n    }\n    if (hex(md51(\"hello\")) !== \"5d41402abc4b2a76b9719d911017c592\") ;\n    if (typeof ArrayBuffer !== \"undefined\" && !ArrayBuffer.prototype.slice) {\n      (function() {\n        function clamp(val, length) {\n          val = val | 0 || 0;\n          if (val < 0) {\n            return Math.max(val + length, 0);\n          }\n          return Math.min(val, length);\n        }\n        ArrayBuffer.prototype.slice = function(from, to) {\n          var length = this.byteLength, begin = clamp(from, length), end = length, num, target, targetArray, sourceArray;\n          if (to !== undefined$1) {\n            end = clamp(to, length);\n          }\n          if (begin > end) {\n            return new ArrayBuffer(0);\n          }\n          num = end - begin;\n          target = new ArrayBuffer(num);\n          targetArray = new Uint8Array(target);\n          sourceArray = new Uint8Array(this, begin, num);\n          targetArray.set(sourceArray);\n          return target;\n        };\n      })();\n    }\n    function toUtf8(str) {\n      if (/[\\u0080-\\uFFFF]/.test(str)) {\n        str = unescape(encodeURIComponent(str));\n      }\n      return str;\n    }\n    function utf8Str2ArrayBuffer(str, returnUInt8Array) {\n      var length = str.length, buff = new ArrayBuffer(length), arr = new Uint8Array(buff), i;\n      for (i = 0; i < length; i += 1) {\n        arr[i] = str.charCodeAt(i);\n      }\n      return returnUInt8Array ? arr : buff;\n    }\n    function arrayBuffer2Utf8Str(buff) {\n      return String.fromCharCode.apply(null, new Uint8Array(buff));\n    }\n    function concatenateArrayBuffers(first, second, returnUInt8Array) {\n      var result = new Uint8Array(first.byteLength + second.byteLength);\n      result.set(new Uint8Array(first));\n      result.set(new Uint8Array(second), first.byteLength);\n      return returnUInt8Array ? result : result.buffer;\n    }\n    function hexToBinaryString(hex) {\n      var bytes = [], length = hex.length, x;\n      for (x = 0; x < length - 1; x += 2) {\n        bytes.push(parseInt(hex.substr(x, 2), 16));\n      }\n      return String.fromCharCode.apply(String, bytes);\n    }\n    function SparkMD5() {\n      this.reset();\n    }\n    SparkMD5.prototype.append = function(str) {\n      this.appendBinary(toUtf8(str));\n      return this;\n    };\n    SparkMD5.prototype.appendBinary = function(contents) {\n      this._buff += contents;\n      this._length += contents.length;\n      var length = this._buff.length, i;\n      for (i = 64; i <= length; i += 64) {\n        md5cycle(this._hash, md5blk(this._buff.substring(i - 64, i)));\n      }\n      this._buff = this._buff.substring(i - 64);\n      return this;\n    };\n    SparkMD5.prototype.end = function(raw) {\n      var buff = this._buff, length = buff.length, i, tail = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], ret;\n      for (i = 0; i < length; i += 1) {\n        tail[i >> 2] |= buff.charCodeAt(i) << (i % 4 << 3);\n      }\n      this._finish(tail, length);\n      ret = hex(this._hash);\n      if (raw) {\n        ret = hexToBinaryString(ret);\n      }\n      this.reset();\n      return ret;\n    };\n    SparkMD5.prototype.reset = function() {\n      this._buff = \"\";\n      this._length = 0;\n      this._hash = [ 1732584193, -271733879, -1732584194, 271733878 ];\n      return this;\n    };\n    SparkMD5.prototype.getState = function() {\n      return {\n        buff: this._buff,\n        length: this._length,\n        hash: this._hash.slice()\n      };\n    };\n    SparkMD5.prototype.setState = function(state) {\n      this._buff = state.buff;\n      this._length = state.length;\n      this._hash = state.hash;\n      return this;\n    };\n    SparkMD5.prototype.destroy = function() {\n      delete this._hash;\n      delete this._buff;\n      delete this._length;\n    };\n    SparkMD5.prototype._finish = function(tail, length) {\n      var i = length, tmp, lo, hi;\n      tail[i >> 2] |= 128 << (i % 4 << 3);\n      if (i > 55) {\n        md5cycle(this._hash, tail);\n        for (i = 0; i < 16; i += 1) {\n          tail[i] = 0;\n        }\n      }\n      tmp = this._length * 8;\n      tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n      lo = parseInt(tmp[2], 16);\n      hi = parseInt(tmp[1], 16) || 0;\n      tail[14] = lo;\n      tail[15] = hi;\n      md5cycle(this._hash, tail);\n    };\n    SparkMD5.hash = function(str, raw) {\n      return SparkMD5.hashBinary(toUtf8(str), raw);\n    };\n    SparkMD5.hashBinary = function(content, raw) {\n      var hash = md51(content), ret = hex(hash);\n      return raw ? hexToBinaryString(ret) : ret;\n    };\n    SparkMD5.ArrayBuffer = function() {\n      this.reset();\n    };\n    SparkMD5.ArrayBuffer.prototype.append = function(arr) {\n      var buff = concatenateArrayBuffers(this._buff.buffer, arr, true), length = buff.length, i;\n      this._length += arr.byteLength;\n      for (i = 64; i <= length; i += 64) {\n        md5cycle(this._hash, md5blk_array(buff.subarray(i - 64, i)));\n      }\n      this._buff = i - 64 < length ? new Uint8Array(buff.buffer.slice(i - 64)) : new Uint8Array(0);\n      return this;\n    };\n    SparkMD5.ArrayBuffer.prototype.end = function(raw) {\n      var buff = this._buff, length = buff.length, tail = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], i, ret;\n      for (i = 0; i < length; i += 1) {\n        tail[i >> 2] |= buff[i] << (i % 4 << 3);\n      }\n      this._finish(tail, length);\n      ret = hex(this._hash);\n      if (raw) {\n        ret = hexToBinaryString(ret);\n      }\n      this.reset();\n      return ret;\n    };\n    SparkMD5.ArrayBuffer.prototype.reset = function() {\n      this._buff = new Uint8Array(0);\n      this._length = 0;\n      this._hash = [ 1732584193, -271733879, -1732584194, 271733878 ];\n      return this;\n    };\n    SparkMD5.ArrayBuffer.prototype.getState = function() {\n      var state = SparkMD5.prototype.getState.call(this);\n      state.buff = arrayBuffer2Utf8Str(state.buff);\n      return state;\n    };\n    SparkMD5.ArrayBuffer.prototype.setState = function(state) {\n      state.buff = utf8Str2ArrayBuffer(state.buff, true);\n      return SparkMD5.prototype.setState.call(this, state);\n    };\n    SparkMD5.ArrayBuffer.prototype.destroy = SparkMD5.prototype.destroy;\n    SparkMD5.ArrayBuffer.prototype._finish = SparkMD5.prototype._finish;\n    SparkMD5.ArrayBuffer.hash = function(arr, raw) {\n      var hash = md51_array(new Uint8Array(arr)), ret = hex(hash);\n      return raw ? hexToBinaryString(ret) : ret;\n    };\n    return SparkMD5;\n  }));\n})(sparkMd5);\n\nvar SparkMD5 = sparkMd5.exports;\n\nconst fileSlice = File.prototype.slice || File.prototype.mozSlice || File.prototype.webkitSlice;\n\nclass FileChecksum {\n  static create(file, callback) {\n    const instance = new FileChecksum(file);\n    instance.create(callback);\n  }\n  constructor(file) {\n    this.file = file;\n    this.chunkSize = 2097152;\n    this.chunkCount = Math.ceil(this.file.size / this.chunkSize);\n    this.chunkIndex = 0;\n  }\n  create(callback) {\n    this.callback = callback;\n    this.md5Buffer = new SparkMD5.ArrayBuffer;\n    this.fileReader = new FileReader;\n    this.fileReader.addEventListener(\"load\", (event => this.fileReaderDidLoad(event)));\n    this.fileReader.addEventListener(\"error\", (event => this.fileReaderDidError(event)));\n    this.readNextChunk();\n  }\n  fileReaderDidLoad(event) {\n    this.md5Buffer.append(event.target.result);\n    if (!this.readNextChunk()) {\n      const binaryDigest = this.md5Buffer.end(true);\n      const base64digest = btoa(binaryDigest);\n      this.callback(null, base64digest);\n    }\n  }\n  fileReaderDidError(event) {\n    this.callback(`Error reading ${this.file.name}`);\n  }\n  readNextChunk() {\n    if (this.chunkIndex < this.chunkCount || this.chunkIndex == 0 && this.chunkCount == 0) {\n      const start = this.chunkIndex * this.chunkSize;\n      const end = Math.min(start + this.chunkSize, this.file.size);\n      const bytes = fileSlice.call(this.file, start, end);\n      this.fileReader.readAsArrayBuffer(bytes);\n      this.chunkIndex++;\n      return true;\n    } else {\n      return false;\n    }\n  }\n}\n\nfunction getMetaValue(name) {\n  const element = findElement(document.head, `meta[name=\"${name}\"]`);\n  if (element) {\n    return element.getAttribute(\"content\");\n  }\n}\n\nfunction findElements(root, selector) {\n  if (typeof root == \"string\") {\n    selector = root;\n    root = document;\n  }\n  const elements = root.querySelectorAll(selector);\n  return toArray(elements);\n}\n\nfunction findElement(root, selector) {\n  if (typeof root == \"string\") {\n    selector = root;\n    root = document;\n  }\n  return root.querySelector(selector);\n}\n\nfunction dispatchEvent(element, type, eventInit = {}) {\n  const {disabled: disabled} = element;\n  const {bubbles: bubbles, cancelable: cancelable, detail: detail} = eventInit;\n  const event = document.createEvent(\"Event\");\n  event.initEvent(type, bubbles || true, cancelable || true);\n  event.detail = detail || {};\n  try {\n    element.disabled = false;\n    element.dispatchEvent(event);\n  } finally {\n    element.disabled = disabled;\n  }\n  return event;\n}\n\nfunction toArray(value) {\n  if (Array.isArray(value)) {\n    return value;\n  } else if (Array.from) {\n    return Array.from(value);\n  } else {\n    return [].slice.call(value);\n  }\n}\n\nclass BlobRecord {\n  constructor(file, checksum, url, customHeaders = {}) {\n    this.file = file;\n    this.attributes = {\n      filename: file.name,\n      content_type: file.type || \"application/octet-stream\",\n      byte_size: file.size,\n      checksum: checksum\n    };\n    this.xhr = new XMLHttpRequest;\n    this.xhr.open(\"POST\", url, true);\n    this.xhr.responseType = \"json\";\n    this.xhr.setRequestHeader(\"Content-Type\", \"application/json\");\n    this.xhr.setRequestHeader(\"Accept\", \"application/json\");\n    this.xhr.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\n    Object.keys(customHeaders).forEach((headerKey => {\n      this.xhr.setRequestHeader(headerKey, customHeaders[headerKey]);\n    }));\n    const csrfToken = getMetaValue(\"csrf-token\");\n    if (csrfToken != undefined) {\n      this.xhr.setRequestHeader(\"X-CSRF-Token\", csrfToken);\n    }\n    this.xhr.addEventListener(\"load\", (event => this.requestDidLoad(event)));\n    this.xhr.addEventListener(\"error\", (event => this.requestDidError(event)));\n  }\n  get status() {\n    return this.xhr.status;\n  }\n  get response() {\n    const {responseType: responseType, response: response} = this.xhr;\n    if (responseType == \"json\") {\n      return response;\n    } else {\n      return JSON.parse(response);\n    }\n  }\n  create(callback) {\n    this.callback = callback;\n    this.xhr.send(JSON.stringify({\n      blob: this.attributes\n    }));\n  }\n  requestDidLoad(event) {\n    if (this.status >= 200 && this.status < 300) {\n      const {response: response} = this;\n      const {direct_upload: direct_upload} = response;\n      delete response.direct_upload;\n      this.attributes = response;\n      this.directUploadData = direct_upload;\n      this.callback(null, this.toJSON());\n    } else {\n      this.requestDidError(event);\n    }\n  }\n  requestDidError(event) {\n    this.callback(`Error creating Blob for \"${this.file.name}\". Status: ${this.status}`);\n  }\n  toJSON() {\n    const result = {};\n    for (const key in this.attributes) {\n      result[key] = this.attributes[key];\n    }\n    return result;\n  }\n}\n\nclass BlobUpload {\n  constructor(blob) {\n    this.blob = blob;\n    this.file = blob.file;\n    const {url: url, headers: headers} = blob.directUploadData;\n    this.xhr = new XMLHttpRequest;\n    this.xhr.open(\"PUT\", url, true);\n    this.xhr.responseType = \"text\";\n    for (const key in headers) {\n      this.xhr.setRequestHeader(key, headers[key]);\n    }\n    this.xhr.addEventListener(\"load\", (event => this.requestDidLoad(event)));\n    this.xhr.addEventListener(\"error\", (event => this.requestDidError(event)));\n  }\n  create(callback) {\n    this.callback = callback;\n    this.xhr.send(this.file.slice());\n  }\n  requestDidLoad(event) {\n    const {status: status, response: response} = this.xhr;\n    if (status >= 200 && status < 300) {\n      this.callback(null, response);\n    } else {\n      this.requestDidError(event);\n    }\n  }\n  requestDidError(event) {\n    this.callback(`Error storing \"${this.file.name}\". Status: ${this.xhr.status}`);\n  }\n}\n\nlet id = 0;\n\nclass DirectUpload {\n  constructor(file, url, delegate, customHeaders = {}) {\n    this.id = ++id;\n    this.file = file;\n    this.url = url;\n    this.delegate = delegate;\n    this.customHeaders = customHeaders;\n  }\n  create(callback) {\n    FileChecksum.create(this.file, ((error, checksum) => {\n      if (error) {\n        callback(error);\n        return;\n      }\n      const blob = new BlobRecord(this.file, checksum, this.url, this.customHeaders);\n      notify(this.delegate, \"directUploadWillCreateBlobWithXHR\", blob.xhr);\n      blob.create((error => {\n        if (error) {\n          callback(error);\n        } else {\n          const upload = new BlobUpload(blob);\n          notify(this.delegate, \"directUploadWillStoreFileWithXHR\", upload.xhr);\n          upload.create((error => {\n            if (error) {\n              callback(error);\n            } else {\n              callback(null, blob.toJSON());\n            }\n          }));\n        }\n      }));\n    }));\n  }\n}\n\nfunction notify(object, methodName, ...messages) {\n  if (object && typeof object[methodName] == \"function\") {\n    return object[methodName](...messages);\n  }\n}\n\nclass DirectUploadController {\n  constructor(input, file) {\n    this.input = input;\n    this.file = file;\n    this.directUpload = new DirectUpload(this.file, this.url, this);\n    this.dispatch(\"initialize\");\n  }\n  start(callback) {\n    const hiddenInput = document.createElement(\"input\");\n    hiddenInput.type = \"hidden\";\n    hiddenInput.name = this.input.name;\n    this.input.insertAdjacentElement(\"beforebegin\", hiddenInput);\n    this.dispatch(\"start\");\n    this.directUpload.create(((error, attributes) => {\n      if (error) {\n        hiddenInput.parentNode.removeChild(hiddenInput);\n        this.dispatchError(error);\n      } else {\n        hiddenInput.value = attributes.signed_id;\n      }\n      this.dispatch(\"end\");\n      callback(error);\n    }));\n  }\n  uploadRequestDidProgress(event) {\n    const progress = event.loaded / event.total * 100;\n    if (progress) {\n      this.dispatch(\"progress\", {\n        progress: progress\n      });\n    }\n  }\n  get url() {\n    return this.input.getAttribute(\"data-direct-upload-url\");\n  }\n  dispatch(name, detail = {}) {\n    detail.file = this.file;\n    detail.id = this.directUpload.id;\n    return dispatchEvent(this.input, `direct-upload:${name}`, {\n      detail: detail\n    });\n  }\n  dispatchError(error) {\n    const event = this.dispatch(\"error\", {\n      error: error\n    });\n    if (!event.defaultPrevented) {\n      alert(error);\n    }\n  }\n  directUploadWillCreateBlobWithXHR(xhr) {\n    this.dispatch(\"before-blob-request\", {\n      xhr: xhr\n    });\n  }\n  directUploadWillStoreFileWithXHR(xhr) {\n    this.dispatch(\"before-storage-request\", {\n      xhr: xhr\n    });\n    xhr.upload.addEventListener(\"progress\", (event => this.uploadRequestDidProgress(event)));\n  }\n}\n\nconst inputSelector = \"input[type=file][data-direct-upload-url]:not([disabled])\";\n\nclass DirectUploadsController {\n  constructor(form) {\n    this.form = form;\n    this.inputs = findElements(form, inputSelector).filter((input => input.files.length));\n  }\n  start(callback) {\n    const controllers = this.createDirectUploadControllers();\n    const startNextController = () => {\n      const controller = controllers.shift();\n      if (controller) {\n        controller.start((error => {\n          if (error) {\n            callback(error);\n            this.dispatch(\"end\");\n          } else {\n            startNextController();\n          }\n        }));\n      } else {\n        callback();\n        this.dispatch(\"end\");\n      }\n    };\n    this.dispatch(\"start\");\n    startNextController();\n  }\n  createDirectUploadControllers() {\n    const controllers = [];\n    this.inputs.forEach((input => {\n      toArray(input.files).forEach((file => {\n        const controller = new DirectUploadController(input, file);\n        controllers.push(controller);\n      }));\n    }));\n    return controllers;\n  }\n  dispatch(name, detail = {}) {\n    return dispatchEvent(this.form, `direct-uploads:${name}`, {\n      detail: detail\n    });\n  }\n}\n\nconst processingAttribute = \"data-direct-uploads-processing\";\n\nconst submitButtonsByForm = new WeakMap;\n\nlet started = false;\n\nfunction start() {\n  if (!started) {\n    started = true;\n    document.addEventListener(\"click\", didClick, true);\n    document.addEventListener(\"submit\", didSubmitForm, true);\n    document.addEventListener(\"ajax:before\", didSubmitRemoteElement);\n  }\n}\n\nfunction didClick(event) {\n  const {target: target} = event;\n  if ((target.tagName == \"INPUT\" || target.tagName == \"BUTTON\") && target.type == \"submit\" && target.form) {\n    submitButtonsByForm.set(target.form, target);\n  }\n}\n\nfunction didSubmitForm(event) {\n  handleFormSubmissionEvent(event);\n}\n\nfunction didSubmitRemoteElement(event) {\n  if (event.target.tagName == \"FORM\") {\n    handleFormSubmissionEvent(event);\n  }\n}\n\nfunction handleFormSubmissionEvent(event) {\n  const form = event.target;\n  if (form.hasAttribute(processingAttribute)) {\n    event.preventDefault();\n    return;\n  }\n  const controller = new DirectUploadsController(form);\n  const {inputs: inputs} = controller;\n  if (inputs.length) {\n    event.preventDefault();\n    form.setAttribute(processingAttribute, \"\");\n    inputs.forEach(disable);\n    controller.start((error => {\n      form.removeAttribute(processingAttribute);\n      if (error) {\n        inputs.forEach(enable);\n      } else {\n        submitForm(form);\n      }\n    }));\n  }\n}\n\nfunction submitForm(form) {\n  let button = submitButtonsByForm.get(form) || findElement(form, \"input[type=submit], button[type=submit]\");\n  if (button) {\n    const {disabled: disabled} = button;\n    button.disabled = false;\n    button.focus();\n    button.click();\n    button.disabled = disabled;\n  } else {\n    button = document.createElement(\"input\");\n    button.type = \"submit\";\n    button.style.display = \"none\";\n    form.appendChild(button);\n    button.click();\n    form.removeChild(button);\n  }\n  submitButtonsByForm.delete(form);\n}\n\nfunction disable(input) {\n  input.disabled = true;\n}\n\nfunction enable(input) {\n  input.disabled = false;\n}\n\nfunction autostart() {\n  if (window.ActiveStorage) {\n    start();\n  }\n}\n\nsetTimeout(autostart, 1);\n\nexport { DirectUpload, DirectUploadController, DirectUploadsController, start };\n", "/*!\n * FilePond 4.30.4\n * Licensed under MIT, https://opensource.org/licenses/MIT/\n * Please visit https://pqina.nl/filepond/ for details.\n */\n\n/* eslint-disable */\n\n(function(global, factory) {\n    typeof exports === 'object' && typeof module !== 'undefined'\n        ? factory(exports)\n        : typeof define === 'function' && define.amd\n        ? define(['exports'], factory)\n        : ((global = global || self), factory((global.FilePond = {})));\n})(this, function(exports) {\n    'use strict';\n\n    var isNode = function isNode(value) {\n        return value instanceof HTMLElement;\n    };\n\n    var createStore = function createStore(initialState) {\n        var queries = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n        var actions = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n        // internal state\n        var state = Object.assign({}, initialState);\n\n        // contains all actions for next frame, is clear when actions are requested\n        var actionQueue = [];\n        var dispatchQueue = [];\n\n        // returns a duplicate of the current state\n        var getState = function getState() {\n            return Object.assign({}, state);\n        };\n\n        // returns a duplicate of the actions array and clears the actions array\n        var processActionQueue = function processActionQueue() {\n            // create copy of actions queue\n            var queue = [].concat(actionQueue);\n\n            // clear actions queue (we don't want no double actions)\n            actionQueue.length = 0;\n\n            return queue;\n        };\n\n        // processes actions that might block the main UI thread\n        var processDispatchQueue = function processDispatchQueue() {\n            // create copy of actions queue\n            var queue = [].concat(dispatchQueue);\n\n            // clear actions queue (we don't want no double actions)\n            dispatchQueue.length = 0;\n\n            // now dispatch these actions\n            queue.forEach(function(_ref) {\n                var type = _ref.type,\n                    data = _ref.data;\n                dispatch(type, data);\n            });\n        };\n\n        // adds a new action, calls its handler and\n        var dispatch = function dispatch(type, data, isBlocking) {\n            // is blocking action (should never block if document is hidden)\n            if (isBlocking && !document.hidden) {\n                dispatchQueue.push({ type: type, data: data });\n                return;\n            }\n\n            // if this action has a handler, handle the action\n            if (actionHandlers[type]) {\n                actionHandlers[type](data);\n            }\n\n            // now add action\n            actionQueue.push({\n                type: type,\n                data: data,\n            });\n        };\n\n        var query = function query(str) {\n            var _queryHandles;\n            for (\n                var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1;\n                _key < _len;\n                _key++\n            ) {\n                args[_key - 1] = arguments[_key];\n            }\n            return queryHandles[str]\n                ? (_queryHandles = queryHandles)[str].apply(_queryHandles, args)\n                : null;\n        };\n\n        var api = {\n            getState: getState,\n            processActionQueue: processActionQueue,\n            processDispatchQueue: processDispatchQueue,\n            dispatch: dispatch,\n            query: query,\n        };\n\n        var queryHandles = {};\n        queries.forEach(function(query) {\n            queryHandles = Object.assign({}, query(state), {}, queryHandles);\n        });\n\n        var actionHandlers = {};\n        actions.forEach(function(action) {\n            actionHandlers = Object.assign({}, action(dispatch, query, state), {}, actionHandlers);\n        });\n\n        return api;\n    };\n\n    var defineProperty = function defineProperty(obj, property, definition) {\n        if (typeof definition === 'function') {\n            obj[property] = definition;\n            return;\n        }\n        Object.defineProperty(obj, property, Object.assign({}, definition));\n    };\n\n    var forin = function forin(obj, cb) {\n        for (var key in obj) {\n            if (!obj.hasOwnProperty(key)) {\n                continue;\n            }\n\n            cb(key, obj[key]);\n        }\n    };\n\n    var createObject = function createObject(definition) {\n        var obj = {};\n        forin(definition, function(property) {\n            defineProperty(obj, property, definition[property]);\n        });\n        return obj;\n    };\n\n    var attr = function attr(node, name) {\n        var value = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n        if (value === null) {\n            return node.getAttribute(name) || node.hasAttribute(name);\n        }\n        node.setAttribute(name, value);\n    };\n\n    var ns = 'http://www.w3.org/2000/svg';\n    var svgElements = ['svg', 'path']; // only svg elements used\n\n    var isSVGElement = function isSVGElement(tag) {\n        return svgElements.includes(tag);\n    };\n\n    var createElement = function createElement(tag, className) {\n        var attributes = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n        if (typeof className === 'object') {\n            attributes = className;\n            className = null;\n        }\n        var element = isSVGElement(tag)\n            ? document.createElementNS(ns, tag)\n            : document.createElement(tag);\n        if (className) {\n            if (isSVGElement(tag)) {\n                attr(element, 'class', className);\n            } else {\n                element.className = className;\n            }\n        }\n        forin(attributes, function(name, value) {\n            attr(element, name, value);\n        });\n        return element;\n    };\n\n    var appendChild = function appendChild(parent) {\n        return function(child, index) {\n            if (typeof index !== 'undefined' && parent.children[index]) {\n                parent.insertBefore(child, parent.children[index]);\n            } else {\n                parent.appendChild(child);\n            }\n        };\n    };\n\n    var appendChildView = function appendChildView(parent, childViews) {\n        return function(view, index) {\n            if (typeof index !== 'undefined') {\n                childViews.splice(index, 0, view);\n            } else {\n                childViews.push(view);\n            }\n\n            return view;\n        };\n    };\n\n    var removeChildView = function removeChildView(parent, childViews) {\n        return function(view) {\n            // remove from child views\n            childViews.splice(childViews.indexOf(view), 1);\n\n            // remove the element\n            if (view.element.parentNode) {\n                parent.removeChild(view.element);\n            }\n\n            return view;\n        };\n    };\n\n    var IS_BROWSER = (function() {\n        return typeof window !== 'undefined' && typeof window.document !== 'undefined';\n    })();\n    var isBrowser = function isBrowser() {\n        return IS_BROWSER;\n    };\n\n    var testElement = isBrowser() ? createElement('svg') : {};\n    var getChildCount =\n        'children' in testElement\n            ? function(el) {\n                  return el.children.length;\n              }\n            : function(el) {\n                  return el.childNodes.length;\n              };\n\n    var getViewRect = function getViewRect(elementRect, childViews, offset, scale) {\n        var left = offset[0] || elementRect.left;\n        var top = offset[1] || elementRect.top;\n        var right = left + elementRect.width;\n        var bottom = top + elementRect.height * (scale[1] || 1);\n\n        var rect = {\n            // the rectangle of the element itself\n            element: Object.assign({}, elementRect),\n\n            // the rectangle of the element expanded to contain its children, does not include any margins\n            inner: {\n                left: elementRect.left,\n                top: elementRect.top,\n                right: elementRect.right,\n                bottom: elementRect.bottom,\n            },\n\n            // the rectangle of the element expanded to contain its children including own margin and child margins\n            // margins will be added after we've recalculated the size\n            outer: {\n                left: left,\n                top: top,\n                right: right,\n                bottom: bottom,\n            },\n        };\n\n        // expand rect to fit all child rectangles\n        childViews\n            .filter(function(childView) {\n                return !childView.isRectIgnored();\n            })\n            .map(function(childView) {\n                return childView.rect;\n            })\n            .forEach(function(childViewRect) {\n                expandRect(rect.inner, Object.assign({}, childViewRect.inner));\n                expandRect(rect.outer, Object.assign({}, childViewRect.outer));\n            });\n\n        // calculate inner width and height\n        calculateRectSize(rect.inner);\n\n        // append additional margin (top and left margins are included in top and left automatically)\n        rect.outer.bottom += rect.element.marginBottom;\n        rect.outer.right += rect.element.marginRight;\n\n        // calculate outer width and height\n        calculateRectSize(rect.outer);\n\n        return rect;\n    };\n\n    var expandRect = function expandRect(parent, child) {\n        // adjust for parent offset\n        child.top += parent.top;\n        child.right += parent.left;\n        child.bottom += parent.top;\n        child.left += parent.left;\n\n        if (child.bottom > parent.bottom) {\n            parent.bottom = child.bottom;\n        }\n\n        if (child.right > parent.right) {\n            parent.right = child.right;\n        }\n    };\n\n    var calculateRectSize = function calculateRectSize(rect) {\n        rect.width = rect.right - rect.left;\n        rect.height = rect.bottom - rect.top;\n    };\n\n    var isNumber = function isNumber(value) {\n        return typeof value === 'number';\n    };\n\n    /**\n     * Determines if position is at destination\n     * @param position\n     * @param destination\n     * @param velocity\n     * @param errorMargin\n     * @returns {boolean}\n     */\n    var thereYet = function thereYet(position, destination, velocity) {\n        var errorMargin = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0.001;\n        return Math.abs(position - destination) < errorMargin && Math.abs(velocity) < errorMargin;\n    };\n\n    /**\n     * Spring animation\n     */\n    var spring =\n        // default options\n        function spring() // method definition\n        {\n            var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n                _ref$stiffness = _ref.stiffness,\n                stiffness = _ref$stiffness === void 0 ? 0.5 : _ref$stiffness,\n                _ref$damping = _ref.damping,\n                damping = _ref$damping === void 0 ? 0.75 : _ref$damping,\n                _ref$mass = _ref.mass,\n                mass = _ref$mass === void 0 ? 10 : _ref$mass;\n            var target = null;\n            var position = null;\n            var velocity = 0;\n            var resting = false;\n\n            // updates spring state\n            var interpolate = function interpolate(ts, skipToEndState) {\n                // in rest, don't animate\n                if (resting) return;\n\n                // need at least a target or position to do springy things\n                if (!(isNumber(target) && isNumber(position))) {\n                    resting = true;\n                    velocity = 0;\n                    return;\n                }\n\n                // calculate spring force\n                var f = -(position - target) * stiffness;\n\n                // update velocity by adding force based on mass\n                velocity += f / mass;\n\n                // update position by adding velocity\n                position += velocity;\n\n                // slow down based on amount of damping\n                velocity *= damping;\n\n                // we've arrived if we're near target and our velocity is near zero\n                if (thereYet(position, target, velocity) || skipToEndState) {\n                    position = target;\n                    velocity = 0;\n                    resting = true;\n\n                    // we done\n                    api.onupdate(position);\n                    api.oncomplete(position);\n                } else {\n                    // progress update\n                    api.onupdate(position);\n                }\n            };\n\n            /**\n             * Set new target value\n             * @param value\n             */\n            var setTarget = function setTarget(value) {\n                // if currently has no position, set target and position to this value\n                if (isNumber(value) && !isNumber(position)) {\n                    position = value;\n                }\n\n                // next target value will not be animated to\n                if (target === null) {\n                    target = value;\n                    position = value;\n                }\n\n                // let start moving to target\n                target = value;\n\n                // already at target\n                if (position === target || typeof target === 'undefined') {\n                    // now resting as target is current position, stop moving\n                    resting = true;\n                    velocity = 0;\n\n                    // done!\n                    api.onupdate(position);\n                    api.oncomplete(position);\n\n                    return;\n                }\n\n                resting = false;\n            };\n\n            // need 'api' to call onupdate callback\n            var api = createObject({\n                interpolate: interpolate,\n                target: {\n                    set: setTarget,\n                    get: function get() {\n                        return target;\n                    },\n                },\n\n                resting: {\n                    get: function get() {\n                        return resting;\n                    },\n                },\n\n                onupdate: function onupdate(value) {},\n                oncomplete: function oncomplete(value) {},\n            });\n\n            return api;\n        };\n\n    var easeLinear = function easeLinear(t) {\n        return t;\n    };\n    var easeInOutQuad = function easeInOutQuad(t) {\n        return t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t;\n    };\n\n    var tween =\n        // default values\n        function tween() // method definition\n        {\n            var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n                _ref$duration = _ref.duration,\n                duration = _ref$duration === void 0 ? 500 : _ref$duration,\n                _ref$easing = _ref.easing,\n                easing = _ref$easing === void 0 ? easeInOutQuad : _ref$easing,\n                _ref$delay = _ref.delay,\n                delay = _ref$delay === void 0 ? 0 : _ref$delay;\n            var start = null;\n            var t;\n            var p;\n            var resting = true;\n            var reverse = false;\n            var target = null;\n\n            var interpolate = function interpolate(ts, skipToEndState) {\n                if (resting || target === null) return;\n\n                if (start === null) {\n                    start = ts;\n                }\n\n                if (ts - start < delay) return;\n\n                t = ts - start - delay;\n\n                if (t >= duration || skipToEndState) {\n                    t = 1;\n                    p = reverse ? 0 : 1;\n                    api.onupdate(p * target);\n                    api.oncomplete(p * target);\n                    resting = true;\n                } else {\n                    p = t / duration;\n                    api.onupdate((t >= 0 ? easing(reverse ? 1 - p : p) : 0) * target);\n                }\n            };\n\n            // need 'api' to call onupdate callback\n            var api = createObject({\n                interpolate: interpolate,\n                target: {\n                    get: function get() {\n                        return reverse ? 0 : target;\n                    },\n                    set: function set(value) {\n                        // is initial value\n                        if (target === null) {\n                            target = value;\n                            api.onupdate(value);\n                            api.oncomplete(value);\n                            return;\n                        }\n\n                        // want to tween to a smaller value and have a current value\n                        if (value < target) {\n                            target = 1;\n                            reverse = true;\n                        } else {\n                            // not tweening to a smaller value\n                            reverse = false;\n                            target = value;\n                        }\n\n                        // let's go!\n                        resting = false;\n                        start = null;\n                    },\n                },\n\n                resting: {\n                    get: function get() {\n                        return resting;\n                    },\n                },\n\n                onupdate: function onupdate(value) {},\n                oncomplete: function oncomplete(value) {},\n            });\n\n            return api;\n        };\n\n    var animator = {\n        spring: spring,\n        tween: tween,\n    };\n\n    /*\n                       { type: 'spring', stiffness: .5, damping: .75, mass: 10 };\n                       { translation: { type: 'spring', ... }, ... }\n                       { translation: { x: { type: 'spring', ... } } }\n                      */\n    var createAnimator = function createAnimator(definition, category, property) {\n        // default is single definition\n        // we check if transform is set, if so, we check if property is set\n        var def =\n            definition[category] && typeof definition[category][property] === 'object'\n                ? definition[category][property]\n                : definition[category] || definition;\n\n        var type = typeof def === 'string' ? def : def.type;\n        var props = typeof def === 'object' ? Object.assign({}, def) : {};\n\n        return animator[type] ? animator[type](props) : null;\n    };\n\n    var addGetSet = function addGetSet(keys, obj, props) {\n        var overwrite = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n        obj = Array.isArray(obj) ? obj : [obj];\n        obj.forEach(function(o) {\n            keys.forEach(function(key) {\n                var name = key;\n                var getter = function getter() {\n                    return props[key];\n                };\n                var setter = function setter(value) {\n                    return (props[key] = value);\n                };\n\n                if (typeof key === 'object') {\n                    name = key.key;\n                    getter = key.getter || getter;\n                    setter = key.setter || setter;\n                }\n\n                if (o[name] && !overwrite) {\n                    return;\n                }\n\n                o[name] = {\n                    get: getter,\n                    set: setter,\n                };\n            });\n        });\n    };\n\n    // add to state,\n    // add getters and setters to internal and external api (if not set)\n    // setup animators\n\n    var animations = function animations(_ref) {\n        var mixinConfig = _ref.mixinConfig,\n            viewProps = _ref.viewProps,\n            viewInternalAPI = _ref.viewInternalAPI,\n            viewExternalAPI = _ref.viewExternalAPI;\n        // initial properties\n        var initialProps = Object.assign({}, viewProps);\n\n        // list of all active animations\n        var animations = [];\n\n        // setup animators\n        forin(mixinConfig, function(property, animation) {\n            var animator = createAnimator(animation);\n            if (!animator) {\n                return;\n            }\n\n            // when the animator updates, update the view state value\n            animator.onupdate = function(value) {\n                viewProps[property] = value;\n            };\n\n            // set animator target\n            animator.target = initialProps[property];\n\n            // when value is set, set the animator target value\n            var prop = {\n                key: property,\n                setter: function setter(value) {\n                    // if already at target, we done!\n                    if (animator.target === value) {\n                        return;\n                    }\n\n                    animator.target = value;\n                },\n                getter: function getter() {\n                    return viewProps[property];\n                },\n            };\n\n            // add getters and setters\n            addGetSet([prop], [viewInternalAPI, viewExternalAPI], viewProps, true);\n\n            // add it to the list for easy updating from the _write method\n            animations.push(animator);\n        });\n\n        // expose internal write api\n        return {\n            write: function write(ts) {\n                var skipToEndState = document.hidden;\n                var resting = true;\n                animations.forEach(function(animation) {\n                    if (!animation.resting) resting = false;\n                    animation.interpolate(ts, skipToEndState);\n                });\n                return resting;\n            },\n            destroy: function destroy() {},\n        };\n    };\n\n    var addEvent = function addEvent(element) {\n        return function(type, fn) {\n            element.addEventListener(type, fn);\n        };\n    };\n\n    var removeEvent = function removeEvent(element) {\n        return function(type, fn) {\n            element.removeEventListener(type, fn);\n        };\n    };\n\n    // mixin\n    var listeners = function listeners(_ref) {\n        var mixinConfig = _ref.mixinConfig,\n            viewProps = _ref.viewProps,\n            viewInternalAPI = _ref.viewInternalAPI,\n            viewExternalAPI = _ref.viewExternalAPI,\n            viewState = _ref.viewState,\n            view = _ref.view;\n        var events = [];\n\n        var add = addEvent(view.element);\n        var remove = removeEvent(view.element);\n\n        viewExternalAPI.on = function(type, fn) {\n            events.push({\n                type: type,\n                fn: fn,\n            });\n\n            add(type, fn);\n        };\n\n        viewExternalAPI.off = function(type, fn) {\n            events.splice(\n                events.findIndex(function(event) {\n                    return event.type === type && event.fn === fn;\n                }),\n                1\n            );\n\n            remove(type, fn);\n        };\n\n        return {\n            write: function write() {\n                // not busy\n                return true;\n            },\n            destroy: function destroy() {\n                events.forEach(function(event) {\n                    remove(event.type, event.fn);\n                });\n            },\n        };\n    };\n\n    // add to external api and link to props\n\n    var apis = function apis(_ref) {\n        var mixinConfig = _ref.mixinConfig,\n            viewProps = _ref.viewProps,\n            viewExternalAPI = _ref.viewExternalAPI;\n        addGetSet(mixinConfig, viewExternalAPI, viewProps);\n    };\n\n    var isDefined = function isDefined(value) {\n        return value != null;\n    };\n\n    // add to state,\n    // add getters and setters to internal and external api (if not set)\n    // set initial state based on props in viewProps\n    // apply as transforms each frame\n\n    var defaults = {\n        opacity: 1,\n        scaleX: 1,\n        scaleY: 1,\n        translateX: 0,\n        translateY: 0,\n        rotateX: 0,\n        rotateY: 0,\n        rotateZ: 0,\n        originX: 0,\n        originY: 0,\n    };\n\n    var styles = function styles(_ref) {\n        var mixinConfig = _ref.mixinConfig,\n            viewProps = _ref.viewProps,\n            viewInternalAPI = _ref.viewInternalAPI,\n            viewExternalAPI = _ref.viewExternalAPI,\n            view = _ref.view;\n        // initial props\n        var initialProps = Object.assign({}, viewProps);\n\n        // current props\n        var currentProps = {};\n\n        // we will add those properties to the external API and link them to the viewState\n        addGetSet(mixinConfig, [viewInternalAPI, viewExternalAPI], viewProps);\n\n        // override rect on internal and external rect getter so it takes in account transforms\n        var getOffset = function getOffset() {\n            return [viewProps['translateX'] || 0, viewProps['translateY'] || 0];\n        };\n\n        var getScale = function getScale() {\n            return [viewProps['scaleX'] || 0, viewProps['scaleY'] || 0];\n        };\n        var getRect = function getRect() {\n            return view.rect\n                ? getViewRect(view.rect, view.childViews, getOffset(), getScale())\n                : null;\n        };\n        viewInternalAPI.rect = { get: getRect };\n        viewExternalAPI.rect = { get: getRect };\n\n        // apply view props\n        mixinConfig.forEach(function(key) {\n            viewProps[key] =\n                typeof initialProps[key] === 'undefined' ? defaults[key] : initialProps[key];\n        });\n\n        // expose api\n        return {\n            write: function write() {\n                // see if props have changed\n                if (!propsHaveChanged(currentProps, viewProps)) {\n                    return;\n                }\n\n                // moves element to correct position on screen\n                applyStyles(view.element, viewProps);\n\n                // store new transforms\n                Object.assign(currentProps, Object.assign({}, viewProps));\n\n                // no longer busy\n                return true;\n            },\n            destroy: function destroy() {},\n        };\n    };\n\n    var propsHaveChanged = function propsHaveChanged(currentProps, newProps) {\n        // different amount of keys\n        if (Object.keys(currentProps).length !== Object.keys(newProps).length) {\n            return true;\n        }\n\n        // lets analyze the individual props\n        for (var prop in newProps) {\n            if (newProps[prop] !== currentProps[prop]) {\n                return true;\n            }\n        }\n\n        return false;\n    };\n\n    var applyStyles = function applyStyles(element, _ref2) {\n        var opacity = _ref2.opacity,\n            perspective = _ref2.perspective,\n            translateX = _ref2.translateX,\n            translateY = _ref2.translateY,\n            scaleX = _ref2.scaleX,\n            scaleY = _ref2.scaleY,\n            rotateX = _ref2.rotateX,\n            rotateY = _ref2.rotateY,\n            rotateZ = _ref2.rotateZ,\n            originX = _ref2.originX,\n            originY = _ref2.originY,\n            width = _ref2.width,\n            height = _ref2.height;\n\n        var transforms = '';\n        var styles = '';\n\n        // handle transform origin\n        if (isDefined(originX) || isDefined(originY)) {\n            styles += 'transform-origin: ' + (originX || 0) + 'px ' + (originY || 0) + 'px;';\n        }\n\n        // transform order is relevant\n        // 0. perspective\n        if (isDefined(perspective)) {\n            transforms += 'perspective(' + perspective + 'px) ';\n        }\n\n        // 1. translate\n        if (isDefined(translateX) || isDefined(translateY)) {\n            transforms +=\n                'translate3d(' + (translateX || 0) + 'px, ' + (translateY || 0) + 'px, 0) ';\n        }\n\n        // 2. scale\n        if (isDefined(scaleX) || isDefined(scaleY)) {\n            transforms +=\n                'scale3d(' +\n                (isDefined(scaleX) ? scaleX : 1) +\n                ', ' +\n                (isDefined(scaleY) ? scaleY : 1) +\n                ', 1) ';\n        }\n\n        // 3. rotate\n        if (isDefined(rotateZ)) {\n            transforms += 'rotateZ(' + rotateZ + 'rad) ';\n        }\n\n        if (isDefined(rotateX)) {\n            transforms += 'rotateX(' + rotateX + 'rad) ';\n        }\n\n        if (isDefined(rotateY)) {\n            transforms += 'rotateY(' + rotateY + 'rad) ';\n        }\n\n        // add transforms\n        if (transforms.length) {\n            styles += 'transform:' + transforms + ';';\n        }\n\n        // add opacity\n        if (isDefined(opacity)) {\n            styles += 'opacity:' + opacity + ';';\n\n            // if we reach zero, we make the element inaccessible\n            if (opacity === 0) {\n                styles += 'visibility:hidden;';\n            }\n\n            // if we're below 100% opacity this element can't be clicked\n            if (opacity < 1) {\n                styles += 'pointer-events:none;';\n            }\n        }\n\n        // add height\n        if (isDefined(height)) {\n            styles += 'height:' + height + 'px;';\n        }\n\n        // add width\n        if (isDefined(width)) {\n            styles += 'width:' + width + 'px;';\n        }\n\n        // apply styles\n        var elementCurrentStyle = element.elementCurrentStyle || '';\n\n        // if new styles does not match current styles, lets update!\n        if (styles.length !== elementCurrentStyle.length || styles !== elementCurrentStyle) {\n            element.style.cssText = styles;\n            // store current styles so we can compare them to new styles later on\n            // _not_ getting the style value is faster\n            element.elementCurrentStyle = styles;\n        }\n    };\n\n    var Mixins = {\n        styles: styles,\n        listeners: listeners,\n        animations: animations,\n        apis: apis,\n    };\n\n    var updateRect = function updateRect() {\n        var rect = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n        var element = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n        var style = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n        if (!element.layoutCalculated) {\n            rect.paddingTop = parseInt(style.paddingTop, 10) || 0;\n            rect.marginTop = parseInt(style.marginTop, 10) || 0;\n            rect.marginRight = parseInt(style.marginRight, 10) || 0;\n            rect.marginBottom = parseInt(style.marginBottom, 10) || 0;\n            rect.marginLeft = parseInt(style.marginLeft, 10) || 0;\n            element.layoutCalculated = true;\n        }\n\n        rect.left = element.offsetLeft || 0;\n        rect.top = element.offsetTop || 0;\n        rect.width = element.offsetWidth || 0;\n        rect.height = element.offsetHeight || 0;\n\n        rect.right = rect.left + rect.width;\n        rect.bottom = rect.top + rect.height;\n\n        rect.scrollTop = element.scrollTop;\n\n        rect.hidden = element.offsetParent === null;\n\n        return rect;\n    };\n\n    var createView =\n        // default view definition\n        function createView() {\n            var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n                _ref$tag = _ref.tag,\n                tag = _ref$tag === void 0 ? 'div' : _ref$tag,\n                _ref$name = _ref.name,\n                name = _ref$name === void 0 ? null : _ref$name,\n                _ref$attributes = _ref.attributes,\n                attributes = _ref$attributes === void 0 ? {} : _ref$attributes,\n                _ref$read = _ref.read,\n                read = _ref$read === void 0 ? function() {} : _ref$read,\n                _ref$write = _ref.write,\n                write = _ref$write === void 0 ? function() {} : _ref$write,\n                _ref$create = _ref.create,\n                create = _ref$create === void 0 ? function() {} : _ref$create,\n                _ref$destroy = _ref.destroy,\n                destroy = _ref$destroy === void 0 ? function() {} : _ref$destroy,\n                _ref$filterFrameActio = _ref.filterFrameActionsForChild,\n                filterFrameActionsForChild =\n                    _ref$filterFrameActio === void 0\n                        ? function(child, actions) {\n                              return actions;\n                          }\n                        : _ref$filterFrameActio,\n                _ref$didCreateView = _ref.didCreateView,\n                didCreateView = _ref$didCreateView === void 0 ? function() {} : _ref$didCreateView,\n                _ref$didWriteView = _ref.didWriteView,\n                didWriteView = _ref$didWriteView === void 0 ? function() {} : _ref$didWriteView,\n                _ref$ignoreRect = _ref.ignoreRect,\n                ignoreRect = _ref$ignoreRect === void 0 ? false : _ref$ignoreRect,\n                _ref$ignoreRectUpdate = _ref.ignoreRectUpdate,\n                ignoreRectUpdate = _ref$ignoreRectUpdate === void 0 ? false : _ref$ignoreRectUpdate,\n                _ref$mixins = _ref.mixins,\n                mixins = _ref$mixins === void 0 ? [] : _ref$mixins;\n            return function(\n                // each view requires reference to store\n                store\n            ) {\n                var props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n                // root element should not be changed\n                var element = createElement(tag, 'filepond--' + name, attributes);\n\n                // style reference should also not be changed\n                var style = window.getComputedStyle(element, null);\n\n                // element rectangle\n                var rect = updateRect();\n                var frameRect = null;\n\n                // rest state\n                var isResting = false;\n\n                // pretty self explanatory\n                var childViews = [];\n\n                // loaded mixins\n                var activeMixins = [];\n\n                // references to created children\n                var ref = {};\n\n                // state used for each instance\n                var state = {};\n\n                // list of writers that will be called to update this view\n                var writers = [\n                    write, // default writer\n                ];\n\n                var readers = [\n                    read, // default reader\n                ];\n\n                var destroyers = [\n                    destroy, // default destroy\n                ];\n\n                // core view methods\n                var getElement = function getElement() {\n                    return element;\n                };\n                var getChildViews = function getChildViews() {\n                    return childViews.concat();\n                };\n                var getReference = function getReference() {\n                    return ref;\n                };\n                var createChildView = function createChildView(store) {\n                    return function(view, props) {\n                        return view(store, props);\n                    };\n                };\n                var getRect = function getRect() {\n                    if (frameRect) {\n                        return frameRect;\n                    }\n                    frameRect = getViewRect(rect, childViews, [0, 0], [1, 1]);\n                    return frameRect;\n                };\n                var getStyle = function getStyle() {\n                    return style;\n                };\n\n                /**\n                 * Read data from DOM\n                 * @private\n                 */\n                var _read = function _read() {\n                    frameRect = null;\n\n                    // read child views\n                    childViews.forEach(function(child) {\n                        return child._read();\n                    });\n\n                    var shouldUpdate = !(ignoreRectUpdate && rect.width && rect.height);\n                    if (shouldUpdate) {\n                        updateRect(rect, element, style);\n                    }\n\n                    // readers\n                    var api = { root: internalAPI, props: props, rect: rect };\n                    readers.forEach(function(reader) {\n                        return reader(api);\n                    });\n                };\n\n                /**\n                 * Write data to DOM\n                 * @private\n                 */\n                var _write = function _write(ts, frameActions, shouldOptimize) {\n                    // if no actions, we assume that the view is resting\n                    var resting = frameActions.length === 0;\n\n                    // writers\n                    writers.forEach(function(writer) {\n                        var writerResting = writer({\n                            props: props,\n                            root: internalAPI,\n                            actions: frameActions,\n                            timestamp: ts,\n                            shouldOptimize: shouldOptimize,\n                        });\n\n                        if (writerResting === false) {\n                            resting = false;\n                        }\n                    });\n\n                    // run mixins\n                    activeMixins.forEach(function(mixin) {\n                        // if one of the mixins is still busy after write operation, we are not resting\n                        var mixinResting = mixin.write(ts);\n                        if (mixinResting === false) {\n                            resting = false;\n                        }\n                    });\n\n                    // updates child views that are currently attached to the DOM\n                    childViews\n                        .filter(function(child) {\n                            return !!child.element.parentNode;\n                        })\n                        .forEach(function(child) {\n                            // if a child view is not resting, we are not resting\n                            var childResting = child._write(\n                                ts,\n                                filterFrameActionsForChild(child, frameActions),\n                                shouldOptimize\n                            );\n\n                            if (!childResting) {\n                                resting = false;\n                            }\n                        });\n\n                    // append new elements to DOM and update those\n                    childViews\n                        //.filter(child => !child.element.parentNode)\n                        .forEach(function(child, index) {\n                            // skip\n                            if (child.element.parentNode) {\n                                return;\n                            }\n\n                            // append to DOM\n                            internalAPI.appendChild(child.element, index);\n\n                            // call read (need to know the size of these elements)\n                            child._read();\n\n                            // re-call write\n                            child._write(\n                                ts,\n                                filterFrameActionsForChild(child, frameActions),\n                                shouldOptimize\n                            );\n\n                            // we just added somthing to the dom, no rest\n                            resting = false;\n                        });\n\n                    // update resting state\n                    isResting = resting;\n\n                    didWriteView({\n                        props: props,\n                        root: internalAPI,\n                        actions: frameActions,\n                        timestamp: ts,\n                    });\n\n                    // let parent know if we are resting\n                    return resting;\n                };\n\n                var _destroy = function _destroy() {\n                    activeMixins.forEach(function(mixin) {\n                        return mixin.destroy();\n                    });\n                    destroyers.forEach(function(destroyer) {\n                        destroyer({ root: internalAPI, props: props });\n                    });\n                    childViews.forEach(function(child) {\n                        return child._destroy();\n                    });\n                };\n\n                // sharedAPI\n                var sharedAPIDefinition = {\n                    element: {\n                        get: getElement,\n                    },\n\n                    style: {\n                        get: getStyle,\n                    },\n\n                    childViews: {\n                        get: getChildViews,\n                    },\n                };\n\n                // private API definition\n                var internalAPIDefinition = Object.assign({}, sharedAPIDefinition, {\n                    rect: {\n                        get: getRect,\n                    },\n\n                    // access to custom children references\n                    ref: {\n                        get: getReference,\n                    },\n\n                    // dom modifiers\n                    is: function is(needle) {\n                        return name === needle;\n                    },\n                    appendChild: appendChild(element),\n                    createChildView: createChildView(store),\n                    linkView: function linkView(view) {\n                        childViews.push(view);\n                        return view;\n                    },\n                    unlinkView: function unlinkView(view) {\n                        childViews.splice(childViews.indexOf(view), 1);\n                    },\n                    appendChildView: appendChildView(element, childViews),\n                    removeChildView: removeChildView(element, childViews),\n                    registerWriter: function registerWriter(writer) {\n                        return writers.push(writer);\n                    },\n                    registerReader: function registerReader(reader) {\n                        return readers.push(reader);\n                    },\n                    registerDestroyer: function registerDestroyer(destroyer) {\n                        return destroyers.push(destroyer);\n                    },\n                    invalidateLayout: function invalidateLayout() {\n                        return (element.layoutCalculated = false);\n                    },\n\n                    // access to data store\n                    dispatch: store.dispatch,\n                    query: store.query,\n                });\n\n                // public view API methods\n                var externalAPIDefinition = {\n                    element: {\n                        get: getElement,\n                    },\n\n                    childViews: {\n                        get: getChildViews,\n                    },\n\n                    rect: {\n                        get: getRect,\n                    },\n\n                    resting: {\n                        get: function get() {\n                            return isResting;\n                        },\n                    },\n\n                    isRectIgnored: function isRectIgnored() {\n                        return ignoreRect;\n                    },\n                    _read: _read,\n                    _write: _write,\n                    _destroy: _destroy,\n                };\n\n                // mixin API methods\n                var mixinAPIDefinition = Object.assign({}, sharedAPIDefinition, {\n                    rect: {\n                        get: function get() {\n                            return rect;\n                        },\n                    },\n                });\n\n                // add mixin functionality\n                Object.keys(mixins)\n                    .sort(function(a, b) {\n                        // move styles to the back of the mixin list (so adjustments of other mixins are applied to the props correctly)\n                        if (a === 'styles') {\n                            return 1;\n                        } else if (b === 'styles') {\n                            return -1;\n                        }\n                        return 0;\n                    })\n                    .forEach(function(key) {\n                        var mixinAPI = Mixins[key]({\n                            mixinConfig: mixins[key],\n                            viewProps: props,\n                            viewState: state,\n                            viewInternalAPI: internalAPIDefinition,\n                            viewExternalAPI: externalAPIDefinition,\n                            view: createObject(mixinAPIDefinition),\n                        });\n\n                        if (mixinAPI) {\n                            activeMixins.push(mixinAPI);\n                        }\n                    });\n\n                // construct private api\n                var internalAPI = createObject(internalAPIDefinition);\n\n                // create the view\n                create({\n                    root: internalAPI,\n                    props: props,\n                });\n\n                // append created child views to root node\n                var childCount = getChildCount(element); // need to know the current child count so appending happens in correct order\n                childViews.forEach(function(child, index) {\n                    internalAPI.appendChild(child.element, childCount + index);\n                });\n\n                // call did create\n                didCreateView(internalAPI);\n\n                // expose public api\n                return createObject(externalAPIDefinition);\n            };\n        };\n\n    var createPainter = function createPainter(read, write) {\n        var fps = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 60;\n\n        var name = '__framePainter';\n\n        // set global painter\n        if (window[name]) {\n            window[name].readers.push(read);\n            window[name].writers.push(write);\n            return;\n        }\n\n        window[name] = {\n            readers: [read],\n            writers: [write],\n        };\n\n        var painter = window[name];\n\n        var interval = 1000 / fps;\n        var last = null;\n        var id = null;\n        var requestTick = null;\n        var cancelTick = null;\n\n        var setTimerType = function setTimerType() {\n            if (document.hidden) {\n                requestTick = function requestTick() {\n                    return window.setTimeout(function() {\n                        return tick(performance.now());\n                    }, interval);\n                };\n                cancelTick = function cancelTick() {\n                    return window.clearTimeout(id);\n                };\n            } else {\n                requestTick = function requestTick() {\n                    return window.requestAnimationFrame(tick);\n                };\n                cancelTick = function cancelTick() {\n                    return window.cancelAnimationFrame(id);\n                };\n            }\n        };\n\n        document.addEventListener('visibilitychange', function() {\n            if (cancelTick) cancelTick();\n            setTimerType();\n            tick(performance.now());\n        });\n\n        var tick = function tick(ts) {\n            // queue next tick\n            id = requestTick(tick);\n\n            // limit fps\n            if (!last) {\n                last = ts;\n            }\n\n            var delta = ts - last;\n\n            if (delta <= interval) {\n                // skip frame\n                return;\n            }\n\n            // align next frame\n            last = ts - (delta % interval);\n\n            // update view\n            painter.readers.forEach(function(read) {\n                return read();\n            });\n            painter.writers.forEach(function(write) {\n                return write(ts);\n            });\n        };\n\n        setTimerType();\n        tick(performance.now());\n\n        return {\n            pause: function pause() {\n                cancelTick(id);\n            },\n        };\n    };\n\n    var createRoute = function createRoute(routes, fn) {\n        return function(_ref) {\n            var root = _ref.root,\n                props = _ref.props,\n                _ref$actions = _ref.actions,\n                actions = _ref$actions === void 0 ? [] : _ref$actions,\n                timestamp = _ref.timestamp,\n                shouldOptimize = _ref.shouldOptimize;\n            actions\n                .filter(function(action) {\n                    return routes[action.type];\n                })\n                .forEach(function(action) {\n                    return routes[action.type]({\n                        root: root,\n                        props: props,\n                        action: action.data,\n                        timestamp: timestamp,\n                        shouldOptimize: shouldOptimize,\n                    });\n                });\n\n            if (fn) {\n                fn({\n                    root: root,\n                    props: props,\n                    actions: actions,\n                    timestamp: timestamp,\n                    shouldOptimize: shouldOptimize,\n                });\n            }\n        };\n    };\n\n    var insertBefore = function insertBefore(newNode, referenceNode) {\n        return referenceNode.parentNode.insertBefore(newNode, referenceNode);\n    };\n\n    var insertAfter = function insertAfter(newNode, referenceNode) {\n        return referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling);\n    };\n\n    var isArray = function isArray(value) {\n        return Array.isArray(value);\n    };\n\n    var isEmpty = function isEmpty(value) {\n        return value == null;\n    };\n\n    var trim = function trim(str) {\n        return str.trim();\n    };\n\n    var toString = function toString(value) {\n        return '' + value;\n    };\n\n    var toArray = function toArray(value) {\n        var splitter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ',';\n        if (isEmpty(value)) {\n            return [];\n        }\n        if (isArray(value)) {\n            return value;\n        }\n        return toString(value)\n            .split(splitter)\n            .map(trim)\n            .filter(function(str) {\n                return str.length;\n            });\n    };\n\n    var isBoolean = function isBoolean(value) {\n        return typeof value === 'boolean';\n    };\n\n    var toBoolean = function toBoolean(value) {\n        return isBoolean(value) ? value : value === 'true';\n    };\n\n    var isString = function isString(value) {\n        return typeof value === 'string';\n    };\n\n    var toNumber = function toNumber(value) {\n        return isNumber(value)\n            ? value\n            : isString(value)\n            ? toString(value).replace(/[a-z]+/gi, '')\n            : 0;\n    };\n\n    var toInt = function toInt(value) {\n        return parseInt(toNumber(value), 10);\n    };\n\n    var toFloat = function toFloat(value) {\n        return parseFloat(toNumber(value));\n    };\n\n    var isInt = function isInt(value) {\n        return isNumber(value) && isFinite(value) && Math.floor(value) === value;\n    };\n\n    var toBytes = function toBytes(value) {\n        var base = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1000;\n        // is in bytes\n        if (isInt(value)) {\n            return value;\n        }\n\n        // is natural file size\n        var naturalFileSize = toString(value).trim();\n\n        // if is value in megabytes\n        if (/MB$/i.test(naturalFileSize)) {\n            naturalFileSize = naturalFileSize.replace(/MB$i/, '').trim();\n            return toInt(naturalFileSize) * base * base;\n        }\n\n        // if is value in kilobytes\n        if (/KB/i.test(naturalFileSize)) {\n            naturalFileSize = naturalFileSize.replace(/KB$i/, '').trim();\n            return toInt(naturalFileSize) * base;\n        }\n\n        return toInt(naturalFileSize);\n    };\n\n    var isFunction = function isFunction(value) {\n        return typeof value === 'function';\n    };\n\n    var toFunctionReference = function toFunctionReference(string) {\n        var ref = self;\n        var levels = string.split('.');\n        var level = null;\n        while ((level = levels.shift())) {\n            ref = ref[level];\n            if (!ref) {\n                return null;\n            }\n        }\n        return ref;\n    };\n\n    var methods = {\n        process: 'POST',\n        patch: 'PATCH',\n        revert: 'DELETE',\n        fetch: 'GET',\n        restore: 'GET',\n        load: 'GET',\n    };\n\n    var createServerAPI = function createServerAPI(outline) {\n        var api = {};\n\n        api.url = isString(outline) ? outline : outline.url || '';\n        api.timeout = outline.timeout ? parseInt(outline.timeout, 10) : 0;\n        api.headers = outline.headers ? outline.headers : {};\n\n        forin(methods, function(key) {\n            api[key] = createAction(key, outline[key], methods[key], api.timeout, api.headers);\n        });\n\n        // remove process if no url or process on outline\n        api.process = outline.process || isString(outline) || outline.url ? api.process : null;\n\n        // special treatment for remove\n        api.remove = outline.remove || null;\n\n        // remove generic headers from api object\n        delete api.headers;\n\n        return api;\n    };\n\n    var createAction = function createAction(name, outline, method, timeout, headers) {\n        // is explicitely set to null so disable\n        if (outline === null) {\n            return null;\n        }\n\n        // if is custom function, done! Dev handles everything.\n        if (typeof outline === 'function') {\n            return outline;\n        }\n\n        // build action object\n        var action = {\n            url: method === 'GET' || method === 'PATCH' ? '?' + name + '=' : '',\n            method: method,\n            headers: headers,\n            withCredentials: false,\n            timeout: timeout,\n            onload: null,\n            ondata: null,\n            onerror: null,\n        };\n\n        // is a single url\n        if (isString(outline)) {\n            action.url = outline;\n            return action;\n        }\n\n        // overwrite\n        Object.assign(action, outline);\n\n        // see if should reformat headers;\n        if (isString(action.headers)) {\n            var parts = action.headers.split(/:(.+)/);\n            action.headers = {\n                header: parts[0],\n                value: parts[1],\n            };\n        }\n\n        // if is bool withCredentials\n        action.withCredentials = toBoolean(action.withCredentials);\n\n        return action;\n    };\n\n    var toServerAPI = function toServerAPI(value) {\n        return createServerAPI(value);\n    };\n\n    var isNull = function isNull(value) {\n        return value === null;\n    };\n\n    var isObject = function isObject(value) {\n        return typeof value === 'object' && value !== null;\n    };\n\n    var isAPI = function isAPI(value) {\n        return (\n            isObject(value) &&\n            isString(value.url) &&\n            isObject(value.process) &&\n            isObject(value.revert) &&\n            isObject(value.restore) &&\n            isObject(value.fetch)\n        );\n    };\n\n    var getType = function getType(value) {\n        if (isArray(value)) {\n            return 'array';\n        }\n\n        if (isNull(value)) {\n            return 'null';\n        }\n\n        if (isInt(value)) {\n            return 'int';\n        }\n\n        if (/^[0-9]+ ?(?:GB|MB|KB)$/gi.test(value)) {\n            return 'bytes';\n        }\n\n        if (isAPI(value)) {\n            return 'api';\n        }\n\n        return typeof value;\n    };\n\n    var replaceSingleQuotes = function replaceSingleQuotes(str) {\n        return str\n            .replace(/{\\s*'/g, '{\"')\n            .replace(/'\\s*}/g, '\"}')\n            .replace(/'\\s*:/g, '\":')\n            .replace(/:\\s*'/g, ':\"')\n            .replace(/,\\s*'/g, ',\"')\n            .replace(/'\\s*,/g, '\",');\n    };\n\n    var conversionTable = {\n        array: toArray,\n        boolean: toBoolean,\n        int: function int(value) {\n            return getType(value) === 'bytes' ? toBytes(value) : toInt(value);\n        },\n        number: toFloat,\n        float: toFloat,\n        bytes: toBytes,\n        string: function string(value) {\n            return isFunction(value) ? value : toString(value);\n        },\n        function: function _function(value) {\n            return toFunctionReference(value);\n        },\n        serverapi: toServerAPI,\n        object: function object(value) {\n            try {\n                return JSON.parse(replaceSingleQuotes(value));\n            } catch (e) {\n                return null;\n            }\n        },\n    };\n\n    var convertTo = function convertTo(value, type) {\n        return conversionTable[type](value);\n    };\n\n    var getValueByType = function getValueByType(newValue, defaultValue, valueType) {\n        // can always assign default value\n        if (newValue === defaultValue) {\n            return newValue;\n        }\n\n        // get the type of the new value\n        var newValueType = getType(newValue);\n\n        // is valid type?\n        if (newValueType !== valueType) {\n            // is string input, let's attempt to convert\n            var convertedValue = convertTo(newValue, valueType);\n\n            // what is the type now\n            newValueType = getType(convertedValue);\n\n            // no valid conversions found\n            if (convertedValue === null) {\n                throw 'Trying to assign value with incorrect type to \"' +\n                    option +\n                    '\", allowed type: \"' +\n                    valueType +\n                    '\"';\n            } else {\n                newValue = convertedValue;\n            }\n        }\n\n        // assign new value\n        return newValue;\n    };\n\n    var createOption = function createOption(defaultValue, valueType) {\n        var currentValue = defaultValue;\n        return {\n            enumerable: true,\n            get: function get() {\n                return currentValue;\n            },\n            set: function set(newValue) {\n                currentValue = getValueByType(newValue, defaultValue, valueType);\n            },\n        };\n    };\n\n    var createOptions = function createOptions(options) {\n        var obj = {};\n        forin(options, function(prop) {\n            var optionDefinition = options[prop];\n            obj[prop] = createOption(optionDefinition[0], optionDefinition[1]);\n        });\n        return createObject(obj);\n    };\n\n    var createInitialState = function createInitialState(options) {\n        return {\n            // model\n            items: [],\n\n            // timeout used for calling update items\n            listUpdateTimeout: null,\n\n            // timeout used for stacking metadata updates\n            itemUpdateTimeout: null,\n\n            // queue of items waiting to be processed\n            processingQueue: [],\n\n            // options\n            options: createOptions(options),\n        };\n    };\n\n    var fromCamels = function fromCamels(string) {\n        var separator = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '-';\n        return string\n            .split(/(?=[A-Z])/)\n            .map(function(part) {\n                return part.toLowerCase();\n            })\n            .join(separator);\n    };\n\n    var createOptionAPI = function createOptionAPI(store, options) {\n        var obj = {};\n        forin(options, function(key) {\n            obj[key] = {\n                get: function get() {\n                    return store.getState().options[key];\n                },\n                set: function set(value) {\n                    store.dispatch('SET_' + fromCamels(key, '_').toUpperCase(), {\n                        value: value,\n                    });\n                },\n            };\n        });\n        return obj;\n    };\n\n    var createOptionActions = function createOptionActions(options) {\n        return function(dispatch, query, state) {\n            var obj = {};\n            forin(options, function(key) {\n                var name = fromCamels(key, '_').toUpperCase();\n\n                obj['SET_' + name] = function(action) {\n                    try {\n                        state.options[key] = action.value;\n                    } catch (e) {} // nope, failed\n\n                    // we successfully set the value of this option\n                    dispatch('DID_SET_' + name, { value: state.options[key] });\n                };\n            });\n            return obj;\n        };\n    };\n\n    var createOptionQueries = function createOptionQueries(options) {\n        return function(state) {\n            var obj = {};\n            forin(options, function(key) {\n                obj['GET_' + fromCamels(key, '_').toUpperCase()] = function(action) {\n                    return state.options[key];\n                };\n            });\n            return obj;\n        };\n    };\n\n    var InteractionMethod = {\n        API: 1,\n        DROP: 2,\n        BROWSE: 3,\n        PASTE: 4,\n        NONE: 5,\n    };\n\n    var getUniqueId = function getUniqueId() {\n        return Math.random()\n            .toString(36)\n            .substring(2, 11);\n    };\n\n    function _typeof(obj) {\n        if (typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol') {\n            _typeof = function(obj) {\n                return typeof obj;\n            };\n        } else {\n            _typeof = function(obj) {\n                return obj &&\n                    typeof Symbol === 'function' &&\n                    obj.constructor === Symbol &&\n                    obj !== Symbol.prototype\n                    ? 'symbol'\n                    : typeof obj;\n            };\n        }\n\n        return _typeof(obj);\n    }\n\n    var REACT_ELEMENT_TYPE;\n\n    function _jsx(type, props, key, children) {\n        if (!REACT_ELEMENT_TYPE) {\n            REACT_ELEMENT_TYPE =\n                (typeof Symbol === 'function' && Symbol['for'] && Symbol['for']('react.element')) ||\n                0xeac7;\n        }\n\n        var defaultProps = type && type.defaultProps;\n        var childrenLength = arguments.length - 3;\n\n        if (!props && childrenLength !== 0) {\n            props = {\n                children: void 0,\n            };\n        }\n\n        if (props && defaultProps) {\n            for (var propName in defaultProps) {\n                if (props[propName] === void 0) {\n                    props[propName] = defaultProps[propName];\n                }\n            }\n        } else if (!props) {\n            props = defaultProps || {};\n        }\n\n        if (childrenLength === 1) {\n            props.children = children;\n        } else if (childrenLength > 1) {\n            var childArray = new Array(childrenLength);\n\n            for (var i = 0; i < childrenLength; i++) {\n                childArray[i] = arguments[i + 3];\n            }\n\n            props.children = childArray;\n        }\n\n        return {\n            $$typeof: REACT_ELEMENT_TYPE,\n            type: type,\n            key: key === undefined ? null : '' + key,\n            ref: null,\n            props: props,\n            _owner: null,\n        };\n    }\n\n    function _asyncIterator(iterable) {\n        var method;\n\n        if (typeof Symbol !== 'undefined') {\n            if (Symbol.asyncIterator) {\n                method = iterable[Symbol.asyncIterator];\n                if (method != null) return method.call(iterable);\n            }\n\n            if (Symbol.iterator) {\n                method = iterable[Symbol.iterator];\n                if (method != null) return method.call(iterable);\n            }\n        }\n\n        throw new TypeError('Object is not async iterable');\n    }\n\n    function _AwaitValue(value) {\n        this.wrapped = value;\n    }\n\n    function _AsyncGenerator(gen) {\n        var front, back;\n\n        function send(key, arg) {\n            return new Promise(function(resolve, reject) {\n                var request = {\n                    key: key,\n                    arg: arg,\n                    resolve: resolve,\n                    reject: reject,\n                    next: null,\n                };\n\n                if (back) {\n                    back = back.next = request;\n                } else {\n                    front = back = request;\n                    resume(key, arg);\n                }\n            });\n        }\n\n        function resume(key, arg) {\n            try {\n                var result = gen[key](arg);\n                var value = result.value;\n                var wrappedAwait = value instanceof _AwaitValue;\n                Promise.resolve(wrappedAwait ? value.wrapped : value).then(\n                    function(arg) {\n                        if (wrappedAwait) {\n                            resume('next', arg);\n                            return;\n                        }\n\n                        settle(result.done ? 'return' : 'normal', arg);\n                    },\n                    function(err) {\n                        resume('throw', err);\n                    }\n                );\n            } catch (err) {\n                settle('throw', err);\n            }\n        }\n\n        function settle(type, value) {\n            switch (type) {\n                case 'return':\n                    front.resolve({\n                        value: value,\n                        done: true,\n                    });\n                    break;\n\n                case 'throw':\n                    front.reject(value);\n                    break;\n\n                default:\n                    front.resolve({\n                        value: value,\n                        done: false,\n                    });\n                    break;\n            }\n\n            front = front.next;\n\n            if (front) {\n                resume(front.key, front.arg);\n            } else {\n                back = null;\n            }\n        }\n\n        this._invoke = send;\n\n        if (typeof gen.return !== 'function') {\n            this.return = undefined;\n        }\n    }\n\n    if (typeof Symbol === 'function' && Symbol.asyncIterator) {\n        _AsyncGenerator.prototype[Symbol.asyncIterator] = function() {\n            return this;\n        };\n    }\n\n    _AsyncGenerator.prototype.next = function(arg) {\n        return this._invoke('next', arg);\n    };\n\n    _AsyncGenerator.prototype.throw = function(arg) {\n        return this._invoke('throw', arg);\n    };\n\n    _AsyncGenerator.prototype.return = function(arg) {\n        return this._invoke('return', arg);\n    };\n\n    function _wrapAsyncGenerator(fn) {\n        return function() {\n            return new _AsyncGenerator(fn.apply(this, arguments));\n        };\n    }\n\n    function _awaitAsyncGenerator(value) {\n        return new _AwaitValue(value);\n    }\n\n    function _asyncGeneratorDelegate(inner, awaitWrap) {\n        var iter = {},\n            waiting = false;\n\n        function pump(key, value) {\n            waiting = true;\n            value = new Promise(function(resolve) {\n                resolve(inner[key](value));\n            });\n            return {\n                done: false,\n                value: awaitWrap(value),\n            };\n        }\n\n        if (typeof Symbol === 'function' && Symbol.iterator) {\n            iter[Symbol.iterator] = function() {\n                return this;\n            };\n        }\n\n        iter.next = function(value) {\n            if (waiting) {\n                waiting = false;\n                return value;\n            }\n\n            return pump('next', value);\n        };\n\n        if (typeof inner.throw === 'function') {\n            iter.throw = function(value) {\n                if (waiting) {\n                    waiting = false;\n                    throw value;\n                }\n\n                return pump('throw', value);\n            };\n        }\n\n        if (typeof inner.return === 'function') {\n            iter.return = function(value) {\n                return pump('return', value);\n            };\n        }\n\n        return iter;\n    }\n\n    function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n        try {\n            var info = gen[key](arg);\n            var value = info.value;\n        } catch (error) {\n            reject(error);\n            return;\n        }\n\n        if (info.done) {\n            resolve(value);\n        } else {\n            Promise.resolve(value).then(_next, _throw);\n        }\n    }\n\n    function _asyncToGenerator(fn) {\n        return function() {\n            var self = this,\n                args = arguments;\n            return new Promise(function(resolve, reject) {\n                var gen = fn.apply(self, args);\n\n                function _next(value) {\n                    asyncGeneratorStep(gen, resolve, reject, _next, _throw, 'next', value);\n                }\n\n                function _throw(err) {\n                    asyncGeneratorStep(gen, resolve, reject, _next, _throw, 'throw', err);\n                }\n\n                _next(undefined);\n            });\n        };\n    }\n\n    function _classCallCheck(instance, Constructor) {\n        if (!(instance instanceof Constructor)) {\n            throw new TypeError('Cannot call a class as a function');\n        }\n    }\n\n    function _defineProperties(target, props) {\n        for (var i = 0; i < props.length; i++) {\n            var descriptor = props[i];\n            descriptor.enumerable = descriptor.enumerable || false;\n            descriptor.configurable = true;\n            if ('value' in descriptor) descriptor.writable = true;\n            Object.defineProperty(target, descriptor.key, descriptor);\n        }\n    }\n\n    function _createClass(Constructor, protoProps, staticProps) {\n        if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n        if (staticProps) _defineProperties(Constructor, staticProps);\n        return Constructor;\n    }\n\n    function _defineEnumerableProperties(obj, descs) {\n        for (var key in descs) {\n            var desc = descs[key];\n            desc.configurable = desc.enumerable = true;\n            if ('value' in desc) desc.writable = true;\n            Object.defineProperty(obj, key, desc);\n        }\n\n        if (Object.getOwnPropertySymbols) {\n            var objectSymbols = Object.getOwnPropertySymbols(descs);\n\n            for (var i = 0; i < objectSymbols.length; i++) {\n                var sym = objectSymbols[i];\n                var desc = descs[sym];\n                desc.configurable = desc.enumerable = true;\n                if ('value' in desc) desc.writable = true;\n                Object.defineProperty(obj, sym, desc);\n            }\n        }\n\n        return obj;\n    }\n\n    function _defaults(obj, defaults) {\n        var keys = Object.getOwnPropertyNames(defaults);\n\n        for (var i = 0; i < keys.length; i++) {\n            var key = keys[i];\n            var value = Object.getOwnPropertyDescriptor(defaults, key);\n\n            if (value && value.configurable && obj[key] === undefined) {\n                Object.defineProperty(obj, key, value);\n            }\n        }\n\n        return obj;\n    }\n\n    function _defineProperty(obj, key, value) {\n        if (key in obj) {\n            Object.defineProperty(obj, key, {\n                value: value,\n                enumerable: true,\n                configurable: true,\n                writable: true,\n            });\n        } else {\n            obj[key] = value;\n        }\n\n        return obj;\n    }\n\n    function _extends() {\n        _extends =\n            Object.assign ||\n            function(target) {\n                for (var i = 1; i < arguments.length; i++) {\n                    var source = arguments[i];\n\n                    for (var key in source) {\n                        if (Object.prototype.hasOwnProperty.call(source, key)) {\n                            target[key] = source[key];\n                        }\n                    }\n                }\n\n                return target;\n            };\n\n        return _extends.apply(this, arguments);\n    }\n\n    function _objectSpread(target) {\n        for (var i = 1; i < arguments.length; i++) {\n            var source = arguments[i] != null ? arguments[i] : {};\n            var ownKeys = Object.keys(source);\n\n            if (typeof Object.getOwnPropertySymbols === 'function') {\n                ownKeys = ownKeys.concat(\n                    Object.getOwnPropertySymbols(source).filter(function(sym) {\n                        return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n                    })\n                );\n            }\n\n            ownKeys.forEach(function(key) {\n                _defineProperty(target, key, source[key]);\n            });\n        }\n\n        return target;\n    }\n\n    function ownKeys(object, enumerableOnly) {\n        var keys = Object.keys(object);\n\n        if (Object.getOwnPropertySymbols) {\n            var symbols = Object.getOwnPropertySymbols(object);\n            if (enumerableOnly)\n                symbols = symbols.filter(function(sym) {\n                    return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n                });\n            keys.push.apply(keys, symbols);\n        }\n\n        return keys;\n    }\n\n    function _objectSpread2(target) {\n        for (var i = 1; i < arguments.length; i++) {\n            var source = arguments[i] != null ? arguments[i] : {};\n\n            if (i % 2) {\n                ownKeys(source, true).forEach(function(key) {\n                    _defineProperty(target, key, source[key]);\n                });\n            } else if (Object.getOwnPropertyDescriptors) {\n                Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n            } else {\n                ownKeys(source).forEach(function(key) {\n                    Object.defineProperty(\n                        target,\n                        key,\n                        Object.getOwnPropertyDescriptor(source, key)\n                    );\n                });\n            }\n        }\n\n        return target;\n    }\n\n    function _inherits(subClass, superClass) {\n        if (typeof superClass !== 'function' && superClass !== null) {\n            throw new TypeError('Super expression must either be null or a function');\n        }\n\n        subClass.prototype = Object.create(superClass && superClass.prototype, {\n            constructor: {\n                value: subClass,\n                writable: true,\n                configurable: true,\n            },\n        });\n        if (superClass) _setPrototypeOf(subClass, superClass);\n    }\n\n    function _inheritsLoose(subClass, superClass) {\n        subClass.prototype = Object.create(superClass.prototype);\n        subClass.prototype.constructor = subClass;\n        subClass.__proto__ = superClass;\n    }\n\n    function _getPrototypeOf(o) {\n        _getPrototypeOf = Object.setPrototypeOf\n            ? Object.getPrototypeOf\n            : function _getPrototypeOf(o) {\n                  return o.__proto__ || Object.getPrototypeOf(o);\n              };\n        return _getPrototypeOf(o);\n    }\n\n    function _setPrototypeOf(o, p) {\n        _setPrototypeOf =\n            Object.setPrototypeOf ||\n            function _setPrototypeOf(o, p) {\n                o.__proto__ = p;\n                return o;\n            };\n\n        return _setPrototypeOf(o, p);\n    }\n\n    function isNativeReflectConstruct() {\n        if (typeof Reflect === 'undefined' || !Reflect.construct) return false;\n        if (Reflect.construct.sham) return false;\n        if (typeof Proxy === 'function') return true;\n\n        try {\n            Date.prototype.toString.call(Reflect.construct(Date, [], function() {}));\n            return true;\n        } catch (e) {\n            return false;\n        }\n    }\n\n    function _construct(Parent, args, Class) {\n        if (isNativeReflectConstruct()) {\n            _construct = Reflect.construct;\n        } else {\n            _construct = function _construct(Parent, args, Class) {\n                var a = [null];\n                a.push.apply(a, args);\n                var Constructor = Function.bind.apply(Parent, a);\n                var instance = new Constructor();\n                if (Class) _setPrototypeOf(instance, Class.prototype);\n                return instance;\n            };\n        }\n\n        return _construct.apply(null, arguments);\n    }\n\n    function _isNativeFunction(fn) {\n        return Function.toString.call(fn).indexOf('[native code]') !== -1;\n    }\n\n    function _wrapNativeSuper(Class) {\n        var _cache = typeof Map === 'function' ? new Map() : undefined;\n\n        _wrapNativeSuper = function _wrapNativeSuper(Class) {\n            if (Class === null || !_isNativeFunction(Class)) return Class;\n\n            if (typeof Class !== 'function') {\n                throw new TypeError('Super expression must either be null or a function');\n            }\n\n            if (typeof _cache !== 'undefined') {\n                if (_cache.has(Class)) return _cache.get(Class);\n\n                _cache.set(Class, Wrapper);\n            }\n\n            function Wrapper() {\n                return _construct(Class, arguments, _getPrototypeOf(this).constructor);\n            }\n\n            Wrapper.prototype = Object.create(Class.prototype, {\n                constructor: {\n                    value: Wrapper,\n                    enumerable: false,\n                    writable: true,\n                    configurable: true,\n                },\n            });\n            return _setPrototypeOf(Wrapper, Class);\n        };\n\n        return _wrapNativeSuper(Class);\n    }\n\n    function _instanceof(left, right) {\n        if (right != null && typeof Symbol !== 'undefined' && right[Symbol.hasInstance]) {\n            return !!right[Symbol.hasInstance](left);\n        } else {\n            return left instanceof right;\n        }\n    }\n\n    function _interopRequireDefault(obj) {\n        return obj && obj.__esModule\n            ? obj\n            : {\n                  default: obj,\n              };\n    }\n\n    function _interopRequireWildcard(obj) {\n        if (obj && obj.__esModule) {\n            return obj;\n        } else {\n            var newObj = {};\n\n            if (obj != null) {\n                for (var key in obj) {\n                    if (Object.prototype.hasOwnProperty.call(obj, key)) {\n                        var desc =\n                            Object.defineProperty && Object.getOwnPropertyDescriptor\n                                ? Object.getOwnPropertyDescriptor(obj, key)\n                                : {};\n\n                        if (desc.get || desc.set) {\n                            Object.defineProperty(newObj, key, desc);\n                        } else {\n                            newObj[key] = obj[key];\n                        }\n                    }\n                }\n            }\n\n            newObj.default = obj;\n            return newObj;\n        }\n    }\n\n    function _newArrowCheck(innerThis, boundThis) {\n        if (innerThis !== boundThis) {\n            throw new TypeError('Cannot instantiate an arrow function');\n        }\n    }\n\n    function _objectDestructuringEmpty(obj) {\n        if (obj == null) throw new TypeError('Cannot destructure undefined');\n    }\n\n    function _objectWithoutPropertiesLoose(source, excluded) {\n        if (source == null) return {};\n        var target = {};\n        var sourceKeys = Object.keys(source);\n        var key, i;\n\n        for (i = 0; i < sourceKeys.length; i++) {\n            key = sourceKeys[i];\n            if (excluded.indexOf(key) >= 0) continue;\n            target[key] = source[key];\n        }\n\n        return target;\n    }\n\n    function _objectWithoutProperties(source, excluded) {\n        if (source == null) return {};\n\n        var target = _objectWithoutPropertiesLoose(source, excluded);\n\n        var key, i;\n\n        if (Object.getOwnPropertySymbols) {\n            var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n            for (i = 0; i < sourceSymbolKeys.length; i++) {\n                key = sourceSymbolKeys[i];\n                if (excluded.indexOf(key) >= 0) continue;\n                if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n                target[key] = source[key];\n            }\n        }\n\n        return target;\n    }\n\n    function _assertThisInitialized(self) {\n        if (self === void 0) {\n            throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n        }\n\n        return self;\n    }\n\n    function _possibleConstructorReturn(self, call) {\n        if (call && (typeof call === 'object' || typeof call === 'function')) {\n            return call;\n        }\n\n        return _assertThisInitialized(self);\n    }\n\n    function _superPropBase(object, property) {\n        while (!Object.prototype.hasOwnProperty.call(object, property)) {\n            object = _getPrototypeOf(object);\n            if (object === null) break;\n        }\n\n        return object;\n    }\n\n    function _get(target, property, receiver) {\n        if (typeof Reflect !== 'undefined' && Reflect.get) {\n            _get = Reflect.get;\n        } else {\n            _get = function _get(target, property, receiver) {\n                var base = _superPropBase(target, property);\n\n                if (!base) return;\n                var desc = Object.getOwnPropertyDescriptor(base, property);\n\n                if (desc.get) {\n                    return desc.get.call(receiver);\n                }\n\n                return desc.value;\n            };\n        }\n\n        return _get(target, property, receiver || target);\n    }\n\n    function set(target, property, value, receiver) {\n        if (typeof Reflect !== 'undefined' && Reflect.set) {\n            set = Reflect.set;\n        } else {\n            set = function set(target, property, value, receiver) {\n                var base = _superPropBase(target, property);\n\n                var desc;\n\n                if (base) {\n                    desc = Object.getOwnPropertyDescriptor(base, property);\n\n                    if (desc.set) {\n                        desc.set.call(receiver, value);\n                        return true;\n                    } else if (!desc.writable) {\n                        return false;\n                    }\n                }\n\n                desc = Object.getOwnPropertyDescriptor(receiver, property);\n\n                if (desc) {\n                    if (!desc.writable) {\n                        return false;\n                    }\n\n                    desc.value = value;\n                    Object.defineProperty(receiver, property, desc);\n                } else {\n                    _defineProperty(receiver, property, value);\n                }\n\n                return true;\n            };\n        }\n\n        return set(target, property, value, receiver);\n    }\n\n    function _set(target, property, value, receiver, isStrict) {\n        var s = set(target, property, value, receiver || target);\n\n        if (!s && isStrict) {\n            throw new Error('failed to set property');\n        }\n\n        return value;\n    }\n\n    function _taggedTemplateLiteral(strings, raw) {\n        if (!raw) {\n            raw = strings.slice(0);\n        }\n\n        return Object.freeze(\n            Object.defineProperties(strings, {\n                raw: {\n                    value: Object.freeze(raw),\n                },\n            })\n        );\n    }\n\n    function _taggedTemplateLiteralLoose(strings, raw) {\n        if (!raw) {\n            raw = strings.slice(0);\n        }\n\n        strings.raw = raw;\n        return strings;\n    }\n\n    function _temporalRef(val, name) {\n        if (val === _temporalUndefined) {\n            throw new ReferenceError(name + ' is not defined - temporal dead zone');\n        } else {\n            return val;\n        }\n    }\n\n    function _readOnlyError(name) {\n        throw new Error('\"' + name + '\" is read-only');\n    }\n\n    function _classNameTDZError(name) {\n        throw new Error('Class \"' + name + '\" cannot be referenced in computed property keys.');\n    }\n\n    var _temporalUndefined = {};\n\n    function _slicedToArray(arr, i) {\n        return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\n    }\n\n    function _slicedToArrayLoose(arr, i) {\n        return _arrayWithHoles(arr) || _iterableToArrayLimitLoose(arr, i) || _nonIterableRest();\n    }\n\n    function _toArray(arr) {\n        return _arrayWithHoles(arr) || _iterableToArray(arr) || _nonIterableRest();\n    }\n\n    function _toConsumableArray(arr) {\n        return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();\n    }\n\n    function _arrayWithoutHoles(arr) {\n        if (Array.isArray(arr)) {\n            for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];\n\n            return arr2;\n        }\n    }\n\n    function _arrayWithHoles(arr) {\n        if (Array.isArray(arr)) return arr;\n    }\n\n    function _iterableToArray(iter) {\n        if (\n            Symbol.iterator in Object(iter) ||\n            Object.prototype.toString.call(iter) === '[object Arguments]'\n        )\n            return Array.from(iter);\n    }\n\n    function _iterableToArrayLimit(arr, i) {\n        var _arr = [];\n        var _n = true;\n        var _d = false;\n        var _e = undefined;\n\n        try {\n            for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n                _arr.push(_s.value);\n\n                if (i && _arr.length === i) break;\n            }\n        } catch (err) {\n            _d = true;\n            _e = err;\n        } finally {\n            try {\n                if (!_n && _i['return'] != null) _i['return']();\n            } finally {\n                if (_d) throw _e;\n            }\n        }\n\n        return _arr;\n    }\n\n    function _iterableToArrayLimitLoose(arr, i) {\n        var _arr = [];\n\n        for (var _iterator = arr[Symbol.iterator](), _step; !(_step = _iterator.next()).done; ) {\n            _arr.push(_step.value);\n\n            if (i && _arr.length === i) break;\n        }\n\n        return _arr;\n    }\n\n    function _nonIterableSpread() {\n        throw new TypeError('Invalid attempt to spread non-iterable instance');\n    }\n\n    function _nonIterableRest() {\n        throw new TypeError('Invalid attempt to destructure non-iterable instance');\n    }\n\n    function _skipFirstGeneratorNext(fn) {\n        return function() {\n            var it = fn.apply(this, arguments);\n            it.next();\n            return it;\n        };\n    }\n\n    function _toPrimitive(input, hint) {\n        if (typeof input !== 'object' || input === null) return input;\n        var prim = input[Symbol.toPrimitive];\n\n        if (prim !== undefined) {\n            var res = prim.call(input, hint || 'default');\n            if (typeof res !== 'object') return res;\n            throw new TypeError('@@toPrimitive must return a primitive value.');\n        }\n\n        return (hint === 'string' ? String : Number)(input);\n    }\n\n    function _toPropertyKey(arg) {\n        var key = _toPrimitive(arg, 'string');\n\n        return typeof key === 'symbol' ? key : String(key);\n    }\n\n    function _initializerWarningHelper(descriptor, context) {\n        throw new Error(\n            'Decorating class property failed. Please ensure that ' +\n                'proposal-class-properties is enabled and set to use loose mode. ' +\n                'To use proposal-class-properties in spec mode with decorators, wait for ' +\n                'the next major version of decorators in stage 2.'\n        );\n    }\n\n    function _initializerDefineProperty(target, property, descriptor, context) {\n        if (!descriptor) return;\n        Object.defineProperty(target, property, {\n            enumerable: descriptor.enumerable,\n            configurable: descriptor.configurable,\n            writable: descriptor.writable,\n            value: descriptor.initializer ? descriptor.initializer.call(context) : void 0,\n        });\n    }\n\n    function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) {\n        var desc = {};\n        Object.keys(descriptor).forEach(function(key) {\n            desc[key] = descriptor[key];\n        });\n        desc.enumerable = !!desc.enumerable;\n        desc.configurable = !!desc.configurable;\n\n        if ('value' in desc || desc.initializer) {\n            desc.writable = true;\n        }\n\n        desc = decorators\n            .slice()\n            .reverse()\n            .reduce(function(desc, decorator) {\n                return decorator(target, property, desc) || desc;\n            }, desc);\n\n        if (context && desc.initializer !== void 0) {\n            desc.value = desc.initializer ? desc.initializer.call(context) : void 0;\n            desc.initializer = undefined;\n        }\n\n        if (desc.initializer === void 0) {\n            Object.defineProperty(target, property, desc);\n            desc = null;\n        }\n\n        return desc;\n    }\n\n    var id = 0;\n\n    function _classPrivateFieldLooseKey(name) {\n        return '__private_' + id++ + '_' + name;\n    }\n\n    function _classPrivateFieldLooseBase(receiver, privateKey) {\n        if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) {\n            throw new TypeError('attempted to use private field on non-instance');\n        }\n\n        return receiver;\n    }\n\n    function _classPrivateFieldGet(receiver, privateMap) {\n        var descriptor = privateMap.get(receiver);\n\n        if (!descriptor) {\n            throw new TypeError('attempted to get private field on non-instance');\n        }\n\n        if (descriptor.get) {\n            return descriptor.get.call(receiver);\n        }\n\n        return descriptor.value;\n    }\n\n    function _classPrivateFieldSet(receiver, privateMap, value) {\n        var descriptor = privateMap.get(receiver);\n\n        if (!descriptor) {\n            throw new TypeError('attempted to set private field on non-instance');\n        }\n\n        if (descriptor.set) {\n            descriptor.set.call(receiver, value);\n        } else {\n            if (!descriptor.writable) {\n                throw new TypeError('attempted to set read only private field');\n            }\n\n            descriptor.value = value;\n        }\n\n        return value;\n    }\n\n    function _classPrivateFieldDestructureSet(receiver, privateMap) {\n        if (!privateMap.has(receiver)) {\n            throw new TypeError('attempted to set private field on non-instance');\n        }\n\n        var descriptor = privateMap.get(receiver);\n\n        if (descriptor.set) {\n            if (!('__destrObj' in descriptor)) {\n                descriptor.__destrObj = {\n                    set value(v) {\n                        descriptor.set.call(receiver, v);\n                    },\n                };\n            }\n\n            return descriptor.__destrObj;\n        } else {\n            if (!descriptor.writable) {\n                throw new TypeError('attempted to set read only private field');\n            }\n\n            return descriptor;\n        }\n    }\n\n    function _classStaticPrivateFieldSpecGet(receiver, classConstructor, descriptor) {\n        if (receiver !== classConstructor) {\n            throw new TypeError('Private static access of wrong provenance');\n        }\n\n        return descriptor.value;\n    }\n\n    function _classStaticPrivateFieldSpecSet(receiver, classConstructor, descriptor, value) {\n        if (receiver !== classConstructor) {\n            throw new TypeError('Private static access of wrong provenance');\n        }\n\n        if (!descriptor.writable) {\n            throw new TypeError('attempted to set read only private field');\n        }\n\n        descriptor.value = value;\n        return value;\n    }\n\n    function _classStaticPrivateMethodGet(receiver, classConstructor, method) {\n        if (receiver !== classConstructor) {\n            throw new TypeError('Private static access of wrong provenance');\n        }\n\n        return method;\n    }\n\n    function _classStaticPrivateMethodSet() {\n        throw new TypeError('attempted to set read only static private field');\n    }\n\n    function _decorate(decorators, factory, superClass, mixins) {\n        var api = _getDecoratorsApi();\n\n        if (mixins) {\n            for (var i = 0; i < mixins.length; i++) {\n                api = mixins[i](api);\n            }\n        }\n\n        var r = factory(function initialize(O) {\n            api.initializeInstanceElements(O, decorated.elements);\n        }, superClass);\n        var decorated = api.decorateClass(\n            _coalesceClassElements(r.d.map(_createElementDescriptor)),\n            decorators\n        );\n        api.initializeClassElements(r.F, decorated.elements);\n        return api.runClassFinishers(r.F, decorated.finishers);\n    }\n\n    function _getDecoratorsApi() {\n        _getDecoratorsApi = function() {\n            return api;\n        };\n\n        var api = {\n            elementsDefinitionOrder: [['method'], ['field']],\n            initializeInstanceElements: function(O, elements) {\n                ['method', 'field'].forEach(function(kind) {\n                    elements.forEach(function(element) {\n                        if (element.kind === kind && element.placement === 'own') {\n                            this.defineClassElement(O, element);\n                        }\n                    }, this);\n                }, this);\n            },\n            initializeClassElements: function(F, elements) {\n                var proto = F.prototype;\n                ['method', 'field'].forEach(function(kind) {\n                    elements.forEach(function(element) {\n                        var placement = element.placement;\n\n                        if (\n                            element.kind === kind &&\n                            (placement === 'static' || placement === 'prototype')\n                        ) {\n                            var receiver = placement === 'static' ? F : proto;\n                            this.defineClassElement(receiver, element);\n                        }\n                    }, this);\n                }, this);\n            },\n            defineClassElement: function(receiver, element) {\n                var descriptor = element.descriptor;\n\n                if (element.kind === 'field') {\n                    var initializer = element.initializer;\n                    descriptor = {\n                        enumerable: descriptor.enumerable,\n                        writable: descriptor.writable,\n                        configurable: descriptor.configurable,\n                        value: initializer === void 0 ? void 0 : initializer.call(receiver),\n                    };\n                }\n\n                Object.defineProperty(receiver, element.key, descriptor);\n            },\n            decorateClass: function(elements, decorators) {\n                var newElements = [];\n                var finishers = [];\n                var placements = {\n                    static: [],\n                    prototype: [],\n                    own: [],\n                };\n                elements.forEach(function(element) {\n                    this.addElementPlacement(element, placements);\n                }, this);\n                elements.forEach(function(element) {\n                    if (!_hasDecorators(element)) return newElements.push(element);\n                    var elementFinishersExtras = this.decorateElement(element, placements);\n                    newElements.push(elementFinishersExtras.element);\n                    newElements.push.apply(newElements, elementFinishersExtras.extras);\n                    finishers.push.apply(finishers, elementFinishersExtras.finishers);\n                }, this);\n\n                if (!decorators) {\n                    return {\n                        elements: newElements,\n                        finishers: finishers,\n                    };\n                }\n\n                var result = this.decorateConstructor(newElements, decorators);\n                finishers.push.apply(finishers, result.finishers);\n                result.finishers = finishers;\n                return result;\n            },\n            addElementPlacement: function(element, placements, silent) {\n                var keys = placements[element.placement];\n\n                if (!silent && keys.indexOf(element.key) !== -1) {\n                    throw new TypeError('Duplicated element (' + element.key + ')');\n                }\n\n                keys.push(element.key);\n            },\n            decorateElement: function(element, placements) {\n                var extras = [];\n                var finishers = [];\n\n                for (var decorators = element.decorators, i = decorators.length - 1; i >= 0; i--) {\n                    var keys = placements[element.placement];\n                    keys.splice(keys.indexOf(element.key), 1);\n                    var elementObject = this.fromElementDescriptor(element);\n                    var elementFinisherExtras = this.toElementFinisherExtras(\n                        (0, decorators[i])(elementObject) || elementObject\n                    );\n                    element = elementFinisherExtras.element;\n                    this.addElementPlacement(element, placements);\n\n                    if (elementFinisherExtras.finisher) {\n                        finishers.push(elementFinisherExtras.finisher);\n                    }\n\n                    var newExtras = elementFinisherExtras.extras;\n\n                    if (newExtras) {\n                        for (var j = 0; j < newExtras.length; j++) {\n                            this.addElementPlacement(newExtras[j], placements);\n                        }\n\n                        extras.push.apply(extras, newExtras);\n                    }\n                }\n\n                return {\n                    element: element,\n                    finishers: finishers,\n                    extras: extras,\n                };\n            },\n            decorateConstructor: function(elements, decorators) {\n                var finishers = [];\n\n                for (var i = decorators.length - 1; i >= 0; i--) {\n                    var obj = this.fromClassDescriptor(elements);\n                    var elementsAndFinisher = this.toClassDescriptor(\n                        (0, decorators[i])(obj) || obj\n                    );\n\n                    if (elementsAndFinisher.finisher !== undefined) {\n                        finishers.push(elementsAndFinisher.finisher);\n                    }\n\n                    if (elementsAndFinisher.elements !== undefined) {\n                        elements = elementsAndFinisher.elements;\n\n                        for (var j = 0; j < elements.length - 1; j++) {\n                            for (var k = j + 1; k < elements.length; k++) {\n                                if (\n                                    elements[j].key === elements[k].key &&\n                                    elements[j].placement === elements[k].placement\n                                ) {\n                                    throw new TypeError(\n                                        'Duplicated element (' + elements[j].key + ')'\n                                    );\n                                }\n                            }\n                        }\n                    }\n                }\n\n                return {\n                    elements: elements,\n                    finishers: finishers,\n                };\n            },\n            fromElementDescriptor: function(element) {\n                var obj = {\n                    kind: element.kind,\n                    key: element.key,\n                    placement: element.placement,\n                    descriptor: element.descriptor,\n                };\n                var desc = {\n                    value: 'Descriptor',\n                    configurable: true,\n                };\n                Object.defineProperty(obj, Symbol.toStringTag, desc);\n                if (element.kind === 'field') obj.initializer = element.initializer;\n                return obj;\n            },\n            toElementDescriptors: function(elementObjects) {\n                if (elementObjects === undefined) return;\n                return _toArray(elementObjects).map(function(elementObject) {\n                    var element = this.toElementDescriptor(elementObject);\n                    this.disallowProperty(elementObject, 'finisher', 'An element descriptor');\n                    this.disallowProperty(elementObject, 'extras', 'An element descriptor');\n                    return element;\n                }, this);\n            },\n            toElementDescriptor: function(elementObject) {\n                var kind = String(elementObject.kind);\n\n                if (kind !== 'method' && kind !== 'field') {\n                    throw new TypeError(\n                        'An element descriptor\\'s .kind property must be either \"method\" or' +\n                            ' \"field\", but a decorator created an element descriptor with' +\n                            ' .kind \"' +\n                            kind +\n                            '\"'\n                    );\n                }\n\n                var key = _toPropertyKey(elementObject.key);\n\n                var placement = String(elementObject.placement);\n\n                if (placement !== 'static' && placement !== 'prototype' && placement !== 'own') {\n                    throw new TypeError(\n                        'An element descriptor\\'s .placement property must be one of \"static\",' +\n                            ' \"prototype\" or \"own\", but a decorator created an element descriptor' +\n                            ' with .placement \"' +\n                            placement +\n                            '\"'\n                    );\n                }\n\n                var descriptor = elementObject.descriptor;\n                this.disallowProperty(elementObject, 'elements', 'An element descriptor');\n                var element = {\n                    kind: kind,\n                    key: key,\n                    placement: placement,\n                    descriptor: Object.assign({}, descriptor),\n                };\n\n                if (kind !== 'field') {\n                    this.disallowProperty(elementObject, 'initializer', 'A method descriptor');\n                } else {\n                    this.disallowProperty(\n                        descriptor,\n                        'get',\n                        'The property descriptor of a field descriptor'\n                    );\n                    this.disallowProperty(\n                        descriptor,\n                        'set',\n                        'The property descriptor of a field descriptor'\n                    );\n                    this.disallowProperty(\n                        descriptor,\n                        'value',\n                        'The property descriptor of a field descriptor'\n                    );\n                    element.initializer = elementObject.initializer;\n                }\n\n                return element;\n            },\n            toElementFinisherExtras: function(elementObject) {\n                var element = this.toElementDescriptor(elementObject);\n\n                var finisher = _optionalCallableProperty(elementObject, 'finisher');\n\n                var extras = this.toElementDescriptors(elementObject.extras);\n                return {\n                    element: element,\n                    finisher: finisher,\n                    extras: extras,\n                };\n            },\n            fromClassDescriptor: function(elements) {\n                var obj = {\n                    kind: 'class',\n                    elements: elements.map(this.fromElementDescriptor, this),\n                };\n                var desc = {\n                    value: 'Descriptor',\n                    configurable: true,\n                };\n                Object.defineProperty(obj, Symbol.toStringTag, desc);\n                return obj;\n            },\n            toClassDescriptor: function(obj) {\n                var kind = String(obj.kind);\n\n                if (kind !== 'class') {\n                    throw new TypeError(\n                        'A class descriptor\\'s .kind property must be \"class\", but a decorator' +\n                            ' created a class descriptor with .kind \"' +\n                            kind +\n                            '\"'\n                    );\n                }\n\n                this.disallowProperty(obj, 'key', 'A class descriptor');\n                this.disallowProperty(obj, 'placement', 'A class descriptor');\n                this.disallowProperty(obj, 'descriptor', 'A class descriptor');\n                this.disallowProperty(obj, 'initializer', 'A class descriptor');\n                this.disallowProperty(obj, 'extras', 'A class descriptor');\n\n                var finisher = _optionalCallableProperty(obj, 'finisher');\n\n                var elements = this.toElementDescriptors(obj.elements);\n                return {\n                    elements: elements,\n                    finisher: finisher,\n                };\n            },\n            runClassFinishers: function(constructor, finishers) {\n                for (var i = 0; i < finishers.length; i++) {\n                    var newConstructor = (0, finishers[i])(constructor);\n\n                    if (newConstructor !== undefined) {\n                        if (typeof newConstructor !== 'function') {\n                            throw new TypeError('Finishers must return a constructor.');\n                        }\n\n                        constructor = newConstructor;\n                    }\n                }\n\n                return constructor;\n            },\n            disallowProperty: function(obj, name, objectType) {\n                if (obj[name] !== undefined) {\n                    throw new TypeError(objectType + \" can't have a .\" + name + ' property.');\n                }\n            },\n        };\n        return api;\n    }\n\n    function _createElementDescriptor(def) {\n        var key = _toPropertyKey(def.key);\n\n        var descriptor;\n\n        if (def.kind === 'method') {\n            descriptor = {\n                value: def.value,\n                writable: true,\n                configurable: true,\n                enumerable: false,\n            };\n        } else if (def.kind === 'get') {\n            descriptor = {\n                get: def.value,\n                configurable: true,\n                enumerable: false,\n            };\n        } else if (def.kind === 'set') {\n            descriptor = {\n                set: def.value,\n                configurable: true,\n                enumerable: false,\n            };\n        } else if (def.kind === 'field') {\n            descriptor = {\n                configurable: true,\n                writable: true,\n                enumerable: true,\n            };\n        }\n\n        var element = {\n            kind: def.kind === 'field' ? 'field' : 'method',\n            key: key,\n            placement: def.static ? 'static' : def.kind === 'field' ? 'own' : 'prototype',\n            descriptor: descriptor,\n        };\n        if (def.decorators) element.decorators = def.decorators;\n        if (def.kind === 'field') element.initializer = def.value;\n        return element;\n    }\n\n    function _coalesceGetterSetter(element, other) {\n        if (element.descriptor.get !== undefined) {\n            other.descriptor.get = element.descriptor.get;\n        } else {\n            other.descriptor.set = element.descriptor.set;\n        }\n    }\n\n    function _coalesceClassElements(elements) {\n        var newElements = [];\n\n        var isSameElement = function(other) {\n            return (\n                other.kind === 'method' &&\n                other.key === element.key &&\n                other.placement === element.placement\n            );\n        };\n\n        for (var i = 0; i < elements.length; i++) {\n            var element = elements[i];\n            var other;\n\n            if (element.kind === 'method' && (other = newElements.find(isSameElement))) {\n                if (_isDataDescriptor(element.descriptor) || _isDataDescriptor(other.descriptor)) {\n                    if (_hasDecorators(element) || _hasDecorators(other)) {\n                        throw new ReferenceError(\n                            'Duplicated methods (' + element.key + \") can't be decorated.\"\n                        );\n                    }\n\n                    other.descriptor = element.descriptor;\n                } else {\n                    if (_hasDecorators(element)) {\n                        if (_hasDecorators(other)) {\n                            throw new ReferenceError(\n                                \"Decorators can't be placed on different accessors with for \" +\n                                    'the same property (' +\n                                    element.key +\n                                    ').'\n                            );\n                        }\n\n                        other.decorators = element.decorators;\n                    }\n\n                    _coalesceGetterSetter(element, other);\n                }\n            } else {\n                newElements.push(element);\n            }\n        }\n\n        return newElements;\n    }\n\n    function _hasDecorators(element) {\n        return element.decorators && element.decorators.length;\n    }\n\n    function _isDataDescriptor(desc) {\n        return desc !== undefined && !(desc.value === undefined && desc.writable === undefined);\n    }\n\n    function _optionalCallableProperty(obj, name) {\n        var value = obj[name];\n\n        if (value !== undefined && typeof value !== 'function') {\n            throw new TypeError(\"Expected '\" + name + \"' to be a function\");\n        }\n\n        return value;\n    }\n\n    function _classPrivateMethodGet(receiver, privateSet, fn) {\n        if (!privateSet.has(receiver)) {\n            throw new TypeError('attempted to get private field on non-instance');\n        }\n\n        return fn;\n    }\n\n    function _classPrivateMethodSet() {\n        throw new TypeError('attempted to reassign private method');\n    }\n\n    function _wrapRegExp(re, groups) {\n        _wrapRegExp = function(re, groups) {\n            return new BabelRegExp(re, groups);\n        };\n\n        var _RegExp = _wrapNativeSuper(RegExp);\n\n        var _super = RegExp.prototype;\n\n        var _groups = new WeakMap();\n\n        function BabelRegExp(re, groups) {\n            var _this = _RegExp.call(this, re);\n\n            _groups.set(_this, groups);\n\n            return _this;\n        }\n\n        _inherits(BabelRegExp, _RegExp);\n\n        BabelRegExp.prototype.exec = function(str) {\n            var result = _super.exec.call(this, str);\n\n            if (result) result.groups = buildGroups(result, this);\n            return result;\n        };\n\n        BabelRegExp.prototype[Symbol.replace] = function(str, substitution) {\n            if (typeof substitution === 'string') {\n                var groups = _groups.get(this);\n\n                return _super[Symbol.replace].call(\n                    this,\n                    str,\n                    substitution.replace(/\\$<([^>]+)>/g, function(_, name) {\n                        return '$' + groups[name];\n                    })\n                );\n            } else if (typeof substitution === 'function') {\n                var _this = this;\n\n                return _super[Symbol.replace].call(this, str, function() {\n                    var args = [];\n                    args.push.apply(args, arguments);\n\n                    if (typeof args[args.length - 1] !== 'object') {\n                        args.push(buildGroups(args, _this));\n                    }\n\n                    return substitution.apply(this, args);\n                });\n            } else {\n                return _super[Symbol.replace].call(this, str, substitution);\n            }\n        };\n\n        function buildGroups(result, re) {\n            var g = _groups.get(re);\n\n            return Object.keys(g).reduce(function(groups, name) {\n                groups[name] = result[g[name]];\n                return groups;\n            }, Object.create(null));\n        }\n\n        return _wrapRegExp.apply(this, arguments);\n    }\n\n    var arrayRemove = function arrayRemove(arr, index) {\n        return arr.splice(index, 1);\n    };\n\n    var run = function run(cb, sync) {\n        if (sync) {\n            cb();\n        } else if (document.hidden) {\n            Promise.resolve(1).then(cb);\n        } else {\n            setTimeout(cb, 0);\n        }\n    };\n\n    var on = function on() {\n        var listeners = [];\n        var off = function off(event, cb) {\n            arrayRemove(\n                listeners,\n                listeners.findIndex(function(listener) {\n                    return listener.event === event && (listener.cb === cb || !cb);\n                })\n            );\n        };\n        var _fire = function fire(event, args, sync) {\n            listeners\n                .filter(function(listener) {\n                    return listener.event === event;\n                })\n                .map(function(listener) {\n                    return listener.cb;\n                })\n                .forEach(function(cb) {\n                    return run(function() {\n                        return cb.apply(void 0, _toConsumableArray(args));\n                    }, sync);\n                });\n        };\n        return {\n            fireSync: function fireSync(event) {\n                for (\n                    var _len = arguments.length,\n                        args = new Array(_len > 1 ? _len - 1 : 0),\n                        _key = 1;\n                    _key < _len;\n                    _key++\n                ) {\n                    args[_key - 1] = arguments[_key];\n                }\n                _fire(event, args, true);\n            },\n            fire: function fire(event) {\n                for (\n                    var _len2 = arguments.length,\n                        args = new Array(_len2 > 1 ? _len2 - 1 : 0),\n                        _key2 = 1;\n                    _key2 < _len2;\n                    _key2++\n                ) {\n                    args[_key2 - 1] = arguments[_key2];\n                }\n                _fire(event, args, false);\n            },\n            on: function on(event, cb) {\n                listeners.push({ event: event, cb: cb });\n            },\n            onOnce: function onOnce(event, _cb) {\n                listeners.push({\n                    event: event,\n                    cb: function cb() {\n                        off(event, _cb);\n                        _cb.apply(void 0, arguments);\n                    },\n                });\n            },\n            off: off,\n        };\n    };\n\n    var copyObjectPropertiesToObject = function copyObjectPropertiesToObject(\n        src,\n        target,\n        excluded\n    ) {\n        Object.getOwnPropertyNames(src)\n            .filter(function(property) {\n                return !excluded.includes(property);\n            })\n            .forEach(function(key) {\n                return Object.defineProperty(\n                    target,\n                    key,\n                    Object.getOwnPropertyDescriptor(src, key)\n                );\n            });\n    };\n\n    var PRIVATE = [\n        'fire',\n        'process',\n        'revert',\n        'load',\n        'on',\n        'off',\n        'onOnce',\n        'retryLoad',\n        'extend',\n        'archive',\n        'archived',\n        'release',\n        'released',\n        'requestProcessing',\n        'freeze',\n    ];\n\n    var createItemAPI = function createItemAPI(item) {\n        var api = {};\n        copyObjectPropertiesToObject(item, api, PRIVATE);\n        return api;\n    };\n\n    var removeReleasedItems = function removeReleasedItems(items) {\n        items.forEach(function(item, index) {\n            if (item.released) {\n                arrayRemove(items, index);\n            }\n        });\n    };\n\n    var ItemStatus = {\n        INIT: 1,\n        IDLE: 2,\n        PROCESSING_QUEUED: 9,\n        PROCESSING: 3,\n        PROCESSING_COMPLETE: 5,\n        PROCESSING_ERROR: 6,\n        PROCESSING_REVERT_ERROR: 10,\n        LOADING: 7,\n        LOAD_ERROR: 8,\n    };\n\n    var FileOrigin = {\n        INPUT: 1,\n        LIMBO: 2,\n        LOCAL: 3,\n    };\n\n    var getNonNumeric = function getNonNumeric(str) {\n        return /[^0-9]+/.exec(str);\n    };\n\n    var getDecimalSeparator = function getDecimalSeparator() {\n        return getNonNumeric((1.1).toLocaleString())[0];\n    };\n\n    var getThousandsSeparator = function getThousandsSeparator() {\n        // Added for browsers that do not return the thousands separator (happend on native browser Android 4.4.4)\n        // We check against the normal toString output and if they're the same return a comma when decimal separator is a dot\n        var decimalSeparator = getDecimalSeparator();\n        var thousandsStringWithSeparator = (1000.0).toLocaleString();\n        var thousandsStringWithoutSeparator = (1000.0).toString();\n        if (thousandsStringWithSeparator !== thousandsStringWithoutSeparator) {\n            return getNonNumeric(thousandsStringWithSeparator)[0];\n        }\n        return decimalSeparator === '.' ? ',' : '.';\n    };\n\n    var Type = {\n        BOOLEAN: 'boolean',\n        INT: 'int',\n        NUMBER: 'number',\n        STRING: 'string',\n        ARRAY: 'array',\n        OBJECT: 'object',\n        FUNCTION: 'function',\n        ACTION: 'action',\n        SERVER_API: 'serverapi',\n        REGEX: 'regex',\n    };\n\n    // all registered filters\n    var filters = [];\n\n    // loops over matching filters and passes options to each filter, returning the mapped results\n    var applyFilterChain = function applyFilterChain(key, value, utils) {\n        return new Promise(function(resolve, reject) {\n            // find matching filters for this key\n            var matchingFilters = filters\n                .filter(function(f) {\n                    return f.key === key;\n                })\n                .map(function(f) {\n                    return f.cb;\n                });\n\n            // resolve now\n            if (matchingFilters.length === 0) {\n                resolve(value);\n                return;\n            }\n\n            // first filter to kick things of\n            var initialFilter = matchingFilters.shift();\n\n            // chain filters\n            matchingFilters\n                .reduce(\n                    // loop over promises passing value to next promise\n                    function(current, next) {\n                        return current.then(function(value) {\n                            return next(value, utils);\n                        });\n                    },\n\n                    // call initial filter, will return a promise\n                    initialFilter(value, utils)\n\n                    // all executed\n                )\n                .then(function(value) {\n                    return resolve(value);\n                })\n                .catch(function(error) {\n                    return reject(error);\n                });\n        });\n    };\n\n    var applyFilters = function applyFilters(key, value, utils) {\n        return filters\n            .filter(function(f) {\n                return f.key === key;\n            })\n            .map(function(f) {\n                return f.cb(value, utils);\n            });\n    };\n\n    // adds a new filter to the list\n    var addFilter = function addFilter(key, cb) {\n        return filters.push({ key: key, cb: cb });\n    };\n\n    var extendDefaultOptions = function extendDefaultOptions(additionalOptions) {\n        return Object.assign(defaultOptions, additionalOptions);\n    };\n\n    var getOptions = function getOptions() {\n        return Object.assign({}, defaultOptions);\n    };\n\n    var setOptions = function setOptions(opts) {\n        forin(opts, function(key, value) {\n            // key does not exist, so this option cannot be set\n            if (!defaultOptions[key]) {\n                return;\n            }\n            defaultOptions[key][0] = getValueByType(\n                value,\n                defaultOptions[key][0],\n                defaultOptions[key][1]\n            );\n        });\n    };\n\n    // default options on app\n    var defaultOptions = {\n        // the id to add to the root element\n        id: [null, Type.STRING],\n\n        // input field name to use\n        name: ['filepond', Type.STRING],\n\n        // disable the field\n        disabled: [false, Type.BOOLEAN],\n\n        // classname to put on wrapper\n        className: [null, Type.STRING],\n\n        // is the field required\n        required: [false, Type.BOOLEAN],\n\n        // Allow media capture when value is set\n        captureMethod: [null, Type.STRING],\n        // - \"camera\", \"microphone\" or \"camcorder\",\n        // - Does not work with multiple on apple devices\n        // - If set, acceptedFileTypes must be made to match with media wildcard \"image/*\", \"audio/*\" or \"video/*\"\n\n        // sync `acceptedFileTypes` property with `accept` attribute\n        allowSyncAcceptAttribute: [true, Type.BOOLEAN],\n\n        // Feature toggles\n        allowDrop: [true, Type.BOOLEAN], // Allow dropping of files\n        allowBrowse: [true, Type.BOOLEAN], // Allow browsing the file system\n        allowPaste: [true, Type.BOOLEAN], // Allow pasting files\n        allowMultiple: [false, Type.BOOLEAN], // Allow multiple files (disabled by default, as multiple attribute is also required on input to allow multiple)\n        allowReplace: [true, Type.BOOLEAN], // Allow dropping a file on other file to replace it (only works when multiple is set to false)\n        allowRevert: [true, Type.BOOLEAN], // Allows user to revert file upload\n        allowRemove: [true, Type.BOOLEAN], // Allow user to remove a file\n        allowProcess: [true, Type.BOOLEAN], // Allows user to process a file, when set to false, this removes the file upload button\n        allowReorder: [false, Type.BOOLEAN], // Allow reordering of files\n        allowDirectoriesOnly: [false, Type.BOOLEAN], // Allow only selecting directories with browse (no support for filtering dnd at this point)\n\n        // Try store file if `server` not set\n        storeAsFile: [false, Type.BOOLEAN],\n\n        // Revert mode\n        forceRevert: [false, Type.BOOLEAN], // Set to 'force' to require the file to be reverted before removal\n\n        // Input requirements\n        maxFiles: [null, Type.INT], // Max number of files\n        checkValidity: [false, Type.BOOLEAN], // Enables custom validity messages\n\n        // Where to put file\n        itemInsertLocationFreedom: [true, Type.BOOLEAN], // Set to false to always add items to begin or end of list\n        itemInsertLocation: ['before', Type.STRING], // Default index in list to add items that have been dropped at the top of the list\n        itemInsertInterval: [75, Type.INT],\n\n        // Drag 'n Drop related\n        dropOnPage: [false, Type.BOOLEAN], // Allow dropping of files anywhere on page (prevents browser from opening file if dropped outside of Up)\n        dropOnElement: [true, Type.BOOLEAN], // Drop needs to happen on element (set to false to also load drops outside of Up)\n        dropValidation: [false, Type.BOOLEAN], // Enable or disable validating files on drop\n        ignoredFiles: [['.ds_store', 'thumbs.db', 'desktop.ini'], Type.ARRAY],\n\n        // Upload related\n        instantUpload: [true, Type.BOOLEAN], // Should upload files immediately on drop\n        maxParallelUploads: [2, Type.INT], // Maximum files to upload in parallel\n        allowMinimumUploadDuration: [true, Type.BOOLEAN], // if true uploads take at least 750 ms, this ensures the user sees the upload progress giving trust the upload actually happened\n\n        // Chunks\n        chunkUploads: [false, Type.BOOLEAN], // Enable chunked uploads\n        chunkForce: [false, Type.BOOLEAN], // Force use of chunk uploads even for files smaller than chunk size\n        chunkSize: [5000000, Type.INT], // Size of chunks (5MB default)\n        chunkRetryDelays: [[500, 1000, 3000], Type.ARRAY], // Amount of times to retry upload of a chunk when it fails\n\n        // The server api end points to use for uploading (see docs)\n        server: [null, Type.SERVER_API],\n\n        // File size calculations, can set to 1024, this is only used for display, properties use file size base 1000\n        fileSizeBase: [1000, Type.INT],\n\n        // Labels and status messages\n        labelFileSizeBytes: ['bytes', Type.STRING],\n        labelFileSizeKilobytes: ['KB', Type.STRING],\n        labelFileSizeMegabytes: ['MB', Type.STRING],\n        labelFileSizeGigabytes: ['GB', Type.STRING],\n\n        labelDecimalSeparator: [getDecimalSeparator(), Type.STRING], // Default is locale separator\n        labelThousandsSeparator: [getThousandsSeparator(), Type.STRING], // Default is locale separator\n\n        labelIdle: [\n            'Drag & Drop your files or <span class=\"filepond--label-action\">Browse</span>',\n            Type.STRING,\n        ],\n\n        labelInvalidField: ['Field contains invalid files', Type.STRING],\n        labelFileWaitingForSize: ['Waiting for size', Type.STRING],\n        labelFileSizeNotAvailable: ['Size not available', Type.STRING],\n        labelFileCountSingular: ['file in list', Type.STRING],\n        labelFileCountPlural: ['files in list', Type.STRING],\n        labelFileLoading: ['Loading', Type.STRING],\n        labelFileAdded: ['Added', Type.STRING], // assistive only\n        labelFileLoadError: ['Error during load', Type.STRING],\n        labelFileRemoved: ['Removed', Type.STRING], // assistive only\n        labelFileRemoveError: ['Error during remove', Type.STRING],\n        labelFileProcessing: ['Uploading', Type.STRING],\n        labelFileProcessingComplete: ['Upload complete', Type.STRING],\n        labelFileProcessingAborted: ['Upload cancelled', Type.STRING],\n        labelFileProcessingError: ['Error during upload', Type.STRING],\n        labelFileProcessingRevertError: ['Error during revert', Type.STRING],\n\n        labelTapToCancel: ['tap to cancel', Type.STRING],\n        labelTapToRetry: ['tap to retry', Type.STRING],\n        labelTapToUndo: ['tap to undo', Type.STRING],\n\n        labelButtonRemoveItem: ['Remove', Type.STRING],\n        labelButtonAbortItemLoad: ['Abort', Type.STRING],\n        labelButtonRetryItemLoad: ['Retry', Type.STRING],\n        labelButtonAbortItemProcessing: ['Cancel', Type.STRING],\n        labelButtonUndoItemProcessing: ['Undo', Type.STRING],\n        labelButtonRetryItemProcessing: ['Retry', Type.STRING],\n        labelButtonProcessItem: ['Upload', Type.STRING],\n\n        // make sure width and height plus viewpox are even numbers so icons are nicely centered\n        iconRemove: [\n            '<svg width=\"26\" height=\"26\" viewBox=\"0 0 26 26\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M11.586 13l-2.293 2.293a1 1 0 0 0 1.414 1.414L13 14.414l2.293 2.293a1 1 0 0 0 1.414-1.414L14.414 13l2.293-2.293a1 1 0 0 0-1.414-1.414L13 11.586l-2.293-2.293a1 1 0 0 0-1.414 1.414L11.586 13z\" fill=\"currentColor\" fill-rule=\"nonzero\"/></svg>',\n            Type.STRING,\n        ],\n\n        iconProcess: [\n            '<svg width=\"26\" height=\"26\" viewBox=\"0 0 26 26\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M14 10.414v3.585a1 1 0 0 1-2 0v-3.585l-1.293 1.293a1 1 0 0 1-1.414-1.415l3-3a1 1 0 0 1 1.414 0l3 3a1 1 0 0 1-1.414 1.415L14 10.414zM9 18a1 1 0 0 1 0-2h8a1 1 0 0 1 0 2H9z\" fill=\"currentColor\" fill-rule=\"evenodd\"/></svg>',\n            Type.STRING,\n        ],\n\n        iconRetry: [\n            '<svg width=\"26\" height=\"26\" viewBox=\"0 0 26 26\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M10.81 9.185l-.038.02A4.997 4.997 0 0 0 8 13.683a5 5 0 0 0 5 5 5 5 0 0 0 5-5 1 1 0 0 1 2 0A7 7 0 1 1 9.722 7.496l-.842-.21a.999.999 0 1 1 .484-1.94l3.23.806c.535.133.86.675.73 1.21l-.804 3.233a.997.997 0 0 1-1.21.73.997.997 0 0 1-.73-1.21l.23-.928v-.002z\" fill=\"currentColor\" fill-rule=\"nonzero\"/></svg>',\n            Type.STRING,\n        ],\n\n        iconUndo: [\n            '<svg width=\"26\" height=\"26\" viewBox=\"0 0 26 26\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M9.185 10.81l.02-.038A4.997 4.997 0 0 1 13.683 8a5 5 0 0 1 5 5 5 5 0 0 1-5 5 1 1 0 0 0 0 2A7 7 0 1 0 7.496 9.722l-.21-.842a.999.999 0 1 0-1.94.484l.806 3.23c.133.535.675.86 1.21.73l3.233-.803a.997.997 0 0 0 .73-1.21.997.997 0 0 0-1.21-.73l-.928.23-.002-.001z\" fill=\"currentColor\" fill-rule=\"nonzero\"/></svg>',\n            Type.STRING,\n        ],\n\n        iconDone: [\n            '<svg width=\"26\" height=\"26\" viewBox=\"0 0 26 26\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M18.293 9.293a1 1 0 0 1 1.414 1.414l-7.002 7a1 1 0 0 1-1.414 0l-3.998-4a1 1 0 1 1 1.414-1.414L12 15.586l6.294-6.293z\" fill=\"currentColor\" fill-rule=\"nonzero\"/></svg>',\n            Type.STRING,\n        ],\n\n        // event handlers\n        oninit: [null, Type.FUNCTION],\n        onwarning: [null, Type.FUNCTION],\n        onerror: [null, Type.FUNCTION],\n        onactivatefile: [null, Type.FUNCTION],\n        oninitfile: [null, Type.FUNCTION],\n        onaddfilestart: [null, Type.FUNCTION],\n        onaddfileprogress: [null, Type.FUNCTION],\n        onaddfile: [null, Type.FUNCTION],\n        onprocessfilestart: [null, Type.FUNCTION],\n        onprocessfileprogress: [null, Type.FUNCTION],\n        onprocessfileabort: [null, Type.FUNCTION],\n        onprocessfilerevert: [null, Type.FUNCTION],\n        onprocessfile: [null, Type.FUNCTION],\n        onprocessfiles: [null, Type.FUNCTION],\n        onremovefile: [null, Type.FUNCTION],\n        onpreparefile: [null, Type.FUNCTION],\n        onupdatefiles: [null, Type.FUNCTION],\n        onreorderfiles: [null, Type.FUNCTION],\n\n        // hooks\n        beforeDropFile: [null, Type.FUNCTION],\n        beforeAddFile: [null, Type.FUNCTION],\n        beforeRemoveFile: [null, Type.FUNCTION],\n        beforePrepareFile: [null, Type.FUNCTION],\n\n        // styles\n        stylePanelLayout: [null, Type.STRING], // null 'integrated', 'compact', 'circle'\n        stylePanelAspectRatio: [null, Type.STRING], // null or '3:2' or 1\n        styleItemPanelAspectRatio: [null, Type.STRING],\n        styleButtonRemoveItemPosition: ['left', Type.STRING],\n        styleButtonProcessItemPosition: ['right', Type.STRING],\n        styleLoadIndicatorPosition: ['right', Type.STRING],\n        styleProgressIndicatorPosition: ['right', Type.STRING],\n        styleButtonRemoveItemAlign: [false, Type.BOOLEAN],\n\n        // custom initial files array\n        files: [[], Type.ARRAY],\n\n        // show support by displaying credits\n        credits: [['https://pqina.nl/', 'Powered by PQINA'], Type.ARRAY],\n    };\n\n    var getItemByQuery = function getItemByQuery(items, query) {\n        // just return first index\n        if (isEmpty(query)) {\n            return items[0] || null;\n        }\n\n        // query is index\n        if (isInt(query)) {\n            return items[query] || null;\n        }\n\n        // if query is item, get the id\n        if (typeof query === 'object') {\n            query = query.id;\n        }\n\n        // assume query is a string and return item by id\n        return (\n            items.find(function(item) {\n                return item.id === query;\n            }) || null\n        );\n    };\n\n    var getNumericAspectRatioFromString = function getNumericAspectRatioFromString(aspectRatio) {\n        if (isEmpty(aspectRatio)) {\n            return aspectRatio;\n        }\n        if (/:/.test(aspectRatio)) {\n            var parts = aspectRatio.split(':');\n            return parts[1] / parts[0];\n        }\n        return parseFloat(aspectRatio);\n    };\n\n    var getActiveItems = function getActiveItems(items) {\n        return items.filter(function(item) {\n            return !item.archived;\n        });\n    };\n\n    var Status = {\n        EMPTY: 0,\n        IDLE: 1, // waiting\n        ERROR: 2, // a file is in error state\n        BUSY: 3, // busy processing or loading\n        READY: 4, // all files uploaded\n    };\n\n    var res = null;\n    var canUpdateFileInput = function canUpdateFileInput() {\n        if (res === null) {\n            try {\n                var dataTransfer = new DataTransfer();\n                dataTransfer.items.add(new File(['hello world'], 'This_Works.txt'));\n                var el = document.createElement('input');\n                el.setAttribute('type', 'file');\n                el.files = dataTransfer.files;\n                res = el.files.length === 1;\n            } catch (err) {\n                res = false;\n            }\n        }\n        return res;\n    };\n\n    var ITEM_ERROR = [\n        ItemStatus.LOAD_ERROR,\n        ItemStatus.PROCESSING_ERROR,\n        ItemStatus.PROCESSING_REVERT_ERROR,\n    ];\n\n    var ITEM_BUSY = [\n        ItemStatus.LOADING,\n        ItemStatus.PROCESSING,\n        ItemStatus.PROCESSING_QUEUED,\n        ItemStatus.INIT,\n    ];\n\n    var ITEM_READY = [ItemStatus.PROCESSING_COMPLETE];\n\n    var isItemInErrorState = function isItemInErrorState(item) {\n        return ITEM_ERROR.includes(item.status);\n    };\n    var isItemInBusyState = function isItemInBusyState(item) {\n        return ITEM_BUSY.includes(item.status);\n    };\n    var isItemInReadyState = function isItemInReadyState(item) {\n        return ITEM_READY.includes(item.status);\n    };\n\n    var isAsync = function isAsync(state) {\n        return (\n            isObject(state.options.server) &&\n            (isObject(state.options.server.process) || isFunction(state.options.server.process))\n        );\n    };\n\n    var queries = function queries(state) {\n        return {\n            GET_STATUS: function GET_STATUS() {\n                var items = getActiveItems(state.items);\n                var EMPTY = Status.EMPTY,\n                    ERROR = Status.ERROR,\n                    BUSY = Status.BUSY,\n                    IDLE = Status.IDLE,\n                    READY = Status.READY;\n\n                if (items.length === 0) return EMPTY;\n\n                if (items.some(isItemInErrorState)) return ERROR;\n\n                if (items.some(isItemInBusyState)) return BUSY;\n\n                if (items.some(isItemInReadyState)) return READY;\n\n                return IDLE;\n            },\n\n            GET_ITEM: function GET_ITEM(query) {\n                return getItemByQuery(state.items, query);\n            },\n\n            GET_ACTIVE_ITEM: function GET_ACTIVE_ITEM(query) {\n                return getItemByQuery(getActiveItems(state.items), query);\n            },\n\n            GET_ACTIVE_ITEMS: function GET_ACTIVE_ITEMS() {\n                return getActiveItems(state.items);\n            },\n\n            GET_ITEMS: function GET_ITEMS() {\n                return state.items;\n            },\n\n            GET_ITEM_NAME: function GET_ITEM_NAME(query) {\n                var item = getItemByQuery(state.items, query);\n                return item ? item.filename : null;\n            },\n\n            GET_ITEM_SIZE: function GET_ITEM_SIZE(query) {\n                var item = getItemByQuery(state.items, query);\n                return item ? item.fileSize : null;\n            },\n\n            GET_STYLES: function GET_STYLES() {\n                return Object.keys(state.options)\n                    .filter(function(key) {\n                        return /^style/.test(key);\n                    })\n                    .map(function(option) {\n                        return {\n                            name: option,\n                            value: state.options[option],\n                        };\n                    });\n            },\n\n            GET_PANEL_ASPECT_RATIO: function GET_PANEL_ASPECT_RATIO() {\n                var isShapeCircle = /circle/.test(state.options.stylePanelLayout);\n                var aspectRatio = isShapeCircle\n                    ? 1\n                    : getNumericAspectRatioFromString(state.options.stylePanelAspectRatio);\n                return aspectRatio;\n            },\n\n            GET_ITEM_PANEL_ASPECT_RATIO: function GET_ITEM_PANEL_ASPECT_RATIO() {\n                return state.options.styleItemPanelAspectRatio;\n            },\n\n            GET_ITEMS_BY_STATUS: function GET_ITEMS_BY_STATUS(status) {\n                return getActiveItems(state.items).filter(function(item) {\n                    return item.status === status;\n                });\n            },\n\n            GET_TOTAL_ITEMS: function GET_TOTAL_ITEMS() {\n                return getActiveItems(state.items).length;\n            },\n\n            SHOULD_UPDATE_FILE_INPUT: function SHOULD_UPDATE_FILE_INPUT() {\n                return state.options.storeAsFile && canUpdateFileInput() && !isAsync(state);\n            },\n\n            IS_ASYNC: function IS_ASYNC() {\n                return isAsync(state);\n            },\n\n            GET_FILE_SIZE_LABELS: function GET_FILE_SIZE_LABELS(query) {\n                return {\n                    labelBytes: query('GET_LABEL_FILE_SIZE_BYTES') || undefined,\n                    labelKilobytes: query('GET_LABEL_FILE_SIZE_KILOBYTES') || undefined,\n                    labelMegabytes: query('GET_LABEL_FILE_SIZE_MEGABYTES') || undefined,\n                    labelGigabytes: query('GET_LABEL_FILE_SIZE_GIGABYTES') || undefined,\n                };\n            },\n        };\n    };\n\n    var hasRoomForItem = function hasRoomForItem(state) {\n        var count = getActiveItems(state.items).length;\n\n        // if cannot have multiple items, to add one item it should currently not contain items\n        if (!state.options.allowMultiple) {\n            return count === 0;\n        }\n\n        // if allows multiple items, we check if a max item count has been set, if not, there's no limit\n        var maxFileCount = state.options.maxFiles;\n        if (maxFileCount === null) {\n            return true;\n        }\n\n        // we check if the current count is smaller than the max count, if so, another file can still be added\n        if (count < maxFileCount) {\n            return true;\n        }\n\n        // no more room for another file\n        return false;\n    };\n\n    var limit = function limit(value, min, max) {\n        return Math.max(Math.min(max, value), min);\n    };\n\n    var arrayInsert = function arrayInsert(arr, index, item) {\n        return arr.splice(index, 0, item);\n    };\n\n    var insertItem = function insertItem(items, item, index) {\n        if (isEmpty(item)) {\n            return null;\n        }\n\n        // if index is undefined, append\n        if (typeof index === 'undefined') {\n            items.push(item);\n            return item;\n        }\n\n        // limit the index to the size of the items array\n        index = limit(index, 0, items.length);\n\n        // add item to array\n        arrayInsert(items, index, item);\n\n        // expose\n        return item;\n    };\n\n    var isBase64DataURI = function isBase64DataURI(str) {\n        return /^\\s*data:([a-z]+\\/[a-z0-9-+.]+(;[a-z-]+=[a-z0-9-]+)?)?(;base64)?,([a-z0-9!$&',()*+;=\\-._~:@\\/?%\\s]*)\\s*$/i.test(\n            str\n        );\n    };\n\n    var getFilenameFromURL = function getFilenameFromURL(url) {\n        return url\n            .split('/')\n            .pop()\n            .split('?')\n            .shift();\n    };\n\n    var getExtensionFromFilename = function getExtensionFromFilename(name) {\n        return name.split('.').pop();\n    };\n\n    var guesstimateExtension = function guesstimateExtension(type) {\n        // if no extension supplied, exit here\n        if (typeof type !== 'string') {\n            return '';\n        }\n\n        // get subtype\n        var subtype = type.split('/').pop();\n\n        // is svg subtype\n        if (/svg/.test(subtype)) {\n            return 'svg';\n        }\n\n        if (/zip|compressed/.test(subtype)) {\n            return 'zip';\n        }\n\n        if (/plain/.test(subtype)) {\n            return 'txt';\n        }\n\n        if (/msword/.test(subtype)) {\n            return 'doc';\n        }\n\n        // if is valid subtype\n        if (/[a-z]+/.test(subtype)) {\n            // always use jpg extension\n            if (subtype === 'jpeg') {\n                return 'jpg';\n            }\n\n            // return subtype\n            return subtype;\n        }\n\n        return '';\n    };\n\n    var leftPad = function leftPad(value) {\n        var padding = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n        return (padding + value).slice(-padding.length);\n    };\n\n    var getDateString = function getDateString() {\n        var date = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : new Date();\n        return (\n            date.getFullYear() +\n            '-' +\n            leftPad(date.getMonth() + 1, '00') +\n            '-' +\n            leftPad(date.getDate(), '00') +\n            '_' +\n            leftPad(date.getHours(), '00') +\n            '-' +\n            leftPad(date.getMinutes(), '00') +\n            '-' +\n            leftPad(date.getSeconds(), '00')\n        );\n    };\n\n    var getFileFromBlob = function getFileFromBlob(blob, filename) {\n        var type = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n        var extension = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n        var file =\n            typeof type === 'string'\n                ? blob.slice(0, blob.size, type)\n                : blob.slice(0, blob.size, blob.type);\n        file.lastModifiedDate = new Date();\n\n        // copy relative path\n        if (blob._relativePath) file._relativePath = blob._relativePath;\n\n        // if blob has name property, use as filename if no filename supplied\n        if (!isString(filename)) {\n            filename = getDateString();\n        }\n\n        // if filename supplied but no extension and filename has extension\n        if (filename && extension === null && getExtensionFromFilename(filename)) {\n            file.name = filename;\n        } else {\n            extension = extension || guesstimateExtension(file.type);\n            file.name = filename + (extension ? '.' + extension : '');\n        }\n\n        return file;\n    };\n\n    var getBlobBuilder = function getBlobBuilder() {\n        return (window.BlobBuilder =\n            window.BlobBuilder ||\n            window.WebKitBlobBuilder ||\n            window.MozBlobBuilder ||\n            window.MSBlobBuilder);\n    };\n\n    var createBlob = function createBlob(arrayBuffer, mimeType) {\n        var BB = getBlobBuilder();\n\n        if (BB) {\n            var bb = new BB();\n            bb.append(arrayBuffer);\n            return bb.getBlob(mimeType);\n        }\n\n        return new Blob([arrayBuffer], {\n            type: mimeType,\n        });\n    };\n\n    var getBlobFromByteStringWithMimeType = function getBlobFromByteStringWithMimeType(\n        byteString,\n        mimeType\n    ) {\n        var ab = new ArrayBuffer(byteString.length);\n        var ia = new Uint8Array(ab);\n\n        for (var i = 0; i < byteString.length; i++) {\n            ia[i] = byteString.charCodeAt(i);\n        }\n\n        return createBlob(ab, mimeType);\n    };\n\n    var getMimeTypeFromBase64DataURI = function getMimeTypeFromBase64DataURI(dataURI) {\n        return (/^data:(.+);/.exec(dataURI) || [])[1] || null;\n    };\n\n    var getBase64DataFromBase64DataURI = function getBase64DataFromBase64DataURI(dataURI) {\n        // get data part of string (remove data:image/jpeg...,)\n        var data = dataURI.split(',')[1];\n\n        // remove any whitespace as that causes InvalidCharacterError in IE\n        return data.replace(/\\s/g, '');\n    };\n\n    var getByteStringFromBase64DataURI = function getByteStringFromBase64DataURI(dataURI) {\n        return atob(getBase64DataFromBase64DataURI(dataURI));\n    };\n\n    var getBlobFromBase64DataURI = function getBlobFromBase64DataURI(dataURI) {\n        var mimeType = getMimeTypeFromBase64DataURI(dataURI);\n        var byteString = getByteStringFromBase64DataURI(dataURI);\n\n        return getBlobFromByteStringWithMimeType(byteString, mimeType);\n    };\n\n    var getFileFromBase64DataURI = function getFileFromBase64DataURI(dataURI, filename, extension) {\n        return getFileFromBlob(getBlobFromBase64DataURI(dataURI), filename, null, extension);\n    };\n\n    var getFileNameFromHeader = function getFileNameFromHeader(header) {\n        // test if is content disposition header, if not exit\n        if (!/^content-disposition:/i.test(header)) return null;\n\n        // get filename parts\n        var matches = header\n            .split(/filename=|filename\\*=.+''/)\n            .splice(1)\n            .map(function(name) {\n                return name.trim().replace(/^[\"']|[;\"']{0,2}$/g, '');\n            })\n            .filter(function(name) {\n                return name.length;\n            });\n\n        return matches.length ? decodeURI(matches[matches.length - 1]) : null;\n    };\n\n    var getFileSizeFromHeader = function getFileSizeFromHeader(header) {\n        if (/content-length:/i.test(header)) {\n            var size = header.match(/[0-9]+/)[0];\n            return size ? parseInt(size, 10) : null;\n        }\n        return null;\n    };\n\n    var getTranfserIdFromHeader = function getTranfserIdFromHeader(header) {\n        if (/x-content-transfer-id:/i.test(header)) {\n            var id = (header.split(':')[1] || '').trim();\n            return id || null;\n        }\n        return null;\n    };\n\n    var getFileInfoFromHeaders = function getFileInfoFromHeaders(headers) {\n        var info = {\n            source: null,\n            name: null,\n            size: null,\n        };\n\n        var rows = headers.split('\\n');\n        var _iteratorNormalCompletion = true;\n        var _didIteratorError = false;\n        var _iteratorError = undefined;\n        try {\n            for (\n                var _iterator = rows[Symbol.iterator](), _step;\n                !(_iteratorNormalCompletion = (_step = _iterator.next()).done);\n                _iteratorNormalCompletion = true\n            ) {\n                var header = _step.value;\n\n                var name = getFileNameFromHeader(header);\n                if (name) {\n                    info.name = name;\n                    continue;\n                }\n\n                var size = getFileSizeFromHeader(header);\n                if (size) {\n                    info.size = size;\n                    continue;\n                }\n\n                var source = getTranfserIdFromHeader(header);\n                if (source) {\n                    info.source = source;\n                    continue;\n                }\n            }\n        } catch (err) {\n            _didIteratorError = true;\n            _iteratorError = err;\n        } finally {\n            try {\n                if (!_iteratorNormalCompletion && _iterator.return != null) {\n                    _iterator.return();\n                }\n            } finally {\n                if (_didIteratorError) {\n                    throw _iteratorError;\n                }\n            }\n        }\n\n        return info;\n    };\n\n    var createFileLoader = function createFileLoader(fetchFn) {\n        var state = {\n            source: null,\n            complete: false,\n            progress: 0,\n            size: null,\n            timestamp: null,\n            duration: 0,\n            request: null,\n        };\n\n        var getProgress = function getProgress() {\n            return state.progress;\n        };\n        var abort = function abort() {\n            if (state.request && state.request.abort) {\n                state.request.abort();\n            }\n        };\n\n        // load source\n        var load = function load() {\n            // get quick reference\n            var source = state.source;\n\n            api.fire('init', source);\n\n            // Load Files\n            if (source instanceof File) {\n                api.fire('load', source);\n            } else if (source instanceof Blob) {\n                // Load blobs, set default name to current date\n                api.fire('load', getFileFromBlob(source, source.name));\n            } else if (isBase64DataURI(source)) {\n                // Load base 64, set default name to current date\n                api.fire('load', getFileFromBase64DataURI(source));\n            } else {\n                // Deal as if is external URL, let's load it!\n                loadURL(source);\n            }\n        };\n\n        // loads a url\n        var loadURL = function loadURL(url) {\n            // is remote url and no fetch method supplied\n            if (!fetchFn) {\n                api.fire('error', {\n                    type: 'error',\n                    body: \"Can't load URL\",\n                    code: 400,\n                });\n\n                return;\n            }\n\n            // set request start\n            state.timestamp = Date.now();\n\n            // load file\n            state.request = fetchFn(\n                url,\n                function(response) {\n                    // update duration\n                    state.duration = Date.now() - state.timestamp;\n\n                    // done!\n                    state.complete = true;\n\n                    // turn blob response into a file\n                    if (response instanceof Blob) {\n                        response = getFileFromBlob(\n                            response,\n                            response.name || getFilenameFromURL(url)\n                        );\n                    }\n\n                    api.fire(\n                        'load',\n                        // if has received blob, we go with blob, if no response, we return null\n                        response instanceof Blob ? response : response ? response.body : null\n                    );\n                },\n                function(error) {\n                    api.fire(\n                        'error',\n                        typeof error === 'string'\n                            ? {\n                                  type: 'error',\n                                  code: 0,\n                                  body: error,\n                              }\n                            : error\n                    );\n                },\n                function(computable, current, total) {\n                    // collected some meta data already\n                    if (total) {\n                        state.size = total;\n                    }\n\n                    // update duration\n                    state.duration = Date.now() - state.timestamp;\n\n                    // if we can't compute progress, we're not going to fire progress events\n                    if (!computable) {\n                        state.progress = null;\n                        return;\n                    }\n\n                    // update progress percentage\n                    state.progress = current / total;\n\n                    // expose\n                    api.fire('progress', state.progress);\n                },\n                function() {\n                    api.fire('abort');\n                },\n                function(response) {\n                    var fileinfo = getFileInfoFromHeaders(\n                        typeof response === 'string' ? response : response.headers\n                    );\n                    api.fire('meta', {\n                        size: state.size || fileinfo.size,\n                        filename: fileinfo.name,\n                        source: fileinfo.source,\n                    });\n                }\n            );\n        };\n\n        var api = Object.assign({}, on(), {\n            setSource: function setSource(source) {\n                return (state.source = source);\n            },\n            getProgress: getProgress, // file load progress\n            abort: abort, // abort file load\n            load: load, // start load\n        });\n\n        return api;\n    };\n\n    var isGet = function isGet(method) {\n        return /GET|HEAD/.test(method);\n    };\n\n    var sendRequest = function sendRequest(data, url, options) {\n        var api = {\n            onheaders: function onheaders() {},\n            onprogress: function onprogress() {},\n            onload: function onload() {},\n            ontimeout: function ontimeout() {},\n            onerror: function onerror() {},\n            onabort: function onabort() {},\n            abort: function abort() {\n                aborted = true;\n                xhr.abort();\n            },\n        };\n\n        // timeout identifier, only used when timeout is defined\n        var aborted = false;\n        var headersReceived = false;\n\n        // set default options\n        options = Object.assign(\n            {\n                method: 'POST',\n                headers: {},\n                withCredentials: false,\n            },\n            options\n        );\n\n        // encode url\n        url = encodeURI(url);\n\n        // if method is GET, add any received data to url\n\n        if (isGet(options.method) && data) {\n            url =\n                '' +\n                url +\n                encodeURIComponent(typeof data === 'string' ? data : JSON.stringify(data));\n        }\n\n        // create request\n        var xhr = new XMLHttpRequest();\n\n        // progress of load\n        var process = isGet(options.method) ? xhr : xhr.upload;\n        process.onprogress = function(e) {\n            // no progress event when aborted ( onprogress is called once after abort() )\n            if (aborted) {\n                return;\n            }\n\n            api.onprogress(e.lengthComputable, e.loaded, e.total);\n        };\n\n        // tries to get header info to the app as fast as possible\n        xhr.onreadystatechange = function() {\n            // not interesting in these states ('unsent' and 'openend' as they don't give us any additional info)\n            if (xhr.readyState < 2) {\n                return;\n            }\n\n            // no server response\n            if (xhr.readyState === 4 && xhr.status === 0) {\n                return;\n            }\n\n            if (headersReceived) {\n                return;\n            }\n\n            headersReceived = true;\n\n            // we've probably received some useful data in response headers\n            api.onheaders(xhr);\n        };\n\n        // load successful\n        xhr.onload = function() {\n            // is classified as valid response\n            if (xhr.status >= 200 && xhr.status < 300) {\n                api.onload(xhr);\n            } else {\n                api.onerror(xhr);\n            }\n        };\n\n        // error during load\n        xhr.onerror = function() {\n            return api.onerror(xhr);\n        };\n\n        // request aborted\n        xhr.onabort = function() {\n            aborted = true;\n            api.onabort();\n        };\n\n        // request timeout\n        xhr.ontimeout = function() {\n            return api.ontimeout(xhr);\n        };\n\n        // open up open up!\n        xhr.open(options.method, url, true);\n\n        // set timeout if defined (do it after open so IE11 plays ball)\n        if (isInt(options.timeout)) {\n            xhr.timeout = options.timeout;\n        }\n\n        // add headers\n        Object.keys(options.headers).forEach(function(key) {\n            var value = unescape(encodeURIComponent(options.headers[key]));\n            xhr.setRequestHeader(key, value);\n        });\n\n        // set type of response\n        if (options.responseType) {\n            xhr.responseType = options.responseType;\n        }\n\n        // set credentials\n        if (options.withCredentials) {\n            xhr.withCredentials = true;\n        }\n\n        // let's send our data\n        xhr.send(data);\n\n        return api;\n    };\n\n    var createResponse = function createResponse(type, code, body, headers) {\n        return {\n            type: type,\n            code: code,\n            body: body,\n            headers: headers,\n        };\n    };\n\n    var createTimeoutResponse = function createTimeoutResponse(cb) {\n        return function(xhr) {\n            cb(createResponse('error', 0, 'Timeout', xhr.getAllResponseHeaders()));\n        };\n    };\n\n    var hasQS = function hasQS(str) {\n        return /\\?/.test(str);\n    };\n    var buildURL = function buildURL() {\n        var url = '';\n        for (var _len = arguments.length, parts = new Array(_len), _key = 0; _key < _len; _key++) {\n            parts[_key] = arguments[_key];\n        }\n        parts.forEach(function(part) {\n            url += hasQS(url) && hasQS(part) ? part.replace(/\\?/, '&') : part;\n        });\n        return url;\n    };\n\n    var createFetchFunction = function createFetchFunction() {\n        var apiUrl = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n        var action = arguments.length > 1 ? arguments[1] : undefined;\n        // custom handler (should also handle file, load, error, progress and abort)\n        if (typeof action === 'function') {\n            return action;\n        }\n\n        // no action supplied\n        if (!action || !isString(action.url)) {\n            return null;\n        }\n\n        // set onload hanlder\n        var onload =\n            action.onload ||\n            function(res) {\n                return res;\n            };\n        var onerror =\n            action.onerror ||\n            function(res) {\n                return null;\n            };\n\n        // internal handler\n        return function(url, load, error, progress, abort, headers) {\n            // do local or remote request based on if the url is external\n            var request = sendRequest(\n                url,\n                buildURL(apiUrl, action.url),\n                Object.assign({}, action, {\n                    responseType: 'blob',\n                })\n            );\n\n            request.onload = function(xhr) {\n                // get headers\n                var headers = xhr.getAllResponseHeaders();\n\n                // get filename\n                var filename = getFileInfoFromHeaders(headers).name || getFilenameFromURL(url);\n\n                // create response\n                load(\n                    createResponse(\n                        'load',\n                        xhr.status,\n                        action.method === 'HEAD'\n                            ? null\n                            : getFileFromBlob(onload(xhr.response), filename),\n                        headers\n                    )\n                );\n            };\n\n            request.onerror = function(xhr) {\n                error(\n                    createResponse(\n                        'error',\n                        xhr.status,\n                        onerror(xhr.response) || xhr.statusText,\n                        xhr.getAllResponseHeaders()\n                    )\n                );\n            };\n\n            request.onheaders = function(xhr) {\n                headers(createResponse('headers', xhr.status, null, xhr.getAllResponseHeaders()));\n            };\n\n            request.ontimeout = createTimeoutResponse(error);\n            request.onprogress = progress;\n            request.onabort = abort;\n\n            // should return request\n            return request;\n        };\n    };\n\n    var ChunkStatus = {\n        QUEUED: 0,\n        COMPLETE: 1,\n        PROCESSING: 2,\n        ERROR: 3,\n        WAITING: 4,\n    };\n\n    /*\n                                                       function signature:\n                                                         (file, metadata, load, error, progress, abort, transfer, options) => {\n                                                           return {\n                                                           abort:() => {}\n                                                         }\n                                                       }\n                                                       */\n\n    // apiUrl, action, name, file, metadata, load, error, progress, abort, transfer, options\n    var processFileChunked = function processFileChunked(\n        apiUrl,\n        action,\n        name,\n        file,\n        metadata,\n        load,\n        error,\n        progress,\n        abort,\n        transfer,\n        options\n    ) {\n        // all chunks\n        var chunks = [];\n        var chunkTransferId = options.chunkTransferId,\n            chunkServer = options.chunkServer,\n            chunkSize = options.chunkSize,\n            chunkRetryDelays = options.chunkRetryDelays;\n\n        // default state\n        var state = {\n            serverId: chunkTransferId,\n            aborted: false,\n        };\n\n        // set onload handlers\n        var ondata =\n            action.ondata ||\n            function(fd) {\n                return fd;\n            };\n        var onload =\n            action.onload ||\n            function(xhr, method) {\n                return method === 'HEAD' ? xhr.getResponseHeader('Upload-Offset') : xhr.response;\n            };\n        var onerror =\n            action.onerror ||\n            function(res) {\n                return null;\n            };\n\n        // create server hook\n        var requestTransferId = function requestTransferId(cb) {\n            var formData = new FormData();\n\n            // add metadata under same name\n            if (isObject(metadata)) formData.append(name, JSON.stringify(metadata));\n\n            var headers =\n                typeof action.headers === 'function'\n                    ? action.headers(file, metadata)\n                    : Object.assign({}, action.headers, {\n                          'Upload-Length': file.size,\n                      });\n\n            var requestParams = Object.assign({}, action, {\n                headers: headers,\n            });\n\n            // send request object\n            var request = sendRequest(\n                ondata(formData),\n                buildURL(apiUrl, action.url),\n                requestParams\n            );\n\n            request.onload = function(xhr) {\n                return cb(onload(xhr, requestParams.method));\n            };\n\n            request.onerror = function(xhr) {\n                return error(\n                    createResponse(\n                        'error',\n                        xhr.status,\n                        onerror(xhr.response) || xhr.statusText,\n                        xhr.getAllResponseHeaders()\n                    )\n                );\n            };\n\n            request.ontimeout = createTimeoutResponse(error);\n        };\n\n        var requestTransferOffset = function requestTransferOffset(cb) {\n            var requestUrl = buildURL(apiUrl, chunkServer.url, state.serverId);\n\n            var headers =\n                typeof action.headers === 'function'\n                    ? action.headers(state.serverId)\n                    : Object.assign({}, action.headers);\n\n            var requestParams = {\n                headers: headers,\n                method: 'HEAD',\n            };\n\n            var request = sendRequest(null, requestUrl, requestParams);\n\n            request.onload = function(xhr) {\n                return cb(onload(xhr, requestParams.method));\n            };\n\n            request.onerror = function(xhr) {\n                return error(\n                    createResponse(\n                        'error',\n                        xhr.status,\n                        onerror(xhr.response) || xhr.statusText,\n                        xhr.getAllResponseHeaders()\n                    )\n                );\n            };\n\n            request.ontimeout = createTimeoutResponse(error);\n        };\n\n        // create chunks\n        var lastChunkIndex = Math.floor(file.size / chunkSize);\n        for (var i = 0; i <= lastChunkIndex; i++) {\n            var offset = i * chunkSize;\n            var data = file.slice(offset, offset + chunkSize, 'application/offset+octet-stream');\n            chunks[i] = {\n                index: i,\n                size: data.size,\n                offset: offset,\n                data: data,\n                file: file,\n                progress: 0,\n                retries: _toConsumableArray(chunkRetryDelays),\n                status: ChunkStatus.QUEUED,\n                error: null,\n                request: null,\n                timeout: null,\n            };\n        }\n\n        var completeProcessingChunks = function completeProcessingChunks() {\n            return load(state.serverId);\n        };\n\n        var canProcessChunk = function canProcessChunk(chunk) {\n            return chunk.status === ChunkStatus.QUEUED || chunk.status === ChunkStatus.ERROR;\n        };\n\n        var processChunk = function processChunk(chunk) {\n            // processing is paused, wait here\n            if (state.aborted) return;\n\n            // get next chunk to process\n            chunk = chunk || chunks.find(canProcessChunk);\n\n            // no more chunks to process\n            if (!chunk) {\n                // all done?\n                if (\n                    chunks.every(function(chunk) {\n                        return chunk.status === ChunkStatus.COMPLETE;\n                    })\n                ) {\n                    completeProcessingChunks();\n                }\n\n                // no chunk to handle\n                return;\n            }\n\n            // now processing this chunk\n            chunk.status = ChunkStatus.PROCESSING;\n            chunk.progress = null;\n\n            // allow parsing of formdata\n            var ondata =\n                chunkServer.ondata ||\n                function(fd) {\n                    return fd;\n                };\n            var onerror =\n                chunkServer.onerror ||\n                function(res) {\n                    return null;\n                };\n\n            // send request object\n            var requestUrl = buildURL(apiUrl, chunkServer.url, state.serverId);\n\n            var headers =\n                typeof chunkServer.headers === 'function'\n                    ? chunkServer.headers(chunk)\n                    : Object.assign({}, chunkServer.headers, {\n                          'Content-Type': 'application/offset+octet-stream',\n                          'Upload-Offset': chunk.offset,\n                          'Upload-Length': file.size,\n                          'Upload-Name': file.name,\n                      });\n\n            var request = (chunk.request = sendRequest(\n                ondata(chunk.data),\n                requestUrl,\n                Object.assign({}, chunkServer, {\n                    headers: headers,\n                })\n            ));\n\n            request.onload = function() {\n                // done!\n                chunk.status = ChunkStatus.COMPLETE;\n\n                // remove request reference\n                chunk.request = null;\n\n                // start processing more chunks\n                processChunks();\n            };\n\n            request.onprogress = function(lengthComputable, loaded, total) {\n                chunk.progress = lengthComputable ? loaded : null;\n                updateTotalProgress();\n            };\n\n            request.onerror = function(xhr) {\n                chunk.status = ChunkStatus.ERROR;\n                chunk.request = null;\n                chunk.error = onerror(xhr.response) || xhr.statusText;\n                if (!retryProcessChunk(chunk)) {\n                    error(\n                        createResponse(\n                            'error',\n                            xhr.status,\n                            onerror(xhr.response) || xhr.statusText,\n                            xhr.getAllResponseHeaders()\n                        )\n                    );\n                }\n            };\n\n            request.ontimeout = function(xhr) {\n                chunk.status = ChunkStatus.ERROR;\n                chunk.request = null;\n                if (!retryProcessChunk(chunk)) {\n                    createTimeoutResponse(error)(xhr);\n                }\n            };\n\n            request.onabort = function() {\n                chunk.status = ChunkStatus.QUEUED;\n                chunk.request = null;\n                abort();\n            };\n        };\n\n        var retryProcessChunk = function retryProcessChunk(chunk) {\n            // no more retries left\n            if (chunk.retries.length === 0) return false;\n\n            // new retry\n            chunk.status = ChunkStatus.WAITING;\n            clearTimeout(chunk.timeout);\n            chunk.timeout = setTimeout(function() {\n                processChunk(chunk);\n            }, chunk.retries.shift());\n\n            // we're going to retry\n            return true;\n        };\n\n        var updateTotalProgress = function updateTotalProgress() {\n            // calculate total progress fraction\n            var totalBytesTransfered = chunks.reduce(function(p, chunk) {\n                if (p === null || chunk.progress === null) return null;\n                return p + chunk.progress;\n            }, 0);\n\n            // can't compute progress\n            if (totalBytesTransfered === null) return progress(false, 0, 0);\n\n            // calculate progress values\n            var totalSize = chunks.reduce(function(total, chunk) {\n                return total + chunk.size;\n            }, 0);\n\n            // can update progress indicator\n            progress(true, totalBytesTransfered, totalSize);\n        };\n\n        // process new chunks\n        var processChunks = function processChunks() {\n            var totalProcessing = chunks.filter(function(chunk) {\n                return chunk.status === ChunkStatus.PROCESSING;\n            }).length;\n            if (totalProcessing >= 1) return;\n            processChunk();\n        };\n\n        var abortChunks = function abortChunks() {\n            chunks.forEach(function(chunk) {\n                clearTimeout(chunk.timeout);\n                if (chunk.request) {\n                    chunk.request.abort();\n                }\n            });\n        };\n\n        // let's go!\n        if (!state.serverId) {\n            requestTransferId(function(serverId) {\n                // stop here if aborted, might have happened in between request and callback\n                if (state.aborted) return;\n\n                // pass back to item so we can use it if something goes wrong\n                transfer(serverId);\n\n                // store internally\n                state.serverId = serverId;\n                processChunks();\n            });\n        } else {\n            requestTransferOffset(function(offset) {\n                // stop here if aborted, might have happened in between request and callback\n                if (state.aborted) return;\n\n                // mark chunks with lower offset as complete\n                chunks\n                    .filter(function(chunk) {\n                        return chunk.offset < offset;\n                    })\n                    .forEach(function(chunk) {\n                        chunk.status = ChunkStatus.COMPLETE;\n                        chunk.progress = chunk.size;\n                    });\n\n                // continue processing\n                processChunks();\n            });\n        }\n\n        return {\n            abort: function abort() {\n                state.aborted = true;\n                abortChunks();\n            },\n        };\n    };\n\n    /*\n                                                               function signature:\n                                                                 (file, metadata, load, error, progress, abort) => {\n                                                                   return {\n                                                                   abort:() => {}\n                                                                 }\n                                                               }\n                                                               */\n    var createFileProcessorFunction = function createFileProcessorFunction(\n        apiUrl,\n        action,\n        name,\n        options\n    ) {\n        return function(file, metadata, load, error, progress, abort, transfer) {\n            // no file received\n            if (!file) return;\n\n            // if was passed a file, and we can chunk it, exit here\n            var canChunkUpload = options.chunkUploads;\n            var shouldChunkUpload = canChunkUpload && file.size > options.chunkSize;\n            var willChunkUpload = canChunkUpload && (shouldChunkUpload || options.chunkForce);\n            if (file instanceof Blob && willChunkUpload)\n                return processFileChunked(\n                    apiUrl,\n                    action,\n                    name,\n                    file,\n                    metadata,\n                    load,\n                    error,\n                    progress,\n                    abort,\n                    transfer,\n                    options\n                );\n\n            // set handlers\n            var ondata =\n                action.ondata ||\n                function(fd) {\n                    return fd;\n                };\n            var onload =\n                action.onload ||\n                function(res) {\n                    return res;\n                };\n            var onerror =\n                action.onerror ||\n                function(res) {\n                    return null;\n                };\n\n            var headers =\n                typeof action.headers === 'function'\n                    ? action.headers(file, metadata) || {}\n                    : Object.assign(\n                          {},\n\n                          action.headers\n                      );\n\n            var requestParams = Object.assign({}, action, {\n                headers: headers,\n            });\n\n            // create formdata object\n            var formData = new FormData();\n\n            // add metadata under same name\n            if (isObject(metadata)) {\n                formData.append(name, JSON.stringify(metadata));\n            }\n\n            // Turn into an array of objects so no matter what the input, we can handle it the same way\n            (file instanceof Blob ? [{ name: null, file: file }] : file).forEach(function(item) {\n                formData.append(\n                    name,\n                    item.file,\n                    item.name === null ? item.file.name : '' + item.name + item.file.name\n                );\n            });\n\n            // send request object\n            var request = sendRequest(\n                ondata(formData),\n                buildURL(apiUrl, action.url),\n                requestParams\n            );\n            request.onload = function(xhr) {\n                load(\n                    createResponse(\n                        'load',\n                        xhr.status,\n                        onload(xhr.response),\n                        xhr.getAllResponseHeaders()\n                    )\n                );\n            };\n\n            request.onerror = function(xhr) {\n                error(\n                    createResponse(\n                        'error',\n                        xhr.status,\n                        onerror(xhr.response) || xhr.statusText,\n                        xhr.getAllResponseHeaders()\n                    )\n                );\n            };\n\n            request.ontimeout = createTimeoutResponse(error);\n            request.onprogress = progress;\n            request.onabort = abort;\n\n            // should return request\n            return request;\n        };\n    };\n\n    var createProcessorFunction = function createProcessorFunction() {\n        var apiUrl = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n        var action = arguments.length > 1 ? arguments[1] : undefined;\n        var name = arguments.length > 2 ? arguments[2] : undefined;\n        var options = arguments.length > 3 ? arguments[3] : undefined;\n\n        // custom handler (should also handle file, load, error, progress and abort)\n        if (typeof action === 'function')\n            return function() {\n                for (\n                    var _len = arguments.length, params = new Array(_len), _key = 0;\n                    _key < _len;\n                    _key++\n                ) {\n                    params[_key] = arguments[_key];\n                }\n                return action.apply(void 0, [name].concat(params, [options]));\n            };\n\n        // no action supplied\n        if (!action || !isString(action.url)) return null;\n\n        // internal handler\n        return createFileProcessorFunction(apiUrl, action, name, options);\n    };\n\n    /*\n                                                      function signature:\n                                                      (uniqueFileId, load, error) => { }\n                                                      */\n    var createRevertFunction = function createRevertFunction() {\n        var apiUrl = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n        var action = arguments.length > 1 ? arguments[1] : undefined;\n        // is custom implementation\n        if (typeof action === 'function') {\n            return action;\n        }\n\n        // no action supplied, return stub function, interface will work, but file won't be removed\n        if (!action || !isString(action.url)) {\n            return function(uniqueFileId, load) {\n                return load();\n            };\n        }\n\n        // set onload hanlder\n        var onload =\n            action.onload ||\n            function(res) {\n                return res;\n            };\n        var onerror =\n            action.onerror ||\n            function(res) {\n                return null;\n            };\n\n        // internal implementation\n        return function(uniqueFileId, load, error) {\n            var request = sendRequest(\n                uniqueFileId,\n                apiUrl + action.url,\n                action // contains method, headers and withCredentials properties\n            );\n            request.onload = function(xhr) {\n                load(\n                    createResponse(\n                        'load',\n                        xhr.status,\n                        onload(xhr.response),\n                        xhr.getAllResponseHeaders()\n                    )\n                );\n            };\n\n            request.onerror = function(xhr) {\n                error(\n                    createResponse(\n                        'error',\n                        xhr.status,\n                        onerror(xhr.response) || xhr.statusText,\n                        xhr.getAllResponseHeaders()\n                    )\n                );\n            };\n\n            request.ontimeout = createTimeoutResponse(error);\n\n            return request;\n        };\n    };\n\n    var getRandomNumber = function getRandomNumber() {\n        var min = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n        var max = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n        return min + Math.random() * (max - min);\n    };\n\n    var createPerceivedPerformanceUpdater = function createPerceivedPerformanceUpdater(cb) {\n        var duration = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1000;\n        var offset = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n        var tickMin = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 25;\n        var tickMax = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 250;\n        var timeout = null;\n        var start = Date.now();\n\n        var tick = function tick() {\n            var runtime = Date.now() - start;\n            var delay = getRandomNumber(tickMin, tickMax);\n\n            if (runtime + delay > duration) {\n                delay = runtime + delay - duration;\n            }\n\n            var progress = runtime / duration;\n            if (progress >= 1 || document.hidden) {\n                cb(1);\n                return;\n            }\n\n            cb(progress);\n\n            timeout = setTimeout(tick, delay);\n        };\n\n        if (duration > 0) tick();\n\n        return {\n            clear: function clear() {\n                clearTimeout(timeout);\n            },\n        };\n    };\n\n    var createFileProcessor = function createFileProcessor(processFn, options) {\n        var state = {\n            complete: false,\n            perceivedProgress: 0,\n            perceivedPerformanceUpdater: null,\n            progress: null,\n            timestamp: null,\n            perceivedDuration: 0,\n            duration: 0,\n            request: null,\n            response: null,\n        };\n        var allowMinimumUploadDuration = options.allowMinimumUploadDuration;\n\n        var process = function process(file, metadata) {\n            var progressFn = function progressFn() {\n                // we've not yet started the real download, stop here\n                // the request might not go through, for instance, there might be some server trouble\n                // if state.progress is null, the server does not allow computing progress and we show the spinner instead\n                if (state.duration === 0 || state.progress === null) return;\n\n                // as we're now processing, fire the progress event\n                api.fire('progress', api.getProgress());\n            };\n\n            var completeFn = function completeFn() {\n                state.complete = true;\n                api.fire('load-perceived', state.response.body);\n            };\n\n            // let's start processing\n            api.fire('start');\n\n            // set request start\n            state.timestamp = Date.now();\n\n            // create perceived performance progress indicator\n            state.perceivedPerformanceUpdater = createPerceivedPerformanceUpdater(\n                function(progress) {\n                    state.perceivedProgress = progress;\n                    state.perceivedDuration = Date.now() - state.timestamp;\n\n                    progressFn();\n\n                    // if fake progress is done, and a response has been received,\n                    // and we've not yet called the complete method\n                    if (state.response && state.perceivedProgress === 1 && !state.complete) {\n                        // we done!\n                        completeFn();\n                    }\n                },\n                // random delay as in a list of files you start noticing\n                // files uploading at the exact same speed\n                allowMinimumUploadDuration ? getRandomNumber(750, 1500) : 0\n            );\n\n            // remember request so we can abort it later\n            state.request = processFn(\n                // the file to process\n                file,\n\n                // the metadata to send along\n                metadata,\n\n                // callbacks (load, error, progress, abort, transfer)\n                // load expects the body to be a server id if\n                // you want to make use of revert\n                function(response) {\n                    // we put the response in state so we can access\n                    // it outside of this method\n                    state.response = isObject(response)\n                        ? response\n                        : {\n                              type: 'load',\n                              code: 200,\n                              body: '' + response,\n                              headers: {},\n                          };\n\n                    // update duration\n                    state.duration = Date.now() - state.timestamp;\n\n                    // force progress to 1 as we're now done\n                    state.progress = 1;\n\n                    // actual load is done let's share results\n                    api.fire('load', state.response.body);\n\n                    // we are really done\n                    // if perceived progress is 1 ( wait for perceived progress to complete )\n                    // or if server does not support progress ( null )\n                    if (\n                        !allowMinimumUploadDuration ||\n                        (allowMinimumUploadDuration && state.perceivedProgress === 1)\n                    ) {\n                        completeFn();\n                    }\n                },\n\n                // error is expected to be an object with type, code, body\n                function(error) {\n                    // cancel updater\n                    state.perceivedPerformanceUpdater.clear();\n\n                    // update others about this error\n                    api.fire(\n                        'error',\n                        isObject(error)\n                            ? error\n                            : {\n                                  type: 'error',\n                                  code: 0,\n                                  body: '' + error,\n                              }\n                    );\n                },\n\n                // actual processing progress\n                function(computable, current, total) {\n                    // update actual duration\n                    state.duration = Date.now() - state.timestamp;\n\n                    // update actual progress\n                    state.progress = computable ? current / total : null;\n\n                    progressFn();\n                },\n\n                // abort does not expect a value\n                function() {\n                    // stop updater\n                    state.perceivedPerformanceUpdater.clear();\n\n                    // fire the abort event so we can switch visuals\n                    api.fire('abort', state.response ? state.response.body : null);\n                },\n\n                // register the id for this transfer\n                function(transferId) {\n                    api.fire('transfer', transferId);\n                }\n            );\n        };\n\n        var abort = function abort() {\n            // no request running, can't abort\n            if (!state.request) return;\n\n            // stop updater\n            state.perceivedPerformanceUpdater.clear();\n\n            // abort actual request\n            if (state.request.abort) state.request.abort();\n\n            // if has response object, we've completed the request\n            state.complete = true;\n        };\n\n        var reset = function reset() {\n            abort();\n            state.complete = false;\n            state.perceivedProgress = 0;\n            state.progress = 0;\n            state.timestamp = null;\n            state.perceivedDuration = 0;\n            state.duration = 0;\n            state.request = null;\n            state.response = null;\n        };\n\n        var getProgress = allowMinimumUploadDuration\n            ? function() {\n                  return state.progress ? Math.min(state.progress, state.perceivedProgress) : null;\n              }\n            : function() {\n                  return state.progress || null;\n              };\n\n        var getDuration = allowMinimumUploadDuration\n            ? function() {\n                  return Math.min(state.duration, state.perceivedDuration);\n              }\n            : function() {\n                  return state.duration;\n              };\n\n        var api = Object.assign({}, on(), {\n            process: process, // start processing file\n            abort: abort, // abort active process request\n            getProgress: getProgress,\n            getDuration: getDuration,\n            reset: reset,\n        });\n\n        return api;\n    };\n\n    var getFilenameWithoutExtension = function getFilenameWithoutExtension(name) {\n        return name.substring(0, name.lastIndexOf('.')) || name;\n    };\n\n    var createFileStub = function createFileStub(source) {\n        var data = [source.name, source.size, source.type];\n\n        // is blob or base64, then we need to set the name\n        if (source instanceof Blob || isBase64DataURI(source)) {\n            data[0] = source.name || getDateString();\n        } else if (isBase64DataURI(source)) {\n            // if is base64 data uri we need to determine the average size and type\n            data[1] = source.length;\n            data[2] = getMimeTypeFromBase64DataURI(source);\n        } else if (isString(source)) {\n            // url\n            data[0] = getFilenameFromURL(source);\n            data[1] = 0;\n            data[2] = 'application/octet-stream';\n        }\n\n        return {\n            name: data[0],\n            size: data[1],\n            type: data[2],\n        };\n    };\n\n    var isFile = function isFile(value) {\n        return !!(value instanceof File || (value instanceof Blob && value.name));\n    };\n\n    var deepCloneObject = function deepCloneObject(src) {\n        if (!isObject(src)) return src;\n        var target = isArray(src) ? [] : {};\n        for (var key in src) {\n            if (!src.hasOwnProperty(key)) continue;\n            var v = src[key];\n            target[key] = v && isObject(v) ? deepCloneObject(v) : v;\n        }\n        return target;\n    };\n\n    var createItem = function createItem() {\n        var origin = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n        var serverFileReference =\n            arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n        var file = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n        // unique id for this item, is used to identify the item across views\n        var id = getUniqueId();\n\n        /**\n         * Internal item state\n         */\n        var state = {\n            // is archived\n            archived: false,\n\n            // if is frozen, no longer fires events\n            frozen: false,\n\n            // removed from view\n            released: false,\n\n            // original source\n            source: null,\n\n            // file model reference\n            file: file,\n\n            // id of file on server\n            serverFileReference: serverFileReference,\n\n            // id of file transfer on server\n            transferId: null,\n\n            // is aborted\n            processingAborted: false,\n\n            // current item status\n            status: serverFileReference ? ItemStatus.PROCESSING_COMPLETE : ItemStatus.INIT,\n\n            // active processes\n            activeLoader: null,\n            activeProcessor: null,\n        };\n\n        // callback used when abort processing is called to link back to the resolve method\n        var abortProcessingRequestComplete = null;\n\n        /**\n         * Externally added item metadata\n         */\n        var metadata = {};\n\n        // item data\n        var setStatus = function setStatus(status) {\n            return (state.status = status);\n        };\n\n        // fire event unless the item has been archived\n        var fire = function fire(event) {\n            if (state.released || state.frozen) return;\n            for (\n                var _len = arguments.length, params = new Array(_len > 1 ? _len - 1 : 0), _key = 1;\n                _key < _len;\n                _key++\n            ) {\n                params[_key - 1] = arguments[_key];\n            }\n            api.fire.apply(api, [event].concat(params));\n        };\n\n        // file data\n        var getFileExtension = function getFileExtension() {\n            return getExtensionFromFilename(state.file.name);\n        };\n        var getFileType = function getFileType() {\n            return state.file.type;\n        };\n        var getFileSize = function getFileSize() {\n            return state.file.size;\n        };\n        var getFile = function getFile() {\n            return state.file;\n        };\n\n        //\n        // logic to load a file\n        //\n        var load = function load(source, loader, onload) {\n            // remember the original item source\n            state.source = source;\n\n            // source is known\n            api.fireSync('init');\n\n            // file stub is already there\n            if (state.file) {\n                api.fireSync('load-skip');\n                return;\n            }\n\n            // set a stub file object while loading the actual data\n            state.file = createFileStub(source);\n\n            // starts loading\n            loader.on('init', function() {\n                fire('load-init');\n            });\n\n            // we'eve received a size indication, let's update the stub\n            loader.on('meta', function(meta) {\n                // set size of file stub\n                state.file.size = meta.size;\n\n                // set name of file stub\n                state.file.filename = meta.filename;\n\n                // if has received source, we done\n                if (meta.source) {\n                    origin = FileOrigin.LIMBO;\n                    state.serverFileReference = meta.source;\n                    state.status = ItemStatus.PROCESSING_COMPLETE;\n                }\n\n                // size has been updated\n                fire('load-meta');\n            });\n\n            // the file is now loading we need to update the progress indicators\n            loader.on('progress', function(progress) {\n                setStatus(ItemStatus.LOADING);\n\n                fire('load-progress', progress);\n            });\n\n            // an error was thrown while loading the file, we need to switch to error state\n            loader.on('error', function(error) {\n                setStatus(ItemStatus.LOAD_ERROR);\n\n                fire('load-request-error', error);\n            });\n\n            // user or another process aborted the file load (cannot retry)\n            loader.on('abort', function() {\n                setStatus(ItemStatus.INIT);\n                fire('load-abort');\n            });\n\n            // done loading\n            loader.on('load', function(file) {\n                // as we've now loaded the file the loader is no longer required\n                state.activeLoader = null;\n\n                // called when file has loaded succesfully\n                var success = function success(result) {\n                    // set (possibly) transformed file\n                    state.file = isFile(result) ? result : state.file;\n\n                    // file received\n                    if (origin === FileOrigin.LIMBO && state.serverFileReference) {\n                        setStatus(ItemStatus.PROCESSING_COMPLETE);\n                    } else {\n                        setStatus(ItemStatus.IDLE);\n                    }\n\n                    fire('load');\n                };\n\n                var error = function error(result) {\n                    // set original file\n                    state.file = file;\n                    fire('load-meta');\n\n                    setStatus(ItemStatus.LOAD_ERROR);\n                    fire('load-file-error', result);\n                };\n\n                // if we already have a server file reference, we don't need to call the onload method\n                if (state.serverFileReference) {\n                    success(file);\n                    return;\n                }\n\n                // no server id, let's give this file the full treatment\n                onload(file, success, error);\n            });\n\n            // set loader source data\n            loader.setSource(source);\n\n            // set as active loader\n            state.activeLoader = loader;\n\n            // load the source data\n            loader.load();\n        };\n\n        var retryLoad = function retryLoad() {\n            if (!state.activeLoader) {\n                return;\n            }\n            state.activeLoader.load();\n        };\n\n        var abortLoad = function abortLoad() {\n            if (state.activeLoader) {\n                state.activeLoader.abort();\n                return;\n            }\n            setStatus(ItemStatus.INIT);\n            fire('load-abort');\n        };\n\n        //\n        // logic to process a file\n        //\n        var process = function process(processor, onprocess) {\n            // processing was aborted\n            if (state.processingAborted) {\n                state.processingAborted = false;\n                return;\n            }\n\n            // now processing\n            setStatus(ItemStatus.PROCESSING);\n\n            // reset abort callback\n            abortProcessingRequestComplete = null;\n\n            // if no file loaded we'll wait for the load event\n            if (!(state.file instanceof Blob)) {\n                api.on('load', function() {\n                    process(processor, onprocess);\n                });\n                return;\n            }\n\n            // setup processor\n            processor.on('load', function(serverFileReference) {\n                // need this id to be able to revert the upload\n                state.transferId = null;\n                state.serverFileReference = serverFileReference;\n            });\n\n            // register transfer id\n            processor.on('transfer', function(transferId) {\n                // need this id to be able to revert the upload\n                state.transferId = transferId;\n            });\n\n            processor.on('load-perceived', function(serverFileReference) {\n                // no longer required\n                state.activeProcessor = null;\n\n                // need this id to be able to rever the upload\n                state.transferId = null;\n                state.serverFileReference = serverFileReference;\n\n                setStatus(ItemStatus.PROCESSING_COMPLETE);\n                fire('process-complete', serverFileReference);\n            });\n\n            processor.on('start', function() {\n                fire('process-start');\n            });\n\n            processor.on('error', function(error) {\n                state.activeProcessor = null;\n                setStatus(ItemStatus.PROCESSING_ERROR);\n                fire('process-error', error);\n            });\n\n            processor.on('abort', function(serverFileReference) {\n                state.activeProcessor = null;\n\n                // if file was uploaded but processing was cancelled during perceived processor time store file reference\n                state.serverFileReference = serverFileReference;\n\n                setStatus(ItemStatus.IDLE);\n                fire('process-abort');\n\n                // has timeout so doesn't interfere with remove action\n                if (abortProcessingRequestComplete) {\n                    abortProcessingRequestComplete();\n                }\n            });\n\n            processor.on('progress', function(progress) {\n                fire('process-progress', progress);\n            });\n\n            // when successfully transformed\n            var success = function success(file) {\n                // if was archived in the mean time, don't process\n                if (state.archived) return;\n\n                // process file!\n                processor.process(file, Object.assign({}, metadata));\n            };\n\n            // something went wrong during transform phase\n            var error = console.error;\n\n            // start processing the file\n            onprocess(state.file, success, error);\n\n            // set as active processor\n            state.activeProcessor = processor;\n        };\n\n        var requestProcessing = function requestProcessing() {\n            state.processingAborted = false;\n            setStatus(ItemStatus.PROCESSING_QUEUED);\n        };\n\n        var abortProcessing = function abortProcessing() {\n            return new Promise(function(resolve) {\n                if (!state.activeProcessor) {\n                    state.processingAborted = true;\n\n                    setStatus(ItemStatus.IDLE);\n                    fire('process-abort');\n\n                    resolve();\n                    return;\n                }\n\n                abortProcessingRequestComplete = function abortProcessingRequestComplete() {\n                    resolve();\n                };\n\n                state.activeProcessor.abort();\n            });\n        };\n\n        //\n        // logic to revert a processed file\n        //\n        var revert = function revert(revertFileUpload, forceRevert) {\n            return new Promise(function(resolve, reject) {\n                // a completed upload will have a serverFileReference, a failed chunked upload where\n                // getting a serverId succeeded but >=0 chunks have been uploaded will have transferId set\n                var serverTransferId =\n                    state.serverFileReference !== null\n                        ? state.serverFileReference\n                        : state.transferId;\n\n                // cannot revert without a server id for this process\n                if (serverTransferId === null) {\n                    resolve();\n                    return;\n                }\n\n                // revert the upload (fire and forget)\n                revertFileUpload(\n                    serverTransferId,\n                    function() {\n                        // reset file server id and transfer id as now it's not available on the server\n                        state.serverFileReference = null;\n                        state.transferId = null;\n                        resolve();\n                    },\n                    function(error) {\n                        // don't set error state when reverting is optional, it will always resolve\n                        if (!forceRevert) {\n                            resolve();\n                            return;\n                        }\n\n                        // oh no errors\n                        setStatus(ItemStatus.PROCESSING_REVERT_ERROR);\n                        fire('process-revert-error');\n                        reject(error);\n                    }\n                );\n\n                // fire event\n                setStatus(ItemStatus.IDLE);\n                fire('process-revert');\n            });\n        };\n\n        // exposed methods\n        var _setMetadata = function setMetadata(key, value, silent) {\n            var keys = key.split('.');\n            var root = keys[0];\n            var last = keys.pop();\n            var data = metadata;\n            keys.forEach(function(key) {\n                return (data = data[key]);\n            });\n\n            // compare old value against new value, if they're the same, we're not updating\n            if (JSON.stringify(data[last]) === JSON.stringify(value)) return;\n\n            // update value\n            data[last] = value;\n\n            // fire update\n            fire('metadata-update', {\n                key: root,\n                value: metadata[root],\n                silent: silent,\n            });\n        };\n\n        var getMetadata = function getMetadata(key) {\n            return deepCloneObject(key ? metadata[key] : metadata);\n        };\n\n        var api = Object.assign(\n            {\n                id: {\n                    get: function get() {\n                        return id;\n                    },\n                },\n                origin: {\n                    get: function get() {\n                        return origin;\n                    },\n                    set: function set(value) {\n                        return (origin = value);\n                    },\n                },\n                serverId: {\n                    get: function get() {\n                        return state.serverFileReference;\n                    },\n                },\n                transferId: {\n                    get: function get() {\n                        return state.transferId;\n                    },\n                },\n                status: {\n                    get: function get() {\n                        return state.status;\n                    },\n                },\n                filename: {\n                    get: function get() {\n                        return state.file.name;\n                    },\n                },\n                filenameWithoutExtension: {\n                    get: function get() {\n                        return getFilenameWithoutExtension(state.file.name);\n                    },\n                },\n                fileExtension: { get: getFileExtension },\n                fileType: { get: getFileType },\n                fileSize: { get: getFileSize },\n                file: { get: getFile },\n                relativePath: {\n                    get: function get() {\n                        return state.file._relativePath;\n                    },\n                },\n\n                source: {\n                    get: function get() {\n                        return state.source;\n                    },\n                },\n\n                getMetadata: getMetadata,\n                setMetadata: function setMetadata(key, value, silent) {\n                    if (isObject(key)) {\n                        var data = key;\n                        Object.keys(data).forEach(function(key) {\n                            _setMetadata(key, data[key], value);\n                        });\n                        return key;\n                    }\n                    _setMetadata(key, value, silent);\n                    return value;\n                },\n\n                extend: function extend(name, handler) {\n                    return (itemAPI[name] = handler);\n                },\n\n                abortLoad: abortLoad,\n                retryLoad: retryLoad,\n                requestProcessing: requestProcessing,\n                abortProcessing: abortProcessing,\n\n                load: load,\n                process: process,\n                revert: revert,\n            },\n\n            on(),\n            {\n                freeze: function freeze() {\n                    return (state.frozen = true);\n                },\n\n                release: function release() {\n                    return (state.released = true);\n                },\n                released: {\n                    get: function get() {\n                        return state.released;\n                    },\n                },\n\n                archive: function archive() {\n                    return (state.archived = true);\n                },\n                archived: {\n                    get: function get() {\n                        return state.archived;\n                    },\n                },\n            }\n        );\n\n        // create it here instead of returning it instantly so we can extend it later\n        var itemAPI = createObject(api);\n\n        return itemAPI;\n    };\n\n    var getItemIndexByQuery = function getItemIndexByQuery(items, query) {\n        // just return first index\n        if (isEmpty(query)) {\n            return 0;\n        }\n\n        // invalid queries\n        if (!isString(query)) {\n            return -1;\n        }\n\n        // return item by id (or -1 if not found)\n        return items.findIndex(function(item) {\n            return item.id === query;\n        });\n    };\n\n    var getItemById = function getItemById(items, itemId) {\n        var index = getItemIndexByQuery(items, itemId);\n        if (index < 0) {\n            return;\n        }\n        return items[index] || null;\n    };\n\n    var fetchBlob = function fetchBlob(url, load, error, progress, abort, headers) {\n        var request = sendRequest(null, url, {\n            method: 'GET',\n            responseType: 'blob',\n        });\n\n        request.onload = function(xhr) {\n            // get headers\n            var headers = xhr.getAllResponseHeaders();\n\n            // get filename\n            var filename = getFileInfoFromHeaders(headers).name || getFilenameFromURL(url);\n\n            // create response\n            load(\n                createResponse('load', xhr.status, getFileFromBlob(xhr.response, filename), headers)\n            );\n        };\n\n        request.onerror = function(xhr) {\n            error(createResponse('error', xhr.status, xhr.statusText, xhr.getAllResponseHeaders()));\n        };\n\n        request.onheaders = function(xhr) {\n            headers(createResponse('headers', xhr.status, null, xhr.getAllResponseHeaders()));\n        };\n\n        request.ontimeout = createTimeoutResponse(error);\n        request.onprogress = progress;\n        request.onabort = abort;\n\n        // should return request\n        return request;\n    };\n\n    var getDomainFromURL = function getDomainFromURL(url) {\n        if (url.indexOf('//') === 0) {\n            url = location.protocol + url;\n        }\n        return url\n            .toLowerCase()\n            .replace('blob:', '')\n            .replace(/([a-z])?:\\/\\//, '$1')\n            .split('/')[0];\n    };\n\n    var isExternalURL = function isExternalURL(url) {\n        return (\n            (url.indexOf(':') > -1 || url.indexOf('//') > -1) &&\n            getDomainFromURL(location.href) !== getDomainFromURL(url)\n        );\n    };\n\n    var dynamicLabel = function dynamicLabel(label) {\n        return function() {\n            return isFunction(label) ? label.apply(void 0, arguments) : label;\n        };\n    };\n\n    var isMockItem = function isMockItem(item) {\n        return !isFile(item.file);\n    };\n\n    var listUpdated = function listUpdated(dispatch, state) {\n        clearTimeout(state.listUpdateTimeout);\n        state.listUpdateTimeout = setTimeout(function() {\n            dispatch('DID_UPDATE_ITEMS', { items: getActiveItems(state.items) });\n        }, 0);\n    };\n\n    var optionalPromise = function optionalPromise(fn) {\n        for (\n            var _len = arguments.length, params = new Array(_len > 1 ? _len - 1 : 0), _key = 1;\n            _key < _len;\n            _key++\n        ) {\n            params[_key - 1] = arguments[_key];\n        }\n        return new Promise(function(resolve) {\n            if (!fn) {\n                return resolve(true);\n            }\n\n            var result = fn.apply(void 0, params);\n\n            if (result == null) {\n                return resolve(true);\n            }\n\n            if (typeof result === 'boolean') {\n                return resolve(result);\n            }\n\n            if (typeof result.then === 'function') {\n                result.then(resolve);\n            }\n        });\n    };\n\n    var sortItems = function sortItems(state, compare) {\n        state.items.sort(function(a, b) {\n            return compare(createItemAPI(a), createItemAPI(b));\n        });\n    };\n\n    // returns item based on state\n    var getItemByQueryFromState = function getItemByQueryFromState(state, itemHandler) {\n        return function() {\n            var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n            var query = _ref.query,\n                _ref$success = _ref.success,\n                success = _ref$success === void 0 ? function() {} : _ref$success,\n                _ref$failure = _ref.failure,\n                failure = _ref$failure === void 0 ? function() {} : _ref$failure,\n                options = _objectWithoutProperties(_ref, ['query', 'success', 'failure']);\n            var item = getItemByQuery(state.items, query);\n            if (!item) {\n                failure({\n                    error: createResponse('error', 0, 'Item not found'),\n                    file: null,\n                });\n\n                return;\n            }\n            itemHandler(item, success, failure, options || {});\n        };\n    };\n\n    var actions = function actions(dispatch, query, state) {\n        return {\n            /**\n             * Aborts all ongoing processes\n             */\n            ABORT_ALL: function ABORT_ALL() {\n                getActiveItems(state.items).forEach(function(item) {\n                    item.freeze();\n                    item.abortLoad();\n                    item.abortProcessing();\n                });\n            },\n\n            /**\n             * Sets initial files\n             */\n            DID_SET_FILES: function DID_SET_FILES(_ref2) {\n                var _ref2$value = _ref2.value,\n                    value = _ref2$value === void 0 ? [] : _ref2$value;\n                // map values to file objects\n                var files = value.map(function(file) {\n                    return {\n                        source: file.source ? file.source : file,\n                        options: file.options,\n                    };\n                });\n\n                // loop over files, if file is in list, leave it be, if not, remove\n                // test if items should be moved\n                var activeItems = getActiveItems(state.items);\n\n                activeItems.forEach(function(item) {\n                    // if item not is in new value, remove\n                    if (\n                        !files.find(function(file) {\n                            return file.source === item.source || file.source === item.file;\n                        })\n                    ) {\n                        dispatch('REMOVE_ITEM', { query: item, remove: false });\n                    }\n                });\n\n                // add new files\n                activeItems = getActiveItems(state.items);\n                files.forEach(function(file, index) {\n                    // if file is already in list\n                    if (\n                        activeItems.find(function(item) {\n                            return item.source === file.source || item.file === file.source;\n                        })\n                    )\n                        return;\n\n                    // not in list, add\n                    dispatch(\n                        'ADD_ITEM',\n                        Object.assign({}, file, {\n                            interactionMethod: InteractionMethod.NONE,\n                            index: index,\n                        })\n                    );\n                });\n            },\n\n            DID_UPDATE_ITEM_METADATA: function DID_UPDATE_ITEM_METADATA(_ref3) {\n                var id = _ref3.id,\n                    action = _ref3.action,\n                    change = _ref3.change;\n                // don't do anything\n                if (change.silent) return;\n\n                // if is called multiple times in close succession we combined all calls together to save resources\n                clearTimeout(state.itemUpdateTimeout);\n                state.itemUpdateTimeout = setTimeout(function() {\n                    var item = getItemById(state.items, id);\n\n                    // only revert and attempt to upload when we're uploading to a server\n                    if (!query('IS_ASYNC')) {\n                        // should we update the output data\n                        applyFilterChain('SHOULD_PREPARE_OUTPUT', false, {\n                            item: item,\n                            query: query,\n                            action: action,\n                            change: change,\n                        }).then(function(shouldPrepareOutput) {\n                            // plugins determined the output data should be prepared (or not), can be adjusted with beforePrepareOutput hook\n                            var beforePrepareFile = query('GET_BEFORE_PREPARE_FILE');\n                            if (beforePrepareFile)\n                                shouldPrepareOutput = beforePrepareFile(item, shouldPrepareOutput);\n\n                            if (!shouldPrepareOutput) return;\n\n                            dispatch(\n                                'REQUEST_PREPARE_OUTPUT',\n                                {\n                                    query: id,\n                                    item: item,\n                                    success: function success(file) {\n                                        dispatch('DID_PREPARE_OUTPUT', { id: id, file: file });\n                                    },\n                                },\n\n                                true\n                            );\n                        });\n\n                        return;\n                    }\n\n                    // if is local item we need to enable upload button so change can be propagated to server\n                    if (item.origin === FileOrigin.LOCAL) {\n                        dispatch('DID_LOAD_ITEM', {\n                            id: item.id,\n                            error: null,\n                            serverFileReference: item.source,\n                        });\n                    }\n\n                    // for async scenarios\n                    var upload = function upload() {\n                        // we push this forward a bit so the interface is updated correctly\n                        setTimeout(function() {\n                            dispatch('REQUEST_ITEM_PROCESSING', { query: id });\n                        }, 32);\n                    };\n\n                    var revert = function revert(doUpload) {\n                        item.revert(\n                            createRevertFunction(\n                                state.options.server.url,\n                                state.options.server.revert\n                            ),\n                            query('GET_FORCE_REVERT')\n                        )\n                            .then(doUpload ? upload : function() {})\n                            .catch(function() {});\n                    };\n\n                    var abort = function abort(doUpload) {\n                        item.abortProcessing().then(doUpload ? upload : function() {});\n                    };\n\n                    // if we should re-upload the file immediately\n                    if (item.status === ItemStatus.PROCESSING_COMPLETE) {\n                        return revert(state.options.instantUpload);\n                    }\n\n                    // if currently uploading, cancel upload\n                    if (item.status === ItemStatus.PROCESSING) {\n                        return abort(state.options.instantUpload);\n                    }\n\n                    if (state.options.instantUpload) {\n                        upload();\n                    }\n                }, 0);\n            },\n\n            MOVE_ITEM: function MOVE_ITEM(_ref4) {\n                var query = _ref4.query,\n                    index = _ref4.index;\n                var item = getItemByQuery(state.items, query);\n                if (!item) return;\n                var currentIndex = state.items.indexOf(item);\n                index = limit(index, 0, state.items.length - 1);\n                if (currentIndex === index) return;\n                state.items.splice(index, 0, state.items.splice(currentIndex, 1)[0]);\n            },\n\n            SORT: function SORT(_ref5) {\n                var compare = _ref5.compare;\n                sortItems(state, compare);\n                dispatch('DID_SORT_ITEMS', {\n                    items: query('GET_ACTIVE_ITEMS'),\n                });\n            },\n\n            ADD_ITEMS: function ADD_ITEMS(_ref6) {\n                var items = _ref6.items,\n                    index = _ref6.index,\n                    interactionMethod = _ref6.interactionMethod,\n                    _ref6$success = _ref6.success,\n                    success = _ref6$success === void 0 ? function() {} : _ref6$success,\n                    _ref6$failure = _ref6.failure,\n                    failure = _ref6$failure === void 0 ? function() {} : _ref6$failure;\n                var currentIndex = index;\n\n                if (index === -1 || typeof index === 'undefined') {\n                    var insertLocation = query('GET_ITEM_INSERT_LOCATION');\n                    var totalItems = query('GET_TOTAL_ITEMS');\n                    currentIndex = insertLocation === 'before' ? 0 : totalItems;\n                }\n\n                var ignoredFiles = query('GET_IGNORED_FILES');\n                var isValidFile = function isValidFile(source) {\n                    return isFile(source)\n                        ? !ignoredFiles.includes(source.name.toLowerCase())\n                        : !isEmpty(source);\n                };\n                var validItems = items.filter(isValidFile);\n\n                var promises = validItems.map(function(source) {\n                    return new Promise(function(resolve, reject) {\n                        dispatch('ADD_ITEM', {\n                            interactionMethod: interactionMethod,\n                            source: source.source || source,\n                            success: resolve,\n                            failure: reject,\n                            index: currentIndex++,\n                            options: source.options || {},\n                        });\n                    });\n                });\n\n                Promise.all(promises)\n                    .then(success)\n                    .catch(failure);\n            },\n\n            /**\n             * @param source\n             * @param index\n             * @param interactionMethod\n             */\n            ADD_ITEM: function ADD_ITEM(_ref7) {\n                var source = _ref7.source,\n                    _ref7$index = _ref7.index,\n                    index = _ref7$index === void 0 ? -1 : _ref7$index,\n                    interactionMethod = _ref7.interactionMethod,\n                    _ref7$success = _ref7.success,\n                    success = _ref7$success === void 0 ? function() {} : _ref7$success,\n                    _ref7$failure = _ref7.failure,\n                    failure = _ref7$failure === void 0 ? function() {} : _ref7$failure,\n                    _ref7$options = _ref7.options,\n                    options = _ref7$options === void 0 ? {} : _ref7$options;\n                // if no source supplied\n                if (isEmpty(source)) {\n                    failure({\n                        error: createResponse('error', 0, 'No source'),\n                        file: null,\n                    });\n\n                    return;\n                }\n\n                // filter out invalid file items, used to filter dropped directory contents\n                if (\n                    isFile(source) &&\n                    state.options.ignoredFiles.includes(source.name.toLowerCase())\n                ) {\n                    // fail silently\n                    return;\n                }\n\n                // test if there's still room in the list of files\n                if (!hasRoomForItem(state)) {\n                    // if multiple allowed, we can't replace\n                    // or if only a single item is allowed but we're not allowed to replace it we exit\n                    if (\n                        state.options.allowMultiple ||\n                        (!state.options.allowMultiple && !state.options.allowReplace)\n                    ) {\n                        var error = createResponse('warning', 0, 'Max files');\n\n                        dispatch('DID_THROW_MAX_FILES', {\n                            source: source,\n                            error: error,\n                        });\n\n                        failure({ error: error, file: null });\n\n                        return;\n                    }\n\n                    // let's replace the item\n                    // id of first item we're about to remove\n                    var _item = getActiveItems(state.items)[0];\n\n                    // if has been processed remove it from the server as well\n                    if (\n                        _item.status === ItemStatus.PROCESSING_COMPLETE ||\n                        _item.status === ItemStatus.PROCESSING_REVERT_ERROR\n                    ) {\n                        var forceRevert = query('GET_FORCE_REVERT');\n                        _item\n                            .revert(\n                                createRevertFunction(\n                                    state.options.server.url,\n                                    state.options.server.revert\n                                ),\n                                forceRevert\n                            )\n                            .then(function() {\n                                if (!forceRevert) return;\n\n                                // try to add now\n                                dispatch('ADD_ITEM', {\n                                    source: source,\n                                    index: index,\n                                    interactionMethod: interactionMethod,\n                                    success: success,\n                                    failure: failure,\n                                    options: options,\n                                });\n                            })\n                            .catch(function() {}); // no need to handle this catch state for now\n\n                        if (forceRevert) return;\n                    }\n\n                    // remove first item as it will be replaced by this item\n                    dispatch('REMOVE_ITEM', { query: _item.id });\n                }\n\n                // where did the file originate\n                var origin =\n                    options.type === 'local'\n                        ? FileOrigin.LOCAL\n                        : options.type === 'limbo'\n                        ? FileOrigin.LIMBO\n                        : FileOrigin.INPUT;\n\n                // create a new blank item\n                var item = createItem(\n                    // where did this file come from\n                    origin,\n\n                    // an input file never has a server file reference\n                    origin === FileOrigin.INPUT ? null : source,\n\n                    // file mock data, if defined\n                    options.file\n                );\n\n                // set initial meta data\n                Object.keys(options.metadata || {}).forEach(function(key) {\n                    item.setMetadata(key, options.metadata[key]);\n                });\n\n                // created the item, let plugins add methods\n                applyFilters('DID_CREATE_ITEM', item, { query: query, dispatch: dispatch });\n\n                // where to insert new items\n                var itemInsertLocation = query('GET_ITEM_INSERT_LOCATION');\n\n                // adjust index if is not allowed to pick location\n                if (!state.options.itemInsertLocationFreedom) {\n                    index = itemInsertLocation === 'before' ? -1 : state.items.length;\n                }\n\n                // add item to list\n                insertItem(state.items, item, index);\n\n                // sort items in list\n                if (isFunction(itemInsertLocation) && source) {\n                    sortItems(state, itemInsertLocation);\n                }\n\n                // get a quick reference to the item id\n                var id = item.id;\n\n                // observe item events\n                item.on('init', function() {\n                    dispatch('DID_INIT_ITEM', { id: id });\n                });\n\n                item.on('load-init', function() {\n                    dispatch('DID_START_ITEM_LOAD', { id: id });\n                });\n\n                item.on('load-meta', function() {\n                    dispatch('DID_UPDATE_ITEM_META', { id: id });\n                });\n\n                item.on('load-progress', function(progress) {\n                    dispatch('DID_UPDATE_ITEM_LOAD_PROGRESS', { id: id, progress: progress });\n                });\n\n                item.on('load-request-error', function(error) {\n                    var mainStatus = dynamicLabel(state.options.labelFileLoadError)(error);\n\n                    // is client error, no way to recover\n                    if (error.code >= 400 && error.code < 500) {\n                        dispatch('DID_THROW_ITEM_INVALID', {\n                            id: id,\n                            error: error,\n                            status: {\n                                main: mainStatus,\n                                sub: error.code + ' (' + error.body + ')',\n                            },\n                        });\n\n                        // reject the file so can be dealt with through API\n                        failure({ error: error, file: createItemAPI(item) });\n                        return;\n                    }\n\n                    // is possible server error, so might be possible to retry\n                    dispatch('DID_THROW_ITEM_LOAD_ERROR', {\n                        id: id,\n                        error: error,\n                        status: {\n                            main: mainStatus,\n                            sub: state.options.labelTapToRetry,\n                        },\n                    });\n                });\n\n                item.on('load-file-error', function(error) {\n                    dispatch('DID_THROW_ITEM_INVALID', {\n                        id: id,\n                        error: error.status,\n                        status: error.status,\n                    });\n\n                    failure({ error: error.status, file: createItemAPI(item) });\n                });\n\n                item.on('load-abort', function() {\n                    dispatch('REMOVE_ITEM', { query: id });\n                });\n\n                item.on('load-skip', function() {\n                    dispatch('COMPLETE_LOAD_ITEM', {\n                        query: id,\n                        item: item,\n                        data: {\n                            source: source,\n                            success: success,\n                        },\n                    });\n                });\n\n                item.on('load', function() {\n                    var handleAdd = function handleAdd(shouldAdd) {\n                        // no should not add this file\n                        if (!shouldAdd) {\n                            dispatch('REMOVE_ITEM', {\n                                query: id,\n                            });\n\n                            return;\n                        }\n\n                        // now interested in metadata updates\n                        item.on('metadata-update', function(change) {\n                            dispatch('DID_UPDATE_ITEM_METADATA', { id: id, change: change });\n                        });\n\n                        // let plugins decide if the output data should be prepared at this point\n                        // means we'll do this and wait for idle state\n                        applyFilterChain('SHOULD_PREPARE_OUTPUT', false, {\n                            item: item,\n                            query: query,\n                        }).then(function(shouldPrepareOutput) {\n                            // plugins determined the output data should be prepared (or not), can be adjusted with beforePrepareOutput hook\n                            var beforePrepareFile = query('GET_BEFORE_PREPARE_FILE');\n                            if (beforePrepareFile)\n                                shouldPrepareOutput = beforePrepareFile(item, shouldPrepareOutput);\n\n                            var loadComplete = function loadComplete() {\n                                dispatch('COMPLETE_LOAD_ITEM', {\n                                    query: id,\n                                    item: item,\n                                    data: {\n                                        source: source,\n                                        success: success,\n                                    },\n                                });\n\n                                listUpdated(dispatch, state);\n                            };\n\n                            // exit\n                            if (shouldPrepareOutput) {\n                                // wait for idle state and then run PREPARE_OUTPUT\n                                dispatch(\n                                    'REQUEST_PREPARE_OUTPUT',\n                                    {\n                                        query: id,\n                                        item: item,\n                                        success: function success(file) {\n                                            dispatch('DID_PREPARE_OUTPUT', { id: id, file: file });\n                                            loadComplete();\n                                        },\n                                    },\n\n                                    true\n                                );\n\n                                return;\n                            }\n\n                            loadComplete();\n                        });\n                    };\n\n                    // item loaded, allow plugins to\n                    // - read data (quickly)\n                    // - add metadata\n                    applyFilterChain('DID_LOAD_ITEM', item, { query: query, dispatch: dispatch })\n                        .then(function() {\n                            optionalPromise(query('GET_BEFORE_ADD_FILE'), createItemAPI(item)).then(\n                                handleAdd\n                            );\n                        })\n                        .catch(function(e) {\n                            if (!e || !e.error || !e.status) return handleAdd(false);\n                            dispatch('DID_THROW_ITEM_INVALID', {\n                                id: id,\n                                error: e.error,\n                                status: e.status,\n                            });\n                        });\n                });\n\n                item.on('process-start', function() {\n                    dispatch('DID_START_ITEM_PROCESSING', { id: id });\n                });\n\n                item.on('process-progress', function(progress) {\n                    dispatch('DID_UPDATE_ITEM_PROCESS_PROGRESS', { id: id, progress: progress });\n                });\n\n                item.on('process-error', function(error) {\n                    dispatch('DID_THROW_ITEM_PROCESSING_ERROR', {\n                        id: id,\n                        error: error,\n                        status: {\n                            main: dynamicLabel(state.options.labelFileProcessingError)(error),\n                            sub: state.options.labelTapToRetry,\n                        },\n                    });\n                });\n\n                item.on('process-revert-error', function(error) {\n                    dispatch('DID_THROW_ITEM_PROCESSING_REVERT_ERROR', {\n                        id: id,\n                        error: error,\n                        status: {\n                            main: dynamicLabel(state.options.labelFileProcessingRevertError)(error),\n                            sub: state.options.labelTapToRetry,\n                        },\n                    });\n                });\n\n                item.on('process-complete', function(serverFileReference) {\n                    dispatch('DID_COMPLETE_ITEM_PROCESSING', {\n                        id: id,\n                        error: null,\n                        serverFileReference: serverFileReference,\n                    });\n\n                    dispatch('DID_DEFINE_VALUE', { id: id, value: serverFileReference });\n                });\n\n                item.on('process-abort', function() {\n                    dispatch('DID_ABORT_ITEM_PROCESSING', { id: id });\n                });\n\n                item.on('process-revert', function() {\n                    dispatch('DID_REVERT_ITEM_PROCESSING', { id: id });\n                    dispatch('DID_DEFINE_VALUE', { id: id, value: null });\n                });\n\n                // let view know the item has been inserted\n                dispatch('DID_ADD_ITEM', {\n                    id: id,\n                    index: index,\n                    interactionMethod: interactionMethod,\n                });\n\n                listUpdated(dispatch, state);\n\n                // start loading the source\n                var _ref8 = state.options.server || {},\n                    url = _ref8.url,\n                    load = _ref8.load,\n                    restore = _ref8.restore,\n                    fetch = _ref8.fetch;\n\n                item.load(\n                    source,\n\n                    // this creates a function that loads the file based on the type of file (string, base64, blob, file) and location of file (local, remote, limbo)\n                    createFileLoader(\n                        origin === FileOrigin.INPUT\n                            ? // input, if is remote, see if should use custom fetch, else use default fetchBlob\n                              isString(source) && isExternalURL(source)\n                                ? fetch\n                                    ? createFetchFunction(url, fetch)\n                                    : fetchBlob // remote url\n                                : fetchBlob // try to fetch url\n                            : // limbo or local\n                            origin === FileOrigin.LIMBO\n                            ? createFetchFunction(url, restore) // limbo\n                            : createFetchFunction(url, load) // local\n                    ),\n\n                    // called when the file is loaded so it can be piped through the filters\n                    function(file, success, error) {\n                        // let's process the file\n                        applyFilterChain('LOAD_FILE', file, { query: query })\n                            .then(success)\n                            .catch(error);\n                    }\n                );\n            },\n\n            REQUEST_PREPARE_OUTPUT: function REQUEST_PREPARE_OUTPUT(_ref9) {\n                var item = _ref9.item,\n                    success = _ref9.success,\n                    _ref9$failure = _ref9.failure,\n                    failure = _ref9$failure === void 0 ? function() {} : _ref9$failure;\n                // error response if item archived\n                var err = {\n                    error: createResponse('error', 0, 'Item not found'),\n                    file: null,\n                };\n\n                // don't handle archived items, an item could have been archived (load aborted) while waiting to be prepared\n                if (item.archived) return failure(err);\n\n                // allow plugins to alter the file data\n                applyFilterChain('PREPARE_OUTPUT', item.file, { query: query, item: item }).then(\n                    function(result) {\n                        applyFilterChain('COMPLETE_PREPARE_OUTPUT', result, {\n                            query: query,\n                            item: item,\n                        }).then(function(result) {\n                            // don't handle archived items, an item could have been archived (load aborted) while being prepared\n                            if (item.archived) return failure(err);\n\n                            // we done!\n                            success(result);\n                        });\n                    }\n                );\n            },\n\n            COMPLETE_LOAD_ITEM: function COMPLETE_LOAD_ITEM(_ref10) {\n                var item = _ref10.item,\n                    data = _ref10.data;\n                var success = data.success,\n                    source = data.source;\n\n                // sort items in list\n                var itemInsertLocation = query('GET_ITEM_INSERT_LOCATION');\n                if (isFunction(itemInsertLocation) && source) {\n                    sortItems(state, itemInsertLocation);\n                }\n\n                // let interface know the item has loaded\n                dispatch('DID_LOAD_ITEM', {\n                    id: item.id,\n                    error: null,\n                    serverFileReference: item.origin === FileOrigin.INPUT ? null : source,\n                });\n\n                // item has been successfully loaded and added to the\n                // list of items so can now be safely returned for use\n                success(createItemAPI(item));\n\n                // if this is a local server file we need to show a different state\n                if (item.origin === FileOrigin.LOCAL) {\n                    dispatch('DID_LOAD_LOCAL_ITEM', { id: item.id });\n                    return;\n                }\n\n                // if is a temp server file we prevent async upload call here (as the file is already on the server)\n                if (item.origin === FileOrigin.LIMBO) {\n                    dispatch('DID_COMPLETE_ITEM_PROCESSING', {\n                        id: item.id,\n                        error: null,\n                        serverFileReference: source,\n                    });\n\n                    dispatch('DID_DEFINE_VALUE', {\n                        id: item.id,\n                        value: item.serverId || source,\n                    });\n\n                    return;\n                }\n\n                // id we are allowed to upload the file immediately, lets do it\n                if (query('IS_ASYNC') && state.options.instantUpload) {\n                    dispatch('REQUEST_ITEM_PROCESSING', { query: item.id });\n                }\n            },\n\n            RETRY_ITEM_LOAD: getItemByQueryFromState(state, function(item) {\n                // try loading the source one more time\n                item.retryLoad();\n            }),\n\n            REQUEST_ITEM_PREPARE: getItemByQueryFromState(state, function(item, _success, failure) {\n                dispatch(\n                    'REQUEST_PREPARE_OUTPUT',\n                    {\n                        query: item.id,\n                        item: item,\n                        success: function success(file) {\n                            dispatch('DID_PREPARE_OUTPUT', { id: item.id, file: file });\n                            _success({\n                                file: item,\n                                output: file,\n                            });\n                        },\n                        failure: failure,\n                    },\n\n                    true\n                );\n            }),\n\n            REQUEST_ITEM_PROCESSING: getItemByQueryFromState(state, function(\n                item,\n                success,\n                failure\n            ) {\n                // cannot be queued (or is already queued)\n                var itemCanBeQueuedForProcessing =\n                    // waiting for something\n                    item.status === ItemStatus.IDLE ||\n                    // processing went wrong earlier\n                    item.status === ItemStatus.PROCESSING_ERROR;\n\n                // not ready to be processed\n                if (!itemCanBeQueuedForProcessing) {\n                    var processNow = function processNow() {\n                        return dispatch('REQUEST_ITEM_PROCESSING', {\n                            query: item,\n                            success: success,\n                            failure: failure,\n                        });\n                    };\n\n                    var process = function process() {\n                        return document.hidden ? processNow() : setTimeout(processNow, 32);\n                    };\n\n                    // if already done processing or tried to revert but didn't work, try again\n                    if (\n                        item.status === ItemStatus.PROCESSING_COMPLETE ||\n                        item.status === ItemStatus.PROCESSING_REVERT_ERROR\n                    ) {\n                        item.revert(\n                            createRevertFunction(\n                                state.options.server.url,\n                                state.options.server.revert\n                            ),\n                            query('GET_FORCE_REVERT')\n                        )\n                            .then(process)\n                            .catch(function() {}); // don't continue with processing if something went wrong\n                    } else if (item.status === ItemStatus.PROCESSING) {\n                        item.abortProcessing().then(process);\n                    }\n\n                    return;\n                }\n\n                // already queued for processing\n                if (item.status === ItemStatus.PROCESSING_QUEUED) return;\n\n                item.requestProcessing();\n\n                dispatch('DID_REQUEST_ITEM_PROCESSING', { id: item.id });\n\n                dispatch('PROCESS_ITEM', { query: item, success: success, failure: failure }, true);\n            }),\n\n            PROCESS_ITEM: getItemByQueryFromState(state, function(item, success, failure) {\n                var maxParallelUploads = query('GET_MAX_PARALLEL_UPLOADS');\n                var totalCurrentUploads = query('GET_ITEMS_BY_STATUS', ItemStatus.PROCESSING)\n                    .length;\n\n                // queue and wait till queue is freed up\n                if (totalCurrentUploads === maxParallelUploads) {\n                    // queue for later processing\n                    state.processingQueue.push({\n                        id: item.id,\n                        success: success,\n                        failure: failure,\n                    });\n\n                    // stop it!\n                    return;\n                }\n\n                // if was not queued or is already processing exit here\n                if (item.status === ItemStatus.PROCESSING) return;\n\n                var processNext = function processNext() {\n                    // process queueud items\n                    var queueEntry = state.processingQueue.shift();\n\n                    // no items left\n                    if (!queueEntry) return;\n\n                    // get item reference\n                    var id = queueEntry.id,\n                        success = queueEntry.success,\n                        failure = queueEntry.failure;\n                    var itemReference = getItemByQuery(state.items, id);\n\n                    // if item was archived while in queue, jump to next\n                    if (!itemReference || itemReference.archived) {\n                        processNext();\n                        return;\n                    }\n\n                    // process queued item\n                    dispatch(\n                        'PROCESS_ITEM',\n                        { query: id, success: success, failure: failure },\n                        true\n                    );\n                };\n\n                // we done function\n                item.onOnce('process-complete', function() {\n                    success(createItemAPI(item));\n                    processNext();\n\n                    // if origin is local, and we're instant uploading, trigger remove of original\n                    // as revert will remove file from list\n                    var server = state.options.server;\n                    var instantUpload = state.options.instantUpload;\n                    if (\n                        instantUpload &&\n                        item.origin === FileOrigin.LOCAL &&\n                        isFunction(server.remove)\n                    ) {\n                        var noop = function noop() {};\n                        item.origin = FileOrigin.LIMBO;\n                        state.options.server.remove(item.source, noop, noop);\n                    }\n\n                    // All items processed? No errors?\n                    var allItemsProcessed =\n                        query('GET_ITEMS_BY_STATUS', ItemStatus.PROCESSING_COMPLETE).length ===\n                        state.items.length;\n                    if (allItemsProcessed) {\n                        dispatch('DID_COMPLETE_ITEM_PROCESSING_ALL');\n                    }\n                });\n\n                // we error function\n                item.onOnce('process-error', function(error) {\n                    failure({ error: error, file: createItemAPI(item) });\n                    processNext();\n                });\n\n                // start file processing\n                var options = state.options;\n                item.process(\n                    createFileProcessor(\n                        createProcessorFunction(\n                            options.server.url,\n                            options.server.process,\n                            options.name,\n                            {\n                                chunkTransferId: item.transferId,\n                                chunkServer: options.server.patch,\n                                chunkUploads: options.chunkUploads,\n                                chunkForce: options.chunkForce,\n                                chunkSize: options.chunkSize,\n                                chunkRetryDelays: options.chunkRetryDelays,\n                            }\n                        ),\n\n                        {\n                            allowMinimumUploadDuration: query('GET_ALLOW_MINIMUM_UPLOAD_DURATION'),\n                        }\n                    ),\n\n                    // called when the file is about to be processed so it can be piped through the transform filters\n                    function(file, success, error) {\n                        // allow plugins to alter the file data\n                        applyFilterChain('PREPARE_OUTPUT', file, { query: query, item: item })\n                            .then(function(file) {\n                                dispatch('DID_PREPARE_OUTPUT', { id: item.id, file: file });\n\n                                success(file);\n                            })\n                            .catch(error);\n                    }\n                );\n            }),\n\n            RETRY_ITEM_PROCESSING: getItemByQueryFromState(state, function(item) {\n                dispatch('REQUEST_ITEM_PROCESSING', { query: item });\n            }),\n\n            REQUEST_REMOVE_ITEM: getItemByQueryFromState(state, function(item) {\n                optionalPromise(query('GET_BEFORE_REMOVE_FILE'), createItemAPI(item)).then(function(\n                    shouldRemove\n                ) {\n                    if (!shouldRemove) {\n                        return;\n                    }\n                    dispatch('REMOVE_ITEM', { query: item });\n                });\n            }),\n\n            RELEASE_ITEM: getItemByQueryFromState(state, function(item) {\n                item.release();\n            }),\n\n            REMOVE_ITEM: getItemByQueryFromState(state, function(item, success, failure, options) {\n                var removeFromView = function removeFromView() {\n                    // get id reference\n                    var id = item.id;\n\n                    // archive the item, this does not remove it from the list\n                    getItemById(state.items, id).archive();\n\n                    // tell the view the item has been removed\n                    dispatch('DID_REMOVE_ITEM', { error: null, id: id, item: item });\n\n                    // now the list has been modified\n                    listUpdated(dispatch, state);\n\n                    // correctly removed\n                    success(createItemAPI(item));\n                };\n\n                // if this is a local file and the `server.remove` function has been configured,\n                // send source there so dev can remove file from server\n                var server = state.options.server;\n                if (\n                    item.origin === FileOrigin.LOCAL &&\n                    server &&\n                    isFunction(server.remove) &&\n                    options.remove !== false\n                ) {\n                    dispatch('DID_START_ITEM_REMOVE', { id: item.id });\n\n                    server.remove(\n                        item.source,\n                        function() {\n                            return removeFromView();\n                        },\n                        function(status) {\n                            dispatch('DID_THROW_ITEM_REMOVE_ERROR', {\n                                id: item.id,\n                                error: createResponse('error', 0, status, null),\n                                status: {\n                                    main: dynamicLabel(state.options.labelFileRemoveError)(status),\n                                    sub: state.options.labelTapToRetry,\n                                },\n                            });\n                        }\n                    );\n                } else {\n                    // if is requesting revert and can revert need to call revert handler (not calling request_ because that would also trigger beforeRemoveHook)\n                    if (\n                        (options.revert &&\n                            item.origin !== FileOrigin.LOCAL &&\n                            item.serverId !== null) ||\n                        // if chunked uploads are enabled and we're uploading in chunks for this specific file\n                        // or if the file isn't big enough for chunked uploads but chunkForce is set then call\n                        // revert before removing from the view...\n                        (state.options.chunkUploads && item.file.size > state.options.chunkSize) ||\n                        (state.options.chunkUploads && state.options.chunkForce)\n                    ) {\n                        item.revert(\n                            createRevertFunction(\n                                state.options.server.url,\n                                state.options.server.revert\n                            ),\n                            query('GET_FORCE_REVERT')\n                        );\n                    }\n\n                    // can now safely remove from view\n                    removeFromView();\n                }\n            }),\n\n            ABORT_ITEM_LOAD: getItemByQueryFromState(state, function(item) {\n                item.abortLoad();\n            }),\n\n            ABORT_ITEM_PROCESSING: getItemByQueryFromState(state, function(item) {\n                // test if is already processed\n                if (item.serverId) {\n                    dispatch('REVERT_ITEM_PROCESSING', { id: item.id });\n                    return;\n                }\n\n                // abort\n                item.abortProcessing().then(function() {\n                    var shouldRemove = state.options.instantUpload;\n                    if (shouldRemove) {\n                        dispatch('REMOVE_ITEM', { query: item.id });\n                    }\n                });\n            }),\n\n            REQUEST_REVERT_ITEM_PROCESSING: getItemByQueryFromState(state, function(item) {\n                // not instant uploading, revert immediately\n                if (!state.options.instantUpload) {\n                    dispatch('REVERT_ITEM_PROCESSING', { query: item });\n                    return;\n                }\n\n                // if we're instant uploading the file will also be removed if we revert,\n                // so if a before remove file hook is defined we need to run it now\n                var handleRevert = function handleRevert(shouldRevert) {\n                    if (!shouldRevert) return;\n                    dispatch('REVERT_ITEM_PROCESSING', { query: item });\n                };\n\n                var fn = query('GET_BEFORE_REMOVE_FILE');\n                if (!fn) {\n                    return handleRevert(true);\n                }\n\n                var requestRemoveResult = fn(createItemAPI(item));\n                if (requestRemoveResult == null) {\n                    // undefined or null\n                    return handleRevert(true);\n                }\n\n                if (typeof requestRemoveResult === 'boolean') {\n                    return handleRevert(requestRemoveResult);\n                }\n\n                if (typeof requestRemoveResult.then === 'function') {\n                    requestRemoveResult.then(handleRevert);\n                }\n            }),\n\n            REVERT_ITEM_PROCESSING: getItemByQueryFromState(state, function(item) {\n                item.revert(\n                    createRevertFunction(state.options.server.url, state.options.server.revert),\n                    query('GET_FORCE_REVERT')\n                )\n                    .then(function() {\n                        var shouldRemove = state.options.instantUpload || isMockItem(item);\n                        if (shouldRemove) {\n                            dispatch('REMOVE_ITEM', { query: item.id });\n                        }\n                    })\n                    .catch(function() {});\n            }),\n\n            SET_OPTIONS: function SET_OPTIONS(_ref11) {\n                var options = _ref11.options;\n                // get all keys passed\n                var optionKeys = Object.keys(options);\n\n                // get prioritized keyed to include (remove once not in options object)\n                var prioritizedOptionKeys = PrioritizedOptions.filter(function(key) {\n                    return optionKeys.includes(key);\n                });\n\n                // order the keys, prioritized first, then rest\n                var orderedOptionKeys = [].concat(\n                    _toConsumableArray(prioritizedOptionKeys),\n                    _toConsumableArray(\n                        Object.keys(options).filter(function(key) {\n                            return !prioritizedOptionKeys.includes(key);\n                        })\n                    )\n                );\n\n                // dispatch set event for each option\n                orderedOptionKeys.forEach(function(key) {\n                    dispatch('SET_' + fromCamels(key, '_').toUpperCase(), {\n                        value: options[key],\n                    });\n                });\n            },\n        };\n    };\n\n    var PrioritizedOptions = ['server'];\n\n    var formatFilename = function formatFilename(name) {\n        return name;\n    };\n\n    var createElement$1 = function createElement(tagName) {\n        return document.createElement(tagName);\n    };\n\n    var text = function text(node, value) {\n        var textNode = node.childNodes[0];\n        if (!textNode) {\n            textNode = document.createTextNode(value);\n            node.appendChild(textNode);\n        } else if (value !== textNode.nodeValue) {\n            textNode.nodeValue = value;\n        }\n    };\n\n    var polarToCartesian = function polarToCartesian(centerX, centerY, radius, angleInDegrees) {\n        var angleInRadians = (((angleInDegrees % 360) - 90) * Math.PI) / 180.0;\n        return {\n            x: centerX + radius * Math.cos(angleInRadians),\n            y: centerY + radius * Math.sin(angleInRadians),\n        };\n    };\n\n    var describeArc = function describeArc(x, y, radius, startAngle, endAngle, arcSweep) {\n        var start = polarToCartesian(x, y, radius, endAngle);\n        var end = polarToCartesian(x, y, radius, startAngle);\n        return ['M', start.x, start.y, 'A', radius, radius, 0, arcSweep, 0, end.x, end.y].join(' ');\n    };\n\n    var percentageArc = function percentageArc(x, y, radius, from, to) {\n        var arcSweep = 1;\n        if (to > from && to - from <= 0.5) {\n            arcSweep = 0;\n        }\n        if (from > to && from - to >= 0.5) {\n            arcSweep = 0;\n        }\n        return describeArc(\n            x,\n            y,\n            radius,\n            Math.min(0.9999, from) * 360,\n            Math.min(0.9999, to) * 360,\n            arcSweep\n        );\n    };\n\n    var create = function create(_ref) {\n        var root = _ref.root,\n            props = _ref.props;\n        // start at 0\n        props.spin = false;\n        props.progress = 0;\n        props.opacity = 0;\n\n        // svg\n        var svg = createElement('svg');\n        root.ref.path = createElement('path', {\n            'stroke-width': 2,\n            'stroke-linecap': 'round',\n        });\n\n        svg.appendChild(root.ref.path);\n\n        root.ref.svg = svg;\n\n        root.appendChild(svg);\n    };\n\n    var write = function write(_ref2) {\n        var root = _ref2.root,\n            props = _ref2.props;\n        if (props.opacity === 0) {\n            return;\n        }\n\n        if (props.align) {\n            root.element.dataset.align = props.align;\n        }\n\n        // get width of stroke\n        var ringStrokeWidth = parseInt(attr(root.ref.path, 'stroke-width'), 10);\n\n        // calculate size of ring\n        var size = root.rect.element.width * 0.5;\n\n        // ring state\n        var ringFrom = 0;\n        var ringTo = 0;\n\n        // now in busy mode\n        if (props.spin) {\n            ringFrom = 0;\n            ringTo = 0.5;\n        } else {\n            ringFrom = 0;\n            ringTo = props.progress;\n        }\n\n        // get arc path\n        var coordinates = percentageArc(size, size, size - ringStrokeWidth, ringFrom, ringTo);\n\n        // update progress bar\n        attr(root.ref.path, 'd', coordinates);\n\n        // hide while contains 0 value\n        attr(root.ref.path, 'stroke-opacity', props.spin || props.progress > 0 ? 1 : 0);\n    };\n\n    var progressIndicator = createView({\n        tag: 'div',\n        name: 'progress-indicator',\n        ignoreRectUpdate: true,\n        ignoreRect: true,\n        create: create,\n        write: write,\n        mixins: {\n            apis: ['progress', 'spin', 'align'],\n            styles: ['opacity'],\n            animations: {\n                opacity: { type: 'tween', duration: 500 },\n                progress: {\n                    type: 'spring',\n                    stiffness: 0.95,\n                    damping: 0.65,\n                    mass: 10,\n                },\n            },\n        },\n    });\n\n    var create$1 = function create(_ref) {\n        var root = _ref.root,\n            props = _ref.props;\n        root.element.innerHTML = (props.icon || '') + ('<span>' + props.label + '</span>');\n\n        props.isDisabled = false;\n    };\n\n    var write$1 = function write(_ref2) {\n        var root = _ref2.root,\n            props = _ref2.props;\n        var isDisabled = props.isDisabled;\n        var shouldDisable = root.query('GET_DISABLED') || props.opacity === 0;\n\n        if (shouldDisable && !isDisabled) {\n            props.isDisabled = true;\n            attr(root.element, 'disabled', 'disabled');\n        } else if (!shouldDisable && isDisabled) {\n            props.isDisabled = false;\n            root.element.removeAttribute('disabled');\n        }\n    };\n\n    var fileActionButton = createView({\n        tag: 'button',\n        attributes: {\n            type: 'button',\n        },\n\n        ignoreRect: true,\n        ignoreRectUpdate: true,\n        name: 'file-action-button',\n        mixins: {\n            apis: ['label'],\n            styles: ['translateX', 'translateY', 'scaleX', 'scaleY', 'opacity'],\n            animations: {\n                scaleX: 'spring',\n                scaleY: 'spring',\n                translateX: 'spring',\n                translateY: 'spring',\n                opacity: { type: 'tween', duration: 250 },\n            },\n\n            listeners: true,\n        },\n\n        create: create$1,\n        write: write$1,\n    });\n\n    var toNaturalFileSize = function toNaturalFileSize(bytes) {\n        var decimalSeparator =\n            arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '.';\n        var base = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1000;\n        var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n        var _options$labelBytes = options.labelBytes,\n            labelBytes = _options$labelBytes === void 0 ? 'bytes' : _options$labelBytes,\n            _options$labelKilobyt = options.labelKilobytes,\n            labelKilobytes = _options$labelKilobyt === void 0 ? 'KB' : _options$labelKilobyt,\n            _options$labelMegabyt = options.labelMegabytes,\n            labelMegabytes = _options$labelMegabyt === void 0 ? 'MB' : _options$labelMegabyt,\n            _options$labelGigabyt = options.labelGigabytes,\n            labelGigabytes = _options$labelGigabyt === void 0 ? 'GB' : _options$labelGigabyt;\n\n        // no negative byte sizes\n        bytes = Math.round(Math.abs(bytes));\n\n        var KB = base;\n        var MB = base * base;\n        var GB = base * base * base;\n\n        // just bytes\n        if (bytes < KB) {\n            return bytes + ' ' + labelBytes;\n        }\n\n        // kilobytes\n        if (bytes < MB) {\n            return Math.floor(bytes / KB) + ' ' + labelKilobytes;\n        }\n\n        // megabytes\n        if (bytes < GB) {\n            return removeDecimalsWhenZero(bytes / MB, 1, decimalSeparator) + ' ' + labelMegabytes;\n        }\n\n        // gigabytes\n        return removeDecimalsWhenZero(bytes / GB, 2, decimalSeparator) + ' ' + labelGigabytes;\n    };\n\n    var removeDecimalsWhenZero = function removeDecimalsWhenZero(value, decimalCount, separator) {\n        return value\n            .toFixed(decimalCount)\n            .split('.')\n            .filter(function(part) {\n                return part !== '0';\n            })\n            .join(separator);\n    };\n\n    var create$2 = function create(_ref) {\n        var root = _ref.root,\n            props = _ref.props;\n        // filename\n        var fileName = createElement$1('span');\n        fileName.className = 'filepond--file-info-main';\n        // hide for screenreaders\n        // the file is contained in a fieldset with legend that contains the filename\n        // no need to read it twice\n        attr(fileName, 'aria-hidden', 'true');\n        root.appendChild(fileName);\n        root.ref.fileName = fileName;\n\n        // filesize\n        var fileSize = createElement$1('span');\n        fileSize.className = 'filepond--file-info-sub';\n        root.appendChild(fileSize);\n        root.ref.fileSize = fileSize;\n\n        // set initial values\n        text(fileSize, root.query('GET_LABEL_FILE_WAITING_FOR_SIZE'));\n        text(fileName, formatFilename(root.query('GET_ITEM_NAME', props.id)));\n    };\n\n    var updateFile = function updateFile(_ref2) {\n        var root = _ref2.root,\n            props = _ref2.props;\n        text(\n            root.ref.fileSize,\n            toNaturalFileSize(\n                root.query('GET_ITEM_SIZE', props.id),\n                '.',\n                root.query('GET_FILE_SIZE_BASE'),\n                root.query('GET_FILE_SIZE_LABELS', root.query)\n            )\n        );\n\n        text(root.ref.fileName, formatFilename(root.query('GET_ITEM_NAME', props.id)));\n    };\n\n    var updateFileSizeOnError = function updateFileSizeOnError(_ref3) {\n        var root = _ref3.root,\n            props = _ref3.props;\n        // if size is available don't fallback to unknown size message\n        if (isInt(root.query('GET_ITEM_SIZE', props.id))) {\n            updateFile({ root: root, props: props });\n            return;\n        }\n\n        text(root.ref.fileSize, root.query('GET_LABEL_FILE_SIZE_NOT_AVAILABLE'));\n    };\n\n    var fileInfo = createView({\n        name: 'file-info',\n        ignoreRect: true,\n        ignoreRectUpdate: true,\n        write: createRoute({\n            DID_LOAD_ITEM: updateFile,\n            DID_UPDATE_ITEM_META: updateFile,\n            DID_THROW_ITEM_LOAD_ERROR: updateFileSizeOnError,\n            DID_THROW_ITEM_INVALID: updateFileSizeOnError,\n        }),\n\n        didCreateView: function didCreateView(root) {\n            applyFilters('CREATE_VIEW', Object.assign({}, root, { view: root }));\n        },\n        create: create$2,\n        mixins: {\n            styles: ['translateX', 'translateY'],\n            animations: {\n                translateX: 'spring',\n                translateY: 'spring',\n            },\n        },\n    });\n\n    var toPercentage = function toPercentage(value) {\n        return Math.round(value * 100);\n    };\n\n    var create$3 = function create(_ref) {\n        var root = _ref.root;\n\n        // main status\n        var main = createElement$1('span');\n        main.className = 'filepond--file-status-main';\n        root.appendChild(main);\n        root.ref.main = main;\n\n        // sub status\n        var sub = createElement$1('span');\n        sub.className = 'filepond--file-status-sub';\n        root.appendChild(sub);\n        root.ref.sub = sub;\n\n        didSetItemLoadProgress({ root: root, action: { progress: null } });\n    };\n\n    var didSetItemLoadProgress = function didSetItemLoadProgress(_ref2) {\n        var root = _ref2.root,\n            action = _ref2.action;\n        var title =\n            action.progress === null\n                ? root.query('GET_LABEL_FILE_LOADING')\n                : root.query('GET_LABEL_FILE_LOADING') + ' ' + toPercentage(action.progress) + '%';\n\n        text(root.ref.main, title);\n        text(root.ref.sub, root.query('GET_LABEL_TAP_TO_CANCEL'));\n    };\n\n    var didSetItemProcessProgress = function didSetItemProcessProgress(_ref3) {\n        var root = _ref3.root,\n            action = _ref3.action;\n        var title =\n            action.progress === null\n                ? root.query('GET_LABEL_FILE_PROCESSING')\n                : root.query('GET_LABEL_FILE_PROCESSING') +\n                  ' ' +\n                  toPercentage(action.progress) +\n                  '%';\n\n        text(root.ref.main, title);\n        text(root.ref.sub, root.query('GET_LABEL_TAP_TO_CANCEL'));\n    };\n\n    var didRequestItemProcessing = function didRequestItemProcessing(_ref4) {\n        var root = _ref4.root;\n        text(root.ref.main, root.query('GET_LABEL_FILE_PROCESSING'));\n        text(root.ref.sub, root.query('GET_LABEL_TAP_TO_CANCEL'));\n    };\n\n    var didAbortItemProcessing = function didAbortItemProcessing(_ref5) {\n        var root = _ref5.root;\n        text(root.ref.main, root.query('GET_LABEL_FILE_PROCESSING_ABORTED'));\n        text(root.ref.sub, root.query('GET_LABEL_TAP_TO_RETRY'));\n    };\n\n    var didCompleteItemProcessing = function didCompleteItemProcessing(_ref6) {\n        var root = _ref6.root;\n        text(root.ref.main, root.query('GET_LABEL_FILE_PROCESSING_COMPLETE'));\n        text(root.ref.sub, root.query('GET_LABEL_TAP_TO_UNDO'));\n    };\n\n    var clear = function clear(_ref7) {\n        var root = _ref7.root;\n        text(root.ref.main, '');\n        text(root.ref.sub, '');\n    };\n\n    var error = function error(_ref8) {\n        var root = _ref8.root,\n            action = _ref8.action;\n        text(root.ref.main, action.status.main);\n        text(root.ref.sub, action.status.sub);\n    };\n\n    var fileStatus = createView({\n        name: 'file-status',\n        ignoreRect: true,\n        ignoreRectUpdate: true,\n        write: createRoute({\n            DID_LOAD_ITEM: clear,\n            DID_REVERT_ITEM_PROCESSING: clear,\n            DID_REQUEST_ITEM_PROCESSING: didRequestItemProcessing,\n            DID_ABORT_ITEM_PROCESSING: didAbortItemProcessing,\n            DID_COMPLETE_ITEM_PROCESSING: didCompleteItemProcessing,\n            DID_UPDATE_ITEM_PROCESS_PROGRESS: didSetItemProcessProgress,\n            DID_UPDATE_ITEM_LOAD_PROGRESS: didSetItemLoadProgress,\n            DID_THROW_ITEM_LOAD_ERROR: error,\n            DID_THROW_ITEM_INVALID: error,\n            DID_THROW_ITEM_PROCESSING_ERROR: error,\n            DID_THROW_ITEM_PROCESSING_REVERT_ERROR: error,\n            DID_THROW_ITEM_REMOVE_ERROR: error,\n        }),\n\n        didCreateView: function didCreateView(root) {\n            applyFilters('CREATE_VIEW', Object.assign({}, root, { view: root }));\n        },\n        create: create$3,\n        mixins: {\n            styles: ['translateX', 'translateY', 'opacity'],\n            animations: {\n                opacity: { type: 'tween', duration: 250 },\n                translateX: 'spring',\n                translateY: 'spring',\n            },\n        },\n    });\n\n    /**\n     * Button definitions for the file view\n     */\n\n    var Buttons = {\n        AbortItemLoad: {\n            label: 'GET_LABEL_BUTTON_ABORT_ITEM_LOAD',\n            action: 'ABORT_ITEM_LOAD',\n            className: 'filepond--action-abort-item-load',\n            align: 'LOAD_INDICATOR_POSITION', // right\n        },\n        RetryItemLoad: {\n            label: 'GET_LABEL_BUTTON_RETRY_ITEM_LOAD',\n            action: 'RETRY_ITEM_LOAD',\n            icon: 'GET_ICON_RETRY',\n            className: 'filepond--action-retry-item-load',\n            align: 'BUTTON_PROCESS_ITEM_POSITION', // right\n        },\n        RemoveItem: {\n            label: 'GET_LABEL_BUTTON_REMOVE_ITEM',\n            action: 'REQUEST_REMOVE_ITEM',\n            icon: 'GET_ICON_REMOVE',\n            className: 'filepond--action-remove-item',\n            align: 'BUTTON_REMOVE_ITEM_POSITION', // left\n        },\n        ProcessItem: {\n            label: 'GET_LABEL_BUTTON_PROCESS_ITEM',\n            action: 'REQUEST_ITEM_PROCESSING',\n            icon: 'GET_ICON_PROCESS',\n            className: 'filepond--action-process-item',\n            align: 'BUTTON_PROCESS_ITEM_POSITION', // right\n        },\n        AbortItemProcessing: {\n            label: 'GET_LABEL_BUTTON_ABORT_ITEM_PROCESSING',\n            action: 'ABORT_ITEM_PROCESSING',\n            className: 'filepond--action-abort-item-processing',\n            align: 'BUTTON_PROCESS_ITEM_POSITION', // right\n        },\n        RetryItemProcessing: {\n            label: 'GET_LABEL_BUTTON_RETRY_ITEM_PROCESSING',\n            action: 'RETRY_ITEM_PROCESSING',\n            icon: 'GET_ICON_RETRY',\n            className: 'filepond--action-retry-item-processing',\n            align: 'BUTTON_PROCESS_ITEM_POSITION', // right\n        },\n        RevertItemProcessing: {\n            label: 'GET_LABEL_BUTTON_UNDO_ITEM_PROCESSING',\n            action: 'REQUEST_REVERT_ITEM_PROCESSING',\n            icon: 'GET_ICON_UNDO',\n            className: 'filepond--action-revert-item-processing',\n            align: 'BUTTON_PROCESS_ITEM_POSITION', // right\n        },\n    };\n\n    // make a list of buttons, we can then remove buttons from this list if they're disabled\n    var ButtonKeys = [];\n    forin(Buttons, function(key) {\n        ButtonKeys.push(key);\n    });\n\n    var calculateFileInfoOffset = function calculateFileInfoOffset(root) {\n        if (getRemoveIndicatorAligment(root) === 'right') return 0;\n        var buttonRect = root.ref.buttonRemoveItem.rect.element;\n        return buttonRect.hidden ? null : buttonRect.width + buttonRect.left;\n    };\n\n    var calculateButtonWidth = function calculateButtonWidth(root) {\n        var buttonRect = root.ref.buttonAbortItemLoad.rect.element;\n        return buttonRect.width;\n    };\n\n    // Force on full pixels so text stays crips\n    var calculateFileVerticalCenterOffset = function calculateFileVerticalCenterOffset(root) {\n        return Math.floor(root.ref.buttonRemoveItem.rect.element.height / 4);\n    };\n    var calculateFileHorizontalCenterOffset = function calculateFileHorizontalCenterOffset(root) {\n        return Math.floor(root.ref.buttonRemoveItem.rect.element.left / 2);\n    };\n\n    var getLoadIndicatorAlignment = function getLoadIndicatorAlignment(root) {\n        return root.query('GET_STYLE_LOAD_INDICATOR_POSITION');\n    };\n    var getProcessIndicatorAlignment = function getProcessIndicatorAlignment(root) {\n        return root.query('GET_STYLE_PROGRESS_INDICATOR_POSITION');\n    };\n    var getRemoveIndicatorAligment = function getRemoveIndicatorAligment(root) {\n        return root.query('GET_STYLE_BUTTON_REMOVE_ITEM_POSITION');\n    };\n\n    var DefaultStyle = {\n        buttonAbortItemLoad: { opacity: 0 },\n        buttonRetryItemLoad: { opacity: 0 },\n        buttonRemoveItem: { opacity: 0 },\n        buttonProcessItem: { opacity: 0 },\n        buttonAbortItemProcessing: { opacity: 0 },\n        buttonRetryItemProcessing: { opacity: 0 },\n        buttonRevertItemProcessing: { opacity: 0 },\n        loadProgressIndicator: { opacity: 0, align: getLoadIndicatorAlignment },\n        processProgressIndicator: { opacity: 0, align: getProcessIndicatorAlignment },\n        processingCompleteIndicator: { opacity: 0, scaleX: 0.75, scaleY: 0.75 },\n        info: { translateX: 0, translateY: 0, opacity: 0 },\n        status: { translateX: 0, translateY: 0, opacity: 0 },\n    };\n\n    var IdleStyle = {\n        buttonRemoveItem: { opacity: 1 },\n        buttonProcessItem: { opacity: 1 },\n        info: { translateX: calculateFileInfoOffset },\n        status: { translateX: calculateFileInfoOffset },\n    };\n\n    var ProcessingStyle = {\n        buttonAbortItemProcessing: { opacity: 1 },\n        processProgressIndicator: { opacity: 1 },\n        status: { opacity: 1 },\n    };\n\n    var StyleMap = {\n        DID_THROW_ITEM_INVALID: {\n            buttonRemoveItem: { opacity: 1 },\n            info: { translateX: calculateFileInfoOffset },\n            status: { translateX: calculateFileInfoOffset, opacity: 1 },\n        },\n\n        DID_START_ITEM_LOAD: {\n            buttonAbortItemLoad: { opacity: 1 },\n            loadProgressIndicator: { opacity: 1 },\n            status: { opacity: 1 },\n        },\n\n        DID_THROW_ITEM_LOAD_ERROR: {\n            buttonRetryItemLoad: { opacity: 1 },\n            buttonRemoveItem: { opacity: 1 },\n            info: { translateX: calculateFileInfoOffset },\n            status: { opacity: 1 },\n        },\n\n        DID_START_ITEM_REMOVE: {\n            processProgressIndicator: { opacity: 1, align: getRemoveIndicatorAligment },\n            info: { translateX: calculateFileInfoOffset },\n            status: { opacity: 0 },\n        },\n\n        DID_THROW_ITEM_REMOVE_ERROR: {\n            processProgressIndicator: { opacity: 0, align: getRemoveIndicatorAligment },\n            buttonRemoveItem: { opacity: 1 },\n            info: { translateX: calculateFileInfoOffset },\n            status: { opacity: 1, translateX: calculateFileInfoOffset },\n        },\n\n        DID_LOAD_ITEM: IdleStyle,\n        DID_LOAD_LOCAL_ITEM: {\n            buttonRemoveItem: { opacity: 1 },\n            info: { translateX: calculateFileInfoOffset },\n            status: { translateX: calculateFileInfoOffset },\n        },\n\n        DID_START_ITEM_PROCESSING: ProcessingStyle,\n        DID_REQUEST_ITEM_PROCESSING: ProcessingStyle,\n        DID_UPDATE_ITEM_PROCESS_PROGRESS: ProcessingStyle,\n        DID_COMPLETE_ITEM_PROCESSING: {\n            buttonRevertItemProcessing: { opacity: 1 },\n            info: { opacity: 1 },\n            status: { opacity: 1 },\n        },\n\n        DID_THROW_ITEM_PROCESSING_ERROR: {\n            buttonRemoveItem: { opacity: 1 },\n            buttonRetryItemProcessing: { opacity: 1 },\n            status: { opacity: 1 },\n            info: { translateX: calculateFileInfoOffset },\n        },\n\n        DID_THROW_ITEM_PROCESSING_REVERT_ERROR: {\n            buttonRevertItemProcessing: { opacity: 1 },\n            status: { opacity: 1 },\n            info: { opacity: 1 },\n        },\n\n        DID_ABORT_ITEM_PROCESSING: {\n            buttonRemoveItem: { opacity: 1 },\n            buttonProcessItem: { opacity: 1 },\n            info: { translateX: calculateFileInfoOffset },\n            status: { opacity: 1 },\n        },\n\n        DID_REVERT_ITEM_PROCESSING: IdleStyle,\n    };\n\n    // complete indicator view\n    var processingCompleteIndicatorView = createView({\n        create: function create(_ref) {\n            var root = _ref.root;\n            root.element.innerHTML = root.query('GET_ICON_DONE');\n        },\n        name: 'processing-complete-indicator',\n        ignoreRect: true,\n        mixins: {\n            styles: ['scaleX', 'scaleY', 'opacity'],\n            animations: {\n                scaleX: 'spring',\n                scaleY: 'spring',\n                opacity: { type: 'tween', duration: 250 },\n            },\n        },\n    });\n\n    /**\n     * Creates the file view\n     */\n    var create$4 = function create(_ref2) {\n        var root = _ref2.root,\n            props = _ref2.props;\n        // copy Buttons object\n        var LocalButtons = Object.keys(Buttons).reduce(function(prev, curr) {\n            prev[curr] = Object.assign({}, Buttons[curr]);\n            return prev;\n        }, {});\n        var id = props.id;\n\n        // allow reverting upload\n        var allowRevert = root.query('GET_ALLOW_REVERT');\n\n        // allow remove file\n        var allowRemove = root.query('GET_ALLOW_REMOVE');\n\n        // allow processing upload\n        var allowProcess = root.query('GET_ALLOW_PROCESS');\n\n        // is instant uploading, need this to determine the icon of the undo button\n        var instantUpload = root.query('GET_INSTANT_UPLOAD');\n\n        // is async set up\n        var isAsync = root.query('IS_ASYNC');\n\n        // should align remove item buttons\n        var alignRemoveItemButton = root.query('GET_STYLE_BUTTON_REMOVE_ITEM_ALIGN');\n\n        // enabled buttons array\n        var buttonFilter;\n        if (isAsync) {\n            if (allowProcess && !allowRevert) {\n                // only remove revert button\n                buttonFilter = function buttonFilter(key) {\n                    return !/RevertItemProcessing/.test(key);\n                };\n            } else if (!allowProcess && allowRevert) {\n                // only remove process button\n                buttonFilter = function buttonFilter(key) {\n                    return !/ProcessItem|RetryItemProcessing|AbortItemProcessing/.test(key);\n                };\n            } else if (!allowProcess && !allowRevert) {\n                // remove all process buttons\n                buttonFilter = function buttonFilter(key) {\n                    return !/Process/.test(key);\n                };\n            }\n        } else {\n            // no process controls available\n            buttonFilter = function buttonFilter(key) {\n                return !/Process/.test(key);\n            };\n        }\n\n        var enabledButtons = buttonFilter ? ButtonKeys.filter(buttonFilter) : ButtonKeys.concat();\n\n        // update icon and label for revert button when instant uploading\n        if (instantUpload && allowRevert) {\n            LocalButtons['RevertItemProcessing'].label = 'GET_LABEL_BUTTON_REMOVE_ITEM';\n            LocalButtons['RevertItemProcessing'].icon = 'GET_ICON_REMOVE';\n        }\n\n        // remove last button (revert) if not allowed\n        if (isAsync && !allowRevert) {\n            var map = StyleMap['DID_COMPLETE_ITEM_PROCESSING'];\n            map.info.translateX = calculateFileHorizontalCenterOffset;\n            map.info.translateY = calculateFileVerticalCenterOffset;\n            map.status.translateY = calculateFileVerticalCenterOffset;\n            map.processingCompleteIndicator = { opacity: 1, scaleX: 1, scaleY: 1 };\n        }\n\n        // should align center\n        if (isAsync && !allowProcess) {\n            [\n                'DID_START_ITEM_PROCESSING',\n                'DID_REQUEST_ITEM_PROCESSING',\n                'DID_UPDATE_ITEM_PROCESS_PROGRESS',\n                'DID_THROW_ITEM_PROCESSING_ERROR',\n            ].forEach(function(key) {\n                StyleMap[key].status.translateY = calculateFileVerticalCenterOffset;\n            });\n            StyleMap['DID_THROW_ITEM_PROCESSING_ERROR'].status.translateX = calculateButtonWidth;\n        }\n\n        // move remove button to right\n        if (alignRemoveItemButton && allowRevert) {\n            LocalButtons['RevertItemProcessing'].align = 'BUTTON_REMOVE_ITEM_POSITION';\n            var _map = StyleMap['DID_COMPLETE_ITEM_PROCESSING'];\n            _map.info.translateX = calculateFileInfoOffset;\n            _map.status.translateY = calculateFileVerticalCenterOffset;\n            _map.processingCompleteIndicator = { opacity: 1, scaleX: 1, scaleY: 1 };\n        }\n\n        // show/hide RemoveItem button\n        if (!allowRemove) {\n            LocalButtons['RemoveItem'].disabled = true;\n        }\n\n        // create the button views\n        forin(LocalButtons, function(key, definition) {\n            // create button\n            var buttonView = root.createChildView(fileActionButton, {\n                label: root.query(definition.label),\n                icon: root.query(definition.icon),\n                opacity: 0,\n            });\n\n            // should be appended?\n            if (enabledButtons.includes(key)) {\n                root.appendChildView(buttonView);\n            }\n\n            // toggle\n            if (definition.disabled) {\n                buttonView.element.setAttribute('disabled', 'disabled');\n                buttonView.element.setAttribute('hidden', 'hidden');\n            }\n\n            // add position attribute\n            buttonView.element.dataset.align = root.query('GET_STYLE_' + definition.align);\n\n            // add class\n            buttonView.element.classList.add(definition.className);\n\n            // handle interactions\n            buttonView.on('click', function(e) {\n                e.stopPropagation();\n                if (definition.disabled) return;\n                root.dispatch(definition.action, { query: id });\n            });\n\n            // set reference\n            root.ref['button' + key] = buttonView;\n        });\n\n        // checkmark\n        root.ref.processingCompleteIndicator = root.appendChildView(\n            root.createChildView(processingCompleteIndicatorView)\n        );\n\n        root.ref.processingCompleteIndicator.element.dataset.align = root.query(\n            'GET_STYLE_BUTTON_PROCESS_ITEM_POSITION'\n        );\n\n        // create file info view\n        root.ref.info = root.appendChildView(root.createChildView(fileInfo, { id: id }));\n\n        // create file status view\n        root.ref.status = root.appendChildView(root.createChildView(fileStatus, { id: id }));\n\n        // add progress indicators\n        var loadIndicatorView = root.appendChildView(\n            root.createChildView(progressIndicator, {\n                opacity: 0,\n                align: root.query('GET_STYLE_LOAD_INDICATOR_POSITION'),\n            })\n        );\n\n        loadIndicatorView.element.classList.add('filepond--load-indicator');\n        root.ref.loadProgressIndicator = loadIndicatorView;\n\n        var progressIndicatorView = root.appendChildView(\n            root.createChildView(progressIndicator, {\n                opacity: 0,\n                align: root.query('GET_STYLE_PROGRESS_INDICATOR_POSITION'),\n            })\n        );\n\n        progressIndicatorView.element.classList.add('filepond--process-indicator');\n        root.ref.processProgressIndicator = progressIndicatorView;\n\n        // current active styles\n        root.ref.activeStyles = [];\n    };\n\n    var write$2 = function write(_ref3) {\n        var root = _ref3.root,\n            actions = _ref3.actions,\n            props = _ref3.props;\n        // route actions\n        route({ root: root, actions: actions, props: props });\n\n        // select last state change action\n        var action = actions\n            .concat()\n            .filter(function(action) {\n                return /^DID_/.test(action.type);\n            })\n            .reverse()\n            .find(function(action) {\n                return StyleMap[action.type];\n            });\n\n        // a new action happened, let's get the matching styles\n        if (action) {\n            // define new active styles\n            root.ref.activeStyles = [];\n\n            var stylesToApply = StyleMap[action.type];\n            forin(DefaultStyle, function(name, defaultStyles) {\n                // get reference to control\n                var control = root.ref[name];\n\n                // loop over all styles for this control\n                forin(defaultStyles, function(key, defaultValue) {\n                    var value =\n                        stylesToApply[name] && typeof stylesToApply[name][key] !== 'undefined'\n                            ? stylesToApply[name][key]\n                            : defaultValue;\n                    root.ref.activeStyles.push({ control: control, key: key, value: value });\n                });\n            });\n        }\n\n        // apply active styles to element\n        root.ref.activeStyles.forEach(function(_ref4) {\n            var control = _ref4.control,\n                key = _ref4.key,\n                value = _ref4.value;\n            control[key] = typeof value === 'function' ? value(root) : value;\n        });\n    };\n\n    var route = createRoute({\n        DID_SET_LABEL_BUTTON_ABORT_ITEM_PROCESSING: function DID_SET_LABEL_BUTTON_ABORT_ITEM_PROCESSING(\n            _ref5\n        ) {\n            var root = _ref5.root,\n                action = _ref5.action;\n            root.ref.buttonAbortItemProcessing.label = action.value;\n        },\n        DID_SET_LABEL_BUTTON_ABORT_ITEM_LOAD: function DID_SET_LABEL_BUTTON_ABORT_ITEM_LOAD(_ref6) {\n            var root = _ref6.root,\n                action = _ref6.action;\n            root.ref.buttonAbortItemLoad.label = action.value;\n        },\n        DID_SET_LABEL_BUTTON_ABORT_ITEM_REMOVAL: function DID_SET_LABEL_BUTTON_ABORT_ITEM_REMOVAL(\n            _ref7\n        ) {\n            var root = _ref7.root,\n                action = _ref7.action;\n            root.ref.buttonAbortItemRemoval.label = action.value;\n        },\n        DID_REQUEST_ITEM_PROCESSING: function DID_REQUEST_ITEM_PROCESSING(_ref8) {\n            var root = _ref8.root;\n            root.ref.processProgressIndicator.spin = true;\n            root.ref.processProgressIndicator.progress = 0;\n        },\n        DID_START_ITEM_LOAD: function DID_START_ITEM_LOAD(_ref9) {\n            var root = _ref9.root;\n            root.ref.loadProgressIndicator.spin = true;\n            root.ref.loadProgressIndicator.progress = 0;\n        },\n        DID_START_ITEM_REMOVE: function DID_START_ITEM_REMOVE(_ref10) {\n            var root = _ref10.root;\n            root.ref.processProgressIndicator.spin = true;\n            root.ref.processProgressIndicator.progress = 0;\n        },\n        DID_UPDATE_ITEM_LOAD_PROGRESS: function DID_UPDATE_ITEM_LOAD_PROGRESS(_ref11) {\n            var root = _ref11.root,\n                action = _ref11.action;\n            root.ref.loadProgressIndicator.spin = false;\n            root.ref.loadProgressIndicator.progress = action.progress;\n        },\n        DID_UPDATE_ITEM_PROCESS_PROGRESS: function DID_UPDATE_ITEM_PROCESS_PROGRESS(_ref12) {\n            var root = _ref12.root,\n                action = _ref12.action;\n            root.ref.processProgressIndicator.spin = false;\n            root.ref.processProgressIndicator.progress = action.progress;\n        },\n    });\n\n    var file = createView({\n        create: create$4,\n        write: write$2,\n        didCreateView: function didCreateView(root) {\n            applyFilters('CREATE_VIEW', Object.assign({}, root, { view: root }));\n        },\n        name: 'file',\n    });\n\n    /**\n     * Creates the file view\n     */\n    var create$5 = function create(_ref) {\n        var root = _ref.root,\n            props = _ref.props;\n\n        // filename\n        root.ref.fileName = createElement$1('legend');\n        root.appendChild(root.ref.fileName);\n\n        // file appended\n        root.ref.file = root.appendChildView(root.createChildView(file, { id: props.id }));\n\n        // data has moved to data.js\n        root.ref.data = false;\n    };\n\n    /**\n     * Data storage\n     */\n    var didLoadItem = function didLoadItem(_ref2) {\n        var root = _ref2.root,\n            props = _ref2.props;\n        // updates the legend of the fieldset so screenreaders can better group buttons\n        text(root.ref.fileName, formatFilename(root.query('GET_ITEM_NAME', props.id)));\n    };\n\n    var fileWrapper = createView({\n        create: create$5,\n        ignoreRect: true,\n        write: createRoute({\n            DID_LOAD_ITEM: didLoadItem,\n        }),\n\n        didCreateView: function didCreateView(root) {\n            applyFilters('CREATE_VIEW', Object.assign({}, root, { view: root }));\n        },\n        tag: 'fieldset',\n        name: 'file-wrapper',\n    });\n\n    var PANEL_SPRING_PROPS = { type: 'spring', damping: 0.6, mass: 7 };\n\n    var create$6 = function create(_ref) {\n        var root = _ref.root,\n            props = _ref.props;\n        [\n            {\n                name: 'top',\n            },\n\n            {\n                name: 'center',\n                props: {\n                    translateY: null,\n                    scaleY: null,\n                },\n\n                mixins: {\n                    animations: {\n                        scaleY: PANEL_SPRING_PROPS,\n                    },\n\n                    styles: ['translateY', 'scaleY'],\n                },\n            },\n\n            {\n                name: 'bottom',\n                props: {\n                    translateY: null,\n                },\n\n                mixins: {\n                    animations: {\n                        translateY: PANEL_SPRING_PROPS,\n                    },\n\n                    styles: ['translateY'],\n                },\n            },\n        ].forEach(function(section) {\n            createSection(root, section, props.name);\n        });\n\n        root.element.classList.add('filepond--' + props.name);\n\n        root.ref.scalable = null;\n    };\n\n    var createSection = function createSection(root, section, className) {\n        var viewConstructor = createView({\n            name: 'panel-' + section.name + ' filepond--' + className,\n            mixins: section.mixins,\n            ignoreRectUpdate: true,\n        });\n\n        var view = root.createChildView(viewConstructor, section.props);\n\n        root.ref[section.name] = root.appendChildView(view);\n    };\n\n    var write$3 = function write(_ref2) {\n        var root = _ref2.root,\n            props = _ref2.props;\n\n        // update scalable state\n        if (root.ref.scalable === null || props.scalable !== root.ref.scalable) {\n            root.ref.scalable = isBoolean(props.scalable) ? props.scalable : true;\n            root.element.dataset.scalable = root.ref.scalable;\n        }\n\n        // no height, can't set\n        if (!props.height) return;\n\n        // get child rects\n        var topRect = root.ref.top.rect.element;\n        var bottomRect = root.ref.bottom.rect.element;\n\n        // make sure height never is smaller than bottom and top seciton heights combined (will probably never happen, but who knows)\n        var height = Math.max(topRect.height + bottomRect.height, props.height);\n\n        // offset center part\n        root.ref.center.translateY = topRect.height;\n\n        // scale center part\n        // use math ceil to prevent transparent lines because of rounding errors\n        root.ref.center.scaleY = (height - topRect.height - bottomRect.height) / 100;\n\n        // offset bottom part\n        root.ref.bottom.translateY = height - bottomRect.height;\n    };\n\n    var panel = createView({\n        name: 'panel',\n        read: function read(_ref3) {\n            var root = _ref3.root,\n                props = _ref3.props;\n            return (props.heightCurrent = root.ref.bottom.translateY);\n        },\n        write: write$3,\n        create: create$6,\n        ignoreRect: true,\n        mixins: {\n            apis: ['height', 'heightCurrent', 'scalable'],\n        },\n    });\n\n    var createDragHelper = function createDragHelper(items) {\n        var itemIds = items.map(function(item) {\n            return item.id;\n        });\n        var prevIndex = undefined;\n        return {\n            setIndex: function setIndex(index) {\n                prevIndex = index;\n            },\n            getIndex: function getIndex() {\n                return prevIndex;\n            },\n            getItemIndex: function getItemIndex(item) {\n                return itemIds.indexOf(item.id);\n            },\n        };\n    };\n\n    var ITEM_TRANSLATE_SPRING = {\n        type: 'spring',\n        stiffness: 0.75,\n        damping: 0.45,\n        mass: 10,\n    };\n\n    var ITEM_SCALE_SPRING = 'spring';\n\n    var StateMap = {\n        DID_START_ITEM_LOAD: 'busy',\n        DID_UPDATE_ITEM_LOAD_PROGRESS: 'loading',\n        DID_THROW_ITEM_INVALID: 'load-invalid',\n        DID_THROW_ITEM_LOAD_ERROR: 'load-error',\n        DID_LOAD_ITEM: 'idle',\n        DID_THROW_ITEM_REMOVE_ERROR: 'remove-error',\n        DID_START_ITEM_REMOVE: 'busy',\n        DID_START_ITEM_PROCESSING: 'busy processing',\n        DID_REQUEST_ITEM_PROCESSING: 'busy processing',\n        DID_UPDATE_ITEM_PROCESS_PROGRESS: 'processing',\n        DID_COMPLETE_ITEM_PROCESSING: 'processing-complete',\n        DID_THROW_ITEM_PROCESSING_ERROR: 'processing-error',\n        DID_THROW_ITEM_PROCESSING_REVERT_ERROR: 'processing-revert-error',\n        DID_ABORT_ITEM_PROCESSING: 'cancelled',\n        DID_REVERT_ITEM_PROCESSING: 'idle',\n    };\n\n    /**\n     * Creates the file view\n     */\n    var create$7 = function create(_ref) {\n        var root = _ref.root,\n            props = _ref.props;\n\n        // select\n        root.ref.handleClick = function(e) {\n            return root.dispatch('DID_ACTIVATE_ITEM', { id: props.id });\n        };\n\n        // set id\n        root.element.id = 'filepond--item-' + props.id;\n        root.element.addEventListener('click', root.ref.handleClick);\n\n        // file view\n        root.ref.container = root.appendChildView(\n            root.createChildView(fileWrapper, { id: props.id })\n        );\n\n        // file panel\n        root.ref.panel = root.appendChildView(root.createChildView(panel, { name: 'item-panel' }));\n\n        // default start height\n        root.ref.panel.height = null;\n\n        // by default not marked for removal\n        props.markedForRemoval = false;\n\n        // if not allowed to reorder file items, exit here\n        if (!root.query('GET_ALLOW_REORDER')) return;\n\n        // set to idle so shows grab cursor\n        root.element.dataset.dragState = 'idle';\n\n        var grab = function grab(e) {\n            if (!e.isPrimary) return;\n\n            var removedActivateListener = false;\n\n            var origin = {\n                x: e.pageX,\n                y: e.pageY,\n            };\n\n            props.dragOrigin = {\n                x: root.translateX,\n                y: root.translateY,\n            };\n\n            props.dragCenter = {\n                x: e.offsetX,\n                y: e.offsetY,\n            };\n\n            var dragState = createDragHelper(root.query('GET_ACTIVE_ITEMS'));\n\n            root.dispatch('DID_GRAB_ITEM', { id: props.id, dragState: dragState });\n\n            var drag = function drag(e) {\n                if (!e.isPrimary) return;\n\n                e.stopPropagation();\n                e.preventDefault();\n\n                props.dragOffset = {\n                    x: e.pageX - origin.x,\n                    y: e.pageY - origin.y,\n                };\n\n                // if dragged stop listening to clicks, will re-add when done dragging\n                var dist =\n                    props.dragOffset.x * props.dragOffset.x +\n                    props.dragOffset.y * props.dragOffset.y;\n                if (dist > 16 && !removedActivateListener) {\n                    removedActivateListener = true;\n                    root.element.removeEventListener('click', root.ref.handleClick);\n                }\n\n                root.dispatch('DID_DRAG_ITEM', { id: props.id, dragState: dragState });\n            };\n\n            var drop = function drop(e) {\n                if (!e.isPrimary) return;\n\n                document.removeEventListener('pointermove', drag);\n                document.removeEventListener('pointerup', drop);\n\n                props.dragOffset = {\n                    x: e.pageX - origin.x,\n                    y: e.pageY - origin.y,\n                };\n\n                root.dispatch('DID_DROP_ITEM', { id: props.id, dragState: dragState });\n\n                // start listening to clicks again\n                if (removedActivateListener) {\n                    setTimeout(function() {\n                        return root.element.addEventListener('click', root.ref.handleClick);\n                    }, 0);\n                }\n            };\n\n            document.addEventListener('pointermove', drag);\n            document.addEventListener('pointerup', drop);\n        };\n\n        root.element.addEventListener('pointerdown', grab);\n    };\n\n    var route$1 = createRoute({\n        DID_UPDATE_PANEL_HEIGHT: function DID_UPDATE_PANEL_HEIGHT(_ref2) {\n            var root = _ref2.root,\n                action = _ref2.action;\n            root.height = action.height;\n        },\n    });\n\n    var write$4 = createRoute(\n        {\n            DID_GRAB_ITEM: function DID_GRAB_ITEM(_ref3) {\n                var root = _ref3.root,\n                    props = _ref3.props;\n                props.dragOrigin = {\n                    x: root.translateX,\n                    y: root.translateY,\n                };\n            },\n            DID_DRAG_ITEM: function DID_DRAG_ITEM(_ref4) {\n                var root = _ref4.root;\n                root.element.dataset.dragState = 'drag';\n            },\n            DID_DROP_ITEM: function DID_DROP_ITEM(_ref5) {\n                var root = _ref5.root,\n                    props = _ref5.props;\n                props.dragOffset = null;\n                props.dragOrigin = null;\n                root.element.dataset.dragState = 'drop';\n            },\n        },\n        function(_ref6) {\n            var root = _ref6.root,\n                actions = _ref6.actions,\n                props = _ref6.props,\n                shouldOptimize = _ref6.shouldOptimize;\n\n            if (root.element.dataset.dragState === 'drop') {\n                if (root.scaleX <= 1) {\n                    root.element.dataset.dragState = 'idle';\n                }\n            }\n\n            // select last state change action\n            var action = actions\n                .concat()\n                .filter(function(action) {\n                    return /^DID_/.test(action.type);\n                })\n                .reverse()\n                .find(function(action) {\n                    return StateMap[action.type];\n                });\n\n            // no need to set same state twice\n            if (action && action.type !== props.currentState) {\n                // set current state\n                props.currentState = action.type;\n\n                // set state\n                root.element.dataset.filepondItemState = StateMap[props.currentState] || '';\n            }\n\n            // route actions\n            var aspectRatio =\n                root.query('GET_ITEM_PANEL_ASPECT_RATIO') || root.query('GET_PANEL_ASPECT_RATIO');\n            if (!aspectRatio) {\n                route$1({ root: root, actions: actions, props: props });\n                if (!root.height && root.ref.container.rect.element.height > 0) {\n                    root.height = root.ref.container.rect.element.height;\n                }\n            } else if (!shouldOptimize) {\n                root.height = root.rect.element.width * aspectRatio;\n            }\n\n            // sync panel height with item height\n            if (shouldOptimize) {\n                root.ref.panel.height = null;\n            }\n\n            root.ref.panel.height = root.height;\n        }\n    );\n\n    var item = createView({\n        create: create$7,\n        write: write$4,\n        destroy: function destroy(_ref7) {\n            var root = _ref7.root,\n                props = _ref7.props;\n            root.element.removeEventListener('click', root.ref.handleClick);\n            root.dispatch('RELEASE_ITEM', { query: props.id });\n        },\n        tag: 'li',\n        name: 'item',\n        mixins: {\n            apis: [\n                'id',\n                'interactionMethod',\n                'markedForRemoval',\n                'spawnDate',\n                'dragCenter',\n                'dragOrigin',\n                'dragOffset',\n            ],\n            styles: ['translateX', 'translateY', 'scaleX', 'scaleY', 'opacity', 'height'],\n\n            animations: {\n                scaleX: ITEM_SCALE_SPRING,\n                scaleY: ITEM_SCALE_SPRING,\n                translateX: ITEM_TRANSLATE_SPRING,\n                translateY: ITEM_TRANSLATE_SPRING,\n                opacity: { type: 'tween', duration: 150 },\n            },\n        },\n    });\n\n    var getItemsPerRow = function(horizontalSpace, itemWidth) {\n        // add one pixel leeway, when using percentages for item width total items can be 1.99 per row\n\n        return Math.max(1, Math.floor((horizontalSpace + 1) / itemWidth));\n    };\n\n    var getItemIndexByPosition = function getItemIndexByPosition(view, children, positionInView) {\n        if (!positionInView) return;\n\n        var horizontalSpace = view.rect.element.width;\n        // const children = view.childViews;\n        var l = children.length;\n        var last = null;\n\n        // -1, don't move items to accomodate (either add to top or bottom)\n        if (l === 0 || positionInView.top < children[0].rect.element.top) return -1;\n\n        // let's get the item width\n        var item = children[0];\n        var itemRect = item.rect.element;\n        var itemHorizontalMargin = itemRect.marginLeft + itemRect.marginRight;\n        var itemWidth = itemRect.width + itemHorizontalMargin;\n        var itemsPerRow = getItemsPerRow(horizontalSpace, itemWidth);\n\n        // stack\n        if (itemsPerRow === 1) {\n            for (var index = 0; index < l; index++) {\n                var child = children[index];\n                var childMid = child.rect.outer.top + child.rect.element.height * 0.5;\n                if (positionInView.top < childMid) {\n                    return index;\n                }\n            }\n            return l;\n        }\n\n        // grid\n        var itemVerticalMargin = itemRect.marginTop + itemRect.marginBottom;\n        var itemHeight = itemRect.height + itemVerticalMargin;\n        for (var _index = 0; _index < l; _index++) {\n            var indexX = _index % itemsPerRow;\n            var indexY = Math.floor(_index / itemsPerRow);\n\n            var offsetX = indexX * itemWidth;\n            var offsetY = indexY * itemHeight;\n\n            var itemTop = offsetY - itemRect.marginTop;\n            var itemRight = offsetX + itemWidth;\n            var itemBottom = offsetY + itemHeight + itemRect.marginBottom;\n\n            if (positionInView.top < itemBottom && positionInView.top > itemTop) {\n                if (positionInView.left < itemRight) {\n                    return _index;\n                } else if (_index !== l - 1) {\n                    last = _index;\n                } else {\n                    last = null;\n                }\n            }\n        }\n\n        if (last !== null) {\n            return last;\n        }\n\n        return l;\n    };\n\n    var dropAreaDimensions = {\n        height: 0,\n        width: 0,\n        get getHeight() {\n            return this.height;\n        },\n        set setHeight(val) {\n            if (this.height === 0 || val === 0) this.height = val;\n        },\n        get getWidth() {\n            return this.width;\n        },\n        set setWidth(val) {\n            if (this.width === 0 || val === 0) this.width = val;\n        },\n        setDimensions: function setDimensions(height, width) {\n            if (this.height === 0 || height === 0) this.height = height;\n            if (this.width === 0 || width === 0) this.width = width;\n        },\n    };\n\n    var create$8 = function create(_ref) {\n        var root = _ref.root;\n        // need to set role to list as otherwise it won't be read as a list by VoiceOver\n        attr(root.element, 'role', 'list');\n\n        root.ref.lastItemSpanwDate = Date.now();\n    };\n\n    /**\n     * Inserts a new item\n     * @param root\n     * @param action\n     */\n    var addItemView = function addItemView(_ref2) {\n        var root = _ref2.root,\n            action = _ref2.action;\n        var id = action.id,\n            index = action.index,\n            interactionMethod = action.interactionMethod;\n\n        root.ref.addIndex = index;\n\n        var now = Date.now();\n        var spawnDate = now;\n        var opacity = 1;\n\n        if (interactionMethod !== InteractionMethod.NONE) {\n            opacity = 0;\n            var cooldown = root.query('GET_ITEM_INSERT_INTERVAL');\n            var dist = now - root.ref.lastItemSpanwDate;\n            spawnDate = dist < cooldown ? now + (cooldown - dist) : now;\n        }\n\n        root.ref.lastItemSpanwDate = spawnDate;\n\n        root.appendChildView(\n            root.createChildView(\n                // view type\n                item,\n\n                // props\n                {\n                    spawnDate: spawnDate,\n                    id: id,\n                    opacity: opacity,\n                    interactionMethod: interactionMethod,\n                }\n            ),\n\n            index\n        );\n    };\n\n    var moveItem = function moveItem(item, x, y) {\n        var vx = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n        var vy = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1;\n        // set to null to remove animation while dragging\n        if (item.dragOffset) {\n            item.translateX = null;\n            item.translateY = null;\n            item.translateX = item.dragOrigin.x + item.dragOffset.x;\n            item.translateY = item.dragOrigin.y + item.dragOffset.y;\n            item.scaleX = 1.025;\n            item.scaleY = 1.025;\n        } else {\n            item.translateX = x;\n            item.translateY = y;\n\n            if (Date.now() > item.spawnDate) {\n                // reveal element\n                if (item.opacity === 0) {\n                    introItemView(item, x, y, vx, vy);\n                }\n\n                // make sure is default scale every frame\n                item.scaleX = 1;\n                item.scaleY = 1;\n                item.opacity = 1;\n            }\n        }\n    };\n\n    var introItemView = function introItemView(item, x, y, vx, vy) {\n        if (item.interactionMethod === InteractionMethod.NONE) {\n            item.translateX = null;\n            item.translateX = x;\n            item.translateY = null;\n            item.translateY = y;\n        } else if (item.interactionMethod === InteractionMethod.DROP) {\n            item.translateX = null;\n            item.translateX = x - vx * 20;\n\n            item.translateY = null;\n            item.translateY = y - vy * 10;\n\n            item.scaleX = 0.8;\n            item.scaleY = 0.8;\n        } else if (item.interactionMethod === InteractionMethod.BROWSE) {\n            item.translateY = null;\n            item.translateY = y - 30;\n        } else if (item.interactionMethod === InteractionMethod.API) {\n            item.translateX = null;\n            item.translateX = x - 30;\n            item.translateY = null;\n        }\n    };\n\n    /**\n     * Removes an existing item\n     * @param root\n     * @param action\n     */\n    var removeItemView = function removeItemView(_ref3) {\n        var root = _ref3.root,\n            action = _ref3.action;\n        var id = action.id;\n\n        // get the view matching the given id\n        var view = root.childViews.find(function(child) {\n            return child.id === id;\n        });\n\n        // if no view found, exit\n        if (!view) {\n            return;\n        }\n\n        // animate view out of view\n        view.scaleX = 0.9;\n        view.scaleY = 0.9;\n        view.opacity = 0;\n\n        // mark for removal\n        view.markedForRemoval = true;\n    };\n\n    var getItemHeight = function getItemHeight(child) {\n        return (\n            child.rect.element.height +\n            child.rect.element.marginBottom * 0.5 +\n            child.rect.element.marginTop * 0.5\n        );\n    };\n    var getItemWidth = function getItemWidth(child) {\n        return (\n            child.rect.element.width +\n            child.rect.element.marginLeft * 0.5 +\n            child.rect.element.marginRight * 0.5\n        );\n    };\n\n    var dragItem = function dragItem(_ref4) {\n        var root = _ref4.root,\n            action = _ref4.action;\n        var id = action.id,\n            dragState = action.dragState;\n\n        // reference to item\n        var item = root.query('GET_ITEM', { id: id });\n\n        // get the view matching the given id\n        var view = root.childViews.find(function(child) {\n            return child.id === id;\n        });\n\n        var numItems = root.childViews.length;\n        var oldIndex = dragState.getItemIndex(item);\n\n        // if no view found, exit\n        if (!view) return;\n\n        var dragPosition = {\n            x: view.dragOrigin.x + view.dragOffset.x + view.dragCenter.x,\n            y: view.dragOrigin.y + view.dragOffset.y + view.dragCenter.y,\n        };\n\n        // get drag area dimensions\n        var dragHeight = getItemHeight(view);\n        var dragWidth = getItemWidth(view);\n\n        // get rows and columns (There will always be at least one row and one column if a file is present)\n        var cols = Math.floor(root.rect.outer.width / dragWidth);\n        if (cols > numItems) cols = numItems;\n\n        // rows are used to find when we have left the preview area bounding box\n        var rows = Math.floor(numItems / cols + 1);\n\n        dropAreaDimensions.setHeight = dragHeight * rows;\n        dropAreaDimensions.setWidth = dragWidth * cols;\n\n        // get new index of dragged item\n        var location = {\n            y: Math.floor(dragPosition.y / dragHeight),\n            x: Math.floor(dragPosition.x / dragWidth),\n            getGridIndex: function getGridIndex() {\n                if (\n                    dragPosition.y > dropAreaDimensions.getHeight ||\n                    dragPosition.y < 0 ||\n                    dragPosition.x > dropAreaDimensions.getWidth ||\n                    dragPosition.x < 0\n                )\n                    return oldIndex;\n                return this.y * cols + this.x;\n            },\n            getColIndex: function getColIndex() {\n                var items = root.query('GET_ACTIVE_ITEMS');\n                var visibleChildren = root.childViews.filter(function(child) {\n                    return child.rect.element.height;\n                });\n                var children = items.map(function(item) {\n                    return visibleChildren.find(function(childView) {\n                        return childView.id === item.id;\n                    });\n                });\n\n                var currentIndex = children.findIndex(function(child) {\n                    return child === view;\n                });\n                var dragHeight = getItemHeight(view);\n                var l = children.length;\n                var idx = l;\n                var childHeight = 0;\n                var childBottom = 0;\n                var childTop = 0;\n                for (var i = 0; i < l; i++) {\n                    childHeight = getItemHeight(children[i]);\n                    childTop = childBottom;\n                    childBottom = childTop + childHeight;\n                    if (dragPosition.y < childBottom) {\n                        if (currentIndex > i) {\n                            if (dragPosition.y < childTop + dragHeight) {\n                                idx = i;\n                                break;\n                            }\n                            continue;\n                        }\n                        idx = i;\n                        break;\n                    }\n                }\n                return idx;\n            },\n        };\n\n        // get new index\n        var index = cols > 1 ? location.getGridIndex() : location.getColIndex();\n        root.dispatch('MOVE_ITEM', { query: view, index: index });\n\n        // if the index of the item changed, dispatch reorder action\n        var currentIndex = dragState.getIndex();\n\n        if (currentIndex === undefined || currentIndex !== index) {\n            dragState.setIndex(index);\n\n            if (currentIndex === undefined) return;\n\n            root.dispatch('DID_REORDER_ITEMS', {\n                items: root.query('GET_ACTIVE_ITEMS'),\n                origin: oldIndex,\n                target: index,\n            });\n        }\n    };\n\n    /**\n     * Setup action routes\n     */\n    var route$2 = createRoute({\n        DID_ADD_ITEM: addItemView,\n        DID_REMOVE_ITEM: removeItemView,\n        DID_DRAG_ITEM: dragItem,\n    });\n\n    /**\n     * Write to view\n     * @param root\n     * @param actions\n     * @param props\n     */\n    var write$5 = function write(_ref5) {\n        var root = _ref5.root,\n            props = _ref5.props,\n            actions = _ref5.actions,\n            shouldOptimize = _ref5.shouldOptimize;\n        // route actions\n        route$2({ root: root, props: props, actions: actions });\n        var dragCoordinates = props.dragCoordinates;\n\n        // available space on horizontal axis\n        var horizontalSpace = root.rect.element.width;\n\n        // only draw children that have dimensions\n        var visibleChildren = root.childViews.filter(function(child) {\n            return child.rect.element.height;\n        });\n\n        // sort based on current active items\n        var children = root\n            .query('GET_ACTIVE_ITEMS')\n            .map(function(item) {\n                return visibleChildren.find(function(child) {\n                    return child.id === item.id;\n                });\n            })\n            .filter(function(item) {\n                return item;\n            });\n\n        // get index\n        var dragIndex = dragCoordinates\n            ? getItemIndexByPosition(root, children, dragCoordinates)\n            : null;\n\n        // add index is used to reserve the dropped/added item index till the actual item is rendered\n        var addIndex = root.ref.addIndex || null;\n\n        // add index no longer needed till possibly next draw\n        root.ref.addIndex = null;\n\n        var dragIndexOffset = 0;\n        var removeIndexOffset = 0;\n        var addIndexOffset = 0;\n\n        if (children.length === 0) return;\n\n        var childRect = children[0].rect.element;\n        var itemVerticalMargin = childRect.marginTop + childRect.marginBottom;\n        var itemHorizontalMargin = childRect.marginLeft + childRect.marginRight;\n        var itemWidth = childRect.width + itemHorizontalMargin;\n        var itemHeight = childRect.height + itemVerticalMargin;\n        var itemsPerRow = getItemsPerRow(horizontalSpace, itemWidth);\n\n        // stack\n        if (itemsPerRow === 1) {\n            var offsetY = 0;\n            var dragOffset = 0;\n\n            children.forEach(function(child, index) {\n                if (dragIndex) {\n                    var dist = index - dragIndex;\n                    if (dist === -2) {\n                        dragOffset = -itemVerticalMargin * 0.25;\n                    } else if (dist === -1) {\n                        dragOffset = -itemVerticalMargin * 0.75;\n                    } else if (dist === 0) {\n                        dragOffset = itemVerticalMargin * 0.75;\n                    } else if (dist === 1) {\n                        dragOffset = itemVerticalMargin * 0.25;\n                    } else {\n                        dragOffset = 0;\n                    }\n                }\n\n                if (shouldOptimize) {\n                    child.translateX = null;\n                    child.translateY = null;\n                }\n\n                if (!child.markedForRemoval) {\n                    moveItem(child, 0, offsetY + dragOffset);\n                }\n\n                var itemHeight = child.rect.element.height + itemVerticalMargin;\n\n                var visualHeight = itemHeight * (child.markedForRemoval ? child.opacity : 1);\n\n                offsetY += visualHeight;\n            });\n        }\n        // grid\n        else {\n            var prevX = 0;\n            var prevY = 0;\n\n            children.forEach(function(child, index) {\n                if (index === dragIndex) {\n                    dragIndexOffset = 1;\n                }\n\n                if (index === addIndex) {\n                    addIndexOffset += 1;\n                }\n\n                if (child.markedForRemoval && child.opacity < 0.5) {\n                    removeIndexOffset -= 1;\n                }\n\n                var visualIndex = index + addIndexOffset + dragIndexOffset + removeIndexOffset;\n\n                var indexX = visualIndex % itemsPerRow;\n                var indexY = Math.floor(visualIndex / itemsPerRow);\n\n                var offsetX = indexX * itemWidth;\n                var offsetY = indexY * itemHeight;\n\n                var vectorX = Math.sign(offsetX - prevX);\n                var vectorY = Math.sign(offsetY - prevY);\n\n                prevX = offsetX;\n                prevY = offsetY;\n\n                if (child.markedForRemoval) return;\n\n                if (shouldOptimize) {\n                    child.translateX = null;\n                    child.translateY = null;\n                }\n\n                moveItem(child, offsetX, offsetY, vectorX, vectorY);\n            });\n        }\n    };\n\n    /**\n     * Filters actions that are meant specifically for a certain child of the list\n     * @param child\n     * @param actions\n     */\n    var filterSetItemActions = function filterSetItemActions(child, actions) {\n        return actions.filter(function(action) {\n            // if action has an id, filter out actions that don't have this child id\n            if (action.data && action.data.id) {\n                return child.id === action.data.id;\n            }\n\n            // allow all other actions\n            return true;\n        });\n    };\n\n    var list = createView({\n        create: create$8,\n        write: write$5,\n        tag: 'ul',\n        name: 'list',\n        didWriteView: function didWriteView(_ref6) {\n            var root = _ref6.root;\n            root.childViews\n                .filter(function(view) {\n                    return view.markedForRemoval && view.opacity === 0 && view.resting;\n                })\n                .forEach(function(view) {\n                    view._destroy();\n                    root.removeChildView(view);\n                });\n        },\n        filterFrameActionsForChild: filterSetItemActions,\n        mixins: {\n            apis: ['dragCoordinates'],\n        },\n    });\n\n    var create$9 = function create(_ref) {\n        var root = _ref.root,\n            props = _ref.props;\n        root.ref.list = root.appendChildView(root.createChildView(list));\n        props.dragCoordinates = null;\n        props.overflowing = false;\n    };\n\n    var storeDragCoordinates = function storeDragCoordinates(_ref2) {\n        var root = _ref2.root,\n            props = _ref2.props,\n            action = _ref2.action;\n        if (!root.query('GET_ITEM_INSERT_LOCATION_FREEDOM')) return;\n        props.dragCoordinates = {\n            left: action.position.scopeLeft - root.ref.list.rect.element.left,\n            top:\n                action.position.scopeTop -\n                (root.rect.outer.top + root.rect.element.marginTop + root.rect.element.scrollTop),\n        };\n    };\n\n    var clearDragCoordinates = function clearDragCoordinates(_ref3) {\n        var props = _ref3.props;\n        props.dragCoordinates = null;\n    };\n\n    var route$3 = createRoute({\n        DID_DRAG: storeDragCoordinates,\n        DID_END_DRAG: clearDragCoordinates,\n    });\n\n    var write$6 = function write(_ref4) {\n        var root = _ref4.root,\n            props = _ref4.props,\n            actions = _ref4.actions;\n\n        // route actions\n        route$3({ root: root, props: props, actions: actions });\n\n        // current drag position\n        root.ref.list.dragCoordinates = props.dragCoordinates;\n\n        // if currently overflowing but no longer received overflow\n        if (props.overflowing && !props.overflow) {\n            props.overflowing = false;\n\n            // reset overflow state\n            root.element.dataset.state = '';\n            root.height = null;\n        }\n\n        // if is not overflowing currently but does receive overflow value\n        if (props.overflow) {\n            var newHeight = Math.round(props.overflow);\n            if (newHeight !== root.height) {\n                props.overflowing = true;\n                root.element.dataset.state = 'overflow';\n                root.height = newHeight;\n            }\n        }\n    };\n\n    var listScroller = createView({\n        create: create$9,\n        write: write$6,\n        name: 'list-scroller',\n        mixins: {\n            apis: ['overflow', 'dragCoordinates'],\n            styles: ['height', 'translateY'],\n            animations: {\n                translateY: 'spring',\n            },\n        },\n    });\n\n    var attrToggle = function attrToggle(element, name, state) {\n        var enabledValue = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '';\n        if (state) {\n            attr(element, name, enabledValue);\n        } else {\n            element.removeAttribute(name);\n        }\n    };\n\n    var resetFileInput = function resetFileInput(input) {\n        // no value, no need to reset\n        if (!input || input.value === '') {\n            return;\n        }\n\n        try {\n            // for modern browsers\n            input.value = '';\n        } catch (err) {}\n\n        // for IE10\n        if (input.value) {\n            // quickly append input to temp form and reset form\n            var form = createElement$1('form');\n            var parentNode = input.parentNode;\n            var ref = input.nextSibling;\n            form.appendChild(input);\n            form.reset();\n\n            // re-inject input where it originally was\n            if (ref) {\n                parentNode.insertBefore(input, ref);\n            } else {\n                parentNode.appendChild(input);\n            }\n        }\n    };\n\n    var create$a = function create(_ref) {\n        var root = _ref.root,\n            props = _ref.props;\n\n        // set id so can be referenced from outside labels\n        root.element.id = 'filepond--browser-' + props.id;\n\n        // set name of element (is removed when a value is set)\n        attr(root.element, 'name', root.query('GET_NAME'));\n\n        // we have to link this element to the status element\n        attr(root.element, 'aria-controls', 'filepond--assistant-' + props.id);\n\n        // set label, we use labelled by as otherwise the screenreader does not read the \"browse\" text in the label (as it has tabindex: 0)\n        attr(root.element, 'aria-labelledby', 'filepond--drop-label-' + props.id);\n\n        // set configurable props\n        setAcceptedFileTypes({\n            root: root,\n            action: { value: root.query('GET_ACCEPTED_FILE_TYPES') },\n        });\n        toggleAllowMultiple({ root: root, action: { value: root.query('GET_ALLOW_MULTIPLE') } });\n        toggleDirectoryFilter({\n            root: root,\n            action: { value: root.query('GET_ALLOW_DIRECTORIES_ONLY') },\n        });\n        toggleDisabled({ root: root });\n        toggleRequired({ root: root, action: { value: root.query('GET_REQUIRED') } });\n        setCaptureMethod({ root: root, action: { value: root.query('GET_CAPTURE_METHOD') } });\n\n        // handle changes to the input field\n        root.ref.handleChange = function(e) {\n            if (!root.element.value) {\n                return;\n            }\n\n            // extract files and move value of webkitRelativePath path to _relativePath\n            var files = Array.from(root.element.files).map(function(file) {\n                file._relativePath = file.webkitRelativePath;\n                return file;\n            });\n\n            // we add a little delay so the OS file select window can move out of the way before we add our file\n            setTimeout(function() {\n                // load files\n                props.onload(files);\n\n                // reset input, it's just for exposing a method to drop files, should not retain any state\n                resetFileInput(root.element);\n            }, 250);\n        };\n\n        root.element.addEventListener('change', root.ref.handleChange);\n    };\n\n    var setAcceptedFileTypes = function setAcceptedFileTypes(_ref2) {\n        var root = _ref2.root,\n            action = _ref2.action;\n        if (!root.query('GET_ALLOW_SYNC_ACCEPT_ATTRIBUTE')) return;\n        attrToggle(\n            root.element,\n            'accept',\n            !!action.value,\n            action.value ? action.value.join(',') : ''\n        );\n    };\n\n    var toggleAllowMultiple = function toggleAllowMultiple(_ref3) {\n        var root = _ref3.root,\n            action = _ref3.action;\n        attrToggle(root.element, 'multiple', action.value);\n    };\n\n    var toggleDirectoryFilter = function toggleDirectoryFilter(_ref4) {\n        var root = _ref4.root,\n            action = _ref4.action;\n        attrToggle(root.element, 'webkitdirectory', action.value);\n    };\n\n    var toggleDisabled = function toggleDisabled(_ref5) {\n        var root = _ref5.root;\n        var isDisabled = root.query('GET_DISABLED');\n        var doesAllowBrowse = root.query('GET_ALLOW_BROWSE');\n        var disableField = isDisabled || !doesAllowBrowse;\n        attrToggle(root.element, 'disabled', disableField);\n    };\n\n    var toggleRequired = function toggleRequired(_ref6) {\n        var root = _ref6.root,\n            action = _ref6.action;\n        // want to remove required, always possible\n        if (!action.value) {\n            attrToggle(root.element, 'required', false);\n        }\n        // if want to make required, only possible when zero items\n        else if (root.query('GET_TOTAL_ITEMS') === 0) {\n            attrToggle(root.element, 'required', true);\n        }\n    };\n\n    var setCaptureMethod = function setCaptureMethod(_ref7) {\n        var root = _ref7.root,\n            action = _ref7.action;\n        attrToggle(\n            root.element,\n            'capture',\n            !!action.value,\n            action.value === true ? '' : action.value\n        );\n    };\n\n    var updateRequiredStatus = function updateRequiredStatus(_ref8) {\n        var root = _ref8.root;\n        var element = root.element;\n        // always remove the required attribute when more than zero items\n        if (root.query('GET_TOTAL_ITEMS') > 0) {\n            attrToggle(element, 'required', false);\n            attrToggle(element, 'name', false);\n        } else {\n            // add name attribute\n            attrToggle(element, 'name', true, root.query('GET_NAME'));\n\n            // remove any validation messages\n            var shouldCheckValidity = root.query('GET_CHECK_VALIDITY');\n            if (shouldCheckValidity) {\n                element.setCustomValidity('');\n            }\n\n            // we only add required if the field has been deemed required\n            if (root.query('GET_REQUIRED')) {\n                attrToggle(element, 'required', true);\n            }\n        }\n    };\n\n    var updateFieldValidityStatus = function updateFieldValidityStatus(_ref9) {\n        var root = _ref9.root;\n        var shouldCheckValidity = root.query('GET_CHECK_VALIDITY');\n        if (!shouldCheckValidity) return;\n        root.element.setCustomValidity(root.query('GET_LABEL_INVALID_FIELD'));\n    };\n\n    var browser = createView({\n        tag: 'input',\n        name: 'browser',\n        ignoreRect: true,\n        ignoreRectUpdate: true,\n        attributes: {\n            type: 'file',\n        },\n\n        create: create$a,\n        destroy: function destroy(_ref10) {\n            var root = _ref10.root;\n            root.element.removeEventListener('change', root.ref.handleChange);\n        },\n        write: createRoute({\n            DID_LOAD_ITEM: updateRequiredStatus,\n            DID_REMOVE_ITEM: updateRequiredStatus,\n            DID_THROW_ITEM_INVALID: updateFieldValidityStatus,\n\n            DID_SET_DISABLED: toggleDisabled,\n            DID_SET_ALLOW_BROWSE: toggleDisabled,\n            DID_SET_ALLOW_DIRECTORIES_ONLY: toggleDirectoryFilter,\n            DID_SET_ALLOW_MULTIPLE: toggleAllowMultiple,\n            DID_SET_ACCEPTED_FILE_TYPES: setAcceptedFileTypes,\n            DID_SET_CAPTURE_METHOD: setCaptureMethod,\n            DID_SET_REQUIRED: toggleRequired,\n        }),\n    });\n\n    var Key = {\n        ENTER: 13,\n        SPACE: 32,\n    };\n\n    var create$b = function create(_ref) {\n        var root = _ref.root,\n            props = _ref.props;\n\n        // create the label and link it to the file browser\n        var label = createElement$1('label');\n        attr(label, 'for', 'filepond--browser-' + props.id);\n\n        // use for labeling file input (aria-labelledby on file input)\n        attr(label, 'id', 'filepond--drop-label-' + props.id);\n\n        // hide the label for screenreaders, the input element will read the contents of the label when it's focussed. If we don't set aria-hidden the screenreader will also navigate the contents of the label separately from the input.\n        attr(label, 'aria-hidden', 'true');\n\n        // handle keys\n        root.ref.handleKeyDown = function(e) {\n            var isActivationKey = e.keyCode === Key.ENTER || e.keyCode === Key.SPACE;\n            if (!isActivationKey) return;\n            // stops from triggering the element a second time\n            e.preventDefault();\n\n            // click link (will then in turn activate file input)\n            root.ref.label.click();\n        };\n\n        root.ref.handleClick = function(e) {\n            var isLabelClick = e.target === label || label.contains(e.target);\n\n            // don't want to click twice\n            if (isLabelClick) return;\n\n            // click link (will then in turn activate file input)\n            root.ref.label.click();\n        };\n\n        // attach events\n        label.addEventListener('keydown', root.ref.handleKeyDown);\n        root.element.addEventListener('click', root.ref.handleClick);\n\n        // update\n        updateLabelValue(label, props.caption);\n\n        // add!\n        root.appendChild(label);\n        root.ref.label = label;\n    };\n\n    var updateLabelValue = function updateLabelValue(label, value) {\n        label.innerHTML = value;\n        var clickable = label.querySelector('.filepond--label-action');\n        if (clickable) {\n            attr(clickable, 'tabindex', '0');\n        }\n        return value;\n    };\n\n    var dropLabel = createView({\n        name: 'drop-label',\n        ignoreRect: true,\n        create: create$b,\n        destroy: function destroy(_ref2) {\n            var root = _ref2.root;\n            root.ref.label.addEventListener('keydown', root.ref.handleKeyDown);\n            root.element.removeEventListener('click', root.ref.handleClick);\n        },\n        write: createRoute({\n            DID_SET_LABEL_IDLE: function DID_SET_LABEL_IDLE(_ref3) {\n                var root = _ref3.root,\n                    action = _ref3.action;\n                updateLabelValue(root.ref.label, action.value);\n            },\n        }),\n\n        mixins: {\n            styles: ['opacity', 'translateX', 'translateY'],\n            animations: {\n                opacity: { type: 'tween', duration: 150 },\n                translateX: 'spring',\n                translateY: 'spring',\n            },\n        },\n    });\n\n    var blob = createView({\n        name: 'drip-blob',\n        ignoreRect: true,\n        mixins: {\n            styles: ['translateX', 'translateY', 'scaleX', 'scaleY', 'opacity'],\n            animations: {\n                scaleX: 'spring',\n                scaleY: 'spring',\n                translateX: 'spring',\n                translateY: 'spring',\n                opacity: { type: 'tween', duration: 250 },\n            },\n        },\n    });\n\n    var addBlob = function addBlob(_ref) {\n        var root = _ref.root;\n        var centerX = root.rect.element.width * 0.5;\n        var centerY = root.rect.element.height * 0.5;\n\n        root.ref.blob = root.appendChildView(\n            root.createChildView(blob, {\n                opacity: 0,\n                scaleX: 2.5,\n                scaleY: 2.5,\n                translateX: centerX,\n                translateY: centerY,\n            })\n        );\n    };\n\n    var moveBlob = function moveBlob(_ref2) {\n        var root = _ref2.root,\n            action = _ref2.action;\n        if (!root.ref.blob) {\n            addBlob({ root: root });\n            return;\n        }\n\n        root.ref.blob.translateX = action.position.scopeLeft;\n        root.ref.blob.translateY = action.position.scopeTop;\n        root.ref.blob.scaleX = 1;\n        root.ref.blob.scaleY = 1;\n        root.ref.blob.opacity = 1;\n    };\n\n    var hideBlob = function hideBlob(_ref3) {\n        var root = _ref3.root;\n        if (!root.ref.blob) {\n            return;\n        }\n        root.ref.blob.opacity = 0;\n    };\n\n    var explodeBlob = function explodeBlob(_ref4) {\n        var root = _ref4.root;\n        if (!root.ref.blob) {\n            return;\n        }\n        root.ref.blob.scaleX = 2.5;\n        root.ref.blob.scaleY = 2.5;\n        root.ref.blob.opacity = 0;\n    };\n\n    var write$7 = function write(_ref5) {\n        var root = _ref5.root,\n            props = _ref5.props,\n            actions = _ref5.actions;\n        route$4({ root: root, props: props, actions: actions });\n        var blob = root.ref.blob;\n\n        if (actions.length === 0 && blob && blob.opacity === 0) {\n            root.removeChildView(blob);\n            root.ref.blob = null;\n        }\n    };\n\n    var route$4 = createRoute({\n        DID_DRAG: moveBlob,\n        DID_DROP: explodeBlob,\n        DID_END_DRAG: hideBlob,\n    });\n\n    var drip = createView({\n        ignoreRect: true,\n        ignoreRectUpdate: true,\n        name: 'drip',\n        write: write$7,\n    });\n\n    var setInputFiles = function setInputFiles(element, files) {\n        try {\n            // Create a DataTransfer instance and add a newly created file\n            var dataTransfer = new DataTransfer();\n            files.forEach(function(file) {\n                if (file instanceof File) {\n                    dataTransfer.items.add(file);\n                } else {\n                    dataTransfer.items.add(\n                        new File([file], file.name, {\n                            type: file.type,\n                        })\n                    );\n                }\n            });\n\n            // Assign the DataTransfer files list to the file input\n            element.files = dataTransfer.files;\n        } catch (err) {\n            return false;\n        }\n        return true;\n    };\n\n    var create$c = function create(_ref) {\n        var root = _ref.root;\n        return (root.ref.fields = {});\n    };\n\n    var getField = function getField(root, id) {\n        return root.ref.fields[id];\n    };\n\n    var syncFieldPositionsWithItems = function syncFieldPositionsWithItems(root) {\n        root.query('GET_ACTIVE_ITEMS').forEach(function(item) {\n            if (!root.ref.fields[item.id]) return;\n            root.element.appendChild(root.ref.fields[item.id]);\n        });\n    };\n\n    var didReorderItems = function didReorderItems(_ref2) {\n        var root = _ref2.root;\n        return syncFieldPositionsWithItems(root);\n    };\n\n    var didAddItem = function didAddItem(_ref3) {\n        var root = _ref3.root,\n            action = _ref3.action;\n        var fileItem = root.query('GET_ITEM', action.id);\n        var isLocalFile = fileItem.origin === FileOrigin.LOCAL;\n        var shouldUseFileInput = !isLocalFile && root.query('SHOULD_UPDATE_FILE_INPUT');\n        var dataContainer = createElement$1('input');\n        dataContainer.type = shouldUseFileInput ? 'file' : 'hidden';\n        dataContainer.name = root.query('GET_NAME');\n        dataContainer.disabled = root.query('GET_DISABLED');\n        root.ref.fields[action.id] = dataContainer;\n        syncFieldPositionsWithItems(root);\n    };\n\n    var didLoadItem$1 = function didLoadItem(_ref4) {\n        var root = _ref4.root,\n            action = _ref4.action;\n        var field = getField(root, action.id);\n        if (!field) return;\n\n        // store server ref in hidden input\n        if (action.serverFileReference !== null) field.value = action.serverFileReference;\n\n        // store file item in file input\n        if (!root.query('SHOULD_UPDATE_FILE_INPUT')) return;\n\n        var fileItem = root.query('GET_ITEM', action.id);\n        setInputFiles(field, [fileItem.file]);\n    };\n\n    var didPrepareOutput = function didPrepareOutput(_ref5) {\n        var root = _ref5.root,\n            action = _ref5.action;\n        // this timeout pushes the handler after 'load'\n        if (!root.query('SHOULD_UPDATE_FILE_INPUT')) return;\n        setTimeout(function() {\n            var field = getField(root, action.id);\n            if (!field) return;\n            setInputFiles(field, [action.file]);\n        }, 0);\n    };\n\n    var didSetDisabled = function didSetDisabled(_ref6) {\n        var root = _ref6.root;\n        root.element.disabled = root.query('GET_DISABLED');\n    };\n\n    var didRemoveItem = function didRemoveItem(_ref7) {\n        var root = _ref7.root,\n            action = _ref7.action;\n        var field = getField(root, action.id);\n        if (!field) return;\n        if (field.parentNode) field.parentNode.removeChild(field);\n        delete root.ref.fields[action.id];\n    };\n\n    // only runs for server files (so doesn't deal with file input)\n    var didDefineValue = function didDefineValue(_ref8) {\n        var root = _ref8.root,\n            action = _ref8.action;\n        var field = getField(root, action.id);\n        if (!field) return;\n        if (action.value === null) {\n            // clear field value\n            field.removeAttribute('value');\n        } else {\n            // set field value\n            field.value = action.value;\n        }\n        syncFieldPositionsWithItems(root);\n    };\n\n    var write$8 = createRoute({\n        DID_SET_DISABLED: didSetDisabled,\n        DID_ADD_ITEM: didAddItem,\n        DID_LOAD_ITEM: didLoadItem$1,\n        DID_REMOVE_ITEM: didRemoveItem,\n        DID_DEFINE_VALUE: didDefineValue,\n        DID_PREPARE_OUTPUT: didPrepareOutput,\n        DID_REORDER_ITEMS: didReorderItems,\n        DID_SORT_ITEMS: didReorderItems,\n    });\n\n    var data = createView({\n        tag: 'fieldset',\n        name: 'data',\n        create: create$c,\n        write: write$8,\n        ignoreRect: true,\n    });\n\n    var getRootNode = function getRootNode(element) {\n        return 'getRootNode' in element ? element.getRootNode() : document;\n    };\n\n    var images = ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp', 'svg', 'tiff'];\n    var text$1 = ['css', 'csv', 'html', 'txt'];\n    var map = {\n        zip: 'zip|compressed',\n        epub: 'application/epub+zip',\n    };\n\n    var guesstimateMimeType = function guesstimateMimeType() {\n        var extension = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n        extension = extension.toLowerCase();\n        if (images.includes(extension)) {\n            return (\n                'image/' +\n                (extension === 'jpg' ? 'jpeg' : extension === 'svg' ? 'svg+xml' : extension)\n            );\n        }\n        if (text$1.includes(extension)) {\n            return 'text/' + extension;\n        }\n\n        return map[extension] || '';\n    };\n\n    var requestDataTransferItems = function requestDataTransferItems(dataTransfer) {\n        return new Promise(function(resolve, reject) {\n            // try to get links from transfer, if found we'll exit immediately (unless a file is in the dataTransfer as well, this is because Firefox could represent the file as a URL and a file object at the same time)\n            var links = getLinks(dataTransfer);\n            if (links.length && !hasFiles(dataTransfer)) {\n                return resolve(links);\n            }\n            // try to get files from the transfer\n            getFiles(dataTransfer).then(resolve);\n        });\n    };\n\n    /**\n     * Test if datatransfer has files\n     */\n    var hasFiles = function hasFiles(dataTransfer) {\n        if (dataTransfer.files) return dataTransfer.files.length > 0;\n        return false;\n    };\n\n    /**\n     * Extracts files from a DataTransfer object\n     */\n    var getFiles = function getFiles(dataTransfer) {\n        return new Promise(function(resolve, reject) {\n            // get the transfer items as promises\n            var promisedFiles = (dataTransfer.items ? Array.from(dataTransfer.items) : [])\n                // only keep file system items (files and directories)\n                .filter(function(item) {\n                    return isFileSystemItem(item);\n                })\n\n                // map each item to promise\n                .map(function(item) {\n                    return getFilesFromItem(item);\n                });\n\n            // if is empty, see if we can extract some info from the files property as a fallback\n            if (!promisedFiles.length) {\n                // TODO: test for directories (should not be allowed)\n                // Use FileReader, problem is that the files property gets lost in the process\n                resolve(dataTransfer.files ? Array.from(dataTransfer.files) : []);\n                return;\n            }\n\n            // done!\n            Promise.all(promisedFiles)\n                .then(function(returnedFileGroups) {\n                    // flatten groups\n                    var files = [];\n                    returnedFileGroups.forEach(function(group) {\n                        files.push.apply(files, group);\n                    });\n\n                    // done (filter out empty files)!\n                    resolve(\n                        files\n                            .filter(function(file) {\n                                return file;\n                            })\n                            .map(function(file) {\n                                if (!file._relativePath)\n                                    file._relativePath = file.webkitRelativePath;\n                                return file;\n                            })\n                    );\n                })\n                .catch(console.error);\n        });\n    };\n\n    var isFileSystemItem = function isFileSystemItem(item) {\n        if (isEntry(item)) {\n            var entry = getAsEntry(item);\n            if (entry) {\n                return entry.isFile || entry.isDirectory;\n            }\n        }\n        return item.kind === 'file';\n    };\n\n    var getFilesFromItem = function getFilesFromItem(item) {\n        return new Promise(function(resolve, reject) {\n            if (isDirectoryEntry(item)) {\n                getFilesInDirectory(getAsEntry(item))\n                    .then(resolve)\n                    .catch(reject);\n                return;\n            }\n\n            resolve([item.getAsFile()]);\n        });\n    };\n\n    var getFilesInDirectory = function getFilesInDirectory(entry) {\n        return new Promise(function(resolve, reject) {\n            var files = [];\n\n            // the total entries to read\n            var dirCounter = 0;\n            var fileCounter = 0;\n\n            var resolveIfDone = function resolveIfDone() {\n                if (fileCounter === 0 && dirCounter === 0) {\n                    resolve(files);\n                }\n            };\n\n            // the recursive function\n            var readEntries = function readEntries(dirEntry) {\n                dirCounter++;\n\n                var directoryReader = dirEntry.createReader();\n\n                // directories are returned in batches, we need to process all batches before we're done\n                var readBatch = function readBatch() {\n                    directoryReader.readEntries(function(entries) {\n                        if (entries.length === 0) {\n                            dirCounter--;\n                            resolveIfDone();\n                            return;\n                        }\n\n                        entries.forEach(function(entry) {\n                            // recursively read more directories\n                            if (entry.isDirectory) {\n                                readEntries(entry);\n                            } else {\n                                // read as file\n                                fileCounter++;\n\n                                entry.file(function(file) {\n                                    var correctedFile = correctMissingFileType(file);\n                                    if (entry.fullPath)\n                                        correctedFile._relativePath = entry.fullPath;\n                                    files.push(correctedFile);\n                                    fileCounter--;\n                                    resolveIfDone();\n                                });\n                            }\n                        });\n\n                        // try to get next batch of files\n                        readBatch();\n                    }, reject);\n                };\n\n                // read first batch of files\n                readBatch();\n            };\n\n            // go!\n            readEntries(entry);\n        });\n    };\n\n    var correctMissingFileType = function correctMissingFileType(file) {\n        if (file.type.length) return file;\n        var date = file.lastModifiedDate;\n        var name = file.name;\n        var type = guesstimateMimeType(getExtensionFromFilename(file.name));\n        if (!type.length) return file;\n        file = file.slice(0, file.size, type);\n        file.name = name;\n        file.lastModifiedDate = date;\n        return file;\n    };\n\n    var isDirectoryEntry = function isDirectoryEntry(item) {\n        return isEntry(item) && (getAsEntry(item) || {}).isDirectory;\n    };\n\n    var isEntry = function isEntry(item) {\n        return 'webkitGetAsEntry' in item;\n    };\n\n    var getAsEntry = function getAsEntry(item) {\n        return item.webkitGetAsEntry();\n    };\n\n    /**\n     * Extracts links from a DataTransfer object\n     */\n    var getLinks = function getLinks(dataTransfer) {\n        var links = [];\n        try {\n            // look in meta data property\n            links = getLinksFromTransferMetaData(dataTransfer);\n            if (links.length) {\n                return links;\n            }\n            links = getLinksFromTransferURLData(dataTransfer);\n        } catch (e) {\n            // nope nope nope (probably IE trouble)\n        }\n        return links;\n    };\n\n    var getLinksFromTransferURLData = function getLinksFromTransferURLData(dataTransfer) {\n        var data = dataTransfer.getData('url');\n        if (typeof data === 'string' && data.length) {\n            return [data];\n        }\n        return [];\n    };\n\n    var getLinksFromTransferMetaData = function getLinksFromTransferMetaData(dataTransfer) {\n        var data = dataTransfer.getData('text/html');\n        if (typeof data === 'string' && data.length) {\n            var matches = data.match(/src\\s*=\\s*\"(.+?)\"/);\n            if (matches) {\n                return [matches[1]];\n            }\n        }\n        return [];\n    };\n\n    var dragNDropObservers = [];\n\n    var eventPosition = function eventPosition(e) {\n        return {\n            pageLeft: e.pageX,\n            pageTop: e.pageY,\n            scopeLeft: e.offsetX || e.layerX,\n            scopeTop: e.offsetY || e.layerY,\n        };\n    };\n\n    var createDragNDropClient = function createDragNDropClient(\n        element,\n        scopeToObserve,\n        filterElement\n    ) {\n        var observer = getDragNDropObserver(scopeToObserve);\n\n        var client = {\n            element: element,\n            filterElement: filterElement,\n            state: null,\n            ondrop: function ondrop() {},\n            onenter: function onenter() {},\n            ondrag: function ondrag() {},\n            onexit: function onexit() {},\n            onload: function onload() {},\n            allowdrop: function allowdrop() {},\n        };\n\n        client.destroy = observer.addListener(client);\n\n        return client;\n    };\n\n    var getDragNDropObserver = function getDragNDropObserver(element) {\n        // see if already exists, if so, return\n        var observer = dragNDropObservers.find(function(item) {\n            return item.element === element;\n        });\n        if (observer) {\n            return observer;\n        }\n\n        // create new observer, does not yet exist for this element\n        var newObserver = createDragNDropObserver(element);\n        dragNDropObservers.push(newObserver);\n        return newObserver;\n    };\n\n    var createDragNDropObserver = function createDragNDropObserver(element) {\n        var clients = [];\n\n        var routes = {\n            dragenter: dragenter,\n            dragover: dragover,\n            dragleave: dragleave,\n            drop: drop,\n        };\n\n        var handlers = {};\n\n        forin(routes, function(event, createHandler) {\n            handlers[event] = createHandler(element, clients);\n            element.addEventListener(event, handlers[event], false);\n        });\n\n        var observer = {\n            element: element,\n            addListener: function addListener(client) {\n                // add as client\n                clients.push(client);\n\n                // return removeListener function\n                return function() {\n                    // remove client\n                    clients.splice(clients.indexOf(client), 1);\n\n                    // if no more clients, clean up observer\n                    if (clients.length === 0) {\n                        dragNDropObservers.splice(dragNDropObservers.indexOf(observer), 1);\n\n                        forin(routes, function(event) {\n                            element.removeEventListener(event, handlers[event], false);\n                        });\n                    }\n                };\n            },\n        };\n\n        return observer;\n    };\n\n    var elementFromPoint = function elementFromPoint(root, point) {\n        if (!('elementFromPoint' in root)) {\n            root = document;\n        }\n        return root.elementFromPoint(point.x, point.y);\n    };\n\n    var isEventTarget = function isEventTarget(e, target) {\n        // get root\n        var root = getRootNode(target);\n\n        // get element at position\n        // if root is not actual shadow DOM and does not have elementFromPoint method, use the one on document\n        var elementAtPosition = elementFromPoint(root, {\n            x: e.pageX - window.pageXOffset,\n            y: e.pageY - window.pageYOffset,\n        });\n\n        // test if target is the element or if one of its children is\n        return elementAtPosition === target || target.contains(elementAtPosition);\n    };\n\n    var initialTarget = null;\n\n    var setDropEffect = function setDropEffect(dataTransfer, effect) {\n        // is in try catch as IE11 will throw error if not\n        try {\n            dataTransfer.dropEffect = effect;\n        } catch (e) {}\n    };\n\n    var dragenter = function dragenter(root, clients) {\n        return function(e) {\n            e.preventDefault();\n\n            initialTarget = e.target;\n\n            clients.forEach(function(client) {\n                var element = client.element,\n                    onenter = client.onenter;\n\n                if (isEventTarget(e, element)) {\n                    client.state = 'enter';\n\n                    // fire enter event\n                    onenter(eventPosition(e));\n                }\n            });\n        };\n    };\n\n    var dragover = function dragover(root, clients) {\n        return function(e) {\n            e.preventDefault();\n\n            var dataTransfer = e.dataTransfer;\n\n            requestDataTransferItems(dataTransfer).then(function(items) {\n                var overDropTarget = false;\n\n                clients.some(function(client) {\n                    var filterElement = client.filterElement,\n                        element = client.element,\n                        onenter = client.onenter,\n                        onexit = client.onexit,\n                        ondrag = client.ondrag,\n                        allowdrop = client.allowdrop;\n\n                    // by default we can drop\n                    setDropEffect(dataTransfer, 'copy');\n\n                    // allow transfer of these items\n                    var allowsTransfer = allowdrop(items);\n\n                    // only used when can be dropped on page\n                    if (!allowsTransfer) {\n                        setDropEffect(dataTransfer, 'none');\n                        return;\n                    }\n\n                    // targetting this client\n                    if (isEventTarget(e, element)) {\n                        overDropTarget = true;\n\n                        // had no previous state, means we are entering this client\n                        if (client.state === null) {\n                            client.state = 'enter';\n                            onenter(eventPosition(e));\n                            return;\n                        }\n\n                        // now over element (no matter if it allows the drop or not)\n                        client.state = 'over';\n\n                        // needs to allow transfer\n                        if (filterElement && !allowsTransfer) {\n                            setDropEffect(dataTransfer, 'none');\n                            return;\n                        }\n\n                        // dragging\n                        ondrag(eventPosition(e));\n                    } else {\n                        // should be over an element to drop\n                        if (filterElement && !overDropTarget) {\n                            setDropEffect(dataTransfer, 'none');\n                        }\n\n                        // might have just left this client?\n                        if (client.state) {\n                            client.state = null;\n                            onexit(eventPosition(e));\n                        }\n                    }\n                });\n            });\n        };\n    };\n\n    var drop = function drop(root, clients) {\n        return function(e) {\n            e.preventDefault();\n\n            var dataTransfer = e.dataTransfer;\n\n            requestDataTransferItems(dataTransfer).then(function(items) {\n                clients.forEach(function(client) {\n                    var filterElement = client.filterElement,\n                        element = client.element,\n                        ondrop = client.ondrop,\n                        onexit = client.onexit,\n                        allowdrop = client.allowdrop;\n\n                    client.state = null;\n\n                    // if we're filtering on element we need to be over the element to drop\n                    if (filterElement && !isEventTarget(e, element)) return;\n\n                    // no transfer for this client\n                    if (!allowdrop(items)) return onexit(eventPosition(e));\n\n                    // we can drop these items on this client\n                    ondrop(eventPosition(e), items);\n                });\n            });\n        };\n    };\n\n    var dragleave = function dragleave(root, clients) {\n        return function(e) {\n            if (initialTarget !== e.target) {\n                return;\n            }\n\n            clients.forEach(function(client) {\n                var onexit = client.onexit;\n\n                client.state = null;\n\n                onexit(eventPosition(e));\n            });\n        };\n    };\n\n    var createHopper = function createHopper(scope, validateItems, options) {\n        // is now hopper scope\n        scope.classList.add('filepond--hopper');\n\n        // shortcuts\n        var catchesDropsOnPage = options.catchesDropsOnPage,\n            requiresDropOnElement = options.requiresDropOnElement,\n            _options$filterItems = options.filterItems,\n            filterItems =\n                _options$filterItems === void 0\n                    ? function(items) {\n                          return items;\n                      }\n                    : _options$filterItems;\n\n        // create a dnd client\n        var client = createDragNDropClient(\n            scope,\n            catchesDropsOnPage ? document.documentElement : scope,\n            requiresDropOnElement\n        );\n\n        // current client state\n        var lastState = '';\n        var currentState = '';\n\n        // determines if a file may be dropped\n        client.allowdrop = function(items) {\n            // TODO: if we can, throw error to indicate the items cannot by dropped\n\n            return validateItems(filterItems(items));\n        };\n\n        client.ondrop = function(position, items) {\n            var filteredItems = filterItems(items);\n\n            if (!validateItems(filteredItems)) {\n                api.ondragend(position);\n                return;\n            }\n\n            currentState = 'drag-drop';\n\n            api.onload(filteredItems, position);\n        };\n\n        client.ondrag = function(position) {\n            api.ondrag(position);\n        };\n\n        client.onenter = function(position) {\n            currentState = 'drag-over';\n\n            api.ondragstart(position);\n        };\n\n        client.onexit = function(position) {\n            currentState = 'drag-exit';\n\n            api.ondragend(position);\n        };\n\n        var api = {\n            updateHopperState: function updateHopperState() {\n                if (lastState !== currentState) {\n                    scope.dataset.hopperState = currentState;\n                    lastState = currentState;\n                }\n            },\n            onload: function onload() {},\n            ondragstart: function ondragstart() {},\n            ondrag: function ondrag() {},\n            ondragend: function ondragend() {},\n            destroy: function destroy() {\n                // destroy client\n                client.destroy();\n            },\n        };\n\n        return api;\n    };\n\n    var listening = false;\n    var listeners$1 = [];\n\n    var handlePaste = function handlePaste(e) {\n        // if is pasting in input or textarea and the target is outside of a filepond scope, ignore\n        var activeEl = document.activeElement;\n        if (activeEl && /textarea|input/i.test(activeEl.nodeName)) {\n            // test textarea or input is contained in filepond root\n            var inScope = false;\n            var element = activeEl;\n            while (element !== document.body) {\n                if (element.classList.contains('filepond--root')) {\n                    inScope = true;\n                    break;\n                }\n                element = element.parentNode;\n            }\n\n            if (!inScope) return;\n        }\n\n        requestDataTransferItems(e.clipboardData).then(function(files) {\n            // no files received\n            if (!files.length) {\n                return;\n            }\n\n            // notify listeners of received files\n            listeners$1.forEach(function(listener) {\n                return listener(files);\n            });\n        });\n    };\n\n    var listen = function listen(cb) {\n        // can't add twice\n        if (listeners$1.includes(cb)) {\n            return;\n        }\n\n        // add initial listener\n        listeners$1.push(cb);\n\n        // setup paste listener for entire page\n        if (listening) {\n            return;\n        }\n\n        listening = true;\n        document.addEventListener('paste', handlePaste);\n    };\n\n    var unlisten = function unlisten(listener) {\n        arrayRemove(listeners$1, listeners$1.indexOf(listener));\n\n        // clean up\n        if (listeners$1.length === 0) {\n            document.removeEventListener('paste', handlePaste);\n            listening = false;\n        }\n    };\n\n    var createPaster = function createPaster() {\n        var cb = function cb(files) {\n            api.onload(files);\n        };\n\n        var api = {\n            destroy: function destroy() {\n                unlisten(cb);\n            },\n            onload: function onload() {},\n        };\n\n        listen(cb);\n\n        return api;\n    };\n\n    /**\n     * Creates the file view\n     */\n    var create$d = function create(_ref) {\n        var root = _ref.root,\n            props = _ref.props;\n        root.element.id = 'filepond--assistant-' + props.id;\n        attr(root.element, 'role', 'status');\n        attr(root.element, 'aria-live', 'polite');\n        attr(root.element, 'aria-relevant', 'additions');\n    };\n\n    var addFilesNotificationTimeout = null;\n    var notificationClearTimeout = null;\n\n    var filenames = [];\n\n    var assist = function assist(root, message) {\n        root.element.textContent = message;\n    };\n\n    var clear$1 = function clear(root) {\n        root.element.textContent = '';\n    };\n\n    var listModified = function listModified(root, filename, label) {\n        var total = root.query('GET_TOTAL_ITEMS');\n        assist(\n            root,\n            label +\n                ' ' +\n                filename +\n                ', ' +\n                total +\n                ' ' +\n                (total === 1\n                    ? root.query('GET_LABEL_FILE_COUNT_SINGULAR')\n                    : root.query('GET_LABEL_FILE_COUNT_PLURAL'))\n        );\n\n        // clear group after set amount of time so the status is not read twice\n        clearTimeout(notificationClearTimeout);\n        notificationClearTimeout = setTimeout(function() {\n            clear$1(root);\n        }, 1500);\n    };\n\n    var isUsingFilePond = function isUsingFilePond(root) {\n        return root.element.parentNode.contains(document.activeElement);\n    };\n\n    var itemAdded = function itemAdded(_ref2) {\n        var root = _ref2.root,\n            action = _ref2.action;\n        if (!isUsingFilePond(root)) {\n            return;\n        }\n\n        root.element.textContent = '';\n        var item = root.query('GET_ITEM', action.id);\n        filenames.push(item.filename);\n\n        clearTimeout(addFilesNotificationTimeout);\n        addFilesNotificationTimeout = setTimeout(function() {\n            listModified(root, filenames.join(', '), root.query('GET_LABEL_FILE_ADDED'));\n\n            filenames.length = 0;\n        }, 750);\n    };\n\n    var itemRemoved = function itemRemoved(_ref3) {\n        var root = _ref3.root,\n            action = _ref3.action;\n        if (!isUsingFilePond(root)) {\n            return;\n        }\n\n        var item = action.item;\n        listModified(root, item.filename, root.query('GET_LABEL_FILE_REMOVED'));\n    };\n\n    var itemProcessed = function itemProcessed(_ref4) {\n        var root = _ref4.root,\n            action = _ref4.action;\n        // will also notify the user when FilePond is not being used, as the user might be occupied with other activities while uploading a file\n\n        var item = root.query('GET_ITEM', action.id);\n        var filename = item.filename;\n        var label = root.query('GET_LABEL_FILE_PROCESSING_COMPLETE');\n\n        assist(root, filename + ' ' + label);\n    };\n\n    var itemProcessedUndo = function itemProcessedUndo(_ref5) {\n        var root = _ref5.root,\n            action = _ref5.action;\n        var item = root.query('GET_ITEM', action.id);\n        var filename = item.filename;\n        var label = root.query('GET_LABEL_FILE_PROCESSING_ABORTED');\n\n        assist(root, filename + ' ' + label);\n    };\n\n    var itemError = function itemError(_ref6) {\n        var root = _ref6.root,\n            action = _ref6.action;\n        var item = root.query('GET_ITEM', action.id);\n        var filename = item.filename;\n\n        // will also notify the user when FilePond is not being used, as the user might be occupied with other activities while uploading a file\n\n        assist(root, action.status.main + ' ' + filename + ' ' + action.status.sub);\n    };\n\n    var assistant = createView({\n        create: create$d,\n        ignoreRect: true,\n        ignoreRectUpdate: true,\n        write: createRoute({\n            DID_LOAD_ITEM: itemAdded,\n            DID_REMOVE_ITEM: itemRemoved,\n            DID_COMPLETE_ITEM_PROCESSING: itemProcessed,\n\n            DID_ABORT_ITEM_PROCESSING: itemProcessedUndo,\n            DID_REVERT_ITEM_PROCESSING: itemProcessedUndo,\n\n            DID_THROW_ITEM_REMOVE_ERROR: itemError,\n            DID_THROW_ITEM_LOAD_ERROR: itemError,\n            DID_THROW_ITEM_INVALID: itemError,\n            DID_THROW_ITEM_PROCESSING_ERROR: itemError,\n        }),\n\n        tag: 'span',\n        name: 'assistant',\n    });\n\n    var toCamels = function toCamels(string) {\n        var separator = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '-';\n        return string.replace(new RegExp(separator + '.', 'g'), function(sub) {\n            return sub.charAt(1).toUpperCase();\n        });\n    };\n\n    var debounce = function debounce(func) {\n        var interval = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 16;\n        var immidiateOnly =\n            arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n        var last = Date.now();\n        var timeout = null;\n\n        return function() {\n            for (\n                var _len = arguments.length, args = new Array(_len), _key = 0;\n                _key < _len;\n                _key++\n            ) {\n                args[_key] = arguments[_key];\n            }\n            clearTimeout(timeout);\n\n            var dist = Date.now() - last;\n\n            var fn = function fn() {\n                last = Date.now();\n                func.apply(void 0, args);\n            };\n\n            if (dist < interval) {\n                // we need to delay by the difference between interval and dist\n                // for example: if distance is 10 ms and interval is 16 ms,\n                // we need to wait an additional 6ms before calling the function)\n                if (!immidiateOnly) {\n                    timeout = setTimeout(fn, interval - dist);\n                }\n            } else {\n                // go!\n                fn();\n            }\n        };\n    };\n\n    var MAX_FILES_LIMIT = 1000000;\n\n    var prevent = function prevent(e) {\n        return e.preventDefault();\n    };\n\n    var create$e = function create(_ref) {\n        var root = _ref.root,\n            props = _ref.props;\n        // Add id\n        var id = root.query('GET_ID');\n        if (id) {\n            root.element.id = id;\n        }\n\n        // Add className\n        var className = root.query('GET_CLASS_NAME');\n        if (className) {\n            className\n                .split(' ')\n                .filter(function(name) {\n                    return name.length;\n                })\n                .forEach(function(name) {\n                    root.element.classList.add(name);\n                });\n        }\n\n        // Field label\n        root.ref.label = root.appendChildView(\n            root.createChildView(\n                dropLabel,\n                Object.assign({}, props, {\n                    translateY: null,\n                    caption: root.query('GET_LABEL_IDLE'),\n                })\n            )\n        );\n\n        // List of items\n        root.ref.list = root.appendChildView(\n            root.createChildView(listScroller, { translateY: null })\n        );\n\n        // Background panel\n        root.ref.panel = root.appendChildView(root.createChildView(panel, { name: 'panel-root' }));\n\n        // Assistant notifies assistive tech when content changes\n        root.ref.assistant = root.appendChildView(\n            root.createChildView(assistant, Object.assign({}, props))\n        );\n\n        // Data\n        root.ref.data = root.appendChildView(root.createChildView(data, Object.assign({}, props)));\n\n        // Measure (tests if fixed height was set)\n        // DOCTYPE needs to be set for this to work\n        root.ref.measure = createElement$1('div');\n        root.ref.measure.style.height = '100%';\n        root.element.appendChild(root.ref.measure);\n\n        // information on the root height or fixed height status\n        root.ref.bounds = null;\n\n        // apply initial style properties\n        root.query('GET_STYLES')\n            .filter(function(style) {\n                return !isEmpty(style.value);\n            })\n            .map(function(_ref2) {\n                var name = _ref2.name,\n                    value = _ref2.value;\n                root.element.dataset[name] = value;\n            });\n\n        // determine if width changed\n        root.ref.widthPrevious = null;\n        root.ref.widthUpdated = debounce(function() {\n            root.ref.updateHistory = [];\n            root.dispatch('DID_RESIZE_ROOT');\n        }, 250);\n\n        // history of updates\n        root.ref.previousAspectRatio = null;\n        root.ref.updateHistory = [];\n\n        // prevent scrolling and zooming on iOS (only if supports pointer events, for then we can enable reorder)\n        var canHover = window.matchMedia('(pointer: fine) and (hover: hover)').matches;\n        var hasPointerEvents = 'PointerEvent' in window;\n        if (root.query('GET_ALLOW_REORDER') && hasPointerEvents && !canHover) {\n            root.element.addEventListener('touchmove', prevent, { passive: false });\n            root.element.addEventListener('gesturestart', prevent);\n        }\n\n        // add credits\n        var credits = root.query('GET_CREDITS');\n        var hasCredits = credits.length === 2;\n        if (hasCredits) {\n            var frag = document.createElement('a');\n            frag.className = 'filepond--credits';\n            frag.setAttribute('aria-hidden', 'true');\n            frag.href = credits[0];\n            frag.tabindex = -1;\n            frag.target = '_blank';\n            frag.rel = 'noopener noreferrer';\n            frag.textContent = credits[1];\n            root.element.appendChild(frag);\n            root.ref.credits = frag;\n        }\n    };\n\n    var write$9 = function write(_ref3) {\n        var root = _ref3.root,\n            props = _ref3.props,\n            actions = _ref3.actions;\n        // route actions\n        route$5({ root: root, props: props, actions: actions });\n\n        // apply style properties\n        actions\n            .filter(function(action) {\n                return /^DID_SET_STYLE_/.test(action.type);\n            })\n            .filter(function(action) {\n                return !isEmpty(action.data.value);\n            })\n            .map(function(_ref4) {\n                var type = _ref4.type,\n                    data = _ref4.data;\n                var name = toCamels(type.substring(8).toLowerCase(), '_');\n                root.element.dataset[name] = data.value;\n                root.invalidateLayout();\n            });\n\n        if (root.rect.element.hidden) return;\n\n        if (root.rect.element.width !== root.ref.widthPrevious) {\n            root.ref.widthPrevious = root.rect.element.width;\n            root.ref.widthUpdated();\n        }\n\n        // get box bounds, we do this only once\n        var bounds = root.ref.bounds;\n        if (!bounds) {\n            bounds = root.ref.bounds = calculateRootBoundingBoxHeight(root);\n\n            // destroy measure element\n            root.element.removeChild(root.ref.measure);\n            root.ref.measure = null;\n        }\n\n        // get quick references to various high level parts of the upload tool\n        var _root$ref = root.ref,\n            hopper = _root$ref.hopper,\n            label = _root$ref.label,\n            list = _root$ref.list,\n            panel = _root$ref.panel;\n\n        // sets correct state to hopper scope\n        if (hopper) {\n            hopper.updateHopperState();\n        }\n\n        // bool to indicate if we're full or not\n        var aspectRatio = root.query('GET_PANEL_ASPECT_RATIO');\n        var isMultiItem = root.query('GET_ALLOW_MULTIPLE');\n        var totalItems = root.query('GET_TOTAL_ITEMS');\n        var maxItems = isMultiItem ? root.query('GET_MAX_FILES') || MAX_FILES_LIMIT : 1;\n        var atMaxCapacity = totalItems === maxItems;\n\n        // action used to add item\n        var addAction = actions.find(function(action) {\n            return action.type === 'DID_ADD_ITEM';\n        });\n\n        // if reached max capacity and we've just reached it\n        if (atMaxCapacity && addAction) {\n            // get interaction type\n            var interactionMethod = addAction.data.interactionMethod;\n\n            // hide label\n            label.opacity = 0;\n\n            if (isMultiItem) {\n                label.translateY = -40;\n            } else {\n                if (interactionMethod === InteractionMethod.API) {\n                    label.translateX = 40;\n                } else if (interactionMethod === InteractionMethod.BROWSE) {\n                    label.translateY = 40;\n                } else {\n                    label.translateY = 30;\n                }\n            }\n        } else if (!atMaxCapacity) {\n            label.opacity = 1;\n            label.translateX = 0;\n            label.translateY = 0;\n        }\n\n        var listItemMargin = calculateListItemMargin(root);\n\n        var listHeight = calculateListHeight(root);\n\n        var labelHeight = label.rect.element.height;\n        var currentLabelHeight = !isMultiItem || atMaxCapacity ? 0 : labelHeight;\n\n        var listMarginTop = atMaxCapacity ? list.rect.element.marginTop : 0;\n        var listMarginBottom = totalItems === 0 ? 0 : list.rect.element.marginBottom;\n\n        var visualHeight =\n            currentLabelHeight + listMarginTop + listHeight.visual + listMarginBottom;\n        var boundsHeight =\n            currentLabelHeight + listMarginTop + listHeight.bounds + listMarginBottom;\n\n        // link list to label bottom position\n        list.translateY =\n            Math.max(0, currentLabelHeight - list.rect.element.marginTop) - listItemMargin.top;\n\n        if (aspectRatio) {\n            // fixed aspect ratio\n\n            // calculate height based on width\n            var width = root.rect.element.width;\n            var height = width * aspectRatio;\n\n            // clear history if aspect ratio has changed\n            if (aspectRatio !== root.ref.previousAspectRatio) {\n                root.ref.previousAspectRatio = aspectRatio;\n                root.ref.updateHistory = [];\n            }\n\n            // remember this width\n            var history = root.ref.updateHistory;\n            history.push(width);\n\n            var MAX_BOUNCES = 2;\n            if (history.length > MAX_BOUNCES * 2) {\n                var l = history.length;\n                var bottom = l - 10;\n                var bounces = 0;\n                for (var i = l; i >= bottom; i--) {\n                    if (history[i] === history[i - 2]) {\n                        bounces++;\n                    }\n\n                    if (bounces >= MAX_BOUNCES) {\n                        // dont adjust height\n                        return;\n                    }\n                }\n            }\n\n            // fix height of panel so it adheres to aspect ratio\n            panel.scalable = false;\n            panel.height = height;\n\n            // available height for list\n            var listAvailableHeight =\n                // the height of the panel minus the label height\n                height -\n                currentLabelHeight -\n                // the room we leave open between the end of the list and the panel bottom\n                (listMarginBottom - listItemMargin.bottom) -\n                // if we're full we need to leave some room between the top of the panel and the list\n                (atMaxCapacity ? listMarginTop : 0);\n\n            if (listHeight.visual > listAvailableHeight) {\n                list.overflow = listAvailableHeight;\n            } else {\n                list.overflow = null;\n            }\n\n            // set container bounds (so pushes siblings downwards)\n            root.height = height;\n        } else if (bounds.fixedHeight) {\n            // fixed height\n\n            // fix height of panel\n            panel.scalable = false;\n\n            // available height for list\n            var _listAvailableHeight =\n                // the height of the panel minus the label height\n                bounds.fixedHeight -\n                currentLabelHeight -\n                // the room we leave open between the end of the list and the panel bottom\n                (listMarginBottom - listItemMargin.bottom) -\n                // if we're full we need to leave some room between the top of the panel and the list\n                (atMaxCapacity ? listMarginTop : 0);\n\n            // set list height\n            if (listHeight.visual > _listAvailableHeight) {\n                list.overflow = _listAvailableHeight;\n            } else {\n                list.overflow = null;\n            }\n\n            // no need to set container bounds as these are handles by CSS fixed height\n        } else if (bounds.cappedHeight) {\n            // max-height\n\n            // not a fixed height panel\n            var isCappedHeight = visualHeight >= bounds.cappedHeight;\n            var panelHeight = Math.min(bounds.cappedHeight, visualHeight);\n            panel.scalable = true;\n            panel.height = isCappedHeight\n                ? panelHeight\n                : panelHeight - listItemMargin.top - listItemMargin.bottom;\n\n            // available height for list\n            var _listAvailableHeight2 =\n                // the height of the panel minus the label height\n                panelHeight -\n                currentLabelHeight -\n                // the room we leave open between the end of the list and the panel bottom\n                (listMarginBottom - listItemMargin.bottom) -\n                // if we're full we need to leave some room between the top of the panel and the list\n                (atMaxCapacity ? listMarginTop : 0);\n\n            // set list height (if is overflowing)\n            if (visualHeight > bounds.cappedHeight && listHeight.visual > _listAvailableHeight2) {\n                list.overflow = _listAvailableHeight2;\n            } else {\n                list.overflow = null;\n            }\n\n            // set container bounds (so pushes siblings downwards)\n            root.height = Math.min(\n                bounds.cappedHeight,\n                boundsHeight - listItemMargin.top - listItemMargin.bottom\n            );\n        } else {\n            // flexible height\n\n            // not a fixed height panel\n            var itemMargin = totalItems > 0 ? listItemMargin.top + listItemMargin.bottom : 0;\n            panel.scalable = true;\n            panel.height = Math.max(labelHeight, visualHeight - itemMargin);\n\n            // set container bounds (so pushes siblings downwards)\n            root.height = Math.max(labelHeight, boundsHeight - itemMargin);\n        }\n\n        // move credits to bottom\n        if (root.ref.credits && panel.heightCurrent)\n            root.ref.credits.style.transform = 'translateY(' + panel.heightCurrent + 'px)';\n    };\n\n    var calculateListItemMargin = function calculateListItemMargin(root) {\n        var item = root.ref.list.childViews[0].childViews[0];\n        return item\n            ? {\n                  top: item.rect.element.marginTop,\n                  bottom: item.rect.element.marginBottom,\n              }\n            : {\n                  top: 0,\n                  bottom: 0,\n              };\n    };\n\n    var calculateListHeight = function calculateListHeight(root) {\n        var visual = 0;\n        var bounds = 0;\n\n        // get file list reference\n        var scrollList = root.ref.list;\n        var itemList = scrollList.childViews[0];\n        var visibleChildren = itemList.childViews.filter(function(child) {\n            return child.rect.element.height;\n        });\n        var children = root\n            .query('GET_ACTIVE_ITEMS')\n            .map(function(item) {\n                return visibleChildren.find(function(child) {\n                    return child.id === item.id;\n                });\n            })\n            .filter(function(item) {\n                return item;\n            });\n\n        // no children, done!\n        if (children.length === 0) return { visual: visual, bounds: bounds };\n\n        var horizontalSpace = itemList.rect.element.width;\n        var dragIndex = getItemIndexByPosition(itemList, children, scrollList.dragCoordinates);\n\n        var childRect = children[0].rect.element;\n\n        var itemVerticalMargin = childRect.marginTop + childRect.marginBottom;\n        var itemHorizontalMargin = childRect.marginLeft + childRect.marginRight;\n\n        var itemWidth = childRect.width + itemHorizontalMargin;\n        var itemHeight = childRect.height + itemVerticalMargin;\n\n        var newItem = typeof dragIndex !== 'undefined' && dragIndex >= 0 ? 1 : 0;\n        var removedItem = children.find(function(child) {\n            return child.markedForRemoval && child.opacity < 0.45;\n        })\n            ? -1\n            : 0;\n        var verticalItemCount = children.length + newItem + removedItem;\n        var itemsPerRow = getItemsPerRow(horizontalSpace, itemWidth);\n\n        // stack\n        if (itemsPerRow === 1) {\n            children.forEach(function(item) {\n                var height = item.rect.element.height + itemVerticalMargin;\n                bounds += height;\n                visual += height * item.opacity;\n            });\n        }\n        // grid\n        else {\n            bounds = Math.ceil(verticalItemCount / itemsPerRow) * itemHeight;\n            visual = bounds;\n        }\n\n        return { visual: visual, bounds: bounds };\n    };\n\n    var calculateRootBoundingBoxHeight = function calculateRootBoundingBoxHeight(root) {\n        var height = root.ref.measureHeight || null;\n        var cappedHeight = parseInt(root.style.maxHeight, 10) || null;\n        var fixedHeight = height === 0 ? null : height;\n\n        return {\n            cappedHeight: cappedHeight,\n            fixedHeight: fixedHeight,\n        };\n    };\n\n    var exceedsMaxFiles = function exceedsMaxFiles(root, items) {\n        var allowReplace = root.query('GET_ALLOW_REPLACE');\n        var allowMultiple = root.query('GET_ALLOW_MULTIPLE');\n        var totalItems = root.query('GET_TOTAL_ITEMS');\n        var maxItems = root.query('GET_MAX_FILES');\n\n        // total amount of items being dragged\n        var totalBrowseItems = items.length;\n\n        // if does not allow multiple items and dragging more than one item\n        if (!allowMultiple && totalBrowseItems > 1) {\n            root.dispatch('DID_THROW_MAX_FILES', {\n                source: items,\n                error: createResponse('warning', 0, 'Max files'),\n            });\n\n            return true;\n        }\n\n        // limit max items to one if not allowed to drop multiple items\n        maxItems = allowMultiple ? maxItems : 1;\n\n        if (!allowMultiple && allowReplace) {\n            // There is only one item, so there is room to replace or add an item\n            return false;\n        }\n\n        // no more room?\n        var hasMaxItems = isInt(maxItems);\n        if (hasMaxItems && totalItems + totalBrowseItems > maxItems) {\n            root.dispatch('DID_THROW_MAX_FILES', {\n                source: items,\n                error: createResponse('warning', 0, 'Max files'),\n            });\n\n            return true;\n        }\n\n        return false;\n    };\n\n    var getDragIndex = function getDragIndex(list, children, position) {\n        var itemList = list.childViews[0];\n        return getItemIndexByPosition(itemList, children, {\n            left: position.scopeLeft - itemList.rect.element.left,\n            top:\n                position.scopeTop -\n                (list.rect.outer.top + list.rect.element.marginTop + list.rect.element.scrollTop),\n        });\n    };\n\n    /**\n     * Enable or disable file drop functionality\n     */\n    var toggleDrop = function toggleDrop(root) {\n        var isAllowed = root.query('GET_ALLOW_DROP');\n        var isDisabled = root.query('GET_DISABLED');\n        var enabled = isAllowed && !isDisabled;\n        if (enabled && !root.ref.hopper) {\n            var hopper = createHopper(\n                root.element,\n                function(items) {\n                    // allow quick validation of dropped items\n                    var beforeDropFile =\n                        root.query('GET_BEFORE_DROP_FILE') ||\n                        function() {\n                            return true;\n                        };\n\n                    // all items should be validated by all filters as valid\n                    var dropValidation = root.query('GET_DROP_VALIDATION');\n                    return dropValidation\n                        ? items.every(function(item) {\n                              return (\n                                  applyFilters('ALLOW_HOPPER_ITEM', item, {\n                                      query: root.query,\n                                  }).every(function(result) {\n                                      return result === true;\n                                  }) && beforeDropFile(item)\n                              );\n                          })\n                        : true;\n                },\n                {\n                    filterItems: function filterItems(items) {\n                        var ignoredFiles = root.query('GET_IGNORED_FILES');\n                        return items.filter(function(item) {\n                            if (isFile(item)) {\n                                return !ignoredFiles.includes(item.name.toLowerCase());\n                            }\n                            return true;\n                        });\n                    },\n                    catchesDropsOnPage: root.query('GET_DROP_ON_PAGE'),\n                    requiresDropOnElement: root.query('GET_DROP_ON_ELEMENT'),\n                }\n            );\n\n            hopper.onload = function(items, position) {\n                // get item children elements and sort based on list sort\n                var list = root.ref.list.childViews[0];\n                var visibleChildren = list.childViews.filter(function(child) {\n                    return child.rect.element.height;\n                });\n                var children = root\n                    .query('GET_ACTIVE_ITEMS')\n                    .map(function(item) {\n                        return visibleChildren.find(function(child) {\n                            return child.id === item.id;\n                        });\n                    })\n                    .filter(function(item) {\n                        return item;\n                    });\n\n                applyFilterChain('ADD_ITEMS', items, { dispatch: root.dispatch }).then(function(\n                    queue\n                ) {\n                    // these files don't fit so stop here\n                    if (exceedsMaxFiles(root, queue)) return false;\n\n                    // go\n                    root.dispatch('ADD_ITEMS', {\n                        items: queue,\n                        index: getDragIndex(root.ref.list, children, position),\n                        interactionMethod: InteractionMethod.DROP,\n                    });\n                });\n\n                root.dispatch('DID_DROP', { position: position });\n\n                root.dispatch('DID_END_DRAG', { position: position });\n            };\n\n            hopper.ondragstart = function(position) {\n                root.dispatch('DID_START_DRAG', { position: position });\n            };\n\n            hopper.ondrag = debounce(function(position) {\n                root.dispatch('DID_DRAG', { position: position });\n            });\n\n            hopper.ondragend = function(position) {\n                root.dispatch('DID_END_DRAG', { position: position });\n            };\n\n            root.ref.hopper = hopper;\n\n            root.ref.drip = root.appendChildView(root.createChildView(drip));\n        } else if (!enabled && root.ref.hopper) {\n            root.ref.hopper.destroy();\n            root.ref.hopper = null;\n            root.removeChildView(root.ref.drip);\n        }\n    };\n\n    /**\n     * Enable or disable browse functionality\n     */\n    var toggleBrowse = function toggleBrowse(root, props) {\n        var isAllowed = root.query('GET_ALLOW_BROWSE');\n        var isDisabled = root.query('GET_DISABLED');\n        var enabled = isAllowed && !isDisabled;\n        if (enabled && !root.ref.browser) {\n            root.ref.browser = root.appendChildView(\n                root.createChildView(\n                    browser,\n                    Object.assign({}, props, {\n                        onload: function onload(items) {\n                            applyFilterChain('ADD_ITEMS', items, {\n                                dispatch: root.dispatch,\n                            }).then(function(queue) {\n                                // these files don't fit so stop here\n                                if (exceedsMaxFiles(root, queue)) return false;\n\n                                // add items!\n                                root.dispatch('ADD_ITEMS', {\n                                    items: queue,\n                                    index: -1,\n                                    interactionMethod: InteractionMethod.BROWSE,\n                                });\n                            });\n                        },\n                    })\n                ),\n\n                0\n            );\n        } else if (!enabled && root.ref.browser) {\n            root.removeChildView(root.ref.browser);\n            root.ref.browser = null;\n        }\n    };\n\n    /**\n     * Enable or disable paste functionality\n     */\n    var togglePaste = function togglePaste(root) {\n        var isAllowed = root.query('GET_ALLOW_PASTE');\n        var isDisabled = root.query('GET_DISABLED');\n        var enabled = isAllowed && !isDisabled;\n        if (enabled && !root.ref.paster) {\n            root.ref.paster = createPaster();\n            root.ref.paster.onload = function(items) {\n                applyFilterChain('ADD_ITEMS', items, { dispatch: root.dispatch }).then(function(\n                    queue\n                ) {\n                    // these files don't fit so stop here\n                    if (exceedsMaxFiles(root, queue)) return false;\n\n                    // add items!\n                    root.dispatch('ADD_ITEMS', {\n                        items: queue,\n                        index: -1,\n                        interactionMethod: InteractionMethod.PASTE,\n                    });\n                });\n            };\n        } else if (!enabled && root.ref.paster) {\n            root.ref.paster.destroy();\n            root.ref.paster = null;\n        }\n    };\n\n    /**\n     * Route actions\n     */\n    var route$5 = createRoute({\n        DID_SET_ALLOW_BROWSE: function DID_SET_ALLOW_BROWSE(_ref5) {\n            var root = _ref5.root,\n                props = _ref5.props;\n            toggleBrowse(root, props);\n        },\n        DID_SET_ALLOW_DROP: function DID_SET_ALLOW_DROP(_ref6) {\n            var root = _ref6.root;\n            toggleDrop(root);\n        },\n        DID_SET_ALLOW_PASTE: function DID_SET_ALLOW_PASTE(_ref7) {\n            var root = _ref7.root;\n            togglePaste(root);\n        },\n        DID_SET_DISABLED: function DID_SET_DISABLED(_ref8) {\n            var root = _ref8.root,\n                props = _ref8.props;\n            toggleDrop(root);\n            togglePaste(root);\n            toggleBrowse(root, props);\n            var isDisabled = root.query('GET_DISABLED');\n            if (isDisabled) {\n                root.element.dataset.disabled = 'disabled';\n            } else {\n                // delete root.element.dataset.disabled; <= this does not work on iOS 10\n                root.element.removeAttribute('data-disabled');\n            }\n        },\n    });\n\n    var root = createView({\n        name: 'root',\n        read: function read(_ref9) {\n            var root = _ref9.root;\n            if (root.ref.measure) {\n                root.ref.measureHeight = root.ref.measure.offsetHeight;\n            }\n        },\n        create: create$e,\n        write: write$9,\n        destroy: function destroy(_ref10) {\n            var root = _ref10.root;\n            if (root.ref.paster) {\n                root.ref.paster.destroy();\n            }\n            if (root.ref.hopper) {\n                root.ref.hopper.destroy();\n            }\n            root.element.removeEventListener('touchmove', prevent);\n            root.element.removeEventListener('gesturestart', prevent);\n        },\n        mixins: {\n            styles: ['height'],\n        },\n    });\n\n    // creates the app\n    var createApp = function createApp() {\n        var initialOptions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n        // let element\n        var originalElement = null;\n\n        // get default options\n        var defaultOptions = getOptions();\n\n        // create the data store, this will contain all our app info\n        var store = createStore(\n            // initial state (should be serializable)\n            createInitialState(defaultOptions),\n\n            // queries\n            [queries, createOptionQueries(defaultOptions)],\n\n            // action handlers\n            [actions, createOptionActions(defaultOptions)]\n        );\n\n        // set initial options\n        store.dispatch('SET_OPTIONS', { options: initialOptions });\n\n        // kick thread if visibility changes\n        var visibilityHandler = function visibilityHandler() {\n            if (document.hidden) return;\n            store.dispatch('KICK');\n        };\n        document.addEventListener('visibilitychange', visibilityHandler);\n\n        // re-render on window resize start and finish\n        var resizeDoneTimer = null;\n        var isResizing = false;\n        var isResizingHorizontally = false;\n        var initialWindowWidth = null;\n        var currentWindowWidth = null;\n        var resizeHandler = function resizeHandler() {\n            if (!isResizing) {\n                isResizing = true;\n            }\n            clearTimeout(resizeDoneTimer);\n            resizeDoneTimer = setTimeout(function() {\n                isResizing = false;\n                initialWindowWidth = null;\n                currentWindowWidth = null;\n                if (isResizingHorizontally) {\n                    isResizingHorizontally = false;\n                    store.dispatch('DID_STOP_RESIZE');\n                }\n            }, 500);\n        };\n        window.addEventListener('resize', resizeHandler);\n\n        // render initial view\n        var view = root(store, { id: getUniqueId() });\n\n        //\n        // PRIVATE API -------------------------------------------------------------------------------------\n        //\n        var isResting = false;\n        var isHidden = false;\n\n        var readWriteApi = {\n            // necessary for update loop\n\n            /**\n             * Reads from dom (never call manually)\n             * @private\n             */\n            _read: function _read() {\n                // test if we're resizing horizontally\n                // TODO: see if we can optimize this by measuring root rect\n                if (isResizing) {\n                    currentWindowWidth = window.innerWidth;\n                    if (!initialWindowWidth) {\n                        initialWindowWidth = currentWindowWidth;\n                    }\n\n                    if (!isResizingHorizontally && currentWindowWidth !== initialWindowWidth) {\n                        store.dispatch('DID_START_RESIZE');\n                        isResizingHorizontally = true;\n                    }\n                }\n\n                if (isHidden && isResting) {\n                    // test if is no longer hidden\n                    isResting = view.element.offsetParent === null;\n                }\n\n                // if resting, no need to read as numbers will still all be correct\n                if (isResting) return;\n\n                // read view data\n                view._read();\n\n                // if is hidden we need to know so we exit rest mode when revealed\n                isHidden = view.rect.element.hidden;\n            },\n\n            /**\n             * Writes to dom (never call manually)\n             * @private\n             */\n            _write: function _write(ts) {\n                // get all actions from store\n                var actions = store\n                    .processActionQueue()\n\n                    // filter out set actions (these will automatically trigger DID_SET)\n                    .filter(function(action) {\n                        return !/^SET_/.test(action.type);\n                    });\n\n                // if was idling and no actions stop here\n                if (isResting && !actions.length) return;\n\n                // some actions might trigger events\n                routeActionsToEvents(actions);\n\n                // update the view\n                isResting = view._write(ts, actions, isResizingHorizontally);\n\n                // will clean up all archived items\n                removeReleasedItems(store.query('GET_ITEMS'));\n\n                // now idling\n                if (isResting) {\n                    store.processDispatchQueue();\n                }\n            },\n        };\n\n        //\n        // EXPOSE EVENTS -------------------------------------------------------------------------------------\n        //\n        var createEvent = function createEvent(name) {\n            return function(data) {\n                // create default event\n                var event = {\n                    type: name,\n                };\n\n                // no data to add\n                if (!data) {\n                    return event;\n                }\n\n                // copy relevant props\n                if (data.hasOwnProperty('error')) {\n                    event.error = data.error ? Object.assign({}, data.error) : null;\n                }\n\n                if (data.status) {\n                    event.status = Object.assign({}, data.status);\n                }\n\n                if (data.file) {\n                    event.output = data.file;\n                }\n\n                // only source is available, else add item if possible\n                if (data.source) {\n                    event.file = data.source;\n                } else if (data.item || data.id) {\n                    var item = data.item ? data.item : store.query('GET_ITEM', data.id);\n                    event.file = item ? createItemAPI(item) : null;\n                }\n\n                // map all items in a possible items array\n                if (data.items) {\n                    event.items = data.items.map(createItemAPI);\n                }\n\n                // if this is a progress event add the progress amount\n                if (/progress/.test(name)) {\n                    event.progress = data.progress;\n                }\n\n                // copy relevant props\n                if (data.hasOwnProperty('origin') && data.hasOwnProperty('target')) {\n                    event.origin = data.origin;\n                    event.target = data.target;\n                }\n\n                return event;\n            };\n        };\n\n        var eventRoutes = {\n            DID_DESTROY: createEvent('destroy'),\n\n            DID_INIT: createEvent('init'),\n\n            DID_THROW_MAX_FILES: createEvent('warning'),\n\n            DID_INIT_ITEM: createEvent('initfile'),\n            DID_START_ITEM_LOAD: createEvent('addfilestart'),\n            DID_UPDATE_ITEM_LOAD_PROGRESS: createEvent('addfileprogress'),\n            DID_LOAD_ITEM: createEvent('addfile'),\n\n            DID_THROW_ITEM_INVALID: [createEvent('error'), createEvent('addfile')],\n\n            DID_THROW_ITEM_LOAD_ERROR: [createEvent('error'), createEvent('addfile')],\n\n            DID_THROW_ITEM_REMOVE_ERROR: [createEvent('error'), createEvent('removefile')],\n\n            DID_PREPARE_OUTPUT: createEvent('preparefile'),\n\n            DID_START_ITEM_PROCESSING: createEvent('processfilestart'),\n            DID_UPDATE_ITEM_PROCESS_PROGRESS: createEvent('processfileprogress'),\n            DID_ABORT_ITEM_PROCESSING: createEvent('processfileabort'),\n            DID_COMPLETE_ITEM_PROCESSING: createEvent('processfile'),\n            DID_COMPLETE_ITEM_PROCESSING_ALL: createEvent('processfiles'),\n            DID_REVERT_ITEM_PROCESSING: createEvent('processfilerevert'),\n\n            DID_THROW_ITEM_PROCESSING_ERROR: [createEvent('error'), createEvent('processfile')],\n\n            DID_REMOVE_ITEM: createEvent('removefile'),\n\n            DID_UPDATE_ITEMS: createEvent('updatefiles'),\n\n            DID_ACTIVATE_ITEM: createEvent('activatefile'),\n\n            DID_REORDER_ITEMS: createEvent('reorderfiles'),\n        };\n\n        var exposeEvent = function exposeEvent(event) {\n            // create event object to be dispatched\n            var detail = Object.assign({ pond: exports }, event);\n            delete detail.type;\n            view.element.dispatchEvent(\n                new CustomEvent('FilePond:' + event.type, {\n                    // event info\n                    detail: detail,\n\n                    // event behaviour\n                    bubbles: true,\n                    cancelable: true,\n                    composed: true, // triggers listeners outside of shadow root\n                })\n            );\n\n            // event object to params used for `on()` event handlers and callbacks `oninit()`\n            var params = [];\n\n            // if is possible error event, make it the first param\n            if (event.hasOwnProperty('error')) {\n                params.push(event.error);\n            }\n\n            // file is always section\n            if (event.hasOwnProperty('file')) {\n                params.push(event.file);\n            }\n\n            // append other props\n            var filtered = ['type', 'error', 'file'];\n            Object.keys(event)\n                .filter(function(key) {\n                    return !filtered.includes(key);\n                })\n                .forEach(function(key) {\n                    return params.push(event[key]);\n                });\n\n            // on(type, () => { })\n            exports.fire.apply(exports, [event.type].concat(params));\n\n            // oninit = () => {}\n            var handler = store.query('GET_ON' + event.type.toUpperCase());\n            if (handler) {\n                handler.apply(void 0, params);\n            }\n        };\n\n        var routeActionsToEvents = function routeActionsToEvents(actions) {\n            if (!actions.length) return;\n            actions\n                .filter(function(action) {\n                    return eventRoutes[action.type];\n                })\n                .forEach(function(action) {\n                    var routes = eventRoutes[action.type];\n                    (Array.isArray(routes) ? routes : [routes]).forEach(function(route) {\n                        // this isn't fantastic, but because of the stacking of settimeouts plugins can handle the did_load before the did_init\n                        if (action.type === 'DID_INIT_ITEM') {\n                            exposeEvent(route(action.data));\n                        } else {\n                            setTimeout(function() {\n                                exposeEvent(route(action.data));\n                            }, 0);\n                        }\n                    });\n                });\n        };\n\n        //\n        // PUBLIC API -------------------------------------------------------------------------------------\n        //\n        var setOptions = function setOptions(options) {\n            return store.dispatch('SET_OPTIONS', { options: options });\n        };\n\n        var getFile = function getFile(query) {\n            return store.query('GET_ACTIVE_ITEM', query);\n        };\n\n        var prepareFile = function prepareFile(query) {\n            return new Promise(function(resolve, reject) {\n                store.dispatch('REQUEST_ITEM_PREPARE', {\n                    query: query,\n                    success: function success(item) {\n                        resolve(item);\n                    },\n                    failure: function failure(error) {\n                        reject(error);\n                    },\n                });\n            });\n        };\n\n        var addFile = function addFile(source) {\n            var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n            return new Promise(function(resolve, reject) {\n                addFiles([{ source: source, options: options }], { index: options.index })\n                    .then(function(items) {\n                        return resolve(items && items[0]);\n                    })\n                    .catch(reject);\n            });\n        };\n\n        var isFilePondFile = function isFilePondFile(obj) {\n            return obj.file && obj.id;\n        };\n\n        var removeFile = function removeFile(query, options) {\n            // if only passed options\n            if (typeof query === 'object' && !isFilePondFile(query) && !options) {\n                options = query;\n                query = undefined;\n            }\n\n            // request item removal\n            store.dispatch('REMOVE_ITEM', Object.assign({}, options, { query: query }));\n\n            // see if item has been removed\n            return store.query('GET_ACTIVE_ITEM', query) === null;\n        };\n\n        var addFiles = function addFiles() {\n            for (\n                var _len = arguments.length, args = new Array(_len), _key = 0;\n                _key < _len;\n                _key++\n            ) {\n                args[_key] = arguments[_key];\n            }\n            return new Promise(function(resolve, reject) {\n                var sources = [];\n                var options = {};\n\n                // user passed a sources array\n                if (isArray(args[0])) {\n                    sources.push.apply(sources, args[0]);\n                    Object.assign(options, args[1] || {});\n                } else {\n                    // user passed sources as arguments, last one might be options object\n                    var lastArgument = args[args.length - 1];\n                    if (typeof lastArgument === 'object' && !(lastArgument instanceof Blob)) {\n                        Object.assign(options, args.pop());\n                    }\n\n                    // add rest to sources\n                    sources.push.apply(sources, args);\n                }\n\n                store.dispatch('ADD_ITEMS', {\n                    items: sources,\n                    index: options.index,\n                    interactionMethod: InteractionMethod.API,\n                    success: resolve,\n                    failure: reject,\n                });\n            });\n        };\n\n        var getFiles = function getFiles() {\n            return store.query('GET_ACTIVE_ITEMS');\n        };\n\n        var processFile = function processFile(query) {\n            return new Promise(function(resolve, reject) {\n                store.dispatch('REQUEST_ITEM_PROCESSING', {\n                    query: query,\n                    success: function success(item) {\n                        resolve(item);\n                    },\n                    failure: function failure(error) {\n                        reject(error);\n                    },\n                });\n            });\n        };\n\n        var prepareFiles = function prepareFiles() {\n            for (\n                var _len2 = arguments.length, args = new Array(_len2), _key2 = 0;\n                _key2 < _len2;\n                _key2++\n            ) {\n                args[_key2] = arguments[_key2];\n            }\n            var queries = Array.isArray(args[0]) ? args[0] : args;\n            var items = queries.length ? queries : getFiles();\n            return Promise.all(items.map(prepareFile));\n        };\n\n        var processFiles = function processFiles() {\n            for (\n                var _len3 = arguments.length, args = new Array(_len3), _key3 = 0;\n                _key3 < _len3;\n                _key3++\n            ) {\n                args[_key3] = arguments[_key3];\n            }\n            var queries = Array.isArray(args[0]) ? args[0] : args;\n            if (!queries.length) {\n                var files = getFiles().filter(function(item) {\n                    return (\n                        !(item.status === ItemStatus.IDLE && item.origin === FileOrigin.LOCAL) &&\n                        item.status !== ItemStatus.PROCESSING &&\n                        item.status !== ItemStatus.PROCESSING_COMPLETE &&\n                        item.status !== ItemStatus.PROCESSING_REVERT_ERROR\n                    );\n                });\n\n                return Promise.all(files.map(processFile));\n            }\n            return Promise.all(queries.map(processFile));\n        };\n\n        var removeFiles = function removeFiles() {\n            for (\n                var _len4 = arguments.length, args = new Array(_len4), _key4 = 0;\n                _key4 < _len4;\n                _key4++\n            ) {\n                args[_key4] = arguments[_key4];\n            }\n\n            var queries = Array.isArray(args[0]) ? args[0] : args;\n\n            var options;\n            if (typeof queries[queries.length - 1] === 'object') {\n                options = queries.pop();\n            } else if (Array.isArray(args[0])) {\n                options = args[1];\n            }\n\n            var files = getFiles();\n\n            if (!queries.length)\n                return Promise.all(\n                    files.map(function(file) {\n                        return removeFile(file, options);\n                    })\n                );\n\n            // when removing by index the indexes shift after each file removal so we need to convert indexes to ids\n            var mappedQueries = queries\n                .map(function(query) {\n                    return isNumber(query) ? (files[query] ? files[query].id : null) : query;\n                })\n                .filter(function(query) {\n                    return query;\n                });\n\n            return mappedQueries.map(function(q) {\n                return removeFile(q, options);\n            });\n        };\n\n        var exports = Object.assign(\n            {},\n\n            on(),\n            {},\n\n            readWriteApi,\n            {},\n\n            createOptionAPI(store, defaultOptions),\n            {\n                /**\n                 * Override options defined in options object\n                 * @param options\n                 */\n                setOptions: setOptions,\n\n                /**\n                 * Load the given file\n                 * @param source - the source of the file (either a File, base64 data uri or url)\n                 * @param options - object, { index: 0 }\n                 */\n                addFile: addFile,\n\n                /**\n                 * Load the given files\n                 * @param sources - the sources of the files to load\n                 * @param options - object, { index: 0 }\n                 */\n                addFiles: addFiles,\n\n                /**\n                 * Returns the file objects matching the given query\n                 * @param query { string, number, null }\n                 */\n                getFile: getFile,\n\n                /**\n                 * Upload file with given name\n                 * @param query { string, number, null  }\n                 */\n                processFile: processFile,\n\n                /**\n                 * Request prepare output for file with given name\n                 * @param query { string, number, null  }\n                 */\n                prepareFile: prepareFile,\n\n                /**\n                 * Removes a file by its name\n                 * @param query { string, number, null  }\n                 */\n                removeFile: removeFile,\n\n                /**\n                 * Moves a file to a new location in the files list\n                 */\n                moveFile: function moveFile(query, index) {\n                    return store.dispatch('MOVE_ITEM', { query: query, index: index });\n                },\n\n                /**\n                 * Returns all files (wrapped in public api)\n                 */\n                getFiles: getFiles,\n\n                /**\n                 * Starts uploading all files\n                 */\n                processFiles: processFiles,\n\n                /**\n                 * Clears all files from the files list\n                 */\n                removeFiles: removeFiles,\n\n                /**\n                 * Starts preparing output of all files\n                 */\n                prepareFiles: prepareFiles,\n\n                /**\n                 * Sort list of files\n                 */\n                sort: function sort(compare) {\n                    return store.dispatch('SORT', { compare: compare });\n                },\n\n                /**\n                 * Browse the file system for a file\n                 */\n                browse: function browse() {\n                    // needs to be trigger directly as user action needs to be traceable (is not traceable in requestAnimationFrame)\n                    var input = view.element.querySelector('input[type=file]');\n                    if (input) {\n                        input.click();\n                    }\n                },\n\n                /**\n                 * Destroys the app\n                 */\n                destroy: function destroy() {\n                    // request destruction\n                    exports.fire('destroy', view.element);\n\n                    // stop active processes (file uploads, fetches, stuff like that)\n                    // loop over items and depending on states call abort for ongoing processes\n                    store.dispatch('ABORT_ALL');\n\n                    // destroy view\n                    view._destroy();\n\n                    // stop listening to resize\n                    window.removeEventListener('resize', resizeHandler);\n\n                    // stop listening to the visiblitychange event\n                    document.removeEventListener('visibilitychange', visibilityHandler);\n\n                    // dispatch destroy\n                    store.dispatch('DID_DESTROY');\n                },\n\n                /**\n                 * Inserts the plugin before the target element\n                 */\n                insertBefore: function insertBefore$1(element) {\n                    return insertBefore(view.element, element);\n                },\n\n                /**\n                 * Inserts the plugin after the target element\n                 */\n                insertAfter: function insertAfter$1(element) {\n                    return insertAfter(view.element, element);\n                },\n\n                /**\n                 * Appends the plugin to the target element\n                 */\n                appendTo: function appendTo(element) {\n                    return element.appendChild(view.element);\n                },\n\n                /**\n                 * Replaces an element with the app\n                 */\n                replaceElement: function replaceElement(element) {\n                    // insert the app before the element\n                    insertBefore(view.element, element);\n\n                    // remove the original element\n                    element.parentNode.removeChild(element);\n\n                    // remember original element\n                    originalElement = element;\n                },\n\n                /**\n                 * Restores the original element\n                 */\n                restoreElement: function restoreElement() {\n                    if (!originalElement) {\n                        return; // no element to restore\n                    }\n\n                    // restore original element\n                    insertAfter(originalElement, view.element);\n\n                    // remove our element\n                    view.element.parentNode.removeChild(view.element);\n\n                    // remove reference\n                    originalElement = null;\n                },\n\n                /**\n                 * Returns true if the app root is attached to given element\n                 * @param element\n                 */\n                isAttachedTo: function isAttachedTo(element) {\n                    return view.element === element || originalElement === element;\n                },\n\n                /**\n                 * Returns the root element\n                 */\n                element: {\n                    get: function get() {\n                        return view.element;\n                    },\n                },\n\n                /**\n                 * Returns the current pond status\n                 */\n                status: {\n                    get: function get() {\n                        return store.query('GET_STATUS');\n                    },\n                },\n            }\n        );\n\n        // Done!\n        store.dispatch('DID_INIT');\n\n        // create actual api object\n        return createObject(exports);\n    };\n\n    var createAppObject = function createAppObject() {\n        var customOptions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n        // default options\n        var defaultOptions = {};\n        forin(getOptions(), function(key, value) {\n            defaultOptions[key] = value[0];\n        });\n\n        // set app options\n        var app = createApp(\n            Object.assign(\n                {},\n\n                defaultOptions,\n                {},\n\n                customOptions\n            )\n        );\n\n        // return the plugin instance\n        return app;\n    };\n\n    var lowerCaseFirstLetter = function lowerCaseFirstLetter(string) {\n        return string.charAt(0).toLowerCase() + string.slice(1);\n    };\n\n    var attributeNameToPropertyName = function attributeNameToPropertyName(attributeName) {\n        return toCamels(attributeName.replace(/^data-/, ''));\n    };\n\n    var mapObject = function mapObject(object, propertyMap) {\n        // remove unwanted\n        forin(propertyMap, function(selector, mapping) {\n            forin(object, function(property, value) {\n                // create regexp shortcut\n                var selectorRegExp = new RegExp(selector);\n\n                // tests if\n                var matches = selectorRegExp.test(property);\n\n                // no match, skip\n                if (!matches) {\n                    return;\n                }\n\n                // if there's a mapping, the original property is always removed\n                delete object[property];\n\n                // should only remove, we done!\n                if (mapping === false) {\n                    return;\n                }\n\n                // move value to new property\n                if (isString(mapping)) {\n                    object[mapping] = value;\n                    return;\n                }\n\n                // move to group\n                var group = mapping.group;\n                if (isObject(mapping) && !object[group]) {\n                    object[group] = {};\n                }\n\n                object[group][lowerCaseFirstLetter(property.replace(selectorRegExp, ''))] = value;\n            });\n\n            // do submapping\n            if (mapping.mapping) {\n                mapObject(object[mapping.group], mapping.mapping);\n            }\n        });\n    };\n\n    var getAttributesAsObject = function getAttributesAsObject(node) {\n        var attributeMapping =\n            arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n        // turn attributes into object\n        var attributes = [];\n        forin(node.attributes, function(index) {\n            attributes.push(node.attributes[index]);\n        });\n\n        var output = attributes\n            .filter(function(attribute) {\n                return attribute.name;\n            })\n            .reduce(function(obj, attribute) {\n                var value = attr(node, attribute.name);\n\n                obj[attributeNameToPropertyName(attribute.name)] =\n                    value === attribute.name ? true : value;\n                return obj;\n            }, {});\n\n        // do mapping of object properties\n        mapObject(output, attributeMapping);\n\n        return output;\n    };\n\n    var createAppAtElement = function createAppAtElement(element) {\n        var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n        // how attributes of the input element are mapped to the options for the plugin\n        var attributeMapping = {\n            // translate to other name\n            '^class$': 'className',\n            '^multiple$': 'allowMultiple',\n            '^capture$': 'captureMethod',\n            '^webkitdirectory$': 'allowDirectoriesOnly',\n\n            // group under single property\n            '^server': {\n                group: 'server',\n                mapping: {\n                    '^process': {\n                        group: 'process',\n                    },\n\n                    '^revert': {\n                        group: 'revert',\n                    },\n\n                    '^fetch': {\n                        group: 'fetch',\n                    },\n\n                    '^restore': {\n                        group: 'restore',\n                    },\n\n                    '^load': {\n                        group: 'load',\n                    },\n                },\n            },\n\n            // don't include in object\n            '^type$': false,\n            '^files$': false,\n        };\n\n        // add additional option translators\n        applyFilters('SET_ATTRIBUTE_TO_OPTION_MAP', attributeMapping);\n\n        // create final options object by setting options object and then overriding options supplied on element\n        var mergedOptions = Object.assign({}, options);\n\n        var attributeOptions = getAttributesAsObject(\n            element.nodeName === 'FIELDSET' ? element.querySelector('input[type=file]') : element,\n            attributeMapping\n        );\n\n        // merge with options object\n        Object.keys(attributeOptions).forEach(function(key) {\n            if (isObject(attributeOptions[key])) {\n                if (!isObject(mergedOptions[key])) {\n                    mergedOptions[key] = {};\n                }\n                Object.assign(mergedOptions[key], attributeOptions[key]);\n            } else {\n                mergedOptions[key] = attributeOptions[key];\n            }\n        });\n\n        // if parent is a fieldset, get files from parent by selecting all input fields that are not file upload fields\n        // these will then be automatically set to the initial files\n        mergedOptions.files = (options.files || []).concat(\n            Array.from(element.querySelectorAll('input:not([type=file])')).map(function(input) {\n                return {\n                    source: input.value,\n                    options: {\n                        type: input.dataset.type,\n                    },\n                };\n            })\n        );\n\n        // build plugin\n        var app = createAppObject(mergedOptions);\n\n        // add already selected files\n        if (element.files) {\n            Array.from(element.files).forEach(function(file) {\n                app.addFile(file);\n            });\n        }\n\n        // replace the target element\n        app.replaceElement(element);\n\n        // expose\n        return app;\n    };\n\n    // if an element is passed, we create the instance at that element, if not, we just create an up object\n    var createApp$1 = function createApp() {\n        return isNode(arguments.length <= 0 ? undefined : arguments[0])\n            ? createAppAtElement.apply(void 0, arguments)\n            : createAppObject.apply(void 0, arguments);\n    };\n\n    var PRIVATE_METHODS = ['fire', '_read', '_write'];\n\n    var createAppAPI = function createAppAPI(app) {\n        var api = {};\n\n        copyObjectPropertiesToObject(app, api, PRIVATE_METHODS);\n\n        return api;\n    };\n\n    /**\n     * Replaces placeholders in given string with replacements\n     * @param string - \"Foo {bar}\"\"\n     * @param replacements - { \"bar\": 10 }\n     */\n    var replaceInString = function replaceInString(string, replacements) {\n        return string.replace(/(?:{([a-zA-Z]+)})/g, function(match, group) {\n            return replacements[group];\n        });\n    };\n\n    var createWorker = function createWorker(fn) {\n        var workerBlob = new Blob(['(', fn.toString(), ')()'], {\n            type: 'application/javascript',\n        });\n\n        var workerURL = URL.createObjectURL(workerBlob);\n        var worker = new Worker(workerURL);\n\n        return {\n            transfer: function transfer(message, cb) {},\n            post: function post(message, cb, transferList) {\n                var id = getUniqueId();\n\n                worker.onmessage = function(e) {\n                    if (e.data.id === id) {\n                        cb(e.data.message);\n                    }\n                };\n\n                worker.postMessage(\n                    {\n                        id: id,\n                        message: message,\n                    },\n\n                    transferList\n                );\n            },\n            terminate: function terminate() {\n                worker.terminate();\n                URL.revokeObjectURL(workerURL);\n            },\n        };\n    };\n\n    var loadImage = function loadImage(url) {\n        return new Promise(function(resolve, reject) {\n            var img = new Image();\n            img.onload = function() {\n                resolve(img);\n            };\n            img.onerror = function(e) {\n                reject(e);\n            };\n            img.src = url;\n        });\n    };\n\n    var renameFile = function renameFile(file, name) {\n        var renamedFile = file.slice(0, file.size, file.type);\n        renamedFile.lastModifiedDate = file.lastModifiedDate;\n        renamedFile.name = name;\n        return renamedFile;\n    };\n\n    var copyFile = function copyFile(file) {\n        return renameFile(file, file.name);\n    };\n\n    // already registered plugins (can't register twice)\n    var registeredPlugins = [];\n\n    // pass utils to plugin\n    var createAppPlugin = function createAppPlugin(plugin) {\n        // already registered\n        if (registeredPlugins.includes(plugin)) {\n            return;\n        }\n\n        // remember this plugin\n        registeredPlugins.push(plugin);\n\n        // setup!\n        var pluginOutline = plugin({\n            addFilter: addFilter,\n            utils: {\n                Type: Type,\n                forin: forin,\n                isString: isString,\n                isFile: isFile,\n                toNaturalFileSize: toNaturalFileSize,\n                replaceInString: replaceInString,\n                getExtensionFromFilename: getExtensionFromFilename,\n                getFilenameWithoutExtension: getFilenameWithoutExtension,\n                guesstimateMimeType: guesstimateMimeType,\n                getFileFromBlob: getFileFromBlob,\n                getFilenameFromURL: getFilenameFromURL,\n                createRoute: createRoute,\n                createWorker: createWorker,\n                createView: createView,\n                createItemAPI: createItemAPI,\n                loadImage: loadImage,\n                copyFile: copyFile,\n                renameFile: renameFile,\n                createBlob: createBlob,\n                applyFilterChain: applyFilterChain,\n                text: text,\n                getNumericAspectRatioFromString: getNumericAspectRatioFromString,\n            },\n\n            views: {\n                fileActionButton: fileActionButton,\n            },\n        });\n\n        // add plugin options to default options\n        extendDefaultOptions(pluginOutline.options);\n    };\n\n    // feature detection used by supported() method\n    var isOperaMini = function isOperaMini() {\n        return Object.prototype.toString.call(window.operamini) === '[object OperaMini]';\n    };\n    var hasPromises = function hasPromises() {\n        return 'Promise' in window;\n    };\n    var hasBlobSlice = function hasBlobSlice() {\n        return 'slice' in Blob.prototype;\n    };\n    var hasCreateObjectURL = function hasCreateObjectURL() {\n        return 'URL' in window && 'createObjectURL' in window.URL;\n    };\n    var hasVisibility = function hasVisibility() {\n        return 'visibilityState' in document;\n    };\n    var hasTiming = function hasTiming() {\n        return 'performance' in window;\n    }; // iOS 8.x\n    var hasCSSSupports = function hasCSSSupports() {\n        return 'supports' in (window.CSS || {});\n    }; // use to detect Safari 9+\n    var isIE11 = function isIE11() {\n        return /MSIE|Trident/.test(window.navigator.userAgent);\n    };\n\n    var supported = (function() {\n        // Runs immediately and then remembers result for subsequent calls\n        var isSupported =\n            // Has to be a browser\n            isBrowser() &&\n            // Can't run on Opera Mini due to lack of everything\n            !isOperaMini() &&\n            // Require these APIs to feature detect a modern browser\n            hasVisibility() &&\n            hasPromises() &&\n            hasBlobSlice() &&\n            hasCreateObjectURL() &&\n            hasTiming() &&\n            // doesn't need CSSSupports but is a good way to detect Safari 9+ (we do want to support IE11 though)\n            (hasCSSSupports() || isIE11());\n\n        return function() {\n            return isSupported;\n        };\n    })();\n\n    /**\n     * Plugin internal state (over all instances)\n     */\n    var state = {\n        // active app instances, used to redraw the apps and to find the later\n        apps: [],\n    };\n\n    // plugin name\n    var name = 'filepond';\n\n    /**\n     * Public Plugin methods\n     */\n    var fn = function fn() {};\n    exports.Status = {};\n    exports.FileStatus = {};\n    exports.FileOrigin = {};\n    exports.OptionTypes = {};\n    exports.create = fn;\n    exports.destroy = fn;\n    exports.parse = fn;\n    exports.find = fn;\n    exports.registerPlugin = fn;\n    exports.getOptions = fn;\n    exports.setOptions = fn;\n\n    // if not supported, no API\n    if (supported()) {\n        // start painter and fire load event\n        createPainter(\n            function() {\n                state.apps.forEach(function(app) {\n                    return app._read();\n                });\n            },\n            function(ts) {\n                state.apps.forEach(function(app) {\n                    return app._write(ts);\n                });\n            }\n        );\n\n        // fire loaded event so we know when FilePond is available\n        var dispatch = function dispatch() {\n            // let others know we have area ready\n            document.dispatchEvent(\n                new CustomEvent('FilePond:loaded', {\n                    detail: {\n                        supported: supported,\n                        create: exports.create,\n                        destroy: exports.destroy,\n                        parse: exports.parse,\n                        find: exports.find,\n                        registerPlugin: exports.registerPlugin,\n                        setOptions: exports.setOptions,\n                    },\n                })\n            );\n\n            // clean up event\n            document.removeEventListener('DOMContentLoaded', dispatch);\n        };\n\n        if (document.readyState !== 'loading') {\n            // move to back of execution queue, FilePond should have been exported by then\n            setTimeout(function() {\n                return dispatch();\n            }, 0);\n        } else {\n            document.addEventListener('DOMContentLoaded', dispatch);\n        }\n\n        // updates the OptionTypes object based on the current options\n        var updateOptionTypes = function updateOptionTypes() {\n            return forin(getOptions(), function(key, value) {\n                exports.OptionTypes[key] = value[1];\n            });\n        };\n\n        exports.Status = Object.assign({}, Status);\n        exports.FileOrigin = Object.assign({}, FileOrigin);\n        exports.FileStatus = Object.assign({}, ItemStatus);\n\n        exports.OptionTypes = {};\n        updateOptionTypes();\n\n        // create method, creates apps and adds them to the app array\n        exports.create = function create() {\n            var app = createApp$1.apply(void 0, arguments);\n            app.on('destroy', exports.destroy);\n            state.apps.push(app);\n            return createAppAPI(app);\n        };\n\n        // destroys apps and removes them from the app array\n        exports.destroy = function destroy(hook) {\n            // returns true if the app was destroyed successfully\n            var indexToRemove = state.apps.findIndex(function(app) {\n                return app.isAttachedTo(hook);\n            });\n            if (indexToRemove >= 0) {\n                // remove from apps\n                var app = state.apps.splice(indexToRemove, 1)[0];\n\n                // restore original dom element\n                app.restoreElement();\n\n                return true;\n            }\n\n            return false;\n        };\n\n        // parses the given context for plugins (does not include the context element itself)\n        exports.parse = function parse(context) {\n            // get all possible hooks\n            var matchedHooks = Array.from(context.querySelectorAll('.' + name));\n\n            // filter out already active hooks\n            var newHooks = matchedHooks.filter(function(newHook) {\n                return !state.apps.find(function(app) {\n                    return app.isAttachedTo(newHook);\n                });\n            });\n\n            // create new instance for each hook\n            return newHooks.map(function(hook) {\n                return exports.create(hook);\n            });\n        };\n\n        // returns an app based on the given element hook\n        exports.find = function find(hook) {\n            var app = state.apps.find(function(app) {\n                return app.isAttachedTo(hook);\n            });\n            if (!app) {\n                return null;\n            }\n            return createAppAPI(app);\n        };\n\n        // adds a plugin extension\n        exports.registerPlugin = function registerPlugin() {\n            for (\n                var _len = arguments.length, plugins = new Array(_len), _key = 0;\n                _key < _len;\n                _key++\n            ) {\n                plugins[_key] = arguments[_key];\n            }\n\n            // register plugins\n            plugins.forEach(createAppPlugin);\n\n            // update OptionTypes, each plugin might have extended the default options\n            updateOptionTypes();\n        };\n\n        exports.getOptions = function getOptions$1() {\n            var opts = {};\n            forin(getOptions(), function(key, value) {\n                opts[key] = value[0];\n            });\n            return opts;\n        };\n\n        exports.setOptions = function setOptions$1(opts) {\n            if (isObject(opts)) {\n                // update existing plugins\n                state.apps.forEach(function(app) {\n                    app.setOptions(opts);\n                });\n\n                // override defaults\n                setOptions(opts);\n            }\n\n            // return new options\n            return exports.getOptions();\n        };\n    }\n\n    exports.supported = supported;\n\n    Object.defineProperty(exports, '__esModule', { value: true });\n});\n", "/*!\n * FilePondPluginImageValidateSize 1.2.7\n * Licensed under MIT, https://opensource.org/licenses/MIT/\n * Please visit https://pqina.nl/filepond/ for details.\n */\n\n/* eslint-disable */\n\n(function(global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined'\n    ? (module.exports = factory())\n    : typeof define === 'function' && define.amd\n    ? define(factory)\n    : ((global = global || self),\n      (global.FilePondPluginImageValidateSize = factory()));\n})(this, function() {\n  'use strict';\n\n  // test if file is of type image\n  var isImage = function isImage(file) {\n    return /^image/.test(file.type);\n  };\n\n  var getImageSize = function getImageSize(file) {\n    return new Promise(function(resolve, reject) {\n      var image = document.createElement('img');\n      image.src = URL.createObjectURL(file);\n      image.onerror = function(err) {\n        clearInterval(intervalId);\n        reject(err);\n      };\n      var intervalId = setInterval(function() {\n        if (image.naturalWidth && image.naturalHeight) {\n          clearInterval(intervalId);\n          URL.revokeObjectURL(image.src);\n          resolve({\n            width: image.naturalWidth,\n            height: image.naturalHeight\n          });\n        }\n      }, 1);\n    });\n  };\n\n  var plugin = function plugin(_ref) {\n    var addFilter = _ref.addFilter,\n      utils = _ref.utils;\n    // get quick reference to Type utils\n    var Type = utils.Type,\n      replaceInString = utils.replaceInString,\n      isFile = utils.isFile;\n\n    // required file size\n    var validateFile = function validateFile(file, bounds, measure) {\n      return new Promise(function(resolve, reject) {\n        var onReceiveSize = function onReceiveSize(_ref2) {\n          var width = _ref2.width,\n            height = _ref2.height;\n          var minWidth = bounds.minWidth,\n            minHeight = bounds.minHeight,\n            maxWidth = bounds.maxWidth,\n            maxHeight = bounds.maxHeight,\n            minResolution = bounds.minResolution,\n            maxResolution = bounds.maxResolution;\n\n          var resolution = width * height;\n\n          // validation result\n          if (width < minWidth || height < minHeight) {\n            reject('TOO_SMALL');\n          } else if (width > maxWidth || height > maxHeight) {\n            reject('TOO_BIG');\n          } else if (minResolution !== null && resolution < minResolution) {\n            reject('TOO_LOW_RES');\n          } else if (maxResolution !== null && resolution > maxResolution) {\n            reject('TOO_HIGH_RES');\n          }\n\n          // all is well\n          resolve();\n        };\n\n        getImageSize(file)\n          .then(onReceiveSize)\n          .catch(function() {\n            // no custom measure method supplied, exit here\n            if (!measure) {\n              reject();\n              return;\n            }\n\n            // try fallback if defined by user, else reject\n            measure(file, bounds)\n              .then(onReceiveSize)\n              .catch(function() {\n                return reject();\n              });\n          });\n      });\n    };\n\n    // called for each file that is loaded\n    // right before it is set to the item state\n    // should return a promise\n    addFilter('LOAD_FILE', function(file, _ref3) {\n      var query = _ref3.query;\n      return new Promise(function(resolve, reject) {\n        if (\n          !isFile(file) ||\n          !isImage(file) ||\n          !query('GET_ALLOW_IMAGE_VALIDATE_SIZE')\n        ) {\n          resolve(file);\n          return;\n        }\n\n        // get required dimensions\n        var bounds = {\n          minWidth: query('GET_IMAGE_VALIDATE_SIZE_MIN_WIDTH'),\n          minHeight: query('GET_IMAGE_VALIDATE_SIZE_MIN_HEIGHT'),\n          maxWidth: query('GET_IMAGE_VALIDATE_SIZE_MAX_WIDTH'),\n          maxHeight: query('GET_IMAGE_VALIDATE_SIZE_MAX_HEIGHT'),\n          minResolution: query('GET_IMAGE_VALIDATE_SIZE_MIN_RESOLUTION'),\n          maxResolution: query('GET_IMAGE_VALIDATE_SIZE_MAX_RESOLUTION')\n        };\n\n        // get optional custom measure function\n        var measure = query('GET_IMAGE_VALIDATE_SIZE_MEASURE');\n\n        validateFile(file, bounds, measure)\n          .then(function() {\n            resolve(file);\n          })\n          .catch(function(error) {\n            var status = error\n              ? {\n                  TOO_SMALL: {\n                    label: query(\n                      'GET_IMAGE_VALIDATE_SIZE_LABEL_IMAGE_SIZE_TOO_SMALL'\n                    ),\n                    details: query(\n                      'GET_IMAGE_VALIDATE_SIZE_LABEL_EXPECTED_MIN_SIZE'\n                    )\n                  },\n\n                  TOO_BIG: {\n                    label: query(\n                      'GET_IMAGE_VALIDATE_SIZE_LABEL_IMAGE_SIZE_TOO_BIG'\n                    ),\n                    details: query(\n                      'GET_IMAGE_VALIDATE_SIZE_LABEL_EXPECTED_MAX_SIZE'\n                    )\n                  },\n\n                  TOO_LOW_RES: {\n                    label: query(\n                      'GET_IMAGE_VALIDATE_SIZE_LABEL_IMAGE_RESOLUTION_TOO_LOW'\n                    ),\n                    details: query(\n                      'GET_IMAGE_VALIDATE_SIZE_LABEL_EXPECTED_MIN_RESOLUTION'\n                    )\n                  },\n\n                  TOO_HIGH_RES: {\n                    label: query(\n                      'GET_IMAGE_VALIDATE_SIZE_LABEL_IMAGE_RESOLUTION_TOO_HIGH'\n                    ),\n                    details: query(\n                      'GET_IMAGE_VALIDATE_SIZE_LABEL_EXPECTED_MAX_RESOLUTION'\n                    )\n                  }\n                }[error]\n              : {\n                  label: query('GET_IMAGE_VALIDATE_SIZE_LABEL_FORMAT_ERROR'),\n                  details: file.type\n                };\n\n            reject({\n              status: {\n                main: status.label,\n                sub: error\n                  ? replaceInString(status.details, bounds)\n                  : status.details\n              }\n            });\n          });\n      });\n    });\n\n    // expose plugin\n    return {\n      // default options\n      options: {\n        // Enable or disable file type validation\n        allowImageValidateSize: [true, Type.BOOLEAN],\n\n        // Error thrown when image can not be loaded\n        imageValidateSizeLabelFormatError: [\n          'Image type not supported',\n          Type.STRING\n        ],\n\n        // Custom function to use as image measure\n        imageValidateSizeMeasure: [null, Type.FUNCTION],\n\n        // Required amount of pixels in the image\n        imageValidateSizeMinResolution: [null, Type.INT],\n        imageValidateSizeMaxResolution: [null, Type.INT],\n        imageValidateSizeLabelImageResolutionTooLow: [\n          'Resolution is too low',\n          Type.STRING\n        ],\n        imageValidateSizeLabelImageResolutionTooHigh: [\n          'Resolution is too high',\n          Type.STRING\n        ],\n        imageValidateSizeLabelExpectedMinResolution: [\n          'Minimum resolution is {minResolution}',\n          Type.STRING\n        ],\n        imageValidateSizeLabelExpectedMaxResolution: [\n          'Maximum resolution is {maxResolution}',\n          Type.STRING\n        ],\n\n        // Required dimensions\n        imageValidateSizeMinWidth: [1, Type.INT], // needs to be at least one pixel\n        imageValidateSizeMinHeight: [1, Type.INT],\n        imageValidateSizeMaxWidth: [65535, Type.INT], // maximum size of JPEG, fine for now I guess\n        imageValidateSizeMaxHeight: [65535, Type.INT],\n\n        // Label to show when an image is too small or image is too big\n        imageValidateSizeLabelImageSizeTooSmall: [\n          'Image is too small',\n          Type.STRING\n        ],\n        imageValidateSizeLabelImageSizeTooBig: [\n          'Image is too big',\n          Type.STRING\n        ],\n        imageValidateSizeLabelExpectedMinSize: [\n          'Minimum size is {minWidth} \u00D7 {minHeight}',\n          Type.STRING\n        ],\n        imageValidateSizeLabelExpectedMaxSize: [\n          'Maximum size is {maxWidth} \u00D7 {maxHeight}',\n          Type.STRING\n        ]\n      }\n    };\n  };\n\n  // fire pluginloaded event if running in browser, this allows registering the plugin when using async script tags\n  var isBrowser =\n    typeof window !== 'undefined' && typeof window.document !== 'undefined';\n  if (isBrowser) {\n    document.dispatchEvent(\n      new CustomEvent('FilePond:pluginloaded', { detail: plugin })\n    );\n  }\n\n  return plugin;\n});\n", "/*!\n * FilePondPluginFileValidateSize 2.2.8\n * Licensed under MIT, https://opensource.org/licenses/MIT/\n * Please visit https://pqina.nl/filepond/ for details.\n */\n\n/* eslint-disable */\n\n(function(global, factory) {\n    typeof exports === 'object' && typeof module !== 'undefined'\n        ? (module.exports = factory())\n        : typeof define === 'function' && define.amd\n        ? define(factory)\n        : ((global = global || self), (global.FilePondPluginFileValidateSize = factory()));\n})(this, function() {\n    'use strict';\n\n    var plugin = function plugin(_ref) {\n        var addFilter = _ref.addFilter,\n            utils = _ref.utils;\n        // get quick reference to Type utils\n        var Type = utils.Type,\n            replaceInString = utils.replaceInString,\n            toNaturalFileSize = utils.toNaturalFileSize;\n\n        // filtering if an item is allowed in hopper\n        addFilter('ALLOW_HOPPER_ITEM', function(file, _ref2) {\n            var query = _ref2.query;\n            if (!query('GET_ALLOW_FILE_SIZE_VALIDATION')) {\n                return true;\n            }\n\n            var sizeMax = query('GET_MAX_FILE_SIZE');\n            if (sizeMax !== null && file.size > sizeMax) {\n                return false;\n            }\n\n            var sizeMin = query('GET_MIN_FILE_SIZE');\n            if (sizeMin !== null && file.size < sizeMin) {\n                return false;\n            }\n\n            return true;\n        });\n\n        // called for each file that is loaded\n        // right before it is set to the item state\n        // should return a promise\n        addFilter('LOAD_FILE', function(file, _ref3) {\n            var query = _ref3.query;\n            return new Promise(function(resolve, reject) {\n                // if not allowed, all fine, exit\n                if (!query('GET_ALLOW_FILE_SIZE_VALIDATION')) {\n                    return resolve(file);\n                }\n\n                // check if file should be filtered\n                var fileFilter = query('GET_FILE_VALIDATE_SIZE_FILTER');\n                if (fileFilter && !fileFilter(file)) {\n                    return resolve(file);\n                }\n\n                // reject or resolve based on file size\n                var sizeMax = query('GET_MAX_FILE_SIZE');\n                if (sizeMax !== null && file.size > sizeMax) {\n                    reject({\n                        status: {\n                            main: query('GET_LABEL_MAX_FILE_SIZE_EXCEEDED'),\n                            sub: replaceInString(query('GET_LABEL_MAX_FILE_SIZE'), {\n                                filesize: toNaturalFileSize(\n                                    sizeMax,\n                                    '.',\n                                    query('GET_FILE_SIZE_BASE'),\n                                    query('GET_FILE_SIZE_LABELS', query)\n                                ),\n                            }),\n                        },\n                    });\n\n                    return;\n                }\n\n                // reject or resolve based on file size\n                var sizeMin = query('GET_MIN_FILE_SIZE');\n                if (sizeMin !== null && file.size < sizeMin) {\n                    reject({\n                        status: {\n                            main: query('GET_LABEL_MIN_FILE_SIZE_EXCEEDED'),\n                            sub: replaceInString(query('GET_LABEL_MIN_FILE_SIZE'), {\n                                filesize: toNaturalFileSize(\n                                    sizeMin,\n                                    '.',\n                                    query('GET_FILE_SIZE_BASE'),\n                                    query('GET_FILE_SIZE_LABELS', query)\n                                ),\n                            }),\n                        },\n                    });\n\n                    return;\n                }\n\n                // returns the current option value\n                var totalSizeMax = query('GET_MAX_TOTAL_FILE_SIZE');\n                if (totalSizeMax !== null) {\n                    // get the current total file size\n                    var currentTotalSize = query('GET_ACTIVE_ITEMS').reduce(function(total, item) {\n                        return total + item.fileSize;\n                    }, 0);\n\n                    // get the size of the new file\n                    if (currentTotalSize > totalSizeMax) {\n                        reject({\n                            status: {\n                                main: query('GET_LABEL_MAX_TOTAL_FILE_SIZE_EXCEEDED'),\n                                sub: replaceInString(query('GET_LABEL_MAX_TOTAL_FILE_SIZE'), {\n                                    filesize: toNaturalFileSize(\n                                        totalSizeMax,\n                                        '.',\n                                        query('GET_FILE_SIZE_BASE'),\n                                        query('GET_FILE_SIZE_LABELS', query)\n                                    ),\n                                }),\n                            },\n                        });\n\n                        return;\n                    }\n                }\n\n                // file is fine, let's pass it back\n                resolve(file);\n            });\n        });\n\n        return {\n            options: {\n                // Enable or disable file type validation\n                allowFileSizeValidation: [true, Type.BOOLEAN],\n\n                // Max individual file size in bytes\n                maxFileSize: [null, Type.INT],\n\n                // Min individual file size in bytes\n                minFileSize: [null, Type.INT],\n\n                // Max total file size in bytes\n                maxTotalFileSize: [null, Type.INT],\n\n                // Filter the files that need to be validated for size\n                fileValidateSizeFilter: [null, Type.FUNCTION],\n\n                // error labels\n                labelMinFileSizeExceeded: ['File is too small', Type.STRING],\n                labelMinFileSize: ['Minimum file size is {filesize}', Type.STRING],\n\n                labelMaxFileSizeExceeded: ['File is too large', Type.STRING],\n                labelMaxFileSize: ['Maximum file size is {filesize}', Type.STRING],\n\n                labelMaxTotalFileSizeExceeded: ['Maximum total size exceeded', Type.STRING],\n                labelMaxTotalFileSize: ['Maximum total file size is {filesize}', Type.STRING],\n            },\n        };\n    };\n\n    // fire pluginloaded event if running in browser, this allows registering the plugin when using async script tags\n    var isBrowser = typeof window !== 'undefined' && typeof window.document !== 'undefined';\n    if (isBrowser) {\n        document.dispatchEvent(new CustomEvent('FilePond:pluginloaded', { detail: plugin }));\n    }\n\n    return plugin;\n});\n", "/*!\n * FilePondPluginFileValidateType 1.2.8\n * Licensed under MIT, https://opensource.org/licenses/MIT/\n * Please visit https://pqina.nl/filepond/ for details.\n */\n\n/* eslint-disable */\n\n(function(global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined'\n    ? (module.exports = factory())\n    : typeof define === 'function' && define.amd\n    ? define(factory)\n    : ((global = global || self),\n      (global.FilePondPluginFileValidateType = factory()));\n})(this, function() {\n  'use strict';\n\n  var plugin = function plugin(_ref) {\n    var addFilter = _ref.addFilter,\n      utils = _ref.utils;\n    // get quick reference to Type utils\n    var Type = utils.Type,\n      isString = utils.isString,\n      replaceInString = utils.replaceInString,\n      guesstimateMimeType = utils.guesstimateMimeType,\n      getExtensionFromFilename = utils.getExtensionFromFilename,\n      getFilenameFromURL = utils.getFilenameFromURL;\n\n    var mimeTypeMatchesWildCard = function mimeTypeMatchesWildCard(\n      mimeType,\n      wildcard\n    ) {\n      var mimeTypeGroup = (/^[^/]+/.exec(mimeType) || []).pop(); // image/png -> image\n      var wildcardGroup = wildcard.slice(0, -2); // image/* -> image\n      return mimeTypeGroup === wildcardGroup;\n    };\n\n    var isValidMimeType = function isValidMimeType(\n      acceptedTypes,\n      userInputType\n    ) {\n      return acceptedTypes.some(function(acceptedType) {\n        // accepted is wildcard mime type\n        if (/\\*$/.test(acceptedType)) {\n          return mimeTypeMatchesWildCard(userInputType, acceptedType);\n        }\n\n        // is normal mime type\n        return acceptedType === userInputType;\n      });\n    };\n\n    var getItemType = function getItemType(item) {\n      // if the item is a url we guess the mime type by the extension\n      var type = '';\n      if (isString(item)) {\n        var filename = getFilenameFromURL(item);\n        var extension = getExtensionFromFilename(filename);\n        if (extension) {\n          type = guesstimateMimeType(extension);\n        }\n      } else {\n        type = item.type;\n      }\n\n      return type;\n    };\n\n    var validateFile = function validateFile(\n      item,\n      acceptedFileTypes,\n      typeDetector\n    ) {\n      // no types defined, everything is allowed \\o/\n      if (acceptedFileTypes.length === 0) {\n        return true;\n      }\n\n      // gets the item type\n      var type = getItemType(item);\n\n      // no type detector, test now\n      if (!typeDetector) {\n        return isValidMimeType(acceptedFileTypes, type);\n      }\n\n      // use type detector\n      return new Promise(function(resolve, reject) {\n        typeDetector(item, type)\n          .then(function(detectedType) {\n            if (isValidMimeType(acceptedFileTypes, detectedType)) {\n              resolve();\n            } else {\n              reject();\n            }\n          })\n          .catch(reject);\n      });\n    };\n\n    var applyMimeTypeMap = function applyMimeTypeMap(map) {\n      return function(acceptedFileType) {\n        return map[acceptedFileType] === null\n          ? false\n          : map[acceptedFileType] || acceptedFileType;\n      };\n    };\n\n    // setup attribute mapping for accept\n    addFilter('SET_ATTRIBUTE_TO_OPTION_MAP', function(map) {\n      return Object.assign(map, {\n        accept: 'acceptedFileTypes'\n      });\n    });\n\n    // filtering if an item is allowed in hopper\n    addFilter('ALLOW_HOPPER_ITEM', function(file, _ref2) {\n      var query = _ref2.query;\n      // if we are not doing file type validation exit\n      if (!query('GET_ALLOW_FILE_TYPE_VALIDATION')) {\n        return true;\n      }\n\n      // we validate the file against the accepted file types\n      return validateFile(file, query('GET_ACCEPTED_FILE_TYPES'));\n    });\n\n    // called for each file that is loaded\n    // right before it is set to the item state\n    // should return a promise\n    addFilter('LOAD_FILE', function(file, _ref3) {\n      var query = _ref3.query;\n      return new Promise(function(resolve, reject) {\n        if (!query('GET_ALLOW_FILE_TYPE_VALIDATION')) {\n          resolve(file);\n          return;\n        }\n\n        var acceptedFileTypes = query('GET_ACCEPTED_FILE_TYPES');\n\n        // custom type detector method\n        var typeDetector = query('GET_FILE_VALIDATE_TYPE_DETECT_TYPE');\n\n        // if invalid, exit here\n        var validationResult = validateFile(\n          file,\n          acceptedFileTypes,\n          typeDetector\n        );\n\n        var handleRejection = function handleRejection() {\n          var acceptedFileTypesMapped = acceptedFileTypes\n            .map(\n              applyMimeTypeMap(\n                query('GET_FILE_VALIDATE_TYPE_LABEL_EXPECTED_TYPES_MAP')\n              )\n            )\n            .filter(function(label) {\n              return label !== false;\n            });\n\n          var acceptedFileTypesMapped_unique = acceptedFileTypesMapped.filter(\n            function(item, index) {\n              return acceptedFileTypesMapped.indexOf(item) === index;\n            }\n          );\n\n          reject({\n            status: {\n              main: query('GET_LABEL_FILE_TYPE_NOT_ALLOWED'),\n              sub: replaceInString(\n                query('GET_FILE_VALIDATE_TYPE_LABEL_EXPECTED_TYPES'),\n                {\n                  allTypes: acceptedFileTypesMapped_unique.join(', '),\n                  allButLastType: acceptedFileTypesMapped_unique\n                    .slice(0, -1)\n                    .join(', '),\n                  lastType:\n                    acceptedFileTypesMapped_unique[\n                      acceptedFileTypesMapped.length - 1\n                    ]\n                }\n              )\n            }\n          });\n        };\n\n        // has returned new filename immidiately\n        if (typeof validationResult === 'boolean') {\n          if (!validationResult) {\n            return handleRejection();\n          }\n          return resolve(file);\n        }\n\n        // is promise\n        validationResult\n          .then(function() {\n            resolve(file);\n          })\n          .catch(handleRejection);\n      });\n    });\n\n    // expose plugin\n    return {\n      // default options\n      options: {\n        // Enable or disable file type validation\n        allowFileTypeValidation: [true, Type.BOOLEAN],\n\n        // What file types to accept\n        acceptedFileTypes: [[], Type.ARRAY],\n        // - must be comma separated\n        // - mime types: image/png, image/jpeg, image/gif\n        // - extensions: .png, .jpg, .jpeg ( not enabled yet )\n        // - wildcards: image/*\n\n        // label to show when a type is not allowed\n        labelFileTypeNotAllowed: ['File is of invalid type', Type.STRING],\n\n        // nicer label\n        fileValidateTypeLabelExpectedTypes: [\n          'Expects {allButLastType} or {lastType}',\n          Type.STRING\n        ],\n\n        // map mime types to extensions\n        fileValidateTypeLabelExpectedTypesMap: [{}, Type.OBJECT],\n\n        // Custom function to detect type of file\n        fileValidateTypeDetectType: [null, Type.FUNCTION]\n      }\n    };\n  };\n\n  // fire pluginloaded event if running in browser, this allows registering the plugin when using async script tags\n  var isBrowser =\n    typeof window !== 'undefined' && typeof window.document !== 'undefined';\n  if (isBrowser) {\n    document.dispatchEvent(\n      new CustomEvent('FilePond:pluginloaded', { detail: plugin })\n    );\n  }\n\n  return plugin;\n});\n", "/*!\n * FilePondPluginImagePreview 4.6.11\n * Licensed under MIT, https://opensource.org/licenses/MIT/\n * Please visit https://pqina.nl/filepond/ for details.\n */\n\n/* eslint-disable */\n\n(function(global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined'\n    ? (module.exports = factory())\n    : typeof define === 'function' && define.amd\n    ? define(factory)\n    : ((global = global || self),\n      (global.FilePondPluginImagePreview = factory()));\n})(this, function() {\n  'use strict';\n\n  // test if file is of type image and can be viewed in canvas\n  var isPreviewableImage = function isPreviewableImage(file) {\n    return /^image/.test(file.type);\n  };\n\n  function _typeof(obj) {\n    if (typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol') {\n      _typeof = function(obj) {\n        return typeof obj;\n      };\n    } else {\n      _typeof = function(obj) {\n        return obj &&\n          typeof Symbol === 'function' &&\n          obj.constructor === Symbol &&\n          obj !== Symbol.prototype\n          ? 'symbol'\n          : typeof obj;\n      };\n    }\n\n    return _typeof(obj);\n  }\n\n  var REACT_ELEMENT_TYPE;\n\n  function _jsx(type, props, key, children) {\n    if (!REACT_ELEMENT_TYPE) {\n      REACT_ELEMENT_TYPE =\n        (typeof Symbol === 'function' &&\n          Symbol.for &&\n          Symbol.for('react.element')) ||\n        0xeac7;\n    }\n\n    var defaultProps = type && type.defaultProps;\n    var childrenLength = arguments.length - 3;\n\n    if (!props && childrenLength !== 0) {\n      props = {\n        children: void 0\n      };\n    }\n\n    if (props && defaultProps) {\n      for (var propName in defaultProps) {\n        if (props[propName] === void 0) {\n          props[propName] = defaultProps[propName];\n        }\n      }\n    } else if (!props) {\n      props = defaultProps || {};\n    }\n\n    if (childrenLength === 1) {\n      props.children = children;\n    } else if (childrenLength > 1) {\n      var childArray = new Array(childrenLength);\n\n      for (var i = 0; i < childrenLength; i++) {\n        childArray[i] = arguments[i + 3];\n      }\n\n      props.children = childArray;\n    }\n\n    return {\n      $$typeof: REACT_ELEMENT_TYPE,\n      type: type,\n      key: key === undefined ? null : '' + key,\n      ref: null,\n      props: props,\n      _owner: null\n    };\n  }\n\n  function _asyncIterator(iterable) {\n    var method;\n\n    if (typeof Symbol === 'function') {\n      if (Symbol.asyncIterator) {\n        method = iterable[Symbol.asyncIterator];\n        if (method != null) return method.call(iterable);\n      }\n\n      if (Symbol.iterator) {\n        method = iterable[Symbol.iterator];\n        if (method != null) return method.call(iterable);\n      }\n    }\n\n    throw new TypeError('Object is not async iterable');\n  }\n\n  function _AwaitValue(value) {\n    this.wrapped = value;\n  }\n\n  function _AsyncGenerator(gen) {\n    var front, back;\n\n    function send(key, arg) {\n      return new Promise(function(resolve, reject) {\n        var request = {\n          key: key,\n          arg: arg,\n          resolve: resolve,\n          reject: reject,\n          next: null\n        };\n\n        if (back) {\n          back = back.next = request;\n        } else {\n          front = back = request;\n          resume(key, arg);\n        }\n      });\n    }\n\n    function resume(key, arg) {\n      try {\n        var result = gen[key](arg);\n        var value = result.value;\n        var wrappedAwait = value instanceof _AwaitValue;\n        Promise.resolve(wrappedAwait ? value.wrapped : value).then(\n          function(arg) {\n            if (wrappedAwait) {\n              resume('next', arg);\n              return;\n            }\n\n            settle(result.done ? 'return' : 'normal', arg);\n          },\n          function(err) {\n            resume('throw', err);\n          }\n        );\n      } catch (err) {\n        settle('throw', err);\n      }\n    }\n\n    function settle(type, value) {\n      switch (type) {\n        case 'return':\n          front.resolve({\n            value: value,\n            done: true\n          });\n          break;\n\n        case 'throw':\n          front.reject(value);\n          break;\n\n        default:\n          front.resolve({\n            value: value,\n            done: false\n          });\n          break;\n      }\n\n      front = front.next;\n\n      if (front) {\n        resume(front.key, front.arg);\n      } else {\n        back = null;\n      }\n    }\n\n    this._invoke = send;\n\n    if (typeof gen.return !== 'function') {\n      this.return = undefined;\n    }\n  }\n\n  if (typeof Symbol === 'function' && Symbol.asyncIterator) {\n    _AsyncGenerator.prototype[Symbol.asyncIterator] = function() {\n      return this;\n    };\n  }\n\n  _AsyncGenerator.prototype.next = function(arg) {\n    return this._invoke('next', arg);\n  };\n\n  _AsyncGenerator.prototype.throw = function(arg) {\n    return this._invoke('throw', arg);\n  };\n\n  _AsyncGenerator.prototype.return = function(arg) {\n    return this._invoke('return', arg);\n  };\n\n  function _wrapAsyncGenerator(fn) {\n    return function() {\n      return new _AsyncGenerator(fn.apply(this, arguments));\n    };\n  }\n\n  function _awaitAsyncGenerator(value) {\n    return new _AwaitValue(value);\n  }\n\n  function _asyncGeneratorDelegate(inner, awaitWrap) {\n    var iter = {},\n      waiting = false;\n\n    function pump(key, value) {\n      waiting = true;\n      value = new Promise(function(resolve) {\n        resolve(inner[key](value));\n      });\n      return {\n        done: false,\n        value: awaitWrap(value)\n      };\n    }\n\n    if (typeof Symbol === 'function' && Symbol.iterator) {\n      iter[Symbol.iterator] = function() {\n        return this;\n      };\n    }\n\n    iter.next = function(value) {\n      if (waiting) {\n        waiting = false;\n        return value;\n      }\n\n      return pump('next', value);\n    };\n\n    if (typeof inner.throw === 'function') {\n      iter.throw = function(value) {\n        if (waiting) {\n          waiting = false;\n          throw value;\n        }\n\n        return pump('throw', value);\n      };\n    }\n\n    if (typeof inner.return === 'function') {\n      iter.return = function(value) {\n        return pump('return', value);\n      };\n    }\n\n    return iter;\n  }\n\n  function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n    try {\n      var info = gen[key](arg);\n      var value = info.value;\n    } catch (error) {\n      reject(error);\n      return;\n    }\n\n    if (info.done) {\n      resolve(value);\n    } else {\n      Promise.resolve(value).then(_next, _throw);\n    }\n  }\n\n  function _asyncToGenerator(fn) {\n    return function() {\n      var self = this,\n        args = arguments;\n      return new Promise(function(resolve, reject) {\n        var gen = fn.apply(self, args);\n\n        function _next(value) {\n          asyncGeneratorStep(\n            gen,\n            resolve,\n            reject,\n            _next,\n            _throw,\n            'next',\n            value\n          );\n        }\n\n        function _throw(err) {\n          asyncGeneratorStep(gen, resolve, reject, _next, _throw, 'throw', err);\n        }\n\n        _next(undefined);\n      });\n    };\n  }\n\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n\n  function _defineProperties(target, props) {\n    for (var i = 0; i < props.length; i++) {\n      var descriptor = props[i];\n      descriptor.enumerable = descriptor.enumerable || false;\n      descriptor.configurable = true;\n      if ('value' in descriptor) descriptor.writable = true;\n      Object.defineProperty(target, descriptor.key, descriptor);\n    }\n  }\n\n  function _createClass(Constructor, protoProps, staticProps) {\n    if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) _defineProperties(Constructor, staticProps);\n    return Constructor;\n  }\n\n  function _defineEnumerableProperties(obj, descs) {\n    for (var key in descs) {\n      var desc = descs[key];\n      desc.configurable = desc.enumerable = true;\n      if ('value' in desc) desc.writable = true;\n      Object.defineProperty(obj, key, desc);\n    }\n\n    if (Object.getOwnPropertySymbols) {\n      var objectSymbols = Object.getOwnPropertySymbols(descs);\n\n      for (var i = 0; i < objectSymbols.length; i++) {\n        var sym = objectSymbols[i];\n        var desc = descs[sym];\n        desc.configurable = desc.enumerable = true;\n        if ('value' in desc) desc.writable = true;\n        Object.defineProperty(obj, sym, desc);\n      }\n    }\n\n    return obj;\n  }\n\n  function _defaults(obj, defaults) {\n    var keys = Object.getOwnPropertyNames(defaults);\n\n    for (var i = 0; i < keys.length; i++) {\n      var key = keys[i];\n      var value = Object.getOwnPropertyDescriptor(defaults, key);\n\n      if (value && value.configurable && obj[key] === undefined) {\n        Object.defineProperty(obj, key, value);\n      }\n    }\n\n    return obj;\n  }\n\n  function _defineProperty(obj, key, value) {\n    if (key in obj) {\n      Object.defineProperty(obj, key, {\n        value: value,\n        enumerable: true,\n        configurable: true,\n        writable: true\n      });\n    } else {\n      obj[key] = value;\n    }\n\n    return obj;\n  }\n\n  function _extends() {\n    _extends =\n      Object.assign ||\n      function(target) {\n        for (var i = 1; i < arguments.length; i++) {\n          var source = arguments[i];\n\n          for (var key in source) {\n            if (Object.prototype.hasOwnProperty.call(source, key)) {\n              target[key] = source[key];\n            }\n          }\n        }\n\n        return target;\n      };\n\n    return _extends.apply(this, arguments);\n  }\n\n  function _objectSpread(target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i] != null ? arguments[i] : {};\n      var ownKeys = Object.keys(source);\n\n      if (typeof Object.getOwnPropertySymbols === 'function') {\n        ownKeys = ownKeys.concat(\n          Object.getOwnPropertySymbols(source).filter(function(sym) {\n            return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n          })\n        );\n      }\n\n      ownKeys.forEach(function(key) {\n        _defineProperty(target, key, source[key]);\n      });\n    }\n\n    return target;\n  }\n\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== 'function' && superClass !== null) {\n      throw new TypeError('Super expression must either be null or a function');\n    }\n\n    subClass.prototype = Object.create(superClass && superClass.prototype, {\n      constructor: {\n        value: subClass,\n        writable: true,\n        configurable: true\n      }\n    });\n    if (superClass) _setPrototypeOf(subClass, superClass);\n  }\n\n  function _inheritsLoose(subClass, superClass) {\n    subClass.prototype = Object.create(superClass.prototype);\n    subClass.prototype.constructor = subClass;\n    subClass.__proto__ = superClass;\n  }\n\n  function _getPrototypeOf(o) {\n    _getPrototypeOf = Object.setPrototypeOf\n      ? Object.getPrototypeOf\n      : function _getPrototypeOf(o) {\n          return o.__proto__ || Object.getPrototypeOf(o);\n        };\n    return _getPrototypeOf(o);\n  }\n\n  function _setPrototypeOf(o, p) {\n    _setPrototypeOf =\n      Object.setPrototypeOf ||\n      function _setPrototypeOf(o, p) {\n        o.__proto__ = p;\n        return o;\n      };\n\n    return _setPrototypeOf(o, p);\n  }\n\n  function isNativeReflectConstruct() {\n    if (typeof Reflect === 'undefined' || !Reflect.construct) return false;\n    if (Reflect.construct.sham) return false;\n    if (typeof Proxy === 'function') return true;\n\n    try {\n      Date.prototype.toString.call(Reflect.construct(Date, [], function() {}));\n      return true;\n    } catch (e) {\n      return false;\n    }\n  }\n\n  function _construct(Parent, args, Class) {\n    if (isNativeReflectConstruct()) {\n      _construct = Reflect.construct;\n    } else {\n      _construct = function _construct(Parent, args, Class) {\n        var a = [null];\n        a.push.apply(a, args);\n        var Constructor = Function.bind.apply(Parent, a);\n        var instance = new Constructor();\n        if (Class) _setPrototypeOf(instance, Class.prototype);\n        return instance;\n      };\n    }\n\n    return _construct.apply(null, arguments);\n  }\n\n  function _isNativeFunction(fn) {\n    return Function.toString.call(fn).indexOf('[native code]') !== -1;\n  }\n\n  function _wrapNativeSuper(Class) {\n    var _cache = typeof Map === 'function' ? new Map() : undefined;\n\n    _wrapNativeSuper = function _wrapNativeSuper(Class) {\n      if (Class === null || !_isNativeFunction(Class)) return Class;\n\n      if (typeof Class !== 'function') {\n        throw new TypeError(\n          'Super expression must either be null or a function'\n        );\n      }\n\n      if (typeof _cache !== 'undefined') {\n        if (_cache.has(Class)) return _cache.get(Class);\n\n        _cache.set(Class, Wrapper);\n      }\n\n      function Wrapper() {\n        return _construct(Class, arguments, _getPrototypeOf(this).constructor);\n      }\n\n      Wrapper.prototype = Object.create(Class.prototype, {\n        constructor: {\n          value: Wrapper,\n          enumerable: false,\n          writable: true,\n          configurable: true\n        }\n      });\n      return _setPrototypeOf(Wrapper, Class);\n    };\n\n    return _wrapNativeSuper(Class);\n  }\n\n  function _instanceof(left, right) {\n    if (\n      right != null &&\n      typeof Symbol !== 'undefined' &&\n      right[Symbol.hasInstance]\n    ) {\n      return right[Symbol.hasInstance](left);\n    } else {\n      return left instanceof right;\n    }\n  }\n\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule\n      ? obj\n      : {\n          default: obj\n        };\n  }\n\n  function _interopRequireWildcard(obj) {\n    if (obj && obj.__esModule) {\n      return obj;\n    } else {\n      var newObj = {};\n\n      if (obj != null) {\n        for (var key in obj) {\n          if (Object.prototype.hasOwnProperty.call(obj, key)) {\n            var desc =\n              Object.defineProperty && Object.getOwnPropertyDescriptor\n                ? Object.getOwnPropertyDescriptor(obj, key)\n                : {};\n\n            if (desc.get || desc.set) {\n              Object.defineProperty(newObj, key, desc);\n            } else {\n              newObj[key] = obj[key];\n            }\n          }\n        }\n      }\n\n      newObj.default = obj;\n      return newObj;\n    }\n  }\n\n  function _newArrowCheck(innerThis, boundThis) {\n    if (innerThis !== boundThis) {\n      throw new TypeError('Cannot instantiate an arrow function');\n    }\n  }\n\n  function _objectDestructuringEmpty(obj) {\n    if (obj == null) throw new TypeError('Cannot destructure undefined');\n  }\n\n  function _objectWithoutPropertiesLoose(source, excluded) {\n    if (source == null) return {};\n    var target = {};\n    var sourceKeys = Object.keys(source);\n    var key, i;\n\n    for (i = 0; i < sourceKeys.length; i++) {\n      key = sourceKeys[i];\n      if (excluded.indexOf(key) >= 0) continue;\n      target[key] = source[key];\n    }\n\n    return target;\n  }\n\n  function _objectWithoutProperties(source, excluded) {\n    if (source == null) return {};\n\n    var target = _objectWithoutPropertiesLoose(source, excluded);\n\n    var key, i;\n\n    if (Object.getOwnPropertySymbols) {\n      var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n      for (i = 0; i < sourceSymbolKeys.length; i++) {\n        key = sourceSymbolKeys[i];\n        if (excluded.indexOf(key) >= 0) continue;\n        if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n        target[key] = source[key];\n      }\n    }\n\n    return target;\n  }\n\n  function _assertThisInitialized(self) {\n    if (self === void 0) {\n      throw new ReferenceError(\n        \"this hasn't been initialised - super() hasn't been called\"\n      );\n    }\n\n    return self;\n  }\n\n  function _possibleConstructorReturn(self, call) {\n    if (call && (typeof call === 'object' || typeof call === 'function')) {\n      return call;\n    }\n\n    return _assertThisInitialized(self);\n  }\n\n  function _superPropBase(object, property) {\n    while (!Object.prototype.hasOwnProperty.call(object, property)) {\n      object = _getPrototypeOf(object);\n      if (object === null) break;\n    }\n\n    return object;\n  }\n\n  function _get(target, property, receiver) {\n    if (typeof Reflect !== 'undefined' && Reflect.get) {\n      _get = Reflect.get;\n    } else {\n      _get = function _get(target, property, receiver) {\n        var base = _superPropBase(target, property);\n\n        if (!base) return;\n        var desc = Object.getOwnPropertyDescriptor(base, property);\n\n        if (desc.get) {\n          return desc.get.call(receiver);\n        }\n\n        return desc.value;\n      };\n    }\n\n    return _get(target, property, receiver || target);\n  }\n\n  function set(target, property, value, receiver) {\n    if (typeof Reflect !== 'undefined' && Reflect.set) {\n      set = Reflect.set;\n    } else {\n      set = function set(target, property, value, receiver) {\n        var base = _superPropBase(target, property);\n\n        var desc;\n\n        if (base) {\n          desc = Object.getOwnPropertyDescriptor(base, property);\n\n          if (desc.set) {\n            desc.set.call(receiver, value);\n            return true;\n          } else if (!desc.writable) {\n            return false;\n          }\n        }\n\n        desc = Object.getOwnPropertyDescriptor(receiver, property);\n\n        if (desc) {\n          if (!desc.writable) {\n            return false;\n          }\n\n          desc.value = value;\n          Object.defineProperty(receiver, property, desc);\n        } else {\n          _defineProperty(receiver, property, value);\n        }\n\n        return true;\n      };\n    }\n\n    return set(target, property, value, receiver);\n  }\n\n  function _set(target, property, value, receiver, isStrict) {\n    var s = set(target, property, value, receiver || target);\n\n    if (!s && isStrict) {\n      throw new Error('failed to set property');\n    }\n\n    return value;\n  }\n\n  function _taggedTemplateLiteral(strings, raw) {\n    if (!raw) {\n      raw = strings.slice(0);\n    }\n\n    return Object.freeze(\n      Object.defineProperties(strings, {\n        raw: {\n          value: Object.freeze(raw)\n        }\n      })\n    );\n  }\n\n  function _taggedTemplateLiteralLoose(strings, raw) {\n    if (!raw) {\n      raw = strings.slice(0);\n    }\n\n    strings.raw = raw;\n    return strings;\n  }\n\n  function _temporalRef(val, name) {\n    if (val === _temporalUndefined) {\n      throw new ReferenceError(name + ' is not defined - temporal dead zone');\n    } else {\n      return val;\n    }\n  }\n\n  function _readOnlyError(name) {\n    throw new Error('\"' + name + '\" is read-only');\n  }\n\n  function _classNameTDZError(name) {\n    throw new Error(\n      'Class \"' + name + '\" cannot be referenced in computed property keys.'\n    );\n  }\n\n  var _temporalUndefined = {};\n\n  function _slicedToArray(arr, i) {\n    return (\n      _arrayWithHoles(arr) ||\n      _iterableToArrayLimit(arr, i) ||\n      _nonIterableRest()\n    );\n  }\n\n  function _slicedToArrayLoose(arr, i) {\n    return (\n      _arrayWithHoles(arr) ||\n      _iterableToArrayLimitLoose(arr, i) ||\n      _nonIterableRest()\n    );\n  }\n\n  function _toArray(arr) {\n    return _arrayWithHoles(arr) || _iterableToArray(arr) || _nonIterableRest();\n  }\n\n  function _toConsumableArray(arr) {\n    return (\n      _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread()\n    );\n  }\n\n  function _arrayWithoutHoles(arr) {\n    if (Array.isArray(arr)) {\n      for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++)\n        arr2[i] = arr[i];\n\n      return arr2;\n    }\n  }\n\n  function _arrayWithHoles(arr) {\n    if (Array.isArray(arr)) return arr;\n  }\n\n  function _iterableToArray(iter) {\n    if (\n      Symbol.iterator in Object(iter) ||\n      Object.prototype.toString.call(iter) === '[object Arguments]'\n    )\n      return Array.from(iter);\n  }\n\n  function _iterableToArrayLimit(arr, i) {\n    var _arr = [];\n    var _n = true;\n    var _d = false;\n    var _e = undefined;\n\n    try {\n      for (\n        var _i = arr[Symbol.iterator](), _s;\n        !(_n = (_s = _i.next()).done);\n        _n = true\n      ) {\n        _arr.push(_s.value);\n\n        if (i && _arr.length === i) break;\n      }\n    } catch (err) {\n      _d = true;\n      _e = err;\n    } finally {\n      try {\n        if (!_n && _i['return'] != null) _i['return']();\n      } finally {\n        if (_d) throw _e;\n      }\n    }\n\n    return _arr;\n  }\n\n  function _iterableToArrayLimitLoose(arr, i) {\n    var _arr = [];\n\n    for (\n      var _iterator = arr[Symbol.iterator](), _step;\n      !(_step = _iterator.next()).done;\n\n    ) {\n      _arr.push(_step.value);\n\n      if (i && _arr.length === i) break;\n    }\n\n    return _arr;\n  }\n\n  function _nonIterableSpread() {\n    throw new TypeError('Invalid attempt to spread non-iterable instance');\n  }\n\n  function _nonIterableRest() {\n    throw new TypeError('Invalid attempt to destructure non-iterable instance');\n  }\n\n  function _skipFirstGeneratorNext(fn) {\n    return function() {\n      var it = fn.apply(this, arguments);\n      it.next();\n      return it;\n    };\n  }\n\n  function _toPrimitive(input, hint) {\n    if (typeof input !== 'object' || input === null) return input;\n    var prim = input[Symbol.toPrimitive];\n\n    if (prim !== undefined) {\n      var res = prim.call(input, hint || 'default');\n      if (typeof res !== 'object') return res;\n      throw new TypeError('@@toPrimitive must return a primitive value.');\n    }\n\n    return (hint === 'string' ? String : Number)(input);\n  }\n\n  function _toPropertyKey(arg) {\n    var key = _toPrimitive(arg, 'string');\n\n    return typeof key === 'symbol' ? key : String(key);\n  }\n\n  function _initializerWarningHelper(descriptor, context) {\n    throw new Error(\n      'Decorating class property failed. Please ensure that ' +\n        'proposal-class-properties is enabled and set to use loose mode. ' +\n        'To use proposal-class-properties in spec mode with decorators, wait for ' +\n        'the next major version of decorators in stage 2.'\n    );\n  }\n\n  function _initializerDefineProperty(target, property, descriptor, context) {\n    if (!descriptor) return;\n    Object.defineProperty(target, property, {\n      enumerable: descriptor.enumerable,\n      configurable: descriptor.configurable,\n      writable: descriptor.writable,\n      value: descriptor.initializer\n        ? descriptor.initializer.call(context)\n        : void 0\n    });\n  }\n\n  function _applyDecoratedDescriptor(\n    target,\n    property,\n    decorators,\n    descriptor,\n    context\n  ) {\n    var desc = {};\n    Object.keys(descriptor).forEach(function(key) {\n      desc[key] = descriptor[key];\n    });\n    desc.enumerable = !!desc.enumerable;\n    desc.configurable = !!desc.configurable;\n\n    if ('value' in desc || desc.initializer) {\n      desc.writable = true;\n    }\n\n    desc = decorators\n      .slice()\n      .reverse()\n      .reduce(function(desc, decorator) {\n        return decorator(target, property, desc) || desc;\n      }, desc);\n\n    if (context && desc.initializer !== void 0) {\n      desc.value = desc.initializer ? desc.initializer.call(context) : void 0;\n      desc.initializer = undefined;\n    }\n\n    if (desc.initializer === void 0) {\n      Object.defineProperty(target, property, desc);\n      desc = null;\n    }\n\n    return desc;\n  }\n\n  var id = 0;\n\n  function _classPrivateFieldLooseKey(name) {\n    return '__private_' + id++ + '_' + name;\n  }\n\n  function _classPrivateFieldLooseBase(receiver, privateKey) {\n    if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) {\n      throw new TypeError('attempted to use private field on non-instance');\n    }\n\n    return receiver;\n  }\n\n  function _classPrivateFieldGet(receiver, privateMap) {\n    if (!privateMap.has(receiver)) {\n      throw new TypeError('attempted to get private field on non-instance');\n    }\n\n    var descriptor = privateMap.get(receiver);\n\n    if (descriptor.get) {\n      return descriptor.get.call(receiver);\n    }\n\n    return descriptor.value;\n  }\n\n  function _classPrivateFieldSet(receiver, privateMap, value) {\n    if (!privateMap.has(receiver)) {\n      throw new TypeError('attempted to set private field on non-instance');\n    }\n\n    var descriptor = privateMap.get(receiver);\n\n    if (descriptor.set) {\n      descriptor.set.call(receiver, value);\n    } else {\n      if (!descriptor.writable) {\n        throw new TypeError('attempted to set read only private field');\n      }\n\n      descriptor.value = value;\n    }\n\n    return value;\n  }\n\n  function _classStaticPrivateFieldSpecGet(\n    receiver,\n    classConstructor,\n    descriptor\n  ) {\n    if (receiver !== classConstructor) {\n      throw new TypeError('Private static access of wrong provenance');\n    }\n\n    return descriptor.value;\n  }\n\n  function _classStaticPrivateFieldSpecSet(\n    receiver,\n    classConstructor,\n    descriptor,\n    value\n  ) {\n    if (receiver !== classConstructor) {\n      throw new TypeError('Private static access of wrong provenance');\n    }\n\n    if (!descriptor.writable) {\n      throw new TypeError('attempted to set read only private field');\n    }\n\n    descriptor.value = value;\n    return value;\n  }\n\n  function _classStaticPrivateMethodGet(receiver, classConstructor, method) {\n    if (receiver !== classConstructor) {\n      throw new TypeError('Private static access of wrong provenance');\n    }\n\n    return method;\n  }\n\n  function _classStaticPrivateMethodSet() {\n    throw new TypeError('attempted to set read only static private field');\n  }\n\n  function _decorate(decorators, factory, superClass, mixins) {\n    var api = _getDecoratorsApi();\n\n    if (mixins) {\n      for (var i = 0; i < mixins.length; i++) {\n        api = mixins[i](api);\n      }\n    }\n\n    var r = factory(function initialize(O) {\n      api.initializeInstanceElements(O, decorated.elements);\n    }, superClass);\n    var decorated = api.decorateClass(\n      _coalesceClassElements(r.d.map(_createElementDescriptor)),\n      decorators\n    );\n    api.initializeClassElements(r.F, decorated.elements);\n    return api.runClassFinishers(r.F, decorated.finishers);\n  }\n\n  function _getDecoratorsApi() {\n    _getDecoratorsApi = function() {\n      return api;\n    };\n\n    var api = {\n      elementsDefinitionOrder: [['method'], ['field']],\n      initializeInstanceElements: function(O, elements) {\n        ['method', 'field'].forEach(function(kind) {\n          elements.forEach(function(element) {\n            if (element.kind === kind && element.placement === 'own') {\n              this.defineClassElement(O, element);\n            }\n          }, this);\n        }, this);\n      },\n      initializeClassElements: function(F, elements) {\n        var proto = F.prototype;\n        ['method', 'field'].forEach(function(kind) {\n          elements.forEach(function(element) {\n            var placement = element.placement;\n\n            if (\n              element.kind === kind &&\n              (placement === 'static' || placement === 'prototype')\n            ) {\n              var receiver = placement === 'static' ? F : proto;\n              this.defineClassElement(receiver, element);\n            }\n          }, this);\n        }, this);\n      },\n      defineClassElement: function(receiver, element) {\n        var descriptor = element.descriptor;\n\n        if (element.kind === 'field') {\n          var initializer = element.initializer;\n          descriptor = {\n            enumerable: descriptor.enumerable,\n            writable: descriptor.writable,\n            configurable: descriptor.configurable,\n            value: initializer === void 0 ? void 0 : initializer.call(receiver)\n          };\n        }\n\n        Object.defineProperty(receiver, element.key, descriptor);\n      },\n      decorateClass: function(elements, decorators) {\n        var newElements = [];\n        var finishers = [];\n        var placements = {\n          static: [],\n          prototype: [],\n          own: []\n        };\n        elements.forEach(function(element) {\n          this.addElementPlacement(element, placements);\n        }, this);\n        elements.forEach(function(element) {\n          if (!_hasDecorators(element)) return newElements.push(element);\n          var elementFinishersExtras = this.decorateElement(\n            element,\n            placements\n          );\n          newElements.push(elementFinishersExtras.element);\n          newElements.push.apply(newElements, elementFinishersExtras.extras);\n          finishers.push.apply(finishers, elementFinishersExtras.finishers);\n        }, this);\n\n        if (!decorators) {\n          return {\n            elements: newElements,\n            finishers: finishers\n          };\n        }\n\n        var result = this.decorateConstructor(newElements, decorators);\n        finishers.push.apply(finishers, result.finishers);\n        result.finishers = finishers;\n        return result;\n      },\n      addElementPlacement: function(element, placements, silent) {\n        var keys = placements[element.placement];\n\n        if (!silent && keys.indexOf(element.key) !== -1) {\n          throw new TypeError('Duplicated element (' + element.key + ')');\n        }\n\n        keys.push(element.key);\n      },\n      decorateElement: function(element, placements) {\n        var extras = [];\n        var finishers = [];\n\n        for (\n          var decorators = element.decorators, i = decorators.length - 1;\n          i >= 0;\n          i--\n        ) {\n          var keys = placements[element.placement];\n          keys.splice(keys.indexOf(element.key), 1);\n          var elementObject = this.fromElementDescriptor(element);\n          var elementFinisherExtras = this.toElementFinisherExtras(\n            (0, decorators[i])(elementObject) || elementObject\n          );\n          element = elementFinisherExtras.element;\n          this.addElementPlacement(element, placements);\n\n          if (elementFinisherExtras.finisher) {\n            finishers.push(elementFinisherExtras.finisher);\n          }\n\n          var newExtras = elementFinisherExtras.extras;\n\n          if (newExtras) {\n            for (var j = 0; j < newExtras.length; j++) {\n              this.addElementPlacement(newExtras[j], placements);\n            }\n\n            extras.push.apply(extras, newExtras);\n          }\n        }\n\n        return {\n          element: element,\n          finishers: finishers,\n          extras: extras\n        };\n      },\n      decorateConstructor: function(elements, decorators) {\n        var finishers = [];\n\n        for (var i = decorators.length - 1; i >= 0; i--) {\n          var obj = this.fromClassDescriptor(elements);\n          var elementsAndFinisher = this.toClassDescriptor(\n            (0, decorators[i])(obj) || obj\n          );\n\n          if (elementsAndFinisher.finisher !== undefined) {\n            finishers.push(elementsAndFinisher.finisher);\n          }\n\n          if (elementsAndFinisher.elements !== undefined) {\n            elements = elementsAndFinisher.elements;\n\n            for (var j = 0; j < elements.length - 1; j++) {\n              for (var k = j + 1; k < elements.length; k++) {\n                if (\n                  elements[j].key === elements[k].key &&\n                  elements[j].placement === elements[k].placement\n                ) {\n                  throw new TypeError(\n                    'Duplicated element (' + elements[j].key + ')'\n                  );\n                }\n              }\n            }\n          }\n        }\n\n        return {\n          elements: elements,\n          finishers: finishers\n        };\n      },\n      fromElementDescriptor: function(element) {\n        var obj = {\n          kind: element.kind,\n          key: element.key,\n          placement: element.placement,\n          descriptor: element.descriptor\n        };\n        var desc = {\n          value: 'Descriptor',\n          configurable: true\n        };\n        Object.defineProperty(obj, Symbol.toStringTag, desc);\n        if (element.kind === 'field') obj.initializer = element.initializer;\n        return obj;\n      },\n      toElementDescriptors: function(elementObjects) {\n        if (elementObjects === undefined) return;\n        return _toArray(elementObjects).map(function(elementObject) {\n          var element = this.toElementDescriptor(elementObject);\n          this.disallowProperty(\n            elementObject,\n            'finisher',\n            'An element descriptor'\n          );\n          this.disallowProperty(\n            elementObject,\n            'extras',\n            'An element descriptor'\n          );\n          return element;\n        }, this);\n      },\n      toElementDescriptor: function(elementObject) {\n        var kind = String(elementObject.kind);\n\n        if (kind !== 'method' && kind !== 'field') {\n          throw new TypeError(\n            'An element descriptor\\'s .kind property must be either \"method\" or' +\n              ' \"field\", but a decorator created an element descriptor with' +\n              ' .kind \"' +\n              kind +\n              '\"'\n          );\n        }\n\n        var key = _toPropertyKey(elementObject.key);\n\n        var placement = String(elementObject.placement);\n\n        if (\n          placement !== 'static' &&\n          placement !== 'prototype' &&\n          placement !== 'own'\n        ) {\n          throw new TypeError(\n            'An element descriptor\\'s .placement property must be one of \"static\",' +\n              ' \"prototype\" or \"own\", but a decorator created an element descriptor' +\n              ' with .placement \"' +\n              placement +\n              '\"'\n          );\n        }\n\n        var descriptor = elementObject.descriptor;\n        this.disallowProperty(\n          elementObject,\n          'elements',\n          'An element descriptor'\n        );\n        var element = {\n          kind: kind,\n          key: key,\n          placement: placement,\n          descriptor: Object.assign({}, descriptor)\n        };\n\n        if (kind !== 'field') {\n          this.disallowProperty(\n            elementObject,\n            'initializer',\n            'A method descriptor'\n          );\n        } else {\n          this.disallowProperty(\n            descriptor,\n            'get',\n            'The property descriptor of a field descriptor'\n          );\n          this.disallowProperty(\n            descriptor,\n            'set',\n            'The property descriptor of a field descriptor'\n          );\n          this.disallowProperty(\n            descriptor,\n            'value',\n            'The property descriptor of a field descriptor'\n          );\n          element.initializer = elementObject.initializer;\n        }\n\n        return element;\n      },\n      toElementFinisherExtras: function(elementObject) {\n        var element = this.toElementDescriptor(elementObject);\n\n        var finisher = _optionalCallableProperty(elementObject, 'finisher');\n\n        var extras = this.toElementDescriptors(elementObject.extras);\n        return {\n          element: element,\n          finisher: finisher,\n          extras: extras\n        };\n      },\n      fromClassDescriptor: function(elements) {\n        var obj = {\n          kind: 'class',\n          elements: elements.map(this.fromElementDescriptor, this)\n        };\n        var desc = {\n          value: 'Descriptor',\n          configurable: true\n        };\n        Object.defineProperty(obj, Symbol.toStringTag, desc);\n        return obj;\n      },\n      toClassDescriptor: function(obj) {\n        var kind = String(obj.kind);\n\n        if (kind !== 'class') {\n          throw new TypeError(\n            'A class descriptor\\'s .kind property must be \"class\", but a decorator' +\n              ' created a class descriptor with .kind \"' +\n              kind +\n              '\"'\n          );\n        }\n\n        this.disallowProperty(obj, 'key', 'A class descriptor');\n        this.disallowProperty(obj, 'placement', 'A class descriptor');\n        this.disallowProperty(obj, 'descriptor', 'A class descriptor');\n        this.disallowProperty(obj, 'initializer', 'A class descriptor');\n        this.disallowProperty(obj, 'extras', 'A class descriptor');\n\n        var finisher = _optionalCallableProperty(obj, 'finisher');\n\n        var elements = this.toElementDescriptors(obj.elements);\n        return {\n          elements: elements,\n          finisher: finisher\n        };\n      },\n      runClassFinishers: function(constructor, finishers) {\n        for (var i = 0; i < finishers.length; i++) {\n          var newConstructor = (0, finishers[i])(constructor);\n\n          if (newConstructor !== undefined) {\n            if (typeof newConstructor !== 'function') {\n              throw new TypeError('Finishers must return a constructor.');\n            }\n\n            constructor = newConstructor;\n          }\n        }\n\n        return constructor;\n      },\n      disallowProperty: function(obj, name, objectType) {\n        if (obj[name] !== undefined) {\n          throw new TypeError(\n            objectType + \" can't have a .\" + name + ' property.'\n          );\n        }\n      }\n    };\n    return api;\n  }\n\n  function _createElementDescriptor(def) {\n    var key = _toPropertyKey(def.key);\n\n    var descriptor;\n\n    if (def.kind === 'method') {\n      descriptor = {\n        value: def.value,\n        writable: true,\n        configurable: true,\n        enumerable: false\n      };\n    } else if (def.kind === 'get') {\n      descriptor = {\n        get: def.value,\n        configurable: true,\n        enumerable: false\n      };\n    } else if (def.kind === 'set') {\n      descriptor = {\n        set: def.value,\n        configurable: true,\n        enumerable: false\n      };\n    } else if (def.kind === 'field') {\n      descriptor = {\n        configurable: true,\n        writable: true,\n        enumerable: true\n      };\n    }\n\n    var element = {\n      kind: def.kind === 'field' ? 'field' : 'method',\n      key: key,\n      placement: def.static\n        ? 'static'\n        : def.kind === 'field'\n        ? 'own'\n        : 'prototype',\n      descriptor: descriptor\n    };\n    if (def.decorators) element.decorators = def.decorators;\n    if (def.kind === 'field') element.initializer = def.value;\n    return element;\n  }\n\n  function _coalesceGetterSetter(element, other) {\n    if (element.descriptor.get !== undefined) {\n      other.descriptor.get = element.descriptor.get;\n    } else {\n      other.descriptor.set = element.descriptor.set;\n    }\n  }\n\n  function _coalesceClassElements(elements) {\n    var newElements = [];\n\n    var isSameElement = function(other) {\n      return (\n        other.kind === 'method' &&\n        other.key === element.key &&\n        other.placement === element.placement\n      );\n    };\n\n    for (var i = 0; i < elements.length; i++) {\n      var element = elements[i];\n      var other;\n\n      if (\n        element.kind === 'method' &&\n        (other = newElements.find(isSameElement))\n      ) {\n        if (\n          _isDataDescriptor(element.descriptor) ||\n          _isDataDescriptor(other.descriptor)\n        ) {\n          if (_hasDecorators(element) || _hasDecorators(other)) {\n            throw new ReferenceError(\n              'Duplicated methods (' + element.key + \") can't be decorated.\"\n            );\n          }\n\n          other.descriptor = element.descriptor;\n        } else {\n          if (_hasDecorators(element)) {\n            if (_hasDecorators(other)) {\n              throw new ReferenceError(\n                \"Decorators can't be placed on different accessors with for \" +\n                  'the same property (' +\n                  element.key +\n                  ').'\n              );\n            }\n\n            other.decorators = element.decorators;\n          }\n\n          _coalesceGetterSetter(element, other);\n        }\n      } else {\n        newElements.push(element);\n      }\n    }\n\n    return newElements;\n  }\n\n  function _hasDecorators(element) {\n    return element.decorators && element.decorators.length;\n  }\n\n  function _isDataDescriptor(desc) {\n    return (\n      desc !== undefined &&\n      !(desc.value === undefined && desc.writable === undefined)\n    );\n  }\n\n  function _optionalCallableProperty(obj, name) {\n    var value = obj[name];\n\n    if (value !== undefined && typeof value !== 'function') {\n      throw new TypeError(\"Expected '\" + name + \"' to be a function\");\n    }\n\n    return value;\n  }\n\n  function _classPrivateMethodGet(receiver, privateSet, fn) {\n    if (!privateSet.has(receiver)) {\n      throw new TypeError('attempted to get private field on non-instance');\n    }\n\n    return fn;\n  }\n\n  function _classPrivateMethodSet() {\n    throw new TypeError('attempted to reassign private method');\n  }\n\n  function _wrapRegExp(re, groups) {\n    _wrapRegExp = function(re, groups) {\n      return new BabelRegExp(re, groups);\n    };\n\n    var _RegExp = _wrapNativeSuper(RegExp);\n\n    var _super = RegExp.prototype;\n\n    var _groups = new WeakMap();\n\n    function BabelRegExp(re, groups) {\n      var _this = _RegExp.call(this, re);\n\n      _groups.set(_this, groups);\n\n      return _this;\n    }\n\n    _inherits(BabelRegExp, _RegExp);\n\n    BabelRegExp.prototype.exec = function(str) {\n      var result = _super.exec.call(this, str);\n\n      if (result) result.groups = buildGroups(result, this);\n      return result;\n    };\n\n    BabelRegExp.prototype[Symbol.replace] = function(str, substitution) {\n      if (typeof substitution === 'string') {\n        var groups = _groups.get(this);\n\n        return _super[Symbol.replace].call(\n          this,\n          str,\n          substitution.replace(/\\$<([^>]+)>/g, function(_, name) {\n            return '$' + groups[name];\n          })\n        );\n      } else if (typeof substitution === 'function') {\n        var _this = this;\n\n        return _super[Symbol.replace].call(this, str, function() {\n          var args = [];\n          args.push.apply(args, arguments);\n\n          if (typeof args[args.length - 1] !== 'object') {\n            args.push(buildGroups(args, _this));\n          }\n\n          return substitution.apply(this, args);\n        });\n      } else {\n        return _super[Symbol.replace].call(this, str, substitution);\n      }\n    };\n\n    function buildGroups(result, re) {\n      var g = _groups.get(re);\n\n      return Object.keys(g).reduce(function(groups, name) {\n        groups[name] = result[g[name]];\n        return groups;\n      }, Object.create(null));\n    }\n\n    return _wrapRegExp.apply(this, arguments);\n  }\n\n  var vectorMultiply = function vectorMultiply(v, amount) {\n    return createVector(v.x * amount, v.y * amount);\n  };\n\n  var vectorAdd = function vectorAdd(a, b) {\n    return createVector(a.x + b.x, a.y + b.y);\n  };\n\n  var vectorNormalize = function vectorNormalize(v) {\n    var l = Math.sqrt(v.x * v.x + v.y * v.y);\n    if (l === 0) {\n      return {\n        x: 0,\n        y: 0\n      };\n    }\n    return createVector(v.x / l, v.y / l);\n  };\n\n  var vectorRotate = function vectorRotate(v, radians, origin) {\n    var cos = Math.cos(radians);\n    var sin = Math.sin(radians);\n    var t = createVector(v.x - origin.x, v.y - origin.y);\n    return createVector(\n      origin.x + cos * t.x - sin * t.y,\n      origin.y + sin * t.x + cos * t.y\n    );\n  };\n\n  var createVector = function createVector() {\n    var x =\n      arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n    var y =\n      arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n    return { x: x, y: y };\n  };\n\n  var getMarkupValue = function getMarkupValue(value, size) {\n    var scalar =\n      arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;\n    var axis = arguments.length > 3 ? arguments[3] : undefined;\n    if (typeof value === 'string') {\n      return parseFloat(value) * scalar;\n    }\n    if (typeof value === 'number') {\n      return value * (axis ? size[axis] : Math.min(size.width, size.height));\n    }\n    return;\n  };\n\n  var getMarkupStyles = function getMarkupStyles(markup, size, scale) {\n    var lineStyle = markup.borderStyle || markup.lineStyle || 'solid';\n    var fill = markup.backgroundColor || markup.fontColor || 'transparent';\n    var stroke = markup.borderColor || markup.lineColor || 'transparent';\n    var strokeWidth = getMarkupValue(\n      markup.borderWidth || markup.lineWidth,\n      size,\n      scale\n    );\n    var lineCap = markup.lineCap || 'round';\n    var lineJoin = markup.lineJoin || 'round';\n    var dashes =\n      typeof lineStyle === 'string'\n        ? ''\n        : lineStyle\n            .map(function(v) {\n              return getMarkupValue(v, size, scale);\n            })\n            .join(',');\n    var opacity = markup.opacity || 1;\n    return {\n      'stroke-linecap': lineCap,\n      'stroke-linejoin': lineJoin,\n      'stroke-width': strokeWidth || 0,\n      'stroke-dasharray': dashes,\n      stroke: stroke,\n      fill: fill,\n      opacity: opacity\n    };\n  };\n\n  var isDefined = function isDefined(value) {\n    return value != null;\n  };\n\n  var getMarkupRect = function getMarkupRect(rect, size) {\n    var scalar =\n      arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;\n\n    var left =\n      getMarkupValue(rect.x, size, scalar, 'width') ||\n      getMarkupValue(rect.left, size, scalar, 'width');\n    var top =\n      getMarkupValue(rect.y, size, scalar, 'height') ||\n      getMarkupValue(rect.top, size, scalar, 'height');\n    var width = getMarkupValue(rect.width, size, scalar, 'width');\n    var height = getMarkupValue(rect.height, size, scalar, 'height');\n    var right = getMarkupValue(rect.right, size, scalar, 'width');\n    var bottom = getMarkupValue(rect.bottom, size, scalar, 'height');\n\n    if (!isDefined(top)) {\n      if (isDefined(height) && isDefined(bottom)) {\n        top = size.height - height - bottom;\n      } else {\n        top = bottom;\n      }\n    }\n\n    if (!isDefined(left)) {\n      if (isDefined(width) && isDefined(right)) {\n        left = size.width - width - right;\n      } else {\n        left = right;\n      }\n    }\n\n    if (!isDefined(width)) {\n      if (isDefined(left) && isDefined(right)) {\n        width = size.width - left - right;\n      } else {\n        width = 0;\n      }\n    }\n\n    if (!isDefined(height)) {\n      if (isDefined(top) && isDefined(bottom)) {\n        height = size.height - top - bottom;\n      } else {\n        height = 0;\n      }\n    }\n\n    return {\n      x: left || 0,\n      y: top || 0,\n      width: width || 0,\n      height: height || 0\n    };\n  };\n\n  var pointsToPathShape = function pointsToPathShape(points) {\n    return points\n      .map(function(point, index) {\n        return ''\n          .concat(index === 0 ? 'M' : 'L', ' ')\n          .concat(point.x, ' ')\n          .concat(point.y);\n      })\n      .join(' ');\n  };\n\n  var setAttributes = function setAttributes(element, attr) {\n    return Object.keys(attr).forEach(function(key) {\n      return element.setAttribute(key, attr[key]);\n    });\n  };\n\n  var ns = 'http://www.w3.org/2000/svg';\n  var svg = function svg(tag, attr) {\n    var element = document.createElementNS(ns, tag);\n    if (attr) {\n      setAttributes(element, attr);\n    }\n    return element;\n  };\n\n  var updateRect = function updateRect(element) {\n    return setAttributes(\n      element,\n      Object.assign({}, element.rect, element.styles)\n    );\n  };\n\n  var updateEllipse = function updateEllipse(element) {\n    var cx = element.rect.x + element.rect.width * 0.5;\n    var cy = element.rect.y + element.rect.height * 0.5;\n    var rx = element.rect.width * 0.5;\n    var ry = element.rect.height * 0.5;\n    return setAttributes(\n      element,\n      Object.assign(\n        {\n          cx: cx,\n          cy: cy,\n          rx: rx,\n          ry: ry\n        },\n        element.styles\n      )\n    );\n  };\n\n  var IMAGE_FIT_STYLE = {\n    contain: 'xMidYMid meet',\n    cover: 'xMidYMid slice'\n  };\n\n  var updateImage = function updateImage(element, markup) {\n    setAttributes(\n      element,\n      Object.assign({}, element.rect, element.styles, {\n        preserveAspectRatio: IMAGE_FIT_STYLE[markup.fit] || 'none'\n      })\n    );\n  };\n\n  var TEXT_ANCHOR = {\n    left: 'start',\n    center: 'middle',\n    right: 'end'\n  };\n\n  var updateText = function updateText(element, markup, size, scale) {\n    var fontSize = getMarkupValue(markup.fontSize, size, scale);\n    var fontFamily = markup.fontFamily || 'sans-serif';\n    var fontWeight = markup.fontWeight || 'normal';\n    var textAlign = TEXT_ANCHOR[markup.textAlign] || 'start';\n\n    setAttributes(\n      element,\n      Object.assign({}, element.rect, element.styles, {\n        'stroke-width': 0,\n        'font-weight': fontWeight,\n        'font-size': fontSize,\n        'font-family': fontFamily,\n        'text-anchor': textAlign\n      })\n    );\n\n    // update text\n    if (element.text !== markup.text) {\n      element.text = markup.text;\n      element.textContent = markup.text.length ? markup.text : ' ';\n    }\n  };\n\n  var updateLine = function updateLine(element, markup, size, scale) {\n    setAttributes(\n      element,\n      Object.assign({}, element.rect, element.styles, {\n        fill: 'none'\n      })\n    );\n\n    var line = element.childNodes[0];\n    var begin = element.childNodes[1];\n    var end = element.childNodes[2];\n\n    var origin = element.rect;\n\n    var target = {\n      x: element.rect.x + element.rect.width,\n      y: element.rect.y + element.rect.height\n    };\n\n    setAttributes(line, {\n      x1: origin.x,\n      y1: origin.y,\n      x2: target.x,\n      y2: target.y\n    });\n\n    if (!markup.lineDecoration) return;\n\n    begin.style.display = 'none';\n    end.style.display = 'none';\n\n    var v = vectorNormalize({\n      x: target.x - origin.x,\n      y: target.y - origin.y\n    });\n\n    var l = getMarkupValue(0.05, size, scale);\n\n    if (markup.lineDecoration.indexOf('arrow-begin') !== -1) {\n      var arrowBeginRotationPoint = vectorMultiply(v, l);\n      var arrowBeginCenter = vectorAdd(origin, arrowBeginRotationPoint);\n      var arrowBeginA = vectorRotate(origin, 2, arrowBeginCenter);\n      var arrowBeginB = vectorRotate(origin, -2, arrowBeginCenter);\n\n      setAttributes(begin, {\n        style: 'display:block;',\n        d: 'M'\n          .concat(arrowBeginA.x, ',')\n          .concat(arrowBeginA.y, ' L')\n          .concat(origin.x, ',')\n          .concat(origin.y, ' L')\n          .concat(arrowBeginB.x, ',')\n          .concat(arrowBeginB.y)\n      });\n    }\n\n    if (markup.lineDecoration.indexOf('arrow-end') !== -1) {\n      var arrowEndRotationPoint = vectorMultiply(v, -l);\n      var arrowEndCenter = vectorAdd(target, arrowEndRotationPoint);\n      var arrowEndA = vectorRotate(target, 2, arrowEndCenter);\n      var arrowEndB = vectorRotate(target, -2, arrowEndCenter);\n\n      setAttributes(end, {\n        style: 'display:block;',\n        d: 'M'\n          .concat(arrowEndA.x, ',')\n          .concat(arrowEndA.y, ' L')\n          .concat(target.x, ',')\n          .concat(target.y, ' L')\n          .concat(arrowEndB.x, ',')\n          .concat(arrowEndB.y)\n      });\n    }\n  };\n\n  var updatePath = function updatePath(element, markup, size, scale) {\n    setAttributes(\n      element,\n      Object.assign({}, element.styles, {\n        fill: 'none',\n        d: pointsToPathShape(\n          markup.points.map(function(point) {\n            return {\n              x: getMarkupValue(point.x, size, scale, 'width'),\n              y: getMarkupValue(point.y, size, scale, 'height')\n            };\n          })\n        )\n      })\n    );\n  };\n\n  var createShape = function createShape(node) {\n    return function(markup) {\n      return svg(node, { id: markup.id });\n    };\n  };\n\n  var createImage = function createImage(markup) {\n    var shape = svg('image', {\n      id: markup.id,\n      'stroke-linecap': 'round',\n      'stroke-linejoin': 'round',\n      opacity: '0'\n    });\n\n    shape.onload = function() {\n      shape.setAttribute('opacity', markup.opacity || 1);\n    };\n    shape.setAttributeNS(\n      'http://www.w3.org/1999/xlink',\n      'xlink:href',\n      markup.src\n    );\n    return shape;\n  };\n\n  var createLine = function createLine(markup) {\n    var shape = svg('g', {\n      id: markup.id,\n      'stroke-linecap': 'round',\n      'stroke-linejoin': 'round'\n    });\n\n    var line = svg('line');\n    shape.appendChild(line);\n\n    var begin = svg('path');\n    shape.appendChild(begin);\n\n    var end = svg('path');\n    shape.appendChild(end);\n\n    return shape;\n  };\n\n  var CREATE_TYPE_ROUTES = {\n    image: createImage,\n    rect: createShape('rect'),\n    ellipse: createShape('ellipse'),\n    text: createShape('text'),\n    path: createShape('path'),\n    line: createLine\n  };\n\n  var UPDATE_TYPE_ROUTES = {\n    rect: updateRect,\n    ellipse: updateEllipse,\n    image: updateImage,\n    text: updateText,\n    path: updatePath,\n    line: updateLine\n  };\n\n  var createMarkupByType = function createMarkupByType(type, markup) {\n    return CREATE_TYPE_ROUTES[type](markup);\n  };\n\n  var updateMarkupByType = function updateMarkupByType(\n    element,\n    type,\n    markup,\n    size,\n    scale\n  ) {\n    if (type !== 'path') {\n      element.rect = getMarkupRect(markup, size, scale);\n    }\n    element.styles = getMarkupStyles(markup, size, scale);\n    UPDATE_TYPE_ROUTES[type](element, markup, size, scale);\n  };\n\n  var MARKUP_RECT = [\n    'x',\n    'y',\n    'left',\n    'top',\n    'right',\n    'bottom',\n    'width',\n    'height'\n  ];\n\n  var toOptionalFraction = function toOptionalFraction(value) {\n    return typeof value === 'string' && /%/.test(value)\n      ? parseFloat(value) / 100\n      : value;\n  };\n\n  // adds default markup properties, clones markup\n  var prepareMarkup = function prepareMarkup(markup) {\n    var _markup = _slicedToArray(markup, 2),\n      type = _markup[0],\n      props = _markup[1];\n\n    var rect = props.points\n      ? {}\n      : MARKUP_RECT.reduce(function(prev, curr) {\n          prev[curr] = toOptionalFraction(props[curr]);\n          return prev;\n        }, {});\n\n    return [\n      type,\n      Object.assign(\n        {\n          zIndex: 0\n        },\n        props,\n        rect\n      )\n    ];\n  };\n\n  var sortMarkupByZIndex = function sortMarkupByZIndex(a, b) {\n    if (a[1].zIndex > b[1].zIndex) {\n      return 1;\n    }\n    if (a[1].zIndex < b[1].zIndex) {\n      return -1;\n    }\n    return 0;\n  };\n\n  var createMarkupView = function createMarkupView(_) {\n    return _.utils.createView({\n      name: 'image-preview-markup',\n      tag: 'svg',\n      ignoreRect: true,\n      mixins: {\n        apis: ['width', 'height', 'crop', 'markup', 'resize', 'dirty']\n      },\n\n      write: function write(_ref) {\n        var root = _ref.root,\n          props = _ref.props;\n\n        if (!props.dirty) return;\n        var crop = props.crop,\n          resize = props.resize,\n          markup = props.markup;\n\n        var viewWidth = props.width;\n        var viewHeight = props.height;\n\n        var cropWidth = crop.width;\n        var cropHeight = crop.height;\n\n        if (resize) {\n          var _size = resize.size;\n\n          var outputWidth = _size && _size.width;\n          var outputHeight = _size && _size.height;\n          var outputFit = resize.mode;\n          var outputUpscale = resize.upscale;\n\n          if (outputWidth && !outputHeight) outputHeight = outputWidth;\n          if (outputHeight && !outputWidth) outputWidth = outputHeight;\n\n          var shouldUpscale =\n            cropWidth < outputWidth && cropHeight < outputHeight;\n\n          if (!shouldUpscale || (shouldUpscale && outputUpscale)) {\n            var scalarWidth = outputWidth / cropWidth;\n            var scalarHeight = outputHeight / cropHeight;\n\n            if (outputFit === 'force') {\n              cropWidth = outputWidth;\n              cropHeight = outputHeight;\n            } else {\n              var scalar;\n              if (outputFit === 'cover') {\n                scalar = Math.max(scalarWidth, scalarHeight);\n              } else if (outputFit === 'contain') {\n                scalar = Math.min(scalarWidth, scalarHeight);\n              }\n              cropWidth = cropWidth * scalar;\n              cropHeight = cropHeight * scalar;\n            }\n          }\n        }\n\n        var size = {\n          width: viewWidth,\n          height: viewHeight\n        };\n\n        root.element.setAttribute('width', size.width);\n        root.element.setAttribute('height', size.height);\n\n        var scale = Math.min(viewWidth / cropWidth, viewHeight / cropHeight);\n\n        // clear\n        root.element.innerHTML = '';\n\n        // get filter\n        var markupFilter = root.query('GET_IMAGE_PREVIEW_MARKUP_FILTER');\n\n        // draw new\n        markup\n          .filter(markupFilter)\n          .map(prepareMarkup)\n          .sort(sortMarkupByZIndex)\n          .forEach(function(markup) {\n            var _markup = _slicedToArray(markup, 2),\n              type = _markup[0],\n              settings = _markup[1];\n\n            // create\n            var element = createMarkupByType(type, settings);\n\n            // update\n            updateMarkupByType(element, type, settings, size, scale);\n\n            // add\n            root.element.appendChild(element);\n          });\n      }\n    });\n  };\n\n  var createVector$1 = function createVector(x, y) {\n    return { x: x, y: y };\n  };\n\n  var vectorDot = function vectorDot(a, b) {\n    return a.x * b.x + a.y * b.y;\n  };\n\n  var vectorSubtract = function vectorSubtract(a, b) {\n    return createVector$1(a.x - b.x, a.y - b.y);\n  };\n\n  var vectorDistanceSquared = function vectorDistanceSquared(a, b) {\n    return vectorDot(vectorSubtract(a, b), vectorSubtract(a, b));\n  };\n\n  var vectorDistance = function vectorDistance(a, b) {\n    return Math.sqrt(vectorDistanceSquared(a, b));\n  };\n\n  var getOffsetPointOnEdge = function getOffsetPointOnEdge(length, rotation) {\n    var a = length;\n\n    var A = 1.5707963267948966;\n    var B = rotation;\n    var C = 1.5707963267948966 - rotation;\n\n    var sinA = Math.sin(A);\n    var sinB = Math.sin(B);\n    var sinC = Math.sin(C);\n    var cosC = Math.cos(C);\n    var ratio = a / sinA;\n    var b = ratio * sinB;\n    var c = ratio * sinC;\n\n    return createVector$1(cosC * b, cosC * c);\n  };\n\n  var getRotatedRectSize = function getRotatedRectSize(rect, rotation) {\n    var w = rect.width;\n    var h = rect.height;\n\n    var hor = getOffsetPointOnEdge(w, rotation);\n    var ver = getOffsetPointOnEdge(h, rotation);\n\n    var tl = createVector$1(rect.x + Math.abs(hor.x), rect.y - Math.abs(hor.y));\n\n    var tr = createVector$1(\n      rect.x + rect.width + Math.abs(ver.y),\n      rect.y + Math.abs(ver.x)\n    );\n\n    var bl = createVector$1(\n      rect.x - Math.abs(ver.y),\n      rect.y + rect.height - Math.abs(ver.x)\n    );\n\n    return {\n      width: vectorDistance(tl, tr),\n      height: vectorDistance(tl, bl)\n    };\n  };\n\n  var calculateCanvasSize = function calculateCanvasSize(\n    image,\n    canvasAspectRatio\n  ) {\n    var zoom =\n      arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;\n\n    var imageAspectRatio = image.height / image.width;\n\n    // determine actual pixels on x and y axis\n    var canvasWidth = 1;\n    var canvasHeight = canvasAspectRatio;\n    var imgWidth = 1;\n    var imgHeight = imageAspectRatio;\n    if (imgHeight > canvasHeight) {\n      imgHeight = canvasHeight;\n      imgWidth = imgHeight / imageAspectRatio;\n    }\n\n    var scalar = Math.max(canvasWidth / imgWidth, canvasHeight / imgHeight);\n    var width = image.width / (zoom * scalar * imgWidth);\n    var height = width * canvasAspectRatio;\n\n    return {\n      width: width,\n      height: height\n    };\n  };\n\n  var getImageRectZoomFactor = function getImageRectZoomFactor(\n    imageRect,\n    cropRect,\n    rotation,\n    center\n  ) {\n    // calculate available space round image center position\n    var cx = center.x > 0.5 ? 1 - center.x : center.x;\n    var cy = center.y > 0.5 ? 1 - center.y : center.y;\n    var imageWidth = cx * 2 * imageRect.width;\n    var imageHeight = cy * 2 * imageRect.height;\n\n    // calculate rotated crop rectangle size\n    var rotatedCropSize = getRotatedRectSize(cropRect, rotation);\n\n    // calculate scalar required to fit image\n    return Math.max(\n      rotatedCropSize.width / imageWidth,\n      rotatedCropSize.height / imageHeight\n    );\n  };\n\n  var getCenteredCropRect = function getCenteredCropRect(\n    container,\n    aspectRatio\n  ) {\n    var width = container.width;\n    var height = width * aspectRatio;\n    if (height > container.height) {\n      height = container.height;\n      width = height / aspectRatio;\n    }\n    var x = (container.width - width) * 0.5;\n    var y = (container.height - height) * 0.5;\n\n    return {\n      x: x,\n      y: y,\n      width: width,\n      height: height\n    };\n  };\n\n  var getCurrentCropSize = function getCurrentCropSize(imageSize) {\n    var crop =\n      arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    var zoom = crop.zoom,\n      rotation = crop.rotation,\n      center = crop.center,\n      aspectRatio = crop.aspectRatio;\n\n    if (!aspectRatio) aspectRatio = imageSize.height / imageSize.width;\n\n    var canvasSize = calculateCanvasSize(imageSize, aspectRatio, zoom);\n\n    var canvasCenter = {\n      x: canvasSize.width * 0.5,\n      y: canvasSize.height * 0.5\n    };\n\n    var stage = {\n      x: 0,\n      y: 0,\n      width: canvasSize.width,\n      height: canvasSize.height,\n      center: canvasCenter\n    };\n\n    var shouldLimit = typeof crop.scaleToFit === 'undefined' || crop.scaleToFit;\n\n    var stageZoomFactor = getImageRectZoomFactor(\n      imageSize,\n      getCenteredCropRect(stage, aspectRatio),\n      rotation,\n      shouldLimit ? center : { x: 0.5, y: 0.5 }\n    );\n\n    var scale = zoom * stageZoomFactor;\n\n    // start drawing\n    return {\n      widthFloat: canvasSize.width / scale,\n      heightFloat: canvasSize.height / scale,\n      width: Math.round(canvasSize.width / scale),\n      height: Math.round(canvasSize.height / scale)\n    };\n  };\n\n  var IMAGE_SCALE_SPRING_PROPS = {\n    type: 'spring',\n    stiffness: 0.5,\n    damping: 0.45,\n    mass: 10\n  };\n\n  // does horizontal and vertical flipping\n  var createBitmapView = function createBitmapView(_) {\n    return _.utils.createView({\n      name: 'image-bitmap',\n      ignoreRect: true,\n      mixins: { styles: ['scaleX', 'scaleY'] },\n      create: function create(_ref) {\n        var root = _ref.root,\n          props = _ref.props;\n        root.appendChild(props.image);\n      }\n    });\n  };\n\n  // shifts and rotates image\n  var createImageCanvasWrapper = function createImageCanvasWrapper(_) {\n    return _.utils.createView({\n      name: 'image-canvas-wrapper',\n      tag: 'div',\n      ignoreRect: true,\n      mixins: {\n        apis: ['crop', 'width', 'height'],\n\n        styles: [\n          'originX',\n          'originY',\n          'translateX',\n          'translateY',\n          'scaleX',\n          'scaleY',\n          'rotateZ'\n        ],\n\n        animations: {\n          originX: IMAGE_SCALE_SPRING_PROPS,\n          originY: IMAGE_SCALE_SPRING_PROPS,\n          scaleX: IMAGE_SCALE_SPRING_PROPS,\n          scaleY: IMAGE_SCALE_SPRING_PROPS,\n          translateX: IMAGE_SCALE_SPRING_PROPS,\n          translateY: IMAGE_SCALE_SPRING_PROPS,\n          rotateZ: IMAGE_SCALE_SPRING_PROPS\n        }\n      },\n\n      create: function create(_ref2) {\n        var root = _ref2.root,\n          props = _ref2.props;\n        props.width = props.image.width;\n        props.height = props.image.height;\n        root.ref.bitmap = root.appendChildView(\n          root.createChildView(createBitmapView(_), { image: props.image })\n        );\n      },\n      write: function write(_ref3) {\n        var root = _ref3.root,\n          props = _ref3.props;\n        var flip = props.crop.flip;\n        var bitmap = root.ref.bitmap;\n        bitmap.scaleX = flip.horizontal ? -1 : 1;\n        bitmap.scaleY = flip.vertical ? -1 : 1;\n      }\n    });\n  };\n\n  // clips canvas to correct aspect ratio\n  var createClipView = function createClipView(_) {\n    return _.utils.createView({\n      name: 'image-clip',\n      tag: 'div',\n      ignoreRect: true,\n      mixins: {\n        apis: [\n          'crop',\n          'markup',\n          'resize',\n          'width',\n          'height',\n          'dirty',\n          'background'\n        ],\n\n        styles: ['width', 'height', 'opacity'],\n        animations: {\n          opacity: { type: 'tween', duration: 250 }\n        }\n      },\n\n      didWriteView: function didWriteView(_ref4) {\n        var root = _ref4.root,\n          props = _ref4.props;\n        if (!props.background) return;\n        root.element.style.backgroundColor = props.background;\n      },\n      create: function create(_ref5) {\n        var root = _ref5.root,\n          props = _ref5.props;\n\n        root.ref.image = root.appendChildView(\n          root.createChildView(\n            createImageCanvasWrapper(_),\n            Object.assign({}, props)\n          )\n        );\n\n        root.ref.createMarkup = function() {\n          if (root.ref.markup) return;\n          root.ref.markup = root.appendChildView(\n            root.createChildView(createMarkupView(_), Object.assign({}, props))\n          );\n        };\n\n        root.ref.destroyMarkup = function() {\n          if (!root.ref.markup) return;\n          root.removeChildView(root.ref.markup);\n          root.ref.markup = null;\n        };\n\n        // set up transparency grid\n        var transparencyIndicator = root.query(\n          'GET_IMAGE_PREVIEW_TRANSPARENCY_INDICATOR'\n        );\n        if (transparencyIndicator === null) return;\n\n        // grid pattern\n        if (transparencyIndicator === 'grid') {\n          root.element.dataset.transparencyIndicator = transparencyIndicator;\n        }\n        // basic color\n        else {\n          root.element.dataset.transparencyIndicator = 'color';\n        }\n      },\n      write: function write(_ref6) {\n        var root = _ref6.root,\n          props = _ref6.props,\n          shouldOptimize = _ref6.shouldOptimize;\n        var crop = props.crop,\n          markup = props.markup,\n          resize = props.resize,\n          dirty = props.dirty,\n          width = props.width,\n          height = props.height;\n\n        root.ref.image.crop = crop;\n\n        var stage = {\n          x: 0,\n          y: 0,\n          width: width,\n          height: height,\n          center: {\n            x: width * 0.5,\n            y: height * 0.5\n          }\n        };\n\n        var image = {\n          width: root.ref.image.width,\n          height: root.ref.image.height\n        };\n\n        var origin = {\n          x: crop.center.x * image.width,\n          y: crop.center.y * image.height\n        };\n\n        var translation = {\n          x: stage.center.x - image.width * crop.center.x,\n          y: stage.center.y - image.height * crop.center.y\n        };\n\n        var rotation = Math.PI * 2 + (crop.rotation % (Math.PI * 2));\n\n        var cropAspectRatio = crop.aspectRatio || image.height / image.width;\n\n        var shouldLimit =\n          typeof crop.scaleToFit === 'undefined' || crop.scaleToFit;\n\n        var stageZoomFactor = getImageRectZoomFactor(\n          image,\n          getCenteredCropRect(stage, cropAspectRatio),\n\n          rotation,\n          shouldLimit ? crop.center : { x: 0.5, y: 0.5 }\n        );\n\n        var scale = crop.zoom * stageZoomFactor;\n\n        // update markup view\n        if (markup && markup.length) {\n          root.ref.createMarkup();\n          root.ref.markup.width = width;\n          root.ref.markup.height = height;\n          root.ref.markup.resize = resize;\n          root.ref.markup.dirty = dirty;\n          root.ref.markup.markup = markup;\n          root.ref.markup.crop = getCurrentCropSize(image, crop);\n        } else if (root.ref.markup) {\n          root.ref.destroyMarkup();\n        }\n\n        // update image view\n        var imageView = root.ref.image;\n\n        // don't update clip layout\n        if (shouldOptimize) {\n          imageView.originX = null;\n          imageView.originY = null;\n          imageView.translateX = null;\n          imageView.translateY = null;\n          imageView.rotateZ = null;\n          imageView.scaleX = null;\n          imageView.scaleY = null;\n          return;\n        }\n\n        imageView.originX = origin.x;\n        imageView.originY = origin.y;\n        imageView.translateX = translation.x;\n        imageView.translateY = translation.y;\n        imageView.rotateZ = rotation;\n        imageView.scaleX = scale;\n        imageView.scaleY = scale;\n      }\n    });\n  };\n\n  var createImageView = function createImageView(_) {\n    return _.utils.createView({\n      name: 'image-preview',\n      tag: 'div',\n      ignoreRect: true,\n      mixins: {\n        apis: ['image', 'crop', 'markup', 'resize', 'dirty', 'background'],\n\n        styles: ['translateY', 'scaleX', 'scaleY', 'opacity'],\n\n        animations: {\n          scaleX: IMAGE_SCALE_SPRING_PROPS,\n          scaleY: IMAGE_SCALE_SPRING_PROPS,\n          translateY: IMAGE_SCALE_SPRING_PROPS,\n          opacity: { type: 'tween', duration: 400 }\n        }\n      },\n\n      create: function create(_ref7) {\n        var root = _ref7.root,\n          props = _ref7.props;\n        root.ref.clip = root.appendChildView(\n          root.createChildView(createClipView(_), {\n            id: props.id,\n            image: props.image,\n            crop: props.crop,\n            markup: props.markup,\n            resize: props.resize,\n            dirty: props.dirty,\n            background: props.background\n          })\n        );\n      },\n      write: function write(_ref8) {\n        var root = _ref8.root,\n          props = _ref8.props,\n          shouldOptimize = _ref8.shouldOptimize;\n        var clip = root.ref.clip;\n        var image = props.image,\n          crop = props.crop,\n          markup = props.markup,\n          resize = props.resize,\n          dirty = props.dirty;\n\n        clip.crop = crop;\n        clip.markup = markup;\n        clip.resize = resize;\n        clip.dirty = dirty;\n\n        // don't update clip layout\n        clip.opacity = shouldOptimize ? 0 : 1;\n\n        // don't re-render if optimizing or hidden (width will be zero resulting in weird animations)\n        if (shouldOptimize || root.rect.element.hidden) return;\n\n        // calculate scaled preview image size\n        var imageAspectRatio = image.height / image.width;\n        var aspectRatio = crop.aspectRatio || imageAspectRatio;\n\n        // calculate container size\n        var containerWidth = root.rect.inner.width;\n        var containerHeight = root.rect.inner.height;\n\n        var fixedPreviewHeight = root.query('GET_IMAGE_PREVIEW_HEIGHT');\n        var minPreviewHeight = root.query('GET_IMAGE_PREVIEW_MIN_HEIGHT');\n        var maxPreviewHeight = root.query('GET_IMAGE_PREVIEW_MAX_HEIGHT');\n\n        var panelAspectRatio = root.query('GET_PANEL_ASPECT_RATIO');\n        var allowMultiple = root.query('GET_ALLOW_MULTIPLE');\n\n        if (panelAspectRatio && !allowMultiple) {\n          fixedPreviewHeight = containerWidth * panelAspectRatio;\n          aspectRatio = panelAspectRatio;\n        }\n\n        // determine clip width and height\n        var clipHeight =\n          fixedPreviewHeight !== null\n            ? fixedPreviewHeight\n            : Math.max(\n                minPreviewHeight,\n                Math.min(containerWidth * aspectRatio, maxPreviewHeight)\n              );\n\n        var clipWidth = clipHeight / aspectRatio;\n        if (clipWidth > containerWidth) {\n          clipWidth = containerWidth;\n          clipHeight = clipWidth * aspectRatio;\n        }\n\n        if (clipHeight > containerHeight) {\n          clipHeight = containerHeight;\n          clipWidth = containerHeight / aspectRatio;\n        }\n\n        clip.width = clipWidth;\n        clip.height = clipHeight;\n      }\n    });\n  };\n\n  var SVG_MASK =\n    '<svg width=\"500\" height=\"200\" viewBox=\"0 0 500 200\" preserveAspectRatio=\"none\">\\n    <defs>\\n        <radialGradient id=\"gradient-__UID__\" cx=\".5\" cy=\"1.25\" r=\"1.15\">\\n            <stop offset=\\'50%\\' stop-color=\\'#000000\\'/>\\n            <stop offset=\\'56%\\' stop-color=\\'#0a0a0a\\'/>\\n            <stop offset=\\'63%\\' stop-color=\\'#262626\\'/>\\n            <stop offset=\\'69%\\' stop-color=\\'#4f4f4f\\'/>\\n            <stop offset=\\'75%\\' stop-color=\\'#808080\\'/>\\n            <stop offset=\\'81%\\' stop-color=\\'#b1b1b1\\'/>\\n            <stop offset=\\'88%\\' stop-color=\\'#dadada\\'/>\\n            <stop offset=\\'94%\\' stop-color=\\'#f6f6f6\\'/>\\n            <stop offset=\\'100%\\' stop-color=\\'#ffffff\\'/>\\n        </radialGradient>\\n        <mask id=\"mask-__UID__\">\\n            <rect x=\"0\" y=\"0\" width=\"500\" height=\"200\" fill=\"url(#gradient-__UID__)\"></rect>\\n        </mask>\\n    </defs>\\n    <rect x=\"0\" width=\"500\" height=\"200\" fill=\"currentColor\" mask=\"url(#mask-__UID__)\"></rect>\\n</svg>';\n\n  var SVGMaskUniqueId = 0;\n\n  var createImageOverlayView = function createImageOverlayView(fpAPI) {\n    return fpAPI.utils.createView({\n      name: 'image-preview-overlay',\n      tag: 'div',\n      ignoreRect: true,\n      create: function create(_ref) {\n        var root = _ref.root,\n          props = _ref.props;\n        var mask = SVG_MASK;\n        if (document.querySelector('base')) {\n          var url = new URL(\n            window.location.href.replace(window.location.hash, '')\n          ).href;\n          mask = mask.replace(/url\\(\\#/g, 'url(' + url + '#');\n        }\n\n        SVGMaskUniqueId++;\n        root.element.classList.add(\n          'filepond--image-preview-overlay-'.concat(props.status)\n        );\n\n        root.element.innerHTML = mask.replace(/__UID__/g, SVGMaskUniqueId);\n      },\n      mixins: {\n        styles: ['opacity'],\n        animations: {\n          opacity: { type: 'spring', mass: 25 }\n        }\n      }\n    });\n  };\n\n  /**\n   * Bitmap Worker\n   */\n  var BitmapWorker = function BitmapWorker() {\n    self.onmessage = function(e) {\n      createImageBitmap(e.data.message.file).then(function(bitmap) {\n        self.postMessage({ id: e.data.id, message: bitmap }, [bitmap]);\n      });\n    };\n  };\n\n  /**\n   * ColorMatrix Worker\n   */\n  var ColorMatrixWorker = function ColorMatrixWorker() {\n    self.onmessage = function(e) {\n      var imageData = e.data.message.imageData;\n      var matrix = e.data.message.colorMatrix;\n\n      var data = imageData.data;\n      var l = data.length;\n\n      var m11 = matrix[0];\n      var m12 = matrix[1];\n      var m13 = matrix[2];\n      var m14 = matrix[3];\n      var m15 = matrix[4];\n\n      var m21 = matrix[5];\n      var m22 = matrix[6];\n      var m23 = matrix[7];\n      var m24 = matrix[8];\n      var m25 = matrix[9];\n\n      var m31 = matrix[10];\n      var m32 = matrix[11];\n      var m33 = matrix[12];\n      var m34 = matrix[13];\n      var m35 = matrix[14];\n\n      var m41 = matrix[15];\n      var m42 = matrix[16];\n      var m43 = matrix[17];\n      var m44 = matrix[18];\n      var m45 = matrix[19];\n\n      var index = 0,\n        r = 0.0,\n        g = 0.0,\n        b = 0.0,\n        a = 0.0;\n\n      for (; index < l; index += 4) {\n        r = data[index] / 255;\n        g = data[index + 1] / 255;\n        b = data[index + 2] / 255;\n        a = data[index + 3] / 255;\n        data[index] = Math.max(\n          0,\n          Math.min((r * m11 + g * m12 + b * m13 + a * m14 + m15) * 255, 255)\n        );\n        data[index + 1] = Math.max(\n          0,\n          Math.min((r * m21 + g * m22 + b * m23 + a * m24 + m25) * 255, 255)\n        );\n        data[index + 2] = Math.max(\n          0,\n          Math.min((r * m31 + g * m32 + b * m33 + a * m34 + m35) * 255, 255)\n        );\n        data[index + 3] = Math.max(\n          0,\n          Math.min((r * m41 + g * m42 + b * m43 + a * m44 + m45) * 255, 255)\n        );\n      }\n\n      self.postMessage({ id: e.data.id, message: imageData }, [\n        imageData.data.buffer\n      ]);\n    };\n  };\n\n  var getImageSize = function getImageSize(url, cb) {\n    var image = new Image();\n    image.onload = function() {\n      var width = image.naturalWidth;\n      var height = image.naturalHeight;\n      image = null;\n      cb(width, height);\n    };\n    image.src = url;\n  };\n\n  var transforms = {\n    1: function _() {\n      return [1, 0, 0, 1, 0, 0];\n    },\n    2: function _(width) {\n      return [-1, 0, 0, 1, width, 0];\n    },\n    3: function _(width, height) {\n      return [-1, 0, 0, -1, width, height];\n    },\n    4: function _(width, height) {\n      return [1, 0, 0, -1, 0, height];\n    },\n    5: function _() {\n      return [0, 1, 1, 0, 0, 0];\n    },\n    6: function _(width, height) {\n      return [0, 1, -1, 0, height, 0];\n    },\n    7: function _(width, height) {\n      return [0, -1, -1, 0, height, width];\n    },\n    8: function _(width) {\n      return [0, -1, 1, 0, 0, width];\n    }\n  };\n\n  var fixImageOrientation = function fixImageOrientation(\n    ctx,\n    width,\n    height,\n    orientation\n  ) {\n    // no orientation supplied\n    if (orientation === -1) {\n      return;\n    }\n\n    ctx.transform.apply(ctx, transforms[orientation](width, height));\n  };\n\n  // draws the preview image to canvas\n  var createPreviewImage = function createPreviewImage(\n    data,\n    width,\n    height,\n    orientation\n  ) {\n    // can't draw on half pixels\n    width = Math.round(width);\n    height = Math.round(height);\n\n    // draw image\n    var canvas = document.createElement('canvas');\n    canvas.width = width;\n    canvas.height = height;\n    var ctx = canvas.getContext('2d');\n\n    // if is rotated incorrectly swap width and height\n    if (orientation >= 5 && orientation <= 8) {\n      var _ref = [height, width];\n      width = _ref[0];\n      height = _ref[1];\n    }\n\n    // correct image orientation\n    fixImageOrientation(ctx, width, height, orientation);\n\n    // draw the image\n    ctx.drawImage(data, 0, 0, width, height);\n\n    return canvas;\n  };\n\n  var isBitmap = function isBitmap(file) {\n    return /^image/.test(file.type) && !/svg/.test(file.type);\n  };\n\n  var MAX_WIDTH = 10;\n  var MAX_HEIGHT = 10;\n\n  var calculateAverageColor = function calculateAverageColor(image) {\n    var scalar = Math.min(MAX_WIDTH / image.width, MAX_HEIGHT / image.height);\n\n    var canvas = document.createElement('canvas');\n    var ctx = canvas.getContext('2d');\n    var width = (canvas.width = Math.ceil(image.width * scalar));\n    var height = (canvas.height = Math.ceil(image.height * scalar));\n    ctx.drawImage(image, 0, 0, width, height);\n    var data = null;\n    try {\n      data = ctx.getImageData(0, 0, width, height).data;\n    } catch (e) {\n      return null;\n    }\n    var l = data.length;\n\n    var r = 0;\n    var g = 0;\n    var b = 0;\n    var i = 0;\n\n    for (; i < l; i += 4) {\n      r += data[i] * data[i];\n      g += data[i + 1] * data[i + 1];\n      b += data[i + 2] * data[i + 2];\n    }\n\n    r = averageColor(r, l);\n    g = averageColor(g, l);\n    b = averageColor(b, l);\n\n    return { r: r, g: g, b: b };\n  };\n\n  var averageColor = function averageColor(c, l) {\n    return Math.floor(Math.sqrt(c / (l / 4)));\n  };\n\n  var cloneCanvas = function cloneCanvas(origin, target) {\n    target = target || document.createElement('canvas');\n    target.width = origin.width;\n    target.height = origin.height;\n    var ctx = target.getContext('2d');\n    ctx.drawImage(origin, 0, 0);\n    return target;\n  };\n\n  var cloneImageData = function cloneImageData(imageData) {\n    var id;\n    try {\n      id = new ImageData(imageData.width, imageData.height);\n    } catch (e) {\n      var canvas = document.createElement('canvas');\n      var ctx = canvas.getContext('2d');\n      id = ctx.createImageData(imageData.width, imageData.height);\n    }\n    id.data.set(new Uint8ClampedArray(imageData.data));\n    return id;\n  };\n\n  var loadImage = function loadImage(url) {\n    return new Promise(function(resolve, reject) {\n      var img = new Image();\n      img.crossOrigin = 'Anonymous';\n      img.onload = function() {\n        resolve(img);\n      };\n      img.onerror = function(e) {\n        reject(e);\n      };\n      img.src = url;\n    });\n  };\n\n  var createImageWrapperView = function createImageWrapperView(_) {\n    // create overlay view\n    var OverlayView = createImageOverlayView(_);\n\n    var ImageView = createImageView(_);\n    var createWorker = _.utils.createWorker;\n\n    var applyFilter = function applyFilter(root, filter, target) {\n      return new Promise(function(resolve) {\n        // will store image data for future filter updates\n        if (!root.ref.imageData) {\n          root.ref.imageData = target\n            .getContext('2d')\n            .getImageData(0, 0, target.width, target.height);\n        }\n\n        // get image data reference\n        var imageData = cloneImageData(root.ref.imageData);\n\n        if (!filter || filter.length !== 20) {\n          target.getContext('2d').putImageData(imageData, 0, 0);\n          return resolve();\n        }\n\n        var worker = createWorker(ColorMatrixWorker);\n        worker.post(\n          {\n            imageData: imageData,\n            colorMatrix: filter\n          },\n\n          function(response) {\n            // apply filtered colors\n            target.getContext('2d').putImageData(response, 0, 0);\n\n            // stop worker\n            worker.terminate();\n\n            // done!\n            resolve();\n          },\n          [imageData.data.buffer]\n        );\n      });\n    };\n\n    var removeImageView = function removeImageView(root, imageView) {\n      root.removeChildView(imageView);\n      imageView.image.width = 1;\n      imageView.image.height = 1;\n      imageView._destroy();\n    };\n\n    // remove an image\n    var shiftImage = function shiftImage(_ref) {\n      var root = _ref.root;\n      var imageView = root.ref.images.shift();\n      imageView.opacity = 0;\n      imageView.translateY = -15;\n      root.ref.imageViewBin.push(imageView);\n      return imageView;\n    };\n\n    // add new image\n    var pushImage = function pushImage(_ref2) {\n      var root = _ref2.root,\n        props = _ref2.props,\n        image = _ref2.image;\n      var id = props.id;\n      var item = root.query('GET_ITEM', { id: id });\n      if (!item) return;\n\n      var crop = item.getMetadata('crop') || {\n        center: {\n          x: 0.5,\n          y: 0.5\n        },\n\n        flip: {\n          horizontal: false,\n          vertical: false\n        },\n\n        zoom: 1,\n        rotation: 0,\n        aspectRatio: null\n      };\n\n      var background = root.query(\n        'GET_IMAGE_TRANSFORM_CANVAS_BACKGROUND_COLOR'\n      );\n\n      var markup;\n      var resize;\n      var dirty = false;\n      if (root.query('GET_IMAGE_PREVIEW_MARKUP_SHOW')) {\n        markup = item.getMetadata('markup') || [];\n        resize = item.getMetadata('resize');\n        dirty = true;\n      }\n\n      // append image presenter\n      var imageView = root.appendChildView(\n        root.createChildView(ImageView, {\n          id: id,\n          image: image,\n          crop: crop,\n          resize: resize,\n          markup: markup,\n          dirty: dirty,\n          background: background,\n          opacity: 0,\n          scaleX: 1.15,\n          scaleY: 1.15,\n          translateY: 15\n        }),\n\n        root.childViews.length\n      );\n\n      root.ref.images.push(imageView);\n\n      // reveal the preview image\n      imageView.opacity = 1;\n      imageView.scaleX = 1;\n      imageView.scaleY = 1;\n      imageView.translateY = 0;\n\n      // the preview is now ready to be drawn\n      setTimeout(function() {\n        root.dispatch('DID_IMAGE_PREVIEW_SHOW', { id: id });\n      }, 250);\n    };\n\n    var updateImage = function updateImage(_ref3) {\n      var root = _ref3.root,\n        props = _ref3.props;\n      var item = root.query('GET_ITEM', { id: props.id });\n      if (!item) return;\n      var imageView = root.ref.images[root.ref.images.length - 1];\n      imageView.crop = item.getMetadata('crop');\n      imageView.background = root.query(\n        'GET_IMAGE_TRANSFORM_CANVAS_BACKGROUND_COLOR'\n      );\n\n      if (root.query('GET_IMAGE_PREVIEW_MARKUP_SHOW')) {\n        imageView.dirty = true;\n        imageView.resize = item.getMetadata('resize');\n        imageView.markup = item.getMetadata('markup');\n      }\n    };\n\n    // replace image preview\n    var didUpdateItemMetadata = function didUpdateItemMetadata(_ref4) {\n      var root = _ref4.root,\n        props = _ref4.props,\n        action = _ref4.action;\n      // only filter and crop trigger redraw\n      if (!/crop|filter|markup|resize/.test(action.change.key)) return;\n\n      // no images to update, exit\n      if (!root.ref.images.length) return;\n\n      // no item found, exit\n      var item = root.query('GET_ITEM', { id: props.id });\n      if (!item) return;\n\n      // for now, update existing image when filtering\n      if (/filter/.test(action.change.key)) {\n        var imageView = root.ref.images[root.ref.images.length - 1];\n        applyFilter(root, action.change.value, imageView.image);\n        return;\n      }\n\n      if (/crop|markup|resize/.test(action.change.key)) {\n        var crop = item.getMetadata('crop');\n        var image = root.ref.images[root.ref.images.length - 1];\n\n        // if aspect ratio has changed, we need to create a new image\n        if (\n          crop &&\n          crop.aspectRatio &&\n          image.crop &&\n          image.crop.aspectRatio &&\n          Math.abs(crop.aspectRatio - image.crop.aspectRatio) > 0.00001\n        ) {\n          var _imageView = shiftImage({ root: root });\n          pushImage({\n            root: root,\n            props: props,\n            image: cloneCanvas(_imageView.image)\n          });\n        }\n        // if not, we can update the current image\n        else {\n          updateImage({ root: root, props: props });\n        }\n      }\n    };\n\n    var canCreateImageBitmap = function canCreateImageBitmap(file) {\n      // Firefox versions before 58 will freeze when running createImageBitmap\n      // in a Web Worker so we detect those versions and return false for support\n      var userAgent = window.navigator.userAgent;\n      var isFirefox = userAgent.match(/Firefox\\/([0-9]+)\\./);\n      var firefoxVersion = isFirefox ? parseInt(isFirefox[1]) : null;\n      if (firefoxVersion <= 58) return false;\n\n      return 'createImageBitmap' in window && isBitmap(file);\n    };\n\n    /**\n     * Write handler for when preview container has been created\n     */\n    var didCreatePreviewContainer = function didCreatePreviewContainer(_ref5) {\n      var root = _ref5.root,\n        props = _ref5.props;\n      var id = props.id;\n\n      // we need to get the file data to determine the eventual image size\n      var item = root.query('GET_ITEM', id);\n      if (!item) return;\n\n      // get url to file (we'll revoke it later on when done)\n      var fileURL = URL.createObjectURL(item.file);\n\n      // determine image size of this item\n      getImageSize(fileURL, function(width, height) {\n        // we can now scale the panel to the final size\n        root.dispatch('DID_IMAGE_PREVIEW_CALCULATE_SIZE', {\n          id: id,\n          width: width,\n          height: height\n        });\n      });\n    };\n\n    var drawPreview = function drawPreview(_ref6) {\n      var root = _ref6.root,\n        props = _ref6.props;\n      var id = props.id;\n\n      // we need to get the file data to determine the eventual image size\n      var item = root.query('GET_ITEM', id);\n      if (!item) return;\n\n      // get url to file (we'll revoke it later on when done)\n      var fileURL = URL.createObjectURL(item.file);\n\n      // fallback\n      var loadPreviewFallback = function loadPreviewFallback() {\n        // let's scale the image in the main thread :(\n        loadImage(fileURL).then(previewImageLoaded);\n      };\n\n      // image is now ready\n      var previewImageLoaded = function previewImageLoaded(imageData) {\n        // the file url is no longer needed\n        URL.revokeObjectURL(fileURL);\n\n        // draw the scaled down version here and use that as source so bitmapdata can be closed\n        // orientation info\n        var exif = item.getMetadata('exif') || {};\n        var orientation = exif.orientation || -1;\n\n        // get width and height from action, and swap if orientation is incorrect\n        var width = imageData.width,\n          height = imageData.height;\n\n        // if no width or height, just return early.\n        if (!width || !height) return;\n\n        if (orientation >= 5 && orientation <= 8) {\n          var _ref7 = [height, width];\n          width = _ref7[0];\n          height = _ref7[1];\n        }\n\n        // scale canvas based on pixel density\n        // we multiply by .75 as that creates smaller but still clear images on screens with high res displays\n        var pixelDensityFactor = Math.max(1, window.devicePixelRatio * 0.75);\n\n        // we want as much pixels to work with as possible,\n        // this multiplies the minimum image resolution,\n        // so when zooming in it doesn't get too blurry\n        var zoomFactor = root.query('GET_IMAGE_PREVIEW_ZOOM_FACTOR');\n\n        // imaeg scale factor\n        var scaleFactor = zoomFactor * pixelDensityFactor;\n\n        // calculate scaled preview image size\n        var previewImageRatio = height / width;\n\n        // calculate image preview height and width\n        var previewContainerWidth = root.rect.element.width;\n        var previewContainerHeight = root.rect.element.height;\n\n        var imageWidth = previewContainerWidth;\n        var imageHeight = imageWidth * previewImageRatio;\n\n        if (previewImageRatio > 1) {\n          imageWidth = Math.min(width, previewContainerWidth * scaleFactor);\n          imageHeight = imageWidth * previewImageRatio;\n        } else {\n          imageHeight = Math.min(height, previewContainerHeight * scaleFactor);\n          imageWidth = imageHeight / previewImageRatio;\n        }\n\n        // transfer to image tag so no canvas memory wasted on iOS\n        var previewImage = createPreviewImage(\n          imageData,\n          imageWidth,\n          imageHeight,\n          orientation\n        );\n\n        // done\n        var done = function done() {\n          // calculate average image color, disabled for now\n          var averageColor = root.query(\n            'GET_IMAGE_PREVIEW_CALCULATE_AVERAGE_IMAGE_COLOR'\n          )\n            ? calculateAverageColor(data)\n            : null;\n          item.setMetadata('color', averageColor, true);\n\n          // data has been transferred to canvas ( if was ImageBitmap )\n          if ('close' in imageData) {\n            imageData.close();\n          }\n\n          // show the overlay\n          root.ref.overlayShadow.opacity = 1;\n\n          // create the first image\n          pushImage({ root: root, props: props, image: previewImage });\n        };\n\n        // apply filter\n        var filter = item.getMetadata('filter');\n        if (filter) {\n          applyFilter(root, filter, previewImage).then(done);\n        } else {\n          done();\n        }\n      };\n\n      // if we support scaling using createImageBitmap we use a worker\n      if (canCreateImageBitmap(item.file)) {\n        // let's scale the image in a worker\n        var worker = createWorker(BitmapWorker);\n\n        worker.post(\n          {\n            file: item.file\n          },\n\n          function(imageBitmap) {\n            // destroy worker\n            worker.terminate();\n\n            // no bitmap returned, must be something wrong,\n            // try the oldschool way\n            if (!imageBitmap) {\n              loadPreviewFallback();\n              return;\n            }\n\n            // yay we got our bitmap, let's continue showing the preview\n            previewImageLoaded(imageBitmap);\n          }\n        );\n      } else {\n        // create fallback preview\n        loadPreviewFallback();\n      }\n    };\n\n    /**\n     * Write handler for when the preview image is ready to be animated\n     */\n    var didDrawPreview = function didDrawPreview(_ref8) {\n      var root = _ref8.root;\n      // get last added image\n      var image = root.ref.images[root.ref.images.length - 1];\n      image.translateY = 0;\n      image.scaleX = 1.0;\n      image.scaleY = 1.0;\n      image.opacity = 1;\n    };\n\n    /**\n     * Write handler for when the preview has been loaded\n     */\n    var restoreOverlay = function restoreOverlay(_ref9) {\n      var root = _ref9.root;\n      root.ref.overlayShadow.opacity = 1;\n      root.ref.overlayError.opacity = 0;\n      root.ref.overlaySuccess.opacity = 0;\n    };\n\n    var didThrowError = function didThrowError(_ref10) {\n      var root = _ref10.root;\n      root.ref.overlayShadow.opacity = 0.25;\n      root.ref.overlayError.opacity = 1;\n    };\n\n    var didCompleteProcessing = function didCompleteProcessing(_ref11) {\n      var root = _ref11.root;\n      root.ref.overlayShadow.opacity = 0.25;\n      root.ref.overlaySuccess.opacity = 1;\n    };\n\n    /**\n     * Constructor\n     */\n    var create = function create(_ref12) {\n      var root = _ref12.root;\n      // image view\n      root.ref.images = [];\n\n      // the preview image data (we need this to filter the image)\n      root.ref.imageData = null;\n\n      // image bin\n      root.ref.imageViewBin = [];\n\n      // image overlays\n      root.ref.overlayShadow = root.appendChildView(\n        root.createChildView(OverlayView, {\n          opacity: 0,\n          status: 'idle'\n        })\n      );\n\n      root.ref.overlaySuccess = root.appendChildView(\n        root.createChildView(OverlayView, {\n          opacity: 0,\n          status: 'success'\n        })\n      );\n\n      root.ref.overlayError = root.appendChildView(\n        root.createChildView(OverlayView, {\n          opacity: 0,\n          status: 'failure'\n        })\n      );\n    };\n\n    return _.utils.createView({\n      name: 'image-preview-wrapper',\n      create: create,\n      styles: ['height'],\n      apis: ['height'],\n      destroy: function destroy(_ref13) {\n        var root = _ref13.root;\n        // we resize the image so memory on iOS 12 is released more quickly (it seems)\n        root.ref.images.forEach(function(imageView) {\n          imageView.image.width = 1;\n          imageView.image.height = 1;\n        });\n      },\n      didWriteView: function didWriteView(_ref14) {\n        var root = _ref14.root;\n        root.ref.images.forEach(function(imageView) {\n          imageView.dirty = false;\n        });\n      },\n      write: _.utils.createRoute(\n        {\n          // image preview stated\n          DID_IMAGE_PREVIEW_DRAW: didDrawPreview,\n          DID_IMAGE_PREVIEW_CONTAINER_CREATE: didCreatePreviewContainer,\n          DID_FINISH_CALCULATE_PREVIEWSIZE: drawPreview,\n          DID_UPDATE_ITEM_METADATA: didUpdateItemMetadata,\n\n          // file states\n          DID_THROW_ITEM_LOAD_ERROR: didThrowError,\n          DID_THROW_ITEM_PROCESSING_ERROR: didThrowError,\n          DID_THROW_ITEM_INVALID: didThrowError,\n          DID_COMPLETE_ITEM_PROCESSING: didCompleteProcessing,\n          DID_START_ITEM_PROCESSING: restoreOverlay,\n          DID_REVERT_ITEM_PROCESSING: restoreOverlay\n        },\n\n        function(_ref15) {\n          var root = _ref15.root;\n          // views on death row\n          var viewsToRemove = root.ref.imageViewBin.filter(function(imageView) {\n            return imageView.opacity === 0;\n          });\n\n          // views to retain\n          root.ref.imageViewBin = root.ref.imageViewBin.filter(function(\n            imageView\n          ) {\n            return imageView.opacity > 0;\n          });\n\n          // remove these views\n          viewsToRemove.forEach(function(imageView) {\n            return removeImageView(root, imageView);\n          });\n          viewsToRemove.length = 0;\n        }\n      )\n    });\n  };\n\n  /**\n   * Image Preview Plugin\n   */\n  var plugin = function plugin(fpAPI) {\n    var addFilter = fpAPI.addFilter,\n      utils = fpAPI.utils;\n    var Type = utils.Type,\n      createRoute = utils.createRoute,\n      isFile = utils.isFile;\n\n    // imagePreviewView\n    var imagePreviewView = createImageWrapperView(fpAPI);\n\n    // called for each view that is created right after the 'create' method\n    addFilter('CREATE_VIEW', function(viewAPI) {\n      // get reference to created view\n      var is = viewAPI.is,\n        view = viewAPI.view,\n        query = viewAPI.query;\n\n      // only hook up to item view and only if is enabled for this cropper\n      if (!is('file') || !query('GET_ALLOW_IMAGE_PREVIEW')) return;\n\n      // create the image preview plugin, but only do so if the item is an image\n      var didLoadItem = function didLoadItem(_ref) {\n        var root = _ref.root,\n          props = _ref.props;\n        var id = props.id;\n        var item = query('GET_ITEM', id);\n\n        // item could theoretically have been removed in the mean time\n        if (!item || !isFile(item.file) || item.archived) return;\n\n        // get the file object\n        var file = item.file;\n\n        // exit if this is not an image\n        if (!isPreviewableImage(file)) return;\n\n        // test if is filtered\n        if (!query('GET_IMAGE_PREVIEW_FILTER_ITEM')(item)) return;\n\n        // exit if image size is too high and no createImageBitmap support\n        // this would simply bring the browser to its knees and that is not what we want\n        var supportsCreateImageBitmap = 'createImageBitmap' in (window || {});\n        var maxPreviewFileSize = query('GET_IMAGE_PREVIEW_MAX_FILE_SIZE');\n        if (\n          !supportsCreateImageBitmap &&\n          maxPreviewFileSize &&\n          file.size > maxPreviewFileSize\n        )\n          return;\n\n        // set preview view\n        root.ref.imagePreview = view.appendChildView(\n          view.createChildView(imagePreviewView, { id: id })\n        );\n\n        // update height if is fixed\n        var fixedPreviewHeight = root.query('GET_IMAGE_PREVIEW_HEIGHT');\n        if (fixedPreviewHeight) {\n          root.dispatch('DID_UPDATE_PANEL_HEIGHT', {\n            id: item.id,\n            height: fixedPreviewHeight\n          });\n        }\n\n        // now ready\n        var queue =\n          !supportsCreateImageBitmap &&\n          file.size > query('GET_IMAGE_PREVIEW_MAX_INSTANT_PREVIEW_FILE_SIZE');\n        root.dispatch('DID_IMAGE_PREVIEW_CONTAINER_CREATE', { id: id }, queue);\n      };\n\n      var rescaleItem = function rescaleItem(root, props) {\n        if (!root.ref.imagePreview) return;\n        var id = props.id;\n\n        // get item\n        var item = root.query('GET_ITEM', { id: id });\n        if (!item) return;\n\n        // if is fixed height or panel has aspect ratio, exit here, height has already been defined\n        var panelAspectRatio = root.query('GET_PANEL_ASPECT_RATIO');\n        var itemPanelAspectRatio = root.query('GET_ITEM_PANEL_ASPECT_RATIO');\n        var fixedHeight = root.query('GET_IMAGE_PREVIEW_HEIGHT');\n        if (panelAspectRatio || itemPanelAspectRatio || fixedHeight) return;\n\n        // no data!\n        var _root$ref = root.ref,\n          imageWidth = _root$ref.imageWidth,\n          imageHeight = _root$ref.imageHeight;\n        if (!imageWidth || !imageHeight) return;\n\n        // get height min and max\n        var minPreviewHeight = root.query('GET_IMAGE_PREVIEW_MIN_HEIGHT');\n        var maxPreviewHeight = root.query('GET_IMAGE_PREVIEW_MAX_HEIGHT');\n\n        // orientation info\n        var exif = item.getMetadata('exif') || {};\n        var orientation = exif.orientation || -1;\n\n        // get width and height from action, and swap of orientation is incorrect\n        if (orientation >= 5 && orientation <= 8) {\n          var _ref2 = [imageHeight, imageWidth];\n          imageWidth = _ref2[0];\n          imageHeight = _ref2[1];\n        }\n\n        // scale up width and height when we're dealing with an SVG\n        if (!isBitmap(item.file) || root.query('GET_IMAGE_PREVIEW_UPSCALE')) {\n          var scalar = 2048 / imageWidth;\n          imageWidth *= scalar;\n          imageHeight *= scalar;\n        }\n\n        // image aspect ratio\n        var imageAspectRatio = imageHeight / imageWidth;\n\n        // we need the item to get to the crop size\n        var previewAspectRatio =\n          (item.getMetadata('crop') || {}).aspectRatio || imageAspectRatio;\n\n        // preview height range\n        var previewHeightMax = Math.max(\n          minPreviewHeight,\n          Math.min(imageHeight, maxPreviewHeight)\n        );\n\n        var itemWidth = root.rect.element.width;\n        var previewHeight = Math.min(\n          itemWidth * previewAspectRatio,\n          previewHeightMax\n        );\n\n        // request update to panel height\n        root.dispatch('DID_UPDATE_PANEL_HEIGHT', {\n          id: item.id,\n          height: previewHeight\n        });\n      };\n\n      var didResizeView = function didResizeView(_ref3) {\n        var root = _ref3.root;\n        // actions in next write operation\n        root.ref.shouldRescale = true;\n      };\n\n      var didUpdateItemMetadata = function didUpdateItemMetadata(_ref4) {\n        var root = _ref4.root,\n          action = _ref4.action;\n        if (action.change.key !== 'crop') return;\n\n        // actions in next write operation\n        root.ref.shouldRescale = true;\n      };\n\n      var didCalculatePreviewSize = function didCalculatePreviewSize(_ref5) {\n        var root = _ref5.root,\n          action = _ref5.action;\n        // remember dimensions\n        root.ref.imageWidth = action.width;\n        root.ref.imageHeight = action.height;\n\n        // actions in next write operation\n        root.ref.shouldRescale = true;\n        root.ref.shouldDrawPreview = true;\n\n        // as image load could take a while and fire when draw loop is resting we need to give it a kick\n        root.dispatch('KICK');\n      };\n\n      // start writing\n      view.registerWriter(\n        createRoute(\n          {\n            DID_RESIZE_ROOT: didResizeView,\n            DID_STOP_RESIZE: didResizeView,\n            DID_LOAD_ITEM: didLoadItem,\n            DID_IMAGE_PREVIEW_CALCULATE_SIZE: didCalculatePreviewSize,\n            DID_UPDATE_ITEM_METADATA: didUpdateItemMetadata\n          },\n\n          function(_ref6) {\n            var root = _ref6.root,\n              props = _ref6.props;\n            // no preview view attached\n            if (!root.ref.imagePreview) return;\n\n            // don't do anything while hidden\n            if (root.rect.element.hidden) return;\n\n            // resize the item panel\n            if (root.ref.shouldRescale) {\n              rescaleItem(root, props);\n              root.ref.shouldRescale = false;\n            }\n\n            if (root.ref.shouldDrawPreview) {\n              // queue till next frame so we're sure the height has been applied this forces the draw image call inside the wrapper view to use the correct height\n              requestAnimationFrame(function() {\n                // this requestAnimationFrame nesting is horrible but it fixes an issue with 100hz displays on Chrome\n                // https://github.com/pqina/filepond-plugin-image-preview/issues/57\n                requestAnimationFrame(function() {\n                  root.dispatch('DID_FINISH_CALCULATE_PREVIEWSIZE', {\n                    id: props.id\n                  });\n                });\n              });\n\n              root.ref.shouldDrawPreview = false;\n            }\n          }\n        )\n      );\n    });\n\n    // expose plugin\n    return {\n      options: {\n        // Enable or disable image preview\n        allowImagePreview: [true, Type.BOOLEAN],\n\n        // filters file items to determine which are shown as preview\n        imagePreviewFilterItem: [\n          function() {\n            return true;\n          },\n          Type.FUNCTION\n        ],\n\n        // Fixed preview height\n        imagePreviewHeight: [null, Type.INT],\n\n        // Min image height\n        imagePreviewMinHeight: [44, Type.INT],\n\n        // Max image height\n        imagePreviewMaxHeight: [256, Type.INT],\n\n        // Max size of preview file for when createImageBitmap is not supported\n        imagePreviewMaxFileSize: [null, Type.INT],\n\n        // The amount of extra pixels added to the image preview to allow comfortable zooming\n        imagePreviewZoomFactor: [2, Type.INT],\n\n        // Should we upscale small images to fit the max bounding box of the preview area\n        imagePreviewUpscale: [false, Type.BOOLEAN],\n\n        // Max size of preview file that we allow to try to instant preview if createImageBitmap is not supported, else image is queued for loading\n        imagePreviewMaxInstantPreviewFileSize: [1000000, Type.INT],\n\n        // Style of the transparancy indicator used behind images\n        imagePreviewTransparencyIndicator: [null, Type.STRING],\n\n        // Enables or disables reading average image color\n        imagePreviewCalculateAverageImageColor: [false, Type.BOOLEAN],\n\n        // Enables or disables the previewing of markup\n        imagePreviewMarkupShow: [true, Type.BOOLEAN],\n\n        // Allows filtering of markup to only show certain shapes\n        imagePreviewMarkupFilter: [\n          function() {\n            return true;\n          },\n          Type.FUNCTION\n        ]\n      }\n    };\n  };\n\n  // fire pluginloaded event if running in browser, this allows registering the plugin when using async script tags\n  var isBrowser =\n    typeof window !== 'undefined' && typeof window.document !== 'undefined';\n  if (isBrowser) {\n    document.dispatchEvent(\n      new CustomEvent('FilePond:pluginloaded', { detail: plugin })\n    );\n  }\n\n  return plugin;\n});\n", "import { DirectUpload } from '@rails/activestorage'\nimport * as FilePond from 'filepond'\nimport FilePondPluginImageValidateSize from \"filepond-plugin-image-validate-size\";\nimport FilePondPluginFileValidateSize from 'filepond-plugin-file-validate-size';\nimport FilePondPluginFileValidateType from \"filepond-plugin-file-validate-type\";\nimport FilePondPluginImagePreview from 'filepond-plugin-image-preview';\n\nFilePond.registerPlugin(FilePondPluginImageValidateSize);\nFilePond.registerPlugin(FilePondPluginFileValidateType);\nFilePond.registerPlugin(FilePondPluginFileValidateSize);\nFilePond.registerPlugin(FilePondPluginImagePreview);\n\nlet FilePondRails = {\n    directUploadUrl: null,\n    input: null,\n    default_options: {\n        allowPaste: false,\n        allowFileTypeValidation: true,\n        allowFileSizeValidation: true,\n        maxFileSize: 1*1000*1000,\n        allowImagePreview: false,\n        imagePreviewHeight: 100,\n        labelIdle:'Drag & Drop Images (Max 9) or <span class=\"filepond--label-action\">Browse</span>',\n        acceptedFileTypes: ['image/png', 'image/jpg','image/jpeg', 'image/bmp', 'image/webp'],\n        maxFiles: 9,\n        allowMultiple: true,\n        server: {\n            process: (fieldName, file, metadata, load, error, progress, abort, transfer, options) => {\n                const uploader = new DirectUpload(file, FilePondRails.directUploadUrl, {\n                    directUploadWillStoreFileWithXHR: (request) => {\n                        request.upload.addEventListener(\n                            'progress',\n                            event => progress(event.lengthComputable, event.loaded, event.total)\n                        )\n                    },\n\n                })\n                uploader.create((errorResponse, blob) => {\n                    if (errorResponse) {\n                        error(`Something went wrong: ${errorResponse}`)\n                    } else {\n                        load(blob.signed_id)\n                    }\n                })\n\n                return {\n                    abort: () => abort()\n                }\n            },\n            fetch: {\n                url: '/active_storage/fetch',\n                method: 'POST',\n                onload: (response) => {\n                    console.log(response)\n                    return response\n                },\n                ondata: (response) => {\n                    console.log(response)\n                    return response\n                }\n            },\n            revert: {\n                url: '/active_storage/remove'\n            },\n            restore: () => {\n                console.log('restore')\n            },\n            headers: {\n                'X-CSRF-Token': document.head.querySelector(\"[name='csrf-token']\").content\n            }\n        },\n        credits: false,\n    },\n\n    // Convenience method to initialize FilePond based on the way this gem expects things to work\n    create: function(input, options = {}) {\n        FilePondRails.directUploadUrl = input.dataset.directUploadUrl\n        FilePondRails.input = input\n\n        // Initialize FilePond on our element\n        return FilePond.create(input, {...FilePondRails.default_options, ...options})\n    }\n}\n\n\n\nexport {\n    FilePond as FilePond,\n    FilePondRails as FilePondRails\n}", "!function(e,t){if(\"object\"==typeof exports&&\"object\"==typeof module)module.exports=t();else if(\"function\"==typeof define&&define.amd)define([],t);else{var n=t();for(var o in n)(\"object\"==typeof exports?exports:e)[o]=n[o]}}(window,(function(){return function(e){var t={};function n(o){if(t[o])return t[o].exports;var i=t[o]={i:o,l:!1,exports:{}};return e[o].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.d=function(e,t,o){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:o})},n.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&\"object\"==typeof e&&e&&e.__esModule)return e;var o=Object.create(null);if(n.r(o),Object.defineProperty(o,\"default\",{enumerable:!0,value:e}),2&t&&\"string\"!=typeof e)for(var i in e)n.d(o,i,function(t){return e[t]}.bind(null,i));return o},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,\"a\",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p=\"\",n(n.s=0)}([function(e,t,n){\"use strict\";n.r(t);var o,i=\"fslightbox-\",r=\"\".concat(i,\"styles\"),s=\"\".concat(i,\"cursor-grabbing\"),a=\"\".concat(i,\"full-dimension\"),c=\"\".concat(i,\"flex-centered\"),l=\"\".concat(i,\"open\"),u=\"\".concat(i,\"transform-transition\"),d=\"\".concat(i,\"absoluted\"),f=\"\".concat(i,\"slide-btn\"),p=\"\".concat(f,\"-container\"),h=\"\".concat(i,\"fade-in\"),m=\"\".concat(i,\"fade-out\"),g=h+\"-strong\",v=m+\"-strong\",b=\"\".concat(i,\"opacity-\"),x=\"\".concat(b,\"1\"),y=\"\".concat(i,\"source\");function w(e){return(w=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function S(e){var t=e.stageIndexes,n=e.core.stageManager,o=e.props.sources.length-1;n.getPreviousSlideIndex=function(){return 0===t.current?o:t.current-1},n.getNextSlideIndex=function(){return t.current===o?0:t.current+1},n.updateStageIndexes=0===o?function(){}:1===o?function(){0===t.current?(t.next=1,delete t.previous):(t.previous=0,delete t.next)}:function(){t.previous=n.getPreviousSlideIndex(),t.next=n.getNextSlideIndex()},n.i=o<=2?function(){return!0}:function(e){var n=t.current;if(0===n&&e===o||n===o&&0===e)return!0;var i=n-e;return-1===i||0===i||1===i}}\"object\"===(\"undefined\"==typeof document?\"undefined\":w(document))&&((o=document.createElement(\"style\")).className=r,o.appendChild(document.createTextNode(\".fslightbox-absoluted{position:absolute;top:0;left:0}.fslightbox-fade-in{animation:fslightbox-fade-in .3s cubic-bezier(0,0,.7,1)}.fslightbox-fade-out{animation:fslightbox-fade-out .3s ease}.fslightbox-fade-in-strong{animation:fslightbox-fade-in-strong .3s cubic-bezier(0,0,.7,1)}.fslightbox-fade-out-strong{animation:fslightbox-fade-out-strong .3s ease}@keyframes fslightbox-fade-in{from{opacity:.65}to{opacity:1}}@keyframes fslightbox-fade-out{from{opacity:.35}to{opacity:0}}@keyframes fslightbox-fade-in-strong{from{opacity:.3}to{opacity:1}}@keyframes fslightbox-fade-out-strong{from{opacity:1}to{opacity:0}}.fslightbox-cursor-grabbing{cursor:grabbing}.fslightbox-full-dimension{width:100%;height:100%}.fslightbox-open{overflow:hidden;height:100%}.fslightbox-flex-centered{display:flex;justify-content:center;align-items:center}.fslightbox-opacity-0{opacity:0!important}.fslightbox-opacity-1{opacity:1!important}.fslightbox-scrollbarfix{padding-right:17px}.fslightbox-transform-transition{transition:transform .3s}.fslightbox-container{font-family:Arial,sans-serif;position:fixed;top:0;left:0;background:linear-gradient(rgba(30,30,30,.9),#000 1810%);touch-action:pinch-zoom;z-index:1000000000;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent}.fslightbox-container *{box-sizing:border-box}.fslightbox-svg-path{transition:fill .15s ease;fill:#ddd}.fslightbox-nav{height:45px;width:100%;position:absolute;top:0;left:0}.fslightbox-slide-number-container{display:flex;justify-content:center;align-items:center;position:relative;height:100%;font-size:15px;color:#d7d7d7;z-index:0;max-width:55px;text-align:left}.fslightbox-slide-number-container .fslightbox-flex-centered{height:100%}.fslightbox-slash{display:block;margin:0 5px;width:1px;height:12px;transform:rotate(15deg);background:#fff}.fslightbox-toolbar{position:absolute;z-index:3;right:0;top:0;height:100%;display:flex;background:rgba(35,35,35,.65)}.fslightbox-toolbar-button{height:100%;width:45px;cursor:pointer}.fslightbox-toolbar-button:hover .fslightbox-svg-path{fill:#fff}.fslightbox-slide-btn-container{display:flex;align-items:center;padding:12px 12px 12px 6px;position:absolute;top:50%;cursor:pointer;z-index:3;transform:translateY(-50%)}@media (min-width:476px){.fslightbox-slide-btn-container{padding:22px 22px 22px 6px}}@media (min-width:768px){.fslightbox-slide-btn-container{padding:30px 30px 30px 6px}}.fslightbox-slide-btn-container:hover .fslightbox-svg-path{fill:#f1f1f1}.fslightbox-slide-btn{padding:9px;font-size:26px;background:rgba(35,35,35,.65)}@media (min-width:768px){.fslightbox-slide-btn{padding:10px}}@media (min-width:1600px){.fslightbox-slide-btn{padding:11px}}.fslightbox-slide-btn-container-previous{left:0}@media (max-width:475.99px){.fslightbox-slide-btn-container-previous{padding-left:3px}}.fslightbox-slide-btn-container-next{right:0;padding-left:12px;padding-right:3px}@media (min-width:476px){.fslightbox-slide-btn-container-next{padding-left:22px}}@media (min-width:768px){.fslightbox-slide-btn-container-next{padding-left:30px}}@media (min-width:476px){.fslightbox-slide-btn-container-next{padding-right:6px}}.fslightbox-down-event-detector{position:absolute;z-index:1}.fslightbox-slide-swiping-hoverer{z-index:4}.fslightbox-invalid-file-wrapper{font-size:22px;color:#eaebeb;margin:auto}.fslightbox-video{object-fit:cover}.fslightbox-youtube-iframe{border:0}.fslightboxl{display:block;margin:auto;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:67px;height:67px}.fslightboxl div{box-sizing:border-box;display:block;position:absolute;width:54px;height:54px;margin:6px;border:5px solid;border-color:#999 transparent transparent transparent;border-radius:50%;animation:fslightboxl 1.2s cubic-bezier(.5,0,.5,1) infinite}.fslightboxl div:nth-child(1){animation-delay:-.45s}.fslightboxl div:nth-child(2){animation-delay:-.3s}.fslightboxl div:nth-child(3){animation-delay:-.15s}@keyframes fslightboxl{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}.fslightbox-source{position:relative;z-index:2;opacity:0}\")),document.head.appendChild(o));function L(e){var t,n=e.props,o=0,i={};this.getSourceTypeFromLocalStorageByUrl=function(e){return t[e]?t[e]:r(e)},this.handleReceivedSourceTypeForUrl=function(e,n){if(!1===i[n]&&(o--,\"invalid\"!==e?i[n]=e:delete i[n],0===o)){!function(e,t){for(var n in t)e[n]=t[n]}(t,i);try{localStorage.setItem(\"fslightbox-types\",JSON.stringify(t))}catch(e){}}};var r=function(e){o++,i[e]=!1};if(n.disableLocalStorage)this.getSourceTypeFromLocalStorageByUrl=function(){},this.handleReceivedSourceTypeForUrl=function(){};else{try{t=JSON.parse(localStorage.getItem(\"fslightbox-types\"))}catch(e){}t||(t={},this.getSourceTypeFromLocalStorageByUrl=r)}}function A(e,t,n,o){var i=e.data,r=e.elements.sources,s=n/o,a=0;this.adjustSize=function(){if((a=i.maxSourceWidth/s)<i.maxSourceHeight)return n<i.maxSourceWidth&&(a=o),c();a=o>i.maxSourceHeight?i.maxSourceHeight:o,c()};var c=function(){r[t].style.width=a*s+\"px\",r[t].style.height=a+\"px\"}}function C(e,t){var n=this,o=e.collections.sourceSizers,i=e.elements,r=i.sourceAnimationWrappers,s=i.sources,a=e.isl,c=e.resolve;function l(e,n){o[t]=c(A,[t,e,n]),o[t].adjustSize()}this.runActions=function(e,o){a[t]=!0,s[t].classList.add(x),r[t].classList.add(g),r[t].removeChild(r[t].firstChild),l(e,o),n.runActions=l}}function E(e,t){var n,o=this,i=e.elements.sources,r=e.props,s=(0,e.resolve)(C,[t]);this.handleImageLoad=function(e){var t=e.target,n=t.naturalWidth,o=t.naturalHeight;s.runActions(n,o)},this.handleVideoLoad=function(e){var t=e.target,o=t.videoWidth,i=t.videoHeight;n=!0,s.runActions(o,i)},this.handleNotMetaDatedVideoLoad=function(){n||o.handleYoutubeLoad()},this.handleYoutubeLoad=function(){var e=1920,t=1080;r.maxYoutubeDimensions&&(e=r.maxYoutubeDimensions.width,t=r.maxYoutubeDimensions.height),s.runActions(e,t)},this.handleCustomLoad=function(){var e=i[t],n=e.offsetWidth,r=e.offsetHeight;n&&r?s.runActions(n,r):setTimeout(o.handleCustomLoad)}}function F(e,t,n){var o=e.elements.sources,i=e.props.customClasses,r=i[t]?i[t]:\"\";o[t].className=n+\" \"+r}function I(e,t){var n=e.elements.sources,o=e.props.customAttributes;for(var i in o[t])n[t].setAttribute(i,o[t][i])}function T(e,t){var n=e.collections.sourceLoadHandlers,o=e.elements,i=o.sources,r=o.sourceAnimationWrappers,s=e.props.sources;i[t]=document.createElement(\"img\"),F(e,t,y),i[t].src=s[t],i[t].onload=n[t].handleImageLoad,I(e,t),r[t].appendChild(i[t])}function N(e,t){var n=e.collections.sourceLoadHandlers,o=e.elements,i=o.sources,r=o.sourceAnimationWrappers,s=e.props,a=s.sources,c=s.videosPosters;i[t]=document.createElement(\"video\"),F(e,t,y),i[t].src=a[t],i[t].onloadedmetadata=function(e){n[t].handleVideoLoad(e)},i[t].controls=!0,I(e,t),c[t]&&(i[t].poster=c[t]);var l=document.createElement(\"source\");l.src=a[t],i[t].appendChild(l),setTimeout(n[t].handleNotMetaDatedVideoLoad,3e3),r[t].appendChild(i[t])}function z(e,t){var n=e.collections.sourceLoadHandlers,o=e.elements,r=o.sources,s=o.sourceAnimationWrappers,a=e.props.sources;r[t]=document.createElement(\"iframe\"),F(e,t,\"\".concat(y,\" \").concat(i,\"youtube-iframe\"));var c=a[t],l=c.split(\"?\")[1];r[t].src=\"https://www.youtube.com/embed/\".concat(c.match(/^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|\\&v=)([^#\\&\\?]*).*/)[2],\"?\").concat(l||\"\"),r[t].allowFullscreen=!0,I(e,t),s[t].appendChild(r[t]),n[t].handleYoutubeLoad()}function P(e,t){var n=e.collections.sourceLoadHandlers,o=e.elements,i=o.sources,r=o.sourceAnimationWrappers,s=e.props.sources;i[t]=s[t],F(e,t,\"\".concat(i[t].className,\" \").concat(y)),r[t].appendChild(i[t]),n[t].handleCustomLoad()}function k(e,t){var n=e.elements,o=n.sources,r=n.sourceAnimationWrappers;e.props.sources;o[t]=document.createElement(\"div\"),o[t].className=\"\".concat(i,\"invalid-file-wrapper \").concat(c),o[t].innerHTML=\"Invalid source\",r[t].classList.add(g),r[t].removeChild(r[t].firstChild),r[t].appendChild(o[t])}function H(e){var t=e.collections,n=t.sourceLoadHandlers,o=t.sourcesRenderFunctions,i=e.core.sourceDisplayFacade,r=e.resolve;this.runActionsForSourceTypeAndIndex=function(t,s){var a;switch(\"invalid\"!==t&&(n[s]=r(E,[s])),t){case\"image\":a=T;break;case\"video\":a=N;break;case\"youtube\":a=z;break;case\"custom\":a=P;break;default:a=k}o[s]=function(){return a(e,s)},i.displaySourcesWhichShouldBeDisplayed()}}function W(){var e,t,n,o={isUrlYoutubeOne:function(e){var t=document.createElement(\"a\");return t.href=e,\"www.youtube.com\"===t.hostname||\"youtu.be\"===t.hostname},getTypeFromResponseContentType:function(e){return e.slice(0,e.indexOf(\"/\"))}};function i(){if(4!==n.readyState){if(2===n.readyState){var e;switch(o.getTypeFromResponseContentType(n.getResponseHeader(\"content-type\"))){case\"image\":e=\"image\";break;case\"video\":e=\"video\";break;default:e=\"invalid\"}n.onreadystatechange=null,n.abort(),t(e)}}else t(\"invalid\")}this.setUrlToCheck=function(t){e=t},this.getSourceType=function(r){if(o.isUrlYoutubeOne(e))return r(\"youtube\");t=r,(n=new XMLHttpRequest).onreadystatechange=i,n.open(\"GET\",e,!0),n.send()}}function R(e,t,n){var o=e.props,i=o.types,r=o.type,s=o.sources,a=e.resolve;this.getTypeSetByClientForIndex=function(e){var t;return i&&i[e]?t=i[e]:r&&(t=r),t},this.retrieveTypeWithXhrForIndex=function(e){var o=a(W);o.setUrlToCheck(s[e]),o.getSourceType((function(o){t.handleReceivedSourceTypeForUrl(o,s[e]),n.runActionsForSourceTypeAndIndex(o,e)}))}}function D(e,t){var n=e.core.stageManager,o=e.elements,i=o.smw,r=o.sourceWrappersContainer,s=e.props,l=0,f=document.createElement(\"div\");function p(e){f.style.transform=\"translateX(\".concat(e+l,\"px)\"),l=0}function h(){return(1+s.slideDistance)*innerWidth}f.className=\"\".concat(d,\" \").concat(a,\" \").concat(c),f.s=function(){f.style.display=\"flex\"},f.h=function(){f.style.display=\"none\"},f.a=function(){f.classList.add(u)},f.d=function(){f.classList.remove(u)},f.n=function(){f.style.removeProperty(\"transform\")},f.v=function(e){return l=e,f},f.ne=function(){p(-h())},f.z=function(){p(0)},f.p=function(){p(h())},n.i(t)||f.h(),i[t]=f,r.appendChild(f),function(e,t){var n=e.elements,o=n.smw,i=n.sourceAnimationWrappers,r=document.createElement(\"div\"),s=document.createElement(\"div\");s.className=\"fslightboxl\";for(var a=0;a<3;a++){var c=document.createElement(\"div\");s.appendChild(c)}r.appendChild(s),o[t].appendChild(r),i[t]=r}(e,t)}function O(e,t,n,o){var r=document.createElementNS(\"http://www.w3.org/2000/svg\",\"svg\");r.setAttributeNS(null,\"width\",t),r.setAttributeNS(null,\"height\",t),r.setAttributeNS(null,\"viewBox\",n);var s=document.createElementNS(\"http://www.w3.org/2000/svg\",\"path\");return s.setAttributeNS(null,\"class\",\"\".concat(i,\"svg-path\")),s.setAttributeNS(null,\"d\",o),r.appendChild(s),e.appendChild(r),r}function M(e,t){var n=document.createElement(\"div\");return n.className=\"\".concat(i,\"toolbar-button \").concat(c),n.title=t,e.appendChild(n),n}function j(e,t){var n=document.createElement(\"div\");n.className=\"\".concat(i,\"toolbar\"),t.appendChild(n),function(e,t){var n=e.componentsServices,o=e.data,i=e.fs,r=\"M4.5 11H3v4h4v-1.5H4.5V11zM3 7h1.5V4.5H7V3H3v4zm10.5 6.5H11V15h4v-4h-1.5v2.5zM11 3v1.5h2.5V7H15V3h-4z\",s=M(t);s.title=\"Enter fullscreen\";var a=O(s,\"20px\",\"0 0 18 18\",r);n.ofs=function(){o.ifs=!0,s.title=\"Exit fullscreen\",a.setAttributeNS(null,\"width\",\"24px\"),a.setAttributeNS(null,\"height\",\"24px\"),a.setAttributeNS(null,\"viewBox\",\"0 0 950 1024\"),a.firstChild.setAttributeNS(null,\"d\",\"M682 342h128v84h-212v-212h84v128zM598 810v-212h212v84h-128v128h-84zM342 342v-128h84v212h-212v-84h128zM214 682v-84h212v212h-84v-128h-128z\")},n.xfs=function(){o.ifs=!1,s.title=\"Enter fullscreen\",a.setAttributeNS(null,\"width\",\"20px\"),a.setAttributeNS(null,\"height\",\"20px\"),a.setAttributeNS(null,\"viewBox\",\"0 0 18 18\"),a.firstChild.setAttributeNS(null,\"d\",r)},s.onclick=i.t}(e,n),function(e,t){var n=M(t,\"Close\");n.onclick=e.core.lightboxCloser.closeLightbox,O(n,\"20px\",\"0 0 24 24\",\"M 4.7070312 3.2929688 L 3.2929688 4.7070312 L 10.585938 12 L 3.2929688 19.292969 L 4.7070312 20.707031 L 12 13.414062 L 19.292969 20.707031 L 20.707031 19.292969 L 13.414062 12 L 20.707031 4.7070312 L 19.292969 3.2929688 L 12 10.585938 L 4.7070312 3.2929688 z\")}(e,n)}function X(e){var t=e.props.sources,n=e.elements.container,o=document.createElement(\"div\");o.className=\"\".concat(i,\"nav\"),n.appendChild(o),j(e,o),t.length>1&&function(e,t){var n=e.componentsServices,o=e.props.sources,r=(e.stageIndexes,document.createElement(\"div\"));r.className=\"\".concat(i,\"slide-number-container\");var s=document.createElement(\"div\");s.className=c;var a=document.createElement(\"span\");n.setSlideNumber=function(e){return a.innerHTML=e};var l=document.createElement(\"span\");l.className=\"\".concat(i,\"slash\");var u=document.createElement(\"div\");u.innerHTML=o.length,r.appendChild(s),s.appendChild(a),s.appendChild(l),s.appendChild(u),t.appendChild(r),setTimeout((function(){s.offsetWidth>55&&(r.style.justifyContent=\"flex-start\")}))}(e,o)}function B(e,t,n,o){var i=e.elements.container,r=n.charAt(0).toUpperCase()+n.slice(1),s=document.createElement(\"div\");s.className=\"\".concat(p,\" \").concat(p,\"-\").concat(n),s.title=\"\".concat(r,\" slide\"),s.onclick=t,function(e,t){var n=document.createElement(\"div\");n.className=\"\".concat(f,\" \").concat(c),O(n,\"20px\",\"0 0 20 20\",t),e.appendChild(n)}(s,o),i.appendChild(s)}function U(e){var t=e.core,n=t.lightboxCloser,o=t.slideChangeFacade,i=e.fs;this.listener=function(e){switch(e.key){case\"Escape\":n.closeLightbox();break;case\"ArrowLeft\":o.changeToPrevious();break;case\"ArrowRight\":o.changeToNext();break;case\"F11\":e.preventDefault(),i.t()}}}function q(e){var t=e.elements,n=e.sourcePointerProps,o=e.stageIndexes;function i(e,o){t.smw[e].v(n.swipedX)[o]()}this.runActionsForEvent=function(e){var r,a,c;t.container.contains(t.slideSwipingHoverer)||t.container.appendChild(t.slideSwipingHoverer),r=t.container,a=s,(c=r.classList).contains(a)||c.add(a),n.swipedX=e.screenX-n.downScreenX;var l=o.previous,u=o.next;i(o.current,\"z\"),void 0!==l&&n.swipedX>0?i(l,\"ne\"):void 0!==u&&n.swipedX<0&&i(u,\"p\")}}function V(e){var t=e.props.sources,n=e.resolve,o=e.sourcePointerProps,i=n(q);1===t.length?this.listener=function(){o.swipedX=1}:this.listener=function(e){o.isPointering&&i.runActionsForEvent(e)}}function _(e){var t=e.core.slideIndexChanger,n=e.elements.smw,o=e.stageIndexes,i=e.sws;function r(e){var t=n[o.current];t.a(),t[e]()}function s(e,t){void 0!==e&&(n[e].s(),n[e][t]())}this.runPositiveSwipedXActions=function(){var e=o.previous;if(void 0===e)r(\"z\");else{r(\"p\");var n=o.next;t.changeTo(e);var a=o.previous;i.d(a),i.b(n),r(\"z\"),s(a,\"ne\")}},this.runNegativeSwipedXActions=function(){var e=o.next;if(void 0===e)r(\"z\");else{r(\"ne\");var n=o.previous;t.changeTo(e);var a=o.next;i.d(a),i.b(n),r(\"z\"),s(a,\"p\")}}}function Y(e,t){e.contains(t)&&e.removeChild(t)}function J(e){var t=e.core.lightboxCloser,n=e.elements,o=e.resolve,i=e.sourcePointerProps,r=o(_);this.runNoSwipeActions=function(){Y(n.container,n.slideSwipingHoverer),i.isSourceDownEventTarget||t.closeLightbox(),i.isPointering=!1},this.runActions=function(){i.swipedX>0?r.runPositiveSwipedXActions():r.runNegativeSwipedXActions(),Y(n.container,n.slideSwipingHoverer),n.container.classList.remove(s),i.isPointering=!1}}function G(e){var t=e.resolve,n=e.sourcePointerProps,o=t(J);this.listener=function(){n.isPointering&&(n.swipedX?o.runActions():o.runNoSwipeActions())}}function $(e){var t=this,n=e.core,o=n.eventsDispatcher,i=n.globalEventsController,r=n.scrollbarRecompensor,s=e.data,a=e.elements,c=e.fs,u=e.props,d=e.sourcePointerProps;this.isLightboxFadingOut=!1,this.runActions=function(){t.isLightboxFadingOut=!0,a.container.classList.add(v),i.removeListeners(),u.exitFullscreenOnClose&&s.ifs&&c.x(),setTimeout((function(){t.isLightboxFadingOut=!1,d.isPointering=!1,a.container.classList.remove(v),document.documentElement.classList.remove(l),r.removeRecompense(),document.body.removeChild(a.container),o.dispatch(\"onClose\")}),270)}}function K(e,t){var n=e.classList;n.contains(t)&&n.remove(t)}function Q(e){var t,n,o;n=(t=e).core.eventsDispatcher,o=t.props,n.dispatch=function(e){o[e]&&o[e]()},function(e){var t=e.componentsServices,n=e.data,o=e.fs,i=[\"fullscreenchange\",\"webkitfullscreenchange\",\"mozfullscreenchange\",\"MSFullscreenChange\"];function r(e){for(var t=0;t<i.length;t++)document[e](i[t],s)}function s(){document.fullscreenElement||document.webkitIsFullScreen||document.mozFullScreen||document.msFullscreenElement?t.ofs():t.xfs()}o.o=function(){t.ofs();var e=document.documentElement;e.requestFullscreen?e.requestFullscreen():e.mozRequestFullScreen?e.mozRequestFullScreen():e.webkitRequestFullscreen?e.webkitRequestFullscreen():e.msRequestFullscreen&&e.msRequestFullscreen()},o.x=function(){t.xfs(),document.exitFullscreen?document.exitFullscreen():document.mozCancelFullScreen?document.mozCancelFullScreen():document.webkitExitFullscreen?document.webkitExitFullscreen():document.msExitFullscreen&&document.msExitFullscreen()},o.t=function(){n.ifs?o.x():o.o()},o.l=function(){r(\"addEventListener\")},o.q=function(){r(\"removeEventListener\")}}(e),function(e){var t=e.core,n=t.globalEventsController,o=t.windowResizeActioner,i=e.fs,r=e.resolve,s=r(U),a=r(V),c=r(G);n.attachListeners=function(){document.addEventListener(\"pointermove\",a.listener),document.addEventListener(\"pointerup\",c.listener),addEventListener(\"resize\",o.runActions),document.addEventListener(\"keydown\",s.listener),i.l()},n.removeListeners=function(){document.removeEventListener(\"pointermove\",a.listener),document.removeEventListener(\"pointerup\",c.listener),removeEventListener(\"resize\",o.runActions),document.removeEventListener(\"keydown\",s.listener),i.q()}}(e),function(e){var t=e.core.lightboxCloser,n=(0,e.resolve)($);t.closeLightbox=function(){n.isLightboxFadingOut||n.runActions()}}(e),function(e){var t=e.data,n=e.core.scrollbarRecompensor;function o(){document.body.offsetHeight>innerHeight&&(document.body.style.marginRight=t.scrollbarWidth+\"px\")}n.addRecompense=function(){\"complete\"===document.readyState?o():addEventListener(\"load\",(function(){o(),n.addRecompense=o}))},n.removeRecompense=function(){document.body.style.removeProperty(\"margin-right\")}}(e),function(e){var t=e.core,n=t.slideChangeFacade,o=t.slideIndexChanger,i=t.stageManager;e.props.sources.length>1?(n.changeToPrevious=function(){o.jumpTo(i.getPreviousSlideIndex())},n.changeToNext=function(){o.jumpTo(i.getNextSlideIndex())}):(n.changeToPrevious=function(){},n.changeToNext=function(){})}(e),function(e){var t=e.componentsServices,n=e.core,o=n.slideIndexChanger,i=n.sourceDisplayFacade,r=n.stageManager,s=e.elements,a=s.smw,c=s.sourceAnimationWrappers,l=e.isl,u=e.stageIndexes,d=e.sws;o.changeTo=function(e){u.current=e,r.updateStageIndexes(),t.setSlideNumber(e+1),i.displaySourcesWhichShouldBeDisplayed()},o.jumpTo=function(e){var t=u.previous,n=u.current,i=u.next,s=l[n],f=l[e];o.changeTo(e);for(var p=0;p<a.length;p++)a[p].d();d.d(n),d.c(),requestAnimationFrame((function(){requestAnimationFrame((function(){var e=u.previous,o=u.next;function p(){r.i(n)?n===u.previous?a[n].ne():n===u.next&&a[n].p():(a[n].h(),a[n].n())}s&&c[n].classList.add(m),f&&c[u.current].classList.add(h),d.a(),void 0!==e&&e!==n&&a[e].ne(),a[u.current].n(),void 0!==o&&o!==n&&a[o].p(),d.b(t),d.b(i),l[n]?setTimeout(p,260):p()}))}))}}(e),function(e){var t=e.core.sourcesPointerDown,n=e.elements,o=n.smw,i=n.sources,r=e.sourcePointerProps,s=e.stageIndexes;t.listener=function(e){\"VIDEO\"!==e.target.tagName&&e.preventDefault(),r.isPointering=!0,r.downScreenX=e.screenX,r.swipedX=0;var t=i[s.current];t&&t.contains(e.target)?r.isSourceDownEventTarget=!0:r.isSourceDownEventTarget=!1;for(var n=0;n<o.length;n++)o[n].d()}}(e),function(e){var t=e.collections.sourcesRenderFunctions,n=e.core.sourceDisplayFacade,o=e.props,i=e.stageIndexes;function r(e){t[e]&&(t[e](),delete t[e])}n.displaySourcesWhichShouldBeDisplayed=function(){if(o.loadOnlyCurrentSource)r(i.current);else for(var e in i)r(i[e])}}(e),function(e){var t=e.core.stageManager,n=e.elements,o=n.smw,i=n.sourceAnimationWrappers,r=e.isl,s=e.stageIndexes,a=e.sws;a.a=function(){for(var e in s)o[s[e]].s()},a.b=function(e){void 0===e||t.i(e)||(o[e].h(),o[e].n())},a.c=function(){for(var e in s)a.d(s[e])},a.d=function(e){if(r[e]){var t=i[e];K(t,g),K(t,h),K(t,m)}}}(e),function(e){var t=e.collections.sourceSizers,n=e.core.windowResizeActioner,o=e.data,i=e.elements.smw,r=e.stageIndexes;n.runActions=function(){innerWidth<992?o.maxSourceWidth=innerWidth:o.maxSourceWidth=.9*innerWidth,o.maxSourceHeight=.9*innerHeight;for(var e=0;e<i.length;e++)i[e].d(),t[e]&&t[e].adjustSize();var n=r.previous,s=r.next;void 0!==n&&i[n].ne(),void 0!==s&&i[s].p()}}(e)}function Z(e){var t=e.componentsServices,n=e.core,o=n.eventsDispatcher,r=n.globalEventsController,s=n.scrollbarRecompensor,c=n.sourceDisplayFacade,u=n.stageManager,f=n.windowResizeActioner,p=e.data,h=e.elements,m=(e.props,e.stageIndexes),v=e.sws;function b(){var t,n;p.i=!0,p.scrollbarWidth=function(){var e=document.createElement(\"div\"),t=e.style,n=document.createElement(\"div\");t.visibility=\"hidden\",t.width=\"100px\",t.msOverflowStyle=\"scrollbar\",t.overflow=\"scroll\",n.style.width=\"100%\",document.body.appendChild(e);var o=e.offsetWidth;e.appendChild(n);var i=n.offsetWidth;return document.body.removeChild(e),o-i}(),Q(e),h.container=document.createElement(\"div\"),h.container.className=\"\".concat(i,\"container \").concat(a,\" \").concat(g),function(e){var t=e.elements;t.slideSwipingHoverer=document.createElement(\"div\"),t.slideSwipingHoverer.className=\"\".concat(i,\"slide-swiping-hoverer \").concat(a,\" \").concat(d)}(e),X(e),function(e){var t=e.core.sourcesPointerDown,n=e.elements,o=e.props.sources,i=document.createElement(\"div\");i.className=\"\".concat(d,\" \").concat(a),n.container.appendChild(i),i.addEventListener(\"pointerdown\",t.listener),n.sourceWrappersContainer=i;for(var r=0;r<o.length;r++)D(e,r)}(e),e.props.sources.length>1&&(n=(t=e).core.slideChangeFacade,B(t,n.changeToPrevious,\"previous\",\"M18.271,9.212H3.615l4.184-4.184c0.306-0.306,0.306-0.801,0-1.107c-0.306-0.306-0.801-0.306-1.107,0L1.21,9.403C1.194,9.417,1.174,9.421,1.158,9.437c-0.181,0.181-0.242,0.425-0.209,0.66c0.005,0.038,0.012,0.071,0.022,0.109c0.028,0.098,0.075,0.188,0.142,0.271c0.021,0.026,0.021,0.061,0.045,0.085c0.015,0.016,0.034,0.02,0.05,0.033l5.484,5.483c0.306,0.307,0.801,0.307,1.107,0c0.306-0.305,0.306-0.801,0-1.105l-4.184-4.185h14.656c0.436,0,0.788-0.353,0.788-0.788S18.707,9.212,18.271,9.212z\"),B(t,n.changeToNext,\"next\",\"M1.729,9.212h14.656l-4.184-4.184c-0.307-0.306-0.307-0.801,0-1.107c0.305-0.306,0.801-0.306,1.106,0l5.481,5.482c0.018,0.014,0.037,0.019,0.053,0.034c0.181,0.181,0.242,0.425,0.209,0.66c-0.004,0.038-0.012,0.071-0.021,0.109c-0.028,0.098-0.075,0.188-0.143,0.271c-0.021,0.026-0.021,0.061-0.045,0.085c-0.015,0.016-0.034,0.02-0.051,0.033l-5.483,5.483c-0.306,0.307-0.802,0.307-1.106,0c-0.307-0.305-0.307-0.801,0-1.105l4.184-4.185H1.729c-0.436,0-0.788-0.353-0.788-0.788S1.293,9.212,1.729,9.212z\")),function(e){for(var t=e.props.sources,n=e.resolve,o=n(L),i=n(H),r=n(R,[o,i]),s=0;s<t.length;s++)if(\"string\"==typeof t[s]){var a=r.getTypeSetByClientForIndex(s);if(a)i.runActionsForSourceTypeAndIndex(a,s);else{var c=o.getSourceTypeFromLocalStorageByUrl(t[s]);c?i.runActionsForSourceTypeAndIndex(c,s):r.retrieveTypeWithXhrForIndex(s)}}else i.runActionsForSourceTypeAndIndex(\"custom\",s)}(e),o.dispatch(\"onInit\")}e.open=function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,i=m.previous,a=m.current,d=m.next;m.current=n,p.i||S(e),u.updateStageIndexes(),p.i?(v.c(),v.a(),v.b(i),v.b(a),v.b(d),o.dispatch(\"onShow\")):b(),c.displaySourcesWhichShouldBeDisplayed(),t.setSlideNumber(n+1),document.body.appendChild(h.container),document.documentElement.classList.add(l),s.addRecompense(),r.attachListeners(),f.runActions(),h.smw[m.current].n(),o.dispatch(\"onOpen\")}}function ee(e,t,n){return(ee=te()?Reflect.construct.bind():function(e,t,n){var o=[null];o.push.apply(o,t);var i=new(Function.bind.apply(e,o));return n&&ne(i,n.prototype),i}).apply(null,arguments)}function te(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}function ne(e,t){return(ne=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function oe(e){return function(e){if(Array.isArray(e))return ie(e)}(e)||function(e){if(\"undefined\"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e[\"@@iterator\"])return Array.from(e)}(e)||function(e,t){if(!e)return;if(\"string\"==typeof e)return ie(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);\"Object\"===n&&e.constructor&&(n=e.constructor.name);if(\"Map\"===n||\"Set\"===n)return Array.from(e);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return ie(e,t)}(e)||function(){throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function ie(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,o=new Array(t);n<t;n++)o[n]=e[n];return o}function re(){for(var e=document.getElementsByTagName(\"a\"),t=function(t){if(!e[t].hasAttribute(\"data-fslightbox\"))return\"continue\";var n=e[t].hasAttribute(\"data-href\")?e[t].getAttribute(\"data-href\"):e[t].getAttribute(\"href\");if(!n)return console.warn('The \"data-fslightbox\" attribute was set without the \"href\" attribute.'),\"continue\";var o=e[t].getAttribute(\"data-fslightbox\");fsLightboxInstances[o]||(fsLightboxInstances[o]=new FsLightbox);var i=null;\"#\"===n.charAt(0)?(i=document.getElementById(n.substring(1)).cloneNode(!0)).removeAttribute(\"id\"):i=n,fsLightboxInstances[o].props.sources.push(i),fsLightboxInstances[o].elements.a.push(e[t]);var r=fsLightboxInstances[o].props.sources.length-1;e[t].onclick=function(e){e.preventDefault(),fsLightboxInstances[o].open(r)},d(\"types\",\"data-type\"),d(\"videosPosters\",\"data-video-poster\"),d(\"customClasses\",\"data-class\"),d(\"customClasses\",\"data-custom-class\");for(var s=[\"href\",\"data-fslightbox\",\"data-href\",\"data-type\",\"data-video-poster\",\"data-class\",\"data-custom-class\"],a=e[t].attributes,c=fsLightboxInstances[o].props.customAttributes,l=0;l<a.length;l++)if(-1===s.indexOf(a[l].name)&&\"data-\"===a[l].name.substr(0,5)){c[r]||(c[r]={});var u=a[l].name.substr(5);c[r][u]=a[l].value}function d(n,i){e[t].hasAttribute(i)&&(fsLightboxInstances[o].props[n][r]=e[t].getAttribute(i))}},n=0;n<e.length;n++)t(n);var o=Object.keys(fsLightboxInstances);window.fsLightbox=fsLightboxInstances[o[o.length-1]]}window.FsLightbox=function(){var e=this;this.props={sources:[],customAttributes:[],customClasses:[],types:[],videosPosters:[],slideDistance:.3},this.data={isFullscreenOpen:!1,maxSourceWidth:0,maxSourceHeight:0,scrollbarWidth:0},this.isl=[],this.sourcePointerProps={downScreenX:null,isPointering:!1,isSourceDownEventTarget:!1,swipedX:0},this.stageIndexes={},this.elements={a:[],container:null,slideSwipingHoverer:null,smw:[],sourceWrappersContainer:null,sources:[],sourceAnimationWrappers:[]},this.componentsServices={setSlideNumber:function(){}},this.resolve=function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return n.unshift(e),ee(t,oe(n))},this.collections={sourceLoadHandlers:[],sourcesRenderFunctions:[],sourceSizers:[]},this.core={eventsDispatcher:{},globalEventsController:{},lightboxCloser:{},lightboxUpdater:{},scrollbarRecompensor:{},slideChangeFacade:{},slideIndexChanger:{},sourcesPointerDown:{},sourceDisplayFacade:{},stageManager:{},windowResizeActioner:{}},this.fs={},this.sws={},Z(this),this.close=function(){return e.core.lightboxCloser.closeLightbox()}},window.fsLightboxInstances={},re(),window.refreshFsLightbox=function(){for(var e in fsLightboxInstances){var t=fsLightboxInstances[e].props;fsLightboxInstances[e]=new FsLightbox,fsLightboxInstances[e].props=t,fsLightboxInstances[e].props.sources=[],fsLightboxInstances[e].elements.a=[]}re()}}])}));", "import { FilePondRails, FilePond } from './filepond-rails'\nimport \"fslightbox\"\nwindow.FilePondRails = FilePondRails\nwindow.FilePond = FilePond", "/*\nStimulus 3.2.1\nCopyright \u00A9 2023 Basecamp, LLC\n */\nclass EventListener {\n    constructor(eventTarget, eventName, eventOptions) {\n        this.eventTarget = eventTarget;\n        this.eventName = eventName;\n        this.eventOptions = eventOptions;\n        this.unorderedBindings = new Set();\n    }\n    connect() {\n        this.eventTarget.addEventListener(this.eventName, this, this.eventOptions);\n    }\n    disconnect() {\n        this.eventTarget.removeEventListener(this.eventName, this, this.eventOptions);\n    }\n    bindingConnected(binding) {\n        this.unorderedBindings.add(binding);\n    }\n    bindingDisconnected(binding) {\n        this.unorderedBindings.delete(binding);\n    }\n    handleEvent(event) {\n        const extendedEvent = extendEvent(event);\n        for (const binding of this.bindings) {\n            if (extendedEvent.immediatePropagationStopped) {\n                break;\n            }\n            else {\n                binding.handleEvent(extendedEvent);\n            }\n        }\n    }\n    hasBindings() {\n        return this.unorderedBindings.size > 0;\n    }\n    get bindings() {\n        return Array.from(this.unorderedBindings).sort((left, right) => {\n            const leftIndex = left.index, rightIndex = right.index;\n            return leftIndex < rightIndex ? -1 : leftIndex > rightIndex ? 1 : 0;\n        });\n    }\n}\nfunction extendEvent(event) {\n    if (\"immediatePropagationStopped\" in event) {\n        return event;\n    }\n    else {\n        const { stopImmediatePropagation } = event;\n        return Object.assign(event, {\n            immediatePropagationStopped: false,\n            stopImmediatePropagation() {\n                this.immediatePropagationStopped = true;\n                stopImmediatePropagation.call(this);\n            },\n        });\n    }\n}\n\nclass Dispatcher {\n    constructor(application) {\n        this.application = application;\n        this.eventListenerMaps = new Map();\n        this.started = false;\n    }\n    start() {\n        if (!this.started) {\n            this.started = true;\n            this.eventListeners.forEach((eventListener) => eventListener.connect());\n        }\n    }\n    stop() {\n        if (this.started) {\n            this.started = false;\n            this.eventListeners.forEach((eventListener) => eventListener.disconnect());\n        }\n    }\n    get eventListeners() {\n        return Array.from(this.eventListenerMaps.values()).reduce((listeners, map) => listeners.concat(Array.from(map.values())), []);\n    }\n    bindingConnected(binding) {\n        this.fetchEventListenerForBinding(binding).bindingConnected(binding);\n    }\n    bindingDisconnected(binding, clearEventListeners = false) {\n        this.fetchEventListenerForBinding(binding).bindingDisconnected(binding);\n        if (clearEventListeners)\n            this.clearEventListenersForBinding(binding);\n    }\n    handleError(error, message, detail = {}) {\n        this.application.handleError(error, `Error ${message}`, detail);\n    }\n    clearEventListenersForBinding(binding) {\n        const eventListener = this.fetchEventListenerForBinding(binding);\n        if (!eventListener.hasBindings()) {\n            eventListener.disconnect();\n            this.removeMappedEventListenerFor(binding);\n        }\n    }\n    removeMappedEventListenerFor(binding) {\n        const { eventTarget, eventName, eventOptions } = binding;\n        const eventListenerMap = this.fetchEventListenerMapForEventTarget(eventTarget);\n        const cacheKey = this.cacheKey(eventName, eventOptions);\n        eventListenerMap.delete(cacheKey);\n        if (eventListenerMap.size == 0)\n            this.eventListenerMaps.delete(eventTarget);\n    }\n    fetchEventListenerForBinding(binding) {\n        const { eventTarget, eventName, eventOptions } = binding;\n        return this.fetchEventListener(eventTarget, eventName, eventOptions);\n    }\n    fetchEventListener(eventTarget, eventName, eventOptions) {\n        const eventListenerMap = this.fetchEventListenerMapForEventTarget(eventTarget);\n        const cacheKey = this.cacheKey(eventName, eventOptions);\n        let eventListener = eventListenerMap.get(cacheKey);\n        if (!eventListener) {\n            eventListener = this.createEventListener(eventTarget, eventName, eventOptions);\n            eventListenerMap.set(cacheKey, eventListener);\n        }\n        return eventListener;\n    }\n    createEventListener(eventTarget, eventName, eventOptions) {\n        const eventListener = new EventListener(eventTarget, eventName, eventOptions);\n        if (this.started) {\n            eventListener.connect();\n        }\n        return eventListener;\n    }\n    fetchEventListenerMapForEventTarget(eventTarget) {\n        let eventListenerMap = this.eventListenerMaps.get(eventTarget);\n        if (!eventListenerMap) {\n            eventListenerMap = new Map();\n            this.eventListenerMaps.set(eventTarget, eventListenerMap);\n        }\n        return eventListenerMap;\n    }\n    cacheKey(eventName, eventOptions) {\n        const parts = [eventName];\n        Object.keys(eventOptions)\n            .sort()\n            .forEach((key) => {\n            parts.push(`${eventOptions[key] ? \"\" : \"!\"}${key}`);\n        });\n        return parts.join(\":\");\n    }\n}\n\nconst defaultActionDescriptorFilters = {\n    stop({ event, value }) {\n        if (value)\n            event.stopPropagation();\n        return true;\n    },\n    prevent({ event, value }) {\n        if (value)\n            event.preventDefault();\n        return true;\n    },\n    self({ event, value, element }) {\n        if (value) {\n            return element === event.target;\n        }\n        else {\n            return true;\n        }\n    },\n};\nconst descriptorPattern = /^(?:(?:([^.]+?)\\+)?(.+?)(?:\\.(.+?))?(?:@(window|document))?->)?(.+?)(?:#([^:]+?))(?::(.+))?$/;\nfunction parseActionDescriptorString(descriptorString) {\n    const source = descriptorString.trim();\n    const matches = source.match(descriptorPattern) || [];\n    let eventName = matches[2];\n    let keyFilter = matches[3];\n    if (keyFilter && ![\"keydown\", \"keyup\", \"keypress\"].includes(eventName)) {\n        eventName += `.${keyFilter}`;\n        keyFilter = \"\";\n    }\n    return {\n        eventTarget: parseEventTarget(matches[4]),\n        eventName,\n        eventOptions: matches[7] ? parseEventOptions(matches[7]) : {},\n        identifier: matches[5],\n        methodName: matches[6],\n        keyFilter: matches[1] || keyFilter,\n    };\n}\nfunction parseEventTarget(eventTargetName) {\n    if (eventTargetName == \"window\") {\n        return window;\n    }\n    else if (eventTargetName == \"document\") {\n        return document;\n    }\n}\nfunction parseEventOptions(eventOptions) {\n    return eventOptions\n        .split(\":\")\n        .reduce((options, token) => Object.assign(options, { [token.replace(/^!/, \"\")]: !/^!/.test(token) }), {});\n}\nfunction stringifyEventTarget(eventTarget) {\n    if (eventTarget == window) {\n        return \"window\";\n    }\n    else if (eventTarget == document) {\n        return \"document\";\n    }\n}\n\nfunction camelize(value) {\n    return value.replace(/(?:[_-])([a-z0-9])/g, (_, char) => char.toUpperCase());\n}\nfunction namespaceCamelize(value) {\n    return camelize(value.replace(/--/g, \"-\").replace(/__/g, \"_\"));\n}\nfunction capitalize(value) {\n    return value.charAt(0).toUpperCase() + value.slice(1);\n}\nfunction dasherize(value) {\n    return value.replace(/([A-Z])/g, (_, char) => `-${char.toLowerCase()}`);\n}\nfunction tokenize(value) {\n    return value.match(/[^\\s]+/g) || [];\n}\n\nfunction isSomething(object) {\n    return object !== null && object !== undefined;\n}\nfunction hasProperty(object, property) {\n    return Object.prototype.hasOwnProperty.call(object, property);\n}\n\nconst allModifiers = [\"meta\", \"ctrl\", \"alt\", \"shift\"];\nclass Action {\n    constructor(element, index, descriptor, schema) {\n        this.element = element;\n        this.index = index;\n        this.eventTarget = descriptor.eventTarget || element;\n        this.eventName = descriptor.eventName || getDefaultEventNameForElement(element) || error(\"missing event name\");\n        this.eventOptions = descriptor.eventOptions || {};\n        this.identifier = descriptor.identifier || error(\"missing identifier\");\n        this.methodName = descriptor.methodName || error(\"missing method name\");\n        this.keyFilter = descriptor.keyFilter || \"\";\n        this.schema = schema;\n    }\n    static forToken(token, schema) {\n        return new this(token.element, token.index, parseActionDescriptorString(token.content), schema);\n    }\n    toString() {\n        const eventFilter = this.keyFilter ? `.${this.keyFilter}` : \"\";\n        const eventTarget = this.eventTargetName ? `@${this.eventTargetName}` : \"\";\n        return `${this.eventName}${eventFilter}${eventTarget}->${this.identifier}#${this.methodName}`;\n    }\n    shouldIgnoreKeyboardEvent(event) {\n        if (!this.keyFilter) {\n            return false;\n        }\n        const filters = this.keyFilter.split(\"+\");\n        if (this.keyFilterDissatisfied(event, filters)) {\n            return true;\n        }\n        const standardFilter = filters.filter((key) => !allModifiers.includes(key))[0];\n        if (!standardFilter) {\n            return false;\n        }\n        if (!hasProperty(this.keyMappings, standardFilter)) {\n            error(`contains unknown key filter: ${this.keyFilter}`);\n        }\n        return this.keyMappings[standardFilter].toLowerCase() !== event.key.toLowerCase();\n    }\n    shouldIgnoreMouseEvent(event) {\n        if (!this.keyFilter) {\n            return false;\n        }\n        const filters = [this.keyFilter];\n        if (this.keyFilterDissatisfied(event, filters)) {\n            return true;\n        }\n        return false;\n    }\n    get params() {\n        const params = {};\n        const pattern = new RegExp(`^data-${this.identifier}-(.+)-param$`, \"i\");\n        for (const { name, value } of Array.from(this.element.attributes)) {\n            const match = name.match(pattern);\n            const key = match && match[1];\n            if (key) {\n                params[camelize(key)] = typecast(value);\n            }\n        }\n        return params;\n    }\n    get eventTargetName() {\n        return stringifyEventTarget(this.eventTarget);\n    }\n    get keyMappings() {\n        return this.schema.keyMappings;\n    }\n    keyFilterDissatisfied(event, filters) {\n        const [meta, ctrl, alt, shift] = allModifiers.map((modifier) => filters.includes(modifier));\n        return event.metaKey !== meta || event.ctrlKey !== ctrl || event.altKey !== alt || event.shiftKey !== shift;\n    }\n}\nconst defaultEventNames = {\n    a: () => \"click\",\n    button: () => \"click\",\n    form: () => \"submit\",\n    details: () => \"toggle\",\n    input: (e) => (e.getAttribute(\"type\") == \"submit\" ? \"click\" : \"input\"),\n    select: () => \"change\",\n    textarea: () => \"input\",\n};\nfunction getDefaultEventNameForElement(element) {\n    const tagName = element.tagName.toLowerCase();\n    if (tagName in defaultEventNames) {\n        return defaultEventNames[tagName](element);\n    }\n}\nfunction error(message) {\n    throw new Error(message);\n}\nfunction typecast(value) {\n    try {\n        return JSON.parse(value);\n    }\n    catch (o_O) {\n        return value;\n    }\n}\n\nclass Binding {\n    constructor(context, action) {\n        this.context = context;\n        this.action = action;\n    }\n    get index() {\n        return this.action.index;\n    }\n    get eventTarget() {\n        return this.action.eventTarget;\n    }\n    get eventOptions() {\n        return this.action.eventOptions;\n    }\n    get identifier() {\n        return this.context.identifier;\n    }\n    handleEvent(event) {\n        const actionEvent = this.prepareActionEvent(event);\n        if (this.willBeInvokedByEvent(event) && this.applyEventModifiers(actionEvent)) {\n            this.invokeWithEvent(actionEvent);\n        }\n    }\n    get eventName() {\n        return this.action.eventName;\n    }\n    get method() {\n        const method = this.controller[this.methodName];\n        if (typeof method == \"function\") {\n            return method;\n        }\n        throw new Error(`Action \"${this.action}\" references undefined method \"${this.methodName}\"`);\n    }\n    applyEventModifiers(event) {\n        const { element } = this.action;\n        const { actionDescriptorFilters } = this.context.application;\n        const { controller } = this.context;\n        let passes = true;\n        for (const [name, value] of Object.entries(this.eventOptions)) {\n            if (name in actionDescriptorFilters) {\n                const filter = actionDescriptorFilters[name];\n                passes = passes && filter({ name, value, event, element, controller });\n            }\n            else {\n                continue;\n            }\n        }\n        return passes;\n    }\n    prepareActionEvent(event) {\n        return Object.assign(event, { params: this.action.params });\n    }\n    invokeWithEvent(event) {\n        const { target, currentTarget } = event;\n        try {\n            this.method.call(this.controller, event);\n            this.context.logDebugActivity(this.methodName, { event, target, currentTarget, action: this.methodName });\n        }\n        catch (error) {\n            const { identifier, controller, element, index } = this;\n            const detail = { identifier, controller, element, index, event };\n            this.context.handleError(error, `invoking action \"${this.action}\"`, detail);\n        }\n    }\n    willBeInvokedByEvent(event) {\n        const eventTarget = event.target;\n        if (event instanceof KeyboardEvent && this.action.shouldIgnoreKeyboardEvent(event)) {\n            return false;\n        }\n        if (event instanceof MouseEvent && this.action.shouldIgnoreMouseEvent(event)) {\n            return false;\n        }\n        if (this.element === eventTarget) {\n            return true;\n        }\n        else if (eventTarget instanceof Element && this.element.contains(eventTarget)) {\n            return this.scope.containsElement(eventTarget);\n        }\n        else {\n            return this.scope.containsElement(this.action.element);\n        }\n    }\n    get controller() {\n        return this.context.controller;\n    }\n    get methodName() {\n        return this.action.methodName;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get scope() {\n        return this.context.scope;\n    }\n}\n\nclass ElementObserver {\n    constructor(element, delegate) {\n        this.mutationObserverInit = { attributes: true, childList: true, subtree: true };\n        this.element = element;\n        this.started = false;\n        this.delegate = delegate;\n        this.elements = new Set();\n        this.mutationObserver = new MutationObserver((mutations) => this.processMutations(mutations));\n    }\n    start() {\n        if (!this.started) {\n            this.started = true;\n            this.mutationObserver.observe(this.element, this.mutationObserverInit);\n            this.refresh();\n        }\n    }\n    pause(callback) {\n        if (this.started) {\n            this.mutationObserver.disconnect();\n            this.started = false;\n        }\n        callback();\n        if (!this.started) {\n            this.mutationObserver.observe(this.element, this.mutationObserverInit);\n            this.started = true;\n        }\n    }\n    stop() {\n        if (this.started) {\n            this.mutationObserver.takeRecords();\n            this.mutationObserver.disconnect();\n            this.started = false;\n        }\n    }\n    refresh() {\n        if (this.started) {\n            const matches = new Set(this.matchElementsInTree());\n            for (const element of Array.from(this.elements)) {\n                if (!matches.has(element)) {\n                    this.removeElement(element);\n                }\n            }\n            for (const element of Array.from(matches)) {\n                this.addElement(element);\n            }\n        }\n    }\n    processMutations(mutations) {\n        if (this.started) {\n            for (const mutation of mutations) {\n                this.processMutation(mutation);\n            }\n        }\n    }\n    processMutation(mutation) {\n        if (mutation.type == \"attributes\") {\n            this.processAttributeChange(mutation.target, mutation.attributeName);\n        }\n        else if (mutation.type == \"childList\") {\n            this.processRemovedNodes(mutation.removedNodes);\n            this.processAddedNodes(mutation.addedNodes);\n        }\n    }\n    processAttributeChange(element, attributeName) {\n        if (this.elements.has(element)) {\n            if (this.delegate.elementAttributeChanged && this.matchElement(element)) {\n                this.delegate.elementAttributeChanged(element, attributeName);\n            }\n            else {\n                this.removeElement(element);\n            }\n        }\n        else if (this.matchElement(element)) {\n            this.addElement(element);\n        }\n    }\n    processRemovedNodes(nodes) {\n        for (const node of Array.from(nodes)) {\n            const element = this.elementFromNode(node);\n            if (element) {\n                this.processTree(element, this.removeElement);\n            }\n        }\n    }\n    processAddedNodes(nodes) {\n        for (const node of Array.from(nodes)) {\n            const element = this.elementFromNode(node);\n            if (element && this.elementIsActive(element)) {\n                this.processTree(element, this.addElement);\n            }\n        }\n    }\n    matchElement(element) {\n        return this.delegate.matchElement(element);\n    }\n    matchElementsInTree(tree = this.element) {\n        return this.delegate.matchElementsInTree(tree);\n    }\n    processTree(tree, processor) {\n        for (const element of this.matchElementsInTree(tree)) {\n            processor.call(this, element);\n        }\n    }\n    elementFromNode(node) {\n        if (node.nodeType == Node.ELEMENT_NODE) {\n            return node;\n        }\n    }\n    elementIsActive(element) {\n        if (element.isConnected != this.element.isConnected) {\n            return false;\n        }\n        else {\n            return this.element.contains(element);\n        }\n    }\n    addElement(element) {\n        if (!this.elements.has(element)) {\n            if (this.elementIsActive(element)) {\n                this.elements.add(element);\n                if (this.delegate.elementMatched) {\n                    this.delegate.elementMatched(element);\n                }\n            }\n        }\n    }\n    removeElement(element) {\n        if (this.elements.has(element)) {\n            this.elements.delete(element);\n            if (this.delegate.elementUnmatched) {\n                this.delegate.elementUnmatched(element);\n            }\n        }\n    }\n}\n\nclass AttributeObserver {\n    constructor(element, attributeName, delegate) {\n        this.attributeName = attributeName;\n        this.delegate = delegate;\n        this.elementObserver = new ElementObserver(element, this);\n    }\n    get element() {\n        return this.elementObserver.element;\n    }\n    get selector() {\n        return `[${this.attributeName}]`;\n    }\n    start() {\n        this.elementObserver.start();\n    }\n    pause(callback) {\n        this.elementObserver.pause(callback);\n    }\n    stop() {\n        this.elementObserver.stop();\n    }\n    refresh() {\n        this.elementObserver.refresh();\n    }\n    get started() {\n        return this.elementObserver.started;\n    }\n    matchElement(element) {\n        return element.hasAttribute(this.attributeName);\n    }\n    matchElementsInTree(tree) {\n        const match = this.matchElement(tree) ? [tree] : [];\n        const matches = Array.from(tree.querySelectorAll(this.selector));\n        return match.concat(matches);\n    }\n    elementMatched(element) {\n        if (this.delegate.elementMatchedAttribute) {\n            this.delegate.elementMatchedAttribute(element, this.attributeName);\n        }\n    }\n    elementUnmatched(element) {\n        if (this.delegate.elementUnmatchedAttribute) {\n            this.delegate.elementUnmatchedAttribute(element, this.attributeName);\n        }\n    }\n    elementAttributeChanged(element, attributeName) {\n        if (this.delegate.elementAttributeValueChanged && this.attributeName == attributeName) {\n            this.delegate.elementAttributeValueChanged(element, attributeName);\n        }\n    }\n}\n\nfunction add(map, key, value) {\n    fetch(map, key).add(value);\n}\nfunction del(map, key, value) {\n    fetch(map, key).delete(value);\n    prune(map, key);\n}\nfunction fetch(map, key) {\n    let values = map.get(key);\n    if (!values) {\n        values = new Set();\n        map.set(key, values);\n    }\n    return values;\n}\nfunction prune(map, key) {\n    const values = map.get(key);\n    if (values != null && values.size == 0) {\n        map.delete(key);\n    }\n}\n\nclass Multimap {\n    constructor() {\n        this.valuesByKey = new Map();\n    }\n    get keys() {\n        return Array.from(this.valuesByKey.keys());\n    }\n    get values() {\n        const sets = Array.from(this.valuesByKey.values());\n        return sets.reduce((values, set) => values.concat(Array.from(set)), []);\n    }\n    get size() {\n        const sets = Array.from(this.valuesByKey.values());\n        return sets.reduce((size, set) => size + set.size, 0);\n    }\n    add(key, value) {\n        add(this.valuesByKey, key, value);\n    }\n    delete(key, value) {\n        del(this.valuesByKey, key, value);\n    }\n    has(key, value) {\n        const values = this.valuesByKey.get(key);\n        return values != null && values.has(value);\n    }\n    hasKey(key) {\n        return this.valuesByKey.has(key);\n    }\n    hasValue(value) {\n        const sets = Array.from(this.valuesByKey.values());\n        return sets.some((set) => set.has(value));\n    }\n    getValuesForKey(key) {\n        const values = this.valuesByKey.get(key);\n        return values ? Array.from(values) : [];\n    }\n    getKeysForValue(value) {\n        return Array.from(this.valuesByKey)\n            .filter(([_key, values]) => values.has(value))\n            .map(([key, _values]) => key);\n    }\n}\n\nclass IndexedMultimap extends Multimap {\n    constructor() {\n        super();\n        this.keysByValue = new Map();\n    }\n    get values() {\n        return Array.from(this.keysByValue.keys());\n    }\n    add(key, value) {\n        super.add(key, value);\n        add(this.keysByValue, value, key);\n    }\n    delete(key, value) {\n        super.delete(key, value);\n        del(this.keysByValue, value, key);\n    }\n    hasValue(value) {\n        return this.keysByValue.has(value);\n    }\n    getKeysForValue(value) {\n        const set = this.keysByValue.get(value);\n        return set ? Array.from(set) : [];\n    }\n}\n\nclass SelectorObserver {\n    constructor(element, selector, delegate, details) {\n        this._selector = selector;\n        this.details = details;\n        this.elementObserver = new ElementObserver(element, this);\n        this.delegate = delegate;\n        this.matchesByElement = new Multimap();\n    }\n    get started() {\n        return this.elementObserver.started;\n    }\n    get selector() {\n        return this._selector;\n    }\n    set selector(selector) {\n        this._selector = selector;\n        this.refresh();\n    }\n    start() {\n        this.elementObserver.start();\n    }\n    pause(callback) {\n        this.elementObserver.pause(callback);\n    }\n    stop() {\n        this.elementObserver.stop();\n    }\n    refresh() {\n        this.elementObserver.refresh();\n    }\n    get element() {\n        return this.elementObserver.element;\n    }\n    matchElement(element) {\n        const { selector } = this;\n        if (selector) {\n            const matches = element.matches(selector);\n            if (this.delegate.selectorMatchElement) {\n                return matches && this.delegate.selectorMatchElement(element, this.details);\n            }\n            return matches;\n        }\n        else {\n            return false;\n        }\n    }\n    matchElementsInTree(tree) {\n        const { selector } = this;\n        if (selector) {\n            const match = this.matchElement(tree) ? [tree] : [];\n            const matches = Array.from(tree.querySelectorAll(selector)).filter((match) => this.matchElement(match));\n            return match.concat(matches);\n        }\n        else {\n            return [];\n        }\n    }\n    elementMatched(element) {\n        const { selector } = this;\n        if (selector) {\n            this.selectorMatched(element, selector);\n        }\n    }\n    elementUnmatched(element) {\n        const selectors = this.matchesByElement.getKeysForValue(element);\n        for (const selector of selectors) {\n            this.selectorUnmatched(element, selector);\n        }\n    }\n    elementAttributeChanged(element, _attributeName) {\n        const { selector } = this;\n        if (selector) {\n            const matches = this.matchElement(element);\n            const matchedBefore = this.matchesByElement.has(selector, element);\n            if (matches && !matchedBefore) {\n                this.selectorMatched(element, selector);\n            }\n            else if (!matches && matchedBefore) {\n                this.selectorUnmatched(element, selector);\n            }\n        }\n    }\n    selectorMatched(element, selector) {\n        this.delegate.selectorMatched(element, selector, this.details);\n        this.matchesByElement.add(selector, element);\n    }\n    selectorUnmatched(element, selector) {\n        this.delegate.selectorUnmatched(element, selector, this.details);\n        this.matchesByElement.delete(selector, element);\n    }\n}\n\nclass StringMapObserver {\n    constructor(element, delegate) {\n        this.element = element;\n        this.delegate = delegate;\n        this.started = false;\n        this.stringMap = new Map();\n        this.mutationObserver = new MutationObserver((mutations) => this.processMutations(mutations));\n    }\n    start() {\n        if (!this.started) {\n            this.started = true;\n            this.mutationObserver.observe(this.element, { attributes: true, attributeOldValue: true });\n            this.refresh();\n        }\n    }\n    stop() {\n        if (this.started) {\n            this.mutationObserver.takeRecords();\n            this.mutationObserver.disconnect();\n            this.started = false;\n        }\n    }\n    refresh() {\n        if (this.started) {\n            for (const attributeName of this.knownAttributeNames) {\n                this.refreshAttribute(attributeName, null);\n            }\n        }\n    }\n    processMutations(mutations) {\n        if (this.started) {\n            for (const mutation of mutations) {\n                this.processMutation(mutation);\n            }\n        }\n    }\n    processMutation(mutation) {\n        const attributeName = mutation.attributeName;\n        if (attributeName) {\n            this.refreshAttribute(attributeName, mutation.oldValue);\n        }\n    }\n    refreshAttribute(attributeName, oldValue) {\n        const key = this.delegate.getStringMapKeyForAttribute(attributeName);\n        if (key != null) {\n            if (!this.stringMap.has(attributeName)) {\n                this.stringMapKeyAdded(key, attributeName);\n            }\n            const value = this.element.getAttribute(attributeName);\n            if (this.stringMap.get(attributeName) != value) {\n                this.stringMapValueChanged(value, key, oldValue);\n            }\n            if (value == null) {\n                const oldValue = this.stringMap.get(attributeName);\n                this.stringMap.delete(attributeName);\n                if (oldValue)\n                    this.stringMapKeyRemoved(key, attributeName, oldValue);\n            }\n            else {\n                this.stringMap.set(attributeName, value);\n            }\n        }\n    }\n    stringMapKeyAdded(key, attributeName) {\n        if (this.delegate.stringMapKeyAdded) {\n            this.delegate.stringMapKeyAdded(key, attributeName);\n        }\n    }\n    stringMapValueChanged(value, key, oldValue) {\n        if (this.delegate.stringMapValueChanged) {\n            this.delegate.stringMapValueChanged(value, key, oldValue);\n        }\n    }\n    stringMapKeyRemoved(key, attributeName, oldValue) {\n        if (this.delegate.stringMapKeyRemoved) {\n            this.delegate.stringMapKeyRemoved(key, attributeName, oldValue);\n        }\n    }\n    get knownAttributeNames() {\n        return Array.from(new Set(this.currentAttributeNames.concat(this.recordedAttributeNames)));\n    }\n    get currentAttributeNames() {\n        return Array.from(this.element.attributes).map((attribute) => attribute.name);\n    }\n    get recordedAttributeNames() {\n        return Array.from(this.stringMap.keys());\n    }\n}\n\nclass TokenListObserver {\n    constructor(element, attributeName, delegate) {\n        this.attributeObserver = new AttributeObserver(element, attributeName, this);\n        this.delegate = delegate;\n        this.tokensByElement = new Multimap();\n    }\n    get started() {\n        return this.attributeObserver.started;\n    }\n    start() {\n        this.attributeObserver.start();\n    }\n    pause(callback) {\n        this.attributeObserver.pause(callback);\n    }\n    stop() {\n        this.attributeObserver.stop();\n    }\n    refresh() {\n        this.attributeObserver.refresh();\n    }\n    get element() {\n        return this.attributeObserver.element;\n    }\n    get attributeName() {\n        return this.attributeObserver.attributeName;\n    }\n    elementMatchedAttribute(element) {\n        this.tokensMatched(this.readTokensForElement(element));\n    }\n    elementAttributeValueChanged(element) {\n        const [unmatchedTokens, matchedTokens] = this.refreshTokensForElement(element);\n        this.tokensUnmatched(unmatchedTokens);\n        this.tokensMatched(matchedTokens);\n    }\n    elementUnmatchedAttribute(element) {\n        this.tokensUnmatched(this.tokensByElement.getValuesForKey(element));\n    }\n    tokensMatched(tokens) {\n        tokens.forEach((token) => this.tokenMatched(token));\n    }\n    tokensUnmatched(tokens) {\n        tokens.forEach((token) => this.tokenUnmatched(token));\n    }\n    tokenMatched(token) {\n        this.delegate.tokenMatched(token);\n        this.tokensByElement.add(token.element, token);\n    }\n    tokenUnmatched(token) {\n        this.delegate.tokenUnmatched(token);\n        this.tokensByElement.delete(token.element, token);\n    }\n    refreshTokensForElement(element) {\n        const previousTokens = this.tokensByElement.getValuesForKey(element);\n        const currentTokens = this.readTokensForElement(element);\n        const firstDifferingIndex = zip(previousTokens, currentTokens).findIndex(([previousToken, currentToken]) => !tokensAreEqual(previousToken, currentToken));\n        if (firstDifferingIndex == -1) {\n            return [[], []];\n        }\n        else {\n            return [previousTokens.slice(firstDifferingIndex), currentTokens.slice(firstDifferingIndex)];\n        }\n    }\n    readTokensForElement(element) {\n        const attributeName = this.attributeName;\n        const tokenString = element.getAttribute(attributeName) || \"\";\n        return parseTokenString(tokenString, element, attributeName);\n    }\n}\nfunction parseTokenString(tokenString, element, attributeName) {\n    return tokenString\n        .trim()\n        .split(/\\s+/)\n        .filter((content) => content.length)\n        .map((content, index) => ({ element, attributeName, content, index }));\n}\nfunction zip(left, right) {\n    const length = Math.max(left.length, right.length);\n    return Array.from({ length }, (_, index) => [left[index], right[index]]);\n}\nfunction tokensAreEqual(left, right) {\n    return left && right && left.index == right.index && left.content == right.content;\n}\n\nclass ValueListObserver {\n    constructor(element, attributeName, delegate) {\n        this.tokenListObserver = new TokenListObserver(element, attributeName, this);\n        this.delegate = delegate;\n        this.parseResultsByToken = new WeakMap();\n        this.valuesByTokenByElement = new WeakMap();\n    }\n    get started() {\n        return this.tokenListObserver.started;\n    }\n    start() {\n        this.tokenListObserver.start();\n    }\n    stop() {\n        this.tokenListObserver.stop();\n    }\n    refresh() {\n        this.tokenListObserver.refresh();\n    }\n    get element() {\n        return this.tokenListObserver.element;\n    }\n    get attributeName() {\n        return this.tokenListObserver.attributeName;\n    }\n    tokenMatched(token) {\n        const { element } = token;\n        const { value } = this.fetchParseResultForToken(token);\n        if (value) {\n            this.fetchValuesByTokenForElement(element).set(token, value);\n            this.delegate.elementMatchedValue(element, value);\n        }\n    }\n    tokenUnmatched(token) {\n        const { element } = token;\n        const { value } = this.fetchParseResultForToken(token);\n        if (value) {\n            this.fetchValuesByTokenForElement(element).delete(token);\n            this.delegate.elementUnmatchedValue(element, value);\n        }\n    }\n    fetchParseResultForToken(token) {\n        let parseResult = this.parseResultsByToken.get(token);\n        if (!parseResult) {\n            parseResult = this.parseToken(token);\n            this.parseResultsByToken.set(token, parseResult);\n        }\n        return parseResult;\n    }\n    fetchValuesByTokenForElement(element) {\n        let valuesByToken = this.valuesByTokenByElement.get(element);\n        if (!valuesByToken) {\n            valuesByToken = new Map();\n            this.valuesByTokenByElement.set(element, valuesByToken);\n        }\n        return valuesByToken;\n    }\n    parseToken(token) {\n        try {\n            const value = this.delegate.parseValueForToken(token);\n            return { value };\n        }\n        catch (error) {\n            return { error };\n        }\n    }\n}\n\nclass BindingObserver {\n    constructor(context, delegate) {\n        this.context = context;\n        this.delegate = delegate;\n        this.bindingsByAction = new Map();\n    }\n    start() {\n        if (!this.valueListObserver) {\n            this.valueListObserver = new ValueListObserver(this.element, this.actionAttribute, this);\n            this.valueListObserver.start();\n        }\n    }\n    stop() {\n        if (this.valueListObserver) {\n            this.valueListObserver.stop();\n            delete this.valueListObserver;\n            this.disconnectAllActions();\n        }\n    }\n    get element() {\n        return this.context.element;\n    }\n    get identifier() {\n        return this.context.identifier;\n    }\n    get actionAttribute() {\n        return this.schema.actionAttribute;\n    }\n    get schema() {\n        return this.context.schema;\n    }\n    get bindings() {\n        return Array.from(this.bindingsByAction.values());\n    }\n    connectAction(action) {\n        const binding = new Binding(this.context, action);\n        this.bindingsByAction.set(action, binding);\n        this.delegate.bindingConnected(binding);\n    }\n    disconnectAction(action) {\n        const binding = this.bindingsByAction.get(action);\n        if (binding) {\n            this.bindingsByAction.delete(action);\n            this.delegate.bindingDisconnected(binding);\n        }\n    }\n    disconnectAllActions() {\n        this.bindings.forEach((binding) => this.delegate.bindingDisconnected(binding, true));\n        this.bindingsByAction.clear();\n    }\n    parseValueForToken(token) {\n        const action = Action.forToken(token, this.schema);\n        if (action.identifier == this.identifier) {\n            return action;\n        }\n    }\n    elementMatchedValue(element, action) {\n        this.connectAction(action);\n    }\n    elementUnmatchedValue(element, action) {\n        this.disconnectAction(action);\n    }\n}\n\nclass ValueObserver {\n    constructor(context, receiver) {\n        this.context = context;\n        this.receiver = receiver;\n        this.stringMapObserver = new StringMapObserver(this.element, this);\n        this.valueDescriptorMap = this.controller.valueDescriptorMap;\n    }\n    start() {\n        this.stringMapObserver.start();\n        this.invokeChangedCallbacksForDefaultValues();\n    }\n    stop() {\n        this.stringMapObserver.stop();\n    }\n    get element() {\n        return this.context.element;\n    }\n    get controller() {\n        return this.context.controller;\n    }\n    getStringMapKeyForAttribute(attributeName) {\n        if (attributeName in this.valueDescriptorMap) {\n            return this.valueDescriptorMap[attributeName].name;\n        }\n    }\n    stringMapKeyAdded(key, attributeName) {\n        const descriptor = this.valueDescriptorMap[attributeName];\n        if (!this.hasValue(key)) {\n            this.invokeChangedCallback(key, descriptor.writer(this.receiver[key]), descriptor.writer(descriptor.defaultValue));\n        }\n    }\n    stringMapValueChanged(value, name, oldValue) {\n        const descriptor = this.valueDescriptorNameMap[name];\n        if (value === null)\n            return;\n        if (oldValue === null) {\n            oldValue = descriptor.writer(descriptor.defaultValue);\n        }\n        this.invokeChangedCallback(name, value, oldValue);\n    }\n    stringMapKeyRemoved(key, attributeName, oldValue) {\n        const descriptor = this.valueDescriptorNameMap[key];\n        if (this.hasValue(key)) {\n            this.invokeChangedCallback(key, descriptor.writer(this.receiver[key]), oldValue);\n        }\n        else {\n            this.invokeChangedCallback(key, descriptor.writer(descriptor.defaultValue), oldValue);\n        }\n    }\n    invokeChangedCallbacksForDefaultValues() {\n        for (const { key, name, defaultValue, writer } of this.valueDescriptors) {\n            if (defaultValue != undefined && !this.controller.data.has(key)) {\n                this.invokeChangedCallback(name, writer(defaultValue), undefined);\n            }\n        }\n    }\n    invokeChangedCallback(name, rawValue, rawOldValue) {\n        const changedMethodName = `${name}Changed`;\n        const changedMethod = this.receiver[changedMethodName];\n        if (typeof changedMethod == \"function\") {\n            const descriptor = this.valueDescriptorNameMap[name];\n            try {\n                const value = descriptor.reader(rawValue);\n                let oldValue = rawOldValue;\n                if (rawOldValue) {\n                    oldValue = descriptor.reader(rawOldValue);\n                }\n                changedMethod.call(this.receiver, value, oldValue);\n            }\n            catch (error) {\n                if (error instanceof TypeError) {\n                    error.message = `Stimulus Value \"${this.context.identifier}.${descriptor.name}\" - ${error.message}`;\n                }\n                throw error;\n            }\n        }\n    }\n    get valueDescriptors() {\n        const { valueDescriptorMap } = this;\n        return Object.keys(valueDescriptorMap).map((key) => valueDescriptorMap[key]);\n    }\n    get valueDescriptorNameMap() {\n        const descriptors = {};\n        Object.keys(this.valueDescriptorMap).forEach((key) => {\n            const descriptor = this.valueDescriptorMap[key];\n            descriptors[descriptor.name] = descriptor;\n        });\n        return descriptors;\n    }\n    hasValue(attributeName) {\n        const descriptor = this.valueDescriptorNameMap[attributeName];\n        const hasMethodName = `has${capitalize(descriptor.name)}`;\n        return this.receiver[hasMethodName];\n    }\n}\n\nclass TargetObserver {\n    constructor(context, delegate) {\n        this.context = context;\n        this.delegate = delegate;\n        this.targetsByName = new Multimap();\n    }\n    start() {\n        if (!this.tokenListObserver) {\n            this.tokenListObserver = new TokenListObserver(this.element, this.attributeName, this);\n            this.tokenListObserver.start();\n        }\n    }\n    stop() {\n        if (this.tokenListObserver) {\n            this.disconnectAllTargets();\n            this.tokenListObserver.stop();\n            delete this.tokenListObserver;\n        }\n    }\n    tokenMatched({ element, content: name }) {\n        if (this.scope.containsElement(element)) {\n            this.connectTarget(element, name);\n        }\n    }\n    tokenUnmatched({ element, content: name }) {\n        this.disconnectTarget(element, name);\n    }\n    connectTarget(element, name) {\n        var _a;\n        if (!this.targetsByName.has(name, element)) {\n            this.targetsByName.add(name, element);\n            (_a = this.tokenListObserver) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.targetConnected(element, name));\n        }\n    }\n    disconnectTarget(element, name) {\n        var _a;\n        if (this.targetsByName.has(name, element)) {\n            this.targetsByName.delete(name, element);\n            (_a = this.tokenListObserver) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.targetDisconnected(element, name));\n        }\n    }\n    disconnectAllTargets() {\n        for (const name of this.targetsByName.keys) {\n            for (const element of this.targetsByName.getValuesForKey(name)) {\n                this.disconnectTarget(element, name);\n            }\n        }\n    }\n    get attributeName() {\n        return `data-${this.context.identifier}-target`;\n    }\n    get element() {\n        return this.context.element;\n    }\n    get scope() {\n        return this.context.scope;\n    }\n}\n\nfunction readInheritableStaticArrayValues(constructor, propertyName) {\n    const ancestors = getAncestorsForConstructor(constructor);\n    return Array.from(ancestors.reduce((values, constructor) => {\n        getOwnStaticArrayValues(constructor, propertyName).forEach((name) => values.add(name));\n        return values;\n    }, new Set()));\n}\nfunction readInheritableStaticObjectPairs(constructor, propertyName) {\n    const ancestors = getAncestorsForConstructor(constructor);\n    return ancestors.reduce((pairs, constructor) => {\n        pairs.push(...getOwnStaticObjectPairs(constructor, propertyName));\n        return pairs;\n    }, []);\n}\nfunction getAncestorsForConstructor(constructor) {\n    const ancestors = [];\n    while (constructor) {\n        ancestors.push(constructor);\n        constructor = Object.getPrototypeOf(constructor);\n    }\n    return ancestors.reverse();\n}\nfunction getOwnStaticArrayValues(constructor, propertyName) {\n    const definition = constructor[propertyName];\n    return Array.isArray(definition) ? definition : [];\n}\nfunction getOwnStaticObjectPairs(constructor, propertyName) {\n    const definition = constructor[propertyName];\n    return definition ? Object.keys(definition).map((key) => [key, definition[key]]) : [];\n}\n\nclass OutletObserver {\n    constructor(context, delegate) {\n        this.started = false;\n        this.context = context;\n        this.delegate = delegate;\n        this.outletsByName = new Multimap();\n        this.outletElementsByName = new Multimap();\n        this.selectorObserverMap = new Map();\n        this.attributeObserverMap = new Map();\n    }\n    start() {\n        if (!this.started) {\n            this.outletDefinitions.forEach((outletName) => {\n                this.setupSelectorObserverForOutlet(outletName);\n                this.setupAttributeObserverForOutlet(outletName);\n            });\n            this.started = true;\n            this.dependentContexts.forEach((context) => context.refresh());\n        }\n    }\n    refresh() {\n        this.selectorObserverMap.forEach((observer) => observer.refresh());\n        this.attributeObserverMap.forEach((observer) => observer.refresh());\n    }\n    stop() {\n        if (this.started) {\n            this.started = false;\n            this.disconnectAllOutlets();\n            this.stopSelectorObservers();\n            this.stopAttributeObservers();\n        }\n    }\n    stopSelectorObservers() {\n        if (this.selectorObserverMap.size > 0) {\n            this.selectorObserverMap.forEach((observer) => observer.stop());\n            this.selectorObserverMap.clear();\n        }\n    }\n    stopAttributeObservers() {\n        if (this.attributeObserverMap.size > 0) {\n            this.attributeObserverMap.forEach((observer) => observer.stop());\n            this.attributeObserverMap.clear();\n        }\n    }\n    selectorMatched(element, _selector, { outletName }) {\n        const outlet = this.getOutlet(element, outletName);\n        if (outlet) {\n            this.connectOutlet(outlet, element, outletName);\n        }\n    }\n    selectorUnmatched(element, _selector, { outletName }) {\n        const outlet = this.getOutletFromMap(element, outletName);\n        if (outlet) {\n            this.disconnectOutlet(outlet, element, outletName);\n        }\n    }\n    selectorMatchElement(element, { outletName }) {\n        const selector = this.selector(outletName);\n        const hasOutlet = this.hasOutlet(element, outletName);\n        const hasOutletController = element.matches(`[${this.schema.controllerAttribute}~=${outletName}]`);\n        if (selector) {\n            return hasOutlet && hasOutletController && element.matches(selector);\n        }\n        else {\n            return false;\n        }\n    }\n    elementMatchedAttribute(_element, attributeName) {\n        const outletName = this.getOutletNameFromOutletAttributeName(attributeName);\n        if (outletName) {\n            this.updateSelectorObserverForOutlet(outletName);\n        }\n    }\n    elementAttributeValueChanged(_element, attributeName) {\n        const outletName = this.getOutletNameFromOutletAttributeName(attributeName);\n        if (outletName) {\n            this.updateSelectorObserverForOutlet(outletName);\n        }\n    }\n    elementUnmatchedAttribute(_element, attributeName) {\n        const outletName = this.getOutletNameFromOutletAttributeName(attributeName);\n        if (outletName) {\n            this.updateSelectorObserverForOutlet(outletName);\n        }\n    }\n    connectOutlet(outlet, element, outletName) {\n        var _a;\n        if (!this.outletElementsByName.has(outletName, element)) {\n            this.outletsByName.add(outletName, outlet);\n            this.outletElementsByName.add(outletName, element);\n            (_a = this.selectorObserverMap.get(outletName)) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.outletConnected(outlet, element, outletName));\n        }\n    }\n    disconnectOutlet(outlet, element, outletName) {\n        var _a;\n        if (this.outletElementsByName.has(outletName, element)) {\n            this.outletsByName.delete(outletName, outlet);\n            this.outletElementsByName.delete(outletName, element);\n            (_a = this.selectorObserverMap\n                .get(outletName)) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.outletDisconnected(outlet, element, outletName));\n        }\n    }\n    disconnectAllOutlets() {\n        for (const outletName of this.outletElementsByName.keys) {\n            for (const element of this.outletElementsByName.getValuesForKey(outletName)) {\n                for (const outlet of this.outletsByName.getValuesForKey(outletName)) {\n                    this.disconnectOutlet(outlet, element, outletName);\n                }\n            }\n        }\n    }\n    updateSelectorObserverForOutlet(outletName) {\n        const observer = this.selectorObserverMap.get(outletName);\n        if (observer) {\n            observer.selector = this.selector(outletName);\n        }\n    }\n    setupSelectorObserverForOutlet(outletName) {\n        const selector = this.selector(outletName);\n        const selectorObserver = new SelectorObserver(document.body, selector, this, { outletName });\n        this.selectorObserverMap.set(outletName, selectorObserver);\n        selectorObserver.start();\n    }\n    setupAttributeObserverForOutlet(outletName) {\n        const attributeName = this.attributeNameForOutletName(outletName);\n        const attributeObserver = new AttributeObserver(this.scope.element, attributeName, this);\n        this.attributeObserverMap.set(outletName, attributeObserver);\n        attributeObserver.start();\n    }\n    selector(outletName) {\n        return this.scope.outlets.getSelectorForOutletName(outletName);\n    }\n    attributeNameForOutletName(outletName) {\n        return this.scope.schema.outletAttributeForScope(this.identifier, outletName);\n    }\n    getOutletNameFromOutletAttributeName(attributeName) {\n        return this.outletDefinitions.find((outletName) => this.attributeNameForOutletName(outletName) === attributeName);\n    }\n    get outletDependencies() {\n        const dependencies = new Multimap();\n        this.router.modules.forEach((module) => {\n            const constructor = module.definition.controllerConstructor;\n            const outlets = readInheritableStaticArrayValues(constructor, \"outlets\");\n            outlets.forEach((outlet) => dependencies.add(outlet, module.identifier));\n        });\n        return dependencies;\n    }\n    get outletDefinitions() {\n        return this.outletDependencies.getKeysForValue(this.identifier);\n    }\n    get dependentControllerIdentifiers() {\n        return this.outletDependencies.getValuesForKey(this.identifier);\n    }\n    get dependentContexts() {\n        const identifiers = this.dependentControllerIdentifiers;\n        return this.router.contexts.filter((context) => identifiers.includes(context.identifier));\n    }\n    hasOutlet(element, outletName) {\n        return !!this.getOutlet(element, outletName) || !!this.getOutletFromMap(element, outletName);\n    }\n    getOutlet(element, outletName) {\n        return this.application.getControllerForElementAndIdentifier(element, outletName);\n    }\n    getOutletFromMap(element, outletName) {\n        return this.outletsByName.getValuesForKey(outletName).find((outlet) => outlet.element === element);\n    }\n    get scope() {\n        return this.context.scope;\n    }\n    get schema() {\n        return this.context.schema;\n    }\n    get identifier() {\n        return this.context.identifier;\n    }\n    get application() {\n        return this.context.application;\n    }\n    get router() {\n        return this.application.router;\n    }\n}\n\nclass Context {\n    constructor(module, scope) {\n        this.logDebugActivity = (functionName, detail = {}) => {\n            const { identifier, controller, element } = this;\n            detail = Object.assign({ identifier, controller, element }, detail);\n            this.application.logDebugActivity(this.identifier, functionName, detail);\n        };\n        this.module = module;\n        this.scope = scope;\n        this.controller = new module.controllerConstructor(this);\n        this.bindingObserver = new BindingObserver(this, this.dispatcher);\n        this.valueObserver = new ValueObserver(this, this.controller);\n        this.targetObserver = new TargetObserver(this, this);\n        this.outletObserver = new OutletObserver(this, this);\n        try {\n            this.controller.initialize();\n            this.logDebugActivity(\"initialize\");\n        }\n        catch (error) {\n            this.handleError(error, \"initializing controller\");\n        }\n    }\n    connect() {\n        this.bindingObserver.start();\n        this.valueObserver.start();\n        this.targetObserver.start();\n        this.outletObserver.start();\n        try {\n            this.controller.connect();\n            this.logDebugActivity(\"connect\");\n        }\n        catch (error) {\n            this.handleError(error, \"connecting controller\");\n        }\n    }\n    refresh() {\n        this.outletObserver.refresh();\n    }\n    disconnect() {\n        try {\n            this.controller.disconnect();\n            this.logDebugActivity(\"disconnect\");\n        }\n        catch (error) {\n            this.handleError(error, \"disconnecting controller\");\n        }\n        this.outletObserver.stop();\n        this.targetObserver.stop();\n        this.valueObserver.stop();\n        this.bindingObserver.stop();\n    }\n    get application() {\n        return this.module.application;\n    }\n    get identifier() {\n        return this.module.identifier;\n    }\n    get schema() {\n        return this.application.schema;\n    }\n    get dispatcher() {\n        return this.application.dispatcher;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get parentElement() {\n        return this.element.parentElement;\n    }\n    handleError(error, message, detail = {}) {\n        const { identifier, controller, element } = this;\n        detail = Object.assign({ identifier, controller, element }, detail);\n        this.application.handleError(error, `Error ${message}`, detail);\n    }\n    targetConnected(element, name) {\n        this.invokeControllerMethod(`${name}TargetConnected`, element);\n    }\n    targetDisconnected(element, name) {\n        this.invokeControllerMethod(`${name}TargetDisconnected`, element);\n    }\n    outletConnected(outlet, element, name) {\n        this.invokeControllerMethod(`${namespaceCamelize(name)}OutletConnected`, outlet, element);\n    }\n    outletDisconnected(outlet, element, name) {\n        this.invokeControllerMethod(`${namespaceCamelize(name)}OutletDisconnected`, outlet, element);\n    }\n    invokeControllerMethod(methodName, ...args) {\n        const controller = this.controller;\n        if (typeof controller[methodName] == \"function\") {\n            controller[methodName](...args);\n        }\n    }\n}\n\nfunction bless(constructor) {\n    return shadow(constructor, getBlessedProperties(constructor));\n}\nfunction shadow(constructor, properties) {\n    const shadowConstructor = extend(constructor);\n    const shadowProperties = getShadowProperties(constructor.prototype, properties);\n    Object.defineProperties(shadowConstructor.prototype, shadowProperties);\n    return shadowConstructor;\n}\nfunction getBlessedProperties(constructor) {\n    const blessings = readInheritableStaticArrayValues(constructor, \"blessings\");\n    return blessings.reduce((blessedProperties, blessing) => {\n        const properties = blessing(constructor);\n        for (const key in properties) {\n            const descriptor = blessedProperties[key] || {};\n            blessedProperties[key] = Object.assign(descriptor, properties[key]);\n        }\n        return blessedProperties;\n    }, {});\n}\nfunction getShadowProperties(prototype, properties) {\n    return getOwnKeys(properties).reduce((shadowProperties, key) => {\n        const descriptor = getShadowedDescriptor(prototype, properties, key);\n        if (descriptor) {\n            Object.assign(shadowProperties, { [key]: descriptor });\n        }\n        return shadowProperties;\n    }, {});\n}\nfunction getShadowedDescriptor(prototype, properties, key) {\n    const shadowingDescriptor = Object.getOwnPropertyDescriptor(prototype, key);\n    const shadowedByValue = shadowingDescriptor && \"value\" in shadowingDescriptor;\n    if (!shadowedByValue) {\n        const descriptor = Object.getOwnPropertyDescriptor(properties, key).value;\n        if (shadowingDescriptor) {\n            descriptor.get = shadowingDescriptor.get || descriptor.get;\n            descriptor.set = shadowingDescriptor.set || descriptor.set;\n        }\n        return descriptor;\n    }\n}\nconst getOwnKeys = (() => {\n    if (typeof Object.getOwnPropertySymbols == \"function\") {\n        return (object) => [...Object.getOwnPropertyNames(object), ...Object.getOwnPropertySymbols(object)];\n    }\n    else {\n        return Object.getOwnPropertyNames;\n    }\n})();\nconst extend = (() => {\n    function extendWithReflect(constructor) {\n        function extended() {\n            return Reflect.construct(constructor, arguments, new.target);\n        }\n        extended.prototype = Object.create(constructor.prototype, {\n            constructor: { value: extended },\n        });\n        Reflect.setPrototypeOf(extended, constructor);\n        return extended;\n    }\n    function testReflectExtension() {\n        const a = function () {\n            this.a.call(this);\n        };\n        const b = extendWithReflect(a);\n        b.prototype.a = function () { };\n        return new b();\n    }\n    try {\n        testReflectExtension();\n        return extendWithReflect;\n    }\n    catch (error) {\n        return (constructor) => class extended extends constructor {\n        };\n    }\n})();\n\nfunction blessDefinition(definition) {\n    return {\n        identifier: definition.identifier,\n        controllerConstructor: bless(definition.controllerConstructor),\n    };\n}\n\nclass Module {\n    constructor(application, definition) {\n        this.application = application;\n        this.definition = blessDefinition(definition);\n        this.contextsByScope = new WeakMap();\n        this.connectedContexts = new Set();\n    }\n    get identifier() {\n        return this.definition.identifier;\n    }\n    get controllerConstructor() {\n        return this.definition.controllerConstructor;\n    }\n    get contexts() {\n        return Array.from(this.connectedContexts);\n    }\n    connectContextForScope(scope) {\n        const context = this.fetchContextForScope(scope);\n        this.connectedContexts.add(context);\n        context.connect();\n    }\n    disconnectContextForScope(scope) {\n        const context = this.contextsByScope.get(scope);\n        if (context) {\n            this.connectedContexts.delete(context);\n            context.disconnect();\n        }\n    }\n    fetchContextForScope(scope) {\n        let context = this.contextsByScope.get(scope);\n        if (!context) {\n            context = new Context(this, scope);\n            this.contextsByScope.set(scope, context);\n        }\n        return context;\n    }\n}\n\nclass ClassMap {\n    constructor(scope) {\n        this.scope = scope;\n    }\n    has(name) {\n        return this.data.has(this.getDataKey(name));\n    }\n    get(name) {\n        return this.getAll(name)[0];\n    }\n    getAll(name) {\n        const tokenString = this.data.get(this.getDataKey(name)) || \"\";\n        return tokenize(tokenString);\n    }\n    getAttributeName(name) {\n        return this.data.getAttributeNameForKey(this.getDataKey(name));\n    }\n    getDataKey(name) {\n        return `${name}-class`;\n    }\n    get data() {\n        return this.scope.data;\n    }\n}\n\nclass DataMap {\n    constructor(scope) {\n        this.scope = scope;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get identifier() {\n        return this.scope.identifier;\n    }\n    get(key) {\n        const name = this.getAttributeNameForKey(key);\n        return this.element.getAttribute(name);\n    }\n    set(key, value) {\n        const name = this.getAttributeNameForKey(key);\n        this.element.setAttribute(name, value);\n        return this.get(key);\n    }\n    has(key) {\n        const name = this.getAttributeNameForKey(key);\n        return this.element.hasAttribute(name);\n    }\n    delete(key) {\n        if (this.has(key)) {\n            const name = this.getAttributeNameForKey(key);\n            this.element.removeAttribute(name);\n            return true;\n        }\n        else {\n            return false;\n        }\n    }\n    getAttributeNameForKey(key) {\n        return `data-${this.identifier}-${dasherize(key)}`;\n    }\n}\n\nclass Guide {\n    constructor(logger) {\n        this.warnedKeysByObject = new WeakMap();\n        this.logger = logger;\n    }\n    warn(object, key, message) {\n        let warnedKeys = this.warnedKeysByObject.get(object);\n        if (!warnedKeys) {\n            warnedKeys = new Set();\n            this.warnedKeysByObject.set(object, warnedKeys);\n        }\n        if (!warnedKeys.has(key)) {\n            warnedKeys.add(key);\n            this.logger.warn(message, object);\n        }\n    }\n}\n\nfunction attributeValueContainsToken(attributeName, token) {\n    return `[${attributeName}~=\"${token}\"]`;\n}\n\nclass TargetSet {\n    constructor(scope) {\n        this.scope = scope;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get identifier() {\n        return this.scope.identifier;\n    }\n    get schema() {\n        return this.scope.schema;\n    }\n    has(targetName) {\n        return this.find(targetName) != null;\n    }\n    find(...targetNames) {\n        return targetNames.reduce((target, targetName) => target || this.findTarget(targetName) || this.findLegacyTarget(targetName), undefined);\n    }\n    findAll(...targetNames) {\n        return targetNames.reduce((targets, targetName) => [\n            ...targets,\n            ...this.findAllTargets(targetName),\n            ...this.findAllLegacyTargets(targetName),\n        ], []);\n    }\n    findTarget(targetName) {\n        const selector = this.getSelectorForTargetName(targetName);\n        return this.scope.findElement(selector);\n    }\n    findAllTargets(targetName) {\n        const selector = this.getSelectorForTargetName(targetName);\n        return this.scope.findAllElements(selector);\n    }\n    getSelectorForTargetName(targetName) {\n        const attributeName = this.schema.targetAttributeForScope(this.identifier);\n        return attributeValueContainsToken(attributeName, targetName);\n    }\n    findLegacyTarget(targetName) {\n        const selector = this.getLegacySelectorForTargetName(targetName);\n        return this.deprecate(this.scope.findElement(selector), targetName);\n    }\n    findAllLegacyTargets(targetName) {\n        const selector = this.getLegacySelectorForTargetName(targetName);\n        return this.scope.findAllElements(selector).map((element) => this.deprecate(element, targetName));\n    }\n    getLegacySelectorForTargetName(targetName) {\n        const targetDescriptor = `${this.identifier}.${targetName}`;\n        return attributeValueContainsToken(this.schema.targetAttribute, targetDescriptor);\n    }\n    deprecate(element, targetName) {\n        if (element) {\n            const { identifier } = this;\n            const attributeName = this.schema.targetAttribute;\n            const revisedAttributeName = this.schema.targetAttributeForScope(identifier);\n            this.guide.warn(element, `target:${targetName}`, `Please replace ${attributeName}=\"${identifier}.${targetName}\" with ${revisedAttributeName}=\"${targetName}\". ` +\n                `The ${attributeName} attribute is deprecated and will be removed in a future version of Stimulus.`);\n        }\n        return element;\n    }\n    get guide() {\n        return this.scope.guide;\n    }\n}\n\nclass OutletSet {\n    constructor(scope, controllerElement) {\n        this.scope = scope;\n        this.controllerElement = controllerElement;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get identifier() {\n        return this.scope.identifier;\n    }\n    get schema() {\n        return this.scope.schema;\n    }\n    has(outletName) {\n        return this.find(outletName) != null;\n    }\n    find(...outletNames) {\n        return outletNames.reduce((outlet, outletName) => outlet || this.findOutlet(outletName), undefined);\n    }\n    findAll(...outletNames) {\n        return outletNames.reduce((outlets, outletName) => [...outlets, ...this.findAllOutlets(outletName)], []);\n    }\n    getSelectorForOutletName(outletName) {\n        const attributeName = this.schema.outletAttributeForScope(this.identifier, outletName);\n        return this.controllerElement.getAttribute(attributeName);\n    }\n    findOutlet(outletName) {\n        const selector = this.getSelectorForOutletName(outletName);\n        if (selector)\n            return this.findElement(selector, outletName);\n    }\n    findAllOutlets(outletName) {\n        const selector = this.getSelectorForOutletName(outletName);\n        return selector ? this.findAllElements(selector, outletName) : [];\n    }\n    findElement(selector, outletName) {\n        const elements = this.scope.queryElements(selector);\n        return elements.filter((element) => this.matchesElement(element, selector, outletName))[0];\n    }\n    findAllElements(selector, outletName) {\n        const elements = this.scope.queryElements(selector);\n        return elements.filter((element) => this.matchesElement(element, selector, outletName));\n    }\n    matchesElement(element, selector, outletName) {\n        const controllerAttribute = element.getAttribute(this.scope.schema.controllerAttribute) || \"\";\n        return element.matches(selector) && controllerAttribute.split(\" \").includes(outletName);\n    }\n}\n\nclass Scope {\n    constructor(schema, element, identifier, logger) {\n        this.targets = new TargetSet(this);\n        this.classes = new ClassMap(this);\n        this.data = new DataMap(this);\n        this.containsElement = (element) => {\n            return element.closest(this.controllerSelector) === this.element;\n        };\n        this.schema = schema;\n        this.element = element;\n        this.identifier = identifier;\n        this.guide = new Guide(logger);\n        this.outlets = new OutletSet(this.documentScope, element);\n    }\n    findElement(selector) {\n        return this.element.matches(selector) ? this.element : this.queryElements(selector).find(this.containsElement);\n    }\n    findAllElements(selector) {\n        return [\n            ...(this.element.matches(selector) ? [this.element] : []),\n            ...this.queryElements(selector).filter(this.containsElement),\n        ];\n    }\n    queryElements(selector) {\n        return Array.from(this.element.querySelectorAll(selector));\n    }\n    get controllerSelector() {\n        return attributeValueContainsToken(this.schema.controllerAttribute, this.identifier);\n    }\n    get isDocumentScope() {\n        return this.element === document.documentElement;\n    }\n    get documentScope() {\n        return this.isDocumentScope\n            ? this\n            : new Scope(this.schema, document.documentElement, this.identifier, this.guide.logger);\n    }\n}\n\nclass ScopeObserver {\n    constructor(element, schema, delegate) {\n        this.element = element;\n        this.schema = schema;\n        this.delegate = delegate;\n        this.valueListObserver = new ValueListObserver(this.element, this.controllerAttribute, this);\n        this.scopesByIdentifierByElement = new WeakMap();\n        this.scopeReferenceCounts = new WeakMap();\n    }\n    start() {\n        this.valueListObserver.start();\n    }\n    stop() {\n        this.valueListObserver.stop();\n    }\n    get controllerAttribute() {\n        return this.schema.controllerAttribute;\n    }\n    parseValueForToken(token) {\n        const { element, content: identifier } = token;\n        return this.parseValueForElementAndIdentifier(element, identifier);\n    }\n    parseValueForElementAndIdentifier(element, identifier) {\n        const scopesByIdentifier = this.fetchScopesByIdentifierForElement(element);\n        let scope = scopesByIdentifier.get(identifier);\n        if (!scope) {\n            scope = this.delegate.createScopeForElementAndIdentifier(element, identifier);\n            scopesByIdentifier.set(identifier, scope);\n        }\n        return scope;\n    }\n    elementMatchedValue(element, value) {\n        const referenceCount = (this.scopeReferenceCounts.get(value) || 0) + 1;\n        this.scopeReferenceCounts.set(value, referenceCount);\n        if (referenceCount == 1) {\n            this.delegate.scopeConnected(value);\n        }\n    }\n    elementUnmatchedValue(element, value) {\n        const referenceCount = this.scopeReferenceCounts.get(value);\n        if (referenceCount) {\n            this.scopeReferenceCounts.set(value, referenceCount - 1);\n            if (referenceCount == 1) {\n                this.delegate.scopeDisconnected(value);\n            }\n        }\n    }\n    fetchScopesByIdentifierForElement(element) {\n        let scopesByIdentifier = this.scopesByIdentifierByElement.get(element);\n        if (!scopesByIdentifier) {\n            scopesByIdentifier = new Map();\n            this.scopesByIdentifierByElement.set(element, scopesByIdentifier);\n        }\n        return scopesByIdentifier;\n    }\n}\n\nclass Router {\n    constructor(application) {\n        this.application = application;\n        this.scopeObserver = new ScopeObserver(this.element, this.schema, this);\n        this.scopesByIdentifier = new Multimap();\n        this.modulesByIdentifier = new Map();\n    }\n    get element() {\n        return this.application.element;\n    }\n    get schema() {\n        return this.application.schema;\n    }\n    get logger() {\n        return this.application.logger;\n    }\n    get controllerAttribute() {\n        return this.schema.controllerAttribute;\n    }\n    get modules() {\n        return Array.from(this.modulesByIdentifier.values());\n    }\n    get contexts() {\n        return this.modules.reduce((contexts, module) => contexts.concat(module.contexts), []);\n    }\n    start() {\n        this.scopeObserver.start();\n    }\n    stop() {\n        this.scopeObserver.stop();\n    }\n    loadDefinition(definition) {\n        this.unloadIdentifier(definition.identifier);\n        const module = new Module(this.application, definition);\n        this.connectModule(module);\n        const afterLoad = definition.controllerConstructor.afterLoad;\n        if (afterLoad) {\n            afterLoad.call(definition.controllerConstructor, definition.identifier, this.application);\n        }\n    }\n    unloadIdentifier(identifier) {\n        const module = this.modulesByIdentifier.get(identifier);\n        if (module) {\n            this.disconnectModule(module);\n        }\n    }\n    getContextForElementAndIdentifier(element, identifier) {\n        const module = this.modulesByIdentifier.get(identifier);\n        if (module) {\n            return module.contexts.find((context) => context.element == element);\n        }\n    }\n    proposeToConnectScopeForElementAndIdentifier(element, identifier) {\n        const scope = this.scopeObserver.parseValueForElementAndIdentifier(element, identifier);\n        if (scope) {\n            this.scopeObserver.elementMatchedValue(scope.element, scope);\n        }\n        else {\n            console.error(`Couldn't find or create scope for identifier: \"${identifier}\" and element:`, element);\n        }\n    }\n    handleError(error, message, detail) {\n        this.application.handleError(error, message, detail);\n    }\n    createScopeForElementAndIdentifier(element, identifier) {\n        return new Scope(this.schema, element, identifier, this.logger);\n    }\n    scopeConnected(scope) {\n        this.scopesByIdentifier.add(scope.identifier, scope);\n        const module = this.modulesByIdentifier.get(scope.identifier);\n        if (module) {\n            module.connectContextForScope(scope);\n        }\n    }\n    scopeDisconnected(scope) {\n        this.scopesByIdentifier.delete(scope.identifier, scope);\n        const module = this.modulesByIdentifier.get(scope.identifier);\n        if (module) {\n            module.disconnectContextForScope(scope);\n        }\n    }\n    connectModule(module) {\n        this.modulesByIdentifier.set(module.identifier, module);\n        const scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);\n        scopes.forEach((scope) => module.connectContextForScope(scope));\n    }\n    disconnectModule(module) {\n        this.modulesByIdentifier.delete(module.identifier);\n        const scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);\n        scopes.forEach((scope) => module.disconnectContextForScope(scope));\n    }\n}\n\nconst defaultSchema = {\n    controllerAttribute: \"data-controller\",\n    actionAttribute: \"data-action\",\n    targetAttribute: \"data-target\",\n    targetAttributeForScope: (identifier) => `data-${identifier}-target`,\n    outletAttributeForScope: (identifier, outlet) => `data-${identifier}-${outlet}-outlet`,\n    keyMappings: Object.assign(Object.assign({ enter: \"Enter\", tab: \"Tab\", esc: \"Escape\", space: \" \", up: \"ArrowUp\", down: \"ArrowDown\", left: \"ArrowLeft\", right: \"ArrowRight\", home: \"Home\", end: \"End\", page_up: \"PageUp\", page_down: \"PageDown\" }, objectFromEntries(\"abcdefghijklmnopqrstuvwxyz\".split(\"\").map((c) => [c, c]))), objectFromEntries(\"0123456789\".split(\"\").map((n) => [n, n]))),\n};\nfunction objectFromEntries(array) {\n    return array.reduce((memo, [k, v]) => (Object.assign(Object.assign({}, memo), { [k]: v })), {});\n}\n\nclass Application {\n    constructor(element = document.documentElement, schema = defaultSchema) {\n        this.logger = console;\n        this.debug = false;\n        this.logDebugActivity = (identifier, functionName, detail = {}) => {\n            if (this.debug) {\n                this.logFormattedMessage(identifier, functionName, detail);\n            }\n        };\n        this.element = element;\n        this.schema = schema;\n        this.dispatcher = new Dispatcher(this);\n        this.router = new Router(this);\n        this.actionDescriptorFilters = Object.assign({}, defaultActionDescriptorFilters);\n    }\n    static start(element, schema) {\n        const application = new this(element, schema);\n        application.start();\n        return application;\n    }\n    async start() {\n        await domReady();\n        this.logDebugActivity(\"application\", \"starting\");\n        this.dispatcher.start();\n        this.router.start();\n        this.logDebugActivity(\"application\", \"start\");\n    }\n    stop() {\n        this.logDebugActivity(\"application\", \"stopping\");\n        this.dispatcher.stop();\n        this.router.stop();\n        this.logDebugActivity(\"application\", \"stop\");\n    }\n    register(identifier, controllerConstructor) {\n        this.load({ identifier, controllerConstructor });\n    }\n    registerActionOption(name, filter) {\n        this.actionDescriptorFilters[name] = filter;\n    }\n    load(head, ...rest) {\n        const definitions = Array.isArray(head) ? head : [head, ...rest];\n        definitions.forEach((definition) => {\n            if (definition.controllerConstructor.shouldLoad) {\n                this.router.loadDefinition(definition);\n            }\n        });\n    }\n    unload(head, ...rest) {\n        const identifiers = Array.isArray(head) ? head : [head, ...rest];\n        identifiers.forEach((identifier) => this.router.unloadIdentifier(identifier));\n    }\n    get controllers() {\n        return this.router.contexts.map((context) => context.controller);\n    }\n    getControllerForElementAndIdentifier(element, identifier) {\n        const context = this.router.getContextForElementAndIdentifier(element, identifier);\n        return context ? context.controller : null;\n    }\n    handleError(error, message, detail) {\n        var _a;\n        this.logger.error(`%s\\n\\n%o\\n\\n%o`, message, error, detail);\n        (_a = window.onerror) === null || _a === void 0 ? void 0 : _a.call(window, message, \"\", 0, 0, error);\n    }\n    logFormattedMessage(identifier, functionName, detail = {}) {\n        detail = Object.assign({ application: this }, detail);\n        this.logger.groupCollapsed(`${identifier} #${functionName}`);\n        this.logger.log(\"details:\", Object.assign({}, detail));\n        this.logger.groupEnd();\n    }\n}\nfunction domReady() {\n    return new Promise((resolve) => {\n        if (document.readyState == \"loading\") {\n            document.addEventListener(\"DOMContentLoaded\", () => resolve());\n        }\n        else {\n            resolve();\n        }\n    });\n}\n\nfunction ClassPropertiesBlessing(constructor) {\n    const classes = readInheritableStaticArrayValues(constructor, \"classes\");\n    return classes.reduce((properties, classDefinition) => {\n        return Object.assign(properties, propertiesForClassDefinition(classDefinition));\n    }, {});\n}\nfunction propertiesForClassDefinition(key) {\n    return {\n        [`${key}Class`]: {\n            get() {\n                const { classes } = this;\n                if (classes.has(key)) {\n                    return classes.get(key);\n                }\n                else {\n                    const attribute = classes.getAttributeName(key);\n                    throw new Error(`Missing attribute \"${attribute}\"`);\n                }\n            },\n        },\n        [`${key}Classes`]: {\n            get() {\n                return this.classes.getAll(key);\n            },\n        },\n        [`has${capitalize(key)}Class`]: {\n            get() {\n                return this.classes.has(key);\n            },\n        },\n    };\n}\n\nfunction OutletPropertiesBlessing(constructor) {\n    const outlets = readInheritableStaticArrayValues(constructor, \"outlets\");\n    return outlets.reduce((properties, outletDefinition) => {\n        return Object.assign(properties, propertiesForOutletDefinition(outletDefinition));\n    }, {});\n}\nfunction getOutletController(controller, element, identifier) {\n    return controller.application.getControllerForElementAndIdentifier(element, identifier);\n}\nfunction getControllerAndEnsureConnectedScope(controller, element, outletName) {\n    let outletController = getOutletController(controller, element, outletName);\n    if (outletController)\n        return outletController;\n    controller.application.router.proposeToConnectScopeForElementAndIdentifier(element, outletName);\n    outletController = getOutletController(controller, element, outletName);\n    if (outletController)\n        return outletController;\n}\nfunction propertiesForOutletDefinition(name) {\n    const camelizedName = namespaceCamelize(name);\n    return {\n        [`${camelizedName}Outlet`]: {\n            get() {\n                const outletElement = this.outlets.find(name);\n                const selector = this.outlets.getSelectorForOutletName(name);\n                if (outletElement) {\n                    const outletController = getControllerAndEnsureConnectedScope(this, outletElement, name);\n                    if (outletController)\n                        return outletController;\n                    throw new Error(`The provided outlet element is missing an outlet controller \"${name}\" instance for host controller \"${this.identifier}\"`);\n                }\n                throw new Error(`Missing outlet element \"${name}\" for host controller \"${this.identifier}\". Stimulus couldn't find a matching outlet element using selector \"${selector}\".`);\n            },\n        },\n        [`${camelizedName}Outlets`]: {\n            get() {\n                const outlets = this.outlets.findAll(name);\n                if (outlets.length > 0) {\n                    return outlets\n                        .map((outletElement) => {\n                        const outletController = getControllerAndEnsureConnectedScope(this, outletElement, name);\n                        if (outletController)\n                            return outletController;\n                        console.warn(`The provided outlet element is missing an outlet controller \"${name}\" instance for host controller \"${this.identifier}\"`, outletElement);\n                    })\n                        .filter((controller) => controller);\n                }\n                return [];\n            },\n        },\n        [`${camelizedName}OutletElement`]: {\n            get() {\n                const outletElement = this.outlets.find(name);\n                const selector = this.outlets.getSelectorForOutletName(name);\n                if (outletElement) {\n                    return outletElement;\n                }\n                else {\n                    throw new Error(`Missing outlet element \"${name}\" for host controller \"${this.identifier}\". Stimulus couldn't find a matching outlet element using selector \"${selector}\".`);\n                }\n            },\n        },\n        [`${camelizedName}OutletElements`]: {\n            get() {\n                return this.outlets.findAll(name);\n            },\n        },\n        [`has${capitalize(camelizedName)}Outlet`]: {\n            get() {\n                return this.outlets.has(name);\n            },\n        },\n    };\n}\n\nfunction TargetPropertiesBlessing(constructor) {\n    const targets = readInheritableStaticArrayValues(constructor, \"targets\");\n    return targets.reduce((properties, targetDefinition) => {\n        return Object.assign(properties, propertiesForTargetDefinition(targetDefinition));\n    }, {});\n}\nfunction propertiesForTargetDefinition(name) {\n    return {\n        [`${name}Target`]: {\n            get() {\n                const target = this.targets.find(name);\n                if (target) {\n                    return target;\n                }\n                else {\n                    throw new Error(`Missing target element \"${name}\" for \"${this.identifier}\" controller`);\n                }\n            },\n        },\n        [`${name}Targets`]: {\n            get() {\n                return this.targets.findAll(name);\n            },\n        },\n        [`has${capitalize(name)}Target`]: {\n            get() {\n                return this.targets.has(name);\n            },\n        },\n    };\n}\n\nfunction ValuePropertiesBlessing(constructor) {\n    const valueDefinitionPairs = readInheritableStaticObjectPairs(constructor, \"values\");\n    const propertyDescriptorMap = {\n        valueDescriptorMap: {\n            get() {\n                return valueDefinitionPairs.reduce((result, valueDefinitionPair) => {\n                    const valueDescriptor = parseValueDefinitionPair(valueDefinitionPair, this.identifier);\n                    const attributeName = this.data.getAttributeNameForKey(valueDescriptor.key);\n                    return Object.assign(result, { [attributeName]: valueDescriptor });\n                }, {});\n            },\n        },\n    };\n    return valueDefinitionPairs.reduce((properties, valueDefinitionPair) => {\n        return Object.assign(properties, propertiesForValueDefinitionPair(valueDefinitionPair));\n    }, propertyDescriptorMap);\n}\nfunction propertiesForValueDefinitionPair(valueDefinitionPair, controller) {\n    const definition = parseValueDefinitionPair(valueDefinitionPair, controller);\n    const { key, name, reader: read, writer: write } = definition;\n    return {\n        [name]: {\n            get() {\n                const value = this.data.get(key);\n                if (value !== null) {\n                    return read(value);\n                }\n                else {\n                    return definition.defaultValue;\n                }\n            },\n            set(value) {\n                if (value === undefined) {\n                    this.data.delete(key);\n                }\n                else {\n                    this.data.set(key, write(value));\n                }\n            },\n        },\n        [`has${capitalize(name)}`]: {\n            get() {\n                return this.data.has(key) || definition.hasCustomDefaultValue;\n            },\n        },\n    };\n}\nfunction parseValueDefinitionPair([token, typeDefinition], controller) {\n    return valueDescriptorForTokenAndTypeDefinition({\n        controller,\n        token,\n        typeDefinition,\n    });\n}\nfunction parseValueTypeConstant(constant) {\n    switch (constant) {\n        case Array:\n            return \"array\";\n        case Boolean:\n            return \"boolean\";\n        case Number:\n            return \"number\";\n        case Object:\n            return \"object\";\n        case String:\n            return \"string\";\n    }\n}\nfunction parseValueTypeDefault(defaultValue) {\n    switch (typeof defaultValue) {\n        case \"boolean\":\n            return \"boolean\";\n        case \"number\":\n            return \"number\";\n        case \"string\":\n            return \"string\";\n    }\n    if (Array.isArray(defaultValue))\n        return \"array\";\n    if (Object.prototype.toString.call(defaultValue) === \"[object Object]\")\n        return \"object\";\n}\nfunction parseValueTypeObject(payload) {\n    const { controller, token, typeObject } = payload;\n    const hasType = isSomething(typeObject.type);\n    const hasDefault = isSomething(typeObject.default);\n    const fullObject = hasType && hasDefault;\n    const onlyType = hasType && !hasDefault;\n    const onlyDefault = !hasType && hasDefault;\n    const typeFromObject = parseValueTypeConstant(typeObject.type);\n    const typeFromDefaultValue = parseValueTypeDefault(payload.typeObject.default);\n    if (onlyType)\n        return typeFromObject;\n    if (onlyDefault)\n        return typeFromDefaultValue;\n    if (typeFromObject !== typeFromDefaultValue) {\n        const propertyPath = controller ? `${controller}.${token}` : token;\n        throw new Error(`The specified default value for the Stimulus Value \"${propertyPath}\" must match the defined type \"${typeFromObject}\". The provided default value of \"${typeObject.default}\" is of type \"${typeFromDefaultValue}\".`);\n    }\n    if (fullObject)\n        return typeFromObject;\n}\nfunction parseValueTypeDefinition(payload) {\n    const { controller, token, typeDefinition } = payload;\n    const typeObject = { controller, token, typeObject: typeDefinition };\n    const typeFromObject = parseValueTypeObject(typeObject);\n    const typeFromDefaultValue = parseValueTypeDefault(typeDefinition);\n    const typeFromConstant = parseValueTypeConstant(typeDefinition);\n    const type = typeFromObject || typeFromDefaultValue || typeFromConstant;\n    if (type)\n        return type;\n    const propertyPath = controller ? `${controller}.${typeDefinition}` : token;\n    throw new Error(`Unknown value type \"${propertyPath}\" for \"${token}\" value`);\n}\nfunction defaultValueForDefinition(typeDefinition) {\n    const constant = parseValueTypeConstant(typeDefinition);\n    if (constant)\n        return defaultValuesByType[constant];\n    const hasDefault = hasProperty(typeDefinition, \"default\");\n    const hasType = hasProperty(typeDefinition, \"type\");\n    const typeObject = typeDefinition;\n    if (hasDefault)\n        return typeObject.default;\n    if (hasType) {\n        const { type } = typeObject;\n        const constantFromType = parseValueTypeConstant(type);\n        if (constantFromType)\n            return defaultValuesByType[constantFromType];\n    }\n    return typeDefinition;\n}\nfunction valueDescriptorForTokenAndTypeDefinition(payload) {\n    const { token, typeDefinition } = payload;\n    const key = `${dasherize(token)}-value`;\n    const type = parseValueTypeDefinition(payload);\n    return {\n        type,\n        key,\n        name: camelize(key),\n        get defaultValue() {\n            return defaultValueForDefinition(typeDefinition);\n        },\n        get hasCustomDefaultValue() {\n            return parseValueTypeDefault(typeDefinition) !== undefined;\n        },\n        reader: readers[type],\n        writer: writers[type] || writers.default,\n    };\n}\nconst defaultValuesByType = {\n    get array() {\n        return [];\n    },\n    boolean: false,\n    number: 0,\n    get object() {\n        return {};\n    },\n    string: \"\",\n};\nconst readers = {\n    array(value) {\n        const array = JSON.parse(value);\n        if (!Array.isArray(array)) {\n            throw new TypeError(`expected value of type \"array\" but instead got value \"${value}\" of type \"${parseValueTypeDefault(array)}\"`);\n        }\n        return array;\n    },\n    boolean(value) {\n        return !(value == \"0\" || String(value).toLowerCase() == \"false\");\n    },\n    number(value) {\n        return Number(value.replace(/_/g, \"\"));\n    },\n    object(value) {\n        const object = JSON.parse(value);\n        if (object === null || typeof object != \"object\" || Array.isArray(object)) {\n            throw new TypeError(`expected value of type \"object\" but instead got value \"${value}\" of type \"${parseValueTypeDefault(object)}\"`);\n        }\n        return object;\n    },\n    string(value) {\n        return value;\n    },\n};\nconst writers = {\n    default: writeString,\n    array: writeJSON,\n    object: writeJSON,\n};\nfunction writeJSON(value) {\n    return JSON.stringify(value);\n}\nfunction writeString(value) {\n    return `${value}`;\n}\n\nclass Controller {\n    constructor(context) {\n        this.context = context;\n    }\n    static get shouldLoad() {\n        return true;\n    }\n    static afterLoad(_identifier, _application) {\n        return;\n    }\n    get application() {\n        return this.context.application;\n    }\n    get scope() {\n        return this.context.scope;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get identifier() {\n        return this.scope.identifier;\n    }\n    get targets() {\n        return this.scope.targets;\n    }\n    get outlets() {\n        return this.scope.outlets;\n    }\n    get classes() {\n        return this.scope.classes;\n    }\n    get data() {\n        return this.scope.data;\n    }\n    initialize() {\n    }\n    connect() {\n    }\n    disconnect() {\n    }\n    dispatch(eventName, { target = this.element, detail = {}, prefix = this.identifier, bubbles = true, cancelable = true, } = {}) {\n        const type = prefix ? `${prefix}:${eventName}` : eventName;\n        const event = new CustomEvent(type, { detail, bubbles, cancelable });\n        target.dispatchEvent(event);\n        return event;\n    }\n}\nController.blessings = [\n    ClassPropertiesBlessing,\n    TargetPropertiesBlessing,\n    ValuePropertiesBlessing,\n    OutletPropertiesBlessing,\n];\nController.targets = [];\nController.outlets = [];\nController.values = {};\n\nexport { Application, AttributeObserver, Context, Controller, ElementObserver, IndexedMultimap, Multimap, SelectorObserver, StringMapObserver, TokenListObserver, ValueListObserver, add, defaultSchema, del, fetch, prune };\n", "import { Application } from \"@hotwired/stimulus\"\n\nconst application = Application.start()\n\nwindow.Stimulus   = application\n\nexport { application }\n", "import { Controller } from \"@hotwired/stimulus\";\n\nexport default class extends Controller {\n  connect() {\n    console.log(\"Hello, suggestions!\", this.element);\n  }\n}\n\n", "import { Controller } from \"@hotwired/stimulus\";\n\nexport default class extends Controller {\n  connect() {\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\";\n\nexport default class extends Controller {\n  connect() {\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\";\n\nexport default class extends Controller {\n  connect() {\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\";\n\nexport default class extends Controller {\n  connect() {\n    console.log(\"Hello, governanceVoteWidgetController!\", this.element);\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\";\n\nexport default class extends Controller {\n    connect() {\n    }\n}\n", "", "import { Controller } from \"@hotwired/stimulus\";\n\n\nexport default class extends Controller {\n  connect() {\n\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\";\n\nexport default class extends Controller {\n  static targets = [\"title\"];\n\n  connect() {\n    this.modal = new window.bootstrap.Modal(this.element, {\n      keyboard: true,\n    });\n    this.turboFrame = this.element.querySelector(\"#turbo_frame_modal\");\n\n    window.addEventListener(\"modal:open\", this.openModal);\n    window.addEventListener(\"modal:close\", this.closeModal);\n  }\n\n  disconnect() {\n    window.removeEventListener(\"modal:open\", this.openModal);\n    window.removeEventListener(\"modal:close\", this.closeModal);\n  }\n\n  openModal = (event) => {\n    const { url, title, bodyClass } = event.detail;\n    const urlObj = new URL(url);\n    urlObj.searchParams.append('modal', 'true');\n\n    if (bodyClass) {\n      // modal-body\n      this.element.querySelector('.modal-body').className = `modal-body ${bodyClass}`;\n    }\n\n    this.titleTarget.textContent = title;\n    this.turboFrame.src = urlObj.toString();\n    this.turboFrame.innerHTML = '';\n    this.turboFrame.appendChild(this.createLoadingDom());\n    this.modal.show();\n  }\n\n  closeModal = () => {\n    this.modal.hide();\n  }\n\n  createLoadingDom() {\n    // Create the inner div\n    const innerDiv = document.createElement('div');\n    innerDiv.className = 'd-flex align-items-center justify-content-center';\n\n    // Create the spinner\n    const spinner = document.createElement('span');\n    spinner.className = 'spinner-border text-primary';\n    spinner.role = 'status';\n    innerDiv.appendChild(spinner);\n\n    // Create the text\n    const text = document.createElement('span');\n    text.className = 'text-muted fs-6 fw-semibold ms-5';\n    text.textContent = 'Loading...';\n    innerDiv.appendChild(text);\n\n    return innerDiv;\n  }\n\n\n\n}\n", "import { Controller } from \"@hotwired/stimulus\";\nexport default class extends Controller {\n  connect() {\n    this.url = this.element.href\n    this.title = this.element.dataset.title\n    this.bodyClass = this.element.dataset.bodyClass\n  }\n  triggerModal =(event) => {\n    event.preventDefault()\n    const detail = { url: this.url, title: this.title, bodyClass: this.bodyClass }\n    const openEvent = new CustomEvent(\"modal:open\", { detail });\n    window.dispatchEvent(openEvent);\n  }\n\n}\n", "export var top = 'top';\nexport var bottom = 'bottom';\nexport var right = 'right';\nexport var left = 'left';\nexport var auto = 'auto';\nexport var basePlacements = [top, bottom, right, left];\nexport var start = 'start';\nexport var end = 'end';\nexport var clippingParents = 'clippingParents';\nexport var viewport = 'viewport';\nexport var popper = 'popper';\nexport var reference = 'reference';\nexport var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n  return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n}, []);\nexport var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n  return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n}, []); // modifiers that need to read the DOM\n\nexport var beforeRead = 'beforeRead';\nexport var read = 'read';\nexport var afterRead = 'afterRead'; // pure-logic modifiers\n\nexport var beforeMain = 'beforeMain';\nexport var main = 'main';\nexport var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\nexport var beforeWrite = 'beforeWrite';\nexport var write = 'write';\nexport var afterWrite = 'afterWrite';\nexport var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];", "export default function getNodeName(element) {\n  return element ? (element.nodeName || '').toLowerCase() : null;\n}", "export default function getWindow(node) {\n  if (node == null) {\n    return window;\n  }\n\n  if (node.toString() !== '[object Window]') {\n    var ownerDocument = node.ownerDocument;\n    return ownerDocument ? ownerDocument.defaultView || window : window;\n  }\n\n  return node;\n}", "import getWindow from \"./getWindow.js\";\n\nfunction isElement(node) {\n  var OwnElement = getWindow(node).Element;\n  return node instanceof OwnElement || node instanceof Element;\n}\n\nfunction isHTMLElement(node) {\n  var OwnElement = getWindow(node).HTMLElement;\n  return node instanceof OwnElement || node instanceof HTMLElement;\n}\n\nfunction isShadowRoot(node) {\n  // IE 11 has no ShadowRoot\n  if (typeof ShadowRoot === 'undefined') {\n    return false;\n  }\n\n  var OwnElement = getWindow(node).ShadowRoot;\n  return node instanceof OwnElement || node instanceof ShadowRoot;\n}\n\nexport { isElement, isHTMLElement, isShadowRoot };", "import getNodeName from \"../dom-utils/getNodeName.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // This modifier takes the styles prepared by the `computeStyles` modifier\n// and applies them to the HTMLElements such as popper and arrow\n\nfunction applyStyles(_ref) {\n  var state = _ref.state;\n  Object.keys(state.elements).forEach(function (name) {\n    var style = state.styles[name] || {};\n    var attributes = state.attributes[name] || {};\n    var element = state.elements[name]; // arrow is optional + virtual elements\n\n    if (!isHTMLElement(element) || !getNodeName(element)) {\n      return;\n    } // Flow doesn't support to extend this property, but it's the most\n    // effective way to apply styles to an HTMLElement\n    // $FlowFixMe[cannot-write]\n\n\n    Object.assign(element.style, style);\n    Object.keys(attributes).forEach(function (name) {\n      var value = attributes[name];\n\n      if (value === false) {\n        element.removeAttribute(name);\n      } else {\n        element.setAttribute(name, value === true ? '' : value);\n      }\n    });\n  });\n}\n\nfunction effect(_ref2) {\n  var state = _ref2.state;\n  var initialStyles = {\n    popper: {\n      position: state.options.strategy,\n      left: '0',\n      top: '0',\n      margin: '0'\n    },\n    arrow: {\n      position: 'absolute'\n    },\n    reference: {}\n  };\n  Object.assign(state.elements.popper.style, initialStyles.popper);\n  state.styles = initialStyles;\n\n  if (state.elements.arrow) {\n    Object.assign(state.elements.arrow.style, initialStyles.arrow);\n  }\n\n  return function () {\n    Object.keys(state.elements).forEach(function (name) {\n      var element = state.elements[name];\n      var attributes = state.attributes[name] || {};\n      var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n      var style = styleProperties.reduce(function (style, property) {\n        style[property] = '';\n        return style;\n      }, {}); // arrow is optional + virtual elements\n\n      if (!isHTMLElement(element) || !getNodeName(element)) {\n        return;\n      }\n\n      Object.assign(element.style, style);\n      Object.keys(attributes).forEach(function (attribute) {\n        element.removeAttribute(attribute);\n      });\n    });\n  };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'applyStyles',\n  enabled: true,\n  phase: 'write',\n  fn: applyStyles,\n  effect: effect,\n  requires: ['computeStyles']\n};", "import { auto } from \"../enums.js\";\nexport default function getBasePlacement(placement) {\n  return placement.split('-')[0];\n}", "export var max = Math.max;\nexport var min = Math.min;\nexport var round = Math.round;", "export default function getUAString() {\n  var uaData = navigator.userAgentData;\n\n  if (uaData != null && uaData.brands && Array.isArray(uaData.brands)) {\n    return uaData.brands.map(function (item) {\n      return item.brand + \"/\" + item.version;\n    }).join(' ');\n  }\n\n  return navigator.userAgent;\n}", "import getUAString from \"../utils/userAgent.js\";\nexport default function isLayoutViewport() {\n  return !/^((?!chrome|android).)*safari/i.test(getUAString());\n}", "import { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport { round } from \"../utils/math.js\";\nimport getWindow from \"./getWindow.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getBoundingClientRect(element, includeScale, isFixedStrategy) {\n  if (includeScale === void 0) {\n    includeScale = false;\n  }\n\n  if (isFixedStrategy === void 0) {\n    isFixedStrategy = false;\n  }\n\n  var clientRect = element.getBoundingClientRect();\n  var scaleX = 1;\n  var scaleY = 1;\n\n  if (includeScale && isHTMLElement(element)) {\n    scaleX = element.offsetWidth > 0 ? round(clientRect.width) / element.offsetWidth || 1 : 1;\n    scaleY = element.offsetHeight > 0 ? round(clientRect.height) / element.offsetHeight || 1 : 1;\n  }\n\n  var _ref = isElement(element) ? getWindow(element) : window,\n      visualViewport = _ref.visualViewport;\n\n  var addVisualOffsets = !isLayoutViewport() && isFixedStrategy;\n  var x = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX;\n  var y = (clientRect.top + (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) / scaleY;\n  var width = clientRect.width / scaleX;\n  var height = clientRect.height / scaleY;\n  return {\n    width: width,\n    height: height,\n    top: y,\n    right: x + width,\n    bottom: y + height,\n    left: x,\n    x: x,\n    y: y\n  };\n}", "import getBoundingClientRect from \"./getBoundingClientRect.js\"; // Returns the layout rect of an element relative to its offsetParent. Layout\n// means it doesn't take into account transforms.\n\nexport default function getLayoutRect(element) {\n  var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n  // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n  var width = element.offsetWidth;\n  var height = element.offsetHeight;\n\n  if (Math.abs(clientRect.width - width) <= 1) {\n    width = clientRect.width;\n  }\n\n  if (Math.abs(clientRect.height - height) <= 1) {\n    height = clientRect.height;\n  }\n\n  return {\n    x: element.offsetLeft,\n    y: element.offsetTop,\n    width: width,\n    height: height\n  };\n}", "import { isShadowRoot } from \"./instanceOf.js\";\nexport default function contains(parent, child) {\n  var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n  if (parent.contains(child)) {\n    return true;\n  } // then fallback to custom implementation with Shadow DOM support\n  else if (rootNode && isShadowRoot(rootNode)) {\n      var next = child;\n\n      do {\n        if (next && parent.isSameNode(next)) {\n          return true;\n        } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n        next = next.parentNode || next.host;\n      } while (next);\n    } // Give up, the result is false\n\n\n  return false;\n}", "import getWindow from \"./getWindow.js\";\nexport default function getComputedStyle(element) {\n  return getWindow(element).getComputedStyle(element);\n}", "import getNodeName from \"./getNodeName.js\";\nexport default function isTableElement(element) {\n  return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n}", "import { isElement } from \"./instanceOf.js\";\nexport default function getDocumentElement(element) {\n  // $FlowFixMe[incompatible-return]: assume body is always available\n  return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n  element.document) || window.document).documentElement;\n}", "import getNodeName from \"./getNodeName.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport { isShadowRoot } from \"./instanceOf.js\";\nexport default function getParentNode(element) {\n  if (getNodeName(element) === 'html') {\n    return element;\n  }\n\n  return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n    // $FlowFixMe[incompatible-return]\n    // $FlowFixMe[prop-missing]\n    element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n    element.parentNode || ( // DOM Element detected\n    isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n    // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n    getDocumentElement(element) // fallback\n\n  );\n}", "import getWindow from \"./getWindow.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isHTMLElement, isShadowRoot } from \"./instanceOf.js\";\nimport isTableElement from \"./isTableElement.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getUAString from \"../utils/userAgent.js\";\n\nfunction getTrueOffsetParent(element) {\n  if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n  getComputedStyle(element).position === 'fixed') {\n    return null;\n  }\n\n  return element.offsetParent;\n} // `.offsetParent` reports `null` for fixed elements, while absolute elements\n// return the containing block\n\n\nfunction getContainingBlock(element) {\n  var isFirefox = /firefox/i.test(getUAString());\n  var isIE = /Trident/i.test(getUAString());\n\n  if (isIE && isHTMLElement(element)) {\n    // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n    var elementCss = getComputedStyle(element);\n\n    if (elementCss.position === 'fixed') {\n      return null;\n    }\n  }\n\n  var currentNode = getParentNode(element);\n\n  if (isShadowRoot(currentNode)) {\n    currentNode = currentNode.host;\n  }\n\n  while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n    var css = getComputedStyle(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n    // create a containing block.\n    // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n    if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n      return currentNode;\n    } else {\n      currentNode = currentNode.parentNode;\n    }\n  }\n\n  return null;\n} // Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\n\n\nexport default function getOffsetParent(element) {\n  var window = getWindow(element);\n  var offsetParent = getTrueOffsetParent(element);\n\n  while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {\n    offsetParent = getTrueOffsetParent(offsetParent);\n  }\n\n  if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static')) {\n    return window;\n  }\n\n  return offsetParent || getContainingBlock(element) || window;\n}", "export default function getMainAxisFromPlacement(placement) {\n  return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n}", "import { max as mathMax, min as mathMin } from \"./math.js\";\nexport function within(min, value, max) {\n  return mathMax(min, mathMin(value, max));\n}\nexport function withinMaxClamp(min, value, max) {\n  var v = within(min, value, max);\n  return v > max ? max : v;\n}", "export default function getFreshSideObject() {\n  return {\n    top: 0,\n    right: 0,\n    bottom: 0,\n    left: 0\n  };\n}", "import getFreshSideObject from \"./getFreshSideObject.js\";\nexport default function mergePaddingObject(paddingObject) {\n  return Object.assign({}, getFreshSideObject(), paddingObject);\n}", "export default function expandToHashMap(value, keys) {\n  return keys.reduce(function (hashMap, key) {\n    hashMap[key] = value;\n    return hashMap;\n  }, {});\n}", "import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport contains from \"../dom-utils/contains.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport { within } from \"../utils/within.js\";\nimport mergePaddingObject from \"../utils/mergePaddingObject.js\";\nimport expandToHashMap from \"../utils/expandToHashMap.js\";\nimport { left, right, basePlacements, top, bottom } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar toPaddingObject = function toPaddingObject(padding, state) {\n  padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n    placement: state.placement\n  })) : padding;\n  return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n};\n\nfunction arrow(_ref) {\n  var _state$modifiersData$;\n\n  var state = _ref.state,\n      name = _ref.name,\n      options = _ref.options;\n  var arrowElement = state.elements.arrow;\n  var popperOffsets = state.modifiersData.popperOffsets;\n  var basePlacement = getBasePlacement(state.placement);\n  var axis = getMainAxisFromPlacement(basePlacement);\n  var isVertical = [left, right].indexOf(basePlacement) >= 0;\n  var len = isVertical ? 'height' : 'width';\n\n  if (!arrowElement || !popperOffsets) {\n    return;\n  }\n\n  var paddingObject = toPaddingObject(options.padding, state);\n  var arrowRect = getLayoutRect(arrowElement);\n  var minProp = axis === 'y' ? top : left;\n  var maxProp = axis === 'y' ? bottom : right;\n  var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n  var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n  var arrowOffsetParent = getOffsetParent(arrowElement);\n  var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n  var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n  // outside of the popper bounds\n\n  var min = paddingObject[minProp];\n  var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n  var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n  var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n  var axisProp = axis;\n  state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n}\n\nfunction effect(_ref2) {\n  var state = _ref2.state,\n      options = _ref2.options;\n  var _options$element = options.element,\n      arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n  if (arrowElement == null) {\n    return;\n  } // CSS selector\n\n\n  if (typeof arrowElement === 'string') {\n    arrowElement = state.elements.popper.querySelector(arrowElement);\n\n    if (!arrowElement) {\n      return;\n    }\n  }\n\n  if (!contains(state.elements.popper, arrowElement)) {\n    return;\n  }\n\n  state.elements.arrow = arrowElement;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'arrow',\n  enabled: true,\n  phase: 'main',\n  fn: arrow,\n  effect: effect,\n  requires: ['popperOffsets'],\n  requiresIfExists: ['preventOverflow']\n};", "export default function getVariation(placement) {\n  return placement.split('-')[1];\n}", "import { top, left, right, bottom, end } from \"../enums.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getWindow from \"../dom-utils/getWindow.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getComputedStyle from \"../dom-utils/getComputedStyle.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport { round } from \"../utils/math.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar unsetSides = {\n  top: 'auto',\n  right: 'auto',\n  bottom: 'auto',\n  left: 'auto'\n}; // Round the offsets to the nearest suitable subpixel based on the DPR.\n// Zooming can change the DPR, but it seems to report a value that will\n// cleanly divide the values into the appropriate subpixels.\n\nfunction roundOffsetsByDPR(_ref, win) {\n  var x = _ref.x,\n      y = _ref.y;\n  var dpr = win.devicePixelRatio || 1;\n  return {\n    x: round(x * dpr) / dpr || 0,\n    y: round(y * dpr) / dpr || 0\n  };\n}\n\nexport function mapToStyles(_ref2) {\n  var _Object$assign2;\n\n  var popper = _ref2.popper,\n      popperRect = _ref2.popperRect,\n      placement = _ref2.placement,\n      variation = _ref2.variation,\n      offsets = _ref2.offsets,\n      position = _ref2.position,\n      gpuAcceleration = _ref2.gpuAcceleration,\n      adaptive = _ref2.adaptive,\n      roundOffsets = _ref2.roundOffsets,\n      isFixed = _ref2.isFixed;\n  var _offsets$x = offsets.x,\n      x = _offsets$x === void 0 ? 0 : _offsets$x,\n      _offsets$y = offsets.y,\n      y = _offsets$y === void 0 ? 0 : _offsets$y;\n\n  var _ref3 = typeof roundOffsets === 'function' ? roundOffsets({\n    x: x,\n    y: y\n  }) : {\n    x: x,\n    y: y\n  };\n\n  x = _ref3.x;\n  y = _ref3.y;\n  var hasX = offsets.hasOwnProperty('x');\n  var hasY = offsets.hasOwnProperty('y');\n  var sideX = left;\n  var sideY = top;\n  var win = window;\n\n  if (adaptive) {\n    var offsetParent = getOffsetParent(popper);\n    var heightProp = 'clientHeight';\n    var widthProp = 'clientWidth';\n\n    if (offsetParent === getWindow(popper)) {\n      offsetParent = getDocumentElement(popper);\n\n      if (getComputedStyle(offsetParent).position !== 'static' && position === 'absolute') {\n        heightProp = 'scrollHeight';\n        widthProp = 'scrollWidth';\n      }\n    } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n    offsetParent = offsetParent;\n\n    if (placement === top || (placement === left || placement === right) && variation === end) {\n      sideY = bottom;\n      var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing]\n      offsetParent[heightProp];\n      y -= offsetY - popperRect.height;\n      y *= gpuAcceleration ? 1 : -1;\n    }\n\n    if (placement === left || (placement === top || placement === bottom) && variation === end) {\n      sideX = right;\n      var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing]\n      offsetParent[widthProp];\n      x -= offsetX - popperRect.width;\n      x *= gpuAcceleration ? 1 : -1;\n    }\n  }\n\n  var commonStyles = Object.assign({\n    position: position\n  }, adaptive && unsetSides);\n\n  var _ref4 = roundOffsets === true ? roundOffsetsByDPR({\n    x: x,\n    y: y\n  }, getWindow(popper)) : {\n    x: x,\n    y: y\n  };\n\n  x = _ref4.x;\n  y = _ref4.y;\n\n  if (gpuAcceleration) {\n    var _Object$assign;\n\n    return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n  }\n\n  return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n}\n\nfunction computeStyles(_ref5) {\n  var state = _ref5.state,\n      options = _ref5.options;\n  var _options$gpuAccelerat = options.gpuAcceleration,\n      gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n      _options$adaptive = options.adaptive,\n      adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n      _options$roundOffsets = options.roundOffsets,\n      roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n  var commonStyles = {\n    placement: getBasePlacement(state.placement),\n    variation: getVariation(state.placement),\n    popper: state.elements.popper,\n    popperRect: state.rects.popper,\n    gpuAcceleration: gpuAcceleration,\n    isFixed: state.options.strategy === 'fixed'\n  };\n\n  if (state.modifiersData.popperOffsets != null) {\n    state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n      offsets: state.modifiersData.popperOffsets,\n      position: state.options.strategy,\n      adaptive: adaptive,\n      roundOffsets: roundOffsets\n    })));\n  }\n\n  if (state.modifiersData.arrow != null) {\n    state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n      offsets: state.modifiersData.arrow,\n      position: 'absolute',\n      adaptive: false,\n      roundOffsets: roundOffsets\n    })));\n  }\n\n  state.attributes.popper = Object.assign({}, state.attributes.popper, {\n    'data-popper-placement': state.placement\n  });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'computeStyles',\n  enabled: true,\n  phase: 'beforeWrite',\n  fn: computeStyles,\n  data: {}\n};", "import getWindow from \"../dom-utils/getWindow.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar passive = {\n  passive: true\n};\n\nfunction effect(_ref) {\n  var state = _ref.state,\n      instance = _ref.instance,\n      options = _ref.options;\n  var _options$scroll = options.scroll,\n      scroll = _options$scroll === void 0 ? true : _options$scroll,\n      _options$resize = options.resize,\n      resize = _options$resize === void 0 ? true : _options$resize;\n  var window = getWindow(state.elements.popper);\n  var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n  if (scroll) {\n    scrollParents.forEach(function (scrollParent) {\n      scrollParent.addEventListener('scroll', instance.update, passive);\n    });\n  }\n\n  if (resize) {\n    window.addEventListener('resize', instance.update, passive);\n  }\n\n  return function () {\n    if (scroll) {\n      scrollParents.forEach(function (scrollParent) {\n        scrollParent.removeEventListener('scroll', instance.update, passive);\n      });\n    }\n\n    if (resize) {\n      window.removeEventListener('resize', instance.update, passive);\n    }\n  };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'eventListeners',\n  enabled: true,\n  phase: 'write',\n  fn: function fn() {},\n  effect: effect,\n  data: {}\n};", "var hash = {\n  left: 'right',\n  right: 'left',\n  bottom: 'top',\n  top: 'bottom'\n};\nexport default function getOppositePlacement(placement) {\n  return placement.replace(/left|right|bottom|top/g, function (matched) {\n    return hash[matched];\n  });\n}", "var hash = {\n  start: 'end',\n  end: 'start'\n};\nexport default function getOppositeVariationPlacement(placement) {\n  return placement.replace(/start|end/g, function (matched) {\n    return hash[matched];\n  });\n}", "import getWindow from \"./getWindow.js\";\nexport default function getWindowScroll(node) {\n  var win = getWindow(node);\n  var scrollLeft = win.pageXOffset;\n  var scrollTop = win.pageYOffset;\n  return {\n    scrollLeft: scrollLeft,\n    scrollTop: scrollTop\n  };\n}", "import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nexport default function getWindowScrollBarX(element) {\n  // If <html> has a CSS width greater than the viewport, then this will be\n  // incorrect for RTL.\n  // Popper 1 is broken in this case and never had a bug report so let's assume\n  // it's not an issue. I don't think anyone ever specifies width on <html>\n  // anyway.\n  // Browsers where the left scrollbar doesn't cause an issue report `0` for\n  // this (e.g. Edge 2019, IE11, Safari)\n  return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n}", "import getWindow from \"./getWindow.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getViewportRect(element, strategy) {\n  var win = getWindow(element);\n  var html = getDocumentElement(element);\n  var visualViewport = win.visualViewport;\n  var width = html.clientWidth;\n  var height = html.clientHeight;\n  var x = 0;\n  var y = 0;\n\n  if (visualViewport) {\n    width = visualViewport.width;\n    height = visualViewport.height;\n    var layoutViewport = isLayoutViewport();\n\n    if (layoutViewport || !layoutViewport && strategy === 'fixed') {\n      x = visualViewport.offsetLeft;\n      y = visualViewport.offsetTop;\n    }\n  }\n\n  return {\n    width: width,\n    height: height,\n    x: x + getWindowScrollBarX(element),\n    y: y\n  };\n}", "import getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nimport { max } from \"../utils/math.js\"; // Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable\n\nexport default function getDocumentRect(element) {\n  var _element$ownerDocumen;\n\n  var html = getDocumentElement(element);\n  var winScroll = getWindowScroll(element);\n  var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n  var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n  var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n  var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n  var y = -winScroll.scrollTop;\n\n  if (getComputedStyle(body || html).direction === 'rtl') {\n    x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n  }\n\n  return {\n    width: width,\n    height: height,\n    x: x,\n    y: y\n  };\n}", "import getComputedStyle from \"./getComputedStyle.js\";\nexport default function isScrollParent(element) {\n  // Firefox wants us to check `-x` and `-y` variations as well\n  var _getComputedStyle = getComputedStyle(element),\n      overflow = _getComputedStyle.overflow,\n      overflowX = _getComputedStyle.overflowX,\n      overflowY = _getComputedStyle.overflowY;\n\n  return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}", "import getParentNode from \"./getParentNode.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nexport default function getScrollParent(node) {\n  if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n    // $FlowFixMe[incompatible-return]: assume body is always available\n    return node.ownerDocument.body;\n  }\n\n  if (isHTMLElement(node) && isScrollParent(node)) {\n    return node;\n  }\n\n  return getScrollParent(getParentNode(node));\n}", "import getScrollParent from \"./getScrollParent.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getWindow from \"./getWindow.js\";\nimport isScrollParent from \"./isScrollParent.js\";\n/*\ngiven a DOM element, return the list of all scroll parents, up the list of ancesors\nuntil we get to the top window object. This list is what we attach scroll listeners\nto, because if any of these parent elements scroll, we'll need to re-calculate the\nreference element's position.\n*/\n\nexport default function listScrollParents(element, list) {\n  var _element$ownerDocumen;\n\n  if (list === void 0) {\n    list = [];\n  }\n\n  var scrollParent = getScrollParent(element);\n  var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n  var win = getWindow(scrollParent);\n  var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n  var updatedList = list.concat(target);\n  return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n  updatedList.concat(listScrollParents(getParentNode(target)));\n}", "export default function rectToClientRect(rect) {\n  return Object.assign({}, rect, {\n    left: rect.x,\n    top: rect.y,\n    right: rect.x + rect.width,\n    bottom: rect.y + rect.height\n  });\n}", "import { viewport } from \"../enums.js\";\nimport getViewportRect from \"./getViewportRect.js\";\nimport getDocumentRect from \"./getDocumentRect.js\";\nimport listScrollParents from \"./listScrollParents.js\";\nimport getOffsetParent from \"./getOffsetParent.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport contains from \"./contains.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport rectToClientRect from \"../utils/rectToClientRect.js\";\nimport { max, min } from \"../utils/math.js\";\n\nfunction getInnerBoundingClientRect(element, strategy) {\n  var rect = getBoundingClientRect(element, false, strategy === 'fixed');\n  rect.top = rect.top + element.clientTop;\n  rect.left = rect.left + element.clientLeft;\n  rect.bottom = rect.top + element.clientHeight;\n  rect.right = rect.left + element.clientWidth;\n  rect.width = element.clientWidth;\n  rect.height = element.clientHeight;\n  rect.x = rect.left;\n  rect.y = rect.top;\n  return rect;\n}\n\nfunction getClientRectFromMixedType(element, clippingParent, strategy) {\n  return clippingParent === viewport ? rectToClientRect(getViewportRect(element, strategy)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n} // A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\n\n\nfunction getClippingParents(element) {\n  var clippingParents = listScrollParents(getParentNode(element));\n  var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;\n  var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n  if (!isElement(clipperElement)) {\n    return [];\n  } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n  return clippingParents.filter(function (clippingParent) {\n    return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n  });\n} // Gets the maximum area that the element is visible in due to any number of\n// clipping parents\n\n\nexport default function getClippingRect(element, boundary, rootBoundary, strategy) {\n  var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n  var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n  var firstClippingParent = clippingParents[0];\n  var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n    var rect = getClientRectFromMixedType(element, clippingParent, strategy);\n    accRect.top = max(rect.top, accRect.top);\n    accRect.right = min(rect.right, accRect.right);\n    accRect.bottom = min(rect.bottom, accRect.bottom);\n    accRect.left = max(rect.left, accRect.left);\n    return accRect;\n  }, getClientRectFromMixedType(element, firstClippingParent, strategy));\n  clippingRect.width = clippingRect.right - clippingRect.left;\n  clippingRect.height = clippingRect.bottom - clippingRect.top;\n  clippingRect.x = clippingRect.left;\n  clippingRect.y = clippingRect.top;\n  return clippingRect;\n}", "import getBasePlacement from \"./getBasePlacement.js\";\nimport getVariation from \"./getVariation.js\";\nimport getMainAxisFromPlacement from \"./getMainAxisFromPlacement.js\";\nimport { top, right, bottom, left, start, end } from \"../enums.js\";\nexport default function computeOffsets(_ref) {\n  var reference = _ref.reference,\n      element = _ref.element,\n      placement = _ref.placement;\n  var basePlacement = placement ? getBasePlacement(placement) : null;\n  var variation = placement ? getVariation(placement) : null;\n  var commonX = reference.x + reference.width / 2 - element.width / 2;\n  var commonY = reference.y + reference.height / 2 - element.height / 2;\n  var offsets;\n\n  switch (basePlacement) {\n    case top:\n      offsets = {\n        x: commonX,\n        y: reference.y - element.height\n      };\n      break;\n\n    case bottom:\n      offsets = {\n        x: commonX,\n        y: reference.y + reference.height\n      };\n      break;\n\n    case right:\n      offsets = {\n        x: reference.x + reference.width,\n        y: commonY\n      };\n      break;\n\n    case left:\n      offsets = {\n        x: reference.x - element.width,\n        y: commonY\n      };\n      break;\n\n    default:\n      offsets = {\n        x: reference.x,\n        y: reference.y\n      };\n  }\n\n  var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n  if (mainAxis != null) {\n    var len = mainAxis === 'y' ? 'height' : 'width';\n\n    switch (variation) {\n      case start:\n        offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n        break;\n\n      case end:\n        offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n        break;\n\n      default:\n    }\n  }\n\n  return offsets;\n}", "import getClippingRect from \"../dom-utils/getClippingRect.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getBoundingClientRect from \"../dom-utils/getBoundingClientRect.js\";\nimport computeOffsets from \"./computeOffsets.js\";\nimport rectToClientRect from \"./rectToClientRect.js\";\nimport { clippingParents, reference, popper, bottom, top, right, basePlacements, viewport } from \"../enums.js\";\nimport { isElement } from \"../dom-utils/instanceOf.js\";\nimport mergePaddingObject from \"./mergePaddingObject.js\";\nimport expandToHashMap from \"./expandToHashMap.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport default function detectOverflow(state, options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  var _options = options,\n      _options$placement = _options.placement,\n      placement = _options$placement === void 0 ? state.placement : _options$placement,\n      _options$strategy = _options.strategy,\n      strategy = _options$strategy === void 0 ? state.strategy : _options$strategy,\n      _options$boundary = _options.boundary,\n      boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n      _options$rootBoundary = _options.rootBoundary,\n      rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n      _options$elementConte = _options.elementContext,\n      elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n      _options$altBoundary = _options.altBoundary,\n      altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n      _options$padding = _options.padding,\n      padding = _options$padding === void 0 ? 0 : _options$padding;\n  var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n  var altContext = elementContext === popper ? reference : popper;\n  var popperRect = state.rects.popper;\n  var element = state.elements[altBoundary ? altContext : elementContext];\n  var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary, strategy);\n  var referenceClientRect = getBoundingClientRect(state.elements.reference);\n  var popperOffsets = computeOffsets({\n    reference: referenceClientRect,\n    element: popperRect,\n    strategy: 'absolute',\n    placement: placement\n  });\n  var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n  var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n  // 0 or negative = within the clipping rect\n\n  var overflowOffsets = {\n    top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n    bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n    left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n    right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n  };\n  var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n  if (elementContext === popper && offsetData) {\n    var offset = offsetData[placement];\n    Object.keys(overflowOffsets).forEach(function (key) {\n      var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n      var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n      overflowOffsets[key] += offset[axis] * multiply;\n    });\n  }\n\n  return overflowOffsets;\n}", "import getVariation from \"./getVariation.js\";\nimport { variationPlacements, basePlacements, placements as allPlacements } from \"../enums.js\";\nimport detectOverflow from \"./detectOverflow.js\";\nimport getBasePlacement from \"./getBasePlacement.js\";\nexport default function computeAutoPlacement(state, options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  var _options = options,\n      placement = _options.placement,\n      boundary = _options.boundary,\n      rootBoundary = _options.rootBoundary,\n      padding = _options.padding,\n      flipVariations = _options.flipVariations,\n      _options$allowedAutoP = _options.allowedAutoPlacements,\n      allowedAutoPlacements = _options$allowedAutoP === void 0 ? allPlacements : _options$allowedAutoP;\n  var variation = getVariation(placement);\n  var placements = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n    return getVariation(placement) === variation;\n  }) : basePlacements;\n  var allowedPlacements = placements.filter(function (placement) {\n    return allowedAutoPlacements.indexOf(placement) >= 0;\n  });\n\n  if (allowedPlacements.length === 0) {\n    allowedPlacements = placements;\n  } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n  var overflows = allowedPlacements.reduce(function (acc, placement) {\n    acc[placement] = detectOverflow(state, {\n      placement: placement,\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      padding: padding\n    })[getBasePlacement(placement)];\n    return acc;\n  }, {});\n  return Object.keys(overflows).sort(function (a, b) {\n    return overflows[a] - overflows[b];\n  });\n}", "import getOppositePlacement from \"../utils/getOppositePlacement.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getOppositeVariationPlacement from \"../utils/getOppositeVariationPlacement.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport computeAutoPlacement from \"../utils/computeAutoPlacement.js\";\nimport { bottom, top, start, right, left, auto } from \"../enums.js\";\nimport getVariation from \"../utils/getVariation.js\"; // eslint-disable-next-line import/no-unused-modules\n\nfunction getExpandedFallbackPlacements(placement) {\n  if (getBasePlacement(placement) === auto) {\n    return [];\n  }\n\n  var oppositePlacement = getOppositePlacement(placement);\n  return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n}\n\nfunction flip(_ref) {\n  var state = _ref.state,\n      options = _ref.options,\n      name = _ref.name;\n\n  if (state.modifiersData[name]._skip) {\n    return;\n  }\n\n  var _options$mainAxis = options.mainAxis,\n      checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n      _options$altAxis = options.altAxis,\n      checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n      specifiedFallbackPlacements = options.fallbackPlacements,\n      padding = options.padding,\n      boundary = options.boundary,\n      rootBoundary = options.rootBoundary,\n      altBoundary = options.altBoundary,\n      _options$flipVariatio = options.flipVariations,\n      flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n      allowedAutoPlacements = options.allowedAutoPlacements;\n  var preferredPlacement = state.options.placement;\n  var basePlacement = getBasePlacement(preferredPlacement);\n  var isBasePlacement = basePlacement === preferredPlacement;\n  var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n  var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n    return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n      placement: placement,\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      padding: padding,\n      flipVariations: flipVariations,\n      allowedAutoPlacements: allowedAutoPlacements\n    }) : placement);\n  }, []);\n  var referenceRect = state.rects.reference;\n  var popperRect = state.rects.popper;\n  var checksMap = new Map();\n  var makeFallbackChecks = true;\n  var firstFittingPlacement = placements[0];\n\n  for (var i = 0; i < placements.length; i++) {\n    var placement = placements[i];\n\n    var _basePlacement = getBasePlacement(placement);\n\n    var isStartVariation = getVariation(placement) === start;\n    var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n    var len = isVertical ? 'width' : 'height';\n    var overflow = detectOverflow(state, {\n      placement: placement,\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      altBoundary: altBoundary,\n      padding: padding\n    });\n    var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n    if (referenceRect[len] > popperRect[len]) {\n      mainVariationSide = getOppositePlacement(mainVariationSide);\n    }\n\n    var altVariationSide = getOppositePlacement(mainVariationSide);\n    var checks = [];\n\n    if (checkMainAxis) {\n      checks.push(overflow[_basePlacement] <= 0);\n    }\n\n    if (checkAltAxis) {\n      checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n    }\n\n    if (checks.every(function (check) {\n      return check;\n    })) {\n      firstFittingPlacement = placement;\n      makeFallbackChecks = false;\n      break;\n    }\n\n    checksMap.set(placement, checks);\n  }\n\n  if (makeFallbackChecks) {\n    // `2` may be desired in some cases \u2013 research later\n    var numberOfChecks = flipVariations ? 3 : 1;\n\n    var _loop = function _loop(_i) {\n      var fittingPlacement = placements.find(function (placement) {\n        var checks = checksMap.get(placement);\n\n        if (checks) {\n          return checks.slice(0, _i).every(function (check) {\n            return check;\n          });\n        }\n      });\n\n      if (fittingPlacement) {\n        firstFittingPlacement = fittingPlacement;\n        return \"break\";\n      }\n    };\n\n    for (var _i = numberOfChecks; _i > 0; _i--) {\n      var _ret = _loop(_i);\n\n      if (_ret === \"break\") break;\n    }\n  }\n\n  if (state.placement !== firstFittingPlacement) {\n    state.modifiersData[name]._skip = true;\n    state.placement = firstFittingPlacement;\n    state.reset = true;\n  }\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'flip',\n  enabled: true,\n  phase: 'main',\n  fn: flip,\n  requiresIfExists: ['offset'],\n  data: {\n    _skip: false\n  }\n};", "import { top, bottom, left, right } from \"../enums.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\n\nfunction getSideOffsets(overflow, rect, preventedOffsets) {\n  if (preventedOffsets === void 0) {\n    preventedOffsets = {\n      x: 0,\n      y: 0\n    };\n  }\n\n  return {\n    top: overflow.top - rect.height - preventedOffsets.y,\n    right: overflow.right - rect.width + preventedOffsets.x,\n    bottom: overflow.bottom - rect.height + preventedOffsets.y,\n    left: overflow.left - rect.width - preventedOffsets.x\n  };\n}\n\nfunction isAnySideFullyClipped(overflow) {\n  return [top, right, bottom, left].some(function (side) {\n    return overflow[side] >= 0;\n  });\n}\n\nfunction hide(_ref) {\n  var state = _ref.state,\n      name = _ref.name;\n  var referenceRect = state.rects.reference;\n  var popperRect = state.rects.popper;\n  var preventedOffsets = state.modifiersData.preventOverflow;\n  var referenceOverflow = detectOverflow(state, {\n    elementContext: 'reference'\n  });\n  var popperAltOverflow = detectOverflow(state, {\n    altBoundary: true\n  });\n  var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n  var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n  var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n  var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n  state.modifiersData[name] = {\n    referenceClippingOffsets: referenceClippingOffsets,\n    popperEscapeOffsets: popperEscapeOffsets,\n    isReferenceHidden: isReferenceHidden,\n    hasPopperEscaped: hasPopperEscaped\n  };\n  state.attributes.popper = Object.assign({}, state.attributes.popper, {\n    'data-popper-reference-hidden': isReferenceHidden,\n    'data-popper-escaped': hasPopperEscaped\n  });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'hide',\n  enabled: true,\n  phase: 'main',\n  requiresIfExists: ['preventOverflow'],\n  fn: hide\n};", "import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport { top, left, right, placements } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport function distanceAndSkiddingToXY(placement, rects, offset) {\n  var basePlacement = getBasePlacement(placement);\n  var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n  var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n    placement: placement\n  })) : offset,\n      skidding = _ref[0],\n      distance = _ref[1];\n\n  skidding = skidding || 0;\n  distance = (distance || 0) * invertDistance;\n  return [left, right].indexOf(basePlacement) >= 0 ? {\n    x: distance,\n    y: skidding\n  } : {\n    x: skidding,\n    y: distance\n  };\n}\n\nfunction offset(_ref2) {\n  var state = _ref2.state,\n      options = _ref2.options,\n      name = _ref2.name;\n  var _options$offset = options.offset,\n      offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n  var data = placements.reduce(function (acc, placement) {\n    acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n    return acc;\n  }, {});\n  var _data$state$placement = data[state.placement],\n      x = _data$state$placement.x,\n      y = _data$state$placement.y;\n\n  if (state.modifiersData.popperOffsets != null) {\n    state.modifiersData.popperOffsets.x += x;\n    state.modifiersData.popperOffsets.y += y;\n  }\n\n  state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'offset',\n  enabled: true,\n  phase: 'main',\n  requires: ['popperOffsets'],\n  fn: offset\n};", "import computeOffsets from \"../utils/computeOffsets.js\";\n\nfunction popperOffsets(_ref) {\n  var state = _ref.state,\n      name = _ref.name;\n  // Offsets are the actual position the popper needs to have to be\n  // properly positioned near its reference element\n  // This is the most basic placement, and will be adjusted by\n  // the modifiers in the next step\n  state.modifiersData[name] = computeOffsets({\n    reference: state.rects.reference,\n    element: state.rects.popper,\n    strategy: 'absolute',\n    placement: state.placement\n  });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'popperOffsets',\n  enabled: true,\n  phase: 'read',\n  fn: popperOffsets,\n  data: {}\n};", "export default function getAltAxis(axis) {\n  return axis === 'x' ? 'y' : 'x';\n}", "import { top, left, right, bottom, start } from \"../enums.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport getAltAxis from \"../utils/getAltAxis.js\";\nimport { within, withinMaxClamp } from \"../utils/within.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport getFreshSideObject from \"../utils/getFreshSideObject.js\";\nimport { min as mathMin, max as mathMax } from \"../utils/math.js\";\n\nfunction preventOverflow(_ref) {\n  var state = _ref.state,\n      options = _ref.options,\n      name = _ref.name;\n  var _options$mainAxis = options.mainAxis,\n      checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n      _options$altAxis = options.altAxis,\n      checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n      boundary = options.boundary,\n      rootBoundary = options.rootBoundary,\n      altBoundary = options.altBoundary,\n      padding = options.padding,\n      _options$tether = options.tether,\n      tether = _options$tether === void 0 ? true : _options$tether,\n      _options$tetherOffset = options.tetherOffset,\n      tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n  var overflow = detectOverflow(state, {\n    boundary: boundary,\n    rootBoundary: rootBoundary,\n    padding: padding,\n    altBoundary: altBoundary\n  });\n  var basePlacement = getBasePlacement(state.placement);\n  var variation = getVariation(state.placement);\n  var isBasePlacement = !variation;\n  var mainAxis = getMainAxisFromPlacement(basePlacement);\n  var altAxis = getAltAxis(mainAxis);\n  var popperOffsets = state.modifiersData.popperOffsets;\n  var referenceRect = state.rects.reference;\n  var popperRect = state.rects.popper;\n  var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n    placement: state.placement\n  })) : tetherOffset;\n  var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? {\n    mainAxis: tetherOffsetValue,\n    altAxis: tetherOffsetValue\n  } : Object.assign({\n    mainAxis: 0,\n    altAxis: 0\n  }, tetherOffsetValue);\n  var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null;\n  var data = {\n    x: 0,\n    y: 0\n  };\n\n  if (!popperOffsets) {\n    return;\n  }\n\n  if (checkMainAxis) {\n    var _offsetModifierState$;\n\n    var mainSide = mainAxis === 'y' ? top : left;\n    var altSide = mainAxis === 'y' ? bottom : right;\n    var len = mainAxis === 'y' ? 'height' : 'width';\n    var offset = popperOffsets[mainAxis];\n    var min = offset + overflow[mainSide];\n    var max = offset - overflow[altSide];\n    var additive = tether ? -popperRect[len] / 2 : 0;\n    var minLen = variation === start ? referenceRect[len] : popperRect[len];\n    var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n    // outside the reference bounds\n\n    var arrowElement = state.elements.arrow;\n    var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n      width: 0,\n      height: 0\n    };\n    var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n    var arrowPaddingMin = arrowPaddingObject[mainSide];\n    var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n    // to include its full size in the calculation. If the reference is small\n    // and near the edge of a boundary, the popper can overflow even if the\n    // reference is not overflowing as well (e.g. virtual elements with no\n    // width or height)\n\n    var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n    var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;\n    var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis;\n    var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n    var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n    var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0;\n    var tetherMin = offset + minOffset - offsetModifierValue - clientOffset;\n    var tetherMax = offset + maxOffset - offsetModifierValue;\n    var preventedOffset = within(tether ? mathMin(min, tetherMin) : min, offset, tether ? mathMax(max, tetherMax) : max);\n    popperOffsets[mainAxis] = preventedOffset;\n    data[mainAxis] = preventedOffset - offset;\n  }\n\n  if (checkAltAxis) {\n    var _offsetModifierState$2;\n\n    var _mainSide = mainAxis === 'x' ? top : left;\n\n    var _altSide = mainAxis === 'x' ? bottom : right;\n\n    var _offset = popperOffsets[altAxis];\n\n    var _len = altAxis === 'y' ? 'height' : 'width';\n\n    var _min = _offset + overflow[_mainSide];\n\n    var _max = _offset - overflow[_altSide];\n\n    var isOriginSide = [top, left].indexOf(basePlacement) !== -1;\n\n    var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0;\n\n    var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis;\n\n    var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max;\n\n    var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max);\n\n    popperOffsets[altAxis] = _preventedOffset;\n    data[altAxis] = _preventedOffset - _offset;\n  }\n\n  state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'preventOverflow',\n  enabled: true,\n  phase: 'main',\n  fn: preventOverflow,\n  requiresIfExists: ['offset']\n};", "export { default as applyStyles } from \"./applyStyles.js\";\nexport { default as arrow } from \"./arrow.js\";\nexport { default as computeStyles } from \"./computeStyles.js\";\nexport { default as eventListeners } from \"./eventListeners.js\";\nexport { default as flip } from \"./flip.js\";\nexport { default as hide } from \"./hide.js\";\nexport { default as offset } from \"./offset.js\";\nexport { default as popperOffsets } from \"./popperOffsets.js\";\nexport { default as preventOverflow } from \"./preventOverflow.js\";", "export default function getHTMLElementScroll(element) {\n  return {\n    scrollLeft: element.scrollLeft,\n    scrollTop: element.scrollTop\n  };\n}", "import getWindowScroll from \"./getWindowScroll.js\";\nimport getWindow from \"./getWindow.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getHTMLElementScroll from \"./getHTMLElementScroll.js\";\nexport default function getNodeScroll(node) {\n  if (node === getWindow(node) || !isHTMLElement(node)) {\n    return getWindowScroll(node);\n  } else {\n    return getHTMLElementScroll(node);\n  }\n}", "import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getNodeScroll from \"./getNodeScroll.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport { round } from \"../utils/math.js\";\n\nfunction isElementScaled(element) {\n  var rect = element.getBoundingClientRect();\n  var scaleX = round(rect.width) / element.offsetWidth || 1;\n  var scaleY = round(rect.height) / element.offsetHeight || 1;\n  return scaleX !== 1 || scaleY !== 1;\n} // Returns the composite rect of an element relative to its offsetParent.\n// Composite means it takes into account transforms as well as layout.\n\n\nexport default function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n  if (isFixed === void 0) {\n    isFixed = false;\n  }\n\n  var isOffsetParentAnElement = isHTMLElement(offsetParent);\n  var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);\n  var documentElement = getDocumentElement(offsetParent);\n  var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled, isFixed);\n  var scroll = {\n    scrollLeft: 0,\n    scrollTop: 0\n  };\n  var offsets = {\n    x: 0,\n    y: 0\n  };\n\n  if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n    if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n    isScrollParent(documentElement)) {\n      scroll = getNodeScroll(offsetParent);\n    }\n\n    if (isHTMLElement(offsetParent)) {\n      offsets = getBoundingClientRect(offsetParent, true);\n      offsets.x += offsetParent.clientLeft;\n      offsets.y += offsetParent.clientTop;\n    } else if (documentElement) {\n      offsets.x = getWindowScrollBarX(documentElement);\n    }\n  }\n\n  return {\n    x: rect.left + scroll.scrollLeft - offsets.x,\n    y: rect.top + scroll.scrollTop - offsets.y,\n    width: rect.width,\n    height: rect.height\n  };\n}", "import { modifierPhases } from \"../enums.js\"; // source: https://stackoverflow.com/questions/49875255\n\nfunction order(modifiers) {\n  var map = new Map();\n  var visited = new Set();\n  var result = [];\n  modifiers.forEach(function (modifier) {\n    map.set(modifier.name, modifier);\n  }); // On visiting object, check for its dependencies and visit them recursively\n\n  function sort(modifier) {\n    visited.add(modifier.name);\n    var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n    requires.forEach(function (dep) {\n      if (!visited.has(dep)) {\n        var depModifier = map.get(dep);\n\n        if (depModifier) {\n          sort(depModifier);\n        }\n      }\n    });\n    result.push(modifier);\n  }\n\n  modifiers.forEach(function (modifier) {\n    if (!visited.has(modifier.name)) {\n      // check for visited object\n      sort(modifier);\n    }\n  });\n  return result;\n}\n\nexport default function orderModifiers(modifiers) {\n  // order based on dependencies\n  var orderedModifiers = order(modifiers); // order based on phase\n\n  return modifierPhases.reduce(function (acc, phase) {\n    return acc.concat(orderedModifiers.filter(function (modifier) {\n      return modifier.phase === phase;\n    }));\n  }, []);\n}", "export default function debounce(fn) {\n  var pending;\n  return function () {\n    if (!pending) {\n      pending = new Promise(function (resolve) {\n        Promise.resolve().then(function () {\n          pending = undefined;\n          resolve(fn());\n        });\n      });\n    }\n\n    return pending;\n  };\n}", "export default function mergeByName(modifiers) {\n  var merged = modifiers.reduce(function (merged, current) {\n    var existing = merged[current.name];\n    merged[current.name] = existing ? Object.assign({}, existing, current, {\n      options: Object.assign({}, existing.options, current.options),\n      data: Object.assign({}, existing.data, current.data)\n    }) : current;\n    return merged;\n  }, {}); // IE11 does not support Object.values\n\n  return Object.keys(merged).map(function (key) {\n    return merged[key];\n  });\n}", "import getCompositeRect from \"./dom-utils/getCompositeRect.js\";\nimport getLayoutRect from \"./dom-utils/getLayoutRect.js\";\nimport listScrollParents from \"./dom-utils/listScrollParents.js\";\nimport getOffsetParent from \"./dom-utils/getOffsetParent.js\";\nimport orderModifiers from \"./utils/orderModifiers.js\";\nimport debounce from \"./utils/debounce.js\";\nimport mergeByName from \"./utils/mergeByName.js\";\nimport detectOverflow from \"./utils/detectOverflow.js\";\nimport { isElement } from \"./dom-utils/instanceOf.js\";\nvar DEFAULT_OPTIONS = {\n  placement: 'bottom',\n  modifiers: [],\n  strategy: 'absolute'\n};\n\nfunction areValidElements() {\n  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n    args[_key] = arguments[_key];\n  }\n\n  return !args.some(function (element) {\n    return !(element && typeof element.getBoundingClientRect === 'function');\n  });\n}\n\nexport function popperGenerator(generatorOptions) {\n  if (generatorOptions === void 0) {\n    generatorOptions = {};\n  }\n\n  var _generatorOptions = generatorOptions,\n      _generatorOptions$def = _generatorOptions.defaultModifiers,\n      defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n      _generatorOptions$def2 = _generatorOptions.defaultOptions,\n      defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n  return function createPopper(reference, popper, options) {\n    if (options === void 0) {\n      options = defaultOptions;\n    }\n\n    var state = {\n      placement: 'bottom',\n      orderedModifiers: [],\n      options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n      modifiersData: {},\n      elements: {\n        reference: reference,\n        popper: popper\n      },\n      attributes: {},\n      styles: {}\n    };\n    var effectCleanupFns = [];\n    var isDestroyed = false;\n    var instance = {\n      state: state,\n      setOptions: function setOptions(setOptionsAction) {\n        var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;\n        cleanupModifierEffects();\n        state.options = Object.assign({}, defaultOptions, state.options, options);\n        state.scrollParents = {\n          reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n          popper: listScrollParents(popper)\n        }; // Orders the modifiers based on their dependencies and `phase`\n        // properties\n\n        var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n        state.orderedModifiers = orderedModifiers.filter(function (m) {\n          return m.enabled;\n        });\n        runModifierEffects();\n        return instance.update();\n      },\n      // Sync update \u2013 it will always be executed, even if not necessary. This\n      // is useful for low frequency updates where sync behavior simplifies the\n      // logic.\n      // For high frequency updates (e.g. `resize` and `scroll` events), always\n      // prefer the async Popper#update method\n      forceUpdate: function forceUpdate() {\n        if (isDestroyed) {\n          return;\n        }\n\n        var _state$elements = state.elements,\n            reference = _state$elements.reference,\n            popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n        // anymore\n\n        if (!areValidElements(reference, popper)) {\n          return;\n        } // Store the reference and popper rects to be read by modifiers\n\n\n        state.rects = {\n          reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n          popper: getLayoutRect(popper)\n        }; // Modifiers have the ability to reset the current update cycle. The\n        // most common use case for this is the `flip` modifier changing the\n        // placement, which then needs to re-run all the modifiers, because the\n        // logic was previously ran for the previous placement and is therefore\n        // stale/incorrect\n\n        state.reset = false;\n        state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n        // is filled with the initial data specified by the modifier. This means\n        // it doesn't persist and is fresh on each update.\n        // To ensure persistent data, use `${name}#persistent`\n\n        state.orderedModifiers.forEach(function (modifier) {\n          return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n        });\n\n        for (var index = 0; index < state.orderedModifiers.length; index++) {\n          if (state.reset === true) {\n            state.reset = false;\n            index = -1;\n            continue;\n          }\n\n          var _state$orderedModifie = state.orderedModifiers[index],\n              fn = _state$orderedModifie.fn,\n              _state$orderedModifie2 = _state$orderedModifie.options,\n              _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n              name = _state$orderedModifie.name;\n\n          if (typeof fn === 'function') {\n            state = fn({\n              state: state,\n              options: _options,\n              name: name,\n              instance: instance\n            }) || state;\n          }\n        }\n      },\n      // Async and optimistically optimized update \u2013 it will not be executed if\n      // not necessary (debounced to run at most once-per-tick)\n      update: debounce(function () {\n        return new Promise(function (resolve) {\n          instance.forceUpdate();\n          resolve(state);\n        });\n      }),\n      destroy: function destroy() {\n        cleanupModifierEffects();\n        isDestroyed = true;\n      }\n    };\n\n    if (!areValidElements(reference, popper)) {\n      return instance;\n    }\n\n    instance.setOptions(options).then(function (state) {\n      if (!isDestroyed && options.onFirstUpdate) {\n        options.onFirstUpdate(state);\n      }\n    }); // Modifiers have the ability to execute arbitrary code before the first\n    // update cycle runs. They will be executed in the same order as the update\n    // cycle. This is useful when a modifier adds some persistent data that\n    // other modifiers need to use, but the modifier is run after the dependent\n    // one.\n\n    function runModifierEffects() {\n      state.orderedModifiers.forEach(function (_ref) {\n        var name = _ref.name,\n            _ref$options = _ref.options,\n            options = _ref$options === void 0 ? {} : _ref$options,\n            effect = _ref.effect;\n\n        if (typeof effect === 'function') {\n          var cleanupFn = effect({\n            state: state,\n            name: name,\n            instance: instance,\n            options: options\n          });\n\n          var noopFn = function noopFn() {};\n\n          effectCleanupFns.push(cleanupFn || noopFn);\n        }\n      });\n    }\n\n    function cleanupModifierEffects() {\n      effectCleanupFns.forEach(function (fn) {\n        return fn();\n      });\n      effectCleanupFns = [];\n    }\n\n    return instance;\n  };\n}\nexport var createPopper = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\nexport { detectOverflow };", "import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nimport offset from \"./modifiers/offset.js\";\nimport flip from \"./modifiers/flip.js\";\nimport preventOverflow from \"./modifiers/preventOverflow.js\";\nimport arrow from \"./modifiers/arrow.js\";\nimport hide from \"./modifiers/hide.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles, offset, flip, preventOverflow, arrow, hide];\nvar createPopper = /*#__PURE__*/popperGenerator({\n  defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow }; // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper as createPopperLite } from \"./popper-lite.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport * from \"./modifiers/index.js\";", "export * from \"./enums.js\";\nexport * from \"./modifiers/index.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport { popperGenerator, detectOverflow, createPopper as createPopperBase } from \"./createPopper.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper } from \"./popper.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper as createPopperLite } from \"./popper-lite.js\";", "export const ROUND_ARROW =\n  '<svg width=\"16\" height=\"6\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M0 6s1.796-.013 4.67-3.615C5.851.9 6.93.006 8 0c1.07-.006 2.148.887 3.343 2.385C14.233 6.005 16 6 16 6H0z\"></svg>';\n\nexport const BOX_CLASS = `__NAMESPACE_PREFIX__-box`;\nexport const CONTENT_CLASS = `__NAMESPACE_PREFIX__-content`;\nexport const BACKDROP_CLASS = `__NAMESPACE_PREFIX__-backdrop`;\nexport const ARROW_CLASS = `__NAMESPACE_PREFIX__-arrow`;\nexport const SVG_ARROW_CLASS = `__NAMESPACE_PREFIX__-svg-arrow`;\n\nexport const TOUCH_OPTIONS = {passive: true, capture: true};\n\nexport const TIPPY_DEFAULT_APPEND_TO = () => document.body;\n", "import {BasePlacement, Placement} from './types';\n\nexport function hasOwnProperty(\n  obj: Record<string, unknown>,\n  key: string\n): boolean {\n  return {}.hasOwnProperty.call(obj, key);\n}\n\nexport function getValueAtIndexOrReturn<T>(\n  value: T | [T | null, T | null],\n  index: number,\n  defaultValue: T | [T, T]\n): T {\n  if (Array.isArray(value)) {\n    const v = value[index];\n    return v == null\n      ? Array.isArray(defaultValue)\n        ? defaultValue[index]\n        : defaultValue\n      : v;\n  }\n\n  return value;\n}\n\nexport function isType(value: any, type: string): boolean {\n  const str = {}.toString.call(value);\n  return str.indexOf('[object') === 0 && str.indexOf(`${type}]`) > -1;\n}\n\nexport function invokeWithArgsOrReturn(value: any, args: any[]): any {\n  return typeof value === 'function' ? value(...args) : value;\n}\n\nexport function debounce<T>(\n  fn: (arg: T) => void,\n  ms: number\n): (arg: T) => void {\n  // Avoid wrapping in `setTimeout` if ms is 0 anyway\n  if (ms === 0) {\n    return fn;\n  }\n\n  let timeout: any;\n\n  return (arg): void => {\n    clearTimeout(timeout);\n    timeout = setTimeout(() => {\n      fn(arg);\n    }, ms);\n  };\n}\n\nexport function removeProperties<T>(obj: T, keys: string[]): Partial<T> {\n  const clone = {...obj};\n  keys.forEach((key) => {\n    delete (clone as any)[key];\n  });\n  return clone;\n}\n\nexport function splitBySpaces(value: string): string[] {\n  return value.split(/\\s+/).filter(Boolean);\n}\n\nexport function normalizeToArray<T>(value: T | T[]): T[] {\n  return ([] as T[]).concat(value);\n}\n\nexport function pushIfUnique<T>(arr: T[], value: T): void {\n  if (arr.indexOf(value) === -1) {\n    arr.push(value);\n  }\n}\n\nexport function appendPxIfNumber(value: string | number): string {\n  return typeof value === 'number' ? `${value}px` : value;\n}\n\nexport function unique<T>(arr: T[]): T[] {\n  return arr.filter((item, index) => arr.indexOf(item) === index);\n}\n\nexport function getNumber(value: string | number): number {\n  return typeof value === 'number' ? value : parseFloat(value);\n}\n\nexport function getBasePlacement(placement: Placement): BasePlacement {\n  return placement.split('-')[0] as BasePlacement;\n}\n\nexport function arrayFrom(value: ArrayLike<any>): any[] {\n  return [].slice.call(value);\n}\n\nexport function removeUndefinedProps(\n  obj: Record<string, unknown>\n): Partial<Record<string, unknown>> {\n  return Object.keys(obj).reduce((acc, key) => {\n    if (obj[key] !== undefined) {\n      (acc as any)[key] = obj[key];\n    }\n\n    return acc;\n  }, {});\n}\n", "import {ReferenceElement, Targets} from './types';\nimport {PopperTreeData} from './types-internal';\nimport {arrayFrom, isType, normalizeToArray, getBasePlacement} from './utils';\n\nexport function div(): HTMLDivElement {\n  return document.createElement('div');\n}\n\nexport function isElement(value: unknown): value is Element | DocumentFragment {\n  return ['Element', 'Fragment'].some((type) => isType(value, type));\n}\n\nexport function isNodeList(value: unknown): value is NodeList {\n  return isType(value, 'NodeList');\n}\n\nexport function isMouseEvent(value: unknown): value is MouseEvent {\n  return isType(value, 'MouseEvent');\n}\n\nexport function isReferenceElement(value: any): value is ReferenceElement {\n  return !!(value && value._tippy && value._tippy.reference === value);\n}\n\nexport function getArrayOfElements(value: Targets): Element[] {\n  if (isElement(value)) {\n    return [value];\n  }\n\n  if (isNodeList(value)) {\n    return arrayFrom(value);\n  }\n\n  if (Array.isArray(value)) {\n    return value;\n  }\n\n  return arrayFrom(document.querySelectorAll(value));\n}\n\nexport function setTransitionDuration(\n  els: (HTMLDivElement | null)[],\n  value: number\n): void {\n  els.forEach((el) => {\n    if (el) {\n      el.style.transitionDuration = `${value}ms`;\n    }\n  });\n}\n\nexport function setVisibilityState(\n  els: (HTMLDivElement | null)[],\n  state: 'visible' | 'hidden'\n): void {\n  els.forEach((el) => {\n    if (el) {\n      el.setAttribute('data-state', state);\n    }\n  });\n}\n\nexport function getOwnerDocument(\n  elementOrElements: Element | Element[]\n): Document {\n  const [element] = normalizeToArray(elementOrElements);\n\n  // Elements created via a <template> have an ownerDocument with no reference to the body\n  return element?.ownerDocument?.body ? element.ownerDocument : document;\n}\n\nexport function isCursorOutsideInteractiveBorder(\n  popperTreeData: PopperTreeData[],\n  event: MouseEvent\n): boolean {\n  const {clientX, clientY} = event;\n\n  return popperTreeData.every(({popperRect, popperState, props}) => {\n    const {interactiveBorder} = props;\n    const basePlacement = getBasePlacement(popperState.placement);\n    const offsetData = popperState.modifiersData.offset;\n\n    if (!offsetData) {\n      return true;\n    }\n\n    const topDistance = basePlacement === 'bottom' ? offsetData.top!.y : 0;\n    const bottomDistance = basePlacement === 'top' ? offsetData.bottom!.y : 0;\n    const leftDistance = basePlacement === 'right' ? offsetData.left!.x : 0;\n    const rightDistance = basePlacement === 'left' ? offsetData.right!.x : 0;\n\n    const exceedsTop =\n      popperRect.top - clientY + topDistance > interactiveBorder;\n    const exceedsBottom =\n      clientY - popperRect.bottom - bottomDistance > interactiveBorder;\n    const exceedsLeft =\n      popperRect.left - clientX + leftDistance > interactiveBorder;\n    const exceedsRight =\n      clientX - popperRect.right - rightDistance > interactiveBorder;\n\n    return exceedsTop || exceedsBottom || exceedsLeft || exceedsRight;\n  });\n}\n\nexport function updateTransitionEndListener(\n  box: HTMLDivElement,\n  action: 'add' | 'remove',\n  listener: (event: TransitionEvent) => void\n): void {\n  const method = `${action}EventListener` as\n    | 'addEventListener'\n    | 'removeEventListener';\n\n  // some browsers apparently support `transition` (unprefixed) but only fire\n  // `webkitTransitionEnd`...\n  ['transitionend', 'webkitTransitionEnd'].forEach((event) => {\n    box[method](event, listener as EventListener);\n  });\n}\n\n/**\n * Compared to xxx.contains, this function works for dom structures with shadow\n * dom\n */\nexport function actualContains(parent: Element, child: Element): boolean {\n  let target = child;\n  while (target) {\n    if (parent.contains(target)) {\n      return true;\n    }\n    target = (target.getRootNode?.() as any)?.host;\n  }\n  return false;\n}\n", "import {TOUCH_OPTIONS} from './constants';\nimport {isReferenceElement} from './dom-utils';\n\nexport const currentInput = {isTouch: false};\nlet lastMouseMoveTime = 0;\n\n/**\n * When a `touchstart` event is fired, it's assumed the user is using touch\n * input. We'll bind a `mousemove` event listener to listen for mouse input in\n * the future. This way, the `isTouch` property is fully dynamic and will handle\n * hybrid devices that use a mix of touch + mouse input.\n */\nexport function onDocumentTouchStart(): void {\n  if (currentInput.isTouch) {\n    return;\n  }\n\n  currentInput.isTouch = true;\n\n  if (window.performance) {\n    document.addEventListener('mousemove', onDocumentMouseMove);\n  }\n}\n\n/**\n * When two `mousemove` event are fired consecutively within 20ms, it's assumed\n * the user is using mouse input again. `mousemove` can fire on touch devices as\n * well, but very rarely that quickly.\n */\nexport function onDocumentMouseMove(): void {\n  const now = performance.now();\n\n  if (now - lastMouseMoveTime < 20) {\n    currentInput.isTouch = false;\n\n    document.removeEventListener('mousemove', onDocumentMouseMove);\n  }\n\n  lastMouseMoveTime = now;\n}\n\n/**\n * When an element is in focus and has a tippy, leaving the tab/window and\n * returning causes it to show again. For mouse users this is unexpected, but\n * for keyboard use it makes sense.\n * TODO: find a better technique to solve this problem\n */\nexport function onWindowBlur(): void {\n  const activeElement = document.activeElement as HTMLElement | null;\n\n  if (isReferenceElement(activeElement)) {\n    const instance = activeElement._tippy!;\n\n    if (activeElement.blur && !instance.state.isVisible) {\n      activeElement.blur();\n    }\n  }\n}\n\nexport default function bindGlobalEventListeners(): void {\n  document.addEventListener('touchstart', onDocumentTouchStart, TOUCH_OPTIONS);\n  window.addEventListener('blur', onWindowBlur);\n}\n", "export const isBrowser =\n  typeof window !== 'undefined' && typeof document !== 'undefined';\n\nexport const isIE11 = isBrowser\n  ? // @ts-ignore\n    !!window.msCrypto\n  : false;\n", "import {Targets} from './types';\n\nexport function createMemoryLeakWarning(method: string): string {\n  const txt = method === 'destroy' ? 'n already-' : ' ';\n\n  return [\n    `${method}() was called on a${txt}destroyed instance. This is a no-op but`,\n    'indicates a potential memory leak.',\n  ].join(' ');\n}\n\nexport function clean(value: string): string {\n  const spacesAndTabs = /[ \\t]{2,}/g;\n  const lineStartWithSpaces = /^[ \\t]*/gm;\n\n  return value\n    .replace(spacesAndTabs, ' ')\n    .replace(lineStartWithSpaces, '')\n    .trim();\n}\n\nfunction getDevMessage(message: string): string {\n  return clean(`\n  %ctippy.js\n\n  %c${clean(message)}\n\n  %c👷‍ This is a development-only message. It will be removed in production.\n  `);\n}\n\nexport function getFormattedMessage(message: string): string[] {\n  return [\n    getDevMessage(message),\n    // title\n    'color: #00C584; font-size: 1.3em; font-weight: bold;',\n    // message\n    'line-height: 1.5',\n    // footer\n    'color: #a6a095;',\n  ];\n}\n\n// Assume warnings and errors never have the same message\nlet visitedMessages: Set<string>;\nif (__DEV__) {\n  resetVisitedMessages();\n}\n\nexport function resetVisitedMessages(): void {\n  visitedMessages = new Set();\n}\n\nexport function warnWhen(condition: boolean, message: string): void {\n  if (condition && !visitedMessages.has(message)) {\n    visitedMessages.add(message);\n    console.warn(...getFormattedMessage(message));\n  }\n}\n\nexport function errorWhen(condition: boolean, message: string): void {\n  if (condition && !visitedMessages.has(message)) {\n    visitedMessages.add(message);\n    console.error(...getFormattedMessage(message));\n  }\n}\n\nexport function validateTargets(targets: Targets): void {\n  const didPassFalsyValue = !targets;\n  const didPassPlainObject =\n    Object.prototype.toString.call(targets) === '[object Object]' &&\n    !(targets as any).addEventListener;\n\n  errorWhen(\n    didPassFalsyValue,\n    [\n      'tippy() was passed',\n      '`' + String(targets) + '`',\n      'as its targets (first) argument. Valid types are: String, Element,',\n      'Element[], or NodeList.',\n    ].join(' ')\n  );\n\n  errorWhen(\n    didPassPlainObject,\n    [\n      'tippy() was passed a plain object which is not supported as an argument',\n      'for virtual positioning. Use props.getReferenceClientRect instead.',\n    ].join(' ')\n  );\n}\n", "import {DefaultProps, Plugin, Props, ReferenceElement, Tippy} from './types';\nimport {\n  hasOwnProperty,\n  removeProperties,\n  invokeWithArgsOrReturn,\n} from './utils';\nimport {warnWhen} from './validation';\nimport {TIPPY_DEFAULT_APPEND_TO} from './constants';\n\nconst pluginProps = {\n  animateFill: false,\n  followCursor: false,\n  inlinePositioning: false,\n  sticky: false,\n};\n\nconst renderProps = {\n  allowHTML: false,\n  animation: 'fade',\n  arrow: true,\n  content: '',\n  inertia: false,\n  maxWidth: 350,\n  role: 'tooltip',\n  theme: '',\n  zIndex: 9999,\n};\n\nexport const defaultProps: DefaultProps = {\n  appendTo: TIPPY_DEFAULT_APPEND_TO,\n  aria: {\n    content: 'auto',\n    expanded: 'auto',\n  },\n  delay: 0,\n  duration: [300, 250],\n  getReferenceClientRect: null,\n  hideOnClick: true,\n  ignoreAttributes: false,\n  interactive: false,\n  interactiveBorder: 2,\n  interactiveDebounce: 0,\n  moveTransition: '',\n  offset: [0, 10],\n  onAfterUpdate() {},\n  onBeforeUpdate() {},\n  onCreate() {},\n  onDestroy() {},\n  onHidden() {},\n  onHide() {},\n  onMount() {},\n  onShow() {},\n  onShown() {},\n  onTrigger() {},\n  onUntrigger() {},\n  onClickOutside() {},\n  placement: 'top',\n  plugins: [],\n  popperOptions: {},\n  render: null,\n  showOnCreate: false,\n  touch: true,\n  trigger: 'mouseenter focus',\n  triggerTarget: null,\n  ...pluginProps,\n  ...renderProps,\n};\n\nconst defaultKeys = Object.keys(defaultProps);\n\nexport const setDefaultProps: Tippy['setDefaultProps'] = (partialProps) => {\n  /* istanbul ignore else */\n  if (__DEV__) {\n    validateProps(partialProps, []);\n  }\n\n  const keys = Object.keys(partialProps) as Array<keyof DefaultProps>;\n  keys.forEach((key) => {\n    (defaultProps as any)[key] = partialProps[key];\n  });\n};\n\nexport function getExtendedPassedProps(\n  passedProps: Partial<Props> & Record<string, unknown>\n): Partial<Props> {\n  const plugins = passedProps.plugins || [];\n  const pluginProps = plugins.reduce<Record<string, unknown>>((acc, plugin) => {\n    const {name, defaultValue} = plugin;\n\n    if (name) {\n      acc[name] =\n        passedProps[name] !== undefined\n          ? passedProps[name]\n          : (defaultProps as any)[name] ?? defaultValue;\n    }\n\n    return acc;\n  }, {});\n\n  return {\n    ...passedProps,\n    ...pluginProps,\n  };\n}\n\nexport function getDataAttributeProps(\n  reference: ReferenceElement,\n  plugins: Plugin[]\n): Record<string, unknown> {\n  const propKeys = plugins\n    ? Object.keys(getExtendedPassedProps({...defaultProps, plugins}))\n    : defaultKeys;\n\n  const props = propKeys.reduce(\n    (acc: Partial<Props> & Record<string, unknown>, key) => {\n      const valueAsString = (\n        reference.getAttribute(`data-tippy-${key}`) || ''\n      ).trim();\n\n      if (!valueAsString) {\n        return acc;\n      }\n\n      if (key === 'content') {\n        acc[key] = valueAsString;\n      } else {\n        try {\n          acc[key] = JSON.parse(valueAsString);\n        } catch (e) {\n          acc[key] = valueAsString;\n        }\n      }\n\n      return acc;\n    },\n    {}\n  );\n\n  return props;\n}\n\nexport function evaluateProps(\n  reference: ReferenceElement,\n  props: Props\n): Props {\n  const out = {\n    ...props,\n    content: invokeWithArgsOrReturn(props.content, [reference]),\n    ...(props.ignoreAttributes\n      ? {}\n      : getDataAttributeProps(reference, props.plugins)),\n  };\n\n  out.aria = {\n    ...defaultProps.aria,\n    ...out.aria,\n  };\n\n  out.aria = {\n    expanded:\n      out.aria.expanded === 'auto' ? props.interactive : out.aria.expanded,\n    content:\n      out.aria.content === 'auto'\n        ? props.interactive\n          ? null\n          : 'describedby'\n        : out.aria.content,\n  };\n\n  return out;\n}\n\nexport function validateProps(\n  partialProps: Partial<Props> = {},\n  plugins: Plugin[] = []\n): void {\n  const keys = Object.keys(partialProps) as Array<keyof Props>;\n  keys.forEach((prop) => {\n    const nonPluginProps = removeProperties(\n      defaultProps,\n      Object.keys(pluginProps)\n    );\n\n    let didPassUnknownProp = !hasOwnProperty(nonPluginProps, prop);\n\n    // Check if the prop exists in `plugins`\n    if (didPassUnknownProp) {\n      didPassUnknownProp =\n        plugins.filter((plugin) => plugin.name === prop).length === 0;\n    }\n\n    warnWhen(\n      didPassUnknownProp,\n      [\n        `\\`${prop}\\``,\n        \"is not a valid prop. You may have spelled it incorrectly, or if it's\",\n        'a plugin, forgot to pass it in an array as props.plugins.',\n        '\\n\\n',\n        'All props: https://atomiks.github.io/tippyjs/v6/all-props/\\n',\n        'Plugins: https://atomiks.github.io/tippyjs/v6/plugins/',\n      ].join(' ')\n    );\n  });\n}\n", "import {\n  ARROW_CLASS,\n  BACKDROP_CLASS,\n  BOX_CLASS,\n  CONTENT_CLASS,\n  SVG_ARROW_CLASS,\n} from './constants';\nimport {div, isElement} from './dom-utils';\nimport {Instance, PopperElement, Props} from './types';\nimport {PopperChildren} from './types-internal';\nimport {arrayFrom} from './utils';\n\n// Firefox extensions don't allow .innerHTML = \"...\" property. This tricks it.\nconst innerHTML = (): 'innerHTML' => 'innerHTML';\n\nfunction dangerouslySetInnerHTML(element: Element, html: string): void {\n  element[innerHTML()] = html;\n}\n\nfunction createArrowElement(value: Props['arrow']): HTMLDivElement {\n  const arrow = div();\n\n  if (value === true) {\n    arrow.className = ARROW_CLASS;\n  } else {\n    arrow.className = SVG_ARROW_CLASS;\n\n    if (isElement(value)) {\n      arrow.appendChild(value);\n    } else {\n      dangerouslySetInnerHTML(arrow, value as string);\n    }\n  }\n\n  return arrow;\n}\n\nexport function setContent(content: HTMLDivElement, props: Props): void {\n  if (isElement(props.content)) {\n    dangerouslySetInnerHTML(content, '');\n    content.appendChild(props.content);\n  } else if (typeof props.content !== 'function') {\n    if (props.allowHTML) {\n      dangerouslySetInnerHTML(content, props.content);\n    } else {\n      content.textContent = props.content;\n    }\n  }\n}\n\nexport function getChildren(popper: PopperElement): PopperChildren {\n  const box = popper.firstElementChild as HTMLDivElement;\n  const boxChildren = arrayFrom(box.children);\n\n  return {\n    box,\n    content: boxChildren.find((node) => node.classList.contains(CONTENT_CLASS)),\n    arrow: boxChildren.find(\n      (node) =>\n        node.classList.contains(ARROW_CLASS) ||\n        node.classList.contains(SVG_ARROW_CLASS)\n    ),\n    backdrop: boxChildren.find((node) =>\n      node.classList.contains(BACKDROP_CLASS)\n    ),\n  };\n}\n\nexport function render(\n  instance: Instance\n): {\n  popper: PopperElement;\n  onUpdate?: (prevProps: Props, nextProps: Props) => void;\n} {\n  const popper = div();\n\n  const box = div();\n  box.className = BOX_CLASS;\n  box.setAttribute('data-state', 'hidden');\n  box.setAttribute('tabindex', '-1');\n\n  const content = div();\n  content.className = CONTENT_CLASS;\n  content.setAttribute('data-state', 'hidden');\n\n  setContent(content, instance.props);\n\n  popper.appendChild(box);\n  box.appendChild(content);\n\n  onUpdate(instance.props, instance.props);\n\n  function onUpdate(prevProps: Props, nextProps: Props): void {\n    const {box, content, arrow} = getChildren(popper);\n\n    if (nextProps.theme) {\n      box.setAttribute('data-theme', nextProps.theme);\n    } else {\n      box.removeAttribute('data-theme');\n    }\n\n    if (typeof nextProps.animation === 'string') {\n      box.setAttribute('data-animation', nextProps.animation);\n    } else {\n      box.removeAttribute('data-animation');\n    }\n\n    if (nextProps.inertia) {\n      box.setAttribute('data-inertia', '');\n    } else {\n      box.removeAttribute('data-inertia');\n    }\n\n    box.style.maxWidth =\n      typeof nextProps.maxWidth === 'number'\n        ? `${nextProps.maxWidth}px`\n        : nextProps.maxWidth;\n\n    if (nextProps.role) {\n      box.setAttribute('role', nextProps.role);\n    } else {\n      box.removeAttribute('role');\n    }\n\n    if (\n      prevProps.content !== nextProps.content ||\n      prevProps.allowHTML !== nextProps.allowHTML\n    ) {\n      setContent(content, instance.props);\n    }\n\n    if (nextProps.arrow) {\n      if (!arrow) {\n        box.appendChild(createArrowElement(nextProps.arrow));\n      } else if (prevProps.arrow !== nextProps.arrow) {\n        box.removeChild(arrow);\n        box.appendChild(createArrowElement(nextProps.arrow));\n      }\n    } else if (arrow) {\n      box.removeChild(arrow!);\n    }\n  }\n\n  return {\n    popper,\n    onUpdate,\n  };\n}\n\n// Runtime check to identify if the render function is the default one; this\n// way we can apply default CSS transitions logic and it can be tree-shaken away\nrender.$$tippy = true;\n", "import {createPopper, StrictModifiers, Modifier} from '@popperjs/core';\nimport {currentInput} from './bindGlobalEventListeners';\nimport {isIE11} from './browser';\nimport {TIPPY_DEFAULT_APPEND_TO, TOUCH_OPTIONS} from './constants';\nimport {\n  actualContains,\n  div,\n  getOwnerDocument,\n  isCursorOutsideInteractiveBorder,\n  isMouseEvent,\n  setTransitionDuration,\n  setVisibilityState,\n  updateTransitionEndListener,\n} from './dom-utils';\nimport {defaultProps, evaluateProps, getExtendedPassedProps} from './props';\nimport {getChildren} from './template';\nimport {\n  Content,\n  Instance,\n  LifecycleHooks,\n  PopperElement,\n  Props,\n  ReferenceElement,\n} from './types';\nimport {ListenerObject, PopperTreeData, PopperChildren} from './types-internal';\nimport {\n  arrayFrom,\n  debounce,\n  getValueAtIndexOrReturn,\n  invokeWithArgsOrReturn,\n  normalizeToArray,\n  pushIfUnique,\n  splitBySpaces,\n  unique,\n  removeUndefinedProps,\n} from './utils';\nimport {createMemoryLeakWarning, errorWhen, warnWhen} from './validation';\n\nlet idCounter = 1;\nlet mouseMoveListeners: ((event: MouseEvent) => void)[] = [];\n\n// Used by `hideAll()`\nexport let mountedInstances: Instance[] = [];\n\nexport default function createTippy(\n  reference: ReferenceElement,\n  passedProps: Partial<Props>\n): Instance {\n  const props = evaluateProps(reference, {\n    ...defaultProps,\n    ...getExtendedPassedProps(removeUndefinedProps(passedProps)),\n  });\n\n  // ===========================================================================\n  // 🔒 Private members\n  // ===========================================================================\n  let showTimeout: any;\n  let hideTimeout: any;\n  let scheduleHideAnimationFrame: number;\n  let isVisibleFromClick = false;\n  let didHideDueToDocumentMouseDown = false;\n  let didTouchMove = false;\n  let ignoreOnFirstUpdate = false;\n  let lastTriggerEvent: Event | undefined;\n  let currentTransitionEndListener: (event: TransitionEvent) => void;\n  let onFirstUpdate: () => void;\n  let listeners: ListenerObject[] = [];\n  let debouncedOnMouseMove = debounce(onMouseMove, props.interactiveDebounce);\n  let currentTarget: Element;\n\n  // ===========================================================================\n  // 🔑 Public members\n  // ===========================================================================\n  const id = idCounter++;\n  const popperInstance = null;\n  const plugins = unique(props.plugins);\n\n  const state = {\n    // Is the instance currently enabled?\n    isEnabled: true,\n    // Is the tippy currently showing and not transitioning out?\n    isVisible: false,\n    // Has the instance been destroyed?\n    isDestroyed: false,\n    // Is the tippy currently mounted to the DOM?\n    isMounted: false,\n    // Has the tippy finished transitioning in?\n    isShown: false,\n  };\n\n  const instance: Instance = {\n    // properties\n    id,\n    reference,\n    popper: div(),\n    popperInstance,\n    props,\n    state,\n    plugins,\n    // methods\n    clearDelayTimeouts,\n    setProps,\n    setContent,\n    show,\n    hide,\n    hideWithInteractivity,\n    enable,\n    disable,\n    unmount,\n    destroy,\n  };\n\n  // TODO: Investigate why this early return causes a TDZ error in the tests —\n  // it doesn't seem to happen in the browser\n  /* istanbul ignore if */\n  if (!props.render) {\n    if (__DEV__) {\n      errorWhen(true, 'render() function has not been supplied.');\n    }\n\n    return instance;\n  }\n\n  // ===========================================================================\n  // Initial mutations\n  // ===========================================================================\n  const {popper, onUpdate} = props.render(instance);\n\n  popper.setAttribute('data-__NAMESPACE_PREFIX__-root', '');\n  popper.id = `__NAMESPACE_PREFIX__-${instance.id}`;\n\n  instance.popper = popper;\n  reference._tippy = instance;\n  popper._tippy = instance;\n\n  const pluginsHooks = plugins.map((plugin) => plugin.fn(instance));\n  const hasAriaExpanded = reference.hasAttribute('aria-expanded');\n\n  addListeners();\n  handleAriaExpandedAttribute();\n  handleStyles();\n\n  invokeHook('onCreate', [instance]);\n\n  if (props.showOnCreate) {\n    scheduleShow();\n  }\n\n  // Prevent a tippy with a delay from hiding if the cursor left then returned\n  // before it started hiding\n  popper.addEventListener('mouseenter', () => {\n    if (instance.props.interactive && instance.state.isVisible) {\n      instance.clearDelayTimeouts();\n    }\n  });\n\n  popper.addEventListener('mouseleave', () => {\n    if (\n      instance.props.interactive &&\n      instance.props.trigger.indexOf('mouseenter') >= 0\n    ) {\n      getDocument().addEventListener('mousemove', debouncedOnMouseMove);\n    }\n  });\n\n  return instance;\n\n  // ===========================================================================\n  // 🔒 Private methods\n  // ===========================================================================\n  function getNormalizedTouchSettings(): [string | boolean, number] {\n    const {touch} = instance.props;\n    return Array.isArray(touch) ? touch : [touch, 0];\n  }\n\n  function getIsCustomTouchBehavior(): boolean {\n    return getNormalizedTouchSettings()[0] === 'hold';\n  }\n\n  function getIsDefaultRenderFn(): boolean {\n    // @ts-ignore\n    return !!instance.props.render?.$$tippy;\n  }\n\n  function getCurrentTarget(): Element {\n    return currentTarget || reference;\n  }\n\n  function getDocument(): Document {\n    const parent = getCurrentTarget().parentNode as Element;\n    return parent ? getOwnerDocument(parent) : document;\n  }\n\n  function getDefaultTemplateChildren(): PopperChildren {\n    return getChildren(popper);\n  }\n\n  function getDelay(isShow: boolean): number {\n    // For touch or keyboard input, force `0` delay for UX reasons\n    // Also if the instance is mounted but not visible (transitioning out),\n    // ignore delay\n    if (\n      (instance.state.isMounted && !instance.state.isVisible) ||\n      currentInput.isTouch ||\n      (lastTriggerEvent && lastTriggerEvent.type === 'focus')\n    ) {\n      return 0;\n    }\n\n    return getValueAtIndexOrReturn(\n      instance.props.delay,\n      isShow ? 0 : 1,\n      defaultProps.delay\n    );\n  }\n\n  function handleStyles(fromHide = false): void {\n    popper.style.pointerEvents =\n      instance.props.interactive && !fromHide ? '' : 'none';\n    popper.style.zIndex = `${instance.props.zIndex}`;\n  }\n\n  function invokeHook(\n    hook: keyof LifecycleHooks,\n    args: [Instance, any?],\n    shouldInvokePropsHook = true\n  ): void {\n    pluginsHooks.forEach((pluginHooks) => {\n      if (pluginHooks[hook]) {\n        pluginHooks[hook]!(...args);\n      }\n    });\n\n    if (shouldInvokePropsHook) {\n      instance.props[hook](...args);\n    }\n  }\n\n  function handleAriaContentAttribute(): void {\n    const {aria} = instance.props;\n\n    if (!aria.content) {\n      return;\n    }\n\n    const attr = `aria-${aria.content}`;\n    const id = popper.id;\n    const nodes = normalizeToArray(instance.props.triggerTarget || reference);\n\n    nodes.forEach((node) => {\n      const currentValue = node.getAttribute(attr);\n\n      if (instance.state.isVisible) {\n        node.setAttribute(attr, currentValue ? `${currentValue} ${id}` : id);\n      } else {\n        const nextValue = currentValue && currentValue.replace(id, '').trim();\n\n        if (nextValue) {\n          node.setAttribute(attr, nextValue);\n        } else {\n          node.removeAttribute(attr);\n        }\n      }\n    });\n  }\n\n  function handleAriaExpandedAttribute(): void {\n    if (hasAriaExpanded || !instance.props.aria.expanded) {\n      return;\n    }\n\n    const nodes = normalizeToArray(instance.props.triggerTarget || reference);\n\n    nodes.forEach((node) => {\n      if (instance.props.interactive) {\n        node.setAttribute(\n          'aria-expanded',\n          instance.state.isVisible && node === getCurrentTarget()\n            ? 'true'\n            : 'false'\n        );\n      } else {\n        node.removeAttribute('aria-expanded');\n      }\n    });\n  }\n\n  function cleanupInteractiveMouseListeners(): void {\n    getDocument().removeEventListener('mousemove', debouncedOnMouseMove);\n    mouseMoveListeners = mouseMoveListeners.filter(\n      (listener) => listener !== debouncedOnMouseMove\n    );\n  }\n\n  function onDocumentPress(event: MouseEvent | TouchEvent): void {\n    // Moved finger to scroll instead of an intentional tap outside\n    if (currentInput.isTouch) {\n      if (didTouchMove || event.type === 'mousedown') {\n        return;\n      }\n    }\n\n    const actualTarget =\n      (event.composedPath && event.composedPath()[0]) || event.target;\n\n    // Clicked on interactive popper\n    if (\n      instance.props.interactive &&\n      actualContains(popper, actualTarget as Element)\n    ) {\n      return;\n    }\n\n    // Clicked on the event listeners target\n    if (\n      normalizeToArray(instance.props.triggerTarget || reference).some((el) =>\n        actualContains(el, actualTarget as Element)\n      )\n    ) {\n      if (currentInput.isTouch) {\n        return;\n      }\n\n      if (\n        instance.state.isVisible &&\n        instance.props.trigger.indexOf('click') >= 0\n      ) {\n        return;\n      }\n    } else {\n      invokeHook('onClickOutside', [instance, event]);\n    }\n\n    if (instance.props.hideOnClick === true) {\n      instance.clearDelayTimeouts();\n      instance.hide();\n\n      // `mousedown` event is fired right before `focus` if pressing the\n      // currentTarget. This lets a tippy with `focus` trigger know that it\n      // should not show\n      didHideDueToDocumentMouseDown = true;\n      setTimeout(() => {\n        didHideDueToDocumentMouseDown = false;\n      });\n\n      // The listener gets added in `scheduleShow()`, but this may be hiding it\n      // before it shows, and hide()'s early bail-out behavior can prevent it\n      // from being cleaned up\n      if (!instance.state.isMounted) {\n        removeDocumentPress();\n      }\n    }\n  }\n\n  function onTouchMove(): void {\n    didTouchMove = true;\n  }\n\n  function onTouchStart(): void {\n    didTouchMove = false;\n  }\n\n  function addDocumentPress(): void {\n    const doc = getDocument();\n    doc.addEventListener('mousedown', onDocumentPress, true);\n    doc.addEventListener('touchend', onDocumentPress, TOUCH_OPTIONS);\n    doc.addEventListener('touchstart', onTouchStart, TOUCH_OPTIONS);\n    doc.addEventListener('touchmove', onTouchMove, TOUCH_OPTIONS);\n  }\n\n  function removeDocumentPress(): void {\n    const doc = getDocument();\n    doc.removeEventListener('mousedown', onDocumentPress, true);\n    doc.removeEventListener('touchend', onDocumentPress, TOUCH_OPTIONS);\n    doc.removeEventListener('touchstart', onTouchStart, TOUCH_OPTIONS);\n    doc.removeEventListener('touchmove', onTouchMove, TOUCH_OPTIONS);\n  }\n\n  function onTransitionedOut(duration: number, callback: () => void): void {\n    onTransitionEnd(duration, () => {\n      if (\n        !instance.state.isVisible &&\n        popper.parentNode &&\n        popper.parentNode.contains(popper)\n      ) {\n        callback();\n      }\n    });\n  }\n\n  function onTransitionedIn(duration: number, callback: () => void): void {\n    onTransitionEnd(duration, callback);\n  }\n\n  function onTransitionEnd(duration: number, callback: () => void): void {\n    const box = getDefaultTemplateChildren().box;\n\n    function listener(event: TransitionEvent): void {\n      if (event.target === box) {\n        updateTransitionEndListener(box, 'remove', listener);\n        callback();\n      }\n    }\n\n    // Make callback synchronous if duration is 0\n    // `transitionend` won't fire otherwise\n    if (duration === 0) {\n      return callback();\n    }\n\n    updateTransitionEndListener(box, 'remove', currentTransitionEndListener);\n    updateTransitionEndListener(box, 'add', listener);\n\n    currentTransitionEndListener = listener;\n  }\n\n  function on(\n    eventType: string,\n    handler: EventListener,\n    options: boolean | Record<string, unknown> = false\n  ): void {\n    const nodes = normalizeToArray(instance.props.triggerTarget || reference);\n    nodes.forEach((node) => {\n      node.addEventListener(eventType, handler, options);\n      listeners.push({node, eventType, handler, options});\n    });\n  }\n\n  function addListeners(): void {\n    if (getIsCustomTouchBehavior()) {\n      on('touchstart', onTrigger, {passive: true});\n      on('touchend', onMouseLeave as EventListener, {passive: true});\n    }\n\n    splitBySpaces(instance.props.trigger).forEach((eventType) => {\n      if (eventType === 'manual') {\n        return;\n      }\n\n      on(eventType, onTrigger);\n\n      switch (eventType) {\n        case 'mouseenter':\n          on('mouseleave', onMouseLeave as EventListener);\n          break;\n        case 'focus':\n          on(isIE11 ? 'focusout' : 'blur', onBlurOrFocusOut as EventListener);\n          break;\n        case 'focusin':\n          on('focusout', onBlurOrFocusOut as EventListener);\n          break;\n      }\n    });\n  }\n\n  function removeListeners(): void {\n    listeners.forEach(({node, eventType, handler, options}: ListenerObject) => {\n      node.removeEventListener(eventType, handler, options);\n    });\n    listeners = [];\n  }\n\n  function onTrigger(event: Event): void {\n    let shouldScheduleClickHide = false;\n\n    if (\n      !instance.state.isEnabled ||\n      isEventListenerStopped(event) ||\n      didHideDueToDocumentMouseDown\n    ) {\n      return;\n    }\n\n    const wasFocused = lastTriggerEvent?.type === 'focus';\n\n    lastTriggerEvent = event;\n    currentTarget = event.currentTarget as Element;\n\n    handleAriaExpandedAttribute();\n\n    if (!instance.state.isVisible && isMouseEvent(event)) {\n      // If scrolling, `mouseenter` events can be fired if the cursor lands\n      // over a new target, but `mousemove` events don't get fired. This\n      // causes interactive tooltips to get stuck open until the cursor is\n      // moved\n      mouseMoveListeners.forEach((listener) => listener(event));\n    }\n\n    // Toggle show/hide when clicking click-triggered tooltips\n    if (\n      event.type === 'click' &&\n      (instance.props.trigger.indexOf('mouseenter') < 0 ||\n        isVisibleFromClick) &&\n      instance.props.hideOnClick !== false &&\n      instance.state.isVisible\n    ) {\n      shouldScheduleClickHide = true;\n    } else {\n      scheduleShow(event);\n    }\n\n    if (event.type === 'click') {\n      isVisibleFromClick = !shouldScheduleClickHide;\n    }\n\n    if (shouldScheduleClickHide && !wasFocused) {\n      scheduleHide(event);\n    }\n  }\n\n  function onMouseMove(event: MouseEvent): void {\n    const target = event.target as Node;\n    const isCursorOverReferenceOrPopper =\n      getCurrentTarget().contains(target) || popper.contains(target);\n\n    if (event.type === 'mousemove' && isCursorOverReferenceOrPopper) {\n      return;\n    }\n\n    const popperTreeData = getNestedPopperTree()\n      .concat(popper)\n      .map((popper) => {\n        const instance = popper._tippy!;\n        const state = instance.popperInstance?.state;\n\n        if (state) {\n          return {\n            popperRect: popper.getBoundingClientRect(),\n            popperState: state,\n            props,\n          };\n        }\n\n        return null;\n      })\n      .filter(Boolean) as PopperTreeData[];\n\n    if (isCursorOutsideInteractiveBorder(popperTreeData, event)) {\n      cleanupInteractiveMouseListeners();\n      scheduleHide(event);\n    }\n  }\n\n  function onMouseLeave(event: MouseEvent): void {\n    const shouldBail =\n      isEventListenerStopped(event) ||\n      (instance.props.trigger.indexOf('click') >= 0 && isVisibleFromClick);\n\n    if (shouldBail) {\n      return;\n    }\n\n    if (instance.props.interactive) {\n      instance.hideWithInteractivity(event);\n      return;\n    }\n\n    scheduleHide(event);\n  }\n\n  function onBlurOrFocusOut(event: FocusEvent): void {\n    if (\n      instance.props.trigger.indexOf('focusin') < 0 &&\n      event.target !== getCurrentTarget()\n    ) {\n      return;\n    }\n\n    // If focus was moved to within the popper\n    if (\n      instance.props.interactive &&\n      event.relatedTarget &&\n      popper.contains(event.relatedTarget as Element)\n    ) {\n      return;\n    }\n\n    scheduleHide(event);\n  }\n\n  function isEventListenerStopped(event: Event): boolean {\n    return currentInput.isTouch\n      ? getIsCustomTouchBehavior() !== event.type.indexOf('touch') >= 0\n      : false;\n  }\n\n  function createPopperInstance(): void {\n    destroyPopperInstance();\n\n    const {\n      popperOptions,\n      placement,\n      offset,\n      getReferenceClientRect,\n      moveTransition,\n    } = instance.props;\n\n    const arrow = getIsDefaultRenderFn() ? getChildren(popper).arrow : null;\n\n    const computedReference = getReferenceClientRect\n      ? {\n          getBoundingClientRect: getReferenceClientRect,\n          contextElement:\n            getReferenceClientRect.contextElement || getCurrentTarget(),\n        }\n      : reference;\n\n    const tippyModifier: Modifier<'$$tippy', Record<string, unknown>> = {\n      name: '$$tippy',\n      enabled: true,\n      phase: 'beforeWrite',\n      requires: ['computeStyles'],\n      fn({state}) {\n        if (getIsDefaultRenderFn()) {\n          const {box} = getDefaultTemplateChildren();\n\n          ['placement', 'reference-hidden', 'escaped'].forEach((attr) => {\n            if (attr === 'placement') {\n              box.setAttribute('data-placement', state.placement);\n            } else {\n              if (state.attributes.popper[`data-popper-${attr}`]) {\n                box.setAttribute(`data-${attr}`, '');\n              } else {\n                box.removeAttribute(`data-${attr}`);\n              }\n            }\n          });\n\n          state.attributes.popper = {};\n        }\n      },\n    };\n\n    type TippyModifier = Modifier<'$$tippy', Record<string, unknown>>;\n    type ExtendedModifiers = StrictModifiers | Partial<TippyModifier>;\n\n    const modifiers: Array<ExtendedModifiers> = [\n      {\n        name: 'offset',\n        options: {\n          offset,\n        },\n      },\n      {\n        name: 'preventOverflow',\n        options: {\n          padding: {\n            top: 2,\n            bottom: 2,\n            left: 5,\n            right: 5,\n          },\n        },\n      },\n      {\n        name: 'flip',\n        options: {\n          padding: 5,\n        },\n      },\n      {\n        name: 'computeStyles',\n        options: {\n          adaptive: !moveTransition,\n        },\n      },\n      tippyModifier,\n    ];\n\n    if (getIsDefaultRenderFn() && arrow) {\n      modifiers.push({\n        name: 'arrow',\n        options: {\n          element: arrow,\n          padding: 3,\n        },\n      });\n    }\n\n    modifiers.push(...(popperOptions?.modifiers || []));\n\n    instance.popperInstance = createPopper<ExtendedModifiers>(\n      computedReference,\n      popper,\n      {\n        ...popperOptions,\n        placement,\n        onFirstUpdate,\n        modifiers,\n      }\n    );\n  }\n\n  function destroyPopperInstance(): void {\n    if (instance.popperInstance) {\n      instance.popperInstance.destroy();\n      instance.popperInstance = null;\n    }\n  }\n\n  function mount(): void {\n    const {appendTo} = instance.props;\n\n    let parentNode: any;\n\n    // By default, we'll append the popper to the triggerTargets's parentNode so\n    // it's directly after the reference element so the elements inside the\n    // tippy can be tabbed to\n    // If there are clipping issues, the user can specify a different appendTo\n    // and ensure focus management is handled correctly manually\n    const node = getCurrentTarget();\n\n    if (\n      (instance.props.interactive && appendTo === TIPPY_DEFAULT_APPEND_TO) ||\n      appendTo === 'parent'\n    ) {\n      parentNode = node.parentNode;\n    } else {\n      parentNode = invokeWithArgsOrReturn(appendTo, [node]);\n    }\n\n    // The popper element needs to exist on the DOM before its position can be\n    // updated as Popper needs to read its dimensions\n    if (!parentNode.contains(popper)) {\n      parentNode.appendChild(popper);\n    }\n\n    instance.state.isMounted = true;\n\n    createPopperInstance();\n\n    /* istanbul ignore else */\n    if (__DEV__) {\n      // Accessibility check\n      warnWhen(\n        instance.props.interactive &&\n          appendTo === defaultProps.appendTo &&\n          node.nextElementSibling !== popper,\n        [\n          'Interactive tippy element may not be accessible via keyboard',\n          'navigation because it is not directly after the reference element',\n          'in the DOM source order.',\n          '\\n\\n',\n          'Using a wrapper <div> or <span> tag around the reference element',\n          'solves this by creating a new parentNode context.',\n          '\\n\\n',\n          'Specifying `appendTo: document.body` silences this warning, but it',\n          'assumes you are using a focus management solution to handle',\n          'keyboard navigation.',\n          '\\n\\n',\n          'See: https://atomiks.github.io/tippyjs/v6/accessibility/#interactivity',\n        ].join(' ')\n      );\n    }\n  }\n\n  function getNestedPopperTree(): PopperElement[] {\n    return arrayFrom(\n      popper.querySelectorAll('[data-__NAMESPACE_PREFIX__-root]')\n    );\n  }\n\n  function scheduleShow(event?: Event): void {\n    instance.clearDelayTimeouts();\n\n    if (event) {\n      invokeHook('onTrigger', [instance, event]);\n    }\n\n    addDocumentPress();\n\n    let delay = getDelay(true);\n    const [touchValue, touchDelay] = getNormalizedTouchSettings();\n\n    if (currentInput.isTouch && touchValue === 'hold' && touchDelay) {\n      delay = touchDelay;\n    }\n\n    if (delay) {\n      showTimeout = setTimeout(() => {\n        instance.show();\n      }, delay);\n    } else {\n      instance.show();\n    }\n  }\n\n  function scheduleHide(event: Event): void {\n    instance.clearDelayTimeouts();\n\n    invokeHook('onUntrigger', [instance, event]);\n\n    if (!instance.state.isVisible) {\n      removeDocumentPress();\n\n      return;\n    }\n\n    // For interactive tippies, scheduleHide is added to a document.body handler\n    // from onMouseLeave so must intercept scheduled hides from mousemove/leave\n    // events when trigger contains mouseenter and click, and the tip is\n    // currently shown as a result of a click.\n    if (\n      instance.props.trigger.indexOf('mouseenter') >= 0 &&\n      instance.props.trigger.indexOf('click') >= 0 &&\n      ['mouseleave', 'mousemove'].indexOf(event.type) >= 0 &&\n      isVisibleFromClick\n    ) {\n      return;\n    }\n\n    const delay = getDelay(false);\n\n    if (delay) {\n      hideTimeout = setTimeout(() => {\n        if (instance.state.isVisible) {\n          instance.hide();\n        }\n      }, delay);\n    } else {\n      // Fixes a `transitionend` problem when it fires 1 frame too\n      // late sometimes, we don't want hide() to be called.\n      scheduleHideAnimationFrame = requestAnimationFrame(() => {\n        instance.hide();\n      });\n    }\n  }\n\n  // ===========================================================================\n  // 🔑 Public methods\n  // ===========================================================================\n  function enable(): void {\n    instance.state.isEnabled = true;\n  }\n\n  function disable(): void {\n    // Disabling the instance should also hide it\n    // https://github.com/atomiks/tippy.js-react/issues/106\n    instance.hide();\n    instance.state.isEnabled = false;\n  }\n\n  function clearDelayTimeouts(): void {\n    clearTimeout(showTimeout);\n    clearTimeout(hideTimeout);\n    cancelAnimationFrame(scheduleHideAnimationFrame);\n  }\n\n  function setProps(partialProps: Partial<Props>): void {\n    /* istanbul ignore else */\n    if (__DEV__) {\n      warnWhen(instance.state.isDestroyed, createMemoryLeakWarning('setProps'));\n    }\n\n    if (instance.state.isDestroyed) {\n      return;\n    }\n\n    invokeHook('onBeforeUpdate', [instance, partialProps]);\n\n    removeListeners();\n\n    const prevProps = instance.props;\n    const nextProps = evaluateProps(reference, {\n      ...prevProps,\n      ...removeUndefinedProps(partialProps),\n      ignoreAttributes: true,\n    });\n\n    instance.props = nextProps;\n\n    addListeners();\n\n    if (prevProps.interactiveDebounce !== nextProps.interactiveDebounce) {\n      cleanupInteractiveMouseListeners();\n      debouncedOnMouseMove = debounce(\n        onMouseMove,\n        nextProps.interactiveDebounce\n      );\n    }\n\n    // Ensure stale aria-expanded attributes are removed\n    if (prevProps.triggerTarget && !nextProps.triggerTarget) {\n      normalizeToArray(prevProps.triggerTarget).forEach((node) => {\n        node.removeAttribute('aria-expanded');\n      });\n    } else if (nextProps.triggerTarget) {\n      reference.removeAttribute('aria-expanded');\n    }\n\n    handleAriaExpandedAttribute();\n    handleStyles();\n\n    if (onUpdate) {\n      onUpdate(prevProps, nextProps);\n    }\n\n    if (instance.popperInstance) {\n      createPopperInstance();\n\n      // Fixes an issue with nested tippies if they are all getting re-rendered,\n      // and the nested ones get re-rendered first.\n      // https://github.com/atomiks/tippyjs-react/issues/177\n      // TODO: find a cleaner / more efficient solution(!)\n      getNestedPopperTree().forEach((nestedPopper) => {\n        // React (and other UI libs likely) requires a rAF wrapper as it flushes\n        // its work in one\n        requestAnimationFrame(nestedPopper._tippy!.popperInstance!.forceUpdate);\n      });\n    }\n\n    invokeHook('onAfterUpdate', [instance, partialProps]);\n  }\n\n  function setContent(content: Content): void {\n    instance.setProps({content});\n  }\n\n  function show(): void {\n    /* istanbul ignore else */\n    if (__DEV__) {\n      warnWhen(instance.state.isDestroyed, createMemoryLeakWarning('show'));\n    }\n\n    // Early bail-out\n    const isAlreadyVisible = instance.state.isVisible;\n    const isDestroyed = instance.state.isDestroyed;\n    const isDisabled = !instance.state.isEnabled;\n    const isTouchAndTouchDisabled =\n      currentInput.isTouch && !instance.props.touch;\n    const duration = getValueAtIndexOrReturn(\n      instance.props.duration,\n      0,\n      defaultProps.duration\n    );\n\n    if (\n      isAlreadyVisible ||\n      isDestroyed ||\n      isDisabled ||\n      isTouchAndTouchDisabled\n    ) {\n      return;\n    }\n\n    // Normalize `disabled` behavior across browsers.\n    // Firefox allows events on disabled elements, but Chrome doesn't.\n    // Using a wrapper element (i.e. <span>) is recommended.\n    if (getCurrentTarget().hasAttribute('disabled')) {\n      return;\n    }\n\n    invokeHook('onShow', [instance], false);\n    if (instance.props.onShow(instance) === false) {\n      return;\n    }\n\n    instance.state.isVisible = true;\n\n    if (getIsDefaultRenderFn()) {\n      popper.style.visibility = 'visible';\n    }\n\n    handleStyles();\n    addDocumentPress();\n\n    if (!instance.state.isMounted) {\n      popper.style.transition = 'none';\n    }\n\n    // If flipping to the opposite side after hiding at least once, the\n    // animation will use the wrong placement without resetting the duration\n    if (getIsDefaultRenderFn()) {\n      const {box, content} = getDefaultTemplateChildren();\n      setTransitionDuration([box, content], 0);\n    }\n\n    onFirstUpdate = (): void => {\n      if (!instance.state.isVisible || ignoreOnFirstUpdate) {\n        return;\n      }\n\n      ignoreOnFirstUpdate = true;\n\n      // reflow\n      void popper.offsetHeight;\n\n      popper.style.transition = instance.props.moveTransition;\n\n      if (getIsDefaultRenderFn() && instance.props.animation) {\n        const {box, content} = getDefaultTemplateChildren();\n        setTransitionDuration([box, content], duration);\n        setVisibilityState([box, content], 'visible');\n      }\n\n      handleAriaContentAttribute();\n      handleAriaExpandedAttribute();\n\n      pushIfUnique(mountedInstances, instance);\n\n      // certain modifiers (e.g. `maxSize`) require a second update after the\n      // popper has been positioned for the first time\n      instance.popperInstance?.forceUpdate();\n\n      invokeHook('onMount', [instance]);\n\n      if (instance.props.animation && getIsDefaultRenderFn()) {\n        onTransitionedIn(duration, () => {\n          instance.state.isShown = true;\n          invokeHook('onShown', [instance]);\n        });\n      }\n    };\n\n    mount();\n  }\n\n  function hide(): void {\n    /* istanbul ignore else */\n    if (__DEV__) {\n      warnWhen(instance.state.isDestroyed, createMemoryLeakWarning('hide'));\n    }\n\n    // Early bail-out\n    const isAlreadyHidden = !instance.state.isVisible;\n    const isDestroyed = instance.state.isDestroyed;\n    const isDisabled = !instance.state.isEnabled;\n    const duration = getValueAtIndexOrReturn(\n      instance.props.duration,\n      1,\n      defaultProps.duration\n    );\n\n    if (isAlreadyHidden || isDestroyed || isDisabled) {\n      return;\n    }\n\n    invokeHook('onHide', [instance], false);\n    if (instance.props.onHide(instance) === false) {\n      return;\n    }\n\n    instance.state.isVisible = false;\n    instance.state.isShown = false;\n    ignoreOnFirstUpdate = false;\n    isVisibleFromClick = false;\n\n    if (getIsDefaultRenderFn()) {\n      popper.style.visibility = 'hidden';\n    }\n\n    cleanupInteractiveMouseListeners();\n    removeDocumentPress();\n    handleStyles(true);\n\n    if (getIsDefaultRenderFn()) {\n      const {box, content} = getDefaultTemplateChildren();\n\n      if (instance.props.animation) {\n        setTransitionDuration([box, content], duration);\n        setVisibilityState([box, content], 'hidden');\n      }\n    }\n\n    handleAriaContentAttribute();\n    handleAriaExpandedAttribute();\n\n    if (instance.props.animation) {\n      if (getIsDefaultRenderFn()) {\n        onTransitionedOut(duration, instance.unmount);\n      }\n    } else {\n      instance.unmount();\n    }\n  }\n\n  function hideWithInteractivity(event: MouseEvent): void {\n    /* istanbul ignore else */\n    if (__DEV__) {\n      warnWhen(\n        instance.state.isDestroyed,\n        createMemoryLeakWarning('hideWithInteractivity')\n      );\n    }\n\n    getDocument().addEventListener('mousemove', debouncedOnMouseMove);\n    pushIfUnique(mouseMoveListeners, debouncedOnMouseMove);\n    debouncedOnMouseMove(event);\n  }\n\n  function unmount(): void {\n    /* istanbul ignore else */\n    if (__DEV__) {\n      warnWhen(instance.state.isDestroyed, createMemoryLeakWarning('unmount'));\n    }\n\n    if (instance.state.isVisible) {\n      instance.hide();\n    }\n\n    if (!instance.state.isMounted) {\n      return;\n    }\n\n    destroyPopperInstance();\n\n    // If a popper is not interactive, it will be appended outside the popper\n    // tree by default. This seems mainly for interactive tippies, but we should\n    // find a workaround if possible\n    getNestedPopperTree().forEach((nestedPopper) => {\n      nestedPopper._tippy!.unmount();\n    });\n\n    if (popper.parentNode) {\n      popper.parentNode.removeChild(popper);\n    }\n\n    mountedInstances = mountedInstances.filter((i) => i !== instance);\n\n    instance.state.isMounted = false;\n    invokeHook('onHidden', [instance]);\n  }\n\n  function destroy(): void {\n    /* istanbul ignore else */\n    if (__DEV__) {\n      warnWhen(instance.state.isDestroyed, createMemoryLeakWarning('destroy'));\n    }\n\n    if (instance.state.isDestroyed) {\n      return;\n    }\n\n    instance.clearDelayTimeouts();\n    instance.unmount();\n\n    removeListeners();\n\n    delete reference._tippy;\n\n    instance.state.isDestroyed = true;\n\n    invokeHook('onDestroy', [instance]);\n  }\n}\n", "import bindGlobalEventListeners, {\n  currentInput,\n} from './bindGlobalEventListeners';\nimport createTippy, {mountedInstances} from './createTippy';\nimport {getArrayOfElements, isElement, isReferenceElement} from './dom-utils';\nimport {defaultProps, setDefaultProps, validateProps} from './props';\nimport {HideAll, HideAllOptions, Instance, Props, Targets} from './types';\nimport {validateTargets, warnWhen} from './validation';\n\nfunction tippy(\n  targets: Targets,\n  optionalProps: Partial<Props> = {}\n): Instance | Instance[] {\n  const plugins = defaultProps.plugins.concat(optionalProps.plugins || []);\n\n  /* istanbul ignore else */\n  if (__DEV__) {\n    validateTargets(targets);\n    validateProps(optionalProps, plugins);\n  }\n\n  bindGlobalEventListeners();\n\n  const passedProps: Partial<Props> = {...optionalProps, plugins};\n\n  const elements = getArrayOfElements(targets);\n\n  /* istanbul ignore else */\n  if (__DEV__) {\n    const isSingleContentElement = isElement(passedProps.content);\n    const isMoreThanOneReferenceElement = elements.length > 1;\n    warnWhen(\n      isSingleContentElement && isMoreThanOneReferenceElement,\n      [\n        'tippy() was passed an Element as the `content` prop, but more than',\n        'one tippy instance was created by this invocation. This means the',\n        'content element will only be appended to the last tippy instance.',\n        '\\n\\n',\n        'Instead, pass the .innerHTML of the element, or use a function that',\n        'returns a cloned version of the element instead.',\n        '\\n\\n',\n        '1) content: element.innerHTML\\n',\n        '2) content: () => element.cloneNode(true)',\n      ].join(' ')\n    );\n  }\n\n  const instances = elements.reduce<Instance[]>(\n    (acc, reference): Instance[] => {\n      const instance = reference && createTippy(reference, passedProps);\n\n      if (instance) {\n        acc.push(instance);\n      }\n\n      return acc;\n    },\n    []\n  );\n\n  return isElement(targets) ? instances[0] : instances;\n}\n\ntippy.defaultProps = defaultProps;\ntippy.setDefaultProps = setDefaultProps;\ntippy.currentInput = currentInput;\n\nexport default tippy;\n\nexport const hideAll: HideAll = ({\n  exclude: excludedReferenceOrInstance,\n  duration,\n}: HideAllOptions = {}) => {\n  mountedInstances.forEach((instance) => {\n    let isExcluded = false;\n\n    if (excludedReferenceOrInstance) {\n      isExcluded = isReferenceElement(excludedReferenceOrInstance)\n        ? instance.reference === excludedReferenceOrInstance\n        : instance.popper === (excludedReferenceOrInstance as Instance).popper;\n    }\n\n    if (!isExcluded) {\n      const originalDuration = instance.props.duration;\n\n      instance.setProps({duration});\n      instance.hide();\n\n      if (!instance.state.isDestroyed) {\n        instance.setProps({duration: originalDuration});\n      }\n    }\n  });\n};\n", "import tippy from '..';\nimport {div} from '../dom-utils';\nimport {\n  CreateSingleton,\n  Plugin,\n  CreateSingletonProps,\n  ReferenceElement,\n  CreateSingletonInstance,\n  Instance,\n  Props,\n} from '../types';\nimport {normalizeToArray, removeProperties} from '../utils';\nimport {errorWhen} from '../validation';\nimport {applyStyles, Modifier} from '@popperjs/core';\n\n// The default `applyStyles` modifier has a cleanup function that gets called\n// every time the popper is destroyed (i.e. a new target), removing the styles\n// and causing transitions to break for singletons when the console is open, but\n// most notably for non-transform styles being used, `gpuAcceleration: false`.\nconst applyStylesModifier: Modifier<'applyStyles', Record<string, unknown>> = {\n  ...applyStyles,\n  effect({state}) {\n    const initialStyles = {\n      popper: {\n        position: state.options.strategy,\n        left: '0',\n        top: '0',\n        margin: '0',\n      },\n      arrow: {\n        position: 'absolute',\n      },\n      reference: {},\n    };\n\n    Object.assign(state.elements.popper.style, initialStyles.popper);\n    state.styles = initialStyles;\n\n    if (state.elements.arrow) {\n      Object.assign(state.elements.arrow.style, initialStyles.arrow);\n    }\n\n    // intentionally return no cleanup function\n    // return () => { ... }\n  },\n};\n\nconst createSingleton: CreateSingleton = (\n  tippyInstances,\n  optionalProps = {}\n) => {\n  /* istanbul ignore else */\n  if (__DEV__) {\n    errorWhen(\n      !Array.isArray(tippyInstances),\n      [\n        'The first argument passed to createSingleton() must be an array of',\n        'tippy instances. The passed value was',\n        String(tippyInstances),\n      ].join(' ')\n    );\n  }\n\n  let individualInstances = tippyInstances;\n  let references: Array<ReferenceElement> = [];\n  let triggerTargets: Array<Element> = [];\n  let currentTarget: Element | null;\n  let overrides = optionalProps.overrides;\n  let interceptSetPropsCleanups: Array<() => void> = [];\n  let shownOnCreate = false;\n\n  function setTriggerTargets(): void {\n    triggerTargets = individualInstances\n      .map((instance) =>\n        normalizeToArray(instance.props.triggerTarget || instance.reference)\n      )\n      .reduce((acc, item) => acc.concat(item), []);\n  }\n\n  function setReferences(): void {\n    references = individualInstances.map((instance) => instance.reference);\n  }\n\n  function enableInstances(isEnabled: boolean): void {\n    individualInstances.forEach((instance) => {\n      if (isEnabled) {\n        instance.enable();\n      } else {\n        instance.disable();\n      }\n    });\n  }\n\n  function interceptSetProps(singleton: Instance): Array<() => void> {\n    return individualInstances.map((instance) => {\n      const originalSetProps = instance.setProps;\n\n      instance.setProps = (props): void => {\n        originalSetProps(props);\n\n        if (instance.reference === currentTarget) {\n          singleton.setProps(props);\n        }\n      };\n\n      return (): void => {\n        instance.setProps = originalSetProps;\n      };\n    });\n  }\n\n  // have to pass singleton, as it maybe undefined on first call\n  function prepareInstance(\n    singleton: Instance,\n    target: ReferenceElement\n  ): void {\n    const index = triggerTargets.indexOf(target);\n\n    // bail-out\n    if (target === currentTarget) {\n      return;\n    }\n\n    currentTarget = target;\n\n    const overrideProps: Partial<Props> = (overrides || [])\n      .concat('content')\n      .reduce((acc, prop) => {\n        (acc as any)[prop] = individualInstances[index].props[prop];\n        return acc;\n      }, {});\n\n    singleton.setProps({\n      ...overrideProps,\n      getReferenceClientRect:\n        typeof overrideProps.getReferenceClientRect === 'function'\n          ? overrideProps.getReferenceClientRect\n          : (): ClientRect => references[index]?.getBoundingClientRect(),\n    });\n  }\n\n  enableInstances(false);\n  setReferences();\n  setTriggerTargets();\n\n  const plugin: Plugin = {\n    fn() {\n      return {\n        onDestroy(): void {\n          enableInstances(true);\n        },\n        onHidden(): void {\n          currentTarget = null;\n        },\n        onClickOutside(instance): void {\n          if (instance.props.showOnCreate && !shownOnCreate) {\n            shownOnCreate = true;\n            currentTarget = null;\n          }\n        },\n        onShow(instance): void {\n          if (instance.props.showOnCreate && !shownOnCreate) {\n            shownOnCreate = true;\n            prepareInstance(instance, references[0]);\n          }\n        },\n        onTrigger(instance, event): void {\n          prepareInstance(instance, event.currentTarget as Element);\n        },\n      };\n    },\n  };\n\n  const singleton = tippy(div(), {\n    ...removeProperties(optionalProps, ['overrides']),\n    plugins: [plugin, ...(optionalProps.plugins || [])],\n    triggerTarget: triggerTargets,\n    popperOptions: {\n      ...optionalProps.popperOptions,\n      modifiers: [\n        ...(optionalProps.popperOptions?.modifiers || []),\n        applyStylesModifier,\n      ],\n    },\n  }) as CreateSingletonInstance<CreateSingletonProps>;\n\n  const originalShow = singleton.show;\n\n  singleton.show = (target?: ReferenceElement | Instance | number): void => {\n    originalShow();\n\n    // first time, showOnCreate or programmatic call with no params\n    // default to showing first instance\n    if (!currentTarget && target == null) {\n      return prepareInstance(singleton, references[0]);\n    }\n\n    // triggered from event (do nothing as prepareInstance already called by onTrigger)\n    // programmatic call with no params when already visible (do nothing again)\n    if (currentTarget && target == null) {\n      return;\n    }\n\n    // target is index of instance\n    if (typeof target === 'number') {\n      return (\n        references[target] && prepareInstance(singleton, references[target])\n      );\n    }\n\n    // target is a child tippy instance\n    if (individualInstances.indexOf(target as Instance) >= 0) {\n      const ref = (target as Instance).reference;\n      return prepareInstance(singleton, ref);\n    }\n\n    // target is a ReferenceElement\n    if (references.indexOf(target as ReferenceElement) >= 0) {\n      return prepareInstance(singleton, target as ReferenceElement);\n    }\n  };\n\n  singleton.showNext = (): void => {\n    const first = references[0];\n    if (!currentTarget) {\n      return singleton.show(0);\n    }\n    const index = references.indexOf(currentTarget);\n    singleton.show(references[index + 1] || first);\n  };\n\n  singleton.showPrevious = (): void => {\n    const last = references[references.length - 1];\n    if (!currentTarget) {\n      return singleton.show(last);\n    }\n    const index = references.indexOf(currentTarget);\n    const target = references[index - 1] || last;\n    singleton.show(target);\n  };\n\n  const originalSetProps = singleton.setProps;\n\n  singleton.setProps = (props): void => {\n    overrides = props.overrides || overrides;\n    originalSetProps(props);\n  };\n\n  singleton.setInstances = (nextInstances): void => {\n    enableInstances(true);\n    interceptSetPropsCleanups.forEach((fn) => fn());\n\n    individualInstances = nextInstances;\n\n    enableInstances(false);\n    setReferences();\n    setTriggerTargets();\n    interceptSetPropsCleanups = interceptSetProps(singleton);\n\n    singleton.setProps({triggerTarget: triggerTargets});\n  };\n\n  interceptSetPropsCleanups = interceptSetProps(singleton);\n\n  return singleton;\n};\n\nexport default createSingleton;\n", "import tippy from '..';\nimport {TOUCH_OPTIONS} from '../constants';\nimport {defaultProps} from '../props';\nimport {Instance, Props, Targets} from '../types';\nimport {ListenerObject} from '../types-internal';\nimport {normalizeToArray, removeProperties} from '../utils';\nimport {errorWhen} from '../validation';\n\nconst BUBBLING_EVENTS_MAP = {\n  mouseover: 'mouseenter',\n  focusin: 'focus',\n  click: 'click',\n};\n\n/**\n * Creates a delegate instance that controls the creation of tippy instances\n * for child elements (`target` CSS selector).\n */\nfunction delegate(\n  targets: Targets,\n  props: Partial<Props> & {target: string}\n): Instance | Instance[] {\n  /* istanbul ignore else */\n  if (__DEV__) {\n    errorWhen(\n      !(props && props.target),\n      [\n        'You must specity a `target` prop indicating a CSS selector string matching',\n        'the target elements that should receive a tippy.',\n      ].join(' ')\n    );\n  }\n\n  let listeners: ListenerObject[] = [];\n  let childTippyInstances: Instance[] = [];\n  let disabled = false;\n\n  const {target} = props;\n\n  const nativeProps = removeProperties(props, ['target']);\n  const parentProps = {...nativeProps, trigger: 'manual', touch: false};\n  const childProps = {\n    touch: defaultProps.touch,\n    ...nativeProps,\n    showOnCreate: true,\n  };\n\n  const returnValue = tippy(targets, parentProps);\n  const normalizedReturnValue = normalizeToArray(returnValue);\n\n  function onTrigger(event: Event): void {\n    if (!event.target || disabled) {\n      return;\n    }\n\n    const targetNode = (event.target as Element).closest(target);\n\n    if (!targetNode) {\n      return;\n    }\n\n    // Get relevant trigger with fallbacks:\n    // 1. Check `data-tippy-trigger` attribute on target node\n    // 2. Fallback to `trigger` passed to `delegate()`\n    // 3. Fallback to `defaultProps.trigger`\n    const trigger =\n      targetNode.getAttribute('data-tippy-trigger') ||\n      props.trigger ||\n      defaultProps.trigger;\n\n    // @ts-ignore\n    if (targetNode._tippy) {\n      return;\n    }\n\n    if (event.type === 'touchstart' && typeof childProps.touch === 'boolean') {\n      return;\n    }\n\n    if (\n      event.type !== 'touchstart' &&\n      trigger.indexOf((BUBBLING_EVENTS_MAP as any)[event.type]) < 0\n    ) {\n      return;\n    }\n\n    const instance = tippy(targetNode, childProps);\n\n    if (instance) {\n      childTippyInstances = childTippyInstances.concat(instance);\n    }\n  }\n\n  function on(\n    node: Element,\n    eventType: string,\n    handler: EventListener,\n    options: boolean | Record<string, unknown> = false\n  ): void {\n    node.addEventListener(eventType, handler, options);\n    listeners.push({node, eventType, handler, options});\n  }\n\n  function addEventListeners(instance: Instance): void {\n    const {reference} = instance;\n\n    on(reference, 'touchstart', onTrigger, TOUCH_OPTIONS);\n    on(reference, 'mouseover', onTrigger);\n    on(reference, 'focusin', onTrigger);\n    on(reference, 'click', onTrigger);\n  }\n\n  function removeEventListeners(): void {\n    listeners.forEach(({node, eventType, handler, options}: ListenerObject) => {\n      node.removeEventListener(eventType, handler, options);\n    });\n    listeners = [];\n  }\n\n  function applyMutations(instance: Instance): void {\n    const originalDestroy = instance.destroy;\n    const originalEnable = instance.enable;\n    const originalDisable = instance.disable;\n\n    instance.destroy = (shouldDestroyChildInstances = true): void => {\n      if (shouldDestroyChildInstances) {\n        childTippyInstances.forEach((instance) => {\n          instance.destroy();\n        });\n      }\n\n      childTippyInstances = [];\n\n      removeEventListeners();\n      originalDestroy();\n    };\n\n    instance.enable = (): void => {\n      originalEnable();\n      childTippyInstances.forEach((instance) => instance.enable());\n      disabled = false;\n    };\n\n    instance.disable = (): void => {\n      originalDisable();\n      childTippyInstances.forEach((instance) => instance.disable());\n      disabled = true;\n    };\n\n    addEventListeners(instance);\n  }\n\n  normalizedReturnValue.forEach(applyMutations);\n\n  return returnValue;\n}\n\nexport default delegate;\n", "import {BACKDROP_CLASS} from '../constants';\nimport {div, setVisibilityState} from '../dom-utils';\nimport {getChildren} from '../template';\nimport {AnimateFill} from '../types';\nimport {errorWhen} from '../validation';\n\nconst animateFill: AnimateFill = {\n  name: 'animateFill',\n  defaultValue: false,\n  fn(instance) {\n    // @ts-ignore\n    if (!instance.props.render?.$$tippy) {\n      if (__DEV__) {\n        errorWhen(\n          instance.props.animateFill,\n          'The `animateFill` plugin requires the default render function.'\n        );\n      }\n\n      return {};\n    }\n\n    const {box, content} = getChildren(instance.popper);\n\n    const backdrop = instance.props.animateFill\n      ? createBackdropElement()\n      : null;\n\n    return {\n      onCreate(): void {\n        if (backdrop) {\n          box.insertBefore(backdrop, box.firstElementChild!);\n          box.setAttribute('data-animatefill', '');\n          box.style.overflow = 'hidden';\n\n          instance.setProps({arrow: false, animation: 'shift-away'});\n        }\n      },\n      onMount(): void {\n        if (backdrop) {\n          const {transitionDuration} = box.style;\n          const duration = Number(transitionDuration.replace('ms', ''));\n\n          // The content should fade in after the backdrop has mostly filled the\n          // tooltip element. `clip-path` is the other alternative but is not\n          // well-supported and is buggy on some devices.\n          content.style.transitionDelay = `${Math.round(duration / 10)}ms`;\n\n          backdrop.style.transitionDuration = transitionDuration;\n          setVisibilityState([backdrop], 'visible');\n        }\n      },\n      onShow(): void {\n        if (backdrop) {\n          backdrop.style.transitionDuration = '0ms';\n        }\n      },\n      onHide(): void {\n        if (backdrop) {\n          setVisibilityState([backdrop], 'hidden');\n        }\n      },\n    };\n  },\n};\n\nexport default animateFill;\n\nfunction createBackdropElement(): HTMLDivElement {\n  const backdrop = div();\n  backdrop.className = BACKDROP_CLASS;\n  setVisibilityState([backdrop], 'hidden');\n  return backdrop;\n}\n", "import {getOwnerDocument, isMouseEvent} from '../dom-utils';\nimport {FollowCursor, Instance} from '../types';\n\nlet mouseCoords = {clientX: 0, clientY: 0};\nlet activeInstances: Array<{instance: Instance; doc: Document}> = [];\n\nfunction storeMouseCoords({clientX, clientY}: MouseEvent): void {\n  mouseCoords = {clientX, clientY};\n}\n\nfunction addMouseCoordsListener(doc: Document): void {\n  doc.addEventListener('mousemove', storeMouseCoords);\n}\n\nfunction removeMouseCoordsListener(doc: Document): void {\n  doc.removeEventListener('mousemove', storeMouseCoords);\n}\n\nconst followCursor: FollowCursor = {\n  name: 'followCursor',\n  defaultValue: false,\n  fn(instance) {\n    const reference = instance.reference;\n    const doc = getOwnerDocument(instance.props.triggerTarget || reference);\n\n    let isInternalUpdate = false;\n    let wasFocusEvent = false;\n    let isUnmounted = true;\n    let prevProps = instance.props;\n\n    function getIsInitialBehavior(): boolean {\n      return (\n        instance.props.followCursor === 'initial' && instance.state.isVisible\n      );\n    }\n\n    function addListener(): void {\n      doc.addEventListener('mousemove', onMouseMove);\n    }\n\n    function removeListener(): void {\n      doc.removeEventListener('mousemove', onMouseMove);\n    }\n\n    function unsetGetReferenceClientRect(): void {\n      isInternalUpdate = true;\n      instance.setProps({getReferenceClientRect: null});\n      isInternalUpdate = false;\n    }\n\n    function onMouseMove(event: MouseEvent): void {\n      // If the instance is interactive, avoid updating the position unless it's\n      // over the reference element\n      const isCursorOverReference = event.target\n        ? reference.contains(event.target as Node)\n        : true;\n      const {followCursor} = instance.props;\n      const {clientX, clientY} = event;\n\n      const rect = reference.getBoundingClientRect();\n      const relativeX = clientX - rect.left;\n      const relativeY = clientY - rect.top;\n\n      if (isCursorOverReference || !instance.props.interactive) {\n        instance.setProps({\n          // @ts-ignore - unneeded DOMRect properties\n          getReferenceClientRect() {\n            const rect = reference.getBoundingClientRect();\n\n            let x = clientX;\n            let y = clientY;\n\n            if (followCursor === 'initial') {\n              x = rect.left + relativeX;\n              y = rect.top + relativeY;\n            }\n\n            const top = followCursor === 'horizontal' ? rect.top : y;\n            const right = followCursor === 'vertical' ? rect.right : x;\n            const bottom = followCursor === 'horizontal' ? rect.bottom : y;\n            const left = followCursor === 'vertical' ? rect.left : x;\n\n            return {\n              width: right - left,\n              height: bottom - top,\n              top,\n              right,\n              bottom,\n              left,\n            };\n          },\n        });\n      }\n    }\n\n    function create(): void {\n      if (instance.props.followCursor) {\n        activeInstances.push({instance, doc});\n        addMouseCoordsListener(doc);\n      }\n    }\n\n    function destroy(): void {\n      activeInstances = activeInstances.filter(\n        (data) => data.instance !== instance\n      );\n\n      if (activeInstances.filter((data) => data.doc === doc).length === 0) {\n        removeMouseCoordsListener(doc);\n      }\n    }\n\n    return {\n      onCreate: create,\n      onDestroy: destroy,\n      onBeforeUpdate(): void {\n        prevProps = instance.props;\n      },\n      onAfterUpdate(_, {followCursor}): void {\n        if (isInternalUpdate) {\n          return;\n        }\n\n        if (\n          followCursor !== undefined &&\n          prevProps.followCursor !== followCursor\n        ) {\n          destroy();\n\n          if (followCursor) {\n            create();\n\n            if (\n              instance.state.isMounted &&\n              !wasFocusEvent &&\n              !getIsInitialBehavior()\n            ) {\n              addListener();\n            }\n          } else {\n            removeListener();\n            unsetGetReferenceClientRect();\n          }\n        }\n      },\n      onMount(): void {\n        if (instance.props.followCursor && !wasFocusEvent) {\n          if (isUnmounted) {\n            onMouseMove(mouseCoords as MouseEvent);\n            isUnmounted = false;\n          }\n\n          if (!getIsInitialBehavior()) {\n            addListener();\n          }\n        }\n      },\n      onTrigger(_, event): void {\n        if (isMouseEvent(event)) {\n          mouseCoords = {clientX: event.clientX, clientY: event.clientY};\n        }\n        wasFocusEvent = event.type === 'focus';\n      },\n      onHidden(): void {\n        if (instance.props.followCursor) {\n          unsetGetReferenceClientRect();\n          removeListener();\n          isUnmounted = true;\n        }\n      },\n    };\n  },\n};\n\nexport default followCursor;\n", "import {Modifier, Placement} from '@popperjs/core';\nimport {isMouseEvent} from '../dom-utils';\nimport {BasePlacement, InlinePositioning, Props} from '../types';\nimport {arrayFrom, getBasePlacement} from '../utils';\n\nfunction getProps(props: Props, modifier: Modifier<any, any>): Partial<Props> {\n  return {\n    popperOptions: {\n      ...props.popperOptions,\n      modifiers: [\n        ...(props.popperOptions?.modifiers || []).filter(\n          ({name}) => name !== modifier.name\n        ),\n        modifier,\n      ],\n    },\n  };\n}\n\nconst inlinePositioning: InlinePositioning = {\n  name: 'inlinePositioning',\n  defaultValue: false,\n  fn(instance) {\n    const {reference} = instance;\n\n    function isEnabled(): boolean {\n      return !!instance.props.inlinePositioning;\n    }\n\n    let placement: Placement;\n    let cursorRectIndex = -1;\n    let isInternalUpdate = false;\n    let triedPlacements: Array<string> = [];\n\n    const modifier: Modifier<\n      'tippyInlinePositioning',\n      Record<string, unknown>\n    > = {\n      name: 'tippyInlinePositioning',\n      enabled: true,\n      phase: 'afterWrite',\n      fn({state}) {\n        if (isEnabled()) {\n          if (triedPlacements.indexOf(state.placement) !== -1) {\n            triedPlacements = [];\n          }\n\n          if (\n            placement !== state.placement &&\n            triedPlacements.indexOf(state.placement) === -1\n          ) {\n            triedPlacements.push(state.placement);\n            instance.setProps({\n              // @ts-ignore - unneeded DOMRect properties\n              getReferenceClientRect: () =>\n                getReferenceClientRect(state.placement),\n            });\n          }\n\n          placement = state.placement;\n        }\n      },\n    };\n\n    function getReferenceClientRect(placement: Placement): Partial<DOMRect> {\n      return getInlineBoundingClientRect(\n        getBasePlacement(placement),\n        reference.getBoundingClientRect(),\n        arrayFrom(reference.getClientRects()),\n        cursorRectIndex\n      );\n    }\n\n    function setInternalProps(partialProps: Partial<Props>): void {\n      isInternalUpdate = true;\n      instance.setProps(partialProps);\n      isInternalUpdate = false;\n    }\n\n    function addModifier(): void {\n      if (!isInternalUpdate) {\n        setInternalProps(getProps(instance.props, modifier));\n      }\n    }\n\n    return {\n      onCreate: addModifier,\n      onAfterUpdate: addModifier,\n      onTrigger(_, event): void {\n        if (isMouseEvent(event)) {\n          const rects = arrayFrom(instance.reference.getClientRects());\n          const cursorRect = rects.find(\n            (rect) =>\n              rect.left - 2 <= event.clientX &&\n              rect.right + 2 >= event.clientX &&\n              rect.top - 2 <= event.clientY &&\n              rect.bottom + 2 >= event.clientY\n          );\n          const index = rects.indexOf(cursorRect);\n          cursorRectIndex = index > -1 ? index : cursorRectIndex;\n        }\n      },\n      onHidden(): void {\n        cursorRectIndex = -1;\n      },\n    };\n  },\n};\n\nexport default inlinePositioning;\n\nexport function getInlineBoundingClientRect(\n  currentBasePlacement: BasePlacement | null,\n  boundingRect: DOMRect,\n  clientRects: DOMRect[],\n  cursorRectIndex: number\n): {\n  top: number;\n  bottom: number;\n  left: number;\n  right: number;\n  width: number;\n  height: number;\n} {\n  // Not an inline element, or placement is not yet known\n  if (clientRects.length < 2 || currentBasePlacement === null) {\n    return boundingRect;\n  }\n\n  // There are two rects and they are disjoined\n  if (\n    clientRects.length === 2 &&\n    cursorRectIndex >= 0 &&\n    clientRects[0].left > clientRects[1].right\n  ) {\n    return clientRects[cursorRectIndex] || boundingRect;\n  }\n\n  switch (currentBasePlacement) {\n    case 'top':\n    case 'bottom': {\n      const firstRect = clientRects[0];\n      const lastRect = clientRects[clientRects.length - 1];\n      const isTop = currentBasePlacement === 'top';\n\n      const top = firstRect.top;\n      const bottom = lastRect.bottom;\n      const left = isTop ? firstRect.left : lastRect.left;\n      const right = isTop ? firstRect.right : lastRect.right;\n      const width = right - left;\n      const height = bottom - top;\n\n      return {top, bottom, left, right, width, height};\n    }\n    case 'left':\n    case 'right': {\n      const minLeft = Math.min(...clientRects.map((rects) => rects.left));\n      const maxRight = Math.max(...clientRects.map((rects) => rects.right));\n      const measureRects = clientRects.filter((rect) =>\n        currentBasePlacement === 'left'\n          ? rect.left === minLeft\n          : rect.right === maxRight\n      );\n\n      const top = measureRects[0].top;\n      const bottom = measureRects[measureRects.length - 1].bottom;\n      const left = minLeft;\n      const right = maxRight;\n      const width = right - left;\n      const height = bottom - top;\n\n      return {top, bottom, left, right, width, height};\n    }\n    default: {\n      return boundingRect;\n    }\n  }\n}\n", "import {VirtualElement} from '@popperjs/core';\nimport {ReferenceElement, Sticky} from '../types';\n\nconst sticky: Sticky = {\n  name: 'sticky',\n  defaultValue: false,\n  fn(instance) {\n    const {reference, popper} = instance;\n\n    function getReference(): ReferenceElement | VirtualElement {\n      return instance.popperInstance\n        ? instance.popperInstance.state.elements.reference\n        : reference;\n    }\n\n    function shouldCheck(value: 'reference' | 'popper'): boolean {\n      return instance.props.sticky === true || instance.props.sticky === value;\n    }\n\n    let prevRefRect: ClientRect | null = null;\n    let prevPopRect: ClientRect | null = null;\n\n    function updatePosition(): void {\n      const currentRefRect = shouldCheck('reference')\n        ? getReference().getBoundingClientRect()\n        : null;\n      const currentPopRect = shouldCheck('popper')\n        ? popper.getBoundingClientRect()\n        : null;\n\n      if (\n        (currentRefRect && areRectsDifferent(prevRefRect, currentRefRect)) ||\n        (currentPopRect && areRectsDifferent(prevPopRect, currentPopRect))\n      ) {\n        if (instance.popperInstance) {\n          instance.popperInstance.update();\n        }\n      }\n\n      prevRefRect = currentRefRect;\n      prevPopRect = currentPopRect;\n\n      if (instance.state.isMounted) {\n        requestAnimationFrame(updatePosition);\n      }\n    }\n\n    return {\n      onMount(): void {\n        if (instance.props.sticky) {\n          updatePosition();\n        }\n      },\n    };\n  },\n};\n\nexport default sticky;\n\nfunction areRectsDifferent(\n  rectA: ClientRect | null,\n  rectB: ClientRect | null\n): boolean {\n  if (rectA && rectB) {\n    return (\n      rectA.top !== rectB.top ||\n      rectA.right !== rectB.right ||\n      rectA.bottom !== rectB.bottom ||\n      rectA.left !== rectB.left\n    );\n  }\n\n  return true;\n}\n", "import tippy from '../src';\nimport {render} from '../src/template';\n\ntippy.setDefaultProps({render});\n\nexport {default, hideAll} from '../src';\nexport {default as createSingleton} from '../src/addons/createSingleton';\nexport {default as delegate} from '../src/addons/delegate';\nexport {default as animateFill} from '../src/plugins/animateFill';\nexport {default as followCursor} from '../src/plugins/followCursor';\nexport {default as inlinePositioning} from '../src/plugins/inlinePositioning';\nexport {default as sticky} from '../src/plugins/sticky';\nexport {ROUND_ARROW as roundArrow} from '../src/constants';\n", "import { Controller } from '@hotwired/stimulus';\nimport tippy  from \"tippy.js\";\n\nexport default class extends Controller {\n  static targets = ['menuItems', 'trigger']\n  static values = { placement: String, appendTo: String}\n\n  connect() {\n    if (!this.hasMenuItemsTarget || !this.hasTriggerTarget) {\n      return;\n    }\n    this.placementValue = this.placementValue || 'bottom-start';\n    this.menuItemsTarget.addEventListener('click', (e) => {\n        this.tippy.hide();\n    });\n    this.appendTo  = this.appendToValue ? document.getElementById(this.appendToValue) : document.body;\n    this.tippy = tippy(this.triggerTarget, {\n      appendTo: this.appendTo,\n      content: this.menuItemsTarget,\n      interactive: true,\n      trigger: 'click',\n      duration: 0,\n      delay: 0,\n      placement: this.placementValue,\n    });\n  }\n\n  disconnect() {\n    if (this.tippy) this.tippy.destroy();\n  }\n}", "import { Controller } from '@hotwired/stimulus';\nimport tippy  from \"tippy.js\";\n\nexport default class extends Controller {\n  static targets = ['menuItems', 'trigger']\n  static values = { placement: String, appendTo: String}\n\n  connect() {\n    this.placementValue = this.placementValue || 'bottom-start';\n    // this.menuItemsTarget.addEventListener('click', (e) => {\n    //     this.tippy.hide();\n    // });\n    const appendTo = this.appendToValue ? document.getElementById(this.appendToValue) : document.body;\n    this.tippy = tippy(this.triggerTarget, {\n      appendTo: appendTo,\n      content: this.menuItems,\n      interactive: true,\n      trigger: 'click',\n      duration: 0,\n      delay: 0,\n      placement: this.placementValue\n    });\n  }\n\n  disconnect() {\n    if (this.tippy) this.tippy.destroy();\n  }\n\n  get menuItems() {\n    if (this.hasMenuItemsTarget) return this.menuItemsTarget;\n    return this.element.querySelector('.context-menu');\n  }\n}", "/**\nThe data structure for documents. @nonabstract\n*/\nclass Text {\n    /**\n    Get the line description around the given position.\n    */\n    lineAt(pos) {\n        if (pos < 0 || pos > this.length)\n            throw new RangeError(`Invalid position ${pos} in document of length ${this.length}`);\n        return this.lineInner(pos, false, 1, 0);\n    }\n    /**\n    Get the description for the given (1-based) line number.\n    */\n    line(n) {\n        if (n < 1 || n > this.lines)\n            throw new RangeError(`Invalid line number ${n} in ${this.lines}-line document`);\n        return this.lineInner(n, true, 1, 0);\n    }\n    /**\n    Replace a range of the text with the given content.\n    */\n    replace(from, to, text) {\n        let parts = [];\n        this.decompose(0, from, parts, 2 /* Open.To */);\n        if (text.length)\n            text.decompose(0, text.length, parts, 1 /* Open.From */ | 2 /* Open.To */);\n        this.decompose(to, this.length, parts, 1 /* Open.From */);\n        return TextNode.from(parts, this.length - (to - from) + text.length);\n    }\n    /**\n    Append another document to this one.\n    */\n    append(other) {\n        return this.replace(this.length, this.length, other);\n    }\n    /**\n    Retrieve the text between the given points.\n    */\n    slice(from, to = this.length) {\n        let parts = [];\n        this.decompose(from, to, parts, 0);\n        return TextNode.from(parts, to - from);\n    }\n    /**\n    Test whether this text is equal to another instance.\n    */\n    eq(other) {\n        if (other == this)\n            return true;\n        if (other.length != this.length || other.lines != this.lines)\n            return false;\n        let start = this.scanIdentical(other, 1), end = this.length - this.scanIdentical(other, -1);\n        let a = new RawTextCursor(this), b = new RawTextCursor(other);\n        for (let skip = start, pos = start;;) {\n            a.next(skip);\n            b.next(skip);\n            skip = 0;\n            if (a.lineBreak != b.lineBreak || a.done != b.done || a.value != b.value)\n                return false;\n            pos += a.value.length;\n            if (a.done || pos >= end)\n                return true;\n        }\n    }\n    /**\n    Iterate over the text. When `dir` is `-1`, iteration happens\n    from end to start. This will return lines and the breaks between\n    them as separate strings.\n    */\n    iter(dir = 1) { return new RawTextCursor(this, dir); }\n    /**\n    Iterate over a range of the text. When `from` > `to`, the\n    iterator will run in reverse.\n    */\n    iterRange(from, to = this.length) { return new PartialTextCursor(this, from, to); }\n    /**\n    Return a cursor that iterates over the given range of lines,\n    _without_ returning the line breaks between, and yielding empty\n    strings for empty lines.\n    \n    When `from` and `to` are given, they should be 1-based line numbers.\n    */\n    iterLines(from, to) {\n        let inner;\n        if (from == null) {\n            inner = this.iter();\n        }\n        else {\n            if (to == null)\n                to = this.lines + 1;\n            let start = this.line(from).from;\n            inner = this.iterRange(start, Math.max(start, to == this.lines + 1 ? this.length : to <= 1 ? 0 : this.line(to - 1).to));\n        }\n        return new LineCursor(inner);\n    }\n    /**\n    Return the document as a string, using newline characters to\n    separate lines.\n    */\n    toString() { return this.sliceString(0); }\n    /**\n    Convert the document to an array of lines (which can be\n    deserialized again via [`Text.of`](https://codemirror.net/6/docs/ref/#state.Text^of)).\n    */\n    toJSON() {\n        let lines = [];\n        this.flatten(lines);\n        return lines;\n    }\n    /**\n    @internal\n    */\n    constructor() { }\n    /**\n    Create a `Text` instance for the given array of lines.\n    */\n    static of(text) {\n        if (text.length == 0)\n            throw new RangeError(\"A document must have at least one line\");\n        if (text.length == 1 && !text[0])\n            return Text.empty;\n        return text.length <= 32 /* Tree.Branch */ ? new TextLeaf(text) : TextNode.from(TextLeaf.split(text, []));\n    }\n}\n// Leaves store an array of line strings. There are always line breaks\n// between these strings. Leaves are limited in size and have to be\n// contained in TextNode instances for bigger documents.\nclass TextLeaf extends Text {\n    constructor(text, length = textLength(text)) {\n        super();\n        this.text = text;\n        this.length = length;\n    }\n    get lines() { return this.text.length; }\n    get children() { return null; }\n    lineInner(target, isLine, line, offset) {\n        for (let i = 0;; i++) {\n            let string = this.text[i], end = offset + string.length;\n            if ((isLine ? line : end) >= target)\n                return new Line(offset, end, line, string);\n            offset = end + 1;\n            line++;\n        }\n    }\n    decompose(from, to, target, open) {\n        let text = from <= 0 && to >= this.length ? this\n            : new TextLeaf(sliceText(this.text, from, to), Math.min(to, this.length) - Math.max(0, from));\n        if (open & 1 /* Open.From */) {\n            let prev = target.pop();\n            let joined = appendText(text.text, prev.text.slice(), 0, text.length);\n            if (joined.length <= 32 /* Tree.Branch */) {\n                target.push(new TextLeaf(joined, prev.length + text.length));\n            }\n            else {\n                let mid = joined.length >> 1;\n                target.push(new TextLeaf(joined.slice(0, mid)), new TextLeaf(joined.slice(mid)));\n            }\n        }\n        else {\n            target.push(text);\n        }\n    }\n    replace(from, to, text) {\n        if (!(text instanceof TextLeaf))\n            return super.replace(from, to, text);\n        let lines = appendText(this.text, appendText(text.text, sliceText(this.text, 0, from)), to);\n        let newLen = this.length + text.length - (to - from);\n        if (lines.length <= 32 /* Tree.Branch */)\n            return new TextLeaf(lines, newLen);\n        return TextNode.from(TextLeaf.split(lines, []), newLen);\n    }\n    sliceString(from, to = this.length, lineSep = \"\\n\") {\n        let result = \"\";\n        for (let pos = 0, i = 0; pos <= to && i < this.text.length; i++) {\n            let line = this.text[i], end = pos + line.length;\n            if (pos > from && i)\n                result += lineSep;\n            if (from < end && to > pos)\n                result += line.slice(Math.max(0, from - pos), to - pos);\n            pos = end + 1;\n        }\n        return result;\n    }\n    flatten(target) {\n        for (let line of this.text)\n            target.push(line);\n    }\n    scanIdentical() { return 0; }\n    static split(text, target) {\n        let part = [], len = -1;\n        for (let line of text) {\n            part.push(line);\n            len += line.length + 1;\n            if (part.length == 32 /* Tree.Branch */) {\n                target.push(new TextLeaf(part, len));\n                part = [];\n                len = -1;\n            }\n        }\n        if (len > -1)\n            target.push(new TextLeaf(part, len));\n        return target;\n    }\n}\n// Nodes provide the tree structure of the `Text` type. They store a\n// number of other nodes or leaves, taking care to balance themselves\n// on changes. There are implied line breaks _between_ the children of\n// a node (but not before the first or after the last child).\nclass TextNode extends Text {\n    constructor(children, length) {\n        super();\n        this.children = children;\n        this.length = length;\n        this.lines = 0;\n        for (let child of children)\n            this.lines += child.lines;\n    }\n    lineInner(target, isLine, line, offset) {\n        for (let i = 0;; i++) {\n            let child = this.children[i], end = offset + child.length, endLine = line + child.lines - 1;\n            if ((isLine ? endLine : end) >= target)\n                return child.lineInner(target, isLine, line, offset);\n            offset = end + 1;\n            line = endLine + 1;\n        }\n    }\n    decompose(from, to, target, open) {\n        for (let i = 0, pos = 0; pos <= to && i < this.children.length; i++) {\n            let child = this.children[i], end = pos + child.length;\n            if (from <= end && to >= pos) {\n                let childOpen = open & ((pos <= from ? 1 /* Open.From */ : 0) | (end >= to ? 2 /* Open.To */ : 0));\n                if (pos >= from && end <= to && !childOpen)\n                    target.push(child);\n                else\n                    child.decompose(from - pos, to - pos, target, childOpen);\n            }\n            pos = end + 1;\n        }\n    }\n    replace(from, to, text) {\n        if (text.lines < this.lines)\n            for (let i = 0, pos = 0; i < this.children.length; i++) {\n                let child = this.children[i], end = pos + child.length;\n                // Fast path: if the change only affects one child and the\n                // child's size remains in the acceptable range, only update\n                // that child\n                if (from >= pos && to <= end) {\n                    let updated = child.replace(from - pos, to - pos, text);\n                    let totalLines = this.lines - child.lines + updated.lines;\n                    if (updated.lines < (totalLines >> (5 /* Tree.BranchShift */ - 1)) &&\n                        updated.lines > (totalLines >> (5 /* Tree.BranchShift */ + 1))) {\n                        let copy = this.children.slice();\n                        copy[i] = updated;\n                        return new TextNode(copy, this.length - (to - from) + text.length);\n                    }\n                    return super.replace(pos, end, updated);\n                }\n                pos = end + 1;\n            }\n        return super.replace(from, to, text);\n    }\n    sliceString(from, to = this.length, lineSep = \"\\n\") {\n        let result = \"\";\n        for (let i = 0, pos = 0; i < this.children.length && pos <= to; i++) {\n            let child = this.children[i], end = pos + child.length;\n            if (pos > from && i)\n                result += lineSep;\n            if (from < end && to > pos)\n                result += child.sliceString(from - pos, to - pos, lineSep);\n            pos = end + 1;\n        }\n        return result;\n    }\n    flatten(target) {\n        for (let child of this.children)\n            child.flatten(target);\n    }\n    scanIdentical(other, dir) {\n        if (!(other instanceof TextNode))\n            return 0;\n        let length = 0;\n        let [iA, iB, eA, eB] = dir > 0 ? [0, 0, this.children.length, other.children.length]\n            : [this.children.length - 1, other.children.length - 1, -1, -1];\n        for (;; iA += dir, iB += dir) {\n            if (iA == eA || iB == eB)\n                return length;\n            let chA = this.children[iA], chB = other.children[iB];\n            if (chA != chB)\n                return length + chA.scanIdentical(chB, dir);\n            length += chA.length + 1;\n        }\n    }\n    static from(children, length = children.reduce((l, ch) => l + ch.length + 1, -1)) {\n        let lines = 0;\n        for (let ch of children)\n            lines += ch.lines;\n        if (lines < 32 /* Tree.Branch */) {\n            let flat = [];\n            for (let ch of children)\n                ch.flatten(flat);\n            return new TextLeaf(flat, length);\n        }\n        let chunk = Math.max(32 /* Tree.Branch */, lines >> 5 /* Tree.BranchShift */), maxChunk = chunk << 1, minChunk = chunk >> 1;\n        let chunked = [], currentLines = 0, currentLen = -1, currentChunk = [];\n        function add(child) {\n            let last;\n            if (child.lines > maxChunk && child instanceof TextNode) {\n                for (let node of child.children)\n                    add(node);\n            }\n            else if (child.lines > minChunk && (currentLines > minChunk || !currentLines)) {\n                flush();\n                chunked.push(child);\n            }\n            else if (child instanceof TextLeaf && currentLines &&\n                (last = currentChunk[currentChunk.length - 1]) instanceof TextLeaf &&\n                child.lines + last.lines <= 32 /* Tree.Branch */) {\n                currentLines += child.lines;\n                currentLen += child.length + 1;\n                currentChunk[currentChunk.length - 1] = new TextLeaf(last.text.concat(child.text), last.length + 1 + child.length);\n            }\n            else {\n                if (currentLines + child.lines > chunk)\n                    flush();\n                currentLines += child.lines;\n                currentLen += child.length + 1;\n                currentChunk.push(child);\n            }\n        }\n        function flush() {\n            if (currentLines == 0)\n                return;\n            chunked.push(currentChunk.length == 1 ? currentChunk[0] : TextNode.from(currentChunk, currentLen));\n            currentLen = -1;\n            currentLines = currentChunk.length = 0;\n        }\n        for (let child of children)\n            add(child);\n        flush();\n        return chunked.length == 1 ? chunked[0] : new TextNode(chunked, length);\n    }\n}\nText.empty = /*@__PURE__*/new TextLeaf([\"\"], 0);\nfunction textLength(text) {\n    let length = -1;\n    for (let line of text)\n        length += line.length + 1;\n    return length;\n}\nfunction appendText(text, target, from = 0, to = 1e9) {\n    for (let pos = 0, i = 0, first = true; i < text.length && pos <= to; i++) {\n        let line = text[i], end = pos + line.length;\n        if (end >= from) {\n            if (end > to)\n                line = line.slice(0, to - pos);\n            if (pos < from)\n                line = line.slice(from - pos);\n            if (first) {\n                target[target.length - 1] += line;\n                first = false;\n            }\n            else\n                target.push(line);\n        }\n        pos = end + 1;\n    }\n    return target;\n}\nfunction sliceText(text, from, to) {\n    return appendText(text, [\"\"], from, to);\n}\nclass RawTextCursor {\n    constructor(text, dir = 1) {\n        this.dir = dir;\n        this.done = false;\n        this.lineBreak = false;\n        this.value = \"\";\n        this.nodes = [text];\n        this.offsets = [dir > 0 ? 1 : (text instanceof TextLeaf ? text.text.length : text.children.length) << 1];\n    }\n    nextInner(skip, dir) {\n        this.done = this.lineBreak = false;\n        for (;;) {\n            let last = this.nodes.length - 1;\n            let top = this.nodes[last], offsetValue = this.offsets[last], offset = offsetValue >> 1;\n            let size = top instanceof TextLeaf ? top.text.length : top.children.length;\n            if (offset == (dir > 0 ? size : 0)) {\n                if (last == 0) {\n                    this.done = true;\n                    this.value = \"\";\n                    return this;\n                }\n                if (dir > 0)\n                    this.offsets[last - 1]++;\n                this.nodes.pop();\n                this.offsets.pop();\n            }\n            else if ((offsetValue & 1) == (dir > 0 ? 0 : 1)) {\n                this.offsets[last] += dir;\n                if (skip == 0) {\n                    this.lineBreak = true;\n                    this.value = \"\\n\";\n                    return this;\n                }\n                skip--;\n            }\n            else if (top instanceof TextLeaf) {\n                // Move to the next string\n                let next = top.text[offset + (dir < 0 ? -1 : 0)];\n                this.offsets[last] += dir;\n                if (next.length > Math.max(0, skip)) {\n                    this.value = skip == 0 ? next : dir > 0 ? next.slice(skip) : next.slice(0, next.length - skip);\n                    return this;\n                }\n                skip -= next.length;\n            }\n            else {\n                let next = top.children[offset + (dir < 0 ? -1 : 0)];\n                if (skip > next.length) {\n                    skip -= next.length;\n                    this.offsets[last] += dir;\n                }\n                else {\n                    if (dir < 0)\n                        this.offsets[last]--;\n                    this.nodes.push(next);\n                    this.offsets.push(dir > 0 ? 1 : (next instanceof TextLeaf ? next.text.length : next.children.length) << 1);\n                }\n            }\n        }\n    }\n    next(skip = 0) {\n        if (skip < 0) {\n            this.nextInner(-skip, (-this.dir));\n            skip = this.value.length;\n        }\n        return this.nextInner(skip, this.dir);\n    }\n}\nclass PartialTextCursor {\n    constructor(text, start, end) {\n        this.value = \"\";\n        this.done = false;\n        this.cursor = new RawTextCursor(text, start > end ? -1 : 1);\n        this.pos = start > end ? text.length : 0;\n        this.from = Math.min(start, end);\n        this.to = Math.max(start, end);\n    }\n    nextInner(skip, dir) {\n        if (dir < 0 ? this.pos <= this.from : this.pos >= this.to) {\n            this.value = \"\";\n            this.done = true;\n            return this;\n        }\n        skip += Math.max(0, dir < 0 ? this.pos - this.to : this.from - this.pos);\n        let limit = dir < 0 ? this.pos - this.from : this.to - this.pos;\n        if (skip > limit)\n            skip = limit;\n        limit -= skip;\n        let { value } = this.cursor.next(skip);\n        this.pos += (value.length + skip) * dir;\n        this.value = value.length <= limit ? value : dir < 0 ? value.slice(value.length - limit) : value.slice(0, limit);\n        this.done = !this.value;\n        return this;\n    }\n    next(skip = 0) {\n        if (skip < 0)\n            skip = Math.max(skip, this.from - this.pos);\n        else if (skip > 0)\n            skip = Math.min(skip, this.to - this.pos);\n        return this.nextInner(skip, this.cursor.dir);\n    }\n    get lineBreak() { return this.cursor.lineBreak && this.value != \"\"; }\n}\nclass LineCursor {\n    constructor(inner) {\n        this.inner = inner;\n        this.afterBreak = true;\n        this.value = \"\";\n        this.done = false;\n    }\n    next(skip = 0) {\n        let { done, lineBreak, value } = this.inner.next(skip);\n        if (done) {\n            this.done = true;\n            this.value = \"\";\n        }\n        else if (lineBreak) {\n            if (this.afterBreak) {\n                this.value = \"\";\n            }\n            else {\n                this.afterBreak = true;\n                this.next();\n            }\n        }\n        else {\n            this.value = value;\n            this.afterBreak = false;\n        }\n        return this;\n    }\n    get lineBreak() { return false; }\n}\nif (typeof Symbol != \"undefined\") {\n    Text.prototype[Symbol.iterator] = function () { return this.iter(); };\n    RawTextCursor.prototype[Symbol.iterator] = PartialTextCursor.prototype[Symbol.iterator] =\n        LineCursor.prototype[Symbol.iterator] = function () { return this; };\n}\n/**\nThis type describes a line in the document. It is created\non-demand when lines are [queried](https://codemirror.net/6/docs/ref/#state.Text.lineAt).\n*/\nclass Line {\n    /**\n    @internal\n    */\n    constructor(\n    /**\n    The position of the start of the line.\n    */\n    from, \n    /**\n    The position at the end of the line (_before_ the line break,\n    or at the end of document for the last line).\n    */\n    to, \n    /**\n    This line's line number (1-based).\n    */\n    number, \n    /**\n    The line's content.\n    */\n    text) {\n        this.from = from;\n        this.to = to;\n        this.number = number;\n        this.text = text;\n    }\n    /**\n    The length of the line (not including any line break after it).\n    */\n    get length() { return this.to - this.from; }\n}\n\n// Compressed representation of the Grapheme_Cluster_Break=Extend\n// information from\n// http://www.unicode.org/Public/13.0.0/ucd/auxiliary/GraphemeBreakProperty.txt.\n// Each pair of elements represents a range, as an offet from the\n// previous range and a length. Numbers are in base-36, with the empty\n// string being a shorthand for 1.\nlet extend = /*@__PURE__*/\"lc,34,7n,7,7b,19,,,,2,,2,,,20,b,1c,l,g,,2t,7,2,6,2,2,,4,z,,u,r,2j,b,1m,9,9,,o,4,,9,,3,,5,17,3,3b,f,,w,1j,,,,4,8,4,,3,7,a,2,t,,1m,,,,2,4,8,,9,,a,2,q,,2,2,1l,,4,2,4,2,2,3,3,,u,2,3,,b,2,1l,,4,5,,2,4,,k,2,m,6,,,1m,,,2,,4,8,,7,3,a,2,u,,1n,,,,c,,9,,14,,3,,1l,3,5,3,,4,7,2,b,2,t,,1m,,2,,2,,3,,5,2,7,2,b,2,s,2,1l,2,,,2,4,8,,9,,a,2,t,,20,,4,,2,3,,,8,,29,,2,7,c,8,2q,,2,9,b,6,22,2,r,,,,,,1j,e,,5,,2,5,b,,10,9,,2u,4,,6,,2,2,2,p,2,4,3,g,4,d,,2,2,6,,f,,jj,3,qa,3,t,3,t,2,u,2,1s,2,,7,8,,2,b,9,,19,3,3b,2,y,,3a,3,4,2,9,,6,3,63,2,2,,1m,,,7,,,,,2,8,6,a,2,,1c,h,1r,4,1c,7,,,5,,14,9,c,2,w,4,2,2,,3,1k,,,2,3,,,3,1m,8,2,2,48,3,,d,,7,4,,6,,3,2,5i,1m,,5,ek,,5f,x,2da,3,3x,,2o,w,fe,6,2x,2,n9w,4,,a,w,2,28,2,7k,,3,,4,,p,2,5,,47,2,q,i,d,,12,8,p,b,1a,3,1c,,2,4,2,2,13,,1v,6,2,2,2,2,c,,8,,1b,,1f,,,3,2,2,5,2,,,16,2,8,,6m,,2,,4,,fn4,,kh,g,g,g,a6,2,gt,,6a,,45,5,1ae,3,,2,5,4,14,3,4,,4l,2,fx,4,ar,2,49,b,4w,,1i,f,1k,3,1d,4,2,2,1x,3,10,5,,8,1q,,c,2,1g,9,a,4,2,,2n,3,2,,,2,6,,4g,,3,8,l,2,1l,2,,,,,m,,e,7,3,5,5f,8,2,3,,,n,,29,,2,6,,,2,,,2,,2,6j,,2,4,6,2,,2,r,2,2d,8,2,,,2,2y,,,,2,6,,,2t,3,2,4,,5,77,9,,2,6t,,a,2,,,4,,40,4,2,2,4,,w,a,14,6,2,4,8,,9,6,2,3,1a,d,,2,ba,7,,6,,,2a,m,2,7,,2,,2,3e,6,3,,,2,,7,,,20,2,3,,,,9n,2,f0b,5,1n,7,t4,,1r,4,29,,f5k,2,43q,,,3,4,5,8,8,2,7,u,4,44,3,1iz,1j,4,1e,8,,e,,m,5,,f,11s,7,,h,2,7,,2,,5,79,7,c5,4,15s,7,31,7,240,5,gx7k,2o,3k,6o\".split(\",\").map(s => s ? parseInt(s, 36) : 1);\n// Convert offsets into absolute values\nfor (let i = 1; i < extend.length; i++)\n    extend[i] += extend[i - 1];\nfunction isExtendingChar(code) {\n    for (let i = 1; i < extend.length; i += 2)\n        if (extend[i] > code)\n            return extend[i - 1] <= code;\n    return false;\n}\nfunction isRegionalIndicator(code) {\n    return code >= 0x1F1E6 && code <= 0x1F1FF;\n}\nconst ZWJ = 0x200d;\n/**\nReturns a next grapheme cluster break _after_ (not equal to)\n`pos`, if `forward` is true, or before otherwise. Returns `pos`\nitself if no further cluster break is available in the string.\nMoves across surrogate pairs, extending characters (when\n`includeExtending` is true), characters joined with zero-width\njoiners, and flag emoji.\n*/\nfunction findClusterBreak(str, pos, forward = true, includeExtending = true) {\n    return (forward ? nextClusterBreak : prevClusterBreak)(str, pos, includeExtending);\n}\nfunction nextClusterBreak(str, pos, includeExtending) {\n    if (pos == str.length)\n        return pos;\n    // If pos is in the middle of a surrogate pair, move to its start\n    if (pos && surrogateLow(str.charCodeAt(pos)) && surrogateHigh(str.charCodeAt(pos - 1)))\n        pos--;\n    let prev = codePointAt(str, pos);\n    pos += codePointSize(prev);\n    while (pos < str.length) {\n        let next = codePointAt(str, pos);\n        if (prev == ZWJ || next == ZWJ || includeExtending && isExtendingChar(next)) {\n            pos += codePointSize(next);\n            prev = next;\n        }\n        else if (isRegionalIndicator(next)) {\n            let countBefore = 0, i = pos - 2;\n            while (i >= 0 && isRegionalIndicator(codePointAt(str, i))) {\n                countBefore++;\n                i -= 2;\n            }\n            if (countBefore % 2 == 0)\n                break;\n            else\n                pos += 2;\n        }\n        else {\n            break;\n        }\n    }\n    return pos;\n}\nfunction prevClusterBreak(str, pos, includeExtending) {\n    while (pos > 0) {\n        let found = nextClusterBreak(str, pos - 2, includeExtending);\n        if (found < pos)\n            return found;\n        pos--;\n    }\n    return 0;\n}\nfunction surrogateLow(ch) { return ch >= 0xDC00 && ch < 0xE000; }\nfunction surrogateHigh(ch) { return ch >= 0xD800 && ch < 0xDC00; }\n/**\nFind the code point at the given position in a string (like the\n[`codePointAt`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/codePointAt)\nstring method).\n*/\nfunction codePointAt(str, pos) {\n    let code0 = str.charCodeAt(pos);\n    if (!surrogateHigh(code0) || pos + 1 == str.length)\n        return code0;\n    let code1 = str.charCodeAt(pos + 1);\n    if (!surrogateLow(code1))\n        return code0;\n    return ((code0 - 0xd800) << 10) + (code1 - 0xdc00) + 0x10000;\n}\n/**\nGiven a Unicode codepoint, return the JavaScript string that\nrespresents it (like\n[`String.fromCodePoint`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/fromCodePoint)).\n*/\nfunction fromCodePoint(code) {\n    if (code <= 0xffff)\n        return String.fromCharCode(code);\n    code -= 0x10000;\n    return String.fromCharCode((code >> 10) + 0xd800, (code & 1023) + 0xdc00);\n}\n/**\nThe amount of positions a character takes up a JavaScript string.\n*/\nfunction codePointSize(code) { return code < 0x10000 ? 1 : 2; }\n\nconst DefaultSplit = /\\r\\n?|\\n/;\n/**\nDistinguishes different ways in which positions can be mapped.\n*/\nvar MapMode = /*@__PURE__*/(function (MapMode) {\n    /**\n    Map a position to a valid new position, even when its context\n    was deleted.\n    */\n    MapMode[MapMode[\"Simple\"] = 0] = \"Simple\";\n    /**\n    Return null if deletion happens across the position.\n    */\n    MapMode[MapMode[\"TrackDel\"] = 1] = \"TrackDel\";\n    /**\n    Return null if the character _before_ the position is deleted.\n    */\n    MapMode[MapMode[\"TrackBefore\"] = 2] = \"TrackBefore\";\n    /**\n    Return null if the character _after_ the position is deleted.\n    */\n    MapMode[MapMode[\"TrackAfter\"] = 3] = \"TrackAfter\";\nreturn MapMode})(MapMode || (MapMode = {}));\n/**\nA change description is a variant of [change set](https://codemirror.net/6/docs/ref/#state.ChangeSet)\nthat doesn't store the inserted text. As such, it can't be\napplied, but is cheaper to store and manipulate.\n*/\nclass ChangeDesc {\n    // Sections are encoded as pairs of integers. The first is the\n    // length in the current document, and the second is -1 for\n    // unaffected sections, and the length of the replacement content\n    // otherwise. So an insertion would be (0, n>0), a deletion (n>0,\n    // 0), and a replacement two positive numbers.\n    /**\n    @internal\n    */\n    constructor(\n    /**\n    @internal\n    */\n    sections) {\n        this.sections = sections;\n    }\n    /**\n    The length of the document before the change.\n    */\n    get length() {\n        let result = 0;\n        for (let i = 0; i < this.sections.length; i += 2)\n            result += this.sections[i];\n        return result;\n    }\n    /**\n    The length of the document after the change.\n    */\n    get newLength() {\n        let result = 0;\n        for (let i = 0; i < this.sections.length; i += 2) {\n            let ins = this.sections[i + 1];\n            result += ins < 0 ? this.sections[i] : ins;\n        }\n        return result;\n    }\n    /**\n    False when there are actual changes in this set.\n    */\n    get empty() { return this.sections.length == 0 || this.sections.length == 2 && this.sections[1] < 0; }\n    /**\n    Iterate over the unchanged parts left by these changes. `posA`\n    provides the position of the range in the old document, `posB`\n    the new position in the changed document.\n    */\n    iterGaps(f) {\n        for (let i = 0, posA = 0, posB = 0; i < this.sections.length;) {\n            let len = this.sections[i++], ins = this.sections[i++];\n            if (ins < 0) {\n                f(posA, posB, len);\n                posB += len;\n            }\n            else {\n                posB += ins;\n            }\n            posA += len;\n        }\n    }\n    /**\n    Iterate over the ranges changed by these changes. (See\n    [`ChangeSet.iterChanges`](https://codemirror.net/6/docs/ref/#state.ChangeSet.iterChanges) for a\n    variant that also provides you with the inserted text.)\n    `fromA`/`toA` provides the extent of the change in the starting\n    document, `fromB`/`toB` the extent of the replacement in the\n    changed document.\n    \n    When `individual` is true, adjacent changes (which are kept\n    separate for [position mapping](https://codemirror.net/6/docs/ref/#state.ChangeDesc.mapPos)) are\n    reported separately.\n    */\n    iterChangedRanges(f, individual = false) {\n        iterChanges(this, f, individual);\n    }\n    /**\n    Get a description of the inverted form of these changes.\n    */\n    get invertedDesc() {\n        let sections = [];\n        for (let i = 0; i < this.sections.length;) {\n            let len = this.sections[i++], ins = this.sections[i++];\n            if (ins < 0)\n                sections.push(len, ins);\n            else\n                sections.push(ins, len);\n        }\n        return new ChangeDesc(sections);\n    }\n    /**\n    Compute the combined effect of applying another set of changes\n    after this one. The length of the document after this set should\n    match the length before `other`.\n    */\n    composeDesc(other) { return this.empty ? other : other.empty ? this : composeSets(this, other); }\n    /**\n    Map this description, which should start with the same document\n    as `other`, over another set of changes, so that it can be\n    applied after it. When `before` is true, map as if the changes\n    in `other` happened before the ones in `this`.\n    */\n    mapDesc(other, before = false) { return other.empty ? this : mapSet(this, other, before); }\n    mapPos(pos, assoc = -1, mode = MapMode.Simple) {\n        let posA = 0, posB = 0;\n        for (let i = 0; i < this.sections.length;) {\n            let len = this.sections[i++], ins = this.sections[i++], endA = posA + len;\n            if (ins < 0) {\n                if (endA > pos)\n                    return posB + (pos - posA);\n                posB += len;\n            }\n            else {\n                if (mode != MapMode.Simple && endA >= pos &&\n                    (mode == MapMode.TrackDel && posA < pos && endA > pos ||\n                        mode == MapMode.TrackBefore && posA < pos ||\n                        mode == MapMode.TrackAfter && endA > pos))\n                    return null;\n                if (endA > pos || endA == pos && assoc < 0 && !len)\n                    return pos == posA || assoc < 0 ? posB : posB + ins;\n                posB += ins;\n            }\n            posA = endA;\n        }\n        if (pos > posA)\n            throw new RangeError(`Position ${pos} is out of range for changeset of length ${posA}`);\n        return posB;\n    }\n    /**\n    Check whether these changes touch a given range. When one of the\n    changes entirely covers the range, the string `\"cover\"` is\n    returned.\n    */\n    touchesRange(from, to = from) {\n        for (let i = 0, pos = 0; i < this.sections.length && pos <= to;) {\n            let len = this.sections[i++], ins = this.sections[i++], end = pos + len;\n            if (ins >= 0 && pos <= to && end >= from)\n                return pos < from && end > to ? \"cover\" : true;\n            pos = end;\n        }\n        return false;\n    }\n    /**\n    @internal\n    */\n    toString() {\n        let result = \"\";\n        for (let i = 0; i < this.sections.length;) {\n            let len = this.sections[i++], ins = this.sections[i++];\n            result += (result ? \" \" : \"\") + len + (ins >= 0 ? \":\" + ins : \"\");\n        }\n        return result;\n    }\n    /**\n    Serialize this change desc to a JSON-representable value.\n    */\n    toJSON() { return this.sections; }\n    /**\n    Create a change desc from its JSON representation (as produced\n    by [`toJSON`](https://codemirror.net/6/docs/ref/#state.ChangeDesc.toJSON).\n    */\n    static fromJSON(json) {\n        if (!Array.isArray(json) || json.length % 2 || json.some(a => typeof a != \"number\"))\n            throw new RangeError(\"Invalid JSON representation of ChangeDesc\");\n        return new ChangeDesc(json);\n    }\n    /**\n    @internal\n    */\n    static create(sections) { return new ChangeDesc(sections); }\n}\n/**\nA change set represents a group of modifications to a document. It\nstores the document length, and can only be applied to documents\nwith exactly that length.\n*/\nclass ChangeSet extends ChangeDesc {\n    constructor(sections, \n    /**\n    @internal\n    */\n    inserted) {\n        super(sections);\n        this.inserted = inserted;\n    }\n    /**\n    Apply the changes to a document, returning the modified\n    document.\n    */\n    apply(doc) {\n        if (this.length != doc.length)\n            throw new RangeError(\"Applying change set to a document with the wrong length\");\n        iterChanges(this, (fromA, toA, fromB, _toB, text) => doc = doc.replace(fromB, fromB + (toA - fromA), text), false);\n        return doc;\n    }\n    mapDesc(other, before = false) { return mapSet(this, other, before, true); }\n    /**\n    Given the document as it existed _before_ the changes, return a\n    change set that represents the inverse of this set, which could\n    be used to go from the document created by the changes back to\n    the document as it existed before the changes.\n    */\n    invert(doc) {\n        let sections = this.sections.slice(), inserted = [];\n        for (let i = 0, pos = 0; i < sections.length; i += 2) {\n            let len = sections[i], ins = sections[i + 1];\n            if (ins >= 0) {\n                sections[i] = ins;\n                sections[i + 1] = len;\n                let index = i >> 1;\n                while (inserted.length < index)\n                    inserted.push(Text.empty);\n                inserted.push(len ? doc.slice(pos, pos + len) : Text.empty);\n            }\n            pos += len;\n        }\n        return new ChangeSet(sections, inserted);\n    }\n    /**\n    Combine two subsequent change sets into a single set. `other`\n    must start in the document produced by `this`. If `this` goes\n    `docA` \u2192 `docB` and `other` represents `docB` \u2192 `docC`, the\n    returned value will represent the change `docA` \u2192 `docC`.\n    */\n    compose(other) { return this.empty ? other : other.empty ? this : composeSets(this, other, true); }\n    /**\n    Given another change set starting in the same document, maps this\n    change set over the other, producing a new change set that can be\n    applied to the document produced by applying `other`. When\n    `before` is `true`, order changes as if `this` comes before\n    `other`, otherwise (the default) treat `other` as coming first.\n    \n    Given two changes `A` and `B`, `A.compose(B.map(A))` and\n    `B.compose(A.map(B, true))` will produce the same document. This\n    provides a basic form of [operational\n    transformation](https://en.wikipedia.org/wiki/Operational_transformation),\n    and can be used for collaborative editing.\n    */\n    map(other, before = false) { return other.empty ? this : mapSet(this, other, before, true); }\n    /**\n    Iterate over the changed ranges in the document, calling `f` for\n    each, with the range in the original document (`fromA`-`toA`)\n    and the range that replaces it in the new document\n    (`fromB`-`toB`).\n    \n    When `individual` is true, adjacent changes are reported\n    separately.\n    */\n    iterChanges(f, individual = false) {\n        iterChanges(this, f, individual);\n    }\n    /**\n    Get a [change description](https://codemirror.net/6/docs/ref/#state.ChangeDesc) for this change\n    set.\n    */\n    get desc() { return ChangeDesc.create(this.sections); }\n    /**\n    @internal\n    */\n    filter(ranges) {\n        let resultSections = [], resultInserted = [], filteredSections = [];\n        let iter = new SectionIter(this);\n        done: for (let i = 0, pos = 0;;) {\n            let next = i == ranges.length ? 1e9 : ranges[i++];\n            while (pos < next || pos == next && iter.len == 0) {\n                if (iter.done)\n                    break done;\n                let len = Math.min(iter.len, next - pos);\n                addSection(filteredSections, len, -1);\n                let ins = iter.ins == -1 ? -1 : iter.off == 0 ? iter.ins : 0;\n                addSection(resultSections, len, ins);\n                if (ins > 0)\n                    addInsert(resultInserted, resultSections, iter.text);\n                iter.forward(len);\n                pos += len;\n            }\n            let end = ranges[i++];\n            while (pos < end) {\n                if (iter.done)\n                    break done;\n                let len = Math.min(iter.len, end - pos);\n                addSection(resultSections, len, -1);\n                addSection(filteredSections, len, iter.ins == -1 ? -1 : iter.off == 0 ? iter.ins : 0);\n                iter.forward(len);\n                pos += len;\n            }\n        }\n        return { changes: new ChangeSet(resultSections, resultInserted),\n            filtered: ChangeDesc.create(filteredSections) };\n    }\n    /**\n    Serialize this change set to a JSON-representable value.\n    */\n    toJSON() {\n        let parts = [];\n        for (let i = 0; i < this.sections.length; i += 2) {\n            let len = this.sections[i], ins = this.sections[i + 1];\n            if (ins < 0)\n                parts.push(len);\n            else if (ins == 0)\n                parts.push([len]);\n            else\n                parts.push([len].concat(this.inserted[i >> 1].toJSON()));\n        }\n        return parts;\n    }\n    /**\n    Create a change set for the given changes, for a document of the\n    given length, using `lineSep` as line separator.\n    */\n    static of(changes, length, lineSep) {\n        let sections = [], inserted = [], pos = 0;\n        let total = null;\n        function flush(force = false) {\n            if (!force && !sections.length)\n                return;\n            if (pos < length)\n                addSection(sections, length - pos, -1);\n            let set = new ChangeSet(sections, inserted);\n            total = total ? total.compose(set.map(total)) : set;\n            sections = [];\n            inserted = [];\n            pos = 0;\n        }\n        function process(spec) {\n            if (Array.isArray(spec)) {\n                for (let sub of spec)\n                    process(sub);\n            }\n            else if (spec instanceof ChangeSet) {\n                if (spec.length != length)\n                    throw new RangeError(`Mismatched change set length (got ${spec.length}, expected ${length})`);\n                flush();\n                total = total ? total.compose(spec.map(total)) : spec;\n            }\n            else {\n                let { from, to = from, insert } = spec;\n                if (from > to || from < 0 || to > length)\n                    throw new RangeError(`Invalid change range ${from} to ${to} (in doc of length ${length})`);\n                let insText = !insert ? Text.empty : typeof insert == \"string\" ? Text.of(insert.split(lineSep || DefaultSplit)) : insert;\n                let insLen = insText.length;\n                if (from == to && insLen == 0)\n                    return;\n                if (from < pos)\n                    flush();\n                if (from > pos)\n                    addSection(sections, from - pos, -1);\n                addSection(sections, to - from, insLen);\n                addInsert(inserted, sections, insText);\n                pos = to;\n            }\n        }\n        process(changes);\n        flush(!total);\n        return total;\n    }\n    /**\n    Create an empty changeset of the given length.\n    */\n    static empty(length) {\n        return new ChangeSet(length ? [length, -1] : [], []);\n    }\n    /**\n    Create a changeset from its JSON representation (as produced by\n    [`toJSON`](https://codemirror.net/6/docs/ref/#state.ChangeSet.toJSON).\n    */\n    static fromJSON(json) {\n        if (!Array.isArray(json))\n            throw new RangeError(\"Invalid JSON representation of ChangeSet\");\n        let sections = [], inserted = [];\n        for (let i = 0; i < json.length; i++) {\n            let part = json[i];\n            if (typeof part == \"number\") {\n                sections.push(part, -1);\n            }\n            else if (!Array.isArray(part) || typeof part[0] != \"number\" || part.some((e, i) => i && typeof e != \"string\")) {\n                throw new RangeError(\"Invalid JSON representation of ChangeSet\");\n            }\n            else if (part.length == 1) {\n                sections.push(part[0], 0);\n            }\n            else {\n                while (inserted.length < i)\n                    inserted.push(Text.empty);\n                inserted[i] = Text.of(part.slice(1));\n                sections.push(part[0], inserted[i].length);\n            }\n        }\n        return new ChangeSet(sections, inserted);\n    }\n    /**\n    @internal\n    */\n    static createSet(sections, inserted) {\n        return new ChangeSet(sections, inserted);\n    }\n}\nfunction addSection(sections, len, ins, forceJoin = false) {\n    if (len == 0 && ins <= 0)\n        return;\n    let last = sections.length - 2;\n    if (last >= 0 && ins <= 0 && ins == sections[last + 1])\n        sections[last] += len;\n    else if (len == 0 && sections[last] == 0)\n        sections[last + 1] += ins;\n    else if (forceJoin) {\n        sections[last] += len;\n        sections[last + 1] += ins;\n    }\n    else\n        sections.push(len, ins);\n}\nfunction addInsert(values, sections, value) {\n    if (value.length == 0)\n        return;\n    let index = (sections.length - 2) >> 1;\n    if (index < values.length) {\n        values[values.length - 1] = values[values.length - 1].append(value);\n    }\n    else {\n        while (values.length < index)\n            values.push(Text.empty);\n        values.push(value);\n    }\n}\nfunction iterChanges(desc, f, individual) {\n    let inserted = desc.inserted;\n    for (let posA = 0, posB = 0, i = 0; i < desc.sections.length;) {\n        let len = desc.sections[i++], ins = desc.sections[i++];\n        if (ins < 0) {\n            posA += len;\n            posB += len;\n        }\n        else {\n            let endA = posA, endB = posB, text = Text.empty;\n            for (;;) {\n                endA += len;\n                endB += ins;\n                if (ins && inserted)\n                    text = text.append(inserted[(i - 2) >> 1]);\n                if (individual || i == desc.sections.length || desc.sections[i + 1] < 0)\n                    break;\n                len = desc.sections[i++];\n                ins = desc.sections[i++];\n            }\n            f(posA, endA, posB, endB, text);\n            posA = endA;\n            posB = endB;\n        }\n    }\n}\nfunction mapSet(setA, setB, before, mkSet = false) {\n    // Produce a copy of setA that applies to the document after setB\n    // has been applied (assuming both start at the same document).\n    let sections = [], insert = mkSet ? [] : null;\n    let a = new SectionIter(setA), b = new SectionIter(setB);\n    // Iterate over both sets in parallel. inserted tracks, for changes\n    // in A that have to be processed piece-by-piece, whether their\n    // content has been inserted already, and refers to the section\n    // index.\n    for (let inserted = -1;;) {\n        if (a.ins == -1 && b.ins == -1) {\n            // Move across ranges skipped by both sets.\n            let len = Math.min(a.len, b.len);\n            addSection(sections, len, -1);\n            a.forward(len);\n            b.forward(len);\n        }\n        else if (b.ins >= 0 && (a.ins < 0 || inserted == a.i || a.off == 0 && (b.len < a.len || b.len == a.len && !before))) {\n            // If there's a change in B that comes before the next change in\n            // A (ordered by start pos, then len, then before flag), skip\n            // that (and process any changes in A it covers).\n            let len = b.len;\n            addSection(sections, b.ins, -1);\n            while (len) {\n                let piece = Math.min(a.len, len);\n                if (a.ins >= 0 && inserted < a.i && a.len <= piece) {\n                    addSection(sections, 0, a.ins);\n                    if (insert)\n                        addInsert(insert, sections, a.text);\n                    inserted = a.i;\n                }\n                a.forward(piece);\n                len -= piece;\n            }\n            b.next();\n        }\n        else if (a.ins >= 0) {\n            // Process the part of a change in A up to the start of the next\n            // non-deletion change in B (if overlapping).\n            let len = 0, left = a.len;\n            while (left) {\n                if (b.ins == -1) {\n                    let piece = Math.min(left, b.len);\n                    len += piece;\n                    left -= piece;\n                    b.forward(piece);\n                }\n                else if (b.ins == 0 && b.len < left) {\n                    left -= b.len;\n                    b.next();\n                }\n                else {\n                    break;\n                }\n            }\n            addSection(sections, len, inserted < a.i ? a.ins : 0);\n            if (insert && inserted < a.i)\n                addInsert(insert, sections, a.text);\n            inserted = a.i;\n            a.forward(a.len - left);\n        }\n        else if (a.done && b.done) {\n            return insert ? ChangeSet.createSet(sections, insert) : ChangeDesc.create(sections);\n        }\n        else {\n            throw new Error(\"Mismatched change set lengths\");\n        }\n    }\n}\nfunction composeSets(setA, setB, mkSet = false) {\n    let sections = [];\n    let insert = mkSet ? [] : null;\n    let a = new SectionIter(setA), b = new SectionIter(setB);\n    for (let open = false;;) {\n        if (a.done && b.done) {\n            return insert ? ChangeSet.createSet(sections, insert) : ChangeDesc.create(sections);\n        }\n        else if (a.ins == 0) { // Deletion in A\n            addSection(sections, a.len, 0, open);\n            a.next();\n        }\n        else if (b.len == 0 && !b.done) { // Insertion in B\n            addSection(sections, 0, b.ins, open);\n            if (insert)\n                addInsert(insert, sections, b.text);\n            b.next();\n        }\n        else if (a.done || b.done) {\n            throw new Error(\"Mismatched change set lengths\");\n        }\n        else {\n            let len = Math.min(a.len2, b.len), sectionLen = sections.length;\n            if (a.ins == -1) {\n                let insB = b.ins == -1 ? -1 : b.off ? 0 : b.ins;\n                addSection(sections, len, insB, open);\n                if (insert && insB)\n                    addInsert(insert, sections, b.text);\n            }\n            else if (b.ins == -1) {\n                addSection(sections, a.off ? 0 : a.len, len, open);\n                if (insert)\n                    addInsert(insert, sections, a.textBit(len));\n            }\n            else {\n                addSection(sections, a.off ? 0 : a.len, b.off ? 0 : b.ins, open);\n                if (insert && !b.off)\n                    addInsert(insert, sections, b.text);\n            }\n            open = (a.ins > len || b.ins >= 0 && b.len > len) && (open || sections.length > sectionLen);\n            a.forward2(len);\n            b.forward(len);\n        }\n    }\n}\nclass SectionIter {\n    constructor(set) {\n        this.set = set;\n        this.i = 0;\n        this.next();\n    }\n    next() {\n        let { sections } = this.set;\n        if (this.i < sections.length) {\n            this.len = sections[this.i++];\n            this.ins = sections[this.i++];\n        }\n        else {\n            this.len = 0;\n            this.ins = -2;\n        }\n        this.off = 0;\n    }\n    get done() { return this.ins == -2; }\n    get len2() { return this.ins < 0 ? this.len : this.ins; }\n    get text() {\n        let { inserted } = this.set, index = (this.i - 2) >> 1;\n        return index >= inserted.length ? Text.empty : inserted[index];\n    }\n    textBit(len) {\n        let { inserted } = this.set, index = (this.i - 2) >> 1;\n        return index >= inserted.length && !len ? Text.empty\n            : inserted[index].slice(this.off, len == null ? undefined : this.off + len);\n    }\n    forward(len) {\n        if (len == this.len)\n            this.next();\n        else {\n            this.len -= len;\n            this.off += len;\n        }\n    }\n    forward2(len) {\n        if (this.ins == -1)\n            this.forward(len);\n        else if (len == this.ins)\n            this.next();\n        else {\n            this.ins -= len;\n            this.off += len;\n        }\n    }\n}\n\n/**\nA single selection range. When\n[`allowMultipleSelections`](https://codemirror.net/6/docs/ref/#state.EditorState^allowMultipleSelections)\nis enabled, a [selection](https://codemirror.net/6/docs/ref/#state.EditorSelection) may hold\nmultiple ranges. By default, selections hold exactly one range.\n*/\nclass SelectionRange {\n    constructor(\n    /**\n    The lower boundary of the range.\n    */\n    from, \n    /**\n    The upper boundary of the range.\n    */\n    to, flags) {\n        this.from = from;\n        this.to = to;\n        this.flags = flags;\n    }\n    /**\n    The anchor of the range\u2014the side that doesn't move when you\n    extend it.\n    */\n    get anchor() { return this.flags & 32 /* RangeFlag.Inverted */ ? this.to : this.from; }\n    /**\n    The head of the range, which is moved when the range is\n    [extended](https://codemirror.net/6/docs/ref/#state.SelectionRange.extend).\n    */\n    get head() { return this.flags & 32 /* RangeFlag.Inverted */ ? this.from : this.to; }\n    /**\n    True when `anchor` and `head` are at the same position.\n    */\n    get empty() { return this.from == this.to; }\n    /**\n    If this is a cursor that is explicitly associated with the\n    character on one of its sides, this returns the side. -1 means\n    the character before its position, 1 the character after, and 0\n    means no association.\n    */\n    get assoc() { return this.flags & 8 /* RangeFlag.AssocBefore */ ? -1 : this.flags & 16 /* RangeFlag.AssocAfter */ ? 1 : 0; }\n    /**\n    The bidirectional text level associated with this cursor, if\n    any.\n    */\n    get bidiLevel() {\n        let level = this.flags & 7 /* RangeFlag.BidiLevelMask */;\n        return level == 7 ? null : level;\n    }\n    /**\n    The goal column (stored vertical offset) associated with a\n    cursor. This is used to preserve the vertical position when\n    [moving](https://codemirror.net/6/docs/ref/#view.EditorView.moveVertically) across\n    lines of different length.\n    */\n    get goalColumn() {\n        let value = this.flags >> 6 /* RangeFlag.GoalColumnOffset */;\n        return value == 16777215 /* RangeFlag.NoGoalColumn */ ? undefined : value;\n    }\n    /**\n    Map this range through a change, producing a valid range in the\n    updated document.\n    */\n    map(change, assoc = -1) {\n        let from, to;\n        if (this.empty) {\n            from = to = change.mapPos(this.from, assoc);\n        }\n        else {\n            from = change.mapPos(this.from, 1);\n            to = change.mapPos(this.to, -1);\n        }\n        return from == this.from && to == this.to ? this : new SelectionRange(from, to, this.flags);\n    }\n    /**\n    Extend this range to cover at least `from` to `to`.\n    */\n    extend(from, to = from) {\n        if (from <= this.anchor && to >= this.anchor)\n            return EditorSelection.range(from, to);\n        let head = Math.abs(from - this.anchor) > Math.abs(to - this.anchor) ? from : to;\n        return EditorSelection.range(this.anchor, head);\n    }\n    /**\n    Compare this range to another range.\n    */\n    eq(other) {\n        return this.anchor == other.anchor && this.head == other.head;\n    }\n    /**\n    Return a JSON-serializable object representing the range.\n    */\n    toJSON() { return { anchor: this.anchor, head: this.head }; }\n    /**\n    Convert a JSON representation of a range to a `SelectionRange`\n    instance.\n    */\n    static fromJSON(json) {\n        if (!json || typeof json.anchor != \"number\" || typeof json.head != \"number\")\n            throw new RangeError(\"Invalid JSON representation for SelectionRange\");\n        return EditorSelection.range(json.anchor, json.head);\n    }\n    /**\n    @internal\n    */\n    static create(from, to, flags) {\n        return new SelectionRange(from, to, flags);\n    }\n}\n/**\nAn editor selection holds one or more selection ranges.\n*/\nclass EditorSelection {\n    constructor(\n    /**\n    The ranges in the selection, sorted by position. Ranges cannot\n    overlap (but they may touch, if they aren't empty).\n    */\n    ranges, \n    /**\n    The index of the _main_ range in the selection (which is\n    usually the range that was added last).\n    */\n    mainIndex) {\n        this.ranges = ranges;\n        this.mainIndex = mainIndex;\n    }\n    /**\n    Map a selection through a change. Used to adjust the selection\n    position for changes.\n    */\n    map(change, assoc = -1) {\n        if (change.empty)\n            return this;\n        return EditorSelection.create(this.ranges.map(r => r.map(change, assoc)), this.mainIndex);\n    }\n    /**\n    Compare this selection to another selection.\n    */\n    eq(other) {\n        if (this.ranges.length != other.ranges.length ||\n            this.mainIndex != other.mainIndex)\n            return false;\n        for (let i = 0; i < this.ranges.length; i++)\n            if (!this.ranges[i].eq(other.ranges[i]))\n                return false;\n        return true;\n    }\n    /**\n    Get the primary selection range. Usually, you should make sure\n    your code applies to _all_ ranges, by using methods like\n    [`changeByRange`](https://codemirror.net/6/docs/ref/#state.EditorState.changeByRange).\n    */\n    get main() { return this.ranges[this.mainIndex]; }\n    /**\n    Make sure the selection only has one range. Returns a selection\n    holding only the main range from this selection.\n    */\n    asSingle() {\n        return this.ranges.length == 1 ? this : new EditorSelection([this.main], 0);\n    }\n    /**\n    Extend this selection with an extra range.\n    */\n    addRange(range, main = true) {\n        return EditorSelection.create([range].concat(this.ranges), main ? 0 : this.mainIndex + 1);\n    }\n    /**\n    Replace a given range with another range, and then normalize the\n    selection to merge and sort ranges if necessary.\n    */\n    replaceRange(range, which = this.mainIndex) {\n        let ranges = this.ranges.slice();\n        ranges[which] = range;\n        return EditorSelection.create(ranges, this.mainIndex);\n    }\n    /**\n    Convert this selection to an object that can be serialized to\n    JSON.\n    */\n    toJSON() {\n        return { ranges: this.ranges.map(r => r.toJSON()), main: this.mainIndex };\n    }\n    /**\n    Create a selection from a JSON representation.\n    */\n    static fromJSON(json) {\n        if (!json || !Array.isArray(json.ranges) || typeof json.main != \"number\" || json.main >= json.ranges.length)\n            throw new RangeError(\"Invalid JSON representation for EditorSelection\");\n        return new EditorSelection(json.ranges.map((r) => SelectionRange.fromJSON(r)), json.main);\n    }\n    /**\n    Create a selection holding a single range.\n    */\n    static single(anchor, head = anchor) {\n        return new EditorSelection([EditorSelection.range(anchor, head)], 0);\n    }\n    /**\n    Sort and merge the given set of ranges, creating a valid\n    selection.\n    */\n    static create(ranges, mainIndex = 0) {\n        if (ranges.length == 0)\n            throw new RangeError(\"A selection needs at least one range\");\n        for (let pos = 0, i = 0; i < ranges.length; i++) {\n            let range = ranges[i];\n            if (range.empty ? range.from <= pos : range.from < pos)\n                return EditorSelection.normalized(ranges.slice(), mainIndex);\n            pos = range.to;\n        }\n        return new EditorSelection(ranges, mainIndex);\n    }\n    /**\n    Create a cursor selection range at the given position. You can\n    safely ignore the optional arguments in most situations.\n    */\n    static cursor(pos, assoc = 0, bidiLevel, goalColumn) {\n        return SelectionRange.create(pos, pos, (assoc == 0 ? 0 : assoc < 0 ? 8 /* RangeFlag.AssocBefore */ : 16 /* RangeFlag.AssocAfter */) |\n            (bidiLevel == null ? 7 : Math.min(6, bidiLevel)) |\n            ((goalColumn !== null && goalColumn !== void 0 ? goalColumn : 16777215 /* RangeFlag.NoGoalColumn */) << 6 /* RangeFlag.GoalColumnOffset */));\n    }\n    /**\n    Create a selection range.\n    */\n    static range(anchor, head, goalColumn, bidiLevel) {\n        let flags = ((goalColumn !== null && goalColumn !== void 0 ? goalColumn : 16777215 /* RangeFlag.NoGoalColumn */) << 6 /* RangeFlag.GoalColumnOffset */) |\n            (bidiLevel == null ? 7 : Math.min(6, bidiLevel));\n        return head < anchor ? SelectionRange.create(head, anchor, 32 /* RangeFlag.Inverted */ | 16 /* RangeFlag.AssocAfter */ | flags)\n            : SelectionRange.create(anchor, head, (head > anchor ? 8 /* RangeFlag.AssocBefore */ : 0) | flags);\n    }\n    /**\n    @internal\n    */\n    static normalized(ranges, mainIndex = 0) {\n        let main = ranges[mainIndex];\n        ranges.sort((a, b) => a.from - b.from);\n        mainIndex = ranges.indexOf(main);\n        for (let i = 1; i < ranges.length; i++) {\n            let range = ranges[i], prev = ranges[i - 1];\n            if (range.empty ? range.from <= prev.to : range.from < prev.to) {\n                let from = prev.from, to = Math.max(range.to, prev.to);\n                if (i <= mainIndex)\n                    mainIndex--;\n                ranges.splice(--i, 2, range.anchor > range.head ? EditorSelection.range(to, from) : EditorSelection.range(from, to));\n            }\n        }\n        return new EditorSelection(ranges, mainIndex);\n    }\n}\nfunction checkSelection(selection, docLength) {\n    for (let range of selection.ranges)\n        if (range.to > docLength)\n            throw new RangeError(\"Selection points outside of document\");\n}\n\nlet nextID = 0;\n/**\nA facet is a labeled value that is associated with an editor\nstate. It takes inputs from any number of extensions, and combines\nthose into a single output value.\n\nExamples of uses of facets are the [tab\nsize](https://codemirror.net/6/docs/ref/#state.EditorState^tabSize), [editor\nattributes](https://codemirror.net/6/docs/ref/#view.EditorView^editorAttributes), and [update\nlisteners](https://codemirror.net/6/docs/ref/#view.EditorView^updateListener).\n\nNote that `Facet` instances can be used anywhere where\n[`FacetReader`](https://codemirror.net/6/docs/ref/#state.FacetReader) is expected.\n*/\nclass Facet {\n    constructor(\n    /**\n    @internal\n    */\n    combine, \n    /**\n    @internal\n    */\n    compareInput, \n    /**\n    @internal\n    */\n    compare, isStatic, enables) {\n        this.combine = combine;\n        this.compareInput = compareInput;\n        this.compare = compare;\n        this.isStatic = isStatic;\n        /**\n        @internal\n        */\n        this.id = nextID++;\n        this.default = combine([]);\n        this.extensions = typeof enables == \"function\" ? enables(this) : enables;\n    }\n    /**\n    Returns a facet reader for this facet, which can be used to\n    [read](https://codemirror.net/6/docs/ref/#state.EditorState.facet) it but not to define values for it.\n    */\n    get reader() { return this; }\n    /**\n    Define a new facet.\n    */\n    static define(config = {}) {\n        return new Facet(config.combine || ((a) => a), config.compareInput || ((a, b) => a === b), config.compare || (!config.combine ? sameArray : (a, b) => a === b), !!config.static, config.enables);\n    }\n    /**\n    Returns an extension that adds the given value to this facet.\n    */\n    of(value) {\n        return new FacetProvider([], this, 0 /* Provider.Static */, value);\n    }\n    /**\n    Create an extension that computes a value for the facet from a\n    state. You must take care to declare the parts of the state that\n    this value depends on, since your function is only called again\n    for a new state when one of those parts changed.\n    \n    In cases where your value depends only on a single field, you'll\n    want to use the [`from`](https://codemirror.net/6/docs/ref/#state.Facet.from) method instead.\n    */\n    compute(deps, get) {\n        if (this.isStatic)\n            throw new Error(\"Can't compute a static facet\");\n        return new FacetProvider(deps, this, 1 /* Provider.Single */, get);\n    }\n    /**\n    Create an extension that computes zero or more values for this\n    facet from a state.\n    */\n    computeN(deps, get) {\n        if (this.isStatic)\n            throw new Error(\"Can't compute a static facet\");\n        return new FacetProvider(deps, this, 2 /* Provider.Multi */, get);\n    }\n    from(field, get) {\n        if (!get)\n            get = x => x;\n        return this.compute([field], state => get(state.field(field)));\n    }\n}\nfunction sameArray(a, b) {\n    return a == b || a.length == b.length && a.every((e, i) => e === b[i]);\n}\nclass FacetProvider {\n    constructor(dependencies, facet, type, value) {\n        this.dependencies = dependencies;\n        this.facet = facet;\n        this.type = type;\n        this.value = value;\n        this.id = nextID++;\n    }\n    dynamicSlot(addresses) {\n        var _a;\n        let getter = this.value;\n        let compare = this.facet.compareInput;\n        let id = this.id, idx = addresses[id] >> 1, multi = this.type == 2 /* Provider.Multi */;\n        let depDoc = false, depSel = false, depAddrs = [];\n        for (let dep of this.dependencies) {\n            if (dep == \"doc\")\n                depDoc = true;\n            else if (dep == \"selection\")\n                depSel = true;\n            else if ((((_a = addresses[dep.id]) !== null && _a !== void 0 ? _a : 1) & 1) == 0)\n                depAddrs.push(addresses[dep.id]);\n        }\n        return {\n            create(state) {\n                state.values[idx] = getter(state);\n                return 1 /* SlotStatus.Changed */;\n            },\n            update(state, tr) {\n                if ((depDoc && tr.docChanged) || (depSel && (tr.docChanged || tr.selection)) || ensureAll(state, depAddrs)) {\n                    let newVal = getter(state);\n                    if (multi ? !compareArray(newVal, state.values[idx], compare) : !compare(newVal, state.values[idx])) {\n                        state.values[idx] = newVal;\n                        return 1 /* SlotStatus.Changed */;\n                    }\n                }\n                return 0;\n            },\n            reconfigure: (state, oldState) => {\n                let newVal, oldAddr = oldState.config.address[id];\n                if (oldAddr != null) {\n                    let oldVal = getAddr(oldState, oldAddr);\n                    if (this.dependencies.every(dep => {\n                        return dep instanceof Facet ? oldState.facet(dep) === state.facet(dep) :\n                            dep instanceof StateField ? oldState.field(dep, false) == state.field(dep, false) : true;\n                    }) || (multi ? compareArray(newVal = getter(state), oldVal, compare) : compare(newVal = getter(state), oldVal))) {\n                        state.values[idx] = oldVal;\n                        return 0;\n                    }\n                }\n                else {\n                    newVal = getter(state);\n                }\n                state.values[idx] = newVal;\n                return 1 /* SlotStatus.Changed */;\n            }\n        };\n    }\n}\nfunction compareArray(a, b, compare) {\n    if (a.length != b.length)\n        return false;\n    for (let i = 0; i < a.length; i++)\n        if (!compare(a[i], b[i]))\n            return false;\n    return true;\n}\nfunction ensureAll(state, addrs) {\n    let changed = false;\n    for (let addr of addrs)\n        if (ensureAddr(state, addr) & 1 /* SlotStatus.Changed */)\n            changed = true;\n    return changed;\n}\nfunction dynamicFacetSlot(addresses, facet, providers) {\n    let providerAddrs = providers.map(p => addresses[p.id]);\n    let providerTypes = providers.map(p => p.type);\n    let dynamic = providerAddrs.filter(p => !(p & 1));\n    let idx = addresses[facet.id] >> 1;\n    function get(state) {\n        let values = [];\n        for (let i = 0; i < providerAddrs.length; i++) {\n            let value = getAddr(state, providerAddrs[i]);\n            if (providerTypes[i] == 2 /* Provider.Multi */)\n                for (let val of value)\n                    values.push(val);\n            else\n                values.push(value);\n        }\n        return facet.combine(values);\n    }\n    return {\n        create(state) {\n            for (let addr of providerAddrs)\n                ensureAddr(state, addr);\n            state.values[idx] = get(state);\n            return 1 /* SlotStatus.Changed */;\n        },\n        update(state, tr) {\n            if (!ensureAll(state, dynamic))\n                return 0;\n            let value = get(state);\n            if (facet.compare(value, state.values[idx]))\n                return 0;\n            state.values[idx] = value;\n            return 1 /* SlotStatus.Changed */;\n        },\n        reconfigure(state, oldState) {\n            let depChanged = ensureAll(state, providerAddrs);\n            let oldProviders = oldState.config.facets[facet.id], oldValue = oldState.facet(facet);\n            if (oldProviders && !depChanged && sameArray(providers, oldProviders)) {\n                state.values[idx] = oldValue;\n                return 0;\n            }\n            let value = get(state);\n            if (facet.compare(value, oldValue)) {\n                state.values[idx] = oldValue;\n                return 0;\n            }\n            state.values[idx] = value;\n            return 1 /* SlotStatus.Changed */;\n        }\n    };\n}\nconst initField = /*@__PURE__*/Facet.define({ static: true });\n/**\nFields can store additional information in an editor state, and\nkeep it in sync with the rest of the state.\n*/\nclass StateField {\n    constructor(\n    /**\n    @internal\n    */\n    id, createF, updateF, compareF, \n    /**\n    @internal\n    */\n    spec) {\n        this.id = id;\n        this.createF = createF;\n        this.updateF = updateF;\n        this.compareF = compareF;\n        this.spec = spec;\n        /**\n        @internal\n        */\n        this.provides = undefined;\n    }\n    /**\n    Define a state field.\n    */\n    static define(config) {\n        let field = new StateField(nextID++, config.create, config.update, config.compare || ((a, b) => a === b), config);\n        if (config.provide)\n            field.provides = config.provide(field);\n        return field;\n    }\n    create(state) {\n        let init = state.facet(initField).find(i => i.field == this);\n        return ((init === null || init === void 0 ? void 0 : init.create) || this.createF)(state);\n    }\n    /**\n    @internal\n    */\n    slot(addresses) {\n        let idx = addresses[this.id] >> 1;\n        return {\n            create: (state) => {\n                state.values[idx] = this.create(state);\n                return 1 /* SlotStatus.Changed */;\n            },\n            update: (state, tr) => {\n                let oldVal = state.values[idx];\n                let value = this.updateF(oldVal, tr);\n                if (this.compareF(oldVal, value))\n                    return 0;\n                state.values[idx] = value;\n                return 1 /* SlotStatus.Changed */;\n            },\n            reconfigure: (state, oldState) => {\n                if (oldState.config.address[this.id] != null) {\n                    state.values[idx] = oldState.field(this);\n                    return 0;\n                }\n                state.values[idx] = this.create(state);\n                return 1 /* SlotStatus.Changed */;\n            }\n        };\n    }\n    /**\n    Returns an extension that enables this field and overrides the\n    way it is initialized. Can be useful when you need to provide a\n    non-default starting value for the field.\n    */\n    init(create) {\n        return [this, initField.of({ field: this, create })];\n    }\n    /**\n    State field instances can be used as\n    [`Extension`](https://codemirror.net/6/docs/ref/#state.Extension) values to enable the field in a\n    given state.\n    */\n    get extension() { return this; }\n}\nconst Prec_ = { lowest: 4, low: 3, default: 2, high: 1, highest: 0 };\nfunction prec(value) {\n    return (ext) => new PrecExtension(ext, value);\n}\n/**\nBy default extensions are registered in the order they are found\nin the flattened form of nested array that was provided.\nIndividual extension values can be assigned a precedence to\noverride this. Extensions that do not have a precedence set get\nthe precedence of the nearest parent with a precedence, or\n[`default`](https://codemirror.net/6/docs/ref/#state.Prec.default) if there is no such parent. The\nfinal ordering of extensions is determined by first sorting by\nprecedence and then by order within each precedence.\n*/\nconst Prec = {\n    /**\n    The highest precedence level, for extensions that should end up\n    near the start of the precedence ordering.\n    */\n    highest: /*@__PURE__*/prec(Prec_.highest),\n    /**\n    A higher-than-default precedence, for extensions that should\n    come before those with default precedence.\n    */\n    high: /*@__PURE__*/prec(Prec_.high),\n    /**\n    The default precedence, which is also used for extensions\n    without an explicit precedence.\n    */\n    default: /*@__PURE__*/prec(Prec_.default),\n    /**\n    A lower-than-default precedence.\n    */\n    low: /*@__PURE__*/prec(Prec_.low),\n    /**\n    The lowest precedence level. Meant for things that should end up\n    near the end of the extension order.\n    */\n    lowest: /*@__PURE__*/prec(Prec_.lowest)\n};\nclass PrecExtension {\n    constructor(inner, prec) {\n        this.inner = inner;\n        this.prec = prec;\n    }\n}\n/**\nExtension compartments can be used to make a configuration\ndynamic. By [wrapping](https://codemirror.net/6/docs/ref/#state.Compartment.of) part of your\nconfiguration in a compartment, you can later\n[replace](https://codemirror.net/6/docs/ref/#state.Compartment.reconfigure) that part through a\ntransaction.\n*/\nclass Compartment {\n    /**\n    Create an instance of this compartment to add to your [state\n    configuration](https://codemirror.net/6/docs/ref/#state.EditorStateConfig.extensions).\n    */\n    of(ext) { return new CompartmentInstance(this, ext); }\n    /**\n    Create an [effect](https://codemirror.net/6/docs/ref/#state.TransactionSpec.effects) that\n    reconfigures this compartment.\n    */\n    reconfigure(content) {\n        return Compartment.reconfigure.of({ compartment: this, extension: content });\n    }\n    /**\n    Get the current content of the compartment in the state, or\n    `undefined` if it isn't present.\n    */\n    get(state) {\n        return state.config.compartments.get(this);\n    }\n}\nclass CompartmentInstance {\n    constructor(compartment, inner) {\n        this.compartment = compartment;\n        this.inner = inner;\n    }\n}\nclass Configuration {\n    constructor(base, compartments, dynamicSlots, address, staticValues, facets) {\n        this.base = base;\n        this.compartments = compartments;\n        this.dynamicSlots = dynamicSlots;\n        this.address = address;\n        this.staticValues = staticValues;\n        this.facets = facets;\n        this.statusTemplate = [];\n        while (this.statusTemplate.length < dynamicSlots.length)\n            this.statusTemplate.push(0 /* SlotStatus.Unresolved */);\n    }\n    staticFacet(facet) {\n        let addr = this.address[facet.id];\n        return addr == null ? facet.default : this.staticValues[addr >> 1];\n    }\n    static resolve(base, compartments, oldState) {\n        let fields = [];\n        let facets = Object.create(null);\n        let newCompartments = new Map();\n        for (let ext of flatten(base, compartments, newCompartments)) {\n            if (ext instanceof StateField)\n                fields.push(ext);\n            else\n                (facets[ext.facet.id] || (facets[ext.facet.id] = [])).push(ext);\n        }\n        let address = Object.create(null);\n        let staticValues = [];\n        let dynamicSlots = [];\n        for (let field of fields) {\n            address[field.id] = dynamicSlots.length << 1;\n            dynamicSlots.push(a => field.slot(a));\n        }\n        let oldFacets = oldState === null || oldState === void 0 ? void 0 : oldState.config.facets;\n        for (let id in facets) {\n            let providers = facets[id], facet = providers[0].facet;\n            let oldProviders = oldFacets && oldFacets[id] || [];\n            if (providers.every(p => p.type == 0 /* Provider.Static */)) {\n                address[facet.id] = (staticValues.length << 1) | 1;\n                if (sameArray(oldProviders, providers)) {\n                    staticValues.push(oldState.facet(facet));\n                }\n                else {\n                    let value = facet.combine(providers.map(p => p.value));\n                    staticValues.push(oldState && facet.compare(value, oldState.facet(facet)) ? oldState.facet(facet) : value);\n                }\n            }\n            else {\n                for (let p of providers) {\n                    if (p.type == 0 /* Provider.Static */) {\n                        address[p.id] = (staticValues.length << 1) | 1;\n                        staticValues.push(p.value);\n                    }\n                    else {\n                        address[p.id] = dynamicSlots.length << 1;\n                        dynamicSlots.push(a => p.dynamicSlot(a));\n                    }\n                }\n                address[facet.id] = dynamicSlots.length << 1;\n                dynamicSlots.push(a => dynamicFacetSlot(a, facet, providers));\n            }\n        }\n        let dynamic = dynamicSlots.map(f => f(address));\n        return new Configuration(base, newCompartments, dynamic, address, staticValues, facets);\n    }\n}\nfunction flatten(extension, compartments, newCompartments) {\n    let result = [[], [], [], [], []];\n    let seen = new Map();\n    function inner(ext, prec) {\n        let known = seen.get(ext);\n        if (known != null) {\n            if (known <= prec)\n                return;\n            let found = result[known].indexOf(ext);\n            if (found > -1)\n                result[known].splice(found, 1);\n            if (ext instanceof CompartmentInstance)\n                newCompartments.delete(ext.compartment);\n        }\n        seen.set(ext, prec);\n        if (Array.isArray(ext)) {\n            for (let e of ext)\n                inner(e, prec);\n        }\n        else if (ext instanceof CompartmentInstance) {\n            if (newCompartments.has(ext.compartment))\n                throw new RangeError(`Duplicate use of compartment in extensions`);\n            let content = compartments.get(ext.compartment) || ext.inner;\n            newCompartments.set(ext.compartment, content);\n            inner(content, prec);\n        }\n        else if (ext instanceof PrecExtension) {\n            inner(ext.inner, ext.prec);\n        }\n        else if (ext instanceof StateField) {\n            result[prec].push(ext);\n            if (ext.provides)\n                inner(ext.provides, prec);\n        }\n        else if (ext instanceof FacetProvider) {\n            result[prec].push(ext);\n            if (ext.facet.extensions)\n                inner(ext.facet.extensions, Prec_.default);\n        }\n        else {\n            let content = ext.extension;\n            if (!content)\n                throw new Error(`Unrecognized extension value in extension set (${ext}). This sometimes happens because multiple instances of @codemirror/state are loaded, breaking instanceof checks.`);\n            inner(content, prec);\n        }\n    }\n    inner(extension, Prec_.default);\n    return result.reduce((a, b) => a.concat(b));\n}\nfunction ensureAddr(state, addr) {\n    if (addr & 1)\n        return 2 /* SlotStatus.Computed */;\n    let idx = addr >> 1;\n    let status = state.status[idx];\n    if (status == 4 /* SlotStatus.Computing */)\n        throw new Error(\"Cyclic dependency between fields and/or facets\");\n    if (status & 2 /* SlotStatus.Computed */)\n        return status;\n    state.status[idx] = 4 /* SlotStatus.Computing */;\n    let changed = state.computeSlot(state, state.config.dynamicSlots[idx]);\n    return state.status[idx] = 2 /* SlotStatus.Computed */ | changed;\n}\nfunction getAddr(state, addr) {\n    return addr & 1 ? state.config.staticValues[addr >> 1] : state.values[addr >> 1];\n}\n\nconst languageData = /*@__PURE__*/Facet.define();\nconst allowMultipleSelections = /*@__PURE__*/Facet.define({\n    combine: values => values.some(v => v),\n    static: true\n});\nconst lineSeparator = /*@__PURE__*/Facet.define({\n    combine: values => values.length ? values[0] : undefined,\n    static: true\n});\nconst changeFilter = /*@__PURE__*/Facet.define();\nconst transactionFilter = /*@__PURE__*/Facet.define();\nconst transactionExtender = /*@__PURE__*/Facet.define();\nconst readOnly = /*@__PURE__*/Facet.define({\n    combine: values => values.length ? values[0] : false\n});\n\n/**\nAnnotations are tagged values that are used to add metadata to\ntransactions in an extensible way. They should be used to model\nthings that effect the entire transaction (such as its [time\nstamp](https://codemirror.net/6/docs/ref/#state.Transaction^time) or information about its\n[origin](https://codemirror.net/6/docs/ref/#state.Transaction^userEvent)). For effects that happen\n_alongside_ the other changes made by the transaction, [state\neffects](https://codemirror.net/6/docs/ref/#state.StateEffect) are more appropriate.\n*/\nclass Annotation {\n    /**\n    @internal\n    */\n    constructor(\n    /**\n    The annotation type.\n    */\n    type, \n    /**\n    The value of this annotation.\n    */\n    value) {\n        this.type = type;\n        this.value = value;\n    }\n    /**\n    Define a new type of annotation.\n    */\n    static define() { return new AnnotationType(); }\n}\n/**\nMarker that identifies a type of [annotation](https://codemirror.net/6/docs/ref/#state.Annotation).\n*/\nclass AnnotationType {\n    /**\n    Create an instance of this annotation.\n    */\n    of(value) { return new Annotation(this, value); }\n}\n/**\nRepresentation of a type of state effect. Defined with\n[`StateEffect.define`](https://codemirror.net/6/docs/ref/#state.StateEffect^define).\n*/\nclass StateEffectType {\n    /**\n    @internal\n    */\n    constructor(\n    // The `any` types in these function types are there to work\n    // around TypeScript issue #37631, where the type guard on\n    // `StateEffect.is` mysteriously stops working when these properly\n    // have type `Value`.\n    /**\n    @internal\n    */\n    map) {\n        this.map = map;\n    }\n    /**\n    Create a [state effect](https://codemirror.net/6/docs/ref/#state.StateEffect) instance of this\n    type.\n    */\n    of(value) { return new StateEffect(this, value); }\n}\n/**\nState effects can be used to represent additional effects\nassociated with a [transaction](https://codemirror.net/6/docs/ref/#state.Transaction.effects). They\nare often useful to model changes to custom [state\nfields](https://codemirror.net/6/docs/ref/#state.StateField), when those changes aren't implicit in\ndocument or selection changes.\n*/\nclass StateEffect {\n    /**\n    @internal\n    */\n    constructor(\n    /**\n    @internal\n    */\n    type, \n    /**\n    The value of this effect.\n    */\n    value) {\n        this.type = type;\n        this.value = value;\n    }\n    /**\n    Map this effect through a position mapping. Will return\n    `undefined` when that ends up deleting the effect.\n    */\n    map(mapping) {\n        let mapped = this.type.map(this.value, mapping);\n        return mapped === undefined ? undefined : mapped == this.value ? this : new StateEffect(this.type, mapped);\n    }\n    /**\n    Tells you whether this effect object is of a given\n    [type](https://codemirror.net/6/docs/ref/#state.StateEffectType).\n    */\n    is(type) { return this.type == type; }\n    /**\n    Define a new effect type. The type parameter indicates the type\n    of values that his effect holds. It should be a type that\n    doesn't include `undefined`, since that is used in\n    [mapping](https://codemirror.net/6/docs/ref/#state.StateEffect.map) to indicate that an effect is\n    removed.\n    */\n    static define(spec = {}) {\n        return new StateEffectType(spec.map || (v => v));\n    }\n    /**\n    Map an array of effects through a change set.\n    */\n    static mapEffects(effects, mapping) {\n        if (!effects.length)\n            return effects;\n        let result = [];\n        for (let effect of effects) {\n            let mapped = effect.map(mapping);\n            if (mapped)\n                result.push(mapped);\n        }\n        return result;\n    }\n}\n/**\nThis effect can be used to reconfigure the root extensions of\nthe editor. Doing this will discard any extensions\n[appended](https://codemirror.net/6/docs/ref/#state.StateEffect^appendConfig), but does not reset\nthe content of [reconfigured](https://codemirror.net/6/docs/ref/#state.Compartment.reconfigure)\ncompartments.\n*/\nStateEffect.reconfigure = /*@__PURE__*/StateEffect.define();\n/**\nAppend extensions to the top-level configuration of the editor.\n*/\nStateEffect.appendConfig = /*@__PURE__*/StateEffect.define();\n/**\nChanges to the editor state are grouped into transactions.\nTypically, a user action creates a single transaction, which may\ncontain any number of document changes, may change the selection,\nor have other effects. Create a transaction by calling\n[`EditorState.update`](https://codemirror.net/6/docs/ref/#state.EditorState.update), or immediately\ndispatch one by calling\n[`EditorView.dispatch`](https://codemirror.net/6/docs/ref/#view.EditorView.dispatch).\n*/\nclass Transaction {\n    constructor(\n    /**\n    The state from which the transaction starts.\n    */\n    startState, \n    /**\n    The document changes made by this transaction.\n    */\n    changes, \n    /**\n    The selection set by this transaction, or undefined if it\n    doesn't explicitly set a selection.\n    */\n    selection, \n    /**\n    The effects added to the transaction.\n    */\n    effects, \n    /**\n    @internal\n    */\n    annotations, \n    /**\n    Whether the selection should be scrolled into view after this\n    transaction is dispatched.\n    */\n    scrollIntoView) {\n        this.startState = startState;\n        this.changes = changes;\n        this.selection = selection;\n        this.effects = effects;\n        this.annotations = annotations;\n        this.scrollIntoView = scrollIntoView;\n        /**\n        @internal\n        */\n        this._doc = null;\n        /**\n        @internal\n        */\n        this._state = null;\n        if (selection)\n            checkSelection(selection, changes.newLength);\n        if (!annotations.some((a) => a.type == Transaction.time))\n            this.annotations = annotations.concat(Transaction.time.of(Date.now()));\n    }\n    /**\n    @internal\n    */\n    static create(startState, changes, selection, effects, annotations, scrollIntoView) {\n        return new Transaction(startState, changes, selection, effects, annotations, scrollIntoView);\n    }\n    /**\n    The new document produced by the transaction. Contrary to\n    [`.state`](https://codemirror.net/6/docs/ref/#state.Transaction.state)`.doc`, accessing this won't\n    force the entire new state to be computed right away, so it is\n    recommended that [transaction\n    filters](https://codemirror.net/6/docs/ref/#state.EditorState^transactionFilter) use this getter\n    when they need to look at the new document.\n    */\n    get newDoc() {\n        return this._doc || (this._doc = this.changes.apply(this.startState.doc));\n    }\n    /**\n    The new selection produced by the transaction. If\n    [`this.selection`](https://codemirror.net/6/docs/ref/#state.Transaction.selection) is undefined,\n    this will [map](https://codemirror.net/6/docs/ref/#state.EditorSelection.map) the start state's\n    current selection through the changes made by the transaction.\n    */\n    get newSelection() {\n        return this.selection || this.startState.selection.map(this.changes);\n    }\n    /**\n    The new state created by the transaction. Computed on demand\n    (but retained for subsequent access), so it is recommended not to\n    access it in [transaction\n    filters](https://codemirror.net/6/docs/ref/#state.EditorState^transactionFilter) when possible.\n    */\n    get state() {\n        if (!this._state)\n            this.startState.applyTransaction(this);\n        return this._state;\n    }\n    /**\n    Get the value of the given annotation type, if any.\n    */\n    annotation(type) {\n        for (let ann of this.annotations)\n            if (ann.type == type)\n                return ann.value;\n        return undefined;\n    }\n    /**\n    Indicates whether the transaction changed the document.\n    */\n    get docChanged() { return !this.changes.empty; }\n    /**\n    Indicates whether this transaction reconfigures the state\n    (through a [configuration compartment](https://codemirror.net/6/docs/ref/#state.Compartment) or\n    with a top-level configuration\n    [effect](https://codemirror.net/6/docs/ref/#state.StateEffect^reconfigure).\n    */\n    get reconfigured() { return this.startState.config != this.state.config; }\n    /**\n    Returns true if the transaction has a [user\n    event](https://codemirror.net/6/docs/ref/#state.Transaction^userEvent) annotation that is equal to\n    or more specific than `event`. For example, if the transaction\n    has `\"select.pointer\"` as user event, `\"select\"` and\n    `\"select.pointer\"` will match it.\n    */\n    isUserEvent(event) {\n        let e = this.annotation(Transaction.userEvent);\n        return !!(e && (e == event || e.length > event.length && e.slice(0, event.length) == event && e[event.length] == \".\"));\n    }\n}\n/**\nAnnotation used to store transaction timestamps. Automatically\nadded to every transaction, holding `Date.now()`.\n*/\nTransaction.time = /*@__PURE__*/Annotation.define();\n/**\nAnnotation used to associate a transaction with a user interface\nevent. Holds a string identifying the event, using a\ndot-separated format to support attaching more specific\ninformation. The events used by the core libraries are:\n\n - `\"input\"` when content is entered\n   - `\"input.type\"` for typed input\n     - `\"input.type.compose\"` for composition\n   - `\"input.paste\"` for pasted input\n   - `\"input.drop\"` when adding content with drag-and-drop\n   - `\"input.complete\"` when autocompleting\n - `\"delete\"` when the user deletes content\n   - `\"delete.selection\"` when deleting the selection\n   - `\"delete.forward\"` when deleting forward from the selection\n   - `\"delete.backward\"` when deleting backward from the selection\n   - `\"delete.cut\"` when cutting to the clipboard\n - `\"move\"` when content is moved\n   - `\"move.drop\"` when content is moved within the editor through drag-and-drop\n - `\"select\"` when explicitly changing the selection\n   - `\"select.pointer\"` when selecting with a mouse or other pointing device\n - `\"undo\"` and `\"redo\"` for history actions\n\nUse [`isUserEvent`](https://codemirror.net/6/docs/ref/#state.Transaction.isUserEvent) to check\nwhether the annotation matches a given event.\n*/\nTransaction.userEvent = /*@__PURE__*/Annotation.define();\n/**\nAnnotation indicating whether a transaction should be added to\nthe undo history or not.\n*/\nTransaction.addToHistory = /*@__PURE__*/Annotation.define();\n/**\nAnnotation indicating (when present and true) that a transaction\nrepresents a change made by some other actor, not the user. This\nis used, for example, to tag other people's changes in\ncollaborative editing.\n*/\nTransaction.remote = /*@__PURE__*/Annotation.define();\nfunction joinRanges(a, b) {\n    let result = [];\n    for (let iA = 0, iB = 0;;) {\n        let from, to;\n        if (iA < a.length && (iB == b.length || b[iB] >= a[iA])) {\n            from = a[iA++];\n            to = a[iA++];\n        }\n        else if (iB < b.length) {\n            from = b[iB++];\n            to = b[iB++];\n        }\n        else\n            return result;\n        if (!result.length || result[result.length - 1] < from)\n            result.push(from, to);\n        else if (result[result.length - 1] < to)\n            result[result.length - 1] = to;\n    }\n}\nfunction mergeTransaction(a, b, sequential) {\n    var _a;\n    let mapForA, mapForB, changes;\n    if (sequential) {\n        mapForA = b.changes;\n        mapForB = ChangeSet.empty(b.changes.length);\n        changes = a.changes.compose(b.changes);\n    }\n    else {\n        mapForA = b.changes.map(a.changes);\n        mapForB = a.changes.mapDesc(b.changes, true);\n        changes = a.changes.compose(mapForA);\n    }\n    return {\n        changes,\n        selection: b.selection ? b.selection.map(mapForB) : (_a = a.selection) === null || _a === void 0 ? void 0 : _a.map(mapForA),\n        effects: StateEffect.mapEffects(a.effects, mapForA).concat(StateEffect.mapEffects(b.effects, mapForB)),\n        annotations: a.annotations.length ? a.annotations.concat(b.annotations) : b.annotations,\n        scrollIntoView: a.scrollIntoView || b.scrollIntoView\n    };\n}\nfunction resolveTransactionInner(state, spec, docSize) {\n    let sel = spec.selection, annotations = asArray(spec.annotations);\n    if (spec.userEvent)\n        annotations = annotations.concat(Transaction.userEvent.of(spec.userEvent));\n    return {\n        changes: spec.changes instanceof ChangeSet ? spec.changes\n            : ChangeSet.of(spec.changes || [], docSize, state.facet(lineSeparator)),\n        selection: sel && (sel instanceof EditorSelection ? sel : EditorSelection.single(sel.anchor, sel.head)),\n        effects: asArray(spec.effects),\n        annotations,\n        scrollIntoView: !!spec.scrollIntoView\n    };\n}\nfunction resolveTransaction(state, specs, filter) {\n    let s = resolveTransactionInner(state, specs.length ? specs[0] : {}, state.doc.length);\n    if (specs.length && specs[0].filter === false)\n        filter = false;\n    for (let i = 1; i < specs.length; i++) {\n        if (specs[i].filter === false)\n            filter = false;\n        let seq = !!specs[i].sequential;\n        s = mergeTransaction(s, resolveTransactionInner(state, specs[i], seq ? s.changes.newLength : state.doc.length), seq);\n    }\n    let tr = Transaction.create(state, s.changes, s.selection, s.effects, s.annotations, s.scrollIntoView);\n    return extendTransaction(filter ? filterTransaction(tr) : tr);\n}\n// Finish a transaction by applying filters if necessary.\nfunction filterTransaction(tr) {\n    let state = tr.startState;\n    // Change filters\n    let result = true;\n    for (let filter of state.facet(changeFilter)) {\n        let value = filter(tr);\n        if (value === false) {\n            result = false;\n            break;\n        }\n        if (Array.isArray(value))\n            result = result === true ? value : joinRanges(result, value);\n    }\n    if (result !== true) {\n        let changes, back;\n        if (result === false) {\n            back = tr.changes.invertedDesc;\n            changes = ChangeSet.empty(state.doc.length);\n        }\n        else {\n            let filtered = tr.changes.filter(result);\n            changes = filtered.changes;\n            back = filtered.filtered.mapDesc(filtered.changes).invertedDesc;\n        }\n        tr = Transaction.create(state, changes, tr.selection && tr.selection.map(back), StateEffect.mapEffects(tr.effects, back), tr.annotations, tr.scrollIntoView);\n    }\n    // Transaction filters\n    let filters = state.facet(transactionFilter);\n    for (let i = filters.length - 1; i >= 0; i--) {\n        let filtered = filters[i](tr);\n        if (filtered instanceof Transaction)\n            tr = filtered;\n        else if (Array.isArray(filtered) && filtered.length == 1 && filtered[0] instanceof Transaction)\n            tr = filtered[0];\n        else\n            tr = resolveTransaction(state, asArray(filtered), false);\n    }\n    return tr;\n}\nfunction extendTransaction(tr) {\n    let state = tr.startState, extenders = state.facet(transactionExtender), spec = tr;\n    for (let i = extenders.length - 1; i >= 0; i--) {\n        let extension = extenders[i](tr);\n        if (extension && Object.keys(extension).length)\n            spec = mergeTransaction(spec, resolveTransactionInner(state, extension, tr.changes.newLength), true);\n    }\n    return spec == tr ? tr : Transaction.create(state, tr.changes, tr.selection, spec.effects, spec.annotations, spec.scrollIntoView);\n}\nconst none = [];\nfunction asArray(value) {\n    return value == null ? none : Array.isArray(value) ? value : [value];\n}\n\n/**\nThe categories produced by a [character\ncategorizer](https://codemirror.net/6/docs/ref/#state.EditorState.charCategorizer). These are used\ndo things like selecting by word.\n*/\nvar CharCategory = /*@__PURE__*/(function (CharCategory) {\n    /**\n    Word characters.\n    */\n    CharCategory[CharCategory[\"Word\"] = 0] = \"Word\";\n    /**\n    Whitespace.\n    */\n    CharCategory[CharCategory[\"Space\"] = 1] = \"Space\";\n    /**\n    Anything else.\n    */\n    CharCategory[CharCategory[\"Other\"] = 2] = \"Other\";\nreturn CharCategory})(CharCategory || (CharCategory = {}));\nconst nonASCIISingleCaseWordChar = /[\\u00df\\u0587\\u0590-\\u05f4\\u0600-\\u06ff\\u3040-\\u309f\\u30a0-\\u30ff\\u3400-\\u4db5\\u4e00-\\u9fcc\\uac00-\\ud7af]/;\nlet wordChar;\ntry {\n    wordChar = /*@__PURE__*/new RegExp(\"[\\\\p{Alphabetic}\\\\p{Number}_]\", \"u\");\n}\ncatch (_) { }\nfunction hasWordChar(str) {\n    if (wordChar)\n        return wordChar.test(str);\n    for (let i = 0; i < str.length; i++) {\n        let ch = str[i];\n        if (/\\w/.test(ch) || ch > \"\\x80\" && (ch.toUpperCase() != ch.toLowerCase() || nonASCIISingleCaseWordChar.test(ch)))\n            return true;\n    }\n    return false;\n}\nfunction makeCategorizer(wordChars) {\n    return (char) => {\n        if (!/\\S/.test(char))\n            return CharCategory.Space;\n        if (hasWordChar(char))\n            return CharCategory.Word;\n        for (let i = 0; i < wordChars.length; i++)\n            if (char.indexOf(wordChars[i]) > -1)\n                return CharCategory.Word;\n        return CharCategory.Other;\n    };\n}\n\n/**\nThe editor state class is a persistent (immutable) data structure.\nTo update a state, you [create](https://codemirror.net/6/docs/ref/#state.EditorState.update) a\n[transaction](https://codemirror.net/6/docs/ref/#state.Transaction), which produces a _new_ state\ninstance, without modifying the original object.\n\nAs such, _never_ mutate properties of a state directly. That'll\njust break things.\n*/\nclass EditorState {\n    constructor(\n    /**\n    @internal\n    */\n    config, \n    /**\n    The current document.\n    */\n    doc, \n    /**\n    The current selection.\n    */\n    selection, \n    /**\n    @internal\n    */\n    values, computeSlot, tr) {\n        this.config = config;\n        this.doc = doc;\n        this.selection = selection;\n        this.values = values;\n        this.status = config.statusTemplate.slice();\n        this.computeSlot = computeSlot;\n        // Fill in the computed state immediately, so that further queries\n        // for it made during the update return this state\n        if (tr)\n            tr._state = this;\n        for (let i = 0; i < this.config.dynamicSlots.length; i++)\n            ensureAddr(this, i << 1);\n        this.computeSlot = null;\n    }\n    field(field, require = true) {\n        let addr = this.config.address[field.id];\n        if (addr == null) {\n            if (require)\n                throw new RangeError(\"Field is not present in this state\");\n            return undefined;\n        }\n        ensureAddr(this, addr);\n        return getAddr(this, addr);\n    }\n    /**\n    Create a [transaction](https://codemirror.net/6/docs/ref/#state.Transaction) that updates this\n    state. Any number of [transaction specs](https://codemirror.net/6/docs/ref/#state.TransactionSpec)\n    can be passed. Unless\n    [`sequential`](https://codemirror.net/6/docs/ref/#state.TransactionSpec.sequential) is set, the\n    [changes](https://codemirror.net/6/docs/ref/#state.TransactionSpec.changes) (if any) of each spec\n    are assumed to start in the _current_ document (not the document\n    produced by previous specs), and its\n    [selection](https://codemirror.net/6/docs/ref/#state.TransactionSpec.selection) and\n    [effects](https://codemirror.net/6/docs/ref/#state.TransactionSpec.effects) are assumed to refer\n    to the document created by its _own_ changes. The resulting\n    transaction contains the combined effect of all the different\n    specs. For [selection](https://codemirror.net/6/docs/ref/#state.TransactionSpec.selection), later\n    specs take precedence over earlier ones.\n    */\n    update(...specs) {\n        return resolveTransaction(this, specs, true);\n    }\n    /**\n    @internal\n    */\n    applyTransaction(tr) {\n        let conf = this.config, { base, compartments } = conf;\n        for (let effect of tr.effects) {\n            if (effect.is(Compartment.reconfigure)) {\n                if (conf) {\n                    compartments = new Map;\n                    conf.compartments.forEach((val, key) => compartments.set(key, val));\n                    conf = null;\n                }\n                compartments.set(effect.value.compartment, effect.value.extension);\n            }\n            else if (effect.is(StateEffect.reconfigure)) {\n                conf = null;\n                base = effect.value;\n            }\n            else if (effect.is(StateEffect.appendConfig)) {\n                conf = null;\n                base = asArray(base).concat(effect.value);\n            }\n        }\n        let startValues;\n        if (!conf) {\n            conf = Configuration.resolve(base, compartments, this);\n            let intermediateState = new EditorState(conf, this.doc, this.selection, conf.dynamicSlots.map(() => null), (state, slot) => slot.reconfigure(state, this), null);\n            startValues = intermediateState.values;\n        }\n        else {\n            startValues = tr.startState.values.slice();\n        }\n        new EditorState(conf, tr.newDoc, tr.newSelection, startValues, (state, slot) => slot.update(state, tr), tr);\n    }\n    /**\n    Create a [transaction spec](https://codemirror.net/6/docs/ref/#state.TransactionSpec) that\n    replaces every selection range with the given content.\n    */\n    replaceSelection(text) {\n        if (typeof text == \"string\")\n            text = this.toText(text);\n        return this.changeByRange(range => ({ changes: { from: range.from, to: range.to, insert: text },\n            range: EditorSelection.cursor(range.from + text.length) }));\n    }\n    /**\n    Create a set of changes and a new selection by running the given\n    function for each range in the active selection. The function\n    can return an optional set of changes (in the coordinate space\n    of the start document), plus an updated range (in the coordinate\n    space of the document produced by the call's own changes). This\n    method will merge all the changes and ranges into a single\n    changeset and selection, and return it as a [transaction\n    spec](https://codemirror.net/6/docs/ref/#state.TransactionSpec), which can be passed to\n    [`update`](https://codemirror.net/6/docs/ref/#state.EditorState.update).\n    */\n    changeByRange(f) {\n        let sel = this.selection;\n        let result1 = f(sel.ranges[0]);\n        let changes = this.changes(result1.changes), ranges = [result1.range];\n        let effects = asArray(result1.effects);\n        for (let i = 1; i < sel.ranges.length; i++) {\n            let result = f(sel.ranges[i]);\n            let newChanges = this.changes(result.changes), newMapped = newChanges.map(changes);\n            for (let j = 0; j < i; j++)\n                ranges[j] = ranges[j].map(newMapped);\n            let mapBy = changes.mapDesc(newChanges, true);\n            ranges.push(result.range.map(mapBy));\n            changes = changes.compose(newMapped);\n            effects = StateEffect.mapEffects(effects, newMapped).concat(StateEffect.mapEffects(asArray(result.effects), mapBy));\n        }\n        return {\n            changes,\n            selection: EditorSelection.create(ranges, sel.mainIndex),\n            effects\n        };\n    }\n    /**\n    Create a [change set](https://codemirror.net/6/docs/ref/#state.ChangeSet) from the given change\n    description, taking the state's document length and line\n    separator into account.\n    */\n    changes(spec = []) {\n        if (spec instanceof ChangeSet)\n            return spec;\n        return ChangeSet.of(spec, this.doc.length, this.facet(EditorState.lineSeparator));\n    }\n    /**\n    Using the state's [line\n    separator](https://codemirror.net/6/docs/ref/#state.EditorState^lineSeparator), create a\n    [`Text`](https://codemirror.net/6/docs/ref/#state.Text) instance from the given string.\n    */\n    toText(string) {\n        return Text.of(string.split(this.facet(EditorState.lineSeparator) || DefaultSplit));\n    }\n    /**\n    Return the given range of the document as a string.\n    */\n    sliceDoc(from = 0, to = this.doc.length) {\n        return this.doc.sliceString(from, to, this.lineBreak);\n    }\n    /**\n    Get the value of a state [facet](https://codemirror.net/6/docs/ref/#state.Facet).\n    */\n    facet(facet) {\n        let addr = this.config.address[facet.id];\n        if (addr == null)\n            return facet.default;\n        ensureAddr(this, addr);\n        return getAddr(this, addr);\n    }\n    /**\n    Convert this state to a JSON-serializable object. When custom\n    fields should be serialized, you can pass them in as an object\n    mapping property names (in the resulting object, which should\n    not use `doc` or `selection`) to fields.\n    */\n    toJSON(fields) {\n        let result = {\n            doc: this.sliceDoc(),\n            selection: this.selection.toJSON()\n        };\n        if (fields)\n            for (let prop in fields) {\n                let value = fields[prop];\n                if (value instanceof StateField && this.config.address[value.id] != null)\n                    result[prop] = value.spec.toJSON(this.field(fields[prop]), this);\n            }\n        return result;\n    }\n    /**\n    Deserialize a state from its JSON representation. When custom\n    fields should be deserialized, pass the same object you passed\n    to [`toJSON`](https://codemirror.net/6/docs/ref/#state.EditorState.toJSON) when serializing as\n    third argument.\n    */\n    static fromJSON(json, config = {}, fields) {\n        if (!json || typeof json.doc != \"string\")\n            throw new RangeError(\"Invalid JSON representation for EditorState\");\n        let fieldInit = [];\n        if (fields)\n            for (let prop in fields) {\n                if (Object.prototype.hasOwnProperty.call(json, prop)) {\n                    let field = fields[prop], value = json[prop];\n                    fieldInit.push(field.init(state => field.spec.fromJSON(value, state)));\n                }\n            }\n        return EditorState.create({\n            doc: json.doc,\n            selection: EditorSelection.fromJSON(json.selection),\n            extensions: config.extensions ? fieldInit.concat([config.extensions]) : fieldInit\n        });\n    }\n    /**\n    Create a new state. You'll usually only need this when\n    initializing an editor\u2014updated states are created by applying\n    transactions.\n    */\n    static create(config = {}) {\n        let configuration = Configuration.resolve(config.extensions || [], new Map);\n        let doc = config.doc instanceof Text ? config.doc\n            : Text.of((config.doc || \"\").split(configuration.staticFacet(EditorState.lineSeparator) || DefaultSplit));\n        let selection = !config.selection ? EditorSelection.single(0)\n            : config.selection instanceof EditorSelection ? config.selection\n                : EditorSelection.single(config.selection.anchor, config.selection.head);\n        checkSelection(selection, doc.length);\n        if (!configuration.staticFacet(allowMultipleSelections))\n            selection = selection.asSingle();\n        return new EditorState(configuration, doc, selection, configuration.dynamicSlots.map(() => null), (state, slot) => slot.create(state), null);\n    }\n    /**\n    The size (in columns) of a tab in the document, determined by\n    the [`tabSize`](https://codemirror.net/6/docs/ref/#state.EditorState^tabSize) facet.\n    */\n    get tabSize() { return this.facet(EditorState.tabSize); }\n    /**\n    Get the proper [line-break](https://codemirror.net/6/docs/ref/#state.EditorState^lineSeparator)\n    string for this state.\n    */\n    get lineBreak() { return this.facet(EditorState.lineSeparator) || \"\\n\"; }\n    /**\n    Returns true when the editor is\n    [configured](https://codemirror.net/6/docs/ref/#state.EditorState^readOnly) to be read-only.\n    */\n    get readOnly() { return this.facet(readOnly); }\n    /**\n    Look up a translation for the given phrase (via the\n    [`phrases`](https://codemirror.net/6/docs/ref/#state.EditorState^phrases) facet), or return the\n    original string if no translation is found.\n    \n    If additional arguments are passed, they will be inserted in\n    place of markers like `$1` (for the first value) and `$2`, etc.\n    A single `$` is equivalent to `$1`, and `$$` will produce a\n    literal dollar sign.\n    */\n    phrase(phrase, ...insert) {\n        for (let map of this.facet(EditorState.phrases))\n            if (Object.prototype.hasOwnProperty.call(map, phrase)) {\n                phrase = map[phrase];\n                break;\n            }\n        if (insert.length)\n            phrase = phrase.replace(/\\$(\\$|\\d*)/g, (m, i) => {\n                if (i == \"$\")\n                    return \"$\";\n                let n = +(i || 1);\n                return !n || n > insert.length ? m : insert[n - 1];\n            });\n        return phrase;\n    }\n    /**\n    Find the values for a given language data field, provided by the\n    the [`languageData`](https://codemirror.net/6/docs/ref/#state.EditorState^languageData) facet.\n    \n    Examples of language data fields are...\n    \n    - [`\"commentTokens\"`](https://codemirror.net/6/docs/ref/#commands.CommentTokens) for specifying\n      comment syntax.\n    - [`\"autocomplete\"`](https://codemirror.net/6/docs/ref/#autocomplete.autocompletion^config.override)\n      for providing language-specific completion sources.\n    - [`\"wordChars\"`](https://codemirror.net/6/docs/ref/#state.EditorState.charCategorizer) for adding\n      characters that should be considered part of words in this\n      language.\n    - [`\"closeBrackets\"`](https://codemirror.net/6/docs/ref/#autocomplete.CloseBracketConfig) controls\n      bracket closing behavior.\n    */\n    languageDataAt(name, pos, side = -1) {\n        let values = [];\n        for (let provider of this.facet(languageData)) {\n            for (let result of provider(this, pos, side)) {\n                if (Object.prototype.hasOwnProperty.call(result, name))\n                    values.push(result[name]);\n            }\n        }\n        return values;\n    }\n    /**\n    Return a function that can categorize strings (expected to\n    represent a single [grapheme cluster](https://codemirror.net/6/docs/ref/#state.findClusterBreak))\n    into one of:\n    \n     - Word (contains an alphanumeric character or a character\n       explicitly listed in the local language's `\"wordChars\"`\n       language data, which should be a string)\n     - Space (contains only whitespace)\n     - Other (anything else)\n    */\n    charCategorizer(at) {\n        return makeCategorizer(this.languageDataAt(\"wordChars\", at).join(\"\"));\n    }\n    /**\n    Find the word at the given position, meaning the range\n    containing all [word](https://codemirror.net/6/docs/ref/#state.CharCategory.Word) characters\n    around it. If no word characters are adjacent to the position,\n    this returns null.\n    */\n    wordAt(pos) {\n        let { text, from, length } = this.doc.lineAt(pos);\n        let cat = this.charCategorizer(pos);\n        let start = pos - from, end = pos - from;\n        while (start > 0) {\n            let prev = findClusterBreak(text, start, false);\n            if (cat(text.slice(prev, start)) != CharCategory.Word)\n                break;\n            start = prev;\n        }\n        while (end < length) {\n            let next = findClusterBreak(text, end);\n            if (cat(text.slice(end, next)) != CharCategory.Word)\n                break;\n            end = next;\n        }\n        return start == end ? null : EditorSelection.range(start + from, end + from);\n    }\n}\n/**\nA facet that, when enabled, causes the editor to allow multiple\nranges to be selected. Be careful though, because by default the\neditor relies on the native DOM selection, which cannot handle\nmultiple selections. An extension like\n[`drawSelection`](https://codemirror.net/6/docs/ref/#view.drawSelection) can be used to make\nsecondary selections visible to the user.\n*/\nEditorState.allowMultipleSelections = allowMultipleSelections;\n/**\nConfigures the tab size to use in this state. The first\n(highest-precedence) value of the facet is used. If no value is\ngiven, this defaults to 4.\n*/\nEditorState.tabSize = /*@__PURE__*/Facet.define({\n    combine: values => values.length ? values[0] : 4\n});\n/**\nThe line separator to use. By default, any of `\"\\n\"`, `\"\\r\\n\"`\nand `\"\\r\"` is treated as a separator when splitting lines, and\nlines are joined with `\"\\n\"`.\n\nWhen you configure a value here, only that precise separator\nwill be used, allowing you to round-trip documents through the\neditor without normalizing line separators.\n*/\nEditorState.lineSeparator = lineSeparator;\n/**\nThis facet controls the value of the\n[`readOnly`](https://codemirror.net/6/docs/ref/#state.EditorState.readOnly) getter, which is\nconsulted by commands and extensions that implement editing\nfunctionality to determine whether they should apply. It\ndefaults to false, but when its highest-precedence value is\n`true`, such functionality disables itself.\n\nNot to be confused with\n[`EditorView.editable`](https://codemirror.net/6/docs/ref/#view.EditorView^editable), which\ncontrols whether the editor's DOM is set to be editable (and\nthus focusable).\n*/\nEditorState.readOnly = readOnly;\n/**\nRegisters translation phrases. The\n[`phrase`](https://codemirror.net/6/docs/ref/#state.EditorState.phrase) method will look through\nall objects registered with this facet to find translations for\nits argument.\n*/\nEditorState.phrases = /*@__PURE__*/Facet.define({\n    compare(a, b) {\n        let kA = Object.keys(a), kB = Object.keys(b);\n        return kA.length == kB.length && kA.every(k => a[k] == b[k]);\n    }\n});\n/**\nA facet used to register [language\ndata](https://codemirror.net/6/docs/ref/#state.EditorState.languageDataAt) providers.\n*/\nEditorState.languageData = languageData;\n/**\nFacet used to register change filters, which are called for each\ntransaction (unless explicitly\n[disabled](https://codemirror.net/6/docs/ref/#state.TransactionSpec.filter)), and can suppress\npart of the transaction's changes.\n\nSuch a function can return `true` to indicate that it doesn't\nwant to do anything, `false` to completely stop the changes in\nthe transaction, or a set of ranges in which changes should be\nsuppressed. Such ranges are represented as an array of numbers,\nwith each pair of two numbers indicating the start and end of a\nrange. So for example `[10, 20, 100, 110]` suppresses changes\nbetween 10 and 20, and between 100 and 110.\n*/\nEditorState.changeFilter = changeFilter;\n/**\nFacet used to register a hook that gets a chance to update or\nreplace transaction specs before they are applied. This will\nonly be applied for transactions that don't have\n[`filter`](https://codemirror.net/6/docs/ref/#state.TransactionSpec.filter) set to `false`. You\ncan either return a single transaction spec (possibly the input\ntransaction), or an array of specs (which will be combined in\nthe same way as the arguments to\n[`EditorState.update`](https://codemirror.net/6/docs/ref/#state.EditorState.update)).\n\nWhen possible, it is recommended to avoid accessing\n[`Transaction.state`](https://codemirror.net/6/docs/ref/#state.Transaction.state) in a filter,\nsince it will force creation of a state that will then be\ndiscarded again, if the transaction is actually filtered.\n\n(This functionality should be used with care. Indiscriminately\nmodifying transaction is likely to break something or degrade\nthe user experience.)\n*/\nEditorState.transactionFilter = transactionFilter;\n/**\nThis is a more limited form of\n[`transactionFilter`](https://codemirror.net/6/docs/ref/#state.EditorState^transactionFilter),\nwhich can only add\n[annotations](https://codemirror.net/6/docs/ref/#state.TransactionSpec.annotations) and\n[effects](https://codemirror.net/6/docs/ref/#state.TransactionSpec.effects). _But_, this type\nof filter runs even if the transaction has disabled regular\n[filtering](https://codemirror.net/6/docs/ref/#state.TransactionSpec.filter), making it suitable\nfor effects that don't need to touch the changes or selection,\nbut do want to process every transaction.\n\nExtenders run _after_ filters, when both are present.\n*/\nEditorState.transactionExtender = transactionExtender;\nCompartment.reconfigure = /*@__PURE__*/StateEffect.define();\n\n/**\nUtility function for combining behaviors to fill in a config\nobject from an array of provided configs. `defaults` should hold\ndefault values for all optional fields in `Config`.\n\nThe function will, by default, error\nwhen a field gets two values that aren't `===`-equal, but you can\nprovide combine functions per field to do something else.\n*/\nfunction combineConfig(configs, defaults, // Should hold only the optional properties of Config, but I haven't managed to express that\ncombine = {}) {\n    let result = {};\n    for (let config of configs)\n        for (let key of Object.keys(config)) {\n            let value = config[key], current = result[key];\n            if (current === undefined)\n                result[key] = value;\n            else if (current === value || value === undefined) ; // No conflict\n            else if (Object.hasOwnProperty.call(combine, key))\n                result[key] = combine[key](current, value);\n            else\n                throw new Error(\"Config merge conflict for field \" + key);\n        }\n    for (let key in defaults)\n        if (result[key] === undefined)\n            result[key] = defaults[key];\n    return result;\n}\n\n/**\nEach range is associated with a value, which must inherit from\nthis class.\n*/\nclass RangeValue {\n    /**\n    Compare this value with another value. Used when comparing\n    rangesets. The default implementation compares by identity.\n    Unless you are only creating a fixed number of unique instances\n    of your value type, it is a good idea to implement this\n    properly.\n    */\n    eq(other) { return this == other; }\n    /**\n    Create a [range](https://codemirror.net/6/docs/ref/#state.Range) with this value.\n    */\n    range(from, to = from) { return Range.create(from, to, this); }\n}\nRangeValue.prototype.startSide = RangeValue.prototype.endSide = 0;\nRangeValue.prototype.point = false;\nRangeValue.prototype.mapMode = MapMode.TrackDel;\n/**\nA range associates a value with a range of positions.\n*/\nclass Range {\n    constructor(\n    /**\n    The range's start position.\n    */\n    from, \n    /**\n    Its end position.\n    */\n    to, \n    /**\n    The value associated with this range.\n    */\n    value) {\n        this.from = from;\n        this.to = to;\n        this.value = value;\n    }\n    /**\n    @internal\n    */\n    static create(from, to, value) {\n        return new Range(from, to, value);\n    }\n}\nfunction cmpRange(a, b) {\n    return a.from - b.from || a.value.startSide - b.value.startSide;\n}\nclass Chunk {\n    constructor(from, to, value, \n    // Chunks are marked with the largest point that occurs\n    // in them (or -1 for no points), so that scans that are\n    // only interested in points (such as the\n    // heightmap-related logic) can skip range-only chunks.\n    maxPoint) {\n        this.from = from;\n        this.to = to;\n        this.value = value;\n        this.maxPoint = maxPoint;\n    }\n    get length() { return this.to[this.to.length - 1]; }\n    // Find the index of the given position and side. Use the ranges'\n    // `from` pos when `end == false`, `to` when `end == true`.\n    findIndex(pos, side, end, startAt = 0) {\n        let arr = end ? this.to : this.from;\n        for (let lo = startAt, hi = arr.length;;) {\n            if (lo == hi)\n                return lo;\n            let mid = (lo + hi) >> 1;\n            let diff = arr[mid] - pos || (end ? this.value[mid].endSide : this.value[mid].startSide) - side;\n            if (mid == lo)\n                return diff >= 0 ? lo : hi;\n            if (diff >= 0)\n                hi = mid;\n            else\n                lo = mid + 1;\n        }\n    }\n    between(offset, from, to, f) {\n        for (let i = this.findIndex(from, -1000000000 /* C.Far */, true), e = this.findIndex(to, 1000000000 /* C.Far */, false, i); i < e; i++)\n            if (f(this.from[i] + offset, this.to[i] + offset, this.value[i]) === false)\n                return false;\n    }\n    map(offset, changes) {\n        let value = [], from = [], to = [], newPos = -1, maxPoint = -1;\n        for (let i = 0; i < this.value.length; i++) {\n            let val = this.value[i], curFrom = this.from[i] + offset, curTo = this.to[i] + offset, newFrom, newTo;\n            if (curFrom == curTo) {\n                let mapped = changes.mapPos(curFrom, val.startSide, val.mapMode);\n                if (mapped == null)\n                    continue;\n                newFrom = newTo = mapped;\n                if (val.startSide != val.endSide) {\n                    newTo = changes.mapPos(curFrom, val.endSide);\n                    if (newTo < newFrom)\n                        continue;\n                }\n            }\n            else {\n                newFrom = changes.mapPos(curFrom, val.startSide);\n                newTo = changes.mapPos(curTo, val.endSide);\n                if (newFrom > newTo || newFrom == newTo && val.startSide > 0 && val.endSide <= 0)\n                    continue;\n            }\n            if ((newTo - newFrom || val.endSide - val.startSide) < 0)\n                continue;\n            if (newPos < 0)\n                newPos = newFrom;\n            if (val.point)\n                maxPoint = Math.max(maxPoint, newTo - newFrom);\n            value.push(val);\n            from.push(newFrom - newPos);\n            to.push(newTo - newPos);\n        }\n        return { mapped: value.length ? new Chunk(from, to, value, maxPoint) : null, pos: newPos };\n    }\n}\n/**\nA range set stores a collection of [ranges](https://codemirror.net/6/docs/ref/#state.Range) in a\nway that makes them efficient to [map](https://codemirror.net/6/docs/ref/#state.RangeSet.map) and\n[update](https://codemirror.net/6/docs/ref/#state.RangeSet.update). This is an immutable data\nstructure.\n*/\nclass RangeSet {\n    constructor(\n    /**\n    @internal\n    */\n    chunkPos, \n    /**\n    @internal\n    */\n    chunk, \n    /**\n    @internal\n    */\n    nextLayer, \n    /**\n    @internal\n    */\n    maxPoint) {\n        this.chunkPos = chunkPos;\n        this.chunk = chunk;\n        this.nextLayer = nextLayer;\n        this.maxPoint = maxPoint;\n    }\n    /**\n    @internal\n    */\n    static create(chunkPos, chunk, nextLayer, maxPoint) {\n        return new RangeSet(chunkPos, chunk, nextLayer, maxPoint);\n    }\n    /**\n    @internal\n    */\n    get length() {\n        let last = this.chunk.length - 1;\n        return last < 0 ? 0 : Math.max(this.chunkEnd(last), this.nextLayer.length);\n    }\n    /**\n    The number of ranges in the set.\n    */\n    get size() {\n        if (this.isEmpty)\n            return 0;\n        let size = this.nextLayer.size;\n        for (let chunk of this.chunk)\n            size += chunk.value.length;\n        return size;\n    }\n    /**\n    @internal\n    */\n    chunkEnd(index) {\n        return this.chunkPos[index] + this.chunk[index].length;\n    }\n    /**\n    Update the range set, optionally adding new ranges or filtering\n    out existing ones.\n    \n    (Note: The type parameter is just there as a kludge to work\n    around TypeScript variance issues that prevented `RangeSet<X>`\n    from being a subtype of `RangeSet<Y>` when `X` is a subtype of\n    `Y`.)\n    */\n    update(updateSpec) {\n        let { add = [], sort = false, filterFrom = 0, filterTo = this.length } = updateSpec;\n        let filter = updateSpec.filter;\n        if (add.length == 0 && !filter)\n            return this;\n        if (sort)\n            add = add.slice().sort(cmpRange);\n        if (this.isEmpty)\n            return add.length ? RangeSet.of(add) : this;\n        let cur = new LayerCursor(this, null, -1).goto(0), i = 0, spill = [];\n        let builder = new RangeSetBuilder();\n        while (cur.value || i < add.length) {\n            if (i < add.length && (cur.from - add[i].from || cur.startSide - add[i].value.startSide) >= 0) {\n                let range = add[i++];\n                if (!builder.addInner(range.from, range.to, range.value))\n                    spill.push(range);\n            }\n            else if (cur.rangeIndex == 1 && cur.chunkIndex < this.chunk.length &&\n                (i == add.length || this.chunkEnd(cur.chunkIndex) < add[i].from) &&\n                (!filter || filterFrom > this.chunkEnd(cur.chunkIndex) || filterTo < this.chunkPos[cur.chunkIndex]) &&\n                builder.addChunk(this.chunkPos[cur.chunkIndex], this.chunk[cur.chunkIndex])) {\n                cur.nextChunk();\n            }\n            else {\n                if (!filter || filterFrom > cur.to || filterTo < cur.from || filter(cur.from, cur.to, cur.value)) {\n                    if (!builder.addInner(cur.from, cur.to, cur.value))\n                        spill.push(Range.create(cur.from, cur.to, cur.value));\n                }\n                cur.next();\n            }\n        }\n        return builder.finishInner(this.nextLayer.isEmpty && !spill.length ? RangeSet.empty\n            : this.nextLayer.update({ add: spill, filter, filterFrom, filterTo }));\n    }\n    /**\n    Map this range set through a set of changes, return the new set.\n    */\n    map(changes) {\n        if (changes.empty || this.isEmpty)\n            return this;\n        let chunks = [], chunkPos = [], maxPoint = -1;\n        for (let i = 0; i < this.chunk.length; i++) {\n            let start = this.chunkPos[i], chunk = this.chunk[i];\n            let touch = changes.touchesRange(start, start + chunk.length);\n            if (touch === false) {\n                maxPoint = Math.max(maxPoint, chunk.maxPoint);\n                chunks.push(chunk);\n                chunkPos.push(changes.mapPos(start));\n            }\n            else if (touch === true) {\n                let { mapped, pos } = chunk.map(start, changes);\n                if (mapped) {\n                    maxPoint = Math.max(maxPoint, mapped.maxPoint);\n                    chunks.push(mapped);\n                    chunkPos.push(pos);\n                }\n            }\n        }\n        let next = this.nextLayer.map(changes);\n        return chunks.length == 0 ? next : new RangeSet(chunkPos, chunks, next || RangeSet.empty, maxPoint);\n    }\n    /**\n    Iterate over the ranges that touch the region `from` to `to`,\n    calling `f` for each. There is no guarantee that the ranges will\n    be reported in any specific order. When the callback returns\n    `false`, iteration stops.\n    */\n    between(from, to, f) {\n        if (this.isEmpty)\n            return;\n        for (let i = 0; i < this.chunk.length; i++) {\n            let start = this.chunkPos[i], chunk = this.chunk[i];\n            if (to >= start && from <= start + chunk.length &&\n                chunk.between(start, from - start, to - start, f) === false)\n                return;\n        }\n        this.nextLayer.between(from, to, f);\n    }\n    /**\n    Iterate over the ranges in this set, in order, including all\n    ranges that end at or after `from`.\n    */\n    iter(from = 0) {\n        return HeapCursor.from([this]).goto(from);\n    }\n    /**\n    @internal\n    */\n    get isEmpty() { return this.nextLayer == this; }\n    /**\n    Iterate over the ranges in a collection of sets, in order,\n    starting from `from`.\n    */\n    static iter(sets, from = 0) {\n        return HeapCursor.from(sets).goto(from);\n    }\n    /**\n    Iterate over two groups of sets, calling methods on `comparator`\n    to notify it of possible differences.\n    */\n    static compare(oldSets, newSets, \n    /**\n    This indicates how the underlying data changed between these\n    ranges, and is needed to synchronize the iteration.\n    */\n    textDiff, comparator, \n    /**\n    Can be used to ignore all non-point ranges, and points below\n    the given size. When -1, all ranges are compared.\n    */\n    minPointSize = -1) {\n        let a = oldSets.filter(set => set.maxPoint > 0 || !set.isEmpty && set.maxPoint >= minPointSize);\n        let b = newSets.filter(set => set.maxPoint > 0 || !set.isEmpty && set.maxPoint >= minPointSize);\n        let sharedChunks = findSharedChunks(a, b, textDiff);\n        let sideA = new SpanCursor(a, sharedChunks, minPointSize);\n        let sideB = new SpanCursor(b, sharedChunks, minPointSize);\n        textDiff.iterGaps((fromA, fromB, length) => compare(sideA, fromA, sideB, fromB, length, comparator));\n        if (textDiff.empty && textDiff.length == 0)\n            compare(sideA, 0, sideB, 0, 0, comparator);\n    }\n    /**\n    Compare the contents of two groups of range sets, returning true\n    if they are equivalent in the given range.\n    */\n    static eq(oldSets, newSets, from = 0, to) {\n        if (to == null)\n            to = 1000000000 /* C.Far */ - 1;\n        let a = oldSets.filter(set => !set.isEmpty && newSets.indexOf(set) < 0);\n        let b = newSets.filter(set => !set.isEmpty && oldSets.indexOf(set) < 0);\n        if (a.length != b.length)\n            return false;\n        if (!a.length)\n            return true;\n        let sharedChunks = findSharedChunks(a, b);\n        let sideA = new SpanCursor(a, sharedChunks, 0).goto(from), sideB = new SpanCursor(b, sharedChunks, 0).goto(from);\n        for (;;) {\n            if (sideA.to != sideB.to ||\n                !sameValues(sideA.active, sideB.active) ||\n                sideA.point && (!sideB.point || !sideA.point.eq(sideB.point)))\n                return false;\n            if (sideA.to > to)\n                return true;\n            sideA.next();\n            sideB.next();\n        }\n    }\n    /**\n    Iterate over a group of range sets at the same time, notifying\n    the iterator about the ranges covering every given piece of\n    content. Returns the open count (see\n    [`SpanIterator.span`](https://codemirror.net/6/docs/ref/#state.SpanIterator.span)) at the end\n    of the iteration.\n    */\n    static spans(sets, from, to, iterator, \n    /**\n    When given and greater than -1, only points of at least this\n    size are taken into account.\n    */\n    minPointSize = -1) {\n        let cursor = new SpanCursor(sets, null, minPointSize).goto(from), pos = from;\n        let openRanges = cursor.openStart;\n        for (;;) {\n            let curTo = Math.min(cursor.to, to);\n            if (cursor.point) {\n                let active = cursor.activeForPoint(cursor.to);\n                let openCount = cursor.pointFrom < from ? active.length + 1 : Math.min(active.length, openRanges);\n                iterator.point(pos, curTo, cursor.point, active, openCount, cursor.pointRank);\n                openRanges = Math.min(cursor.openEnd(curTo), active.length);\n            }\n            else if (curTo > pos) {\n                iterator.span(pos, curTo, cursor.active, openRanges);\n                openRanges = cursor.openEnd(curTo);\n            }\n            if (cursor.to > to)\n                return openRanges + (cursor.point && cursor.to > to ? 1 : 0);\n            pos = cursor.to;\n            cursor.next();\n        }\n    }\n    /**\n    Create a range set for the given range or array of ranges. By\n    default, this expects the ranges to be _sorted_ (by start\n    position and, if two start at the same position,\n    `value.startSide`). You can pass `true` as second argument to\n    cause the method to sort them.\n    */\n    static of(ranges, sort = false) {\n        let build = new RangeSetBuilder();\n        for (let range of ranges instanceof Range ? [ranges] : sort ? lazySort(ranges) : ranges)\n            build.add(range.from, range.to, range.value);\n        return build.finish();\n    }\n}\n/**\nThe empty set of ranges.\n*/\nRangeSet.empty = /*@__PURE__*/new RangeSet([], [], null, -1);\nfunction lazySort(ranges) {\n    if (ranges.length > 1)\n        for (let prev = ranges[0], i = 1; i < ranges.length; i++) {\n            let cur = ranges[i];\n            if (cmpRange(prev, cur) > 0)\n                return ranges.slice().sort(cmpRange);\n            prev = cur;\n        }\n    return ranges;\n}\nRangeSet.empty.nextLayer = RangeSet.empty;\n/**\nA range set builder is a data structure that helps build up a\n[range set](https://codemirror.net/6/docs/ref/#state.RangeSet) directly, without first allocating\nan array of [`Range`](https://codemirror.net/6/docs/ref/#state.Range) objects.\n*/\nclass RangeSetBuilder {\n    finishChunk(newArrays) {\n        this.chunks.push(new Chunk(this.from, this.to, this.value, this.maxPoint));\n        this.chunkPos.push(this.chunkStart);\n        this.chunkStart = -1;\n        this.setMaxPoint = Math.max(this.setMaxPoint, this.maxPoint);\n        this.maxPoint = -1;\n        if (newArrays) {\n            this.from = [];\n            this.to = [];\n            this.value = [];\n        }\n    }\n    /**\n    Create an empty builder.\n    */\n    constructor() {\n        this.chunks = [];\n        this.chunkPos = [];\n        this.chunkStart = -1;\n        this.last = null;\n        this.lastFrom = -1000000000 /* C.Far */;\n        this.lastTo = -1000000000 /* C.Far */;\n        this.from = [];\n        this.to = [];\n        this.value = [];\n        this.maxPoint = -1;\n        this.setMaxPoint = -1;\n        this.nextLayer = null;\n    }\n    /**\n    Add a range. Ranges should be added in sorted (by `from` and\n    `value.startSide`) order.\n    */\n    add(from, to, value) {\n        if (!this.addInner(from, to, value))\n            (this.nextLayer || (this.nextLayer = new RangeSetBuilder)).add(from, to, value);\n    }\n    /**\n    @internal\n    */\n    addInner(from, to, value) {\n        let diff = from - this.lastTo || value.startSide - this.last.endSide;\n        if (diff <= 0 && (from - this.lastFrom || value.startSide - this.last.startSide) < 0)\n            throw new Error(\"Ranges must be added sorted by `from` position and `startSide`\");\n        if (diff < 0)\n            return false;\n        if (this.from.length == 250 /* C.ChunkSize */)\n            this.finishChunk(true);\n        if (this.chunkStart < 0)\n            this.chunkStart = from;\n        this.from.push(from - this.chunkStart);\n        this.to.push(to - this.chunkStart);\n        this.last = value;\n        this.lastFrom = from;\n        this.lastTo = to;\n        this.value.push(value);\n        if (value.point)\n            this.maxPoint = Math.max(this.maxPoint, to - from);\n        return true;\n    }\n    /**\n    @internal\n    */\n    addChunk(from, chunk) {\n        if ((from - this.lastTo || chunk.value[0].startSide - this.last.endSide) < 0)\n            return false;\n        if (this.from.length)\n            this.finishChunk(true);\n        this.setMaxPoint = Math.max(this.setMaxPoint, chunk.maxPoint);\n        this.chunks.push(chunk);\n        this.chunkPos.push(from);\n        let last = chunk.value.length - 1;\n        this.last = chunk.value[last];\n        this.lastFrom = chunk.from[last] + from;\n        this.lastTo = chunk.to[last] + from;\n        return true;\n    }\n    /**\n    Finish the range set. Returns the new set. The builder can't be\n    used anymore after this has been called.\n    */\n    finish() { return this.finishInner(RangeSet.empty); }\n    /**\n    @internal\n    */\n    finishInner(next) {\n        if (this.from.length)\n            this.finishChunk(false);\n        if (this.chunks.length == 0)\n            return next;\n        let result = RangeSet.create(this.chunkPos, this.chunks, this.nextLayer ? this.nextLayer.finishInner(next) : next, this.setMaxPoint);\n        this.from = null; // Make sure further `add` calls produce errors\n        return result;\n    }\n}\nfunction findSharedChunks(a, b, textDiff) {\n    let inA = new Map();\n    for (let set of a)\n        for (let i = 0; i < set.chunk.length; i++)\n            if (set.chunk[i].maxPoint <= 0)\n                inA.set(set.chunk[i], set.chunkPos[i]);\n    let shared = new Set();\n    for (let set of b)\n        for (let i = 0; i < set.chunk.length; i++) {\n            let known = inA.get(set.chunk[i]);\n            if (known != null && (textDiff ? textDiff.mapPos(known) : known) == set.chunkPos[i] &&\n                !(textDiff === null || textDiff === void 0 ? void 0 : textDiff.touchesRange(known, known + set.chunk[i].length)))\n                shared.add(set.chunk[i]);\n        }\n    return shared;\n}\nclass LayerCursor {\n    constructor(layer, skip, minPoint, rank = 0) {\n        this.layer = layer;\n        this.skip = skip;\n        this.minPoint = minPoint;\n        this.rank = rank;\n    }\n    get startSide() { return this.value ? this.value.startSide : 0; }\n    get endSide() { return this.value ? this.value.endSide : 0; }\n    goto(pos, side = -1000000000 /* C.Far */) {\n        this.chunkIndex = this.rangeIndex = 0;\n        this.gotoInner(pos, side, false);\n        return this;\n    }\n    gotoInner(pos, side, forward) {\n        while (this.chunkIndex < this.layer.chunk.length) {\n            let next = this.layer.chunk[this.chunkIndex];\n            if (!(this.skip && this.skip.has(next) ||\n                this.layer.chunkEnd(this.chunkIndex) < pos ||\n                next.maxPoint < this.minPoint))\n                break;\n            this.chunkIndex++;\n            forward = false;\n        }\n        if (this.chunkIndex < this.layer.chunk.length) {\n            let rangeIndex = this.layer.chunk[this.chunkIndex].findIndex(pos - this.layer.chunkPos[this.chunkIndex], side, true);\n            if (!forward || this.rangeIndex < rangeIndex)\n                this.setRangeIndex(rangeIndex);\n        }\n        this.next();\n    }\n    forward(pos, side) {\n        if ((this.to - pos || this.endSide - side) < 0)\n            this.gotoInner(pos, side, true);\n    }\n    next() {\n        for (;;) {\n            if (this.chunkIndex == this.layer.chunk.length) {\n                this.from = this.to = 1000000000 /* C.Far */;\n                this.value = null;\n                break;\n            }\n            else {\n                let chunkPos = this.layer.chunkPos[this.chunkIndex], chunk = this.layer.chunk[this.chunkIndex];\n                let from = chunkPos + chunk.from[this.rangeIndex];\n                this.from = from;\n                this.to = chunkPos + chunk.to[this.rangeIndex];\n                this.value = chunk.value[this.rangeIndex];\n                this.setRangeIndex(this.rangeIndex + 1);\n                if (this.minPoint < 0 || this.value.point && this.to - this.from >= this.minPoint)\n                    break;\n            }\n        }\n    }\n    setRangeIndex(index) {\n        if (index == this.layer.chunk[this.chunkIndex].value.length) {\n            this.chunkIndex++;\n            if (this.skip) {\n                while (this.chunkIndex < this.layer.chunk.length && this.skip.has(this.layer.chunk[this.chunkIndex]))\n                    this.chunkIndex++;\n            }\n            this.rangeIndex = 0;\n        }\n        else {\n            this.rangeIndex = index;\n        }\n    }\n    nextChunk() {\n        this.chunkIndex++;\n        this.rangeIndex = 0;\n        this.next();\n    }\n    compare(other) {\n        return this.from - other.from || this.startSide - other.startSide || this.rank - other.rank ||\n            this.to - other.to || this.endSide - other.endSide;\n    }\n}\nclass HeapCursor {\n    constructor(heap) {\n        this.heap = heap;\n    }\n    static from(sets, skip = null, minPoint = -1) {\n        let heap = [];\n        for (let i = 0; i < sets.length; i++) {\n            for (let cur = sets[i]; !cur.isEmpty; cur = cur.nextLayer) {\n                if (cur.maxPoint >= minPoint)\n                    heap.push(new LayerCursor(cur, skip, minPoint, i));\n            }\n        }\n        return heap.length == 1 ? heap[0] : new HeapCursor(heap);\n    }\n    get startSide() { return this.value ? this.value.startSide : 0; }\n    goto(pos, side = -1000000000 /* C.Far */) {\n        for (let cur of this.heap)\n            cur.goto(pos, side);\n        for (let i = this.heap.length >> 1; i >= 0; i--)\n            heapBubble(this.heap, i);\n        this.next();\n        return this;\n    }\n    forward(pos, side) {\n        for (let cur of this.heap)\n            cur.forward(pos, side);\n        for (let i = this.heap.length >> 1; i >= 0; i--)\n            heapBubble(this.heap, i);\n        if ((this.to - pos || this.value.endSide - side) < 0)\n            this.next();\n    }\n    next() {\n        if (this.heap.length == 0) {\n            this.from = this.to = 1000000000 /* C.Far */;\n            this.value = null;\n            this.rank = -1;\n        }\n        else {\n            let top = this.heap[0];\n            this.from = top.from;\n            this.to = top.to;\n            this.value = top.value;\n            this.rank = top.rank;\n            if (top.value)\n                top.next();\n            heapBubble(this.heap, 0);\n        }\n    }\n}\nfunction heapBubble(heap, index) {\n    for (let cur = heap[index];;) {\n        let childIndex = (index << 1) + 1;\n        if (childIndex >= heap.length)\n            break;\n        let child = heap[childIndex];\n        if (childIndex + 1 < heap.length && child.compare(heap[childIndex + 1]) >= 0) {\n            child = heap[childIndex + 1];\n            childIndex++;\n        }\n        if (cur.compare(child) < 0)\n            break;\n        heap[childIndex] = cur;\n        heap[index] = child;\n        index = childIndex;\n    }\n}\nclass SpanCursor {\n    constructor(sets, skip, minPoint) {\n        this.minPoint = minPoint;\n        this.active = [];\n        this.activeTo = [];\n        this.activeRank = [];\n        this.minActive = -1;\n        // A currently active point range, if any\n        this.point = null;\n        this.pointFrom = 0;\n        this.pointRank = 0;\n        this.to = -1000000000 /* C.Far */;\n        this.endSide = 0;\n        // The amount of open active ranges at the start of the iterator.\n        // Not including points.\n        this.openStart = -1;\n        this.cursor = HeapCursor.from(sets, skip, minPoint);\n    }\n    goto(pos, side = -1000000000 /* C.Far */) {\n        this.cursor.goto(pos, side);\n        this.active.length = this.activeTo.length = this.activeRank.length = 0;\n        this.minActive = -1;\n        this.to = pos;\n        this.endSide = side;\n        this.openStart = -1;\n        this.next();\n        return this;\n    }\n    forward(pos, side) {\n        while (this.minActive > -1 && (this.activeTo[this.minActive] - pos || this.active[this.minActive].endSide - side) < 0)\n            this.removeActive(this.minActive);\n        this.cursor.forward(pos, side);\n    }\n    removeActive(index) {\n        remove(this.active, index);\n        remove(this.activeTo, index);\n        remove(this.activeRank, index);\n        this.minActive = findMinIndex(this.active, this.activeTo);\n    }\n    addActive(trackOpen) {\n        let i = 0, { value, to, rank } = this.cursor;\n        while (i < this.activeRank.length && this.activeRank[i] <= rank)\n            i++;\n        insert(this.active, i, value);\n        insert(this.activeTo, i, to);\n        insert(this.activeRank, i, rank);\n        if (trackOpen)\n            insert(trackOpen, i, this.cursor.from);\n        this.minActive = findMinIndex(this.active, this.activeTo);\n    }\n    // After calling this, if `this.point` != null, the next range is a\n    // point. Otherwise, it's a regular range, covered by `this.active`.\n    next() {\n        let from = this.to, wasPoint = this.point;\n        this.point = null;\n        let trackOpen = this.openStart < 0 ? [] : null;\n        for (;;) {\n            let a = this.minActive;\n            if (a > -1 && (this.activeTo[a] - this.cursor.from || this.active[a].endSide - this.cursor.startSide) < 0) {\n                if (this.activeTo[a] > from) {\n                    this.to = this.activeTo[a];\n                    this.endSide = this.active[a].endSide;\n                    break;\n                }\n                this.removeActive(a);\n                if (trackOpen)\n                    remove(trackOpen, a);\n            }\n            else if (!this.cursor.value) {\n                this.to = this.endSide = 1000000000 /* C.Far */;\n                break;\n            }\n            else if (this.cursor.from > from) {\n                this.to = this.cursor.from;\n                this.endSide = this.cursor.startSide;\n                break;\n            }\n            else {\n                let nextVal = this.cursor.value;\n                if (!nextVal.point) { // Opening a range\n                    this.addActive(trackOpen);\n                    this.cursor.next();\n                }\n                else if (wasPoint && this.cursor.to == this.to && this.cursor.from < this.cursor.to) {\n                    // Ignore any non-empty points that end precisely at the end of the prev point\n                    this.cursor.next();\n                }\n                else { // New point\n                    this.point = nextVal;\n                    this.pointFrom = this.cursor.from;\n                    this.pointRank = this.cursor.rank;\n                    this.to = this.cursor.to;\n                    this.endSide = nextVal.endSide;\n                    this.cursor.next();\n                    this.forward(this.to, this.endSide);\n                    break;\n                }\n            }\n        }\n        if (trackOpen) {\n            this.openStart = 0;\n            for (let i = trackOpen.length - 1; i >= 0 && trackOpen[i] < from; i--)\n                this.openStart++;\n        }\n    }\n    activeForPoint(to) {\n        if (!this.active.length)\n            return this.active;\n        let active = [];\n        for (let i = this.active.length - 1; i >= 0; i--) {\n            if (this.activeRank[i] < this.pointRank)\n                break;\n            if (this.activeTo[i] > to || this.activeTo[i] == to && this.active[i].endSide >= this.point.endSide)\n                active.push(this.active[i]);\n        }\n        return active.reverse();\n    }\n    openEnd(to) {\n        let open = 0;\n        for (let i = this.activeTo.length - 1; i >= 0 && this.activeTo[i] > to; i--)\n            open++;\n        return open;\n    }\n}\nfunction compare(a, startA, b, startB, length, comparator) {\n    a.goto(startA);\n    b.goto(startB);\n    let endB = startB + length;\n    let pos = startB, dPos = startB - startA;\n    for (;;) {\n        let diff = (a.to + dPos) - b.to || a.endSide - b.endSide;\n        let end = diff < 0 ? a.to + dPos : b.to, clipEnd = Math.min(end, endB);\n        if (a.point || b.point) {\n            if (!(a.point && b.point && (a.point == b.point || a.point.eq(b.point)) &&\n                sameValues(a.activeForPoint(a.to), b.activeForPoint(b.to))))\n                comparator.comparePoint(pos, clipEnd, a.point, b.point);\n        }\n        else {\n            if (clipEnd > pos && !sameValues(a.active, b.active))\n                comparator.compareRange(pos, clipEnd, a.active, b.active);\n        }\n        if (end > endB)\n            break;\n        pos = end;\n        if (diff <= 0)\n            a.next();\n        if (diff >= 0)\n            b.next();\n    }\n}\nfunction sameValues(a, b) {\n    if (a.length != b.length)\n        return false;\n    for (let i = 0; i < a.length; i++)\n        if (a[i] != b[i] && !a[i].eq(b[i]))\n            return false;\n    return true;\n}\nfunction remove(array, index) {\n    for (let i = index, e = array.length - 1; i < e; i++)\n        array[i] = array[i + 1];\n    array.pop();\n}\nfunction insert(array, index, value) {\n    for (let i = array.length - 1; i >= index; i--)\n        array[i + 1] = array[i];\n    array[index] = value;\n}\nfunction findMinIndex(value, array) {\n    let found = -1, foundPos = 1000000000 /* C.Far */;\n    for (let i = 0; i < array.length; i++)\n        if ((array[i] - foundPos || value[i].endSide - value[found].endSide) < 0) {\n            found = i;\n            foundPos = array[i];\n        }\n    return found;\n}\n\n/**\nCount the column position at the given offset into the string,\ntaking extending characters and tab size into account.\n*/\nfunction countColumn(string, tabSize, to = string.length) {\n    let n = 0;\n    for (let i = 0; i < to;) {\n        if (string.charCodeAt(i) == 9) {\n            n += tabSize - (n % tabSize);\n            i++;\n        }\n        else {\n            n++;\n            i = findClusterBreak(string, i);\n        }\n    }\n    return n;\n}\n/**\nFind the offset that corresponds to the given column position in a\nstring, taking extending characters and tab size into account. By\ndefault, the string length is returned when it is too short to\nreach the column. Pass `strict` true to make it return -1 in that\nsituation.\n*/\nfunction findColumn(string, col, tabSize, strict) {\n    for (let i = 0, n = 0;;) {\n        if (n >= col)\n            return i;\n        if (i == string.length)\n            break;\n        n += string.charCodeAt(i) == 9 ? tabSize - (n % tabSize) : 1;\n        i = findClusterBreak(string, i);\n    }\n    return strict === true ? -1 : string.length;\n}\n\nexport { Annotation, AnnotationType, ChangeDesc, ChangeSet, CharCategory, Compartment, EditorSelection, EditorState, Facet, Line, MapMode, Prec, Range, RangeSet, RangeSetBuilder, RangeValue, SelectionRange, StateEffect, StateEffectType, StateField, Text, Transaction, codePointAt, codePointSize, combineConfig, countColumn, findClusterBreak, findColumn, fromCodePoint };\n", "const C = \"\\u037c\"\nconst COUNT = typeof Symbol == \"undefined\" ? \"__\" + C : Symbol.for(C)\nconst SET = typeof Symbol == \"undefined\" ? \"__styleSet\" + Math.floor(Math.random() * 1e8) : Symbol(\"styleSet\")\nconst top = typeof globalThis != \"undefined\" ? globalThis : typeof window != \"undefined\" ? window : {}\n\n// :: - Style modules encapsulate a set of CSS rules defined from\n// JavaScript. Their definitions are only available in a given DOM\n// root after it has been _mounted_ there with `StyleModule.mount`.\n//\n// Style modules should be created once and stored somewhere, as\n// opposed to re-creating them every time you need them. The amount of\n// CSS rules generated for a given DOM root is bounded by the amount\n// of style modules that were used. So to avoid leaking rules, don't\n// create these dynamically, but treat them as one-time allocations.\nexport class StyleModule {\n  // :: (Object<Style>, ?{finish: ?(string) \u2192 string})\n  // Create a style module from the given spec.\n  //\n  // When `finish` is given, it is called on regular (non-`@`)\n  // selectors (after `&` expansion) to compute the final selector.\n  constructor(spec, options) {\n    this.rules = []\n    let {finish} = options || {}\n\n    function splitSelector(selector) {\n      return /^@/.test(selector) ? [selector] : selector.split(/,\\s*/)\n    }\n\n    function render(selectors, spec, target, isKeyframes) {\n      let local = [], isAt = /^@(\\w+)\\b/.exec(selectors[0]), keyframes = isAt && isAt[1] == \"keyframes\"\n      if (isAt && spec == null) return target.push(selectors[0] + \";\")\n      for (let prop in spec) {\n        let value = spec[prop]\n        if (/&/.test(prop)) {\n          render(prop.split(/,\\s*/).map(part => selectors.map(sel => part.replace(/&/, sel))).reduce((a, b) => a.concat(b)),\n                 value, target)\n        } else if (value && typeof value == \"object\") {\n          if (!isAt) throw new RangeError(\"The value of a property (\" + prop + \") should be a primitive value.\")\n          render(splitSelector(prop), value, local, keyframes)\n        } else if (value != null) {\n          local.push(prop.replace(/_.*/, \"\").replace(/[A-Z]/g, l => \"-\" + l.toLowerCase()) + \": \" + value + \";\")\n        }\n      }\n      if (local.length || keyframes) {\n        target.push((finish && !isAt && !isKeyframes ? selectors.map(finish) : selectors).join(\", \") +\n                    \" {\" + local.join(\" \") + \"}\")\n      }\n    }\n\n    for (let prop in spec) render(splitSelector(prop), spec[prop], this.rules)\n  }\n\n  // :: () \u2192 string\n  // Returns a string containing the module's CSS rules.\n  getRules() { return this.rules.join(\"\\n\") }\n\n  // :: () \u2192 string\n  // Generate a new unique CSS class name.\n  static newName() {\n    let id = top[COUNT] || 1\n    top[COUNT] = id + 1\n    return C + id.toString(36)\n  }\n\n  // :: (union<Document, ShadowRoot>, union<[StyleModule], StyleModule>, ?{nonce: ?string})\n  //\n  // Mount the given set of modules in the given DOM root, which ensures\n  // that the CSS rules defined by the module are available in that\n  // context.\n  //\n  // Rules are only added to the document once per root.\n  //\n  // Rule order will follow the order of the modules, so that rules from\n  // modules later in the array take precedence of those from earlier\n  // modules. If you call this function multiple times for the same root\n  // in a way that changes the order of already mounted modules, the old\n  // order will be changed.\n  //\n  // If a Content Security Policy nonce is provided, it is added to\n  // the `<style>` tag generated by the library.\n  static mount(root, modules, options) {\n    let set = root[SET], nonce = options && options.nonce\n    if (!set) set = new StyleSet(root, nonce)\n    else if (nonce) set.setNonce(nonce)\n    set.mount(Array.isArray(modules) ? modules : [modules])\n  }\n}\n\nlet adoptedSet = new Map //<Document, StyleSet>\n\nclass StyleSet {\n  constructor(root, nonce) {\n    let doc = root.ownerDocument || root, win = doc.defaultView\n    if (!root.head && root.adoptedStyleSheets && win.CSSStyleSheet) {\n      let adopted = adoptedSet.get(doc)\n      if (adopted) {\n        root.adoptedStyleSheets = [adopted.sheet, ...root.adoptedStyleSheets]\n        return root[SET] = adopted\n      }\n      this.sheet = new win.CSSStyleSheet\n      root.adoptedStyleSheets = [this.sheet, ...root.adoptedStyleSheets]\n      adoptedSet.set(doc, this)\n    } else {\n      this.styleTag = doc.createElement(\"style\")\n      if (nonce) this.styleTag.setAttribute(\"nonce\", nonce)\n      let target = root.head || root\n      target.insertBefore(this.styleTag, target.firstChild)\n    }\n    this.modules = []\n    root[SET] = this\n  }\n\n  mount(modules) {\n    let sheet = this.sheet\n    let pos = 0 /* Current rule offset */, j = 0 /* Index into this.modules */\n    for (let i = 0; i < modules.length; i++) {\n      let mod = modules[i], index = this.modules.indexOf(mod)\n      if (index < j && index > -1) { // Ordering conflict\n        this.modules.splice(index, 1)\n        j--\n        index = -1\n      }\n      if (index == -1) {\n        this.modules.splice(j++, 0, mod)\n        if (sheet) for (let k = 0; k < mod.rules.length; k++)\n          sheet.insertRule(mod.rules[k], pos++)\n      } else {\n        while (j < index) pos += this.modules[j++].rules.length\n        pos += mod.rules.length\n        j++\n      }\n    }\n\n    if (!sheet) {\n      let text = \"\"\n      for (let i = 0; i < this.modules.length; i++)\n        text += this.modules[i].getRules() + \"\\n\"\n      this.styleTag.textContent = text\n    }\n  }\n\n  setNonce(nonce) {\n    if (this.styleTag && this.styleTag.getAttribute(\"nonce\") != nonce)\n      this.styleTag.setAttribute(\"nonce\", nonce)\n  }\n}\n\n// Style::Object<union<Style,string>>\n//\n// A style is an object that, in the simple case, maps CSS property\n// names to strings holding their values, as in `{color: \"red\",\n// fontWeight: \"bold\"}`. The property names can be given in\n// camel-case\u2014the library will insert a dash before capital letters\n// when converting them to CSS.\n//\n// If you include an underscore in a property name, it and everything\n// after it will be removed from the output, which can be useful when\n// providing a property multiple times, for browser compatibility\n// reasons.\n//\n// A property in a style object can also be a sub-selector, which\n// extends the current context to add a pseudo-selector or a child\n// selector. Such a property should contain a `&` character, which\n// will be replaced by the current selector. For example `{\"&:before\":\n// {content: '\"hi\"'}}`. Sub-selectors and regular properties can\n// freely be mixed in a given object. Any property containing a `&` is\n// assumed to be a sub-selector.\n//\n// Finally, a property can specify an @-block to be wrapped around the\n// styles defined inside the object that's the property's value. For\n// example to create a media query you can do `{\"@media screen and\n// (min-width: 400px)\": {...}}`.\n", "export var base = {\n  8: \"Backspace\",\n  9: \"Tab\",\n  10: \"Enter\",\n  12: \"NumLock\",\n  13: \"Enter\",\n  16: \"Shift\",\n  17: \"Control\",\n  18: \"Alt\",\n  20: \"CapsLock\",\n  27: \"Escape\",\n  32: \" \",\n  33: \"PageUp\",\n  34: \"PageDown\",\n  35: \"End\",\n  36: \"Home\",\n  37: \"ArrowLeft\",\n  38: \"ArrowUp\",\n  39: \"ArrowRight\",\n  40: \"ArrowDown\",\n  44: \"PrintScreen\",\n  45: \"Insert\",\n  46: \"Delete\",\n  59: \";\",\n  61: \"=\",\n  91: \"Meta\",\n  92: \"Meta\",\n  106: \"*\",\n  107: \"+\",\n  108: \",\",\n  109: \"-\",\n  110: \".\",\n  111: \"/\",\n  144: \"NumLock\",\n  145: \"ScrollLock\",\n  160: \"Shift\",\n  161: \"Shift\",\n  162: \"Control\",\n  163: \"Control\",\n  164: \"Alt\",\n  165: \"Alt\",\n  173: \"-\",\n  186: \";\",\n  187: \"=\",\n  188: \",\",\n  189: \"-\",\n  190: \".\",\n  191: \"/\",\n  192: \"`\",\n  219: \"[\",\n  220: \"\\\\\",\n  221: \"]\",\n  222: \"'\"\n}\n\nexport var shift = {\n  48: \")\",\n  49: \"!\",\n  50: \"@\",\n  51: \"#\",\n  52: \"$\",\n  53: \"%\",\n  54: \"^\",\n  55: \"&\",\n  56: \"*\",\n  57: \"(\",\n  59: \":\",\n  61: \"+\",\n  173: \"_\",\n  186: \":\",\n  187: \"+\",\n  188: \"<\",\n  189: \"_\",\n  190: \">\",\n  191: \"?\",\n  192: \"~\",\n  219: \"{\",\n  220: \"|\",\n  221: \"}\",\n  222: \"\\\"\"\n}\n\nvar mac = typeof navigator != \"undefined\" && /Mac/.test(navigator.platform)\nvar ie = typeof navigator != \"undefined\" && /MSIE \\d|Trident\\/(?:[7-9]|\\d{2,})\\..*rv:(\\d+)/.exec(navigator.userAgent)\n\n// Fill in the digit keys\nfor (var i = 0; i < 10; i++) base[48 + i] = base[96 + i] = String(i)\n\n// The function keys\nfor (var i = 1; i <= 24; i++) base[i + 111] = \"F\" + i\n\n// And the alphabetic keys\nfor (var i = 65; i <= 90; i++) {\n  base[i] = String.fromCharCode(i + 32)\n  shift[i] = String.fromCharCode(i)\n}\n\n// For each code that doesn't have a shift-equivalent, copy the base name\nfor (var code in base) if (!shift.hasOwnProperty(code)) shift[code] = base[code]\n\nexport function keyName(event) {\n  // On macOS, keys held with Shift and Cmd don't reflect the effect of Shift in `.key`.\n  // On IE, shift effect is never included in `.key`.\n  var ignoreKey = mac && event.metaKey && event.shiftKey && !event.ctrlKey && !event.altKey ||\n      ie && event.shiftKey && event.key && event.key.length == 1 ||\n      event.key == \"Unidentified\"\n  var name = (!ignoreKey && event.key) ||\n    (event.shiftKey ? shift : base)[event.keyCode] ||\n    event.key || \"Unidentified\"\n  // Edge sometimes produces wrong names (Issue #3)\n  if (name == \"Esc\") name = \"Escape\"\n  if (name == \"Del\") name = \"Delete\"\n  // https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/8860571/\n  if (name == \"Left\") name = \"ArrowLeft\"\n  if (name == \"Up\") name = \"ArrowUp\"\n  if (name == \"Right\") name = \"ArrowRight\"\n  if (name == \"Down\") name = \"ArrowDown\"\n  return name\n}\n", "import { Text, RangeSet, MapMode, RangeValue, Facet, StateEffect, ChangeSet, EditorSelection, findClusterBreak, findColumn, CharCategory, Annotation, EditorState, Transaction, Prec, codePointAt, codePointSize, combineConfig, StateField, RangeSetBuilder, countColumn } from '@codemirror/state';\nimport { StyleModule } from 'style-mod';\nimport { keyName, base, shift } from 'w3c-keyname';\n\nfunction getSelection(root) {\n    let target;\n    // Browsers differ on whether shadow roots have a getSelection\n    // method. If it exists, use that, otherwise, call it on the\n    // document.\n    if (root.nodeType == 11) { // Shadow root\n        target = root.getSelection ? root : root.ownerDocument;\n    }\n    else {\n        target = root;\n    }\n    return target.getSelection();\n}\nfunction contains(dom, node) {\n    return node ? dom == node || dom.contains(node.nodeType != 1 ? node.parentNode : node) : false;\n}\nfunction deepActiveElement(doc) {\n    let elt = doc.activeElement;\n    while (elt && elt.shadowRoot)\n        elt = elt.shadowRoot.activeElement;\n    return elt;\n}\nfunction hasSelection(dom, selection) {\n    if (!selection.anchorNode)\n        return false;\n    try {\n        // Firefox will raise 'permission denied' errors when accessing\n        // properties of `sel.anchorNode` when it's in a generated CSS\n        // element.\n        return contains(dom, selection.anchorNode);\n    }\n    catch (_) {\n        return false;\n    }\n}\nfunction clientRectsFor(dom) {\n    if (dom.nodeType == 3)\n        return textRange(dom, 0, dom.nodeValue.length).getClientRects();\n    else if (dom.nodeType == 1)\n        return dom.getClientRects();\n    else\n        return [];\n}\n// Scans forward and backward through DOM positions equivalent to the\n// given one to see if the two are in the same place (i.e. after a\n// text node vs at the end of that text node)\nfunction isEquivalentPosition(node, off, targetNode, targetOff) {\n    return targetNode ? (scanFor(node, off, targetNode, targetOff, -1) ||\n        scanFor(node, off, targetNode, targetOff, 1)) : false;\n}\nfunction domIndex(node) {\n    for (var index = 0;; index++) {\n        node = node.previousSibling;\n        if (!node)\n            return index;\n    }\n}\nfunction scanFor(node, off, targetNode, targetOff, dir) {\n    for (;;) {\n        if (node == targetNode && off == targetOff)\n            return true;\n        if (off == (dir < 0 ? 0 : maxOffset(node))) {\n            if (node.nodeName == \"DIV\")\n                return false;\n            let parent = node.parentNode;\n            if (!parent || parent.nodeType != 1)\n                return false;\n            off = domIndex(node) + (dir < 0 ? 0 : 1);\n            node = parent;\n        }\n        else if (node.nodeType == 1) {\n            node = node.childNodes[off + (dir < 0 ? -1 : 0)];\n            if (node.nodeType == 1 && node.contentEditable == \"false\")\n                return false;\n            off = dir < 0 ? maxOffset(node) : 0;\n        }\n        else {\n            return false;\n        }\n    }\n}\nfunction maxOffset(node) {\n    return node.nodeType == 3 ? node.nodeValue.length : node.childNodes.length;\n}\nfunction flattenRect(rect, left) {\n    let x = left ? rect.left : rect.right;\n    return { left: x, right: x, top: rect.top, bottom: rect.bottom };\n}\nfunction windowRect(win) {\n    return { left: 0, right: win.innerWidth,\n        top: 0, bottom: win.innerHeight };\n}\nfunction scrollRectIntoView(dom, rect, side, x, y, xMargin, yMargin, ltr) {\n    let doc = dom.ownerDocument, win = doc.defaultView || window;\n    for (let cur = dom, stop = false; cur && !stop;) {\n        if (cur.nodeType == 1) { // Element\n            let bounding, top = cur == doc.body;\n            let scaleX = 1, scaleY = 1;\n            if (top) {\n                bounding = windowRect(win);\n            }\n            else {\n                if (/^(fixed|sticky)$/.test(getComputedStyle(cur).position))\n                    stop = true;\n                if (cur.scrollHeight <= cur.clientHeight && cur.scrollWidth <= cur.clientWidth) {\n                    cur = cur.assignedSlot || cur.parentNode;\n                    continue;\n                }\n                let rect = cur.getBoundingClientRect();\n                scaleX = rect.width / cur.offsetWidth;\n                scaleY = rect.height / cur.offsetHeight;\n                // Make sure scrollbar width isn't included in the rectangle\n                bounding = { left: rect.left, right: rect.left + cur.clientWidth * scaleX,\n                    top: rect.top, bottom: rect.top + cur.clientHeight * scaleY };\n            }\n            let moveX = 0, moveY = 0;\n            if (y == \"nearest\") {\n                if (rect.top < bounding.top) {\n                    moveY = -(bounding.top - rect.top + yMargin);\n                    if (side > 0 && rect.bottom > bounding.bottom + moveY)\n                        moveY = rect.bottom - bounding.bottom + moveY + yMargin;\n                }\n                else if (rect.bottom > bounding.bottom) {\n                    moveY = rect.bottom - bounding.bottom + yMargin;\n                    if (side < 0 && (rect.top - moveY) < bounding.top)\n                        moveY = -(bounding.top + moveY - rect.top + yMargin);\n                }\n            }\n            else {\n                let rectHeight = rect.bottom - rect.top, boundingHeight = bounding.bottom - bounding.top;\n                let targetTop = y == \"center\" && rectHeight <= boundingHeight ? rect.top + rectHeight / 2 - boundingHeight / 2 :\n                    y == \"start\" || y == \"center\" && side < 0 ? rect.top - yMargin :\n                        rect.bottom - boundingHeight + yMargin;\n                moveY = targetTop - bounding.top;\n            }\n            if (x == \"nearest\") {\n                if (rect.left < bounding.left) {\n                    moveX = -(bounding.left - rect.left + xMargin);\n                    if (side > 0 && rect.right > bounding.right + moveX)\n                        moveX = rect.right - bounding.right + moveX + xMargin;\n                }\n                else if (rect.right > bounding.right) {\n                    moveX = rect.right - bounding.right + xMargin;\n                    if (side < 0 && rect.left < bounding.left + moveX)\n                        moveX = -(bounding.left + moveX - rect.left + xMargin);\n                }\n            }\n            else {\n                let targetLeft = x == \"center\" ? rect.left + (rect.right - rect.left) / 2 - (bounding.right - bounding.left) / 2 :\n                    (x == \"start\") == ltr ? rect.left - xMargin :\n                        rect.right - (bounding.right - bounding.left) + xMargin;\n                moveX = targetLeft - bounding.left;\n            }\n            if (moveX || moveY) {\n                if (top) {\n                    win.scrollBy(moveX, moveY);\n                }\n                else {\n                    let movedX = 0, movedY = 0;\n                    if (moveY) {\n                        let start = cur.scrollTop;\n                        cur.scrollTop += moveY / scaleY;\n                        movedY = (cur.scrollTop - start) * scaleY;\n                    }\n                    if (moveX) {\n                        let start = cur.scrollLeft;\n                        cur.scrollLeft += moveX / scaleX;\n                        movedX = (cur.scrollLeft - start) * scaleX;\n                    }\n                    rect = { left: rect.left - movedX, top: rect.top - movedY,\n                        right: rect.right - movedX, bottom: rect.bottom - movedY };\n                    if (movedX && Math.abs(movedX - moveX) < 1)\n                        x = \"nearest\";\n                    if (movedY && Math.abs(movedY - moveY) < 1)\n                        y = \"nearest\";\n                }\n            }\n            if (top)\n                break;\n            cur = cur.assignedSlot || cur.parentNode;\n        }\n        else if (cur.nodeType == 11) { // A shadow root\n            cur = cur.host;\n        }\n        else {\n            break;\n        }\n    }\n}\nfunction scrollableParent(dom) {\n    let doc = dom.ownerDocument;\n    for (let cur = dom.parentNode; cur;) {\n        if (cur == doc.body) {\n            break;\n        }\n        else if (cur.nodeType == 1) {\n            if (cur.scrollHeight > cur.clientHeight || cur.scrollWidth > cur.clientWidth)\n                return cur;\n            cur = cur.assignedSlot || cur.parentNode;\n        }\n        else if (cur.nodeType == 11) {\n            cur = cur.host;\n        }\n        else {\n            break;\n        }\n    }\n    return null;\n}\nclass DOMSelectionState {\n    constructor() {\n        this.anchorNode = null;\n        this.anchorOffset = 0;\n        this.focusNode = null;\n        this.focusOffset = 0;\n    }\n    eq(domSel) {\n        return this.anchorNode == domSel.anchorNode && this.anchorOffset == domSel.anchorOffset &&\n            this.focusNode == domSel.focusNode && this.focusOffset == domSel.focusOffset;\n    }\n    setRange(range) {\n        let { anchorNode, focusNode } = range;\n        // Clip offsets to node size to avoid crashes when Safari reports bogus offsets (#1152)\n        this.set(anchorNode, Math.min(range.anchorOffset, anchorNode ? maxOffset(anchorNode) : 0), focusNode, Math.min(range.focusOffset, focusNode ? maxOffset(focusNode) : 0));\n    }\n    set(anchorNode, anchorOffset, focusNode, focusOffset) {\n        this.anchorNode = anchorNode;\n        this.anchorOffset = anchorOffset;\n        this.focusNode = focusNode;\n        this.focusOffset = focusOffset;\n    }\n}\nlet preventScrollSupported = null;\n// Feature-detects support for .focus({preventScroll: true}), and uses\n// a fallback kludge when not supported.\nfunction focusPreventScroll(dom) {\n    if (dom.setActive)\n        return dom.setActive(); // in IE\n    if (preventScrollSupported)\n        return dom.focus(preventScrollSupported);\n    let stack = [];\n    for (let cur = dom; cur; cur = cur.parentNode) {\n        stack.push(cur, cur.scrollTop, cur.scrollLeft);\n        if (cur == cur.ownerDocument)\n            break;\n    }\n    dom.focus(preventScrollSupported == null ? {\n        get preventScroll() {\n            preventScrollSupported = { preventScroll: true };\n            return true;\n        }\n    } : undefined);\n    if (!preventScrollSupported) {\n        preventScrollSupported = false;\n        for (let i = 0; i < stack.length;) {\n            let elt = stack[i++], top = stack[i++], left = stack[i++];\n            if (elt.scrollTop != top)\n                elt.scrollTop = top;\n            if (elt.scrollLeft != left)\n                elt.scrollLeft = left;\n        }\n    }\n}\nlet scratchRange;\nfunction textRange(node, from, to = from) {\n    let range = scratchRange || (scratchRange = document.createRange());\n    range.setEnd(node, to);\n    range.setStart(node, from);\n    return range;\n}\nfunction dispatchKey(elt, name, code) {\n    let options = { key: name, code: name, keyCode: code, which: code, cancelable: true };\n    let down = new KeyboardEvent(\"keydown\", options);\n    down.synthetic = true;\n    elt.dispatchEvent(down);\n    let up = new KeyboardEvent(\"keyup\", options);\n    up.synthetic = true;\n    elt.dispatchEvent(up);\n    return down.defaultPrevented || up.defaultPrevented;\n}\nfunction getRoot(node) {\n    while (node) {\n        if (node && (node.nodeType == 9 || node.nodeType == 11 && node.host))\n            return node;\n        node = node.assignedSlot || node.parentNode;\n    }\n    return null;\n}\nfunction clearAttributes(node) {\n    while (node.attributes.length)\n        node.removeAttributeNode(node.attributes[0]);\n}\nfunction atElementStart(doc, selection) {\n    let node = selection.focusNode, offset = selection.focusOffset;\n    if (!node || selection.anchorNode != node || selection.anchorOffset != offset)\n        return false;\n    // Safari can report bogus offsets (#1152)\n    offset = Math.min(offset, maxOffset(node));\n    for (;;) {\n        if (offset) {\n            if (node.nodeType != 1)\n                return false;\n            let prev = node.childNodes[offset - 1];\n            if (prev.contentEditable == \"false\")\n                offset--;\n            else {\n                node = prev;\n                offset = maxOffset(node);\n            }\n        }\n        else if (node == doc) {\n            return true;\n        }\n        else {\n            offset = domIndex(node);\n            node = node.parentNode;\n        }\n    }\n}\nfunction isScrolledToBottom(elt) {\n    return elt.scrollTop > Math.max(1, elt.scrollHeight - elt.clientHeight - 4);\n}\n\nclass DOMPos {\n    constructor(node, offset, precise = true) {\n        this.node = node;\n        this.offset = offset;\n        this.precise = precise;\n    }\n    static before(dom, precise) { return new DOMPos(dom.parentNode, domIndex(dom), precise); }\n    static after(dom, precise) { return new DOMPos(dom.parentNode, domIndex(dom) + 1, precise); }\n}\nconst noChildren = [];\nclass ContentView {\n    constructor() {\n        this.parent = null;\n        this.dom = null;\n        this.flags = 2 /* ViewFlag.NodeDirty */;\n    }\n    get overrideDOMText() { return null; }\n    get posAtStart() {\n        return this.parent ? this.parent.posBefore(this) : 0;\n    }\n    get posAtEnd() {\n        return this.posAtStart + this.length;\n    }\n    posBefore(view) {\n        let pos = this.posAtStart;\n        for (let child of this.children) {\n            if (child == view)\n                return pos;\n            pos += child.length + child.breakAfter;\n        }\n        throw new RangeError(\"Invalid child in posBefore\");\n    }\n    posAfter(view) {\n        return this.posBefore(view) + view.length;\n    }\n    sync(view, track) {\n        if (this.flags & 2 /* ViewFlag.NodeDirty */) {\n            let parent = this.dom;\n            let prev = null, next;\n            for (let child of this.children) {\n                if (child.flags & 7 /* ViewFlag.Dirty */) {\n                    if (!child.dom && (next = prev ? prev.nextSibling : parent.firstChild)) {\n                        let contentView = ContentView.get(next);\n                        if (!contentView || !contentView.parent && contentView.canReuseDOM(child))\n                            child.reuseDOM(next);\n                    }\n                    child.sync(view, track);\n                    child.flags &= ~7 /* ViewFlag.Dirty */;\n                }\n                next = prev ? prev.nextSibling : parent.firstChild;\n                if (track && !track.written && track.node == parent && next != child.dom)\n                    track.written = true;\n                if (child.dom.parentNode == parent) {\n                    while (next && next != child.dom)\n                        next = rm$1(next);\n                }\n                else {\n                    parent.insertBefore(child.dom, next);\n                }\n                prev = child.dom;\n            }\n            next = prev ? prev.nextSibling : parent.firstChild;\n            if (next && track && track.node == parent)\n                track.written = true;\n            while (next)\n                next = rm$1(next);\n        }\n        else if (this.flags & 1 /* ViewFlag.ChildDirty */) {\n            for (let child of this.children)\n                if (child.flags & 7 /* ViewFlag.Dirty */) {\n                    child.sync(view, track);\n                    child.flags &= ~7 /* ViewFlag.Dirty */;\n                }\n        }\n    }\n    reuseDOM(_dom) { }\n    localPosFromDOM(node, offset) {\n        let after;\n        if (node == this.dom) {\n            after = this.dom.childNodes[offset];\n        }\n        else {\n            let bias = maxOffset(node) == 0 ? 0 : offset == 0 ? -1 : 1;\n            for (;;) {\n                let parent = node.parentNode;\n                if (parent == this.dom)\n                    break;\n                if (bias == 0 && parent.firstChild != parent.lastChild) {\n                    if (node == parent.firstChild)\n                        bias = -1;\n                    else\n                        bias = 1;\n                }\n                node = parent;\n            }\n            if (bias < 0)\n                after = node;\n            else\n                after = node.nextSibling;\n        }\n        if (after == this.dom.firstChild)\n            return 0;\n        while (after && !ContentView.get(after))\n            after = after.nextSibling;\n        if (!after)\n            return this.length;\n        for (let i = 0, pos = 0;; i++) {\n            let child = this.children[i];\n            if (child.dom == after)\n                return pos;\n            pos += child.length + child.breakAfter;\n        }\n    }\n    domBoundsAround(from, to, offset = 0) {\n        let fromI = -1, fromStart = -1, toI = -1, toEnd = -1;\n        for (let i = 0, pos = offset, prevEnd = offset; i < this.children.length; i++) {\n            let child = this.children[i], end = pos + child.length;\n            if (pos < from && end > to)\n                return child.domBoundsAround(from, to, pos);\n            if (end >= from && fromI == -1) {\n                fromI = i;\n                fromStart = pos;\n            }\n            if (pos > to && child.dom.parentNode == this.dom) {\n                toI = i;\n                toEnd = prevEnd;\n                break;\n            }\n            prevEnd = end;\n            pos = end + child.breakAfter;\n        }\n        return { from: fromStart, to: toEnd < 0 ? offset + this.length : toEnd,\n            startDOM: (fromI ? this.children[fromI - 1].dom.nextSibling : null) || this.dom.firstChild,\n            endDOM: toI < this.children.length && toI >= 0 ? this.children[toI].dom : null };\n    }\n    markDirty(andParent = false) {\n        this.flags |= 2 /* ViewFlag.NodeDirty */;\n        this.markParentsDirty(andParent);\n    }\n    markParentsDirty(childList) {\n        for (let parent = this.parent; parent; parent = parent.parent) {\n            if (childList)\n                parent.flags |= 2 /* ViewFlag.NodeDirty */;\n            if (parent.flags & 1 /* ViewFlag.ChildDirty */)\n                return;\n            parent.flags |= 1 /* ViewFlag.ChildDirty */;\n            childList = false;\n        }\n    }\n    setParent(parent) {\n        if (this.parent != parent) {\n            this.parent = parent;\n            if (this.flags & 7 /* ViewFlag.Dirty */)\n                this.markParentsDirty(true);\n        }\n    }\n    setDOM(dom) {\n        if (this.dom == dom)\n            return;\n        if (this.dom)\n            this.dom.cmView = null;\n        this.dom = dom;\n        dom.cmView = this;\n    }\n    get rootView() {\n        for (let v = this;;) {\n            let parent = v.parent;\n            if (!parent)\n                return v;\n            v = parent;\n        }\n    }\n    replaceChildren(from, to, children = noChildren) {\n        this.markDirty();\n        for (let i = from; i < to; i++) {\n            let child = this.children[i];\n            if (child.parent == this)\n                child.destroy();\n        }\n        this.children.splice(from, to - from, ...children);\n        for (let i = 0; i < children.length; i++)\n            children[i].setParent(this);\n    }\n    ignoreMutation(_rec) { return false; }\n    ignoreEvent(_event) { return false; }\n    childCursor(pos = this.length) {\n        return new ChildCursor(this.children, pos, this.children.length);\n    }\n    childPos(pos, bias = 1) {\n        return this.childCursor().findPos(pos, bias);\n    }\n    toString() {\n        let name = this.constructor.name.replace(\"View\", \"\");\n        return name + (this.children.length ? \"(\" + this.children.join() + \")\" :\n            this.length ? \"[\" + (name == \"Text\" ? this.text : this.length) + \"]\" : \"\") +\n            (this.breakAfter ? \"#\" : \"\");\n    }\n    static get(node) { return node.cmView; }\n    get isEditable() { return true; }\n    get isWidget() { return false; }\n    get isHidden() { return false; }\n    merge(from, to, source, hasStart, openStart, openEnd) {\n        return false;\n    }\n    become(other) { return false; }\n    canReuseDOM(other) {\n        return other.constructor == this.constructor && !((this.flags | other.flags) & 8 /* ViewFlag.Composition */);\n    }\n    // When this is a zero-length view with a side, this should return a\n    // number <= 0 to indicate it is before its position, or a\n    // number > 0 when after its position.\n    getSide() { return 0; }\n    destroy() {\n        this.parent = null;\n    }\n}\nContentView.prototype.breakAfter = 0;\n// Remove a DOM node and return its next sibling.\nfunction rm$1(dom) {\n    let next = dom.nextSibling;\n    dom.parentNode.removeChild(dom);\n    return next;\n}\nclass ChildCursor {\n    constructor(children, pos, i) {\n        this.children = children;\n        this.pos = pos;\n        this.i = i;\n        this.off = 0;\n    }\n    findPos(pos, bias = 1) {\n        for (;;) {\n            if (pos > this.pos || pos == this.pos &&\n                (bias > 0 || this.i == 0 || this.children[this.i - 1].breakAfter)) {\n                this.off = pos - this.pos;\n                return this;\n            }\n            let next = this.children[--this.i];\n            this.pos -= next.length + next.breakAfter;\n        }\n    }\n}\nfunction replaceRange(parent, fromI, fromOff, toI, toOff, insert, breakAtStart, openStart, openEnd) {\n    let { children } = parent;\n    let before = children.length ? children[fromI] : null;\n    let last = insert.length ? insert[insert.length - 1] : null;\n    let breakAtEnd = last ? last.breakAfter : breakAtStart;\n    // Change within a single child\n    if (fromI == toI && before && !breakAtStart && !breakAtEnd && insert.length < 2 &&\n        before.merge(fromOff, toOff, insert.length ? last : null, fromOff == 0, openStart, openEnd))\n        return;\n    if (toI < children.length) {\n        let after = children[toI];\n        // Make sure the end of the child after the update is preserved in `after`\n        if (after && (toOff < after.length || after.breakAfter && (last === null || last === void 0 ? void 0 : last.breakAfter))) {\n            // If we're splitting a child, separate part of it to avoid that\n            // being mangled when updating the child before the update.\n            if (fromI == toI) {\n                after = after.split(toOff);\n                toOff = 0;\n            }\n            // If the element after the replacement should be merged with\n            // the last replacing element, update `content`\n            if (!breakAtEnd && last && after.merge(0, toOff, last, true, 0, openEnd)) {\n                insert[insert.length - 1] = after;\n            }\n            else {\n                // Remove the start of the after element, if necessary, and\n                // add it to `content`.\n                if (toOff || after.children.length && !after.children[0].length)\n                    after.merge(0, toOff, null, false, 0, openEnd);\n                insert.push(after);\n            }\n        }\n        else if (after === null || after === void 0 ? void 0 : after.breakAfter) {\n            // The element at `toI` is entirely covered by this range.\n            // Preserve its line break, if any.\n            if (last)\n                last.breakAfter = 1;\n            else\n                breakAtStart = 1;\n        }\n        // Since we've handled the next element from the current elements\n        // now, make sure `toI` points after that.\n        toI++;\n    }\n    if (before) {\n        before.breakAfter = breakAtStart;\n        if (fromOff > 0) {\n            if (!breakAtStart && insert.length && before.merge(fromOff, before.length, insert[0], false, openStart, 0)) {\n                before.breakAfter = insert.shift().breakAfter;\n            }\n            else if (fromOff < before.length || before.children.length && before.children[before.children.length - 1].length == 0) {\n                before.merge(fromOff, before.length, null, false, openStart, 0);\n            }\n            fromI++;\n        }\n    }\n    // Try to merge widgets on the boundaries of the replacement\n    while (fromI < toI && insert.length) {\n        if (children[toI - 1].become(insert[insert.length - 1])) {\n            toI--;\n            insert.pop();\n            openEnd = insert.length ? 0 : openStart;\n        }\n        else if (children[fromI].become(insert[0])) {\n            fromI++;\n            insert.shift();\n            openStart = insert.length ? 0 : openEnd;\n        }\n        else {\n            break;\n        }\n    }\n    if (!insert.length && fromI && toI < children.length && !children[fromI - 1].breakAfter &&\n        children[toI].merge(0, 0, children[fromI - 1], false, openStart, openEnd))\n        fromI--;\n    if (fromI < toI || insert.length)\n        parent.replaceChildren(fromI, toI, insert);\n}\nfunction mergeChildrenInto(parent, from, to, insert, openStart, openEnd) {\n    let cur = parent.childCursor();\n    let { i: toI, off: toOff } = cur.findPos(to, 1);\n    let { i: fromI, off: fromOff } = cur.findPos(from, -1);\n    let dLen = from - to;\n    for (let view of insert)\n        dLen += view.length;\n    parent.length += dLen;\n    replaceRange(parent, fromI, fromOff, toI, toOff, insert, 0, openStart, openEnd);\n}\n\nlet nav = typeof navigator != \"undefined\" ? navigator : { userAgent: \"\", vendor: \"\", platform: \"\" };\nlet doc = typeof document != \"undefined\" ? document : { documentElement: { style: {} } };\nconst ie_edge = /*@__PURE__*//Edge\\/(\\d+)/.exec(nav.userAgent);\nconst ie_upto10 = /*@__PURE__*//MSIE \\d/.test(nav.userAgent);\nconst ie_11up = /*@__PURE__*//Trident\\/(?:[7-9]|\\d{2,})\\..*rv:(\\d+)/.exec(nav.userAgent);\nconst ie = !!(ie_upto10 || ie_11up || ie_edge);\nconst gecko = !ie && /*@__PURE__*//gecko\\/(\\d+)/i.test(nav.userAgent);\nconst chrome = !ie && /*@__PURE__*//Chrome\\/(\\d+)/.exec(nav.userAgent);\nconst webkit = \"webkitFontSmoothing\" in doc.documentElement.style;\nconst safari = !ie && /*@__PURE__*//Apple Computer/.test(nav.vendor);\nconst ios = safari && (/*@__PURE__*//Mobile\\/\\w+/.test(nav.userAgent) || nav.maxTouchPoints > 2);\nvar browser = {\n    mac: ios || /*@__PURE__*//Mac/.test(nav.platform),\n    windows: /*@__PURE__*//Win/.test(nav.platform),\n    linux: /*@__PURE__*//Linux|X11/.test(nav.platform),\n    ie,\n    ie_version: ie_upto10 ? doc.documentMode || 6 : ie_11up ? +ie_11up[1] : ie_edge ? +ie_edge[1] : 0,\n    gecko,\n    gecko_version: gecko ? +(/*@__PURE__*//Firefox\\/(\\d+)/.exec(nav.userAgent) || [0, 0])[1] : 0,\n    chrome: !!chrome,\n    chrome_version: chrome ? +chrome[1] : 0,\n    ios,\n    android: /*@__PURE__*//Android\\b/.test(nav.userAgent),\n    webkit,\n    safari,\n    webkit_version: webkit ? +(/*@__PURE__*//\\bAppleWebKit\\/(\\d+)/.exec(navigator.userAgent) || [0, 0])[1] : 0,\n    tabSize: doc.documentElement.style.tabSize != null ? \"tab-size\" : \"-moz-tab-size\"\n};\n\nconst MaxJoinLen = 256;\nclass TextView extends ContentView {\n    constructor(text) {\n        super();\n        this.text = text;\n    }\n    get length() { return this.text.length; }\n    createDOM(textDOM) {\n        this.setDOM(textDOM || document.createTextNode(this.text));\n    }\n    sync(view, track) {\n        if (!this.dom)\n            this.createDOM();\n        if (this.dom.nodeValue != this.text) {\n            if (track && track.node == this.dom)\n                track.written = true;\n            this.dom.nodeValue = this.text;\n        }\n    }\n    reuseDOM(dom) {\n        if (dom.nodeType == 3)\n            this.createDOM(dom);\n    }\n    merge(from, to, source) {\n        if ((this.flags & 8 /* ViewFlag.Composition */) ||\n            source && (!(source instanceof TextView) ||\n                this.length - (to - from) + source.length > MaxJoinLen ||\n                (source.flags & 8 /* ViewFlag.Composition */)))\n            return false;\n        this.text = this.text.slice(0, from) + (source ? source.text : \"\") + this.text.slice(to);\n        this.markDirty();\n        return true;\n    }\n    split(from) {\n        let result = new TextView(this.text.slice(from));\n        this.text = this.text.slice(0, from);\n        this.markDirty();\n        result.flags |= this.flags & 8 /* ViewFlag.Composition */;\n        return result;\n    }\n    localPosFromDOM(node, offset) {\n        return node == this.dom ? offset : offset ? this.text.length : 0;\n    }\n    domAtPos(pos) { return new DOMPos(this.dom, pos); }\n    domBoundsAround(_from, _to, offset) {\n        return { from: offset, to: offset + this.length, startDOM: this.dom, endDOM: this.dom.nextSibling };\n    }\n    coordsAt(pos, side) {\n        return textCoords(this.dom, pos, side);\n    }\n}\nclass MarkView extends ContentView {\n    constructor(mark, children = [], length = 0) {\n        super();\n        this.mark = mark;\n        this.children = children;\n        this.length = length;\n        for (let ch of children)\n            ch.setParent(this);\n    }\n    setAttrs(dom) {\n        clearAttributes(dom);\n        if (this.mark.class)\n            dom.className = this.mark.class;\n        if (this.mark.attrs)\n            for (let name in this.mark.attrs)\n                dom.setAttribute(name, this.mark.attrs[name]);\n        return dom;\n    }\n    canReuseDOM(other) {\n        return super.canReuseDOM(other) && !((this.flags | other.flags) & 8 /* ViewFlag.Composition */);\n    }\n    reuseDOM(node) {\n        if (node.nodeName == this.mark.tagName.toUpperCase()) {\n            this.setDOM(node);\n            this.flags |= 4 /* ViewFlag.AttrsDirty */ | 2 /* ViewFlag.NodeDirty */;\n        }\n    }\n    sync(view, track) {\n        if (!this.dom)\n            this.setDOM(this.setAttrs(document.createElement(this.mark.tagName)));\n        else if (this.flags & 4 /* ViewFlag.AttrsDirty */)\n            this.setAttrs(this.dom);\n        super.sync(view, track);\n    }\n    merge(from, to, source, _hasStart, openStart, openEnd) {\n        if (source && (!(source instanceof MarkView && source.mark.eq(this.mark)) ||\n            (from && openStart <= 0) || (to < this.length && openEnd <= 0)))\n            return false;\n        mergeChildrenInto(this, from, to, source ? source.children : [], openStart - 1, openEnd - 1);\n        this.markDirty();\n        return true;\n    }\n    split(from) {\n        let result = [], off = 0, detachFrom = -1, i = 0;\n        for (let elt of this.children) {\n            let end = off + elt.length;\n            if (end > from)\n                result.push(off < from ? elt.split(from - off) : elt);\n            if (detachFrom < 0 && off >= from)\n                detachFrom = i;\n            off = end;\n            i++;\n        }\n        let length = this.length - from;\n        this.length = from;\n        if (detachFrom > -1) {\n            this.children.length = detachFrom;\n            this.markDirty();\n        }\n        return new MarkView(this.mark, result, length);\n    }\n    domAtPos(pos) {\n        return inlineDOMAtPos(this, pos);\n    }\n    coordsAt(pos, side) {\n        return coordsInChildren(this, pos, side);\n    }\n}\nfunction textCoords(text, pos, side) {\n    let length = text.nodeValue.length;\n    if (pos > length)\n        pos = length;\n    let from = pos, to = pos, flatten = 0;\n    if (pos == 0 && side < 0 || pos == length && side >= 0) {\n        if (!(browser.chrome || browser.gecko)) { // These browsers reliably return valid rectangles for empty ranges\n            if (pos) {\n                from--;\n                flatten = 1;\n            } // FIXME this is wrong in RTL text\n            else if (to < length) {\n                to++;\n                flatten = -1;\n            }\n        }\n    }\n    else {\n        if (side < 0)\n            from--;\n        else if (to < length)\n            to++;\n    }\n    let rects = textRange(text, from, to).getClientRects();\n    if (!rects.length)\n        return null;\n    let rect = rects[(flatten ? flatten < 0 : side >= 0) ? 0 : rects.length - 1];\n    if (browser.safari && !flatten && rect.width == 0)\n        rect = Array.prototype.find.call(rects, r => r.width) || rect;\n    return flatten ? flattenRect(rect, flatten < 0) : rect || null;\n}\n// Also used for collapsed ranges that don't have a placeholder widget!\nclass WidgetView extends ContentView {\n    static create(widget, length, side) {\n        return new WidgetView(widget, length, side);\n    }\n    constructor(widget, length, side) {\n        super();\n        this.widget = widget;\n        this.length = length;\n        this.side = side;\n        this.prevWidget = null;\n    }\n    split(from) {\n        let result = WidgetView.create(this.widget, this.length - from, this.side);\n        this.length -= from;\n        return result;\n    }\n    sync(view) {\n        if (!this.dom || !this.widget.updateDOM(this.dom, view)) {\n            if (this.dom && this.prevWidget)\n                this.prevWidget.destroy(this.dom);\n            this.prevWidget = null;\n            this.setDOM(this.widget.toDOM(view));\n            this.dom.contentEditable = \"false\";\n        }\n    }\n    getSide() { return this.side; }\n    merge(from, to, source, hasStart, openStart, openEnd) {\n        if (source && (!(source instanceof WidgetView) || !this.widget.compare(source.widget) ||\n            from > 0 && openStart <= 0 || to < this.length && openEnd <= 0))\n            return false;\n        this.length = from + (source ? source.length : 0) + (this.length - to);\n        return true;\n    }\n    become(other) {\n        if (other instanceof WidgetView && other.side == this.side &&\n            this.widget.constructor == other.widget.constructor) {\n            if (!this.widget.compare(other.widget))\n                this.markDirty(true);\n            if (this.dom && !this.prevWidget)\n                this.prevWidget = this.widget;\n            this.widget = other.widget;\n            this.length = other.length;\n            return true;\n        }\n        return false;\n    }\n    ignoreMutation() { return true; }\n    ignoreEvent(event) { return this.widget.ignoreEvent(event); }\n    get overrideDOMText() {\n        if (this.length == 0)\n            return Text.empty;\n        let top = this;\n        while (top.parent)\n            top = top.parent;\n        let { view } = top, text = view && view.state.doc, start = this.posAtStart;\n        return text ? text.slice(start, start + this.length) : Text.empty;\n    }\n    domAtPos(pos) {\n        return (this.length ? pos == 0 : this.side > 0)\n            ? DOMPos.before(this.dom)\n            : DOMPos.after(this.dom, pos == this.length);\n    }\n    domBoundsAround() { return null; }\n    coordsAt(pos, side) {\n        let custom = this.widget.coordsAt(this.dom, pos, side);\n        if (custom)\n            return custom;\n        let rects = this.dom.getClientRects(), rect = null;\n        if (!rects.length)\n            return null;\n        let fromBack = this.side ? this.side < 0 : pos > 0;\n        for (let i = fromBack ? rects.length - 1 : 0;; i += (fromBack ? -1 : 1)) {\n            rect = rects[i];\n            if (pos > 0 ? i == 0 : i == rects.length - 1 || rect.top < rect.bottom)\n                break;\n        }\n        return flattenRect(rect, !fromBack);\n    }\n    get isEditable() { return false; }\n    get isWidget() { return true; }\n    get isHidden() { return this.widget.isHidden; }\n    destroy() {\n        super.destroy();\n        if (this.dom)\n            this.widget.destroy(this.dom);\n    }\n}\n// These are drawn around uneditable widgets to avoid a number of\n// browser bugs that show up when the cursor is directly next to\n// uneditable inline content.\nclass WidgetBufferView extends ContentView {\n    constructor(side) {\n        super();\n        this.side = side;\n    }\n    get length() { return 0; }\n    merge() { return false; }\n    become(other) {\n        return other instanceof WidgetBufferView && other.side == this.side;\n    }\n    split() { return new WidgetBufferView(this.side); }\n    sync() {\n        if (!this.dom) {\n            let dom = document.createElement(\"img\");\n            dom.className = \"cm-widgetBuffer\";\n            dom.setAttribute(\"aria-hidden\", \"true\");\n            this.setDOM(dom);\n        }\n    }\n    getSide() { return this.side; }\n    domAtPos(pos) { return this.side > 0 ? DOMPos.before(this.dom) : DOMPos.after(this.dom); }\n    localPosFromDOM() { return 0; }\n    domBoundsAround() { return null; }\n    coordsAt(pos) {\n        return this.dom.getBoundingClientRect();\n    }\n    get overrideDOMText() {\n        return Text.empty;\n    }\n    get isHidden() { return true; }\n}\nTextView.prototype.children = WidgetView.prototype.children = WidgetBufferView.prototype.children = noChildren;\nfunction inlineDOMAtPos(parent, pos) {\n    let dom = parent.dom, { children } = parent, i = 0;\n    for (let off = 0; i < children.length; i++) {\n        let child = children[i], end = off + child.length;\n        if (end == off && child.getSide() <= 0)\n            continue;\n        if (pos > off && pos < end && child.dom.parentNode == dom)\n            return child.domAtPos(pos - off);\n        if (pos <= off)\n            break;\n        off = end;\n    }\n    for (let j = i; j > 0; j--) {\n        let prev = children[j - 1];\n        if (prev.dom.parentNode == dom)\n            return prev.domAtPos(prev.length);\n    }\n    for (let j = i; j < children.length; j++) {\n        let next = children[j];\n        if (next.dom.parentNode == dom)\n            return next.domAtPos(0);\n    }\n    return new DOMPos(dom, 0);\n}\n// Assumes `view`, if a mark view, has precisely 1 child.\nfunction joinInlineInto(parent, view, open) {\n    let last, { children } = parent;\n    if (open > 0 && view instanceof MarkView && children.length &&\n        (last = children[children.length - 1]) instanceof MarkView && last.mark.eq(view.mark)) {\n        joinInlineInto(last, view.children[0], open - 1);\n    }\n    else {\n        children.push(view);\n        view.setParent(parent);\n    }\n    parent.length += view.length;\n}\nfunction coordsInChildren(view, pos, side) {\n    let before = null, beforePos = -1, after = null, afterPos = -1;\n    function scan(view, pos) {\n        for (let i = 0, off = 0; i < view.children.length && off <= pos; i++) {\n            let child = view.children[i], end = off + child.length;\n            if (end >= pos) {\n                if (child.children.length) {\n                    scan(child, pos - off);\n                }\n                else if ((!after || after.isHidden && side > 0) &&\n                    (end > pos || off == end && child.getSide() > 0)) {\n                    after = child;\n                    afterPos = pos - off;\n                }\n                else if (off < pos || (off == end && child.getSide() < 0) && !child.isHidden) {\n                    before = child;\n                    beforePos = pos - off;\n                }\n            }\n            off = end;\n        }\n    }\n    scan(view, pos);\n    let target = (side < 0 ? before : after) || before || after;\n    if (target)\n        return target.coordsAt(Math.max(0, target == before ? beforePos : afterPos), side);\n    return fallbackRect(view);\n}\nfunction fallbackRect(view) {\n    let last = view.dom.lastChild;\n    if (!last)\n        return view.dom.getBoundingClientRect();\n    let rects = clientRectsFor(last);\n    return rects[rects.length - 1] || null;\n}\n\nfunction combineAttrs(source, target) {\n    for (let name in source) {\n        if (name == \"class\" && target.class)\n            target.class += \" \" + source.class;\n        else if (name == \"style\" && target.style)\n            target.style += \";\" + source.style;\n        else\n            target[name] = source[name];\n    }\n    return target;\n}\nconst noAttrs = /*@__PURE__*/Object.create(null);\nfunction attrsEq(a, b, ignore) {\n    if (a == b)\n        return true;\n    if (!a)\n        a = noAttrs;\n    if (!b)\n        b = noAttrs;\n    let keysA = Object.keys(a), keysB = Object.keys(b);\n    if (keysA.length - (ignore && keysA.indexOf(ignore) > -1 ? 1 : 0) !=\n        keysB.length - (ignore && keysB.indexOf(ignore) > -1 ? 1 : 0))\n        return false;\n    for (let key of keysA) {\n        if (key != ignore && (keysB.indexOf(key) == -1 || a[key] !== b[key]))\n            return false;\n    }\n    return true;\n}\nfunction updateAttrs(dom, prev, attrs) {\n    let changed = false;\n    if (prev)\n        for (let name in prev)\n            if (!(attrs && name in attrs)) {\n                changed = true;\n                if (name == \"style\")\n                    dom.style.cssText = \"\";\n                else\n                    dom.removeAttribute(name);\n            }\n    if (attrs)\n        for (let name in attrs)\n            if (!(prev && prev[name] == attrs[name])) {\n                changed = true;\n                if (name == \"style\")\n                    dom.style.cssText = attrs[name];\n                else\n                    dom.setAttribute(name, attrs[name]);\n            }\n    return changed;\n}\nfunction getAttrs(dom) {\n    let attrs = Object.create(null);\n    for (let i = 0; i < dom.attributes.length; i++) {\n        let attr = dom.attributes[i];\n        attrs[attr.name] = attr.value;\n    }\n    return attrs;\n}\n\nclass LineView extends ContentView {\n    constructor() {\n        super(...arguments);\n        this.children = [];\n        this.length = 0;\n        this.prevAttrs = undefined;\n        this.attrs = null;\n        this.breakAfter = 0;\n    }\n    // Consumes source\n    merge(from, to, source, hasStart, openStart, openEnd) {\n        if (source) {\n            if (!(source instanceof LineView))\n                return false;\n            if (!this.dom)\n                source.transferDOM(this); // Reuse source.dom when appropriate\n        }\n        if (hasStart)\n            this.setDeco(source ? source.attrs : null);\n        mergeChildrenInto(this, from, to, source ? source.children : [], openStart, openEnd);\n        return true;\n    }\n    split(at) {\n        let end = new LineView;\n        end.breakAfter = this.breakAfter;\n        if (this.length == 0)\n            return end;\n        let { i, off } = this.childPos(at);\n        if (off) {\n            end.append(this.children[i].split(off), 0);\n            this.children[i].merge(off, this.children[i].length, null, false, 0, 0);\n            i++;\n        }\n        for (let j = i; j < this.children.length; j++)\n            end.append(this.children[j], 0);\n        while (i > 0 && this.children[i - 1].length == 0)\n            this.children[--i].destroy();\n        this.children.length = i;\n        this.markDirty();\n        this.length = at;\n        return end;\n    }\n    transferDOM(other) {\n        if (!this.dom)\n            return;\n        this.markDirty();\n        other.setDOM(this.dom);\n        other.prevAttrs = this.prevAttrs === undefined ? this.attrs : this.prevAttrs;\n        this.prevAttrs = undefined;\n        this.dom = null;\n    }\n    setDeco(attrs) {\n        if (!attrsEq(this.attrs, attrs)) {\n            if (this.dom) {\n                this.prevAttrs = this.attrs;\n                this.markDirty();\n            }\n            this.attrs = attrs;\n        }\n    }\n    append(child, openStart) {\n        joinInlineInto(this, child, openStart);\n    }\n    // Only called when building a line view in ContentBuilder\n    addLineDeco(deco) {\n        let attrs = deco.spec.attributes, cls = deco.spec.class;\n        if (attrs)\n            this.attrs = combineAttrs(attrs, this.attrs || {});\n        if (cls)\n            this.attrs = combineAttrs({ class: cls }, this.attrs || {});\n    }\n    domAtPos(pos) {\n        return inlineDOMAtPos(this, pos);\n    }\n    reuseDOM(node) {\n        if (node.nodeName == \"DIV\") {\n            this.setDOM(node);\n            this.flags |= 4 /* ViewFlag.AttrsDirty */ | 2 /* ViewFlag.NodeDirty */;\n        }\n    }\n    sync(view, track) {\n        var _a;\n        if (!this.dom) {\n            this.setDOM(document.createElement(\"div\"));\n            this.dom.className = \"cm-line\";\n            this.prevAttrs = this.attrs ? null : undefined;\n        }\n        else if (this.flags & 4 /* ViewFlag.AttrsDirty */) {\n            clearAttributes(this.dom);\n            this.dom.className = \"cm-line\";\n            this.prevAttrs = this.attrs ? null : undefined;\n        }\n        if (this.prevAttrs !== undefined) {\n            updateAttrs(this.dom, this.prevAttrs, this.attrs);\n            this.dom.classList.add(\"cm-line\");\n            this.prevAttrs = undefined;\n        }\n        super.sync(view, track);\n        let last = this.dom.lastChild;\n        while (last && ContentView.get(last) instanceof MarkView)\n            last = last.lastChild;\n        if (!last || !this.length ||\n            last.nodeName != \"BR\" && ((_a = ContentView.get(last)) === null || _a === void 0 ? void 0 : _a.isEditable) == false &&\n                (!browser.ios || !this.children.some(ch => ch instanceof TextView))) {\n            let hack = document.createElement(\"BR\");\n            hack.cmIgnore = true;\n            this.dom.appendChild(hack);\n        }\n    }\n    measureTextSize() {\n        if (this.children.length == 0 || this.length > 20)\n            return null;\n        let totalWidth = 0, textHeight;\n        for (let child of this.children) {\n            if (!(child instanceof TextView) || /[^ -~]/.test(child.text))\n                return null;\n            let rects = clientRectsFor(child.dom);\n            if (rects.length != 1)\n                return null;\n            totalWidth += rects[0].width;\n            textHeight = rects[0].height;\n        }\n        return !totalWidth ? null : {\n            lineHeight: this.dom.getBoundingClientRect().height,\n            charWidth: totalWidth / this.length,\n            textHeight\n        };\n    }\n    coordsAt(pos, side) {\n        let rect = coordsInChildren(this, pos, side);\n        // Correct rectangle height for empty lines when the returned\n        // height is larger than the text height.\n        if (!this.children.length && rect && this.parent) {\n            let { heightOracle } = this.parent.view.viewState, height = rect.bottom - rect.top;\n            if (Math.abs(height - heightOracle.lineHeight) < 2 && heightOracle.textHeight < height) {\n                let dist = (height - heightOracle.textHeight) / 2;\n                return { top: rect.top + dist, bottom: rect.bottom - dist, left: rect.left, right: rect.left };\n            }\n        }\n        return rect;\n    }\n    become(_other) { return false; }\n    covers() { return true; }\n    static find(docView, pos) {\n        for (let i = 0, off = 0; i < docView.children.length; i++) {\n            let block = docView.children[i], end = off + block.length;\n            if (end >= pos) {\n                if (block instanceof LineView)\n                    return block;\n                if (end > pos)\n                    break;\n            }\n            off = end + block.breakAfter;\n        }\n        return null;\n    }\n}\nclass BlockWidgetView extends ContentView {\n    constructor(widget, length, deco) {\n        super();\n        this.widget = widget;\n        this.length = length;\n        this.deco = deco;\n        this.breakAfter = 0;\n        this.prevWidget = null;\n    }\n    merge(from, to, source, _takeDeco, openStart, openEnd) {\n        if (source && (!(source instanceof BlockWidgetView) || !this.widget.compare(source.widget) ||\n            from > 0 && openStart <= 0 || to < this.length && openEnd <= 0))\n            return false;\n        this.length = from + (source ? source.length : 0) + (this.length - to);\n        return true;\n    }\n    domAtPos(pos) {\n        return pos == 0 ? DOMPos.before(this.dom) : DOMPos.after(this.dom, pos == this.length);\n    }\n    split(at) {\n        let len = this.length - at;\n        this.length = at;\n        let end = new BlockWidgetView(this.widget, len, this.deco);\n        end.breakAfter = this.breakAfter;\n        return end;\n    }\n    get children() { return noChildren; }\n    sync(view) {\n        if (!this.dom || !this.widget.updateDOM(this.dom, view)) {\n            if (this.dom && this.prevWidget)\n                this.prevWidget.destroy(this.dom);\n            this.prevWidget = null;\n            this.setDOM(this.widget.toDOM(view));\n            this.dom.contentEditable = \"false\";\n        }\n    }\n    get overrideDOMText() {\n        return this.parent ? this.parent.view.state.doc.slice(this.posAtStart, this.posAtEnd) : Text.empty;\n    }\n    domBoundsAround() { return null; }\n    become(other) {\n        if (other instanceof BlockWidgetView &&\n            other.widget.constructor == this.widget.constructor) {\n            if (!other.widget.compare(this.widget))\n                this.markDirty(true);\n            if (this.dom && !this.prevWidget)\n                this.prevWidget = this.widget;\n            this.widget = other.widget;\n            this.length = other.length;\n            this.deco = other.deco;\n            this.breakAfter = other.breakAfter;\n            return true;\n        }\n        return false;\n    }\n    ignoreMutation() { return true; }\n    ignoreEvent(event) { return this.widget.ignoreEvent(event); }\n    get isEditable() { return false; }\n    get isWidget() { return true; }\n    coordsAt(pos, side) {\n        return this.widget.coordsAt(this.dom, pos, side);\n    }\n    destroy() {\n        super.destroy();\n        if (this.dom)\n            this.widget.destroy(this.dom);\n    }\n    covers(side) {\n        let { startSide, endSide } = this.deco;\n        return startSide == endSide ? false : side < 0 ? startSide < 0 : endSide > 0;\n    }\n}\n\n/**\nWidgets added to the content are described by subclasses of this\nclass. Using a description object like that makes it possible to\ndelay creating of the DOM structure for a widget until it is\nneeded, and to avoid redrawing widgets even if the decorations\nthat define them are recreated.\n*/\nclass WidgetType {\n    /**\n    Compare this instance to another instance of the same type.\n    (TypeScript can't express this, but only instances of the same\n    specific class will be passed to this method.) This is used to\n    avoid redrawing widgets when they are replaced by a new\n    decoration of the same type. The default implementation just\n    returns `false`, which will cause new instances of the widget to\n    always be redrawn.\n    */\n    eq(widget) { return false; }\n    /**\n    Update a DOM element created by a widget of the same type (but\n    different, non-`eq` content) to reflect this widget. May return\n    true to indicate that it could update, false to indicate it\n    couldn't (in which case the widget will be redrawn). The default\n    implementation just returns false.\n    */\n    updateDOM(dom, view) { return false; }\n    /**\n    @internal\n    */\n    compare(other) {\n        return this == other || this.constructor == other.constructor && this.eq(other);\n    }\n    /**\n    The estimated height this widget will have, to be used when\n    estimating the height of content that hasn't been drawn. May\n    return -1 to indicate you don't know. The default implementation\n    returns -1.\n    */\n    get estimatedHeight() { return -1; }\n    /**\n    For inline widgets that are displayed inline (as opposed to\n    `inline-block`) and introduce line breaks (through `<br>` tags\n    or textual newlines), this must indicate the amount of line\n    breaks they introduce. Defaults to 0.\n    */\n    get lineBreaks() { return 0; }\n    /**\n    Can be used to configure which kinds of events inside the widget\n    should be ignored by the editor. The default is to ignore all\n    events.\n    */\n    ignoreEvent(event) { return true; }\n    /**\n    Override the way screen coordinates for positions at/in the\n    widget are found. `pos` will be the offset into the widget, and\n    `side` the side of the position that is being queried\u2014less than\n    zero for before, greater than zero for after, and zero for\n    directly at that position.\n    */\n    coordsAt(dom, pos, side) { return null; }\n    /**\n    @internal\n    */\n    get isHidden() { return false; }\n    /**\n    This is called when the an instance of the widget is removed\n    from the editor view.\n    */\n    destroy(dom) { }\n}\n/**\nThe different types of blocks that can occur in an editor view.\n*/\nvar BlockType = /*@__PURE__*/(function (BlockType) {\n    /**\n    A line of text.\n    */\n    BlockType[BlockType[\"Text\"] = 0] = \"Text\";\n    /**\n    A block widget associated with the position after it.\n    */\n    BlockType[BlockType[\"WidgetBefore\"] = 1] = \"WidgetBefore\";\n    /**\n    A block widget associated with the position before it.\n    */\n    BlockType[BlockType[\"WidgetAfter\"] = 2] = \"WidgetAfter\";\n    /**\n    A block widget [replacing](https://codemirror.net/6/docs/ref/#view.Decoration^replace) a range of content.\n    */\n    BlockType[BlockType[\"WidgetRange\"] = 3] = \"WidgetRange\";\nreturn BlockType})(BlockType || (BlockType = {}));\n/**\nA decoration provides information on how to draw or style a piece\nof content. You'll usually use it wrapped in a\n[`Range`](https://codemirror.net/6/docs/ref/#state.Range), which adds a start and end position.\n@nonabstract\n*/\nclass Decoration extends RangeValue {\n    constructor(\n    /**\n    @internal\n    */\n    startSide, \n    /**\n    @internal\n    */\n    endSide, \n    /**\n    @internal\n    */\n    widget, \n    /**\n    The config object used to create this decoration. You can\n    include additional properties in there to store metadata about\n    your decoration.\n    */\n    spec) {\n        super();\n        this.startSide = startSide;\n        this.endSide = endSide;\n        this.widget = widget;\n        this.spec = spec;\n    }\n    /**\n    @internal\n    */\n    get heightRelevant() { return false; }\n    /**\n    Create a mark decoration, which influences the styling of the\n    content in its range. Nested mark decorations will cause nested\n    DOM elements to be created. Nesting order is determined by\n    precedence of the [facet](https://codemirror.net/6/docs/ref/#view.EditorView^decorations), with\n    the higher-precedence decorations creating the inner DOM nodes.\n    Such elements are split on line boundaries and on the boundaries\n    of lower-precedence decorations.\n    */\n    static mark(spec) {\n        return new MarkDecoration(spec);\n    }\n    /**\n    Create a widget decoration, which displays a DOM element at the\n    given position.\n    */\n    static widget(spec) {\n        let side = Math.max(-10000, Math.min(10000, spec.side || 0)), block = !!spec.block;\n        side += (block && !spec.inlineOrder)\n            ? (side > 0 ? 300000000 /* Side.BlockAfter */ : -400000000 /* Side.BlockBefore */)\n            : (side > 0 ? 100000000 /* Side.InlineAfter */ : -100000000 /* Side.InlineBefore */);\n        return new PointDecoration(spec, side, side, block, spec.widget || null, false);\n    }\n    /**\n    Create a replace decoration which replaces the given range with\n    a widget, or simply hides it.\n    */\n    static replace(spec) {\n        let block = !!spec.block, startSide, endSide;\n        if (spec.isBlockGap) {\n            startSide = -500000000 /* Side.GapStart */;\n            endSide = 400000000 /* Side.GapEnd */;\n        }\n        else {\n            let { start, end } = getInclusive(spec, block);\n            startSide = (start ? (block ? -300000000 /* Side.BlockIncStart */ : -1 /* Side.InlineIncStart */) : 500000000 /* Side.NonIncStart */) - 1;\n            endSide = (end ? (block ? 200000000 /* Side.BlockIncEnd */ : 1 /* Side.InlineIncEnd */) : -600000000 /* Side.NonIncEnd */) + 1;\n        }\n        return new PointDecoration(spec, startSide, endSide, block, spec.widget || null, true);\n    }\n    /**\n    Create a line decoration, which can add DOM attributes to the\n    line starting at the given position.\n    */\n    static line(spec) {\n        return new LineDecoration(spec);\n    }\n    /**\n    Build a [`DecorationSet`](https://codemirror.net/6/docs/ref/#view.DecorationSet) from the given\n    decorated range or ranges. If the ranges aren't already sorted,\n    pass `true` for `sort` to make the library sort them for you.\n    */\n    static set(of, sort = false) {\n        return RangeSet.of(of, sort);\n    }\n    /**\n    @internal\n    */\n    hasHeight() { return this.widget ? this.widget.estimatedHeight > -1 : false; }\n}\n/**\nThe empty set of decorations.\n*/\nDecoration.none = RangeSet.empty;\nclass MarkDecoration extends Decoration {\n    constructor(spec) {\n        let { start, end } = getInclusive(spec);\n        super(start ? -1 /* Side.InlineIncStart */ : 500000000 /* Side.NonIncStart */, end ? 1 /* Side.InlineIncEnd */ : -600000000 /* Side.NonIncEnd */, null, spec);\n        this.tagName = spec.tagName || \"span\";\n        this.class = spec.class || \"\";\n        this.attrs = spec.attributes || null;\n    }\n    eq(other) {\n        var _a, _b;\n        return this == other ||\n            other instanceof MarkDecoration &&\n                this.tagName == other.tagName &&\n                (this.class || ((_a = this.attrs) === null || _a === void 0 ? void 0 : _a.class)) == (other.class || ((_b = other.attrs) === null || _b === void 0 ? void 0 : _b.class)) &&\n                attrsEq(this.attrs, other.attrs, \"class\");\n    }\n    range(from, to = from) {\n        if (from >= to)\n            throw new RangeError(\"Mark decorations may not be empty\");\n        return super.range(from, to);\n    }\n}\nMarkDecoration.prototype.point = false;\nclass LineDecoration extends Decoration {\n    constructor(spec) {\n        super(-200000000 /* Side.Line */, -200000000 /* Side.Line */, null, spec);\n    }\n    eq(other) {\n        return other instanceof LineDecoration &&\n            this.spec.class == other.spec.class &&\n            attrsEq(this.spec.attributes, other.spec.attributes);\n    }\n    range(from, to = from) {\n        if (to != from)\n            throw new RangeError(\"Line decoration ranges must be zero-length\");\n        return super.range(from, to);\n    }\n}\nLineDecoration.prototype.mapMode = MapMode.TrackBefore;\nLineDecoration.prototype.point = true;\nclass PointDecoration extends Decoration {\n    constructor(spec, startSide, endSide, block, widget, isReplace) {\n        super(startSide, endSide, widget, spec);\n        this.block = block;\n        this.isReplace = isReplace;\n        this.mapMode = !block ? MapMode.TrackDel : startSide <= 0 ? MapMode.TrackBefore : MapMode.TrackAfter;\n    }\n    // Only relevant when this.block == true\n    get type() {\n        return this.startSide != this.endSide ? BlockType.WidgetRange\n            : this.startSide <= 0 ? BlockType.WidgetBefore : BlockType.WidgetAfter;\n    }\n    get heightRelevant() {\n        return this.block || !!this.widget && (this.widget.estimatedHeight >= 5 || this.widget.lineBreaks > 0);\n    }\n    eq(other) {\n        return other instanceof PointDecoration &&\n            widgetsEq(this.widget, other.widget) &&\n            this.block == other.block &&\n            this.startSide == other.startSide && this.endSide == other.endSide;\n    }\n    range(from, to = from) {\n        if (this.isReplace && (from > to || (from == to && this.startSide > 0 && this.endSide <= 0)))\n            throw new RangeError(\"Invalid range for replacement decoration\");\n        if (!this.isReplace && to != from)\n            throw new RangeError(\"Widget decorations can only have zero-length ranges\");\n        return super.range(from, to);\n    }\n}\nPointDecoration.prototype.point = true;\nfunction getInclusive(spec, block = false) {\n    let { inclusiveStart: start, inclusiveEnd: end } = spec;\n    if (start == null)\n        start = spec.inclusive;\n    if (end == null)\n        end = spec.inclusive;\n    return { start: start !== null && start !== void 0 ? start : block, end: end !== null && end !== void 0 ? end : block };\n}\nfunction widgetsEq(a, b) {\n    return a == b || !!(a && b && a.compare(b));\n}\nfunction addRange(from, to, ranges, margin = 0) {\n    let last = ranges.length - 1;\n    if (last >= 0 && ranges[last] + margin >= from)\n        ranges[last] = Math.max(ranges[last], to);\n    else\n        ranges.push(from, to);\n}\n\nclass ContentBuilder {\n    constructor(doc, pos, end, disallowBlockEffectsFor) {\n        this.doc = doc;\n        this.pos = pos;\n        this.end = end;\n        this.disallowBlockEffectsFor = disallowBlockEffectsFor;\n        this.content = [];\n        this.curLine = null;\n        this.breakAtStart = 0;\n        this.pendingBuffer = 0 /* Buf.No */;\n        this.bufferMarks = [];\n        // Set to false directly after a widget that covers the position after it\n        this.atCursorPos = true;\n        this.openStart = -1;\n        this.openEnd = -1;\n        this.text = \"\";\n        this.textOff = 0;\n        this.cursor = doc.iter();\n        this.skip = pos;\n    }\n    posCovered() {\n        if (this.content.length == 0)\n            return !this.breakAtStart && this.doc.lineAt(this.pos).from != this.pos;\n        let last = this.content[this.content.length - 1];\n        return !(last.breakAfter || last instanceof BlockWidgetView && last.deco.endSide < 0);\n    }\n    getLine() {\n        if (!this.curLine) {\n            this.content.push(this.curLine = new LineView);\n            this.atCursorPos = true;\n        }\n        return this.curLine;\n    }\n    flushBuffer(active = this.bufferMarks) {\n        if (this.pendingBuffer) {\n            this.curLine.append(wrapMarks(new WidgetBufferView(-1), active), active.length);\n            this.pendingBuffer = 0 /* Buf.No */;\n        }\n    }\n    addBlockWidget(view) {\n        this.flushBuffer();\n        this.curLine = null;\n        this.content.push(view);\n    }\n    finish(openEnd) {\n        if (this.pendingBuffer && openEnd <= this.bufferMarks.length)\n            this.flushBuffer();\n        else\n            this.pendingBuffer = 0 /* Buf.No */;\n        if (!this.posCovered() &&\n            !(openEnd && this.content.length && this.content[this.content.length - 1] instanceof BlockWidgetView))\n            this.getLine();\n    }\n    buildText(length, active, openStart) {\n        while (length > 0) {\n            if (this.textOff == this.text.length) {\n                let { value, lineBreak, done } = this.cursor.next(this.skip);\n                this.skip = 0;\n                if (done)\n                    throw new Error(\"Ran out of text content when drawing inline views\");\n                if (lineBreak) {\n                    if (!this.posCovered())\n                        this.getLine();\n                    if (this.content.length)\n                        this.content[this.content.length - 1].breakAfter = 1;\n                    else\n                        this.breakAtStart = 1;\n                    this.flushBuffer();\n                    this.curLine = null;\n                    this.atCursorPos = true;\n                    length--;\n                    continue;\n                }\n                else {\n                    this.text = value;\n                    this.textOff = 0;\n                }\n            }\n            let take = Math.min(this.text.length - this.textOff, length, 512 /* T.Chunk */);\n            this.flushBuffer(active.slice(active.length - openStart));\n            this.getLine().append(wrapMarks(new TextView(this.text.slice(this.textOff, this.textOff + take)), active), openStart);\n            this.atCursorPos = true;\n            this.textOff += take;\n            length -= take;\n            openStart = 0;\n        }\n    }\n    span(from, to, active, openStart) {\n        this.buildText(to - from, active, openStart);\n        this.pos = to;\n        if (this.openStart < 0)\n            this.openStart = openStart;\n    }\n    point(from, to, deco, active, openStart, index) {\n        if (this.disallowBlockEffectsFor[index] && deco instanceof PointDecoration) {\n            if (deco.block)\n                throw new RangeError(\"Block decorations may not be specified via plugins\");\n            if (to > this.doc.lineAt(this.pos).to)\n                throw new RangeError(\"Decorations that replace line breaks may not be specified via plugins\");\n        }\n        let len = to - from;\n        if (deco instanceof PointDecoration) {\n            if (deco.block) {\n                if (deco.startSide > 0 && !this.posCovered())\n                    this.getLine();\n                this.addBlockWidget(new BlockWidgetView(deco.widget || new NullWidget(\"div\"), len, deco));\n            }\n            else {\n                let view = WidgetView.create(deco.widget || new NullWidget(\"span\"), len, len ? 0 : deco.startSide);\n                let cursorBefore = this.atCursorPos && !view.isEditable && openStart <= active.length &&\n                    (from < to || deco.startSide > 0);\n                let cursorAfter = !view.isEditable && (from < to || openStart > active.length || deco.startSide <= 0);\n                let line = this.getLine();\n                if (this.pendingBuffer == 2 /* Buf.IfCursor */ && !cursorBefore && !view.isEditable)\n                    this.pendingBuffer = 0 /* Buf.No */;\n                this.flushBuffer(active);\n                if (cursorBefore) {\n                    line.append(wrapMarks(new WidgetBufferView(1), active), openStart);\n                    openStart = active.length + Math.max(0, openStart - active.length);\n                }\n                line.append(wrapMarks(view, active), openStart);\n                this.atCursorPos = cursorAfter;\n                this.pendingBuffer = !cursorAfter ? 0 /* Buf.No */ : from < to || openStart > active.length ? 1 /* Buf.Yes */ : 2 /* Buf.IfCursor */;\n                if (this.pendingBuffer)\n                    this.bufferMarks = active.slice();\n            }\n        }\n        else if (this.doc.lineAt(this.pos).from == this.pos) { // Line decoration\n            this.getLine().addLineDeco(deco);\n        }\n        if (len) {\n            // Advance the iterator past the replaced content\n            if (this.textOff + len <= this.text.length) {\n                this.textOff += len;\n            }\n            else {\n                this.skip += len - (this.text.length - this.textOff);\n                this.text = \"\";\n                this.textOff = 0;\n            }\n            this.pos = to;\n        }\n        if (this.openStart < 0)\n            this.openStart = openStart;\n    }\n    static build(text, from, to, decorations, dynamicDecorationMap) {\n        let builder = new ContentBuilder(text, from, to, dynamicDecorationMap);\n        builder.openEnd = RangeSet.spans(decorations, from, to, builder);\n        if (builder.openStart < 0)\n            builder.openStart = builder.openEnd;\n        builder.finish(builder.openEnd);\n        return builder;\n    }\n}\nfunction wrapMarks(view, active) {\n    for (let mark of active)\n        view = new MarkView(mark, [view], view.length);\n    return view;\n}\nclass NullWidget extends WidgetType {\n    constructor(tag) {\n        super();\n        this.tag = tag;\n    }\n    eq(other) { return other.tag == this.tag; }\n    toDOM() { return document.createElement(this.tag); }\n    updateDOM(elt) { return elt.nodeName.toLowerCase() == this.tag; }\n    get isHidden() { return true; }\n}\n\nconst clickAddsSelectionRange = /*@__PURE__*/Facet.define();\nconst dragMovesSelection$1 = /*@__PURE__*/Facet.define();\nconst mouseSelectionStyle = /*@__PURE__*/Facet.define();\nconst exceptionSink = /*@__PURE__*/Facet.define();\nconst updateListener = /*@__PURE__*/Facet.define();\nconst inputHandler = /*@__PURE__*/Facet.define();\nconst focusChangeEffect = /*@__PURE__*/Facet.define();\nconst perLineTextDirection = /*@__PURE__*/Facet.define({\n    combine: values => values.some(x => x)\n});\nconst nativeSelectionHidden = /*@__PURE__*/Facet.define({\n    combine: values => values.some(x => x)\n});\nclass ScrollTarget {\n    constructor(range, y = \"nearest\", x = \"nearest\", yMargin = 5, xMargin = 5, \n    // This data structure is abused to also store precise scroll\n    // snapshots, instead of a `scrollIntoView` request. When this\n    // flag is `true`, `range` points at a position in the reference\n    // line, `yMargin` holds the difference between the top of that\n    // line and the top of the editor, and `xMargin` holds the\n    // editor's `scrollLeft`.\n    isSnapshot = false) {\n        this.range = range;\n        this.y = y;\n        this.x = x;\n        this.yMargin = yMargin;\n        this.xMargin = xMargin;\n        this.isSnapshot = isSnapshot;\n    }\n    map(changes) {\n        return changes.empty ? this :\n            new ScrollTarget(this.range.map(changes), this.y, this.x, this.yMargin, this.xMargin, this.isSnapshot);\n    }\n    clip(state) {\n        return this.range.to <= state.doc.length ? this :\n            new ScrollTarget(EditorSelection.cursor(state.doc.length), this.y, this.x, this.yMargin, this.xMargin, this.isSnapshot);\n    }\n}\nconst scrollIntoView = /*@__PURE__*/StateEffect.define({ map: (t, ch) => t.map(ch) });\n/**\nLog or report an unhandled exception in client code. Should\nprobably only be used by extension code that allows client code to\nprovide functions, and calls those functions in a context where an\nexception can't be propagated to calling code in a reasonable way\n(for example when in an event handler).\n\nEither calls a handler registered with\n[`EditorView.exceptionSink`](https://codemirror.net/6/docs/ref/#view.EditorView^exceptionSink),\n`window.onerror`, if defined, or `console.error` (in which case\nit'll pass `context`, when given, as first argument).\n*/\nfunction logException(state, exception, context) {\n    let handler = state.facet(exceptionSink);\n    if (handler.length)\n        handler[0](exception);\n    else if (window.onerror)\n        window.onerror(String(exception), context, undefined, undefined, exception);\n    else if (context)\n        console.error(context + \":\", exception);\n    else\n        console.error(exception);\n}\nconst editable = /*@__PURE__*/Facet.define({ combine: values => values.length ? values[0] : true });\nlet nextPluginID = 0;\nconst viewPlugin = /*@__PURE__*/Facet.define();\n/**\nView plugins associate stateful values with a view. They can\ninfluence the way the content is drawn, and are notified of things\nthat happen in the view.\n*/\nclass ViewPlugin {\n    constructor(\n    /**\n    @internal\n    */\n    id, \n    /**\n    @internal\n    */\n    create, \n    /**\n    @internal\n    */\n    domEventHandlers, \n    /**\n    @internal\n    */\n    domEventObservers, buildExtensions) {\n        this.id = id;\n        this.create = create;\n        this.domEventHandlers = domEventHandlers;\n        this.domEventObservers = domEventObservers;\n        this.extension = buildExtensions(this);\n    }\n    /**\n    Define a plugin from a constructor function that creates the\n    plugin's value, given an editor view.\n    */\n    static define(create, spec) {\n        const { eventHandlers, eventObservers, provide, decorations: deco } = spec || {};\n        return new ViewPlugin(nextPluginID++, create, eventHandlers, eventObservers, plugin => {\n            let ext = [viewPlugin.of(plugin)];\n            if (deco)\n                ext.push(decorations.of(view => {\n                    let pluginInst = view.plugin(plugin);\n                    return pluginInst ? deco(pluginInst) : Decoration.none;\n                }));\n            if (provide)\n                ext.push(provide(plugin));\n            return ext;\n        });\n    }\n    /**\n    Create a plugin for a class whose constructor takes a single\n    editor view as argument.\n    */\n    static fromClass(cls, spec) {\n        return ViewPlugin.define(view => new cls(view), spec);\n    }\n}\nclass PluginInstance {\n    constructor(spec) {\n        this.spec = spec;\n        // When starting an update, all plugins have this field set to the\n        // update object, indicating they need to be updated. When finished\n        // updating, it is set to `false`. Retrieving a plugin that needs to\n        // be updated with `view.plugin` forces an eager update.\n        this.mustUpdate = null;\n        // This is null when the plugin is initially created, but\n        // initialized on the first update.\n        this.value = null;\n    }\n    update(view) {\n        if (!this.value) {\n            if (this.spec) {\n                try {\n                    this.value = this.spec.create(view);\n                }\n                catch (e) {\n                    logException(view.state, e, \"CodeMirror plugin crashed\");\n                    this.deactivate();\n                }\n            }\n        }\n        else if (this.mustUpdate) {\n            let update = this.mustUpdate;\n            this.mustUpdate = null;\n            if (this.value.update) {\n                try {\n                    this.value.update(update);\n                }\n                catch (e) {\n                    logException(update.state, e, \"CodeMirror plugin crashed\");\n                    if (this.value.destroy)\n                        try {\n                            this.value.destroy();\n                        }\n                        catch (_) { }\n                    this.deactivate();\n                }\n            }\n        }\n        return this;\n    }\n    destroy(view) {\n        var _a;\n        if ((_a = this.value) === null || _a === void 0 ? void 0 : _a.destroy) {\n            try {\n                this.value.destroy();\n            }\n            catch (e) {\n                logException(view.state, e, \"CodeMirror plugin crashed\");\n            }\n        }\n    }\n    deactivate() {\n        this.spec = this.value = null;\n    }\n}\nconst editorAttributes = /*@__PURE__*/Facet.define();\nconst contentAttributes = /*@__PURE__*/Facet.define();\n// Provide decorations\nconst decorations = /*@__PURE__*/Facet.define();\nconst atomicRanges = /*@__PURE__*/Facet.define();\nconst bidiIsolatedRanges = /*@__PURE__*/Facet.define();\nfunction getIsolatedRanges(view, from, to) {\n    let isolates = view.state.facet(bidiIsolatedRanges);\n    if (!isolates.length)\n        return isolates;\n    let sets = isolates.map(i => i instanceof Function ? i(view) : i);\n    let result = [];\n    RangeSet.spans(sets, from, to, {\n        point() { },\n        span(from, to, active, open) {\n            let level = result;\n            for (let i = active.length - 1; i >= 0; i--, open--) {\n                let iso = active[i].spec.bidiIsolate, update;\n                if (iso == null)\n                    continue;\n                if (open > 0 && level.length &&\n                    (update = level[level.length - 1]).to == from && update.direction == iso) {\n                    update.to = to;\n                    level = update.inner;\n                }\n                else {\n                    let add = { from, to, direction: iso, inner: [] };\n                    level.push(add);\n                    level = add.inner;\n                }\n            }\n        }\n    });\n    return result;\n}\nconst scrollMargins = /*@__PURE__*/Facet.define();\nfunction getScrollMargins(view) {\n    let left = 0, right = 0, top = 0, bottom = 0;\n    for (let source of view.state.facet(scrollMargins)) {\n        let m = source(view);\n        if (m) {\n            if (m.left != null)\n                left = Math.max(left, m.left);\n            if (m.right != null)\n                right = Math.max(right, m.right);\n            if (m.top != null)\n                top = Math.max(top, m.top);\n            if (m.bottom != null)\n                bottom = Math.max(bottom, m.bottom);\n        }\n    }\n    return { left, right, top, bottom };\n}\nconst styleModule = /*@__PURE__*/Facet.define();\nclass ChangedRange {\n    constructor(fromA, toA, fromB, toB) {\n        this.fromA = fromA;\n        this.toA = toA;\n        this.fromB = fromB;\n        this.toB = toB;\n    }\n    join(other) {\n        return new ChangedRange(Math.min(this.fromA, other.fromA), Math.max(this.toA, other.toA), Math.min(this.fromB, other.fromB), Math.max(this.toB, other.toB));\n    }\n    addToSet(set) {\n        let i = set.length, me = this;\n        for (; i > 0; i--) {\n            let range = set[i - 1];\n            if (range.fromA > me.toA)\n                continue;\n            if (range.toA < me.fromA)\n                break;\n            me = me.join(range);\n            set.splice(i - 1, 1);\n        }\n        set.splice(i, 0, me);\n        return set;\n    }\n    static extendWithRanges(diff, ranges) {\n        if (ranges.length == 0)\n            return diff;\n        let result = [];\n        for (let dI = 0, rI = 0, posA = 0, posB = 0;; dI++) {\n            let next = dI == diff.length ? null : diff[dI], off = posA - posB;\n            let end = next ? next.fromB : 1e9;\n            while (rI < ranges.length && ranges[rI] < end) {\n                let from = ranges[rI], to = ranges[rI + 1];\n                let fromB = Math.max(posB, from), toB = Math.min(end, to);\n                if (fromB <= toB)\n                    new ChangedRange(fromB + off, toB + off, fromB, toB).addToSet(result);\n                if (to > end)\n                    break;\n                else\n                    rI += 2;\n            }\n            if (!next)\n                return result;\n            new ChangedRange(next.fromA, next.toA, next.fromB, next.toB).addToSet(result);\n            posA = next.toA;\n            posB = next.toB;\n        }\n    }\n}\n/**\nView [plugins](https://codemirror.net/6/docs/ref/#view.ViewPlugin) are given instances of this\nclass, which describe what happened, whenever the view is updated.\n*/\nclass ViewUpdate {\n    constructor(\n    /**\n    The editor view that the update is associated with.\n    */\n    view, \n    /**\n    The new editor state.\n    */\n    state, \n    /**\n    The transactions involved in the update. May be empty.\n    */\n    transactions) {\n        this.view = view;\n        this.state = state;\n        this.transactions = transactions;\n        /**\n        @internal\n        */\n        this.flags = 0;\n        this.startState = view.state;\n        this.changes = ChangeSet.empty(this.startState.doc.length);\n        for (let tr of transactions)\n            this.changes = this.changes.compose(tr.changes);\n        let changedRanges = [];\n        this.changes.iterChangedRanges((fromA, toA, fromB, toB) => changedRanges.push(new ChangedRange(fromA, toA, fromB, toB)));\n        this.changedRanges = changedRanges;\n    }\n    /**\n    @internal\n    */\n    static create(view, state, transactions) {\n        return new ViewUpdate(view, state, transactions);\n    }\n    /**\n    Tells you whether the [viewport](https://codemirror.net/6/docs/ref/#view.EditorView.viewport) or\n    [visible ranges](https://codemirror.net/6/docs/ref/#view.EditorView.visibleRanges) changed in this\n    update.\n    */\n    get viewportChanged() {\n        return (this.flags & 4 /* UpdateFlag.Viewport */) > 0;\n    }\n    /**\n    Indicates whether the height of a block element in the editor\n    changed in this update.\n    */\n    get heightChanged() {\n        return (this.flags & 2 /* UpdateFlag.Height */) > 0;\n    }\n    /**\n    Returns true when the document was modified or the size of the\n    editor, or elements within the editor, changed.\n    */\n    get geometryChanged() {\n        return this.docChanged || (this.flags & (8 /* UpdateFlag.Geometry */ | 2 /* UpdateFlag.Height */)) > 0;\n    }\n    /**\n    True when this update indicates a focus change.\n    */\n    get focusChanged() {\n        return (this.flags & 1 /* UpdateFlag.Focus */) > 0;\n    }\n    /**\n    Whether the document changed in this update.\n    */\n    get docChanged() {\n        return !this.changes.empty;\n    }\n    /**\n    Whether the selection was explicitly set in this update.\n    */\n    get selectionSet() {\n        return this.transactions.some(tr => tr.selection);\n    }\n    /**\n    @internal\n    */\n    get empty() { return this.flags == 0 && this.transactions.length == 0; }\n}\n\n/**\nUsed to indicate [text direction](https://codemirror.net/6/docs/ref/#view.EditorView.textDirection).\n*/\nvar Direction = /*@__PURE__*/(function (Direction) {\n    // (These are chosen to match the base levels, in bidi algorithm\n    // terms, of spans in that direction.)\n    /**\n    Left-to-right.\n    */\n    Direction[Direction[\"LTR\"] = 0] = \"LTR\";\n    /**\n    Right-to-left.\n    */\n    Direction[Direction[\"RTL\"] = 1] = \"RTL\";\nreturn Direction})(Direction || (Direction = {}));\nconst LTR = Direction.LTR, RTL = Direction.RTL;\n// Decode a string with each type encoded as log2(type)\nfunction dec(str) {\n    let result = [];\n    for (let i = 0; i < str.length; i++)\n        result.push(1 << +str[i]);\n    return result;\n}\n// Character types for codepoints 0 to 0xf8\nconst LowTypes = /*@__PURE__*/dec(\"88888888888888888888888888888888888666888888787833333333337888888000000000000000000000000008888880000000000000000000000000088888888888888888888888888888888888887866668888088888663380888308888800000000000000000000000800000000000000000000000000000008\");\n// Character types for codepoints 0x600 to 0x6f9\nconst ArabicTypes = /*@__PURE__*/dec(\"4444448826627288999999999992222222222222222222222222222222222222222222222229999999999999999999994444444444644222822222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222999999949999999229989999223333333333\");\nconst Brackets = /*@__PURE__*/Object.create(null), BracketStack = [];\n// There's a lot more in\n// https://www.unicode.org/Public/UCD/latest/ucd/BidiBrackets.txt,\n// which are left out to keep code size down.\nfor (let p of [\"()\", \"[]\", \"{}\"]) {\n    let l = /*@__PURE__*/p.charCodeAt(0), r = /*@__PURE__*/p.charCodeAt(1);\n    Brackets[l] = r;\n    Brackets[r] = -l;\n}\nfunction charType(ch) {\n    return ch <= 0xf7 ? LowTypes[ch] :\n        0x590 <= ch && ch <= 0x5f4 ? 2 /* T.R */ :\n            0x600 <= ch && ch <= 0x6f9 ? ArabicTypes[ch - 0x600] :\n                0x6ee <= ch && ch <= 0x8ac ? 4 /* T.AL */ :\n                    0x2000 <= ch && ch <= 0x200b ? 256 /* T.NI */ :\n                        0xfb50 <= ch && ch <= 0xfdff ? 4 /* T.AL */ :\n                            ch == 0x200c ? 256 /* T.NI */ : 1 /* T.L */;\n}\nconst BidiRE = /[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac\\ufb50-\\ufdff]/;\n/**\nRepresents a contiguous range of text that has a single direction\n(as in left-to-right or right-to-left).\n*/\nclass BidiSpan {\n    /**\n    The direction of this span.\n    */\n    get dir() { return this.level % 2 ? RTL : LTR; }\n    /**\n    @internal\n    */\n    constructor(\n    /**\n    The start of the span (relative to the start of the line).\n    */\n    from, \n    /**\n    The end of the span.\n    */\n    to, \n    /**\n    The [\"bidi\n    level\"](https://unicode.org/reports/tr9/#Basic_Display_Algorithm)\n    of the span (in this context, 0 means\n    left-to-right, 1 means right-to-left, 2 means left-to-right\n    number inside right-to-left text).\n    */\n    level) {\n        this.from = from;\n        this.to = to;\n        this.level = level;\n    }\n    /**\n    @internal\n    */\n    side(end, dir) { return (this.dir == dir) == end ? this.to : this.from; }\n    /**\n    @internal\n    */\n    static find(order, index, level, assoc) {\n        let maybe = -1;\n        for (let i = 0; i < order.length; i++) {\n            let span = order[i];\n            if (span.from <= index && span.to >= index) {\n                if (span.level == level)\n                    return i;\n                // When multiple spans match, if assoc != 0, take the one that\n                // covers that side, otherwise take the one with the minimum\n                // level.\n                if (maybe < 0 || (assoc != 0 ? (assoc < 0 ? span.from < index : span.to > index) : order[maybe].level > span.level))\n                    maybe = i;\n            }\n        }\n        if (maybe < 0)\n            throw new RangeError(\"Index out of range\");\n        return maybe;\n    }\n}\nfunction isolatesEq(a, b) {\n    if (a.length != b.length)\n        return false;\n    for (let i = 0; i < a.length; i++) {\n        let iA = a[i], iB = b[i];\n        if (iA.from != iB.from || iA.to != iB.to || iA.direction != iB.direction || !isolatesEq(iA.inner, iB.inner))\n            return false;\n    }\n    return true;\n}\n// Reused array of character types\nconst types = [];\n// Fill in the character types (in `types`) from `from` to `to` and\n// apply W normalization rules.\nfunction computeCharTypes(line, rFrom, rTo, isolates, outerType) {\n    for (let iI = 0; iI <= isolates.length; iI++) {\n        let from = iI ? isolates[iI - 1].to : rFrom, to = iI < isolates.length ? isolates[iI].from : rTo;\n        let prevType = iI ? 256 /* T.NI */ : outerType;\n        // W1. Examine each non-spacing mark (NSM) in the level run, and\n        // change the type of the NSM to the type of the previous\n        // character. If the NSM is at the start of the level run, it will\n        // get the type of sor.\n        // W2. Search backwards from each instance of a European number\n        // until the first strong type (R, L, AL, or sor) is found. If an\n        // AL is found, change the type of the European number to Arabic\n        // number.\n        // W3. Change all ALs to R.\n        // (Left after this: L, R, EN, AN, ET, CS, NI)\n        for (let i = from, prev = prevType, prevStrong = prevType; i < to; i++) {\n            let type = charType(line.charCodeAt(i));\n            if (type == 512 /* T.NSM */)\n                type = prev;\n            else if (type == 8 /* T.EN */ && prevStrong == 4 /* T.AL */)\n                type = 16 /* T.AN */;\n            types[i] = type == 4 /* T.AL */ ? 2 /* T.R */ : type;\n            if (type & 7 /* T.Strong */)\n                prevStrong = type;\n            prev = type;\n        }\n        // W5. A sequence of European terminators adjacent to European\n        // numbers changes to all European numbers.\n        // W6. Otherwise, separators and terminators change to Other\n        // Neutral.\n        // W7. Search backwards from each instance of a European number\n        // until the first strong type (R, L, or sor) is found. If an L is\n        // found, then change the type of the European number to L.\n        // (Left after this: L, R, EN+AN, NI)\n        for (let i = from, prev = prevType, prevStrong = prevType; i < to; i++) {\n            let type = types[i];\n            if (type == 128 /* T.CS */) {\n                if (i < to - 1 && prev == types[i + 1] && (prev & 24 /* T.Num */))\n                    type = types[i] = prev;\n                else\n                    types[i] = 256 /* T.NI */;\n            }\n            else if (type == 64 /* T.ET */) {\n                let end = i + 1;\n                while (end < to && types[end] == 64 /* T.ET */)\n                    end++;\n                let replace = (i && prev == 8 /* T.EN */) || (end < rTo && types[end] == 8 /* T.EN */) ? (prevStrong == 1 /* T.L */ ? 1 /* T.L */ : 8 /* T.EN */) : 256 /* T.NI */;\n                for (let j = i; j < end; j++)\n                    types[j] = replace;\n                i = end - 1;\n            }\n            else if (type == 8 /* T.EN */ && prevStrong == 1 /* T.L */) {\n                types[i] = 1 /* T.L */;\n            }\n            prev = type;\n            if (type & 7 /* T.Strong */)\n                prevStrong = type;\n        }\n    }\n}\n// Process brackets throughout a run sequence.\nfunction processBracketPairs(line, rFrom, rTo, isolates, outerType) {\n    let oppositeType = outerType == 1 /* T.L */ ? 2 /* T.R */ : 1 /* T.L */;\n    for (let iI = 0, sI = 0, context = 0; iI <= isolates.length; iI++) {\n        let from = iI ? isolates[iI - 1].to : rFrom, to = iI < isolates.length ? isolates[iI].from : rTo;\n        // N0. Process bracket pairs in an isolating run sequence\n        // sequentially in the logical order of the text positions of the\n        // opening paired brackets using the logic given below. Within this\n        // scope, bidirectional types EN and AN are treated as R.\n        for (let i = from, ch, br, type; i < to; i++) {\n            // Keeps [startIndex, type, strongSeen] triples for each open\n            // bracket on BracketStack.\n            if (br = Brackets[ch = line.charCodeAt(i)]) {\n                if (br < 0) { // Closing bracket\n                    for (let sJ = sI - 3; sJ >= 0; sJ -= 3) {\n                        if (BracketStack[sJ + 1] == -br) {\n                            let flags = BracketStack[sJ + 2];\n                            let type = (flags & 2 /* Bracketed.EmbedInside */) ? outerType :\n                                !(flags & 4 /* Bracketed.OppositeInside */) ? 0 :\n                                    (flags & 1 /* Bracketed.OppositeBefore */) ? oppositeType : outerType;\n                            if (type)\n                                types[i] = types[BracketStack[sJ]] = type;\n                            sI = sJ;\n                            break;\n                        }\n                    }\n                }\n                else if (BracketStack.length == 189 /* Bracketed.MaxDepth */) {\n                    break;\n                }\n                else {\n                    BracketStack[sI++] = i;\n                    BracketStack[sI++] = ch;\n                    BracketStack[sI++] = context;\n                }\n            }\n            else if ((type = types[i]) == 2 /* T.R */ || type == 1 /* T.L */) {\n                let embed = type == outerType;\n                context = embed ? 0 : 1 /* Bracketed.OppositeBefore */;\n                for (let sJ = sI - 3; sJ >= 0; sJ -= 3) {\n                    let cur = BracketStack[sJ + 2];\n                    if (cur & 2 /* Bracketed.EmbedInside */)\n                        break;\n                    if (embed) {\n                        BracketStack[sJ + 2] |= 2 /* Bracketed.EmbedInside */;\n                    }\n                    else {\n                        if (cur & 4 /* Bracketed.OppositeInside */)\n                            break;\n                        BracketStack[sJ + 2] |= 4 /* Bracketed.OppositeInside */;\n                    }\n                }\n            }\n        }\n    }\n}\nfunction processNeutrals(rFrom, rTo, isolates, outerType) {\n    for (let iI = 0, prev = outerType; iI <= isolates.length; iI++) {\n        let from = iI ? isolates[iI - 1].to : rFrom, to = iI < isolates.length ? isolates[iI].from : rTo;\n        // N1. A sequence of neutrals takes the direction of the\n        // surrounding strong text if the text on both sides has the same\n        // direction. European and Arabic numbers act as if they were R in\n        // terms of their influence on neutrals. Start-of-level-run (sor)\n        // and end-of-level-run (eor) are used at level run boundaries.\n        // N2. Any remaining neutrals take the embedding direction.\n        // (Left after this: L, R, EN+AN)\n        for (let i = from; i < to;) {\n            let type = types[i];\n            if (type == 256 /* T.NI */) {\n                let end = i + 1;\n                for (;;) {\n                    if (end == to) {\n                        if (iI == isolates.length)\n                            break;\n                        end = isolates[iI++].to;\n                        to = iI < isolates.length ? isolates[iI].from : rTo;\n                    }\n                    else if (types[end] == 256 /* T.NI */) {\n                        end++;\n                    }\n                    else {\n                        break;\n                    }\n                }\n                let beforeL = prev == 1 /* T.L */;\n                let afterL = (end < rTo ? types[end] : outerType) == 1 /* T.L */;\n                let replace = beforeL == afterL ? (beforeL ? 1 /* T.L */ : 2 /* T.R */) : outerType;\n                for (let j = end, jI = iI, fromJ = jI ? isolates[jI - 1].to : rFrom; j > i;) {\n                    if (j == fromJ) {\n                        j = isolates[--jI].from;\n                        fromJ = jI ? isolates[jI - 1].to : rFrom;\n                    }\n                    types[--j] = replace;\n                }\n                i = end;\n            }\n            else {\n                prev = type;\n                i++;\n            }\n        }\n    }\n}\n// Find the contiguous ranges of character types in a given range, and\n// emit spans for them. Flip the order of the spans as appropriate\n// based on the level, and call through to compute the spans for\n// isolates at the proper point.\nfunction emitSpans(line, from, to, level, baseLevel, isolates, order) {\n    let ourType = level % 2 ? 2 /* T.R */ : 1 /* T.L */;\n    if ((level % 2) == (baseLevel % 2)) { // Same dir as base direction, don't flip\n        for (let iCh = from, iI = 0; iCh < to;) {\n            // Scan a section of characters in direction ourType, unless\n            // there's another type of char right after iCh, in which case\n            // we scan a section of other characters (which, if ourType ==\n            // T.L, may contain both T.R and T.AN chars).\n            let sameDir = true, isNum = false;\n            if (iI == isolates.length || iCh < isolates[iI].from) {\n                let next = types[iCh];\n                if (next != ourType) {\n                    sameDir = false;\n                    isNum = next == 16 /* T.AN */;\n                }\n            }\n            // Holds an array of isolates to pass to a recursive call if we\n            // must recurse (to distinguish T.AN inside an RTL section in\n            // LTR text), null if we can emit directly\n            let recurse = !sameDir && ourType == 1 /* T.L */ ? [] : null;\n            let localLevel = sameDir ? level : level + 1;\n            let iScan = iCh;\n            run: for (;;) {\n                if (iI < isolates.length && iScan == isolates[iI].from) {\n                    if (isNum)\n                        break run;\n                    let iso = isolates[iI];\n                    // Scan ahead to verify that there is another char in this dir after the isolate(s)\n                    if (!sameDir)\n                        for (let upto = iso.to, jI = iI + 1;;) {\n                            if (upto == to)\n                                break run;\n                            if (jI < isolates.length && isolates[jI].from == upto)\n                                upto = isolates[jI++].to;\n                            else if (types[upto] == ourType)\n                                break run;\n                            else\n                                break;\n                        }\n                    iI++;\n                    if (recurse) {\n                        recurse.push(iso);\n                    }\n                    else {\n                        if (iso.from > iCh)\n                            order.push(new BidiSpan(iCh, iso.from, localLevel));\n                        let dirSwap = (iso.direction == LTR) != !(localLevel % 2);\n                        computeSectionOrder(line, dirSwap ? level + 1 : level, baseLevel, iso.inner, iso.from, iso.to, order);\n                        iCh = iso.to;\n                    }\n                    iScan = iso.to;\n                }\n                else if (iScan == to || (sameDir ? types[iScan] != ourType : types[iScan] == ourType)) {\n                    break;\n                }\n                else {\n                    iScan++;\n                }\n            }\n            if (recurse)\n                emitSpans(line, iCh, iScan, level + 1, baseLevel, recurse, order);\n            else if (iCh < iScan)\n                order.push(new BidiSpan(iCh, iScan, localLevel));\n            iCh = iScan;\n        }\n    }\n    else {\n        // Iterate in reverse to flip the span order. Same code again, but\n        // going from the back of the section to the front\n        for (let iCh = to, iI = isolates.length; iCh > from;) {\n            let sameDir = true, isNum = false;\n            if (!iI || iCh > isolates[iI - 1].to) {\n                let next = types[iCh - 1];\n                if (next != ourType) {\n                    sameDir = false;\n                    isNum = next == 16 /* T.AN */;\n                }\n            }\n            let recurse = !sameDir && ourType == 1 /* T.L */ ? [] : null;\n            let localLevel = sameDir ? level : level + 1;\n            let iScan = iCh;\n            run: for (;;) {\n                if (iI && iScan == isolates[iI - 1].to) {\n                    if (isNum)\n                        break run;\n                    let iso = isolates[--iI];\n                    // Scan ahead to verify that there is another char in this dir after the isolate(s)\n                    if (!sameDir)\n                        for (let upto = iso.from, jI = iI;;) {\n                            if (upto == from)\n                                break run;\n                            if (jI && isolates[jI - 1].to == upto)\n                                upto = isolates[--jI].from;\n                            else if (types[upto - 1] == ourType)\n                                break run;\n                            else\n                                break;\n                        }\n                    if (recurse) {\n                        recurse.push(iso);\n                    }\n                    else {\n                        if (iso.to < iCh)\n                            order.push(new BidiSpan(iso.to, iCh, localLevel));\n                        let dirSwap = (iso.direction == LTR) != !(localLevel % 2);\n                        computeSectionOrder(line, dirSwap ? level + 1 : level, baseLevel, iso.inner, iso.from, iso.to, order);\n                        iCh = iso.from;\n                    }\n                    iScan = iso.from;\n                }\n                else if (iScan == from || (sameDir ? types[iScan - 1] != ourType : types[iScan - 1] == ourType)) {\n                    break;\n                }\n                else {\n                    iScan--;\n                }\n            }\n            if (recurse)\n                emitSpans(line, iScan, iCh, level + 1, baseLevel, recurse, order);\n            else if (iScan < iCh)\n                order.push(new BidiSpan(iScan, iCh, localLevel));\n            iCh = iScan;\n        }\n    }\n}\nfunction computeSectionOrder(line, level, baseLevel, isolates, from, to, order) {\n    let outerType = (level % 2 ? 2 /* T.R */ : 1 /* T.L */);\n    computeCharTypes(line, from, to, isolates, outerType);\n    processBracketPairs(line, from, to, isolates, outerType);\n    processNeutrals(from, to, isolates, outerType);\n    emitSpans(line, from, to, level, baseLevel, isolates, order);\n}\nfunction computeOrder(line, direction, isolates) {\n    if (!line)\n        return [new BidiSpan(0, 0, direction == RTL ? 1 : 0)];\n    if (direction == LTR && !isolates.length && !BidiRE.test(line))\n        return trivialOrder(line.length);\n    if (isolates.length)\n        while (line.length > types.length)\n            types[types.length] = 256 /* T.NI */; // Make sure types array has no gaps\n    let order = [], level = direction == LTR ? 0 : 1;\n    computeSectionOrder(line, level, level, isolates, 0, line.length, order);\n    return order;\n}\nfunction trivialOrder(length) {\n    return [new BidiSpan(0, length, 0)];\n}\nlet movedOver = \"\";\nfunction moveVisually(line, order, dir, start, forward) {\n    var _a;\n    let startIndex = start.head - line.from, spanI = -1;\n    if (startIndex == 0) {\n        if (!forward || !line.length)\n            return null;\n        if (order[0].level != dir) {\n            startIndex = order[0].side(false, dir);\n            spanI = 0;\n        }\n    }\n    else if (startIndex == line.length) {\n        if (forward)\n            return null;\n        let last = order[order.length - 1];\n        if (last.level != dir) {\n            startIndex = last.side(true, dir);\n            spanI = order.length - 1;\n        }\n    }\n    if (spanI < 0)\n        spanI = BidiSpan.find(order, startIndex, (_a = start.bidiLevel) !== null && _a !== void 0 ? _a : -1, start.assoc);\n    let span = order[spanI];\n    // End of span. (But not end of line--that was checked for above.)\n    if (startIndex == span.side(forward, dir)) {\n        span = order[spanI += forward ? 1 : -1];\n        startIndex = span.side(!forward, dir);\n    }\n    let indexForward = forward == (span.dir == dir);\n    let nextIndex = findClusterBreak(line.text, startIndex, indexForward);\n    movedOver = line.text.slice(Math.min(startIndex, nextIndex), Math.max(startIndex, nextIndex));\n    if (nextIndex != span.side(forward, dir))\n        return EditorSelection.cursor(nextIndex + line.from, indexForward ? -1 : 1, span.level);\n    let nextSpan = spanI == (forward ? order.length - 1 : 0) ? null : order[spanI + (forward ? 1 : -1)];\n    if (!nextSpan && span.level != dir)\n        return EditorSelection.cursor(forward ? line.to : line.from, forward ? -1 : 1, dir);\n    if (nextSpan && nextSpan.level < span.level)\n        return EditorSelection.cursor(nextSpan.side(!forward, dir) + line.from, forward ? 1 : -1, nextSpan.level);\n    return EditorSelection.cursor(nextIndex + line.from, forward ? -1 : 1, span.level);\n}\n\nclass DocView extends ContentView {\n    get length() { return this.view.state.doc.length; }\n    constructor(view) {\n        super();\n        this.view = view;\n        this.decorations = [];\n        this.dynamicDecorationMap = [];\n        this.domChanged = null;\n        this.hasComposition = null;\n        this.markedForComposition = new Set;\n        // Track a minimum width for the editor. When measuring sizes in\n        // measureVisibleLineHeights, this is updated to point at the width\n        // of a given element and its extent in the document. When a change\n        // happens in that range, these are reset. That way, once we've seen\n        // a line/element of a given length, we keep the editor wide enough\n        // to fit at least that element, until it is changed, at which point\n        // we forget it again.\n        this.minWidth = 0;\n        this.minWidthFrom = 0;\n        this.minWidthTo = 0;\n        // Track whether the DOM selection was set in a lossy way, so that\n        // we don't mess it up when reading it back it\n        this.impreciseAnchor = null;\n        this.impreciseHead = null;\n        this.forceSelection = false;\n        // Used by the resize observer to ignore resizes that we caused\n        // ourselves\n        this.lastUpdate = Date.now();\n        this.setDOM(view.contentDOM);\n        this.children = [new LineView];\n        this.children[0].setParent(this);\n        this.updateDeco();\n        this.updateInner([new ChangedRange(0, 0, 0, view.state.doc.length)], 0, null);\n    }\n    // Update the document view to a given state.\n    update(update) {\n        var _a;\n        let changedRanges = update.changedRanges;\n        if (this.minWidth > 0 && changedRanges.length) {\n            if (!changedRanges.every(({ fromA, toA }) => toA < this.minWidthFrom || fromA > this.minWidthTo)) {\n                this.minWidth = this.minWidthFrom = this.minWidthTo = 0;\n            }\n            else {\n                this.minWidthFrom = update.changes.mapPos(this.minWidthFrom, 1);\n                this.minWidthTo = update.changes.mapPos(this.minWidthTo, 1);\n            }\n        }\n        let readCompositionAt = -1;\n        if (this.view.inputState.composing >= 0) {\n            if ((_a = this.domChanged) === null || _a === void 0 ? void 0 : _a.newSel)\n                readCompositionAt = this.domChanged.newSel.head;\n            else if (!touchesComposition(update.changes, this.hasComposition) && !update.selectionSet)\n                readCompositionAt = update.state.selection.main.head;\n        }\n        let composition = readCompositionAt > -1 ? findCompositionRange(this.view, update.changes, readCompositionAt) : null;\n        this.domChanged = null;\n        if (this.hasComposition) {\n            this.markedForComposition.clear();\n            let { from, to } = this.hasComposition;\n            changedRanges = new ChangedRange(from, to, update.changes.mapPos(from, -1), update.changes.mapPos(to, 1))\n                .addToSet(changedRanges.slice());\n        }\n        this.hasComposition = composition ? { from: composition.range.fromB, to: composition.range.toB } : null;\n        // When the DOM nodes around the selection are moved to another\n        // parent, Chrome sometimes reports a different selection through\n        // getSelection than the one that it actually shows to the user.\n        // This forces a selection update when lines are joined to work\n        // around that. Issue #54\n        if ((browser.ie || browser.chrome) && !composition && update &&\n            update.state.doc.lines != update.startState.doc.lines)\n            this.forceSelection = true;\n        let prevDeco = this.decorations, deco = this.updateDeco();\n        let decoDiff = findChangedDeco(prevDeco, deco, update.changes);\n        changedRanges = ChangedRange.extendWithRanges(changedRanges, decoDiff);\n        if (!(this.flags & 7 /* ViewFlag.Dirty */) && changedRanges.length == 0) {\n            return false;\n        }\n        else {\n            this.updateInner(changedRanges, update.startState.doc.length, composition);\n            if (update.transactions.length)\n                this.lastUpdate = Date.now();\n            return true;\n        }\n    }\n    // Used by update and the constructor do perform the actual DOM\n    // update\n    updateInner(changes, oldLength, composition) {\n        this.view.viewState.mustMeasureContent = true;\n        this.updateChildren(changes, oldLength, composition);\n        let { observer } = this.view;\n        observer.ignore(() => {\n            // Lock the height during redrawing, since Chrome sometimes\n            // messes with the scroll position during DOM mutation (though\n            // no relayout is triggered and I cannot imagine how it can\n            // recompute the scroll position without a layout)\n            this.dom.style.height = this.view.viewState.contentHeight / this.view.scaleY + \"px\";\n            this.dom.style.flexBasis = this.minWidth ? this.minWidth + \"px\" : \"\";\n            // Chrome will sometimes, when DOM mutations occur directly\n            // around the selection, get confused and report a different\n            // selection from the one it displays (issue #218). This tries\n            // to detect that situation.\n            let track = browser.chrome || browser.ios ? { node: observer.selectionRange.focusNode, written: false } : undefined;\n            this.sync(this.view, track);\n            this.flags &= ~7 /* ViewFlag.Dirty */;\n            if (track && (track.written || observer.selectionRange.focusNode != track.node))\n                this.forceSelection = true;\n            this.dom.style.height = \"\";\n        });\n        this.markedForComposition.forEach(cView => cView.flags &= ~8 /* ViewFlag.Composition */);\n        let gaps = [];\n        if (this.view.viewport.from || this.view.viewport.to < this.view.state.doc.length)\n            for (let child of this.children)\n                if (child instanceof BlockWidgetView && child.widget instanceof BlockGapWidget)\n                    gaps.push(child.dom);\n        observer.updateGaps(gaps);\n    }\n    updateChildren(changes, oldLength, composition) {\n        let ranges = composition ? composition.range.addToSet(changes.slice()) : changes;\n        let cursor = this.childCursor(oldLength);\n        for (let i = ranges.length - 1;; i--) {\n            let next = i >= 0 ? ranges[i] : null;\n            if (!next)\n                break;\n            let { fromA, toA, fromB, toB } = next, content, breakAtStart, openStart, openEnd;\n            if (composition && composition.range.fromB < toB && composition.range.toB > fromB) {\n                let before = ContentBuilder.build(this.view.state.doc, fromB, composition.range.fromB, this.decorations, this.dynamicDecorationMap);\n                let after = ContentBuilder.build(this.view.state.doc, composition.range.toB, toB, this.decorations, this.dynamicDecorationMap);\n                breakAtStart = before.breakAtStart;\n                openStart = before.openStart;\n                openEnd = after.openEnd;\n                let compLine = this.compositionView(composition);\n                if (after.breakAtStart) {\n                    compLine.breakAfter = 1;\n                }\n                else if (after.content.length &&\n                    compLine.merge(compLine.length, compLine.length, after.content[0], false, after.openStart, 0)) {\n                    compLine.breakAfter = after.content[0].breakAfter;\n                    after.content.shift();\n                }\n                if (before.content.length &&\n                    compLine.merge(0, 0, before.content[before.content.length - 1], true, 0, before.openEnd)) {\n                    before.content.pop();\n                }\n                content = before.content.concat(compLine).concat(after.content);\n            }\n            else {\n                ({ content, breakAtStart, openStart, openEnd } =\n                    ContentBuilder.build(this.view.state.doc, fromB, toB, this.decorations, this.dynamicDecorationMap));\n            }\n            let { i: toI, off: toOff } = cursor.findPos(toA, 1);\n            let { i: fromI, off: fromOff } = cursor.findPos(fromA, -1);\n            replaceRange(this, fromI, fromOff, toI, toOff, content, breakAtStart, openStart, openEnd);\n        }\n        if (composition)\n            this.fixCompositionDOM(composition);\n    }\n    compositionView(composition) {\n        let cur = new TextView(composition.text.nodeValue);\n        cur.flags |= 8 /* ViewFlag.Composition */;\n        for (let { deco } of composition.marks)\n            cur = new MarkView(deco, [cur], cur.length);\n        let line = new LineView;\n        line.append(cur, 0);\n        return line;\n    }\n    fixCompositionDOM(composition) {\n        let fix = (dom, cView) => {\n            cView.flags |= 8 /* ViewFlag.Composition */ | (cView.children.some(c => c.flags & 7 /* ViewFlag.Dirty */) ? 1 /* ViewFlag.ChildDirty */ : 0);\n            this.markedForComposition.add(cView);\n            let prev = ContentView.get(dom);\n            if (prev && prev != cView)\n                prev.dom = null;\n            cView.setDOM(dom);\n        };\n        let pos = this.childPos(composition.range.fromB, 1);\n        let cView = this.children[pos.i];\n        fix(composition.line, cView);\n        for (let i = composition.marks.length - 1; i >= -1; i--) {\n            pos = cView.childPos(pos.off, 1);\n            cView = cView.children[pos.i];\n            fix(i >= 0 ? composition.marks[i].node : composition.text, cView);\n        }\n    }\n    // Sync the DOM selection to this.state.selection\n    updateSelection(mustRead = false, fromPointer = false) {\n        if (mustRead || !this.view.observer.selectionRange.focusNode)\n            this.view.observer.readSelectionRange();\n        let activeElt = this.view.root.activeElement, focused = activeElt == this.dom;\n        let selectionNotFocus = !focused &&\n            hasSelection(this.dom, this.view.observer.selectionRange) && !(activeElt && this.dom.contains(activeElt));\n        if (!(focused || fromPointer || selectionNotFocus))\n            return;\n        let force = this.forceSelection;\n        this.forceSelection = false;\n        let main = this.view.state.selection.main;\n        let anchor = this.moveToLine(this.domAtPos(main.anchor));\n        let head = main.empty ? anchor : this.moveToLine(this.domAtPos(main.head));\n        // Always reset on Firefox when next to an uneditable node to\n        // avoid invisible cursor bugs (#111)\n        if (browser.gecko && main.empty && !this.hasComposition && betweenUneditable(anchor)) {\n            let dummy = document.createTextNode(\"\");\n            this.view.observer.ignore(() => anchor.node.insertBefore(dummy, anchor.node.childNodes[anchor.offset] || null));\n            anchor = head = new DOMPos(dummy, 0);\n            force = true;\n        }\n        let domSel = this.view.observer.selectionRange;\n        // If the selection is already here, or in an equivalent position, don't touch it\n        if (force || !domSel.focusNode ||\n            !isEquivalentPosition(anchor.node, anchor.offset, domSel.anchorNode, domSel.anchorOffset) ||\n            !isEquivalentPosition(head.node, head.offset, domSel.focusNode, domSel.focusOffset)) {\n            this.view.observer.ignore(() => {\n                // Chrome Android will hide the virtual keyboard when tapping\n                // inside an uneditable node, and not bring it back when we\n                // move the cursor to its proper position. This tries to\n                // restore the keyboard by cycling focus.\n                if (browser.android && browser.chrome && this.dom.contains(domSel.focusNode) &&\n                    inUneditable(domSel.focusNode, this.dom)) {\n                    this.dom.blur();\n                    this.dom.focus({ preventScroll: true });\n                }\n                let rawSel = getSelection(this.view.root);\n                if (!rawSel) ;\n                else if (main.empty) {\n                    // Work around https://bugzilla.mozilla.org/show_bug.cgi?id=1612076\n                    if (browser.gecko) {\n                        let nextTo = nextToUneditable(anchor.node, anchor.offset);\n                        if (nextTo && nextTo != (1 /* NextTo.Before */ | 2 /* NextTo.After */)) {\n                            let text = nearbyTextNode(anchor.node, anchor.offset, nextTo == 1 /* NextTo.Before */ ? 1 : -1);\n                            if (text)\n                                anchor = new DOMPos(text.node, text.offset);\n                        }\n                    }\n                    rawSel.collapse(anchor.node, anchor.offset);\n                    if (main.bidiLevel != null && rawSel.caretBidiLevel !== undefined)\n                        rawSel.caretBidiLevel = main.bidiLevel;\n                }\n                else if (rawSel.extend) {\n                    // Selection.extend can be used to create an 'inverted' selection\n                    // (one where the focus is before the anchor), but not all\n                    // browsers support it yet.\n                    rawSel.collapse(anchor.node, anchor.offset);\n                    // Safari will ignore the call above when the editor is\n                    // hidden, and then raise an error on the call to extend\n                    // (#940).\n                    try {\n                        rawSel.extend(head.node, head.offset);\n                    }\n                    catch (_) { }\n                }\n                else {\n                    // Primitive (IE) way\n                    let range = document.createRange();\n                    if (main.anchor > main.head)\n                        [anchor, head] = [head, anchor];\n                    range.setEnd(head.node, head.offset);\n                    range.setStart(anchor.node, anchor.offset);\n                    rawSel.removeAllRanges();\n                    rawSel.addRange(range);\n                }\n                if (selectionNotFocus && this.view.root.activeElement == this.dom) {\n                    this.dom.blur();\n                    if (activeElt)\n                        activeElt.focus();\n                }\n            });\n            this.view.observer.setSelectionRange(anchor, head);\n        }\n        this.impreciseAnchor = anchor.precise ? null : new DOMPos(domSel.anchorNode, domSel.anchorOffset);\n        this.impreciseHead = head.precise ? null : new DOMPos(domSel.focusNode, domSel.focusOffset);\n    }\n    enforceCursorAssoc() {\n        if (this.hasComposition)\n            return;\n        let { view } = this, cursor = view.state.selection.main;\n        let sel = getSelection(view.root);\n        let { anchorNode, anchorOffset } = view.observer.selectionRange;\n        if (!sel || !cursor.empty || !cursor.assoc || !sel.modify)\n            return;\n        let line = LineView.find(this, cursor.head);\n        if (!line)\n            return;\n        let lineStart = line.posAtStart;\n        if (cursor.head == lineStart || cursor.head == lineStart + line.length)\n            return;\n        let before = this.coordsAt(cursor.head, -1), after = this.coordsAt(cursor.head, 1);\n        if (!before || !after || before.bottom > after.top)\n            return;\n        let dom = this.domAtPos(cursor.head + cursor.assoc);\n        sel.collapse(dom.node, dom.offset);\n        sel.modify(\"move\", cursor.assoc < 0 ? \"forward\" : \"backward\", \"lineboundary\");\n        // This can go wrong in corner cases like single-character lines,\n        // so check and reset if necessary.\n        view.observer.readSelectionRange();\n        let newRange = view.observer.selectionRange;\n        if (view.docView.posFromDOM(newRange.anchorNode, newRange.anchorOffset) != cursor.from)\n            sel.collapse(anchorNode, anchorOffset);\n    }\n    // If a position is in/near a block widget, move it to a nearby text\n    // line, since we don't want the cursor inside a block widget.\n    moveToLine(pos) {\n        // Block widgets will return positions before/after them, which\n        // are thus directly in the document DOM element.\n        let dom = this.dom, newPos;\n        if (pos.node != dom)\n            return pos;\n        for (let i = pos.offset; !newPos && i < dom.childNodes.length; i++) {\n            let view = ContentView.get(dom.childNodes[i]);\n            if (view instanceof LineView)\n                newPos = view.domAtPos(0);\n        }\n        for (let i = pos.offset - 1; !newPos && i >= 0; i--) {\n            let view = ContentView.get(dom.childNodes[i]);\n            if (view instanceof LineView)\n                newPos = view.domAtPos(view.length);\n        }\n        return newPos ? new DOMPos(newPos.node, newPos.offset, true) : pos;\n    }\n    nearest(dom) {\n        for (let cur = dom; cur;) {\n            let domView = ContentView.get(cur);\n            if (domView && domView.rootView == this)\n                return domView;\n            cur = cur.parentNode;\n        }\n        return null;\n    }\n    posFromDOM(node, offset) {\n        let view = this.nearest(node);\n        if (!view)\n            throw new RangeError(\"Trying to find position for a DOM position outside of the document\");\n        return view.localPosFromDOM(node, offset) + view.posAtStart;\n    }\n    domAtPos(pos) {\n        let { i, off } = this.childCursor().findPos(pos, -1);\n        for (; i < this.children.length - 1;) {\n            let child = this.children[i];\n            if (off < child.length || child instanceof LineView)\n                break;\n            i++;\n            off = 0;\n        }\n        return this.children[i].domAtPos(off);\n    }\n    coordsAt(pos, side) {\n        let best = null, bestPos = 0;\n        for (let off = this.length, i = this.children.length - 1; i >= 0; i--) {\n            let child = this.children[i], end = off - child.breakAfter, start = end - child.length;\n            if (end < pos)\n                break;\n            if (start <= pos && (start < pos || child.covers(-1)) && (end > pos || child.covers(1)) &&\n                (!best || child instanceof LineView && !(best instanceof LineView && side >= 0))) {\n                best = child;\n                bestPos = start;\n            }\n            off = start;\n        }\n        return best ? best.coordsAt(pos - bestPos, side) : null;\n    }\n    coordsForChar(pos) {\n        let { i, off } = this.childPos(pos, 1), child = this.children[i];\n        if (!(child instanceof LineView))\n            return null;\n        while (child.children.length) {\n            let { i, off: childOff } = child.childPos(off, 1);\n            for (;; i++) {\n                if (i == child.children.length)\n                    return null;\n                if ((child = child.children[i]).length)\n                    break;\n            }\n            off = childOff;\n        }\n        if (!(child instanceof TextView))\n            return null;\n        let end = findClusterBreak(child.text, off);\n        if (end == off)\n            return null;\n        let rects = textRange(child.dom, off, end).getClientRects();\n        for (let i = 0; i < rects.length; i++) {\n            let rect = rects[i];\n            if (i == rects.length - 1 || rect.top < rect.bottom && rect.left < rect.right)\n                return rect;\n        }\n        return null;\n    }\n    measureVisibleLineHeights(viewport) {\n        let result = [], { from, to } = viewport;\n        let contentWidth = this.view.contentDOM.clientWidth;\n        let isWider = contentWidth > Math.max(this.view.scrollDOM.clientWidth, this.minWidth) + 1;\n        let widest = -1, ltr = this.view.textDirection == Direction.LTR;\n        for (let pos = 0, i = 0; i < this.children.length; i++) {\n            let child = this.children[i], end = pos + child.length;\n            if (end > to)\n                break;\n            if (pos >= from) {\n                let childRect = child.dom.getBoundingClientRect();\n                result.push(childRect.height);\n                if (isWider) {\n                    let last = child.dom.lastChild;\n                    let rects = last ? clientRectsFor(last) : [];\n                    if (rects.length) {\n                        let rect = rects[rects.length - 1];\n                        let width = ltr ? rect.right - childRect.left : childRect.right - rect.left;\n                        if (width > widest) {\n                            widest = width;\n                            this.minWidth = contentWidth;\n                            this.minWidthFrom = pos;\n                            this.minWidthTo = end;\n                        }\n                    }\n                }\n            }\n            pos = end + child.breakAfter;\n        }\n        return result;\n    }\n    textDirectionAt(pos) {\n        let { i } = this.childPos(pos, 1);\n        return getComputedStyle(this.children[i].dom).direction == \"rtl\" ? Direction.RTL : Direction.LTR;\n    }\n    measureTextSize() {\n        for (let child of this.children) {\n            if (child instanceof LineView) {\n                let measure = child.measureTextSize();\n                if (measure)\n                    return measure;\n            }\n        }\n        // If no workable line exists, force a layout of a measurable element\n        let dummy = document.createElement(\"div\"), lineHeight, charWidth, textHeight;\n        dummy.className = \"cm-line\";\n        dummy.style.width = \"99999px\";\n        dummy.style.position = \"absolute\";\n        dummy.textContent = \"abc def ghi jkl mno pqr stu\";\n        this.view.observer.ignore(() => {\n            this.dom.appendChild(dummy);\n            let rect = clientRectsFor(dummy.firstChild)[0];\n            lineHeight = dummy.getBoundingClientRect().height;\n            charWidth = rect ? rect.width / 27 : 7;\n            textHeight = rect ? rect.height : lineHeight;\n            dummy.remove();\n        });\n        return { lineHeight, charWidth, textHeight };\n    }\n    childCursor(pos = this.length) {\n        // Move back to start of last element when possible, so that\n        // `ChildCursor.findPos` doesn't have to deal with the edge case\n        // of being after the last element.\n        let i = this.children.length;\n        if (i)\n            pos -= this.children[--i].length;\n        return new ChildCursor(this.children, pos, i);\n    }\n    computeBlockGapDeco() {\n        let deco = [], vs = this.view.viewState;\n        for (let pos = 0, i = 0;; i++) {\n            let next = i == vs.viewports.length ? null : vs.viewports[i];\n            let end = next ? next.from - 1 : this.length;\n            if (end > pos) {\n                let height = (vs.lineBlockAt(end).bottom - vs.lineBlockAt(pos).top) / this.view.scaleY;\n                deco.push(Decoration.replace({\n                    widget: new BlockGapWidget(height),\n                    block: true,\n                    inclusive: true,\n                    isBlockGap: true,\n                }).range(pos, end));\n            }\n            if (!next)\n                break;\n            pos = next.to + 1;\n        }\n        return Decoration.set(deco);\n    }\n    updateDeco() {\n        let allDeco = this.view.state.facet(decorations).map((d, i) => {\n            let dynamic = this.dynamicDecorationMap[i] = typeof d == \"function\";\n            return dynamic ? d(this.view) : d;\n        });\n        for (let i = allDeco.length; i < allDeco.length + 3; i++)\n            this.dynamicDecorationMap[i] = false;\n        return this.decorations = [\n            ...allDeco,\n            this.computeBlockGapDeco(),\n            this.view.viewState.lineGapDeco\n        ];\n    }\n    scrollIntoView(target) {\n        if (target.isSnapshot) {\n            let ref = this.view.viewState.lineBlockAt(target.range.head);\n            this.view.scrollDOM.scrollTop = ref.top - target.yMargin;\n            this.view.scrollDOM.scrollLeft = target.xMargin;\n            return;\n        }\n        let { range } = target;\n        let rect = this.coordsAt(range.head, range.empty ? range.assoc : range.head > range.anchor ? -1 : 1), other;\n        if (!rect)\n            return;\n        if (!range.empty && (other = this.coordsAt(range.anchor, range.anchor > range.head ? -1 : 1)))\n            rect = { left: Math.min(rect.left, other.left), top: Math.min(rect.top, other.top),\n                right: Math.max(rect.right, other.right), bottom: Math.max(rect.bottom, other.bottom) };\n        let margins = getScrollMargins(this.view);\n        let targetRect = {\n            left: rect.left - margins.left, top: rect.top - margins.top,\n            right: rect.right + margins.right, bottom: rect.bottom + margins.bottom\n        };\n        let { offsetWidth, offsetHeight } = this.view.scrollDOM;\n        scrollRectIntoView(this.view.scrollDOM, targetRect, range.head < range.anchor ? -1 : 1, target.x, target.y, Math.max(Math.min(target.xMargin, offsetWidth), -offsetWidth), Math.max(Math.min(target.yMargin, offsetHeight), -offsetHeight), this.view.textDirection == Direction.LTR);\n    }\n}\nfunction betweenUneditable(pos) {\n    return pos.node.nodeType == 1 && pos.node.firstChild &&\n        (pos.offset == 0 || pos.node.childNodes[pos.offset - 1].contentEditable == \"false\") &&\n        (pos.offset == pos.node.childNodes.length || pos.node.childNodes[pos.offset].contentEditable == \"false\");\n}\nclass BlockGapWidget extends WidgetType {\n    constructor(height) {\n        super();\n        this.height = height;\n    }\n    toDOM() {\n        let elt = document.createElement(\"div\");\n        this.updateDOM(elt);\n        return elt;\n    }\n    eq(other) { return other.height == this.height; }\n    updateDOM(elt) {\n        elt.style.height = this.height + \"px\";\n        return true;\n    }\n    get estimatedHeight() { return this.height; }\n}\nfunction findCompositionNode(view, headPos) {\n    let sel = view.observer.selectionRange;\n    let textNode = sel.focusNode && nearbyTextNode(sel.focusNode, sel.focusOffset, 0);\n    if (!textNode)\n        return null;\n    let from = headPos - textNode.offset;\n    return { from, to: from + textNode.node.nodeValue.length, node: textNode.node };\n}\nfunction findCompositionRange(view, changes, headPos) {\n    let found = findCompositionNode(view, headPos);\n    if (!found)\n        return null;\n    let { node: textNode, from, to } = found, text = textNode.nodeValue;\n    // Don't try to preserve multi-line compositions\n    if (/[\\n\\r]/.test(text))\n        return null;\n    if (view.state.doc.sliceString(found.from, found.to) != text)\n        return null;\n    let inv = changes.invertedDesc;\n    let range = new ChangedRange(inv.mapPos(from), inv.mapPos(to), from, to);\n    let marks = [];\n    for (let parent = textNode.parentNode;; parent = parent.parentNode) {\n        let parentView = ContentView.get(parent);\n        if (parentView instanceof MarkView)\n            marks.push({ node: parent, deco: parentView.mark });\n        else if (parentView instanceof LineView || parent.nodeName == \"DIV\" && parent.parentNode == view.contentDOM)\n            return { range, text: textNode, marks, line: parent };\n        else if (parent != view.contentDOM)\n            marks.push({ node: parent, deco: new MarkDecoration({\n                    inclusive: true,\n                    attributes: getAttrs(parent),\n                    tagName: parent.tagName.toLowerCase()\n                }) });\n        else\n            return null;\n    }\n}\nfunction nearbyTextNode(startNode, startOffset, side) {\n    if (side <= 0)\n        for (let node = startNode, offset = startOffset;;) {\n            if (node.nodeType == 3)\n                return { node: node, offset: offset };\n            if (node.nodeType == 1 && offset > 0) {\n                node = node.childNodes[offset - 1];\n                offset = maxOffset(node);\n            }\n            else {\n                break;\n            }\n        }\n    if (side >= 0)\n        for (let node = startNode, offset = startOffset;;) {\n            if (node.nodeType == 3)\n                return { node: node, offset: offset };\n            if (node.nodeType == 1 && offset < node.childNodes.length && side >= 0) {\n                node = node.childNodes[offset];\n                offset = 0;\n            }\n            else {\n                break;\n            }\n        }\n    return null;\n}\nfunction nextToUneditable(node, offset) {\n    if (node.nodeType != 1)\n        return 0;\n    return (offset && node.childNodes[offset - 1].contentEditable == \"false\" ? 1 /* NextTo.Before */ : 0) |\n        (offset < node.childNodes.length && node.childNodes[offset].contentEditable == \"false\" ? 2 /* NextTo.After */ : 0);\n}\nlet DecorationComparator$1 = class DecorationComparator {\n    constructor() {\n        this.changes = [];\n    }\n    compareRange(from, to) { addRange(from, to, this.changes); }\n    comparePoint(from, to) { addRange(from, to, this.changes); }\n};\nfunction findChangedDeco(a, b, diff) {\n    let comp = new DecorationComparator$1;\n    RangeSet.compare(a, b, diff, comp);\n    return comp.changes;\n}\nfunction inUneditable(node, inside) {\n    for (let cur = node; cur && cur != inside; cur = cur.assignedSlot || cur.parentNode) {\n        if (cur.nodeType == 1 && cur.contentEditable == 'false') {\n            return true;\n        }\n    }\n    return false;\n}\nfunction touchesComposition(changes, composition) {\n    let touched = false;\n    if (composition)\n        changes.iterChangedRanges((from, to) => {\n            if (from < composition.to && to > composition.from)\n                touched = true;\n        });\n    return touched;\n}\n\nfunction groupAt(state, pos, bias = 1) {\n    let categorize = state.charCategorizer(pos);\n    let line = state.doc.lineAt(pos), linePos = pos - line.from;\n    if (line.length == 0)\n        return EditorSelection.cursor(pos);\n    if (linePos == 0)\n        bias = 1;\n    else if (linePos == line.length)\n        bias = -1;\n    let from = linePos, to = linePos;\n    if (bias < 0)\n        from = findClusterBreak(line.text, linePos, false);\n    else\n        to = findClusterBreak(line.text, linePos);\n    let cat = categorize(line.text.slice(from, to));\n    while (from > 0) {\n        let prev = findClusterBreak(line.text, from, false);\n        if (categorize(line.text.slice(prev, from)) != cat)\n            break;\n        from = prev;\n    }\n    while (to < line.length) {\n        let next = findClusterBreak(line.text, to);\n        if (categorize(line.text.slice(to, next)) != cat)\n            break;\n        to = next;\n    }\n    return EditorSelection.range(from + line.from, to + line.from);\n}\n// Search the DOM for the {node, offset} position closest to the given\n// coordinates. Very inefficient and crude, but can usually be avoided\n// by calling caret(Position|Range)FromPoint instead.\nfunction getdx(x, rect) {\n    return rect.left > x ? rect.left - x : Math.max(0, x - rect.right);\n}\nfunction getdy(y, rect) {\n    return rect.top > y ? rect.top - y : Math.max(0, y - rect.bottom);\n}\nfunction yOverlap(a, b) {\n    return a.top < b.bottom - 1 && a.bottom > b.top + 1;\n}\nfunction upTop(rect, top) {\n    return top < rect.top ? { top, left: rect.left, right: rect.right, bottom: rect.bottom } : rect;\n}\nfunction upBot(rect, bottom) {\n    return bottom > rect.bottom ? { top: rect.top, left: rect.left, right: rect.right, bottom } : rect;\n}\nfunction domPosAtCoords(parent, x, y) {\n    let closest, closestRect, closestX, closestY, closestOverlap = false;\n    let above, below, aboveRect, belowRect;\n    for (let child = parent.firstChild; child; child = child.nextSibling) {\n        let rects = clientRectsFor(child);\n        for (let i = 0; i < rects.length; i++) {\n            let rect = rects[i];\n            if (closestRect && yOverlap(closestRect, rect))\n                rect = upTop(upBot(rect, closestRect.bottom), closestRect.top);\n            let dx = getdx(x, rect), dy = getdy(y, rect);\n            if (dx == 0 && dy == 0)\n                return child.nodeType == 3 ? domPosInText(child, x, y) : domPosAtCoords(child, x, y);\n            if (!closest || closestY > dy || closestY == dy && closestX > dx) {\n                closest = child;\n                closestRect = rect;\n                closestX = dx;\n                closestY = dy;\n                let side = dy ? (y < rect.top ? -1 : 1) : dx ? (x < rect.left ? -1 : 1) : 0;\n                closestOverlap = !side || (side > 0 ? i < rects.length - 1 : i > 0);\n            }\n            if (dx == 0) {\n                if (y > rect.bottom && (!aboveRect || aboveRect.bottom < rect.bottom)) {\n                    above = child;\n                    aboveRect = rect;\n                }\n                else if (y < rect.top && (!belowRect || belowRect.top > rect.top)) {\n                    below = child;\n                    belowRect = rect;\n                }\n            }\n            else if (aboveRect && yOverlap(aboveRect, rect)) {\n                aboveRect = upBot(aboveRect, rect.bottom);\n            }\n            else if (belowRect && yOverlap(belowRect, rect)) {\n                belowRect = upTop(belowRect, rect.top);\n            }\n        }\n    }\n    if (aboveRect && aboveRect.bottom >= y) {\n        closest = above;\n        closestRect = aboveRect;\n    }\n    else if (belowRect && belowRect.top <= y) {\n        closest = below;\n        closestRect = belowRect;\n    }\n    if (!closest)\n        return { node: parent, offset: 0 };\n    let clipX = Math.max(closestRect.left, Math.min(closestRect.right, x));\n    if (closest.nodeType == 3)\n        return domPosInText(closest, clipX, y);\n    if (closestOverlap && closest.contentEditable != \"false\")\n        return domPosAtCoords(closest, clipX, y);\n    let offset = Array.prototype.indexOf.call(parent.childNodes, closest) +\n        (x >= (closestRect.left + closestRect.right) / 2 ? 1 : 0);\n    return { node: parent, offset };\n}\nfunction domPosInText(node, x, y) {\n    let len = node.nodeValue.length;\n    let closestOffset = -1, closestDY = 1e9, generalSide = 0;\n    for (let i = 0; i < len; i++) {\n        let rects = textRange(node, i, i + 1).getClientRects();\n        for (let j = 0; j < rects.length; j++) {\n            let rect = rects[j];\n            if (rect.top == rect.bottom)\n                continue;\n            if (!generalSide)\n                generalSide = x - rect.left;\n            let dy = (rect.top > y ? rect.top - y : y - rect.bottom) - 1;\n            if (rect.left - 1 <= x && rect.right + 1 >= x && dy < closestDY) {\n                let right = x >= (rect.left + rect.right) / 2, after = right;\n                if (browser.chrome || browser.gecko) {\n                    // Check for RTL on browsers that support getting client\n                    // rects for empty ranges.\n                    let rectBefore = textRange(node, i).getBoundingClientRect();\n                    if (rectBefore.left == rect.right)\n                        after = !right;\n                }\n                if (dy <= 0)\n                    return { node, offset: i + (after ? 1 : 0) };\n                closestOffset = i + (after ? 1 : 0);\n                closestDY = dy;\n            }\n        }\n    }\n    return { node, offset: closestOffset > -1 ? closestOffset : generalSide > 0 ? node.nodeValue.length : 0 };\n}\nfunction posAtCoords(view, coords, precise, bias = -1) {\n    var _a, _b;\n    let content = view.contentDOM.getBoundingClientRect(), docTop = content.top + view.viewState.paddingTop;\n    let block, { docHeight } = view.viewState;\n    let { x, y } = coords, yOffset = y - docTop;\n    if (yOffset < 0)\n        return 0;\n    if (yOffset > docHeight)\n        return view.state.doc.length;\n    // Scan for a text block near the queried y position\n    for (let halfLine = view.viewState.heightOracle.textHeight / 2, bounced = false;;) {\n        block = view.elementAtHeight(yOffset);\n        if (block.type == BlockType.Text)\n            break;\n        for (;;) {\n            // Move the y position out of this block\n            yOffset = bias > 0 ? block.bottom + halfLine : block.top - halfLine;\n            if (yOffset >= 0 && yOffset <= docHeight)\n                break;\n            // If the document consists entirely of replaced widgets, we\n            // won't find a text block, so return 0\n            if (bounced)\n                return precise ? null : 0;\n            bounced = true;\n            bias = -bias;\n        }\n    }\n    y = docTop + yOffset;\n    let lineStart = block.from;\n    // If this is outside of the rendered viewport, we can't determine a position\n    if (lineStart < view.viewport.from)\n        return view.viewport.from == 0 ? 0 : precise ? null : posAtCoordsImprecise(view, content, block, x, y);\n    if (lineStart > view.viewport.to)\n        return view.viewport.to == view.state.doc.length ? view.state.doc.length :\n            precise ? null : posAtCoordsImprecise(view, content, block, x, y);\n    // Prefer ShadowRootOrDocument.elementFromPoint if present, fall back to document if not\n    let doc = view.dom.ownerDocument;\n    let root = view.root.elementFromPoint ? view.root : doc;\n    let element = root.elementFromPoint(x, y);\n    if (element && !view.contentDOM.contains(element))\n        element = null;\n    // If the element is unexpected, clip x at the sides of the content area and try again\n    if (!element) {\n        x = Math.max(content.left + 1, Math.min(content.right - 1, x));\n        element = root.elementFromPoint(x, y);\n        if (element && !view.contentDOM.contains(element))\n            element = null;\n    }\n    // There's visible editor content under the point, so we can try\n    // using caret(Position|Range)FromPoint as a shortcut\n    let node, offset = -1;\n    if (element && ((_a = view.docView.nearest(element)) === null || _a === void 0 ? void 0 : _a.isEditable) != false) {\n        if (doc.caretPositionFromPoint) {\n            let pos = doc.caretPositionFromPoint(x, y);\n            if (pos)\n                ({ offsetNode: node, offset } = pos);\n        }\n        else if (doc.caretRangeFromPoint) {\n            let range = doc.caretRangeFromPoint(x, y);\n            if (range) {\n                ({ startContainer: node, startOffset: offset } = range);\n                if (!view.contentDOM.contains(node) ||\n                    browser.safari && isSuspiciousSafariCaretResult(node, offset, x) ||\n                    browser.chrome && isSuspiciousChromeCaretResult(node, offset, x))\n                    node = undefined;\n            }\n        }\n    }\n    // No luck, do our own (potentially expensive) search\n    if (!node || !view.docView.dom.contains(node)) {\n        let line = LineView.find(view.docView, lineStart);\n        if (!line)\n            return yOffset > block.top + block.height / 2 ? block.to : block.from;\n        ({ node, offset } = domPosAtCoords(line.dom, x, y));\n    }\n    let nearest = view.docView.nearest(node);\n    if (!nearest)\n        return null;\n    if (nearest.isWidget && ((_b = nearest.dom) === null || _b === void 0 ? void 0 : _b.nodeType) == 1) {\n        let rect = nearest.dom.getBoundingClientRect();\n        return coords.y < rect.top || coords.y <= rect.bottom && coords.x <= (rect.left + rect.right) / 2\n            ? nearest.posAtStart : nearest.posAtEnd;\n    }\n    else {\n        return nearest.localPosFromDOM(node, offset) + nearest.posAtStart;\n    }\n}\nfunction posAtCoordsImprecise(view, contentRect, block, x, y) {\n    let into = Math.round((x - contentRect.left) * view.defaultCharacterWidth);\n    if (view.lineWrapping && block.height > view.defaultLineHeight * 1.5) {\n        let textHeight = view.viewState.heightOracle.textHeight;\n        let line = Math.floor((y - block.top - (view.defaultLineHeight - textHeight) * 0.5) / textHeight);\n        into += line * view.viewState.heightOracle.lineLength;\n    }\n    let content = view.state.sliceDoc(block.from, block.to);\n    return block.from + findColumn(content, into, view.state.tabSize);\n}\n// In case of a high line height, Safari's caretRangeFromPoint treats\n// the space between lines as belonging to the last character of the\n// line before. This is used to detect such a result so that it can be\n// ignored (issue #401).\nfunction isSuspiciousSafariCaretResult(node, offset, x) {\n    let len;\n    if (node.nodeType != 3 || offset != (len = node.nodeValue.length))\n        return false;\n    for (let next = node.nextSibling; next; next = next.nextSibling)\n        if (next.nodeType != 1 || next.nodeName != \"BR\")\n            return false;\n    return textRange(node, len - 1, len).getBoundingClientRect().left > x;\n}\n// Chrome will move positions between lines to the start of the next line\nfunction isSuspiciousChromeCaretResult(node, offset, x) {\n    if (offset != 0)\n        return false;\n    for (let cur = node;;) {\n        let parent = cur.parentNode;\n        if (!parent || parent.nodeType != 1 || parent.firstChild != cur)\n            return false;\n        if (parent.classList.contains(\"cm-line\"))\n            break;\n        cur = parent;\n    }\n    let rect = node.nodeType == 1 ? node.getBoundingClientRect()\n        : textRange(node, 0, Math.max(node.nodeValue.length, 1)).getBoundingClientRect();\n    return x - rect.left > 5;\n}\nfunction blockAt(view, pos) {\n    let line = view.lineBlockAt(pos);\n    if (Array.isArray(line.type))\n        for (let l of line.type) {\n            if (l.to > pos || l.to == pos && (l.to == line.to || l.type == BlockType.Text))\n                return l;\n        }\n    return line;\n}\nfunction moveToLineBoundary(view, start, forward, includeWrap) {\n    let line = blockAt(view, start.head);\n    let coords = !includeWrap || line.type != BlockType.Text || !(view.lineWrapping || line.widgetLineBreaks) ? null\n        : view.coordsAtPos(start.assoc < 0 && start.head > line.from ? start.head - 1 : start.head);\n    if (coords) {\n        let editorRect = view.dom.getBoundingClientRect();\n        let direction = view.textDirectionAt(line.from);\n        let pos = view.posAtCoords({ x: forward == (direction == Direction.LTR) ? editorRect.right - 1 : editorRect.left + 1,\n            y: (coords.top + coords.bottom) / 2 });\n        if (pos != null)\n            return EditorSelection.cursor(pos, forward ? -1 : 1);\n    }\n    return EditorSelection.cursor(forward ? line.to : line.from, forward ? -1 : 1);\n}\nfunction moveByChar(view, start, forward, by) {\n    let line = view.state.doc.lineAt(start.head), spans = view.bidiSpans(line);\n    let direction = view.textDirectionAt(line.from);\n    for (let cur = start, check = null;;) {\n        let next = moveVisually(line, spans, direction, cur, forward), char = movedOver;\n        if (!next) {\n            if (line.number == (forward ? view.state.doc.lines : 1))\n                return cur;\n            char = \"\\n\";\n            line = view.state.doc.line(line.number + (forward ? 1 : -1));\n            spans = view.bidiSpans(line);\n            next = EditorSelection.cursor(forward ? line.from : line.to);\n        }\n        if (!check) {\n            if (!by)\n                return next;\n            check = by(char);\n        }\n        else if (!check(char)) {\n            return cur;\n        }\n        cur = next;\n    }\n}\nfunction byGroup(view, pos, start) {\n    let categorize = view.state.charCategorizer(pos);\n    let cat = categorize(start);\n    return (next) => {\n        let nextCat = categorize(next);\n        if (cat == CharCategory.Space)\n            cat = nextCat;\n        return cat == nextCat;\n    };\n}\nfunction moveVertically(view, start, forward, distance) {\n    let startPos = start.head, dir = forward ? 1 : -1;\n    if (startPos == (forward ? view.state.doc.length : 0))\n        return EditorSelection.cursor(startPos, start.assoc);\n    let goal = start.goalColumn, startY;\n    let rect = view.contentDOM.getBoundingClientRect();\n    let startCoords = view.coordsAtPos(startPos, start.assoc || -1), docTop = view.documentTop;\n    if (startCoords) {\n        if (goal == null)\n            goal = startCoords.left - rect.left;\n        startY = dir < 0 ? startCoords.top : startCoords.bottom;\n    }\n    else {\n        let line = view.viewState.lineBlockAt(startPos);\n        if (goal == null)\n            goal = Math.min(rect.right - rect.left, view.defaultCharacterWidth * (startPos - line.from));\n        startY = (dir < 0 ? line.top : line.bottom) + docTop;\n    }\n    let resolvedGoal = rect.left + goal;\n    let dist = distance !== null && distance !== void 0 ? distance : (view.viewState.heightOracle.textHeight >> 1);\n    for (let extra = 0;; extra += 10) {\n        let curY = startY + (dist + extra) * dir;\n        let pos = posAtCoords(view, { x: resolvedGoal, y: curY }, false, dir);\n        if (curY < rect.top || curY > rect.bottom || (dir < 0 ? pos < startPos : pos > startPos)) {\n            let charRect = view.docView.coordsForChar(pos);\n            let assoc = !charRect || curY < charRect.top ? -1 : 1;\n            return EditorSelection.cursor(pos, assoc, undefined, goal);\n        }\n    }\n}\nfunction skipAtomicRanges(atoms, pos, bias) {\n    for (;;) {\n        let moved = 0;\n        for (let set of atoms) {\n            set.between(pos - 1, pos + 1, (from, to, value) => {\n                if (pos > from && pos < to) {\n                    let side = moved || bias || (pos - from < to - pos ? -1 : 1);\n                    pos = side < 0 ? from : to;\n                    moved = side;\n                }\n            });\n        }\n        if (!moved)\n            return pos;\n    }\n}\nfunction skipAtoms(view, oldPos, pos) {\n    let newPos = skipAtomicRanges(view.state.facet(atomicRanges).map(f => f(view)), pos.from, oldPos.head > pos.from ? -1 : 1);\n    return newPos == pos.from ? pos : EditorSelection.cursor(newPos, newPos < pos.from ? 1 : -1);\n}\n\n// This will also be where dragging info and such goes\nclass InputState {\n    setSelectionOrigin(origin) {\n        this.lastSelectionOrigin = origin;\n        this.lastSelectionTime = Date.now();\n    }\n    constructor(view) {\n        this.view = view;\n        this.lastKeyCode = 0;\n        this.lastKeyTime = 0;\n        this.lastTouchTime = 0;\n        this.lastFocusTime = 0;\n        this.lastScrollTop = 0;\n        this.lastScrollLeft = 0;\n        // On iOS, some keys need to have their default behavior happen\n        // (after which we retroactively handle them and reset the DOM) to\n        // avoid messing up the virtual keyboard state.\n        this.pendingIOSKey = undefined;\n        this.lastSelectionOrigin = null;\n        this.lastSelectionTime = 0;\n        this.lastEscPress = 0;\n        this.lastContextMenu = 0;\n        this.scrollHandlers = [];\n        this.handlers = Object.create(null);\n        // -1 means not in a composition. Otherwise, this counts the number\n        // of changes made during the composition. The count is used to\n        // avoid treating the start state of the composition, before any\n        // changes have been made, as part of the composition.\n        this.composing = -1;\n        // Tracks whether the next change should be marked as starting the\n        // composition (null means no composition, true means next is the\n        // first, false means first has already been marked for this\n        // composition)\n        this.compositionFirstChange = null;\n        // End time of the previous composition\n        this.compositionEndedAt = 0;\n        // Used in a kludge to detect when an Enter keypress should be\n        // considered part of the composition on Safari, which fires events\n        // in the wrong order\n        this.compositionPendingKey = false;\n        // Used to categorize changes as part of a composition, even when\n        // the mutation events fire shortly after the compositionend event\n        this.compositionPendingChange = false;\n        this.mouseSelection = null;\n        // When a drag from the editor is active, this points at the range\n        // being dragged.\n        this.draggedContent = null;\n        this.handleEvent = this.handleEvent.bind(this);\n        this.notifiedFocused = view.hasFocus;\n        // On Safari adding an input event handler somehow prevents an\n        // issue where the composition vanishes when you press enter.\n        if (browser.safari)\n            view.contentDOM.addEventListener(\"input\", () => null);\n        if (browser.gecko)\n            firefoxCopyCutHack(view.contentDOM.ownerDocument);\n    }\n    handleEvent(event) {\n        if (!eventBelongsToEditor(this.view, event) || this.ignoreDuringComposition(event))\n            return;\n        if (event.type == \"keydown\" && this.keydown(event))\n            return;\n        this.runHandlers(event.type, event);\n    }\n    runHandlers(type, event) {\n        let handlers = this.handlers[type];\n        if (handlers) {\n            for (let observer of handlers.observers)\n                observer(this.view, event);\n            for (let handler of handlers.handlers) {\n                if (event.defaultPrevented)\n                    break;\n                if (handler(this.view, event)) {\n                    event.preventDefault();\n                    break;\n                }\n            }\n        }\n    }\n    ensureHandlers(plugins) {\n        let handlers = computeHandlers(plugins), prev = this.handlers, dom = this.view.contentDOM;\n        for (let type in handlers)\n            if (type != \"scroll\") {\n                let passive = !handlers[type].handlers.length;\n                let exists = prev[type];\n                if (exists && passive != !exists.handlers.length) {\n                    dom.removeEventListener(type, this.handleEvent);\n                    exists = null;\n                }\n                if (!exists)\n                    dom.addEventListener(type, this.handleEvent, { passive });\n            }\n        for (let type in prev)\n            if (type != \"scroll\" && !handlers[type])\n                dom.removeEventListener(type, this.handleEvent);\n        this.handlers = handlers;\n    }\n    keydown(event) {\n        // Must always run, even if a custom handler handled the event\n        this.lastKeyCode = event.keyCode;\n        this.lastKeyTime = Date.now();\n        if (event.keyCode == 9 && Date.now() < this.lastEscPress + 2000)\n            return true;\n        if (event.keyCode != 27 && modifierCodes.indexOf(event.keyCode) < 0)\n            this.view.inputState.lastEscPress = 0;\n        // Chrome for Android usually doesn't fire proper key events, but\n        // occasionally does, usually surrounded by a bunch of complicated\n        // composition changes. When an enter or backspace key event is\n        // seen, hold off on handling DOM events for a bit, and then\n        // dispatch it.\n        if (browser.android && browser.chrome && !event.synthetic &&\n            (event.keyCode == 13 || event.keyCode == 8)) {\n            this.view.observer.delayAndroidKey(event.key, event.keyCode);\n            return true;\n        }\n        // Preventing the default behavior of Enter on iOS makes the\n        // virtual keyboard get stuck in the wrong (lowercase)\n        // state. So we let it go through, and then, in\n        // applyDOMChange, notify key handlers of it and reset to\n        // the state they produce.\n        let pending;\n        if (browser.ios && !event.synthetic && !event.altKey && !event.metaKey &&\n            ((pending = PendingKeys.find(key => key.keyCode == event.keyCode)) && !event.ctrlKey ||\n                EmacsyPendingKeys.indexOf(event.key) > -1 && event.ctrlKey && !event.shiftKey)) {\n            this.pendingIOSKey = pending || event;\n            setTimeout(() => this.flushIOSKey(), 250);\n            return true;\n        }\n        if (event.keyCode != 229)\n            this.view.observer.forceFlush();\n        return false;\n    }\n    flushIOSKey() {\n        let key = this.pendingIOSKey;\n        if (!key)\n            return false;\n        this.pendingIOSKey = undefined;\n        return dispatchKey(this.view.contentDOM, key.key, key.keyCode);\n    }\n    ignoreDuringComposition(event) {\n        if (!/^key/.test(event.type))\n            return false;\n        if (this.composing > 0)\n            return true;\n        // See https://www.stum.de/2016/06/24/handling-ime-events-in-javascript/.\n        // On some input method editors (IMEs), the Enter key is used to\n        // confirm character selection. On Safari, when Enter is pressed,\n        // compositionend and keydown events are sometimes emitted in the\n        // wrong order. The key event should still be ignored, even when\n        // it happens after the compositionend event.\n        if (browser.safari && !browser.ios && this.compositionPendingKey && Date.now() - this.compositionEndedAt < 100) {\n            this.compositionPendingKey = false;\n            return true;\n        }\n        return false;\n    }\n    startMouseSelection(mouseSelection) {\n        if (this.mouseSelection)\n            this.mouseSelection.destroy();\n        this.mouseSelection = mouseSelection;\n    }\n    update(update) {\n        if (this.mouseSelection)\n            this.mouseSelection.update(update);\n        if (this.draggedContent && update.docChanged)\n            this.draggedContent = this.draggedContent.map(update.changes);\n        if (update.transactions.length)\n            this.lastKeyCode = this.lastSelectionTime = 0;\n    }\n    destroy() {\n        if (this.mouseSelection)\n            this.mouseSelection.destroy();\n    }\n}\nfunction bindHandler(plugin, handler) {\n    return (view, event) => {\n        try {\n            return handler.call(plugin, event, view);\n        }\n        catch (e) {\n            logException(view.state, e);\n        }\n    };\n}\nfunction computeHandlers(plugins) {\n    let result = Object.create(null);\n    function record(type) {\n        return result[type] || (result[type] = { observers: [], handlers: [] });\n    }\n    for (let plugin of plugins) {\n        let spec = plugin.spec;\n        if (spec && spec.domEventHandlers)\n            for (let type in spec.domEventHandlers) {\n                let f = spec.domEventHandlers[type];\n                if (f)\n                    record(type).handlers.push(bindHandler(plugin.value, f));\n            }\n        if (spec && spec.domEventObservers)\n            for (let type in spec.domEventObservers) {\n                let f = spec.domEventObservers[type];\n                if (f)\n                    record(type).observers.push(bindHandler(plugin.value, f));\n            }\n    }\n    for (let type in handlers)\n        record(type).handlers.push(handlers[type]);\n    for (let type in observers)\n        record(type).observers.push(observers[type]);\n    return result;\n}\nconst PendingKeys = [\n    { key: \"Backspace\", keyCode: 8, inputType: \"deleteContentBackward\" },\n    { key: \"Enter\", keyCode: 13, inputType: \"insertParagraph\" },\n    { key: \"Enter\", keyCode: 13, inputType: \"insertLineBreak\" },\n    { key: \"Delete\", keyCode: 46, inputType: \"deleteContentForward\" }\n];\nconst EmacsyPendingKeys = \"dthko\";\n// Key codes for modifier keys\nconst modifierCodes = [16, 17, 18, 20, 91, 92, 224, 225];\nconst dragScrollMargin = 6;\nfunction dragScrollSpeed(dist) {\n    return Math.max(0, dist) * 0.7 + 8;\n}\nfunction dist(a, b) {\n    return Math.max(Math.abs(a.clientX - b.clientX), Math.abs(a.clientY - b.clientY));\n}\nclass MouseSelection {\n    constructor(view, startEvent, style, mustSelect) {\n        this.view = view;\n        this.startEvent = startEvent;\n        this.style = style;\n        this.mustSelect = mustSelect;\n        this.scrollSpeed = { x: 0, y: 0 };\n        this.scrolling = -1;\n        this.lastEvent = startEvent;\n        this.scrollParent = scrollableParent(view.contentDOM);\n        this.atoms = view.state.facet(atomicRanges).map(f => f(view));\n        let doc = view.contentDOM.ownerDocument;\n        doc.addEventListener(\"mousemove\", this.move = this.move.bind(this));\n        doc.addEventListener(\"mouseup\", this.up = this.up.bind(this));\n        this.extend = startEvent.shiftKey;\n        this.multiple = view.state.facet(EditorState.allowMultipleSelections) && addsSelectionRange(view, startEvent);\n        this.dragging = isInPrimarySelection(view, startEvent) && getClickType(startEvent) == 1 ? null : false;\n    }\n    start(event) {\n        // When clicking outside of the selection, immediately apply the\n        // effect of starting the selection\n        if (this.dragging === false)\n            this.select(event);\n    }\n    move(event) {\n        var _a;\n        if (event.buttons == 0)\n            return this.destroy();\n        if (this.dragging || this.dragging == null && dist(this.startEvent, event) < 10)\n            return;\n        this.select(this.lastEvent = event);\n        let sx = 0, sy = 0;\n        let rect = ((_a = this.scrollParent) === null || _a === void 0 ? void 0 : _a.getBoundingClientRect())\n            || { left: 0, top: 0, right: this.view.win.innerWidth, bottom: this.view.win.innerHeight };\n        let margins = getScrollMargins(this.view);\n        if (event.clientX - margins.left <= rect.left + dragScrollMargin)\n            sx = -dragScrollSpeed(rect.left - event.clientX);\n        else if (event.clientX + margins.right >= rect.right - dragScrollMargin)\n            sx = dragScrollSpeed(event.clientX - rect.right);\n        if (event.clientY - margins.top <= rect.top + dragScrollMargin)\n            sy = -dragScrollSpeed(rect.top - event.clientY);\n        else if (event.clientY + margins.bottom >= rect.bottom - dragScrollMargin)\n            sy = dragScrollSpeed(event.clientY - rect.bottom);\n        this.setScrollSpeed(sx, sy);\n    }\n    up(event) {\n        if (this.dragging == null)\n            this.select(this.lastEvent);\n        if (!this.dragging)\n            event.preventDefault();\n        this.destroy();\n    }\n    destroy() {\n        this.setScrollSpeed(0, 0);\n        let doc = this.view.contentDOM.ownerDocument;\n        doc.removeEventListener(\"mousemove\", this.move);\n        doc.removeEventListener(\"mouseup\", this.up);\n        this.view.inputState.mouseSelection = this.view.inputState.draggedContent = null;\n    }\n    setScrollSpeed(sx, sy) {\n        this.scrollSpeed = { x: sx, y: sy };\n        if (sx || sy) {\n            if (this.scrolling < 0)\n                this.scrolling = setInterval(() => this.scroll(), 50);\n        }\n        else if (this.scrolling > -1) {\n            clearInterval(this.scrolling);\n            this.scrolling = -1;\n        }\n    }\n    scroll() {\n        if (this.scrollParent) {\n            this.scrollParent.scrollLeft += this.scrollSpeed.x;\n            this.scrollParent.scrollTop += this.scrollSpeed.y;\n        }\n        else {\n            this.view.win.scrollBy(this.scrollSpeed.x, this.scrollSpeed.y);\n        }\n        if (this.dragging === false)\n            this.select(this.lastEvent);\n    }\n    skipAtoms(sel) {\n        let ranges = null;\n        for (let i = 0; i < sel.ranges.length; i++) {\n            let range = sel.ranges[i], updated = null;\n            if (range.empty) {\n                let pos = skipAtomicRanges(this.atoms, range.from, 0);\n                if (pos != range.from)\n                    updated = EditorSelection.cursor(pos, -1);\n            }\n            else {\n                let from = skipAtomicRanges(this.atoms, range.from, -1);\n                let to = skipAtomicRanges(this.atoms, range.to, 1);\n                if (from != range.from || to != range.to)\n                    updated = EditorSelection.range(range.from == range.anchor ? from : to, range.from == range.head ? from : to);\n            }\n            if (updated) {\n                if (!ranges)\n                    ranges = sel.ranges.slice();\n                ranges[i] = updated;\n            }\n        }\n        return ranges ? EditorSelection.create(ranges, sel.mainIndex) : sel;\n    }\n    select(event) {\n        let { view } = this, selection = this.skipAtoms(this.style.get(event, this.extend, this.multiple));\n        if (this.mustSelect || !selection.eq(view.state.selection) ||\n            selection.main.assoc != view.state.selection.main.assoc && this.dragging === false)\n            this.view.dispatch({\n                selection,\n                userEvent: \"select.pointer\"\n            });\n        this.mustSelect = false;\n    }\n    update(update) {\n        if (this.style.update(update))\n            setTimeout(() => this.select(this.lastEvent), 20);\n    }\n}\nfunction addsSelectionRange(view, event) {\n    let facet = view.state.facet(clickAddsSelectionRange);\n    return facet.length ? facet[0](event) : browser.mac ? event.metaKey : event.ctrlKey;\n}\nfunction dragMovesSelection(view, event) {\n    let facet = view.state.facet(dragMovesSelection$1);\n    return facet.length ? facet[0](event) : browser.mac ? !event.altKey : !event.ctrlKey;\n}\nfunction isInPrimarySelection(view, event) {\n    let { main } = view.state.selection;\n    if (main.empty)\n        return false;\n    // On boundary clicks, check whether the coordinates are inside the\n    // selection's client rectangles\n    let sel = getSelection(view.root);\n    if (!sel || sel.rangeCount == 0)\n        return true;\n    let rects = sel.getRangeAt(0).getClientRects();\n    for (let i = 0; i < rects.length; i++) {\n        let rect = rects[i];\n        if (rect.left <= event.clientX && rect.right >= event.clientX &&\n            rect.top <= event.clientY && rect.bottom >= event.clientY)\n            return true;\n    }\n    return false;\n}\nfunction eventBelongsToEditor(view, event) {\n    if (!event.bubbles)\n        return true;\n    if (event.defaultPrevented)\n        return false;\n    for (let node = event.target, cView; node != view.contentDOM; node = node.parentNode)\n        if (!node || node.nodeType == 11 || ((cView = ContentView.get(node)) && cView.ignoreEvent(event)))\n            return false;\n    return true;\n}\nconst handlers = /*@__PURE__*/Object.create(null);\nconst observers = /*@__PURE__*/Object.create(null);\n// This is very crude, but unfortunately both these browsers _pretend_\n// that they have a clipboard API\u2014all the objects and methods are\n// there, they just don't work, and they are hard to test.\nconst brokenClipboardAPI = (browser.ie && browser.ie_version < 15) ||\n    (browser.ios && browser.webkit_version < 604);\nfunction capturePaste(view) {\n    let parent = view.dom.parentNode;\n    if (!parent)\n        return;\n    let target = parent.appendChild(document.createElement(\"textarea\"));\n    target.style.cssText = \"position: fixed; left: -10000px; top: 10px\";\n    target.focus();\n    setTimeout(() => {\n        view.focus();\n        target.remove();\n        doPaste(view, target.value);\n    }, 50);\n}\nfunction doPaste(view, input) {\n    let { state } = view, changes, i = 1, text = state.toText(input);\n    let byLine = text.lines == state.selection.ranges.length;\n    let linewise = lastLinewiseCopy != null && state.selection.ranges.every(r => r.empty) && lastLinewiseCopy == text.toString();\n    if (linewise) {\n        let lastLine = -1;\n        changes = state.changeByRange(range => {\n            let line = state.doc.lineAt(range.from);\n            if (line.from == lastLine)\n                return { range };\n            lastLine = line.from;\n            let insert = state.toText((byLine ? text.line(i++).text : input) + state.lineBreak);\n            return { changes: { from: line.from, insert },\n                range: EditorSelection.cursor(range.from + insert.length) };\n        });\n    }\n    else if (byLine) {\n        changes = state.changeByRange(range => {\n            let line = text.line(i++);\n            return { changes: { from: range.from, to: range.to, insert: line.text },\n                range: EditorSelection.cursor(range.from + line.length) };\n        });\n    }\n    else {\n        changes = state.replaceSelection(text);\n    }\n    view.dispatch(changes, {\n        userEvent: \"input.paste\",\n        scrollIntoView: true\n    });\n}\nobservers.scroll = view => {\n    view.inputState.lastScrollTop = view.scrollDOM.scrollTop;\n    view.inputState.lastScrollLeft = view.scrollDOM.scrollLeft;\n};\nhandlers.keydown = (view, event) => {\n    view.inputState.setSelectionOrigin(\"select\");\n    if (event.keyCode == 27)\n        view.inputState.lastEscPress = Date.now();\n    return false;\n};\nobservers.touchstart = (view, e) => {\n    view.inputState.lastTouchTime = Date.now();\n    view.inputState.setSelectionOrigin(\"select.pointer\");\n};\nobservers.touchmove = view => {\n    view.inputState.setSelectionOrigin(\"select.pointer\");\n};\nhandlers.mousedown = (view, event) => {\n    view.observer.flush();\n    if (view.inputState.lastTouchTime > Date.now() - 2000)\n        return false; // Ignore touch interaction\n    let style = null;\n    for (let makeStyle of view.state.facet(mouseSelectionStyle)) {\n        style = makeStyle(view, event);\n        if (style)\n            break;\n    }\n    if (!style && event.button == 0)\n        style = basicMouseSelection(view, event);\n    if (style) {\n        let mustFocus = !view.hasFocus;\n        view.inputState.startMouseSelection(new MouseSelection(view, event, style, mustFocus));\n        if (mustFocus)\n            view.observer.ignore(() => focusPreventScroll(view.contentDOM));\n        let mouseSel = view.inputState.mouseSelection;\n        if (mouseSel) {\n            mouseSel.start(event);\n            return mouseSel.dragging === false;\n        }\n    }\n    return false;\n};\nfunction rangeForClick(view, pos, bias, type) {\n    if (type == 1) { // Single click\n        return EditorSelection.cursor(pos, bias);\n    }\n    else if (type == 2) { // Double click\n        return groupAt(view.state, pos, bias);\n    }\n    else { // Triple click\n        let visual = LineView.find(view.docView, pos), line = view.state.doc.lineAt(visual ? visual.posAtEnd : pos);\n        let from = visual ? visual.posAtStart : line.from, to = visual ? visual.posAtEnd : line.to;\n        if (to < view.state.doc.length && to == line.to)\n            to++;\n        return EditorSelection.range(from, to);\n    }\n}\nlet insideY = (y, rect) => y >= rect.top && y <= rect.bottom;\nlet inside = (x, y, rect) => insideY(y, rect) && x >= rect.left && x <= rect.right;\n// Try to determine, for the given coordinates, associated with the\n// given position, whether they are related to the element before or\n// the element after the position.\nfunction findPositionSide(view, pos, x, y) {\n    let line = LineView.find(view.docView, pos);\n    if (!line)\n        return 1;\n    let off = pos - line.posAtStart;\n    // Line boundaries point into the line\n    if (off == 0)\n        return 1;\n    if (off == line.length)\n        return -1;\n    // Positions on top of an element point at that element\n    let before = line.coordsAt(off, -1);\n    if (before && inside(x, y, before))\n        return -1;\n    let after = line.coordsAt(off, 1);\n    if (after && inside(x, y, after))\n        return 1;\n    // This is probably a line wrap point. Pick before if the point is\n    // beside it.\n    return before && insideY(y, before) ? -1 : 1;\n}\nfunction queryPos(view, event) {\n    let pos = view.posAtCoords({ x: event.clientX, y: event.clientY }, false);\n    return { pos, bias: findPositionSide(view, pos, event.clientX, event.clientY) };\n}\nconst BadMouseDetail = browser.ie && browser.ie_version <= 11;\nlet lastMouseDown = null, lastMouseDownCount = 0, lastMouseDownTime = 0;\nfunction getClickType(event) {\n    if (!BadMouseDetail)\n        return event.detail;\n    let last = lastMouseDown, lastTime = lastMouseDownTime;\n    lastMouseDown = event;\n    lastMouseDownTime = Date.now();\n    return lastMouseDownCount = !last || (lastTime > Date.now() - 400 && Math.abs(last.clientX - event.clientX) < 2 &&\n        Math.abs(last.clientY - event.clientY) < 2) ? (lastMouseDownCount + 1) % 3 : 1;\n}\nfunction basicMouseSelection(view, event) {\n    let start = queryPos(view, event), type = getClickType(event);\n    let startSel = view.state.selection;\n    return {\n        update(update) {\n            if (update.docChanged) {\n                start.pos = update.changes.mapPos(start.pos);\n                startSel = startSel.map(update.changes);\n            }\n        },\n        get(event, extend, multiple) {\n            let cur = queryPos(view, event), removed;\n            let range = rangeForClick(view, cur.pos, cur.bias, type);\n            if (start.pos != cur.pos && !extend) {\n                let startRange = rangeForClick(view, start.pos, start.bias, type);\n                let from = Math.min(startRange.from, range.from), to = Math.max(startRange.to, range.to);\n                range = from < range.from ? EditorSelection.range(from, to) : EditorSelection.range(to, from);\n            }\n            if (extend)\n                return startSel.replaceRange(startSel.main.extend(range.from, range.to));\n            else if (multiple && type == 1 && startSel.ranges.length > 1 && (removed = removeRangeAround(startSel, cur.pos)))\n                return removed;\n            else if (multiple)\n                return startSel.addRange(range);\n            else\n                return EditorSelection.create([range]);\n        }\n    };\n}\nfunction removeRangeAround(sel, pos) {\n    for (let i = 0; i < sel.ranges.length; i++) {\n        let { from, to } = sel.ranges[i];\n        if (from <= pos && to >= pos)\n            return EditorSelection.create(sel.ranges.slice(0, i).concat(sel.ranges.slice(i + 1)), sel.mainIndex == i ? 0 : sel.mainIndex - (sel.mainIndex > i ? 1 : 0));\n    }\n    return null;\n}\nhandlers.dragstart = (view, event) => {\n    let { selection: { main: range } } = view.state;\n    if (event.target.draggable) {\n        let cView = view.docView.nearest(event.target);\n        if (cView && cView.isWidget) {\n            let from = cView.posAtStart, to = from + cView.length;\n            if (from >= range.to || to <= range.from)\n                range = EditorSelection.range(from, to);\n        }\n    }\n    let { inputState } = view;\n    if (inputState.mouseSelection)\n        inputState.mouseSelection.dragging = true;\n    inputState.draggedContent = range;\n    if (event.dataTransfer) {\n        event.dataTransfer.setData(\"Text\", view.state.sliceDoc(range.from, range.to));\n        event.dataTransfer.effectAllowed = \"copyMove\";\n    }\n    return false;\n};\nhandlers.dragend = view => {\n    view.inputState.draggedContent = null;\n    return false;\n};\nfunction dropText(view, event, text, direct) {\n    if (!text)\n        return;\n    let dropPos = view.posAtCoords({ x: event.clientX, y: event.clientY }, false);\n    let { draggedContent } = view.inputState;\n    let del = direct && draggedContent && dragMovesSelection(view, event)\n        ? { from: draggedContent.from, to: draggedContent.to } : null;\n    let ins = { from: dropPos, insert: text };\n    let changes = view.state.changes(del ? [del, ins] : ins);\n    view.focus();\n    view.dispatch({\n        changes,\n        selection: { anchor: changes.mapPos(dropPos, -1), head: changes.mapPos(dropPos, 1) },\n        userEvent: del ? \"move.drop\" : \"input.drop\"\n    });\n    view.inputState.draggedContent = null;\n}\nhandlers.drop = (view, event) => {\n    if (!event.dataTransfer)\n        return false;\n    if (view.state.readOnly)\n        return true;\n    let files = event.dataTransfer.files;\n    if (files && files.length) { // For a file drop, read the file's text.\n        let text = Array(files.length), read = 0;\n        let finishFile = () => {\n            if (++read == files.length)\n                dropText(view, event, text.filter(s => s != null).join(view.state.lineBreak), false);\n        };\n        for (let i = 0; i < files.length; i++) {\n            let reader = new FileReader;\n            reader.onerror = finishFile;\n            reader.onload = () => {\n                if (!/[\\x00-\\x08\\x0e-\\x1f]{2}/.test(reader.result))\n                    text[i] = reader.result;\n                finishFile();\n            };\n            reader.readAsText(files[i]);\n        }\n        return true;\n    }\n    else {\n        let text = event.dataTransfer.getData(\"Text\");\n        if (text) {\n            dropText(view, event, text, true);\n            return true;\n        }\n    }\n    return false;\n};\nhandlers.paste = (view, event) => {\n    if (view.state.readOnly)\n        return true;\n    view.observer.flush();\n    let data = brokenClipboardAPI ? null : event.clipboardData;\n    if (data) {\n        doPaste(view, data.getData(\"text/plain\") || data.getData(\"text/uri-text\"));\n        return true;\n    }\n    else {\n        capturePaste(view);\n        return false;\n    }\n};\nfunction captureCopy(view, text) {\n    // The extra wrapper is somehow necessary on IE/Edge to prevent the\n    // content from being mangled when it is put onto the clipboard\n    let parent = view.dom.parentNode;\n    if (!parent)\n        return;\n    let target = parent.appendChild(document.createElement(\"textarea\"));\n    target.style.cssText = \"position: fixed; left: -10000px; top: 10px\";\n    target.value = text;\n    target.focus();\n    target.selectionEnd = text.length;\n    target.selectionStart = 0;\n    setTimeout(() => {\n        target.remove();\n        view.focus();\n    }, 50);\n}\nfunction copiedRange(state) {\n    let content = [], ranges = [], linewise = false;\n    for (let range of state.selection.ranges)\n        if (!range.empty) {\n            content.push(state.sliceDoc(range.from, range.to));\n            ranges.push(range);\n        }\n    if (!content.length) {\n        // Nothing selected, do a line-wise copy\n        let upto = -1;\n        for (let { from } of state.selection.ranges) {\n            let line = state.doc.lineAt(from);\n            if (line.number > upto) {\n                content.push(line.text);\n                ranges.push({ from: line.from, to: Math.min(state.doc.length, line.to + 1) });\n            }\n            upto = line.number;\n        }\n        linewise = true;\n    }\n    return { text: content.join(state.lineBreak), ranges, linewise };\n}\nlet lastLinewiseCopy = null;\nhandlers.copy = handlers.cut = (view, event) => {\n    let { text, ranges, linewise } = copiedRange(view.state);\n    if (!text && !linewise)\n        return false;\n    lastLinewiseCopy = linewise ? text : null;\n    if (event.type == \"cut\" && !view.state.readOnly)\n        view.dispatch({\n            changes: ranges,\n            scrollIntoView: true,\n            userEvent: \"delete.cut\"\n        });\n    let data = brokenClipboardAPI ? null : event.clipboardData;\n    if (data) {\n        data.clearData();\n        data.setData(\"text/plain\", text);\n        return true;\n    }\n    else {\n        captureCopy(view, text);\n        return false;\n    }\n};\nconst isFocusChange = /*@__PURE__*/Annotation.define();\nfunction focusChangeTransaction(state, focus) {\n    let effects = [];\n    for (let getEffect of state.facet(focusChangeEffect)) {\n        let effect = getEffect(state, focus);\n        if (effect)\n            effects.push(effect);\n    }\n    return effects ? state.update({ effects, annotations: isFocusChange.of(true) }) : null;\n}\nfunction updateForFocusChange(view) {\n    setTimeout(() => {\n        let focus = view.hasFocus;\n        if (focus != view.inputState.notifiedFocused) {\n            let tr = focusChangeTransaction(view.state, focus);\n            if (tr)\n                view.dispatch(tr);\n            else\n                view.update([]);\n        }\n    }, 10);\n}\nobservers.focus = view => {\n    view.inputState.lastFocusTime = Date.now();\n    // When focusing reset the scroll position, move it back to where it was\n    if (!view.scrollDOM.scrollTop && (view.inputState.lastScrollTop || view.inputState.lastScrollLeft)) {\n        view.scrollDOM.scrollTop = view.inputState.lastScrollTop;\n        view.scrollDOM.scrollLeft = view.inputState.lastScrollLeft;\n    }\n    updateForFocusChange(view);\n};\nobservers.blur = view => {\n    view.observer.clearSelectionRange();\n    updateForFocusChange(view);\n};\nobservers.compositionstart = observers.compositionupdate = view => {\n    if (view.inputState.compositionFirstChange == null)\n        view.inputState.compositionFirstChange = true;\n    if (view.inputState.composing < 0) {\n        // FIXME possibly set a timeout to clear it again on Android\n        view.inputState.composing = 0;\n    }\n};\nobservers.compositionend = view => {\n    view.inputState.composing = -1;\n    view.inputState.compositionEndedAt = Date.now();\n    view.inputState.compositionPendingKey = true;\n    view.inputState.compositionPendingChange = view.observer.pendingRecords().length > 0;\n    view.inputState.compositionFirstChange = null;\n    if (browser.chrome && browser.android) {\n        // Delay flushing for a bit on Android because it'll often fire a\n        // bunch of contradictory changes in a row at end of compositon\n        view.observer.flushSoon();\n    }\n    else if (view.inputState.compositionPendingChange) {\n        // If we found pending records, schedule a flush.\n        Promise.resolve().then(() => view.observer.flush());\n    }\n    else {\n        // Otherwise, make sure that, if no changes come in soon, the\n        // composition view is cleared.\n        setTimeout(() => {\n            if (view.inputState.composing < 0 && view.docView.hasComposition)\n                view.update([]);\n        }, 50);\n    }\n};\nobservers.contextmenu = view => {\n    view.inputState.lastContextMenu = Date.now();\n};\nhandlers.beforeinput = (view, event) => {\n    var _a;\n    // Because Chrome Android doesn't fire useful key events, use\n    // beforeinput to detect backspace (and possibly enter and delete,\n    // but those usually don't even seem to fire beforeinput events at\n    // the moment) and fake a key event for it.\n    //\n    // (preventDefault on beforeinput, though supported in the spec,\n    // seems to do nothing at all on Chrome).\n    let pending;\n    if (browser.chrome && browser.android && (pending = PendingKeys.find(key => key.inputType == event.inputType))) {\n        view.observer.delayAndroidKey(pending.key, pending.keyCode);\n        if (pending.key == \"Backspace\" || pending.key == \"Delete\") {\n            let startViewHeight = ((_a = window.visualViewport) === null || _a === void 0 ? void 0 : _a.height) || 0;\n            setTimeout(() => {\n                var _a;\n                // Backspacing near uneditable nodes on Chrome Android sometimes\n                // closes the virtual keyboard. This tries to crudely detect\n                // that and refocus to get it back.\n                if ((((_a = window.visualViewport) === null || _a === void 0 ? void 0 : _a.height) || 0) > startViewHeight + 10 && view.hasFocus) {\n                    view.contentDOM.blur();\n                    view.focus();\n                }\n            }, 100);\n        }\n    }\n    return false;\n};\nconst appliedFirefoxHack = /*@__PURE__*/new Set;\n// In Firefox, when cut/copy handlers are added to the document, that\n// somehow avoids a bug where those events aren't fired when the\n// selection is empty. See https://github.com/codemirror/dev/issues/1082\n// and https://bugzilla.mozilla.org/show_bug.cgi?id=995961\nfunction firefoxCopyCutHack(doc) {\n    if (!appliedFirefoxHack.has(doc)) {\n        appliedFirefoxHack.add(doc);\n        doc.addEventListener(\"copy\", () => { });\n        doc.addEventListener(\"cut\", () => { });\n    }\n}\n\nconst wrappingWhiteSpace = [\"pre-wrap\", \"normal\", \"pre-line\", \"break-spaces\"];\nclass HeightOracle {\n    constructor(lineWrapping) {\n        this.lineWrapping = lineWrapping;\n        this.doc = Text.empty;\n        this.heightSamples = {};\n        this.lineHeight = 14; // The height of an entire line (line-height)\n        this.charWidth = 7;\n        this.textHeight = 14; // The height of the actual font (font-size)\n        this.lineLength = 30;\n        // Used to track, during updateHeight, if any actual heights changed\n        this.heightChanged = false;\n    }\n    heightForGap(from, to) {\n        let lines = this.doc.lineAt(to).number - this.doc.lineAt(from).number + 1;\n        if (this.lineWrapping)\n            lines += Math.max(0, Math.ceil(((to - from) - (lines * this.lineLength * 0.5)) / this.lineLength));\n        return this.lineHeight * lines;\n    }\n    heightForLine(length) {\n        if (!this.lineWrapping)\n            return this.lineHeight;\n        let lines = 1 + Math.max(0, Math.ceil((length - this.lineLength) / (this.lineLength - 5)));\n        return lines * this.lineHeight;\n    }\n    setDoc(doc) { this.doc = doc; return this; }\n    mustRefreshForWrapping(whiteSpace) {\n        return (wrappingWhiteSpace.indexOf(whiteSpace) > -1) != this.lineWrapping;\n    }\n    mustRefreshForHeights(lineHeights) {\n        let newHeight = false;\n        for (let i = 0; i < lineHeights.length; i++) {\n            let h = lineHeights[i];\n            if (h < 0) {\n                i++;\n            }\n            else if (!this.heightSamples[Math.floor(h * 10)]) { // Round to .1 pixels\n                newHeight = true;\n                this.heightSamples[Math.floor(h * 10)] = true;\n            }\n        }\n        return newHeight;\n    }\n    refresh(whiteSpace, lineHeight, charWidth, textHeight, lineLength, knownHeights) {\n        let lineWrapping = wrappingWhiteSpace.indexOf(whiteSpace) > -1;\n        let changed = Math.round(lineHeight) != Math.round(this.lineHeight) || this.lineWrapping != lineWrapping;\n        this.lineWrapping = lineWrapping;\n        this.lineHeight = lineHeight;\n        this.charWidth = charWidth;\n        this.textHeight = textHeight;\n        this.lineLength = lineLength;\n        if (changed) {\n            this.heightSamples = {};\n            for (let i = 0; i < knownHeights.length; i++) {\n                let h = knownHeights[i];\n                if (h < 0)\n                    i++;\n                else\n                    this.heightSamples[Math.floor(h * 10)] = true;\n            }\n        }\n        return changed;\n    }\n}\n// This object is used by `updateHeight` to make DOM measurements\n// arrive at the right nides. The `heights` array is a sequence of\n// block heights, starting from position `from`.\nclass MeasuredHeights {\n    constructor(from, heights) {\n        this.from = from;\n        this.heights = heights;\n        this.index = 0;\n    }\n    get more() { return this.index < this.heights.length; }\n}\n/**\nRecord used to represent information about a block-level element\nin the editor view.\n*/\nclass BlockInfo {\n    /**\n    @internal\n    */\n    constructor(\n    /**\n    The start of the element in the document.\n    */\n    from, \n    /**\n    The length of the element.\n    */\n    length, \n    /**\n    The top position of the element (relative to the top of the\n    document).\n    */\n    top, \n    /**\n    Its height.\n    */\n    height, \n    /**\n    @internal Weird packed field that holds an array of children\n    for composite blocks, a decoration for block widgets, and a\n    number indicating the amount of widget-create line breaks for\n    text blocks.\n    */\n    _content) {\n        this.from = from;\n        this.length = length;\n        this.top = top;\n        this.height = height;\n        this._content = _content;\n    }\n    /**\n    The type of element this is. When querying lines, this may be\n    an array of all the blocks that make up the line.\n    */\n    get type() {\n        return typeof this._content == \"number\" ? BlockType.Text :\n            Array.isArray(this._content) ? this._content : this._content.type;\n    }\n    /**\n    The end of the element as a document position.\n    */\n    get to() { return this.from + this.length; }\n    /**\n    The bottom position of the element.\n    */\n    get bottom() { return this.top + this.height; }\n    /**\n    If this is a widget block, this will return the widget\n    associated with it.\n    */\n    get widget() {\n        return this._content instanceof PointDecoration ? this._content.widget : null;\n    }\n    /**\n    If this is a textblock, this holds the number of line breaks\n    that appear in widgets inside the block.\n    */\n    get widgetLineBreaks() {\n        return typeof this._content == \"number\" ? this._content : 0;\n    }\n    /**\n    @internal\n    */\n    join(other) {\n        let content = (Array.isArray(this._content) ? this._content : [this])\n            .concat(Array.isArray(other._content) ? other._content : [other]);\n        return new BlockInfo(this.from, this.length + other.length, this.top, this.height + other.height, content);\n    }\n}\nvar QueryType = /*@__PURE__*/(function (QueryType) {\n    QueryType[QueryType[\"ByPos\"] = 0] = \"ByPos\";\n    QueryType[QueryType[\"ByHeight\"] = 1] = \"ByHeight\";\n    QueryType[QueryType[\"ByPosNoHeight\"] = 2] = \"ByPosNoHeight\";\nreturn QueryType})(QueryType || (QueryType = {}));\nconst Epsilon = 1e-3;\nclass HeightMap {\n    constructor(length, // The number of characters covered\n    height, // Height of this part of the document\n    flags = 2 /* Flag.Outdated */) {\n        this.length = length;\n        this.height = height;\n        this.flags = flags;\n    }\n    get outdated() { return (this.flags & 2 /* Flag.Outdated */) > 0; }\n    set outdated(value) { this.flags = (value ? 2 /* Flag.Outdated */ : 0) | (this.flags & ~2 /* Flag.Outdated */); }\n    setHeight(oracle, height) {\n        if (this.height != height) {\n            if (Math.abs(this.height - height) > Epsilon)\n                oracle.heightChanged = true;\n            this.height = height;\n        }\n    }\n    // Base case is to replace a leaf node, which simply builds a tree\n    // from the new nodes and returns that (HeightMapBranch and\n    // HeightMapGap override this to actually use from/to)\n    replace(_from, _to, nodes) {\n        return HeightMap.of(nodes);\n    }\n    // Again, these are base cases, and are overridden for branch and gap nodes.\n    decomposeLeft(_to, result) { result.push(this); }\n    decomposeRight(_from, result) { result.push(this); }\n    applyChanges(decorations, oldDoc, oracle, changes) {\n        let me = this, doc = oracle.doc;\n        for (let i = changes.length - 1; i >= 0; i--) {\n            let { fromA, toA, fromB, toB } = changes[i];\n            let start = me.lineAt(fromA, QueryType.ByPosNoHeight, oracle.setDoc(oldDoc), 0, 0);\n            let end = start.to >= toA ? start : me.lineAt(toA, QueryType.ByPosNoHeight, oracle, 0, 0);\n            toB += end.to - toA;\n            toA = end.to;\n            while (i > 0 && start.from <= changes[i - 1].toA) {\n                fromA = changes[i - 1].fromA;\n                fromB = changes[i - 1].fromB;\n                i--;\n                if (fromA < start.from)\n                    start = me.lineAt(fromA, QueryType.ByPosNoHeight, oracle, 0, 0);\n            }\n            fromB += start.from - fromA;\n            fromA = start.from;\n            let nodes = NodeBuilder.build(oracle.setDoc(doc), decorations, fromB, toB);\n            me = me.replace(fromA, toA, nodes);\n        }\n        return me.updateHeight(oracle, 0);\n    }\n    static empty() { return new HeightMapText(0, 0); }\n    // nodes uses null values to indicate the position of line breaks.\n    // There are never line breaks at the start or end of the array, or\n    // two line breaks next to each other, and the array isn't allowed\n    // to be empty (same restrictions as return value from the builder).\n    static of(nodes) {\n        if (nodes.length == 1)\n            return nodes[0];\n        let i = 0, j = nodes.length, before = 0, after = 0;\n        for (;;) {\n            if (i == j) {\n                if (before > after * 2) {\n                    let split = nodes[i - 1];\n                    if (split.break)\n                        nodes.splice(--i, 1, split.left, null, split.right);\n                    else\n                        nodes.splice(--i, 1, split.left, split.right);\n                    j += 1 + split.break;\n                    before -= split.size;\n                }\n                else if (after > before * 2) {\n                    let split = nodes[j];\n                    if (split.break)\n                        nodes.splice(j, 1, split.left, null, split.right);\n                    else\n                        nodes.splice(j, 1, split.left, split.right);\n                    j += 2 + split.break;\n                    after -= split.size;\n                }\n                else {\n                    break;\n                }\n            }\n            else if (before < after) {\n                let next = nodes[i++];\n                if (next)\n                    before += next.size;\n            }\n            else {\n                let next = nodes[--j];\n                if (next)\n                    after += next.size;\n            }\n        }\n        let brk = 0;\n        if (nodes[i - 1] == null) {\n            brk = 1;\n            i--;\n        }\n        else if (nodes[i] == null) {\n            brk = 1;\n            j++;\n        }\n        return new HeightMapBranch(HeightMap.of(nodes.slice(0, i)), brk, HeightMap.of(nodes.slice(j)));\n    }\n}\nHeightMap.prototype.size = 1;\nclass HeightMapBlock extends HeightMap {\n    constructor(length, height, deco) {\n        super(length, height);\n        this.deco = deco;\n    }\n    blockAt(_height, _oracle, top, offset) {\n        return new BlockInfo(offset, this.length, top, this.height, this.deco || 0);\n    }\n    lineAt(_value, _type, oracle, top, offset) {\n        return this.blockAt(0, oracle, top, offset);\n    }\n    forEachLine(from, to, oracle, top, offset, f) {\n        if (from <= offset + this.length && to >= offset)\n            f(this.blockAt(0, oracle, top, offset));\n    }\n    updateHeight(oracle, offset = 0, _force = false, measured) {\n        if (measured && measured.from <= offset && measured.more)\n            this.setHeight(oracle, measured.heights[measured.index++]);\n        this.outdated = false;\n        return this;\n    }\n    toString() { return `block(${this.length})`; }\n}\nclass HeightMapText extends HeightMapBlock {\n    constructor(length, height) {\n        super(length, height, null);\n        this.collapsed = 0; // Amount of collapsed content in the line\n        this.widgetHeight = 0; // Maximum inline widget height\n        this.breaks = 0; // Number of widget-introduced line breaks on the line\n    }\n    blockAt(_height, _oracle, top, offset) {\n        return new BlockInfo(offset, this.length, top, this.height, this.breaks);\n    }\n    replace(_from, _to, nodes) {\n        let node = nodes[0];\n        if (nodes.length == 1 && (node instanceof HeightMapText || node instanceof HeightMapGap && (node.flags & 4 /* Flag.SingleLine */)) &&\n            Math.abs(this.length - node.length) < 10) {\n            if (node instanceof HeightMapGap)\n                node = new HeightMapText(node.length, this.height);\n            else\n                node.height = this.height;\n            if (!this.outdated)\n                node.outdated = false;\n            return node;\n        }\n        else {\n            return HeightMap.of(nodes);\n        }\n    }\n    updateHeight(oracle, offset = 0, force = false, measured) {\n        if (measured && measured.from <= offset && measured.more)\n            this.setHeight(oracle, measured.heights[measured.index++]);\n        else if (force || this.outdated)\n            this.setHeight(oracle, Math.max(this.widgetHeight, oracle.heightForLine(this.length - this.collapsed)) +\n                this.breaks * oracle.lineHeight);\n        this.outdated = false;\n        return this;\n    }\n    toString() {\n        return `line(${this.length}${this.collapsed ? -this.collapsed : \"\"}${this.widgetHeight ? \":\" + this.widgetHeight : \"\"})`;\n    }\n}\nclass HeightMapGap extends HeightMap {\n    constructor(length) { super(length, 0); }\n    heightMetrics(oracle, offset) {\n        let firstLine = oracle.doc.lineAt(offset).number, lastLine = oracle.doc.lineAt(offset + this.length).number;\n        let lines = lastLine - firstLine + 1;\n        let perLine, perChar = 0;\n        if (oracle.lineWrapping) {\n            let totalPerLine = Math.min(this.height, oracle.lineHeight * lines);\n            perLine = totalPerLine / lines;\n            if (this.length > lines + 1)\n                perChar = (this.height - totalPerLine) / (this.length - lines - 1);\n        }\n        else {\n            perLine = this.height / lines;\n        }\n        return { firstLine, lastLine, perLine, perChar };\n    }\n    blockAt(height, oracle, top, offset) {\n        let { firstLine, lastLine, perLine, perChar } = this.heightMetrics(oracle, offset);\n        if (oracle.lineWrapping) {\n            let guess = offset + Math.round(Math.max(0, Math.min(1, (height - top) / this.height)) * this.length);\n            let line = oracle.doc.lineAt(guess), lineHeight = perLine + line.length * perChar;\n            let lineTop = Math.max(top, height - lineHeight / 2);\n            return new BlockInfo(line.from, line.length, lineTop, lineHeight, 0);\n        }\n        else {\n            let line = Math.max(0, Math.min(lastLine - firstLine, Math.floor((height - top) / perLine)));\n            let { from, length } = oracle.doc.line(firstLine + line);\n            return new BlockInfo(from, length, top + perLine * line, perLine, 0);\n        }\n    }\n    lineAt(value, type, oracle, top, offset) {\n        if (type == QueryType.ByHeight)\n            return this.blockAt(value, oracle, top, offset);\n        if (type == QueryType.ByPosNoHeight) {\n            let { from, to } = oracle.doc.lineAt(value);\n            return new BlockInfo(from, to - from, 0, 0, 0);\n        }\n        let { firstLine, perLine, perChar } = this.heightMetrics(oracle, offset);\n        let line = oracle.doc.lineAt(value), lineHeight = perLine + line.length * perChar;\n        let linesAbove = line.number - firstLine;\n        let lineTop = top + perLine * linesAbove + perChar * (line.from - offset - linesAbove);\n        return new BlockInfo(line.from, line.length, Math.max(top, Math.min(lineTop, top + this.height - lineHeight)), lineHeight, 0);\n    }\n    forEachLine(from, to, oracle, top, offset, f) {\n        from = Math.max(from, offset);\n        to = Math.min(to, offset + this.length);\n        let { firstLine, perLine, perChar } = this.heightMetrics(oracle, offset);\n        for (let pos = from, lineTop = top; pos <= to;) {\n            let line = oracle.doc.lineAt(pos);\n            if (pos == from) {\n                let linesAbove = line.number - firstLine;\n                lineTop += perLine * linesAbove + perChar * (from - offset - linesAbove);\n            }\n            let lineHeight = perLine + perChar * line.length;\n            f(new BlockInfo(line.from, line.length, lineTop, lineHeight, 0));\n            lineTop += lineHeight;\n            pos = line.to + 1;\n        }\n    }\n    replace(from, to, nodes) {\n        let after = this.length - to;\n        if (after > 0) {\n            let last = nodes[nodes.length - 1];\n            if (last instanceof HeightMapGap)\n                nodes[nodes.length - 1] = new HeightMapGap(last.length + after);\n            else\n                nodes.push(null, new HeightMapGap(after - 1));\n        }\n        if (from > 0) {\n            let first = nodes[0];\n            if (first instanceof HeightMapGap)\n                nodes[0] = new HeightMapGap(from + first.length);\n            else\n                nodes.unshift(new HeightMapGap(from - 1), null);\n        }\n        return HeightMap.of(nodes);\n    }\n    decomposeLeft(to, result) {\n        result.push(new HeightMapGap(to - 1), null);\n    }\n    decomposeRight(from, result) {\n        result.push(null, new HeightMapGap(this.length - from - 1));\n    }\n    updateHeight(oracle, offset = 0, force = false, measured) {\n        let end = offset + this.length;\n        if (measured && measured.from <= offset + this.length && measured.more) {\n            // Fill in part of this gap with measured lines. We know there\n            // can't be widgets or collapsed ranges in those lines, because\n            // they would already have been added to the heightmap (gaps\n            // only contain plain text).\n            let nodes = [], pos = Math.max(offset, measured.from), singleHeight = -1;\n            if (measured.from > offset)\n                nodes.push(new HeightMapGap(measured.from - offset - 1).updateHeight(oracle, offset));\n            while (pos <= end && measured.more) {\n                let len = oracle.doc.lineAt(pos).length;\n                if (nodes.length)\n                    nodes.push(null);\n                let height = measured.heights[measured.index++];\n                if (singleHeight == -1)\n                    singleHeight = height;\n                else if (Math.abs(height - singleHeight) >= Epsilon)\n                    singleHeight = -2;\n                let line = new HeightMapText(len, height);\n                line.outdated = false;\n                nodes.push(line);\n                pos += len + 1;\n            }\n            if (pos <= end)\n                nodes.push(null, new HeightMapGap(end - pos).updateHeight(oracle, pos));\n            let result = HeightMap.of(nodes);\n            if (singleHeight < 0 || Math.abs(result.height - this.height) >= Epsilon ||\n                Math.abs(singleHeight - this.heightMetrics(oracle, offset).perLine) >= Epsilon)\n                oracle.heightChanged = true;\n            return result;\n        }\n        else if (force || this.outdated) {\n            this.setHeight(oracle, oracle.heightForGap(offset, offset + this.length));\n            this.outdated = false;\n        }\n        return this;\n    }\n    toString() { return `gap(${this.length})`; }\n}\nclass HeightMapBranch extends HeightMap {\n    constructor(left, brk, right) {\n        super(left.length + brk + right.length, left.height + right.height, brk | (left.outdated || right.outdated ? 2 /* Flag.Outdated */ : 0));\n        this.left = left;\n        this.right = right;\n        this.size = left.size + right.size;\n    }\n    get break() { return this.flags & 1 /* Flag.Break */; }\n    blockAt(height, oracle, top, offset) {\n        let mid = top + this.left.height;\n        return height < mid ? this.left.blockAt(height, oracle, top, offset)\n            : this.right.blockAt(height, oracle, mid, offset + this.left.length + this.break);\n    }\n    lineAt(value, type, oracle, top, offset) {\n        let rightTop = top + this.left.height, rightOffset = offset + this.left.length + this.break;\n        let left = type == QueryType.ByHeight ? value < rightTop : value < rightOffset;\n        let base = left ? this.left.lineAt(value, type, oracle, top, offset)\n            : this.right.lineAt(value, type, oracle, rightTop, rightOffset);\n        if (this.break || (left ? base.to < rightOffset : base.from > rightOffset))\n            return base;\n        let subQuery = type == QueryType.ByPosNoHeight ? QueryType.ByPosNoHeight : QueryType.ByPos;\n        if (left)\n            return base.join(this.right.lineAt(rightOffset, subQuery, oracle, rightTop, rightOffset));\n        else\n            return this.left.lineAt(rightOffset, subQuery, oracle, top, offset).join(base);\n    }\n    forEachLine(from, to, oracle, top, offset, f) {\n        let rightTop = top + this.left.height, rightOffset = offset + this.left.length + this.break;\n        if (this.break) {\n            if (from < rightOffset)\n                this.left.forEachLine(from, to, oracle, top, offset, f);\n            if (to >= rightOffset)\n                this.right.forEachLine(from, to, oracle, rightTop, rightOffset, f);\n        }\n        else {\n            let mid = this.lineAt(rightOffset, QueryType.ByPos, oracle, top, offset);\n            if (from < mid.from)\n                this.left.forEachLine(from, mid.from - 1, oracle, top, offset, f);\n            if (mid.to >= from && mid.from <= to)\n                f(mid);\n            if (to > mid.to)\n                this.right.forEachLine(mid.to + 1, to, oracle, rightTop, rightOffset, f);\n        }\n    }\n    replace(from, to, nodes) {\n        let rightStart = this.left.length + this.break;\n        if (to < rightStart)\n            return this.balanced(this.left.replace(from, to, nodes), this.right);\n        if (from > this.left.length)\n            return this.balanced(this.left, this.right.replace(from - rightStart, to - rightStart, nodes));\n        let result = [];\n        if (from > 0)\n            this.decomposeLeft(from, result);\n        let left = result.length;\n        for (let node of nodes)\n            result.push(node);\n        if (from > 0)\n            mergeGaps(result, left - 1);\n        if (to < this.length) {\n            let right = result.length;\n            this.decomposeRight(to, result);\n            mergeGaps(result, right);\n        }\n        return HeightMap.of(result);\n    }\n    decomposeLeft(to, result) {\n        let left = this.left.length;\n        if (to <= left)\n            return this.left.decomposeLeft(to, result);\n        result.push(this.left);\n        if (this.break) {\n            left++;\n            if (to >= left)\n                result.push(null);\n        }\n        if (to > left)\n            this.right.decomposeLeft(to - left, result);\n    }\n    decomposeRight(from, result) {\n        let left = this.left.length, right = left + this.break;\n        if (from >= right)\n            return this.right.decomposeRight(from - right, result);\n        if (from < left)\n            this.left.decomposeRight(from, result);\n        if (this.break && from < right)\n            result.push(null);\n        result.push(this.right);\n    }\n    balanced(left, right) {\n        if (left.size > 2 * right.size || right.size > 2 * left.size)\n            return HeightMap.of(this.break ? [left, null, right] : [left, right]);\n        this.left = left;\n        this.right = right;\n        this.height = left.height + right.height;\n        this.outdated = left.outdated || right.outdated;\n        this.size = left.size + right.size;\n        this.length = left.length + this.break + right.length;\n        return this;\n    }\n    updateHeight(oracle, offset = 0, force = false, measured) {\n        let { left, right } = this, rightStart = offset + left.length + this.break, rebalance = null;\n        if (measured && measured.from <= offset + left.length && measured.more)\n            rebalance = left = left.updateHeight(oracle, offset, force, measured);\n        else\n            left.updateHeight(oracle, offset, force);\n        if (measured && measured.from <= rightStart + right.length && measured.more)\n            rebalance = right = right.updateHeight(oracle, rightStart, force, measured);\n        else\n            right.updateHeight(oracle, rightStart, force);\n        if (rebalance)\n            return this.balanced(left, right);\n        this.height = this.left.height + this.right.height;\n        this.outdated = false;\n        return this;\n    }\n    toString() { return this.left + (this.break ? \" \" : \"-\") + this.right; }\n}\nfunction mergeGaps(nodes, around) {\n    let before, after;\n    if (nodes[around] == null &&\n        (before = nodes[around - 1]) instanceof HeightMapGap &&\n        (after = nodes[around + 1]) instanceof HeightMapGap)\n        nodes.splice(around - 1, 3, new HeightMapGap(before.length + 1 + after.length));\n}\nconst relevantWidgetHeight = 5;\nclass NodeBuilder {\n    constructor(pos, oracle) {\n        this.pos = pos;\n        this.oracle = oracle;\n        this.nodes = [];\n        this.lineStart = -1;\n        this.lineEnd = -1;\n        this.covering = null;\n        this.writtenTo = pos;\n    }\n    get isCovered() {\n        return this.covering && this.nodes[this.nodes.length - 1] == this.covering;\n    }\n    span(_from, to) {\n        if (this.lineStart > -1) {\n            let end = Math.min(to, this.lineEnd), last = this.nodes[this.nodes.length - 1];\n            if (last instanceof HeightMapText)\n                last.length += end - this.pos;\n            else if (end > this.pos || !this.isCovered)\n                this.nodes.push(new HeightMapText(end - this.pos, -1));\n            this.writtenTo = end;\n            if (to > end) {\n                this.nodes.push(null);\n                this.writtenTo++;\n                this.lineStart = -1;\n            }\n        }\n        this.pos = to;\n    }\n    point(from, to, deco) {\n        if (from < to || deco.heightRelevant) {\n            let height = deco.widget ? deco.widget.estimatedHeight : 0;\n            let breaks = deco.widget ? deco.widget.lineBreaks : 0;\n            if (height < 0)\n                height = this.oracle.lineHeight;\n            let len = to - from;\n            if (deco.block) {\n                this.addBlock(new HeightMapBlock(len, height, deco));\n            }\n            else if (len || breaks || height >= relevantWidgetHeight) {\n                this.addLineDeco(height, breaks, len);\n            }\n        }\n        else if (to > from) {\n            this.span(from, to);\n        }\n        if (this.lineEnd > -1 && this.lineEnd < this.pos)\n            this.lineEnd = this.oracle.doc.lineAt(this.pos).to;\n    }\n    enterLine() {\n        if (this.lineStart > -1)\n            return;\n        let { from, to } = this.oracle.doc.lineAt(this.pos);\n        this.lineStart = from;\n        this.lineEnd = to;\n        if (this.writtenTo < from) {\n            if (this.writtenTo < from - 1 || this.nodes[this.nodes.length - 1] == null)\n                this.nodes.push(this.blankContent(this.writtenTo, from - 1));\n            this.nodes.push(null);\n        }\n        if (this.pos > from)\n            this.nodes.push(new HeightMapText(this.pos - from, -1));\n        this.writtenTo = this.pos;\n    }\n    blankContent(from, to) {\n        let gap = new HeightMapGap(to - from);\n        if (this.oracle.doc.lineAt(from).to == to)\n            gap.flags |= 4 /* Flag.SingleLine */;\n        return gap;\n    }\n    ensureLine() {\n        this.enterLine();\n        let last = this.nodes.length ? this.nodes[this.nodes.length - 1] : null;\n        if (last instanceof HeightMapText)\n            return last;\n        let line = new HeightMapText(0, -1);\n        this.nodes.push(line);\n        return line;\n    }\n    addBlock(block) {\n        this.enterLine();\n        let deco = block.deco;\n        if (deco && deco.startSide > 0 && !this.isCovered)\n            this.ensureLine();\n        this.nodes.push(block);\n        this.writtenTo = this.pos = this.pos + block.length;\n        if (deco && deco.endSide > 0)\n            this.covering = block;\n    }\n    addLineDeco(height, breaks, length) {\n        let line = this.ensureLine();\n        line.length += length;\n        line.collapsed += length;\n        line.widgetHeight = Math.max(line.widgetHeight, height);\n        line.breaks += breaks;\n        this.writtenTo = this.pos = this.pos + length;\n    }\n    finish(from) {\n        let last = this.nodes.length == 0 ? null : this.nodes[this.nodes.length - 1];\n        if (this.lineStart > -1 && !(last instanceof HeightMapText) && !this.isCovered)\n            this.nodes.push(new HeightMapText(0, -1));\n        else if (this.writtenTo < this.pos || last == null)\n            this.nodes.push(this.blankContent(this.writtenTo, this.pos));\n        let pos = from;\n        for (let node of this.nodes) {\n            if (node instanceof HeightMapText)\n                node.updateHeight(this.oracle, pos);\n            pos += node ? node.length : 1;\n        }\n        return this.nodes;\n    }\n    // Always called with a region that on both sides either stretches\n    // to a line break or the end of the document.\n    // The returned array uses null to indicate line breaks, but never\n    // starts or ends in a line break, or has multiple line breaks next\n    // to each other.\n    static build(oracle, decorations, from, to) {\n        let builder = new NodeBuilder(from, oracle);\n        RangeSet.spans(decorations, from, to, builder, 0);\n        return builder.finish(from);\n    }\n}\nfunction heightRelevantDecoChanges(a, b, diff) {\n    let comp = new DecorationComparator;\n    RangeSet.compare(a, b, diff, comp, 0);\n    return comp.changes;\n}\nclass DecorationComparator {\n    constructor() {\n        this.changes = [];\n    }\n    compareRange() { }\n    comparePoint(from, to, a, b) {\n        if (from < to || a && a.heightRelevant || b && b.heightRelevant)\n            addRange(from, to, this.changes, 5);\n    }\n}\n\nfunction visiblePixelRange(dom, paddingTop) {\n    let rect = dom.getBoundingClientRect();\n    let doc = dom.ownerDocument, win = doc.defaultView || window;\n    let left = Math.max(0, rect.left), right = Math.min(win.innerWidth, rect.right);\n    let top = Math.max(0, rect.top), bottom = Math.min(win.innerHeight, rect.bottom);\n    for (let parent = dom.parentNode; parent && parent != doc.body;) {\n        if (parent.nodeType == 1) {\n            let elt = parent;\n            let style = window.getComputedStyle(elt);\n            if ((elt.scrollHeight > elt.clientHeight || elt.scrollWidth > elt.clientWidth) &&\n                style.overflow != \"visible\") {\n                let parentRect = elt.getBoundingClientRect();\n                left = Math.max(left, parentRect.left);\n                right = Math.min(right, parentRect.right);\n                top = Math.max(top, parentRect.top);\n                bottom = parent == dom.parentNode ? parentRect.bottom : Math.min(bottom, parentRect.bottom);\n            }\n            parent = style.position == \"absolute\" || style.position == \"fixed\" ? elt.offsetParent : elt.parentNode;\n        }\n        else if (parent.nodeType == 11) { // Shadow root\n            parent = parent.host;\n        }\n        else {\n            break;\n        }\n    }\n    return { left: left - rect.left, right: Math.max(left, right) - rect.left,\n        top: top - (rect.top + paddingTop), bottom: Math.max(top, bottom) - (rect.top + paddingTop) };\n}\nfunction fullPixelRange(dom, paddingTop) {\n    let rect = dom.getBoundingClientRect();\n    return { left: 0, right: rect.right - rect.left,\n        top: paddingTop, bottom: rect.bottom - (rect.top + paddingTop) };\n}\n// Line gaps are placeholder widgets used to hide pieces of overlong\n// lines within the viewport, as a kludge to keep the editor\n// responsive when a ridiculously long line is loaded into it.\nclass LineGap {\n    constructor(from, to, size) {\n        this.from = from;\n        this.to = to;\n        this.size = size;\n    }\n    static same(a, b) {\n        if (a.length != b.length)\n            return false;\n        for (let i = 0; i < a.length; i++) {\n            let gA = a[i], gB = b[i];\n            if (gA.from != gB.from || gA.to != gB.to || gA.size != gB.size)\n                return false;\n        }\n        return true;\n    }\n    draw(viewState, wrapping) {\n        return Decoration.replace({\n            widget: new LineGapWidget(this.size * (wrapping ? viewState.scaleY : viewState.scaleX), wrapping)\n        }).range(this.from, this.to);\n    }\n}\nclass LineGapWidget extends WidgetType {\n    constructor(size, vertical) {\n        super();\n        this.size = size;\n        this.vertical = vertical;\n    }\n    eq(other) { return other.size == this.size && other.vertical == this.vertical; }\n    toDOM() {\n        let elt = document.createElement(\"div\");\n        if (this.vertical) {\n            elt.style.height = this.size + \"px\";\n        }\n        else {\n            elt.style.width = this.size + \"px\";\n            elt.style.height = \"2px\";\n            elt.style.display = \"inline-block\";\n        }\n        return elt;\n    }\n    get estimatedHeight() { return this.vertical ? this.size : -1; }\n}\nclass ViewState {\n    constructor(state) {\n        this.state = state;\n        // These are contentDOM-local coordinates\n        this.pixelViewport = { left: 0, right: window.innerWidth, top: 0, bottom: 0 };\n        this.inView = true;\n        this.paddingTop = 0; // Padding above the document, scaled\n        this.paddingBottom = 0; // Padding below the document, scaled\n        this.contentDOMWidth = 0; // contentDOM.getBoundingClientRect().width\n        this.contentDOMHeight = 0; // contentDOM.getBoundingClientRect().height\n        this.editorHeight = 0; // scrollDOM.clientHeight, unscaled\n        this.editorWidth = 0; // scrollDOM.clientWidth, unscaled\n        this.scrollTop = 0; // Last seen scrollDOM.scrollTop, scaled\n        this.scrolledToBottom = true;\n        // The CSS-transformation scale of the editor (transformed size /\n        // concrete size)\n        this.scaleX = 1;\n        this.scaleY = 1;\n        // The vertical position (document-relative) to which to anchor the\n        // scroll position. -1 means anchor to the end of the document.\n        this.scrollAnchorPos = 0;\n        // The height at the anchor position. Set by the DOM update phase.\n        // -1 means no height available.\n        this.scrollAnchorHeight = -1;\n        // See VP.MaxDOMHeight\n        this.scaler = IdScaler;\n        this.scrollTarget = null;\n        // Briefly set to true when printing, to disable viewport limiting\n        this.printing = false;\n        // Flag set when editor content was redrawn, so that the next\n        // measure stage knows it must read DOM layout\n        this.mustMeasureContent = true;\n        this.defaultTextDirection = Direction.LTR;\n        this.visibleRanges = [];\n        // Cursor 'assoc' is only significant when the cursor is on a line\n        // wrap point, where it must stick to the character that it is\n        // associated with. Since browsers don't provide a reasonable\n        // interface to set or query this, when a selection is set that\n        // might cause this to be significant, this flag is set. The next\n        // measure phase will check whether the cursor is on a line-wrapping\n        // boundary and, if so, reset it to make sure it is positioned in\n        // the right place.\n        this.mustEnforceCursorAssoc = false;\n        let guessWrapping = state.facet(contentAttributes).some(v => typeof v != \"function\" && v.class == \"cm-lineWrapping\");\n        this.heightOracle = new HeightOracle(guessWrapping);\n        this.stateDeco = state.facet(decorations).filter(d => typeof d != \"function\");\n        this.heightMap = HeightMap.empty().applyChanges(this.stateDeco, Text.empty, this.heightOracle.setDoc(state.doc), [new ChangedRange(0, 0, 0, state.doc.length)]);\n        this.viewport = this.getViewport(0, null);\n        this.updateViewportLines();\n        this.updateForViewport();\n        this.lineGaps = this.ensureLineGaps([]);\n        this.lineGapDeco = Decoration.set(this.lineGaps.map(gap => gap.draw(this, false)));\n        this.computeVisibleRanges();\n    }\n    updateForViewport() {\n        let viewports = [this.viewport], { main } = this.state.selection;\n        for (let i = 0; i <= 1; i++) {\n            let pos = i ? main.head : main.anchor;\n            if (!viewports.some(({ from, to }) => pos >= from && pos <= to)) {\n                let { from, to } = this.lineBlockAt(pos);\n                viewports.push(new Viewport(from, to));\n            }\n        }\n        this.viewports = viewports.sort((a, b) => a.from - b.from);\n        this.scaler = this.heightMap.height <= 7000000 /* VP.MaxDOMHeight */ ? IdScaler :\n            new BigScaler(this.heightOracle, this.heightMap, this.viewports);\n    }\n    updateViewportLines() {\n        this.viewportLines = [];\n        this.heightMap.forEachLine(this.viewport.from, this.viewport.to, this.heightOracle.setDoc(this.state.doc), 0, 0, block => {\n            this.viewportLines.push(this.scaler.scale == 1 ? block : scaleBlock(block, this.scaler));\n        });\n    }\n    update(update, scrollTarget = null) {\n        this.state = update.state;\n        let prevDeco = this.stateDeco;\n        this.stateDeco = this.state.facet(decorations).filter(d => typeof d != \"function\");\n        let contentChanges = update.changedRanges;\n        let heightChanges = ChangedRange.extendWithRanges(contentChanges, heightRelevantDecoChanges(prevDeco, this.stateDeco, update ? update.changes : ChangeSet.empty(this.state.doc.length)));\n        let prevHeight = this.heightMap.height;\n        let scrollAnchor = this.scrolledToBottom ? null : this.scrollAnchorAt(this.scrollTop);\n        this.heightMap = this.heightMap.applyChanges(this.stateDeco, update.startState.doc, this.heightOracle.setDoc(this.state.doc), heightChanges);\n        if (this.heightMap.height != prevHeight)\n            update.flags |= 2 /* UpdateFlag.Height */;\n        if (scrollAnchor) {\n            this.scrollAnchorPos = update.changes.mapPos(scrollAnchor.from, -1);\n            this.scrollAnchorHeight = scrollAnchor.top;\n        }\n        else {\n            this.scrollAnchorPos = -1;\n            this.scrollAnchorHeight = this.heightMap.height;\n        }\n        let viewport = heightChanges.length ? this.mapViewport(this.viewport, update.changes) : this.viewport;\n        if (scrollTarget && (scrollTarget.range.head < viewport.from || scrollTarget.range.head > viewport.to) ||\n            !this.viewportIsAppropriate(viewport))\n            viewport = this.getViewport(0, scrollTarget);\n        let updateLines = !update.changes.empty || (update.flags & 2 /* UpdateFlag.Height */) ||\n            viewport.from != this.viewport.from || viewport.to != this.viewport.to;\n        this.viewport = viewport;\n        this.updateForViewport();\n        if (updateLines)\n            this.updateViewportLines();\n        if (this.lineGaps.length || this.viewport.to - this.viewport.from > (2000 /* LG.Margin */ << 1))\n            this.updateLineGaps(this.ensureLineGaps(this.mapLineGaps(this.lineGaps, update.changes)));\n        update.flags |= this.computeVisibleRanges();\n        if (scrollTarget)\n            this.scrollTarget = scrollTarget;\n        if (!this.mustEnforceCursorAssoc && update.selectionSet && update.view.lineWrapping &&\n            update.state.selection.main.empty && update.state.selection.main.assoc &&\n            !update.state.facet(nativeSelectionHidden))\n            this.mustEnforceCursorAssoc = true;\n    }\n    measure(view) {\n        let dom = view.contentDOM, style = window.getComputedStyle(dom);\n        let oracle = this.heightOracle;\n        let whiteSpace = style.whiteSpace;\n        this.defaultTextDirection = style.direction == \"rtl\" ? Direction.RTL : Direction.LTR;\n        let refresh = this.heightOracle.mustRefreshForWrapping(whiteSpace);\n        let domRect = dom.getBoundingClientRect();\n        let measureContent = refresh || this.mustMeasureContent || this.contentDOMHeight != domRect.height;\n        this.contentDOMHeight = domRect.height;\n        this.mustMeasureContent = false;\n        let result = 0, bias = 0;\n        if (domRect.width && domRect.height) {\n            let scaleX = domRect.width / dom.offsetWidth;\n            let scaleY = domRect.height / dom.offsetHeight;\n            if (scaleX > 0.995 && scaleX < 1.005 || !isFinite(scaleX) || Math.abs(domRect.width - dom.offsetWidth) < 1)\n                scaleX = 1;\n            if (scaleY > 0.995 && scaleY < 1.005 || !isFinite(scaleY) || Math.abs(domRect.height - dom.offsetHeight) < 1)\n                scaleY = 1;\n            if (this.scaleX != scaleX || this.scaleY != scaleY) {\n                this.scaleX = scaleX;\n                this.scaleY = scaleY;\n                result |= 8 /* UpdateFlag.Geometry */;\n                refresh = measureContent = true;\n            }\n        }\n        // Vertical padding\n        let paddingTop = (parseInt(style.paddingTop) || 0) * this.scaleY;\n        let paddingBottom = (parseInt(style.paddingBottom) || 0) * this.scaleY;\n        if (this.paddingTop != paddingTop || this.paddingBottom != paddingBottom) {\n            this.paddingTop = paddingTop;\n            this.paddingBottom = paddingBottom;\n            result |= 8 /* UpdateFlag.Geometry */ | 2 /* UpdateFlag.Height */;\n        }\n        if (this.editorWidth != view.scrollDOM.clientWidth) {\n            if (oracle.lineWrapping)\n                measureContent = true;\n            this.editorWidth = view.scrollDOM.clientWidth;\n            result |= 8 /* UpdateFlag.Geometry */;\n        }\n        let scrollTop = view.scrollDOM.scrollTop * this.scaleY;\n        if (this.scrollTop != scrollTop) {\n            this.scrollAnchorHeight = -1;\n            this.scrollTop = scrollTop;\n        }\n        this.scrolledToBottom = isScrolledToBottom(view.scrollDOM);\n        // Pixel viewport\n        let pixelViewport = (this.printing ? fullPixelRange : visiblePixelRange)(dom, this.paddingTop);\n        let dTop = pixelViewport.top - this.pixelViewport.top, dBottom = pixelViewport.bottom - this.pixelViewport.bottom;\n        this.pixelViewport = pixelViewport;\n        let inView = this.pixelViewport.bottom > this.pixelViewport.top && this.pixelViewport.right > this.pixelViewport.left;\n        if (inView != this.inView) {\n            this.inView = inView;\n            if (inView)\n                measureContent = true;\n        }\n        if (!this.inView && !this.scrollTarget)\n            return 0;\n        let contentWidth = domRect.width;\n        if (this.contentDOMWidth != contentWidth || this.editorHeight != view.scrollDOM.clientHeight) {\n            this.contentDOMWidth = domRect.width;\n            this.editorHeight = view.scrollDOM.clientHeight;\n            result |= 8 /* UpdateFlag.Geometry */;\n        }\n        if (measureContent) {\n            let lineHeights = view.docView.measureVisibleLineHeights(this.viewport);\n            if (oracle.mustRefreshForHeights(lineHeights))\n                refresh = true;\n            if (refresh || oracle.lineWrapping && Math.abs(contentWidth - this.contentDOMWidth) > oracle.charWidth) {\n                let { lineHeight, charWidth, textHeight } = view.docView.measureTextSize();\n                refresh = lineHeight > 0 && oracle.refresh(whiteSpace, lineHeight, charWidth, textHeight, contentWidth / charWidth, lineHeights);\n                if (refresh) {\n                    view.docView.minWidth = 0;\n                    result |= 8 /* UpdateFlag.Geometry */;\n                }\n            }\n            if (dTop > 0 && dBottom > 0)\n                bias = Math.max(dTop, dBottom);\n            else if (dTop < 0 && dBottom < 0)\n                bias = Math.min(dTop, dBottom);\n            oracle.heightChanged = false;\n            for (let vp of this.viewports) {\n                let heights = vp.from == this.viewport.from ? lineHeights : view.docView.measureVisibleLineHeights(vp);\n                this.heightMap = (refresh ? HeightMap.empty().applyChanges(this.stateDeco, Text.empty, this.heightOracle, [new ChangedRange(0, 0, 0, view.state.doc.length)]) : this.heightMap).updateHeight(oracle, 0, refresh, new MeasuredHeights(vp.from, heights));\n            }\n            if (oracle.heightChanged)\n                result |= 2 /* UpdateFlag.Height */;\n        }\n        let viewportChange = !this.viewportIsAppropriate(this.viewport, bias) ||\n            this.scrollTarget && (this.scrollTarget.range.head < this.viewport.from ||\n                this.scrollTarget.range.head > this.viewport.to);\n        if (viewportChange)\n            this.viewport = this.getViewport(bias, this.scrollTarget);\n        this.updateForViewport();\n        if ((result & 2 /* UpdateFlag.Height */) || viewportChange)\n            this.updateViewportLines();\n        if (this.lineGaps.length || this.viewport.to - this.viewport.from > (2000 /* LG.Margin */ << 1))\n            this.updateLineGaps(this.ensureLineGaps(refresh ? [] : this.lineGaps, view));\n        result |= this.computeVisibleRanges();\n        if (this.mustEnforceCursorAssoc) {\n            this.mustEnforceCursorAssoc = false;\n            // This is done in the read stage, because moving the selection\n            // to a line end is going to trigger a layout anyway, so it\n            // can't be a pure write. It should be rare that it does any\n            // writing.\n            view.docView.enforceCursorAssoc();\n        }\n        return result;\n    }\n    get visibleTop() { return this.scaler.fromDOM(this.pixelViewport.top); }\n    get visibleBottom() { return this.scaler.fromDOM(this.pixelViewport.bottom); }\n    getViewport(bias, scrollTarget) {\n        // This will divide VP.Margin between the top and the\n        // bottom, depending on the bias (the change in viewport position\n        // since the last update). It'll hold a number between 0 and 1\n        let marginTop = 0.5 - Math.max(-0.5, Math.min(0.5, bias / 1000 /* VP.Margin */ / 2));\n        let map = this.heightMap, oracle = this.heightOracle;\n        let { visibleTop, visibleBottom } = this;\n        let viewport = new Viewport(map.lineAt(visibleTop - marginTop * 1000 /* VP.Margin */, QueryType.ByHeight, oracle, 0, 0).from, map.lineAt(visibleBottom + (1 - marginTop) * 1000 /* VP.Margin */, QueryType.ByHeight, oracle, 0, 0).to);\n        // If scrollTarget is given, make sure the viewport includes that position\n        if (scrollTarget) {\n            let { head } = scrollTarget.range;\n            if (head < viewport.from || head > viewport.to) {\n                let viewHeight = Math.min(this.editorHeight, this.pixelViewport.bottom - this.pixelViewport.top);\n                let block = map.lineAt(head, QueryType.ByPos, oracle, 0, 0), topPos;\n                if (scrollTarget.y == \"center\")\n                    topPos = (block.top + block.bottom) / 2 - viewHeight / 2;\n                else if (scrollTarget.y == \"start\" || scrollTarget.y == \"nearest\" && head < viewport.from)\n                    topPos = block.top;\n                else\n                    topPos = block.bottom - viewHeight;\n                viewport = new Viewport(map.lineAt(topPos - 1000 /* VP.Margin */ / 2, QueryType.ByHeight, oracle, 0, 0).from, map.lineAt(topPos + viewHeight + 1000 /* VP.Margin */ / 2, QueryType.ByHeight, oracle, 0, 0).to);\n            }\n        }\n        return viewport;\n    }\n    mapViewport(viewport, changes) {\n        let from = changes.mapPos(viewport.from, -1), to = changes.mapPos(viewport.to, 1);\n        return new Viewport(this.heightMap.lineAt(from, QueryType.ByPos, this.heightOracle, 0, 0).from, this.heightMap.lineAt(to, QueryType.ByPos, this.heightOracle, 0, 0).to);\n    }\n    // Checks if a given viewport covers the visible part of the\n    // document and not too much beyond that.\n    viewportIsAppropriate({ from, to }, bias = 0) {\n        if (!this.inView)\n            return true;\n        let { top } = this.heightMap.lineAt(from, QueryType.ByPos, this.heightOracle, 0, 0);\n        let { bottom } = this.heightMap.lineAt(to, QueryType.ByPos, this.heightOracle, 0, 0);\n        let { visibleTop, visibleBottom } = this;\n        return (from == 0 || top <= visibleTop - Math.max(10 /* VP.MinCoverMargin */, Math.min(-bias, 250 /* VP.MaxCoverMargin */))) &&\n            (to == this.state.doc.length ||\n                bottom >= visibleBottom + Math.max(10 /* VP.MinCoverMargin */, Math.min(bias, 250 /* VP.MaxCoverMargin */))) &&\n            (top > visibleTop - 2 * 1000 /* VP.Margin */ && bottom < visibleBottom + 2 * 1000 /* VP.Margin */);\n    }\n    mapLineGaps(gaps, changes) {\n        if (!gaps.length || changes.empty)\n            return gaps;\n        let mapped = [];\n        for (let gap of gaps)\n            if (!changes.touchesRange(gap.from, gap.to))\n                mapped.push(new LineGap(changes.mapPos(gap.from), changes.mapPos(gap.to), gap.size));\n        return mapped;\n    }\n    // Computes positions in the viewport where the start or end of a\n    // line should be hidden, trying to reuse existing line gaps when\n    // appropriate to avoid unneccesary redraws.\n    // Uses crude character-counting for the positioning and sizing,\n    // since actual DOM coordinates aren't always available and\n    // predictable. Relies on generous margins (see LG.Margin) to hide\n    // the artifacts this might produce from the user.\n    ensureLineGaps(current, mayMeasure) {\n        let wrapping = this.heightOracle.lineWrapping;\n        let margin = wrapping ? 10000 /* LG.MarginWrap */ : 2000 /* LG.Margin */, halfMargin = margin >> 1, doubleMargin = margin << 1;\n        // The non-wrapping logic won't work at all in predominantly right-to-left text.\n        if (this.defaultTextDirection != Direction.LTR && !wrapping)\n            return [];\n        let gaps = [];\n        let addGap = (from, to, line, structure) => {\n            if (to - from < halfMargin)\n                return;\n            let sel = this.state.selection.main, avoid = [sel.from];\n            if (!sel.empty)\n                avoid.push(sel.to);\n            for (let pos of avoid) {\n                if (pos > from && pos < to) {\n                    addGap(from, pos - 10 /* LG.SelectionMargin */, line, structure);\n                    addGap(pos + 10 /* LG.SelectionMargin */, to, line, structure);\n                    return;\n                }\n            }\n            let gap = find(current, gap => gap.from >= line.from && gap.to <= line.to &&\n                Math.abs(gap.from - from) < halfMargin && Math.abs(gap.to - to) < halfMargin &&\n                !avoid.some(pos => gap.from < pos && gap.to > pos));\n            if (!gap) {\n                // When scrolling down, snap gap ends to line starts to avoid shifts in wrapping\n                if (to < line.to && mayMeasure && wrapping &&\n                    mayMeasure.visibleRanges.some(r => r.from <= to && r.to >= to)) {\n                    let lineStart = mayMeasure.moveToLineBoundary(EditorSelection.cursor(to), false, true).head;\n                    if (lineStart > from)\n                        to = lineStart;\n                }\n                gap = new LineGap(from, to, this.gapSize(line, from, to, structure));\n            }\n            gaps.push(gap);\n        };\n        for (let line of this.viewportLines) {\n            if (line.length < doubleMargin)\n                continue;\n            let structure = lineStructure(line.from, line.to, this.stateDeco);\n            if (structure.total < doubleMargin)\n                continue;\n            let target = this.scrollTarget ? this.scrollTarget.range.head : null;\n            let viewFrom, viewTo;\n            if (wrapping) {\n                let marginHeight = (margin / this.heightOracle.lineLength) * this.heightOracle.lineHeight;\n                let top, bot;\n                if (target != null) {\n                    let targetFrac = findFraction(structure, target);\n                    let spaceFrac = ((this.visibleBottom - this.visibleTop) / 2 + marginHeight) / line.height;\n                    top = targetFrac - spaceFrac;\n                    bot = targetFrac + spaceFrac;\n                }\n                else {\n                    top = (this.visibleTop - line.top - marginHeight) / line.height;\n                    bot = (this.visibleBottom - line.top + marginHeight) / line.height;\n                }\n                viewFrom = findPosition(structure, top);\n                viewTo = findPosition(structure, bot);\n            }\n            else {\n                let totalWidth = structure.total * this.heightOracle.charWidth;\n                let marginWidth = margin * this.heightOracle.charWidth;\n                let left, right;\n                if (target != null) {\n                    let targetFrac = findFraction(structure, target);\n                    let spaceFrac = ((this.pixelViewport.right - this.pixelViewport.left) / 2 + marginWidth) / totalWidth;\n                    left = targetFrac - spaceFrac;\n                    right = targetFrac + spaceFrac;\n                }\n                else {\n                    left = (this.pixelViewport.left - marginWidth) / totalWidth;\n                    right = (this.pixelViewport.right + marginWidth) / totalWidth;\n                }\n                viewFrom = findPosition(structure, left);\n                viewTo = findPosition(structure, right);\n            }\n            if (viewFrom > line.from)\n                addGap(line.from, viewFrom, line, structure);\n            if (viewTo < line.to)\n                addGap(viewTo, line.to, line, structure);\n        }\n        return gaps;\n    }\n    gapSize(line, from, to, structure) {\n        let fraction = findFraction(structure, to) - findFraction(structure, from);\n        if (this.heightOracle.lineWrapping) {\n            return line.height * fraction;\n        }\n        else {\n            return structure.total * this.heightOracle.charWidth * fraction;\n        }\n    }\n    updateLineGaps(gaps) {\n        if (!LineGap.same(gaps, this.lineGaps)) {\n            this.lineGaps = gaps;\n            this.lineGapDeco = Decoration.set(gaps.map(gap => gap.draw(this, this.heightOracle.lineWrapping)));\n        }\n    }\n    computeVisibleRanges() {\n        let deco = this.stateDeco;\n        if (this.lineGaps.length)\n            deco = deco.concat(this.lineGapDeco);\n        let ranges = [];\n        RangeSet.spans(deco, this.viewport.from, this.viewport.to, {\n            span(from, to) { ranges.push({ from, to }); },\n            point() { }\n        }, 20);\n        let changed = ranges.length != this.visibleRanges.length ||\n            this.visibleRanges.some((r, i) => r.from != ranges[i].from || r.to != ranges[i].to);\n        this.visibleRanges = ranges;\n        return changed ? 4 /* UpdateFlag.Viewport */ : 0;\n    }\n    lineBlockAt(pos) {\n        return (pos >= this.viewport.from && pos <= this.viewport.to && this.viewportLines.find(b => b.from <= pos && b.to >= pos)) ||\n            scaleBlock(this.heightMap.lineAt(pos, QueryType.ByPos, this.heightOracle, 0, 0), this.scaler);\n    }\n    lineBlockAtHeight(height) {\n        return scaleBlock(this.heightMap.lineAt(this.scaler.fromDOM(height), QueryType.ByHeight, this.heightOracle, 0, 0), this.scaler);\n    }\n    scrollAnchorAt(scrollTop) {\n        let block = this.lineBlockAtHeight(scrollTop + 8);\n        return block.from >= this.viewport.from || this.viewportLines[0].top - scrollTop > 200 ? block : this.viewportLines[0];\n    }\n    elementAtHeight(height) {\n        return scaleBlock(this.heightMap.blockAt(this.scaler.fromDOM(height), this.heightOracle, 0, 0), this.scaler);\n    }\n    get docHeight() {\n        return this.scaler.toDOM(this.heightMap.height);\n    }\n    get contentHeight() {\n        return this.docHeight + this.paddingTop + this.paddingBottom;\n    }\n}\nclass Viewport {\n    constructor(from, to) {\n        this.from = from;\n        this.to = to;\n    }\n}\nfunction lineStructure(from, to, stateDeco) {\n    let ranges = [], pos = from, total = 0;\n    RangeSet.spans(stateDeco, from, to, {\n        span() { },\n        point(from, to) {\n            if (from > pos) {\n                ranges.push({ from: pos, to: from });\n                total += from - pos;\n            }\n            pos = to;\n        }\n    }, 20); // We're only interested in collapsed ranges of a significant size\n    if (pos < to) {\n        ranges.push({ from: pos, to });\n        total += to - pos;\n    }\n    return { total, ranges };\n}\nfunction findPosition({ total, ranges }, ratio) {\n    if (ratio <= 0)\n        return ranges[0].from;\n    if (ratio >= 1)\n        return ranges[ranges.length - 1].to;\n    let dist = Math.floor(total * ratio);\n    for (let i = 0;; i++) {\n        let { from, to } = ranges[i], size = to - from;\n        if (dist <= size)\n            return from + dist;\n        dist -= size;\n    }\n}\nfunction findFraction(structure, pos) {\n    let counted = 0;\n    for (let { from, to } of structure.ranges) {\n        if (pos <= to) {\n            counted += pos - from;\n            break;\n        }\n        counted += to - from;\n    }\n    return counted / structure.total;\n}\nfunction find(array, f) {\n    for (let val of array)\n        if (f(val))\n            return val;\n    return undefined;\n}\n// Don't scale when the document height is within the range of what\n// the DOM can handle.\nconst IdScaler = {\n    toDOM(n) { return n; },\n    fromDOM(n) { return n; },\n    scale: 1\n};\n// When the height is too big (> VP.MaxDOMHeight), scale down the\n// regions outside the viewports so that the total height is\n// VP.MaxDOMHeight.\nclass BigScaler {\n    constructor(oracle, heightMap, viewports) {\n        let vpHeight = 0, base = 0, domBase = 0;\n        this.viewports = viewports.map(({ from, to }) => {\n            let top = heightMap.lineAt(from, QueryType.ByPos, oracle, 0, 0).top;\n            let bottom = heightMap.lineAt(to, QueryType.ByPos, oracle, 0, 0).bottom;\n            vpHeight += bottom - top;\n            return { from, to, top, bottom, domTop: 0, domBottom: 0 };\n        });\n        this.scale = (7000000 /* VP.MaxDOMHeight */ - vpHeight) / (heightMap.height - vpHeight);\n        for (let obj of this.viewports) {\n            obj.domTop = domBase + (obj.top - base) * this.scale;\n            domBase = obj.domBottom = obj.domTop + (obj.bottom - obj.top);\n            base = obj.bottom;\n        }\n    }\n    toDOM(n) {\n        for (let i = 0, base = 0, domBase = 0;; i++) {\n            let vp = i < this.viewports.length ? this.viewports[i] : null;\n            if (!vp || n < vp.top)\n                return domBase + (n - base) * this.scale;\n            if (n <= vp.bottom)\n                return vp.domTop + (n - vp.top);\n            base = vp.bottom;\n            domBase = vp.domBottom;\n        }\n    }\n    fromDOM(n) {\n        for (let i = 0, base = 0, domBase = 0;; i++) {\n            let vp = i < this.viewports.length ? this.viewports[i] : null;\n            if (!vp || n < vp.domTop)\n                return base + (n - domBase) / this.scale;\n            if (n <= vp.domBottom)\n                return vp.top + (n - vp.domTop);\n            base = vp.bottom;\n            domBase = vp.domBottom;\n        }\n    }\n}\nfunction scaleBlock(block, scaler) {\n    if (scaler.scale == 1)\n        return block;\n    let bTop = scaler.toDOM(block.top), bBottom = scaler.toDOM(block.bottom);\n    return new BlockInfo(block.from, block.length, bTop, bBottom - bTop, Array.isArray(block._content) ? block._content.map(b => scaleBlock(b, scaler)) : block._content);\n}\n\nconst theme = /*@__PURE__*/Facet.define({ combine: strs => strs.join(\" \") });\nconst darkTheme = /*@__PURE__*/Facet.define({ combine: values => values.indexOf(true) > -1 });\nconst baseThemeID = /*@__PURE__*/StyleModule.newName(), baseLightID = /*@__PURE__*/StyleModule.newName(), baseDarkID = /*@__PURE__*/StyleModule.newName();\nconst lightDarkIDs = { \"&light\": \".\" + baseLightID, \"&dark\": \".\" + baseDarkID };\nfunction buildTheme(main, spec, scopes) {\n    return new StyleModule(spec, {\n        finish(sel) {\n            return /&/.test(sel) ? sel.replace(/&\\w*/, m => {\n                if (m == \"&\")\n                    return main;\n                if (!scopes || !scopes[m])\n                    throw new RangeError(`Unsupported selector: ${m}`);\n                return scopes[m];\n            }) : main + \" \" + sel;\n        }\n    });\n}\nconst baseTheme$1 = /*@__PURE__*/buildTheme(\".\" + baseThemeID, {\n    \"&\": {\n        position: \"relative !important\",\n        boxSizing: \"border-box\",\n        \"&.cm-focused\": {\n            // Provide a simple default outline to make sure a focused\n            // editor is visually distinct. Can't leave the default behavior\n            // because that will apply to the content element, which is\n            // inside the scrollable container and doesn't include the\n            // gutters. We also can't use an 'auto' outline, since those\n            // are, for some reason, drawn behind the element content, which\n            // will cause things like the active line background to cover\n            // the outline (#297).\n            outline: \"1px dotted #212121\"\n        },\n        display: \"flex !important\",\n        flexDirection: \"column\"\n    },\n    \".cm-scroller\": {\n        display: \"flex !important\",\n        alignItems: \"flex-start !important\",\n        fontFamily: \"monospace\",\n        lineHeight: 1.4,\n        height: \"100%\",\n        overflowX: \"auto\",\n        position: \"relative\",\n        zIndex: 0\n    },\n    \".cm-content\": {\n        margin: 0,\n        flexGrow: 2,\n        flexShrink: 0,\n        display: \"block\",\n        whiteSpace: \"pre\",\n        wordWrap: \"normal\",\n        boxSizing: \"border-box\",\n        minHeight: \"100%\",\n        padding: \"4px 0\",\n        outline: \"none\",\n        \"&[contenteditable=true]\": {\n            WebkitUserModify: \"read-write-plaintext-only\",\n        }\n    },\n    \".cm-lineWrapping\": {\n        whiteSpace_fallback: \"pre-wrap\",\n        whiteSpace: \"break-spaces\",\n        wordBreak: \"break-word\",\n        overflowWrap: \"anywhere\",\n        flexShrink: 1\n    },\n    \"&light .cm-content\": { caretColor: \"black\" },\n    \"&dark .cm-content\": { caretColor: \"white\" },\n    \".cm-line\": {\n        display: \"block\",\n        padding: \"0 2px 0 6px\"\n    },\n    \".cm-layer\": {\n        position: \"absolute\",\n        left: 0,\n        top: 0,\n        contain: \"size style\",\n        \"& > *\": {\n            position: \"absolute\"\n        }\n    },\n    \"&light .cm-selectionBackground\": {\n        background: \"#d9d9d9\"\n    },\n    \"&dark .cm-selectionBackground\": {\n        background: \"#222\"\n    },\n    \"&light.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground\": {\n        background: \"#d7d4f0\"\n    },\n    \"&dark.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground\": {\n        background: \"#233\"\n    },\n    \".cm-cursorLayer\": {\n        pointerEvents: \"none\"\n    },\n    \"&.cm-focused > .cm-scroller > .cm-cursorLayer\": {\n        animation: \"steps(1) cm-blink 1.2s infinite\"\n    },\n    // Two animations defined so that we can switch between them to\n    // restart the animation without forcing another style\n    // recomputation.\n    \"@keyframes cm-blink\": { \"0%\": {}, \"50%\": { opacity: 0 }, \"100%\": {} },\n    \"@keyframes cm-blink2\": { \"0%\": {}, \"50%\": { opacity: 0 }, \"100%\": {} },\n    \".cm-cursor, .cm-dropCursor\": {\n        borderLeft: \"1.2px solid black\",\n        marginLeft: \"-0.6px\",\n        pointerEvents: \"none\",\n    },\n    \".cm-cursor\": {\n        display: \"none\"\n    },\n    \"&dark .cm-cursor\": {\n        borderLeftColor: \"#444\"\n    },\n    \".cm-dropCursor\": {\n        position: \"absolute\"\n    },\n    \"&.cm-focused > .cm-scroller > .cm-cursorLayer .cm-cursor\": {\n        display: \"block\"\n    },\n    \"&light .cm-activeLine\": { backgroundColor: \"#cceeff44\" },\n    \"&dark .cm-activeLine\": { backgroundColor: \"#99eeff33\" },\n    \"&light .cm-specialChar\": { color: \"red\" },\n    \"&dark .cm-specialChar\": { color: \"#f78\" },\n    \".cm-gutters\": {\n        flexShrink: 0,\n        display: \"flex\",\n        height: \"100%\",\n        boxSizing: \"border-box\",\n        insetInlineStart: 0,\n        zIndex: 200\n    },\n    \"&light .cm-gutters\": {\n        backgroundColor: \"#f5f5f5\",\n        color: \"#6c6c6c\",\n        borderRight: \"1px solid #ddd\"\n    },\n    \"&dark .cm-gutters\": {\n        backgroundColor: \"#333338\",\n        color: \"#ccc\"\n    },\n    \".cm-gutter\": {\n        display: \"flex !important\",\n        flexDirection: \"column\",\n        flexShrink: 0,\n        boxSizing: \"border-box\",\n        minHeight: \"100%\",\n        overflow: \"hidden\"\n    },\n    \".cm-gutterElement\": {\n        boxSizing: \"border-box\"\n    },\n    \".cm-lineNumbers .cm-gutterElement\": {\n        padding: \"0 3px 0 5px\",\n        minWidth: \"20px\",\n        textAlign: \"right\",\n        whiteSpace: \"nowrap\"\n    },\n    \"&light .cm-activeLineGutter\": {\n        backgroundColor: \"#e2f2ff\"\n    },\n    \"&dark .cm-activeLineGutter\": {\n        backgroundColor: \"#222227\"\n    },\n    \".cm-panels\": {\n        boxSizing: \"border-box\",\n        position: \"sticky\",\n        left: 0,\n        right: 0\n    },\n    \"&light .cm-panels\": {\n        backgroundColor: \"#f5f5f5\",\n        color: \"black\"\n    },\n    \"&light .cm-panels-top\": {\n        borderBottom: \"1px solid #ddd\"\n    },\n    \"&light .cm-panels-bottom\": {\n        borderTop: \"1px solid #ddd\"\n    },\n    \"&dark .cm-panels\": {\n        backgroundColor: \"#333338\",\n        color: \"white\"\n    },\n    \".cm-tab\": {\n        display: \"inline-block\",\n        overflow: \"hidden\",\n        verticalAlign: \"bottom\"\n    },\n    \".cm-widgetBuffer\": {\n        verticalAlign: \"text-top\",\n        height: \"1em\",\n        width: 0,\n        display: \"inline\"\n    },\n    \".cm-placeholder\": {\n        color: \"#888\",\n        display: \"inline-block\",\n        verticalAlign: \"top\",\n    },\n    \".cm-highlightSpace:before\": {\n        content: \"attr(data-display)\",\n        position: \"absolute\",\n        pointerEvents: \"none\",\n        color: \"#888\"\n    },\n    \".cm-highlightTab\": {\n        backgroundImage: `url('data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"200\" height=\"20\"><path stroke=\"%23888\" stroke-width=\"1\" fill=\"none\" d=\"M1 10H196L190 5M190 15L196 10M197 4L197 16\"/></svg>')`,\n        backgroundSize: \"auto 100%\",\n        backgroundPosition: \"right 90%\",\n        backgroundRepeat: \"no-repeat\"\n    },\n    \".cm-trailingSpace\": {\n        backgroundColor: \"#ff332255\"\n    },\n    \".cm-button\": {\n        verticalAlign: \"middle\",\n        color: \"inherit\",\n        fontSize: \"70%\",\n        padding: \".2em 1em\",\n        borderRadius: \"1px\"\n    },\n    \"&light .cm-button\": {\n        backgroundImage: \"linear-gradient(#eff1f5, #d9d9df)\",\n        border: \"1px solid #888\",\n        \"&:active\": {\n            backgroundImage: \"linear-gradient(#b4b4b4, #d0d3d6)\"\n        }\n    },\n    \"&dark .cm-button\": {\n        backgroundImage: \"linear-gradient(#393939, #111)\",\n        border: \"1px solid #888\",\n        \"&:active\": {\n            backgroundImage: \"linear-gradient(#111, #333)\"\n        }\n    },\n    \".cm-textfield\": {\n        verticalAlign: \"middle\",\n        color: \"inherit\",\n        fontSize: \"70%\",\n        border: \"1px solid silver\",\n        padding: \".2em .5em\"\n    },\n    \"&light .cm-textfield\": {\n        backgroundColor: \"white\"\n    },\n    \"&dark .cm-textfield\": {\n        border: \"1px solid #555\",\n        backgroundColor: \"inherit\"\n    }\n}, lightDarkIDs);\n\nconst LineBreakPlaceholder = \"\\uffff\";\nclass DOMReader {\n    constructor(points, state) {\n        this.points = points;\n        this.text = \"\";\n        this.lineSeparator = state.facet(EditorState.lineSeparator);\n    }\n    append(text) {\n        this.text += text;\n    }\n    lineBreak() {\n        this.text += LineBreakPlaceholder;\n    }\n    readRange(start, end) {\n        if (!start)\n            return this;\n        let parent = start.parentNode;\n        for (let cur = start;;) {\n            this.findPointBefore(parent, cur);\n            let oldLen = this.text.length;\n            this.readNode(cur);\n            let next = cur.nextSibling;\n            if (next == end)\n                break;\n            let view = ContentView.get(cur), nextView = ContentView.get(next);\n            if (view && nextView ? view.breakAfter :\n                (view ? view.breakAfter : isBlockElement(cur)) ||\n                    (isBlockElement(next) && (cur.nodeName != \"BR\" || cur.cmIgnore) && this.text.length > oldLen))\n                this.lineBreak();\n            cur = next;\n        }\n        this.findPointBefore(parent, end);\n        return this;\n    }\n    readTextNode(node) {\n        let text = node.nodeValue;\n        for (let point of this.points)\n            if (point.node == node)\n                point.pos = this.text.length + Math.min(point.offset, text.length);\n        for (let off = 0, re = this.lineSeparator ? null : /\\r\\n?|\\n/g;;) {\n            let nextBreak = -1, breakSize = 1, m;\n            if (this.lineSeparator) {\n                nextBreak = text.indexOf(this.lineSeparator, off);\n                breakSize = this.lineSeparator.length;\n            }\n            else if (m = re.exec(text)) {\n                nextBreak = m.index;\n                breakSize = m[0].length;\n            }\n            this.append(text.slice(off, nextBreak < 0 ? text.length : nextBreak));\n            if (nextBreak < 0)\n                break;\n            this.lineBreak();\n            if (breakSize > 1)\n                for (let point of this.points)\n                    if (point.node == node && point.pos > this.text.length)\n                        point.pos -= breakSize - 1;\n            off = nextBreak + breakSize;\n        }\n    }\n    readNode(node) {\n        if (node.cmIgnore)\n            return;\n        let view = ContentView.get(node);\n        let fromView = view && view.overrideDOMText;\n        if (fromView != null) {\n            this.findPointInside(node, fromView.length);\n            for (let i = fromView.iter(); !i.next().done;) {\n                if (i.lineBreak)\n                    this.lineBreak();\n                else\n                    this.append(i.value);\n            }\n        }\n        else if (node.nodeType == 3) {\n            this.readTextNode(node);\n        }\n        else if (node.nodeName == \"BR\") {\n            if (node.nextSibling)\n                this.lineBreak();\n        }\n        else if (node.nodeType == 1) {\n            this.readRange(node.firstChild, null);\n        }\n    }\n    findPointBefore(node, next) {\n        for (let point of this.points)\n            if (point.node == node && node.childNodes[point.offset] == next)\n                point.pos = this.text.length;\n    }\n    findPointInside(node, length) {\n        for (let point of this.points)\n            if (node.nodeType == 3 ? point.node == node : node.contains(point.node))\n                point.pos = this.text.length + (isAtEnd(node, point.node, point.offset) ? length : 0);\n    }\n}\nfunction isAtEnd(parent, node, offset) {\n    for (;;) {\n        if (!node || offset < maxOffset(node))\n            return false;\n        if (node == parent)\n            return true;\n        offset = domIndex(node) + 1;\n        node = node.parentNode;\n    }\n}\nfunction isBlockElement(node) {\n    return node.nodeType == 1 && /^(DIV|P|LI|UL|OL|BLOCKQUOTE|DD|DT|H\\d|SECTION|PRE)$/.test(node.nodeName);\n}\nclass DOMPoint {\n    constructor(node, offset) {\n        this.node = node;\n        this.offset = offset;\n        this.pos = -1;\n    }\n}\n\nclass DOMChange {\n    constructor(view, start, end, typeOver) {\n        this.typeOver = typeOver;\n        this.bounds = null;\n        this.text = \"\";\n        let { impreciseHead: iHead, impreciseAnchor: iAnchor } = view.docView;\n        if (view.state.readOnly && start > -1) {\n            // Ignore changes when the editor is read-only\n            this.newSel = null;\n        }\n        else if (start > -1 && (this.bounds = view.docView.domBoundsAround(start, end, 0))) {\n            let selPoints = iHead || iAnchor ? [] : selectionPoints(view);\n            let reader = new DOMReader(selPoints, view.state);\n            reader.readRange(this.bounds.startDOM, this.bounds.endDOM);\n            this.text = reader.text;\n            this.newSel = selectionFromPoints(selPoints, this.bounds.from);\n        }\n        else {\n            let domSel = view.observer.selectionRange;\n            let head = iHead && iHead.node == domSel.focusNode && iHead.offset == domSel.focusOffset ||\n                !contains(view.contentDOM, domSel.focusNode)\n                ? view.state.selection.main.head\n                : view.docView.posFromDOM(domSel.focusNode, domSel.focusOffset);\n            let anchor = iAnchor && iAnchor.node == domSel.anchorNode && iAnchor.offset == domSel.anchorOffset ||\n                !contains(view.contentDOM, domSel.anchorNode)\n                ? view.state.selection.main.anchor\n                : view.docView.posFromDOM(domSel.anchorNode, domSel.anchorOffset);\n            this.newSel = EditorSelection.single(anchor, head);\n        }\n    }\n}\nfunction applyDOMChange(view, domChange) {\n    let change;\n    let { newSel } = domChange, sel = view.state.selection.main;\n    let lastKey = view.inputState.lastKeyTime > Date.now() - 100 ? view.inputState.lastKeyCode : -1;\n    if (domChange.bounds) {\n        let { from, to } = domChange.bounds;\n        let preferredPos = sel.from, preferredSide = null;\n        // Prefer anchoring to end when Backspace is pressed (or, on\n        // Android, when something was deleted)\n        if (lastKey === 8 || browser.android && domChange.text.length < to - from) {\n            preferredPos = sel.to;\n            preferredSide = \"end\";\n        }\n        let diff = findDiff(view.state.doc.sliceString(from, to, LineBreakPlaceholder), domChange.text, preferredPos - from, preferredSide);\n        if (diff) {\n            // Chrome inserts two newlines when pressing shift-enter at the\n            // end of a line. DomChange drops one of those.\n            if (browser.chrome && lastKey == 13 &&\n                diff.toB == diff.from + 2 && domChange.text.slice(diff.from, diff.toB) == LineBreakPlaceholder + LineBreakPlaceholder)\n                diff.toB--;\n            change = { from: from + diff.from, to: from + diff.toA,\n                insert: Text.of(domChange.text.slice(diff.from, diff.toB).split(LineBreakPlaceholder)) };\n        }\n    }\n    else if (newSel && (!view.hasFocus && view.state.facet(editable) || newSel.main.eq(sel))) {\n        newSel = null;\n    }\n    if (!change && !newSel)\n        return false;\n    if (!change && domChange.typeOver && !sel.empty && newSel && newSel.main.empty) {\n        // Heuristic to notice typing over a selected character\n        change = { from: sel.from, to: sel.to, insert: view.state.doc.slice(sel.from, sel.to) };\n    }\n    else if (change && change.from >= sel.from && change.to <= sel.to &&\n        (change.from != sel.from || change.to != sel.to) &&\n        (sel.to - sel.from) - (change.to - change.from) <= 4) {\n        // If the change is inside the selection and covers most of it,\n        // assume it is a selection replace (with identical characters at\n        // the start/end not included in the diff)\n        change = {\n            from: sel.from, to: sel.to,\n            insert: view.state.doc.slice(sel.from, change.from).append(change.insert).append(view.state.doc.slice(change.to, sel.to))\n        };\n    }\n    else if ((browser.mac || browser.android) && change && change.from == change.to && change.from == sel.head - 1 &&\n        /^\\. ?$/.test(change.insert.toString()) && view.contentDOM.getAttribute(\"autocorrect\") == \"off\") {\n        // Detect insert-period-on-double-space Mac and Android behavior,\n        // and transform it into a regular space insert.\n        if (newSel && change.insert.length == 2)\n            newSel = EditorSelection.single(newSel.main.anchor - 1, newSel.main.head - 1);\n        change = { from: sel.from, to: sel.to, insert: Text.of([\" \"]) };\n    }\n    else if (browser.chrome && change && change.from == change.to && change.from == sel.head &&\n        change.insert.toString() == \"\\n \" && view.lineWrapping) {\n        // In Chrome, if you insert a space at the start of a wrapped\n        // line, it will actually insert a newline and a space, causing a\n        // bogus new line to be created in CodeMirror (#968)\n        if (newSel)\n            newSel = EditorSelection.single(newSel.main.anchor - 1, newSel.main.head - 1);\n        change = { from: sel.from, to: sel.to, insert: Text.of([\" \"]) };\n    }\n    if (change) {\n        if (browser.ios && view.inputState.flushIOSKey())\n            return true;\n        // Android browsers don't fire reasonable key events for enter,\n        // backspace, or delete. So this detects changes that look like\n        // they're caused by those keys, and reinterprets them as key\n        // events. (Some of these keys are also handled by beforeinput\n        // events and the pendingAndroidKey mechanism, but that's not\n        // reliable in all situations.)\n        if (browser.android &&\n            ((change.from == sel.from && change.to == sel.to &&\n                change.insert.length == 1 && change.insert.lines == 2 &&\n                dispatchKey(view.contentDOM, \"Enter\", 13)) ||\n                ((change.from == sel.from - 1 && change.to == sel.to && change.insert.length == 0 ||\n                    lastKey == 8 && change.insert.length < change.to - change.from && change.to > sel.head) &&\n                    dispatchKey(view.contentDOM, \"Backspace\", 8)) ||\n                (change.from == sel.from && change.to == sel.to + 1 && change.insert.length == 0 &&\n                    dispatchKey(view.contentDOM, \"Delete\", 46))))\n            return true;\n        let text = change.insert.toString();\n        if (view.inputState.composing >= 0)\n            view.inputState.composing++;\n        let defaultTr;\n        let defaultInsert = () => defaultTr || (defaultTr = applyDefaultInsert(view, change, newSel));\n        if (!view.state.facet(inputHandler).some(h => h(view, change.from, change.to, text, defaultInsert)))\n            view.dispatch(defaultInsert());\n        return true;\n    }\n    else if (newSel && !newSel.main.eq(sel)) {\n        let scrollIntoView = false, userEvent = \"select\";\n        if (view.inputState.lastSelectionTime > Date.now() - 50) {\n            if (view.inputState.lastSelectionOrigin == \"select\")\n                scrollIntoView = true;\n            userEvent = view.inputState.lastSelectionOrigin;\n        }\n        view.dispatch({ selection: newSel, scrollIntoView, userEvent });\n        return true;\n    }\n    else {\n        return false;\n    }\n}\nfunction applyDefaultInsert(view, change, newSel) {\n    let tr, startState = view.state, sel = startState.selection.main;\n    if (change.from >= sel.from && change.to <= sel.to && change.to - change.from >= (sel.to - sel.from) / 3 &&\n        (!newSel || newSel.main.empty && newSel.main.from == change.from + change.insert.length) &&\n        view.inputState.composing < 0) {\n        let before = sel.from < change.from ? startState.sliceDoc(sel.from, change.from) : \"\";\n        let after = sel.to > change.to ? startState.sliceDoc(change.to, sel.to) : \"\";\n        tr = startState.replaceSelection(view.state.toText(before + change.insert.sliceString(0, undefined, view.state.lineBreak) + after));\n    }\n    else {\n        let changes = startState.changes(change);\n        let mainSel = newSel && newSel.main.to <= changes.newLength ? newSel.main : undefined;\n        // Try to apply a composition change to all cursors\n        if (startState.selection.ranges.length > 1 && view.inputState.composing >= 0 &&\n            change.to <= sel.to && change.to >= sel.to - 10) {\n            let replaced = view.state.sliceDoc(change.from, change.to);\n            let compositionRange, composition = newSel && findCompositionNode(view, newSel.main.head);\n            if (composition) {\n                let dLen = change.insert.length - (change.to - change.from);\n                compositionRange = { from: composition.from, to: composition.to - dLen };\n            }\n            else {\n                compositionRange = view.state.doc.lineAt(sel.head);\n            }\n            let offset = sel.to - change.to, size = sel.to - sel.from;\n            tr = startState.changeByRange(range => {\n                if (range.from == sel.from && range.to == sel.to)\n                    return { changes, range: mainSel || range.map(changes) };\n                let to = range.to - offset, from = to - replaced.length;\n                if (range.to - range.from != size || view.state.sliceDoc(from, to) != replaced ||\n                    // Unfortunately, there's no way to make multiple\n                    // changes in the same node work without aborting\n                    // composition, so cursors in the composition range are\n                    // ignored.\n                    range.to >= compositionRange.from && range.from <= compositionRange.to)\n                    return { range };\n                let rangeChanges = startState.changes({ from, to, insert: change.insert }), selOff = range.to - sel.to;\n                return {\n                    changes: rangeChanges,\n                    range: !mainSel ? range.map(rangeChanges) :\n                        EditorSelection.range(Math.max(0, mainSel.anchor + selOff), Math.max(0, mainSel.head + selOff))\n                };\n            });\n        }\n        else {\n            tr = {\n                changes,\n                selection: mainSel && startState.selection.replaceRange(mainSel)\n            };\n        }\n    }\n    let userEvent = \"input.type\";\n    if (view.composing ||\n        view.inputState.compositionPendingChange && view.inputState.compositionEndedAt > Date.now() - 50) {\n        view.inputState.compositionPendingChange = false;\n        userEvent += \".compose\";\n        if (view.inputState.compositionFirstChange) {\n            userEvent += \".start\";\n            view.inputState.compositionFirstChange = false;\n        }\n    }\n    return startState.update(tr, { userEvent, scrollIntoView: true });\n}\nfunction findDiff(a, b, preferredPos, preferredSide) {\n    let minLen = Math.min(a.length, b.length);\n    let from = 0;\n    while (from < minLen && a.charCodeAt(from) == b.charCodeAt(from))\n        from++;\n    if (from == minLen && a.length == b.length)\n        return null;\n    let toA = a.length, toB = b.length;\n    while (toA > 0 && toB > 0 && a.charCodeAt(toA - 1) == b.charCodeAt(toB - 1)) {\n        toA--;\n        toB--;\n    }\n    if (preferredSide == \"end\") {\n        let adjust = Math.max(0, from - Math.min(toA, toB));\n        preferredPos -= toA + adjust - from;\n    }\n    if (toA < from && a.length < b.length) {\n        let move = preferredPos <= from && preferredPos >= toA ? from - preferredPos : 0;\n        from -= move;\n        toB = from + (toB - toA);\n        toA = from;\n    }\n    else if (toB < from) {\n        let move = preferredPos <= from && preferredPos >= toB ? from - preferredPos : 0;\n        from -= move;\n        toA = from + (toA - toB);\n        toB = from;\n    }\n    return { from, toA, toB };\n}\nfunction selectionPoints(view) {\n    let result = [];\n    if (view.root.activeElement != view.contentDOM)\n        return result;\n    let { anchorNode, anchorOffset, focusNode, focusOffset } = view.observer.selectionRange;\n    if (anchorNode) {\n        result.push(new DOMPoint(anchorNode, anchorOffset));\n        if (focusNode != anchorNode || focusOffset != anchorOffset)\n            result.push(new DOMPoint(focusNode, focusOffset));\n    }\n    return result;\n}\nfunction selectionFromPoints(points, base) {\n    if (points.length == 0)\n        return null;\n    let anchor = points[0].pos, head = points.length == 2 ? points[1].pos : anchor;\n    return anchor > -1 && head > -1 ? EditorSelection.single(anchor + base, head + base) : null;\n}\n\nconst observeOptions = {\n    childList: true,\n    characterData: true,\n    subtree: true,\n    attributes: true,\n    characterDataOldValue: true\n};\n// IE11 has very broken mutation observers, so we also listen to\n// DOMCharacterDataModified there\nconst useCharData = browser.ie && browser.ie_version <= 11;\nclass DOMObserver {\n    constructor(view) {\n        this.view = view;\n        this.active = false;\n        // The known selection. Kept in our own object, as opposed to just\n        // directly accessing the selection because:\n        //  - Safari doesn't report the right selection in shadow DOM\n        //  - Reading from the selection forces a DOM layout\n        //  - This way, we can ignore selectionchange events if we have\n        //    already seen the 'new' selection\n        this.selectionRange = new DOMSelectionState;\n        // Set when a selection change is detected, cleared on flush\n        this.selectionChanged = false;\n        this.delayedFlush = -1;\n        this.resizeTimeout = -1;\n        this.queue = [];\n        this.delayedAndroidKey = null;\n        this.flushingAndroidKey = -1;\n        this.lastChange = 0;\n        this.scrollTargets = [];\n        this.intersection = null;\n        this.resizeScroll = null;\n        this.intersecting = false;\n        this.gapIntersection = null;\n        this.gaps = [];\n        // Timeout for scheduling check of the parents that need scroll handlers\n        this.parentCheck = -1;\n        this.dom = view.contentDOM;\n        this.observer = new MutationObserver(mutations => {\n            for (let mut of mutations)\n                this.queue.push(mut);\n            // IE11 will sometimes (on typing over a selection or\n            // backspacing out a single character text node) call the\n            // observer callback before actually updating the DOM.\n            //\n            // Unrelatedly, iOS Safari will, when ending a composition,\n            // sometimes first clear it, deliver the mutations, and then\n            // reinsert the finished text. CodeMirror's handling of the\n            // deletion will prevent the reinsertion from happening,\n            // breaking composition.\n            if ((browser.ie && browser.ie_version <= 11 || browser.ios && view.composing) &&\n                mutations.some(m => m.type == \"childList\" && m.removedNodes.length ||\n                    m.type == \"characterData\" && m.oldValue.length > m.target.nodeValue.length))\n                this.flushSoon();\n            else\n                this.flush();\n        });\n        if (useCharData)\n            this.onCharData = (event) => {\n                this.queue.push({ target: event.target,\n                    type: \"characterData\",\n                    oldValue: event.prevValue });\n                this.flushSoon();\n            };\n        this.onSelectionChange = this.onSelectionChange.bind(this);\n        this.onResize = this.onResize.bind(this);\n        this.onPrint = this.onPrint.bind(this);\n        this.onScroll = this.onScroll.bind(this);\n        if (typeof ResizeObserver == \"function\") {\n            this.resizeScroll = new ResizeObserver(() => {\n                var _a;\n                if (((_a = this.view.docView) === null || _a === void 0 ? void 0 : _a.lastUpdate) < Date.now() - 75)\n                    this.onResize();\n            });\n            this.resizeScroll.observe(view.scrollDOM);\n        }\n        this.addWindowListeners(this.win = view.win);\n        this.start();\n        if (typeof IntersectionObserver == \"function\") {\n            this.intersection = new IntersectionObserver(entries => {\n                if (this.parentCheck < 0)\n                    this.parentCheck = setTimeout(this.listenForScroll.bind(this), 1000);\n                if (entries.length > 0 && (entries[entries.length - 1].intersectionRatio > 0) != this.intersecting) {\n                    this.intersecting = !this.intersecting;\n                    if (this.intersecting != this.view.inView)\n                        this.onScrollChanged(document.createEvent(\"Event\"));\n                }\n            }, { threshold: [0, .001] });\n            this.intersection.observe(this.dom);\n            this.gapIntersection = new IntersectionObserver(entries => {\n                if (entries.length > 0 && entries[entries.length - 1].intersectionRatio > 0)\n                    this.onScrollChanged(document.createEvent(\"Event\"));\n            }, {});\n        }\n        this.listenForScroll();\n        this.readSelectionRange();\n    }\n    onScrollChanged(e) {\n        this.view.inputState.runHandlers(\"scroll\", e);\n        if (this.intersecting)\n            this.view.measure();\n    }\n    onScroll(e) {\n        if (this.intersecting)\n            this.flush(false);\n        this.onScrollChanged(e);\n    }\n    onResize() {\n        if (this.resizeTimeout < 0)\n            this.resizeTimeout = setTimeout(() => {\n                this.resizeTimeout = -1;\n                this.view.requestMeasure();\n            }, 50);\n    }\n    onPrint() {\n        this.view.viewState.printing = true;\n        this.view.measure();\n        setTimeout(() => {\n            this.view.viewState.printing = false;\n            this.view.requestMeasure();\n        }, 500);\n    }\n    updateGaps(gaps) {\n        if (this.gapIntersection && (gaps.length != this.gaps.length || this.gaps.some((g, i) => g != gaps[i]))) {\n            this.gapIntersection.disconnect();\n            for (let gap of gaps)\n                this.gapIntersection.observe(gap);\n            this.gaps = gaps;\n        }\n    }\n    onSelectionChange(event) {\n        let wasChanged = this.selectionChanged;\n        if (!this.readSelectionRange() || this.delayedAndroidKey)\n            return;\n        let { view } = this, sel = this.selectionRange;\n        if (view.state.facet(editable) ? view.root.activeElement != this.dom : !hasSelection(view.dom, sel))\n            return;\n        let context = sel.anchorNode && view.docView.nearest(sel.anchorNode);\n        if (context && context.ignoreEvent(event)) {\n            if (!wasChanged)\n                this.selectionChanged = false;\n            return;\n        }\n        // Deletions on IE11 fire their events in the wrong order, giving\n        // us a selection change event before the DOM changes are\n        // reported.\n        // Chrome Android has a similar issue when backspacing out a\n        // selection (#645).\n        if ((browser.ie && browser.ie_version <= 11 || browser.android && browser.chrome) && !view.state.selection.main.empty &&\n            // (Selection.isCollapsed isn't reliable on IE)\n            sel.focusNode && isEquivalentPosition(sel.focusNode, sel.focusOffset, sel.anchorNode, sel.anchorOffset))\n            this.flushSoon();\n        else\n            this.flush(false);\n    }\n    readSelectionRange() {\n        let { view } = this;\n        // The Selection object is broken in shadow roots in Safari. See\n        // https://github.com/codemirror/dev/issues/414\n        let range = browser.safari && view.root.nodeType == 11 &&\n            deepActiveElement(this.dom.ownerDocument) == this.dom &&\n            safariSelectionRangeHack(this.view) || getSelection(view.root);\n        if (!range || this.selectionRange.eq(range))\n            return false;\n        let local = hasSelection(this.dom, range);\n        // Detect the situation where the browser has, on focus, moved the\n        // selection to the start of the content element. Reset it to the\n        // position from the editor state.\n        if (local && !this.selectionChanged &&\n            view.inputState.lastFocusTime > Date.now() - 200 &&\n            view.inputState.lastTouchTime < Date.now() - 300 &&\n            atElementStart(this.dom, range)) {\n            this.view.inputState.lastFocusTime = 0;\n            view.docView.updateSelection();\n            return false;\n        }\n        this.selectionRange.setRange(range);\n        if (local)\n            this.selectionChanged = true;\n        return true;\n    }\n    setSelectionRange(anchor, head) {\n        this.selectionRange.set(anchor.node, anchor.offset, head.node, head.offset);\n        this.selectionChanged = false;\n    }\n    clearSelectionRange() {\n        this.selectionRange.set(null, 0, null, 0);\n    }\n    listenForScroll() {\n        this.parentCheck = -1;\n        let i = 0, changed = null;\n        for (let dom = this.dom; dom;) {\n            if (dom.nodeType == 1) {\n                if (!changed && i < this.scrollTargets.length && this.scrollTargets[i] == dom)\n                    i++;\n                else if (!changed)\n                    changed = this.scrollTargets.slice(0, i);\n                if (changed)\n                    changed.push(dom);\n                dom = dom.assignedSlot || dom.parentNode;\n            }\n            else if (dom.nodeType == 11) { // Shadow root\n                dom = dom.host;\n            }\n            else {\n                break;\n            }\n        }\n        if (i < this.scrollTargets.length && !changed)\n            changed = this.scrollTargets.slice(0, i);\n        if (changed) {\n            for (let dom of this.scrollTargets)\n                dom.removeEventListener(\"scroll\", this.onScroll);\n            for (let dom of this.scrollTargets = changed)\n                dom.addEventListener(\"scroll\", this.onScroll);\n        }\n    }\n    ignore(f) {\n        if (!this.active)\n            return f();\n        try {\n            this.stop();\n            return f();\n        }\n        finally {\n            this.start();\n            this.clear();\n        }\n    }\n    start() {\n        if (this.active)\n            return;\n        this.observer.observe(this.dom, observeOptions);\n        if (useCharData)\n            this.dom.addEventListener(\"DOMCharacterDataModified\", this.onCharData);\n        this.active = true;\n    }\n    stop() {\n        if (!this.active)\n            return;\n        this.active = false;\n        this.observer.disconnect();\n        if (useCharData)\n            this.dom.removeEventListener(\"DOMCharacterDataModified\", this.onCharData);\n    }\n    // Throw away any pending changes\n    clear() {\n        this.processRecords();\n        this.queue.length = 0;\n        this.selectionChanged = false;\n    }\n    // Chrome Android, especially in combination with GBoard, not only\n    // doesn't reliably fire regular key events, but also often\n    // surrounds the effect of enter or backspace with a bunch of\n    // composition events that, when interrupted, cause text duplication\n    // or other kinds of corruption. This hack makes the editor back off\n    // from handling DOM changes for a moment when such a key is\n    // detected (via beforeinput or keydown), and then tries to flush\n    // them or, if that has no effect, dispatches the given key.\n    delayAndroidKey(key, keyCode) {\n        var _a;\n        if (!this.delayedAndroidKey) {\n            let flush = () => {\n                let key = this.delayedAndroidKey;\n                if (key) {\n                    this.clearDelayedAndroidKey();\n                    this.view.inputState.lastKeyCode = key.keyCode;\n                    this.view.inputState.lastKeyTime = Date.now();\n                    let flushed = this.flush();\n                    if (!flushed && key.force)\n                        dispatchKey(this.dom, key.key, key.keyCode);\n                }\n            };\n            this.flushingAndroidKey = this.view.win.requestAnimationFrame(flush);\n        }\n        // Since backspace beforeinput is sometimes signalled spuriously,\n        // Enter always takes precedence.\n        if (!this.delayedAndroidKey || key == \"Enter\")\n            this.delayedAndroidKey = {\n                key, keyCode,\n                // Only run the key handler when no changes are detected if\n                // this isn't coming right after another change, in which case\n                // it is probably part of a weird chain of updates, and should\n                // be ignored if it returns the DOM to its previous state.\n                force: this.lastChange < Date.now() - 50 || !!((_a = this.delayedAndroidKey) === null || _a === void 0 ? void 0 : _a.force)\n            };\n    }\n    clearDelayedAndroidKey() {\n        this.win.cancelAnimationFrame(this.flushingAndroidKey);\n        this.delayedAndroidKey = null;\n        this.flushingAndroidKey = -1;\n    }\n    flushSoon() {\n        if (this.delayedFlush < 0)\n            this.delayedFlush = this.view.win.requestAnimationFrame(() => { this.delayedFlush = -1; this.flush(); });\n    }\n    forceFlush() {\n        if (this.delayedFlush >= 0) {\n            this.view.win.cancelAnimationFrame(this.delayedFlush);\n            this.delayedFlush = -1;\n        }\n        this.flush();\n    }\n    pendingRecords() {\n        for (let mut of this.observer.takeRecords())\n            this.queue.push(mut);\n        return this.queue;\n    }\n    processRecords() {\n        let records = this.pendingRecords();\n        if (records.length)\n            this.queue = [];\n        let from = -1, to = -1, typeOver = false;\n        for (let record of records) {\n            let range = this.readMutation(record);\n            if (!range)\n                continue;\n            if (range.typeOver)\n                typeOver = true;\n            if (from == -1) {\n                ({ from, to } = range);\n            }\n            else {\n                from = Math.min(range.from, from);\n                to = Math.max(range.to, to);\n            }\n        }\n        return { from, to, typeOver };\n    }\n    readChange() {\n        let { from, to, typeOver } = this.processRecords();\n        let newSel = this.selectionChanged && hasSelection(this.dom, this.selectionRange);\n        if (from < 0 && !newSel)\n            return null;\n        if (from > -1)\n            this.lastChange = Date.now();\n        this.view.inputState.lastFocusTime = 0;\n        this.selectionChanged = false;\n        let change = new DOMChange(this.view, from, to, typeOver);\n        this.view.docView.domChanged = { newSel: change.newSel ? change.newSel.main : null };\n        return change;\n    }\n    // Apply pending changes, if any\n    flush(readSelection = true) {\n        // Completely hold off flushing when pending keys are set\u2014the code\n        // managing those will make sure processRecords is called and the\n        // view is resynchronized after\n        if (this.delayedFlush >= 0 || this.delayedAndroidKey)\n            return false;\n        if (readSelection)\n            this.readSelectionRange();\n        let domChange = this.readChange();\n        if (!domChange) {\n            this.view.requestMeasure();\n            return false;\n        }\n        let startState = this.view.state;\n        let handled = applyDOMChange(this.view, domChange);\n        // The view wasn't updated\n        if (this.view.state == startState)\n            this.view.update([]);\n        return handled;\n    }\n    readMutation(rec) {\n        let cView = this.view.docView.nearest(rec.target);\n        if (!cView || cView.ignoreMutation(rec))\n            return null;\n        cView.markDirty(rec.type == \"attributes\");\n        if (rec.type == \"attributes\")\n            cView.flags |= 4 /* ViewFlag.AttrsDirty */;\n        if (rec.type == \"childList\") {\n            let childBefore = findChild(cView, rec.previousSibling || rec.target.previousSibling, -1);\n            let childAfter = findChild(cView, rec.nextSibling || rec.target.nextSibling, 1);\n            return { from: childBefore ? cView.posAfter(childBefore) : cView.posAtStart,\n                to: childAfter ? cView.posBefore(childAfter) : cView.posAtEnd, typeOver: false };\n        }\n        else if (rec.type == \"characterData\") {\n            return { from: cView.posAtStart, to: cView.posAtEnd, typeOver: rec.target.nodeValue == rec.oldValue };\n        }\n        else {\n            return null;\n        }\n    }\n    setWindow(win) {\n        if (win != this.win) {\n            this.removeWindowListeners(this.win);\n            this.win = win;\n            this.addWindowListeners(this.win);\n        }\n    }\n    addWindowListeners(win) {\n        win.addEventListener(\"resize\", this.onResize);\n        win.addEventListener(\"beforeprint\", this.onPrint);\n        win.addEventListener(\"scroll\", this.onScroll);\n        win.document.addEventListener(\"selectionchange\", this.onSelectionChange);\n    }\n    removeWindowListeners(win) {\n        win.removeEventListener(\"scroll\", this.onScroll);\n        win.removeEventListener(\"resize\", this.onResize);\n        win.removeEventListener(\"beforeprint\", this.onPrint);\n        win.document.removeEventListener(\"selectionchange\", this.onSelectionChange);\n    }\n    destroy() {\n        var _a, _b, _c;\n        this.stop();\n        (_a = this.intersection) === null || _a === void 0 ? void 0 : _a.disconnect();\n        (_b = this.gapIntersection) === null || _b === void 0 ? void 0 : _b.disconnect();\n        (_c = this.resizeScroll) === null || _c === void 0 ? void 0 : _c.disconnect();\n        for (let dom of this.scrollTargets)\n            dom.removeEventListener(\"scroll\", this.onScroll);\n        this.removeWindowListeners(this.win);\n        clearTimeout(this.parentCheck);\n        clearTimeout(this.resizeTimeout);\n        this.win.cancelAnimationFrame(this.delayedFlush);\n        this.win.cancelAnimationFrame(this.flushingAndroidKey);\n    }\n}\nfunction findChild(cView, dom, dir) {\n    while (dom) {\n        let curView = ContentView.get(dom);\n        if (curView && curView.parent == cView)\n            return curView;\n        let parent = dom.parentNode;\n        dom = parent != cView.dom ? parent : dir > 0 ? dom.nextSibling : dom.previousSibling;\n    }\n    return null;\n}\n// Used to work around a Safari Selection/shadow DOM bug (#414)\nfunction safariSelectionRangeHack(view) {\n    let found = null;\n    // Because Safari (at least in 2018-2021) doesn't provide regular\n    // access to the selection inside a shadowroot, we have to perform a\n    // ridiculous hack to get at it\u2014using `execCommand` to trigger a\n    // `beforeInput` event so that we can read the target range from the\n    // event.\n    function read(event) {\n        event.preventDefault();\n        event.stopImmediatePropagation();\n        found = event.getTargetRanges()[0];\n    }\n    view.contentDOM.addEventListener(\"beforeinput\", read, true);\n    view.dom.ownerDocument.execCommand(\"indent\");\n    view.contentDOM.removeEventListener(\"beforeinput\", read, true);\n    if (!found)\n        return null;\n    let anchorNode = found.startContainer, anchorOffset = found.startOffset;\n    let focusNode = found.endContainer, focusOffset = found.endOffset;\n    let curAnchor = view.docView.domAtPos(view.state.selection.main.anchor);\n    // Since such a range doesn't distinguish between anchor and head,\n    // use a heuristic that flips it around if its end matches the\n    // current anchor.\n    if (isEquivalentPosition(curAnchor.node, curAnchor.offset, focusNode, focusOffset))\n        [anchorNode, anchorOffset, focusNode, focusOffset] = [focusNode, focusOffset, anchorNode, anchorOffset];\n    return { anchorNode, anchorOffset, focusNode, focusOffset };\n}\n\n// The editor's update state machine looks something like this:\n//\n//     Idle \u2192 Updating \u21C6 Idle (unchecked) \u2192 Measuring \u2192 Idle\n//                                         \u2191      \u2193\n//                                         Updating (measure)\n//\n// The difference between 'Idle' and 'Idle (unchecked)' lies in\n// whether a layout check has been scheduled. A regular update through\n// the `update` method updates the DOM in a write-only fashion, and\n// relies on a check (scheduled with `requestAnimationFrame`) to make\n// sure everything is where it should be and the viewport covers the\n// visible code. That check continues to measure and then optionally\n// update until it reaches a coherent state.\n/**\nAn editor view represents the editor's user interface. It holds\nthe editable DOM surface, and possibly other elements such as the\nline number gutter. It handles events and dispatches state\ntransactions for editing actions.\n*/\nclass EditorView {\n    /**\n    The current editor state.\n    */\n    get state() { return this.viewState.state; }\n    /**\n    To be able to display large documents without consuming too much\n    memory or overloading the browser, CodeMirror only draws the\n    code that is visible (plus a margin around it) to the DOM. This\n    property tells you the extent of the current drawn viewport, in\n    document positions.\n    */\n    get viewport() { return this.viewState.viewport; }\n    /**\n    When there are, for example, large collapsed ranges in the\n    viewport, its size can be a lot bigger than the actual visible\n    content. Thus, if you are doing something like styling the\n    content in the viewport, it is preferable to only do so for\n    these ranges, which are the subset of the viewport that is\n    actually drawn.\n    */\n    get visibleRanges() { return this.viewState.visibleRanges; }\n    /**\n    Returns false when the editor is entirely scrolled out of view\n    or otherwise hidden.\n    */\n    get inView() { return this.viewState.inView; }\n    /**\n    Indicates whether the user is currently composing text via\n    [IME](https://en.wikipedia.org/wiki/Input_method), and at least\n    one change has been made in the current composition.\n    */\n    get composing() { return this.inputState.composing > 0; }\n    /**\n    Indicates whether the user is currently in composing state. Note\n    that on some platforms, like Android, this will be the case a\n    lot, since just putting the cursor on a word starts a\n    composition there.\n    */\n    get compositionStarted() { return this.inputState.composing >= 0; }\n    /**\n    The document or shadow root that the view lives in.\n    */\n    get root() { return this._root; }\n    /**\n    @internal\n    */\n    get win() { return this.dom.ownerDocument.defaultView || window; }\n    /**\n    Construct a new view. You'll want to either provide a `parent`\n    option, or put `view.dom` into your document after creating a\n    view, so that the user can see the editor.\n    */\n    constructor(config = {}) {\n        this.plugins = [];\n        this.pluginMap = new Map;\n        this.editorAttrs = {};\n        this.contentAttrs = {};\n        this.bidiCache = [];\n        this.destroyed = false;\n        /**\n        @internal\n        */\n        this.updateState = 2 /* UpdateState.Updating */;\n        /**\n        @internal\n        */\n        this.measureScheduled = -1;\n        /**\n        @internal\n        */\n        this.measureRequests = [];\n        this.contentDOM = document.createElement(\"div\");\n        this.scrollDOM = document.createElement(\"div\");\n        this.scrollDOM.tabIndex = -1;\n        this.scrollDOM.className = \"cm-scroller\";\n        this.scrollDOM.appendChild(this.contentDOM);\n        this.announceDOM = document.createElement(\"div\");\n        this.announceDOM.style.cssText = \"position: fixed; top: -10000px\";\n        this.announceDOM.setAttribute(\"aria-live\", \"polite\");\n        this.dom = document.createElement(\"div\");\n        this.dom.appendChild(this.announceDOM);\n        this.dom.appendChild(this.scrollDOM);\n        let { dispatch } = config;\n        this.dispatchTransactions = config.dispatchTransactions ||\n            (dispatch && ((trs) => trs.forEach(tr => dispatch(tr, this)))) ||\n            ((trs) => this.update(trs));\n        this.dispatch = this.dispatch.bind(this);\n        this._root = (config.root || getRoot(config.parent) || document);\n        this.viewState = new ViewState(config.state || EditorState.create(config));\n        if (config.scrollTo && config.scrollTo.is(scrollIntoView))\n            this.viewState.scrollTarget = config.scrollTo.value.clip(this.viewState.state);\n        this.plugins = this.state.facet(viewPlugin).map(spec => new PluginInstance(spec));\n        for (let plugin of this.plugins)\n            plugin.update(this);\n        this.observer = new DOMObserver(this);\n        this.inputState = new InputState(this);\n        this.inputState.ensureHandlers(this.plugins);\n        this.docView = new DocView(this);\n        this.mountStyles();\n        this.updateAttrs();\n        this.updateState = 0 /* UpdateState.Idle */;\n        this.requestMeasure();\n        if (config.parent)\n            config.parent.appendChild(this.dom);\n    }\n    dispatch(...input) {\n        let trs = input.length == 1 && input[0] instanceof Transaction ? input\n            : input.length == 1 && Array.isArray(input[0]) ? input[0]\n                : [this.state.update(...input)];\n        this.dispatchTransactions(trs, this);\n    }\n    /**\n    Update the view for the given array of transactions. This will\n    update the visible document and selection to match the state\n    produced by the transactions, and notify view plugins of the\n    change. You should usually call\n    [`dispatch`](https://codemirror.net/6/docs/ref/#view.EditorView.dispatch) instead, which uses this\n    as a primitive.\n    */\n    update(transactions) {\n        if (this.updateState != 0 /* UpdateState.Idle */)\n            throw new Error(\"Calls to EditorView.update are not allowed while an update is in progress\");\n        let redrawn = false, attrsChanged = false, update;\n        let state = this.state;\n        for (let tr of transactions) {\n            if (tr.startState != state)\n                throw new RangeError(\"Trying to update state with a transaction that doesn't start from the previous state.\");\n            state = tr.state;\n        }\n        if (this.destroyed) {\n            this.viewState.state = state;\n            return;\n        }\n        let focus = this.hasFocus, focusFlag = 0, dispatchFocus = null;\n        if (transactions.some(tr => tr.annotation(isFocusChange))) {\n            this.inputState.notifiedFocused = focus;\n            // If a focus-change transaction is being dispatched, set this update flag.\n            focusFlag = 1 /* UpdateFlag.Focus */;\n        }\n        else if (focus != this.inputState.notifiedFocused) {\n            this.inputState.notifiedFocused = focus;\n            // Schedule a separate focus transaction if necessary, otherwise\n            // add a flag to this update\n            dispatchFocus = focusChangeTransaction(state, focus);\n            if (!dispatchFocus)\n                focusFlag = 1 /* UpdateFlag.Focus */;\n        }\n        // If there was a pending DOM change, eagerly read it and try to\n        // apply it after the given transactions.\n        let pendingKey = this.observer.delayedAndroidKey, domChange = null;\n        if (pendingKey) {\n            this.observer.clearDelayedAndroidKey();\n            domChange = this.observer.readChange();\n            // Only try to apply DOM changes if the transactions didn't\n            // change the doc or selection.\n            if (domChange && !this.state.doc.eq(state.doc) || !this.state.selection.eq(state.selection))\n                domChange = null;\n        }\n        else {\n            this.observer.clear();\n        }\n        // When the phrases change, redraw the editor\n        if (state.facet(EditorState.phrases) != this.state.facet(EditorState.phrases))\n            return this.setState(state);\n        update = ViewUpdate.create(this, state, transactions);\n        update.flags |= focusFlag;\n        let scrollTarget = this.viewState.scrollTarget;\n        try {\n            this.updateState = 2 /* UpdateState.Updating */;\n            for (let tr of transactions) {\n                if (scrollTarget)\n                    scrollTarget = scrollTarget.map(tr.changes);\n                if (tr.scrollIntoView) {\n                    let { main } = tr.state.selection;\n                    scrollTarget = new ScrollTarget(main.empty ? main : EditorSelection.cursor(main.head, main.head > main.anchor ? -1 : 1));\n                }\n                for (let e of tr.effects)\n                    if (e.is(scrollIntoView))\n                        scrollTarget = e.value.clip(this.state);\n            }\n            this.viewState.update(update, scrollTarget);\n            this.bidiCache = CachedOrder.update(this.bidiCache, update.changes);\n            if (!update.empty) {\n                this.updatePlugins(update);\n                this.inputState.update(update);\n            }\n            redrawn = this.docView.update(update);\n            if (this.state.facet(styleModule) != this.styleModules)\n                this.mountStyles();\n            attrsChanged = this.updateAttrs();\n            this.showAnnouncements(transactions);\n            this.docView.updateSelection(redrawn, transactions.some(tr => tr.isUserEvent(\"select.pointer\")));\n        }\n        finally {\n            this.updateState = 0 /* UpdateState.Idle */;\n        }\n        if (update.startState.facet(theme) != update.state.facet(theme))\n            this.viewState.mustMeasureContent = true;\n        if (redrawn || attrsChanged || scrollTarget || this.viewState.mustEnforceCursorAssoc || this.viewState.mustMeasureContent)\n            this.requestMeasure();\n        if (!update.empty)\n            for (let listener of this.state.facet(updateListener)) {\n                try {\n                    listener(update);\n                }\n                catch (e) {\n                    logException(this.state, e, \"update listener\");\n                }\n            }\n        if (dispatchFocus || domChange)\n            Promise.resolve().then(() => {\n                if (dispatchFocus && this.state == dispatchFocus.startState)\n                    this.dispatch(dispatchFocus);\n                if (domChange) {\n                    if (!applyDOMChange(this, domChange) && pendingKey.force)\n                        dispatchKey(this.contentDOM, pendingKey.key, pendingKey.keyCode);\n                }\n            });\n    }\n    /**\n    Reset the view to the given state. (This will cause the entire\n    document to be redrawn and all view plugins to be reinitialized,\n    so you should probably only use it when the new state isn't\n    derived from the old state. Otherwise, use\n    [`dispatch`](https://codemirror.net/6/docs/ref/#view.EditorView.dispatch) instead.)\n    */\n    setState(newState) {\n        if (this.updateState != 0 /* UpdateState.Idle */)\n            throw new Error(\"Calls to EditorView.setState are not allowed while an update is in progress\");\n        if (this.destroyed) {\n            this.viewState.state = newState;\n            return;\n        }\n        this.updateState = 2 /* UpdateState.Updating */;\n        let hadFocus = this.hasFocus;\n        try {\n            for (let plugin of this.plugins)\n                plugin.destroy(this);\n            this.viewState = new ViewState(newState);\n            this.plugins = newState.facet(viewPlugin).map(spec => new PluginInstance(spec));\n            this.pluginMap.clear();\n            for (let plugin of this.plugins)\n                plugin.update(this);\n            this.docView = new DocView(this);\n            this.inputState.ensureHandlers(this.plugins);\n            this.mountStyles();\n            this.updateAttrs();\n            this.bidiCache = [];\n        }\n        finally {\n            this.updateState = 0 /* UpdateState.Idle */;\n        }\n        if (hadFocus)\n            this.focus();\n        this.requestMeasure();\n    }\n    updatePlugins(update) {\n        let prevSpecs = update.startState.facet(viewPlugin), specs = update.state.facet(viewPlugin);\n        if (prevSpecs != specs) {\n            let newPlugins = [];\n            for (let spec of specs) {\n                let found = prevSpecs.indexOf(spec);\n                if (found < 0) {\n                    newPlugins.push(new PluginInstance(spec));\n                }\n                else {\n                    let plugin = this.plugins[found];\n                    plugin.mustUpdate = update;\n                    newPlugins.push(plugin);\n                }\n            }\n            for (let plugin of this.plugins)\n                if (plugin.mustUpdate != update)\n                    plugin.destroy(this);\n            this.plugins = newPlugins;\n            this.pluginMap.clear();\n        }\n        else {\n            for (let p of this.plugins)\n                p.mustUpdate = update;\n        }\n        for (let i = 0; i < this.plugins.length; i++)\n            this.plugins[i].update(this);\n        if (prevSpecs != specs)\n            this.inputState.ensureHandlers(this.plugins);\n    }\n    /**\n    @internal\n    */\n    measure(flush = true) {\n        if (this.destroyed)\n            return;\n        if (this.measureScheduled > -1)\n            this.win.cancelAnimationFrame(this.measureScheduled);\n        if (this.observer.delayedAndroidKey) {\n            this.measureScheduled = -1;\n            this.requestMeasure();\n            return;\n        }\n        this.measureScheduled = 0; // Prevent requestMeasure calls from scheduling another animation frame\n        if (flush)\n            this.observer.forceFlush();\n        let updated = null;\n        let sDOM = this.scrollDOM, scrollTop = sDOM.scrollTop * this.scaleY;\n        let { scrollAnchorPos, scrollAnchorHeight } = this.viewState;\n        if (Math.abs(scrollTop - this.viewState.scrollTop) > 1)\n            scrollAnchorHeight = -1;\n        this.viewState.scrollAnchorHeight = -1;\n        try {\n            for (let i = 0;; i++) {\n                if (scrollAnchorHeight < 0) {\n                    if (isScrolledToBottom(sDOM)) {\n                        scrollAnchorPos = -1;\n                        scrollAnchorHeight = this.viewState.heightMap.height;\n                    }\n                    else {\n                        let block = this.viewState.scrollAnchorAt(scrollTop);\n                        scrollAnchorPos = block.from;\n                        scrollAnchorHeight = block.top;\n                    }\n                }\n                this.updateState = 1 /* UpdateState.Measuring */;\n                let changed = this.viewState.measure(this);\n                if (!changed && !this.measureRequests.length && this.viewState.scrollTarget == null)\n                    break;\n                if (i > 5) {\n                    console.warn(this.measureRequests.length\n                        ? \"Measure loop restarted more than 5 times\"\n                        : \"Viewport failed to stabilize\");\n                    break;\n                }\n                let measuring = [];\n                // Only run measure requests in this cycle when the viewport didn't change\n                if (!(changed & 4 /* UpdateFlag.Viewport */))\n                    [this.measureRequests, measuring] = [measuring, this.measureRequests];\n                let measured = measuring.map(m => {\n                    try {\n                        return m.read(this);\n                    }\n                    catch (e) {\n                        logException(this.state, e);\n                        return BadMeasure;\n                    }\n                });\n                let update = ViewUpdate.create(this, this.state, []), redrawn = false;\n                update.flags |= changed;\n                if (!updated)\n                    updated = update;\n                else\n                    updated.flags |= changed;\n                this.updateState = 2 /* UpdateState.Updating */;\n                if (!update.empty) {\n                    this.updatePlugins(update);\n                    this.inputState.update(update);\n                    this.updateAttrs();\n                    redrawn = this.docView.update(update);\n                }\n                for (let i = 0; i < measuring.length; i++)\n                    if (measured[i] != BadMeasure) {\n                        try {\n                            let m = measuring[i];\n                            if (m.write)\n                                m.write(measured[i], this);\n                        }\n                        catch (e) {\n                            logException(this.state, e);\n                        }\n                    }\n                if (redrawn)\n                    this.docView.updateSelection(true);\n                if (!update.viewportChanged && this.measureRequests.length == 0) {\n                    if (this.viewState.editorHeight) {\n                        if (this.viewState.scrollTarget) {\n                            this.docView.scrollIntoView(this.viewState.scrollTarget);\n                            this.viewState.scrollTarget = null;\n                            continue;\n                        }\n                        else {\n                            let newAnchorHeight = scrollAnchorPos < 0 ? this.viewState.heightMap.height :\n                                this.viewState.lineBlockAt(scrollAnchorPos).top;\n                            let diff = newAnchorHeight - scrollAnchorHeight;\n                            if (diff > 1 || diff < -1) {\n                                scrollTop = scrollTop + diff;\n                                sDOM.scrollTop = scrollTop / this.scaleY;\n                                scrollAnchorHeight = -1;\n                                continue;\n                            }\n                        }\n                    }\n                    break;\n                }\n            }\n        }\n        finally {\n            this.updateState = 0 /* UpdateState.Idle */;\n            this.measureScheduled = -1;\n        }\n        if (updated && !updated.empty)\n            for (let listener of this.state.facet(updateListener))\n                listener(updated);\n    }\n    /**\n    Get the CSS classes for the currently active editor themes.\n    */\n    get themeClasses() {\n        return baseThemeID + \" \" +\n            (this.state.facet(darkTheme) ? baseDarkID : baseLightID) + \" \" +\n            this.state.facet(theme);\n    }\n    updateAttrs() {\n        let editorAttrs = attrsFromFacet(this, editorAttributes, {\n            class: \"cm-editor\" + (this.hasFocus ? \" cm-focused \" : \" \") + this.themeClasses\n        });\n        let contentAttrs = {\n            spellcheck: \"false\",\n            autocorrect: \"off\",\n            autocapitalize: \"off\",\n            translate: \"no\",\n            contenteditable: !this.state.facet(editable) ? \"false\" : \"true\",\n            class: \"cm-content\",\n            style: `${browser.tabSize}: ${this.state.tabSize}`,\n            role: \"textbox\",\n            \"aria-multiline\": \"true\"\n        };\n        if (this.state.readOnly)\n            contentAttrs[\"aria-readonly\"] = \"true\";\n        attrsFromFacet(this, contentAttributes, contentAttrs);\n        let changed = this.observer.ignore(() => {\n            let changedContent = updateAttrs(this.contentDOM, this.contentAttrs, contentAttrs);\n            let changedEditor = updateAttrs(this.dom, this.editorAttrs, editorAttrs);\n            return changedContent || changedEditor;\n        });\n        this.editorAttrs = editorAttrs;\n        this.contentAttrs = contentAttrs;\n        return changed;\n    }\n    showAnnouncements(trs) {\n        let first = true;\n        for (let tr of trs)\n            for (let effect of tr.effects)\n                if (effect.is(EditorView.announce)) {\n                    if (first)\n                        this.announceDOM.textContent = \"\";\n                    first = false;\n                    let div = this.announceDOM.appendChild(document.createElement(\"div\"));\n                    div.textContent = effect.value;\n                }\n    }\n    mountStyles() {\n        this.styleModules = this.state.facet(styleModule);\n        let nonce = this.state.facet(EditorView.cspNonce);\n        StyleModule.mount(this.root, this.styleModules.concat(baseTheme$1).reverse(), nonce ? { nonce } : undefined);\n    }\n    readMeasured() {\n        if (this.updateState == 2 /* UpdateState.Updating */)\n            throw new Error(\"Reading the editor layout isn't allowed during an update\");\n        if (this.updateState == 0 /* UpdateState.Idle */ && this.measureScheduled > -1)\n            this.measure(false);\n    }\n    /**\n    Schedule a layout measurement, optionally providing callbacks to\n    do custom DOM measuring followed by a DOM write phase. Using\n    this is preferable reading DOM layout directly from, for\n    example, an event handler, because it'll make sure measuring and\n    drawing done by other components is synchronized, avoiding\n    unnecessary DOM layout computations.\n    */\n    requestMeasure(request) {\n        if (this.measureScheduled < 0)\n            this.measureScheduled = this.win.requestAnimationFrame(() => this.measure());\n        if (request) {\n            if (this.measureRequests.indexOf(request) > -1)\n                return;\n            if (request.key != null)\n                for (let i = 0; i < this.measureRequests.length; i++) {\n                    if (this.measureRequests[i].key === request.key) {\n                        this.measureRequests[i] = request;\n                        return;\n                    }\n                }\n            this.measureRequests.push(request);\n        }\n    }\n    /**\n    Get the value of a specific plugin, if present. Note that\n    plugins that crash can be dropped from a view, so even when you\n    know you registered a given plugin, it is recommended to check\n    the return value of this method.\n    */\n    plugin(plugin) {\n        let known = this.pluginMap.get(plugin);\n        if (known === undefined || known && known.spec != plugin)\n            this.pluginMap.set(plugin, known = this.plugins.find(p => p.spec == plugin) || null);\n        return known && known.update(this).value;\n    }\n    /**\n    The top position of the document, in screen coordinates. This\n    may be negative when the editor is scrolled down. Points\n    directly to the top of the first line, not above the padding.\n    */\n    get documentTop() {\n        return this.contentDOM.getBoundingClientRect().top + this.viewState.paddingTop;\n    }\n    /**\n    Reports the padding above and below the document.\n    */\n    get documentPadding() {\n        return { top: this.viewState.paddingTop, bottom: this.viewState.paddingBottom };\n    }\n    /**\n    If the editor is transformed with CSS, this provides the scale\n    along the X axis. Otherwise, it will just be 1. Note that\n    transforms other than translation and scaling are not supported.\n    */\n    get scaleX() { return this.viewState.scaleX; }\n    /**\n    Provide the CSS transformed scale along the Y axis.\n    */\n    get scaleY() { return this.viewState.scaleY; }\n    /**\n    Find the text line or block widget at the given vertical\n    position (which is interpreted as relative to the [top of the\n    document](https://codemirror.net/6/docs/ref/#view.EditorView.documentTop)).\n    */\n    elementAtHeight(height) {\n        this.readMeasured();\n        return this.viewState.elementAtHeight(height);\n    }\n    /**\n    Find the line block (see\n    [`lineBlockAt`](https://codemirror.net/6/docs/ref/#view.EditorView.lineBlockAt) at the given\n    height, again interpreted relative to the [top of the\n    document](https://codemirror.net/6/docs/ref/#view.EditorView.documentTop).\n    */\n    lineBlockAtHeight(height) {\n        this.readMeasured();\n        return this.viewState.lineBlockAtHeight(height);\n    }\n    /**\n    Get the extent and vertical position of all [line\n    blocks](https://codemirror.net/6/docs/ref/#view.EditorView.lineBlockAt) in the viewport. Positions\n    are relative to the [top of the\n    document](https://codemirror.net/6/docs/ref/#view.EditorView.documentTop);\n    */\n    get viewportLineBlocks() {\n        return this.viewState.viewportLines;\n    }\n    /**\n    Find the line block around the given document position. A line\n    block is a range delimited on both sides by either a\n    non-[hidden](https://codemirror.net/6/docs/ref/#view.Decoration^replace) line breaks, or the\n    start/end of the document. It will usually just hold a line of\n    text, but may be broken into multiple textblocks by block\n    widgets.\n    */\n    lineBlockAt(pos) {\n        return this.viewState.lineBlockAt(pos);\n    }\n    /**\n    The editor's total content height.\n    */\n    get contentHeight() {\n        return this.viewState.contentHeight;\n    }\n    /**\n    Move a cursor position by [grapheme\n    cluster](https://codemirror.net/6/docs/ref/#state.findClusterBreak). `forward` determines whether\n    the motion is away from the line start, or towards it. In\n    bidirectional text, the line is traversed in visual order, using\n    the editor's [text direction](https://codemirror.net/6/docs/ref/#view.EditorView.textDirection).\n    When the start position was the last one on the line, the\n    returned position will be across the line break. If there is no\n    further line, the original position is returned.\n    \n    By default, this method moves over a single cluster. The\n    optional `by` argument can be used to move across more. It will\n    be called with the first cluster as argument, and should return\n    a predicate that determines, for each subsequent cluster,\n    whether it should also be moved over.\n    */\n    moveByChar(start, forward, by) {\n        return skipAtoms(this, start, moveByChar(this, start, forward, by));\n    }\n    /**\n    Move a cursor position across the next group of either\n    [letters](https://codemirror.net/6/docs/ref/#state.EditorState.charCategorizer) or non-letter\n    non-whitespace characters.\n    */\n    moveByGroup(start, forward) {\n        return skipAtoms(this, start, moveByChar(this, start, forward, initial => byGroup(this, start.head, initial)));\n    }\n    /**\n    Move to the next line boundary in the given direction. If\n    `includeWrap` is true, line wrapping is on, and there is a\n    further wrap point on the current line, the wrap point will be\n    returned. Otherwise this function will return the start or end\n    of the line.\n    */\n    moveToLineBoundary(start, forward, includeWrap = true) {\n        return moveToLineBoundary(this, start, forward, includeWrap);\n    }\n    /**\n    Move a cursor position vertically. When `distance` isn't given,\n    it defaults to moving to the next line (including wrapped\n    lines). Otherwise, `distance` should provide a positive distance\n    in pixels.\n    \n    When `start` has a\n    [`goalColumn`](https://codemirror.net/6/docs/ref/#state.SelectionRange.goalColumn), the vertical\n    motion will use that as a target horizontal position. Otherwise,\n    the cursor's own horizontal position is used. The returned\n    cursor will have its goal column set to whichever column was\n    used.\n    */\n    moveVertically(start, forward, distance) {\n        return skipAtoms(this, start, moveVertically(this, start, forward, distance));\n    }\n    /**\n    Find the DOM parent node and offset (child offset if `node` is\n    an element, character offset when it is a text node) at the\n    given document position.\n    \n    Note that for positions that aren't currently in\n    `visibleRanges`, the resulting DOM position isn't necessarily\n    meaningful (it may just point before or after a placeholder\n    element).\n    */\n    domAtPos(pos) {\n        return this.docView.domAtPos(pos);\n    }\n    /**\n    Find the document position at the given DOM node. Can be useful\n    for associating positions with DOM events. Will raise an error\n    when `node` isn't part of the editor content.\n    */\n    posAtDOM(node, offset = 0) {\n        return this.docView.posFromDOM(node, offset);\n    }\n    posAtCoords(coords, precise = true) {\n        this.readMeasured();\n        return posAtCoords(this, coords, precise);\n    }\n    /**\n    Get the screen coordinates at the given document position.\n    `side` determines whether the coordinates are based on the\n    element before (-1) or after (1) the position (if no element is\n    available on the given side, the method will transparently use\n    another strategy to get reasonable coordinates).\n    */\n    coordsAtPos(pos, side = 1) {\n        this.readMeasured();\n        let rect = this.docView.coordsAt(pos, side);\n        if (!rect || rect.left == rect.right)\n            return rect;\n        let line = this.state.doc.lineAt(pos), order = this.bidiSpans(line);\n        let span = order[BidiSpan.find(order, pos - line.from, -1, side)];\n        return flattenRect(rect, (span.dir == Direction.LTR) == (side > 0));\n    }\n    /**\n    Return the rectangle around a given character. If `pos` does not\n    point in front of a character that is in the viewport and\n    rendered (i.e. not replaced, not a line break), this will return\n    null. For space characters that are a line wrap point, this will\n    return the position before the line break.\n    */\n    coordsForChar(pos) {\n        this.readMeasured();\n        return this.docView.coordsForChar(pos);\n    }\n    /**\n    The default width of a character in the editor. May not\n    accurately reflect the width of all characters (given variable\n    width fonts or styling of invididual ranges).\n    */\n    get defaultCharacterWidth() { return this.viewState.heightOracle.charWidth; }\n    /**\n    The default height of a line in the editor. May not be accurate\n    for all lines.\n    */\n    get defaultLineHeight() { return this.viewState.heightOracle.lineHeight; }\n    /**\n    The text direction\n    ([`direction`](https://developer.mozilla.org/en-US/docs/Web/CSS/direction)\n    CSS property) of the editor's content element.\n    */\n    get textDirection() { return this.viewState.defaultTextDirection; }\n    /**\n    Find the text direction of the block at the given position, as\n    assigned by CSS. If\n    [`perLineTextDirection`](https://codemirror.net/6/docs/ref/#view.EditorView^perLineTextDirection)\n    isn't enabled, or the given position is outside of the viewport,\n    this will always return the same as\n    [`textDirection`](https://codemirror.net/6/docs/ref/#view.EditorView.textDirection). Note that\n    this may trigger a DOM layout.\n    */\n    textDirectionAt(pos) {\n        let perLine = this.state.facet(perLineTextDirection);\n        if (!perLine || pos < this.viewport.from || pos > this.viewport.to)\n            return this.textDirection;\n        this.readMeasured();\n        return this.docView.textDirectionAt(pos);\n    }\n    /**\n    Whether this editor [wraps lines](https://codemirror.net/6/docs/ref/#view.EditorView.lineWrapping)\n    (as determined by the\n    [`white-space`](https://developer.mozilla.org/en-US/docs/Web/CSS/white-space)\n    CSS property of its content element).\n    */\n    get lineWrapping() { return this.viewState.heightOracle.lineWrapping; }\n    /**\n    Returns the bidirectional text structure of the given line\n    (which should be in the current document) as an array of span\n    objects. The order of these spans matches the [text\n    direction](https://codemirror.net/6/docs/ref/#view.EditorView.textDirection)\u2014if that is\n    left-to-right, the leftmost spans come first, otherwise the\n    rightmost spans come first.\n    */\n    bidiSpans(line) {\n        if (line.length > MaxBidiLine)\n            return trivialOrder(line.length);\n        let dir = this.textDirectionAt(line.from), isolates;\n        for (let entry of this.bidiCache) {\n            if (entry.from == line.from && entry.dir == dir &&\n                (entry.fresh || isolatesEq(entry.isolates, isolates = getIsolatedRanges(this, line.from, line.to))))\n                return entry.order;\n        }\n        if (!isolates)\n            isolates = getIsolatedRanges(this, line.from, line.to);\n        let order = computeOrder(line.text, dir, isolates);\n        this.bidiCache.push(new CachedOrder(line.from, line.to, dir, isolates, true, order));\n        return order;\n    }\n    /**\n    Check whether the editor has focus.\n    */\n    get hasFocus() {\n        var _a;\n        // Safari return false for hasFocus when the context menu is open\n        // or closing, which leads us to ignore selection changes from the\n        // context menu because it looks like the editor isn't focused.\n        // This kludges around that.\n        return (this.dom.ownerDocument.hasFocus() || browser.safari && ((_a = this.inputState) === null || _a === void 0 ? void 0 : _a.lastContextMenu) > Date.now() - 3e4) &&\n            this.root.activeElement == this.contentDOM;\n    }\n    /**\n    Put focus on the editor.\n    */\n    focus() {\n        this.observer.ignore(() => {\n            focusPreventScroll(this.contentDOM);\n            this.docView.updateSelection();\n        });\n    }\n    /**\n    Update the [root](https://codemirror.net/6/docs/ref/##view.EditorViewConfig.root) in which the editor lives. This is only\n    necessary when moving the editor's existing DOM to a new window or shadow root.\n    */\n    setRoot(root) {\n        if (this._root != root) {\n            this._root = root;\n            this.observer.setWindow((root.nodeType == 9 ? root : root.ownerDocument).defaultView || window);\n            this.mountStyles();\n        }\n    }\n    /**\n    Clean up this editor view, removing its element from the\n    document, unregistering event handlers, and notifying\n    plugins. The view instance can no longer be used after\n    calling this.\n    */\n    destroy() {\n        for (let plugin of this.plugins)\n            plugin.destroy(this);\n        this.plugins = [];\n        this.inputState.destroy();\n        this.dom.remove();\n        this.observer.destroy();\n        if (this.measureScheduled > -1)\n            this.win.cancelAnimationFrame(this.measureScheduled);\n        this.destroyed = true;\n    }\n    /**\n    Returns an effect that can be\n    [added](https://codemirror.net/6/docs/ref/#state.TransactionSpec.effects) to a transaction to\n    cause it to scroll the given position or range into view.\n    */\n    static scrollIntoView(pos, options = {}) {\n        return scrollIntoView.of(new ScrollTarget(typeof pos == \"number\" ? EditorSelection.cursor(pos) : pos, options.y, options.x, options.yMargin, options.xMargin));\n    }\n    /**\n    Return an effect that resets the editor to its current (at the\n    time this method was called) scroll position. Note that this\n    only affects the editor's own scrollable element, not parents.\n    See also\n    [`EditorViewConfig.scrollTo`](https://codemirror.net/6/docs/ref/#view.EditorViewConfig.scrollTo).\n    \n    The effect should be used with a document identical to the one\n    it was created for. Failing to do so is not an error, but may\n    not scroll to the expected position. You can\n    [map](https://codemirror.net/6/docs/ref/#state.StateEffect.map) the effect to account for changes.\n    */\n    scrollSnapshot() {\n        let { scrollTop, scrollLeft } = this.scrollDOM;\n        let ref = this.viewState.scrollAnchorAt(scrollTop);\n        return scrollIntoView.of(new ScrollTarget(EditorSelection.cursor(ref.from), \"start\", \"start\", ref.top - scrollTop, scrollLeft, true));\n    }\n    /**\n    Returns an extension that can be used to add DOM event handlers.\n    The value should be an object mapping event names to handler\n    functions. For any given event, such functions are ordered by\n    extension precedence, and the first handler to return true will\n    be assumed to have handled that event, and no other handlers or\n    built-in behavior will be activated for it. These are registered\n    on the [content element](https://codemirror.net/6/docs/ref/#view.EditorView.contentDOM), except\n    for `scroll` handlers, which will be called any time the\n    editor's [scroll element](https://codemirror.net/6/docs/ref/#view.EditorView.scrollDOM) or one of\n    its parent nodes is scrolled.\n    */\n    static domEventHandlers(handlers) {\n        return ViewPlugin.define(() => ({}), { eventHandlers: handlers });\n    }\n    /**\n    Create an extension that registers DOM event observers. Contrary\n    to event [handlers](https://codemirror.net/6/docs/ref/#view.EditorView^domEventHandlers),\n    observers can't be prevented from running by a higher-precedence\n    handler returning true. They also don't prevent other handlers\n    and observers from running when they return true, and should not\n    call `preventDefault`.\n    */\n    static domEventObservers(observers) {\n        return ViewPlugin.define(() => ({}), { eventObservers: observers });\n    }\n    /**\n    Create a theme extension. The first argument can be a\n    [`style-mod`](https://github.com/marijnh/style-mod#documentation)\n    style spec providing the styles for the theme. These will be\n    prefixed with a generated class for the style.\n    \n    Because the selectors will be prefixed with a scope class, rule\n    that directly match the editor's [wrapper\n    element](https://codemirror.net/6/docs/ref/#view.EditorView.dom)\u2014to which the scope class will be\n    added\u2014need to be explicitly differentiated by adding an `&` to\n    the selector for that element\u2014for example\n    `&.cm-focused`.\n    \n    When `dark` is set to true, the theme will be marked as dark,\n    which will cause the `&dark` rules from [base\n    themes](https://codemirror.net/6/docs/ref/#view.EditorView^baseTheme) to be used (as opposed to\n    `&light` when a light theme is active).\n    */\n    static theme(spec, options) {\n        let prefix = StyleModule.newName();\n        let result = [theme.of(prefix), styleModule.of(buildTheme(`.${prefix}`, spec))];\n        if (options && options.dark)\n            result.push(darkTheme.of(true));\n        return result;\n    }\n    /**\n    Create an extension that adds styles to the base theme. Like\n    with [`theme`](https://codemirror.net/6/docs/ref/#view.EditorView^theme), use `&` to indicate the\n    place of the editor wrapper element when directly targeting\n    that. You can also use `&dark` or `&light` instead to only\n    target editors with a dark or light theme.\n    */\n    static baseTheme(spec) {\n        return Prec.lowest(styleModule.of(buildTheme(\".\" + baseThemeID, spec, lightDarkIDs)));\n    }\n    /**\n    Retrieve an editor view instance from the view's DOM\n    representation.\n    */\n    static findFromDOM(dom) {\n        var _a;\n        let content = dom.querySelector(\".cm-content\");\n        let cView = content && ContentView.get(content) || ContentView.get(dom);\n        return ((_a = cView === null || cView === void 0 ? void 0 : cView.rootView) === null || _a === void 0 ? void 0 : _a.view) || null;\n    }\n}\n/**\nFacet to add a [style\nmodule](https://github.com/marijnh/style-mod#documentation) to\nan editor view. The view will ensure that the module is\nmounted in its [document\nroot](https://codemirror.net/6/docs/ref/#view.EditorView.constructor^config.root).\n*/\nEditorView.styleModule = styleModule;\n/**\nAn input handler can override the way changes to the editable\nDOM content are handled. Handlers are passed the document\npositions between which the change was found, and the new\ncontent. When one returns true, no further input handlers are\ncalled and the default behavior is prevented.\n\nThe `insert` argument can be used to get the default transaction\nthat would be applied for this input. This can be useful when\ndispatching the custom behavior as a separate transaction.\n*/\nEditorView.inputHandler = inputHandler;\n/**\nThis facet can be used to provide functions that create effects\nto be dispatched when the editor's focus state changes.\n*/\nEditorView.focusChangeEffect = focusChangeEffect;\n/**\nBy default, the editor assumes all its content has the same\n[text direction](https://codemirror.net/6/docs/ref/#view.Direction). Configure this with a `true`\nvalue to make it read the text direction of every (rendered)\nline separately.\n*/\nEditorView.perLineTextDirection = perLineTextDirection;\n/**\nAllows you to provide a function that should be called when the\nlibrary catches an exception from an extension (mostly from view\nplugins, but may be used by other extensions to route exceptions\nfrom user-code-provided callbacks). This is mostly useful for\ndebugging and logging. See [`logException`](https://codemirror.net/6/docs/ref/#view.logException).\n*/\nEditorView.exceptionSink = exceptionSink;\n/**\nA facet that can be used to register a function to be called\nevery time the view updates.\n*/\nEditorView.updateListener = updateListener;\n/**\nFacet that controls whether the editor content DOM is editable.\nWhen its highest-precedence value is `false`, the element will\nnot have its `contenteditable` attribute set. (Note that this\ndoesn't affect API calls that change the editor content, even\nwhen those are bound to keys or buttons. See the\n[`readOnly`](https://codemirror.net/6/docs/ref/#state.EditorState.readOnly) facet for that.)\n*/\nEditorView.editable = editable;\n/**\nAllows you to influence the way mouse selection happens. The\nfunctions in this facet will be called for a `mousedown` event\non the editor, and can return an object that overrides the way a\nselection is computed from that mouse click or drag.\n*/\nEditorView.mouseSelectionStyle = mouseSelectionStyle;\n/**\nFacet used to configure whether a given selection drag event\nshould move or copy the selection. The given predicate will be\ncalled with the `mousedown` event, and can return `true` when\nthe drag should move the content.\n*/\nEditorView.dragMovesSelection = dragMovesSelection$1;\n/**\nFacet used to configure whether a given selecting click adds a\nnew range to the existing selection or replaces it entirely. The\ndefault behavior is to check `event.metaKey` on macOS, and\n`event.ctrlKey` elsewhere.\n*/\nEditorView.clickAddsSelectionRange = clickAddsSelectionRange;\n/**\nA facet that determines which [decorations](https://codemirror.net/6/docs/ref/#view.Decoration)\nare shown in the view. Decorations can be provided in two\nways\u2014directly, or via a function that takes an editor view.\n\nOnly decoration sets provided directly are allowed to influence\nthe editor's vertical layout structure. The ones provided as\nfunctions are called _after_ the new viewport has been computed,\nand thus **must not** introduce block widgets or replacing\ndecorations that cover line breaks.\n\nIf you want decorated ranges to behave like atomic units for\ncursor motion and deletion purposes, also provide the range set\ncontaining the decorations to\n[`EditorView.atomicRanges`](https://codemirror.net/6/docs/ref/#view.EditorView^atomicRanges).\n*/\nEditorView.decorations = decorations;\n/**\nUsed to provide ranges that should be treated as atoms as far as\ncursor motion is concerned. This causes methods like\n[`moveByChar`](https://codemirror.net/6/docs/ref/#view.EditorView.moveByChar) and\n[`moveVertically`](https://codemirror.net/6/docs/ref/#view.EditorView.moveVertically) (and the\ncommands built on top of them) to skip across such regions when\na selection endpoint would enter them. This does _not_ prevent\ndirect programmatic [selection\nupdates](https://codemirror.net/6/docs/ref/#state.TransactionSpec.selection) from moving into such\nregions.\n*/\nEditorView.atomicRanges = atomicRanges;\n/**\nWhen range decorations add a `unicode-bidi: isolate` style, they\nshould also include a\n[`bidiIsolate`](https://codemirror.net/6/docs/ref/#view.MarkDecorationSpec.bidiIsolate) property\nin their decoration spec, and be exposed through this facet, so\nthat the editor can compute the proper text order. (Other values\nfor `unicode-bidi`, except of course `normal`, are not\nsupported.)\n*/\nEditorView.bidiIsolatedRanges = bidiIsolatedRanges;\n/**\nFacet that allows extensions to provide additional scroll\nmargins (space around the sides of the scrolling element that\nshould be considered invisible). This can be useful when the\nplugin introduces elements that cover part of that element (for\nexample a horizontally fixed gutter).\n*/\nEditorView.scrollMargins = scrollMargins;\n/**\nThis facet records whether a dark theme is active. The extension\nreturned by [`theme`](https://codemirror.net/6/docs/ref/#view.EditorView^theme) automatically\nincludes an instance of this when the `dark` option is set to\ntrue.\n*/\nEditorView.darkTheme = darkTheme;\n/**\nProvides a Content Security Policy nonce to use when creating\nthe style sheets for the editor. Holds the empty string when no\nnonce has been provided.\n*/\nEditorView.cspNonce = /*@__PURE__*/Facet.define({ combine: values => values.length ? values[0] : \"\" });\n/**\nFacet that provides additional DOM attributes for the editor's\neditable DOM element.\n*/\nEditorView.contentAttributes = contentAttributes;\n/**\nFacet that provides DOM attributes for the editor's outer\nelement.\n*/\nEditorView.editorAttributes = editorAttributes;\n/**\nAn extension that enables line wrapping in the editor (by\nsetting CSS `white-space` to `pre-wrap` in the content).\n*/\nEditorView.lineWrapping = /*@__PURE__*/EditorView.contentAttributes.of({ \"class\": \"cm-lineWrapping\" });\n/**\nState effect used to include screen reader announcements in a\ntransaction. These will be added to the DOM in a visually hidden\nelement with `aria-live=\"polite\"` set, and should be used to\ndescribe effects that are visually obvious but may not be\nnoticed by screen reader users (such as moving to the next\nsearch match).\n*/\nEditorView.announce = /*@__PURE__*/StateEffect.define();\n// Maximum line length for which we compute accurate bidi info\nconst MaxBidiLine = 4096;\nconst BadMeasure = {};\nclass CachedOrder {\n    constructor(from, to, dir, isolates, fresh, order) {\n        this.from = from;\n        this.to = to;\n        this.dir = dir;\n        this.isolates = isolates;\n        this.fresh = fresh;\n        this.order = order;\n    }\n    static update(cache, changes) {\n        if (changes.empty && !cache.some(c => c.fresh))\n            return cache;\n        let result = [], lastDir = cache.length ? cache[cache.length - 1].dir : Direction.LTR;\n        for (let i = Math.max(0, cache.length - 10); i < cache.length; i++) {\n            let entry = cache[i];\n            if (entry.dir == lastDir && !changes.touchesRange(entry.from, entry.to))\n                result.push(new CachedOrder(changes.mapPos(entry.from, 1), changes.mapPos(entry.to, -1), entry.dir, entry.isolates, false, entry.order));\n        }\n        return result;\n    }\n}\nfunction attrsFromFacet(view, facet, base) {\n    for (let sources = view.state.facet(facet), i = sources.length - 1; i >= 0; i--) {\n        let source = sources[i], value = typeof source == \"function\" ? source(view) : source;\n        if (value)\n            combineAttrs(value, base);\n    }\n    return base;\n}\n\nconst currentPlatform = browser.mac ? \"mac\" : browser.windows ? \"win\" : browser.linux ? \"linux\" : \"key\";\nfunction normalizeKeyName(name, platform) {\n    const parts = name.split(/-(?!$)/);\n    let result = parts[parts.length - 1];\n    if (result == \"Space\")\n        result = \" \";\n    let alt, ctrl, shift, meta;\n    for (let i = 0; i < parts.length - 1; ++i) {\n        const mod = parts[i];\n        if (/^(cmd|meta|m)$/i.test(mod))\n            meta = true;\n        else if (/^a(lt)?$/i.test(mod))\n            alt = true;\n        else if (/^(c|ctrl|control)$/i.test(mod))\n            ctrl = true;\n        else if (/^s(hift)?$/i.test(mod))\n            shift = true;\n        else if (/^mod$/i.test(mod)) {\n            if (platform == \"mac\")\n                meta = true;\n            else\n                ctrl = true;\n        }\n        else\n            throw new Error(\"Unrecognized modifier name: \" + mod);\n    }\n    if (alt)\n        result = \"Alt-\" + result;\n    if (ctrl)\n        result = \"Ctrl-\" + result;\n    if (meta)\n        result = \"Meta-\" + result;\n    if (shift)\n        result = \"Shift-\" + result;\n    return result;\n}\nfunction modifiers(name, event, shift) {\n    if (event.altKey)\n        name = \"Alt-\" + name;\n    if (event.ctrlKey)\n        name = \"Ctrl-\" + name;\n    if (event.metaKey)\n        name = \"Meta-\" + name;\n    if (shift !== false && event.shiftKey)\n        name = \"Shift-\" + name;\n    return name;\n}\nconst handleKeyEvents = /*@__PURE__*/Prec.default(/*@__PURE__*/EditorView.domEventHandlers({\n    keydown(event, view) {\n        return runHandlers(getKeymap(view.state), event, view, \"editor\");\n    }\n}));\n/**\nFacet used for registering keymaps.\n\nYou can add multiple keymaps to an editor. Their priorities\ndetermine their precedence (the ones specified early or with high\npriority get checked first). When a handler has returned `true`\nfor a given key, no further handlers are called.\n*/\nconst keymap = /*@__PURE__*/Facet.define({ enables: handleKeyEvents });\nconst Keymaps = /*@__PURE__*/new WeakMap();\n// This is hidden behind an indirection, rather than directly computed\n// by the facet, to keep internal types out of the facet's type.\nfunction getKeymap(state) {\n    let bindings = state.facet(keymap);\n    let map = Keymaps.get(bindings);\n    if (!map)\n        Keymaps.set(bindings, map = buildKeymap(bindings.reduce((a, b) => a.concat(b), [])));\n    return map;\n}\n/**\nRun the key handlers registered for a given scope. The event\nobject should be a `\"keydown\"` event. Returns true if any of the\nhandlers handled it.\n*/\nfunction runScopeHandlers(view, event, scope) {\n    return runHandlers(getKeymap(view.state), event, view, scope);\n}\nlet storedPrefix = null;\nconst PrefixTimeout = 4000;\nfunction buildKeymap(bindings, platform = currentPlatform) {\n    let bound = Object.create(null);\n    let isPrefix = Object.create(null);\n    let checkPrefix = (name, is) => {\n        let current = isPrefix[name];\n        if (current == null)\n            isPrefix[name] = is;\n        else if (current != is)\n            throw new Error(\"Key binding \" + name + \" is used both as a regular binding and as a multi-stroke prefix\");\n    };\n    let add = (scope, key, command, preventDefault, stopPropagation) => {\n        var _a, _b;\n        let scopeObj = bound[scope] || (bound[scope] = Object.create(null));\n        let parts = key.split(/ (?!$)/).map(k => normalizeKeyName(k, platform));\n        for (let i = 1; i < parts.length; i++) {\n            let prefix = parts.slice(0, i).join(\" \");\n            checkPrefix(prefix, true);\n            if (!scopeObj[prefix])\n                scopeObj[prefix] = {\n                    preventDefault: true,\n                    stopPropagation: false,\n                    run: [(view) => {\n                            let ourObj = storedPrefix = { view, prefix, scope };\n                            setTimeout(() => { if (storedPrefix == ourObj)\n                                storedPrefix = null; }, PrefixTimeout);\n                            return true;\n                        }]\n                };\n        }\n        let full = parts.join(\" \");\n        checkPrefix(full, false);\n        let binding = scopeObj[full] || (scopeObj[full] = {\n            preventDefault: false,\n            stopPropagation: false,\n            run: ((_b = (_a = scopeObj._any) === null || _a === void 0 ? void 0 : _a.run) === null || _b === void 0 ? void 0 : _b.slice()) || []\n        });\n        if (command)\n            binding.run.push(command);\n        if (preventDefault)\n            binding.preventDefault = true;\n        if (stopPropagation)\n            binding.stopPropagation = true;\n    };\n    for (let b of bindings) {\n        let scopes = b.scope ? b.scope.split(\" \") : [\"editor\"];\n        if (b.any)\n            for (let scope of scopes) {\n                let scopeObj = bound[scope] || (bound[scope] = Object.create(null));\n                if (!scopeObj._any)\n                    scopeObj._any = { preventDefault: false, stopPropagation: false, run: [] };\n                for (let key in scopeObj)\n                    scopeObj[key].run.push(b.any);\n            }\n        let name = b[platform] || b.key;\n        if (!name)\n            continue;\n        for (let scope of scopes) {\n            add(scope, name, b.run, b.preventDefault, b.stopPropagation);\n            if (b.shift)\n                add(scope, \"Shift-\" + name, b.shift, b.preventDefault, b.stopPropagation);\n        }\n    }\n    return bound;\n}\nfunction runHandlers(map, event, view, scope) {\n    let name = keyName(event);\n    let charCode = codePointAt(name, 0), isChar = codePointSize(charCode) == name.length && name != \" \";\n    let prefix = \"\", handled = false, prevented = false, stopPropagation = false;\n    if (storedPrefix && storedPrefix.view == view && storedPrefix.scope == scope) {\n        prefix = storedPrefix.prefix + \" \";\n        if (modifierCodes.indexOf(event.keyCode) < 0) {\n            prevented = true;\n            storedPrefix = null;\n        }\n    }\n    let ran = new Set;\n    let runFor = (binding) => {\n        if (binding) {\n            for (let cmd of binding.run)\n                if (!ran.has(cmd)) {\n                    ran.add(cmd);\n                    if (cmd(view, event)) {\n                        if (binding.stopPropagation)\n                            stopPropagation = true;\n                        return true;\n                    }\n                }\n            if (binding.preventDefault) {\n                if (binding.stopPropagation)\n                    stopPropagation = true;\n                prevented = true;\n            }\n        }\n        return false;\n    };\n    let scopeObj = map[scope], baseName, shiftName;\n    if (scopeObj) {\n        if (runFor(scopeObj[prefix + modifiers(name, event, !isChar)])) {\n            handled = true;\n        }\n        else if (isChar && (event.altKey || event.metaKey || event.ctrlKey) &&\n            // Ctrl-Alt may be used for AltGr on Windows\n            !(browser.windows && event.ctrlKey && event.altKey) &&\n            (baseName = base[event.keyCode]) && baseName != name) {\n            if (runFor(scopeObj[prefix + modifiers(baseName, event, true)])) {\n                handled = true;\n            }\n            else if (event.shiftKey && (shiftName = shift[event.keyCode]) != name && shiftName != baseName &&\n                runFor(scopeObj[prefix + modifiers(shiftName, event, false)])) {\n                handled = true;\n            }\n        }\n        else if (isChar && event.shiftKey &&\n            runFor(scopeObj[prefix + modifiers(name, event, true)])) {\n            handled = true;\n        }\n        if (!handled && runFor(scopeObj._any))\n            handled = true;\n    }\n    if (prevented)\n        handled = true;\n    if (handled && stopPropagation)\n        event.stopPropagation();\n    return handled;\n}\n\n/**\nImplementation of [`LayerMarker`](https://codemirror.net/6/docs/ref/#view.LayerMarker) that creates\na rectangle at a given set of coordinates.\n*/\nclass RectangleMarker {\n    /**\n    Create a marker with the given class and dimensions. If `width`\n    is null, the DOM element will get no width style.\n    */\n    constructor(className, \n    /**\n    The left position of the marker (in pixels, document-relative).\n    */\n    left, \n    /**\n    The top position of the marker.\n    */\n    top, \n    /**\n    The width of the marker, or null if it shouldn't get a width assigned.\n    */\n    width, \n    /**\n    The height of the marker.\n    */\n    height) {\n        this.className = className;\n        this.left = left;\n        this.top = top;\n        this.width = width;\n        this.height = height;\n    }\n    draw() {\n        let elt = document.createElement(\"div\");\n        elt.className = this.className;\n        this.adjust(elt);\n        return elt;\n    }\n    update(elt, prev) {\n        if (prev.className != this.className)\n            return false;\n        this.adjust(elt);\n        return true;\n    }\n    adjust(elt) {\n        elt.style.left = this.left + \"px\";\n        elt.style.top = this.top + \"px\";\n        if (this.width != null)\n            elt.style.width = this.width + \"px\";\n        elt.style.height = this.height + \"px\";\n    }\n    eq(p) {\n        return this.left == p.left && this.top == p.top && this.width == p.width && this.height == p.height &&\n            this.className == p.className;\n    }\n    /**\n    Create a set of rectangles for the given selection range,\n    assigning them theclass`className`. Will create a single\n    rectangle for empty ranges, and a set of selection-style\n    rectangles covering the range's content (in a bidi-aware\n    way) for non-empty ones.\n    */\n    static forRange(view, className, range) {\n        if (range.empty) {\n            let pos = view.coordsAtPos(range.head, range.assoc || 1);\n            if (!pos)\n                return [];\n            let base = getBase(view);\n            return [new RectangleMarker(className, pos.left - base.left, pos.top - base.top, null, pos.bottom - pos.top)];\n        }\n        else {\n            return rectanglesForRange(view, className, range);\n        }\n    }\n}\nfunction getBase(view) {\n    let rect = view.scrollDOM.getBoundingClientRect();\n    let left = view.textDirection == Direction.LTR ? rect.left : rect.right - view.scrollDOM.clientWidth * view.scaleX;\n    return { left: left - view.scrollDOM.scrollLeft * view.scaleX, top: rect.top - view.scrollDOM.scrollTop * view.scaleY };\n}\nfunction wrappedLine(view, pos, inside) {\n    let range = EditorSelection.cursor(pos);\n    return { from: Math.max(inside.from, view.moveToLineBoundary(range, false, true).from),\n        to: Math.min(inside.to, view.moveToLineBoundary(range, true, true).from),\n        type: BlockType.Text };\n}\nfunction rectanglesForRange(view, className, range) {\n    if (range.to <= view.viewport.from || range.from >= view.viewport.to)\n        return [];\n    let from = Math.max(range.from, view.viewport.from), to = Math.min(range.to, view.viewport.to);\n    let ltr = view.textDirection == Direction.LTR;\n    let content = view.contentDOM, contentRect = content.getBoundingClientRect(), base = getBase(view);\n    let lineElt = content.querySelector(\".cm-line\"), lineStyle = lineElt && window.getComputedStyle(lineElt);\n    let leftSide = contentRect.left +\n        (lineStyle ? parseInt(lineStyle.paddingLeft) + Math.min(0, parseInt(lineStyle.textIndent)) : 0);\n    let rightSide = contentRect.right - (lineStyle ? parseInt(lineStyle.paddingRight) : 0);\n    let startBlock = blockAt(view, from), endBlock = blockAt(view, to);\n    let visualStart = startBlock.type == BlockType.Text ? startBlock : null;\n    let visualEnd = endBlock.type == BlockType.Text ? endBlock : null;\n    if (visualStart && (view.lineWrapping || startBlock.widgetLineBreaks))\n        visualStart = wrappedLine(view, from, visualStart);\n    if (visualEnd && (view.lineWrapping || endBlock.widgetLineBreaks))\n        visualEnd = wrappedLine(view, to, visualEnd);\n    if (visualStart && visualEnd && visualStart.from == visualEnd.from) {\n        return pieces(drawForLine(range.from, range.to, visualStart));\n    }\n    else {\n        let top = visualStart ? drawForLine(range.from, null, visualStart) : drawForWidget(startBlock, false);\n        let bottom = visualEnd ? drawForLine(null, range.to, visualEnd) : drawForWidget(endBlock, true);\n        let between = [];\n        if ((visualStart || startBlock).to < (visualEnd || endBlock).from - (visualStart && visualEnd ? 1 : 0) ||\n            startBlock.widgetLineBreaks > 1 && top.bottom + view.defaultLineHeight / 2 < bottom.top)\n            between.push(piece(leftSide, top.bottom, rightSide, bottom.top));\n        else if (top.bottom < bottom.top && view.elementAtHeight((top.bottom + bottom.top) / 2).type == BlockType.Text)\n            top.bottom = bottom.top = (top.bottom + bottom.top) / 2;\n        return pieces(top).concat(between).concat(pieces(bottom));\n    }\n    function piece(left, top, right, bottom) {\n        return new RectangleMarker(className, left - base.left, top - base.top - 0.01 /* C.Epsilon */, right - left, bottom - top + 0.01 /* C.Epsilon */);\n    }\n    function pieces({ top, bottom, horizontal }) {\n        let pieces = [];\n        for (let i = 0; i < horizontal.length; i += 2)\n            pieces.push(piece(horizontal[i], top, horizontal[i + 1], bottom));\n        return pieces;\n    }\n    // Gets passed from/to in line-local positions\n    function drawForLine(from, to, line) {\n        let top = 1e9, bottom = -1e9, horizontal = [];\n        function addSpan(from, fromOpen, to, toOpen, dir) {\n            // Passing 2/-2 is a kludge to force the view to return\n            // coordinates on the proper side of block widgets, since\n            // normalizing the side there, though appropriate for most\n            // coordsAtPos queries, would break selection drawing.\n            let fromCoords = view.coordsAtPos(from, (from == line.to ? -2 : 2));\n            let toCoords = view.coordsAtPos(to, (to == line.from ? 2 : -2));\n            if (!fromCoords || !toCoords)\n                return;\n            top = Math.min(fromCoords.top, toCoords.top, top);\n            bottom = Math.max(fromCoords.bottom, toCoords.bottom, bottom);\n            if (dir == Direction.LTR)\n                horizontal.push(ltr && fromOpen ? leftSide : fromCoords.left, ltr && toOpen ? rightSide : toCoords.right);\n            else\n                horizontal.push(!ltr && toOpen ? leftSide : toCoords.left, !ltr && fromOpen ? rightSide : fromCoords.right);\n        }\n        let start = from !== null && from !== void 0 ? from : line.from, end = to !== null && to !== void 0 ? to : line.to;\n        // Split the range by visible range and document line\n        for (let r of view.visibleRanges)\n            if (r.to > start && r.from < end) {\n                for (let pos = Math.max(r.from, start), endPos = Math.min(r.to, end);;) {\n                    let docLine = view.state.doc.lineAt(pos);\n                    for (let span of view.bidiSpans(docLine)) {\n                        let spanFrom = span.from + docLine.from, spanTo = span.to + docLine.from;\n                        if (spanFrom >= endPos)\n                            break;\n                        if (spanTo > pos)\n                            addSpan(Math.max(spanFrom, pos), from == null && spanFrom <= start, Math.min(spanTo, endPos), to == null && spanTo >= end, span.dir);\n                    }\n                    pos = docLine.to + 1;\n                    if (pos >= endPos)\n                        break;\n                }\n            }\n        if (horizontal.length == 0)\n            addSpan(start, from == null, end, to == null, view.textDirection);\n        return { top, bottom, horizontal };\n    }\n    function drawForWidget(block, top) {\n        let y = contentRect.top + (top ? block.top : block.bottom);\n        return { top: y, bottom: y, horizontal: [] };\n    }\n}\nfunction sameMarker(a, b) {\n    return a.constructor == b.constructor && a.eq(b);\n}\nclass LayerView {\n    constructor(view, layer) {\n        this.view = view;\n        this.layer = layer;\n        this.drawn = [];\n        this.scaleX = 1;\n        this.scaleY = 1;\n        this.measureReq = { read: this.measure.bind(this), write: this.draw.bind(this) };\n        this.dom = view.scrollDOM.appendChild(document.createElement(\"div\"));\n        this.dom.classList.add(\"cm-layer\");\n        if (layer.above)\n            this.dom.classList.add(\"cm-layer-above\");\n        if (layer.class)\n            this.dom.classList.add(layer.class);\n        this.scale();\n        this.dom.setAttribute(\"aria-hidden\", \"true\");\n        this.setOrder(view.state);\n        view.requestMeasure(this.measureReq);\n        if (layer.mount)\n            layer.mount(this.dom, view);\n    }\n    update(update) {\n        if (update.startState.facet(layerOrder) != update.state.facet(layerOrder))\n            this.setOrder(update.state);\n        if (this.layer.update(update, this.dom) || update.geometryChanged) {\n            this.scale();\n            update.view.requestMeasure(this.measureReq);\n        }\n    }\n    setOrder(state) {\n        let pos = 0, order = state.facet(layerOrder);\n        while (pos < order.length && order[pos] != this.layer)\n            pos++;\n        this.dom.style.zIndex = String((this.layer.above ? 150 : -1) - pos);\n    }\n    measure() {\n        return this.layer.markers(this.view);\n    }\n    scale() {\n        let { scaleX, scaleY } = this.view;\n        if (scaleX != this.scaleX || scaleY != this.scaleY) {\n            this.scaleX = scaleX;\n            this.scaleY = scaleY;\n            this.dom.style.transform = `scale(${1 / scaleX}, ${1 / scaleY})`;\n        }\n    }\n    draw(markers) {\n        if (markers.length != this.drawn.length || markers.some((p, i) => !sameMarker(p, this.drawn[i]))) {\n            let old = this.dom.firstChild, oldI = 0;\n            for (let marker of markers) {\n                if (marker.update && old && marker.constructor && this.drawn[oldI].constructor &&\n                    marker.update(old, this.drawn[oldI])) {\n                    old = old.nextSibling;\n                    oldI++;\n                }\n                else {\n                    this.dom.insertBefore(marker.draw(), old);\n                }\n            }\n            while (old) {\n                let next = old.nextSibling;\n                old.remove();\n                old = next;\n            }\n            this.drawn = markers;\n        }\n    }\n    destroy() {\n        if (this.layer.destroy)\n            this.layer.destroy(this.dom, this.view);\n        this.dom.remove();\n    }\n}\nconst layerOrder = /*@__PURE__*/Facet.define();\n/**\nDefine a layer.\n*/\nfunction layer(config) {\n    return [\n        ViewPlugin.define(v => new LayerView(v, config)),\n        layerOrder.of(config)\n    ];\n}\n\nconst CanHidePrimary = !browser.ios; // FIXME test IE\nconst selectionConfig = /*@__PURE__*/Facet.define({\n    combine(configs) {\n        return combineConfig(configs, {\n            cursorBlinkRate: 1200,\n            drawRangeCursor: true\n        }, {\n            cursorBlinkRate: (a, b) => Math.min(a, b),\n            drawRangeCursor: (a, b) => a || b\n        });\n    }\n});\n/**\nReturns an extension that hides the browser's native selection and\ncursor, replacing the selection with a background behind the text\n(with the `cm-selectionBackground` class), and the\ncursors with elements overlaid over the code (using\n`cm-cursor-primary` and `cm-cursor-secondary`).\n\nThis allows the editor to display secondary selection ranges, and\ntends to produce a type of selection more in line with that users\nexpect in a text editor (the native selection styling will often\nleave gaps between lines and won't fill the horizontal space after\na line when the selection continues past it).\n\nIt does have a performance cost, in that it requires an extra DOM\nlayout cycle for many updates (the selection is drawn based on DOM\nlayout information that's only available after laying out the\ncontent).\n*/\nfunction drawSelection(config = {}) {\n    return [\n        selectionConfig.of(config),\n        cursorLayer,\n        selectionLayer,\n        hideNativeSelection,\n        nativeSelectionHidden.of(true)\n    ];\n}\n/**\nRetrieve the [`drawSelection`](https://codemirror.net/6/docs/ref/#view.drawSelection) configuration\nfor this state. (Note that this will return a set of defaults even\nif `drawSelection` isn't enabled.)\n*/\nfunction getDrawSelectionConfig(state) {\n    return state.facet(selectionConfig);\n}\nfunction configChanged(update) {\n    return update.startState.facet(selectionConfig) != update.state.facet(selectionConfig);\n}\nconst cursorLayer = /*@__PURE__*/layer({\n    above: true,\n    markers(view) {\n        let { state } = view, conf = state.facet(selectionConfig);\n        let cursors = [];\n        for (let r of state.selection.ranges) {\n            let prim = r == state.selection.main;\n            if (r.empty ? !prim || CanHidePrimary : conf.drawRangeCursor) {\n                let className = prim ? \"cm-cursor cm-cursor-primary\" : \"cm-cursor cm-cursor-secondary\";\n                let cursor = r.empty ? r : EditorSelection.cursor(r.head, r.head > r.anchor ? -1 : 1);\n                for (let piece of RectangleMarker.forRange(view, className, cursor))\n                    cursors.push(piece);\n            }\n        }\n        return cursors;\n    },\n    update(update, dom) {\n        if (update.transactions.some(tr => tr.selection))\n            dom.style.animationName = dom.style.animationName == \"cm-blink\" ? \"cm-blink2\" : \"cm-blink\";\n        let confChange = configChanged(update);\n        if (confChange)\n            setBlinkRate(update.state, dom);\n        return update.docChanged || update.selectionSet || confChange;\n    },\n    mount(dom, view) {\n        setBlinkRate(view.state, dom);\n    },\n    class: \"cm-cursorLayer\"\n});\nfunction setBlinkRate(state, dom) {\n    dom.style.animationDuration = state.facet(selectionConfig).cursorBlinkRate + \"ms\";\n}\nconst selectionLayer = /*@__PURE__*/layer({\n    above: false,\n    markers(view) {\n        return view.state.selection.ranges.map(r => r.empty ? [] : RectangleMarker.forRange(view, \"cm-selectionBackground\", r))\n            .reduce((a, b) => a.concat(b));\n    },\n    update(update, dom) {\n        return update.docChanged || update.selectionSet || update.viewportChanged || configChanged(update);\n    },\n    class: \"cm-selectionLayer\"\n});\nconst themeSpec = {\n    \".cm-line\": {\n        \"& ::selection\": { backgroundColor: \"transparent !important\" },\n        \"&::selection\": { backgroundColor: \"transparent !important\" }\n    }\n};\nif (CanHidePrimary)\n    themeSpec[\".cm-line\"].caretColor = \"transparent !important\";\nconst hideNativeSelection = /*@__PURE__*/Prec.highest(/*@__PURE__*/EditorView.theme(themeSpec));\n\nconst setDropCursorPos = /*@__PURE__*/StateEffect.define({\n    map(pos, mapping) { return pos == null ? null : mapping.mapPos(pos); }\n});\nconst dropCursorPos = /*@__PURE__*/StateField.define({\n    create() { return null; },\n    update(pos, tr) {\n        if (pos != null)\n            pos = tr.changes.mapPos(pos);\n        return tr.effects.reduce((pos, e) => e.is(setDropCursorPos) ? e.value : pos, pos);\n    }\n});\nconst drawDropCursor = /*@__PURE__*/ViewPlugin.fromClass(class {\n    constructor(view) {\n        this.view = view;\n        this.cursor = null;\n        this.measureReq = { read: this.readPos.bind(this), write: this.drawCursor.bind(this) };\n    }\n    update(update) {\n        var _a;\n        let cursorPos = update.state.field(dropCursorPos);\n        if (cursorPos == null) {\n            if (this.cursor != null) {\n                (_a = this.cursor) === null || _a === void 0 ? void 0 : _a.remove();\n                this.cursor = null;\n            }\n        }\n        else {\n            if (!this.cursor) {\n                this.cursor = this.view.scrollDOM.appendChild(document.createElement(\"div\"));\n                this.cursor.className = \"cm-dropCursor\";\n            }\n            if (update.startState.field(dropCursorPos) != cursorPos || update.docChanged || update.geometryChanged)\n                this.view.requestMeasure(this.measureReq);\n        }\n    }\n    readPos() {\n        let { view } = this;\n        let pos = view.state.field(dropCursorPos);\n        let rect = pos != null && view.coordsAtPos(pos);\n        if (!rect)\n            return null;\n        let outer = view.scrollDOM.getBoundingClientRect();\n        return {\n            left: rect.left - outer.left + view.scrollDOM.scrollLeft * view.scaleX,\n            top: rect.top - outer.top + view.scrollDOM.scrollTop * view.scaleY,\n            height: rect.bottom - rect.top\n        };\n    }\n    drawCursor(pos) {\n        if (this.cursor) {\n            let { scaleX, scaleY } = this.view;\n            if (pos) {\n                this.cursor.style.left = pos.left / scaleX + \"px\";\n                this.cursor.style.top = pos.top / scaleY + \"px\";\n                this.cursor.style.height = pos.height / scaleY + \"px\";\n            }\n            else {\n                this.cursor.style.left = \"-100000px\";\n            }\n        }\n    }\n    destroy() {\n        if (this.cursor)\n            this.cursor.remove();\n    }\n    setDropPos(pos) {\n        if (this.view.state.field(dropCursorPos) != pos)\n            this.view.dispatch({ effects: setDropCursorPos.of(pos) });\n    }\n}, {\n    eventObservers: {\n        dragover(event) {\n            this.setDropPos(this.view.posAtCoords({ x: event.clientX, y: event.clientY }));\n        },\n        dragleave(event) {\n            if (event.target == this.view.contentDOM || !this.view.contentDOM.contains(event.relatedTarget))\n                this.setDropPos(null);\n        },\n        dragend() {\n            this.setDropPos(null);\n        },\n        drop() {\n            this.setDropPos(null);\n        }\n    }\n});\n/**\nDraws a cursor at the current drop position when something is\ndragged over the editor.\n*/\nfunction dropCursor() {\n    return [dropCursorPos, drawDropCursor];\n}\n\nfunction iterMatches(doc, re, from, to, f) {\n    re.lastIndex = 0;\n    for (let cursor = doc.iterRange(from, to), pos = from, m; !cursor.next().done; pos += cursor.value.length) {\n        if (!cursor.lineBreak)\n            while (m = re.exec(cursor.value))\n                f(pos + m.index, m);\n    }\n}\nfunction matchRanges(view, maxLength) {\n    let visible = view.visibleRanges;\n    if (visible.length == 1 && visible[0].from == view.viewport.from &&\n        visible[0].to == view.viewport.to)\n        return visible;\n    let result = [];\n    for (let { from, to } of visible) {\n        from = Math.max(view.state.doc.lineAt(from).from, from - maxLength);\n        to = Math.min(view.state.doc.lineAt(to).to, to + maxLength);\n        if (result.length && result[result.length - 1].to >= from)\n            result[result.length - 1].to = to;\n        else\n            result.push({ from, to });\n    }\n    return result;\n}\n/**\nHelper class used to make it easier to maintain decorations on\nvisible code that matches a given regular expression. To be used\nin a [view plugin](https://codemirror.net/6/docs/ref/#view.ViewPlugin). Instances of this object\nrepresent a matching configuration.\n*/\nclass MatchDecorator {\n    /**\n    Create a decorator.\n    */\n    constructor(config) {\n        const { regexp, decoration, decorate, boundary, maxLength = 1000 } = config;\n        if (!regexp.global)\n            throw new RangeError(\"The regular expression given to MatchDecorator should have its 'g' flag set\");\n        this.regexp = regexp;\n        if (decorate) {\n            this.addMatch = (match, view, from, add) => decorate(add, from, from + match[0].length, match, view);\n        }\n        else if (typeof decoration == \"function\") {\n            this.addMatch = (match, view, from, add) => {\n                let deco = decoration(match, view, from);\n                if (deco)\n                    add(from, from + match[0].length, deco);\n            };\n        }\n        else if (decoration) {\n            this.addMatch = (match, _view, from, add) => add(from, from + match[0].length, decoration);\n        }\n        else {\n            throw new RangeError(\"Either 'decorate' or 'decoration' should be provided to MatchDecorator\");\n        }\n        this.boundary = boundary;\n        this.maxLength = maxLength;\n    }\n    /**\n    Compute the full set of decorations for matches in the given\n    view's viewport. You'll want to call this when initializing your\n    plugin.\n    */\n    createDeco(view) {\n        let build = new RangeSetBuilder(), add = build.add.bind(build);\n        for (let { from, to } of matchRanges(view, this.maxLength))\n            iterMatches(view.state.doc, this.regexp, from, to, (from, m) => this.addMatch(m, view, from, add));\n        return build.finish();\n    }\n    /**\n    Update a set of decorations for a view update. `deco` _must_ be\n    the set of decorations produced by _this_ `MatchDecorator` for\n    the view state before the update.\n    */\n    updateDeco(update, deco) {\n        let changeFrom = 1e9, changeTo = -1;\n        if (update.docChanged)\n            update.changes.iterChanges((_f, _t, from, to) => {\n                if (to > update.view.viewport.from && from < update.view.viewport.to) {\n                    changeFrom = Math.min(from, changeFrom);\n                    changeTo = Math.max(to, changeTo);\n                }\n            });\n        if (update.viewportChanged || changeTo - changeFrom > 1000)\n            return this.createDeco(update.view);\n        if (changeTo > -1)\n            return this.updateRange(update.view, deco.map(update.changes), changeFrom, changeTo);\n        return deco;\n    }\n    updateRange(view, deco, updateFrom, updateTo) {\n        for (let r of view.visibleRanges) {\n            let from = Math.max(r.from, updateFrom), to = Math.min(r.to, updateTo);\n            if (to > from) {\n                let fromLine = view.state.doc.lineAt(from), toLine = fromLine.to < to ? view.state.doc.lineAt(to) : fromLine;\n                let start = Math.max(r.from, fromLine.from), end = Math.min(r.to, toLine.to);\n                if (this.boundary) {\n                    for (; from > fromLine.from; from--)\n                        if (this.boundary.test(fromLine.text[from - 1 - fromLine.from])) {\n                            start = from;\n                            break;\n                        }\n                    for (; to < toLine.to; to++)\n                        if (this.boundary.test(toLine.text[to - toLine.from])) {\n                            end = to;\n                            break;\n                        }\n                }\n                let ranges = [], m;\n                let add = (from, to, deco) => ranges.push(deco.range(from, to));\n                if (fromLine == toLine) {\n                    this.regexp.lastIndex = start - fromLine.from;\n                    while ((m = this.regexp.exec(fromLine.text)) && m.index < end - fromLine.from)\n                        this.addMatch(m, view, m.index + fromLine.from, add);\n                }\n                else {\n                    iterMatches(view.state.doc, this.regexp, start, end, (from, m) => this.addMatch(m, view, from, add));\n                }\n                deco = deco.update({ filterFrom: start, filterTo: end, filter: (from, to) => from < start || to > end, add: ranges });\n            }\n        }\n        return deco;\n    }\n}\n\nconst UnicodeRegexpSupport = /x/.unicode != null ? \"gu\" : \"g\";\nconst Specials = /*@__PURE__*/new RegExp(\"[\\u0000-\\u0008\\u000a-\\u001f\\u007f-\\u009f\\u00ad\\u061c\\u200b\\u200e\\u200f\\u2028\\u2029\\u202d\\u202e\\u2066\\u2067\\u2069\\ufeff\\ufff9-\\ufffc]\", UnicodeRegexpSupport);\nconst Names = {\n    0: \"null\",\n    7: \"bell\",\n    8: \"backspace\",\n    10: \"newline\",\n    11: \"vertical tab\",\n    13: \"carriage return\",\n    27: \"escape\",\n    8203: \"zero width space\",\n    8204: \"zero width non-joiner\",\n    8205: \"zero width joiner\",\n    8206: \"left-to-right mark\",\n    8207: \"right-to-left mark\",\n    8232: \"line separator\",\n    8237: \"left-to-right override\",\n    8238: \"right-to-left override\",\n    8294: \"left-to-right isolate\",\n    8295: \"right-to-left isolate\",\n    8297: \"pop directional isolate\",\n    8233: \"paragraph separator\",\n    65279: \"zero width no-break space\",\n    65532: \"object replacement\"\n};\nlet _supportsTabSize = null;\nfunction supportsTabSize() {\n    var _a;\n    if (_supportsTabSize == null && typeof document != \"undefined\" && document.body) {\n        let styles = document.body.style;\n        _supportsTabSize = ((_a = styles.tabSize) !== null && _a !== void 0 ? _a : styles.MozTabSize) != null;\n    }\n    return _supportsTabSize || false;\n}\nconst specialCharConfig = /*@__PURE__*/Facet.define({\n    combine(configs) {\n        let config = combineConfig(configs, {\n            render: null,\n            specialChars: Specials,\n            addSpecialChars: null\n        });\n        if (config.replaceTabs = !supportsTabSize())\n            config.specialChars = new RegExp(\"\\t|\" + config.specialChars.source, UnicodeRegexpSupport);\n        if (config.addSpecialChars)\n            config.specialChars = new RegExp(config.specialChars.source + \"|\" + config.addSpecialChars.source, UnicodeRegexpSupport);\n        return config;\n    }\n});\n/**\nReturns an extension that installs highlighting of special\ncharacters.\n*/\nfunction highlightSpecialChars(\n/**\nConfiguration options.\n*/\nconfig = {}) {\n    return [specialCharConfig.of(config), specialCharPlugin()];\n}\nlet _plugin = null;\nfunction specialCharPlugin() {\n    return _plugin || (_plugin = ViewPlugin.fromClass(class {\n        constructor(view) {\n            this.view = view;\n            this.decorations = Decoration.none;\n            this.decorationCache = Object.create(null);\n            this.decorator = this.makeDecorator(view.state.facet(specialCharConfig));\n            this.decorations = this.decorator.createDeco(view);\n        }\n        makeDecorator(conf) {\n            return new MatchDecorator({\n                regexp: conf.specialChars,\n                decoration: (m, view, pos) => {\n                    let { doc } = view.state;\n                    let code = codePointAt(m[0], 0);\n                    if (code == 9) {\n                        let line = doc.lineAt(pos);\n                        let size = view.state.tabSize, col = countColumn(line.text, size, pos - line.from);\n                        return Decoration.replace({\n                            widget: new TabWidget((size - (col % size)) * this.view.defaultCharacterWidth / this.view.scaleX)\n                        });\n                    }\n                    return this.decorationCache[code] ||\n                        (this.decorationCache[code] = Decoration.replace({ widget: new SpecialCharWidget(conf, code) }));\n                },\n                boundary: conf.replaceTabs ? undefined : /[^]/\n            });\n        }\n        update(update) {\n            let conf = update.state.facet(specialCharConfig);\n            if (update.startState.facet(specialCharConfig) != conf) {\n                this.decorator = this.makeDecorator(conf);\n                this.decorations = this.decorator.createDeco(update.view);\n            }\n            else {\n                this.decorations = this.decorator.updateDeco(update, this.decorations);\n            }\n        }\n    }, {\n        decorations: v => v.decorations\n    }));\n}\nconst DefaultPlaceholder = \"\\u2022\";\n// Assigns placeholder characters from the Control Pictures block to\n// ASCII control characters\nfunction placeholder$1(code) {\n    if (code >= 32)\n        return DefaultPlaceholder;\n    if (code == 10)\n        return \"\\u2424\";\n    return String.fromCharCode(9216 + code);\n}\nclass SpecialCharWidget extends WidgetType {\n    constructor(options, code) {\n        super();\n        this.options = options;\n        this.code = code;\n    }\n    eq(other) { return other.code == this.code; }\n    toDOM(view) {\n        let ph = placeholder$1(this.code);\n        let desc = view.state.phrase(\"Control character\") + \" \" + (Names[this.code] || \"0x\" + this.code.toString(16));\n        let custom = this.options.render && this.options.render(this.code, desc, ph);\n        if (custom)\n            return custom;\n        let span = document.createElement(\"span\");\n        span.textContent = ph;\n        span.title = desc;\n        span.setAttribute(\"aria-label\", desc);\n        span.className = \"cm-specialChar\";\n        return span;\n    }\n    ignoreEvent() { return false; }\n}\nclass TabWidget extends WidgetType {\n    constructor(width) {\n        super();\n        this.width = width;\n    }\n    eq(other) { return other.width == this.width; }\n    toDOM() {\n        let span = document.createElement(\"span\");\n        span.textContent = \"\\t\";\n        span.className = \"cm-tab\";\n        span.style.width = this.width + \"px\";\n        return span;\n    }\n    ignoreEvent() { return false; }\n}\n\nconst plugin = /*@__PURE__*/ViewPlugin.fromClass(class {\n    constructor() {\n        this.height = 1000;\n        this.attrs = { style: \"padding-bottom: 1000px\" };\n    }\n    update(update) {\n        let { view } = update;\n        let height = view.viewState.editorHeight * view.scaleY -\n            view.defaultLineHeight - view.documentPadding.top - 0.5;\n        if (height >= 0 && height != this.height) {\n            this.height = height;\n            this.attrs = { style: `padding-bottom: ${height}px` };\n        }\n    }\n});\n/**\nReturns an extension that makes sure the content has a bottom\nmargin equivalent to the height of the editor, minus one line\nheight, so that every line in the document can be scrolled to the\ntop of the editor.\n\nThis is only meaningful when the editor is scrollable, and should\nnot be enabled in editors that take the size of their content.\n*/\nfunction scrollPastEnd() {\n    return [plugin, contentAttributes.of(view => { var _a; return ((_a = view.plugin(plugin)) === null || _a === void 0 ? void 0 : _a.attrs) || null; })];\n}\n\n/**\nMark lines that have a cursor on them with the `\"cm-activeLine\"`\nDOM class.\n*/\nfunction highlightActiveLine() {\n    return activeLineHighlighter;\n}\nconst lineDeco = /*@__PURE__*/Decoration.line({ class: \"cm-activeLine\" });\nconst activeLineHighlighter = /*@__PURE__*/ViewPlugin.fromClass(class {\n    constructor(view) {\n        this.decorations = this.getDeco(view);\n    }\n    update(update) {\n        if (update.docChanged || update.selectionSet)\n            this.decorations = this.getDeco(update.view);\n    }\n    getDeco(view) {\n        let lastLineStart = -1, deco = [];\n        for (let r of view.state.selection.ranges) {\n            let line = view.lineBlockAt(r.head);\n            if (line.from > lastLineStart) {\n                deco.push(lineDeco.range(line.from));\n                lastLineStart = line.from;\n            }\n        }\n        return Decoration.set(deco);\n    }\n}, {\n    decorations: v => v.decorations\n});\n\nclass Placeholder extends WidgetType {\n    constructor(content) {\n        super();\n        this.content = content;\n    }\n    toDOM() {\n        let wrap = document.createElement(\"span\");\n        wrap.className = \"cm-placeholder\";\n        wrap.style.pointerEvents = \"none\";\n        wrap.appendChild(typeof this.content == \"string\" ? document.createTextNode(this.content) : this.content);\n        if (typeof this.content == \"string\")\n            wrap.setAttribute(\"aria-label\", \"placeholder \" + this.content);\n        else\n            wrap.setAttribute(\"aria-hidden\", \"true\");\n        return wrap;\n    }\n    coordsAt(dom) {\n        let rects = dom.firstChild ? clientRectsFor(dom.firstChild) : [];\n        if (!rects.length)\n            return null;\n        let style = window.getComputedStyle(dom.parentNode);\n        let rect = flattenRect(rects[0], style.direction != \"rtl\");\n        let lineHeight = parseInt(style.lineHeight);\n        if (rect.bottom - rect.top > lineHeight * 1.5)\n            return { left: rect.left, right: rect.right, top: rect.top, bottom: rect.top + lineHeight };\n        return rect;\n    }\n    ignoreEvent() { return false; }\n}\n/**\nExtension that enables a placeholder\u2014a piece of example content\nto show when the editor is empty.\n*/\nfunction placeholder(content) {\n    return ViewPlugin.fromClass(class {\n        constructor(view) {\n            this.view = view;\n            this.placeholder = content\n                ? Decoration.set([Decoration.widget({ widget: new Placeholder(content), side: 1 }).range(0)])\n                : Decoration.none;\n        }\n        get decorations() { return this.view.state.doc.length ? Decoration.none : this.placeholder; }\n    }, { decorations: v => v.decorations });\n}\n\n// Don't compute precise column positions for line offsets above this\n// (since it could get expensive). Assume offset==column for them.\nconst MaxOff = 2000;\nfunction rectangleFor(state, a, b) {\n    let startLine = Math.min(a.line, b.line), endLine = Math.max(a.line, b.line);\n    let ranges = [];\n    if (a.off > MaxOff || b.off > MaxOff || a.col < 0 || b.col < 0) {\n        let startOff = Math.min(a.off, b.off), endOff = Math.max(a.off, b.off);\n        for (let i = startLine; i <= endLine; i++) {\n            let line = state.doc.line(i);\n            if (line.length <= endOff)\n                ranges.push(EditorSelection.range(line.from + startOff, line.to + endOff));\n        }\n    }\n    else {\n        let startCol = Math.min(a.col, b.col), endCol = Math.max(a.col, b.col);\n        for (let i = startLine; i <= endLine; i++) {\n            let line = state.doc.line(i);\n            let start = findColumn(line.text, startCol, state.tabSize, true);\n            if (start < 0) {\n                ranges.push(EditorSelection.cursor(line.to));\n            }\n            else {\n                let end = findColumn(line.text, endCol, state.tabSize);\n                ranges.push(EditorSelection.range(line.from + start, line.from + end));\n            }\n        }\n    }\n    return ranges;\n}\nfunction absoluteColumn(view, x) {\n    let ref = view.coordsAtPos(view.viewport.from);\n    return ref ? Math.round(Math.abs((ref.left - x) / view.defaultCharacterWidth)) : -1;\n}\nfunction getPos(view, event) {\n    let offset = view.posAtCoords({ x: event.clientX, y: event.clientY }, false);\n    let line = view.state.doc.lineAt(offset), off = offset - line.from;\n    let col = off > MaxOff ? -1\n        : off == line.length ? absoluteColumn(view, event.clientX)\n            : countColumn(line.text, view.state.tabSize, offset - line.from);\n    return { line: line.number, col, off };\n}\nfunction rectangleSelectionStyle(view, event) {\n    let start = getPos(view, event), startSel = view.state.selection;\n    if (!start)\n        return null;\n    return {\n        update(update) {\n            if (update.docChanged) {\n                let newStart = update.changes.mapPos(update.startState.doc.line(start.line).from);\n                let newLine = update.state.doc.lineAt(newStart);\n                start = { line: newLine.number, col: start.col, off: Math.min(start.off, newLine.length) };\n                startSel = startSel.map(update.changes);\n            }\n        },\n        get(event, _extend, multiple) {\n            let cur = getPos(view, event);\n            if (!cur)\n                return startSel;\n            let ranges = rectangleFor(view.state, start, cur);\n            if (!ranges.length)\n                return startSel;\n            if (multiple)\n                return EditorSelection.create(ranges.concat(startSel.ranges));\n            else\n                return EditorSelection.create(ranges);\n        }\n    };\n}\n/**\nCreate an extension that enables rectangular selections. By\ndefault, it will react to left mouse drag with the Alt key held\ndown. When such a selection occurs, the text within the rectangle\nthat was dragged over will be selected, as one selection\n[range](https://codemirror.net/6/docs/ref/#state.SelectionRange) per line.\n*/\nfunction rectangularSelection(options) {\n    let filter = (options === null || options === void 0 ? void 0 : options.eventFilter) || (e => e.altKey && e.button == 0);\n    return EditorView.mouseSelectionStyle.of((view, event) => filter(event) ? rectangleSelectionStyle(view, event) : null);\n}\nconst keys = {\n    Alt: [18, e => !!e.altKey],\n    Control: [17, e => !!e.ctrlKey],\n    Shift: [16, e => !!e.shiftKey],\n    Meta: [91, e => !!e.metaKey]\n};\nconst showCrosshair = { style: \"cursor: crosshair\" };\n/**\nReturns an extension that turns the pointer cursor into a\ncrosshair when a given modifier key, defaulting to Alt, is held\ndown. Can serve as a visual hint that rectangular selection is\ngoing to happen when paired with\n[`rectangularSelection`](https://codemirror.net/6/docs/ref/#view.rectangularSelection).\n*/\nfunction crosshairCursor(options = {}) {\n    let [code, getter] = keys[options.key || \"Alt\"];\n    let plugin = ViewPlugin.fromClass(class {\n        constructor(view) {\n            this.view = view;\n            this.isDown = false;\n        }\n        set(isDown) {\n            if (this.isDown != isDown) {\n                this.isDown = isDown;\n                this.view.update([]);\n            }\n        }\n    }, {\n        eventObservers: {\n            keydown(e) {\n                this.set(e.keyCode == code || getter(e));\n            },\n            keyup(e) {\n                if (e.keyCode == code || !getter(e))\n                    this.set(false);\n            },\n            mousemove(e) {\n                this.set(getter(e));\n            }\n        }\n    });\n    return [\n        plugin,\n        EditorView.contentAttributes.of(view => { var _a; return ((_a = view.plugin(plugin)) === null || _a === void 0 ? void 0 : _a.isDown) ? showCrosshair : null; })\n    ];\n}\n\nconst Outside = \"-10000px\";\nclass TooltipViewManager {\n    constructor(view, facet, createTooltipView) {\n        this.facet = facet;\n        this.createTooltipView = createTooltipView;\n        this.input = view.state.facet(facet);\n        this.tooltips = this.input.filter(t => t);\n        this.tooltipViews = this.tooltips.map(createTooltipView);\n    }\n    update(update, above) {\n        var _a;\n        let input = update.state.facet(this.facet);\n        let tooltips = input.filter(x => x);\n        if (input === this.input) {\n            for (let t of this.tooltipViews)\n                if (t.update)\n                    t.update(update);\n            return false;\n        }\n        let tooltipViews = [], newAbove = above ? [] : null;\n        for (let i = 0; i < tooltips.length; i++) {\n            let tip = tooltips[i], known = -1;\n            if (!tip)\n                continue;\n            for (let i = 0; i < this.tooltips.length; i++) {\n                let other = this.tooltips[i];\n                if (other && other.create == tip.create)\n                    known = i;\n            }\n            if (known < 0) {\n                tooltipViews[i] = this.createTooltipView(tip);\n                if (newAbove)\n                    newAbove[i] = !!tip.above;\n            }\n            else {\n                let tooltipView = tooltipViews[i] = this.tooltipViews[known];\n                if (newAbove)\n                    newAbove[i] = above[known];\n                if (tooltipView.update)\n                    tooltipView.update(update);\n            }\n        }\n        for (let t of this.tooltipViews)\n            if (tooltipViews.indexOf(t) < 0) {\n                t.dom.remove();\n                (_a = t.destroy) === null || _a === void 0 ? void 0 : _a.call(t);\n            }\n        if (above) {\n            newAbove.forEach((val, i) => above[i] = val);\n            above.length = newAbove.length;\n        }\n        this.input = input;\n        this.tooltips = tooltips;\n        this.tooltipViews = tooltipViews;\n        return true;\n    }\n}\n/**\nCreates an extension that configures tooltip behavior.\n*/\nfunction tooltips(config = {}) {\n    return tooltipConfig.of(config);\n}\nfunction windowSpace(view) {\n    let { win } = view;\n    return { top: 0, left: 0, bottom: win.innerHeight, right: win.innerWidth };\n}\nconst tooltipConfig = /*@__PURE__*/Facet.define({\n    combine: values => {\n        var _a, _b, _c;\n        return ({\n            position: browser.ios ? \"absolute\" : ((_a = values.find(conf => conf.position)) === null || _a === void 0 ? void 0 : _a.position) || \"fixed\",\n            parent: ((_b = values.find(conf => conf.parent)) === null || _b === void 0 ? void 0 : _b.parent) || null,\n            tooltipSpace: ((_c = values.find(conf => conf.tooltipSpace)) === null || _c === void 0 ? void 0 : _c.tooltipSpace) || windowSpace,\n        });\n    }\n});\nconst knownHeight = /*@__PURE__*/new WeakMap();\nconst tooltipPlugin = /*@__PURE__*/ViewPlugin.fromClass(class {\n    constructor(view) {\n        this.view = view;\n        this.above = [];\n        this.inView = true;\n        this.madeAbsolute = false;\n        this.lastTransaction = 0;\n        this.measureTimeout = -1;\n        let config = view.state.facet(tooltipConfig);\n        this.position = config.position;\n        this.parent = config.parent;\n        this.classes = view.themeClasses;\n        this.createContainer();\n        this.measureReq = { read: this.readMeasure.bind(this), write: this.writeMeasure.bind(this), key: this };\n        this.manager = new TooltipViewManager(view, showTooltip, t => this.createTooltip(t));\n        this.intersectionObserver = typeof IntersectionObserver == \"function\" ? new IntersectionObserver(entries => {\n            if (Date.now() > this.lastTransaction - 50 &&\n                entries.length > 0 && entries[entries.length - 1].intersectionRatio < 1)\n                this.measureSoon();\n        }, { threshold: [1] }) : null;\n        this.observeIntersection();\n        view.win.addEventListener(\"resize\", this.measureSoon = this.measureSoon.bind(this));\n        this.maybeMeasure();\n    }\n    createContainer() {\n        if (this.parent) {\n            this.container = document.createElement(\"div\");\n            this.container.style.position = \"relative\";\n            this.container.className = this.view.themeClasses;\n            this.parent.appendChild(this.container);\n        }\n        else {\n            this.container = this.view.dom;\n        }\n    }\n    observeIntersection() {\n        if (this.intersectionObserver) {\n            this.intersectionObserver.disconnect();\n            for (let tooltip of this.manager.tooltipViews)\n                this.intersectionObserver.observe(tooltip.dom);\n        }\n    }\n    measureSoon() {\n        if (this.measureTimeout < 0)\n            this.measureTimeout = setTimeout(() => {\n                this.measureTimeout = -1;\n                this.maybeMeasure();\n            }, 50);\n    }\n    update(update) {\n        if (update.transactions.length)\n            this.lastTransaction = Date.now();\n        let updated = this.manager.update(update, this.above);\n        if (updated)\n            this.observeIntersection();\n        let shouldMeasure = updated || update.geometryChanged;\n        let newConfig = update.state.facet(tooltipConfig);\n        if (newConfig.position != this.position && !this.madeAbsolute) {\n            this.position = newConfig.position;\n            for (let t of this.manager.tooltipViews)\n                t.dom.style.position = this.position;\n            shouldMeasure = true;\n        }\n        if (newConfig.parent != this.parent) {\n            if (this.parent)\n                this.container.remove();\n            this.parent = newConfig.parent;\n            this.createContainer();\n            for (let t of this.manager.tooltipViews)\n                this.container.appendChild(t.dom);\n            shouldMeasure = true;\n        }\n        else if (this.parent && this.view.themeClasses != this.classes) {\n            this.classes = this.container.className = this.view.themeClasses;\n        }\n        if (shouldMeasure)\n            this.maybeMeasure();\n    }\n    createTooltip(tooltip) {\n        let tooltipView = tooltip.create(this.view);\n        tooltipView.dom.classList.add(\"cm-tooltip\");\n        if (tooltip.arrow && !tooltipView.dom.querySelector(\".cm-tooltip > .cm-tooltip-arrow\")) {\n            let arrow = document.createElement(\"div\");\n            arrow.className = \"cm-tooltip-arrow\";\n            tooltipView.dom.appendChild(arrow);\n        }\n        tooltipView.dom.style.position = this.position;\n        tooltipView.dom.style.top = Outside;\n        tooltipView.dom.style.left = \"0px\";\n        this.container.appendChild(tooltipView.dom);\n        if (tooltipView.mount)\n            tooltipView.mount(this.view);\n        return tooltipView;\n    }\n    destroy() {\n        var _a, _b;\n        this.view.win.removeEventListener(\"resize\", this.measureSoon);\n        for (let tooltipView of this.manager.tooltipViews) {\n            tooltipView.dom.remove();\n            (_a = tooltipView.destroy) === null || _a === void 0 ? void 0 : _a.call(tooltipView);\n        }\n        if (this.parent)\n            this.container.remove();\n        (_b = this.intersectionObserver) === null || _b === void 0 ? void 0 : _b.disconnect();\n        clearTimeout(this.measureTimeout);\n    }\n    readMeasure() {\n        let editor = this.view.dom.getBoundingClientRect();\n        let scaleX = 1, scaleY = 1, makeAbsolute = false;\n        if (this.position == \"fixed\" && this.manager.tooltipViews.length) {\n            let { dom } = this.manager.tooltipViews[0];\n            if (browser.gecko) {\n                // Firefox sets the element's `offsetParent` to the\n                // transformed element when a transform interferes with fixed\n                // positioning.\n                makeAbsolute = dom.offsetParent != this.container.ownerDocument.body;\n            }\n            else {\n                // On other browsers, we have to awkwardly try and use other\n                // information to detect a transform.\n                if (this.view.scaleX != 1 || this.view.scaleY != 1) {\n                    makeAbsolute = true;\n                }\n                else if (dom.style.top == Outside && dom.style.left == \"0px\") {\n                    let rect = dom.getBoundingClientRect();\n                    makeAbsolute = Math.abs(rect.top + 10000) > 1 || Math.abs(rect.left) > 1;\n                }\n            }\n        }\n        if (makeAbsolute || this.position == \"absolute\") {\n            if (this.parent) {\n                let rect = this.parent.getBoundingClientRect();\n                if (rect.width && rect.height) {\n                    scaleX = rect.width / this.parent.offsetWidth;\n                    scaleY = rect.height / this.parent.offsetHeight;\n                }\n            }\n            else {\n                ({ scaleX, scaleY } = this.view.viewState);\n            }\n        }\n        return {\n            editor,\n            parent: this.parent ? this.container.getBoundingClientRect() : editor,\n            pos: this.manager.tooltips.map((t, i) => {\n                let tv = this.manager.tooltipViews[i];\n                return tv.getCoords ? tv.getCoords(t.pos) : this.view.coordsAtPos(t.pos);\n            }),\n            size: this.manager.tooltipViews.map(({ dom }) => dom.getBoundingClientRect()),\n            space: this.view.state.facet(tooltipConfig).tooltipSpace(this.view),\n            scaleX, scaleY, makeAbsolute\n        };\n    }\n    writeMeasure(measured) {\n        var _a;\n        if (measured.makeAbsolute) {\n            this.madeAbsolute = true;\n            this.position = \"absolute\";\n            for (let t of this.manager.tooltipViews)\n                t.dom.style.position = \"absolute\";\n        }\n        let { editor, space, scaleX, scaleY } = measured;\n        let others = [];\n        for (let i = 0; i < this.manager.tooltips.length; i++) {\n            let tooltip = this.manager.tooltips[i], tView = this.manager.tooltipViews[i], { dom } = tView;\n            let pos = measured.pos[i], size = measured.size[i];\n            // Hide tooltips that are outside of the editor.\n            if (!pos || pos.bottom <= Math.max(editor.top, space.top) ||\n                pos.top >= Math.min(editor.bottom, space.bottom) ||\n                pos.right < Math.max(editor.left, space.left) - .1 ||\n                pos.left > Math.min(editor.right, space.right) + .1) {\n                dom.style.top = Outside;\n                continue;\n            }\n            let arrow = tooltip.arrow ? tView.dom.querySelector(\".cm-tooltip-arrow\") : null;\n            let arrowHeight = arrow ? 7 /* Arrow.Size */ : 0;\n            let width = size.right - size.left, height = (_a = knownHeight.get(tView)) !== null && _a !== void 0 ? _a : size.bottom - size.top;\n            let offset = tView.offset || noOffset, ltr = this.view.textDirection == Direction.LTR;\n            let left = size.width > space.right - space.left ? (ltr ? space.left : space.right - size.width)\n                : ltr ? Math.min(pos.left - (arrow ? 14 /* Arrow.Offset */ : 0) + offset.x, space.right - width)\n                    : Math.max(space.left, pos.left - width + (arrow ? 14 /* Arrow.Offset */ : 0) - offset.x);\n            let above = this.above[i];\n            if (!tooltip.strictSide && (above\n                ? pos.top - (size.bottom - size.top) - offset.y < space.top\n                : pos.bottom + (size.bottom - size.top) + offset.y > space.bottom) &&\n                above == (space.bottom - pos.bottom > pos.top - space.top))\n                above = this.above[i] = !above;\n            let spaceVert = (above ? pos.top - space.top : space.bottom - pos.bottom) - arrowHeight;\n            if (spaceVert < height && tView.resize !== false) {\n                if (spaceVert < this.view.defaultLineHeight) {\n                    dom.style.top = Outside;\n                    continue;\n                }\n                knownHeight.set(tView, height);\n                dom.style.height = (height = spaceVert) / scaleY + \"px\";\n            }\n            else if (dom.style.height) {\n                dom.style.height = \"\";\n            }\n            let top = above ? pos.top - height - arrowHeight - offset.y : pos.bottom + arrowHeight + offset.y;\n            let right = left + width;\n            if (tView.overlap !== true)\n                for (let r of others)\n                    if (r.left < right && r.right > left && r.top < top + height && r.bottom > top)\n                        top = above ? r.top - height - 2 - arrowHeight : r.bottom + arrowHeight + 2;\n            if (this.position == \"absolute\") {\n                dom.style.top = (top - measured.parent.top) / scaleY + \"px\";\n                dom.style.left = (left - measured.parent.left) / scaleX + \"px\";\n            }\n            else {\n                dom.style.top = top / scaleY + \"px\";\n                dom.style.left = left / scaleX + \"px\";\n            }\n            if (arrow) {\n                let arrowLeft = pos.left + (ltr ? offset.x : -offset.x) - (left + 14 /* Arrow.Offset */ - 7 /* Arrow.Size */);\n                arrow.style.left = arrowLeft / scaleX + \"px\";\n            }\n            if (tView.overlap !== true)\n                others.push({ left, top, right, bottom: top + height });\n            dom.classList.toggle(\"cm-tooltip-above\", above);\n            dom.classList.toggle(\"cm-tooltip-below\", !above);\n            if (tView.positioned)\n                tView.positioned(measured.space);\n        }\n    }\n    maybeMeasure() {\n        if (this.manager.tooltips.length) {\n            if (this.view.inView)\n                this.view.requestMeasure(this.measureReq);\n            if (this.inView != this.view.inView) {\n                this.inView = this.view.inView;\n                if (!this.inView)\n                    for (let tv of this.manager.tooltipViews)\n                        tv.dom.style.top = Outside;\n            }\n        }\n    }\n}, {\n    eventObservers: {\n        scroll() { this.maybeMeasure(); }\n    }\n});\nconst baseTheme = /*@__PURE__*/EditorView.baseTheme({\n    \".cm-tooltip\": {\n        zIndex: 100,\n        boxSizing: \"border-box\"\n    },\n    \"&light .cm-tooltip\": {\n        border: \"1px solid #bbb\",\n        backgroundColor: \"#f5f5f5\"\n    },\n    \"&light .cm-tooltip-section:not(:first-child)\": {\n        borderTop: \"1px solid #bbb\",\n    },\n    \"&dark .cm-tooltip\": {\n        backgroundColor: \"#333338\",\n        color: \"white\"\n    },\n    \".cm-tooltip-arrow\": {\n        height: `${7 /* Arrow.Size */}px`,\n        width: `${7 /* Arrow.Size */ * 2}px`,\n        position: \"absolute\",\n        zIndex: -1,\n        overflow: \"hidden\",\n        \"&:before, &:after\": {\n            content: \"''\",\n            position: \"absolute\",\n            width: 0,\n            height: 0,\n            borderLeft: `${7 /* Arrow.Size */}px solid transparent`,\n            borderRight: `${7 /* Arrow.Size */}px solid transparent`,\n        },\n        \".cm-tooltip-above &\": {\n            bottom: `-${7 /* Arrow.Size */}px`,\n            \"&:before\": {\n                borderTop: `${7 /* Arrow.Size */}px solid #bbb`,\n            },\n            \"&:after\": {\n                borderTop: `${7 /* Arrow.Size */}px solid #f5f5f5`,\n                bottom: \"1px\"\n            }\n        },\n        \".cm-tooltip-below &\": {\n            top: `-${7 /* Arrow.Size */}px`,\n            \"&:before\": {\n                borderBottom: `${7 /* Arrow.Size */}px solid #bbb`,\n            },\n            \"&:after\": {\n                borderBottom: `${7 /* Arrow.Size */}px solid #f5f5f5`,\n                top: \"1px\"\n            }\n        },\n    },\n    \"&dark .cm-tooltip .cm-tooltip-arrow\": {\n        \"&:before\": {\n            borderTopColor: \"#333338\",\n            borderBottomColor: \"#333338\"\n        },\n        \"&:after\": {\n            borderTopColor: \"transparent\",\n            borderBottomColor: \"transparent\"\n        }\n    }\n});\nconst noOffset = { x: 0, y: 0 };\n/**\nFacet to which an extension can add a value to show a tooltip.\n*/\nconst showTooltip = /*@__PURE__*/Facet.define({\n    enables: [tooltipPlugin, baseTheme]\n});\nconst showHoverTooltip = /*@__PURE__*/Facet.define();\nclass HoverTooltipHost {\n    // Needs to be static so that host tooltip instances always match\n    static create(view) {\n        return new HoverTooltipHost(view);\n    }\n    constructor(view) {\n        this.view = view;\n        this.mounted = false;\n        this.dom = document.createElement(\"div\");\n        this.dom.classList.add(\"cm-tooltip-hover\");\n        this.manager = new TooltipViewManager(view, showHoverTooltip, t => this.createHostedView(t));\n    }\n    createHostedView(tooltip) {\n        let hostedView = tooltip.create(this.view);\n        hostedView.dom.classList.add(\"cm-tooltip-section\");\n        this.dom.appendChild(hostedView.dom);\n        if (this.mounted && hostedView.mount)\n            hostedView.mount(this.view);\n        return hostedView;\n    }\n    mount(view) {\n        for (let hostedView of this.manager.tooltipViews) {\n            if (hostedView.mount)\n                hostedView.mount(view);\n        }\n        this.mounted = true;\n    }\n    positioned(space) {\n        for (let hostedView of this.manager.tooltipViews) {\n            if (hostedView.positioned)\n                hostedView.positioned(space);\n        }\n    }\n    update(update) {\n        this.manager.update(update);\n    }\n    destroy() {\n        var _a;\n        for (let t of this.manager.tooltipViews)\n            (_a = t.destroy) === null || _a === void 0 ? void 0 : _a.call(t);\n    }\n    passProp(name) {\n        let value = undefined;\n        for (let view of this.manager.tooltipViews) {\n            let given = view[name];\n            if (given !== undefined) {\n                if (value === undefined)\n                    value = given;\n                else if (value !== given)\n                    return undefined;\n            }\n        }\n        return value;\n    }\n    get offset() { return this.passProp(\"offset\"); }\n    get getCoords() { return this.passProp(\"getCoords\"); }\n    get overlap() { return this.passProp(\"overlap\"); }\n    get resize() { return this.passProp(\"resize\"); }\n}\nconst showHoverTooltipHost = /*@__PURE__*/showTooltip.compute([showHoverTooltip], state => {\n    let tooltips = state.facet(showHoverTooltip).filter(t => t);\n    if (tooltips.length === 0)\n        return null;\n    return {\n        pos: Math.min(...tooltips.map(t => t.pos)),\n        end: Math.max(...tooltips.filter(t => t.end != null).map(t => t.end)),\n        create: HoverTooltipHost.create,\n        above: tooltips[0].above,\n        arrow: tooltips.some(t => t.arrow),\n    };\n});\nclass HoverPlugin {\n    constructor(view, source, field, setHover, hoverTime) {\n        this.view = view;\n        this.source = source;\n        this.field = field;\n        this.setHover = setHover;\n        this.hoverTime = hoverTime;\n        this.hoverTimeout = -1;\n        this.restartTimeout = -1;\n        this.pending = null;\n        this.lastMove = { x: 0, y: 0, target: view.dom, time: 0 };\n        this.checkHover = this.checkHover.bind(this);\n        view.dom.addEventListener(\"mouseleave\", this.mouseleave = this.mouseleave.bind(this));\n        view.dom.addEventListener(\"mousemove\", this.mousemove = this.mousemove.bind(this));\n    }\n    update() {\n        if (this.pending) {\n            this.pending = null;\n            clearTimeout(this.restartTimeout);\n            this.restartTimeout = setTimeout(() => this.startHover(), 20);\n        }\n    }\n    get active() {\n        return this.view.state.field(this.field);\n    }\n    checkHover() {\n        this.hoverTimeout = -1;\n        if (this.active)\n            return;\n        let hovered = Date.now() - this.lastMove.time;\n        if (hovered < this.hoverTime)\n            this.hoverTimeout = setTimeout(this.checkHover, this.hoverTime - hovered);\n        else\n            this.startHover();\n    }\n    startHover() {\n        clearTimeout(this.restartTimeout);\n        let { view, lastMove } = this;\n        let desc = view.docView.nearest(lastMove.target);\n        if (!desc)\n            return;\n        let pos, side = 1;\n        if (desc instanceof WidgetView) {\n            pos = desc.posAtStart;\n        }\n        else {\n            pos = view.posAtCoords(lastMove);\n            if (pos == null)\n                return;\n            let posCoords = view.coordsAtPos(pos);\n            if (!posCoords ||\n                lastMove.y < posCoords.top || lastMove.y > posCoords.bottom ||\n                lastMove.x < posCoords.left - view.defaultCharacterWidth ||\n                lastMove.x > posCoords.right + view.defaultCharacterWidth)\n                return;\n            let bidi = view.bidiSpans(view.state.doc.lineAt(pos)).find(s => s.from <= pos && s.to >= pos);\n            let rtl = bidi && bidi.dir == Direction.RTL ? -1 : 1;\n            side = (lastMove.x < posCoords.left ? -rtl : rtl);\n        }\n        let open = this.source(view, pos, side);\n        if (open === null || open === void 0 ? void 0 : open.then) {\n            let pending = this.pending = { pos };\n            open.then(result => {\n                if (this.pending == pending) {\n                    this.pending = null;\n                    if (result)\n                        view.dispatch({ effects: this.setHover.of(result) });\n                }\n            }, e => logException(view.state, e, \"hover tooltip\"));\n        }\n        else if (open) {\n            view.dispatch({ effects: this.setHover.of(open) });\n        }\n    }\n    mousemove(event) {\n        var _a;\n        this.lastMove = { x: event.clientX, y: event.clientY, target: event.target, time: Date.now() };\n        if (this.hoverTimeout < 0)\n            this.hoverTimeout = setTimeout(this.checkHover, this.hoverTime);\n        let tooltip = this.active;\n        if (tooltip && !isInTooltip(this.lastMove.target) || this.pending) {\n            let { pos } = tooltip || this.pending, end = (_a = tooltip === null || tooltip === void 0 ? void 0 : tooltip.end) !== null && _a !== void 0 ? _a : pos;\n            if ((pos == end ? this.view.posAtCoords(this.lastMove) != pos\n                : !isOverRange(this.view, pos, end, event.clientX, event.clientY))) {\n                this.view.dispatch({ effects: this.setHover.of(null) });\n                this.pending = null;\n            }\n        }\n    }\n    mouseleave(e) {\n        clearTimeout(this.hoverTimeout);\n        this.hoverTimeout = -1;\n        if (this.active && !isInTooltip(e.relatedTarget))\n            this.view.dispatch({ effects: this.setHover.of(null) });\n    }\n    destroy() {\n        clearTimeout(this.hoverTimeout);\n        this.view.dom.removeEventListener(\"mouseleave\", this.mouseleave);\n        this.view.dom.removeEventListener(\"mousemove\", this.mousemove);\n    }\n}\nfunction isInTooltip(elt) {\n    for (let cur = elt; cur; cur = cur.parentNode)\n        if (cur.nodeType == 1 && cur.classList.contains(\"cm-tooltip\"))\n            return true;\n    return false;\n}\nfunction isOverRange(view, from, to, x, y, margin) {\n    let rect = view.scrollDOM.getBoundingClientRect();\n    let docBottom = view.documentTop + view.documentPadding.top + view.contentHeight;\n    if (rect.left > x || rect.right < x || rect.top > y || Math.min(rect.bottom, docBottom) < y)\n        return false;\n    let pos = view.posAtCoords({ x, y }, false);\n    return pos >= from && pos <= to;\n}\n/**\nSet up a hover tooltip, which shows up when the pointer hovers\nover ranges of text. The callback is called when the mouse hovers\nover the document text. It should, if there is a tooltip\nassociated with position `pos`, return the tooltip description\n(either directly or in a promise). The `side` argument indicates\non which side of the position the pointer is\u2014it will be -1 if the\npointer is before the position, 1 if after the position.\n\nNote that all hover tooltips are hosted within a single tooltip\ncontainer element. This allows multiple tooltips over the same\nrange to be \"merged\" together without overlapping.\n*/\nfunction hoverTooltip(source, options = {}) {\n    let setHover = StateEffect.define();\n    let hoverState = StateField.define({\n        create() { return null; },\n        update(value, tr) {\n            if (value && (options.hideOnChange && (tr.docChanged || tr.selection) ||\n                options.hideOn && options.hideOn(tr, value)))\n                return null;\n            if (value && tr.docChanged) {\n                let newPos = tr.changes.mapPos(value.pos, -1, MapMode.TrackDel);\n                if (newPos == null)\n                    return null;\n                let copy = Object.assign(Object.create(null), value);\n                copy.pos = newPos;\n                if (value.end != null)\n                    copy.end = tr.changes.mapPos(value.end);\n                value = copy;\n            }\n            for (let effect of tr.effects) {\n                if (effect.is(setHover))\n                    value = effect.value;\n                if (effect.is(closeHoverTooltipEffect))\n                    value = null;\n            }\n            return value;\n        },\n        provide: f => showHoverTooltip.from(f)\n    });\n    return [\n        hoverState,\n        ViewPlugin.define(view => new HoverPlugin(view, source, hoverState, setHover, options.hoverTime || 300 /* Hover.Time */)),\n        showHoverTooltipHost\n    ];\n}\n/**\nGet the active tooltip view for a given tooltip, if available.\n*/\nfunction getTooltip(view, tooltip) {\n    let plugin = view.plugin(tooltipPlugin);\n    if (!plugin)\n        return null;\n    let found = plugin.manager.tooltips.indexOf(tooltip);\n    return found < 0 ? null : plugin.manager.tooltipViews[found];\n}\n/**\nReturns true if any hover tooltips are currently active.\n*/\nfunction hasHoverTooltips(state) {\n    return state.facet(showHoverTooltip).some(x => x);\n}\nconst closeHoverTooltipEffect = /*@__PURE__*/StateEffect.define();\n/**\nTransaction effect that closes all hover tooltips.\n*/\nconst closeHoverTooltips = /*@__PURE__*/closeHoverTooltipEffect.of(null);\n/**\nTell the tooltip extension to recompute the position of the active\ntooltips. This can be useful when something happens (such as a\nre-positioning or CSS change affecting the editor) that could\ninvalidate the existing tooltip positions.\n*/\nfunction repositionTooltips(view) {\n    let plugin = view.plugin(tooltipPlugin);\n    if (plugin)\n        plugin.maybeMeasure();\n}\n\nconst panelConfig = /*@__PURE__*/Facet.define({\n    combine(configs) {\n        let topContainer, bottomContainer;\n        for (let c of configs) {\n            topContainer = topContainer || c.topContainer;\n            bottomContainer = bottomContainer || c.bottomContainer;\n        }\n        return { topContainer, bottomContainer };\n    }\n});\n/**\nConfigures the panel-managing extension.\n*/\nfunction panels(config) {\n    return config ? [panelConfig.of(config)] : [];\n}\n/**\nGet the active panel created by the given constructor, if any.\nThis can be useful when you need access to your panels' DOM\nstructure.\n*/\nfunction getPanel(view, panel) {\n    let plugin = view.plugin(panelPlugin);\n    let index = plugin ? plugin.specs.indexOf(panel) : -1;\n    return index > -1 ? plugin.panels[index] : null;\n}\nconst panelPlugin = /*@__PURE__*/ViewPlugin.fromClass(class {\n    constructor(view) {\n        this.input = view.state.facet(showPanel);\n        this.specs = this.input.filter(s => s);\n        this.panels = this.specs.map(spec => spec(view));\n        let conf = view.state.facet(panelConfig);\n        this.top = new PanelGroup(view, true, conf.topContainer);\n        this.bottom = new PanelGroup(view, false, conf.bottomContainer);\n        this.top.sync(this.panels.filter(p => p.top));\n        this.bottom.sync(this.panels.filter(p => !p.top));\n        for (let p of this.panels) {\n            p.dom.classList.add(\"cm-panel\");\n            if (p.mount)\n                p.mount();\n        }\n    }\n    update(update) {\n        let conf = update.state.facet(panelConfig);\n        if (this.top.container != conf.topContainer) {\n            this.top.sync([]);\n            this.top = new PanelGroup(update.view, true, conf.topContainer);\n        }\n        if (this.bottom.container != conf.bottomContainer) {\n            this.bottom.sync([]);\n            this.bottom = new PanelGroup(update.view, false, conf.bottomContainer);\n        }\n        this.top.syncClasses();\n        this.bottom.syncClasses();\n        let input = update.state.facet(showPanel);\n        if (input != this.input) {\n            let specs = input.filter(x => x);\n            let panels = [], top = [], bottom = [], mount = [];\n            for (let spec of specs) {\n                let known = this.specs.indexOf(spec), panel;\n                if (known < 0) {\n                    panel = spec(update.view);\n                    mount.push(panel);\n                }\n                else {\n                    panel = this.panels[known];\n                    if (panel.update)\n                        panel.update(update);\n                }\n                panels.push(panel);\n                (panel.top ? top : bottom).push(panel);\n            }\n            this.specs = specs;\n            this.panels = panels;\n            this.top.sync(top);\n            this.bottom.sync(bottom);\n            for (let p of mount) {\n                p.dom.classList.add(\"cm-panel\");\n                if (p.mount)\n                    p.mount();\n            }\n        }\n        else {\n            for (let p of this.panels)\n                if (p.update)\n                    p.update(update);\n        }\n    }\n    destroy() {\n        this.top.sync([]);\n        this.bottom.sync([]);\n    }\n}, {\n    provide: plugin => EditorView.scrollMargins.of(view => {\n        let value = view.plugin(plugin);\n        return value && { top: value.top.scrollMargin(), bottom: value.bottom.scrollMargin() };\n    })\n});\nclass PanelGroup {\n    constructor(view, top, container) {\n        this.view = view;\n        this.top = top;\n        this.container = container;\n        this.dom = undefined;\n        this.classes = \"\";\n        this.panels = [];\n        this.syncClasses();\n    }\n    sync(panels) {\n        for (let p of this.panels)\n            if (p.destroy && panels.indexOf(p) < 0)\n                p.destroy();\n        this.panels = panels;\n        this.syncDOM();\n    }\n    syncDOM() {\n        if (this.panels.length == 0) {\n            if (this.dom) {\n                this.dom.remove();\n                this.dom = undefined;\n            }\n            return;\n        }\n        if (!this.dom) {\n            this.dom = document.createElement(\"div\");\n            this.dom.className = this.top ? \"cm-panels cm-panels-top\" : \"cm-panels cm-panels-bottom\";\n            this.dom.style[this.top ? \"top\" : \"bottom\"] = \"0\";\n            let parent = this.container || this.view.dom;\n            parent.insertBefore(this.dom, this.top ? parent.firstChild : null);\n        }\n        let curDOM = this.dom.firstChild;\n        for (let panel of this.panels) {\n            if (panel.dom.parentNode == this.dom) {\n                while (curDOM != panel.dom)\n                    curDOM = rm(curDOM);\n                curDOM = curDOM.nextSibling;\n            }\n            else {\n                this.dom.insertBefore(panel.dom, curDOM);\n            }\n        }\n        while (curDOM)\n            curDOM = rm(curDOM);\n    }\n    scrollMargin() {\n        return !this.dom || this.container ? 0\n            : Math.max(0, this.top ?\n                this.dom.getBoundingClientRect().bottom - Math.max(0, this.view.scrollDOM.getBoundingClientRect().top) :\n                Math.min(innerHeight, this.view.scrollDOM.getBoundingClientRect().bottom) - this.dom.getBoundingClientRect().top);\n    }\n    syncClasses() {\n        if (!this.container || this.classes == this.view.themeClasses)\n            return;\n        for (let cls of this.classes.split(\" \"))\n            if (cls)\n                this.container.classList.remove(cls);\n        for (let cls of (this.classes = this.view.themeClasses).split(\" \"))\n            if (cls)\n                this.container.classList.add(cls);\n    }\n}\nfunction rm(node) {\n    let next = node.nextSibling;\n    node.remove();\n    return next;\n}\n/**\nOpening a panel is done by providing a constructor function for\nthe panel through this facet. (The panel is closed again when its\nconstructor is no longer provided.) Values of `null` are ignored.\n*/\nconst showPanel = /*@__PURE__*/Facet.define({\n    enables: panelPlugin\n});\n\n/**\nA gutter marker represents a bit of information attached to a line\nin a specific gutter. Your own custom markers have to extend this\nclass.\n*/\nclass GutterMarker extends RangeValue {\n    /**\n    @internal\n    */\n    compare(other) {\n        return this == other || this.constructor == other.constructor && this.eq(other);\n    }\n    /**\n    Compare this marker to another marker of the same type.\n    */\n    eq(other) { return false; }\n    /**\n    Called if the marker has a `toDOM` method and its representation\n    was removed from a gutter.\n    */\n    destroy(dom) { }\n}\nGutterMarker.prototype.elementClass = \"\";\nGutterMarker.prototype.toDOM = undefined;\nGutterMarker.prototype.mapMode = MapMode.TrackBefore;\nGutterMarker.prototype.startSide = GutterMarker.prototype.endSide = -1;\nGutterMarker.prototype.point = true;\n/**\nFacet used to add a class to all gutter elements for a given line.\nMarkers given to this facet should _only_ define an\n[`elementclass`](https://codemirror.net/6/docs/ref/#view.GutterMarker.elementClass), not a\n[`toDOM`](https://codemirror.net/6/docs/ref/#view.GutterMarker.toDOM) (or the marker will appear\nin all gutters for the line).\n*/\nconst gutterLineClass = /*@__PURE__*/Facet.define();\nconst defaults = {\n    class: \"\",\n    renderEmptyElements: false,\n    elementStyle: \"\",\n    markers: () => RangeSet.empty,\n    lineMarker: () => null,\n    widgetMarker: () => null,\n    lineMarkerChange: null,\n    initialSpacer: null,\n    updateSpacer: null,\n    domEventHandlers: {}\n};\nconst activeGutters = /*@__PURE__*/Facet.define();\n/**\nDefine an editor gutter. The order in which the gutters appear is\ndetermined by their extension priority.\n*/\nfunction gutter(config) {\n    return [gutters(), activeGutters.of(Object.assign(Object.assign({}, defaults), config))];\n}\nconst unfixGutters = /*@__PURE__*/Facet.define({\n    combine: values => values.some(x => x)\n});\n/**\nThe gutter-drawing plugin is automatically enabled when you add a\ngutter, but you can use this function to explicitly configure it.\n\nUnless `fixed` is explicitly set to `false`, the gutters are\nfixed, meaning they don't scroll along with the content\nhorizontally (except on Internet Explorer, which doesn't support\nCSS [`position:\nsticky`](https://developer.mozilla.org/en-US/docs/Web/CSS/position#sticky)).\n*/\nfunction gutters(config) {\n    let result = [\n        gutterView,\n    ];\n    if (config && config.fixed === false)\n        result.push(unfixGutters.of(true));\n    return result;\n}\nconst gutterView = /*@__PURE__*/ViewPlugin.fromClass(class {\n    constructor(view) {\n        this.view = view;\n        this.prevViewport = view.viewport;\n        this.dom = document.createElement(\"div\");\n        this.dom.className = \"cm-gutters\";\n        this.dom.setAttribute(\"aria-hidden\", \"true\");\n        this.dom.style.minHeight = (this.view.contentHeight / this.view.scaleY) + \"px\";\n        this.gutters = view.state.facet(activeGutters).map(conf => new SingleGutterView(view, conf));\n        for (let gutter of this.gutters)\n            this.dom.appendChild(gutter.dom);\n        this.fixed = !view.state.facet(unfixGutters);\n        if (this.fixed) {\n            // FIXME IE11 fallback, which doesn't support position: sticky,\n            // by using position: relative + event handlers that realign the\n            // gutter (or just force fixed=false on IE11?)\n            this.dom.style.position = \"sticky\";\n        }\n        this.syncGutters(false);\n        view.scrollDOM.insertBefore(this.dom, view.contentDOM);\n    }\n    update(update) {\n        if (this.updateGutters(update)) {\n            // Detach during sync when the viewport changed significantly\n            // (such as during scrolling), since for large updates that is\n            // faster.\n            let vpA = this.prevViewport, vpB = update.view.viewport;\n            let vpOverlap = Math.min(vpA.to, vpB.to) - Math.max(vpA.from, vpB.from);\n            this.syncGutters(vpOverlap < (vpB.to - vpB.from) * 0.8);\n        }\n        if (update.geometryChanged)\n            this.dom.style.minHeight = this.view.contentHeight + \"px\";\n        if (this.view.state.facet(unfixGutters) != !this.fixed) {\n            this.fixed = !this.fixed;\n            this.dom.style.position = this.fixed ? \"sticky\" : \"\";\n        }\n        this.prevViewport = update.view.viewport;\n    }\n    syncGutters(detach) {\n        let after = this.dom.nextSibling;\n        if (detach)\n            this.dom.remove();\n        let lineClasses = RangeSet.iter(this.view.state.facet(gutterLineClass), this.view.viewport.from);\n        let classSet = [];\n        let contexts = this.gutters.map(gutter => new UpdateContext(gutter, this.view.viewport, -this.view.documentPadding.top));\n        for (let line of this.view.viewportLineBlocks) {\n            if (classSet.length)\n                classSet = [];\n            if (Array.isArray(line.type)) {\n                let first = true;\n                for (let b of line.type) {\n                    if (b.type == BlockType.Text && first) {\n                        advanceCursor(lineClasses, classSet, b.from);\n                        for (let cx of contexts)\n                            cx.line(this.view, b, classSet);\n                        first = false;\n                    }\n                    else if (b.widget) {\n                        for (let cx of contexts)\n                            cx.widget(this.view, b);\n                    }\n                }\n            }\n            else if (line.type == BlockType.Text) {\n                advanceCursor(lineClasses, classSet, line.from);\n                for (let cx of contexts)\n                    cx.line(this.view, line, classSet);\n            }\n            else if (line.widget) {\n                for (let cx of contexts)\n                    cx.widget(this.view, line);\n            }\n        }\n        for (let cx of contexts)\n            cx.finish();\n        if (detach)\n            this.view.scrollDOM.insertBefore(this.dom, after);\n    }\n    updateGutters(update) {\n        let prev = update.startState.facet(activeGutters), cur = update.state.facet(activeGutters);\n        let change = update.docChanged || update.heightChanged || update.viewportChanged ||\n            !RangeSet.eq(update.startState.facet(gutterLineClass), update.state.facet(gutterLineClass), update.view.viewport.from, update.view.viewport.to);\n        if (prev == cur) {\n            for (let gutter of this.gutters)\n                if (gutter.update(update))\n                    change = true;\n        }\n        else {\n            change = true;\n            let gutters = [];\n            for (let conf of cur) {\n                let known = prev.indexOf(conf);\n                if (known < 0) {\n                    gutters.push(new SingleGutterView(this.view, conf));\n                }\n                else {\n                    this.gutters[known].update(update);\n                    gutters.push(this.gutters[known]);\n                }\n            }\n            for (let g of this.gutters) {\n                g.dom.remove();\n                if (gutters.indexOf(g) < 0)\n                    g.destroy();\n            }\n            for (let g of gutters)\n                this.dom.appendChild(g.dom);\n            this.gutters = gutters;\n        }\n        return change;\n    }\n    destroy() {\n        for (let view of this.gutters)\n            view.destroy();\n        this.dom.remove();\n    }\n}, {\n    provide: plugin => EditorView.scrollMargins.of(view => {\n        let value = view.plugin(plugin);\n        if (!value || value.gutters.length == 0 || !value.fixed)\n            return null;\n        return view.textDirection == Direction.LTR\n            ? { left: value.dom.offsetWidth * view.scaleX }\n            : { right: value.dom.offsetWidth * view.scaleX };\n    })\n});\nfunction asArray(val) { return (Array.isArray(val) ? val : [val]); }\nfunction advanceCursor(cursor, collect, pos) {\n    while (cursor.value && cursor.from <= pos) {\n        if (cursor.from == pos)\n            collect.push(cursor.value);\n        cursor.next();\n    }\n}\nclass UpdateContext {\n    constructor(gutter, viewport, height) {\n        this.gutter = gutter;\n        this.height = height;\n        this.i = 0;\n        this.cursor = RangeSet.iter(gutter.markers, viewport.from);\n    }\n    addElement(view, block, markers) {\n        let { gutter } = this, above = (block.top - this.height) / view.scaleY, height = block.height / view.scaleY;\n        if (this.i == gutter.elements.length) {\n            let newElt = new GutterElement(view, height, above, markers);\n            gutter.elements.push(newElt);\n            gutter.dom.appendChild(newElt.dom);\n        }\n        else {\n            gutter.elements[this.i].update(view, height, above, markers);\n        }\n        this.height = block.bottom;\n        this.i++;\n    }\n    line(view, line, extraMarkers) {\n        let localMarkers = [];\n        advanceCursor(this.cursor, localMarkers, line.from);\n        if (extraMarkers.length)\n            localMarkers = localMarkers.concat(extraMarkers);\n        let forLine = this.gutter.config.lineMarker(view, line, localMarkers);\n        if (forLine)\n            localMarkers.unshift(forLine);\n        let gutter = this.gutter;\n        if (localMarkers.length == 0 && !gutter.config.renderEmptyElements)\n            return;\n        this.addElement(view, line, localMarkers);\n    }\n    widget(view, block) {\n        let marker = this.gutter.config.widgetMarker(view, block.widget, block);\n        if (marker)\n            this.addElement(view, block, [marker]);\n    }\n    finish() {\n        let gutter = this.gutter;\n        while (gutter.elements.length > this.i) {\n            let last = gutter.elements.pop();\n            gutter.dom.removeChild(last.dom);\n            last.destroy();\n        }\n    }\n}\nclass SingleGutterView {\n    constructor(view, config) {\n        this.view = view;\n        this.config = config;\n        this.elements = [];\n        this.spacer = null;\n        this.dom = document.createElement(\"div\");\n        this.dom.className = \"cm-gutter\" + (this.config.class ? \" \" + this.config.class : \"\");\n        for (let prop in config.domEventHandlers) {\n            this.dom.addEventListener(prop, (event) => {\n                let target = event.target, y;\n                if (target != this.dom && this.dom.contains(target)) {\n                    while (target.parentNode != this.dom)\n                        target = target.parentNode;\n                    let rect = target.getBoundingClientRect();\n                    y = (rect.top + rect.bottom) / 2;\n                }\n                else {\n                    y = event.clientY;\n                }\n                let line = view.lineBlockAtHeight(y - view.documentTop);\n                if (config.domEventHandlers[prop](view, line, event))\n                    event.preventDefault();\n            });\n        }\n        this.markers = asArray(config.markers(view));\n        if (config.initialSpacer) {\n            this.spacer = new GutterElement(view, 0, 0, [config.initialSpacer(view)]);\n            this.dom.appendChild(this.spacer.dom);\n            this.spacer.dom.style.cssText += \"visibility: hidden; pointer-events: none\";\n        }\n    }\n    update(update) {\n        let prevMarkers = this.markers;\n        this.markers = asArray(this.config.markers(update.view));\n        if (this.spacer && this.config.updateSpacer) {\n            let updated = this.config.updateSpacer(this.spacer.markers[0], update);\n            if (updated != this.spacer.markers[0])\n                this.spacer.update(update.view, 0, 0, [updated]);\n        }\n        let vp = update.view.viewport;\n        return !RangeSet.eq(this.markers, prevMarkers, vp.from, vp.to) ||\n            (this.config.lineMarkerChange ? this.config.lineMarkerChange(update) : false);\n    }\n    destroy() {\n        for (let elt of this.elements)\n            elt.destroy();\n    }\n}\nclass GutterElement {\n    constructor(view, height, above, markers) {\n        this.height = -1;\n        this.above = 0;\n        this.markers = [];\n        this.dom = document.createElement(\"div\");\n        this.dom.className = \"cm-gutterElement\";\n        this.update(view, height, above, markers);\n    }\n    update(view, height, above, markers) {\n        if (this.height != height) {\n            this.height = height;\n            this.dom.style.height = height + \"px\";\n        }\n        if (this.above != above)\n            this.dom.style.marginTop = (this.above = above) ? above + \"px\" : \"\";\n        if (!sameMarkers(this.markers, markers))\n            this.setMarkers(view, markers);\n    }\n    setMarkers(view, markers) {\n        let cls = \"cm-gutterElement\", domPos = this.dom.firstChild;\n        for (let iNew = 0, iOld = 0;;) {\n            let skipTo = iOld, marker = iNew < markers.length ? markers[iNew++] : null, matched = false;\n            if (marker) {\n                let c = marker.elementClass;\n                if (c)\n                    cls += \" \" + c;\n                for (let i = iOld; i < this.markers.length; i++)\n                    if (this.markers[i].compare(marker)) {\n                        skipTo = i;\n                        matched = true;\n                        break;\n                    }\n            }\n            else {\n                skipTo = this.markers.length;\n            }\n            while (iOld < skipTo) {\n                let next = this.markers[iOld++];\n                if (next.toDOM) {\n                    next.destroy(domPos);\n                    let after = domPos.nextSibling;\n                    domPos.remove();\n                    domPos = after;\n                }\n            }\n            if (!marker)\n                break;\n            if (marker.toDOM) {\n                if (matched)\n                    domPos = domPos.nextSibling;\n                else\n                    this.dom.insertBefore(marker.toDOM(view), domPos);\n            }\n            if (matched)\n                iOld++;\n        }\n        this.dom.className = cls;\n        this.markers = markers;\n    }\n    destroy() {\n        this.setMarkers(null, []); // First argument not used unless creating markers\n    }\n}\nfunction sameMarkers(a, b) {\n    if (a.length != b.length)\n        return false;\n    for (let i = 0; i < a.length; i++)\n        if (!a[i].compare(b[i]))\n            return false;\n    return true;\n}\n/**\nFacet used to provide markers to the line number gutter.\n*/\nconst lineNumberMarkers = /*@__PURE__*/Facet.define();\nconst lineNumberConfig = /*@__PURE__*/Facet.define({\n    combine(values) {\n        return combineConfig(values, { formatNumber: String, domEventHandlers: {} }, {\n            domEventHandlers(a, b) {\n                let result = Object.assign({}, a);\n                for (let event in b) {\n                    let exists = result[event], add = b[event];\n                    result[event] = exists ? (view, line, event) => exists(view, line, event) || add(view, line, event) : add;\n                }\n                return result;\n            }\n        });\n    }\n});\nclass NumberMarker extends GutterMarker {\n    constructor(number) {\n        super();\n        this.number = number;\n    }\n    eq(other) { return this.number == other.number; }\n    toDOM() { return document.createTextNode(this.number); }\n}\nfunction formatNumber(view, number) {\n    return view.state.facet(lineNumberConfig).formatNumber(number, view.state);\n}\nconst lineNumberGutter = /*@__PURE__*/activeGutters.compute([lineNumberConfig], state => ({\n    class: \"cm-lineNumbers\",\n    renderEmptyElements: false,\n    markers(view) { return view.state.facet(lineNumberMarkers); },\n    lineMarker(view, line, others) {\n        if (others.some(m => m.toDOM))\n            return null;\n        return new NumberMarker(formatNumber(view, view.state.doc.lineAt(line.from).number));\n    },\n    widgetMarker: () => null,\n    lineMarkerChange: update => update.startState.facet(lineNumberConfig) != update.state.facet(lineNumberConfig),\n    initialSpacer(view) {\n        return new NumberMarker(formatNumber(view, maxLineNumber(view.state.doc.lines)));\n    },\n    updateSpacer(spacer, update) {\n        let max = formatNumber(update.view, maxLineNumber(update.view.state.doc.lines));\n        return max == spacer.number ? spacer : new NumberMarker(max);\n    },\n    domEventHandlers: state.facet(lineNumberConfig).domEventHandlers\n}));\n/**\nCreate a line number gutter extension.\n*/\nfunction lineNumbers(config = {}) {\n    return [\n        lineNumberConfig.of(config),\n        gutters(),\n        lineNumberGutter\n    ];\n}\nfunction maxLineNumber(lines) {\n    let last = 9;\n    while (last < lines)\n        last = last * 10 + 9;\n    return last;\n}\nconst activeLineGutterMarker = /*@__PURE__*/new class extends GutterMarker {\n    constructor() {\n        super(...arguments);\n        this.elementClass = \"cm-activeLineGutter\";\n    }\n};\nconst activeLineGutterHighlighter = /*@__PURE__*/gutterLineClass.compute([\"selection\"], state => {\n    let marks = [], last = -1;\n    for (let range of state.selection.ranges) {\n        let linePos = state.doc.lineAt(range.head).from;\n        if (linePos > last) {\n            last = linePos;\n            marks.push(activeLineGutterMarker.range(linePos));\n        }\n    }\n    return RangeSet.of(marks);\n});\n/**\nReturns an extension that adds a `cm-activeLineGutter` class to\nall gutter elements on the [active\nline](https://codemirror.net/6/docs/ref/#view.highlightActiveLine).\n*/\nfunction highlightActiveLineGutter() {\n    return activeLineGutterHighlighter;\n}\n\nconst WhitespaceDeco = /*@__PURE__*/new Map();\nfunction getWhitespaceDeco(space) {\n    let deco = WhitespaceDeco.get(space);\n    if (!deco)\n        WhitespaceDeco.set(space, deco = Decoration.mark({\n            attributes: space === \"\\t\" ? {\n                class: \"cm-highlightTab\",\n            } : {\n                class: \"cm-highlightSpace\",\n                \"data-display\": space.replace(/ /g, \"\u00B7\")\n            }\n        }));\n    return deco;\n}\nfunction matcher(decorator) {\n    return ViewPlugin.define(view => ({\n        decorations: decorator.createDeco(view),\n        update(u) {\n            this.decorations = decorator.updateDeco(u, this.decorations);\n        },\n    }), {\n        decorations: v => v.decorations\n    });\n}\nconst whitespaceHighlighter = /*@__PURE__*/matcher(/*@__PURE__*/new MatchDecorator({\n    regexp: /\\t| +/g,\n    decoration: match => getWhitespaceDeco(match[0]),\n    boundary: /\\S/,\n}));\n/**\nReturns an extension that highlights whitespace, adding a\n`cm-highlightSpace` class to stretches of spaces, and a\n`cm-highlightTab` class to individual tab characters. By default,\nthe former are shown as faint dots, and the latter as arrows.\n*/\nfunction highlightWhitespace() {\n    return whitespaceHighlighter;\n}\nconst trailingHighlighter = /*@__PURE__*/matcher(/*@__PURE__*/new MatchDecorator({\n    regexp: /\\s+$/g,\n    decoration: /*@__PURE__*/Decoration.mark({ class: \"cm-trailingSpace\" }),\n    boundary: /\\S/,\n}));\n/**\nReturns an extension that adds a `cm-trailingSpace` class to all\ntrailing whitespace.\n*/\nfunction highlightTrailingWhitespace() {\n    return trailingHighlighter;\n}\n\n/**\n@internal\n*/\nconst __test = { HeightMap, HeightOracle, MeasuredHeights, QueryType, ChangedRange, computeOrder, moveVisually };\n\nexport { BidiSpan, BlockInfo, BlockType, Decoration, Direction, EditorView, GutterMarker, MatchDecorator, RectangleMarker, ViewPlugin, ViewUpdate, WidgetType, __test, closeHoverTooltips, crosshairCursor, drawSelection, dropCursor, getDrawSelectionConfig, getPanel, getTooltip, gutter, gutterLineClass, gutters, hasHoverTooltips, highlightActiveLine, highlightActiveLineGutter, highlightSpecialChars, highlightTrailingWhitespace, highlightWhitespace, hoverTooltip, keymap, layer, lineNumberMarkers, lineNumbers, logException, panels, placeholder, rectangularSelection, repositionTooltips, runScopeHandlers, scrollPastEnd, showPanel, showTooltip, tooltips };\n", "export const enum Info { Margin = 10, Width = 300 }\n\nexport const autocompleteLightThemeConfig = {\n    \".cm-tooltip.cm-tooltip-autocomplete\": {\n        \"& > ul\": {\n            fontFamily: \"Inter, Helvetica, 'sans-serif'\",\n            whiteSpace: \"nowrap\",\n            overflow: \"hidden auto\",\n            maxWidth_fallback: \"700px\",\n            maxWidth: \"min(700px, 95vw)\",\n            minWidth: \"150px\",\n            maxHeight: \"10em\",\n            height: \"100%\",\n            listStyle: \"none\",\n            margin: 0,\n            padding: 0,\n\n            \"& > li, & > completion-section\": {\n                padding: \"1px 3px\",\n                lineHeight: 1.5\n            },\n            \"& > li\": {\n                overflowX: \"hidden\",\n                textOverflow: \"ellipsis\",\n                cursor: \"pointer\"\n            },\n            \"& > completion-section\": {\n                display: \"list-item\",\n                borderBottom: \"1px solid silver\",\n                paddingLeft: \"0.5em\",\n                opacity: 0.7\n            }\n        }\n    },\n\n    \".cm-tooltip-autocomplete ul li[aria-selected]\": {\n        background: \"#3E97FF\",\n        color: \"white\",\n    },\n\n    \".cm-tooltip-autocomplete-disabled ul li[aria-selected]\": {\n        background: \"#777\",\n    },\n\n    \".cm-completionListIncompleteTop:before, .cm-completionListIncompleteBottom:after\": {\n        content: '\"\u00B7\u00B7\u00B7\"',\n        opacity: 0.5,\n        display: \"block\",\n        textAlign: \"center\"\n    },\n\n    \".cm-tooltip.cm-completionInfo\": {\n        position: \"absolute\",\n        padding: \"3px 9px\",\n        width: \"max-content\",\n        maxWidth: `${Info.Width}px`,\n        boxSizing: \"border-box\"\n    },\n\n    \".cm-completionInfo.cm-completionInfo-left\": { right: \"100%\" },\n    \".cm-completionInfo.cm-completionInfo-right\": { left: \"100%\" },\n    \".cm-completionInfo.cm-completionInfo-left-narrow\": { right: `${Info.Margin}px` },\n    \".cm-completionInfo.cm-completionInfo-right-narrow\": { left: `${Info.Margin}px` },\n\n    \".cm-snippetField\": {backgroundColor: \"#00000022\"},\n    \".cm-snippetFieldPosition\": {\n        verticalAlign: \"text-top\",\n        width: 0,\n        height: \"1.15em\",\n        display: \"inline-block\",\n        margin: \"0 -0.7px -.7em\",\n        borderLeft: \"1.4px dotted #888\"\n    },\n\n    \".cm-completionMatchedText\": {\n        textDecoration: \"underline\"\n    },\n\n    \".cm-completionDetail\": {\n        marginLeft: \"0.5em\",\n        fontStyle: \"italic\"\n    },\n\n    \".cm-completionIcon\": {\n        fontSize: \"90%\",\n        width: \".8em\",\n        display: \"inline-block\",\n        textAlign: \"center\",\n        paddingRight: \".6em\",\n        opacity: \"0.6\",\n        boxSizing: \"content-box\"\n    },\n\n    \".cm-completionIcon-function, .cm-completionIcon-method\": {\n        \"&:after\": { content: \"'\u0192'\" }\n    },\n    \".cm-completionIcon-class\": {\n        \"&:after\": { content: \"'\u25CB'\" }\n    },\n    \".cm-completionIcon-interface\": {\n        \"&:after\": { content: \"'\u25CC'\" }\n    },\n    \".cm-completionIcon-variable\": {\n        \"&:after\": { content: \"'\uD835\uDC65'\" }\n    },\n    \".cm-completionIcon-constant\": {\n        \"&:after\": { content: \"'\uD835\uDC36'\" }\n    },\n    \".cm-completionIcon-type\": {\n        \"&:after\": { content: \"'\uD835\uDC61'\" }\n    },\n    \".cm-completionIcon-enum\": {\n        \"&:after\": { content: \"'\u222A'\" }\n    },\n    \".cm-completionIcon-property\": {\n        \"&:after\": { content: \"'\u25A1'\" }\n    },\n    \".cm-completionIcon-keyword\": {\n        \"&:after\": { content: \"'\uD83D\uDD11\\uFE0E'\" } // Disable emoji rendering\n    },\n    \".cm-completionIcon-namespace\": {\n        \"&:after\": { content: \"'\u25A2'\" }\n    },\n    \".cm-completionIcon-text\": {\n        \"&:after\": { content: \"'abc'\", fontSize: \"50%\", verticalAlign: \"middle\" }\n    }\n}", "export const searchPanelLightThemeConfig = {\n    \".cm-panel.cm-search\": {\n        padding: \"2px 6px 4px\",\n        position: \"relative\",\n        fontSize: \"1.2em\",\n        fontFamily: \"Inter, Helvetica, 'sans-serif'\",\n        \"& [name=close]\": {\n            position: \"absolute\",\n            top: \"0\",\n            right: \"4px\",\n            backgroundColor: \"inherit\",\n            border: \"none\",\n            font: \"inherit\",\n            padding: 0,\n            margin: 0,\n        },\n        \"& input, & button, & label\": {\n            margin: \".2em .6em .2em 0\"\n        },\n        \"& input[type=checkbox]\": {\n            marginRight: \".2em\"\n        },\n        \"& label\": {\n            fontSize: \"80%\",\n            whiteSpace: \"pre\",\n            fontWeight: \"inherit\"\n\n        }\n    },\n    \".cm-searchMatch\": { backgroundColor: \"#ffff0054\" },\n    \".cm-searchMatch-selected\": { backgroundColor: \"#ff6a0054\" },\n};", "import {EditorView} from \"@codemirror/view\";\nimport { autocompleteLightThemeConfig } from \"./light-autocomplete-theme\";\nimport { searchPanelLightThemeConfig} from \"./light-search-panel-theme\";\n\n\nconst main = {\n    \"&\": { minHeight: \"100px\", height: \"100%\"},\n    \"&.cm-focused\": { outline: \"none\"},\n    \".cm-scroller\": {\n        fontFamily: \"Inter, Helvetica, 'sans-serif'\",\n    },\n    \".cm-gutters\": { backgroundColor: \"#ffffff\", border: \"none\"},\n    \".cm-activeLineGutter\": { backgroundColor: \"#ffffff\"},\n\n    '.cm-scroller::-webkit-scrollbar': {\n        width: '5px',\n    },\n    '.cm-scroller::-webkit-scrollbar-track': {\n        background: '#FFFFFF',\n    },\n    '.cm-scroller::-webkit-scrollbar-thumb': {\n        background: '#3E97FF1A',\n    },\n    '.cm-scroller::-webkit-scrollbar-thumb:hover': {\n        background: '#3E97FF59',\n    },\n\n}\nexport const lightTheme = EditorView.theme({...main, ...autocompleteLightThemeConfig, ...searchPanelLightThemeConfig }, {dark: false})\n", "/**\nThe default maximum length of a `TreeBuffer` node.\n*/\nconst DefaultBufferLength = 1024;\nlet nextPropID = 0;\nclass Range {\n    constructor(from, to) {\n        this.from = from;\n        this.to = to;\n    }\n}\n/**\nEach [node type](#common.NodeType) or [individual tree](#common.Tree)\ncan have metadata associated with it in props. Instances of this\nclass represent prop names.\n*/\nclass NodeProp {\n    /**\n    Create a new node prop type.\n    */\n    constructor(config = {}) {\n        this.id = nextPropID++;\n        this.perNode = !!config.perNode;\n        this.deserialize = config.deserialize || (() => {\n            throw new Error(\"This node type doesn't define a deserialize function\");\n        });\n    }\n    /**\n    This is meant to be used with\n    [`NodeSet.extend`](#common.NodeSet.extend) or\n    [`LRParser.configure`](#lr.ParserConfig.props) to compute\n    prop values for each node type in the set. Takes a [match\n    object](#common.NodeType^match) or function that returns undefined\n    if the node type doesn't get this prop, and the prop's value if\n    it does.\n    */\n    add(match) {\n        if (this.perNode)\n            throw new RangeError(\"Can't add per-node props to node types\");\n        if (typeof match != \"function\")\n            match = NodeType.match(match);\n        return (type) => {\n            let result = match(type);\n            return result === undefined ? null : [this, result];\n        };\n    }\n}\n/**\nProp that is used to describe matching delimiters. For opening\ndelimiters, this holds an array of node names (written as a\nspace-separated string when declaring this prop in a grammar)\nfor the node types of closing delimiters that match it.\n*/\nNodeProp.closedBy = new NodeProp({ deserialize: str => str.split(\" \") });\n/**\nThe inverse of [`closedBy`](#common.NodeProp^closedBy). This is\nattached to closing delimiters, holding an array of node names\nof types of matching opening delimiters.\n*/\nNodeProp.openedBy = new NodeProp({ deserialize: str => str.split(\" \") });\n/**\nUsed to assign node types to groups (for example, all node\ntypes that represent an expression could be tagged with an\n`\"Expression\"` group).\n*/\nNodeProp.group = new NodeProp({ deserialize: str => str.split(\" \") });\n/**\nThe hash of the [context](#lr.ContextTracker.constructor)\nthat the node was parsed in, if any. Used to limit reuse of\ncontextual nodes.\n*/\nNodeProp.contextHash = new NodeProp({ perNode: true });\n/**\nThe distance beyond the end of the node that the tokenizer\nlooked ahead for any of the tokens inside the node. (The LR\nparser only stores this when it is larger than 25, for\nefficiency reasons.)\n*/\nNodeProp.lookAhead = new NodeProp({ perNode: true });\n/**\nThis per-node prop is used to replace a given node, or part of a\nnode, with another tree. This is useful to include trees from\ndifferent languages in mixed-language parsers.\n*/\nNodeProp.mounted = new NodeProp({ perNode: true });\n/**\nA mounted tree, which can be [stored](#common.NodeProp^mounted) on\na tree node to indicate that parts of its content are\nrepresented by another tree.\n*/\nclass MountedTree {\n    constructor(\n    /**\n    The inner tree.\n    */\n    tree, \n    /**\n    If this is null, this tree replaces the entire node (it will\n    be included in the regular iteration instead of its host\n    node). If not, only the given ranges are considered to be\n    covered by this tree. This is used for trees that are mixed in\n    a way that isn't strictly hierarchical. Such mounted trees are\n    only entered by [`resolveInner`](#common.Tree.resolveInner)\n    and [`enter`](#common.SyntaxNode.enter).\n    */\n    overlay, \n    /**\n    The parser used to create this subtree.\n    */\n    parser) {\n        this.tree = tree;\n        this.overlay = overlay;\n        this.parser = parser;\n    }\n    /**\n    @internal\n    */\n    static get(tree) {\n        return tree && tree.props && tree.props[NodeProp.mounted.id];\n    }\n}\nconst noProps = Object.create(null);\n/**\nEach node in a syntax tree has a node type associated with it.\n*/\nclass NodeType {\n    /**\n    @internal\n    */\n    constructor(\n    /**\n    The name of the node type. Not necessarily unique, but if the\n    grammar was written properly, different node types with the\n    same name within a node set should play the same semantic\n    role.\n    */\n    name, \n    /**\n    @internal\n    */\n    props, \n    /**\n    The id of this node in its set. Corresponds to the term ids\n    used in the parser.\n    */\n    id, \n    /**\n    @internal\n    */\n    flags = 0) {\n        this.name = name;\n        this.props = props;\n        this.id = id;\n        this.flags = flags;\n    }\n    /**\n    Define a node type.\n    */\n    static define(spec) {\n        let props = spec.props && spec.props.length ? Object.create(null) : noProps;\n        let flags = (spec.top ? 1 /* NodeFlag.Top */ : 0) | (spec.skipped ? 2 /* NodeFlag.Skipped */ : 0) |\n            (spec.error ? 4 /* NodeFlag.Error */ : 0) | (spec.name == null ? 8 /* NodeFlag.Anonymous */ : 0);\n        let type = new NodeType(spec.name || \"\", props, spec.id, flags);\n        if (spec.props)\n            for (let src of spec.props) {\n                if (!Array.isArray(src))\n                    src = src(type);\n                if (src) {\n                    if (src[0].perNode)\n                        throw new RangeError(\"Can't store a per-node prop on a node type\");\n                    props[src[0].id] = src[1];\n                }\n            }\n        return type;\n    }\n    /**\n    Retrieves a node prop for this type. Will return `undefined` if\n    the prop isn't present on this node.\n    */\n    prop(prop) { return this.props[prop.id]; }\n    /**\n    True when this is the top node of a grammar.\n    */\n    get isTop() { return (this.flags & 1 /* NodeFlag.Top */) > 0; }\n    /**\n    True when this node is produced by a skip rule.\n    */\n    get isSkipped() { return (this.flags & 2 /* NodeFlag.Skipped */) > 0; }\n    /**\n    Indicates whether this is an error node.\n    */\n    get isError() { return (this.flags & 4 /* NodeFlag.Error */) > 0; }\n    /**\n    When true, this node type doesn't correspond to a user-declared\n    named node, for example because it is used to cache repetition.\n    */\n    get isAnonymous() { return (this.flags & 8 /* NodeFlag.Anonymous */) > 0; }\n    /**\n    Returns true when this node's name or one of its\n    [groups](#common.NodeProp^group) matches the given string.\n    */\n    is(name) {\n        if (typeof name == 'string') {\n            if (this.name == name)\n                return true;\n            let group = this.prop(NodeProp.group);\n            return group ? group.indexOf(name) > -1 : false;\n        }\n        return this.id == name;\n    }\n    /**\n    Create a function from node types to arbitrary values by\n    specifying an object whose property names are node or\n    [group](#common.NodeProp^group) names. Often useful with\n    [`NodeProp.add`](#common.NodeProp.add). You can put multiple\n    names, separated by spaces, in a single property name to map\n    multiple node names to a single value.\n    */\n    static match(map) {\n        let direct = Object.create(null);\n        for (let prop in map)\n            for (let name of prop.split(\" \"))\n                direct[name] = map[prop];\n        return (node) => {\n            for (let groups = node.prop(NodeProp.group), i = -1; i < (groups ? groups.length : 0); i++) {\n                let found = direct[i < 0 ? node.name : groups[i]];\n                if (found)\n                    return found;\n            }\n        };\n    }\n}\n/**\nAn empty dummy node type to use when no actual type is available.\n*/\nNodeType.none = new NodeType(\"\", Object.create(null), 0, 8 /* NodeFlag.Anonymous */);\n/**\nA node set holds a collection of node types. It is used to\ncompactly represent trees by storing their type ids, rather than a\nfull pointer to the type object, in a numeric array. Each parser\n[has](#lr.LRParser.nodeSet) a node set, and [tree\nbuffers](#common.TreeBuffer) can only store collections of nodes\nfrom the same set. A set can have a maximum of 2**16 (65536) node\ntypes in it, so that the ids fit into 16-bit typed array slots.\n*/\nclass NodeSet {\n    /**\n    Create a set with the given types. The `id` property of each\n    type should correspond to its position within the array.\n    */\n    constructor(\n    /**\n    The node types in this set, by id.\n    */\n    types) {\n        this.types = types;\n        for (let i = 0; i < types.length; i++)\n            if (types[i].id != i)\n                throw new RangeError(\"Node type ids should correspond to array positions when creating a node set\");\n    }\n    /**\n    Create a copy of this set with some node properties added. The\n    arguments to this method can be created with\n    [`NodeProp.add`](#common.NodeProp.add).\n    */\n    extend(...props) {\n        let newTypes = [];\n        for (let type of this.types) {\n            let newProps = null;\n            for (let source of props) {\n                let add = source(type);\n                if (add) {\n                    if (!newProps)\n                        newProps = Object.assign({}, type.props);\n                    newProps[add[0].id] = add[1];\n                }\n            }\n            newTypes.push(newProps ? new NodeType(type.name, newProps, type.id, type.flags) : type);\n        }\n        return new NodeSet(newTypes);\n    }\n}\nconst CachedNode = new WeakMap(), CachedInnerNode = new WeakMap();\n/**\nOptions that control iteration. Can be combined with the `|`\noperator to enable multiple ones.\n*/\nvar IterMode;\n(function (IterMode) {\n    /**\n    When enabled, iteration will only visit [`Tree`](#common.Tree)\n    objects, not nodes packed into\n    [`TreeBuffer`](#common.TreeBuffer)s.\n    */\n    IterMode[IterMode[\"ExcludeBuffers\"] = 1] = \"ExcludeBuffers\";\n    /**\n    Enable this to make iteration include anonymous nodes (such as\n    the nodes that wrap repeated grammar constructs into a balanced\n    tree).\n    */\n    IterMode[IterMode[\"IncludeAnonymous\"] = 2] = \"IncludeAnonymous\";\n    /**\n    By default, regular [mounted](#common.NodeProp^mounted) nodes\n    replace their base node in iteration. Enable this to ignore them\n    instead.\n    */\n    IterMode[IterMode[\"IgnoreMounts\"] = 4] = \"IgnoreMounts\";\n    /**\n    This option only applies in\n    [`enter`](#common.SyntaxNode.enter)-style methods. It tells the\n    library to not enter mounted overlays if one covers the given\n    position.\n    */\n    IterMode[IterMode[\"IgnoreOverlays\"] = 8] = \"IgnoreOverlays\";\n})(IterMode || (IterMode = {}));\n/**\nA piece of syntax tree. There are two ways to approach these\ntrees: the way they are actually stored in memory, and the\nconvenient way.\n\nSyntax trees are stored as a tree of `Tree` and `TreeBuffer`\nobjects. By packing detail information into `TreeBuffer` leaf\nnodes, the representation is made a lot more memory-efficient.\n\nHowever, when you want to actually work with tree nodes, this\nrepresentation is very awkward, so most client code will want to\nuse the [`TreeCursor`](#common.TreeCursor) or\n[`SyntaxNode`](#common.SyntaxNode) interface instead, which provides\na view on some part of this data structure, and can be used to\nmove around to adjacent nodes.\n*/\nclass Tree {\n    /**\n    Construct a new tree. See also [`Tree.build`](#common.Tree^build).\n    */\n    constructor(\n    /**\n    The type of the top node.\n    */\n    type, \n    /**\n    This node's child nodes.\n    */\n    children, \n    /**\n    The positions (offsets relative to the start of this tree) of\n    the children.\n    */\n    positions, \n    /**\n    The total length of this tree\n    */\n    length, \n    /**\n    Per-node [node props](#common.NodeProp) to associate with this node.\n    */\n    props) {\n        this.type = type;\n        this.children = children;\n        this.positions = positions;\n        this.length = length;\n        /**\n        @internal\n        */\n        this.props = null;\n        if (props && props.length) {\n            this.props = Object.create(null);\n            for (let [prop, value] of props)\n                this.props[typeof prop == \"number\" ? prop : prop.id] = value;\n        }\n    }\n    /**\n    @internal\n    */\n    toString() {\n        let mounted = MountedTree.get(this);\n        if (mounted && !mounted.overlay)\n            return mounted.tree.toString();\n        let children = \"\";\n        for (let ch of this.children) {\n            let str = ch.toString();\n            if (str) {\n                if (children)\n                    children += \",\";\n                children += str;\n            }\n        }\n        return !this.type.name ? children :\n            (/\\W/.test(this.type.name) && !this.type.isError ? JSON.stringify(this.type.name) : this.type.name) +\n                (children.length ? \"(\" + children + \")\" : \"\");\n    }\n    /**\n    Get a [tree cursor](#common.TreeCursor) positioned at the top of\n    the tree. Mode can be used to [control](#common.IterMode) which\n    nodes the cursor visits.\n    */\n    cursor(mode = 0) {\n        return new TreeCursor(this.topNode, mode);\n    }\n    /**\n    Get a [tree cursor](#common.TreeCursor) pointing into this tree\n    at the given position and side (see\n    [`moveTo`](#common.TreeCursor.moveTo).\n    */\n    cursorAt(pos, side = 0, mode = 0) {\n        let scope = CachedNode.get(this) || this.topNode;\n        let cursor = new TreeCursor(scope);\n        cursor.moveTo(pos, side);\n        CachedNode.set(this, cursor._tree);\n        return cursor;\n    }\n    /**\n    Get a [syntax node](#common.SyntaxNode) object for the top of the\n    tree.\n    */\n    get topNode() {\n        return new TreeNode(this, 0, 0, null);\n    }\n    /**\n    Get the [syntax node](#common.SyntaxNode) at the given position.\n    If `side` is -1, this will move into nodes that end at the\n    position. If 1, it'll move into nodes that start at the\n    position. With 0, it'll only enter nodes that cover the position\n    from both sides.\n    \n    Note that this will not enter\n    [overlays](#common.MountedTree.overlay), and you often want\n    [`resolveInner`](#common.Tree.resolveInner) instead.\n    */\n    resolve(pos, side = 0) {\n        let node = resolveNode(CachedNode.get(this) || this.topNode, pos, side, false);\n        CachedNode.set(this, node);\n        return node;\n    }\n    /**\n    Like [`resolve`](#common.Tree.resolve), but will enter\n    [overlaid](#common.MountedTree.overlay) nodes, producing a syntax node\n    pointing into the innermost overlaid tree at the given position\n    (with parent links going through all parent structure, including\n    the host trees).\n    */\n    resolveInner(pos, side = 0) {\n        let node = resolveNode(CachedInnerNode.get(this) || this.topNode, pos, side, true);\n        CachedInnerNode.set(this, node);\n        return node;\n    }\n    /**\n    In some situations, it can be useful to iterate through all\n    nodes around a position, including those in overlays that don't\n    directly cover the position. This method gives you an iterator\n    that will produce all nodes, from small to big, around the given\n    position.\n    */\n    resolveStack(pos, side = 0) {\n        return stackIterator(this, pos, side);\n    }\n    /**\n    Iterate over the tree and its children, calling `enter` for any\n    node that touches the `from`/`to` region (if given) before\n    running over such a node's children, and `leave` (if given) when\n    leaving the node. When `enter` returns `false`, that node will\n    not have its children iterated over (or `leave` called).\n    */\n    iterate(spec) {\n        let { enter, leave, from = 0, to = this.length } = spec;\n        let mode = spec.mode || 0, anon = (mode & IterMode.IncludeAnonymous) > 0;\n        for (let c = this.cursor(mode | IterMode.IncludeAnonymous);;) {\n            let entered = false;\n            if (c.from <= to && c.to >= from && (!anon && c.type.isAnonymous || enter(c) !== false)) {\n                if (c.firstChild())\n                    continue;\n                entered = true;\n            }\n            for (;;) {\n                if (entered && leave && (anon || !c.type.isAnonymous))\n                    leave(c);\n                if (c.nextSibling())\n                    break;\n                if (!c.parent())\n                    return;\n                entered = true;\n            }\n        }\n    }\n    /**\n    Get the value of the given [node prop](#common.NodeProp) for this\n    node. Works with both per-node and per-type props.\n    */\n    prop(prop) {\n        return !prop.perNode ? this.type.prop(prop) : this.props ? this.props[prop.id] : undefined;\n    }\n    /**\n    Returns the node's [per-node props](#common.NodeProp.perNode) in a\n    format that can be passed to the [`Tree`](#common.Tree)\n    constructor.\n    */\n    get propValues() {\n        let result = [];\n        if (this.props)\n            for (let id in this.props)\n                result.push([+id, this.props[id]]);\n        return result;\n    }\n    /**\n    Balance the direct children of this tree, producing a copy of\n    which may have children grouped into subtrees with type\n    [`NodeType.none`](#common.NodeType^none).\n    */\n    balance(config = {}) {\n        return this.children.length <= 8 /* Balance.BranchFactor */ ? this :\n            balanceRange(NodeType.none, this.children, this.positions, 0, this.children.length, 0, this.length, (children, positions, length) => new Tree(this.type, children, positions, length, this.propValues), config.makeTree || ((children, positions, length) => new Tree(NodeType.none, children, positions, length)));\n    }\n    /**\n    Build a tree from a postfix-ordered buffer of node information,\n    or a cursor over such a buffer.\n    */\n    static build(data) { return buildTree(data); }\n}\n/**\nThe empty tree\n*/\nTree.empty = new Tree(NodeType.none, [], [], 0);\nclass FlatBufferCursor {\n    constructor(buffer, index) {\n        this.buffer = buffer;\n        this.index = index;\n    }\n    get id() { return this.buffer[this.index - 4]; }\n    get start() { return this.buffer[this.index - 3]; }\n    get end() { return this.buffer[this.index - 2]; }\n    get size() { return this.buffer[this.index - 1]; }\n    get pos() { return this.index; }\n    next() { this.index -= 4; }\n    fork() { return new FlatBufferCursor(this.buffer, this.index); }\n}\n/**\nTree buffers contain (type, start, end, endIndex) quads for each\nnode. In such a buffer, nodes are stored in prefix order (parents\nbefore children, with the endIndex of the parent indicating which\nchildren belong to it).\n*/\nclass TreeBuffer {\n    /**\n    Create a tree buffer.\n    */\n    constructor(\n    /**\n    The buffer's content.\n    */\n    buffer, \n    /**\n    The total length of the group of nodes in the buffer.\n    */\n    length, \n    /**\n    The node set used in this buffer.\n    */\n    set) {\n        this.buffer = buffer;\n        this.length = length;\n        this.set = set;\n    }\n    /**\n    @internal\n    */\n    get type() { return NodeType.none; }\n    /**\n    @internal\n    */\n    toString() {\n        let result = [];\n        for (let index = 0; index < this.buffer.length;) {\n            result.push(this.childString(index));\n            index = this.buffer[index + 3];\n        }\n        return result.join(\",\");\n    }\n    /**\n    @internal\n    */\n    childString(index) {\n        let id = this.buffer[index], endIndex = this.buffer[index + 3];\n        let type = this.set.types[id], result = type.name;\n        if (/\\W/.test(result) && !type.isError)\n            result = JSON.stringify(result);\n        index += 4;\n        if (endIndex == index)\n            return result;\n        let children = [];\n        while (index < endIndex) {\n            children.push(this.childString(index));\n            index = this.buffer[index + 3];\n        }\n        return result + \"(\" + children.join(\",\") + \")\";\n    }\n    /**\n    @internal\n    */\n    findChild(startIndex, endIndex, dir, pos, side) {\n        let { buffer } = this, pick = -1;\n        for (let i = startIndex; i != endIndex; i = buffer[i + 3]) {\n            if (checkSide(side, pos, buffer[i + 1], buffer[i + 2])) {\n                pick = i;\n                if (dir > 0)\n                    break;\n            }\n        }\n        return pick;\n    }\n    /**\n    @internal\n    */\n    slice(startI, endI, from) {\n        let b = this.buffer;\n        let copy = new Uint16Array(endI - startI), len = 0;\n        for (let i = startI, j = 0; i < endI;) {\n            copy[j++] = b[i++];\n            copy[j++] = b[i++] - from;\n            let to = copy[j++] = b[i++] - from;\n            copy[j++] = b[i++] - startI;\n            len = Math.max(len, to);\n        }\n        return new TreeBuffer(copy, len, this.set);\n    }\n}\nfunction checkSide(side, pos, from, to) {\n    switch (side) {\n        case -2 /* Side.Before */: return from < pos;\n        case -1 /* Side.AtOrBefore */: return to >= pos && from < pos;\n        case 0 /* Side.Around */: return from < pos && to > pos;\n        case 1 /* Side.AtOrAfter */: return from <= pos && to > pos;\n        case 2 /* Side.After */: return to > pos;\n        case 4 /* Side.DontCare */: return true;\n    }\n}\nfunction resolveNode(node, pos, side, overlays) {\n    var _a;\n    // Move up to a node that actually holds the position, if possible\n    while (node.from == node.to ||\n        (side < 1 ? node.from >= pos : node.from > pos) ||\n        (side > -1 ? node.to <= pos : node.to < pos)) {\n        let parent = !overlays && node instanceof TreeNode && node.index < 0 ? null : node.parent;\n        if (!parent)\n            return node;\n        node = parent;\n    }\n    let mode = overlays ? 0 : IterMode.IgnoreOverlays;\n    // Must go up out of overlays when those do not overlap with pos\n    if (overlays)\n        for (let scan = node, parent = scan.parent; parent; scan = parent, parent = scan.parent) {\n            if (scan instanceof TreeNode && scan.index < 0 && ((_a = parent.enter(pos, side, mode)) === null || _a === void 0 ? void 0 : _a.from) != scan.from)\n                node = parent;\n        }\n    for (;;) {\n        let inner = node.enter(pos, side, mode);\n        if (!inner)\n            return node;\n        node = inner;\n    }\n}\nclass BaseNode {\n    cursor(mode = 0) { return new TreeCursor(this, mode); }\n    getChild(type, before = null, after = null) {\n        let r = getChildren(this, type, before, after);\n        return r.length ? r[0] : null;\n    }\n    getChildren(type, before = null, after = null) {\n        return getChildren(this, type, before, after);\n    }\n    resolve(pos, side = 0) {\n        return resolveNode(this, pos, side, false);\n    }\n    resolveInner(pos, side = 0) {\n        return resolveNode(this, pos, side, true);\n    }\n    matchContext(context) {\n        return matchNodeContext(this, context);\n    }\n    enterUnfinishedNodesBefore(pos) {\n        let scan = this.childBefore(pos), node = this;\n        while (scan) {\n            let last = scan.lastChild;\n            if (!last || last.to != scan.to)\n                break;\n            if (last.type.isError && last.from == last.to) {\n                node = scan;\n                scan = last.prevSibling;\n            }\n            else {\n                scan = last;\n            }\n        }\n        return node;\n    }\n    get node() { return this; }\n    get next() { return this.parent; }\n}\nclass TreeNode extends BaseNode {\n    constructor(_tree, from, \n    // Index in parent node, set to -1 if the node is not a direct child of _parent.node (overlay)\n    index, _parent) {\n        super();\n        this._tree = _tree;\n        this.from = from;\n        this.index = index;\n        this._parent = _parent;\n    }\n    get type() { return this._tree.type; }\n    get name() { return this._tree.type.name; }\n    get to() { return this.from + this._tree.length; }\n    nextChild(i, dir, pos, side, mode = 0) {\n        for (let parent = this;;) {\n            for (let { children, positions } = parent._tree, e = dir > 0 ? children.length : -1; i != e; i += dir) {\n                let next = children[i], start = positions[i] + parent.from;\n                if (!checkSide(side, pos, start, start + next.length))\n                    continue;\n                if (next instanceof TreeBuffer) {\n                    if (mode & IterMode.ExcludeBuffers)\n                        continue;\n                    let index = next.findChild(0, next.buffer.length, dir, pos - start, side);\n                    if (index > -1)\n                        return new BufferNode(new BufferContext(parent, next, i, start), null, index);\n                }\n                else if ((mode & IterMode.IncludeAnonymous) || (!next.type.isAnonymous || hasChild(next))) {\n                    let mounted;\n                    if (!(mode & IterMode.IgnoreMounts) && (mounted = MountedTree.get(next)) && !mounted.overlay)\n                        return new TreeNode(mounted.tree, start, i, parent);\n                    let inner = new TreeNode(next, start, i, parent);\n                    return (mode & IterMode.IncludeAnonymous) || !inner.type.isAnonymous ? inner\n                        : inner.nextChild(dir < 0 ? next.children.length - 1 : 0, dir, pos, side);\n                }\n            }\n            if ((mode & IterMode.IncludeAnonymous) || !parent.type.isAnonymous)\n                return null;\n            if (parent.index >= 0)\n                i = parent.index + dir;\n            else\n                i = dir < 0 ? -1 : parent._parent._tree.children.length;\n            parent = parent._parent;\n            if (!parent)\n                return null;\n        }\n    }\n    get firstChild() { return this.nextChild(0, 1, 0, 4 /* Side.DontCare */); }\n    get lastChild() { return this.nextChild(this._tree.children.length - 1, -1, 0, 4 /* Side.DontCare */); }\n    childAfter(pos) { return this.nextChild(0, 1, pos, 2 /* Side.After */); }\n    childBefore(pos) { return this.nextChild(this._tree.children.length - 1, -1, pos, -2 /* Side.Before */); }\n    enter(pos, side, mode = 0) {\n        let mounted;\n        if (!(mode & IterMode.IgnoreOverlays) && (mounted = MountedTree.get(this._tree)) && mounted.overlay) {\n            let rPos = pos - this.from;\n            for (let { from, to } of mounted.overlay) {\n                if ((side > 0 ? from <= rPos : from < rPos) &&\n                    (side < 0 ? to >= rPos : to > rPos))\n                    return new TreeNode(mounted.tree, mounted.overlay[0].from + this.from, -1, this);\n            }\n        }\n        return this.nextChild(0, 1, pos, side, mode);\n    }\n    nextSignificantParent() {\n        let val = this;\n        while (val.type.isAnonymous && val._parent)\n            val = val._parent;\n        return val;\n    }\n    get parent() {\n        return this._parent ? this._parent.nextSignificantParent() : null;\n    }\n    get nextSibling() {\n        return this._parent && this.index >= 0 ? this._parent.nextChild(this.index + 1, 1, 0, 4 /* Side.DontCare */) : null;\n    }\n    get prevSibling() {\n        return this._parent && this.index >= 0 ? this._parent.nextChild(this.index - 1, -1, 0, 4 /* Side.DontCare */) : null;\n    }\n    get tree() { return this._tree; }\n    toTree() { return this._tree; }\n    /**\n    @internal\n    */\n    toString() { return this._tree.toString(); }\n}\nfunction getChildren(node, type, before, after) {\n    let cur = node.cursor(), result = [];\n    if (!cur.firstChild())\n        return result;\n    if (before != null)\n        while (!cur.type.is(before))\n            if (!cur.nextSibling())\n                return result;\n    for (;;) {\n        if (after != null && cur.type.is(after))\n            return result;\n        if (cur.type.is(type))\n            result.push(cur.node);\n        if (!cur.nextSibling())\n            return after == null ? result : [];\n    }\n}\nfunction matchNodeContext(node, context, i = context.length - 1) {\n    for (let p = node.parent; i >= 0; p = p.parent) {\n        if (!p)\n            return false;\n        if (!p.type.isAnonymous) {\n            if (context[i] && context[i] != p.name)\n                return false;\n            i--;\n        }\n    }\n    return true;\n}\nclass BufferContext {\n    constructor(parent, buffer, index, start) {\n        this.parent = parent;\n        this.buffer = buffer;\n        this.index = index;\n        this.start = start;\n    }\n}\nclass BufferNode extends BaseNode {\n    get name() { return this.type.name; }\n    get from() { return this.context.start + this.context.buffer.buffer[this.index + 1]; }\n    get to() { return this.context.start + this.context.buffer.buffer[this.index + 2]; }\n    constructor(context, _parent, index) {\n        super();\n        this.context = context;\n        this._parent = _parent;\n        this.index = index;\n        this.type = context.buffer.set.types[context.buffer.buffer[index]];\n    }\n    child(dir, pos, side) {\n        let { buffer } = this.context;\n        let index = buffer.findChild(this.index + 4, buffer.buffer[this.index + 3], dir, pos - this.context.start, side);\n        return index < 0 ? null : new BufferNode(this.context, this, index);\n    }\n    get firstChild() { return this.child(1, 0, 4 /* Side.DontCare */); }\n    get lastChild() { return this.child(-1, 0, 4 /* Side.DontCare */); }\n    childAfter(pos) { return this.child(1, pos, 2 /* Side.After */); }\n    childBefore(pos) { return this.child(-1, pos, -2 /* Side.Before */); }\n    enter(pos, side, mode = 0) {\n        if (mode & IterMode.ExcludeBuffers)\n            return null;\n        let { buffer } = this.context;\n        let index = buffer.findChild(this.index + 4, buffer.buffer[this.index + 3], side > 0 ? 1 : -1, pos - this.context.start, side);\n        return index < 0 ? null : new BufferNode(this.context, this, index);\n    }\n    get parent() {\n        return this._parent || this.context.parent.nextSignificantParent();\n    }\n    externalSibling(dir) {\n        return this._parent ? null : this.context.parent.nextChild(this.context.index + dir, dir, 0, 4 /* Side.DontCare */);\n    }\n    get nextSibling() {\n        let { buffer } = this.context;\n        let after = buffer.buffer[this.index + 3];\n        if (after < (this._parent ? buffer.buffer[this._parent.index + 3] : buffer.buffer.length))\n            return new BufferNode(this.context, this._parent, after);\n        return this.externalSibling(1);\n    }\n    get prevSibling() {\n        let { buffer } = this.context;\n        let parentStart = this._parent ? this._parent.index + 4 : 0;\n        if (this.index == parentStart)\n            return this.externalSibling(-1);\n        return new BufferNode(this.context, this._parent, buffer.findChild(parentStart, this.index, -1, 0, 4 /* Side.DontCare */));\n    }\n    get tree() { return null; }\n    toTree() {\n        let children = [], positions = [];\n        let { buffer } = this.context;\n        let startI = this.index + 4, endI = buffer.buffer[this.index + 3];\n        if (endI > startI) {\n            let from = buffer.buffer[this.index + 1];\n            children.push(buffer.slice(startI, endI, from));\n            positions.push(0);\n        }\n        return new Tree(this.type, children, positions, this.to - this.from);\n    }\n    /**\n    @internal\n    */\n    toString() { return this.context.buffer.childString(this.index); }\n}\nfunction iterStack(heads) {\n    if (!heads.length)\n        return null;\n    let pick = 0, picked = heads[0];\n    for (let i = 1; i < heads.length; i++) {\n        let node = heads[i];\n        if (node.from > picked.from || node.to < picked.to) {\n            picked = node;\n            pick = i;\n        }\n    }\n    let next = picked instanceof TreeNode && picked.index < 0 ? null : picked.parent;\n    let newHeads = heads.slice();\n    if (next)\n        newHeads[pick] = next;\n    else\n        newHeads.splice(pick, 1);\n    return new StackIterator(newHeads, picked);\n}\nclass StackIterator {\n    constructor(heads, node) {\n        this.heads = heads;\n        this.node = node;\n    }\n    get next() { return iterStack(this.heads); }\n}\nfunction stackIterator(tree, pos, side) {\n    let inner = tree.resolveInner(pos, side), layers = null;\n    for (let scan = inner instanceof TreeNode ? inner : inner.context.parent; scan; scan = scan.parent) {\n        if (scan.index < 0) { // This is an overlay root\n            let parent = scan.parent;\n            (layers || (layers = [inner])).push(parent.resolve(pos, side));\n            scan = parent;\n        }\n        else {\n            let mount = MountedTree.get(scan.tree);\n            // Relevant overlay branching off\n            if (mount && mount.overlay && mount.overlay[0].from <= pos && mount.overlay[mount.overlay.length - 1].to >= pos) {\n                let root = new TreeNode(mount.tree, mount.overlay[0].from + scan.from, -1, scan);\n                (layers || (layers = [inner])).push(resolveNode(root, pos, side, false));\n            }\n        }\n    }\n    return layers ? iterStack(layers) : inner;\n}\n/**\nA tree cursor object focuses on a given node in a syntax tree, and\nallows you to move to adjacent nodes.\n*/\nclass TreeCursor {\n    /**\n    Shorthand for `.type.name`.\n    */\n    get name() { return this.type.name; }\n    /**\n    @internal\n    */\n    constructor(node, \n    /**\n    @internal\n    */\n    mode = 0) {\n        this.mode = mode;\n        /**\n        @internal\n        */\n        this.buffer = null;\n        this.stack = [];\n        /**\n        @internal\n        */\n        this.index = 0;\n        this.bufferNode = null;\n        if (node instanceof TreeNode) {\n            this.yieldNode(node);\n        }\n        else {\n            this._tree = node.context.parent;\n            this.buffer = node.context;\n            for (let n = node._parent; n; n = n._parent)\n                this.stack.unshift(n.index);\n            this.bufferNode = node;\n            this.yieldBuf(node.index);\n        }\n    }\n    yieldNode(node) {\n        if (!node)\n            return false;\n        this._tree = node;\n        this.type = node.type;\n        this.from = node.from;\n        this.to = node.to;\n        return true;\n    }\n    yieldBuf(index, type) {\n        this.index = index;\n        let { start, buffer } = this.buffer;\n        this.type = type || buffer.set.types[buffer.buffer[index]];\n        this.from = start + buffer.buffer[index + 1];\n        this.to = start + buffer.buffer[index + 2];\n        return true;\n    }\n    /**\n    @internal\n    */\n    yield(node) {\n        if (!node)\n            return false;\n        if (node instanceof TreeNode) {\n            this.buffer = null;\n            return this.yieldNode(node);\n        }\n        this.buffer = node.context;\n        return this.yieldBuf(node.index, node.type);\n    }\n    /**\n    @internal\n    */\n    toString() {\n        return this.buffer ? this.buffer.buffer.childString(this.index) : this._tree.toString();\n    }\n    /**\n    @internal\n    */\n    enterChild(dir, pos, side) {\n        if (!this.buffer)\n            return this.yield(this._tree.nextChild(dir < 0 ? this._tree._tree.children.length - 1 : 0, dir, pos, side, this.mode));\n        let { buffer } = this.buffer;\n        let index = buffer.findChild(this.index + 4, buffer.buffer[this.index + 3], dir, pos - this.buffer.start, side);\n        if (index < 0)\n            return false;\n        this.stack.push(this.index);\n        return this.yieldBuf(index);\n    }\n    /**\n    Move the cursor to this node's first child. When this returns\n    false, the node has no child, and the cursor has not been moved.\n    */\n    firstChild() { return this.enterChild(1, 0, 4 /* Side.DontCare */); }\n    /**\n    Move the cursor to this node's last child.\n    */\n    lastChild() { return this.enterChild(-1, 0, 4 /* Side.DontCare */); }\n    /**\n    Move the cursor to the first child that ends after `pos`.\n    */\n    childAfter(pos) { return this.enterChild(1, pos, 2 /* Side.After */); }\n    /**\n    Move to the last child that starts before `pos`.\n    */\n    childBefore(pos) { return this.enterChild(-1, pos, -2 /* Side.Before */); }\n    /**\n    Move the cursor to the child around `pos`. If side is -1 the\n    child may end at that position, when 1 it may start there. This\n    will also enter [overlaid](#common.MountedTree.overlay)\n    [mounted](#common.NodeProp^mounted) trees unless `overlays` is\n    set to false.\n    */\n    enter(pos, side, mode = this.mode) {\n        if (!this.buffer)\n            return this.yield(this._tree.enter(pos, side, mode));\n        return mode & IterMode.ExcludeBuffers ? false : this.enterChild(1, pos, side);\n    }\n    /**\n    Move to the node's parent node, if this isn't the top node.\n    */\n    parent() {\n        if (!this.buffer)\n            return this.yieldNode((this.mode & IterMode.IncludeAnonymous) ? this._tree._parent : this._tree.parent);\n        if (this.stack.length)\n            return this.yieldBuf(this.stack.pop());\n        let parent = (this.mode & IterMode.IncludeAnonymous) ? this.buffer.parent : this.buffer.parent.nextSignificantParent();\n        this.buffer = null;\n        return this.yieldNode(parent);\n    }\n    /**\n    @internal\n    */\n    sibling(dir) {\n        if (!this.buffer)\n            return !this._tree._parent ? false\n                : this.yield(this._tree.index < 0 ? null\n                    : this._tree._parent.nextChild(this._tree.index + dir, dir, 0, 4 /* Side.DontCare */, this.mode));\n        let { buffer } = this.buffer, d = this.stack.length - 1;\n        if (dir < 0) {\n            let parentStart = d < 0 ? 0 : this.stack[d] + 4;\n            if (this.index != parentStart)\n                return this.yieldBuf(buffer.findChild(parentStart, this.index, -1, 0, 4 /* Side.DontCare */));\n        }\n        else {\n            let after = buffer.buffer[this.index + 3];\n            if (after < (d < 0 ? buffer.buffer.length : buffer.buffer[this.stack[d] + 3]))\n                return this.yieldBuf(after);\n        }\n        return d < 0 ? this.yield(this.buffer.parent.nextChild(this.buffer.index + dir, dir, 0, 4 /* Side.DontCare */, this.mode)) : false;\n    }\n    /**\n    Move to this node's next sibling, if any.\n    */\n    nextSibling() { return this.sibling(1); }\n    /**\n    Move to this node's previous sibling, if any.\n    */\n    prevSibling() { return this.sibling(-1); }\n    atLastNode(dir) {\n        let index, parent, { buffer } = this;\n        if (buffer) {\n            if (dir > 0) {\n                if (this.index < buffer.buffer.buffer.length)\n                    return false;\n            }\n            else {\n                for (let i = 0; i < this.index; i++)\n                    if (buffer.buffer.buffer[i + 3] < this.index)\n                        return false;\n            }\n            ({ index, parent } = buffer);\n        }\n        else {\n            ({ index, _parent: parent } = this._tree);\n        }\n        for (; parent; { index, _parent: parent } = parent) {\n            if (index > -1)\n                for (let i = index + dir, e = dir < 0 ? -1 : parent._tree.children.length; i != e; i += dir) {\n                    let child = parent._tree.children[i];\n                    if ((this.mode & IterMode.IncludeAnonymous) ||\n                        child instanceof TreeBuffer ||\n                        !child.type.isAnonymous ||\n                        hasChild(child))\n                        return false;\n                }\n        }\n        return true;\n    }\n    move(dir, enter) {\n        if (enter && this.enterChild(dir, 0, 4 /* Side.DontCare */))\n            return true;\n        for (;;) {\n            if (this.sibling(dir))\n                return true;\n            if (this.atLastNode(dir) || !this.parent())\n                return false;\n        }\n    }\n    /**\n    Move to the next node in a\n    [pre-order](https://en.wikipedia.org/wiki/Tree_traversal#Pre-order,_NLR)\n    traversal, going from a node to its first child or, if the\n    current node is empty or `enter` is false, its next sibling or\n    the next sibling of the first parent node that has one.\n    */\n    next(enter = true) { return this.move(1, enter); }\n    /**\n    Move to the next node in a last-to-first pre-order traveral. A\n    node is followed by its last child or, if it has none, its\n    previous sibling or the previous sibling of the first parent\n    node that has one.\n    */\n    prev(enter = true) { return this.move(-1, enter); }\n    /**\n    Move the cursor to the innermost node that covers `pos`. If\n    `side` is -1, it will enter nodes that end at `pos`. If it is 1,\n    it will enter nodes that start at `pos`.\n    */\n    moveTo(pos, side = 0) {\n        // Move up to a node that actually holds the position, if possible\n        while (this.from == this.to ||\n            (side < 1 ? this.from >= pos : this.from > pos) ||\n            (side > -1 ? this.to <= pos : this.to < pos))\n            if (!this.parent())\n                break;\n        // Then scan down into child nodes as far as possible\n        while (this.enterChild(1, pos, side)) { }\n        return this;\n    }\n    /**\n    Get a [syntax node](#common.SyntaxNode) at the cursor's current\n    position.\n    */\n    get node() {\n        if (!this.buffer)\n            return this._tree;\n        let cache = this.bufferNode, result = null, depth = 0;\n        if (cache && cache.context == this.buffer) {\n            scan: for (let index = this.index, d = this.stack.length; d >= 0;) {\n                for (let c = cache; c; c = c._parent)\n                    if (c.index == index) {\n                        if (index == this.index)\n                            return c;\n                        result = c;\n                        depth = d + 1;\n                        break scan;\n                    }\n                index = this.stack[--d];\n            }\n        }\n        for (let i = depth; i < this.stack.length; i++)\n            result = new BufferNode(this.buffer, result, this.stack[i]);\n        return this.bufferNode = new BufferNode(this.buffer, result, this.index);\n    }\n    /**\n    Get the [tree](#common.Tree) that represents the current node, if\n    any. Will return null when the node is in a [tree\n    buffer](#common.TreeBuffer).\n    */\n    get tree() {\n        return this.buffer ? null : this._tree._tree;\n    }\n    /**\n    Iterate over the current node and all its descendants, calling\n    `enter` when entering a node and `leave`, if given, when leaving\n    one. When `enter` returns `false`, any children of that node are\n    skipped, and `leave` isn't called for it.\n    */\n    iterate(enter, leave) {\n        for (let depth = 0;;) {\n            let mustLeave = false;\n            if (this.type.isAnonymous || enter(this) !== false) {\n                if (this.firstChild()) {\n                    depth++;\n                    continue;\n                }\n                if (!this.type.isAnonymous)\n                    mustLeave = true;\n            }\n            for (;;) {\n                if (mustLeave && leave)\n                    leave(this);\n                mustLeave = this.type.isAnonymous;\n                if (this.nextSibling())\n                    break;\n                if (!depth)\n                    return;\n                this.parent();\n                depth--;\n                mustLeave = true;\n            }\n        }\n    }\n    /**\n    Test whether the current node matches a given context\u2014a sequence\n    of direct parent node names. Empty strings in the context array\n    are treated as wildcards.\n    */\n    matchContext(context) {\n        if (!this.buffer)\n            return matchNodeContext(this.node, context);\n        let { buffer } = this.buffer, { types } = buffer.set;\n        for (let i = context.length - 1, d = this.stack.length - 1; i >= 0; d--) {\n            if (d < 0)\n                return matchNodeContext(this.node, context, i);\n            let type = types[buffer.buffer[this.stack[d]]];\n            if (!type.isAnonymous) {\n                if (context[i] && context[i] != type.name)\n                    return false;\n                i--;\n            }\n        }\n        return true;\n    }\n}\nfunction hasChild(tree) {\n    return tree.children.some(ch => ch instanceof TreeBuffer || !ch.type.isAnonymous || hasChild(ch));\n}\nfunction buildTree(data) {\n    var _a;\n    let { buffer, nodeSet, maxBufferLength = DefaultBufferLength, reused = [], minRepeatType = nodeSet.types.length } = data;\n    let cursor = Array.isArray(buffer) ? new FlatBufferCursor(buffer, buffer.length) : buffer;\n    let types = nodeSet.types;\n    let contextHash = 0, lookAhead = 0;\n    function takeNode(parentStart, minPos, children, positions, inRepeat, depth) {\n        let { id, start, end, size } = cursor;\n        let lookAheadAtStart = lookAhead;\n        while (size < 0) {\n            cursor.next();\n            if (size == -1 /* SpecialRecord.Reuse */) {\n                let node = reused[id];\n                children.push(node);\n                positions.push(start - parentStart);\n                return;\n            }\n            else if (size == -3 /* SpecialRecord.ContextChange */) { // Context change\n                contextHash = id;\n                return;\n            }\n            else if (size == -4 /* SpecialRecord.LookAhead */) {\n                lookAhead = id;\n                return;\n            }\n            else {\n                throw new RangeError(`Unrecognized record size: ${size}`);\n            }\n        }\n        let type = types[id], node, buffer;\n        let startPos = start - parentStart;\n        if (end - start <= maxBufferLength && (buffer = findBufferSize(cursor.pos - minPos, inRepeat))) {\n            // Small enough for a buffer, and no reused nodes inside\n            let data = new Uint16Array(buffer.size - buffer.skip);\n            let endPos = cursor.pos - buffer.size, index = data.length;\n            while (cursor.pos > endPos)\n                index = copyToBuffer(buffer.start, data, index);\n            node = new TreeBuffer(data, end - buffer.start, nodeSet);\n            startPos = buffer.start - parentStart;\n        }\n        else { // Make it a node\n            let endPos = cursor.pos - size;\n            cursor.next();\n            let localChildren = [], localPositions = [];\n            let localInRepeat = id >= minRepeatType ? id : -1;\n            let lastGroup = 0, lastEnd = end;\n            while (cursor.pos > endPos) {\n                if (localInRepeat >= 0 && cursor.id == localInRepeat && cursor.size >= 0) {\n                    if (cursor.end <= lastEnd - maxBufferLength) {\n                        makeRepeatLeaf(localChildren, localPositions, start, lastGroup, cursor.end, lastEnd, localInRepeat, lookAheadAtStart);\n                        lastGroup = localChildren.length;\n                        lastEnd = cursor.end;\n                    }\n                    cursor.next();\n                }\n                else if (depth > 2500 /* CutOff.Depth */) {\n                    takeFlatNode(start, endPos, localChildren, localPositions);\n                }\n                else {\n                    takeNode(start, endPos, localChildren, localPositions, localInRepeat, depth + 1);\n                }\n            }\n            if (localInRepeat >= 0 && lastGroup > 0 && lastGroup < localChildren.length)\n                makeRepeatLeaf(localChildren, localPositions, start, lastGroup, start, lastEnd, localInRepeat, lookAheadAtStart);\n            localChildren.reverse();\n            localPositions.reverse();\n            if (localInRepeat > -1 && lastGroup > 0) {\n                let make = makeBalanced(type);\n                node = balanceRange(type, localChildren, localPositions, 0, localChildren.length, 0, end - start, make, make);\n            }\n            else {\n                node = makeTree(type, localChildren, localPositions, end - start, lookAheadAtStart - end);\n            }\n        }\n        children.push(node);\n        positions.push(startPos);\n    }\n    function takeFlatNode(parentStart, minPos, children, positions) {\n        let nodes = []; // Temporary, inverted array of leaf nodes found, with absolute positions\n        let nodeCount = 0, stopAt = -1;\n        while (cursor.pos > minPos) {\n            let { id, start, end, size } = cursor;\n            if (size > 4) { // Not a leaf\n                cursor.next();\n            }\n            else if (stopAt > -1 && start < stopAt) {\n                break;\n            }\n            else {\n                if (stopAt < 0)\n                    stopAt = end - maxBufferLength;\n                nodes.push(id, start, end);\n                nodeCount++;\n                cursor.next();\n            }\n        }\n        if (nodeCount) {\n            let buffer = new Uint16Array(nodeCount * 4);\n            let start = nodes[nodes.length - 2];\n            for (let i = nodes.length - 3, j = 0; i >= 0; i -= 3) {\n                buffer[j++] = nodes[i];\n                buffer[j++] = nodes[i + 1] - start;\n                buffer[j++] = nodes[i + 2] - start;\n                buffer[j++] = j;\n            }\n            children.push(new TreeBuffer(buffer, nodes[2] - start, nodeSet));\n            positions.push(start - parentStart);\n        }\n    }\n    function makeBalanced(type) {\n        return (children, positions, length) => {\n            let lookAhead = 0, lastI = children.length - 1, last, lookAheadProp;\n            if (lastI >= 0 && (last = children[lastI]) instanceof Tree) {\n                if (!lastI && last.type == type && last.length == length)\n                    return last;\n                if (lookAheadProp = last.prop(NodeProp.lookAhead))\n                    lookAhead = positions[lastI] + last.length + lookAheadProp;\n            }\n            return makeTree(type, children, positions, length, lookAhead);\n        };\n    }\n    function makeRepeatLeaf(children, positions, base, i, from, to, type, lookAhead) {\n        let localChildren = [], localPositions = [];\n        while (children.length > i) {\n            localChildren.push(children.pop());\n            localPositions.push(positions.pop() + base - from);\n        }\n        children.push(makeTree(nodeSet.types[type], localChildren, localPositions, to - from, lookAhead - to));\n        positions.push(from - base);\n    }\n    function makeTree(type, children, positions, length, lookAhead = 0, props) {\n        if (contextHash) {\n            let pair = [NodeProp.contextHash, contextHash];\n            props = props ? [pair].concat(props) : [pair];\n        }\n        if (lookAhead > 25) {\n            let pair = [NodeProp.lookAhead, lookAhead];\n            props = props ? [pair].concat(props) : [pair];\n        }\n        return new Tree(type, children, positions, length, props);\n    }\n    function findBufferSize(maxSize, inRepeat) {\n        // Scan through the buffer to find previous siblings that fit\n        // together in a TreeBuffer, and don't contain any reused nodes\n        // (which can't be stored in a buffer).\n        // If `inRepeat` is > -1, ignore node boundaries of that type for\n        // nesting, but make sure the end falls either at the start\n        // (`maxSize`) or before such a node.\n        let fork = cursor.fork();\n        let size = 0, start = 0, skip = 0, minStart = fork.end - maxBufferLength;\n        let result = { size: 0, start: 0, skip: 0 };\n        scan: for (let minPos = fork.pos - maxSize; fork.pos > minPos;) {\n            let nodeSize = fork.size;\n            // Pretend nested repeat nodes of the same type don't exist\n            if (fork.id == inRepeat && nodeSize >= 0) {\n                // Except that we store the current state as a valid return\n                // value.\n                result.size = size;\n                result.start = start;\n                result.skip = skip;\n                skip += 4;\n                size += 4;\n                fork.next();\n                continue;\n            }\n            let startPos = fork.pos - nodeSize;\n            if (nodeSize < 0 || startPos < minPos || fork.start < minStart)\n                break;\n            let localSkipped = fork.id >= minRepeatType ? 4 : 0;\n            let nodeStart = fork.start;\n            fork.next();\n            while (fork.pos > startPos) {\n                if (fork.size < 0) {\n                    if (fork.size == -3 /* SpecialRecord.ContextChange */)\n                        localSkipped += 4;\n                    else\n                        break scan;\n                }\n                else if (fork.id >= minRepeatType) {\n                    localSkipped += 4;\n                }\n                fork.next();\n            }\n            start = nodeStart;\n            size += nodeSize;\n            skip += localSkipped;\n        }\n        if (inRepeat < 0 || size == maxSize) {\n            result.size = size;\n            result.start = start;\n            result.skip = skip;\n        }\n        return result.size > 4 ? result : undefined;\n    }\n    function copyToBuffer(bufferStart, buffer, index) {\n        let { id, start, end, size } = cursor;\n        cursor.next();\n        if (size >= 0 && id < minRepeatType) {\n            let startIndex = index;\n            if (size > 4) {\n                let endPos = cursor.pos - (size - 4);\n                while (cursor.pos > endPos)\n                    index = copyToBuffer(bufferStart, buffer, index);\n            }\n            buffer[--index] = startIndex;\n            buffer[--index] = end - bufferStart;\n            buffer[--index] = start - bufferStart;\n            buffer[--index] = id;\n        }\n        else if (size == -3 /* SpecialRecord.ContextChange */) {\n            contextHash = id;\n        }\n        else if (size == -4 /* SpecialRecord.LookAhead */) {\n            lookAhead = id;\n        }\n        return index;\n    }\n    let children = [], positions = [];\n    while (cursor.pos > 0)\n        takeNode(data.start || 0, data.bufferStart || 0, children, positions, -1, 0);\n    let length = (_a = data.length) !== null && _a !== void 0 ? _a : (children.length ? positions[0] + children[0].length : 0);\n    return new Tree(types[data.topID], children.reverse(), positions.reverse(), length);\n}\nconst nodeSizeCache = new WeakMap;\nfunction nodeSize(balanceType, node) {\n    if (!balanceType.isAnonymous || node instanceof TreeBuffer || node.type != balanceType)\n        return 1;\n    let size = nodeSizeCache.get(node);\n    if (size == null) {\n        size = 1;\n        for (let child of node.children) {\n            if (child.type != balanceType || !(child instanceof Tree)) {\n                size = 1;\n                break;\n            }\n            size += nodeSize(balanceType, child);\n        }\n        nodeSizeCache.set(node, size);\n    }\n    return size;\n}\nfunction balanceRange(\n// The type the balanced tree's inner nodes.\nbalanceType, \n// The direct children and their positions\nchildren, positions, \n// The index range in children/positions to use\nfrom, to, \n// The start position of the nodes, relative to their parent.\nstart, \n// Length of the outer node\nlength, \n// Function to build the top node of the balanced tree\nmkTop, \n// Function to build internal nodes for the balanced tree\nmkTree) {\n    let total = 0;\n    for (let i = from; i < to; i++)\n        total += nodeSize(balanceType, children[i]);\n    let maxChild = Math.ceil((total * 1.5) / 8 /* Balance.BranchFactor */);\n    let localChildren = [], localPositions = [];\n    function divide(children, positions, from, to, offset) {\n        for (let i = from; i < to;) {\n            let groupFrom = i, groupStart = positions[i], groupSize = nodeSize(balanceType, children[i]);\n            i++;\n            for (; i < to; i++) {\n                let nextSize = nodeSize(balanceType, children[i]);\n                if (groupSize + nextSize >= maxChild)\n                    break;\n                groupSize += nextSize;\n            }\n            if (i == groupFrom + 1) {\n                if (groupSize > maxChild) {\n                    let only = children[groupFrom]; // Only trees can have a size > 1\n                    divide(only.children, only.positions, 0, only.children.length, positions[groupFrom] + offset);\n                    continue;\n                }\n                localChildren.push(children[groupFrom]);\n            }\n            else {\n                let length = positions[i - 1] + children[i - 1].length - groupStart;\n                localChildren.push(balanceRange(balanceType, children, positions, groupFrom, i, groupStart, length, null, mkTree));\n            }\n            localPositions.push(groupStart + offset - start);\n        }\n    }\n    divide(children, positions, from, to, 0);\n    return (mkTop || mkTree)(localChildren, localPositions, length);\n}\n/**\nProvides a way to associate values with pieces of trees. As long\nas that part of the tree is reused, the associated values can be\nretrieved from an updated tree.\n*/\nclass NodeWeakMap {\n    constructor() {\n        this.map = new WeakMap();\n    }\n    setBuffer(buffer, index, value) {\n        let inner = this.map.get(buffer);\n        if (!inner)\n            this.map.set(buffer, inner = new Map);\n        inner.set(index, value);\n    }\n    getBuffer(buffer, index) {\n        let inner = this.map.get(buffer);\n        return inner && inner.get(index);\n    }\n    /**\n    Set the value for this syntax node.\n    */\n    set(node, value) {\n        if (node instanceof BufferNode)\n            this.setBuffer(node.context.buffer, node.index, value);\n        else if (node instanceof TreeNode)\n            this.map.set(node.tree, value);\n    }\n    /**\n    Retrieve value for this syntax node, if it exists in the map.\n    */\n    get(node) {\n        return node instanceof BufferNode ? this.getBuffer(node.context.buffer, node.index)\n            : node instanceof TreeNode ? this.map.get(node.tree) : undefined;\n    }\n    /**\n    Set the value for the node that a cursor currently points to.\n    */\n    cursorSet(cursor, value) {\n        if (cursor.buffer)\n            this.setBuffer(cursor.buffer.buffer, cursor.index, value);\n        else\n            this.map.set(cursor.tree, value);\n    }\n    /**\n    Retrieve the value for the node that a cursor currently points\n    to.\n    */\n    cursorGet(cursor) {\n        return cursor.buffer ? this.getBuffer(cursor.buffer.buffer, cursor.index) : this.map.get(cursor.tree);\n    }\n}\n\n/**\nTree fragments are used during [incremental\nparsing](#common.Parser.startParse) to track parts of old trees\nthat can be reused in a new parse. An array of fragments is used\nto track regions of an old tree whose nodes might be reused in new\nparses. Use the static\n[`applyChanges`](#common.TreeFragment^applyChanges) method to\nupdate fragments for document changes.\n*/\nclass TreeFragment {\n    /**\n    Construct a tree fragment. You'll usually want to use\n    [`addTree`](#common.TreeFragment^addTree) and\n    [`applyChanges`](#common.TreeFragment^applyChanges) instead of\n    calling this directly.\n    */\n    constructor(\n    /**\n    The start of the unchanged range pointed to by this fragment.\n    This refers to an offset in the _updated_ document (as opposed\n    to the original tree).\n    */\n    from, \n    /**\n    The end of the unchanged range.\n    */\n    to, \n    /**\n    The tree that this fragment is based on.\n    */\n    tree, \n    /**\n    The offset between the fragment's tree and the document that\n    this fragment can be used against. Add this when going from\n    document to tree positions, subtract it to go from tree to\n    document positions.\n    */\n    offset, openStart = false, openEnd = false) {\n        this.from = from;\n        this.to = to;\n        this.tree = tree;\n        this.offset = offset;\n        this.open = (openStart ? 1 /* Open.Start */ : 0) | (openEnd ? 2 /* Open.End */ : 0);\n    }\n    /**\n    Whether the start of the fragment represents the start of a\n    parse, or the end of a change. (In the second case, it may not\n    be safe to reuse some nodes at the start, depending on the\n    parsing algorithm.)\n    */\n    get openStart() { return (this.open & 1 /* Open.Start */) > 0; }\n    /**\n    Whether the end of the fragment represents the end of a\n    full-document parse, or the start of a change.\n    */\n    get openEnd() { return (this.open & 2 /* Open.End */) > 0; }\n    /**\n    Create a set of fragments from a freshly parsed tree, or update\n    an existing set of fragments by replacing the ones that overlap\n    with a tree with content from the new tree. When `partial` is\n    true, the parse is treated as incomplete, and the resulting\n    fragment has [`openEnd`](#common.TreeFragment.openEnd) set to\n    true.\n    */\n    static addTree(tree, fragments = [], partial = false) {\n        let result = [new TreeFragment(0, tree.length, tree, 0, false, partial)];\n        for (let f of fragments)\n            if (f.to > tree.length)\n                result.push(f);\n        return result;\n    }\n    /**\n    Apply a set of edits to an array of fragments, removing or\n    splitting fragments as necessary to remove edited ranges, and\n    adjusting offsets for fragments that moved.\n    */\n    static applyChanges(fragments, changes, minGap = 128) {\n        if (!changes.length)\n            return fragments;\n        let result = [];\n        let fI = 1, nextF = fragments.length ? fragments[0] : null;\n        for (let cI = 0, pos = 0, off = 0;; cI++) {\n            let nextC = cI < changes.length ? changes[cI] : null;\n            let nextPos = nextC ? nextC.fromA : 1e9;\n            if (nextPos - pos >= minGap)\n                while (nextF && nextF.from < nextPos) {\n                    let cut = nextF;\n                    if (pos >= cut.from || nextPos <= cut.to || off) {\n                        let fFrom = Math.max(cut.from, pos) - off, fTo = Math.min(cut.to, nextPos) - off;\n                        cut = fFrom >= fTo ? null : new TreeFragment(fFrom, fTo, cut.tree, cut.offset + off, cI > 0, !!nextC);\n                    }\n                    if (cut)\n                        result.push(cut);\n                    if (nextF.to > nextPos)\n                        break;\n                    nextF = fI < fragments.length ? fragments[fI++] : null;\n                }\n            if (!nextC)\n                break;\n            pos = nextC.toA;\n            off = nextC.toA - nextC.toB;\n        }\n        return result;\n    }\n}\n/**\nA superclass that parsers should extend.\n*/\nclass Parser {\n    /**\n    Start a parse, returning a [partial parse](#common.PartialParse)\n    object. [`fragments`](#common.TreeFragment) can be passed in to\n    make the parse incremental.\n    \n    By default, the entire input is parsed. You can pass `ranges`,\n    which should be a sorted array of non-empty, non-overlapping\n    ranges, to parse only those ranges. The tree returned in that\n    case will start at `ranges[0].from`.\n    */\n    startParse(input, fragments, ranges) {\n        if (typeof input == \"string\")\n            input = new StringInput(input);\n        ranges = !ranges ? [new Range(0, input.length)] : ranges.length ? ranges.map(r => new Range(r.from, r.to)) : [new Range(0, 0)];\n        return this.createParse(input, fragments || [], ranges);\n    }\n    /**\n    Run a full parse, returning the resulting tree.\n    */\n    parse(input, fragments, ranges) {\n        let parse = this.startParse(input, fragments, ranges);\n        for (;;) {\n            let done = parse.advance();\n            if (done)\n                return done;\n        }\n    }\n}\nclass StringInput {\n    constructor(string) {\n        this.string = string;\n    }\n    get length() { return this.string.length; }\n    chunk(from) { return this.string.slice(from); }\n    get lineChunks() { return false; }\n    read(from, to) { return this.string.slice(from, to); }\n}\n\n/**\nCreate a parse wrapper that, after the inner parse completes,\nscans its tree for mixed language regions with the `nest`\nfunction, runs the resulting [inner parses](#common.NestedParse),\nand then [mounts](#common.NodeProp^mounted) their results onto the\ntree.\n*/\nfunction parseMixed(nest) {\n    return (parse, input, fragments, ranges) => new MixedParse(parse, nest, input, fragments, ranges);\n}\nclass InnerParse {\n    constructor(parser, parse, overlay, target, from) {\n        this.parser = parser;\n        this.parse = parse;\n        this.overlay = overlay;\n        this.target = target;\n        this.from = from;\n    }\n}\nfunction checkRanges(ranges) {\n    if (!ranges.length || ranges.some(r => r.from >= r.to))\n        throw new RangeError(\"Invalid inner parse ranges given: \" + JSON.stringify(ranges));\n}\nclass ActiveOverlay {\n    constructor(parser, predicate, mounts, index, start, target, prev) {\n        this.parser = parser;\n        this.predicate = predicate;\n        this.mounts = mounts;\n        this.index = index;\n        this.start = start;\n        this.target = target;\n        this.prev = prev;\n        this.depth = 0;\n        this.ranges = [];\n    }\n}\nconst stoppedInner = new NodeProp({ perNode: true });\nclass MixedParse {\n    constructor(base, nest, input, fragments, ranges) {\n        this.nest = nest;\n        this.input = input;\n        this.fragments = fragments;\n        this.ranges = ranges;\n        this.inner = [];\n        this.innerDone = 0;\n        this.baseTree = null;\n        this.stoppedAt = null;\n        this.baseParse = base;\n    }\n    advance() {\n        if (this.baseParse) {\n            let done = this.baseParse.advance();\n            if (!done)\n                return null;\n            this.baseParse = null;\n            this.baseTree = done;\n            this.startInner();\n            if (this.stoppedAt != null)\n                for (let inner of this.inner)\n                    inner.parse.stopAt(this.stoppedAt);\n        }\n        if (this.innerDone == this.inner.length) {\n            let result = this.baseTree;\n            if (this.stoppedAt != null)\n                result = new Tree(result.type, result.children, result.positions, result.length, result.propValues.concat([[stoppedInner, this.stoppedAt]]));\n            return result;\n        }\n        let inner = this.inner[this.innerDone], done = inner.parse.advance();\n        if (done) {\n            this.innerDone++;\n            // This is a somewhat dodgy but super helpful hack where we\n            // patch up nodes created by the inner parse (and thus\n            // presumably not aliased anywhere else) to hold the information\n            // about the inner parse.\n            let props = Object.assign(Object.create(null), inner.target.props);\n            props[NodeProp.mounted.id] = new MountedTree(done, inner.overlay, inner.parser);\n            inner.target.props = props;\n        }\n        return null;\n    }\n    get parsedPos() {\n        if (this.baseParse)\n            return 0;\n        let pos = this.input.length;\n        for (let i = this.innerDone; i < this.inner.length; i++) {\n            if (this.inner[i].from < pos)\n                pos = Math.min(pos, this.inner[i].parse.parsedPos);\n        }\n        return pos;\n    }\n    stopAt(pos) {\n        this.stoppedAt = pos;\n        if (this.baseParse)\n            this.baseParse.stopAt(pos);\n        else\n            for (let i = this.innerDone; i < this.inner.length; i++)\n                this.inner[i].parse.stopAt(pos);\n    }\n    startInner() {\n        let fragmentCursor = new FragmentCursor(this.fragments);\n        let overlay = null;\n        let covered = null;\n        let cursor = new TreeCursor(new TreeNode(this.baseTree, this.ranges[0].from, 0, null), IterMode.IncludeAnonymous | IterMode.IgnoreMounts);\n        scan: for (let nest, isCovered;;) {\n            let enter = true, range;\n            if (this.stoppedAt != null && cursor.from >= this.stoppedAt) {\n                enter = false;\n            }\n            else if (fragmentCursor.hasNode(cursor)) {\n                if (overlay) {\n                    let match = overlay.mounts.find(m => m.frag.from <= cursor.from && m.frag.to >= cursor.to && m.mount.overlay);\n                    if (match)\n                        for (let r of match.mount.overlay) {\n                            let from = r.from + match.pos, to = r.to + match.pos;\n                            if (from >= cursor.from && to <= cursor.to && !overlay.ranges.some(r => r.from < to && r.to > from))\n                                overlay.ranges.push({ from, to });\n                        }\n                }\n                enter = false;\n            }\n            else if (covered && (isCovered = checkCover(covered.ranges, cursor.from, cursor.to))) {\n                enter = isCovered != 2 /* Cover.Full */;\n            }\n            else if (!cursor.type.isAnonymous && (nest = this.nest(cursor, this.input)) &&\n                (cursor.from < cursor.to || !nest.overlay)) {\n                if (!cursor.tree)\n                    materialize(cursor);\n                let oldMounts = fragmentCursor.findMounts(cursor.from, nest.parser);\n                if (typeof nest.overlay == \"function\") {\n                    overlay = new ActiveOverlay(nest.parser, nest.overlay, oldMounts, this.inner.length, cursor.from, cursor.tree, overlay);\n                }\n                else {\n                    let ranges = punchRanges(this.ranges, nest.overlay ||\n                        (cursor.from < cursor.to ? [new Range(cursor.from, cursor.to)] : []));\n                    if (ranges.length)\n                        checkRanges(ranges);\n                    if (ranges.length || !nest.overlay)\n                        this.inner.push(new InnerParse(nest.parser, ranges.length ? nest.parser.startParse(this.input, enterFragments(oldMounts, ranges), ranges)\n                            : nest.parser.startParse(\"\"), nest.overlay ? nest.overlay.map(r => new Range(r.from - cursor.from, r.to - cursor.from)) : null, cursor.tree, ranges.length ? ranges[0].from : cursor.from));\n                    if (!nest.overlay)\n                        enter = false;\n                    else if (ranges.length)\n                        covered = { ranges, depth: 0, prev: covered };\n                }\n            }\n            else if (overlay && (range = overlay.predicate(cursor))) {\n                if (range === true)\n                    range = new Range(cursor.from, cursor.to);\n                if (range.from < range.to)\n                    overlay.ranges.push(range);\n            }\n            if (enter && cursor.firstChild()) {\n                if (overlay)\n                    overlay.depth++;\n                if (covered)\n                    covered.depth++;\n            }\n            else {\n                for (;;) {\n                    if (cursor.nextSibling())\n                        break;\n                    if (!cursor.parent())\n                        break scan;\n                    if (overlay && !--overlay.depth) {\n                        let ranges = punchRanges(this.ranges, overlay.ranges);\n                        if (ranges.length) {\n                            checkRanges(ranges);\n                            this.inner.splice(overlay.index, 0, new InnerParse(overlay.parser, overlay.parser.startParse(this.input, enterFragments(overlay.mounts, ranges), ranges), overlay.ranges.map(r => new Range(r.from - overlay.start, r.to - overlay.start)), overlay.target, ranges[0].from));\n                        }\n                        overlay = overlay.prev;\n                    }\n                    if (covered && !--covered.depth)\n                        covered = covered.prev;\n                }\n            }\n        }\n    }\n}\nfunction checkCover(covered, from, to) {\n    for (let range of covered) {\n        if (range.from >= to)\n            break;\n        if (range.to > from)\n            return range.from <= from && range.to >= to ? 2 /* Cover.Full */ : 1 /* Cover.Partial */;\n    }\n    return 0 /* Cover.None */;\n}\n// Take a piece of buffer and convert it into a stand-alone\n// TreeBuffer.\nfunction sliceBuf(buf, startI, endI, nodes, positions, off) {\n    if (startI < endI) {\n        let from = buf.buffer[startI + 1];\n        nodes.push(buf.slice(startI, endI, from));\n        positions.push(from - off);\n    }\n}\n// This function takes a node that's in a buffer, and converts it, and\n// its parent buffer nodes, into a Tree. This is again acting on the\n// assumption that the trees and buffers have been constructed by the\n// parse that was ran via the mix parser, and thus aren't shared with\n// any other code, making violations of the immutability safe.\nfunction materialize(cursor) {\n    let { node } = cursor, stack = [];\n    // Scan up to the nearest tree\n    do {\n        stack.push(cursor.index);\n        cursor.parent();\n    } while (!cursor.tree);\n    // Find the index of the buffer in that tree\n    let i = 0, base = cursor.tree, off = 0;\n    for (;; i++) {\n        off = base.positions[i] + cursor.from;\n        if (off <= node.from && off + base.children[i].length >= node.to)\n            break;\n    }\n    let buf = base.children[i], b = buf.buffer, newStack = [i];\n    // Split a level in the buffer, putting the nodes before and after\n    // the child that contains `node` into new buffers.\n    function split(startI, endI, type, innerOffset, length, stackPos) {\n        let targetI = stack[stackPos];\n        let children = [], positions = [];\n        sliceBuf(buf, startI, targetI, children, positions, innerOffset);\n        let from = b[targetI + 1], to = b[targetI + 2];\n        newStack.push(children.length);\n        let child = stackPos\n            ? split(targetI + 4, b[targetI + 3], buf.set.types[b[targetI]], from, to - from, stackPos - 1)\n            : node.toTree();\n        children.push(child);\n        positions.push(from - innerOffset);\n        sliceBuf(buf, b[targetI + 3], endI, children, positions, innerOffset);\n        return new Tree(type, children, positions, length);\n    }\n    base.children[i] = split(0, b.length, NodeType.none, 0, buf.length, stack.length - 1);\n    // Move the cursor back to the target node\n    for (let index of newStack) {\n        let tree = cursor.tree.children[index], pos = cursor.tree.positions[index];\n        cursor.yield(new TreeNode(tree, pos + cursor.from, index, cursor._tree));\n    }\n}\nclass StructureCursor {\n    constructor(root, offset) {\n        this.offset = offset;\n        this.done = false;\n        this.cursor = root.cursor(IterMode.IncludeAnonymous | IterMode.IgnoreMounts);\n    }\n    // Move to the first node (in pre-order) that starts at or after `pos`.\n    moveTo(pos) {\n        let { cursor } = this, p = pos - this.offset;\n        while (!this.done && cursor.from < p) {\n            if (cursor.to >= pos && cursor.enter(p, 1, IterMode.IgnoreOverlays | IterMode.ExcludeBuffers)) ;\n            else if (!cursor.next(false))\n                this.done = true;\n        }\n    }\n    hasNode(cursor) {\n        this.moveTo(cursor.from);\n        if (!this.done && this.cursor.from + this.offset == cursor.from && this.cursor.tree) {\n            for (let tree = this.cursor.tree;;) {\n                if (tree == cursor.tree)\n                    return true;\n                if (tree.children.length && tree.positions[0] == 0 && tree.children[0] instanceof Tree)\n                    tree = tree.children[0];\n                else\n                    break;\n            }\n        }\n        return false;\n    }\n}\nclass FragmentCursor {\n    constructor(fragments) {\n        var _a;\n        this.fragments = fragments;\n        this.curTo = 0;\n        this.fragI = 0;\n        if (fragments.length) {\n            let first = this.curFrag = fragments[0];\n            this.curTo = (_a = first.tree.prop(stoppedInner)) !== null && _a !== void 0 ? _a : first.to;\n            this.inner = new StructureCursor(first.tree, -first.offset);\n        }\n        else {\n            this.curFrag = this.inner = null;\n        }\n    }\n    hasNode(node) {\n        while (this.curFrag && node.from >= this.curTo)\n            this.nextFrag();\n        return this.curFrag && this.curFrag.from <= node.from && this.curTo >= node.to && this.inner.hasNode(node);\n    }\n    nextFrag() {\n        var _a;\n        this.fragI++;\n        if (this.fragI == this.fragments.length) {\n            this.curFrag = this.inner = null;\n        }\n        else {\n            let frag = this.curFrag = this.fragments[this.fragI];\n            this.curTo = (_a = frag.tree.prop(stoppedInner)) !== null && _a !== void 0 ? _a : frag.to;\n            this.inner = new StructureCursor(frag.tree, -frag.offset);\n        }\n    }\n    findMounts(pos, parser) {\n        var _a;\n        let result = [];\n        if (this.inner) {\n            this.inner.cursor.moveTo(pos, 1);\n            for (let pos = this.inner.cursor.node; pos; pos = pos.parent) {\n                let mount = (_a = pos.tree) === null || _a === void 0 ? void 0 : _a.prop(NodeProp.mounted);\n                if (mount && mount.parser == parser) {\n                    for (let i = this.fragI; i < this.fragments.length; i++) {\n                        let frag = this.fragments[i];\n                        if (frag.from >= pos.to)\n                            break;\n                        if (frag.tree == this.curFrag.tree)\n                            result.push({\n                                frag,\n                                pos: pos.from - frag.offset,\n                                mount\n                            });\n                    }\n                }\n            }\n        }\n        return result;\n    }\n}\nfunction punchRanges(outer, ranges) {\n    let copy = null, current = ranges;\n    for (let i = 1, j = 0; i < outer.length; i++) {\n        let gapFrom = outer[i - 1].to, gapTo = outer[i].from;\n        for (; j < current.length; j++) {\n            let r = current[j];\n            if (r.from >= gapTo)\n                break;\n            if (r.to <= gapFrom)\n                continue;\n            if (!copy)\n                current = copy = ranges.slice();\n            if (r.from < gapFrom) {\n                copy[j] = new Range(r.from, gapFrom);\n                if (r.to > gapTo)\n                    copy.splice(j + 1, 0, new Range(gapTo, r.to));\n            }\n            else if (r.to > gapTo) {\n                copy[j--] = new Range(gapTo, r.to);\n            }\n            else {\n                copy.splice(j--, 1);\n            }\n        }\n    }\n    return current;\n}\nfunction findCoverChanges(a, b, from, to) {\n    let iA = 0, iB = 0, inA = false, inB = false, pos = -1e9;\n    let result = [];\n    for (;;) {\n        let nextA = iA == a.length ? 1e9 : inA ? a[iA].to : a[iA].from;\n        let nextB = iB == b.length ? 1e9 : inB ? b[iB].to : b[iB].from;\n        if (inA != inB) {\n            let start = Math.max(pos, from), end = Math.min(nextA, nextB, to);\n            if (start < end)\n                result.push(new Range(start, end));\n        }\n        pos = Math.min(nextA, nextB);\n        if (pos == 1e9)\n            break;\n        if (nextA == pos) {\n            if (!inA)\n                inA = true;\n            else {\n                inA = false;\n                iA++;\n            }\n        }\n        if (nextB == pos) {\n            if (!inB)\n                inB = true;\n            else {\n                inB = false;\n                iB++;\n            }\n        }\n    }\n    return result;\n}\n// Given a number of fragments for the outer tree, and a set of ranges\n// to parse, find fragments for inner trees mounted around those\n// ranges, if any.\nfunction enterFragments(mounts, ranges) {\n    let result = [];\n    for (let { pos, mount, frag } of mounts) {\n        let startPos = pos + (mount.overlay ? mount.overlay[0].from : 0), endPos = startPos + mount.tree.length;\n        let from = Math.max(frag.from, startPos), to = Math.min(frag.to, endPos);\n        if (mount.overlay) {\n            let overlay = mount.overlay.map(r => new Range(r.from + pos, r.to + pos));\n            let changes = findCoverChanges(ranges, overlay, from, to);\n            for (let i = 0, pos = from;; i++) {\n                let last = i == changes.length, end = last ? to : changes[i].from;\n                if (end > pos)\n                    result.push(new TreeFragment(pos, end, mount.tree, -startPos, frag.from >= pos || frag.openStart, frag.to <= end || frag.openEnd));\n                if (last)\n                    break;\n                pos = changes[i].to;\n            }\n        }\n        else {\n            result.push(new TreeFragment(from, to, mount.tree, -startPos, frag.from >= startPos || frag.openStart, frag.to <= endPos || frag.openEnd));\n        }\n    }\n    return result;\n}\n\nexport { DefaultBufferLength, IterMode, MountedTree, NodeProp, NodeSet, NodeType, NodeWeakMap, Parser, Tree, TreeBuffer, TreeCursor, TreeFragment, parseMixed };\n", "import { NodeProp } from '@lezer/common';\n\nlet nextTagID = 0;\n/**\nHighlighting tags are markers that denote a highlighting category.\nThey are [associated](#highlight.styleTags) with parts of a syntax\ntree by a language mode, and then mapped to an actual CSS style by\na [highlighter](#highlight.Highlighter).\n\nBecause syntax tree node types and highlight styles have to be\nable to talk the same language, CodeMirror uses a mostly _closed_\n[vocabulary](#highlight.tags) of syntax tags (as opposed to\ntraditional open string-based systems, which make it hard for\nhighlighting themes to cover all the tokens produced by the\nvarious languages).\n\nIt _is_ possible to [define](#highlight.Tag^define) your own\nhighlighting tags for system-internal use (where you control both\nthe language package and the highlighter), but such tags will not\nbe picked up by regular highlighters (though you can derive them\nfrom standard tags to allow highlighters to fall back to those).\n*/\nclass Tag {\n    /**\n    @internal\n    */\n    constructor(\n    /**\n    The set of this tag and all its parent tags, starting with\n    this one itself and sorted in order of decreasing specificity.\n    */\n    set, \n    /**\n    The base unmodified tag that this one is based on, if it's\n    modified @internal\n    */\n    base, \n    /**\n    The modifiers applied to this.base @internal\n    */\n    modified) {\n        this.set = set;\n        this.base = base;\n        this.modified = modified;\n        /**\n        @internal\n        */\n        this.id = nextTagID++;\n    }\n    /**\n    Define a new tag. If `parent` is given, the tag is treated as a\n    sub-tag of that parent, and\n    [highlighters](#highlight.tagHighlighter) that don't mention\n    this tag will try to fall back to the parent tag (or grandparent\n    tag, etc).\n    */\n    static define(parent) {\n        if (parent === null || parent === void 0 ? void 0 : parent.base)\n            throw new Error(\"Can not derive from a modified tag\");\n        let tag = new Tag([], null, []);\n        tag.set.push(tag);\n        if (parent)\n            for (let t of parent.set)\n                tag.set.push(t);\n        return tag;\n    }\n    /**\n    Define a tag _modifier_, which is a function that, given a tag,\n    will return a tag that is a subtag of the original. Applying the\n    same modifier to a twice tag will return the same value (`m1(t1)\n    == m1(t1)`) and applying multiple modifiers will, regardless or\n    order, produce the same tag (`m1(m2(t1)) == m2(m1(t1))`).\n    \n    When multiple modifiers are applied to a given base tag, each\n    smaller set of modifiers is registered as a parent, so that for\n    example `m1(m2(m3(t1)))` is a subtype of `m1(m2(t1))`,\n    `m1(m3(t1)`, and so on.\n    */\n    static defineModifier() {\n        let mod = new Modifier;\n        return (tag) => {\n            if (tag.modified.indexOf(mod) > -1)\n                return tag;\n            return Modifier.get(tag.base || tag, tag.modified.concat(mod).sort((a, b) => a.id - b.id));\n        };\n    }\n}\nlet nextModifierID = 0;\nclass Modifier {\n    constructor() {\n        this.instances = [];\n        this.id = nextModifierID++;\n    }\n    static get(base, mods) {\n        if (!mods.length)\n            return base;\n        let exists = mods[0].instances.find(t => t.base == base && sameArray(mods, t.modified));\n        if (exists)\n            return exists;\n        let set = [], tag = new Tag(set, base, mods);\n        for (let m of mods)\n            m.instances.push(tag);\n        let configs = powerSet(mods);\n        for (let parent of base.set)\n            if (!parent.modified.length)\n                for (let config of configs)\n                    set.push(Modifier.get(parent, config));\n        return tag;\n    }\n}\nfunction sameArray(a, b) {\n    return a.length == b.length && a.every((x, i) => x == b[i]);\n}\nfunction powerSet(array) {\n    let sets = [[]];\n    for (let i = 0; i < array.length; i++) {\n        for (let j = 0, e = sets.length; j < e; j++) {\n            sets.push(sets[j].concat(array[i]));\n        }\n    }\n    return sets.sort((a, b) => b.length - a.length);\n}\n/**\nThis function is used to add a set of tags to a language syntax\nvia [`NodeSet.extend`](#common.NodeSet.extend) or\n[`LRParser.configure`](#lr.LRParser.configure).\n\nThe argument object maps node selectors to [highlighting\ntags](#highlight.Tag) or arrays of tags.\n\nNode selectors may hold one or more (space-separated) node paths.\nSuch a path can be a [node name](#common.NodeType.name), or\nmultiple node names (or `*` wildcards) separated by slash\ncharacters, as in `\"Block/Declaration/VariableName\"`. Such a path\nmatches the final node but only if its direct parent nodes are the\nother nodes mentioned. A `*` in such a path matches any parent,\nbut only a single level\u2014wildcards that match multiple parents\naren't supported, both for efficiency reasons and because Lezer\ntrees make it rather hard to reason about what they would match.)\n\nA path can be ended with `/...` to indicate that the tag assigned\nto the node should also apply to all child nodes, even if they\nmatch their own style (by default, only the innermost style is\nused).\n\nWhen a path ends in `!`, as in `Attribute!`, no further matching\nhappens for the node's child nodes, and the entire node gets the\ngiven style.\n\nIn this notation, node names that contain `/`, `!`, `*`, or `...`\nmust be quoted as JSON strings.\n\nFor example:\n\n```javascript\nparser.withProps(\n  styleTags({\n    // Style Number and BigNumber nodes\n    \"Number BigNumber\": tags.number,\n    // Style Escape nodes whose parent is String\n    \"String/Escape\": tags.escape,\n    // Style anything inside Attributes nodes\n    \"Attributes!\": tags.meta,\n    // Add a style to all content inside Italic nodes\n    \"Italic/...\": tags.emphasis,\n    // Style InvalidString nodes as both `string` and `invalid`\n    \"InvalidString\": [tags.string, tags.invalid],\n    // Style the node named \"/\" as punctuation\n    '\"/\"': tags.punctuation\n  })\n)\n```\n*/\nfunction styleTags(spec) {\n    let byName = Object.create(null);\n    for (let prop in spec) {\n        let tags = spec[prop];\n        if (!Array.isArray(tags))\n            tags = [tags];\n        for (let part of prop.split(\" \"))\n            if (part) {\n                let pieces = [], mode = 2 /* Normal */, rest = part;\n                for (let pos = 0;;) {\n                    if (rest == \"...\" && pos > 0 && pos + 3 == part.length) {\n                        mode = 1 /* Inherit */;\n                        break;\n                    }\n                    let m = /^\"(?:[^\"\\\\]|\\\\.)*?\"|[^\\/!]+/.exec(rest);\n                    if (!m)\n                        throw new RangeError(\"Invalid path: \" + part);\n                    pieces.push(m[0] == \"*\" ? \"\" : m[0][0] == '\"' ? JSON.parse(m[0]) : m[0]);\n                    pos += m[0].length;\n                    if (pos == part.length)\n                        break;\n                    let next = part[pos++];\n                    if (pos == part.length && next == \"!\") {\n                        mode = 0 /* Opaque */;\n                        break;\n                    }\n                    if (next != \"/\")\n                        throw new RangeError(\"Invalid path: \" + part);\n                    rest = part.slice(pos);\n                }\n                let last = pieces.length - 1, inner = pieces[last];\n                if (!inner)\n                    throw new RangeError(\"Invalid path: \" + part);\n                let rule = new Rule(tags, mode, last > 0 ? pieces.slice(0, last) : null);\n                byName[inner] = rule.sort(byName[inner]);\n            }\n    }\n    return ruleNodeProp.add(byName);\n}\nconst ruleNodeProp = new NodeProp();\nclass Rule {\n    constructor(tags, mode, context, next) {\n        this.tags = tags;\n        this.mode = mode;\n        this.context = context;\n        this.next = next;\n    }\n    get opaque() { return this.mode == 0 /* Opaque */; }\n    get inherit() { return this.mode == 1 /* Inherit */; }\n    sort(other) {\n        if (!other || other.depth < this.depth) {\n            this.next = other;\n            return this;\n        }\n        other.next = this.sort(other.next);\n        return other;\n    }\n    get depth() { return this.context ? this.context.length : 0; }\n}\nRule.empty = new Rule([], 2 /* Normal */, null);\n/**\nDefine a [highlighter](#highlight.Highlighter) from an array of\ntag/class pairs. Classes associated with more specific tags will\ntake precedence.\n*/\nfunction tagHighlighter(tags, options) {\n    let map = Object.create(null);\n    for (let style of tags) {\n        if (!Array.isArray(style.tag))\n            map[style.tag.id] = style.class;\n        else\n            for (let tag of style.tag)\n                map[tag.id] = style.class;\n    }\n    let { scope, all = null } = options || {};\n    return {\n        style: (tags) => {\n            let cls = all;\n            for (let tag of tags) {\n                for (let sub of tag.set) {\n                    let tagClass = map[sub.id];\n                    if (tagClass) {\n                        cls = cls ? cls + \" \" + tagClass : tagClass;\n                        break;\n                    }\n                }\n            }\n            return cls;\n        },\n        scope\n    };\n}\nfunction highlightTags(highlighters, tags) {\n    let result = null;\n    for (let highlighter of highlighters) {\n        let value = highlighter.style(tags);\n        if (value)\n            result = result ? result + \" \" + value : value;\n    }\n    return result;\n}\n/**\nHighlight the given [tree](#common.Tree) with the given\n[highlighter](#highlight.Highlighter).\n*/\nfunction highlightTree(tree, highlighter, \n/**\nAssign styling to a region of the text. Will be called, in order\nof position, for any ranges where more than zero classes apply.\n`classes` is a space separated string of CSS classes.\n*/\nputStyle, \n/**\nThe start of the range to highlight.\n*/\nfrom = 0, \n/**\nThe end of the range.\n*/\nto = tree.length) {\n    let builder = new HighlightBuilder(from, Array.isArray(highlighter) ? highlighter : [highlighter], putStyle);\n    builder.highlightRange(tree.cursor(), from, to, \"\", builder.highlighters);\n    builder.flush(to);\n}\nclass HighlightBuilder {\n    constructor(at, highlighters, span) {\n        this.at = at;\n        this.highlighters = highlighters;\n        this.span = span;\n        this.class = \"\";\n    }\n    startSpan(at, cls) {\n        if (cls != this.class) {\n            this.flush(at);\n            if (at > this.at)\n                this.at = at;\n            this.class = cls;\n        }\n    }\n    flush(to) {\n        if (to > this.at && this.class)\n            this.span(this.at, to, this.class);\n    }\n    highlightRange(cursor, from, to, inheritedClass, highlighters) {\n        let { type, from: start, to: end } = cursor;\n        if (start >= to || end <= from)\n            return;\n        if (type.isTop)\n            highlighters = this.highlighters.filter(h => !h.scope || h.scope(type));\n        let cls = inheritedClass;\n        let rule = getStyleTags(cursor) || Rule.empty;\n        let tagCls = highlightTags(highlighters, rule.tags);\n        if (tagCls) {\n            if (cls)\n                cls += \" \";\n            cls += tagCls;\n            if (rule.mode == 1 /* Inherit */)\n                inheritedClass += (inheritedClass ? \" \" : \"\") + tagCls;\n        }\n        this.startSpan(Math.max(from, start), cls);\n        if (rule.opaque)\n            return;\n        let mounted = cursor.tree && cursor.tree.prop(NodeProp.mounted);\n        if (mounted && mounted.overlay) {\n            let inner = cursor.node.enter(mounted.overlay[0].from + start, 1);\n            let innerHighlighters = this.highlighters.filter(h => !h.scope || h.scope(mounted.tree.type));\n            let hasChild = cursor.firstChild();\n            for (let i = 0, pos = start;; i++) {\n                let next = i < mounted.overlay.length ? mounted.overlay[i] : null;\n                let nextPos = next ? next.from + start : end;\n                let rangeFrom = Math.max(from, pos), rangeTo = Math.min(to, nextPos);\n                if (rangeFrom < rangeTo && hasChild) {\n                    while (cursor.from < rangeTo) {\n                        this.highlightRange(cursor, rangeFrom, rangeTo, inheritedClass, highlighters);\n                        this.startSpan(Math.min(rangeTo, cursor.to), cls);\n                        if (cursor.to >= nextPos || !cursor.nextSibling())\n                            break;\n                    }\n                }\n                if (!next || nextPos > to)\n                    break;\n                pos = next.to + start;\n                if (pos > from) {\n                    this.highlightRange(inner.cursor(), Math.max(from, next.from + start), Math.min(to, pos), \"\", innerHighlighters);\n                    this.startSpan(Math.min(to, pos), cls);\n                }\n            }\n            if (hasChild)\n                cursor.parent();\n        }\n        else if (cursor.firstChild()) {\n            if (mounted)\n                inheritedClass = \"\";\n            do {\n                if (cursor.to <= from)\n                    continue;\n                if (cursor.from >= to)\n                    break;\n                this.highlightRange(cursor, from, to, inheritedClass, highlighters);\n                this.startSpan(Math.min(to, cursor.to), cls);\n            } while (cursor.nextSibling());\n            cursor.parent();\n        }\n    }\n}\n/**\nMatch a syntax node's [highlight rules](#highlight.styleTags). If\nthere's a match, return its set of tags, and whether it is\nopaque (uses a `!`) or applies to all child nodes (`/...`).\n*/\nfunction getStyleTags(node) {\n    let rule = node.type.prop(ruleNodeProp);\n    while (rule && rule.context && !node.matchContext(rule.context))\n        rule = rule.next;\n    return rule || null;\n}\nconst t = Tag.define;\nconst comment = t(), name = t(), typeName = t(name), propertyName = t(name), literal = t(), string = t(literal), number = t(literal), content = t(), heading = t(content), keyword = t(), operator = t(), punctuation = t(), bracket = t(punctuation), meta = t();\n/**\nThe default set of highlighting [tags](#highlight.Tag).\n\nThis collection is heavily biased towards programming languages,\nand necessarily incomplete. A full ontology of syntactic\nconstructs would fill a stack of books, and be impractical to\nwrite themes for. So try to make do with this set. If all else\nfails, [open an\nissue](https://github.com/codemirror/codemirror.next) to propose a\nnew tag, or [define](#highlight.Tag^define) a local custom tag for\nyour use case.\n\nNote that it is not obligatory to always attach the most specific\ntag possible to an element\u2014if your grammar can't easily\ndistinguish a certain type of element (such as a local variable),\nit is okay to style it as its more general variant (a variable).\n\nFor tags that extend some parent tag, the documentation links to\nthe parent.\n*/\nconst tags = {\n    /**\n    A comment.\n    */\n    comment,\n    /**\n    A line [comment](#highlight.tags.comment).\n    */\n    lineComment: t(comment),\n    /**\n    A block [comment](#highlight.tags.comment).\n    */\n    blockComment: t(comment),\n    /**\n    A documentation [comment](#highlight.tags.comment).\n    */\n    docComment: t(comment),\n    /**\n    Any kind of identifier.\n    */\n    name,\n    /**\n    The [name](#highlight.tags.name) of a variable.\n    */\n    variableName: t(name),\n    /**\n    A type [name](#highlight.tags.name).\n    */\n    typeName: typeName,\n    /**\n    A tag name (subtag of [`typeName`](#highlight.tags.typeName)).\n    */\n    tagName: t(typeName),\n    /**\n    A property or field [name](#highlight.tags.name).\n    */\n    propertyName: propertyName,\n    /**\n    An attribute name (subtag of [`propertyName`](#highlight.tags.propertyName)).\n    */\n    attributeName: t(propertyName),\n    /**\n    The [name](#highlight.tags.name) of a class.\n    */\n    className: t(name),\n    /**\n    A label [name](#highlight.tags.name).\n    */\n    labelName: t(name),\n    /**\n    A namespace [name](#highlight.tags.name).\n    */\n    namespace: t(name),\n    /**\n    The [name](#highlight.tags.name) of a macro.\n    */\n    macroName: t(name),\n    /**\n    A literal value.\n    */\n    literal,\n    /**\n    A string [literal](#highlight.tags.literal).\n    */\n    string,\n    /**\n    A documentation [string](#highlight.tags.string).\n    */\n    docString: t(string),\n    /**\n    A character literal (subtag of [string](#highlight.tags.string)).\n    */\n    character: t(string),\n    /**\n    An attribute value (subtag of [string](#highlight.tags.string)).\n    */\n    attributeValue: t(string),\n    /**\n    A number [literal](#highlight.tags.literal).\n    */\n    number,\n    /**\n    An integer [number](#highlight.tags.number) literal.\n    */\n    integer: t(number),\n    /**\n    A floating-point [number](#highlight.tags.number) literal.\n    */\n    float: t(number),\n    /**\n    A boolean [literal](#highlight.tags.literal).\n    */\n    bool: t(literal),\n    /**\n    Regular expression [literal](#highlight.tags.literal).\n    */\n    regexp: t(literal),\n    /**\n    An escape [literal](#highlight.tags.literal), for example a\n    backslash escape in a string.\n    */\n    escape: t(literal),\n    /**\n    A color [literal](#highlight.tags.literal).\n    */\n    color: t(literal),\n    /**\n    A URL [literal](#highlight.tags.literal).\n    */\n    url: t(literal),\n    /**\n    A language keyword.\n    */\n    keyword,\n    /**\n    The [keyword](#highlight.tags.keyword) for the self or this\n    object.\n    */\n    self: t(keyword),\n    /**\n    The [keyword](#highlight.tags.keyword) for null.\n    */\n    null: t(keyword),\n    /**\n    A [keyword](#highlight.tags.keyword) denoting some atomic value.\n    */\n    atom: t(keyword),\n    /**\n    A [keyword](#highlight.tags.keyword) that represents a unit.\n    */\n    unit: t(keyword),\n    /**\n    A modifier [keyword](#highlight.tags.keyword).\n    */\n    modifier: t(keyword),\n    /**\n    A [keyword](#highlight.tags.keyword) that acts as an operator.\n    */\n    operatorKeyword: t(keyword),\n    /**\n    A control-flow related [keyword](#highlight.tags.keyword).\n    */\n    controlKeyword: t(keyword),\n    /**\n    A [keyword](#highlight.tags.keyword) that defines something.\n    */\n    definitionKeyword: t(keyword),\n    /**\n    A [keyword](#highlight.tags.keyword) related to defining or\n    interfacing with modules.\n    */\n    moduleKeyword: t(keyword),\n    /**\n    An operator.\n    */\n    operator,\n    /**\n    An [operator](#highlight.tags.operator) that dereferences something.\n    */\n    derefOperator: t(operator),\n    /**\n    Arithmetic-related [operator](#highlight.tags.operator).\n    */\n    arithmeticOperator: t(operator),\n    /**\n    Logical [operator](#highlight.tags.operator).\n    */\n    logicOperator: t(operator),\n    /**\n    Bit [operator](#highlight.tags.operator).\n    */\n    bitwiseOperator: t(operator),\n    /**\n    Comparison [operator](#highlight.tags.operator).\n    */\n    compareOperator: t(operator),\n    /**\n    [Operator](#highlight.tags.operator) that updates its operand.\n    */\n    updateOperator: t(operator),\n    /**\n    [Operator](#highlight.tags.operator) that defines something.\n    */\n    definitionOperator: t(operator),\n    /**\n    Type-related [operator](#highlight.tags.operator).\n    */\n    typeOperator: t(operator),\n    /**\n    Control-flow [operator](#highlight.tags.operator).\n    */\n    controlOperator: t(operator),\n    /**\n    Program or markup punctuation.\n    */\n    punctuation,\n    /**\n    [Punctuation](#highlight.tags.punctuation) that separates\n    things.\n    */\n    separator: t(punctuation),\n    /**\n    Bracket-style [punctuation](#highlight.tags.punctuation).\n    */\n    bracket,\n    /**\n    Angle [brackets](#highlight.tags.bracket) (usually `<` and `>`\n    tokens).\n    */\n    angleBracket: t(bracket),\n    /**\n    Square [brackets](#highlight.tags.bracket) (usually `[` and `]`\n    tokens).\n    */\n    squareBracket: t(bracket),\n    /**\n    Parentheses (usually `(` and `)` tokens). Subtag of\n    [bracket](#highlight.tags.bracket).\n    */\n    paren: t(bracket),\n    /**\n    Braces (usually `{` and `}` tokens). Subtag of\n    [bracket](#highlight.tags.bracket).\n    */\n    brace: t(bracket),\n    /**\n    Content, for example plain text in XML or markup documents.\n    */\n    content,\n    /**\n    [Content](#highlight.tags.content) that represents a heading.\n    */\n    heading,\n    /**\n    A level 1 [heading](#highlight.tags.heading).\n    */\n    heading1: t(heading),\n    /**\n    A level 2 [heading](#highlight.tags.heading).\n    */\n    heading2: t(heading),\n    /**\n    A level 3 [heading](#highlight.tags.heading).\n    */\n    heading3: t(heading),\n    /**\n    A level 4 [heading](#highlight.tags.heading).\n    */\n    heading4: t(heading),\n    /**\n    A level 5 [heading](#highlight.tags.heading).\n    */\n    heading5: t(heading),\n    /**\n    A level 6 [heading](#highlight.tags.heading).\n    */\n    heading6: t(heading),\n    /**\n    A prose separator (such as a horizontal rule).\n    */\n    contentSeparator: t(content),\n    /**\n    [Content](#highlight.tags.content) that represents a list.\n    */\n    list: t(content),\n    /**\n    [Content](#highlight.tags.content) that represents a quote.\n    */\n    quote: t(content),\n    /**\n    [Content](#highlight.tags.content) that is emphasized.\n    */\n    emphasis: t(content),\n    /**\n    [Content](#highlight.tags.content) that is styled strong.\n    */\n    strong: t(content),\n    /**\n    [Content](#highlight.tags.content) that is part of a link.\n    */\n    link: t(content),\n    /**\n    [Content](#highlight.tags.content) that is styled as code or\n    monospace.\n    */\n    monospace: t(content),\n    /**\n    [Content](#highlight.tags.content) that has a strike-through\n    style.\n    */\n    strikethrough: t(content),\n    /**\n    Inserted text in a change-tracking format.\n    */\n    inserted: t(),\n    /**\n    Deleted text.\n    */\n    deleted: t(),\n    /**\n    Changed text.\n    */\n    changed: t(),\n    /**\n    An invalid or unsyntactic element.\n    */\n    invalid: t(),\n    /**\n    Metadata or meta-instruction.\n    */\n    meta,\n    /**\n    [Metadata](#highlight.tags.meta) that applies to the entire\n    document.\n    */\n    documentMeta: t(meta),\n    /**\n    [Metadata](#highlight.tags.meta) that annotates or adds\n    attributes to a given syntactic element.\n    */\n    annotation: t(meta),\n    /**\n    Processing instruction or preprocessor directive. Subtag of\n    [meta](#highlight.tags.meta).\n    */\n    processingInstruction: t(meta),\n    /**\n    [Modifier](#highlight.Tag^defineModifier) that indicates that a\n    given element is being defined. Expected to be used with the\n    various [name](#highlight.tags.name) tags.\n    */\n    definition: Tag.defineModifier(),\n    /**\n    [Modifier](#highlight.Tag^defineModifier) that indicates that\n    something is constant. Mostly expected to be used with\n    [variable names](#highlight.tags.variableName).\n    */\n    constant: Tag.defineModifier(),\n    /**\n    [Modifier](#highlight.Tag^defineModifier) used to indicate that\n    a [variable](#highlight.tags.variableName) or [property\n    name](#highlight.tags.propertyName) is being called or defined\n    as a function.\n    */\n    function: Tag.defineModifier(),\n    /**\n    [Modifier](#highlight.Tag^defineModifier) that can be applied to\n    [names](#highlight.tags.name) to indicate that they belong to\n    the language's standard environment.\n    */\n    standard: Tag.defineModifier(),\n    /**\n    [Modifier](#highlight.Tag^defineModifier) that indicates a given\n    [names](#highlight.tags.name) is local to some scope.\n    */\n    local: Tag.defineModifier(),\n    /**\n    A generic variant [modifier](#highlight.Tag^defineModifier) that\n    can be used to tag language-specific alternative variants of\n    some common tag. It is recommended for themes to define special\n    forms of at least the [string](#highlight.tags.string) and\n    [variable name](#highlight.tags.variableName) tags, since those\n    come up a lot.\n    */\n    special: Tag.defineModifier()\n};\n/**\nThis is a highlighter that adds stable, predictable classes to\ntokens, for styling with external CSS.\n\nThe following tags are mapped to their name prefixed with `\"tok-\"`\n(for example `\"tok-comment\"`):\n\n* [`link`](#highlight.tags.link)\n* [`heading`](#highlight.tags.heading)\n* [`emphasis`](#highlight.tags.emphasis)\n* [`strong`](#highlight.tags.strong)\n* [`keyword`](#highlight.tags.keyword)\n* [`atom`](#highlight.tags.atom)\n* [`bool`](#highlight.tags.bool)\n* [`url`](#highlight.tags.url)\n* [`labelName`](#highlight.tags.labelName)\n* [`inserted`](#highlight.tags.inserted)\n* [`deleted`](#highlight.tags.deleted)\n* [`literal`](#highlight.tags.literal)\n* [`string`](#highlight.tags.string)\n* [`number`](#highlight.tags.number)\n* [`variableName`](#highlight.tags.variableName)\n* [`typeName`](#highlight.tags.typeName)\n* [`namespace`](#highlight.tags.namespace)\n* [`className`](#highlight.tags.className)\n* [`macroName`](#highlight.tags.macroName)\n* [`propertyName`](#highlight.tags.propertyName)\n* [`operator`](#highlight.tags.operator)\n* [`comment`](#highlight.tags.comment)\n* [`meta`](#highlight.tags.meta)\n* [`punctuation`](#highlight.tags.punctuation)\n* [`invalid`](#highlight.tags.invalid)\n\nIn addition, these mappings are provided:\n\n* [`regexp`](#highlight.tags.regexp),\n  [`escape`](#highlight.tags.escape), and\n  [`special`](#highlight.tags.special)[`(string)`](#highlight.tags.string)\n  are mapped to `\"tok-string2\"`\n* [`special`](#highlight.tags.special)[`(variableName)`](#highlight.tags.variableName)\n  to `\"tok-variableName2\"`\n* [`local`](#highlight.tags.local)[`(variableName)`](#highlight.tags.variableName)\n  to `\"tok-variableName tok-local\"`\n* [`definition`](#highlight.tags.definition)[`(variableName)`](#highlight.tags.variableName)\n  to `\"tok-variableName tok-definition\"`\n* [`definition`](#highlight.tags.definition)[`(propertyName)`](#highlight.tags.propertyName)\n  to `\"tok-propertyName tok-definition\"`\n*/\nconst classHighlighter = tagHighlighter([\n    { tag: tags.link, class: \"tok-link\" },\n    { tag: tags.heading, class: \"tok-heading\" },\n    { tag: tags.emphasis, class: \"tok-emphasis\" },\n    { tag: tags.strong, class: \"tok-strong\" },\n    { tag: tags.keyword, class: \"tok-keyword\" },\n    { tag: tags.atom, class: \"tok-atom\" },\n    { tag: tags.bool, class: \"tok-bool\" },\n    { tag: tags.url, class: \"tok-url\" },\n    { tag: tags.labelName, class: \"tok-labelName\" },\n    { tag: tags.inserted, class: \"tok-inserted\" },\n    { tag: tags.deleted, class: \"tok-deleted\" },\n    { tag: tags.literal, class: \"tok-literal\" },\n    { tag: tags.string, class: \"tok-string\" },\n    { tag: tags.number, class: \"tok-number\" },\n    { tag: [tags.regexp, tags.escape, tags.special(tags.string)], class: \"tok-string2\" },\n    { tag: tags.variableName, class: \"tok-variableName\" },\n    { tag: tags.local(tags.variableName), class: \"tok-variableName tok-local\" },\n    { tag: tags.definition(tags.variableName), class: \"tok-variableName tok-definition\" },\n    { tag: tags.special(tags.variableName), class: \"tok-variableName2\" },\n    { tag: tags.definition(tags.propertyName), class: \"tok-propertyName tok-definition\" },\n    { tag: tags.typeName, class: \"tok-typeName\" },\n    { tag: tags.namespace, class: \"tok-namespace\" },\n    { tag: tags.className, class: \"tok-className\" },\n    { tag: tags.macroName, class: \"tok-macroName\" },\n    { tag: tags.propertyName, class: \"tok-propertyName\" },\n    { tag: tags.operator, class: \"tok-operator\" },\n    { tag: tags.comment, class: \"tok-comment\" },\n    { tag: tags.meta, class: \"tok-meta\" },\n    { tag: tags.invalid, class: \"tok-invalid\" },\n    { tag: tags.punctuation, class: \"tok-punctuation\" }\n]);\n\nexport { Tag, classHighlighter, getStyleTags, highlightTree, styleTags, tagHighlighter, tags };\n", "import { NodeProp, IterMode, Tree, TreeFragment, Parser, NodeType, NodeSet } from '@lezer/common';\nimport { StateEffect, StateField, Facet, EditorState, countColumn, combineConfig, RangeSet, RangeSetBuilder, Prec } from '@codemirror/state';\nimport { ViewPlugin, logException, EditorView, Decoration, WidgetType, gutter, GutterMarker } from '@codemirror/view';\nimport { tags, tagHighlighter, highlightTree, styleTags } from '@lezer/highlight';\nimport { StyleModule } from 'style-mod';\n\nvar _a;\n/**\nNode prop stored in a parser's top syntax node to provide the\nfacet that stores language-specific data for that language.\n*/\nconst languageDataProp = /*@__PURE__*/new NodeProp();\n/**\nHelper function to define a facet (to be added to the top syntax\nnode(s) for a language via\n[`languageDataProp`](https://codemirror.net/6/docs/ref/#language.languageDataProp)), that will be\nused to associate language data with the language. You\nprobably only need this when subclassing\n[`Language`](https://codemirror.net/6/docs/ref/#language.Language).\n*/\nfunction defineLanguageFacet(baseData) {\n    return Facet.define({\n        combine: baseData ? values => values.concat(baseData) : undefined\n    });\n}\n/**\nSyntax node prop used to register sublanguages. Should be added to\nthe top level node type for the language.\n*/\nconst sublanguageProp = /*@__PURE__*/new NodeProp();\n/**\nA language object manages parsing and per-language\n[metadata](https://codemirror.net/6/docs/ref/#state.EditorState.languageDataAt). Parse data is\nmanaged as a [Lezer](https://lezer.codemirror.net) tree. The class\ncan be used directly, via the [`LRLanguage`](https://codemirror.net/6/docs/ref/#language.LRLanguage)\nsubclass for [Lezer](https://lezer.codemirror.net/) LR parsers, or\nvia the [`StreamLanguage`](https://codemirror.net/6/docs/ref/#language.StreamLanguage) subclass\nfor stream parsers.\n*/\nclass Language {\n    /**\n    Construct a language object. If you need to invoke this\n    directly, first define a data facet with\n    [`defineLanguageFacet`](https://codemirror.net/6/docs/ref/#language.defineLanguageFacet), and then\n    configure your parser to [attach](https://codemirror.net/6/docs/ref/#language.languageDataProp) it\n    to the language's outer syntax node.\n    */\n    constructor(\n    /**\n    The [language data](https://codemirror.net/6/docs/ref/#state.EditorState.languageDataAt) facet\n    used for this language.\n    */\n    data, parser, extraExtensions = [], \n    /**\n    A language name.\n    */\n    name = \"\") {\n        this.data = data;\n        this.name = name;\n        // Kludge to define EditorState.tree as a debugging helper,\n        // without the EditorState package actually knowing about\n        // languages and lezer trees.\n        if (!EditorState.prototype.hasOwnProperty(\"tree\"))\n            Object.defineProperty(EditorState.prototype, \"tree\", { get() { return syntaxTree(this); } });\n        this.parser = parser;\n        this.extension = [\n            language.of(this),\n            EditorState.languageData.of((state, pos, side) => {\n                let top = topNodeAt(state, pos, side), data = top.type.prop(languageDataProp);\n                if (!data)\n                    return [];\n                let base = state.facet(data), sub = top.type.prop(sublanguageProp);\n                if (sub) {\n                    let innerNode = top.resolve(pos - top.from, side);\n                    for (let sublang of sub)\n                        if (sublang.test(innerNode, state)) {\n                            let data = state.facet(sublang.facet);\n                            return sublang.type == \"replace\" ? data : data.concat(base);\n                        }\n                }\n                return base;\n            })\n        ].concat(extraExtensions);\n    }\n    /**\n    Query whether this language is active at the given position.\n    */\n    isActiveAt(state, pos, side = -1) {\n        return topNodeAt(state, pos, side).type.prop(languageDataProp) == this.data;\n    }\n    /**\n    Find the document regions that were parsed using this language.\n    The returned regions will _include_ any nested languages rooted\n    in this language, when those exist.\n    */\n    findRegions(state) {\n        let lang = state.facet(language);\n        if ((lang === null || lang === void 0 ? void 0 : lang.data) == this.data)\n            return [{ from: 0, to: state.doc.length }];\n        if (!lang || !lang.allowsNesting)\n            return [];\n        let result = [];\n        let explore = (tree, from) => {\n            if (tree.prop(languageDataProp) == this.data) {\n                result.push({ from, to: from + tree.length });\n                return;\n            }\n            let mount = tree.prop(NodeProp.mounted);\n            if (mount) {\n                if (mount.tree.prop(languageDataProp) == this.data) {\n                    if (mount.overlay)\n                        for (let r of mount.overlay)\n                            result.push({ from: r.from + from, to: r.to + from });\n                    else\n                        result.push({ from: from, to: from + tree.length });\n                    return;\n                }\n                else if (mount.overlay) {\n                    let size = result.length;\n                    explore(mount.tree, mount.overlay[0].from + from);\n                    if (result.length > size)\n                        return;\n                }\n            }\n            for (let i = 0; i < tree.children.length; i++) {\n                let ch = tree.children[i];\n                if (ch instanceof Tree)\n                    explore(ch, tree.positions[i] + from);\n            }\n        };\n        explore(syntaxTree(state), 0);\n        return result;\n    }\n    /**\n    Indicates whether this language allows nested languages. The\n    default implementation returns true.\n    */\n    get allowsNesting() { return true; }\n}\n/**\n@internal\n*/\nLanguage.setState = /*@__PURE__*/StateEffect.define();\nfunction topNodeAt(state, pos, side) {\n    let topLang = state.facet(language), tree = syntaxTree(state).topNode;\n    if (!topLang || topLang.allowsNesting) {\n        for (let node = tree; node; node = node.enter(pos, side, IterMode.ExcludeBuffers))\n            if (node.type.isTop)\n                tree = node;\n    }\n    return tree;\n}\n/**\nA subclass of [`Language`](https://codemirror.net/6/docs/ref/#language.Language) for use with Lezer\n[LR parsers](https://lezer.codemirror.net/docs/ref#lr.LRParser)\nparsers.\n*/\nclass LRLanguage extends Language {\n    constructor(data, parser, name) {\n        super(data, parser, [], name);\n        this.parser = parser;\n    }\n    /**\n    Define a language from a parser.\n    */\n    static define(spec) {\n        let data = defineLanguageFacet(spec.languageData);\n        return new LRLanguage(data, spec.parser.configure({\n            props: [languageDataProp.add(type => type.isTop ? data : undefined)]\n        }), spec.name);\n    }\n    /**\n    Create a new instance of this language with a reconfigured\n    version of its parser and optionally a new name.\n    */\n    configure(options, name) {\n        return new LRLanguage(this.data, this.parser.configure(options), name || this.name);\n    }\n    get allowsNesting() { return this.parser.hasWrappers(); }\n}\n/**\nGet the syntax tree for a state, which is the current (possibly\nincomplete) parse tree of the active\n[language](https://codemirror.net/6/docs/ref/#language.Language), or the empty tree if there is no\nlanguage available.\n*/\nfunction syntaxTree(state) {\n    let field = state.field(Language.state, false);\n    return field ? field.tree : Tree.empty;\n}\n/**\nTry to get a parse tree that spans at least up to `upto`. The\nmethod will do at most `timeout` milliseconds of work to parse\nup to that point if the tree isn't already available.\n*/\nfunction ensureSyntaxTree(state, upto, timeout = 50) {\n    var _a;\n    let parse = (_a = state.field(Language.state, false)) === null || _a === void 0 ? void 0 : _a.context;\n    if (!parse)\n        return null;\n    let oldVieport = parse.viewport;\n    parse.updateViewport({ from: 0, to: upto });\n    let result = parse.isDone(upto) || parse.work(timeout, upto) ? parse.tree : null;\n    parse.updateViewport(oldVieport);\n    return result;\n}\n/**\nQueries whether there is a full syntax tree available up to the\ngiven document position. If there isn't, the background parse\nprocess _might_ still be working and update the tree further, but\nthere is no guarantee of that\u2014the parser will [stop\nworking](https://codemirror.net/6/docs/ref/#language.syntaxParserRunning) when it has spent a\ncertain amount of time or has moved beyond the visible viewport.\nAlways returns false if no language has been enabled.\n*/\nfunction syntaxTreeAvailable(state, upto = state.doc.length) {\n    var _a;\n    return ((_a = state.field(Language.state, false)) === null || _a === void 0 ? void 0 : _a.context.isDone(upto)) || false;\n}\n/**\nMove parsing forward, and update the editor state afterwards to\nreflect the new tree. Will work for at most `timeout`\nmilliseconds. Returns true if the parser managed get to the given\nposition in that time.\n*/\nfunction forceParsing(view, upto = view.viewport.to, timeout = 100) {\n    let success = ensureSyntaxTree(view.state, upto, timeout);\n    if (success != syntaxTree(view.state))\n        view.dispatch({});\n    return !!success;\n}\n/**\nTells you whether the language parser is planning to do more\nparsing work (in a `requestIdleCallback` pseudo-thread) or has\nstopped running, either because it parsed the entire document,\nbecause it spent too much time and was cut off, or because there\nis no language parser enabled.\n*/\nfunction syntaxParserRunning(view) {\n    var _a;\n    return ((_a = view.plugin(parseWorker)) === null || _a === void 0 ? void 0 : _a.isWorking()) || false;\n}\n/**\nLezer-style\n[`Input`](https://lezer.codemirror.net/docs/ref#common.Input)\nobject for a [`Text`](https://codemirror.net/6/docs/ref/#state.Text) object.\n*/\nclass DocInput {\n    /**\n    Create an input object for the given document.\n    */\n    constructor(doc) {\n        this.doc = doc;\n        this.cursorPos = 0;\n        this.string = \"\";\n        this.cursor = doc.iter();\n    }\n    get length() { return this.doc.length; }\n    syncTo(pos) {\n        this.string = this.cursor.next(pos - this.cursorPos).value;\n        this.cursorPos = pos + this.string.length;\n        return this.cursorPos - this.string.length;\n    }\n    chunk(pos) {\n        this.syncTo(pos);\n        return this.string;\n    }\n    get lineChunks() { return true; }\n    read(from, to) {\n        let stringStart = this.cursorPos - this.string.length;\n        if (from < stringStart || to >= this.cursorPos)\n            return this.doc.sliceString(from, to);\n        else\n            return this.string.slice(from - stringStart, to - stringStart);\n    }\n}\nlet currentContext = null;\n/**\nA parse context provided to parsers working on the editor content.\n*/\nclass ParseContext {\n    constructor(parser, \n    /**\n    The current editor state.\n    */\n    state, \n    /**\n    Tree fragments that can be reused by incremental re-parses.\n    */\n    fragments = [], \n    /**\n    @internal\n    */\n    tree, \n    /**\n    @internal\n    */\n    treeLen, \n    /**\n    The current editor viewport (or some overapproximation\n    thereof). Intended to be used for opportunistically avoiding\n    work (in which case\n    [`skipUntilInView`](https://codemirror.net/6/docs/ref/#language.ParseContext.skipUntilInView)\n    should be called to make sure the parser is restarted when the\n    skipped region becomes visible).\n    */\n    viewport, \n    /**\n    @internal\n    */\n    skipped, \n    /**\n    This is where skipping parsers can register a promise that,\n    when resolved, will schedule a new parse. It is cleared when\n    the parse worker picks up the promise. @internal\n    */\n    scheduleOn) {\n        this.parser = parser;\n        this.state = state;\n        this.fragments = fragments;\n        this.tree = tree;\n        this.treeLen = treeLen;\n        this.viewport = viewport;\n        this.skipped = skipped;\n        this.scheduleOn = scheduleOn;\n        this.parse = null;\n        /**\n        @internal\n        */\n        this.tempSkipped = [];\n    }\n    /**\n    @internal\n    */\n    static create(parser, state, viewport) {\n        return new ParseContext(parser, state, [], Tree.empty, 0, viewport, [], null);\n    }\n    startParse() {\n        return this.parser.startParse(new DocInput(this.state.doc), this.fragments);\n    }\n    /**\n    @internal\n    */\n    work(until, upto) {\n        if (upto != null && upto >= this.state.doc.length)\n            upto = undefined;\n        if (this.tree != Tree.empty && this.isDone(upto !== null && upto !== void 0 ? upto : this.state.doc.length)) {\n            this.takeTree();\n            return true;\n        }\n        return this.withContext(() => {\n            var _a;\n            if (typeof until == \"number\") {\n                let endTime = Date.now() + until;\n                until = () => Date.now() > endTime;\n            }\n            if (!this.parse)\n                this.parse = this.startParse();\n            if (upto != null && (this.parse.stoppedAt == null || this.parse.stoppedAt > upto) &&\n                upto < this.state.doc.length)\n                this.parse.stopAt(upto);\n            for (;;) {\n                let done = this.parse.advance();\n                if (done) {\n                    this.fragments = this.withoutTempSkipped(TreeFragment.addTree(done, this.fragments, this.parse.stoppedAt != null));\n                    this.treeLen = (_a = this.parse.stoppedAt) !== null && _a !== void 0 ? _a : this.state.doc.length;\n                    this.tree = done;\n                    this.parse = null;\n                    if (this.treeLen < (upto !== null && upto !== void 0 ? upto : this.state.doc.length))\n                        this.parse = this.startParse();\n                    else\n                        return true;\n                }\n                if (until())\n                    return false;\n            }\n        });\n    }\n    /**\n    @internal\n    */\n    takeTree() {\n        let pos, tree;\n        if (this.parse && (pos = this.parse.parsedPos) >= this.treeLen) {\n            if (this.parse.stoppedAt == null || this.parse.stoppedAt > pos)\n                this.parse.stopAt(pos);\n            this.withContext(() => { while (!(tree = this.parse.advance())) { } });\n            this.treeLen = pos;\n            this.tree = tree;\n            this.fragments = this.withoutTempSkipped(TreeFragment.addTree(this.tree, this.fragments, true));\n            this.parse = null;\n        }\n    }\n    withContext(f) {\n        let prev = currentContext;\n        currentContext = this;\n        try {\n            return f();\n        }\n        finally {\n            currentContext = prev;\n        }\n    }\n    withoutTempSkipped(fragments) {\n        for (let r; r = this.tempSkipped.pop();)\n            fragments = cutFragments(fragments, r.from, r.to);\n        return fragments;\n    }\n    /**\n    @internal\n    */\n    changes(changes, newState) {\n        let { fragments, tree, treeLen, viewport, skipped } = this;\n        this.takeTree();\n        if (!changes.empty) {\n            let ranges = [];\n            changes.iterChangedRanges((fromA, toA, fromB, toB) => ranges.push({ fromA, toA, fromB, toB }));\n            fragments = TreeFragment.applyChanges(fragments, ranges);\n            tree = Tree.empty;\n            treeLen = 0;\n            viewport = { from: changes.mapPos(viewport.from, -1), to: changes.mapPos(viewport.to, 1) };\n            if (this.skipped.length) {\n                skipped = [];\n                for (let r of this.skipped) {\n                    let from = changes.mapPos(r.from, 1), to = changes.mapPos(r.to, -1);\n                    if (from < to)\n                        skipped.push({ from, to });\n                }\n            }\n        }\n        return new ParseContext(this.parser, newState, fragments, tree, treeLen, viewport, skipped, this.scheduleOn);\n    }\n    /**\n    @internal\n    */\n    updateViewport(viewport) {\n        if (this.viewport.from == viewport.from && this.viewport.to == viewport.to)\n            return false;\n        this.viewport = viewport;\n        let startLen = this.skipped.length;\n        for (let i = 0; i < this.skipped.length; i++) {\n            let { from, to } = this.skipped[i];\n            if (from < viewport.to && to > viewport.from) {\n                this.fragments = cutFragments(this.fragments, from, to);\n                this.skipped.splice(i--, 1);\n            }\n        }\n        if (this.skipped.length >= startLen)\n            return false;\n        this.reset();\n        return true;\n    }\n    /**\n    @internal\n    */\n    reset() {\n        if (this.parse) {\n            this.takeTree();\n            this.parse = null;\n        }\n    }\n    /**\n    Notify the parse scheduler that the given region was skipped\n    because it wasn't in view, and the parse should be restarted\n    when it comes into view.\n    */\n    skipUntilInView(from, to) {\n        this.skipped.push({ from, to });\n    }\n    /**\n    Returns a parser intended to be used as placeholder when\n    asynchronously loading a nested parser. It'll skip its input and\n    mark it as not-really-parsed, so that the next update will parse\n    it again.\n    \n    When `until` is given, a reparse will be scheduled when that\n    promise resolves.\n    */\n    static getSkippingParser(until) {\n        return new class extends Parser {\n            createParse(input, fragments, ranges) {\n                let from = ranges[0].from, to = ranges[ranges.length - 1].to;\n                let parser = {\n                    parsedPos: from,\n                    advance() {\n                        let cx = currentContext;\n                        if (cx) {\n                            for (let r of ranges)\n                                cx.tempSkipped.push(r);\n                            if (until)\n                                cx.scheduleOn = cx.scheduleOn ? Promise.all([cx.scheduleOn, until]) : until;\n                        }\n                        this.parsedPos = to;\n                        return new Tree(NodeType.none, [], [], to - from);\n                    },\n                    stoppedAt: null,\n                    stopAt() { }\n                };\n                return parser;\n            }\n        };\n    }\n    /**\n    @internal\n    */\n    isDone(upto) {\n        upto = Math.min(upto, this.state.doc.length);\n        let frags = this.fragments;\n        return this.treeLen >= upto && frags.length && frags[0].from == 0 && frags[0].to >= upto;\n    }\n    /**\n    Get the context for the current parse, or `null` if no editor\n    parse is in progress.\n    */\n    static get() { return currentContext; }\n}\nfunction cutFragments(fragments, from, to) {\n    return TreeFragment.applyChanges(fragments, [{ fromA: from, toA: to, fromB: from, toB: to }]);\n}\nclass LanguageState {\n    constructor(\n    // A mutable parse state that is used to preserve work done during\n    // the lifetime of a state when moving to the next state.\n    context) {\n        this.context = context;\n        this.tree = context.tree;\n    }\n    apply(tr) {\n        if (!tr.docChanged && this.tree == this.context.tree)\n            return this;\n        let newCx = this.context.changes(tr.changes, tr.state);\n        // If the previous parse wasn't done, go forward only up to its\n        // end position or the end of the viewport, to avoid slowing down\n        // state updates with parse work beyond the viewport.\n        let upto = this.context.treeLen == tr.startState.doc.length ? undefined\n            : Math.max(tr.changes.mapPos(this.context.treeLen), newCx.viewport.to);\n        if (!newCx.work(20 /* Work.Apply */, upto))\n            newCx.takeTree();\n        return new LanguageState(newCx);\n    }\n    static init(state) {\n        let vpTo = Math.min(3000 /* Work.InitViewport */, state.doc.length);\n        let parseState = ParseContext.create(state.facet(language).parser, state, { from: 0, to: vpTo });\n        if (!parseState.work(20 /* Work.Apply */, vpTo))\n            parseState.takeTree();\n        return new LanguageState(parseState);\n    }\n}\nLanguage.state = /*@__PURE__*/StateField.define({\n    create: LanguageState.init,\n    update(value, tr) {\n        for (let e of tr.effects)\n            if (e.is(Language.setState))\n                return e.value;\n        if (tr.startState.facet(language) != tr.state.facet(language))\n            return LanguageState.init(tr.state);\n        return value.apply(tr);\n    }\n});\nlet requestIdle = (callback) => {\n    let timeout = setTimeout(() => callback(), 500 /* Work.MaxPause */);\n    return () => clearTimeout(timeout);\n};\nif (typeof requestIdleCallback != \"undefined\")\n    requestIdle = (callback) => {\n        let idle = -1, timeout = setTimeout(() => {\n            idle = requestIdleCallback(callback, { timeout: 500 /* Work.MaxPause */ - 100 /* Work.MinPause */ });\n        }, 100 /* Work.MinPause */);\n        return () => idle < 0 ? clearTimeout(timeout) : cancelIdleCallback(idle);\n    };\nconst isInputPending = typeof navigator != \"undefined\" && ((_a = navigator.scheduling) === null || _a === void 0 ? void 0 : _a.isInputPending)\n    ? () => navigator.scheduling.isInputPending() : null;\nconst parseWorker = /*@__PURE__*/ViewPlugin.fromClass(class ParseWorker {\n    constructor(view) {\n        this.view = view;\n        this.working = null;\n        this.workScheduled = 0;\n        // End of the current time chunk\n        this.chunkEnd = -1;\n        // Milliseconds of budget left for this chunk\n        this.chunkBudget = -1;\n        this.work = this.work.bind(this);\n        this.scheduleWork();\n    }\n    update(update) {\n        let cx = this.view.state.field(Language.state).context;\n        if (cx.updateViewport(update.view.viewport) || this.view.viewport.to > cx.treeLen)\n            this.scheduleWork();\n        if (update.docChanged || update.selectionSet) {\n            if (this.view.hasFocus)\n                this.chunkBudget += 50 /* Work.ChangeBonus */;\n            this.scheduleWork();\n        }\n        this.checkAsyncSchedule(cx);\n    }\n    scheduleWork() {\n        if (this.working)\n            return;\n        let { state } = this.view, field = state.field(Language.state);\n        if (field.tree != field.context.tree || !field.context.isDone(state.doc.length))\n            this.working = requestIdle(this.work);\n    }\n    work(deadline) {\n        this.working = null;\n        let now = Date.now();\n        if (this.chunkEnd < now && (this.chunkEnd < 0 || this.view.hasFocus)) { // Start a new chunk\n            this.chunkEnd = now + 30000 /* Work.ChunkTime */;\n            this.chunkBudget = 3000 /* Work.ChunkBudget */;\n        }\n        if (this.chunkBudget <= 0)\n            return; // No more budget\n        let { state, viewport: { to: vpTo } } = this.view, field = state.field(Language.state);\n        if (field.tree == field.context.tree && field.context.isDone(vpTo + 100000 /* Work.MaxParseAhead */))\n            return;\n        let endTime = Date.now() + Math.min(this.chunkBudget, 100 /* Work.Slice */, deadline && !isInputPending ? Math.max(25 /* Work.MinSlice */, deadline.timeRemaining() - 5) : 1e9);\n        let viewportFirst = field.context.treeLen < vpTo && state.doc.length > vpTo + 1000;\n        let done = field.context.work(() => {\n            return isInputPending && isInputPending() || Date.now() > endTime;\n        }, vpTo + (viewportFirst ? 0 : 100000 /* Work.MaxParseAhead */));\n        this.chunkBudget -= Date.now() - now;\n        if (done || this.chunkBudget <= 0) {\n            field.context.takeTree();\n            this.view.dispatch({ effects: Language.setState.of(new LanguageState(field.context)) });\n        }\n        if (this.chunkBudget > 0 && !(done && !viewportFirst))\n            this.scheduleWork();\n        this.checkAsyncSchedule(field.context);\n    }\n    checkAsyncSchedule(cx) {\n        if (cx.scheduleOn) {\n            this.workScheduled++;\n            cx.scheduleOn\n                .then(() => this.scheduleWork())\n                .catch(err => logException(this.view.state, err))\n                .then(() => this.workScheduled--);\n            cx.scheduleOn = null;\n        }\n    }\n    destroy() {\n        if (this.working)\n            this.working();\n    }\n    isWorking() {\n        return !!(this.working || this.workScheduled > 0);\n    }\n}, {\n    eventHandlers: { focus() { this.scheduleWork(); } }\n});\n/**\nThe facet used to associate a language with an editor state. Used\nby `Language` object's `extension` property (so you don't need to\nmanually wrap your languages in this). Can be used to access the\ncurrent language on a state.\n*/\nconst language = /*@__PURE__*/Facet.define({\n    combine(languages) { return languages.length ? languages[0] : null; },\n    enables: language => [\n        Language.state,\n        parseWorker,\n        EditorView.contentAttributes.compute([language], state => {\n            let lang = state.facet(language);\n            return lang && lang.name ? { \"data-language\": lang.name } : {};\n        })\n    ]\n});\n/**\nThis class bundles a [language](https://codemirror.net/6/docs/ref/#language.Language) with an\noptional set of supporting extensions. Language packages are\nencouraged to export a function that optionally takes a\nconfiguration object and returns a `LanguageSupport` instance, as\nthe main way for client code to use the package.\n*/\nclass LanguageSupport {\n    /**\n    Create a language support object.\n    */\n    constructor(\n    /**\n    The language object.\n    */\n    language, \n    /**\n    An optional set of supporting extensions. When nesting a\n    language in another language, the outer language is encouraged\n    to include the supporting extensions for its inner languages\n    in its own set of support extensions.\n    */\n    support = []) {\n        this.language = language;\n        this.support = support;\n        this.extension = [language, support];\n    }\n}\n/**\nLanguage descriptions are used to store metadata about languages\nand to dynamically load them. Their main role is finding the\nappropriate language for a filename or dynamically loading nested\nparsers.\n*/\nclass LanguageDescription {\n    constructor(\n    /**\n    The name of this language.\n    */\n    name, \n    /**\n    Alternative names for the mode (lowercased, includes `this.name`).\n    */\n    alias, \n    /**\n    File extensions associated with this language.\n    */\n    extensions, \n    /**\n    Optional filename pattern that should be associated with this\n    language.\n    */\n    filename, loadFunc, \n    /**\n    If the language has been loaded, this will hold its value.\n    */\n    support = undefined) {\n        this.name = name;\n        this.alias = alias;\n        this.extensions = extensions;\n        this.filename = filename;\n        this.loadFunc = loadFunc;\n        this.support = support;\n        this.loading = null;\n    }\n    /**\n    Start loading the the language. Will return a promise that\n    resolves to a [`LanguageSupport`](https://codemirror.net/6/docs/ref/#language.LanguageSupport)\n    object when the language successfully loads.\n    */\n    load() {\n        return this.loading || (this.loading = this.loadFunc().then(support => this.support = support, err => { this.loading = null; throw err; }));\n    }\n    /**\n    Create a language description.\n    */\n    static of(spec) {\n        let { load, support } = spec;\n        if (!load) {\n            if (!support)\n                throw new RangeError(\"Must pass either 'load' or 'support' to LanguageDescription.of\");\n            load = () => Promise.resolve(support);\n        }\n        return new LanguageDescription(spec.name, (spec.alias || []).concat(spec.name).map(s => s.toLowerCase()), spec.extensions || [], spec.filename, load, support);\n    }\n    /**\n    Look for a language in the given array of descriptions that\n    matches the filename. Will first match\n    [`filename`](https://codemirror.net/6/docs/ref/#language.LanguageDescription.filename) patterns,\n    and then [extensions](https://codemirror.net/6/docs/ref/#language.LanguageDescription.extensions),\n    and return the first language that matches.\n    */\n    static matchFilename(descs, filename) {\n        for (let d of descs)\n            if (d.filename && d.filename.test(filename))\n                return d;\n        let ext = /\\.([^.]+)$/.exec(filename);\n        if (ext)\n            for (let d of descs)\n                if (d.extensions.indexOf(ext[1]) > -1)\n                    return d;\n        return null;\n    }\n    /**\n    Look for a language whose name or alias matches the the given\n    name (case-insensitively). If `fuzzy` is true, and no direct\n    matchs is found, this'll also search for a language whose name\n    or alias occurs in the string (for names shorter than three\n    characters, only when surrounded by non-word characters).\n    */\n    static matchLanguageName(descs, name, fuzzy = true) {\n        name = name.toLowerCase();\n        for (let d of descs)\n            if (d.alias.some(a => a == name))\n                return d;\n        if (fuzzy)\n            for (let d of descs)\n                for (let a of d.alias) {\n                    let found = name.indexOf(a);\n                    if (found > -1 && (a.length > 2 || !/\\w/.test(name[found - 1]) && !/\\w/.test(name[found + a.length])))\n                        return d;\n                }\n        return null;\n    }\n}\n\n/**\nFacet that defines a way to provide a function that computes the\nappropriate indentation depth, as a column number (see\n[`indentString`](https://codemirror.net/6/docs/ref/#language.indentString)), at the start of a given\nline. A return value of `null` indicates no indentation can be\ndetermined, and the line should inherit the indentation of the one\nabove it. A return value of `undefined` defers to the next indent\nservice.\n*/\nconst indentService = /*@__PURE__*/Facet.define();\n/**\nFacet for overriding the unit by which indentation happens. Should\nbe a string consisting either entirely of the same whitespace\ncharacter. When not set, this defaults to 2 spaces.\n*/\nconst indentUnit = /*@__PURE__*/Facet.define({\n    combine: values => {\n        if (!values.length)\n            return \"  \";\n        let unit = values[0];\n        if (!unit || /\\S/.test(unit) || Array.from(unit).some(e => e != unit[0]))\n            throw new Error(\"Invalid indent unit: \" + JSON.stringify(values[0]));\n        return unit;\n    }\n});\n/**\nReturn the _column width_ of an indent unit in the state.\nDetermined by the [`indentUnit`](https://codemirror.net/6/docs/ref/#language.indentUnit)\nfacet, and [`tabSize`](https://codemirror.net/6/docs/ref/#state.EditorState^tabSize) when that\ncontains tabs.\n*/\nfunction getIndentUnit(state) {\n    let unit = state.facet(indentUnit);\n    return unit.charCodeAt(0) == 9 ? state.tabSize * unit.length : unit.length;\n}\n/**\nCreate an indentation string that covers columns 0 to `cols`.\nWill use tabs for as much of the columns as possible when the\n[`indentUnit`](https://codemirror.net/6/docs/ref/#language.indentUnit) facet contains\ntabs.\n*/\nfunction indentString(state, cols) {\n    let result = \"\", ts = state.tabSize, ch = state.facet(indentUnit)[0];\n    if (ch == \"\\t\") {\n        while (cols >= ts) {\n            result += \"\\t\";\n            cols -= ts;\n        }\n        ch = \" \";\n    }\n    for (let i = 0; i < cols; i++)\n        result += ch;\n    return result;\n}\n/**\nGet the indentation, as a column number, at the given position.\nWill first consult any [indent services](https://codemirror.net/6/docs/ref/#language.indentService)\nthat are registered, and if none of those return an indentation,\nthis will check the syntax tree for the [indent node\nprop](https://codemirror.net/6/docs/ref/#language.indentNodeProp) and use that if found. Returns a\nnumber when an indentation could be determined, and null\notherwise.\n*/\nfunction getIndentation(context, pos) {\n    if (context instanceof EditorState)\n        context = new IndentContext(context);\n    for (let service of context.state.facet(indentService)) {\n        let result = service(context, pos);\n        if (result !== undefined)\n            return result;\n    }\n    let tree = syntaxTree(context.state);\n    return tree.length >= pos ? syntaxIndentation(context, tree, pos) : null;\n}\n/**\nCreate a change set that auto-indents all lines touched by the\ngiven document range.\n*/\nfunction indentRange(state, from, to) {\n    let updated = Object.create(null);\n    let context = new IndentContext(state, { overrideIndentation: start => { var _a; return (_a = updated[start]) !== null && _a !== void 0 ? _a : -1; } });\n    let changes = [];\n    for (let pos = from; pos <= to;) {\n        let line = state.doc.lineAt(pos);\n        pos = line.to + 1;\n        let indent = getIndentation(context, line.from);\n        if (indent == null)\n            continue;\n        if (!/\\S/.test(line.text))\n            indent = 0;\n        let cur = /^\\s*/.exec(line.text)[0];\n        let norm = indentString(state, indent);\n        if (cur != norm) {\n            updated[line.from] = indent;\n            changes.push({ from: line.from, to: line.from + cur.length, insert: norm });\n        }\n    }\n    return state.changes(changes);\n}\n/**\nIndentation contexts are used when calling [indentation\nservices](https://codemirror.net/6/docs/ref/#language.indentService). They provide helper utilities\nuseful in indentation logic, and can selectively override the\nindentation reported for some lines.\n*/\nclass IndentContext {\n    /**\n    Create an indent context.\n    */\n    constructor(\n    /**\n    The editor state.\n    */\n    state, \n    /**\n    @internal\n    */\n    options = {}) {\n        this.state = state;\n        this.options = options;\n        this.unit = getIndentUnit(state);\n    }\n    /**\n    Get a description of the line at the given position, taking\n    [simulated line\n    breaks](https://codemirror.net/6/docs/ref/#language.IndentContext.constructor^options.simulateBreak)\n    into account. If there is such a break at `pos`, the `bias`\n    argument determines whether the part of the line line before or\n    after the break is used.\n    */\n    lineAt(pos, bias = 1) {\n        let line = this.state.doc.lineAt(pos);\n        let { simulateBreak, simulateDoubleBreak } = this.options;\n        if (simulateBreak != null && simulateBreak >= line.from && simulateBreak <= line.to) {\n            if (simulateDoubleBreak && simulateBreak == pos)\n                return { text: \"\", from: pos };\n            else if (bias < 0 ? simulateBreak < pos : simulateBreak <= pos)\n                return { text: line.text.slice(simulateBreak - line.from), from: simulateBreak };\n            else\n                return { text: line.text.slice(0, simulateBreak - line.from), from: line.from };\n        }\n        return line;\n    }\n    /**\n    Get the text directly after `pos`, either the entire line\n    or the next 100 characters, whichever is shorter.\n    */\n    textAfterPos(pos, bias = 1) {\n        if (this.options.simulateDoubleBreak && pos == this.options.simulateBreak)\n            return \"\";\n        let { text, from } = this.lineAt(pos, bias);\n        return text.slice(pos - from, Math.min(text.length, pos + 100 - from));\n    }\n    /**\n    Find the column for the given position.\n    */\n    column(pos, bias = 1) {\n        let { text, from } = this.lineAt(pos, bias);\n        let result = this.countColumn(text, pos - from);\n        let override = this.options.overrideIndentation ? this.options.overrideIndentation(from) : -1;\n        if (override > -1)\n            result += override - this.countColumn(text, text.search(/\\S|$/));\n        return result;\n    }\n    /**\n    Find the column position (taking tabs into account) of the given\n    position in the given string.\n    */\n    countColumn(line, pos = line.length) {\n        return countColumn(line, this.state.tabSize, pos);\n    }\n    /**\n    Find the indentation column of the line at the given point.\n    */\n    lineIndent(pos, bias = 1) {\n        let { text, from } = this.lineAt(pos, bias);\n        let override = this.options.overrideIndentation;\n        if (override) {\n            let overriden = override(from);\n            if (overriden > -1)\n                return overriden;\n        }\n        return this.countColumn(text, text.search(/\\S|$/));\n    }\n    /**\n    Returns the [simulated line\n    break](https://codemirror.net/6/docs/ref/#language.IndentContext.constructor^options.simulateBreak)\n    for this context, if any.\n    */\n    get simulatedBreak() {\n        return this.options.simulateBreak || null;\n    }\n}\n/**\nA syntax tree node prop used to associate indentation strategies\nwith node types. Such a strategy is a function from an indentation\ncontext to a column number (see also\n[`indentString`](https://codemirror.net/6/docs/ref/#language.indentString)) or null, where null\nindicates that no definitive indentation can be determined.\n*/\nconst indentNodeProp = /*@__PURE__*/new NodeProp();\n// Compute the indentation for a given position from the syntax tree.\nfunction syntaxIndentation(cx, ast, pos) {\n    let stack = ast.resolveStack(pos);\n    let inner = stack.node.enterUnfinishedNodesBefore(pos);\n    if (inner != stack.node) {\n        let add = [];\n        for (let cur = inner; cur != stack.node; cur = cur.parent)\n            add.push(cur);\n        for (let i = add.length - 1; i >= 0; i--)\n            stack = { node: add[i], next: stack };\n    }\n    return indentFor(stack, cx, pos);\n}\nfunction indentFor(stack, cx, pos) {\n    for (let cur = stack; cur; cur = cur.next) {\n        let strategy = indentStrategy(cur.node);\n        if (strategy)\n            return strategy(TreeIndentContext.create(cx, pos, cur));\n    }\n    return 0;\n}\nfunction ignoreClosed(cx) {\n    return cx.pos == cx.options.simulateBreak && cx.options.simulateDoubleBreak;\n}\nfunction indentStrategy(tree) {\n    let strategy = tree.type.prop(indentNodeProp);\n    if (strategy)\n        return strategy;\n    let first = tree.firstChild, close;\n    if (first && (close = first.type.prop(NodeProp.closedBy))) {\n        let last = tree.lastChild, closed = last && close.indexOf(last.name) > -1;\n        return cx => delimitedStrategy(cx, true, 1, undefined, closed && !ignoreClosed(cx) ? last.from : undefined);\n    }\n    return tree.parent == null ? topIndent : null;\n}\nfunction topIndent() { return 0; }\n/**\nObjects of this type provide context information and helper\nmethods to indentation functions registered on syntax nodes.\n*/\nclass TreeIndentContext extends IndentContext {\n    constructor(base, \n    /**\n    The position at which indentation is being computed.\n    */\n    pos, \n    /**\n    @internal\n    */\n    context) {\n        super(base.state, base.options);\n        this.base = base;\n        this.pos = pos;\n        this.context = context;\n    }\n    /**\n    The syntax tree node to which the indentation strategy\n    applies.\n    */\n    get node() { return this.context.node; }\n    /**\n    @internal\n    */\n    static create(base, pos, context) {\n        return new TreeIndentContext(base, pos, context);\n    }\n    /**\n    Get the text directly after `this.pos`, either the entire line\n    or the next 100 characters, whichever is shorter.\n    */\n    get textAfter() {\n        return this.textAfterPos(this.pos);\n    }\n    /**\n    Get the indentation at the reference line for `this.node`, which\n    is the line on which it starts, unless there is a node that is\n    _not_ a parent of this node covering the start of that line. If\n    so, the line at the start of that node is tried, again skipping\n    on if it is covered by another such node.\n    */\n    get baseIndent() {\n        return this.baseIndentFor(this.node);\n    }\n    /**\n    Get the indentation for the reference line of the given node\n    (see [`baseIndent`](https://codemirror.net/6/docs/ref/#language.TreeIndentContext.baseIndent)).\n    */\n    baseIndentFor(node) {\n        let line = this.state.doc.lineAt(node.from);\n        // Skip line starts that are covered by a sibling (or cousin, etc)\n        for (;;) {\n            let atBreak = node.resolve(line.from);\n            while (atBreak.parent && atBreak.parent.from == atBreak.from)\n                atBreak = atBreak.parent;\n            if (isParent(atBreak, node))\n                break;\n            line = this.state.doc.lineAt(atBreak.from);\n        }\n        return this.lineIndent(line.from);\n    }\n    /**\n    Continue looking for indentations in the node's parent nodes,\n    and return the result of that.\n    */\n    continue() {\n        return indentFor(this.context.next, this.base, this.pos);\n    }\n}\nfunction isParent(parent, of) {\n    for (let cur = of; cur; cur = cur.parent)\n        if (parent == cur)\n            return true;\n    return false;\n}\n// Check whether a delimited node is aligned (meaning there are\n// non-skipped nodes on the same line as the opening delimiter). And\n// if so, return the opening token.\nfunction bracketedAligned(context) {\n    let tree = context.node;\n    let openToken = tree.childAfter(tree.from), last = tree.lastChild;\n    if (!openToken)\n        return null;\n    let sim = context.options.simulateBreak;\n    let openLine = context.state.doc.lineAt(openToken.from);\n    let lineEnd = sim == null || sim <= openLine.from ? openLine.to : Math.min(openLine.to, sim);\n    for (let pos = openToken.to;;) {\n        let next = tree.childAfter(pos);\n        if (!next || next == last)\n            return null;\n        if (!next.type.isSkipped)\n            return next.from < lineEnd ? openToken : null;\n        pos = next.to;\n    }\n}\n/**\nAn indentation strategy for delimited (usually bracketed) nodes.\nWill, by default, indent one unit more than the parent's base\nindent unless the line starts with a closing token. When `align`\nis true and there are non-skipped nodes on the node's opening\nline, the content of the node will be aligned with the end of the\nopening node, like this:\n\n    foo(bar,\n        baz)\n*/\nfunction delimitedIndent({ closing, align = true, units = 1 }) {\n    return (context) => delimitedStrategy(context, align, units, closing);\n}\nfunction delimitedStrategy(context, align, units, closing, closedAt) {\n    let after = context.textAfter, space = after.match(/^\\s*/)[0].length;\n    let closed = closing && after.slice(space, space + closing.length) == closing || closedAt == context.pos + space;\n    let aligned = align ? bracketedAligned(context) : null;\n    if (aligned)\n        return closed ? context.column(aligned.from) : context.column(aligned.to);\n    return context.baseIndent + (closed ? 0 : context.unit * units);\n}\n/**\nAn indentation strategy that aligns a node's content to its base\nindentation.\n*/\nconst flatIndent = (context) => context.baseIndent;\n/**\nCreates an indentation strategy that, by default, indents\ncontinued lines one unit more than the node's base indentation.\nYou can provide `except` to prevent indentation of lines that\nmatch a pattern (for example `/^else\\b/` in `if`/`else`\nconstructs), and you can change the amount of units used with the\n`units` option.\n*/\nfunction continuedIndent({ except, units = 1 } = {}) {\n    return (context) => {\n        let matchExcept = except && except.test(context.textAfter);\n        return context.baseIndent + (matchExcept ? 0 : units * context.unit);\n    };\n}\nconst DontIndentBeyond = 200;\n/**\nEnables reindentation on input. When a language defines an\n`indentOnInput` field in its [language\ndata](https://codemirror.net/6/docs/ref/#state.EditorState.languageDataAt), which must hold a regular\nexpression, the line at the cursor will be reindented whenever new\ntext is typed and the input from the start of the line up to the\ncursor matches that regexp.\n\nTo avoid unneccesary reindents, it is recommended to start the\nregexp with `^` (usually followed by `\\s*`), and end it with `$`.\nFor example, `/^\\s*\\}$/` will reindent when a closing brace is\nadded at the start of a line.\n*/\nfunction indentOnInput() {\n    return EditorState.transactionFilter.of(tr => {\n        if (!tr.docChanged || !tr.isUserEvent(\"input.type\") && !tr.isUserEvent(\"input.complete\"))\n            return tr;\n        let rules = tr.startState.languageDataAt(\"indentOnInput\", tr.startState.selection.main.head);\n        if (!rules.length)\n            return tr;\n        let doc = tr.newDoc, { head } = tr.newSelection.main, line = doc.lineAt(head);\n        if (head > line.from + DontIndentBeyond)\n            return tr;\n        let lineStart = doc.sliceString(line.from, head);\n        if (!rules.some(r => r.test(lineStart)))\n            return tr;\n        let { state } = tr, last = -1, changes = [];\n        for (let { head } of state.selection.ranges) {\n            let line = state.doc.lineAt(head);\n            if (line.from == last)\n                continue;\n            last = line.from;\n            let indent = getIndentation(state, line.from);\n            if (indent == null)\n                continue;\n            let cur = /^\\s*/.exec(line.text)[0];\n            let norm = indentString(state, indent);\n            if (cur != norm)\n                changes.push({ from: line.from, to: line.from + cur.length, insert: norm });\n        }\n        return changes.length ? [tr, { changes, sequential: true }] : tr;\n    });\n}\n\n/**\nA facet that registers a code folding service. When called with\nthe extent of a line, such a function should return a foldable\nrange that starts on that line (but continues beyond it), if one\ncan be found.\n*/\nconst foldService = /*@__PURE__*/Facet.define();\n/**\nThis node prop is used to associate folding information with\nsyntax node types. Given a syntax node, it should check whether\nthat tree is foldable and return the range that can be collapsed\nwhen it is.\n*/\nconst foldNodeProp = /*@__PURE__*/new NodeProp();\n/**\n[Fold](https://codemirror.net/6/docs/ref/#language.foldNodeProp) function that folds everything but\nthe first and the last child of a syntax node. Useful for nodes\nthat start and end with delimiters.\n*/\nfunction foldInside(node) {\n    let first = node.firstChild, last = node.lastChild;\n    return first && first.to < last.from ? { from: first.to, to: last.type.isError ? node.to : last.from } : null;\n}\nfunction syntaxFolding(state, start, end) {\n    let tree = syntaxTree(state);\n    if (tree.length < end)\n        return null;\n    let stack = tree.resolveStack(end, 1);\n    let found = null;\n    for (let iter = stack; iter; iter = iter.next) {\n        let cur = iter.node;\n        if (cur.to <= end || cur.from > end)\n            continue;\n        if (found && cur.from < start)\n            break;\n        let prop = cur.type.prop(foldNodeProp);\n        if (prop && (cur.to < tree.length - 50 || tree.length == state.doc.length || !isUnfinished(cur))) {\n            let value = prop(cur, state);\n            if (value && value.from <= end && value.from >= start && value.to > end)\n                found = value;\n        }\n    }\n    return found;\n}\nfunction isUnfinished(node) {\n    let ch = node.lastChild;\n    return ch && ch.to == node.to && ch.type.isError;\n}\n/**\nCheck whether the given line is foldable. First asks any fold\nservices registered through\n[`foldService`](https://codemirror.net/6/docs/ref/#language.foldService), and if none of them return\na result, tries to query the [fold node\nprop](https://codemirror.net/6/docs/ref/#language.foldNodeProp) of syntax nodes that cover the end\nof the line.\n*/\nfunction foldable(state, lineStart, lineEnd) {\n    for (let service of state.facet(foldService)) {\n        let result = service(state, lineStart, lineEnd);\n        if (result)\n            return result;\n    }\n    return syntaxFolding(state, lineStart, lineEnd);\n}\nfunction mapRange(range, mapping) {\n    let from = mapping.mapPos(range.from, 1), to = mapping.mapPos(range.to, -1);\n    return from >= to ? undefined : { from, to };\n}\n/**\nState effect that can be attached to a transaction to fold the\ngiven range. (You probably only need this in exceptional\ncircumstances\u2014usually you'll just want to let\n[`foldCode`](https://codemirror.net/6/docs/ref/#language.foldCode) and the [fold\ngutter](https://codemirror.net/6/docs/ref/#language.foldGutter) create the transactions.)\n*/\nconst foldEffect = /*@__PURE__*/StateEffect.define({ map: mapRange });\n/**\nState effect that unfolds the given range (if it was folded).\n*/\nconst unfoldEffect = /*@__PURE__*/StateEffect.define({ map: mapRange });\nfunction selectedLines(view) {\n    let lines = [];\n    for (let { head } of view.state.selection.ranges) {\n        if (lines.some(l => l.from <= head && l.to >= head))\n            continue;\n        lines.push(view.lineBlockAt(head));\n    }\n    return lines;\n}\n/**\nThe state field that stores the folded ranges (as a [decoration\nset](https://codemirror.net/6/docs/ref/#view.DecorationSet)). Can be passed to\n[`EditorState.toJSON`](https://codemirror.net/6/docs/ref/#state.EditorState.toJSON) and\n[`fromJSON`](https://codemirror.net/6/docs/ref/#state.EditorState^fromJSON) to serialize the fold\nstate.\n*/\nconst foldState = /*@__PURE__*/StateField.define({\n    create() {\n        return Decoration.none;\n    },\n    update(folded, tr) {\n        folded = folded.map(tr.changes);\n        for (let e of tr.effects) {\n            if (e.is(foldEffect) && !foldExists(folded, e.value.from, e.value.to)) {\n                let { preparePlaceholder } = tr.state.facet(foldConfig);\n                let widget = !preparePlaceholder ? foldWidget :\n                    Decoration.replace({ widget: new PreparedFoldWidget(preparePlaceholder(tr.state, e.value)) });\n                folded = folded.update({ add: [widget.range(e.value.from, e.value.to)] });\n            }\n            else if (e.is(unfoldEffect)) {\n                folded = folded.update({ filter: (from, to) => e.value.from != from || e.value.to != to,\n                    filterFrom: e.value.from, filterTo: e.value.to });\n            }\n        }\n        // Clear folded ranges that cover the selection head\n        if (tr.selection) {\n            let onSelection = false, { head } = tr.selection.main;\n            folded.between(head, head, (a, b) => { if (a < head && b > head)\n                onSelection = true; });\n            if (onSelection)\n                folded = folded.update({\n                    filterFrom: head,\n                    filterTo: head,\n                    filter: (a, b) => b <= head || a >= head\n                });\n        }\n        return folded;\n    },\n    provide: f => EditorView.decorations.from(f),\n    toJSON(folded, state) {\n        let ranges = [];\n        folded.between(0, state.doc.length, (from, to) => { ranges.push(from, to); });\n        return ranges;\n    },\n    fromJSON(value) {\n        if (!Array.isArray(value) || value.length % 2)\n            throw new RangeError(\"Invalid JSON for fold state\");\n        let ranges = [];\n        for (let i = 0; i < value.length;) {\n            let from = value[i++], to = value[i++];\n            if (typeof from != \"number\" || typeof to != \"number\")\n                throw new RangeError(\"Invalid JSON for fold state\");\n            ranges.push(foldWidget.range(from, to));\n        }\n        return Decoration.set(ranges, true);\n    }\n});\n/**\nGet a [range set](https://codemirror.net/6/docs/ref/#state.RangeSet) containing the folded ranges\nin the given state.\n*/\nfunction foldedRanges(state) {\n    return state.field(foldState, false) || RangeSet.empty;\n}\nfunction findFold(state, from, to) {\n    var _a;\n    let found = null;\n    (_a = state.field(foldState, false)) === null || _a === void 0 ? void 0 : _a.between(from, to, (from, to) => {\n        if (!found || found.from > from)\n            found = { from, to };\n    });\n    return found;\n}\nfunction foldExists(folded, from, to) {\n    let found = false;\n    folded.between(from, from, (a, b) => { if (a == from && b == to)\n        found = true; });\n    return found;\n}\nfunction maybeEnable(state, other) {\n    return state.field(foldState, false) ? other : other.concat(StateEffect.appendConfig.of(codeFolding()));\n}\n/**\nFold the lines that are selected, if possible.\n*/\nconst foldCode = view => {\n    for (let line of selectedLines(view)) {\n        let range = foldable(view.state, line.from, line.to);\n        if (range) {\n            view.dispatch({ effects: maybeEnable(view.state, [foldEffect.of(range), announceFold(view, range)]) });\n            return true;\n        }\n    }\n    return false;\n};\n/**\nUnfold folded ranges on selected lines.\n*/\nconst unfoldCode = view => {\n    if (!view.state.field(foldState, false))\n        return false;\n    let effects = [];\n    for (let line of selectedLines(view)) {\n        let folded = findFold(view.state, line.from, line.to);\n        if (folded)\n            effects.push(unfoldEffect.of(folded), announceFold(view, folded, false));\n    }\n    if (effects.length)\n        view.dispatch({ effects });\n    return effects.length > 0;\n};\nfunction announceFold(view, range, fold = true) {\n    let lineFrom = view.state.doc.lineAt(range.from).number, lineTo = view.state.doc.lineAt(range.to).number;\n    return EditorView.announce.of(`${view.state.phrase(fold ? \"Folded lines\" : \"Unfolded lines\")} ${lineFrom} ${view.state.phrase(\"to\")} ${lineTo}.`);\n}\n/**\nFold all top-level foldable ranges. Note that, in most cases,\nfolding information will depend on the [syntax\ntree](https://codemirror.net/6/docs/ref/#language.syntaxTree), and folding everything may not work\nreliably when the document hasn't been fully parsed (either\nbecause the editor state was only just initialized, or because the\ndocument is so big that the parser decided not to parse it\nentirely).\n*/\nconst foldAll = view => {\n    let { state } = view, effects = [];\n    for (let pos = 0; pos < state.doc.length;) {\n        let line = view.lineBlockAt(pos), range = foldable(state, line.from, line.to);\n        if (range)\n            effects.push(foldEffect.of(range));\n        pos = (range ? view.lineBlockAt(range.to) : line).to + 1;\n    }\n    if (effects.length)\n        view.dispatch({ effects: maybeEnable(view.state, effects) });\n    return !!effects.length;\n};\n/**\nUnfold all folded code.\n*/\nconst unfoldAll = view => {\n    let field = view.state.field(foldState, false);\n    if (!field || !field.size)\n        return false;\n    let effects = [];\n    field.between(0, view.state.doc.length, (from, to) => { effects.push(unfoldEffect.of({ from, to })); });\n    view.dispatch({ effects });\n    return true;\n};\n// Find the foldable region containing the given line, if one exists\nfunction foldableContainer(view, lineBlock) {\n    // Look backwards through line blocks until we find a foldable region that\n    // intersects with the line\n    for (let line = lineBlock;;) {\n        let foldableRegion = foldable(view.state, line.from, line.to);\n        if (foldableRegion && foldableRegion.to > lineBlock.from)\n            return foldableRegion;\n        if (!line.from)\n            return null;\n        line = view.lineBlockAt(line.from - 1);\n    }\n}\n/**\nToggle folding at cursors. Unfolds if there is an existing fold\nstarting in that line, tries to find a foldable range around it\notherwise.\n*/\nconst toggleFold = (view) => {\n    let effects = [];\n    for (let line of selectedLines(view)) {\n        let folded = findFold(view.state, line.from, line.to);\n        if (folded) {\n            effects.push(unfoldEffect.of(folded), announceFold(view, folded, false));\n        }\n        else {\n            let foldRange = foldableContainer(view, line);\n            if (foldRange)\n                effects.push(foldEffect.of(foldRange), announceFold(view, foldRange));\n        }\n    }\n    if (effects.length > 0)\n        view.dispatch({ effects: maybeEnable(view.state, effects) });\n    return !!effects.length;\n};\n/**\nDefault fold-related key bindings.\n\n - Ctrl-Shift-[ (Cmd-Alt-[ on macOS): [`foldCode`](https://codemirror.net/6/docs/ref/#language.foldCode).\n - Ctrl-Shift-] (Cmd-Alt-] on macOS): [`unfoldCode`](https://codemirror.net/6/docs/ref/#language.unfoldCode).\n - Ctrl-Alt-[: [`foldAll`](https://codemirror.net/6/docs/ref/#language.foldAll).\n - Ctrl-Alt-]: [`unfoldAll`](https://codemirror.net/6/docs/ref/#language.unfoldAll).\n*/\nconst foldKeymap = [\n    { key: \"Ctrl-Shift-[\", mac: \"Cmd-Alt-[\", run: foldCode },\n    { key: \"Ctrl-Shift-]\", mac: \"Cmd-Alt-]\", run: unfoldCode },\n    { key: \"Ctrl-Alt-[\", run: foldAll },\n    { key: \"Ctrl-Alt-]\", run: unfoldAll }\n];\nconst defaultConfig = {\n    placeholderDOM: null,\n    preparePlaceholder: null,\n    placeholderText: \"\u2026\"\n};\nconst foldConfig = /*@__PURE__*/Facet.define({\n    combine(values) { return combineConfig(values, defaultConfig); }\n});\n/**\nCreate an extension that configures code folding.\n*/\nfunction codeFolding(config) {\n    let result = [foldState, baseTheme$1];\n    if (config)\n        result.push(foldConfig.of(config));\n    return result;\n}\nfunction widgetToDOM(view, prepared) {\n    let { state } = view, conf = state.facet(foldConfig);\n    let onclick = (event) => {\n        let line = view.lineBlockAt(view.posAtDOM(event.target));\n        let folded = findFold(view.state, line.from, line.to);\n        if (folded)\n            view.dispatch({ effects: unfoldEffect.of(folded) });\n        event.preventDefault();\n    };\n    if (conf.placeholderDOM)\n        return conf.placeholderDOM(view, onclick, prepared);\n    let element = document.createElement(\"span\");\n    element.textContent = conf.placeholderText;\n    element.setAttribute(\"aria-label\", state.phrase(\"folded code\"));\n    element.title = state.phrase(\"unfold\");\n    element.className = \"cm-foldPlaceholder\";\n    element.onclick = onclick;\n    return element;\n}\nconst foldWidget = /*@__PURE__*/Decoration.replace({ widget: /*@__PURE__*/new class extends WidgetType {\n        toDOM(view) { return widgetToDOM(view, null); }\n    } });\nclass PreparedFoldWidget extends WidgetType {\n    constructor(value) {\n        super();\n        this.value = value;\n    }\n    eq(other) { return this.value == other.value; }\n    toDOM(view) { return widgetToDOM(view, this.value); }\n}\nconst foldGutterDefaults = {\n    openText: \"\u2304\",\n    closedText: \"\u203A\",\n    markerDOM: null,\n    domEventHandlers: {},\n    foldingChanged: () => false\n};\nclass FoldMarker extends GutterMarker {\n    constructor(config, open) {\n        super();\n        this.config = config;\n        this.open = open;\n    }\n    eq(other) { return this.config == other.config && this.open == other.open; }\n    toDOM(view) {\n        if (this.config.markerDOM)\n            return this.config.markerDOM(this.open);\n        let span = document.createElement(\"span\");\n        span.textContent = this.open ? this.config.openText : this.config.closedText;\n        span.title = view.state.phrase(this.open ? \"Fold line\" : \"Unfold line\");\n        return span;\n    }\n}\n/**\nCreate an extension that registers a fold gutter, which shows a\nfold status indicator before foldable lines (which can be clicked\nto fold or unfold the line).\n*/\nfunction foldGutter(config = {}) {\n    let fullConfig = Object.assign(Object.assign({}, foldGutterDefaults), config);\n    let canFold = new FoldMarker(fullConfig, true), canUnfold = new FoldMarker(fullConfig, false);\n    let markers = ViewPlugin.fromClass(class {\n        constructor(view) {\n            this.from = view.viewport.from;\n            this.markers = this.buildMarkers(view);\n        }\n        update(update) {\n            if (update.docChanged || update.viewportChanged ||\n                update.startState.facet(language) != update.state.facet(language) ||\n                update.startState.field(foldState, false) != update.state.field(foldState, false) ||\n                syntaxTree(update.startState) != syntaxTree(update.state) ||\n                fullConfig.foldingChanged(update))\n                this.markers = this.buildMarkers(update.view);\n        }\n        buildMarkers(view) {\n            let builder = new RangeSetBuilder();\n            for (let line of view.viewportLineBlocks) {\n                let mark = findFold(view.state, line.from, line.to) ? canUnfold\n                    : foldable(view.state, line.from, line.to) ? canFold : null;\n                if (mark)\n                    builder.add(line.from, line.from, mark);\n            }\n            return builder.finish();\n        }\n    });\n    let { domEventHandlers } = fullConfig;\n    return [\n        markers,\n        gutter({\n            class: \"cm-foldGutter\",\n            markers(view) { var _a; return ((_a = view.plugin(markers)) === null || _a === void 0 ? void 0 : _a.markers) || RangeSet.empty; },\n            initialSpacer() {\n                return new FoldMarker(fullConfig, false);\n            },\n            domEventHandlers: Object.assign(Object.assign({}, domEventHandlers), { click: (view, line, event) => {\n                    if (domEventHandlers.click && domEventHandlers.click(view, line, event))\n                        return true;\n                    let folded = findFold(view.state, line.from, line.to);\n                    if (folded) {\n                        view.dispatch({ effects: unfoldEffect.of(folded) });\n                        return true;\n                    }\n                    let range = foldable(view.state, line.from, line.to);\n                    if (range) {\n                        view.dispatch({ effects: foldEffect.of(range) });\n                        return true;\n                    }\n                    return false;\n                } })\n        }),\n        codeFolding()\n    ];\n}\nconst baseTheme$1 = /*@__PURE__*/EditorView.baseTheme({\n    \".cm-foldPlaceholder\": {\n        backgroundColor: \"#eee\",\n        border: \"1px solid #ddd\",\n        color: \"#888\",\n        borderRadius: \".2em\",\n        margin: \"0 1px\",\n        padding: \"0 1px\",\n        cursor: \"pointer\"\n    },\n    \".cm-foldGutter span\": {\n        padding: \"0 1px\",\n        cursor: \"pointer\"\n    }\n});\n\n/**\nA highlight style associates CSS styles with higlighting\n[tags](https://lezer.codemirror.net/docs/ref#highlight.Tag).\n*/\nclass HighlightStyle {\n    constructor(\n    /**\n    The tag styles used to create this highlight style.\n    */\n    specs, options) {\n        this.specs = specs;\n        let modSpec;\n        function def(spec) {\n            let cls = StyleModule.newName();\n            (modSpec || (modSpec = Object.create(null)))[\".\" + cls] = spec;\n            return cls;\n        }\n        const all = typeof options.all == \"string\" ? options.all : options.all ? def(options.all) : undefined;\n        const scopeOpt = options.scope;\n        this.scope = scopeOpt instanceof Language ? (type) => type.prop(languageDataProp) == scopeOpt.data\n            : scopeOpt ? (type) => type == scopeOpt : undefined;\n        this.style = tagHighlighter(specs.map(style => ({\n            tag: style.tag,\n            class: style.class || def(Object.assign({}, style, { tag: null }))\n        })), {\n            all,\n        }).style;\n        this.module = modSpec ? new StyleModule(modSpec) : null;\n        this.themeType = options.themeType;\n    }\n    /**\n    Create a highlighter style that associates the given styles to\n    the given tags. The specs must be objects that hold a style tag\n    or array of tags in their `tag` property, and either a single\n    `class` property providing a static CSS class (for highlighter\n    that rely on external styling), or a\n    [`style-mod`](https://github.com/marijnh/style-mod#documentation)-style\n    set of CSS properties (which define the styling for those tags).\n    \n    The CSS rules created for a highlighter will be emitted in the\n    order of the spec's properties. That means that for elements that\n    have multiple tags associated with them, styles defined further\n    down in the list will have a higher CSS precedence than styles\n    defined earlier.\n    */\n    static define(specs, options) {\n        return new HighlightStyle(specs, options || {});\n    }\n}\nconst highlighterFacet = /*@__PURE__*/Facet.define();\nconst fallbackHighlighter = /*@__PURE__*/Facet.define({\n    combine(values) { return values.length ? [values[0]] : null; }\n});\nfunction getHighlighters(state) {\n    let main = state.facet(highlighterFacet);\n    return main.length ? main : state.facet(fallbackHighlighter);\n}\n/**\nWrap a highlighter in an editor extension that uses it to apply\nsyntax highlighting to the editor content.\n\nWhen multiple (non-fallback) styles are provided, the styling\napplied is the union of the classes they emit.\n*/\nfunction syntaxHighlighting(highlighter, options) {\n    let ext = [treeHighlighter], themeType;\n    if (highlighter instanceof HighlightStyle) {\n        if (highlighter.module)\n            ext.push(EditorView.styleModule.of(highlighter.module));\n        themeType = highlighter.themeType;\n    }\n    if (options === null || options === void 0 ? void 0 : options.fallback)\n        ext.push(fallbackHighlighter.of(highlighter));\n    else if (themeType)\n        ext.push(highlighterFacet.computeN([EditorView.darkTheme], state => {\n            return state.facet(EditorView.darkTheme) == (themeType == \"dark\") ? [highlighter] : [];\n        }));\n    else\n        ext.push(highlighterFacet.of(highlighter));\n    return ext;\n}\n/**\nReturns the CSS classes (if any) that the highlighters active in\nthe state would assign to the given style\n[tags](https://lezer.codemirror.net/docs/ref#highlight.Tag) and\n(optional) language\n[scope](https://codemirror.net/6/docs/ref/#language.HighlightStyle^define^options.scope).\n*/\nfunction highlightingFor(state, tags, scope) {\n    let highlighters = getHighlighters(state);\n    let result = null;\n    if (highlighters)\n        for (let highlighter of highlighters) {\n            if (!highlighter.scope || scope && highlighter.scope(scope)) {\n                let cls = highlighter.style(tags);\n                if (cls)\n                    result = result ? result + \" \" + cls : cls;\n            }\n        }\n    return result;\n}\nclass TreeHighlighter {\n    constructor(view) {\n        this.markCache = Object.create(null);\n        this.tree = syntaxTree(view.state);\n        this.decorations = this.buildDeco(view, getHighlighters(view.state));\n    }\n    update(update) {\n        let tree = syntaxTree(update.state), highlighters = getHighlighters(update.state);\n        let styleChange = highlighters != getHighlighters(update.startState);\n        if (tree.length < update.view.viewport.to && !styleChange && tree.type == this.tree.type) {\n            this.decorations = this.decorations.map(update.changes);\n        }\n        else if (tree != this.tree || update.viewportChanged || styleChange) {\n            this.tree = tree;\n            this.decorations = this.buildDeco(update.view, highlighters);\n        }\n    }\n    buildDeco(view, highlighters) {\n        if (!highlighters || !this.tree.length)\n            return Decoration.none;\n        let builder = new RangeSetBuilder();\n        for (let { from, to } of view.visibleRanges) {\n            highlightTree(this.tree, highlighters, (from, to, style) => {\n                builder.add(from, to, this.markCache[style] || (this.markCache[style] = Decoration.mark({ class: style })));\n            }, from, to);\n        }\n        return builder.finish();\n    }\n}\nconst treeHighlighter = /*@__PURE__*/Prec.high(/*@__PURE__*/ViewPlugin.fromClass(TreeHighlighter, {\n    decorations: v => v.decorations\n}));\n/**\nA default highlight style (works well with light themes).\n*/\nconst defaultHighlightStyle = /*@__PURE__*/HighlightStyle.define([\n    { tag: tags.meta,\n        color: \"#404740\" },\n    { tag: tags.link,\n        textDecoration: \"underline\" },\n    { tag: tags.heading,\n        textDecoration: \"underline\",\n        fontWeight: \"bold\" },\n    { tag: tags.emphasis,\n        fontStyle: \"italic\" },\n    { tag: tags.strong,\n        fontWeight: \"bold\" },\n    { tag: tags.strikethrough,\n        textDecoration: \"line-through\" },\n    { tag: tags.keyword,\n        color: \"#708\" },\n    { tag: [tags.atom, tags.bool, tags.url, tags.contentSeparator, tags.labelName],\n        color: \"#219\" },\n    { tag: [tags.literal, tags.inserted],\n        color: \"#164\" },\n    { tag: [tags.string, tags.deleted],\n        color: \"#a11\" },\n    { tag: [tags.regexp, tags.escape, /*@__PURE__*/tags.special(tags.string)],\n        color: \"#e40\" },\n    { tag: /*@__PURE__*/tags.definition(tags.variableName),\n        color: \"#00f\" },\n    { tag: /*@__PURE__*/tags.local(tags.variableName),\n        color: \"#30a\" },\n    { tag: [tags.typeName, tags.namespace],\n        color: \"#085\" },\n    { tag: tags.className,\n        color: \"#167\" },\n    { tag: [/*@__PURE__*/tags.special(tags.variableName), tags.macroName],\n        color: \"#256\" },\n    { tag: /*@__PURE__*/tags.definition(tags.propertyName),\n        color: \"#00c\" },\n    { tag: tags.comment,\n        color: \"#940\" },\n    { tag: tags.invalid,\n        color: \"#f00\" }\n]);\n\nconst baseTheme = /*@__PURE__*/EditorView.baseTheme({\n    \"&.cm-focused .cm-matchingBracket\": { backgroundColor: \"#328c8252\" },\n    \"&.cm-focused .cm-nonmatchingBracket\": { backgroundColor: \"#bb555544\" }\n});\nconst DefaultScanDist = 10000, DefaultBrackets = \"()[]{}\";\nconst bracketMatchingConfig = /*@__PURE__*/Facet.define({\n    combine(configs) {\n        return combineConfig(configs, {\n            afterCursor: true,\n            brackets: DefaultBrackets,\n            maxScanDistance: DefaultScanDist,\n            renderMatch: defaultRenderMatch\n        });\n    }\n});\nconst matchingMark = /*@__PURE__*/Decoration.mark({ class: \"cm-matchingBracket\" }), nonmatchingMark = /*@__PURE__*/Decoration.mark({ class: \"cm-nonmatchingBracket\" });\nfunction defaultRenderMatch(match) {\n    let decorations = [];\n    let mark = match.matched ? matchingMark : nonmatchingMark;\n    decorations.push(mark.range(match.start.from, match.start.to));\n    if (match.end)\n        decorations.push(mark.range(match.end.from, match.end.to));\n    return decorations;\n}\nconst bracketMatchingState = /*@__PURE__*/StateField.define({\n    create() { return Decoration.none; },\n    update(deco, tr) {\n        if (!tr.docChanged && !tr.selection)\n            return deco;\n        let decorations = [];\n        let config = tr.state.facet(bracketMatchingConfig);\n        for (let range of tr.state.selection.ranges) {\n            if (!range.empty)\n                continue;\n            let match = matchBrackets(tr.state, range.head, -1, config)\n                || (range.head > 0 && matchBrackets(tr.state, range.head - 1, 1, config))\n                || (config.afterCursor &&\n                    (matchBrackets(tr.state, range.head, 1, config) ||\n                        (range.head < tr.state.doc.length && matchBrackets(tr.state, range.head + 1, -1, config))));\n            if (match)\n                decorations = decorations.concat(config.renderMatch(match, tr.state));\n        }\n        return Decoration.set(decorations, true);\n    },\n    provide: f => EditorView.decorations.from(f)\n});\nconst bracketMatchingUnique = [\n    bracketMatchingState,\n    baseTheme\n];\n/**\nCreate an extension that enables bracket matching. Whenever the\ncursor is next to a bracket, that bracket and the one it matches\nare highlighted. Or, when no matching bracket is found, another\nhighlighting style is used to indicate this.\n*/\nfunction bracketMatching(config = {}) {\n    return [bracketMatchingConfig.of(config), bracketMatchingUnique];\n}\n/**\nWhen larger syntax nodes, such as HTML tags, are marked as\nopening/closing, it can be a bit messy to treat the whole node as\na matchable bracket. This node prop allows you to define, for such\na node, a \u2018handle\u2019\u2014the part of the node that is highlighted, and\nthat the cursor must be on to activate highlighting in the first\nplace.\n*/\nconst bracketMatchingHandle = /*@__PURE__*/new NodeProp();\nfunction matchingNodes(node, dir, brackets) {\n    let byProp = node.prop(dir < 0 ? NodeProp.openedBy : NodeProp.closedBy);\n    if (byProp)\n        return byProp;\n    if (node.name.length == 1) {\n        let index = brackets.indexOf(node.name);\n        if (index > -1 && index % 2 == (dir < 0 ? 1 : 0))\n            return [brackets[index + dir]];\n    }\n    return null;\n}\nfunction findHandle(node) {\n    let hasHandle = node.type.prop(bracketMatchingHandle);\n    return hasHandle ? hasHandle(node.node) : node;\n}\n/**\nFind the matching bracket for the token at `pos`, scanning\ndirection `dir`. Only the `brackets` and `maxScanDistance`\nproperties are used from `config`, if given. Returns null if no\nbracket was found at `pos`, or a match result otherwise.\n*/\nfunction matchBrackets(state, pos, dir, config = {}) {\n    let maxScanDistance = config.maxScanDistance || DefaultScanDist, brackets = config.brackets || DefaultBrackets;\n    let tree = syntaxTree(state), node = tree.resolveInner(pos, dir);\n    for (let cur = node; cur; cur = cur.parent) {\n        let matches = matchingNodes(cur.type, dir, brackets);\n        if (matches && cur.from < cur.to) {\n            let handle = findHandle(cur);\n            if (handle && (dir > 0 ? pos >= handle.from && pos < handle.to : pos > handle.from && pos <= handle.to))\n                return matchMarkedBrackets(state, pos, dir, cur, handle, matches, brackets);\n        }\n    }\n    return matchPlainBrackets(state, pos, dir, tree, node.type, maxScanDistance, brackets);\n}\nfunction matchMarkedBrackets(_state, _pos, dir, token, handle, matching, brackets) {\n    let parent = token.parent, firstToken = { from: handle.from, to: handle.to };\n    let depth = 0, cursor = parent === null || parent === void 0 ? void 0 : parent.cursor();\n    if (cursor && (dir < 0 ? cursor.childBefore(token.from) : cursor.childAfter(token.to)))\n        do {\n            if (dir < 0 ? cursor.to <= token.from : cursor.from >= token.to) {\n                if (depth == 0 && matching.indexOf(cursor.type.name) > -1 && cursor.from < cursor.to) {\n                    let endHandle = findHandle(cursor);\n                    return { start: firstToken, end: endHandle ? { from: endHandle.from, to: endHandle.to } : undefined, matched: true };\n                }\n                else if (matchingNodes(cursor.type, dir, brackets)) {\n                    depth++;\n                }\n                else if (matchingNodes(cursor.type, -dir, brackets)) {\n                    if (depth == 0) {\n                        let endHandle = findHandle(cursor);\n                        return {\n                            start: firstToken,\n                            end: endHandle && endHandle.from < endHandle.to ? { from: endHandle.from, to: endHandle.to } : undefined,\n                            matched: false\n                        };\n                    }\n                    depth--;\n                }\n            }\n        } while (dir < 0 ? cursor.prevSibling() : cursor.nextSibling());\n    return { start: firstToken, matched: false };\n}\nfunction matchPlainBrackets(state, pos, dir, tree, tokenType, maxScanDistance, brackets) {\n    let startCh = dir < 0 ? state.sliceDoc(pos - 1, pos) : state.sliceDoc(pos, pos + 1);\n    let bracket = brackets.indexOf(startCh);\n    if (bracket < 0 || (bracket % 2 == 0) != (dir > 0))\n        return null;\n    let startToken = { from: dir < 0 ? pos - 1 : pos, to: dir > 0 ? pos + 1 : pos };\n    let iter = state.doc.iterRange(pos, dir > 0 ? state.doc.length : 0), depth = 0;\n    for (let distance = 0; !(iter.next()).done && distance <= maxScanDistance;) {\n        let text = iter.value;\n        if (dir < 0)\n            distance += text.length;\n        let basePos = pos + distance * dir;\n        for (let pos = dir > 0 ? 0 : text.length - 1, end = dir > 0 ? text.length : -1; pos != end; pos += dir) {\n            let found = brackets.indexOf(text[pos]);\n            if (found < 0 || tree.resolveInner(basePos + pos, 1).type != tokenType)\n                continue;\n            if ((found % 2 == 0) == (dir > 0)) {\n                depth++;\n            }\n            else if (depth == 1) { // Closing\n                return { start: startToken, end: { from: basePos + pos, to: basePos + pos + 1 }, matched: (found >> 1) == (bracket >> 1) };\n            }\n            else {\n                depth--;\n            }\n        }\n        if (dir > 0)\n            distance += text.length;\n    }\n    return iter.done ? { start: startToken, matched: false } : null;\n}\n\n// Counts the column offset in a string, taking tabs into account.\n// Used mostly to find indentation.\nfunction countCol(string, end, tabSize, startIndex = 0, startValue = 0) {\n    if (end == null) {\n        end = string.search(/[^\\s\\u00a0]/);\n        if (end == -1)\n            end = string.length;\n    }\n    let n = startValue;\n    for (let i = startIndex; i < end; i++) {\n        if (string.charCodeAt(i) == 9)\n            n += tabSize - (n % tabSize);\n        else\n            n++;\n    }\n    return n;\n}\n/**\nEncapsulates a single line of input. Given to stream syntax code,\nwhich uses it to tokenize the content.\n*/\nclass StringStream {\n    /**\n    Create a stream.\n    */\n    constructor(\n    /**\n    The line.\n    */\n    string, tabSize, \n    /**\n    The current indent unit size.\n    */\n    indentUnit, overrideIndent) {\n        this.string = string;\n        this.tabSize = tabSize;\n        this.indentUnit = indentUnit;\n        this.overrideIndent = overrideIndent;\n        /**\n        The current position on the line.\n        */\n        this.pos = 0;\n        /**\n        The start position of the current token.\n        */\n        this.start = 0;\n        this.lastColumnPos = 0;\n        this.lastColumnValue = 0;\n    }\n    /**\n    True if we are at the end of the line.\n    */\n    eol() { return this.pos >= this.string.length; }\n    /**\n    True if we are at the start of the line.\n    */\n    sol() { return this.pos == 0; }\n    /**\n    Get the next code unit after the current position, or undefined\n    if we're at the end of the line.\n    */\n    peek() { return this.string.charAt(this.pos) || undefined; }\n    /**\n    Read the next code unit and advance `this.pos`.\n    */\n    next() {\n        if (this.pos < this.string.length)\n            return this.string.charAt(this.pos++);\n    }\n    /**\n    Match the next character against the given string, regular\n    expression, or predicate. Consume and return it if it matches.\n    */\n    eat(match) {\n        let ch = this.string.charAt(this.pos);\n        let ok;\n        if (typeof match == \"string\")\n            ok = ch == match;\n        else\n            ok = ch && (match instanceof RegExp ? match.test(ch) : match(ch));\n        if (ok) {\n            ++this.pos;\n            return ch;\n        }\n    }\n    /**\n    Continue matching characters that match the given string,\n    regular expression, or predicate function. Return true if any\n    characters were consumed.\n    */\n    eatWhile(match) {\n        let start = this.pos;\n        while (this.eat(match)) { }\n        return this.pos > start;\n    }\n    /**\n    Consume whitespace ahead of `this.pos`. Return true if any was\n    found.\n    */\n    eatSpace() {\n        let start = this.pos;\n        while (/[\\s\\u00a0]/.test(this.string.charAt(this.pos)))\n            ++this.pos;\n        return this.pos > start;\n    }\n    /**\n    Move to the end of the line.\n    */\n    skipToEnd() { this.pos = this.string.length; }\n    /**\n    Move to directly before the given character, if found on the\n    current line.\n    */\n    skipTo(ch) {\n        let found = this.string.indexOf(ch, this.pos);\n        if (found > -1) {\n            this.pos = found;\n            return true;\n        }\n    }\n    /**\n    Move back `n` characters.\n    */\n    backUp(n) { this.pos -= n; }\n    /**\n    Get the column position at `this.pos`.\n    */\n    column() {\n        if (this.lastColumnPos < this.start) {\n            this.lastColumnValue = countCol(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue);\n            this.lastColumnPos = this.start;\n        }\n        return this.lastColumnValue;\n    }\n    /**\n    Get the indentation column of the current line.\n    */\n    indentation() {\n        var _a;\n        return (_a = this.overrideIndent) !== null && _a !== void 0 ? _a : countCol(this.string, null, this.tabSize);\n    }\n    /**\n    Match the input against the given string or regular expression\n    (which should start with a `^`). Return true or the regexp match\n    if it matches.\n    \n    Unless `consume` is set to `false`, this will move `this.pos`\n    past the matched text.\n    \n    When matching a string `caseInsensitive` can be set to true to\n    make the match case-insensitive.\n    */\n    match(pattern, consume, caseInsensitive) {\n        if (typeof pattern == \"string\") {\n            let cased = (str) => caseInsensitive ? str.toLowerCase() : str;\n            let substr = this.string.substr(this.pos, pattern.length);\n            if (cased(substr) == cased(pattern)) {\n                if (consume !== false)\n                    this.pos += pattern.length;\n                return true;\n            }\n            else\n                return null;\n        }\n        else {\n            let match = this.string.slice(this.pos).match(pattern);\n            if (match && match.index > 0)\n                return null;\n            if (match && consume !== false)\n                this.pos += match[0].length;\n            return match;\n        }\n    }\n    /**\n    Get the current token.\n    */\n    current() { return this.string.slice(this.start, this.pos); }\n}\n\nfunction fullParser(spec) {\n    return {\n        name: spec.name || \"\",\n        token: spec.token,\n        blankLine: spec.blankLine || (() => { }),\n        startState: spec.startState || (() => true),\n        copyState: spec.copyState || defaultCopyState,\n        indent: spec.indent || (() => null),\n        languageData: spec.languageData || {},\n        tokenTable: spec.tokenTable || noTokens\n    };\n}\nfunction defaultCopyState(state) {\n    if (typeof state != \"object\")\n        return state;\n    let newState = {};\n    for (let prop in state) {\n        let val = state[prop];\n        newState[prop] = (val instanceof Array ? val.slice() : val);\n    }\n    return newState;\n}\nconst IndentedFrom = /*@__PURE__*/new WeakMap();\n/**\nA [language](https://codemirror.net/6/docs/ref/#language.Language) class based on a CodeMirror\n5-style [streaming parser](https://codemirror.net/6/docs/ref/#language.StreamParser).\n*/\nclass StreamLanguage extends Language {\n    constructor(parser) {\n        let data = defineLanguageFacet(parser.languageData);\n        let p = fullParser(parser), self;\n        let impl = new class extends Parser {\n            createParse(input, fragments, ranges) {\n                return new Parse(self, input, fragments, ranges);\n            }\n        };\n        super(data, impl, [indentService.of((cx, pos) => this.getIndent(cx, pos))], parser.name);\n        this.topNode = docID(data);\n        self = this;\n        this.streamParser = p;\n        this.stateAfter = new NodeProp({ perNode: true });\n        this.tokenTable = parser.tokenTable ? new TokenTable(p.tokenTable) : defaultTokenTable;\n    }\n    /**\n    Define a stream language.\n    */\n    static define(spec) { return new StreamLanguage(spec); }\n    getIndent(cx, pos) {\n        let tree = syntaxTree(cx.state), at = tree.resolve(pos);\n        while (at && at.type != this.topNode)\n            at = at.parent;\n        if (!at)\n            return null;\n        let from = undefined;\n        let { overrideIndentation } = cx.options;\n        if (overrideIndentation) {\n            from = IndentedFrom.get(cx.state);\n            if (from != null && from < pos - 1e4)\n                from = undefined;\n        }\n        let start = findState(this, tree, 0, at.from, from !== null && from !== void 0 ? from : pos), statePos, state;\n        if (start) {\n            state = start.state;\n            statePos = start.pos + 1;\n        }\n        else {\n            state = this.streamParser.startState(cx.unit);\n            statePos = 0;\n        }\n        if (pos - statePos > 10000 /* C.MaxIndentScanDist */)\n            return null;\n        while (statePos < pos) {\n            let line = cx.state.doc.lineAt(statePos), end = Math.min(pos, line.to);\n            if (line.length) {\n                let indentation = overrideIndentation ? overrideIndentation(line.from) : -1;\n                let stream = new StringStream(line.text, cx.state.tabSize, cx.unit, indentation < 0 ? undefined : indentation);\n                while (stream.pos < end - line.from)\n                    readToken(this.streamParser.token, stream, state);\n            }\n            else {\n                this.streamParser.blankLine(state, cx.unit);\n            }\n            if (end == pos)\n                break;\n            statePos = line.to + 1;\n        }\n        let line = cx.lineAt(pos);\n        if (overrideIndentation && from == null)\n            IndentedFrom.set(cx.state, line.from);\n        return this.streamParser.indent(state, /^\\s*(.*)/.exec(line.text)[1], cx);\n    }\n    get allowsNesting() { return false; }\n}\nfunction findState(lang, tree, off, startPos, before) {\n    let state = off >= startPos && off + tree.length <= before && tree.prop(lang.stateAfter);\n    if (state)\n        return { state: lang.streamParser.copyState(state), pos: off + tree.length };\n    for (let i = tree.children.length - 1; i >= 0; i--) {\n        let child = tree.children[i], pos = off + tree.positions[i];\n        let found = child instanceof Tree && pos < before && findState(lang, child, pos, startPos, before);\n        if (found)\n            return found;\n    }\n    return null;\n}\nfunction cutTree(lang, tree, from, to, inside) {\n    if (inside && from <= 0 && to >= tree.length)\n        return tree;\n    if (!inside && tree.type == lang.topNode)\n        inside = true;\n    for (let i = tree.children.length - 1; i >= 0; i--) {\n        let pos = tree.positions[i], child = tree.children[i], inner;\n        if (pos < to && child instanceof Tree) {\n            if (!(inner = cutTree(lang, child, from - pos, to - pos, inside)))\n                break;\n            return !inside ? inner\n                : new Tree(tree.type, tree.children.slice(0, i).concat(inner), tree.positions.slice(0, i + 1), pos + inner.length);\n        }\n    }\n    return null;\n}\nfunction findStartInFragments(lang, fragments, startPos, editorState) {\n    for (let f of fragments) {\n        let from = f.from + (f.openStart ? 25 : 0), to = f.to - (f.openEnd ? 25 : 0);\n        let found = from <= startPos && to > startPos && findState(lang, f.tree, 0 - f.offset, startPos, to), tree;\n        if (found && (tree = cutTree(lang, f.tree, startPos + f.offset, found.pos + f.offset, false)))\n            return { state: found.state, tree };\n    }\n    return { state: lang.streamParser.startState(editorState ? getIndentUnit(editorState) : 4), tree: Tree.empty };\n}\nclass Parse {\n    constructor(lang, input, fragments, ranges) {\n        this.lang = lang;\n        this.input = input;\n        this.fragments = fragments;\n        this.ranges = ranges;\n        this.stoppedAt = null;\n        this.chunks = [];\n        this.chunkPos = [];\n        this.chunk = [];\n        this.chunkReused = undefined;\n        this.rangeIndex = 0;\n        this.to = ranges[ranges.length - 1].to;\n        let context = ParseContext.get(), from = ranges[0].from;\n        let { state, tree } = findStartInFragments(lang, fragments, from, context === null || context === void 0 ? void 0 : context.state);\n        this.state = state;\n        this.parsedPos = this.chunkStart = from + tree.length;\n        for (let i = 0; i < tree.children.length; i++) {\n            this.chunks.push(tree.children[i]);\n            this.chunkPos.push(tree.positions[i]);\n        }\n        if (context && this.parsedPos < context.viewport.from - 100000 /* C.MaxDistanceBeforeViewport */) {\n            this.state = this.lang.streamParser.startState(getIndentUnit(context.state));\n            context.skipUntilInView(this.parsedPos, context.viewport.from);\n            this.parsedPos = context.viewport.from;\n        }\n        this.moveRangeIndex();\n    }\n    advance() {\n        let context = ParseContext.get();\n        let parseEnd = this.stoppedAt == null ? this.to : Math.min(this.to, this.stoppedAt);\n        let end = Math.min(parseEnd, this.chunkStart + 2048 /* C.ChunkSize */);\n        if (context)\n            end = Math.min(end, context.viewport.to);\n        while (this.parsedPos < end)\n            this.parseLine(context);\n        if (this.chunkStart < this.parsedPos)\n            this.finishChunk();\n        if (this.parsedPos >= parseEnd)\n            return this.finish();\n        if (context && this.parsedPos >= context.viewport.to) {\n            context.skipUntilInView(this.parsedPos, parseEnd);\n            return this.finish();\n        }\n        return null;\n    }\n    stopAt(pos) {\n        this.stoppedAt = pos;\n    }\n    lineAfter(pos) {\n        let chunk = this.input.chunk(pos);\n        if (!this.input.lineChunks) {\n            let eol = chunk.indexOf(\"\\n\");\n            if (eol > -1)\n                chunk = chunk.slice(0, eol);\n        }\n        else if (chunk == \"\\n\") {\n            chunk = \"\";\n        }\n        return pos + chunk.length <= this.to ? chunk : chunk.slice(0, this.to - pos);\n    }\n    nextLine() {\n        let from = this.parsedPos, line = this.lineAfter(from), end = from + line.length;\n        for (let index = this.rangeIndex;;) {\n            let rangeEnd = this.ranges[index].to;\n            if (rangeEnd >= end)\n                break;\n            line = line.slice(0, rangeEnd - (end - line.length));\n            index++;\n            if (index == this.ranges.length)\n                break;\n            let rangeStart = this.ranges[index].from;\n            let after = this.lineAfter(rangeStart);\n            line += after;\n            end = rangeStart + after.length;\n        }\n        return { line, end };\n    }\n    skipGapsTo(pos, offset, side) {\n        for (;;) {\n            let end = this.ranges[this.rangeIndex].to, offPos = pos + offset;\n            if (side > 0 ? end > offPos : end >= offPos)\n                break;\n            let start = this.ranges[++this.rangeIndex].from;\n            offset += start - end;\n        }\n        return offset;\n    }\n    moveRangeIndex() {\n        while (this.ranges[this.rangeIndex].to < this.parsedPos)\n            this.rangeIndex++;\n    }\n    emitToken(id, from, to, size, offset) {\n        if (this.ranges.length > 1) {\n            offset = this.skipGapsTo(from, offset, 1);\n            from += offset;\n            let len0 = this.chunk.length;\n            offset = this.skipGapsTo(to, offset, -1);\n            to += offset;\n            size += this.chunk.length - len0;\n        }\n        this.chunk.push(id, from, to, size);\n        return offset;\n    }\n    parseLine(context) {\n        let { line, end } = this.nextLine(), offset = 0, { streamParser } = this.lang;\n        let stream = new StringStream(line, context ? context.state.tabSize : 4, context ? getIndentUnit(context.state) : 2);\n        if (stream.eol()) {\n            streamParser.blankLine(this.state, stream.indentUnit);\n        }\n        else {\n            while (!stream.eol()) {\n                let token = readToken(streamParser.token, stream, this.state);\n                if (token)\n                    offset = this.emitToken(this.lang.tokenTable.resolve(token), this.parsedPos + stream.start, this.parsedPos + stream.pos, 4, offset);\n                if (stream.start > 10000 /* C.MaxLineLength */)\n                    break;\n            }\n        }\n        this.parsedPos = end;\n        this.moveRangeIndex();\n        if (this.parsedPos < this.to)\n            this.parsedPos++;\n    }\n    finishChunk() {\n        let tree = Tree.build({\n            buffer: this.chunk,\n            start: this.chunkStart,\n            length: this.parsedPos - this.chunkStart,\n            nodeSet,\n            topID: 0,\n            maxBufferLength: 2048 /* C.ChunkSize */,\n            reused: this.chunkReused\n        });\n        tree = new Tree(tree.type, tree.children, tree.positions, tree.length, [[this.lang.stateAfter, this.lang.streamParser.copyState(this.state)]]);\n        this.chunks.push(tree);\n        this.chunkPos.push(this.chunkStart - this.ranges[0].from);\n        this.chunk = [];\n        this.chunkReused = undefined;\n        this.chunkStart = this.parsedPos;\n    }\n    finish() {\n        return new Tree(this.lang.topNode, this.chunks, this.chunkPos, this.parsedPos - this.ranges[0].from).balance();\n    }\n}\nfunction readToken(token, stream, state) {\n    stream.start = stream.pos;\n    for (let i = 0; i < 10; i++) {\n        let result = token(stream, state);\n        if (stream.pos > stream.start)\n            return result;\n    }\n    throw new Error(\"Stream parser failed to advance stream.\");\n}\nconst noTokens = /*@__PURE__*/Object.create(null);\nconst typeArray = [NodeType.none];\nconst nodeSet = /*@__PURE__*/new NodeSet(typeArray);\nconst warned = [];\nconst defaultTable = /*@__PURE__*/Object.create(null);\nfor (let [legacyName, name] of [\n    [\"variable\", \"variableName\"],\n    [\"variable-2\", \"variableName.special\"],\n    [\"string-2\", \"string.special\"],\n    [\"def\", \"variableName.definition\"],\n    [\"tag\", \"tagName\"],\n    [\"attribute\", \"attributeName\"],\n    [\"type\", \"typeName\"],\n    [\"builtin\", \"variableName.standard\"],\n    [\"qualifier\", \"modifier\"],\n    [\"error\", \"invalid\"],\n    [\"header\", \"heading\"],\n    [\"property\", \"propertyName\"]\n])\n    defaultTable[legacyName] = /*@__PURE__*/createTokenType(noTokens, name);\nclass TokenTable {\n    constructor(extra) {\n        this.extra = extra;\n        this.table = Object.assign(Object.create(null), defaultTable);\n    }\n    resolve(tag) {\n        return !tag ? 0 : this.table[tag] || (this.table[tag] = createTokenType(this.extra, tag));\n    }\n}\nconst defaultTokenTable = /*@__PURE__*/new TokenTable(noTokens);\nfunction warnForPart(part, msg) {\n    if (warned.indexOf(part) > -1)\n        return;\n    warned.push(part);\n    console.warn(msg);\n}\nfunction createTokenType(extra, tagStr) {\n    let tags$1 = [];\n    for (let name of tagStr.split(\" \")) {\n        let found = [];\n        for (let part of name.split(\".\")) {\n            let value = (extra[part] || tags[part]);\n            if (!value) {\n                warnForPart(part, `Unknown highlighting tag ${part}`);\n            }\n            else if (typeof value == \"function\") {\n                if (!found.length)\n                    warnForPart(part, `Modifier ${part} used at start of tag`);\n                else\n                    found = found.map(value);\n            }\n            else {\n                if (found.length)\n                    warnForPart(part, `Tag ${part} used as modifier`);\n                else\n                    found = Array.isArray(value) ? value : [value];\n            }\n        }\n        for (let tag of found)\n            tags$1.push(tag);\n    }\n    if (!tags$1.length)\n        return 0;\n    let name = tagStr.replace(/ /g, \"_\"), type = NodeType.define({\n        id: typeArray.length,\n        name,\n        props: [styleTags({ [name]: tags$1 })]\n    });\n    typeArray.push(type);\n    return type.id;\n}\nfunction docID(data) {\n    let type = NodeType.define({ id: typeArray.length, name: \"Document\", props: [languageDataProp.add(() => data)], top: true });\n    typeArray.push(type);\n    return type;\n}\n\nexport { DocInput, HighlightStyle, IndentContext, LRLanguage, Language, LanguageDescription, LanguageSupport, ParseContext, StreamLanguage, StringStream, TreeIndentContext, bracketMatching, bracketMatchingHandle, codeFolding, continuedIndent, defaultHighlightStyle, defineLanguageFacet, delimitedIndent, ensureSyntaxTree, flatIndent, foldAll, foldCode, foldEffect, foldGutter, foldInside, foldKeymap, foldNodeProp, foldService, foldState, foldable, foldedRanges, forceParsing, getIndentUnit, getIndentation, highlightingFor, indentNodeProp, indentOnInput, indentRange, indentService, indentString, indentUnit, language, languageDataProp, matchBrackets, sublanguageProp, syntaxHighlighting, syntaxParserRunning, syntaxTree, syntaxTreeAvailable, toggleFold, unfoldAll, unfoldCode, unfoldEffect };\n", "export const enum Info { Margin = 10, Width = 300 }\n\nexport const autocompleteDarkThemeConfig = {\n    \".cm-tooltip.cm-tooltip-autocomplete\": {\n        \"& > ul\": {\n            fontFamily: \"Inter, Helvetica, 'sans-serif'\",\n            whiteSpace: \"nowrap\",\n            overflow: \"hidden auto\",\n            maxWidth_fallback: \"700px\",\n            maxWidth: \"min(700px, 95vw)\",\n            minWidth: \"150px\",\n            maxHeight: \"10em\",\n            height: \"100%\",\n            listStyle: \"none\",\n            margin: 0,\n            padding: 0,\n\n            \"& > li, & > completion-section\": {\n                padding: \"1px 3px\",\n                lineHeight: 1.5\n            },\n            \"& > li\": {\n                overflowX: \"hidden\",\n                textOverflow: \"ellipsis\",\n                cursor: \"pointer\"\n            },\n            \"& > completion-section\": {\n                display: \"list-item\",\n                borderBottom: \"1px solid silver\",\n                paddingLeft: \"0.5em\",\n                opacity: 0.7\n            }\n        }\n    },\n\n    \".cm-tooltip-autocomplete ul li[aria-selected]\": {\n        background: \"#347\",\n        color: \"white\",\n    },\n\n    \".cm-tooltip-autocomplete-disabled ul li[aria-selected]\": {\n        background: \"#444\",\n    },\n\n    \".cm-completionListIncompleteTop:before, .cm-completionListIncompleteBottom:after\": {\n        content: '\"\u00B7\u00B7\u00B7\"',\n        opacity: 0.5,\n        display: \"block\",\n        textAlign: \"center\"\n    },\n\n    \".cm-tooltip.cm-completionInfo\": {\n        position: \"absolute\",\n        padding: \"3px 9px\",\n        width: \"max-content\",\n        maxWidth: `${Info.Width}px`,\n        boxSizing: \"border-box\"\n    },\n\n    \".cm-completionInfo.cm-completionInfo-left\": { right: \"100%\" },\n    \".cm-completionInfo.cm-completionInfo-right\": { left: \"100%\" },\n    \".cm-completionInfo.cm-completionInfo-left-narrow\": { right: `${Info.Margin}px` },\n    \".cm-completionInfo.cm-completionInfo-right-narrow\": { left: `${Info.Margin}px` },\n\n    \".cm-snippetField\": {backgroundColor: \"#ffffff22\"},\n    \".cm-snippetFieldPosition\": {\n        verticalAlign: \"text-top\",\n        width: 0,\n        height: \"1.15em\",\n        display: \"inline-block\",\n        margin: \"0 -0.7px -.7em\",\n        borderLeft: \"1.4px dotted #888\"\n    },\n\n    \".cm-completionMatchedText\": {\n        textDecoration: \"underline\"\n    },\n\n    \".cm-completionDetail\": {\n        marginLeft: \"0.5em\",\n        fontStyle: \"italic\"\n    },\n\n    \".cm-completionIcon\": {\n        fontSize: \"90%\",\n        width: \".8em\",\n        display: \"inline-block\",\n        textAlign: \"center\",\n        paddingRight: \".6em\",\n        opacity: \"0.6\",\n        boxSizing: \"content-box\"\n    },\n\n    \".cm-completionIcon-function, .cm-completionIcon-method\": {\n        \"&:after\": { content: \"'\u0192'\" }\n    },\n    \".cm-completionIcon-class\": {\n        \"&:after\": { content: \"'\u25CB'\" }\n    },\n    \".cm-completionIcon-interface\": {\n        \"&:after\": { content: \"'\u25CC'\" }\n    },\n    \".cm-completionIcon-variable\": {\n        \"&:after\": { content: \"'\uD835\uDC65'\" }\n    },\n    \".cm-completionIcon-constant\": {\n        \"&:after\": { content: \"'\uD835\uDC36'\" }\n    },\n    \".cm-completionIcon-type\": {\n        \"&:after\": { content: \"'\uD835\uDC61'\" }\n    },\n    \".cm-completionIcon-enum\": {\n        \"&:after\": { content: \"'\u222A'\" }\n    },\n    \".cm-completionIcon-property\": {\n        \"&:after\": { content: \"'\u25A1'\" }\n    },\n    \".cm-completionIcon-keyword\": {\n        \"&:after\": { content: \"'\uD83D\uDD11\\uFE0E'\" } // Disable emoji rendering\n    },\n    \".cm-completionIcon-namespace\": {\n        \"&:after\": { content: \"'\u25A2'\" }\n    },\n    \".cm-completionIcon-text\": {\n        \"&:after\": { content: \"'abc'\", fontSize: \"50%\", verticalAlign: \"middle\" }\n    }\n}", "export const searchPanelDarkThemeConfig = {\n    \".cm-panel.cm-search\": {\n        padding: \"2px 6px 4px\",\n        position: \"relative\",\n        \"& [name=close]\": {\n            position: \"absolute\",\n            top: \"0\",\n            right: \"4px\",\n            backgroundColor: \"inherit\",\n            border: \"none\",\n            font: \"inherit\",\n            padding: 0,\n            margin: 0\n        },\n        \"& input, & button, & label\": {\n            margin: \".2em .6em .2em 0\"\n        },\n        \"& input[type=checkbox]\": {\n            marginRight: \".2em\"\n        },\n        \"& label\": {\n            fontSize: \"80%\",\n            whiteSpace: \"pre\"\n        }\n    },\n    \".cm-searchMatch\": { backgroundColor: \"#00ffff8a\" },\n    \".cm-searchMatch-selected\": { backgroundColor: \"#ff00ff8a\" }\n};", "import {EditorView} from \"@codemirror/view\"\nimport {Extension} from \"@codemirror/state\"\nimport {HighlightStyle, syntaxHighlighting} from \"@codemirror/language\"\nimport {tags as t} from \"@lezer/highlight\"\nimport { autocompleteDarkThemeConfig } from \"./dark-autocomplete-theme\";\nimport { searchPanelDarkThemeConfig} from \"./dark-search-panel-theme\";\n\n// Using https://github.com/one-dark/vscode-one-dark-theme/ as reference for the colors\n\nconst chalky = \"#e5c07b\",\n    coral = \"#e06c75\",\n    cyan = \"#56b6c2\",\n    invalid = \"#ffffff\",\n    ivory = \"#abb2bf\",\n    stone = \"#7d8799\", // Brightened compared to original to increase contrast\n    malibu = \"#61afef\",\n    sage = \"#98c379\",\n    whiskey = \"#d19a66\",\n    violet = \"#c678dd\",\n    darkBackground = \"#1b1b29\",\n    highlightBackground = \"#2c313a\",\n    background = \"#1b1b29\",\n    tooltipBackground = \"#353a42\",\n    selection = \"#3E4451\",\n    cursor = \"#528bff\"\n\n/// The colors used in the theme, as CSS color strings.\nexport const color = {\n    chalky,\n    coral,\n    cyan,\n    invalid,\n    ivory,\n    stone,\n    malibu,\n    sage,\n    whiskey,\n    violet,\n    darkBackground,\n    highlightBackground,\n    background,\n    tooltipBackground,\n    selection,\n    cursor\n}\n\nconst main = {\n    \"&\": {\n        color: ivory,\n        backgroundColor: background,\n        minHeight: \"100px\",\n        maxHeight: \"500px\",\n        height: \"100%\",\n        border: \"1px solid #2B2B40\",\n    },\n    \"&.cm-focused\": {outline: \"none\"},\n    \".cm-content\": {\n        caretColor: cursor\n    },\n    \".cm-cursor, .cm-dropCursor\": {borderLeftColor: cursor},\n    \"&.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground, .cm-selectionBackground, .cm-content ::selection\": {backgroundColor: selection},\n\n    \".cm-panels\": {backgroundColor: darkBackground, color: ivory},\n    \".cm-panels.cm-panels-top\": {borderBottom: \"2px solid black\"},\n    \".cm-panels.cm-panels-bottom\": {borderTop: \"2px solid black\"},\n\n    \".cm-searchMatch\": {\n        backgroundColor: \"#72a1ff59\",\n        outline: \"1px solid #457dff\"\n    },\n    \".cm-searchMatch.cm-searchMatch-selected\": {\n        backgroundColor: \"#6199ff2f\"\n    },\n\n    \".cm-activeLine\": {backgroundColor: \"#6699ff0b\"},\n    \".cm-selectionMatch\": {backgroundColor: \"#aafe661a\"},\n\n    \"&.cm-focused .cm-matchingBracket, &.cm-focused .cm-nonmatchingBracket\": {\n        backgroundColor: \"#bad0f847\"\n    },\n\n    \".cm-gutters\": {\n        backgroundColor: background,\n        color: stone,\n        border: \"none\"\n    },\n\n    \".cm-activeLineGutter\": {\n        backgroundColor: highlightBackground\n    },\n\n    \".cm-foldPlaceholder\": {\n        backgroundColor: \"transparent\",\n        border: \"none\",\n        color: \"#ddd\"\n    },\n\n    \".cm-tooltip\": {\n        border: \"none\",\n        backgroundColor: tooltipBackground\n    },\n    \".cm-tooltip .cm-tooltip-arrow:before\": {\n        borderTopColor: \"transparent\",\n        borderBottomColor: \"transparent\"\n    },\n    \".cm-tooltip .cm-tooltip-arrow:after\": {\n        borderTopColor: tooltipBackground,\n        borderBottomColor: tooltipBackground\n    },\n    \".cm-tooltip-autocomplete\": {\n        \"& > ul > li[aria-selected]\": {\n            backgroundColor: highlightBackground,\n            color: ivory\n        }\n    },\n    '.cm-scroller::-webkit-scrollbar': {\n        width: '5px',\n    },\n    '.cm-scroller::-webkit-scrollbar-track': {\n        background: '#aafe661a',\n    },\n    '.cm-scroller::-webkit-scrollbar-thumb': {\n        background: '#72A1FF25',\n    },\n    '.cm-scroller::-webkit-scrollbar-thumb:hover': {\n        background: '#72A1FF6B',\n    },\n}\n/// The editor theme styles for One Dark.\nexport const oneDarkTheme = EditorView.theme({...main, ...autocompleteDarkThemeConfig, ...searchPanelDarkThemeConfig }, {dark: true})\n\n/// The highlighting style for code in the One Dark theme.\nexport const oneDarkHighlightStyle = HighlightStyle.define([\n    {tag: t.keyword,\n        color: violet},\n    {tag: [t.name, t.deleted, t.character, t.propertyName, t.macroName],\n        color: coral},\n    {tag: [t.function(t.variableName), t.labelName],\n        color: malibu},\n    {tag: [t.color, t.constant(t.name), t.standard(t.name)],\n        color: whiskey},\n    {tag: [t.definition(t.name), t.separator],\n        color: ivory},\n    {tag: [t.typeName, t.className, t.number, t.changed, t.annotation, t.modifier, t.self, t.namespace],\n        color: chalky},\n    {tag: [t.operator, t.operatorKeyword, t.url, t.escape, t.regexp, t.link, t.special(t.string)],\n        color: cyan},\n    {tag: [t.meta, t.comment],\n        color: stone},\n    {tag: t.strong,\n        fontWeight: \"bold\"},\n    {tag: t.emphasis,\n        fontStyle: \"italic\"},\n    {tag: t.strikethrough,\n        textDecoration: \"line-through\"},\n    {tag: t.link,\n        color: stone,\n        textDecoration: \"underline\"},\n    {tag: t.heading,\n        fontWeight: \"bold\",\n        color: coral},\n    {tag: [t.atom, t.bool, t.special(t.variableName)],\n        color: whiskey },\n    {tag: [t.processingInstruction, t.string, t.inserted],\n        color: sage},\n    {tag: t.invalid,\n        color: invalid},\n])\n\n/// Extension to enable the One Dark theme (both the editor theme and\n/// the highlight style).\nexport const index: Extension = [oneDarkTheme, syntaxHighlighting(oneDarkHighlightStyle)]", "import { Annotation, Facet, combineConfig, StateField, EditorSelection, Transaction, ChangeSet, ChangeDesc, StateEffect, Text, findClusterBreak, countColumn, CharCategory } from '@codemirror/state';\nimport { EditorView, Direction } from '@codemirror/view';\nimport { IndentContext, getIndentation, indentString, matchBrackets, syntaxTree, getIndentUnit, indentUnit } from '@codemirror/language';\nimport { NodeProp } from '@lezer/common';\n\n/**\nComment or uncomment the current selection. Will use line comments\nif available, otherwise falling back to block comments.\n*/\nconst toggleComment = target => {\n    let { state } = target, line = state.doc.lineAt(state.selection.main.from), config = getConfig(target.state, line.from);\n    return config.line ? toggleLineComment(target) : config.block ? toggleBlockCommentByLine(target) : false;\n};\nfunction command(f, option) {\n    return ({ state, dispatch }) => {\n        if (state.readOnly)\n            return false;\n        let tr = f(option, state);\n        if (!tr)\n            return false;\n        dispatch(state.update(tr));\n        return true;\n    };\n}\n/**\nComment or uncomment the current selection using line comments.\nThe line comment syntax is taken from the\n[`commentTokens`](https://codemirror.net/6/docs/ref/#commands.CommentTokens) [language\ndata](https://codemirror.net/6/docs/ref/#state.EditorState.languageDataAt).\n*/\nconst toggleLineComment = /*@__PURE__*/command(changeLineComment, 0 /* CommentOption.Toggle */);\n/**\nComment the current selection using line comments.\n*/\nconst lineComment = /*@__PURE__*/command(changeLineComment, 1 /* CommentOption.Comment */);\n/**\nUncomment the current selection using line comments.\n*/\nconst lineUncomment = /*@__PURE__*/command(changeLineComment, 2 /* CommentOption.Uncomment */);\n/**\nComment or uncomment the current selection using block comments.\nThe block comment syntax is taken from the\n[`commentTokens`](https://codemirror.net/6/docs/ref/#commands.CommentTokens) [language\ndata](https://codemirror.net/6/docs/ref/#state.EditorState.languageDataAt).\n*/\nconst toggleBlockComment = /*@__PURE__*/command(changeBlockComment, 0 /* CommentOption.Toggle */);\n/**\nComment the current selection using block comments.\n*/\nconst blockComment = /*@__PURE__*/command(changeBlockComment, 1 /* CommentOption.Comment */);\n/**\nUncomment the current selection using block comments.\n*/\nconst blockUncomment = /*@__PURE__*/command(changeBlockComment, 2 /* CommentOption.Uncomment */);\n/**\nComment or uncomment the lines around the current selection using\nblock comments.\n*/\nconst toggleBlockCommentByLine = /*@__PURE__*/command((o, s) => changeBlockComment(o, s, selectedLineRanges(s)), 0 /* CommentOption.Toggle */);\nfunction getConfig(state, pos) {\n    let data = state.languageDataAt(\"commentTokens\", pos);\n    return data.length ? data[0] : {};\n}\nconst SearchMargin = 50;\n/**\nDetermines if the given range is block-commented in the given\nstate.\n*/\nfunction findBlockComment(state, { open, close }, from, to) {\n    let textBefore = state.sliceDoc(from - SearchMargin, from);\n    let textAfter = state.sliceDoc(to, to + SearchMargin);\n    let spaceBefore = /\\s*$/.exec(textBefore)[0].length, spaceAfter = /^\\s*/.exec(textAfter)[0].length;\n    let beforeOff = textBefore.length - spaceBefore;\n    if (textBefore.slice(beforeOff - open.length, beforeOff) == open &&\n        textAfter.slice(spaceAfter, spaceAfter + close.length) == close) {\n        return { open: { pos: from - spaceBefore, margin: spaceBefore && 1 },\n            close: { pos: to + spaceAfter, margin: spaceAfter && 1 } };\n    }\n    let startText, endText;\n    if (to - from <= 2 * SearchMargin) {\n        startText = endText = state.sliceDoc(from, to);\n    }\n    else {\n        startText = state.sliceDoc(from, from + SearchMargin);\n        endText = state.sliceDoc(to - SearchMargin, to);\n    }\n    let startSpace = /^\\s*/.exec(startText)[0].length, endSpace = /\\s*$/.exec(endText)[0].length;\n    let endOff = endText.length - endSpace - close.length;\n    if (startText.slice(startSpace, startSpace + open.length) == open &&\n        endText.slice(endOff, endOff + close.length) == close) {\n        return { open: { pos: from + startSpace + open.length,\n                margin: /\\s/.test(startText.charAt(startSpace + open.length)) ? 1 : 0 },\n            close: { pos: to - endSpace - close.length,\n                margin: /\\s/.test(endText.charAt(endOff - 1)) ? 1 : 0 } };\n    }\n    return null;\n}\nfunction selectedLineRanges(state) {\n    let ranges = [];\n    for (let r of state.selection.ranges) {\n        let fromLine = state.doc.lineAt(r.from);\n        let toLine = r.to <= fromLine.to ? fromLine : state.doc.lineAt(r.to);\n        let last = ranges.length - 1;\n        if (last >= 0 && ranges[last].to > fromLine.from)\n            ranges[last].to = toLine.to;\n        else\n            ranges.push({ from: fromLine.from + /^\\s*/.exec(fromLine.text)[0].length, to: toLine.to });\n    }\n    return ranges;\n}\n// Performs toggle, comment and uncomment of block comments in\n// languages that support them.\nfunction changeBlockComment(option, state, ranges = state.selection.ranges) {\n    let tokens = ranges.map(r => getConfig(state, r.from).block);\n    if (!tokens.every(c => c))\n        return null;\n    let comments = ranges.map((r, i) => findBlockComment(state, tokens[i], r.from, r.to));\n    if (option != 2 /* CommentOption.Uncomment */ && !comments.every(c => c)) {\n        return { changes: state.changes(ranges.map((range, i) => {\n                if (comments[i])\n                    return [];\n                return [{ from: range.from, insert: tokens[i].open + \" \" }, { from: range.to, insert: \" \" + tokens[i].close }];\n            })) };\n    }\n    else if (option != 1 /* CommentOption.Comment */ && comments.some(c => c)) {\n        let changes = [];\n        for (let i = 0, comment; i < comments.length; i++)\n            if (comment = comments[i]) {\n                let token = tokens[i], { open, close } = comment;\n                changes.push({ from: open.pos - token.open.length, to: open.pos + open.margin }, { from: close.pos - close.margin, to: close.pos + token.close.length });\n            }\n        return { changes };\n    }\n    return null;\n}\n// Performs toggle, comment and uncomment of line comments.\nfunction changeLineComment(option, state, ranges = state.selection.ranges) {\n    let lines = [];\n    let prevLine = -1;\n    for (let { from, to } of ranges) {\n        let startI = lines.length, minIndent = 1e9;\n        let token = getConfig(state, from).line;\n        if (!token)\n            continue;\n        for (let pos = from; pos <= to;) {\n            let line = state.doc.lineAt(pos);\n            if (line.from > prevLine && (from == to || to > line.from)) {\n                prevLine = line.from;\n                let indent = /^\\s*/.exec(line.text)[0].length;\n                let empty = indent == line.length;\n                let comment = line.text.slice(indent, indent + token.length) == token ? indent : -1;\n                if (indent < line.text.length && indent < minIndent)\n                    minIndent = indent;\n                lines.push({ line, comment, token, indent, empty, single: false });\n            }\n            pos = line.to + 1;\n        }\n        if (minIndent < 1e9)\n            for (let i = startI; i < lines.length; i++)\n                if (lines[i].indent < lines[i].line.text.length)\n                    lines[i].indent = minIndent;\n        if (lines.length == startI + 1)\n            lines[startI].single = true;\n    }\n    if (option != 2 /* CommentOption.Uncomment */ && lines.some(l => l.comment < 0 && (!l.empty || l.single))) {\n        let changes = [];\n        for (let { line, token, indent, empty, single } of lines)\n            if (single || !empty)\n                changes.push({ from: line.from + indent, insert: token + \" \" });\n        let changeSet = state.changes(changes);\n        return { changes: changeSet, selection: state.selection.map(changeSet, 1) };\n    }\n    else if (option != 1 /* CommentOption.Comment */ && lines.some(l => l.comment >= 0)) {\n        let changes = [];\n        for (let { line, comment, token } of lines)\n            if (comment >= 0) {\n                let from = line.from + comment, to = from + token.length;\n                if (line.text[to - line.from] == \" \")\n                    to++;\n                changes.push({ from, to });\n            }\n        return { changes };\n    }\n    return null;\n}\n\nconst fromHistory = /*@__PURE__*/Annotation.define();\n/**\nTransaction annotation that will prevent that transaction from\nbeing combined with other transactions in the undo history. Given\n`\"before\"`, it'll prevent merging with previous transactions. With\n`\"after\"`, subsequent transactions won't be combined with this\none. With `\"full\"`, the transaction is isolated on both sides.\n*/\nconst isolateHistory = /*@__PURE__*/Annotation.define();\n/**\nThis facet provides a way to register functions that, given a\ntransaction, provide a set of effects that the history should\nstore when inverting the transaction. This can be used to\nintegrate some kinds of effects in the history, so that they can\nbe undone (and redone again).\n*/\nconst invertedEffects = /*@__PURE__*/Facet.define();\nconst historyConfig = /*@__PURE__*/Facet.define({\n    combine(configs) {\n        return combineConfig(configs, {\n            minDepth: 100,\n            newGroupDelay: 500,\n            joinToEvent: (_t, isAdjacent) => isAdjacent,\n        }, {\n            minDepth: Math.max,\n            newGroupDelay: Math.min,\n            joinToEvent: (a, b) => (tr, adj) => a(tr, adj) || b(tr, adj)\n        });\n    }\n});\nfunction changeEnd(changes) {\n    let end = 0;\n    changes.iterChangedRanges((_, to) => end = to);\n    return end;\n}\nconst historyField_ = /*@__PURE__*/StateField.define({\n    create() {\n        return HistoryState.empty;\n    },\n    update(state, tr) {\n        let config = tr.state.facet(historyConfig);\n        let fromHist = tr.annotation(fromHistory);\n        if (fromHist) {\n            let selection = tr.docChanged ? EditorSelection.single(changeEnd(tr.changes)) : undefined;\n            let item = HistEvent.fromTransaction(tr, selection), from = fromHist.side;\n            let other = from == 0 /* BranchName.Done */ ? state.undone : state.done;\n            if (item)\n                other = updateBranch(other, other.length, config.minDepth, item);\n            else\n                other = addSelection(other, tr.startState.selection);\n            return new HistoryState(from == 0 /* BranchName.Done */ ? fromHist.rest : other, from == 0 /* BranchName.Done */ ? other : fromHist.rest);\n        }\n        let isolate = tr.annotation(isolateHistory);\n        if (isolate == \"full\" || isolate == \"before\")\n            state = state.isolate();\n        if (tr.annotation(Transaction.addToHistory) === false)\n            return !tr.changes.empty ? state.addMapping(tr.changes.desc) : state;\n        let event = HistEvent.fromTransaction(tr);\n        let time = tr.annotation(Transaction.time), userEvent = tr.annotation(Transaction.userEvent);\n        if (event)\n            state = state.addChanges(event, time, userEvent, config, tr);\n        else if (tr.selection)\n            state = state.addSelection(tr.startState.selection, time, userEvent, config.newGroupDelay);\n        if (isolate == \"full\" || isolate == \"after\")\n            state = state.isolate();\n        return state;\n    },\n    toJSON(value) {\n        return { done: value.done.map(e => e.toJSON()), undone: value.undone.map(e => e.toJSON()) };\n    },\n    fromJSON(json) {\n        return new HistoryState(json.done.map(HistEvent.fromJSON), json.undone.map(HistEvent.fromJSON));\n    }\n});\n/**\nCreate a history extension with the given configuration.\n*/\nfunction history(config = {}) {\n    return [\n        historyField_,\n        historyConfig.of(config),\n        EditorView.domEventHandlers({\n            beforeinput(e, view) {\n                let command = e.inputType == \"historyUndo\" ? undo : e.inputType == \"historyRedo\" ? redo : null;\n                if (!command)\n                    return false;\n                e.preventDefault();\n                return command(view);\n            }\n        })\n    ];\n}\n/**\nThe state field used to store the history data. Should probably\nonly be used when you want to\n[serialize](https://codemirror.net/6/docs/ref/#state.EditorState.toJSON) or\n[deserialize](https://codemirror.net/6/docs/ref/#state.EditorState^fromJSON) state objects in a way\nthat preserves history.\n*/\nconst historyField = historyField_;\nfunction cmd(side, selection) {\n    return function ({ state, dispatch }) {\n        if (!selection && state.readOnly)\n            return false;\n        let historyState = state.field(historyField_, false);\n        if (!historyState)\n            return false;\n        let tr = historyState.pop(side, state, selection);\n        if (!tr)\n            return false;\n        dispatch(tr);\n        return true;\n    };\n}\n/**\nUndo a single group of history events. Returns false if no group\nwas available.\n*/\nconst undo = /*@__PURE__*/cmd(0 /* BranchName.Done */, false);\n/**\nRedo a group of history events. Returns false if no group was\navailable.\n*/\nconst redo = /*@__PURE__*/cmd(1 /* BranchName.Undone */, false);\n/**\nUndo a change or selection change.\n*/\nconst undoSelection = /*@__PURE__*/cmd(0 /* BranchName.Done */, true);\n/**\nRedo a change or selection change.\n*/\nconst redoSelection = /*@__PURE__*/cmd(1 /* BranchName.Undone */, true);\nfunction depth(side) {\n    return function (state) {\n        let histState = state.field(historyField_, false);\n        if (!histState)\n            return 0;\n        let branch = side == 0 /* BranchName.Done */ ? histState.done : histState.undone;\n        return branch.length - (branch.length && !branch[0].changes ? 1 : 0);\n    };\n}\n/**\nThe amount of undoable change events available in a given state.\n*/\nconst undoDepth = /*@__PURE__*/depth(0 /* BranchName.Done */);\n/**\nThe amount of redoable change events available in a given state.\n*/\nconst redoDepth = /*@__PURE__*/depth(1 /* BranchName.Undone */);\n// History events store groups of changes or effects that need to be\n// undone/redone together.\nclass HistEvent {\n    constructor(\n    // The changes in this event. Normal events hold at least one\n    // change or effect. But it may be necessary to store selection\n    // events before the first change, in which case a special type of\n    // instance is created which doesn't hold any changes, with\n    // changes == startSelection == undefined\n    changes, \n    // The effects associated with this event\n    effects, \n    // Accumulated mapping (from addToHistory==false) that should be\n    // applied to events below this one.\n    mapped, \n    // The selection before this event\n    startSelection, \n    // Stores selection changes after this event, to be used for\n    // selection undo/redo.\n    selectionsAfter) {\n        this.changes = changes;\n        this.effects = effects;\n        this.mapped = mapped;\n        this.startSelection = startSelection;\n        this.selectionsAfter = selectionsAfter;\n    }\n    setSelAfter(after) {\n        return new HistEvent(this.changes, this.effects, this.mapped, this.startSelection, after);\n    }\n    toJSON() {\n        var _a, _b, _c;\n        return {\n            changes: (_a = this.changes) === null || _a === void 0 ? void 0 : _a.toJSON(),\n            mapped: (_b = this.mapped) === null || _b === void 0 ? void 0 : _b.toJSON(),\n            startSelection: (_c = this.startSelection) === null || _c === void 0 ? void 0 : _c.toJSON(),\n            selectionsAfter: this.selectionsAfter.map(s => s.toJSON())\n        };\n    }\n    static fromJSON(json) {\n        return new HistEvent(json.changes && ChangeSet.fromJSON(json.changes), [], json.mapped && ChangeDesc.fromJSON(json.mapped), json.startSelection && EditorSelection.fromJSON(json.startSelection), json.selectionsAfter.map(EditorSelection.fromJSON));\n    }\n    // This does not check `addToHistory` and such, it assumes the\n    // transaction needs to be converted to an item. Returns null when\n    // there are no changes or effects in the transaction.\n    static fromTransaction(tr, selection) {\n        let effects = none;\n        for (let invert of tr.startState.facet(invertedEffects)) {\n            let result = invert(tr);\n            if (result.length)\n                effects = effects.concat(result);\n        }\n        if (!effects.length && tr.changes.empty)\n            return null;\n        return new HistEvent(tr.changes.invert(tr.startState.doc), effects, undefined, selection || tr.startState.selection, none);\n    }\n    static selection(selections) {\n        return new HistEvent(undefined, none, undefined, undefined, selections);\n    }\n}\nfunction updateBranch(branch, to, maxLen, newEvent) {\n    let start = to + 1 > maxLen + 20 ? to - maxLen - 1 : 0;\n    let newBranch = branch.slice(start, to);\n    newBranch.push(newEvent);\n    return newBranch;\n}\nfunction isAdjacent(a, b) {\n    let ranges = [], isAdjacent = false;\n    a.iterChangedRanges((f, t) => ranges.push(f, t));\n    b.iterChangedRanges((_f, _t, f, t) => {\n        for (let i = 0; i < ranges.length;) {\n            let from = ranges[i++], to = ranges[i++];\n            if (t >= from && f <= to)\n                isAdjacent = true;\n        }\n    });\n    return isAdjacent;\n}\nfunction eqSelectionShape(a, b) {\n    return a.ranges.length == b.ranges.length &&\n        a.ranges.filter((r, i) => r.empty != b.ranges[i].empty).length === 0;\n}\nfunction conc(a, b) {\n    return !a.length ? b : !b.length ? a : a.concat(b);\n}\nconst none = [];\nconst MaxSelectionsPerEvent = 200;\nfunction addSelection(branch, selection) {\n    if (!branch.length) {\n        return [HistEvent.selection([selection])];\n    }\n    else {\n        let lastEvent = branch[branch.length - 1];\n        let sels = lastEvent.selectionsAfter.slice(Math.max(0, lastEvent.selectionsAfter.length - MaxSelectionsPerEvent));\n        if (sels.length && sels[sels.length - 1].eq(selection))\n            return branch;\n        sels.push(selection);\n        return updateBranch(branch, branch.length - 1, 1e9, lastEvent.setSelAfter(sels));\n    }\n}\n// Assumes the top item has one or more selectionAfter values\nfunction popSelection(branch) {\n    let last = branch[branch.length - 1];\n    let newBranch = branch.slice();\n    newBranch[branch.length - 1] = last.setSelAfter(last.selectionsAfter.slice(0, last.selectionsAfter.length - 1));\n    return newBranch;\n}\n// Add a mapping to the top event in the given branch. If this maps\n// away all the changes and effects in that item, drop it and\n// propagate the mapping to the next item.\nfunction addMappingToBranch(branch, mapping) {\n    if (!branch.length)\n        return branch;\n    let length = branch.length, selections = none;\n    while (length) {\n        let event = mapEvent(branch[length - 1], mapping, selections);\n        if (event.changes && !event.changes.empty || event.effects.length) { // Event survived mapping\n            let result = branch.slice(0, length);\n            result[length - 1] = event;\n            return result;\n        }\n        else { // Drop this event, since there's no changes or effects left\n            mapping = event.mapped;\n            length--;\n            selections = event.selectionsAfter;\n        }\n    }\n    return selections.length ? [HistEvent.selection(selections)] : none;\n}\nfunction mapEvent(event, mapping, extraSelections) {\n    let selections = conc(event.selectionsAfter.length ? event.selectionsAfter.map(s => s.map(mapping)) : none, extraSelections);\n    // Change-less events don't store mappings (they are always the last event in a branch)\n    if (!event.changes)\n        return HistEvent.selection(selections);\n    let mappedChanges = event.changes.map(mapping), before = mapping.mapDesc(event.changes, true);\n    let fullMapping = event.mapped ? event.mapped.composeDesc(before) : before;\n    return new HistEvent(mappedChanges, StateEffect.mapEffects(event.effects, mapping), fullMapping, event.startSelection.map(before), selections);\n}\nconst joinableUserEvent = /^(input\\.type|delete)($|\\.)/;\nclass HistoryState {\n    constructor(done, undone, prevTime = 0, prevUserEvent = undefined) {\n        this.done = done;\n        this.undone = undone;\n        this.prevTime = prevTime;\n        this.prevUserEvent = prevUserEvent;\n    }\n    isolate() {\n        return this.prevTime ? new HistoryState(this.done, this.undone) : this;\n    }\n    addChanges(event, time, userEvent, config, tr) {\n        let done = this.done, lastEvent = done[done.length - 1];\n        if (lastEvent && lastEvent.changes && !lastEvent.changes.empty && event.changes &&\n            (!userEvent || joinableUserEvent.test(userEvent)) &&\n            ((!lastEvent.selectionsAfter.length &&\n                time - this.prevTime < config.newGroupDelay &&\n                config.joinToEvent(tr, isAdjacent(lastEvent.changes, event.changes))) ||\n                // For compose (but not compose.start) events, always join with previous event\n                userEvent == \"input.type.compose\")) {\n            done = updateBranch(done, done.length - 1, config.minDepth, new HistEvent(event.changes.compose(lastEvent.changes), conc(event.effects, lastEvent.effects), lastEvent.mapped, lastEvent.startSelection, none));\n        }\n        else {\n            done = updateBranch(done, done.length, config.minDepth, event);\n        }\n        return new HistoryState(done, none, time, userEvent);\n    }\n    addSelection(selection, time, userEvent, newGroupDelay) {\n        let last = this.done.length ? this.done[this.done.length - 1].selectionsAfter : none;\n        if (last.length > 0 &&\n            time - this.prevTime < newGroupDelay &&\n            userEvent == this.prevUserEvent && userEvent && /^select($|\\.)/.test(userEvent) &&\n            eqSelectionShape(last[last.length - 1], selection))\n            return this;\n        return new HistoryState(addSelection(this.done, selection), this.undone, time, userEvent);\n    }\n    addMapping(mapping) {\n        return new HistoryState(addMappingToBranch(this.done, mapping), addMappingToBranch(this.undone, mapping), this.prevTime, this.prevUserEvent);\n    }\n    pop(side, state, selection) {\n        let branch = side == 0 /* BranchName.Done */ ? this.done : this.undone;\n        if (branch.length == 0)\n            return null;\n        let event = branch[branch.length - 1];\n        if (selection && event.selectionsAfter.length) {\n            return state.update({\n                selection: event.selectionsAfter[event.selectionsAfter.length - 1],\n                annotations: fromHistory.of({ side, rest: popSelection(branch) }),\n                userEvent: side == 0 /* BranchName.Done */ ? \"select.undo\" : \"select.redo\",\n                scrollIntoView: true\n            });\n        }\n        else if (!event.changes) {\n            return null;\n        }\n        else {\n            let rest = branch.length == 1 ? none : branch.slice(0, branch.length - 1);\n            if (event.mapped)\n                rest = addMappingToBranch(rest, event.mapped);\n            return state.update({\n                changes: event.changes,\n                selection: event.startSelection,\n                effects: event.effects,\n                annotations: fromHistory.of({ side, rest }),\n                filter: false,\n                userEvent: side == 0 /* BranchName.Done */ ? \"undo\" : \"redo\",\n                scrollIntoView: true\n            });\n        }\n    }\n}\nHistoryState.empty = /*@__PURE__*/new HistoryState(none, none);\n/**\nDefault key bindings for the undo history.\n\n- Mod-z: [`undo`](https://codemirror.net/6/docs/ref/#commands.undo).\n- Mod-y (Mod-Shift-z on macOS) + Ctrl-Shift-z on Linux: [`redo`](https://codemirror.net/6/docs/ref/#commands.redo).\n- Mod-u: [`undoSelection`](https://codemirror.net/6/docs/ref/#commands.undoSelection).\n- Alt-u (Mod-Shift-u on macOS): [`redoSelection`](https://codemirror.net/6/docs/ref/#commands.redoSelection).\n*/\nconst historyKeymap = [\n    { key: \"Mod-z\", run: undo, preventDefault: true },\n    { key: \"Mod-y\", mac: \"Mod-Shift-z\", run: redo, preventDefault: true },\n    { linux: \"Ctrl-Shift-z\", run: redo, preventDefault: true },\n    { key: \"Mod-u\", run: undoSelection, preventDefault: true },\n    { key: \"Alt-u\", mac: \"Mod-Shift-u\", run: redoSelection, preventDefault: true }\n];\n\nfunction updateSel(sel, by) {\n    return EditorSelection.create(sel.ranges.map(by), sel.mainIndex);\n}\nfunction setSel(state, selection) {\n    return state.update({ selection, scrollIntoView: true, userEvent: \"select\" });\n}\nfunction moveSel({ state, dispatch }, how) {\n    let selection = updateSel(state.selection, how);\n    if (selection.eq(state.selection))\n        return false;\n    dispatch(setSel(state, selection));\n    return true;\n}\nfunction rangeEnd(range, forward) {\n    return EditorSelection.cursor(forward ? range.to : range.from);\n}\nfunction cursorByChar(view, forward) {\n    return moveSel(view, range => range.empty ? view.moveByChar(range, forward) : rangeEnd(range, forward));\n}\nfunction ltrAtCursor(view) {\n    return view.textDirectionAt(view.state.selection.main.head) == Direction.LTR;\n}\n/**\nMove the selection one character to the left (which is backward in\nleft-to-right text, forward in right-to-left text).\n*/\nconst cursorCharLeft = view => cursorByChar(view, !ltrAtCursor(view));\n/**\nMove the selection one character to the right.\n*/\nconst cursorCharRight = view => cursorByChar(view, ltrAtCursor(view));\n/**\nMove the selection one character forward.\n*/\nconst cursorCharForward = view => cursorByChar(view, true);\n/**\nMove the selection one character backward.\n*/\nconst cursorCharBackward = view => cursorByChar(view, false);\nfunction cursorByGroup(view, forward) {\n    return moveSel(view, range => range.empty ? view.moveByGroup(range, forward) : rangeEnd(range, forward));\n}\n/**\nMove the selection to the left across one group of word or\nnon-word (but also non-space) characters.\n*/\nconst cursorGroupLeft = view => cursorByGroup(view, !ltrAtCursor(view));\n/**\nMove the selection one group to the right.\n*/\nconst cursorGroupRight = view => cursorByGroup(view, ltrAtCursor(view));\n/**\nMove the selection one group forward.\n*/\nconst cursorGroupForward = view => cursorByGroup(view, true);\n/**\nMove the selection one group backward.\n*/\nconst cursorGroupBackward = view => cursorByGroup(view, false);\nconst segmenter = typeof Intl != \"undefined\" && Intl.Segmenter ?\n    /*@__PURE__*/new (Intl.Segmenter)(undefined, { granularity: \"word\" }) : null;\nfunction moveBySubword(view, range, forward) {\n    let categorize = view.state.charCategorizer(range.from);\n    let cat = CharCategory.Space, pos = range.from, steps = 0;\n    let done = false, sawUpper = false, sawLower = false;\n    let step = (next) => {\n        if (done)\n            return false;\n        pos += forward ? next.length : -next.length;\n        let nextCat = categorize(next), ahead;\n        if (nextCat == CharCategory.Word && next.charCodeAt(0) < 128 && /[\\W_]/.test(next))\n            nextCat = -1; // Treat word punctuation specially\n        if (cat == CharCategory.Space)\n            cat = nextCat;\n        if (cat != nextCat)\n            return false;\n        if (cat == CharCategory.Word) {\n            if (next.toLowerCase() == next) {\n                if (!forward && sawUpper)\n                    return false;\n                sawLower = true;\n            }\n            else if (sawLower) {\n                if (forward)\n                    return false;\n                done = true;\n            }\n            else {\n                if (sawUpper && forward && categorize(ahead = view.state.sliceDoc(pos, pos + 1)) == CharCategory.Word &&\n                    ahead.toLowerCase() == ahead)\n                    return false;\n                sawUpper = true;\n            }\n        }\n        steps++;\n        return true;\n    };\n    let end = view.moveByChar(range, forward, start => {\n        step(start);\n        return step;\n    });\n    if (segmenter && cat == CharCategory.Word && end.from == range.from + steps * (forward ? 1 : -1)) {\n        let from = Math.min(range.head, end.head), to = Math.max(range.head, end.head);\n        let skipped = view.state.sliceDoc(from, to);\n        if (skipped.length > 1 && /[\\u4E00-\\uffff]/.test(skipped)) {\n            let segments = Array.from(segmenter.segment(skipped));\n            if (segments.length > 1) {\n                if (forward)\n                    return EditorSelection.cursor(range.head + segments[1].index, -1);\n                return EditorSelection.cursor(end.head + segments[segments.length - 1].index, 1);\n            }\n        }\n    }\n    return end;\n}\nfunction cursorBySubword(view, forward) {\n    return moveSel(view, range => range.empty ? moveBySubword(view, range, forward) : rangeEnd(range, forward));\n}\n/**\nMove the selection one group or camel-case subword forward.\n*/\nconst cursorSubwordForward = view => cursorBySubword(view, true);\n/**\nMove the selection one group or camel-case subword backward.\n*/\nconst cursorSubwordBackward = view => cursorBySubword(view, false);\nfunction interestingNode(state, node, bracketProp) {\n    if (node.type.prop(bracketProp))\n        return true;\n    let len = node.to - node.from;\n    return len && (len > 2 || /[^\\s,.;:]/.test(state.sliceDoc(node.from, node.to))) || node.firstChild;\n}\nfunction moveBySyntax(state, start, forward) {\n    let pos = syntaxTree(state).resolveInner(start.head);\n    let bracketProp = forward ? NodeProp.closedBy : NodeProp.openedBy;\n    // Scan forward through child nodes to see if there's an interesting\n    // node ahead.\n    for (let at = start.head;;) {\n        let next = forward ? pos.childAfter(at) : pos.childBefore(at);\n        if (!next)\n            break;\n        if (interestingNode(state, next, bracketProp))\n            pos = next;\n        else\n            at = forward ? next.to : next.from;\n    }\n    let bracket = pos.type.prop(bracketProp), match, newPos;\n    if (bracket && (match = forward ? matchBrackets(state, pos.from, 1) : matchBrackets(state, pos.to, -1)) && match.matched)\n        newPos = forward ? match.end.to : match.end.from;\n    else\n        newPos = forward ? pos.to : pos.from;\n    return EditorSelection.cursor(newPos, forward ? -1 : 1);\n}\n/**\nMove the cursor over the next syntactic element to the left.\n*/\nconst cursorSyntaxLeft = view => moveSel(view, range => moveBySyntax(view.state, range, !ltrAtCursor(view)));\n/**\nMove the cursor over the next syntactic element to the right.\n*/\nconst cursorSyntaxRight = view => moveSel(view, range => moveBySyntax(view.state, range, ltrAtCursor(view)));\nfunction cursorByLine(view, forward) {\n    return moveSel(view, range => {\n        if (!range.empty)\n            return rangeEnd(range, forward);\n        let moved = view.moveVertically(range, forward);\n        return moved.head != range.head ? moved : view.moveToLineBoundary(range, forward);\n    });\n}\n/**\nMove the selection one line up.\n*/\nconst cursorLineUp = view => cursorByLine(view, false);\n/**\nMove the selection one line down.\n*/\nconst cursorLineDown = view => cursorByLine(view, true);\nfunction pageInfo(view) {\n    let selfScroll = view.scrollDOM.clientHeight < view.scrollDOM.scrollHeight - 2;\n    let marginTop = 0, marginBottom = 0, height;\n    if (selfScroll) {\n        for (let source of view.state.facet(EditorView.scrollMargins)) {\n            let margins = source(view);\n            if (margins === null || margins === void 0 ? void 0 : margins.top)\n                marginTop = Math.max(margins === null || margins === void 0 ? void 0 : margins.top, marginTop);\n            if (margins === null || margins === void 0 ? void 0 : margins.bottom)\n                marginBottom = Math.max(margins === null || margins === void 0 ? void 0 : margins.bottom, marginBottom);\n        }\n        height = view.scrollDOM.clientHeight - marginTop - marginBottom;\n    }\n    else {\n        height = (view.dom.ownerDocument.defaultView || window).innerHeight;\n    }\n    return { marginTop, marginBottom, selfScroll,\n        height: Math.max(view.defaultLineHeight, height - 5) };\n}\nfunction cursorByPage(view, forward) {\n    let page = pageInfo(view);\n    let { state } = view, selection = updateSel(state.selection, range => {\n        return range.empty ? view.moveVertically(range, forward, page.height)\n            : rangeEnd(range, forward);\n    });\n    if (selection.eq(state.selection))\n        return false;\n    let effect;\n    if (page.selfScroll) {\n        let startPos = view.coordsAtPos(state.selection.main.head);\n        let scrollRect = view.scrollDOM.getBoundingClientRect();\n        let scrollTop = scrollRect.top + page.marginTop, scrollBottom = scrollRect.bottom - page.marginBottom;\n        if (startPos && startPos.top > scrollTop && startPos.bottom < scrollBottom)\n            effect = EditorView.scrollIntoView(selection.main.head, { y: \"start\", yMargin: startPos.top - scrollTop });\n    }\n    view.dispatch(setSel(state, selection), { effects: effect });\n    return true;\n}\n/**\nMove the selection one page up.\n*/\nconst cursorPageUp = view => cursorByPage(view, false);\n/**\nMove the selection one page down.\n*/\nconst cursorPageDown = view => cursorByPage(view, true);\nfunction moveByLineBoundary(view, start, forward) {\n    let line = view.lineBlockAt(start.head), moved = view.moveToLineBoundary(start, forward);\n    if (moved.head == start.head && moved.head != (forward ? line.to : line.from))\n        moved = view.moveToLineBoundary(start, forward, false);\n    if (!forward && moved.head == line.from && line.length) {\n        let space = /^\\s*/.exec(view.state.sliceDoc(line.from, Math.min(line.from + 100, line.to)))[0].length;\n        if (space && start.head != line.from + space)\n            moved = EditorSelection.cursor(line.from + space);\n    }\n    return moved;\n}\n/**\nMove the selection to the next line wrap point, or to the end of\nthe line if there isn't one left on this line.\n*/\nconst cursorLineBoundaryForward = view => moveSel(view, range => moveByLineBoundary(view, range, true));\n/**\nMove the selection to previous line wrap point, or failing that to\nthe start of the line. If the line is indented, and the cursor\nisn't already at the end of the indentation, this will move to the\nend of the indentation instead of the start of the line.\n*/\nconst cursorLineBoundaryBackward = view => moveSel(view, range => moveByLineBoundary(view, range, false));\n/**\nMove the selection one line wrap point to the left.\n*/\nconst cursorLineBoundaryLeft = view => moveSel(view, range => moveByLineBoundary(view, range, !ltrAtCursor(view)));\n/**\nMove the selection one line wrap point to the right.\n*/\nconst cursorLineBoundaryRight = view => moveSel(view, range => moveByLineBoundary(view, range, ltrAtCursor(view)));\n/**\nMove the selection to the start of the line.\n*/\nconst cursorLineStart = view => moveSel(view, range => EditorSelection.cursor(view.lineBlockAt(range.head).from, 1));\n/**\nMove the selection to the end of the line.\n*/\nconst cursorLineEnd = view => moveSel(view, range => EditorSelection.cursor(view.lineBlockAt(range.head).to, -1));\nfunction toMatchingBracket(state, dispatch, extend) {\n    let found = false, selection = updateSel(state.selection, range => {\n        let matching = matchBrackets(state, range.head, -1)\n            || matchBrackets(state, range.head, 1)\n            || (range.head > 0 && matchBrackets(state, range.head - 1, 1))\n            || (range.head < state.doc.length && matchBrackets(state, range.head + 1, -1));\n        if (!matching || !matching.end)\n            return range;\n        found = true;\n        let head = matching.start.from == range.head ? matching.end.to : matching.end.from;\n        return extend ? EditorSelection.range(range.anchor, head) : EditorSelection.cursor(head);\n    });\n    if (!found)\n        return false;\n    dispatch(setSel(state, selection));\n    return true;\n}\n/**\nMove the selection to the bracket matching the one it is currently\non, if any.\n*/\nconst cursorMatchingBracket = ({ state, dispatch }) => toMatchingBracket(state, dispatch, false);\n/**\nExtend the selection to the bracket matching the one the selection\nhead is currently on, if any.\n*/\nconst selectMatchingBracket = ({ state, dispatch }) => toMatchingBracket(state, dispatch, true);\nfunction extendSel(view, how) {\n    let selection = updateSel(view.state.selection, range => {\n        let head = how(range);\n        return EditorSelection.range(range.anchor, head.head, head.goalColumn, head.bidiLevel || undefined);\n    });\n    if (selection.eq(view.state.selection))\n        return false;\n    view.dispatch(setSel(view.state, selection));\n    return true;\n}\nfunction selectByChar(view, forward) {\n    return extendSel(view, range => view.moveByChar(range, forward));\n}\n/**\nMove the selection head one character to the left, while leaving\nthe anchor in place.\n*/\nconst selectCharLeft = view => selectByChar(view, !ltrAtCursor(view));\n/**\nMove the selection head one character to the right.\n*/\nconst selectCharRight = view => selectByChar(view, ltrAtCursor(view));\n/**\nMove the selection head one character forward.\n*/\nconst selectCharForward = view => selectByChar(view, true);\n/**\nMove the selection head one character backward.\n*/\nconst selectCharBackward = view => selectByChar(view, false);\nfunction selectByGroup(view, forward) {\n    return extendSel(view, range => view.moveByGroup(range, forward));\n}\n/**\nMove the selection head one [group](https://codemirror.net/6/docs/ref/#commands.cursorGroupLeft) to\nthe left.\n*/\nconst selectGroupLeft = view => selectByGroup(view, !ltrAtCursor(view));\n/**\nMove the selection head one group to the right.\n*/\nconst selectGroupRight = view => selectByGroup(view, ltrAtCursor(view));\n/**\nMove the selection head one group forward.\n*/\nconst selectGroupForward = view => selectByGroup(view, true);\n/**\nMove the selection head one group backward.\n*/\nconst selectGroupBackward = view => selectByGroup(view, false);\nfunction selectBySubword(view, forward) {\n    return extendSel(view, range => moveBySubword(view, range, forward));\n}\n/**\nMove the selection head one group or camel-case subword forward.\n*/\nconst selectSubwordForward = view => selectBySubword(view, true);\n/**\nMove the selection head one group or subword backward.\n*/\nconst selectSubwordBackward = view => selectBySubword(view, false);\n/**\nMove the selection head over the next syntactic element to the left.\n*/\nconst selectSyntaxLeft = view => extendSel(view, range => moveBySyntax(view.state, range, !ltrAtCursor(view)));\n/**\nMove the selection head over the next syntactic element to the right.\n*/\nconst selectSyntaxRight = view => extendSel(view, range => moveBySyntax(view.state, range, ltrAtCursor(view)));\nfunction selectByLine(view, forward) {\n    return extendSel(view, range => view.moveVertically(range, forward));\n}\n/**\nMove the selection head one line up.\n*/\nconst selectLineUp = view => selectByLine(view, false);\n/**\nMove the selection head one line down.\n*/\nconst selectLineDown = view => selectByLine(view, true);\nfunction selectByPage(view, forward) {\n    return extendSel(view, range => view.moveVertically(range, forward, pageInfo(view).height));\n}\n/**\nMove the selection head one page up.\n*/\nconst selectPageUp = view => selectByPage(view, false);\n/**\nMove the selection head one page down.\n*/\nconst selectPageDown = view => selectByPage(view, true);\n/**\nMove the selection head to the next line boundary.\n*/\nconst selectLineBoundaryForward = view => extendSel(view, range => moveByLineBoundary(view, range, true));\n/**\nMove the selection head to the previous line boundary.\n*/\nconst selectLineBoundaryBackward = view => extendSel(view, range => moveByLineBoundary(view, range, false));\n/**\nMove the selection head one line boundary to the left.\n*/\nconst selectLineBoundaryLeft = view => extendSel(view, range => moveByLineBoundary(view, range, !ltrAtCursor(view)));\n/**\nMove the selection head one line boundary to the right.\n*/\nconst selectLineBoundaryRight = view => extendSel(view, range => moveByLineBoundary(view, range, ltrAtCursor(view)));\n/**\nMove the selection head to the start of the line.\n*/\nconst selectLineStart = view => extendSel(view, range => EditorSelection.cursor(view.lineBlockAt(range.head).from));\n/**\nMove the selection head to the end of the line.\n*/\nconst selectLineEnd = view => extendSel(view, range => EditorSelection.cursor(view.lineBlockAt(range.head).to));\n/**\nMove the selection to the start of the document.\n*/\nconst cursorDocStart = ({ state, dispatch }) => {\n    dispatch(setSel(state, { anchor: 0 }));\n    return true;\n};\n/**\nMove the selection to the end of the document.\n*/\nconst cursorDocEnd = ({ state, dispatch }) => {\n    dispatch(setSel(state, { anchor: state.doc.length }));\n    return true;\n};\n/**\nMove the selection head to the start of the document.\n*/\nconst selectDocStart = ({ state, dispatch }) => {\n    dispatch(setSel(state, { anchor: state.selection.main.anchor, head: 0 }));\n    return true;\n};\n/**\nMove the selection head to the end of the document.\n*/\nconst selectDocEnd = ({ state, dispatch }) => {\n    dispatch(setSel(state, { anchor: state.selection.main.anchor, head: state.doc.length }));\n    return true;\n};\n/**\nSelect the entire document.\n*/\nconst selectAll = ({ state, dispatch }) => {\n    dispatch(state.update({ selection: { anchor: 0, head: state.doc.length }, userEvent: \"select\" }));\n    return true;\n};\n/**\nExpand the selection to cover entire lines.\n*/\nconst selectLine = ({ state, dispatch }) => {\n    let ranges = selectedLineBlocks(state).map(({ from, to }) => EditorSelection.range(from, Math.min(to + 1, state.doc.length)));\n    dispatch(state.update({ selection: EditorSelection.create(ranges), userEvent: \"select\" }));\n    return true;\n};\n/**\nSelect the next syntactic construct that is larger than the\nselection. Note that this will only work insofar as the language\n[provider](https://codemirror.net/6/docs/ref/#language.language) you use builds up a full\nsyntax tree.\n*/\nconst selectParentSyntax = ({ state, dispatch }) => {\n    let selection = updateSel(state.selection, range => {\n        var _a;\n        let stack = syntaxTree(state).resolveStack(range.from, 1);\n        for (let cur = stack; cur; cur = cur.next) {\n            let { node } = cur;\n            if (((node.from < range.from && node.to >= range.to) ||\n                (node.to > range.to && node.from <= range.from)) &&\n                ((_a = node.parent) === null || _a === void 0 ? void 0 : _a.parent))\n                return EditorSelection.range(node.to, node.from);\n        }\n        return range;\n    });\n    dispatch(setSel(state, selection));\n    return true;\n};\n/**\nSimplify the current selection. When multiple ranges are selected,\nreduce it to its main range. Otherwise, if the selection is\nnon-empty, convert it to a cursor selection.\n*/\nconst simplifySelection = ({ state, dispatch }) => {\n    let cur = state.selection, selection = null;\n    if (cur.ranges.length > 1)\n        selection = EditorSelection.create([cur.main]);\n    else if (!cur.main.empty)\n        selection = EditorSelection.create([EditorSelection.cursor(cur.main.head)]);\n    if (!selection)\n        return false;\n    dispatch(setSel(state, selection));\n    return true;\n};\nfunction deleteBy(target, by) {\n    if (target.state.readOnly)\n        return false;\n    let event = \"delete.selection\", { state } = target;\n    let changes = state.changeByRange(range => {\n        let { from, to } = range;\n        if (from == to) {\n            let towards = by(range);\n            if (towards < from) {\n                event = \"delete.backward\";\n                towards = skipAtomic(target, towards, false);\n            }\n            else if (towards > from) {\n                event = \"delete.forward\";\n                towards = skipAtomic(target, towards, true);\n            }\n            from = Math.min(from, towards);\n            to = Math.max(to, towards);\n        }\n        else {\n            from = skipAtomic(target, from, false);\n            to = skipAtomic(target, to, true);\n        }\n        return from == to ? { range } : { changes: { from, to }, range: EditorSelection.cursor(from, from < range.head ? -1 : 1) };\n    });\n    if (changes.changes.empty)\n        return false;\n    target.dispatch(state.update(changes, {\n        scrollIntoView: true,\n        userEvent: event,\n        effects: event == \"delete.selection\" ? EditorView.announce.of(state.phrase(\"Selection deleted\")) : undefined\n    }));\n    return true;\n}\nfunction skipAtomic(target, pos, forward) {\n    if (target instanceof EditorView)\n        for (let ranges of target.state.facet(EditorView.atomicRanges).map(f => f(target)))\n            ranges.between(pos, pos, (from, to) => {\n                if (from < pos && to > pos)\n                    pos = forward ? to : from;\n            });\n    return pos;\n}\nconst deleteByChar = (target, forward) => deleteBy(target, range => {\n    let pos = range.from, { state } = target, line = state.doc.lineAt(pos), before, targetPos;\n    if (!forward && pos > line.from && pos < line.from + 200 &&\n        !/[^ \\t]/.test(before = line.text.slice(0, pos - line.from))) {\n        if (before[before.length - 1] == \"\\t\")\n            return pos - 1;\n        let col = countColumn(before, state.tabSize), drop = col % getIndentUnit(state) || getIndentUnit(state);\n        for (let i = 0; i < drop && before[before.length - 1 - i] == \" \"; i++)\n            pos--;\n        targetPos = pos;\n    }\n    else {\n        targetPos = findClusterBreak(line.text, pos - line.from, forward, forward) + line.from;\n        if (targetPos == pos && line.number != (forward ? state.doc.lines : 1))\n            targetPos += forward ? 1 : -1;\n    }\n    return targetPos;\n});\n/**\nDelete the selection, or, for cursor selections, the character\nbefore the cursor.\n*/\nconst deleteCharBackward = view => deleteByChar(view, false);\n/**\nDelete the selection or the character after the cursor.\n*/\nconst deleteCharForward = view => deleteByChar(view, true);\nconst deleteByGroup = (target, forward) => deleteBy(target, range => {\n    let pos = range.head, { state } = target, line = state.doc.lineAt(pos);\n    let categorize = state.charCategorizer(pos);\n    for (let cat = null;;) {\n        if (pos == (forward ? line.to : line.from)) {\n            if (pos == range.head && line.number != (forward ? state.doc.lines : 1))\n                pos += forward ? 1 : -1;\n            break;\n        }\n        let next = findClusterBreak(line.text, pos - line.from, forward) + line.from;\n        let nextChar = line.text.slice(Math.min(pos, next) - line.from, Math.max(pos, next) - line.from);\n        let nextCat = categorize(nextChar);\n        if (cat != null && nextCat != cat)\n            break;\n        if (nextChar != \" \" || pos != range.head)\n            cat = nextCat;\n        pos = next;\n    }\n    return pos;\n});\n/**\nDelete the selection or backward until the end of the next\n[group](https://codemirror.net/6/docs/ref/#view.EditorView.moveByGroup), only skipping groups of\nwhitespace when they consist of a single space.\n*/\nconst deleteGroupBackward = target => deleteByGroup(target, false);\n/**\nDelete the selection or forward until the end of the next group.\n*/\nconst deleteGroupForward = target => deleteByGroup(target, true);\n/**\nDelete the selection, or, if it is a cursor selection, delete to\nthe end of the line. If the cursor is directly at the end of the\nline, delete the line break after it.\n*/\nconst deleteToLineEnd = view => deleteBy(view, range => {\n    let lineEnd = view.lineBlockAt(range.head).to;\n    return range.head < lineEnd ? lineEnd : Math.min(view.state.doc.length, range.head + 1);\n});\n/**\nDelete the selection, or, if it is a cursor selection, delete to\nthe start of the line. If the cursor is directly at the start of the\nline, delete the line break before it.\n*/\nconst deleteToLineStart = view => deleteBy(view, range => {\n    let lineStart = view.lineBlockAt(range.head).from;\n    return range.head > lineStart ? lineStart : Math.max(0, range.head - 1);\n});\n/**\nDelete the selection, or, if it is a cursor selection, delete to\nthe start of the line or the next line wrap before the cursor.\n*/\nconst deleteLineBoundaryBackward = view => deleteBy(view, range => {\n    let lineStart = view.moveToLineBoundary(range, false).head;\n    return range.head > lineStart ? lineStart : Math.max(0, range.head - 1);\n});\n/**\nDelete the selection, or, if it is a cursor selection, delete to\nthe end of the line or the next line wrap after the cursor.\n*/\nconst deleteLineBoundaryForward = view => deleteBy(view, range => {\n    let lineStart = view.moveToLineBoundary(range, true).head;\n    return range.head < lineStart ? lineStart : Math.min(view.state.doc.length, range.head + 1);\n});\n/**\nDelete all whitespace directly before a line end from the\ndocument.\n*/\nconst deleteTrailingWhitespace = ({ state, dispatch }) => {\n    if (state.readOnly)\n        return false;\n    let changes = [];\n    for (let pos = 0, prev = \"\", iter = state.doc.iter();;) {\n        iter.next();\n        if (iter.lineBreak || iter.done) {\n            let trailing = prev.search(/\\s+$/);\n            if (trailing > -1)\n                changes.push({ from: pos - (prev.length - trailing), to: pos });\n            if (iter.done)\n                break;\n            prev = \"\";\n        }\n        else {\n            prev = iter.value;\n        }\n        pos += iter.value.length;\n    }\n    if (!changes.length)\n        return false;\n    dispatch(state.update({ changes, userEvent: \"delete\" }));\n    return true;\n};\n/**\nReplace each selection range with a line break, leaving the cursor\non the line before the break.\n*/\nconst splitLine = ({ state, dispatch }) => {\n    if (state.readOnly)\n        return false;\n    let changes = state.changeByRange(range => {\n        return { changes: { from: range.from, to: range.to, insert: Text.of([\"\", \"\"]) },\n            range: EditorSelection.cursor(range.from) };\n    });\n    dispatch(state.update(changes, { scrollIntoView: true, userEvent: \"input\" }));\n    return true;\n};\n/**\nFlip the characters before and after the cursor(s).\n*/\nconst transposeChars = ({ state, dispatch }) => {\n    if (state.readOnly)\n        return false;\n    let changes = state.changeByRange(range => {\n        if (!range.empty || range.from == 0 || range.from == state.doc.length)\n            return { range };\n        let pos = range.from, line = state.doc.lineAt(pos);\n        let from = pos == line.from ? pos - 1 : findClusterBreak(line.text, pos - line.from, false) + line.from;\n        let to = pos == line.to ? pos + 1 : findClusterBreak(line.text, pos - line.from, true) + line.from;\n        return { changes: { from, to, insert: state.doc.slice(pos, to).append(state.doc.slice(from, pos)) },\n            range: EditorSelection.cursor(to) };\n    });\n    if (changes.changes.empty)\n        return false;\n    dispatch(state.update(changes, { scrollIntoView: true, userEvent: \"move.character\" }));\n    return true;\n};\nfunction selectedLineBlocks(state) {\n    let blocks = [], upto = -1;\n    for (let range of state.selection.ranges) {\n        let startLine = state.doc.lineAt(range.from), endLine = state.doc.lineAt(range.to);\n        if (!range.empty && range.to == endLine.from)\n            endLine = state.doc.lineAt(range.to - 1);\n        if (upto >= startLine.number) {\n            let prev = blocks[blocks.length - 1];\n            prev.to = endLine.to;\n            prev.ranges.push(range);\n        }\n        else {\n            blocks.push({ from: startLine.from, to: endLine.to, ranges: [range] });\n        }\n        upto = endLine.number + 1;\n    }\n    return blocks;\n}\nfunction moveLine(state, dispatch, forward) {\n    if (state.readOnly)\n        return false;\n    let changes = [], ranges = [];\n    for (let block of selectedLineBlocks(state)) {\n        if (forward ? block.to == state.doc.length : block.from == 0)\n            continue;\n        let nextLine = state.doc.lineAt(forward ? block.to + 1 : block.from - 1);\n        let size = nextLine.length + 1;\n        if (forward) {\n            changes.push({ from: block.to, to: nextLine.to }, { from: block.from, insert: nextLine.text + state.lineBreak });\n            for (let r of block.ranges)\n                ranges.push(EditorSelection.range(Math.min(state.doc.length, r.anchor + size), Math.min(state.doc.length, r.head + size)));\n        }\n        else {\n            changes.push({ from: nextLine.from, to: block.from }, { from: block.to, insert: state.lineBreak + nextLine.text });\n            for (let r of block.ranges)\n                ranges.push(EditorSelection.range(r.anchor - size, r.head - size));\n        }\n    }\n    if (!changes.length)\n        return false;\n    dispatch(state.update({\n        changes,\n        scrollIntoView: true,\n        selection: EditorSelection.create(ranges, state.selection.mainIndex),\n        userEvent: \"move.line\"\n    }));\n    return true;\n}\n/**\nMove the selected lines up one line.\n*/\nconst moveLineUp = ({ state, dispatch }) => moveLine(state, dispatch, false);\n/**\nMove the selected lines down one line.\n*/\nconst moveLineDown = ({ state, dispatch }) => moveLine(state, dispatch, true);\nfunction copyLine(state, dispatch, forward) {\n    if (state.readOnly)\n        return false;\n    let changes = [];\n    for (let block of selectedLineBlocks(state)) {\n        if (forward)\n            changes.push({ from: block.from, insert: state.doc.slice(block.from, block.to) + state.lineBreak });\n        else\n            changes.push({ from: block.to, insert: state.lineBreak + state.doc.slice(block.from, block.to) });\n    }\n    dispatch(state.update({ changes, scrollIntoView: true, userEvent: \"input.copyline\" }));\n    return true;\n}\n/**\nCreate a copy of the selected lines. Keep the selection in the top copy.\n*/\nconst copyLineUp = ({ state, dispatch }) => copyLine(state, dispatch, false);\n/**\nCreate a copy of the selected lines. Keep the selection in the bottom copy.\n*/\nconst copyLineDown = ({ state, dispatch }) => copyLine(state, dispatch, true);\n/**\nDelete selected lines.\n*/\nconst deleteLine = view => {\n    if (view.state.readOnly)\n        return false;\n    let { state } = view, changes = state.changes(selectedLineBlocks(state).map(({ from, to }) => {\n        if (from > 0)\n            from--;\n        else if (to < state.doc.length)\n            to++;\n        return { from, to };\n    }));\n    let selection = updateSel(state.selection, range => view.moveVertically(range, true)).map(changes);\n    view.dispatch({ changes, selection, scrollIntoView: true, userEvent: \"delete.line\" });\n    return true;\n};\n/**\nReplace the selection with a newline.\n*/\nconst insertNewline = ({ state, dispatch }) => {\n    dispatch(state.update(state.replaceSelection(state.lineBreak), { scrollIntoView: true, userEvent: \"input\" }));\n    return true;\n};\nfunction isBetweenBrackets(state, pos) {\n    if (/\\(\\)|\\[\\]|\\{\\}/.test(state.sliceDoc(pos - 1, pos + 1)))\n        return { from: pos, to: pos };\n    let context = syntaxTree(state).resolveInner(pos);\n    let before = context.childBefore(pos), after = context.childAfter(pos), closedBy;\n    if (before && after && before.to <= pos && after.from >= pos &&\n        (closedBy = before.type.prop(NodeProp.closedBy)) && closedBy.indexOf(after.name) > -1 &&\n        state.doc.lineAt(before.to).from == state.doc.lineAt(after.from).from &&\n        !/\\S/.test(state.sliceDoc(before.to, after.from)))\n        return { from: before.to, to: after.from };\n    return null;\n}\n/**\nReplace the selection with a newline and indent the newly created\nline(s). If the current line consists only of whitespace, this\nwill also delete that whitespace. When the cursor is between\nmatching brackets, an additional newline will be inserted after\nthe cursor.\n*/\nconst insertNewlineAndIndent = /*@__PURE__*/newlineAndIndent(false);\n/**\nCreate a blank, indented line below the current line.\n*/\nconst insertBlankLine = /*@__PURE__*/newlineAndIndent(true);\nfunction newlineAndIndent(atEof) {\n    return ({ state, dispatch }) => {\n        if (state.readOnly)\n            return false;\n        let changes = state.changeByRange(range => {\n            let { from, to } = range, line = state.doc.lineAt(from);\n            let explode = !atEof && from == to && isBetweenBrackets(state, from);\n            if (atEof)\n                from = to = (to <= line.to ? line : state.doc.lineAt(to)).to;\n            let cx = new IndentContext(state, { simulateBreak: from, simulateDoubleBreak: !!explode });\n            let indent = getIndentation(cx, from);\n            if (indent == null)\n                indent = countColumn(/^\\s*/.exec(state.doc.lineAt(from).text)[0], state.tabSize);\n            while (to < line.to && /\\s/.test(line.text[to - line.from]))\n                to++;\n            if (explode)\n                ({ from, to } = explode);\n            else if (from > line.from && from < line.from + 100 && !/\\S/.test(line.text.slice(0, from)))\n                from = line.from;\n            let insert = [\"\", indentString(state, indent)];\n            if (explode)\n                insert.push(indentString(state, cx.lineIndent(line.from, -1)));\n            return { changes: { from, to, insert: Text.of(insert) },\n                range: EditorSelection.cursor(from + 1 + insert[1].length) };\n        });\n        dispatch(state.update(changes, { scrollIntoView: true, userEvent: \"input\" }));\n        return true;\n    };\n}\nfunction changeBySelectedLine(state, f) {\n    let atLine = -1;\n    return state.changeByRange(range => {\n        let changes = [];\n        for (let pos = range.from; pos <= range.to;) {\n            let line = state.doc.lineAt(pos);\n            if (line.number > atLine && (range.empty || range.to > line.from)) {\n                f(line, changes, range);\n                atLine = line.number;\n            }\n            pos = line.to + 1;\n        }\n        let changeSet = state.changes(changes);\n        return { changes,\n            range: EditorSelection.range(changeSet.mapPos(range.anchor, 1), changeSet.mapPos(range.head, 1)) };\n    });\n}\n/**\nAuto-indent the selected lines. This uses the [indentation service\nfacet](https://codemirror.net/6/docs/ref/#language.indentService) as source for auto-indent\ninformation.\n*/\nconst indentSelection = ({ state, dispatch }) => {\n    if (state.readOnly)\n        return false;\n    let updated = Object.create(null);\n    let context = new IndentContext(state, { overrideIndentation: start => {\n            let found = updated[start];\n            return found == null ? -1 : found;\n        } });\n    let changes = changeBySelectedLine(state, (line, changes, range) => {\n        let indent = getIndentation(context, line.from);\n        if (indent == null)\n            return;\n        if (!/\\S/.test(line.text))\n            indent = 0;\n        let cur = /^\\s*/.exec(line.text)[0];\n        let norm = indentString(state, indent);\n        if (cur != norm || range.from < line.from + cur.length) {\n            updated[line.from] = indent;\n            changes.push({ from: line.from, to: line.from + cur.length, insert: norm });\n        }\n    });\n    if (!changes.changes.empty)\n        dispatch(state.update(changes, { userEvent: \"indent\" }));\n    return true;\n};\n/**\nAdd a [unit](https://codemirror.net/6/docs/ref/#language.indentUnit) of indentation to all selected\nlines.\n*/\nconst indentMore = ({ state, dispatch }) => {\n    if (state.readOnly)\n        return false;\n    dispatch(state.update(changeBySelectedLine(state, (line, changes) => {\n        changes.push({ from: line.from, insert: state.facet(indentUnit) });\n    }), { userEvent: \"input.indent\" }));\n    return true;\n};\n/**\nRemove a [unit](https://codemirror.net/6/docs/ref/#language.indentUnit) of indentation from all\nselected lines.\n*/\nconst indentLess = ({ state, dispatch }) => {\n    if (state.readOnly)\n        return false;\n    dispatch(state.update(changeBySelectedLine(state, (line, changes) => {\n        let space = /^\\s*/.exec(line.text)[0];\n        if (!space)\n            return;\n        let col = countColumn(space, state.tabSize), keep = 0;\n        let insert = indentString(state, Math.max(0, col - getIndentUnit(state)));\n        while (keep < space.length && keep < insert.length && space.charCodeAt(keep) == insert.charCodeAt(keep))\n            keep++;\n        changes.push({ from: line.from + keep, to: line.from + space.length, insert: insert.slice(keep) });\n    }), { userEvent: \"delete.dedent\" }));\n    return true;\n};\n/**\nInsert a tab character at the cursor or, if something is selected,\nuse [`indentMore`](https://codemirror.net/6/docs/ref/#commands.indentMore) to indent the entire\nselection.\n*/\nconst insertTab = ({ state, dispatch }) => {\n    if (state.selection.ranges.some(r => !r.empty))\n        return indentMore({ state, dispatch });\n    dispatch(state.update(state.replaceSelection(\"\\t\"), { scrollIntoView: true, userEvent: \"input\" }));\n    return true;\n};\n/**\nArray of key bindings containing the Emacs-style bindings that are\navailable on macOS by default.\n\n - Ctrl-b: [`cursorCharLeft`](https://codemirror.net/6/docs/ref/#commands.cursorCharLeft) ([`selectCharLeft`](https://codemirror.net/6/docs/ref/#commands.selectCharLeft) with Shift)\n - Ctrl-f: [`cursorCharRight`](https://codemirror.net/6/docs/ref/#commands.cursorCharRight) ([`selectCharRight`](https://codemirror.net/6/docs/ref/#commands.selectCharRight) with Shift)\n - Ctrl-p: [`cursorLineUp`](https://codemirror.net/6/docs/ref/#commands.cursorLineUp) ([`selectLineUp`](https://codemirror.net/6/docs/ref/#commands.selectLineUp) with Shift)\n - Ctrl-n: [`cursorLineDown`](https://codemirror.net/6/docs/ref/#commands.cursorLineDown) ([`selectLineDown`](https://codemirror.net/6/docs/ref/#commands.selectLineDown) with Shift)\n - Ctrl-a: [`cursorLineStart`](https://codemirror.net/6/docs/ref/#commands.cursorLineStart) ([`selectLineStart`](https://codemirror.net/6/docs/ref/#commands.selectLineStart) with Shift)\n - Ctrl-e: [`cursorLineEnd`](https://codemirror.net/6/docs/ref/#commands.cursorLineEnd) ([`selectLineEnd`](https://codemirror.net/6/docs/ref/#commands.selectLineEnd) with Shift)\n - Ctrl-d: [`deleteCharForward`](https://codemirror.net/6/docs/ref/#commands.deleteCharForward)\n - Ctrl-h: [`deleteCharBackward`](https://codemirror.net/6/docs/ref/#commands.deleteCharBackward)\n - Ctrl-k: [`deleteToLineEnd`](https://codemirror.net/6/docs/ref/#commands.deleteToLineEnd)\n - Ctrl-Alt-h: [`deleteGroupBackward`](https://codemirror.net/6/docs/ref/#commands.deleteGroupBackward)\n - Ctrl-o: [`splitLine`](https://codemirror.net/6/docs/ref/#commands.splitLine)\n - Ctrl-t: [`transposeChars`](https://codemirror.net/6/docs/ref/#commands.transposeChars)\n - Ctrl-v: [`cursorPageDown`](https://codemirror.net/6/docs/ref/#commands.cursorPageDown)\n - Alt-v: [`cursorPageUp`](https://codemirror.net/6/docs/ref/#commands.cursorPageUp)\n*/\nconst emacsStyleKeymap = [\n    { key: \"Ctrl-b\", run: cursorCharLeft, shift: selectCharLeft, preventDefault: true },\n    { key: \"Ctrl-f\", run: cursorCharRight, shift: selectCharRight },\n    { key: \"Ctrl-p\", run: cursorLineUp, shift: selectLineUp },\n    { key: \"Ctrl-n\", run: cursorLineDown, shift: selectLineDown },\n    { key: \"Ctrl-a\", run: cursorLineStart, shift: selectLineStart },\n    { key: \"Ctrl-e\", run: cursorLineEnd, shift: selectLineEnd },\n    { key: \"Ctrl-d\", run: deleteCharForward },\n    { key: \"Ctrl-h\", run: deleteCharBackward },\n    { key: \"Ctrl-k\", run: deleteToLineEnd },\n    { key: \"Ctrl-Alt-h\", run: deleteGroupBackward },\n    { key: \"Ctrl-o\", run: splitLine },\n    { key: \"Ctrl-t\", run: transposeChars },\n    { key: \"Ctrl-v\", run: cursorPageDown },\n];\n/**\nAn array of key bindings closely sticking to platform-standard or\nwidely used bindings. (This includes the bindings from\n[`emacsStyleKeymap`](https://codemirror.net/6/docs/ref/#commands.emacsStyleKeymap), with their `key`\nproperty changed to `mac`.)\n\n - ArrowLeft: [`cursorCharLeft`](https://codemirror.net/6/docs/ref/#commands.cursorCharLeft) ([`selectCharLeft`](https://codemirror.net/6/docs/ref/#commands.selectCharLeft) with Shift)\n - ArrowRight: [`cursorCharRight`](https://codemirror.net/6/docs/ref/#commands.cursorCharRight) ([`selectCharRight`](https://codemirror.net/6/docs/ref/#commands.selectCharRight) with Shift)\n - Ctrl-ArrowLeft (Alt-ArrowLeft on macOS): [`cursorGroupLeft`](https://codemirror.net/6/docs/ref/#commands.cursorGroupLeft) ([`selectGroupLeft`](https://codemirror.net/6/docs/ref/#commands.selectGroupLeft) with Shift)\n - Ctrl-ArrowRight (Alt-ArrowRight on macOS): [`cursorGroupRight`](https://codemirror.net/6/docs/ref/#commands.cursorGroupRight) ([`selectGroupRight`](https://codemirror.net/6/docs/ref/#commands.selectGroupRight) with Shift)\n - Cmd-ArrowLeft (on macOS): [`cursorLineStart`](https://codemirror.net/6/docs/ref/#commands.cursorLineStart) ([`selectLineStart`](https://codemirror.net/6/docs/ref/#commands.selectLineStart) with Shift)\n - Cmd-ArrowRight (on macOS): [`cursorLineEnd`](https://codemirror.net/6/docs/ref/#commands.cursorLineEnd) ([`selectLineEnd`](https://codemirror.net/6/docs/ref/#commands.selectLineEnd) with Shift)\n - ArrowUp: [`cursorLineUp`](https://codemirror.net/6/docs/ref/#commands.cursorLineUp) ([`selectLineUp`](https://codemirror.net/6/docs/ref/#commands.selectLineUp) with Shift)\n - ArrowDown: [`cursorLineDown`](https://codemirror.net/6/docs/ref/#commands.cursorLineDown) ([`selectLineDown`](https://codemirror.net/6/docs/ref/#commands.selectLineDown) with Shift)\n - Cmd-ArrowUp (on macOS): [`cursorDocStart`](https://codemirror.net/6/docs/ref/#commands.cursorDocStart) ([`selectDocStart`](https://codemirror.net/6/docs/ref/#commands.selectDocStart) with Shift)\n - Cmd-ArrowDown (on macOS): [`cursorDocEnd`](https://codemirror.net/6/docs/ref/#commands.cursorDocEnd) ([`selectDocEnd`](https://codemirror.net/6/docs/ref/#commands.selectDocEnd) with Shift)\n - Ctrl-ArrowUp (on macOS): [`cursorPageUp`](https://codemirror.net/6/docs/ref/#commands.cursorPageUp) ([`selectPageUp`](https://codemirror.net/6/docs/ref/#commands.selectPageUp) with Shift)\n - Ctrl-ArrowDown (on macOS): [`cursorPageDown`](https://codemirror.net/6/docs/ref/#commands.cursorPageDown) ([`selectPageDown`](https://codemirror.net/6/docs/ref/#commands.selectPageDown) with Shift)\n - PageUp: [`cursorPageUp`](https://codemirror.net/6/docs/ref/#commands.cursorPageUp) ([`selectPageUp`](https://codemirror.net/6/docs/ref/#commands.selectPageUp) with Shift)\n - PageDown: [`cursorPageDown`](https://codemirror.net/6/docs/ref/#commands.cursorPageDown) ([`selectPageDown`](https://codemirror.net/6/docs/ref/#commands.selectPageDown) with Shift)\n - Home: [`cursorLineBoundaryBackward`](https://codemirror.net/6/docs/ref/#commands.cursorLineBoundaryBackward) ([`selectLineBoundaryBackward`](https://codemirror.net/6/docs/ref/#commands.selectLineBoundaryBackward) with Shift)\n - End: [`cursorLineBoundaryForward`](https://codemirror.net/6/docs/ref/#commands.cursorLineBoundaryForward) ([`selectLineBoundaryForward`](https://codemirror.net/6/docs/ref/#commands.selectLineBoundaryForward) with Shift)\n - Ctrl-Home (Cmd-Home on macOS): [`cursorDocStart`](https://codemirror.net/6/docs/ref/#commands.cursorDocStart) ([`selectDocStart`](https://codemirror.net/6/docs/ref/#commands.selectDocStart) with Shift)\n - Ctrl-End (Cmd-Home on macOS): [`cursorDocEnd`](https://codemirror.net/6/docs/ref/#commands.cursorDocEnd) ([`selectDocEnd`](https://codemirror.net/6/docs/ref/#commands.selectDocEnd) with Shift)\n - Enter: [`insertNewlineAndIndent`](https://codemirror.net/6/docs/ref/#commands.insertNewlineAndIndent)\n - Ctrl-a (Cmd-a on macOS): [`selectAll`](https://codemirror.net/6/docs/ref/#commands.selectAll)\n - Backspace: [`deleteCharBackward`](https://codemirror.net/6/docs/ref/#commands.deleteCharBackward)\n - Delete: [`deleteCharForward`](https://codemirror.net/6/docs/ref/#commands.deleteCharForward)\n - Ctrl-Backspace (Alt-Backspace on macOS): [`deleteGroupBackward`](https://codemirror.net/6/docs/ref/#commands.deleteGroupBackward)\n - Ctrl-Delete (Alt-Delete on macOS): [`deleteGroupForward`](https://codemirror.net/6/docs/ref/#commands.deleteGroupForward)\n - Cmd-Backspace (macOS): [`deleteLineBoundaryBackward`](https://codemirror.net/6/docs/ref/#commands.deleteLineBoundaryBackward).\n - Cmd-Delete (macOS): [`deleteLineBoundaryForward`](https://codemirror.net/6/docs/ref/#commands.deleteLineBoundaryForward).\n*/\nconst standardKeymap = /*@__PURE__*/[\n    { key: \"ArrowLeft\", run: cursorCharLeft, shift: selectCharLeft, preventDefault: true },\n    { key: \"Mod-ArrowLeft\", mac: \"Alt-ArrowLeft\", run: cursorGroupLeft, shift: selectGroupLeft, preventDefault: true },\n    { mac: \"Cmd-ArrowLeft\", run: cursorLineBoundaryLeft, shift: selectLineBoundaryLeft, preventDefault: true },\n    { key: \"ArrowRight\", run: cursorCharRight, shift: selectCharRight, preventDefault: true },\n    { key: \"Mod-ArrowRight\", mac: \"Alt-ArrowRight\", run: cursorGroupRight, shift: selectGroupRight, preventDefault: true },\n    { mac: \"Cmd-ArrowRight\", run: cursorLineBoundaryRight, shift: selectLineBoundaryRight, preventDefault: true },\n    { key: \"ArrowUp\", run: cursorLineUp, shift: selectLineUp, preventDefault: true },\n    { mac: \"Cmd-ArrowUp\", run: cursorDocStart, shift: selectDocStart },\n    { mac: \"Ctrl-ArrowUp\", run: cursorPageUp, shift: selectPageUp },\n    { key: \"ArrowDown\", run: cursorLineDown, shift: selectLineDown, preventDefault: true },\n    { mac: \"Cmd-ArrowDown\", run: cursorDocEnd, shift: selectDocEnd },\n    { mac: \"Ctrl-ArrowDown\", run: cursorPageDown, shift: selectPageDown },\n    { key: \"PageUp\", run: cursorPageUp, shift: selectPageUp },\n    { key: \"PageDown\", run: cursorPageDown, shift: selectPageDown },\n    { key: \"Home\", run: cursorLineBoundaryBackward, shift: selectLineBoundaryBackward, preventDefault: true },\n    { key: \"Mod-Home\", run: cursorDocStart, shift: selectDocStart },\n    { key: \"End\", run: cursorLineBoundaryForward, shift: selectLineBoundaryForward, preventDefault: true },\n    { key: \"Mod-End\", run: cursorDocEnd, shift: selectDocEnd },\n    { key: \"Enter\", run: insertNewlineAndIndent },\n    { key: \"Mod-a\", run: selectAll },\n    { key: \"Backspace\", run: deleteCharBackward, shift: deleteCharBackward },\n    { key: \"Delete\", run: deleteCharForward },\n    { key: \"Mod-Backspace\", mac: \"Alt-Backspace\", run: deleteGroupBackward },\n    { key: \"Mod-Delete\", mac: \"Alt-Delete\", run: deleteGroupForward },\n    { mac: \"Mod-Backspace\", run: deleteLineBoundaryBackward },\n    { mac: \"Mod-Delete\", run: deleteLineBoundaryForward }\n].concat(/*@__PURE__*/emacsStyleKeymap.map(b => ({ mac: b.key, run: b.run, shift: b.shift })));\n/**\nThe default keymap. Includes all bindings from\n[`standardKeymap`](https://codemirror.net/6/docs/ref/#commands.standardKeymap) plus the following:\n\n- Alt-ArrowLeft (Ctrl-ArrowLeft on macOS): [`cursorSyntaxLeft`](https://codemirror.net/6/docs/ref/#commands.cursorSyntaxLeft) ([`selectSyntaxLeft`](https://codemirror.net/6/docs/ref/#commands.selectSyntaxLeft) with Shift)\n- Alt-ArrowRight (Ctrl-ArrowRight on macOS): [`cursorSyntaxRight`](https://codemirror.net/6/docs/ref/#commands.cursorSyntaxRight) ([`selectSyntaxRight`](https://codemirror.net/6/docs/ref/#commands.selectSyntaxRight) with Shift)\n- Alt-ArrowUp: [`moveLineUp`](https://codemirror.net/6/docs/ref/#commands.moveLineUp)\n- Alt-ArrowDown: [`moveLineDown`](https://codemirror.net/6/docs/ref/#commands.moveLineDown)\n- Shift-Alt-ArrowUp: [`copyLineUp`](https://codemirror.net/6/docs/ref/#commands.copyLineUp)\n- Shift-Alt-ArrowDown: [`copyLineDown`](https://codemirror.net/6/docs/ref/#commands.copyLineDown)\n- Escape: [`simplifySelection`](https://codemirror.net/6/docs/ref/#commands.simplifySelection)\n- Ctrl-Enter (Cmd-Enter on macOS): [`insertBlankLine`](https://codemirror.net/6/docs/ref/#commands.insertBlankLine)\n- Alt-l (Ctrl-l on macOS): [`selectLine`](https://codemirror.net/6/docs/ref/#commands.selectLine)\n- Ctrl-i (Cmd-i on macOS): [`selectParentSyntax`](https://codemirror.net/6/docs/ref/#commands.selectParentSyntax)\n- Ctrl-[ (Cmd-[ on macOS): [`indentLess`](https://codemirror.net/6/docs/ref/#commands.indentLess)\n- Ctrl-] (Cmd-] on macOS): [`indentMore`](https://codemirror.net/6/docs/ref/#commands.indentMore)\n- Ctrl-Alt-\\\\ (Cmd-Alt-\\\\ on macOS): [`indentSelection`](https://codemirror.net/6/docs/ref/#commands.indentSelection)\n- Shift-Ctrl-k (Shift-Cmd-k on macOS): [`deleteLine`](https://codemirror.net/6/docs/ref/#commands.deleteLine)\n- Shift-Ctrl-\\\\ (Shift-Cmd-\\\\ on macOS): [`cursorMatchingBracket`](https://codemirror.net/6/docs/ref/#commands.cursorMatchingBracket)\n- Ctrl-/ (Cmd-/ on macOS): [`toggleComment`](https://codemirror.net/6/docs/ref/#commands.toggleComment).\n- Shift-Alt-a: [`toggleBlockComment`](https://codemirror.net/6/docs/ref/#commands.toggleBlockComment).\n*/\nconst defaultKeymap = /*@__PURE__*/[\n    { key: \"Alt-ArrowLeft\", mac: \"Ctrl-ArrowLeft\", run: cursorSyntaxLeft, shift: selectSyntaxLeft },\n    { key: \"Alt-ArrowRight\", mac: \"Ctrl-ArrowRight\", run: cursorSyntaxRight, shift: selectSyntaxRight },\n    { key: \"Alt-ArrowUp\", run: moveLineUp },\n    { key: \"Shift-Alt-ArrowUp\", run: copyLineUp },\n    { key: \"Alt-ArrowDown\", run: moveLineDown },\n    { key: \"Shift-Alt-ArrowDown\", run: copyLineDown },\n    { key: \"Escape\", run: simplifySelection },\n    { key: \"Mod-Enter\", run: insertBlankLine },\n    { key: \"Alt-l\", mac: \"Ctrl-l\", run: selectLine },\n    { key: \"Mod-i\", run: selectParentSyntax, preventDefault: true },\n    { key: \"Mod-[\", run: indentLess },\n    { key: \"Mod-]\", run: indentMore },\n    { key: \"Mod-Alt-\\\\\", run: indentSelection },\n    { key: \"Shift-Mod-k\", run: deleteLine },\n    { key: \"Shift-Mod-\\\\\", run: cursorMatchingBracket },\n    { key: \"Mod-/\", run: toggleComment },\n    { key: \"Alt-A\", run: toggleBlockComment }\n].concat(standardKeymap);\n/**\nA binding that binds Tab to [`indentMore`](https://codemirror.net/6/docs/ref/#commands.indentMore) and\nShift-Tab to [`indentLess`](https://codemirror.net/6/docs/ref/#commands.indentLess).\nPlease see the [Tab example](../../examples/tab/) before using\nthis.\n*/\nconst indentWithTab = { key: \"Tab\", run: indentMore, shift: indentLess };\n\nexport { blockComment, blockUncomment, copyLineDown, copyLineUp, cursorCharBackward, cursorCharForward, cursorCharLeft, cursorCharRight, cursorDocEnd, cursorDocStart, cursorGroupBackward, cursorGroupForward, cursorGroupLeft, cursorGroupRight, cursorLineBoundaryBackward, cursorLineBoundaryForward, cursorLineBoundaryLeft, cursorLineBoundaryRight, cursorLineDown, cursorLineEnd, cursorLineStart, cursorLineUp, cursorMatchingBracket, cursorPageDown, cursorPageUp, cursorSubwordBackward, cursorSubwordForward, cursorSyntaxLeft, cursorSyntaxRight, defaultKeymap, deleteCharBackward, deleteCharForward, deleteGroupBackward, deleteGroupForward, deleteLine, deleteLineBoundaryBackward, deleteLineBoundaryForward, deleteToLineEnd, deleteToLineStart, deleteTrailingWhitespace, emacsStyleKeymap, history, historyField, historyKeymap, indentLess, indentMore, indentSelection, indentWithTab, insertBlankLine, insertNewline, insertNewlineAndIndent, insertTab, invertedEffects, isolateHistory, lineComment, lineUncomment, moveLineDown, moveLineUp, redo, redoDepth, redoSelection, selectAll, selectCharBackward, selectCharForward, selectCharLeft, selectCharRight, selectDocEnd, selectDocStart, selectGroupBackward, selectGroupForward, selectGroupLeft, selectGroupRight, selectLine, selectLineBoundaryBackward, selectLineBoundaryForward, selectLineBoundaryLeft, selectLineBoundaryRight, selectLineDown, selectLineEnd, selectLineStart, selectLineUp, selectMatchingBracket, selectPageDown, selectPageUp, selectParentSyntax, selectSubwordBackward, selectSubwordForward, selectSyntaxLeft, selectSyntaxRight, simplifySelection, splitLine, standardKeymap, toggleBlockComment, toggleBlockCommentByLine, toggleComment, toggleLineComment, transposeChars, undo, undoDepth, undoSelection };\n", "import {BlockInfo, EditorView, gutter, GutterMarker, ViewPlugin, ViewUpdate, WidgetType} from \"@codemirror/view\";\nimport {EditorSelection, EditorState, RangeSet, RangeSetBuilder} from \"@codemirror/state\";\n\nimport {\n    codeFolding,\n    foldable,\n    foldEffect,\n    foldState,\n    language,\n    syntaxTree,\n    unfoldEffect,\n} from \"@codemirror/language\";\n\ntype DocRange = {\n    from: number;\n    to: number;\n};\n\nfunction findFold(state: EditorState, from: number, to: number) {\n    let found: { from: number, to: number } | null = null\n    state.field(foldState , false)?.between(from, to, (from, to) => {\n        if (!found || found.from > from) found = {from, to}\n    })\n    return found\n}\n\nfunction generateRandomDomId(prefix = '') {\n    return prefix +'-' + Date.now().toString(36) + '-' + Math.random().toString(36).slice(2, 11);\n}\n\ntype Handlers = { [event: string]: (view: EditorView, line: BlockInfo, event: Event) => boolean }\n\ninterface FoldGutterConfig {\n    markerDOM?: ((open: boolean) => HTMLElement) | null\n    openText?: string\n    closedText?: string\n    domEventHandlers?: Handlers\n    foldingChanged?: (update: ViewUpdate) => boolean\n}\n\nconst foldGutterDefaults: Required<FoldGutterConfig> = {\n    openText: \"\u2304\",\n    closedText: \"\u203A\",\n    markerDOM:  null,\n    domEventHandlers: {},\n    foldingChanged: (update: ViewUpdate) => false\n}\n\nclass FoldMarker extends GutterMarker {\n    constructor(readonly config: Required<FoldGutterConfig>, readonly open: boolean) {\n        super()\n    }\n\n    eq(other: FoldMarker) {\n        return this.config == other.config && this.open == other.open\n    }\n\n    toDOM(view: EditorView) {\n        if (this.config.markerDOM) return this.config.markerDOM(this.open)\n        let span = document.createElement(\"span\")\n        if (this.open) {\n            span.textContent = this.config.openText;\n            span.title = view.state.phrase(\"Fold line or hold to drag\" )\n            span.id = generateRandomDomId(\"fold-marker\");\n        } else {\n            span.textContent = this.config.closedText;\n            span.title = view.state.phrase(\"Unfold line or hold to drag\")\n            span.id = generateRandomDomId(\"unfold-marker\");\n        }\n        return span\n    }\n}\n\nexport function dropFoldGutter(config = {}) {\n    let fullConfig = {...foldGutterDefaults, ...config}\n    let canFold = new FoldMarker(fullConfig, true), canUnfold = new FoldMarker(fullConfig, false)\n    let markers = ViewPlugin.fromClass(class {\n        markers: RangeSet<FoldMarker>\n        from: number\n        constructor(view: EditorView) {\n            this.from = view.viewport.from\n            this.markers = this.buildMarkers(view)\n        }\n        update(update: ViewUpdate) {\n            if (update.docChanged || update.viewportChanged ||\n                update.startState.facet(language) != update.state.facet(language) ||\n                update.startState.field(foldState, false) != update.state.field(foldState, false) ||\n                syntaxTree(update.startState) != syntaxTree(update.state) ||\n                fullConfig.foldingChanged(update)){\n                this.markers = this.buildMarkers(update.view)\n            }\n\n        }\n        buildMarkers(view: EditorView) {\n            let builder = new RangeSetBuilder<FoldMarker>()\n            for (let line of view.viewportLineBlocks) {\n\n                const fold = findFold(view.state, line.from, line.to);\n                const foldableRange = foldable(view.state, line.from, line.to);\n\n                let mark = fold ? canUnfold : foldableRange ? canFold : null\n                if (mark) {\n                    builder.add(line.from, line.from, mark);\n                }\n                if (foldableRange) {\n                    // \u5728\u8FD9\u91CC\u83B7\u53D6\u63D2\u5165widget\u7684\u4F4D\u7F6E\n                    //\u8FD9\u91CC\u83B7\u53D6widget \u4E2D\u53EF\u4EE5\u8F6C\u6362\u6210html\u7684markdown\u6587\u672C\u8D77\u59CB\u4F4D\u7F6E\n                    let lineNumber = view.state.doc.lineAt(line.from).number;\n                    let startLineNumber = view.state.doc.lineAt(foldableRange.from).number;\n                    let endLineNumber = view.state.doc.lineAt(foldableRange.to).number;\n                    // console.log(`Block Widget: ${lineNumber}, start line: ${startLineNumber}, end line: ${endLineNumber}`);\n                }else {\n                    // \u72EC\u7ACB\u884C\u7684widget\n                    // \u5728\u8FD9\u91CC\u83B7\u53D6\u63D2\u5165widget\u7684\u4F4D\u7F6E\n                    let lineNumber = view.state.doc.lineAt(line.from).number;\n                    // console.log(`Line Widget: ${lineNumber}`);\n                }\n            }\n            return builder.finish()\n        }\n    })\n    let {domEventHandlers} = fullConfig;\n    let rangeToDrag : DocRange = { from: 0, to: 0 };\n\n    let longPressTimer: string | number | NodeJS.Timeout | undefined;\n    const longPressDuration = 500; // \u957F\u6309\u65F6\u95F4\u8BBE\u5B9A\u4E3A 0.5 \u79D2\n    return [\n        markers,\n        gutter({\n            class: \"cm-foldGutter\",\n            markers(view) {\n                return view.plugin(markers)?.markers || RangeSet.empty\n            },\n            initialSpacer() {\n                return new FoldMarker(fullConfig, false)\n            },\n            domEventHandlers: {\n                ...domEventHandlers,\n                click: (view, line, event) => {\n                    if (domEventHandlers.click && domEventHandlers.click(view, line, event))\n                        return true;\n                    let folded = findFold(view.state, line.from, line.to);\n                    if (folded) {\n                        view.dispatch({effects: unfoldEffect.of(folded)});\n                        return true;\n                    }\n                    let range = foldable(view.state, line.from, line.to);\n                    if (range) {\n                        view.dispatch({effects: foldEffect.of(range)});\n                        return true;\n                    }\n                    return false;\n                },\n                mousedown: (view, line, event) => {\n                    if (domEventHandlers.mousedown && domEventHandlers.mousedown(view, line, event))\n                        return true;\n\n                    const dom = event.target as HTMLElement;\n\n\n                    longPressTimer = setTimeout(() => {\n                        event.preventDefault();\n                        dom.setAttribute('draggable', 'true');\n                        dom.style.cursor = \"grabbing\";\n                        console.log(`line: ${line.from} to ${line.to}`);\n                        // \u68C0\u67E5\u662F\u5426\u6298\u53E0\n                        let folded = findFold(view.state, line.from, line.to);\n                        if (folded) {\n                            // @ts-ignore\n                            rangeToDrag = { from: line.from, to: folded.to };\n                            console.log(\"GutterMarker folded from:\", rangeToDrag );\n                        } else {\n                            // rangeToDrag =  { from: 0, to: 0 };\n                            const foldRange = foldable(view.state, line.from, line.to);\n                            rangeToDrag =   { from: line.from, to: Number(foldRange?.to)  } ;\n                            console.log(\"GutterMarker foldRange:\", line.from, \"to:\",foldRange?.to);\n                        }\n                    }, longPressDuration );\n\n                    dom.addEventListener('dragstart', (event: DragEvent) => {\n                        rangeToDrag.from === 0 && rangeToDrag.to === 0 && event.preventDefault();\n                        if (!event.dataTransfer) return;\n\n                        let draggedData = view.state.doc.sliceString(rangeToDrag.from, rangeToDrag.to);\n                        // \u521B\u5EFA\u5E7D\u7075\u5143\u7D20\n                        let ghost = document.createElement('div');\n                        ghost.style.position = 'absolute';\n                        ghost.style.top = '-9999px';\n                        const p = document.createElement('p');\n                        p.innerText = draggedData;\n                        p.className = \"fs-5 text-gray-600 text-dark\";\n                        ghost.appendChild(p);\n                        document.body.appendChild(ghost);\n\n                        // \u8BBE\u7F6E\u62D6\u52A8\u56FE\u50CF\n                        event.dataTransfer.setDragImage(ghost, 0, 0);\n                        event.dataTransfer.setData( 'text/plain', draggedData);\n                        event.dataTransfer.setData( 'text/cm-range', JSON.stringify(rangeToDrag));\n\n                        // \u62D6\u52A8\u7ED3\u675F\u540E\u79FB\u9664\u5E7D\u7075\u5143\u7D20\n                        dom.addEventListener('dragend', (event: DragEvent) => {\n                            ghost.remove();\n                            dom.removeAttribute('draggable');\n                            dom.style.cursor = \"pointer\";\n                            console.log(\"dragend\", event);\n                            console.log(\"rangeToDrag\", rangeToDrag);\n                        }, { once: true });\n                    });\n\n                    // \u5982\u679C\u9F20\u6807\u63D0\u524D\u91CA\u653E\uFF0C\u5219\u6E05\u9664\u8BA1\u65F6\u5668\n                    document.addEventListener(\"mouseup\", (e) => {\n                        clearTimeout(longPressTimer);\n                        dom.removeAttribute('draggable');\n                        dom.style.cursor = \"pointer\";\n                    }, { once: true });\n\n                    document.addEventListener(\"mouseleave\", (e) => {\n                        clearTimeout(longPressTimer);\n                        dom.removeAttribute('draggable');\n                        dom.style.cursor = \"pointer\";\n                    }, { once: true });\n\n                    return false;\n                }\n            }\n        }),\n        codeFolding(),\n        EditorView.domEventHandlers({\n            drop(event: DragEvent, view: EditorView) {\n                if (!event.dataTransfer) return;\n                let draggedData = event.dataTransfer.getData('text/plain');\n                let rangeData = event.dataTransfer.getData('text/cm-range');\n                const dropPos = view.posAtCoords({ x: event.clientX, y: event.clientY });\n\n                if (rangeData.length > 0 && dropPos !== null && draggedData.length > 0 ) {\n                    event.dataTransfer.effectAllowed = 'move';\n                    event.preventDefault(); // \u5982\u679C\u6709\u8FD9\u4E2A\u81EA\u5B9A\u4E49\u7684MIME(text/cm-range) \u624D\u963B\u6B62\u9ED8\u8BA4\u884C\u4E3A, \u4E0D\u5F71\u54CD\u5176\u4ED6\u62D6\u52A8\n                    let docRange: DocRange = JSON.parse(rangeData);\n                    let changes = [\n                        { from: docRange.from, to: docRange.to }, // \u5220\u9664\u539F\u6765\u7684\u6587\u672C\n                        { from: dropPos, insert:'\\n' + draggedData + '\\n'}, // \u63D2\u5165\u62D6\u52A8\u7684\u6587\u672C TODO: \u76EE\u6807\u4F4D\u7F6E\u5982\u679C\u4E0B\u4E00\u884C\u6CA1\u6709\u6362\u884C\u52A0\u6362\u884C,\u4E0A\u884C\u6CA1\u6709\u6362\u884C\u52A0\u6362\u884C\n                    ];\n                    // \u521B\u5EFA\u4E00\u4E2A\u9009\u533A\uFF08selection\uFF09\u5BF9\u8C61\n                    const selection = EditorSelection.cursor(dropPos);\n                    let transaction = view.state.update({\n                        changes: changes,\n                        selection: selection,\n                    });\n                    // Apply the transaction\n                    view.dispatch(transaction);\n                }\n                return false;\n            },\n            dragleave(event: DragEvent) {\n                return false;\n            }\n        })\n    ];\n}", "import { EditorState, SelectionRange } from '@codemirror/state';\nimport {syntaxTree} from \"@codemirror/language\";\n\nclass EditorSelectionHelper {\n\n    public static isMultiLineSelection(state: EditorState): boolean {\n        return state.selection.ranges.some((range) => this.isRangeMultiLine(range, state));\n    }\n\n    public static canApplyInlineMarkdown(state: EditorState): boolean {\n        const nonInlineTypes = new Set([\n            \"HTMLBlock\",\n            \"URL\",\n            \"FencedCode\",\n            \"Blockquote\",\n            \"CodeBlock\",\n            \"StrongEmphasis\",\n            \"Strong\",\n            \"CodeText\",\n            \"Image\",\n\n        ]); // \u4E0D\u652F\u6301\u7684\u5757\u7EA7\u5143\u7D20\u7C7B\u578B\n        const {from, to} = state.selection.main;\n        const tree = syntaxTree(state);\n\n        let canApply = true;\n        tree.iterate({\n            from,\n            to,\n            enter(node) {\n                if (node.type.isTop) return;\n                console.log(\"node.name: \", node.name);\n                console.log(\"lineNumber: \", state.doc.lineAt(node.from).number);\n                console.log(\"node.range: \", node.from, node.to);\n                if (node.name === \"LinkMark\" || node.name === \"Link\" || node.name === \"ImageMark\") {\n                    // \u5982\u679C\u8282\u70B9\u662F\u94FE\u63A5\uFF0C\u5E76\u4E14\u9009\u533A\u4EC5\u4EC5\u9009\u62E9\u4E86\u94FE\u63A5\u7684\u4E00\u90E8\u5206\uFF0C\u5219\u4E0D\u80FD\u5E94\u7528Markdown\u6807\u8BB0\n                    if (from > node.from && to < node.to) {\n                        canApply = false;\n                        return false;\n                    }\n                }\n                // \u5982\u679C\u8282\u70B9\u662F\u6807\u9898\uFF0C\u5219\u4E0D\u80FD\u5E94\u7528Markdown\u6807\u8BB0\n                if (node.name.startsWith(\"ATXHeading\")) {\n                    canApply = false;\n                    return false;\n                }\n                // \u4F7F\u7528\u96C6\u5408\u6765\u68C0\u67E5\u662F\u5426\u662F\u5757\u7EA7\u5143\u7D20\n                if (nonInlineTypes.has(node.name)) {\n                    canApply = false;\n                    return false;\n                }\n            }\n        });\n        return canApply;\n    }\n\n    public static isEverythingSelected(state: EditorState): boolean {\n        const totalDocRange = { from: 0, to: state.doc.length };\n        return this.isRangeMultiLine(totalDocRange, state) && state.selection.ranges.some((range) => this.isRangeCovering(range, totalDocRange));\n    }\n\n    public static  getCurrentLine(state: EditorState): {lineNumber: number, text: string} {\n        // \u83B7\u53D6\u4E3B\u5149\u6807\u7684\u4F4D\u7F6E\n        const pos = state.selection.main.head;\n        // \u627E\u5230\u8BE5\u4F4D\u7F6E\u7684\u884C\u4FE1\u606F\n        const line = state.doc.lineAt(pos);\n        return {lineNumber: line.number, text: line.text};\n    }\n\n    private static isRangeMultiLine(range: SelectionRange | { from: number; to: number }, state: EditorState): boolean {\n        const fromLine = state.doc.lineAt(range.from).number;\n        const toLine = state.doc.lineAt(range.to).number;\n        return fromLine !== toLine;\n    }\n\n    private static isRangeCovering(range: SelectionRange, totalRange: { from: number; to: number }): boolean {\n        return range.from <= totalRange.from && range.to >= totalRange.to;\n    }\n\n\n\n}\n\nexport default EditorSelectionHelper;\n", "import {Tree, TreeBuffer, NodeType, NodeProp, NodePropSource, TreeFragment, NodeSet, TreeCursor,\n        Input, Parser, PartialParse, SyntaxNode, ParseWrapper} from \"@lezer/common\"\nimport {styleTags, tags as t, Tag} from \"@lezer/highlight\"\n\nclass CompositeBlock {\n  static create(type: number, value: number, from: number, parentHash: number, end: number) {\n    let hash = (parentHash + (parentHash << 8) + type + (value << 4)) | 0\n    return new CompositeBlock(type, value, from, hash, end, [], [])\n  }\n\n  /// @internal\n  hashProp: [NodeProp<any>, any][]\n\n  constructor(readonly type: number,\n              // Used for indentation in list items, markup character in lists\n              readonly value: number,\n              readonly from: number,\n              readonly hash: number,\n              public end: number,\n              readonly children: (Tree | TreeBuffer)[],\n              readonly positions: number[]) {\n    this.hashProp = [[NodeProp.contextHash, hash]]\n  }\n\n  addChild(child: Tree, pos: number) {\n    if (child.prop(NodeProp.contextHash) != this.hash)\n      child = new Tree(child.type, child.children, child.positions, child.length, this.hashProp)\n    this.children.push(child)\n    this.positions.push(pos)\n  }\n\n  toTree(nodeSet: NodeSet, end = this.end) {\n    let last = this.children.length - 1\n    if (last >= 0) end = Math.max(end, this.positions[last] + this.children[last].length + this.from)\n    return new Tree(nodeSet.types[this.type], this.children, this.positions, end - this.from).balance({\n      makeTree: (children, positions, length) => new Tree(NodeType.none, children, positions, length, this.hashProp)\n    })\n  }\n}\n\nexport enum Type {\n  Document = 1,\n\n  CodeBlock,\n  FencedCode,\n  Blockquote,\n  HorizontalRule,\n  BulletList,\n  OrderedList,\n  ListItem,\n  ATXHeading1,\n  ATXHeading2,\n  ATXHeading3,\n  ATXHeading4,\n  ATXHeading5,\n  ATXHeading6,\n  SetextHeading1,\n  SetextHeading2,\n  HTMLBlock,\n  LinkReference,\n  Paragraph,\n  CommentBlock,\n  ProcessingInstructionBlock,\n\n  // Inline\n  Escape,\n  Entity,\n  HardBreak,\n  Emphasis,\n  StrongEmphasis,\n  Link,\n  Image,\n  InlineCode,\n  HTMLTag,\n  Comment,\n  ProcessingInstruction,\n  URL,\n\n  // Smaller tokens\n  HeaderMark,\n  QuoteMark,\n  ListMark,\n  LinkMark,\n  EmphasisMark,\n  CodeMark,\n  CodeText,\n  CodeInfo,\n  LinkTitle,\n  LinkLabel\n}\n\n/// Data structure used to accumulate a block's content during [leaf\n/// block parsing](#BlockParser.leaf).\nexport class LeafBlock {\n  /// @internal\n  marks: Element[] = []\n  /// The block parsers active for this block.\n  parsers: LeafBlockParser[] = []\n\n  /// @internal\n  constructor(\n    /// The start position of the block.\n    readonly start: number,\n    /// The block's text content.\n    public content: string\n  ) {}\n}\n\n/// Data structure used during block-level per-line parsing.\nexport class Line {\n  /// The line's full text.\n  text = \"\"\n  /// The base indent provided by the composite contexts (that have\n  /// been handled so far).\n  baseIndent = 0\n  /// The string position corresponding to the base indent.\n  basePos = 0\n  /// The number of contexts handled @internal\n  depth = 0\n  /// Any markers (i.e. block quote markers) parsed for the contexts. @internal\n  markers: Element[] = []\n  /// The position of the next non-whitespace character beyond any\n  /// list, blockquote, or other composite block markers.\n  pos = 0\n  /// The column of the next non-whitespace character.\n  indent = 0\n  /// The character code of the character after `pos`.\n  next = -1\n\n  /// @internal\n  forward() {\n    if (this.basePos > this.pos) this.forwardInner()\n  }\n  \n  /// @internal\n  forwardInner() {\n    let newPos = this.skipSpace(this.basePos)\n    this.indent = this.countIndent(newPos, this.pos, this.indent)\n    this.pos = newPos\n    this.next = newPos == this.text.length ? -1 : this.text.charCodeAt(newPos)\n  }\n\n  /// Skip whitespace after the given position, return the position of\n  /// the next non-space character or the end of the line if there's\n  /// only space after `from`.\n  skipSpace(from: number) { return skipSpace(this.text, from) }\n\n  /// @internal\n  reset(text: string) {\n    this.text = text\n    this.baseIndent = this.basePos = this.pos = this.indent = 0\n    this.forwardInner()\n    this.depth = 1\n    while (this.markers.length) this.markers.pop()\n  }\n\n  /// Move the line's base position forward to the given position.\n  /// This should only be called by composite [block\n  /// parsers](#BlockParser.parse) or [markup skipping\n  /// functions](#NodeSpec.composite).\n  moveBase(to: number) {\n    this.basePos = to\n    this.baseIndent = this.countIndent(to, this.pos, this.indent)\n  }\n\n  /// Move the line's base position forward to the given _column_.\n  moveBaseColumn(indent: number) {\n    this.baseIndent = indent\n    this.basePos = this.findColumn(indent)\n  }\n\n  /// Store a composite-block-level marker. Should be called from\n  /// [markup skipping functions](#NodeSpec.composite) when they\n  /// consume any non-whitespace characters.\n  addMarker(elt: Element) {\n    this.markers.push(elt)\n  }\n\n  /// Find the column position at `to`, optionally starting at a given\n  /// position and column.\n  countIndent(to: number, from = 0, indent = 0) {\n    for (let i = from; i < to; i++)\n      indent += this.text.charCodeAt(i) == 9 ? 4 - indent % 4 : 1\n    return indent\n  }\n\n  /// Find the position corresponding to the given column.\n  findColumn(goal: number) {\n    let i = 0\n    for (let indent = 0; i < this.text.length && indent < goal; i++)\n      indent += this.text.charCodeAt(i) == 9 ? 4 - indent % 4 : 1\n    return i\n  }\n\n  /// @internal\n  scrub() {\n    if (!this.baseIndent) return this.text\n    let result = \"\"\n    for (let i = 0; i < this.basePos; i++) result += \" \"\n    return result + this.text.slice(this.basePos)\n  }\n}\n\nfunction skipForList(bl: CompositeBlock, cx: BlockContext, line: Line) {\n  if (line.pos == line.text.length ||\n      (bl != cx.block && line.indent >= cx.stack[line.depth + 1].value + line.baseIndent)) return true\n  if (line.indent >= line.baseIndent + 4) return false\n  let size = (bl.type == Type.OrderedList ? isOrderedList : isBulletList)(line, cx, false)\n  return size > 0 &&\n    (bl.type != Type.BulletList || isHorizontalRule(line, cx, false) < 0) &&\n    line.text.charCodeAt(line.pos + size - 1) == bl.value\n}\n\nconst DefaultSkipMarkup: {[type: number]: (bl: CompositeBlock, cx: BlockContext, line: Line) => boolean} = {\n  [Type.Blockquote](bl, cx, line) {\n    if (line.next != 62 /* '>' */) return false\n    line.markers.push(elt(Type.QuoteMark, cx.lineStart + line.pos, cx.lineStart + line.pos + 1))\n    line.moveBase(line.pos + (space(line.text.charCodeAt(line.pos + 1)) ? 2 : 1))\n    bl.end = cx.lineStart + line.text.length\n    return true\n  },\n  [Type.ListItem](bl, _cx, line) {\n    if (line.indent < line.baseIndent + bl.value && line.next > -1) return false\n    line.moveBaseColumn(line.baseIndent + bl.value)\n    return true\n  },\n  [Type.OrderedList]: skipForList,\n  [Type.BulletList]: skipForList,\n  [Type.Document]() { return true }\n}\n\nexport function space(ch: number) { return ch == 32 || ch == 9 || ch == 10 || ch == 13 }\n\nfunction skipSpace(line: string, i = 0) {\n  while (i < line.length && space(line.charCodeAt(i))) i++\n  return i\n}\n\nfunction skipSpaceBack(line: string, i: number, to: number) {\n  while (i > to && space(line.charCodeAt(i - 1))) i--\n  return i\n}\n\nfunction isFencedCode(line: Line) {\n  if (line.next != 96 && line.next != 126 /* '`~' */) return -1\n  let pos = line.pos + 1\n  while (pos < line.text.length && line.text.charCodeAt(pos) == line.next) pos++\n  if (pos < line.pos + 3) return -1\n  if (line.next == 96) for (let i = pos; i < line.text.length; i++) if (line.text.charCodeAt(i) == 96) return -1\n  return pos\n}\n\nfunction isBlockquote(line: Line) {\n  return line.next != 62 /* '>' */ ? -1 : line.text.charCodeAt(line.pos + 1) == 32 ? 2 : 1\n}\n\nfunction isHorizontalRule(line: Line, cx: BlockContext, breaking: boolean) {\n  if (line.next != 42 && line.next != 45 && line.next != 95 /* '_-*' */) return -1\n  let count = 1\n  for (let pos = line.pos + 1; pos < line.text.length; pos++) {\n    let ch = line.text.charCodeAt(pos)\n    if (ch == line.next) count++\n    else if (!space(ch)) return -1\n  }\n  // Setext headers take precedence\n  if (breaking && line.next == 45 && isSetextUnderline(line) > -1 && line.depth == cx.stack.length) return -1\n  return count < 3 ? -1 : 1\n}\n\nfunction inList(cx: BlockContext, type: Type) {\n  for (let i = cx.stack.length - 1; i >= 0; i--)\n    if (cx.stack[i].type == type) return true\n  return false\n}\n\nfunction isBulletList(line: Line, cx: BlockContext, breaking: boolean) {\n  return (line.next == 45 || line.next == 43 || line.next == 42 /* '-+*' */) &&\n    (line.pos == line.text.length - 1 || space(line.text.charCodeAt(line.pos + 1))) &&\n    (!breaking || inList(cx, Type.BulletList) || line.skipSpace(line.pos + 2) < line.text.length) ? 1 : -1\n}\n\nfunction isOrderedList(line: Line, cx: BlockContext, breaking: boolean) {\n  let pos = line.pos, next = line.next\n  for (;;) {\n    if (next >= 48 && next <= 57 /* '0-9' */) pos++\n    else break\n    if (pos == line.text.length) return -1\n    next = line.text.charCodeAt(pos)\n  }\n  if (pos == line.pos || pos > line.pos + 9 ||\n      (next != 46 && next != 41 /* '.)' */) ||\n      (pos < line.text.length - 1 && !space(line.text.charCodeAt(pos + 1))) ||\n      breaking && !inList(cx, Type.OrderedList) &&\n      (line.skipSpace(pos + 1) == line.text.length || pos > line.pos + 1 || line.next != 49 /* '1' */))\n    return -1\n  return pos + 1 - line.pos\n}\n\nfunction isAtxHeading(line: Line) {\n  if (line.next != 35 /* '#' */) return -1\n  let pos = line.pos + 1\n  while (pos < line.text.length && line.text.charCodeAt(pos) == 35) pos++\n  if (pos < line.text.length && line.text.charCodeAt(pos) != 32) return -1\n  let size = pos - line.pos\n  return size > 6 ? -1 : size\n}\n\nfunction isSetextUnderline(line: Line) {\n  if (line.next != 45 && line.next != 61 /* '-=' */ || line.indent >= line.baseIndent + 4) return -1\n  let pos = line.pos + 1\n  while (pos < line.text.length && line.text.charCodeAt(pos) == line.next) pos++\n  let end = pos\n  while (pos < line.text.length && space(line.text.charCodeAt(pos))) pos++\n  return pos == line.text.length ? end : -1\n}\n\nconst EmptyLine = /^[ \\t]*$/, CommentEnd = /-->/, ProcessingEnd = /\\?>/\nconst HTMLBlockStyle = [\n  [/^<(?:script|pre|style)(?:\\s|>|$)/i, /<\\/(?:script|pre|style)>/i],\n  [/^\\s*<!--/, CommentEnd],\n  [/^\\s*<\\?/, ProcessingEnd],\n  [/^\\s*<![A-Z]/, />/],\n  [/^\\s*<!\\[CDATA\\[/, /\\]\\]>/],\n  [/^\\s*<\\/?(?:address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h1|h2|h3|h4|h5|h6|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul)(?:\\s|\\/?>|$)/i, EmptyLine],\n  [/^\\s*(?:<\\/[a-z][\\w-]*\\s*>|<[a-z][\\w-]*(\\s+[a-z:_][\\w-.]*(?:\\s*=\\s*(?:[^\\s\"'=<>`]+|'[^']*'|\"[^\"]*\"))?)*\\s*>)\\s*$/i, EmptyLine]\n]\n\nfunction isHTMLBlock(line: Line, _cx: BlockContext, breaking: boolean) {\n  if (line.next != 60 /* '<' */) return -1\n  let rest = line.text.slice(line.pos)\n  for (let i = 0, e = HTMLBlockStyle.length - (breaking ? 1 : 0); i < e; i++)\n    if (HTMLBlockStyle[i][0].test(rest)) return i\n  return -1\n}\n\nfunction getListIndent(line: Line, pos: number) {\n  let indentAfter = line.countIndent(pos, line.pos, line.indent)\n  let indented = line.countIndent(line.skipSpace(pos), pos, indentAfter)\n  return indented >= indentAfter + 5 ? indentAfter + 1 : indented\n}\n\n// Return type for block parsing functions. Can be either:\n//\n// - false to indicate that nothing was matched and lower-precedence\n//   parsers should run.\n//\n// - true to indicate that a leaf block was parsed and the stream\n//   was advanced past its content.\n//\n// - null to indicate that a context was opened and block parsing\n//   should continue on this line.\ntype BlockResult = boolean | null\n\nfunction addCodeText(marks: Element[], from: number, to: number) {\n  let last = marks.length - 1\n  if (last >= 0 && marks[last].to == from && marks[last].type == Type.CodeText) (marks[last] as any).to = to\n  else marks.push(elt(Type.CodeText, from, to))\n}\n\n// Rules for parsing blocks. A return value of false means the rule\n// doesn't apply here, true means it does. When true is returned and\n// `p.line` has been updated, the rule is assumed to have consumed a\n// leaf block. Otherwise, it is assumed to have opened a context.\nconst DefaultBlockParsers: {[name: string]: ((cx: BlockContext, line: Line) => BlockResult) | undefined} = {\n  LinkReference: undefined,\n\n  IndentedCode(cx, line) {\n    let base = line.baseIndent + 4\n    if (line.indent < base) return false\n    let start = line.findColumn(base)\n    let from = cx.lineStart + start, to = cx.lineStart + line.text.length\n    let marks: Element[] = [], pendingMarks: Element[] = []\n    addCodeText(marks, from, to)\n    while (cx.nextLine() && line.depth >= cx.stack.length) {\n      if (line.pos == line.text.length) { // Empty\n        addCodeText(pendingMarks, cx.lineStart - 1, cx.lineStart)\n        for (let m of line.markers) pendingMarks.push(m)\n      } else if (line.indent < base) {\n        break\n      } else {\n        if (pendingMarks.length) {\n          for (let m of pendingMarks) {\n            if (m.type == Type.CodeText) addCodeText(marks, m.from, m.to)\n            else marks.push(m)\n          }\n          pendingMarks = []\n        }\n        addCodeText(marks, cx.lineStart - 1, cx.lineStart)\n        for (let m of line.markers) marks.push(m)\n        to = cx.lineStart + line.text.length\n        let codeStart = cx.lineStart + line.findColumn(line.baseIndent + 4)\n        if (codeStart < to) addCodeText(marks, codeStart, to)\n      }\n    }\n    if (pendingMarks.length) {\n      pendingMarks = pendingMarks.filter(m => m.type != Type.CodeText)\n      if (pendingMarks.length) line.markers = pendingMarks.concat(line.markers)\n    }\n\n    cx.addNode(cx.buffer.writeElements(marks, -from).finish(Type.CodeBlock, to - from), from)\n    return true\n  },\n\n  FencedCode(cx, line) {\n    let fenceEnd = isFencedCode(line)\n    if (fenceEnd < 0) return false\n    let from = cx.lineStart + line.pos, ch = line.next, len = fenceEnd - line.pos\n    let infoFrom = line.skipSpace(fenceEnd), infoTo = skipSpaceBack(line.text, line.text.length, infoFrom)\n    let marks: (Element | TreeElement)[] = [elt(Type.CodeMark, from, from + len)]\n    if (infoFrom < infoTo)\n      marks.push(elt(Type.CodeInfo, cx.lineStart + infoFrom, cx.lineStart + infoTo))\n\n    for (let first = true; cx.nextLine() && line.depth >= cx.stack.length; first = false) {\n      let i = line.pos\n      if (line.indent - line.baseIndent < 4)\n        while (i < line.text.length && line.text.charCodeAt(i) == ch) i++\n      if (i - line.pos >= len && line.skipSpace(i) == line.text.length) {\n        for (let m of line.markers) marks.push(m)\n        marks.push(elt(Type.CodeMark, cx.lineStart + line.pos, cx.lineStart + i))\n        cx.nextLine()\n        break\n      } else {\n        if (!first) addCodeText(marks, cx.lineStart - 1, cx.lineStart)\n        for (let m of line.markers) marks.push(m)\n        let textStart = cx.lineStart + line.basePos, textEnd = cx.lineStart + line.text.length\n        if (textStart < textEnd) addCodeText(marks, textStart, textEnd)\n      }\n    }\n    cx.addNode(cx.buffer.writeElements(marks, -from)\n      .finish(Type.FencedCode, cx.prevLineEnd() - from), from)\n    return true\n  },\n\n  Blockquote(cx, line) {\n    let size = isBlockquote(line)\n    if (size < 0) return false\n    cx.startContext(Type.Blockquote, line.pos)\n    cx.addNode(Type.QuoteMark, cx.lineStart + line.pos, cx.lineStart + line.pos + 1)\n    line.moveBase(line.pos + size)\n    return null\n  },\n\n  HorizontalRule(cx, line) {\n    if (isHorizontalRule(line, cx, false) < 0) return false\n    let from = cx.lineStart + line.pos\n    cx.nextLine()\n    cx.addNode(Type.HorizontalRule, from)\n    return true\n  },\n\n  BulletList(cx, line) {\n    let size = isBulletList(line, cx, false)\n    if (size < 0) return false\n    if (cx.block.type != Type.BulletList)\n      cx.startContext(Type.BulletList, line.basePos, line.next)\n    let newBase = getListIndent(line, line.pos + 1)\n    cx.startContext(Type.ListItem, line.basePos, newBase - line.baseIndent)\n    cx.addNode(Type.ListMark, cx.lineStart + line.pos, cx.lineStart + line.pos + size)\n    line.moveBaseColumn(newBase)\n    return null\n  },\n\n  OrderedList(cx, line) {\n    let size = isOrderedList(line, cx, false)\n    if (size < 0) return false\n    if (cx.block.type != Type.OrderedList)\n      cx.startContext(Type.OrderedList, line.basePos, line.text.charCodeAt(line.pos + size - 1))\n    let newBase = getListIndent(line, line.pos + size)\n    cx.startContext(Type.ListItem, line.basePos, newBase - line.baseIndent)\n    cx.addNode(Type.ListMark, cx.lineStart + line.pos, cx.lineStart + line.pos + size)\n    line.moveBaseColumn(newBase)\n    return null\n  },\n\n  ATXHeading(cx, line) {\n    let size = isAtxHeading(line)\n    if (size < 0) return false\n    let off = line.pos, from = cx.lineStart + off\n    let endOfSpace = skipSpaceBack(line.text, line.text.length, off), after = endOfSpace\n    while (after > off && line.text.charCodeAt(after - 1) == line.next) after--\n    if (after == endOfSpace || after == off || !space(line.text.charCodeAt(after - 1))) after = line.text.length\n    let buf = cx.buffer\n      .write(Type.HeaderMark, 0, size)\n      .writeElements(cx.parser.parseInline(line.text.slice(off + size + 1, after), from + size + 1), -from)\n    if (after < line.text.length) buf.write(Type.HeaderMark, after - off, endOfSpace - off)\n    let node = buf.finish(Type.ATXHeading1 - 1 + size, line.text.length - off)\n    cx.nextLine()\n    cx.addNode(node, from)\n    return true\n  },\n\n  HTMLBlock(cx, line) {\n    let type = isHTMLBlock(line, cx, false)\n    if (type < 0) return false\n    let from = cx.lineStart + line.pos, end = HTMLBlockStyle[type][1]\n    let marks: Element[] = [], trailing = end != EmptyLine\n    while (!end.test(line.text) && cx.nextLine()) {\n      if (line.depth < cx.stack.length) { trailing = false; break }\n      for (let m of line.markers) marks.push(m)\n    }\n    if (trailing) cx.nextLine()\n    let nodeType = end == CommentEnd ? Type.CommentBlock : end == ProcessingEnd ? Type.ProcessingInstructionBlock : Type.HTMLBlock\n    let to = cx.prevLineEnd()\n    cx.addNode(cx.buffer.writeElements(marks, -from).finish(nodeType, to - from), from)\n    return true\n  },\n\n  SetextHeading: undefined // Specifies relative precedence for block-continue function\n}\n\nconst enum RefStage { Failed = -1, Start, Label, Link, Title }\n\n// This implements a state machine that incrementally parses link references. At each\n// next line, it looks ahead to see if the line continues the reference or not. If it\n// doesn't and a valid link is available ending before that line, it finishes that.\n// Similarly, on `finish` (when the leaf is terminated by external circumstances), it\n// creates a link reference if there's a valid reference up to the current point.\nclass LinkReferenceParser implements LeafBlockParser {\n  stage = RefStage.Start\n  elts: Element[] = []\n  pos = 0\n  start: number\n\n  constructor(leaf: LeafBlock) {\n    this.start = leaf.start\n    this.advance(leaf.content)\n  }\n\n  nextLine(cx: BlockContext, line: Line, leaf: LeafBlock) {\n    if (this.stage == RefStage.Failed) return false\n    let content = leaf.content + \"\\n\" + line.scrub()\n    let finish = this.advance(content)\n    if (finish > -1 && finish < content.length) return this.complete(cx, leaf, finish)\n    return false\n  }\n\n  finish(cx: BlockContext, leaf: LeafBlock) {\n    if ((this.stage == RefStage.Link || this.stage == RefStage.Title) && skipSpace(leaf.content, this.pos) == leaf.content.length)\n      return this.complete(cx, leaf, leaf.content.length)\n    return false\n  }\n\n  complete(cx: BlockContext, leaf: LeafBlock, len: number) {\n    cx.addLeafElement(leaf, elt(Type.LinkReference, this.start, this.start + len, this.elts))\n    return true\n  }\n\n  nextStage(elt: Element | null | false) {\n    if (elt) {\n      this.pos = elt.to - this.start\n      this.elts.push(elt)\n      this.stage++\n      return true\n    }\n    if (elt === false) this.stage = RefStage.Failed\n    return false\n  }\n\n  advance(content: string) {\n    for (;;) {\n      if (this.stage == RefStage.Failed) {\n        return -1\n      } else if (this.stage == RefStage.Start) {\n        if (!this.nextStage(parseLinkLabel(content, this.pos, this.start, true))) return -1\n        if (content.charCodeAt(this.pos) != 58 /* ':' */) return this.stage = RefStage.Failed\n        this.elts.push(elt(Type.LinkMark, this.pos + this.start, this.pos + this.start + 1))\n        this.pos++\n      } else if (this.stage == RefStage.Label) {\n        if (!this.nextStage(parseURL(content, skipSpace(content, this.pos), this.start))) return -1\n      } else if (this.stage == RefStage.Link) {\n        let skip = skipSpace(content, this.pos), end = 0\n        if (skip > this.pos) {\n          let title = parseLinkTitle(content, skip, this.start)\n          if (title) {\n            let titleEnd = lineEnd(content, title.to - this.start)\n            if (titleEnd > 0) { this.nextStage(title); end = titleEnd }\n          }\n        }\n        if (!end) end = lineEnd(content, this.pos)\n        return end > 0 && end < content.length ? end : -1\n      } else { // RefStage.Title\n        return lineEnd(content, this.pos)\n      }\n    }\n  }\n}\n\nfunction lineEnd(text: string, pos: number) {\n  for (; pos < text.length; pos++) {\n    let next = text.charCodeAt(pos)\n    if (next == 10) break\n    if (!space(next)) return -1\n  }\n  return pos\n}\n\nclass SetextHeadingParser implements LeafBlockParser {\n  nextLine(cx: BlockContext, line: Line, leaf: LeafBlock) {\n    let underline = line.depth < cx.stack.length ? -1 : isSetextUnderline(line)\n    let next = line.next\n    if (underline < 0) return false\n    let underlineMark = elt(Type.HeaderMark, cx.lineStart + line.pos, cx.lineStart + underline)\n    cx.nextLine()\n    cx.addLeafElement(leaf, elt(next == 61 ? Type.SetextHeading1 : Type.SetextHeading2, leaf.start, cx.prevLineEnd(), [\n      ...cx.parser.parseInline(leaf.content, leaf.start),\n      underlineMark\n    ]))\n    return true\n  }\n\n  finish() {\n    return false\n  }\n}\n\nconst DefaultLeafBlocks: {[name: string]: (cx: BlockContext, leaf: LeafBlock) => LeafBlockParser | null} = {\n  LinkReference(_, leaf) { return leaf.content.charCodeAt(0) == 91 /* '[' */ ? new LinkReferenceParser(leaf) : null },\n  SetextHeading() { return new SetextHeadingParser }\n}\n\nconst DefaultEndLeaf: readonly ((cx: BlockContext, line: Line) => boolean)[] = [\n  (_, line) => isAtxHeading(line) >= 0,\n  (_, line) => isFencedCode(line) >= 0,\n  (_, line) => isBlockquote(line) >= 0,\n  (p, line) => isBulletList(line, p, true) >= 0,\n  (p, line) => isOrderedList(line, p, true) >= 0,\n  (p, line) => isHorizontalRule(line, p, true) >= 0,\n  (p, line) => isHTMLBlock(line, p, true) >= 0\n]\n\nconst scanLineResult = {text: \"\", end: 0}\n\n/// Block-level parsing functions get access to this context object.\nexport class BlockContext implements PartialParse {\n  /// @internal\n  block: CompositeBlock\n  /// @internal\n  stack: CompositeBlock[]\n  private line = new Line()\n  private atEnd = false\n  private fragments: FragmentCursor | null\n  private to: number\n  /// For reused nodes on gaps, we can't directly put the original\n  /// node into the tree, since that may be bitter than its parent.\n  /// When this happens, we create a dummy tree that is replaced by\n  /// the proper node in `injectGaps` @internal\n  reusePlaceholders: Map<Tree, Tree> = new Map\n  stoppedAt: number | null = null\n\n  /// The start of the current line.\n  lineStart: number\n  /// The absolute (non-gap-adjusted) position of the line @internal\n  absoluteLineStart: number\n  /// The range index that absoluteLineStart points into @internal\n  rangeI = 0\n  /// @internal\n  absoluteLineEnd: number\n\n  /// @internal\n  constructor(\n    /// The parser configuration used.\n    readonly parser: MarkdownParser,\n    /// @internal\n    readonly input: Input,\n    fragments: readonly TreeFragment[],\n    /// @internal\n    readonly ranges: readonly {from: number, to: number}[],\n  ) {\n    this.to = ranges[ranges.length - 1].to\n    this.lineStart = this.absoluteLineStart = this.absoluteLineEnd = ranges[0].from\n    this.block = CompositeBlock.create(Type.Document, 0, this.lineStart, 0, 0)\n    this.stack = [this.block]\n    this.fragments = fragments.length ? new FragmentCursor(fragments, input) : null\n    this.readLine()\n  }\n\n  get parsedPos() {\n    return this.absoluteLineStart\n  }\n\n  advance() {\n    if (this.stoppedAt != null && this.absoluteLineStart > this.stoppedAt)\n      return this.finish()\n\n    let {line} = this\n    for (;;) {\n      while (line.depth < this.stack.length) this.finishContext()\n      for (let mark of line.markers) this.addNode(mark.type, mark.from, mark.to)\n      if (line.pos < line.text.length) break\n      // Empty line\n      if (!this.nextLine()) return this.finish()\n    }\n\n    if (this.fragments && this.reuseFragment(line.basePos)) return null\n\n    start: for (;;) {\n      for (let type of this.parser.blockParsers) if (type) {\n        let result = type(this, line)\n        if (result != false) {\n          if (result == true) return null\n          line.forward()\n          continue start\n        }\n      }\n      break\n    }\n      \n    let leaf = new LeafBlock(this.lineStart + line.pos, line.text.slice(line.pos))\n    for (let parse of this.parser.leafBlockParsers) if (parse) {\n      let parser = parse!(this, leaf)\n      if (parser) leaf.parsers.push(parser!)\n    }\n    lines: while (this.nextLine()) {\n      if (line.pos == line.text.length) break\n      if (line.indent < line.baseIndent + 4) {\n        for (let stop of this.parser.endLeafBlock) if (stop(this, line, leaf)) break lines\n      }\n      for (let parser of leaf.parsers) if (parser.nextLine(this, line, leaf)) return null\n      leaf.content += \"\\n\" + line.scrub()\n      for (let m of line.markers) leaf.marks.push(m)\n    }\n    this.finishLeaf(leaf)\n    return null\n  }\n\n  stopAt(pos: number) {\n    if (this.stoppedAt != null && this.stoppedAt < pos) throw new RangeError(\"Can't move stoppedAt forward\")\n    this.stoppedAt = pos\n  }\n\n  private reuseFragment(start: number) {\n    if (!this.fragments!.moveTo(this.absoluteLineStart + start, this.absoluteLineStart) ||\n        !this.fragments!.matches(this.block.hash)) return false\n    let taken = this.fragments!.takeNodes(this)\n    if (!taken) return false\n    this.absoluteLineStart += taken\n    this.lineStart = toRelative(this.absoluteLineStart, this.ranges)\n    this.moveRangeI()\n    if (this.absoluteLineStart < this.to) {\n      this.lineStart++\n      this.absoluteLineStart++\n      this.readLine()\n    } else {\n      this.atEnd = true\n      this.readLine()\n    }\n    return true\n  }\n\n  /// The number of parent blocks surrounding the current block.\n  get depth() {\n    return this.stack.length\n  }\n\n  /// Get the type of the parent block at the given depth. When no\n  /// depth is passed, return the type of the innermost parent.\n  parentType(depth = this.depth - 1) {\n    return this.parser.nodeSet.types[this.stack[depth].type]\n  }\n\n  /// Move to the next input line. This should only be called by\n  /// (non-composite) [block parsers](#BlockParser.parse) that consume\n  /// the line directly, or leaf block parser\n  /// [`nextLine`](#LeafBlockParser.nextLine) methods when they\n  /// consume the current line (and return true).\n  nextLine() {\n    this.lineStart += this.line.text.length\n    if (this.absoluteLineEnd >= this.to) {\n      this.absoluteLineStart = this.absoluteLineEnd\n      this.atEnd = true\n      this.readLine()\n      return false\n    } else {\n      this.lineStart++\n      this.absoluteLineStart = this.absoluteLineEnd + 1\n      this.moveRangeI()\n      this.readLine()\n      return true\n    }\n  }\n\n  private moveRangeI() {\n    while (this.rangeI < this.ranges.length - 1 && this.absoluteLineStart >= this.ranges[this.rangeI].to) {\n      this.rangeI++\n      this.absoluteLineStart = Math.max(this.absoluteLineStart, this.ranges[this.rangeI].from)\n    }\n  }\n\n  /// @internal\n  scanLine(start: number) {\n    let r = scanLineResult\n    r.end = start\n    if (start >= this.to) {\n      r.text = \"\"\n    } else {\n      r.text = this.lineChunkAt(start)\n      r.end += r.text.length\n      if (this.ranges.length > 1) {\n        let textOffset = this.absoluteLineStart, rangeI = this.rangeI\n        while (this.ranges[rangeI].to < r.end) {\n          rangeI++\n          let nextFrom = this.ranges[rangeI].from\n          let after = this.lineChunkAt(nextFrom)\n          r.end = nextFrom + after.length\n          r.text = r.text.slice(0, this.ranges[rangeI - 1].to - textOffset) + after\n          textOffset = r.end - r.text.length\n        }\n      }\n    }\n    return r\n  }\n\n  /// @internal\n  readLine() {\n    let {line} = this, {text, end} = this.scanLine(this.absoluteLineStart)\n    this.absoluteLineEnd = end\n    line.reset(text)\n    for (; line.depth < this.stack.length; line.depth++) {\n      let cx = this.stack[line.depth], handler = this.parser.skipContextMarkup[cx.type]\n      if (!handler) throw new Error(\"Unhandled block context \" + Type[cx.type])\n      if (!handler(cx, this, line)) break\n      line.forward()\n    }\n  }\n\n  private lineChunkAt(pos: number) {\n    let next = this.input.chunk(pos), text\n    if (!this.input.lineChunks) {\n      let eol = next.indexOf(\"\\n\")\n      text = eol < 0 ? next : next.slice(0, eol)\n    } else {\n      text = next == \"\\n\" ? \"\" : next\n    }\n    return pos + text.length > this.to ? text.slice(0, this.to - pos) : text\n  }\n\n  /// The end position of the previous line.\n  prevLineEnd() { return this.atEnd ? this.lineStart : this.lineStart - 1 }\n\n  /// @internal\n  startContext(type: Type, start: number, value = 0) {\n    this.block = CompositeBlock.create(type, value, this.lineStart + start, this.block.hash, this.lineStart + this.line.text.length)\n    this.stack.push(this.block)\n  }\n\n  /// Start a composite block. Should only be called from [block\n  /// parser functions](#BlockParser.parse) that return null.\n  startComposite(type: string, start: number, value = 0) {\n    this.startContext(this.parser.getNodeType(type), start, value)\n  }\n\n  /// @internal\n  addNode(block: Type | Tree, from: number, to?: number) {\n    if (typeof block == \"number\") block = new Tree(this.parser.nodeSet.types[block], none, none, (to ?? this.prevLineEnd()) - from)\n    this.block.addChild(block, from - this.block.from)\n  }\n\n  /// Add a block element. Can be called by [block\n  /// parsers](#BlockParser.parse).\n  addElement(elt: Element) {\n    this.block.addChild(elt.toTree(this.parser.nodeSet), elt.from - this.block.from)\n  }\n\n  /// Add a block element from a [leaf parser](#LeafBlockParser). This\n  /// makes sure any extra composite block markup (such as blockquote\n  /// markers) inside the block are also added to the syntax tree.\n  addLeafElement(leaf: LeafBlock, elt: Element) {\n    this.addNode(this.buffer\n      .writeElements(injectMarks(elt.children, leaf.marks), -elt.from)\n      .finish(elt.type, elt.to - elt.from), elt.from)\n  }\n\n  /// @internal\n  finishContext() {\n    let cx = this.stack.pop()!\n    let top = this.stack[this.stack.length - 1]\n    top.addChild(cx.toTree(this.parser.nodeSet), cx.from - top.from)\n    this.block = top\n  }\n\n  private finish() {\n    while (this.stack.length > 1) this.finishContext()\n    return this.addGaps(this.block.toTree(this.parser.nodeSet, this.lineStart))\n  }\n\n  private addGaps(tree: Tree) {\n    return this.ranges.length > 1 ?\n      injectGaps(this.ranges, 0, tree.topNode, this.ranges[0].from, this.reusePlaceholders) : tree\n  }\n\n  /// @internal\n  finishLeaf(leaf: LeafBlock) {\n    for (let parser of leaf.parsers) if (parser.finish(this, leaf)) return\n    let inline = injectMarks(this.parser.parseInline(leaf.content, leaf.start), leaf.marks)\n    this.addNode(this.buffer\n      .writeElements(inline, -leaf.start)\n      .finish(Type.Paragraph, leaf.content.length), leaf.start)\n  }\n\n  /// Create an [`Element`](#Element) object to represent some syntax\n  /// node.\n  elt(type: string, from: number, to: number, children?: readonly Element[]): Element\n  elt(tree: Tree, at: number): Element\n  elt(type: string | Tree, from: number, to?: number, children?: readonly Element[]): Element {\n    if (typeof type == \"string\") return elt(this.parser.getNodeType(type), from, to!, children)\n    return new TreeElement(type, from)\n  }\n\n  /// @internal\n  get buffer() { return new Buffer(this.parser.nodeSet) }\n}\n\nfunction injectGaps(\n  ranges: readonly {from: number, to: number}[], rangeI: number,\n  tree: SyntaxNode, offset: number, dummies: Map<Tree, Tree>\n): Tree {\n  let rangeEnd = ranges[rangeI].to\n  let children = [], positions = [], start = tree.from + offset\n  function movePastNext(upto: number, inclusive: boolean) {\n    while (inclusive ? upto >= rangeEnd : upto > rangeEnd) {\n      let size = ranges[rangeI + 1].from - rangeEnd\n      offset += size\n      upto += size\n      rangeI++\n      rangeEnd = ranges[rangeI].to\n    }\n  }\n  for (let ch = tree.firstChild; ch; ch = ch.nextSibling) {\n    movePastNext(ch.from + offset, true)\n    let from = ch.from + offset, node, reuse = dummies.get(ch.tree!)\n    if (reuse) {\n      node = reuse\n    } else if (ch.to + offset > rangeEnd) {\n      node = injectGaps(ranges, rangeI, ch, offset, dummies)\n      movePastNext(ch.to + offset, false)\n    } else {\n      node = ch.toTree()\n    }\n    children.push(node)\n    positions.push(from - start)\n  }\n  movePastNext(tree.to + offset, false)\n  return new Tree(tree.type, children, positions, tree.to + offset - start, tree.tree ? tree.tree.propValues : undefined)\n}\n\n/// Used in the [configuration](#MarkdownConfig.defineNodes) to define\n/// new [syntax node\n/// types](https://lezer.codemirror.net/docs/ref/#common.NodeType).\nexport interface NodeSpec {\n  /// The node's name.\n  name: string,\n  /// Should be set to true if this type represents a block node.\n  block?: boolean,\n  /// If this is a composite block, this should hold a function that,\n  /// at the start of a new line where that block is active, checks\n  /// whether the composite block should continue (return value) and\n  /// optionally [adjusts](#Line.moveBase) the line's base position\n  /// and [registers](#Line.addMarker) nodes for any markers involved\n  /// in the block's syntax.\n  composite?(cx: BlockContext, line: Line, value: number): boolean,\n  /// Add highlighting tag information for this node. The value of\n  /// this property may either by a tag or array of tags to assign\n  /// directly to this node, or an object in the style of\n  /// [`styleTags`](https://lezer.codemirror.net/docs/ref/#highlight.styleTags)'s\n  /// argument to assign more complicated rules.\n  style?: Tag | readonly Tag[] | {[selector: string]: Tag | readonly Tag[]},\n}\n\n/// Inline parsers are called for every character of parts of the\n/// document that are parsed as inline content.\nexport interface InlineParser {\n  /// This parser's name, which can be used by other parsers to\n  /// [indicate](#InlineParser.before) a relative precedence.\n  name: string,\n  /// The parse function. Gets the next character and its position as\n  /// arguments. Should return -1 if it doesn't handle the character,\n  /// or add some [element](#InlineContext.addElement) or\n  /// [delimiter](#InlineContext.addDelimiter) and return the end\n  /// position of the content it parsed if it can.\n  parse(cx: InlineContext, next: number, pos: number): number,\n  /// When given, this parser will be installed directly before the\n  /// parser with the given name. The default configuration defines\n  /// inline parsers with names Escape, Entity, InlineCode, HTMLTag,\n  /// Emphasis, HardBreak, Link, and Image. When no `before` or\n  /// `after` property is given, the parser is added to the end of the\n  /// list.\n  before?: string,\n  /// When given, the parser will be installed directly _after_ the\n  /// parser with the given name.\n  after?: string\n}  \n\n/// Block parsers handle block-level structure. There are three\n/// general types of block parsers:\n///\n/// - Composite block parsers, which handle things like lists and\n///   blockquotes. These define a [`parse`](#BlockParser.parse) method\n///   that [starts](#BlockContext.startComposite) a composite block\n///   and returns null when it recognizes its syntax.\n///\n/// - Eager leaf block parsers, used for things like code or HTML\n///   blocks. These can unambiguously recognize their content from its\n///   first line. They define a [`parse`](#BlockParser.parse) method\n///   that, if it recognizes the construct,\n///   [moves](#BlockContext.nextLine) the current line forward to the\n///   line beyond the end of the block,\n///   [add](#BlockContext.addElement) a syntax node for the block, and\n///   return true.\n///\n/// - Leaf block parsers that observe a paragraph-like construct as it\n///   comes in, and optionally decide to handle it at some point. This\n///   is used for \"setext\" (underlined) headings and link references.\n///   These define a [`leaf`](#BlockParser.leaf) method that checks\n///   the first line of the block and returns a\n///   [`LeafBlockParser`](#LeafBlockParser) object if it wants to\n///   observe that block.\nexport interface BlockParser {\n  /// The name of the parser. Can be used by other block parsers to\n  /// [specify](#BlockParser.before) precedence.\n  name: string,\n  /// The eager parse function, which can look at the block's first\n  /// line and return `false` to do nothing, `true` if it has parsed\n  /// (and [moved past](#BlockContext.nextLine) a block), or `null` if\n  /// it has started a composite block.\n  parse?(cx: BlockContext, line: Line): BlockResult\n  /// A leaf parse function. If no [regular](#BlockParser.parse) parse\n  /// functions match for a given line, its content will be\n  /// accumulated for a paragraph-style block. This method can return\n  /// an [object](#LeafBlockParser) that overrides that style of\n  /// parsing in some situations.\n  leaf?(cx: BlockContext, leaf: LeafBlock): LeafBlockParser | null\n  /// Some constructs, such as code blocks or newly started\n  /// blockquotes, can interrupt paragraphs even without a blank line.\n  /// If your construct can do this, provide a predicate here that\n  /// recognizes lines that should end a paragraph (or other non-eager\n  /// [leaf block](#BlockParser.leaf)).\n  endLeaf?(cx: BlockContext, line: Line, leaf: LeafBlock): boolean\n  /// When given, this parser will be installed directly before the\n  /// block parser with the given name. The default configuration\n  /// defines block parsers with names LinkReference, IndentedCode,\n  /// FencedCode, Blockquote, HorizontalRule, BulletList, OrderedList,\n  /// ATXHeading, HTMLBlock, and SetextHeading.\n  before?: string,\n  /// When given, the parser will be installed directly _after_ the\n  /// parser with the given name.\n  after?: string,\n}\n\n/// Objects that are used to [override](#BlockParser.leaf)\n/// paragraph-style blocks should conform to this interface.\nexport interface LeafBlockParser {\n  /// Update the parser's state for the next line, and optionally\n  /// finish the block. This is not called for the first line (the\n  /// object is contructed at that line), but for any further lines.\n  /// When it returns `true`, the block is finished. It is okay for\n  /// the function to [consume](#BlockContext.nextLine) the current\n  /// line or any subsequent lines when returning true.\n  nextLine(cx: BlockContext, line: Line, leaf: LeafBlock): boolean\n  /// Called when the block is finished by external circumstances\n  /// (such as a blank line or the [start](#BlockParser.endLeaf) of\n  /// another construct). If this parser can handle the block up to\n  /// its current position, it should\n  /// [finish](#BlockContext.addLeafElement) the block and return\n  /// true.\n  finish(cx: BlockContext, leaf: LeafBlock): boolean\n}\n\n/// Objects of this type are used to\n/// [configure](#MarkdownParser.configure) the Markdown parser.\nexport interface MarkdownConfig {\n  /// Node props to add to the parser's node set.\n  props?: readonly NodePropSource[],\n  /// Define new [node types](#NodeSpec) for use in parser extensions.\n  defineNodes?: readonly (string | NodeSpec)[],\n  /// Define additional [block parsing](#BlockParser) logic.\n  parseBlock?: readonly BlockParser[],\n  /// Define new [inline parsing](#InlineParser) logic.\n  parseInline?: readonly InlineParser[],\n  /// Remove the named parsers from the configuration.\n  remove?: readonly string[]\n  /// Add a parse wrapper (such as a [mixed-language\n  /// parser](#common.parseMixed)) to this parser.\n  wrap?: ParseWrapper\n}\n\n/// To make it possible to group extensions together into bigger\n/// extensions (such as the [Github-flavored Markdown](#GFM)\n/// extension), [reconfiguration](#MarkdownParser.configure) accepts\n/// nested arrays of [config](#MarkdownConfig) objects.\nexport type MarkdownExtension = MarkdownConfig | readonly MarkdownExtension[]\n\n/// A Markdown parser configuration.\nexport class MarkdownParser extends Parser {\n  /// @internal\n  nodeTypes: {[name: string]: number} = Object.create(null)\n\n  /// @internal\n  constructor(\n    /// The parser's syntax [node\n    /// types](https://lezer.codemirror.net/docs/ref/#common.NodeSet).\n    readonly nodeSet: NodeSet,\n    /// @internal\n    readonly blockParsers: readonly (((cx: BlockContext, line: Line) => BlockResult) | undefined)[],\n    /// @internal\n    readonly leafBlockParsers: readonly (((cx: BlockContext, leaf: LeafBlock) => LeafBlockParser | null) | undefined)[],\n    /// @internal\n    readonly blockNames: readonly string[],\n    /// @internal\n    readonly endLeafBlock: readonly ((cx: BlockContext, line: Line, leaf: LeafBlock) => boolean)[],\n    /// @internal\n    readonly skipContextMarkup: {readonly [type: number]: (bl: CompositeBlock, cx: BlockContext, line: Line) => boolean},\n    /// @internal\n    readonly inlineParsers: readonly (((cx: InlineContext, next: number, pos: number) => number) | undefined)[],\n    /// @internal\n    readonly inlineNames: readonly string[],\n    /// @internal\n    readonly wrappers: readonly ParseWrapper[]\n  ) {\n    super()\n    for (let t of nodeSet.types) this.nodeTypes[t.name] = t.id\n  }\n\n  createParse(input: Input, fragments: readonly TreeFragment[], ranges: readonly {from: number, to: number}[]): PartialParse {\n    let parse: PartialParse = new BlockContext(this, input, fragments, ranges)\n    for (let w of this.wrappers) parse = w(parse, input, fragments, ranges)\n    return parse\n  }\n\n  /// Reconfigure the parser.\n  configure(spec: MarkdownExtension) {\n    let config = resolveConfig(spec)\n    if (!config) return this\n    let {nodeSet, skipContextMarkup} = this\n    let blockParsers = this.blockParsers.slice(), leafBlockParsers = this.leafBlockParsers.slice(),\n        blockNames = this.blockNames.slice(), inlineParsers = this.inlineParsers.slice(),\n        inlineNames = this.inlineNames.slice(), endLeafBlock = this.endLeafBlock.slice(),\n        wrappers = this.wrappers\n\n    if (nonEmpty(config.defineNodes)) {\n      skipContextMarkup = Object.assign({}, skipContextMarkup)\n      let nodeTypes = nodeSet.types.slice(), styles: {[selector: string]: Tag | readonly Tag[]} | undefined\n      for (let s of config.defineNodes) {\n        let {name, block, composite, style} = typeof s == \"string\" ? {name: s} as NodeSpec : s\n        if (nodeTypes.some(t => t.name == name)) continue\n        if (composite) (skipContextMarkup as any)[nodeTypes.length] =\n          (bl: CompositeBlock, cx: BlockContext, line: Line) => composite!(cx, line, bl.value)\n        let id = nodeTypes.length\n        let group = composite ? [\"Block\", \"BlockContext\"] : !block ? undefined\n          : id >= Type.ATXHeading1 && id <= Type.SetextHeading2 ? [\"Block\", \"LeafBlock\", \"Heading\"] : [\"Block\", \"LeafBlock\"]\n        nodeTypes.push(NodeType.define({\n          id,\n          name,\n          props: group && [[NodeProp.group, group]]\n        }))\n        if (style) {\n          if (!styles) styles = {}\n          if (Array.isArray(style) || style instanceof Tag) styles[name] = style\n          else Object.assign(styles, style)\n        }\n      }\n      nodeSet = new NodeSet(nodeTypes)\n      if (styles) nodeSet = nodeSet.extend(styleTags(styles))\n    }\n\n    if (nonEmpty(config.props)) nodeSet = nodeSet.extend(...config.props)\n\n    if (nonEmpty(config.remove)) {\n      for (let rm of config.remove) {\n        let block = this.blockNames.indexOf(rm), inline = this.inlineNames.indexOf(rm)\n        if (block > -1) blockParsers[block] = leafBlockParsers[block] = undefined\n        if (inline > -1) inlineParsers[inline] = undefined\n      }\n    }\n\n    if (nonEmpty(config.parseBlock)) {\n      for (let spec of config.parseBlock) {\n        let found = blockNames.indexOf(spec.name)\n        if (found > -1) {\n          blockParsers[found] = spec.parse\n          leafBlockParsers[found] = spec.leaf\n        } else {\n          let pos = spec.before ? findName(blockNames, spec.before)\n            : spec.after ? findName(blockNames, spec.after) + 1 : blockNames.length - 1\n          blockParsers.splice(pos, 0, spec.parse)\n          leafBlockParsers.splice(pos, 0, spec.leaf)\n          blockNames.splice(pos, 0, spec.name)\n        }\n        if (spec.endLeaf) endLeafBlock.push(spec.endLeaf)\n      }\n    }\n\n    if (nonEmpty(config.parseInline)) {\n      for (let spec of config.parseInline) {\n        let found = inlineNames.indexOf(spec.name)\n        if (found > -1) {\n          inlineParsers[found] = spec.parse\n        } else {\n          let pos = spec.before ? findName(inlineNames, spec.before)\n            : spec.after ? findName(inlineNames, spec.after) + 1 : inlineNames.length - 1\n          inlineParsers.splice(pos, 0, spec.parse)\n          inlineNames.splice(pos, 0, spec.name)\n        }\n      }\n    }\n\n    if (config.wrap) wrappers = wrappers.concat(config.wrap)\n\n    return new MarkdownParser(nodeSet,\n                              blockParsers, leafBlockParsers, blockNames,\n                              endLeafBlock, skipContextMarkup,\n                              inlineParsers, inlineNames, wrappers)\n  }\n\n  /// @internal\n  getNodeType(name: string) {\n    let found = this.nodeTypes[name]\n    if (found == null) throw new RangeError(`Unknown node type '${name}'`)\n    return found\n  }\n\n  /// Parse the given piece of inline text at the given offset,\n  /// returning an array of [`Element`](#Element) objects representing\n  /// the inline content.\n  parseInline(text: string, offset: number) {\n    let cx = new InlineContext(this, text, offset)\n    outer: for (let pos = offset; pos < cx.end;) {\n      let next = cx.char(pos)\n      for (let token of this.inlineParsers) if (token) {\n        let result = token(cx, next, pos)\n        if (result >= 0) { pos = result; continue outer }\n      }\n      pos++\n    }\n    return cx.resolveMarkers(0)\n  }\n}\n\nfunction nonEmpty<T>(a: undefined | readonly T[]): a is readonly T[] {\n  return a != null && a.length > 0\n}\n\nfunction resolveConfig(spec: MarkdownExtension): MarkdownConfig | null {\n  if (!Array.isArray(spec)) return spec as MarkdownConfig\n  if (spec.length == 0) return null\n  let conf = resolveConfig(spec[0])\n  if (spec.length == 1) return conf\n  let rest = resolveConfig(spec.slice(1))\n  if (!rest || !conf) return conf || rest\n  let conc: <T>(a: readonly T[] | undefined, b: readonly T[] | undefined) => readonly T[] =\n    (a, b) => (a || none).concat(b || none)\n  let wrapA = conf.wrap, wrapB = rest.wrap\n  return {\n    props: conc(conf.props, rest.props),\n    defineNodes: conc(conf.defineNodes, rest.defineNodes),\n    parseBlock: conc(conf.parseBlock, rest.parseBlock),\n    parseInline: conc(conf.parseInline, rest.parseInline),\n    remove: conc(conf.remove, rest.remove),\n    wrap: !wrapA ? wrapB : !wrapB ? wrapA :\n      (inner, input, fragments, ranges) => wrapA!(wrapB!(inner, input, fragments, ranges), input, fragments, ranges)\n  }\n}\n\nfunction findName(names: readonly string[], name: string) {\n  let found = names.indexOf(name)\n  if (found < 0) throw new RangeError(`Position specified relative to unknown parser ${name}`)\n  return found\n}\n\nlet nodeTypes = [NodeType.none]\nfor (let i = 1, name; name = Type[i]; i++) {\n  nodeTypes[i] = NodeType.define({\n    id: i,\n    name,\n    props: i >= Type.Escape ? [] : [[NodeProp.group, i in DefaultSkipMarkup ? [\"Block\", \"BlockContext\"] : [\"Block\", \"LeafBlock\"]]],\n    top: name == \"Document\"\n  })\n}\n\nconst none: readonly any[] = []\n\nclass Buffer {\n  content: number[] = []\n  nodes: Tree[] = []\n  constructor(readonly nodeSet: NodeSet) {}\n\n  write(type: Type, from: number, to: number, children = 0) {\n    this.content.push(type, from, to, 4 + children * 4)\n    return this\n  }\n\n  writeElements(elts: readonly (Element | TreeElement)[], offset = 0) {\n    for (let e of elts) e.writeTo(this, offset)\n    return this\n  }\n\n  finish(type: Type, length: number) {\n    return Tree.build({\n      buffer: this.content,\n      nodeSet: this.nodeSet,\n      reused: this.nodes,\n      topID: type,\n      length\n    })\n  }\n}  \n\n/// Elements are used to compose syntax nodes during parsing.\nexport class Element {\n  /// @internal\n  constructor(\n    /// The node's\n    /// [id](https://lezer.codemirror.net/docs/ref/#common.NodeType.id).\n    readonly type: number,\n    /// The start of the node, as an offset from the start of the document.\n    readonly from: number,\n    /// The end of the node.\n    readonly to: number,\n    /// The node's child nodes @internal\n    readonly children: readonly (Element | TreeElement)[] = none\n  ) {}\n\n  /// @internal\n  writeTo(buf: Buffer, offset: number) {\n    let startOff = buf.content.length\n    buf.writeElements(this.children, offset)\n    buf.content.push(this.type, this.from + offset, this.to + offset, buf.content.length + 4 - startOff)\n  }\n\n  /// @internal\n  toTree(nodeSet: NodeSet): Tree {\n    return new Buffer(nodeSet).writeElements(this.children, -this.from).finish(this.type, this.to - this.from)\n  }\n}\n\nclass TreeElement {\n  constructor(readonly tree: Tree, readonly from: number) {}\n\n  get to() { return this.from + this.tree.length }\n\n  get type() { return this.tree.type.id }\n\n  get children() { return none }\n\n  writeTo(buf: Buffer, offset: number) {\n    buf.nodes.push(this.tree)\n    buf.content.push(buf.nodes.length - 1, this.from + offset, this.to + offset, -1)\n  }\n\n  toTree(): Tree { return this.tree }\n}\n\nfunction elt(type: Type, from: number, to: number, children?: readonly (Element | TreeElement)[]) {\n  return new Element(type, from, to, children)\n}\n\nconst enum Mark { None = 0, Open = 1, Close = 2 }\n\n/// Delimiters are used during inline parsing to store the positions\n/// of things that _might_ be delimiters, if another matching\n/// delimiter is found. They are identified by objects with these\n/// properties.\nexport interface DelimiterType {\n  /// If this is given, the delimiter should be matched automatically\n  /// when a piece of inline content is finished. Such delimiters will\n  /// be matched with delimiters of the same type according to their\n  /// [open and close](#InlineContext.addDelimiter) properties. When a\n  /// match is found, the content between the delimiters is wrapped in\n  /// a node whose name is given by the value of this property.\n  ///\n  /// When this isn't given, you need to match the delimiter eagerly\n  /// using the [`findOpeningDelimiter`](#InlineContext.findOpeningDelimiter)\n  /// and [`takeContent`](#InlineContext.takeContent) methods.\n  resolve?: string,\n  /// If the delimiter itself should, when matched, create a syntax\n  /// node, set this to the name of the syntax node.\n  mark?: string\n}\n\nconst EmphasisUnderscore: DelimiterType = {resolve: \"Emphasis\", mark: \"EmphasisMark\"}\nconst EmphasisAsterisk: DelimiterType = {resolve: \"Emphasis\", mark: \"EmphasisMark\"}\nconst LinkStart: DelimiterType = {}, ImageStart: DelimiterType = {}\n\nclass InlineDelimiter {\n  constructor(readonly type: DelimiterType,\n              readonly from: number,\n              readonly to: number,\n              public side: Mark) {}\n}\n\nconst Escapable = \"!\\\"#$%&'()*+,-./:;<=>?@[\\\\]^_`{|}~\"\n\nexport let Punctuation = /[!\"#$%&'()*+,\\-.\\/:;<=>?@\\[\\\\\\]^_`{|}~\\xA1\\u2010-\\u2027]/\ntry { Punctuation = new RegExp(\"[\\\\p{Pc}|\\\\p{Pd}|\\\\p{Pe}|\\\\p{Pf}|\\\\p{Pi}|\\\\p{Po}|\\\\p{Ps}]\", \"u\") } catch (_) {}\n\nconst DefaultInline: {[name: string]: (cx: InlineContext, next: number, pos: number) => number} = {\n  Escape(cx, next, start) {\n    if (next != 92 /* '\\\\' */ || start == cx.end - 1) return -1\n    let escaped = cx.char(start + 1)\n    for (let i = 0; i < Escapable.length; i++) if (Escapable.charCodeAt(i) == escaped)\n      return cx.append(elt(Type.Escape, start, start + 2))\n    return -1\n  },\n\n  Entity(cx, next, start) {\n    if (next != 38 /* '&' */) return -1\n    let m = /^(?:#\\d+|#x[a-f\\d]+|\\w+);/i.exec(cx.slice(start + 1, start + 31))\n    return m ? cx.append(elt(Type.Entity, start, start + 1 + m[0].length)) : -1\n  },\n\n  InlineCode(cx, next, start) {\n    if (next != 96 /* '`' */ || start && cx.char(start - 1) == 96) return -1\n    let pos = start + 1\n    while (pos < cx.end && cx.char(pos) == 96) pos++\n    let size = pos - start, curSize = 0\n    for (; pos < cx.end; pos++) {\n      if (cx.char(pos) == 96) {\n        curSize++\n        if (curSize == size && cx.char(pos + 1) != 96)\n          return cx.append(elt(Type.InlineCode, start, pos + 1, [\n            elt(Type.CodeMark, start, start + size),\n            elt(Type.CodeMark, pos + 1 - size, pos + 1)\n          ]))\n      } else {\n        curSize = 0\n      }\n    }\n    return -1\n  },\n\n  HTMLTag(cx, next, start) { // or URL\n    if (next != 60 /* '<' */ || start == cx.end - 1) return -1\n    let after = cx.slice(start + 1, cx.end)\n    let url = /^(?:[a-z][-\\w+.]+:[^\\s>]+|[a-z\\d.!#$%&'*+/=?^_`{|}~-]+@[a-z\\d](?:[a-z\\d-]{0,61}[a-z\\d])?(?:\\.[a-z\\d](?:[a-z\\d-]{0,61}[a-z\\d])?)*)>/i.exec(after)\n    if (url) return cx.append(elt(Type.URL, start, start + 1 + url[0].length))\n    let comment = /^!--[^>](?:-[^-]|[^-])*?-->/i.exec(after)\n    if (comment) return cx.append(elt(Type.Comment, start, start + 1 + comment[0].length))\n    let procInst = /^\\?[^]*?\\?>/.exec(after)\n    if (procInst) return cx.append(elt(Type.ProcessingInstruction, start, start + 1 + procInst[0].length))\n    let m = /^(?:![A-Z][^]*?>|!\\[CDATA\\[[^]*?\\]\\]>|\\/\\s*[a-zA-Z][\\w-]*\\s*>|\\s*[a-zA-Z][\\w-]*(\\s+[a-zA-Z:_][\\w-.:]*(?:\\s*=\\s*(?:[^\\s\"'=<>`]+|'[^']*'|\"[^\"]*\"))?)*\\s*(\\/\\s*)?>)/.exec(after)\n    if (!m) return -1\n    return cx.append(elt(Type.HTMLTag, start, start + 1 + m[0].length))\n  },\n\n  Emphasis(cx, next, start) {\n    if (next != 95 && next != 42) return -1\n    let pos = start + 1\n    while (cx.char(pos) == next) pos++\n    let before = cx.slice(start - 1, start), after = cx.slice(pos, pos + 1)\n    let pBefore = Punctuation.test(before), pAfter = Punctuation.test(after)\n    let sBefore = /\\s|^$/.test(before), sAfter = /\\s|^$/.test(after)\n    let leftFlanking = !sAfter && (!pAfter || sBefore || pBefore)\n    let rightFlanking = !sBefore && (!pBefore || sAfter || pAfter)\n    let canOpen = leftFlanking && (next == 42 || !rightFlanking || pBefore)\n    let canClose = rightFlanking && (next == 42 || !leftFlanking || pAfter)\n    return cx.append(new InlineDelimiter(next == 95 ? EmphasisUnderscore : EmphasisAsterisk, start, pos,\n                                         (canOpen ? Mark.Open : 0) | (canClose ? Mark.Close : 0)))\n  },\n\n  HardBreak(cx, next, start) {\n    if (next == 92 /* '\\\\' */ && cx.char(start + 1) == 10 /* '\\n' */)\n      return cx.append(elt(Type.HardBreak, start, start + 2))\n    if (next == 32) {\n      let pos = start + 1\n      while (cx.char(pos) == 32) pos++\n      if (cx.char(pos) == 10 && pos >= start + 2)\n        return cx.append(elt(Type.HardBreak, start, pos + 1))\n    }\n    return -1\n  },\n\n  Link(cx, next, start) {\n    return next == 91 /* '[' */ ? cx.append(new InlineDelimiter(LinkStart, start, start + 1, Mark.Open)) : -1\n  },\n\n  Image(cx, next, start) {\n    return next == 33 /* '!' */ && cx.char(start + 1) == 91 /* '[' */\n      ? cx.append(new InlineDelimiter(ImageStart, start, start + 2, Mark.Open)) : -1\n  },\n\n  LinkEnd(cx, next, start) {\n    if (next != 93 /* ']' */) return -1\n    // Scanning back to the next link/image start marker\n    for (let i = cx.parts.length - 1; i >= 0; i--) {\n      let part = cx.parts[i]\n      if (part instanceof InlineDelimiter && (part.type == LinkStart || part.type == ImageStart)) {\n        // If this one has been set invalid (because it would produce\n        // a nested link) or there's no valid link here ignore both.\n        if (!part.side || cx.skipSpace(part.to) == start && !/[(\\[]/.test(cx.slice(start + 1, start + 2))) {\n          cx.parts[i] = null\n          return -1\n        }\n        // Finish the content and replace the entire range in\n        // this.parts with the link/image node.\n        let content = cx.takeContent(i)\n        let link = cx.parts[i] = finishLink(cx, content, part.type == LinkStart ? Type.Link : Type.Image, part.from, start + 1)\n        // Set any open-link markers before this link to invalid.\n        if (part.type == LinkStart) for (let j = 0; j < i; j++) {\n          let p = cx.parts[j]\n          if (p instanceof InlineDelimiter && p.type == LinkStart) p.side = Mark.None\n        }\n        return link.to\n      }\n    }\n    return -1\n  }\n}\n\nfunction finishLink(cx: InlineContext, content: Element[], type: Type, start: number, startPos: number) {\n  let {text} = cx, next = cx.char(startPos), endPos = startPos\n  content.unshift(elt(Type.LinkMark, start, start + (type == Type.Image ? 2 : 1)))\n  content.push(elt(Type.LinkMark, startPos - 1, startPos))\n  if (next == 40 /* '(' */) {\n    let pos = cx.skipSpace(startPos + 1)\n    let dest = parseURL(text, pos - cx.offset, cx.offset), title\n    if (dest) {\n      pos = cx.skipSpace(dest.to)\n      title = parseLinkTitle(text, pos - cx.offset, cx.offset)\n      if (title) pos = cx.skipSpace(title.to)\n    }\n    if (cx.char(pos) == 41 /* ')' */) {\n      content.push(elt(Type.LinkMark, startPos, startPos + 1))\n      endPos = pos + 1\n      if (dest) content.push(dest)\n      if (title) content.push(title)\n      content.push(elt(Type.LinkMark, pos, endPos))\n    }\n  } else if (next == 91 /* '[' */) {\n    let label = parseLinkLabel(text, startPos - cx.offset, cx.offset, false)\n    if (label) {\n      content.push(label)\n      endPos = label.to\n    }\n  }\n  return elt(type, start, endPos, content)\n}\n\n// These return `null` when falling off the end of the input, `false`\n// when parsing fails otherwise (for use in the incremental link\n// reference parser).\n\nfunction parseURL(text: string, start: number, offset: number): null | false | Element {\n  let next = text.charCodeAt(start)\n  if (next == 60 /* '<' */) {\n    for (let pos = start + 1; pos < text.length; pos++) {\n      let ch = text.charCodeAt(pos)\n      if (ch == 62 /* '>' */) return elt(Type.URL, start + offset, pos + 1 + offset)\n      if (ch == 60 || ch == 10 /* '<\\n' */) return false\n    }\n    return null\n  } else {\n    let depth = 0, pos = start\n    for (let escaped = false; pos < text.length; pos++) {\n      let ch = text.charCodeAt(pos)\n      if (space(ch)) {\n        break\n      } else if (escaped) {\n        escaped = false\n      } else if (ch == 40 /* '(' */) {\n        depth++\n      } else if (ch == 41 /* ')' */) {\n        if (!depth) break\n        depth--\n      } else if (ch == 92 /* '\\\\' */) {\n        escaped = true\n      }\n    }\n    return pos > start ? elt(Type.URL, start + offset, pos + offset) : pos == text.length ? null : false\n  }\n}\n\nfunction parseLinkTitle(text: string, start: number, offset: number): null | false | Element {\n  let next = text.charCodeAt(start)\n  if (next != 39 && next != 34 && next != 40 /* '\"\\'(' */) return false\n  let end = next == 40 ? 41 : next\n  for (let pos = start + 1, escaped = false; pos < text.length; pos++) {\n    let ch = text.charCodeAt(pos)\n    if (escaped) escaped = false\n    else if (ch == end) return elt(Type.LinkTitle, start + offset, pos + 1 + offset)\n    else if (ch == 92 /* '\\\\' */) escaped = true\n  }\n  return null\n}\n\nfunction parseLinkLabel(text: string, start: number, offset: number, requireNonWS: boolean): null | false | Element {\n  for (let escaped = false, pos = start + 1, end = Math.min(text.length, pos + 999); pos < end; pos++) {\n    let ch = text.charCodeAt(pos)\n    if (escaped) escaped = false\n    else if (ch == 93 /* ']' */) return requireNonWS ? false : elt(Type.LinkLabel, start + offset, pos + 1 + offset)\n    else {\n      if (requireNonWS && !space(ch)) requireNonWS = false\n      if (ch == 91 /* '[' */) return false\n      else if (ch == 92 /* '\\\\' */) escaped = true\n    }\n  }\n  return null\n}\n\n/// Inline parsing functions get access to this context, and use it to\n/// read the content and emit syntax nodes.\nexport class InlineContext {\n  /// @internal\n  parts: (Element | InlineDelimiter | null)[] = []\n\n  /// @internal\n  constructor(\n    /// The parser that is being used.\n    readonly parser: MarkdownParser,\n    /// The text of this inline section.\n    readonly text: string,\n    /// The starting offset of the section in the document.\n    readonly offset: number\n  ) {}\n\n  /// Get the character code at the given (document-relative)\n  /// position.\n  char(pos: number) { return pos >= this.end ? -1 : this.text.charCodeAt(pos - this.offset) }\n\n  /// The position of the end of this inline section.\n  get end() { return this.offset + this.text.length }\n\n  /// Get a substring of this inline section. Again uses\n  /// document-relative positions.\n  slice(from: number, to: number) { return this.text.slice(from - this.offset, to - this.offset) }\n\n  /// @internal\n  append(elt: Element | InlineDelimiter) {\n    this.parts.push(elt)\n    return elt.to\n  }\n\n  /// Add a [delimiter](#DelimiterType) at this given position. `open`\n  /// and `close` indicate whether this delimiter is opening, closing,\n  /// or both. Returns the end of the delimiter, for convenient\n  /// returning from [parse functions](#InlineParser.parse).\n  addDelimiter(type: DelimiterType, from: number, to: number, open: boolean, close: boolean) {\n    return this.append(new InlineDelimiter(type, from, to, (open ? Mark.Open : 0) | (close ? Mark.Close : 0)))\n  }\n\n  /// Add an inline element. Returns the end of the element.\n  addElement(elt: Element) {\n    return this.append(elt)\n  }\n\n  /// Resolve markers between this.parts.length and from, wrapping matched markers in the\n  /// appropriate node and updating the content of this.parts. @internal\n  resolveMarkers(from: number) {\n    // Scan forward, looking for closing tokens\n    for (let i = from; i < this.parts.length; i++) {\n      let close = this.parts[i]\n      if (!(close instanceof InlineDelimiter && close.type.resolve && (close.side & Mark.Close))) continue\n\n      let emp = close.type == EmphasisUnderscore || close.type == EmphasisAsterisk\n      let closeSize = close.to - close.from\n      let open: InlineDelimiter | undefined, j = i - 1\n      // Continue scanning for a matching opening token\n      for (; j >= from; j--) {\n        let part = this.parts[j]\n        if (part instanceof InlineDelimiter && (part.side & Mark.Open) && part.type == close.type &&\n            // Ignore emphasis delimiters where the character count doesn't match\n            !(emp && ((close.side & Mark.Open) || (part.side & Mark.Close)) &&\n              (part.to - part.from + closeSize) % 3 == 0 && ((part.to - part.from) % 3 || closeSize % 3))) {\n          open = part\n          break\n        }\n      }\n      if (!open) continue\n\n      let type = close.type.resolve, content = []\n      let start = open.from, end = close.to\n      // Emphasis marker effect depends on the character count. Size consumed is minimum of the two\n      // markers.\n      if (emp) {\n        let size = Math.min(2, open.to - open.from, closeSize)\n        start = open.to - size\n        end = close.from + size\n        type = size == 1 ? \"Emphasis\" : \"StrongEmphasis\"\n      }\n      // Move the covered region into content, optionally adding marker nodes\n      if (open.type.mark) content.push(this.elt(open.type.mark, start, open.to))\n      for (let k = j + 1; k < i; k++) {\n        if (this.parts[k] instanceof Element) content.push(this.parts[k] as Element)\n        this.parts[k] = null\n      }\n      if (close.type.mark) content.push(this.elt(close.type.mark, close.from, end))\n      let element = this.elt(type, start, end, content)\n      // If there are leftover emphasis marker characters, shrink the close/open markers. Otherwise, clear them.\n      this.parts[j] = emp && open.from != start ? new InlineDelimiter(open.type, open.from, start, open.side) : null\n      let keep = this.parts[i] = emp && close.to != end ? new InlineDelimiter(close.type, end, close.to, close.side) : null\n      // Insert the new element in this.parts\n      if (keep) this.parts.splice(i, 0, element)\n      else this.parts[i] = element\n    }\n\n    // Collect the elements remaining in this.parts into an array.\n    let result = []\n    for (let i = from; i < this.parts.length; i++) {\n      let part = this.parts[i]\n      if (part instanceof Element) result.push(part)\n    }\n    return result\n  }\n\n  /// Find an opening delimiter of the given type. Returns `null` if\n  /// no delimiter is found, or an index that can be passed to\n  /// [`takeContent`](#InlineContext.takeContent) otherwise.\n  findOpeningDelimiter(type: DelimiterType) {\n    for (let i = this.parts.length - 1; i >= 0; i--) {\n      let part = this.parts[i]\n      if (part instanceof InlineDelimiter && part.type == type) return i\n    }\n    return null\n  }\n\n  /// Remove all inline elements and delimiters starting from the\n  /// given index (which you should get from\n  /// [`findOpeningDelimiter`](#InlineContext.findOpeningDelimiter),\n  /// resolve delimiters inside of them, and return them as an array\n  /// of elements.\n  takeContent(startIndex: number) {\n    let content = this.resolveMarkers(startIndex)\n    this.parts.length = startIndex\n    return content\n  }\n\n  /// Skip space after the given (document) position, returning either\n  /// the position of the next non-space character or the end of the\n  /// section.\n  skipSpace(from: number) { return skipSpace(this.text, from - this.offset) + this.offset }\n\n  /// Create an [`Element`](#Element) for a syntax node.\n  elt(type: string, from: number, to: number, children?: readonly Element[]): Element\n  elt(tree: Tree, at: number): Element\n  elt(type: string | Tree, from: number, to?: number, children?: readonly Element[]): Element {\n    if (typeof type == \"string\") return elt(this.parser.getNodeType(type), from, to!, children)\n    return new TreeElement(type, from)\n  }\n}\n\nfunction injectMarks(elements: readonly (Element | TreeElement)[], marks: Element[]) {\n  if (!marks.length) return elements\n  if (!elements.length) return marks\n  let elts = elements.slice(), eI = 0\n  for (let mark of marks) {\n    while (eI < elts.length && elts[eI].to < mark.to) eI++\n    if (eI < elts.length && elts[eI].from < mark.from) {\n      let e = elts[eI]\n      if (e instanceof Element)\n        elts[eI] = new Element(e.type, e.from, e.to, injectMarks(e.children, [mark]))\n    } else {\n      elts.splice(eI++, 0, mark)\n    }\n  }\n  return elts\n}\n\n// These are blocks that can span blank lines, and should thus only be\n// reused if their next sibling is also being reused.\nconst NotLast = [Type.CodeBlock, Type.ListItem, Type.OrderedList, Type.BulletList]\n\nclass FragmentCursor {\n  // Index into fragment array\n  i = 0\n  // Active fragment\n  fragment: TreeFragment | null = null\n  fragmentEnd = -1\n  // Cursor into the current fragment, if any. When `moveTo` returns\n  // true, this points at the first block after `pos`.\n  cursor: TreeCursor | null = null\n\n  constructor(readonly fragments: readonly TreeFragment[], readonly input: Input) {\n    if (fragments.length) this.fragment = fragments[this.i++]\n  }\n\n  nextFragment() {\n    this.fragment = this.i < this.fragments.length ? this.fragments[this.i++] : null\n    this.cursor = null\n    this.fragmentEnd = -1\n  }\n\n  moveTo(pos: number, lineStart: number) {\n    while (this.fragment && this.fragment.to <= pos) this.nextFragment()\n    if (!this.fragment || this.fragment.from > (pos ? pos - 1 : 0)) return false\n    if (this.fragmentEnd < 0) {\n      let end = this.fragment.to\n      while (end > 0 && this.input.read(end - 1, end) != \"\\n\") end--\n      this.fragmentEnd = end ? end - 1 : 0\n    }\n\n    let c = this.cursor\n    if (!c) {\n      c = this.cursor = this.fragment.tree.cursor()\n      c.firstChild()\n    }\n\n    let rPos = pos + this.fragment.offset\n    while (c.to <= rPos) if (!c.parent()) return false\n    for (;;) {\n      if (c.from >= rPos) return this.fragment.from <= lineStart\n      if (!c.childAfter(rPos)) return false\n    }\n  }\n\n  matches(hash: number) {\n    let tree = this.cursor!.tree\n    return tree && tree.prop(NodeProp.contextHash) == hash\n  }\n\n  takeNodes(cx: BlockContext) {\n    let cur = this.cursor!, off = this.fragment!.offset, fragEnd = this.fragmentEnd - (this.fragment!.openEnd ? 1 : 0)\n    let start = cx.absoluteLineStart, end = start, blockI = cx.block.children.length\n    let prevEnd = end, prevI = blockI\n    for (;;) {\n      if (cur.to - off > fragEnd) {\n        if (cur.type.isAnonymous && cur.firstChild()) continue\n        break\n      }\n      let pos = toRelative(cur.from - off, cx.ranges)\n      if (cur.to - off <= cx.ranges[cx.rangeI].to) { // Fits in current range\n        cx.addNode(cur.tree!, pos)\n      } else {\n        let dummy = new Tree(cx.parser.nodeSet.types[Type.Paragraph], [], [], 0, cx.block.hashProp)\n        cx.reusePlaceholders.set(dummy, cur.tree!)\n        cx.addNode(dummy, pos)\n      }\n      // Taken content must always end in a block, because incremental\n      // parsing happens on block boundaries. Never stop directly\n      // after an indented code block, since those can continue after\n      // any number of blank lines.\n      if (cur.type.is(\"Block\")) {\n        if (NotLast.indexOf(cur.type.id) < 0) {\n          end = cur.to - off\n          blockI = cx.block.children.length\n        } else {\n          end = prevEnd\n          blockI = prevI\n          prevEnd = cur.to - off\n          prevI = cx.block.children.length\n        }\n      }\n      if (!cur.nextSibling()) break\n    }\n    while (cx.block.children.length > blockI) {\n      cx.block.children.pop()\n      cx.block.positions.pop()\n    }\n    return end - start\n  }\n}\n\n// Convert an input-stream-relative position to a\n// Markdown-doc-relative position by subtracting the size of all input\n// gaps before `abs`.\nfunction toRelative(abs: number, ranges: readonly {from: number, to: number}[]) {\n  let pos = abs\n  for (let i = 1; i < ranges.length; i++) {\n    let gapFrom = ranges[i - 1].to, gapTo = ranges[i].from\n    if (gapFrom < abs) pos -= gapTo - gapFrom\n  }\n  return pos\n}\n\nconst markdownHighlighting = styleTags({\n  \"Blockquote/...\": t.quote,\n  HorizontalRule: t.contentSeparator,\n  \"ATXHeading1/... SetextHeading1/...\": t.heading1,\n  \"ATXHeading2/... SetextHeading2/...\": t.heading2,\n  \"ATXHeading3/...\": t.heading3,\n  \"ATXHeading4/...\": t.heading4,\n  \"ATXHeading5/...\": t.heading5,\n  \"ATXHeading6/...\": t.heading6,\n  \"Comment CommentBlock\": t.comment,\n  Escape: t.escape,\n  Entity: t.character,\n  \"Emphasis/...\": t.emphasis,\n  \"StrongEmphasis/...\": t.strong,\n  \"Link/... Image/...\": t.link,\n  \"OrderedList/... BulletList/...\": t.list,\n  \"BlockQuote/...\": t.quote,\n  \"InlineCode CodeText\": t.monospace,\n  URL: t.url,\n  \"HeaderMark HardBreak QuoteMark ListMark LinkMark EmphasisMark CodeMark\": t.processingInstruction,\n  \"CodeInfo LinkLabel\": t.labelName,\n  LinkTitle: t.string,\n  Paragraph: t.content\n})\n\n/// The default CommonMark parser.\nexport const parser = new MarkdownParser(\n  new NodeSet(nodeTypes).extend(markdownHighlighting),\n  Object.keys(DefaultBlockParsers).map(n => DefaultBlockParsers[n]),\n  Object.keys(DefaultBlockParsers).map(n => DefaultLeafBlocks[n]),\n  Object.keys(DefaultBlockParsers),\n  DefaultEndLeaf,\n  DefaultSkipMarkup,\n  Object.keys(DefaultInline).map(n => DefaultInline[n]),\n  Object.keys(DefaultInline),\n  []\n)\n", "import { Type } from \"../lezer-parser-markdown/markdown\";\n\nconst MarkdownSVG = \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"16\\\" height=\\\"16\\\" fill=\\\"currentColor\\\" class=\\\"bi bi-markdown\\\"><path d=\\\"M14 3a1 1 0 0 1 1 1v8a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h12zM2 2a2 2 0 0 0-2 2v8a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V4a2 2 0 0 0-2-2H2z\\\"/><path fill-rule=\\\"evenodd\\\" d=\\\"M9.146 8.146a.5.5 0 0 1 .708 0L11.5 9.793l1.646-1.647a.5.5 0 0 1 .708.708l-2 2a.5.5 0 0 1-.708 0l-2-2a.5.5 0 0 1 0-.708z\\\"/><path fill-rule=\\\"evenodd\\\" d=\\\"M11.5 5a.5.5 0 0 1 .5.5v4a.5.5 0 0 1-1 0v-4a.5.5 0 0 1 .5-.5z\\\"/><path d=\\\"M3.56 11V7.01h.056l1.428 3.239h.774l1.42-3.24h.056V11h1.073V5.001h-1.2l-1.71 3.894h-.039l-1.71-3.894H2.5V11h1.06z\\\"/></svg>\";\n\nconst ATXHeading1 = `<?xml version=\"1.0\" standalone=\"no\"?><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg t=\"1552895621502\" class=\"icon\" style=\"\" viewBox=\"0 0 1024 1024\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" p-id=\"6506\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"15\" height=\"15\"><defs><style type=\"text/css\"></style></defs><path d=\"M832.512 453.632h32.768V819.2h-41.984V504.832c-23.04 23.552-51.712 39.936-86.016 50.176v-41.984c16.384-4.608 33.792-11.776 51.2-22.016 17.408-11.264 31.744-23.552 44.032-37.376zM51.2 153.6h51.2v306.944h461.2608V153.6H614.4v665.6h-50.7392v-306.4832H102.4V819.2H51.2z\" fill=\"#000000\" p-id=\"6507\"></path></svg>`;\nconst ATXHeading2 = `<?xml version=\"1.0\" standalone=\"no\"?><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg t=\"1552895618032\" class=\"icon\" style=\"\" viewBox=\"0 0 1024 1024\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" p-id=\"6397\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"15\" height=\"15\"><defs><style type=\"text/css\"></style></defs><path d=\"M822.272 446.464c33.792 0 61.44 9.728 83.456 29.184 21.504 19.456 32.768 45.568 32.768 77.312s-12.288 60.416-35.84 86.016c-12.8 13.312-37.888 33.28-75.776 58.88-46.592 31.232-73.216 59.392-79.872 83.968h192V819.2h-243.712c0-33.28 11.776-63.488 36.352-90.624 14.336-16.384 40.448-38.4 79.36-65.024 28.672-20.48 47.616-35.328 57.344-45.568 18.432-19.968 28.16-41.984 28.16-65.536 0-22.528-6.656-39.424-19.968-51.712s-32.256-18.432-55.808-18.432c-25.088 0-44.544 8.192-57.856 25.6-14.336 16.384-22.016 40.96-22.528 73.216h-41.984c0-40.96 11.776-73.728 34.304-97.792 22.528-24.576 52.736-36.864 89.6-36.864zM51.2 153.6h51.2v306.944h461.2608V153.6H614.4v665.6h-50.7392v-306.4832H102.4V819.2H51.2z\" fill=\"#000000\" p-id=\"6398\"></path></svg>`\nconst ATXHeading3 = `<?xml version=\"1.0\" standalone=\"no\"?><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg t=\"1552895609006\" class=\"icon\" style=\"\" viewBox=\"0 0 1024 1024\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" p-id=\"6179\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"15\" height=\"15\"><defs><style type=\"text/css\"></style></defs><path d=\"M820.736 446.464c34.816 0 63.488 8.704 84.992 26.624 20.992 17.92 31.744 41.984 31.744 72.704 0 40.96-19.968 68.608-59.904 81.92 21.504 6.656 37.888 16.896 49.152 31.232 12.288 14.336 18.432 32.256 18.432 53.76 0 33.28-11.776 60.416-34.816 81.408-23.552 21.504-54.272 32.256-92.16 32.256-34.816 0-62.976-9.216-84.992-26.624-26.112-21.504-40.448-52.736-43.52-93.696h42.496c1.024 28.672 10.752 50.688 28.672 65.536 15.36 12.288 34.304 18.944 57.344 18.944 26.112 0 47.104-7.68 62.976-22.528 14.336-14.336 22.016-32.256 22.016-53.76 0-22.016-7.168-38.912-21.504-51.2-14.336-12.288-33.792-17.92-59.392-17.92h-29.696v-32.768h28.16c24.576 0 43.008-5.632 55.808-16.384 12.8-11.264 19.456-27.136 19.456-47.616s-6.656-36.352-18.944-47.616c-13.312-12.288-32.256-17.92-55.808-17.92-24.576 0-43.52 6.144-57.344 19.456-14.336 13.312-22.528 32.256-25.088 56.832h-41.472c3.072-35.328 16.384-62.976 38.912-82.944 21.504-19.968 49.664-29.696 84.48-29.696zM51.2 153.6h51.2v306.944h461.2608V153.6H614.4v665.6h-50.7392v-306.4832H102.4V819.2H51.2z\" fill=\"#000000\" p-id=\"6180\"></path></svg>`;\nconst ATXHeading4 = `<?xml version=\"1.0\" standalone=\"no\"?><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg t=\"1552895416338\" class=\"icon\" style=\"\" viewBox=\"0 0 1024 1024\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" p-id=\"3654\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"15\" height=\"15\"><defs><style type=\"text/css\"></style></defs><path d=\"M834.8672 692.4288v-162.2528l-114.7904 162.304h114.7904zM835.584 819.2v-87.5008h-156.9792v-44.032l163.9936-227.4816h37.9904v232.2432h52.736v39.2704H880.64V819.2h-45.0048zM51.2 153.6h51.2v306.944h461.2608V153.6H614.4v665.6h-50.7392v-306.4832H102.4V819.2H51.2z\" fill=\"#000000\" p-id=\"3655\"></path></svg>`;\nconst ATXHeading5 = `<?xml version=\"1.0\" standalone=\"no\"?><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg t=\"1552895409750\" class=\"icon\" style=\"\" viewBox=\"0 0 1024 1024\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" p-id=\"3545\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"15\" height=\"15\"><defs><style type=\"text/css\"></style></defs><path d=\"M728.832 727.9616c3.0208 25.6512 14.9504 43.4176 35.7888 53.248 10.6496 4.9664 22.9888 7.4752 36.9664 7.4752 26.6752 0 46.4384-8.4992 59.2384-25.4976 12.8512-16.9984 19.2512-35.84 19.2512-56.4736 0-25.0368-7.5776-44.3392-22.8352-58.0096a79.36 79.36 0 0 0-54.8864-20.48c-15.5136 0-28.7744 2.9696-39.8848 8.96-11.0592 6.0416-20.5312 14.336-28.3648 25.0368l-39.0144-2.2528 27.2384-192.768h186.0096v43.52h-152.2176l-15.2576 99.4816c8.2944-6.3488 16.2304-11.1104 23.7568-14.2336 13.312-5.5296 28.7232-8.2432 46.2336-8.2432 32.8192 0 60.672 10.5472 83.456 31.744 22.8864 21.1456 34.304 47.9744 34.304 80.4864 0 33.792-10.496 63.6416-31.3856 89.4976-20.9408 25.856-54.272 38.7584-100.1472 38.7584a127.488 127.488 0 0 1-77.312-24.6272c-22.4768-16.384-35.0208-41.6256-37.6832-75.6224h46.7456zM51.2 153.6h51.2v306.944h461.2608V153.6H614.4v665.6h-50.7392v-306.4832H102.4V819.2H51.2z\" fill=\"#000000\" p-id=\"3546\"></path></svg>`;\nconst ATXHeading6 = `<?xml version=\"1.0\" standalone=\"no\"?><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg t=\"1552895401625\" class=\"icon\" style=\"\" viewBox=\"0 0 1024 1024\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" p-id=\"3436\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"15\" height=\"15\"><defs><style type=\"text/css\"></style></defs><path d=\"M815.36 459.7248c39.9872 0 67.84 10.3424 83.6096 31.0784 15.7696 20.7872 23.6544 42.1376 23.6544 64.1536h-44.544c-2.6624-14.1824-6.912-25.2416-12.7488-33.28-10.8032-15.0016-27.2384-22.4768-49.2544-22.4768-25.1392 0-45.1584 11.6224-59.9552 34.8672-14.848 23.2448-23.0912 56.5248-24.7808 99.84a97.792 97.792 0 0 1 39.0144-33.9456c14.336-6.656 30.3104-10.0352 47.9744-10.0352a116.736 116.736 0 0 1 78.5408 28.7744c22.3232 19.1488 33.4848 47.7696 33.4848 85.76a130.048 130.048 0 0 1-31.744 86.3744c-21.1968 25.088-51.3536 37.632-90.5216 37.632-33.4848 0-62.4128-12.7488-86.7328-38.144-24.32-25.3952-36.5056-68.1984-36.5056-128.3584 0-44.544 5.4272-82.2784 16.2304-113.2544 20.8384-59.392 58.9312-88.9856 114.2784-88.9856z m-3.2768 328.704c23.7056 0 41.3696-7.936 53.1456-23.8592 11.776-15.872 17.6128-34.7136 17.6128-56.3712 0-18.3296-5.2224-35.7888-15.7184-52.3776-10.5472-16.5888-29.5936-24.8832-57.2928-24.8832-19.3024 0-36.2496 6.4512-50.8416 19.2512-14.592 12.8-21.9136 32.1536-21.9136 58.0096 0 22.6816 6.656 41.728 19.9168 57.1392 13.2096 15.36 31.5904 23.0912 55.0912 23.0912zM51.2 153.6h51.2v306.944h461.2608V153.6H614.4v665.6h-50.7392v-306.4832H102.4V819.2H51.2z\" fill=\"#000000\" p-id=\"3437\"></path></svg>`;\n\nconst Link = `<?xml version=\"1.0\" standalone=\"no\"?><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg t=\"1552895479773\" class=\"icon\" style=\"\" viewBox=\"0 0 1024 1024\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" p-id=\"4425\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"15\" height=\"15\"><defs><style type=\"text/css\"></style></defs><path d=\"M487.936 570.2144l-33.8432 38.4-34.048-30.208a227.1744 227.1744 0 0 1 0-321.28l81.408-81.4592a227.1744 227.1744 0 1 1 321.3312 321.28l-81.408 81.4592-36.2496-36.1984L786.5856 460.8a176.0256 176.0256 0 0 0-248.8832-248.9344L456.192 293.2736c-68.7616 68.7616-68.7616 180.224-1.1776 247.8592l32.9216 29.0816z m21.3504-140.8l32.512-39.6288 36.608 30.208a227.1744 227.1744 0 0 1 0 321.3312l-81.408 81.4592A227.1744 227.1744 0 1 1 175.616 501.504l81.408-81.4592 36.2496 36.1984-81.4592 81.408a175.9744 175.9744 0 1 0 248.8832 248.9344l81.4592-81.408c68.7616-68.7616 68.7616-180.224 1.8944-247.296l-34.816-28.4672z\" fill=\"#000000\" p-id=\"4426\"></path></svg>`;\n\nconst Table = '<?xml version=\"1.0\" standalone=\"no\"?><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg t=\"1552895574874\" class=\"icon\" style=\"\" viewBox=\"0 0 1024 1024\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" p-id=\"5633\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"15\" height=\"15\"><defs><style type=\"text/css\"></style></defs><path d=\"M512 819.2v-102.4H153.6v-51.2h358.4v-102.4H153.6v-51.2h358.4V409.6h51.2v102.4h358.4v51.2h-358.4v102.4h358.4v51.2h-358.4v102.4h307.2a51.2 51.2 0 0 0 51.2-51.2V409.6H153.6v358.4a51.2 51.2 0 0 0 51.2 51.2h307.2zM204.8 153.6h665.6a102.4 102.4 0 0 1 102.4 102.4v512a102.4 102.4 0 0 1-102.4 102.4H204.8a102.4 102.4 0 0 1-102.4-102.4V256a102.4 102.4 0 0 1 102.4-102.4zM153.6 358.4h768V256a51.2 51.2 0 0 0-51.2-51.2H204.8a51.2 51.2 0 0 0-51.2 51.2v102.4z\" fill=\"#000000\" p-id=\"5634\"></path></svg>';\n\nconst HorizontalRule = `<?xml version=\"1.0\" standalone=\"no\"?><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg t=\"1552895591003\" class=\"icon\" style=\"\" viewBox=\"0 0 1024 1024\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" p-id=\"5852\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"15\" height=\"15\"><defs><style type=\"text/css\"></style></defs><path d=\"M204.8 512h102.4v51.2H204.8zM460.8 512h102.4v51.2H460.8zM716.8 512h102.4v51.2h-102.4zM153.6 819.2h716.8v51.2H153.6zM153.6 204.8h716.8v51.2H153.6z\" fill=\"#000000\" p-id=\"5853\"></path></svg>`;\n\nconst Code = `<?xml version=\"1.0\" standalone=\"no\"?><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg t=\"1552896744699\" class=\"icon\" style=\"\" viewBox=\"0 0 1024 1024\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" p-id=\"3439\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"15\" height=\"15\"><defs><style type=\"text/css\"></style></defs><path d=\"M212.9408 217.5488h45.9264v41.9328h-37.2736c-29.2864 0-43.9296 15.9744-43.9296 49.2544v138.4448c0 39.936-18.6368 67.2256-54.5792 81.2032 35.9424 14.6432 54.5792 41.9328 54.5792 81.2032v139.1104c0 31.9488 14.6432 48.5888 43.9296 48.5888h37.2736v41.9328h-45.9264c-27.2896 0-48.5888-8.6528-63.232-25.9584-14.6432-15.9744-21.2992-37.9392-21.2992-65.8944v-135.7824c0-19.968-4.6592-34.6112-12.6464-43.9296-9.3184-10.6496-26.624-16.64-50.5856-17.3056v-43.9296c23.9616-1.3312 41.2672-6.656 50.5856-17.3056 7.9872-9.3184 12.6464-23.9616 12.6464-43.9296V310.0672c0-27.9552 6.656-50.5856 21.2992-66.56 14.6432-17.3056 35.9424-25.9584 63.232-25.9584zM730.112 217.5488h45.9264c26.624 0 47.9232 8.6528 63.232 25.9584 13.9776 15.9744 21.2992 38.6048 21.2992 66.56v135.1168c0 19.968 3.9936 34.6112 12.6464 44.5952 9.3184 9.984 25.9584 15.3088 50.5856 16.64v43.9296c-24.6272 0.6656-41.2672 6.656-50.5856 17.3056-8.6528 9.3184-12.6464 23.9616-12.6464 43.9296v135.7824c0 27.9552-7.3216 49.92-21.2992 65.8944-15.3088 17.3056-36.608 25.9584-63.232 25.9584h-45.9264v-41.9328h37.2736c29.2864 0 43.9296-16.64 43.9296-48.5888v-139.1104c0-39.2704 17.9712-66.56 54.5792-81.2032-36.608-13.9776-54.5792-41.2672-54.5792-81.2032V308.736c0-33.28-14.6432-49.2544-43.9296-49.2544h-37.2736v-41.9328z\" fill=\"#000000\" p-id=\"3440\"></path><path d=\"M358.4 512m-51.2 0a51.2 51.2 0 1 0 102.4 0 51.2 51.2 0 1 0-102.4 0Z\" fill=\"#000000\" p-id=\"3441\"></path><path d=\"M512 512m-51.2 0a51.2 51.2 0 1 0 102.4 0 51.2 51.2 0 1 0-102.4 0Z\" fill=\"#000000\" p-id=\"3442\"></path><path d=\"M665.6 512m-51.2 0a51.2 51.2 0 1 0 102.4 0 51.2 51.2 0 1 0-102.4 0Z\" fill=\"#000000\" p-id=\"3443\"></path></svg>`;\nconst Blockquote = `<?xml version=\"1.0\" standalone=\"no\"?><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg t=\"1552895465429\" class=\"icon\" style=\"\" viewBox=\"0 0 1024 1024\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" p-id=\"4205\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"15\" height=\"15\"><defs><style type=\"text/css\"></style></defs><path d=\"M632.32 304.64c33.792 0 62.976 13.824 84.48 41.472 19.968 27.648 30.72 62.976 30.72 109.056 0 67.584-19.968 127.488-59.904 178.176-39.936 49.152-93.696 82.944-158.208 101.376v-76.8c39.936-13.824 72.192-35.328 96.768-66.048 23.04-32.256 33.792-66.048 33.792-102.912-6.144 3.072-18.432 4.608-33.792 4.608-26.112 0-47.616-9.216-66.048-27.648-18.432-18.432-27.648-39.936-27.648-66.048 0-29.184 9.216-52.224 29.184-69.12 16.896-18.432 39.936-26.112 70.656-26.112z m-302.592 0c33.792 0 61.44 13.824 82.944 41.472 19.968 27.648 30.72 62.976 30.72 109.056 0 67.584-19.968 127.488-59.904 178.176-39.936 49.152-93.696 82.944-158.208 101.376v-76.8c39.936-13.824 70.656-35.328 95.232-66.048 24.576-32.256 35.328-66.048 35.328-102.912-6.144 3.072-18.432 4.608-33.792 4.608-26.112 0-47.616-9.216-64.512-27.648-18.432-18.432-27.648-39.936-27.648-66.048 0-29.184 7.68-52.224 26.112-69.12 18.432-18.432 43.008-26.112 73.728-26.112z\" fill=\"#000000\" p-id=\"4206\"></path></svg>`;\nconst HTMLBlock = `<?xml version=\"1.0\" standalone=\"no\"?><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg t=\"1552895602111\" class=\"icon\" style=\"\" viewBox=\"0 0 1024 1024\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" p-id=\"6070\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"15\" height=\"15\"><defs><style type=\"text/css\"></style></defs><path d=\"M561.92 153.6h58.1632L452.2496 870.4H393.216l168.6528-716.8zM334.336 740.864l-36.1984 36.1984L24.064 502.9376 298.1376 228.864l36.1984 36.1984-237.8752 237.8752L334.336 740.864z m355.328 0l237.8752-237.9264-237.8752-237.8752 36.1984-36.1984 274.0736 274.0736-274.0736 274.1248-36.1984-36.1984z\" fill=\"#000000\" p-id=\"6071\"></path></svg>`;\n\nconst Image = `<?xml version=\"1.0\" standalone=\"no\"?><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg t=\"1552895535011\" class=\"icon\" style=\"\" viewBox=\"0 0 1024 1024\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" p-id=\"5304\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"15\" height=\"15\"><defs><style type=\"text/css\"></style></defs><path d=\"M204.8 204.8a51.2 51.2 0 0 0-51.2 51.2v563.2a51.2 51.2 0 0 0 51.2 51.2h614.4a51.2 51.2 0 0 0 51.2-51.2V256a51.2 51.2 0 0 0-51.2-51.2H204.8z m0-51.2h614.4a102.4 102.4 0 0 1 102.4 102.4v563.2a102.4 102.4 0 0 1-102.4 102.4H204.8a102.4 102.4 0 0 1-102.4-102.4V256a102.4 102.4 0 0 1 102.4-102.4z\" fill=\"#000000\" p-id=\"5305\"></path><path d=\"M142.6432 738.816l-36.352-36.0448 205.1584-206.8992 144.3328 146.2784-36.4544 35.9424-107.9808-109.4144zM358.4 435.2a76.8 76.8 0 1 1 0-153.6 76.8 76.8 0 0 1 0 153.6z m0-51.2a25.6 25.6 0 1 0 0-51.2 25.6 25.6 0 0 0 0 51.2z\" fill=\"#000000\" p-id=\"5306\"></path><path d=\"M673.3312 466.7392l-433.664 453.9392-37.0688-35.3792 469.504-491.4176 236.544 231.5776-35.7888 36.608z\" fill=\"#000000\" p-id=\"5307\"></path></svg>`;\n\nconst Plus = `<svg xmlns=\"http://www.w3.org/2000/svg\"  viewBox=\"0 0 24 24\" width=\"15\" height=\"15\"><path fill=\"#000000\" d=\"M 11 2 L 11 11 L 2 11 L 2 13 L 11 13 L 11 22 L 13 22 L 13 13 L 22 13 L 22 11 L 13 11 L 13 2 Z\"/></svg>`;\n\nconst Paragraph = `<?xml version=\"1.0\" standalone=\"no\"?><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg t=\"1552895582361\" class=\"icon\" style=\"\" viewBox=\"0 0 1024 1024\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" p-id=\"5742\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"15\" height=\"15\"><defs><style type=\"text/css\"></style></defs><path d=\"M409.6 512v51.2H307.2c-110.848 0-204.8-91.648-204.8-204.8s93.952-204.8 204.8-204.8h614.4v51.2H307.2C225.28 204.8 154.88 273.5616 153.6 358.4c1.28 84.8384 71.68 153.6 153.6 153.6h102.4z\" fill=\"#000000\" p-id=\"5743\"></path><path d=\"M358.4 153.6h51.2v716.8H358.4zM614.4 153.6h51.2v716.8h-51.2z\" fill=\"#000000\" p-id=\"5744\"></path></svg>`;\n\nconst BulletList = `<?xml version=\"1.0\" standalone=\"no\"?><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg t=\"1552895550303\" class=\"icon\" style=\"\" viewBox=\"0 0 1024 1024\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" p-id=\"5524\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"15\" height=\"15\"><defs><style type=\"text/css\"></style></defs><path d=\"M307.2 512h512v51.2H307.2zM307.2 819.2h614.4v51.2H307.2zM307.2 204.8h614.4v51.2H307.2zM102.4 153.6h102.4v102.4H102.4zM102.4 460.8h102.4v102.4H102.4zM102.4 768h102.4v102.4H102.4z\" fill=\"#000000\" p-id=\"5525\"></path></svg>`;\n\nconst OrderedList = `<?xml version=\"1.0\" standalone=\"no\"?><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg t=\"1552895614019\" class=\"icon\" style=\"\" viewBox=\"0 0 1024 1024\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" p-id=\"6288\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"15\" height=\"15\"><defs><style type=\"text/css\"></style></defs><path d=\"M307.2 512h512v51.2H307.2zM307.2 819.2h614.4v51.2H307.2zM307.2 204.8h614.4v51.2H307.2zM124.416 153.6h16.384v182.784h-20.992V179.2a97.792 97.792 0 0 1-43.008 25.088v-20.992c8.192-2.304 16.896-5.888 25.6-11.008 8.704-5.632 15.872-11.776 22.016-18.688zM130.56 428.032c16.896 0 30.72 4.864 41.728 14.592 10.752 9.728 16.384 22.784 16.384 38.656s-6.144 30.208-17.92 43.008c-6.4 6.656-18.944 16.64-37.888 29.44-23.296 15.616-36.608 29.696-39.936 41.984H188.928V614.4H67.072c0-16.64 5.888-31.744 18.176-45.312 7.168-8.192 20.224-19.2 39.68-32.512 14.336-10.24 23.808-17.664 28.672-22.784 9.216-9.984 14.08-20.992 14.08-32.768 0-11.264-3.328-19.712-9.984-25.856s-16.128-9.216-27.904-9.216c-12.544 0-22.272 4.096-28.928 12.8-7.168 8.192-11.008 20.48-11.264 36.608h-20.992c0-20.48 5.888-36.864 17.152-48.896 11.264-12.288 26.368-18.432 44.8-18.432zM129.792 735.232c17.408 0 31.744 4.352 42.496 13.312 10.496 8.96 15.872 20.992 15.872 36.352 0 20.48-9.984 34.304-29.952 40.96a48.128 48.128 0 0 1 24.576 15.616c6.144 7.168 9.216 16.128 9.216 26.88 0 16.64-5.888 30.208-17.408 40.704-11.776 10.752-27.136 16.128-46.08 16.128-17.408 0-31.488-4.608-42.496-13.312-13.056-10.752-20.224-26.368-21.76-46.848h21.248c0.512 14.336 5.376 25.344 14.336 32.768 7.68 6.144 17.152 9.472 28.672 9.472 13.056 0 23.552-3.84 31.488-11.264a36.6592 36.6592 0 0 0 11.008-26.88c0-11.008-3.584-19.456-10.752-25.6-7.168-6.144-16.896-8.96-29.696-8.96h-14.848v-16.384h14.08c12.288 0 21.504-2.816 27.904-8.192a30.1056 30.1056 0 0 0 9.728-23.808c0-10.24-3.328-18.176-9.472-23.808-6.656-6.144-16.128-8.96-27.904-8.96-12.288 0-21.76 3.072-28.672 9.728-7.168 6.656-11.264 16.128-12.544 28.416H68.096c1.536-17.664 8.192-31.488 19.456-41.472 10.752-9.984 24.832-14.848 42.24-14.848z\" fill=\"#000000\" p-id=\"6289\"></path></svg>`;\n\nconst Emoji = `<svg data-name=\"Layer 1\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 128 128\"><path d=\"M35.56 49.964a1.75 1.75 0 0 0 1.75-1.75 6.477 6.477 0 1 1 12.954 0 1.75 1.75 0 0 0 3.5 0 9.977 9.977 0 1 0-19.954 0 1.75 1.75 0 0 0 1.75 1.75zM75.986 49.964a1.75 1.75 0 0 0 1.75-1.75 6.477 6.477 0 1 1 12.954 0 1.75 1.75 0 0 0 3.5 0 9.977 9.977 0 1 0-19.954 0 1.75 1.75 0 0 0 1.75 1.75z\"/><path d=\"M64 4.75a59.863 59.863 0 1 0 59.863 59.863A59.931 59.931 0 0 0 64 4.75zm0 116.227a56.363 56.363 0 1 1 56.363-56.363A56.427 56.427 0 0 1 64 120.977z\"/><path d=\"M113.044 74.3a11.817 11.817 0 0 0-5.283-3.131c-.015 0-.027-.011-.042-.015h-.026a14.489 14.489 0 0 0-6.057-.516 1.75 1.75 0 1 0 .573 3.453 10.032 10.032 0 0 1 2.908.063 42.827 42.827 0 0 1-41.107 30.6h-.14a42.827 42.827 0 0 1-41.1-30.582 10.161 10.161 0 0 1 3.023-.081 1.75 1.75 0 1 0 .573-3.453 14.443 14.443 0 0 0-5.92.477 1.531 1.531 0 0 0-.717.225 11.576 11.576 0 0 0-4.773 2.96 1.75 1.75 0 1 0 2.558 2.389 7.271 7.271 0 0 1 1.924-1.441 46.324 46.324 0 0 0 44.432 33h.14a46.325 46.325 0 0 0 44.45-33.059 7.338 7.338 0 0 1 2.026 1.5 1.75 1.75 0 0 0 2.558-2.389z\"/></svg>`;\n// Define a mapping from Type enum to image paths\nexport const MarkdownTypeIcons: { [key: string]: string } = {\n    [Type[Type.Document]]: MarkdownSVG,\n    [Type[Type.CodeBlock]]: Code,\n    [Type[Type.FencedCode]]: Code,\n    [Type[Type.Blockquote]]: Blockquote,\n    [Type[Type.HorizontalRule]]: HorizontalRule,\n    [Type[Type.BulletList]]: BulletList,\n    [Type[Type.OrderedList]]: OrderedList,\n    [Type[Type.ListItem]]: '',\n    [Type[Type.ATXHeading1]]: ATXHeading1, // SVG String\n    [Type[Type.ATXHeading2]]: ATXHeading2,\n    [Type[Type.ATXHeading3]]: ATXHeading3,\n    [Type[Type.ATXHeading4]]: ATXHeading4,\n    [Type[Type.ATXHeading5]]: ATXHeading5,\n    [Type[Type.ATXHeading6]]: ATXHeading6,\n    [Type[Type.SetextHeading1]]: 'SHead1',\n    [Type[Type.SetextHeading2]]: 'SHead2',\n    [Type[Type.HTMLBlock]]: HTMLBlock,\n    [Type[Type.LinkReference]]: Link,\n    [Type[Type.Paragraph]]: Paragraph,\n    [Type[Type.CommentBlock]]: Code,\n    [Type[Type.ProcessingInstructionBlock]]: Code,\n    // Inline\n    [Type[Type.Escape]]: 'Esc',\n    [Type[Type.Entity]]: 'E',\n    [Type[Type.HardBreak]]: 'HB',\n    [Type[Type.Emphasis]]: 'E',\n    [Type[Type.StrongEmphasis]]: 'SE',\n    [Type[Type.Link]]: Link,\n    [Type[Type.Image]]: Image,\n    [Type[Type.InlineCode]]: 'IC',\n    [Type[Type.HTMLTag]]: 'HT',\n    [Type[Type.Comment]]: 'C',\n    [Type[Type.ProcessingInstruction]]: 'PI',\n    [Type[Type.URL]]: Link,\n    // Smaller tokens\n    [Type[Type.HeaderMark]]: '',\n    [Type[Type.QuoteMark]]: '',\n    [Type[Type.ListMark]]: '',\n    [Type[Type.LinkMark]]: '',\n    [Type[Type.EmphasisMark]]: '',\n    [Type[Type.CodeMark]]: '',\n    [Type[Type.CodeText]]: '',\n    [Type[Type.CodeInfo]]: '',\n    [Type[Type.LinkTitle]]: '',\n    [Type[Type.LinkLabel]]: '',\n\n    // Extension for custom string key\n    [\"Table\"]: Table,\n    [\"TableHeader\"]: '',\n    [\"TableRow\"]: '',\n    [\"TableCell\"]: '',\n    [\"TableDelimiter\"]: '',\n    [\"Emoji\"]: Emoji,\n    [\"\"]: Plus,\n};\n\n\n\n", "/**\n * @typedef {import('mdast').Nodes} Nodes\n *\n * @typedef Options\n *   Configuration (optional).\n * @property {boolean | null | undefined} [includeImageAlt=true]\n *   Whether to use `alt` for `image`s (default: `true`).\n * @property {boolean | null | undefined} [includeHtml=true]\n *   Whether to use `value` of HTML (default: `true`).\n */\n\n/** @type {Options} */\nconst emptyOptions = {}\n\n/**\n * Get the text content of a node or list of nodes.\n *\n * Prefers the node\u2019s plain-text fields, otherwise serializes its children,\n * and if the given value is an array, serialize the nodes in it.\n *\n * @param {unknown} [value]\n *   Thing to serialize, typically `Node`.\n * @param {Options | null | undefined} [options]\n *   Configuration (optional).\n * @returns {string}\n *   Serialized `value`.\n */\nexport function toString(value, options) {\n  const settings = options || emptyOptions\n  const includeImageAlt =\n    typeof settings.includeImageAlt === 'boolean'\n      ? settings.includeImageAlt\n      : true\n  const includeHtml =\n    typeof settings.includeHtml === 'boolean' ? settings.includeHtml : true\n\n  return one(value, includeImageAlt, includeHtml)\n}\n\n/**\n * One node or several nodes.\n *\n * @param {unknown} value\n *   Thing to serialize.\n * @param {boolean} includeImageAlt\n *   Include image `alt`s.\n * @param {boolean} includeHtml\n *   Include HTML.\n * @returns {string}\n *   Serialized node.\n */\nfunction one(value, includeImageAlt, includeHtml) {\n  if (node(value)) {\n    if ('value' in value) {\n      return value.type === 'html' && !includeHtml ? '' : value.value\n    }\n\n    if (includeImageAlt && 'alt' in value && value.alt) {\n      return value.alt\n    }\n\n    if ('children' in value) {\n      return all(value.children, includeImageAlt, includeHtml)\n    }\n  }\n\n  if (Array.isArray(value)) {\n    return all(value, includeImageAlt, includeHtml)\n  }\n\n  return ''\n}\n\n/**\n * Serialize a list of nodes.\n *\n * @param {Array<unknown>} values\n *   Thing to serialize.\n * @param {boolean} includeImageAlt\n *   Include image `alt`s.\n * @param {boolean} includeHtml\n *   Include HTML.\n * @returns {string}\n *   Serialized nodes.\n */\nfunction all(values, includeImageAlt, includeHtml) {\n  /** @type {Array<string>} */\n  const result = []\n  let index = -1\n\n  while (++index < values.length) {\n    result[index] = one(values[index], includeImageAlt, includeHtml)\n  }\n\n  return result.join('')\n}\n\n/**\n * Check if `value` looks like a node.\n *\n * @param {unknown} value\n *   Thing.\n * @returns {value is Nodes}\n *   Whether `value` is a node.\n */\nfunction node(value) {\n  return Boolean(value && typeof value === 'object')\n}\n", "/**\n * @typedef {import('./lib/index.js').Options} Options\n */\n\nexport {toString} from './lib/index.js'\n", "/// <reference lib=\"dom\" />\n\n/* eslint-env browser */\n\nconst element = document.createElement('i')\n\n/**\n * @param {string} value\n * @returns {string|false}\n */\nexport function decodeNamedCharacterReference(value) {\n  const characterReference = '&' + value + ';'\n  element.innerHTML = characterReference\n  const char = element.textContent\n\n  // Some named character references do not require the closing semicolon\n  // (`&not`, for instance), which leads to situations where parsing the assumed\n  // named reference of `&notit;` will result in the string `\u00ACit;`.\n  // When we encounter a trailing semicolon after parsing, and the character\n  // reference to decode was not a semicolon (`&semi;`), we can assume that the\n  // matching was not complete.\n  // @ts-expect-error: TypeScript is wrong that `textContent` on elements can\n  // yield `null`.\n  if (char.charCodeAt(char.length - 1) === 59 /* `;` */ && value !== 'semi') {\n    return false\n  }\n\n  // If the decoded string is equal to the input, the character reference was\n  // not valid.\n  // @ts-expect-error: TypeScript is wrong that `textContent` on elements can\n  // yield `null`.\n  return char === characterReference ? false : char\n}\n", "/**\n * Like `Array#splice`, but smarter for giant arrays.\n *\n * `Array#splice` takes all items to be inserted as individual argument which\n * causes a stack overflow in V8 when trying to insert 100k items for instance.\n *\n * Otherwise, this does not return the removed items, and takes `items` as an\n * array instead of rest parameters.\n *\n * @template {unknown} T\n *   Item type.\n * @param {Array<T>} list\n *   List to operate on.\n * @param {number} start\n *   Index to remove/insert at (can be negative).\n * @param {number} remove\n *   Number of items to remove.\n * @param {Array<T>} items\n *   Items to inject into `list`.\n * @returns {undefined}\n *   Nothing.\n */\nexport function splice(list, start, remove, items) {\n  const end = list.length\n  let chunkStart = 0\n  /** @type {Array<unknown>} */\n  let parameters\n\n  // Make start between zero and `end` (included).\n  if (start < 0) {\n    start = -start > end ? 0 : end + start\n  } else {\n    start = start > end ? end : start\n  }\n  remove = remove > 0 ? remove : 0\n\n  // No need to chunk the items if there\u2019s only a couple (10k) items.\n  if (items.length < 10000) {\n    parameters = Array.from(items)\n    parameters.unshift(start, remove)\n    // @ts-expect-error Hush, it\u2019s fine.\n    list.splice(...parameters)\n  } else {\n    // Delete `remove` items starting from `start`\n    if (remove) list.splice(start, remove)\n\n    // Insert the items in chunks to not cause stack overflows.\n    while (chunkStart < items.length) {\n      parameters = items.slice(chunkStart, chunkStart + 10000)\n      parameters.unshift(start, 0)\n      // @ts-expect-error Hush, it\u2019s fine.\n      list.splice(...parameters)\n      chunkStart += 10000\n      start += 10000\n    }\n  }\n}\n\n/**\n * Append `items` (an array) at the end of `list` (another array).\n * When `list` was empty, returns `items` instead.\n *\n * This prevents a potentially expensive operation when `list` is empty,\n * and adds items in batches to prevent V8 from hanging.\n *\n * @template {unknown} T\n *   Item type.\n * @param {Array<T>} list\n *   List to operate on.\n * @param {Array<T>} items\n *   Items to add to `list`.\n * @returns {Array<T>}\n *   Either `list` or `items`.\n */\nexport function push(list, items) {\n  if (list.length > 0) {\n    splice(list, list.length, 0, items)\n    return list\n  }\n  return items\n}\n", "/**\n * @typedef {import('micromark-util-types').Extension} Extension\n * @typedef {import('micromark-util-types').Handles} Handles\n * @typedef {import('micromark-util-types').HtmlExtension} HtmlExtension\n * @typedef {import('micromark-util-types').NormalizedExtension} NormalizedExtension\n */\n\nimport {splice} from 'micromark-util-chunked'\n\nconst hasOwnProperty = {}.hasOwnProperty\n\n/**\n * Combine multiple syntax extensions into one.\n *\n * @param {Array<Extension>} extensions\n *   List of syntax extensions.\n * @returns {NormalizedExtension}\n *   A single combined extension.\n */\nexport function combineExtensions(extensions) {\n  /** @type {NormalizedExtension} */\n  const all = {}\n  let index = -1\n\n  while (++index < extensions.length) {\n    syntaxExtension(all, extensions[index])\n  }\n\n  return all\n}\n\n/**\n * Merge `extension` into `all`.\n *\n * @param {NormalizedExtension} all\n *   Extension to merge into.\n * @param {Extension} extension\n *   Extension to merge.\n * @returns {undefined}\n */\nfunction syntaxExtension(all, extension) {\n  /** @type {keyof Extension} */\n  let hook\n\n  for (hook in extension) {\n    const maybe = hasOwnProperty.call(all, hook) ? all[hook] : undefined\n    /** @type {Record<string, unknown>} */\n    const left = maybe || (all[hook] = {})\n    /** @type {Record<string, unknown> | undefined} */\n    const right = extension[hook]\n    /** @type {string} */\n    let code\n\n    if (right) {\n      for (code in right) {\n        if (!hasOwnProperty.call(left, code)) left[code] = []\n        const value = right[code]\n        constructs(\n          // @ts-expect-error Looks like a list.\n          left[code],\n          Array.isArray(value) ? value : value ? [value] : []\n        )\n      }\n    }\n  }\n}\n\n/**\n * Merge `list` into `existing` (both lists of constructs).\n * Mutates `existing`.\n *\n * @param {Array<unknown>} existing\n * @param {Array<unknown>} list\n * @returns {undefined}\n */\nfunction constructs(existing, list) {\n  let index = -1\n  /** @type {Array<unknown>} */\n  const before = []\n\n  while (++index < list.length) {\n    // @ts-expect-error Looks like an object.\n    ;(list[index].add === 'after' ? existing : before).push(list[index])\n  }\n\n  splice(existing, 0, 0, before)\n}\n\n/**\n * Combine multiple HTML extensions into one.\n *\n * @param {Array<HtmlExtension>} htmlExtensions\n *   List of HTML extensions.\n * @returns {HtmlExtension}\n *   A single combined HTML extension.\n */\nexport function combineHtmlExtensions(htmlExtensions) {\n  /** @type {HtmlExtension} */\n  const handlers = {}\n  let index = -1\n\n  while (++index < htmlExtensions.length) {\n    htmlExtension(handlers, htmlExtensions[index])\n  }\n\n  return handlers\n}\n\n/**\n * Merge `extension` into `all`.\n *\n * @param {HtmlExtension} all\n *   Extension to merge into.\n * @param {HtmlExtension} extension\n *   Extension to merge.\n * @returns {undefined}\n */\nfunction htmlExtension(all, extension) {\n  /** @type {keyof HtmlExtension} */\n  let hook\n\n  for (hook in extension) {\n    const maybe = hasOwnProperty.call(all, hook) ? all[hook] : undefined\n    const left = maybe || (all[hook] = {})\n    const right = extension[hook]\n    /** @type {keyof Handles} */\n    let type\n\n    if (right) {\n      for (type in right) {\n        // @ts-expect-error assume document vs regular handler are managed correctly.\n        left[type] = right[type]\n      }\n    }\n  }\n}\n", "/**\n * Turn the number (in string form as either hexa- or plain decimal) coming from\n * a numeric character reference into a character.\n *\n * Sort of like `String.fromCodePoint(Number.parseInt(value, base))`, but makes\n * non-characters and control characters safe.\n *\n * @param {string} value\n *   Value to decode.\n * @param {number} base\n *   Numeric base.\n * @returns {string}\n *   Character.\n */\nexport function decodeNumericCharacterReference(value, base) {\n  const code = Number.parseInt(value, base);\n  if (\n  // C0 except for HT, LF, FF, CR, space.\n  code < 9 || code === 11 || code > 13 && code < 32 ||\n  // Control character (DEL) of C0, and C1 controls.\n  code > 126 && code < 160 ||\n  // Lone high surrogates and low surrogates.\n  code > 55_295 && code < 57_344 ||\n  // Noncharacters.\n  code > 64_975 && code < 65_008 || /* eslint-disable no-bitwise */\n  (code & 65_535) === 65_535 || (code & 65_535) === 65_534 || /* eslint-enable no-bitwise */\n  // Out of range\n  code > 1_114_111) {\n    return \"\\uFFFD\";\n  }\n  return String.fromCodePoint(code);\n}", "const characterReferences = {'\"': 'quot', '&': 'amp', '<': 'lt', '>': 'gt'}\n\n/**\n * Encode only the dangerous HTML characters.\n *\n * This ensures that certain characters which have special meaning in HTML are\n * dealt with.\n * Technically, we can skip `>` and `\"` in many cases, but CM includes them.\n *\n * @param {string} value\n *   Value to encode.\n * @returns {string}\n *   Encoded value.\n */\nexport function encode(value) {\n  return value.replace(/[\"&<>]/g, replace)\n\n  /**\n   * @param {string} value\n   * @returns {string}\n   */\n  function replace(value) {\n    // @ts-expect-error Hush, it\u2019s fine.\n    return '&' + characterReferences[value] + ';'\n  }\n}\n", "/**\n * Normalize an identifier (as found in references, definitions).\n *\n * Collapses markdown whitespace, trim, and then lower- and uppercase.\n *\n * Some characters are considered \u201Cuppercase\u201D, such as U+03F4 (`\u03F4`), but if their\n * lowercase counterpart (U+03B8 (`\u03B8`)) is uppercased will result in a different\n * uppercase character (U+0398 (`\u0398`)).\n * So, to get a canonical form, we perform both lower- and uppercase.\n *\n * Using uppercase last makes sure keys will never interact with default\n * prototypal values (such as `constructor`): nothing in the prototype of\n * `Object` is uppercase.\n *\n * @param {string} value\n *   Identifier to normalize.\n * @returns {string}\n *   Normalized identifier.\n */\nexport function normalizeIdentifier(value) {\n  return (\n    value\n      // Collapse markdown whitespace.\n      .replace(/[\\t\\n\\r ]+/g, ' ')\n      // Trim.\n      .replace(/^ | $/g, '')\n      // Some characters are considered \u201Cuppercase\u201D, but if their lowercase\n      // counterpart is uppercased will result in a different uppercase\n      // character.\n      // Hence, to get that form, we perform both lower- and uppercase.\n      // Upper case makes sure keys will not interact with default prototypal\n      // methods: no method is uppercase.\n      .toLowerCase()\n      .toUpperCase()\n  )\n}\n", "/**\n * @typedef {import('micromark-util-types').Code} Code\n */\n\nconst unicodePunctuationInternal = regexCheck(/\\p{P}/u)\n\n/**\n * Check whether the character code represents an ASCII alpha (`a` through `z`,\n * case insensitive).\n *\n * An **ASCII alpha** is an ASCII upper alpha or ASCII lower alpha.\n *\n * An **ASCII upper alpha** is a character in the inclusive range U+0041 (`A`)\n * to U+005A (`Z`).\n *\n * An **ASCII lower alpha** is a character in the inclusive range U+0061 (`a`)\n * to U+007A (`z`).\n *\n * @param code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport const asciiAlpha = regexCheck(/[A-Za-z]/)\n\n/**\n * Check whether the character code represents an ASCII alphanumeric (`a`\n * through `z`, case insensitive, or `0` through `9`).\n *\n * An **ASCII alphanumeric** is an ASCII digit (see `asciiDigit`) or ASCII alpha\n * (see `asciiAlpha`).\n *\n * @param code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport const asciiAlphanumeric = regexCheck(/[\\dA-Za-z]/)\n\n/**\n * Check whether the character code represents an ASCII atext.\n *\n * atext is an ASCII alphanumeric (see `asciiAlphanumeric`), or a character in\n * the inclusive ranges U+0023 NUMBER SIGN (`#`) to U+0027 APOSTROPHE (`'`),\n * U+002A ASTERISK (`*`), U+002B PLUS SIGN (`+`), U+002D DASH (`-`), U+002F\n * SLASH (`/`), U+003D EQUALS TO (`=`), U+003F QUESTION MARK (`?`), U+005E\n * CARET (`^`) to U+0060 GRAVE ACCENT (`` ` ``), or U+007B LEFT CURLY BRACE\n * (`{`) to U+007E TILDE (`~`).\n *\n * See:\n * **\\[RFC5322]**:\n * [Internet Message Format](https://tools.ietf.org/html/rfc5322).\n * P. Resnick.\n * IETF.\n *\n * @param code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport const asciiAtext = regexCheck(/[#-'*+\\--9=?A-Z^-~]/)\n\n/**\n * Check whether a character code is an ASCII control character.\n *\n * An **ASCII control** is a character in the inclusive range U+0000 NULL (NUL)\n * to U+001F (US), or U+007F (DEL).\n *\n * @param {Code} code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport function asciiControl(code) {\n  return (\n    // Special whitespace codes (which have negative values), C0 and Control\n    // character DEL\n    code !== null && (code < 32 || code === 127)\n  )\n}\n\n/**\n * Check whether the character code represents an ASCII digit (`0` through `9`).\n *\n * An **ASCII digit** is a character in the inclusive range U+0030 (`0`) to\n * U+0039 (`9`).\n *\n * @param code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport const asciiDigit = regexCheck(/\\d/)\n\n/**\n * Check whether the character code represents an ASCII hex digit (`a` through\n * `f`, case insensitive, or `0` through `9`).\n *\n * An **ASCII hex digit** is an ASCII digit (see `asciiDigit`), ASCII upper hex\n * digit, or an ASCII lower hex digit.\n *\n * An **ASCII upper hex digit** is a character in the inclusive range U+0041\n * (`A`) to U+0046 (`F`).\n *\n * An **ASCII lower hex digit** is a character in the inclusive range U+0061\n * (`a`) to U+0066 (`f`).\n *\n * @param code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport const asciiHexDigit = regexCheck(/[\\dA-Fa-f]/)\n\n/**\n * Check whether the character code represents ASCII punctuation.\n *\n * An **ASCII punctuation** is a character in the inclusive ranges U+0021\n * EXCLAMATION MARK (`!`) to U+002F SLASH (`/`), U+003A COLON (`:`) to U+0040 AT\n * SIGN (`@`), U+005B LEFT SQUARE BRACKET (`[`) to U+0060 GRAVE ACCENT\n * (`` ` ``), or U+007B LEFT CURLY BRACE (`{`) to U+007E TILDE (`~`).\n *\n * @param code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport const asciiPunctuation = regexCheck(/[!-/:-@[-`{-~]/)\n\n/**\n * Check whether a character code is a markdown line ending.\n *\n * A **markdown line ending** is the virtual characters M-0003 CARRIAGE RETURN\n * LINE FEED (CRLF), M-0004 LINE FEED (LF) and M-0005 CARRIAGE RETURN (CR).\n *\n * In micromark, the actual character U+000A LINE FEED (LF) and U+000D CARRIAGE\n * RETURN (CR) are replaced by these virtual characters depending on whether\n * they occurred together.\n *\n * @param {Code} code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport function markdownLineEnding(code) {\n  return code !== null && code < -2\n}\n\n/**\n * Check whether a character code is a markdown line ending (see\n * `markdownLineEnding`) or markdown space (see `markdownSpace`).\n *\n * @param {Code} code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport function markdownLineEndingOrSpace(code) {\n  return code !== null && (code < 0 || code === 32)\n}\n\n/**\n * Check whether a character code is a markdown space.\n *\n * A **markdown space** is the concrete character U+0020 SPACE (SP) and the\n * virtual characters M-0001 VIRTUAL SPACE (VS) and M-0002 HORIZONTAL TAB (HT).\n *\n * In micromark, the actual character U+0009 CHARACTER TABULATION (HT) is\n * replaced by one M-0002 HORIZONTAL TAB (HT) and between 0 and 3 M-0001 VIRTUAL\n * SPACE (VS) characters, depending on the column at which the tab occurred.\n *\n * @param {Code} code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport function markdownSpace(code) {\n  return code === -2 || code === -1 || code === 32\n}\n\n// Size note: removing ASCII from the regex and using `asciiPunctuation` here\n// In fact adds to the bundle size.\n/**\n * Check whether the character code represents Unicode punctuation.\n *\n * A **Unicode punctuation** is a character in the Unicode `Pc` (Punctuation,\n * Connector), `Pd` (Punctuation, Dash), `Pe` (Punctuation, Close), `Pf`\n * (Punctuation, Final quote), `Pi` (Punctuation, Initial quote), `Po`\n * (Punctuation, Other), or `Ps` (Punctuation, Open) categories, or an ASCII\n * punctuation (see `asciiPunctuation`).\n *\n * See:\n * **\\[UNICODE]**:\n * [The Unicode Standard](https://www.unicode.org/versions/).\n * Unicode Consortium.\n *\n * @param {Code} code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport function unicodePunctuation(code) {\n  return asciiPunctuation(code) || unicodePunctuationInternal(code)\n}\n\n/**\n * Check whether the character code represents Unicode whitespace.\n *\n * Note that this does handle micromark specific markdown whitespace characters.\n * See `markdownLineEndingOrSpace` to check that.\n *\n * A **Unicode whitespace** is a character in the Unicode `Zs` (Separator,\n * Space) category, or U+0009 CHARACTER TABULATION (HT), U+000A LINE FEED (LF),\n * U+000C (FF), or U+000D CARRIAGE RETURN (CR) (**\\[UNICODE]**).\n *\n * See:\n * **\\[UNICODE]**:\n * [The Unicode Standard](https://www.unicode.org/versions/).\n * Unicode Consortium.\n *\n * @param code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport const unicodeWhitespace = regexCheck(/\\s/)\n\n/**\n * Create a code check from a regex.\n *\n * @param {RegExp} regex\n * @returns {(code: Code) => boolean}\n */\nfunction regexCheck(regex) {\n  return check\n\n  /**\n   * Check whether a code matches the bound regex.\n   *\n   * @param {Code} code\n   *   Character code.\n   * @returns {boolean}\n   *   Whether the character code matches the bound regex.\n   */\n  function check(code) {\n    return code !== null && code > -1 && regex.test(String.fromCharCode(code))\n  }\n}\n", "import {asciiAlphanumeric} from 'micromark-util-character'\nimport {encode} from 'micromark-util-encode'\n/**\n * Make a value safe for injection as a URL.\n *\n * This encodes unsafe characters with percent-encoding and skips already\n * encoded sequences (see `normalizeUri`).\n * Further unsafe characters are encoded as character references (see\n * `micromark-util-encode`).\n *\n * A regex of allowed protocols can be given, in which case the URL is\n * sanitized.\n * For example, `/^(https?|ircs?|mailto|xmpp)$/i` can be used for `a[href]`, or\n * `/^https?$/i` for `img[src]` (this is what `github.com` allows).\n * If the URL includes an unknown protocol (one not matched by `protocol`, such\n * as a dangerous example, `javascript:`), the value is ignored.\n *\n * @param {string | null | undefined} url\n *   URI to sanitize.\n * @param {RegExp | null | undefined} [protocol]\n *   Allowed protocols.\n * @returns {string}\n *   Sanitized URI.\n */\nexport function sanitizeUri(url, protocol) {\n  const value = encode(normalizeUri(url || ''))\n  if (!protocol) {\n    return value\n  }\n  const colon = value.indexOf(':')\n  const questionMark = value.indexOf('?')\n  const numberSign = value.indexOf('#')\n  const slash = value.indexOf('/')\n  if (\n    // If there is no protocol, it\u2019s relative.\n    colon < 0 ||\n    // If the first colon is after a `?`, `#`, or `/`, it\u2019s not a protocol.\n    (slash > -1 && colon > slash) ||\n    (questionMark > -1 && colon > questionMark) ||\n    (numberSign > -1 && colon > numberSign) ||\n    // It is a protocol, it should be allowed.\n    protocol.test(value.slice(0, colon))\n  ) {\n    return value\n  }\n  return ''\n}\n\n/**\n * Normalize a URL.\n *\n * Encode unsafe characters with percent-encoding, skipping already encoded\n * sequences.\n *\n * @param {string} value\n *   URI to normalize.\n * @returns {string}\n *   Normalized URI.\n */\nexport function normalizeUri(value) {\n  /** @type {Array<string>} */\n  const result = []\n  let index = -1\n  let start = 0\n  let skip = 0\n  while (++index < value.length) {\n    const code = value.charCodeAt(index)\n    /** @type {string} */\n    let replace = ''\n\n    // A correct percent encoded value.\n    if (\n      code === 37 &&\n      asciiAlphanumeric(value.charCodeAt(index + 1)) &&\n      asciiAlphanumeric(value.charCodeAt(index + 2))\n    ) {\n      skip = 2\n    }\n    // ASCII.\n    else if (code < 128) {\n      if (!/[!#$&-;=?-Z_a-z~]/.test(String.fromCharCode(code))) {\n        replace = String.fromCharCode(code)\n      }\n    }\n    // Astral.\n    else if (code > 55_295 && code < 57_344) {\n      const next = value.charCodeAt(index + 1)\n\n      // A correct surrogate pair.\n      if (code < 56_320 && next > 56_319 && next < 57_344) {\n        replace = String.fromCharCode(code, next)\n        skip = 1\n      }\n      // Lone surrogate.\n      else {\n        replace = '\\uFFFD'\n      }\n    }\n    // Unicode.\n    else {\n      replace = String.fromCharCode(code)\n    }\n    if (replace) {\n      result.push(value.slice(start, index), encodeURIComponent(replace))\n      start = index + skip + 1\n      replace = ''\n    }\n    if (skip) {\n      index += skip\n      skip = 0\n    }\n  }\n  return result.join('') + value.slice(start)\n}\n", "/**\n * While micromark is a lexer/tokenizer, the common case of going from markdown\n * to html is currently built in as this module, even though the parts can be\n * used separately to build ASTs, CSTs, or many other output formats.\n *\n * Having an HTML compiler built in is useful because it allows us to check for\n * compliancy to CommonMark, the de facto norm of markdown, specified in roughly\n * 600 input/output cases.\n *\n * This module has an interface that accepts lists of events instead of the\n * whole at once, however, because markdown can\u2019t be truly streaming, we buffer\n * events before processing and outputting the final result.\n */\n\n/**\n * @typedef {import('micromark-util-types').Compile} Compile\n * @typedef {import('micromark-util-types').CompileContext} CompileContext\n * @typedef {import('micromark-util-types').CompileData} CompileData\n * @typedef {import('micromark-util-types').CompileOptions} CompileOptions\n * @typedef {import('micromark-util-types').Definition} Definition\n * @typedef {import('micromark-util-types').Event} Event\n * @typedef {import('micromark-util-types').Handle} Handle\n * @typedef {import('micromark-util-types').HtmlExtension} HtmlExtension\n * @typedef {import('micromark-util-types').NormalizedHtmlExtension} NormalizedHtmlExtension\n * @typedef {import('micromark-util-types').Token} Token\n */\n\n/**\n * @typedef Media\n * @property {boolean | undefined} [image]\n * @property {string | undefined} [labelId]\n * @property {string | undefined} [label]\n * @property {string | undefined} [referenceId]\n * @property {string | undefined} [destination]\n * @property {string | undefined} [title]\n */\n\nimport {decodeNamedCharacterReference} from 'decode-named-character-reference'\nimport {push} from 'micromark-util-chunked'\nimport {combineHtmlExtensions} from 'micromark-util-combine-extensions'\nimport {decodeNumericCharacterReference} from 'micromark-util-decode-numeric-character-reference'\nimport {encode as _encode} from 'micromark-util-encode'\nimport {normalizeIdentifier} from 'micromark-util-normalize-identifier'\nimport {sanitizeUri} from 'micromark-util-sanitize-uri'\nconst hasOwnProperty = {}.hasOwnProperty\n\n/**\n * These two are allowlists of safe protocols for full URLs in respectively the\n * `href` (on `<a>`) and `src` (on `<img>`) attributes.\n * They are based on what is allowed on GitHub,\n * <https://github.com/syntax-tree/hast-util-sanitize/blob/9275b21/lib/github.json#L31>\n */\nconst protocolHref = /^(https?|ircs?|mailto|xmpp)$/i\nconst protocolSrc = /^https?$/i\n\n/**\n * @param {CompileOptions | null | undefined} [options]\n * @returns {Compile}\n */\nexport function compile(options) {\n  const settings = options || {}\n\n  /**\n   * Tags is needed because according to markdown, links and emphasis and\n   * whatnot can exist in images, however, as HTML doesn\u2019t allow content in\n   * images, the tags are ignored in the `alt` attribute, but the content\n   * remains.\n   *\n   * @type {boolean | undefined}\n   */\n  let tags = true\n\n  /**\n   * An object to track identifiers to media (URLs and titles) defined with\n   * definitions.\n   *\n   * @type {Record<string, Definition>}\n   */\n  const definitions = {}\n\n  /**\n   * A lot of the handlers need to capture some of the output data, modify it\n   * somehow, and then deal with it.\n   * We do that by tracking a stack of buffers, that can be opened (with\n   * `buffer`) and closed (with `resume`) to access them.\n   *\n   * @type {Array<Array<string>>}\n   */\n  const buffers = [[]]\n\n  /**\n   * As we can have links in images and the other way around, where the deepest\n   * ones are closed first, we need to track which one we\u2019re in.\n   *\n   * @type {Array<Media>}\n   */\n  const mediaStack = []\n\n  /**\n   * Same as `mediaStack` for tightness, which is specific to lists.\n   * We need to track if we\u2019re currently in a tight or loose container.\n   *\n   * @type {Array<boolean>}\n   */\n  const tightStack = []\n\n  /** @type {HtmlExtension} */\n  const defaultHandlers = {\n    enter: {\n      blockQuote: onenterblockquote,\n      codeFenced: onentercodefenced,\n      codeFencedFenceInfo: buffer,\n      codeFencedFenceMeta: buffer,\n      codeIndented: onentercodeindented,\n      codeText: onentercodetext,\n      content: onentercontent,\n      definition: onenterdefinition,\n      definitionDestinationString: onenterdefinitiondestinationstring,\n      definitionLabelString: buffer,\n      definitionTitleString: buffer,\n      emphasis: onenteremphasis,\n      htmlFlow: onenterhtmlflow,\n      htmlText: onenterhtml,\n      image: onenterimage,\n      label: buffer,\n      link: onenterlink,\n      listItemMarker: onenterlistitemmarker,\n      listItemValue: onenterlistitemvalue,\n      listOrdered: onenterlistordered,\n      listUnordered: onenterlistunordered,\n      paragraph: onenterparagraph,\n      reference: buffer,\n      resource: onenterresource,\n      resourceDestinationString: onenterresourcedestinationstring,\n      resourceTitleString: buffer,\n      setextHeading: onentersetextheading,\n      strong: onenterstrong\n    },\n    exit: {\n      atxHeading: onexitatxheading,\n      atxHeadingSequence: onexitatxheadingsequence,\n      autolinkEmail: onexitautolinkemail,\n      autolinkProtocol: onexitautolinkprotocol,\n      blockQuote: onexitblockquote,\n      characterEscapeValue: onexitdata,\n      characterReferenceMarkerHexadecimal: onexitcharacterreferencemarker,\n      characterReferenceMarkerNumeric: onexitcharacterreferencemarker,\n      characterReferenceValue: onexitcharacterreferencevalue,\n      codeFenced: onexitflowcode,\n      codeFencedFence: onexitcodefencedfence,\n      codeFencedFenceInfo: onexitcodefencedfenceinfo,\n      codeFencedFenceMeta: onresumedrop,\n      codeFlowValue: onexitcodeflowvalue,\n      codeIndented: onexitflowcode,\n      codeText: onexitcodetext,\n      codeTextData: onexitdata,\n      data: onexitdata,\n      definition: onexitdefinition,\n      definitionDestinationString: onexitdefinitiondestinationstring,\n      definitionLabelString: onexitdefinitionlabelstring,\n      definitionTitleString: onexitdefinitiontitlestring,\n      emphasis: onexitemphasis,\n      hardBreakEscape: onexithardbreak,\n      hardBreakTrailing: onexithardbreak,\n      htmlFlow: onexithtml,\n      htmlFlowData: onexitdata,\n      htmlText: onexithtml,\n      htmlTextData: onexitdata,\n      image: onexitmedia,\n      label: onexitlabel,\n      labelText: onexitlabeltext,\n      lineEnding: onexitlineending,\n      link: onexitmedia,\n      listOrdered: onexitlistordered,\n      listUnordered: onexitlistunordered,\n      paragraph: onexitparagraph,\n      reference: onresumedrop,\n      referenceString: onexitreferencestring,\n      resource: onresumedrop,\n      resourceDestinationString: onexitresourcedestinationstring,\n      resourceTitleString: onexitresourcetitlestring,\n      setextHeading: onexitsetextheading,\n      setextHeadingLineSequence: onexitsetextheadinglinesequence,\n      setextHeadingText: onexitsetextheadingtext,\n      strong: onexitstrong,\n      thematicBreak: onexitthematicbreak\n    }\n  }\n\n  /**\n   * Combine the HTML extensions with the default handlers.\n   * An HTML extension is an object whose fields are either `enter` or `exit`\n   * (reflecting whether a token is entered or exited).\n   * The values at such objects are names of tokens mapping to handlers.\n   * Handlers are called, respectively when a token is opener or closed, with\n   * that token, and a context as `this`.\n   */\n  const handlers =\n    /** @type {NormalizedHtmlExtension} */\n    combineHtmlExtensions(\n      [defaultHandlers].concat(settings.htmlExtensions || [])\n    )\n\n  /**\n   * Handlers do often need to keep track of some state.\n   * That state is provided here as a key-value store (an object).\n   *\n   * @type {CompileData}\n   */\n  const data = {\n    tightStack,\n    definitions\n  }\n\n  /**\n   * The context for handlers references a couple of useful functions.\n   * In handlers from extensions, those can be accessed at `this`.\n   * For the handlers here, they can be accessed directly.\n   *\n   * @type {Omit<CompileContext, 'sliceSerialize'>}\n   */\n  const context = {\n    lineEndingIfNeeded,\n    options: settings,\n    encode,\n    raw,\n    tag,\n    buffer,\n    resume,\n    setData,\n    getData\n  }\n\n  /**\n   * Generally, micromark copies line endings (`'\\r'`, `'\\n'`, `'\\r\\n'`) in the\n   * markdown document over to the compiled HTML.\n   * In some cases, such as `> a`, CommonMark requires that extra line endings\n   * are added: `<blockquote>\\n<p>a</p>\\n</blockquote>`.\n   * This variable hold the default line ending when given (or `undefined`),\n   * and in the latter case will be updated to the first found line ending if\n   * there is one.\n   */\n  let lineEndingStyle = settings.defaultLineEnding\n\n  // Return the function that handles a slice of events.\n  return compile\n\n  /**\n   * Deal w/ a slice of events.\n   * Return either the empty string if there\u2019s nothing of note to return, or the\n   * result when done.\n   *\n   * @param {Array<Event>} events\n   * @returns {string}\n   */\n  function compile(events) {\n    let index = -1\n    let start = 0\n    /** @type {Array<number>} */\n    const listStack = []\n    // As definitions can come after references, we need to figure out the media\n    // (urls and titles) defined by them before handling the references.\n    // So, we do sort of what HTML does: put metadata at the start (in head), and\n    // then put content after (`body`).\n    /** @type {Array<Event>} */\n    let head = []\n    /** @type {Array<Event>} */\n    let body = []\n    while (++index < events.length) {\n      // Figure out the line ending style used in the document.\n      if (\n        !lineEndingStyle &&\n        (events[index][1].type === 'lineEnding' ||\n          events[index][1].type === 'lineEndingBlank')\n      ) {\n        // @ts-expect-error Hush, it\u2019s a line ending.\n        lineEndingStyle = events[index][2].sliceSerialize(events[index][1])\n      }\n\n      // Preprocess lists to infer whether the list is loose or not.\n      if (\n        events[index][1].type === 'listOrdered' ||\n        events[index][1].type === 'listUnordered'\n      ) {\n        if (events[index][0] === 'enter') {\n          listStack.push(index)\n        } else {\n          prepareList(events.slice(listStack.pop(), index))\n        }\n      }\n\n      // Move definitions to the front.\n      if (events[index][1].type === 'definition') {\n        if (events[index][0] === 'enter') {\n          body = push(body, events.slice(start, index))\n          start = index\n        } else {\n          head = push(head, events.slice(start, index + 1))\n          start = index + 1\n        }\n      }\n    }\n    head = push(head, body)\n    head = push(head, events.slice(start))\n    index = -1\n    const result = head\n\n    // Handle the start of the document, if defined.\n    if (handlers.enter.null) {\n      handlers.enter.null.call(context)\n    }\n\n    // Handle all events.\n    while (++index < events.length) {\n      const handles = handlers[result[index][0]]\n      const kind = result[index][1].type\n      const handle = handles[kind]\n      if (hasOwnProperty.call(handles, kind) && handle) {\n        handle.call(\n          Object.assign(\n            {\n              sliceSerialize: result[index][2].sliceSerialize\n            },\n            context\n          ),\n          result[index][1]\n        )\n      }\n    }\n\n    // Handle the end of the document, if defined.\n    if (handlers.exit.null) {\n      handlers.exit.null.call(context)\n    }\n    return buffers[0].join('')\n  }\n\n  /**\n   * Figure out whether lists are loose or not.\n   *\n   * @param {Array<Event>} slice\n   * @returns {undefined}\n   */\n  function prepareList(slice) {\n    const length = slice.length\n    let index = 0 // Skip open.\n    let containerBalance = 0\n    let loose = false\n    /** @type {boolean | undefined} */\n    let atMarker\n    while (++index < length) {\n      const event = slice[index]\n      if (event[1]._container) {\n        atMarker = undefined\n        if (event[0] === 'enter') {\n          containerBalance++\n        } else {\n          containerBalance--\n        }\n      } else\n        switch (event[1].type) {\n          case 'listItemPrefix': {\n            if (event[0] === 'exit') {\n              atMarker = true\n            }\n            break\n          }\n          case 'linePrefix': {\n            // Ignore\n\n            break\n          }\n          case 'lineEndingBlank': {\n            if (event[0] === 'enter' && !containerBalance) {\n              if (atMarker) {\n                atMarker = undefined\n              } else {\n                loose = true\n              }\n            }\n            break\n          }\n          default: {\n            atMarker = undefined\n          }\n        }\n    }\n    slice[0][1]._loose = loose\n  }\n\n  /**\n   * @type {CompileContext['setData']}\n   */\n  function setData(key, value) {\n    // @ts-expect-error: assume `value` is omitted (`undefined` is passed) only\n    // if allowed.\n    data[key] = value\n  }\n\n  /**\n   * @type {CompileContext['getData']}\n   */\n  function getData(key) {\n    return data[key]\n  }\n\n  /** @type {CompileContext['buffer']} */\n  function buffer() {\n    buffers.push([])\n  }\n\n  /** @type {CompileContext['resume']} */\n  function resume() {\n    const buf = buffers.pop()\n    return buf.join('')\n  }\n\n  /** @type {CompileContext['tag']} */\n  function tag(value) {\n    if (!tags) return\n    setData('lastWasTag', true)\n    buffers[buffers.length - 1].push(value)\n  }\n\n  /** @type {CompileContext['raw']} */\n  function raw(value) {\n    setData('lastWasTag')\n    buffers[buffers.length - 1].push(value)\n  }\n\n  /**\n   * Output an extra line ending.\n   *\n   * @returns {undefined}\n   */\n  function lineEnding() {\n    raw(lineEndingStyle || '\\n')\n  }\n\n  /** @type {CompileContext['lineEndingIfNeeded']} */\n  function lineEndingIfNeeded() {\n    const buffer = buffers[buffers.length - 1]\n    const slice = buffer[buffer.length - 1]\n    const previous = slice ? slice.charCodeAt(slice.length - 1) : null\n    if (previous === 10 || previous === 13 || previous === null) {\n      return\n    }\n    lineEnding()\n  }\n\n  /** @type {CompileContext['encode']} */\n  function encode(value) {\n    return getData('ignoreEncode') ? value : _encode(value)\n  }\n\n  //\n  // Handlers.\n  //\n\n  /**\n   * @returns {undefined}\n   */\n  function onresumedrop() {\n    resume()\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onenterlistordered(token) {\n    tightStack.push(!token._loose)\n    lineEndingIfNeeded()\n    tag('<ol')\n    setData('expectFirstItem', true)\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onenterlistunordered(token) {\n    tightStack.push(!token._loose)\n    lineEndingIfNeeded()\n    tag('<ul')\n    setData('expectFirstItem', true)\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onenterlistitemvalue(token) {\n    if (getData('expectFirstItem')) {\n      const value = Number.parseInt(this.sliceSerialize(token), 10)\n      if (value !== 1) {\n        tag(' start=\"' + encode(String(value)) + '\"')\n      }\n    }\n  }\n\n  /**\n   * @returns {undefined}\n   */\n  function onenterlistitemmarker() {\n    if (getData('expectFirstItem')) {\n      tag('>')\n    } else {\n      onexitlistitem()\n    }\n    lineEndingIfNeeded()\n    tag('<li>')\n    setData('expectFirstItem')\n    // \u201CHack\u201D to prevent a line ending from showing up if the item is empty.\n    setData('lastWasTag')\n  }\n\n  /**\n   * @returns {undefined}\n   */\n  function onexitlistordered() {\n    onexitlistitem()\n    tightStack.pop()\n    lineEnding()\n    tag('</ol>')\n  }\n\n  /**\n   * @returns {undefined}\n   */\n  function onexitlistunordered() {\n    onexitlistitem()\n    tightStack.pop()\n    lineEnding()\n    tag('</ul>')\n  }\n\n  /**\n   * @returns {undefined}\n   */\n  function onexitlistitem() {\n    if (getData('lastWasTag') && !getData('slurpAllLineEndings')) {\n      lineEndingIfNeeded()\n    }\n    tag('</li>')\n    setData('slurpAllLineEndings')\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onenterblockquote() {\n    tightStack.push(false)\n    lineEndingIfNeeded()\n    tag('<blockquote>')\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitblockquote() {\n    tightStack.pop()\n    lineEndingIfNeeded()\n    tag('</blockquote>')\n    setData('slurpAllLineEndings')\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onenterparagraph() {\n    if (!tightStack[tightStack.length - 1]) {\n      lineEndingIfNeeded()\n      tag('<p>')\n    }\n    setData('slurpAllLineEndings')\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitparagraph() {\n    if (tightStack[tightStack.length - 1]) {\n      setData('slurpAllLineEndings', true)\n    } else {\n      tag('</p>')\n    }\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onentercodefenced() {\n    lineEndingIfNeeded()\n    tag('<pre><code')\n    setData('fencesCount', 0)\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcodefencedfenceinfo() {\n    const value = resume()\n    tag(' class=\"language-' + value + '\"')\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcodefencedfence() {\n    const count = getData('fencesCount') || 0\n    if (!count) {\n      tag('>')\n      setData('slurpOneLineEnding', true)\n    }\n    setData('fencesCount', count + 1)\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onentercodeindented() {\n    lineEndingIfNeeded()\n    tag('<pre><code>')\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitflowcode() {\n    const count = getData('fencesCount')\n\n    // One special case is if we are inside a container, and the fenced code was\n    // not closed (meaning it runs to the end).\n    // In that case, the following line ending, is considered *outside* the\n    // fenced code and block quote by micromark, but CM wants to treat that\n    // ending as part of the code.\n    if (\n      count !== undefined &&\n      count < 2 &&\n      data.tightStack.length > 0 &&\n      !getData('lastWasTag')\n    ) {\n      lineEnding()\n    }\n\n    // But in most cases, it\u2019s simpler: when we\u2019ve seen some data, emit an extra\n    // line ending when needed.\n    if (getData('flowCodeSeenData')) {\n      lineEndingIfNeeded()\n    }\n    tag('</code></pre>')\n    if (count !== undefined && count < 2) lineEndingIfNeeded()\n    setData('flowCodeSeenData')\n    setData('fencesCount')\n    setData('slurpOneLineEnding')\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onenterimage() {\n    mediaStack.push({\n      image: true\n    })\n    tags = undefined // Disallow tags.\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onenterlink() {\n    mediaStack.push({})\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitlabeltext(token) {\n    mediaStack[mediaStack.length - 1].labelId = this.sliceSerialize(token)\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitlabel() {\n    mediaStack[mediaStack.length - 1].label = resume()\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitreferencestring(token) {\n    mediaStack[mediaStack.length - 1].referenceId = this.sliceSerialize(token)\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onenterresource() {\n    buffer() // We can have line endings in the resource, ignore them.\n    mediaStack[mediaStack.length - 1].destination = ''\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onenterresourcedestinationstring() {\n    buffer()\n    // Ignore encoding the result, as we\u2019ll first percent encode the url and\n    // encode manually after.\n    setData('ignoreEncode', true)\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitresourcedestinationstring() {\n    mediaStack[mediaStack.length - 1].destination = resume()\n    setData('ignoreEncode')\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitresourcetitlestring() {\n    mediaStack[mediaStack.length - 1].title = resume()\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitmedia() {\n    let index = mediaStack.length - 1 // Skip current.\n    const media = mediaStack[index]\n    const id = media.referenceId || media.labelId\n    const context =\n      media.destination === undefined\n        ? definitions[normalizeIdentifier(id)]\n        : media\n    tags = true\n    while (index--) {\n      if (mediaStack[index].image) {\n        tags = undefined\n        break\n      }\n    }\n    if (media.image) {\n      tag(\n        '<img src=\"' +\n          sanitizeUri(\n            context.destination,\n            settings.allowDangerousProtocol ? undefined : protocolSrc\n          ) +\n          '\" alt=\"'\n      )\n      raw(media.label)\n      tag('\"')\n    } else {\n      tag(\n        '<a href=\"' +\n          sanitizeUri(\n            context.destination,\n            settings.allowDangerousProtocol ? undefined : protocolHref\n          ) +\n          '\"'\n      )\n    }\n    tag(context.title ? ' title=\"' + context.title + '\"' : '')\n    if (media.image) {\n      tag(' />')\n    } else {\n      tag('>')\n      raw(media.label)\n      tag('</a>')\n    }\n    mediaStack.pop()\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onenterdefinition() {\n    buffer()\n    mediaStack.push({})\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitdefinitionlabelstring(token) {\n    // Discard label, use the source content instead.\n    resume()\n    mediaStack[mediaStack.length - 1].labelId = this.sliceSerialize(token)\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onenterdefinitiondestinationstring() {\n    buffer()\n    setData('ignoreEncode', true)\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitdefinitiondestinationstring() {\n    mediaStack[mediaStack.length - 1].destination = resume()\n    setData('ignoreEncode')\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitdefinitiontitlestring() {\n    mediaStack[mediaStack.length - 1].title = resume()\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitdefinition() {\n    const media = mediaStack[mediaStack.length - 1]\n    const id = normalizeIdentifier(media.labelId)\n    resume()\n    if (!hasOwnProperty.call(definitions, id)) {\n      definitions[id] = mediaStack[mediaStack.length - 1]\n    }\n    mediaStack.pop()\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onentercontent() {\n    setData('slurpAllLineEndings', true)\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitatxheadingsequence(token) {\n    // Exit for further sequences.\n    if (getData('headingRank')) return\n    setData('headingRank', this.sliceSerialize(token).length)\n    lineEndingIfNeeded()\n    tag('<h' + getData('headingRank') + '>')\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onentersetextheading() {\n    buffer()\n    setData('slurpAllLineEndings')\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitsetextheadingtext() {\n    setData('slurpAllLineEndings', true)\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitatxheading() {\n    tag('</h' + getData('headingRank') + '>')\n    setData('headingRank')\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitsetextheadinglinesequence(token) {\n    setData(\n      'headingRank',\n      this.sliceSerialize(token).charCodeAt(0) === 61 ? 1 : 2\n    )\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitsetextheading() {\n    const value = resume()\n    lineEndingIfNeeded()\n    tag('<h' + getData('headingRank') + '>')\n    raw(value)\n    tag('</h' + getData('headingRank') + '>')\n    setData('slurpAllLineEndings')\n    setData('headingRank')\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitdata(token) {\n    raw(encode(this.sliceSerialize(token)))\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitlineending(token) {\n    if (getData('slurpAllLineEndings')) {\n      return\n    }\n    if (getData('slurpOneLineEnding')) {\n      setData('slurpOneLineEnding')\n      return\n    }\n    if (getData('inCodeText')) {\n      raw(' ')\n      return\n    }\n    raw(encode(this.sliceSerialize(token)))\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcodeflowvalue(token) {\n    raw(encode(this.sliceSerialize(token)))\n    setData('flowCodeSeenData', true)\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexithardbreak() {\n    tag('<br />')\n  }\n\n  /**\n   * @returns {undefined}\n   */\n  function onenterhtmlflow() {\n    lineEndingIfNeeded()\n    onenterhtml()\n  }\n\n  /**\n   * @returns {undefined}\n   */\n  function onexithtml() {\n    setData('ignoreEncode')\n  }\n\n  /**\n   * @returns {undefined}\n   */\n  function onenterhtml() {\n    if (settings.allowDangerousHtml) {\n      setData('ignoreEncode', true)\n    }\n  }\n\n  /**\n   * @returns {undefined}\n   */\n  function onenteremphasis() {\n    tag('<em>')\n  }\n\n  /**\n   * @returns {undefined}\n   */\n  function onenterstrong() {\n    tag('<strong>')\n  }\n\n  /**\n   * @returns {undefined}\n   */\n  function onentercodetext() {\n    setData('inCodeText', true)\n    tag('<code>')\n  }\n\n  /**\n   * @returns {undefined}\n   */\n  function onexitcodetext() {\n    setData('inCodeText')\n    tag('</code>')\n  }\n\n  /**\n   * @returns {undefined}\n   */\n  function onexitemphasis() {\n    tag('</em>')\n  }\n\n  /**\n   * @returns {undefined}\n   */\n  function onexitstrong() {\n    tag('</strong>')\n  }\n\n  /**\n   * @returns {undefined}\n   */\n  function onexitthematicbreak() {\n    lineEndingIfNeeded()\n    tag('<hr />')\n  }\n\n  /**\n   * @this {CompileContext}\n   * @param {Token} token\n   * @returns {undefined}\n   */\n  function onexitcharacterreferencemarker(token) {\n    setData('characterReferenceType', token.type)\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcharacterreferencevalue(token) {\n    let value = this.sliceSerialize(token)\n\n    // @ts-expect-error `decodeNamedCharacterReference` can return false for\n    // invalid named character references, but everything we\u2019ve tokenized is\n    // valid.\n    value = getData('characterReferenceType')\n      ? decodeNumericCharacterReference(\n          value,\n          getData('characterReferenceType') ===\n            'characterReferenceMarkerNumeric'\n            ? 10\n            : 16\n        )\n      : decodeNamedCharacterReference(value)\n    raw(encode(value))\n    setData('characterReferenceType')\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitautolinkprotocol(token) {\n    const uri = this.sliceSerialize(token)\n    tag(\n      '<a href=\"' +\n        sanitizeUri(\n          uri,\n          settings.allowDangerousProtocol ? undefined : protocolHref\n        ) +\n        '\">'\n    )\n    raw(encode(uri))\n    tag('</a>')\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitautolinkemail(token) {\n    const uri = this.sliceSerialize(token)\n    tag('<a href=\"' + sanitizeUri('mailto:' + uri) + '\">')\n    raw(encode(uri))\n    tag('</a>')\n  }\n}\n", "/**\n * @typedef {import('micromark-util-types').Effects} Effects\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenType} TokenType\n */\n\nimport {markdownSpace} from 'micromark-util-character'\n\n// To do: implement `spaceOrTab`, `spaceOrTabMinMax`, `spaceOrTabWithOptions`.\n\n/**\n * Parse spaces and tabs.\n *\n * There is no `nok` parameter:\n *\n * *   spaces in markdown are often optional, in which case this factory can be\n *     used and `ok` will be switched to whether spaces were found or not\n * *   one line ending or space can be detected with `markdownSpace(code)` right\n *     before using `factorySpace`\n *\n * ###### Examples\n *\n * Where `\u2409` represents a tab (plus how much it expands) and `\u2420` represents a\n * single space.\n *\n * ```markdown\n * \u2409\n * \u2420\u2420\u2420\u2420\n * \u2409\u2420\n * ```\n *\n * @param {Effects} effects\n *   Context.\n * @param {State} ok\n *   State switched to when successful.\n * @param {TokenType} type\n *   Type (`' \\t'`).\n * @param {number | undefined} [max=Infinity]\n *   Max (exclusive).\n * @returns {State}\n *   Start state.\n */\nexport function factorySpace(effects, ok, type, max) {\n  const limit = max ? max - 1 : Number.POSITIVE_INFINITY\n  let size = 0\n  return start\n\n  /** @type {State} */\n  function start(code) {\n    if (markdownSpace(code)) {\n      effects.enter(type)\n      return prefix(code)\n    }\n    return ok(code)\n  }\n\n  /** @type {State} */\n  function prefix(code) {\n    if (markdownSpace(code) && size++ < limit) {\n      effects.consume(code)\n      return prefix\n    }\n    effects.exit(type)\n    return ok(code)\n  }\n}\n", "/**\n * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct\n * @typedef {import('micromark-util-types').Initializer} Initializer\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding} from 'micromark-util-character'\n/** @type {InitialConstruct} */\nexport const content = {\n  tokenize: initializeContent\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Initializer}\n */\nfunction initializeContent(effects) {\n  const contentStart = effects.attempt(\n    this.parser.constructs.contentInitial,\n    afterContentStartConstruct,\n    paragraphInitial\n  )\n  /** @type {Token} */\n  let previous\n  return contentStart\n\n  /** @type {State} */\n  function afterContentStartConstruct(code) {\n    if (code === null) {\n      effects.consume(code)\n      return\n    }\n    effects.enter('lineEnding')\n    effects.consume(code)\n    effects.exit('lineEnding')\n    return factorySpace(effects, contentStart, 'linePrefix')\n  }\n\n  /** @type {State} */\n  function paragraphInitial(code) {\n    effects.enter('paragraph')\n    return lineStart(code)\n  }\n\n  /** @type {State} */\n  function lineStart(code) {\n    const token = effects.enter('chunkText', {\n      contentType: 'text',\n      previous\n    })\n    if (previous) {\n      previous.next = token\n    }\n    previous = token\n    return data(code)\n  }\n\n  /** @type {State} */\n  function data(code) {\n    if (code === null) {\n      effects.exit('chunkText')\n      effects.exit('paragraph')\n      effects.consume(code)\n      return\n    }\n    if (markdownLineEnding(code)) {\n      effects.consume(code)\n      effects.exit('chunkText')\n      return lineStart\n    }\n\n    // Data.\n    effects.consume(code)\n    return data\n  }\n}\n", "/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').ContainerState} ContainerState\n * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct\n * @typedef {import('micromark-util-types').Initializer} Initializer\n * @typedef {import('micromark-util-types').Point} Point\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\n/**\n * @typedef {[Construct, ContainerState]} StackItem\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding} from 'micromark-util-character'\nimport {splice} from 'micromark-util-chunked'\n/** @type {InitialConstruct} */\nexport const document = {\n  tokenize: initializeDocument\n}\n\n/** @type {Construct} */\nconst containerConstruct = {\n  tokenize: tokenizeContainer\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Initializer}\n */\nfunction initializeDocument(effects) {\n  const self = this\n  /** @type {Array<StackItem>} */\n  const stack = []\n  let continued = 0\n  /** @type {TokenizeContext | undefined} */\n  let childFlow\n  /** @type {Token | undefined} */\n  let childToken\n  /** @type {number} */\n  let lineStartOffset\n  return start\n\n  /** @type {State} */\n  function start(code) {\n    // First we iterate through the open blocks, starting with the root\n    // document, and descending through last children down to the last open\n    // block.\n    // Each block imposes a condition that the line must satisfy if the block is\n    // to remain open.\n    // For example, a block quote requires a `>` character.\n    // A paragraph requires a non-blank line.\n    // In this phase we may match all or just some of the open blocks.\n    // But we cannot close unmatched blocks yet, because we may have a lazy\n    // continuation line.\n    if (continued < stack.length) {\n      const item = stack[continued]\n      self.containerState = item[1]\n      return effects.attempt(\n        item[0].continuation,\n        documentContinue,\n        checkNewContainers\n      )(code)\n    }\n\n    // Done.\n    return checkNewContainers(code)\n  }\n\n  /** @type {State} */\n  function documentContinue(code) {\n    continued++\n\n    // Note: this field is called `_closeFlow` but it also closes containers.\n    // Perhaps a good idea to rename it but it\u2019s already used in the wild by\n    // extensions.\n    if (self.containerState._closeFlow) {\n      self.containerState._closeFlow = undefined\n      if (childFlow) {\n        closeFlow()\n      }\n\n      // Note: this algorithm for moving events around is similar to the\n      // algorithm when dealing with lazy lines in `writeToChild`.\n      const indexBeforeExits = self.events.length\n      let indexBeforeFlow = indexBeforeExits\n      /** @type {Point | undefined} */\n      let point\n\n      // Find the flow chunk.\n      while (indexBeforeFlow--) {\n        if (\n          self.events[indexBeforeFlow][0] === 'exit' &&\n          self.events[indexBeforeFlow][1].type === 'chunkFlow'\n        ) {\n          point = self.events[indexBeforeFlow][1].end\n          break\n        }\n      }\n      exitContainers(continued)\n\n      // Fix positions.\n      let index = indexBeforeExits\n      while (index < self.events.length) {\n        self.events[index][1].end = Object.assign({}, point)\n        index++\n      }\n\n      // Inject the exits earlier (they\u2019re still also at the end).\n      splice(\n        self.events,\n        indexBeforeFlow + 1,\n        0,\n        self.events.slice(indexBeforeExits)\n      )\n\n      // Discard the duplicate exits.\n      self.events.length = index\n      return checkNewContainers(code)\n    }\n    return start(code)\n  }\n\n  /** @type {State} */\n  function checkNewContainers(code) {\n    // Next, after consuming the continuation markers for existing blocks, we\n    // look for new block starts (e.g. `>` for a block quote).\n    // If we encounter a new block start, we close any blocks unmatched in\n    // step 1 before creating the new block as a child of the last matched\n    // block.\n    if (continued === stack.length) {\n      // No need to `check` whether there\u2019s a container, of `exitContainers`\n      // would be moot.\n      // We can instead immediately `attempt` to parse one.\n      if (!childFlow) {\n        return documentContinued(code)\n      }\n\n      // If we have concrete content, such as block HTML or fenced code,\n      // we can\u2019t have containers \u201Cpierce\u201D into them, so we can immediately\n      // start.\n      if (childFlow.currentConstruct && childFlow.currentConstruct.concrete) {\n        return flowStart(code)\n      }\n\n      // If we do have flow, it could still be a blank line,\n      // but we\u2019d be interrupting it w/ a new container if there\u2019s a current\n      // construct.\n      // To do: next major: remove `_gfmTableDynamicInterruptHack` (no longer\n      // needed in micromark-extension-gfm-table@1.0.6).\n      self.interrupt = Boolean(\n        childFlow.currentConstruct && !childFlow._gfmTableDynamicInterruptHack\n      )\n    }\n\n    // Check if there is a new container.\n    self.containerState = {}\n    return effects.check(\n      containerConstruct,\n      thereIsANewContainer,\n      thereIsNoNewContainer\n    )(code)\n  }\n\n  /** @type {State} */\n  function thereIsANewContainer(code) {\n    if (childFlow) closeFlow()\n    exitContainers(continued)\n    return documentContinued(code)\n  }\n\n  /** @type {State} */\n  function thereIsNoNewContainer(code) {\n    self.parser.lazy[self.now().line] = continued !== stack.length\n    lineStartOffset = self.now().offset\n    return flowStart(code)\n  }\n\n  /** @type {State} */\n  function documentContinued(code) {\n    // Try new containers.\n    self.containerState = {}\n    return effects.attempt(\n      containerConstruct,\n      containerContinue,\n      flowStart\n    )(code)\n  }\n\n  /** @type {State} */\n  function containerContinue(code) {\n    continued++\n    stack.push([self.currentConstruct, self.containerState])\n    // Try another.\n    return documentContinued(code)\n  }\n\n  /** @type {State} */\n  function flowStart(code) {\n    if (code === null) {\n      if (childFlow) closeFlow()\n      exitContainers(0)\n      effects.consume(code)\n      return\n    }\n    childFlow = childFlow || self.parser.flow(self.now())\n    effects.enter('chunkFlow', {\n      contentType: 'flow',\n      previous: childToken,\n      _tokenizer: childFlow\n    })\n    return flowContinue(code)\n  }\n\n  /** @type {State} */\n  function flowContinue(code) {\n    if (code === null) {\n      writeToChild(effects.exit('chunkFlow'), true)\n      exitContainers(0)\n      effects.consume(code)\n      return\n    }\n    if (markdownLineEnding(code)) {\n      effects.consume(code)\n      writeToChild(effects.exit('chunkFlow'))\n      // Get ready for the next line.\n      continued = 0\n      self.interrupt = undefined\n      return start\n    }\n    effects.consume(code)\n    return flowContinue\n  }\n\n  /**\n   * @param {Token} token\n   * @param {boolean | undefined} [eof]\n   * @returns {undefined}\n   */\n  function writeToChild(token, eof) {\n    const stream = self.sliceStream(token)\n    if (eof) stream.push(null)\n    token.previous = childToken\n    if (childToken) childToken.next = token\n    childToken = token\n    childFlow.defineSkip(token.start)\n    childFlow.write(stream)\n\n    // Alright, so we just added a lazy line:\n    //\n    // ```markdown\n    // > a\n    // b.\n    //\n    // Or:\n    //\n    // > ~~~c\n    // d\n    //\n    // Or:\n    //\n    // > | e |\n    // f\n    // ```\n    //\n    // The construct in the second example (fenced code) does not accept lazy\n    // lines, so it marked itself as done at the end of its first line, and\n    // then the content construct parses `d`.\n    // Most constructs in markdown match on the first line: if the first line\n    // forms a construct, a non-lazy line can\u2019t \u201Cunmake\u201D it.\n    //\n    // The construct in the third example is potentially a GFM table, and\n    // those are *weird*.\n    // It *could* be a table, from the first line, if the following line\n    // matches a condition.\n    // In this case, that second line is lazy, which \u201Cunmakes\u201D the first line\n    // and turns the whole into one content block.\n    //\n    // We\u2019ve now parsed the non-lazy and the lazy line, and can figure out\n    // whether the lazy line started a new flow block.\n    // If it did, we exit the current containers between the two flow blocks.\n    if (self.parser.lazy[token.start.line]) {\n      let index = childFlow.events.length\n      while (index--) {\n        if (\n          // The token starts before the line ending\u2026\n          childFlow.events[index][1].start.offset < lineStartOffset &&\n          // \u2026and either is not ended yet\u2026\n          (!childFlow.events[index][1].end ||\n            // \u2026or ends after it.\n            childFlow.events[index][1].end.offset > lineStartOffset)\n        ) {\n          // Exit: there\u2019s still something open, which means it\u2019s a lazy line\n          // part of something.\n          return\n        }\n      }\n\n      // Note: this algorithm for moving events around is similar to the\n      // algorithm when closing flow in `documentContinue`.\n      const indexBeforeExits = self.events.length\n      let indexBeforeFlow = indexBeforeExits\n      /** @type {boolean | undefined} */\n      let seen\n      /** @type {Point | undefined} */\n      let point\n\n      // Find the previous chunk (the one before the lazy line).\n      while (indexBeforeFlow--) {\n        if (\n          self.events[indexBeforeFlow][0] === 'exit' &&\n          self.events[indexBeforeFlow][1].type === 'chunkFlow'\n        ) {\n          if (seen) {\n            point = self.events[indexBeforeFlow][1].end\n            break\n          }\n          seen = true\n        }\n      }\n      exitContainers(continued)\n\n      // Fix positions.\n      index = indexBeforeExits\n      while (index < self.events.length) {\n        self.events[index][1].end = Object.assign({}, point)\n        index++\n      }\n\n      // Inject the exits earlier (they\u2019re still also at the end).\n      splice(\n        self.events,\n        indexBeforeFlow + 1,\n        0,\n        self.events.slice(indexBeforeExits)\n      )\n\n      // Discard the duplicate exits.\n      self.events.length = index\n    }\n  }\n\n  /**\n   * @param {number} size\n   * @returns {undefined}\n   */\n  function exitContainers(size) {\n    let index = stack.length\n\n    // Exit open containers.\n    while (index-- > size) {\n      const entry = stack[index]\n      self.containerState = entry[1]\n      entry[0].exit.call(self, effects)\n    }\n    stack.length = size\n  }\n  function closeFlow() {\n    childFlow.write([null])\n    childToken = undefined\n    childFlow = undefined\n    self.containerState._closeFlow = undefined\n  }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeContainer(effects, ok, nok) {\n  // Always populated by defaults.\n\n  return factorySpace(\n    effects,\n    effects.attempt(this.parser.constructs.document, ok, nok),\n    'linePrefix',\n    this.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4\n  )\n}\n", "/**\n * @typedef {import('micromark-util-types').Code} Code\n */\n\nimport {\n  markdownLineEndingOrSpace,\n  unicodePunctuation,\n  unicodeWhitespace\n} from 'micromark-util-character'\n/**\n * Classify whether a code represents whitespace, punctuation, or something\n * else.\n *\n * Used for attention (emphasis, strong), whose sequences can open or close\n * based on the class of surrounding characters.\n *\n * > \uD83D\uDC49 **Note**: eof (`null`) is seen as whitespace.\n *\n * @param {Code} code\n *   Code.\n * @returns {typeof constants.characterGroupWhitespace | typeof constants.characterGroupPunctuation | undefined}\n *   Group.\n */\nexport function classifyCharacter(code) {\n  if (\n    code === null ||\n    markdownLineEndingOrSpace(code) ||\n    unicodeWhitespace(code)\n  ) {\n    return 1\n  }\n  if (unicodePunctuation(code)) {\n    return 2\n  }\n}\n", "/**\n * @typedef {import('micromark-util-types').Event} Event\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n */\n\n/**\n * Call all `resolveAll`s.\n *\n * @param {Array<{resolveAll?: Resolver | undefined}>} constructs\n *   List of constructs, optionally with `resolveAll`s.\n * @param {Array<Event>} events\n *   List of events.\n * @param {TokenizeContext} context\n *   Context used by `tokenize`.\n * @returns {Array<Event>}\n *   Changed events.\n */\nexport function resolveAll(constructs, events, context) {\n  /** @type {Array<Resolver>} */\n  const called = []\n  let index = -1\n\n  while (++index < constructs.length) {\n    const resolve = constructs[index].resolveAll\n\n    if (resolve && !called.includes(resolve)) {\n      events = resolve(events, context)\n      called.push(resolve)\n    }\n  }\n\n  return events\n}\n", "/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Event} Event\n * @typedef {import('micromark-util-types').Point} Point\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {push, splice} from 'micromark-util-chunked'\nimport {classifyCharacter} from 'micromark-util-classify-character'\nimport {resolveAll} from 'micromark-util-resolve-all'\n/** @type {Construct} */\nexport const attention = {\n  name: 'attention',\n  tokenize: tokenizeAttention,\n  resolveAll: resolveAllAttention\n}\n\n/**\n * Take all events and resolve attention to emphasis or strong.\n *\n * @type {Resolver}\n */\n// eslint-disable-next-line complexity\nfunction resolveAllAttention(events, context) {\n  let index = -1\n  /** @type {number} */\n  let open\n  /** @type {Token} */\n  let group\n  /** @type {Token} */\n  let text\n  /** @type {Token} */\n  let openingSequence\n  /** @type {Token} */\n  let closingSequence\n  /** @type {number} */\n  let use\n  /** @type {Array<Event>} */\n  let nextEvents\n  /** @type {number} */\n  let offset\n\n  // Walk through all events.\n  //\n  // Note: performance of this is fine on an mb of normal markdown, but it\u2019s\n  // a bottleneck for malicious stuff.\n  while (++index < events.length) {\n    // Find a token that can close.\n    if (\n      events[index][0] === 'enter' &&\n      events[index][1].type === 'attentionSequence' &&\n      events[index][1]._close\n    ) {\n      open = index\n\n      // Now walk back to find an opener.\n      while (open--) {\n        // Find a token that can open the closer.\n        if (\n          events[open][0] === 'exit' &&\n          events[open][1].type === 'attentionSequence' &&\n          events[open][1]._open &&\n          // If the markers are the same:\n          context.sliceSerialize(events[open][1]).charCodeAt(0) ===\n            context.sliceSerialize(events[index][1]).charCodeAt(0)\n        ) {\n          // If the opening can close or the closing can open,\n          // and the close size *is not* a multiple of three,\n          // but the sum of the opening and closing size *is* multiple of three,\n          // then don\u2019t match.\n          if (\n            (events[open][1]._close || events[index][1]._open) &&\n            (events[index][1].end.offset - events[index][1].start.offset) % 3 &&\n            !(\n              (events[open][1].end.offset -\n                events[open][1].start.offset +\n                events[index][1].end.offset -\n                events[index][1].start.offset) %\n              3\n            )\n          ) {\n            continue\n          }\n\n          // Number of markers to use from the sequence.\n          use =\n            events[open][1].end.offset - events[open][1].start.offset > 1 &&\n            events[index][1].end.offset - events[index][1].start.offset > 1\n              ? 2\n              : 1\n          const start = Object.assign({}, events[open][1].end)\n          const end = Object.assign({}, events[index][1].start)\n          movePoint(start, -use)\n          movePoint(end, use)\n          openingSequence = {\n            type: use > 1 ? 'strongSequence' : 'emphasisSequence',\n            start,\n            end: Object.assign({}, events[open][1].end)\n          }\n          closingSequence = {\n            type: use > 1 ? 'strongSequence' : 'emphasisSequence',\n            start: Object.assign({}, events[index][1].start),\n            end\n          }\n          text = {\n            type: use > 1 ? 'strongText' : 'emphasisText',\n            start: Object.assign({}, events[open][1].end),\n            end: Object.assign({}, events[index][1].start)\n          }\n          group = {\n            type: use > 1 ? 'strong' : 'emphasis',\n            start: Object.assign({}, openingSequence.start),\n            end: Object.assign({}, closingSequence.end)\n          }\n          events[open][1].end = Object.assign({}, openingSequence.start)\n          events[index][1].start = Object.assign({}, closingSequence.end)\n          nextEvents = []\n\n          // If there are more markers in the opening, add them before.\n          if (events[open][1].end.offset - events[open][1].start.offset) {\n            nextEvents = push(nextEvents, [\n              ['enter', events[open][1], context],\n              ['exit', events[open][1], context]\n            ])\n          }\n\n          // Opening.\n          nextEvents = push(nextEvents, [\n            ['enter', group, context],\n            ['enter', openingSequence, context],\n            ['exit', openingSequence, context],\n            ['enter', text, context]\n          ])\n\n          // Always populated by defaults.\n\n          // Between.\n          nextEvents = push(\n            nextEvents,\n            resolveAll(\n              context.parser.constructs.insideSpan.null,\n              events.slice(open + 1, index),\n              context\n            )\n          )\n\n          // Closing.\n          nextEvents = push(nextEvents, [\n            ['exit', text, context],\n            ['enter', closingSequence, context],\n            ['exit', closingSequence, context],\n            ['exit', group, context]\n          ])\n\n          // If there are more markers in the closing, add them after.\n          if (events[index][1].end.offset - events[index][1].start.offset) {\n            offset = 2\n            nextEvents = push(nextEvents, [\n              ['enter', events[index][1], context],\n              ['exit', events[index][1], context]\n            ])\n          } else {\n            offset = 0\n          }\n          splice(events, open - 1, index - open + 3, nextEvents)\n          index = open + nextEvents.length - offset - 2\n          break\n        }\n      }\n    }\n  }\n\n  // Remove remaining sequences.\n  index = -1\n  while (++index < events.length) {\n    if (events[index][1].type === 'attentionSequence') {\n      events[index][1].type = 'data'\n    }\n  }\n  return events\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeAttention(effects, ok) {\n  const attentionMarkers = this.parser.constructs.attentionMarkers.null\n  const previous = this.previous\n  const before = classifyCharacter(previous)\n\n  /** @type {NonNullable<Code>} */\n  let marker\n  return start\n\n  /**\n   * Before a sequence.\n   *\n   * ```markdown\n   * > | **\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    marker = code\n    effects.enter('attentionSequence')\n    return inside(code)\n  }\n\n  /**\n   * In a sequence.\n   *\n   * ```markdown\n   * > | **\n   *     ^^\n   * ```\n   *\n   * @type {State}\n   */\n  function inside(code) {\n    if (code === marker) {\n      effects.consume(code)\n      return inside\n    }\n    const token = effects.exit('attentionSequence')\n\n    // To do: next major: move this to resolver, just like `markdown-rs`.\n    const after = classifyCharacter(code)\n\n    // Always populated by defaults.\n\n    const open =\n      !after || (after === 2 && before) || attentionMarkers.includes(code)\n    const close =\n      !before || (before === 2 && after) || attentionMarkers.includes(previous)\n    token._open = Boolean(marker === 42 ? open : open && (before || !close))\n    token._close = Boolean(marker === 42 ? close : close && (after || !open))\n    return ok(code)\n  }\n}\n\n/**\n * Move a point a bit.\n *\n * Note: `move` only works inside lines! It\u2019s not possible to move past other\n * chunks (replacement characters, tabs, or line endings).\n *\n * @param {Point} point\n * @param {number} offset\n * @returns {undefined}\n */\nfunction movePoint(point, offset) {\n  point.column += offset\n  point.offset += offset\n  point._bufferIndex += offset\n}\n", "/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {\n  asciiAlpha,\n  asciiAlphanumeric,\n  asciiAtext,\n  asciiControl\n} from 'micromark-util-character'\n/** @type {Construct} */\nexport const autolink = {\n  name: 'autolink',\n  tokenize: tokenizeAutolink\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeAutolink(effects, ok, nok) {\n  let size = 0\n  return start\n\n  /**\n   * Start of an autolink.\n   *\n   * ```markdown\n   * > | a<https://example.com>b\n   *      ^\n   * > | a<user@example.com>b\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter('autolink')\n    effects.enter('autolinkMarker')\n    effects.consume(code)\n    effects.exit('autolinkMarker')\n    effects.enter('autolinkProtocol')\n    return open\n  }\n\n  /**\n   * After `<`, at protocol or atext.\n   *\n   * ```markdown\n   * > | a<https://example.com>b\n   *       ^\n   * > | a<user@example.com>b\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function open(code) {\n    if (asciiAlpha(code)) {\n      effects.consume(code)\n      return schemeOrEmailAtext\n    }\n    return emailAtext(code)\n  }\n\n  /**\n   * At second byte of protocol or atext.\n   *\n   * ```markdown\n   * > | a<https://example.com>b\n   *        ^\n   * > | a<user@example.com>b\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function schemeOrEmailAtext(code) {\n    // ASCII alphanumeric and `+`, `-`, and `.`.\n    if (code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) {\n      // Count the previous alphabetical from `open` too.\n      size = 1\n      return schemeInsideOrEmailAtext(code)\n    }\n    return emailAtext(code)\n  }\n\n  /**\n   * In ambiguous protocol or atext.\n   *\n   * ```markdown\n   * > | a<https://example.com>b\n   *        ^\n   * > | a<user@example.com>b\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function schemeInsideOrEmailAtext(code) {\n    if (code === 58) {\n      effects.consume(code)\n      size = 0\n      return urlInside\n    }\n\n    // ASCII alphanumeric and `+`, `-`, and `.`.\n    if (\n      (code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) &&\n      size++ < 32\n    ) {\n      effects.consume(code)\n      return schemeInsideOrEmailAtext\n    }\n    size = 0\n    return emailAtext(code)\n  }\n\n  /**\n   * After protocol, in URL.\n   *\n   * ```markdown\n   * > | a<https://example.com>b\n   *             ^\n   * ```\n   *\n   * @type {State}\n   */\n  function urlInside(code) {\n    if (code === 62) {\n      effects.exit('autolinkProtocol')\n      effects.enter('autolinkMarker')\n      effects.consume(code)\n      effects.exit('autolinkMarker')\n      effects.exit('autolink')\n      return ok\n    }\n\n    // ASCII control, space, or `<`.\n    if (code === null || code === 32 || code === 60 || asciiControl(code)) {\n      return nok(code)\n    }\n    effects.consume(code)\n    return urlInside\n  }\n\n  /**\n   * In email atext.\n   *\n   * ```markdown\n   * > | a<user.name@example.com>b\n   *              ^\n   * ```\n   *\n   * @type {State}\n   */\n  function emailAtext(code) {\n    if (code === 64) {\n      effects.consume(code)\n      return emailAtSignOrDot\n    }\n    if (asciiAtext(code)) {\n      effects.consume(code)\n      return emailAtext\n    }\n    return nok(code)\n  }\n\n  /**\n   * In label, after at-sign or dot.\n   *\n   * ```markdown\n   * > | a<user.name@example.com>b\n   *                 ^       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function emailAtSignOrDot(code) {\n    return asciiAlphanumeric(code) ? emailLabel(code) : nok(code)\n  }\n\n  /**\n   * In label, where `.` and `>` are allowed.\n   *\n   * ```markdown\n   * > | a<user.name@example.com>b\n   *                   ^\n   * ```\n   *\n   * @type {State}\n   */\n  function emailLabel(code) {\n    if (code === 46) {\n      effects.consume(code)\n      size = 0\n      return emailAtSignOrDot\n    }\n    if (code === 62) {\n      // Exit, then change the token type.\n      effects.exit('autolinkProtocol').type = 'autolinkEmail'\n      effects.enter('autolinkMarker')\n      effects.consume(code)\n      effects.exit('autolinkMarker')\n      effects.exit('autolink')\n      return ok\n    }\n    return emailValue(code)\n  }\n\n  /**\n   * In label, where `.` and `>` are *not* allowed.\n   *\n   * Though, this is also used in `emailLabel` to parse other values.\n   *\n   * ```markdown\n   * > | a<user.name@ex-ample.com>b\n   *                    ^\n   * ```\n   *\n   * @type {State}\n   */\n  function emailValue(code) {\n    // ASCII alphanumeric or `-`.\n    if ((code === 45 || asciiAlphanumeric(code)) && size++ < 63) {\n      const next = code === 45 ? emailValue : emailLabel\n      effects.consume(code)\n      return next\n    }\n    return nok(code)\n  }\n}\n", "/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding, markdownSpace} from 'micromark-util-character'\n/** @type {Construct} */\nexport const blankLine = {\n  tokenize: tokenizeBlankLine,\n  partial: true\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeBlankLine(effects, ok, nok) {\n  return start\n\n  /**\n   * Start of blank line.\n   *\n   * > \uD83D\uDC49 **Note**: `\u2420` represents a space character.\n   *\n   * ```markdown\n   * > | \u2420\u2420\u240A\n   *     ^\n   * > | \u240A\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    return markdownSpace(code)\n      ? factorySpace(effects, after, 'linePrefix')(code)\n      : after(code)\n  }\n\n  /**\n   * At eof/eol, after optional whitespace.\n   *\n   * > \uD83D\uDC49 **Note**: `\u2420` represents a space character.\n   *\n   * ```markdown\n   * > | \u2420\u2420\u240A\n   *       ^\n   * > | \u240A\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    return code === null || markdownLineEnding(code) ? ok(code) : nok(code)\n  }\n}\n", "/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Exiter} Exiter\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownSpace} from 'micromark-util-character'\n/** @type {Construct} */\nexport const blockQuote = {\n  name: 'blockQuote',\n  tokenize: tokenizeBlockQuoteStart,\n  continuation: {\n    tokenize: tokenizeBlockQuoteContinuation\n  },\n  exit\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeBlockQuoteStart(effects, ok, nok) {\n  const self = this\n  return start\n\n  /**\n   * Start of block quote.\n   *\n   * ```markdown\n   * > | > a\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    if (code === 62) {\n      const state = self.containerState\n      if (!state.open) {\n        effects.enter('blockQuote', {\n          _container: true\n        })\n        state.open = true\n      }\n      effects.enter('blockQuotePrefix')\n      effects.enter('blockQuoteMarker')\n      effects.consume(code)\n      effects.exit('blockQuoteMarker')\n      return after\n    }\n    return nok(code)\n  }\n\n  /**\n   * After `>`, before optional whitespace.\n   *\n   * ```markdown\n   * > | > a\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    if (markdownSpace(code)) {\n      effects.enter('blockQuotePrefixWhitespace')\n      effects.consume(code)\n      effects.exit('blockQuotePrefixWhitespace')\n      effects.exit('blockQuotePrefix')\n      return ok\n    }\n    effects.exit('blockQuotePrefix')\n    return ok(code)\n  }\n}\n\n/**\n * Start of block quote continuation.\n *\n * ```markdown\n *   | > a\n * > | > b\n *     ^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeBlockQuoteContinuation(effects, ok, nok) {\n  const self = this\n  return contStart\n\n  /**\n   * Start of block quote continuation.\n   *\n   * Also used to parse the first block quote opening.\n   *\n   * ```markdown\n   *   | > a\n   * > | > b\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function contStart(code) {\n    if (markdownSpace(code)) {\n      // Always populated by defaults.\n\n      return factorySpace(\n        effects,\n        contBefore,\n        'linePrefix',\n        self.parser.constructs.disable.null.includes('codeIndented')\n          ? undefined\n          : 4\n      )(code)\n    }\n    return contBefore(code)\n  }\n\n  /**\n   * At `>`, after optional whitespace.\n   *\n   * Also used to parse the first block quote opening.\n   *\n   * ```markdown\n   *   | > a\n   * > | > b\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function contBefore(code) {\n    return effects.attempt(blockQuote, ok, nok)(code)\n  }\n}\n\n/** @type {Exiter} */\nfunction exit(effects) {\n  effects.exit('blockQuote')\n}\n", "/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {asciiPunctuation} from 'micromark-util-character'\n/** @type {Construct} */\nexport const characterEscape = {\n  name: 'characterEscape',\n  tokenize: tokenizeCharacterEscape\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeCharacterEscape(effects, ok, nok) {\n  return start\n\n  /**\n   * Start of character escape.\n   *\n   * ```markdown\n   * > | a\\*b\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter('characterEscape')\n    effects.enter('escapeMarker')\n    effects.consume(code)\n    effects.exit('escapeMarker')\n    return inside\n  }\n\n  /**\n   * After `\\`, at punctuation.\n   *\n   * ```markdown\n   * > | a\\*b\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function inside(code) {\n    // ASCII punctuation.\n    if (asciiPunctuation(code)) {\n      effects.enter('characterEscapeValue')\n      effects.consume(code)\n      effects.exit('characterEscapeValue')\n      effects.exit('characterEscape')\n      return ok\n    }\n    return nok(code)\n  }\n}\n", "/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {decodeNamedCharacterReference} from 'decode-named-character-reference'\nimport {\n  asciiAlphanumeric,\n  asciiDigit,\n  asciiHexDigit\n} from 'micromark-util-character'\n/** @type {Construct} */\nexport const characterReference = {\n  name: 'characterReference',\n  tokenize: tokenizeCharacterReference\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeCharacterReference(effects, ok, nok) {\n  const self = this\n  let size = 0\n  /** @type {number} */\n  let max\n  /** @type {(code: Code) => boolean} */\n  let test\n  return start\n\n  /**\n   * Start of character reference.\n   *\n   * ```markdown\n   * > | a&amp;b\n   *      ^\n   * > | a&#123;b\n   *      ^\n   * > | a&#x9;b\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter('characterReference')\n    effects.enter('characterReferenceMarker')\n    effects.consume(code)\n    effects.exit('characterReferenceMarker')\n    return open\n  }\n\n  /**\n   * After `&`, at `#` for numeric references or alphanumeric for named\n   * references.\n   *\n   * ```markdown\n   * > | a&amp;b\n   *       ^\n   * > | a&#123;b\n   *       ^\n   * > | a&#x9;b\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function open(code) {\n    if (code === 35) {\n      effects.enter('characterReferenceMarkerNumeric')\n      effects.consume(code)\n      effects.exit('characterReferenceMarkerNumeric')\n      return numeric\n    }\n    effects.enter('characterReferenceValue')\n    max = 31\n    test = asciiAlphanumeric\n    return value(code)\n  }\n\n  /**\n   * After `#`, at `x` for hexadecimals or digit for decimals.\n   *\n   * ```markdown\n   * > | a&#123;b\n   *        ^\n   * > | a&#x9;b\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function numeric(code) {\n    if (code === 88 || code === 120) {\n      effects.enter('characterReferenceMarkerHexadecimal')\n      effects.consume(code)\n      effects.exit('characterReferenceMarkerHexadecimal')\n      effects.enter('characterReferenceValue')\n      max = 6\n      test = asciiHexDigit\n      return value\n    }\n    effects.enter('characterReferenceValue')\n    max = 7\n    test = asciiDigit\n    return value(code)\n  }\n\n  /**\n   * After markers (`&#x`, `&#`, or `&`), in value, before `;`.\n   *\n   * The character reference kind defines what and how many characters are\n   * allowed.\n   *\n   * ```markdown\n   * > | a&amp;b\n   *       ^^^\n   * > | a&#123;b\n   *        ^^^\n   * > | a&#x9;b\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function value(code) {\n    if (code === 59 && size) {\n      const token = effects.exit('characterReferenceValue')\n      if (\n        test === asciiAlphanumeric &&\n        !decodeNamedCharacterReference(self.sliceSerialize(token))\n      ) {\n        return nok(code)\n      }\n\n      // To do: `markdown-rs` uses a different name:\n      // `CharacterReferenceMarkerSemi`.\n      effects.enter('characterReferenceMarker')\n      effects.consume(code)\n      effects.exit('characterReferenceMarker')\n      effects.exit('characterReference')\n      return ok\n    }\n    if (test(code) && size++ < max) {\n      effects.consume(code)\n      return value\n    }\n    return nok(code)\n  }\n}\n", "/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding, markdownSpace} from 'micromark-util-character'\n/** @type {Construct} */\nconst nonLazyContinuation = {\n  tokenize: tokenizeNonLazyContinuation,\n  partial: true\n}\n\n/** @type {Construct} */\nexport const codeFenced = {\n  name: 'codeFenced',\n  tokenize: tokenizeCodeFenced,\n  concrete: true\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeCodeFenced(effects, ok, nok) {\n  const self = this\n  /** @type {Construct} */\n  const closeStart = {\n    tokenize: tokenizeCloseStart,\n    partial: true\n  }\n  let initialPrefix = 0\n  let sizeOpen = 0\n  /** @type {NonNullable<Code>} */\n  let marker\n  return start\n\n  /**\n   * Start of code.\n   *\n   * ```markdown\n   * > | ~~~js\n   *     ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    // To do: parse whitespace like `markdown-rs`.\n    return beforeSequenceOpen(code)\n  }\n\n  /**\n   * In opening fence, after prefix, at sequence.\n   *\n   * ```markdown\n   * > | ~~~js\n   *     ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function beforeSequenceOpen(code) {\n    const tail = self.events[self.events.length - 1]\n    initialPrefix =\n      tail && tail[1].type === 'linePrefix'\n        ? tail[2].sliceSerialize(tail[1], true).length\n        : 0\n    marker = code\n    effects.enter('codeFenced')\n    effects.enter('codeFencedFence')\n    effects.enter('codeFencedFenceSequence')\n    return sequenceOpen(code)\n  }\n\n  /**\n   * In opening fence sequence.\n   *\n   * ```markdown\n   * > | ~~~js\n   *      ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function sequenceOpen(code) {\n    if (code === marker) {\n      sizeOpen++\n      effects.consume(code)\n      return sequenceOpen\n    }\n    if (sizeOpen < 3) {\n      return nok(code)\n    }\n    effects.exit('codeFencedFenceSequence')\n    return markdownSpace(code)\n      ? factorySpace(effects, infoBefore, 'whitespace')(code)\n      : infoBefore(code)\n  }\n\n  /**\n   * In opening fence, after the sequence (and optional whitespace), before info.\n   *\n   * ```markdown\n   * > | ~~~js\n   *        ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function infoBefore(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit('codeFencedFence')\n      return self.interrupt\n        ? ok(code)\n        : effects.check(nonLazyContinuation, atNonLazyBreak, after)(code)\n    }\n    effects.enter('codeFencedFenceInfo')\n    effects.enter('chunkString', {\n      contentType: 'string'\n    })\n    return info(code)\n  }\n\n  /**\n   * In info.\n   *\n   * ```markdown\n   * > | ~~~js\n   *        ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function info(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit('chunkString')\n      effects.exit('codeFencedFenceInfo')\n      return infoBefore(code)\n    }\n    if (markdownSpace(code)) {\n      effects.exit('chunkString')\n      effects.exit('codeFencedFenceInfo')\n      return factorySpace(effects, metaBefore, 'whitespace')(code)\n    }\n    if (code === 96 && code === marker) {\n      return nok(code)\n    }\n    effects.consume(code)\n    return info\n  }\n\n  /**\n   * In opening fence, after info and whitespace, before meta.\n   *\n   * ```markdown\n   * > | ~~~js eval\n   *           ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function metaBefore(code) {\n    if (code === null || markdownLineEnding(code)) {\n      return infoBefore(code)\n    }\n    effects.enter('codeFencedFenceMeta')\n    effects.enter('chunkString', {\n      contentType: 'string'\n    })\n    return meta(code)\n  }\n\n  /**\n   * In meta.\n   *\n   * ```markdown\n   * > | ~~~js eval\n   *           ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function meta(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit('chunkString')\n      effects.exit('codeFencedFenceMeta')\n      return infoBefore(code)\n    }\n    if (code === 96 && code === marker) {\n      return nok(code)\n    }\n    effects.consume(code)\n    return meta\n  }\n\n  /**\n   * At eol/eof in code, before a non-lazy closing fence or content.\n   *\n   * ```markdown\n   * > | ~~~js\n   *          ^\n   * > | alert(1)\n   *             ^\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function atNonLazyBreak(code) {\n    return effects.attempt(closeStart, after, contentBefore)(code)\n  }\n\n  /**\n   * Before code content, not a closing fence, at eol.\n   *\n   * ```markdown\n   *   | ~~~js\n   * > | alert(1)\n   *             ^\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function contentBefore(code) {\n    effects.enter('lineEnding')\n    effects.consume(code)\n    effects.exit('lineEnding')\n    return contentStart\n  }\n\n  /**\n   * Before code content, not a closing fence.\n   *\n   * ```markdown\n   *   | ~~~js\n   * > | alert(1)\n   *     ^\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function contentStart(code) {\n    return initialPrefix > 0 && markdownSpace(code)\n      ? factorySpace(\n          effects,\n          beforeContentChunk,\n          'linePrefix',\n          initialPrefix + 1\n        )(code)\n      : beforeContentChunk(code)\n  }\n\n  /**\n   * Before code content, after optional prefix.\n   *\n   * ```markdown\n   *   | ~~~js\n   * > | alert(1)\n   *     ^\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function beforeContentChunk(code) {\n    if (code === null || markdownLineEnding(code)) {\n      return effects.check(nonLazyContinuation, atNonLazyBreak, after)(code)\n    }\n    effects.enter('codeFlowValue')\n    return contentChunk(code)\n  }\n\n  /**\n   * In code content.\n   *\n   * ```markdown\n   *   | ~~~js\n   * > | alert(1)\n   *     ^^^^^^^^\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function contentChunk(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit('codeFlowValue')\n      return beforeContentChunk(code)\n    }\n    effects.consume(code)\n    return contentChunk\n  }\n\n  /**\n   * After code.\n   *\n   * ```markdown\n   *   | ~~~js\n   *   | alert(1)\n   * > | ~~~\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    effects.exit('codeFenced')\n    return ok(code)\n  }\n\n  /**\n   * @this {TokenizeContext}\n   * @type {Tokenizer}\n   */\n  function tokenizeCloseStart(effects, ok, nok) {\n    let size = 0\n    return startBefore\n\n    /**\n     *\n     *\n     * @type {State}\n     */\n    function startBefore(code) {\n      effects.enter('lineEnding')\n      effects.consume(code)\n      effects.exit('lineEnding')\n      return start\n    }\n\n    /**\n     * Before closing fence, at optional whitespace.\n     *\n     * ```markdown\n     *   | ~~~js\n     *   | alert(1)\n     * > | ~~~\n     *     ^\n     * ```\n     *\n     * @type {State}\n     */\n    function start(code) {\n      // Always populated by defaults.\n\n      // To do: `enter` here or in next state?\n      effects.enter('codeFencedFence')\n      return markdownSpace(code)\n        ? factorySpace(\n            effects,\n            beforeSequenceClose,\n            'linePrefix',\n            self.parser.constructs.disable.null.includes('codeIndented')\n              ? undefined\n              : 4\n          )(code)\n        : beforeSequenceClose(code)\n    }\n\n    /**\n     * In closing fence, after optional whitespace, at sequence.\n     *\n     * ```markdown\n     *   | ~~~js\n     *   | alert(1)\n     * > | ~~~\n     *     ^\n     * ```\n     *\n     * @type {State}\n     */\n    function beforeSequenceClose(code) {\n      if (code === marker) {\n        effects.enter('codeFencedFenceSequence')\n        return sequenceClose(code)\n      }\n      return nok(code)\n    }\n\n    /**\n     * In closing fence sequence.\n     *\n     * ```markdown\n     *   | ~~~js\n     *   | alert(1)\n     * > | ~~~\n     *     ^\n     * ```\n     *\n     * @type {State}\n     */\n    function sequenceClose(code) {\n      if (code === marker) {\n        size++\n        effects.consume(code)\n        return sequenceClose\n      }\n      if (size >= sizeOpen) {\n        effects.exit('codeFencedFenceSequence')\n        return markdownSpace(code)\n          ? factorySpace(effects, sequenceCloseAfter, 'whitespace')(code)\n          : sequenceCloseAfter(code)\n      }\n      return nok(code)\n    }\n\n    /**\n     * After closing fence sequence, after optional whitespace.\n     *\n     * ```markdown\n     *   | ~~~js\n     *   | alert(1)\n     * > | ~~~\n     *        ^\n     * ```\n     *\n     * @type {State}\n     */\n    function sequenceCloseAfter(code) {\n      if (code === null || markdownLineEnding(code)) {\n        effects.exit('codeFencedFence')\n        return ok(code)\n      }\n      return nok(code)\n    }\n  }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeNonLazyContinuation(effects, ok, nok) {\n  const self = this\n  return start\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function start(code) {\n    if (code === null) {\n      return nok(code)\n    }\n    effects.enter('lineEnding')\n    effects.consume(code)\n    effects.exit('lineEnding')\n    return lineStart\n  }\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function lineStart(code) {\n    return self.parser.lazy[self.now().line] ? nok(code) : ok(code)\n  }\n}\n", "/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding, markdownSpace} from 'micromark-util-character'\n/** @type {Construct} */\nexport const codeIndented = {\n  name: 'codeIndented',\n  tokenize: tokenizeCodeIndented\n}\n\n/** @type {Construct} */\nconst furtherStart = {\n  tokenize: tokenizeFurtherStart,\n  partial: true\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeCodeIndented(effects, ok, nok) {\n  const self = this\n  return start\n\n  /**\n   * Start of code (indented).\n   *\n   * > **Parsing note**: it is not needed to check if this first line is a\n   * > filled line (that it has a non-whitespace character), because blank lines\n   * > are parsed already, so we never run into that.\n   *\n   * ```markdown\n   * > |     aaa\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    // To do: manually check if interrupting like `markdown-rs`.\n\n    effects.enter('codeIndented')\n    // To do: use an improved `space_or_tab` function like `markdown-rs`,\n    // so that we can drop the next state.\n    return factorySpace(effects, afterPrefix, 'linePrefix', 4 + 1)(code)\n  }\n\n  /**\n   * At start, after 1 or 4 spaces.\n   *\n   * ```markdown\n   * > |     aaa\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function afterPrefix(code) {\n    const tail = self.events[self.events.length - 1]\n    return tail &&\n      tail[1].type === 'linePrefix' &&\n      tail[2].sliceSerialize(tail[1], true).length >= 4\n      ? atBreak(code)\n      : nok(code)\n  }\n\n  /**\n   * At a break.\n   *\n   * ```markdown\n   * > |     aaa\n   *         ^  ^\n   * ```\n   *\n   * @type {State}\n   */\n  function atBreak(code) {\n    if (code === null) {\n      return after(code)\n    }\n    if (markdownLineEnding(code)) {\n      return effects.attempt(furtherStart, atBreak, after)(code)\n    }\n    effects.enter('codeFlowValue')\n    return inside(code)\n  }\n\n  /**\n   * In code content.\n   *\n   * ```markdown\n   * > |     aaa\n   *         ^^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function inside(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit('codeFlowValue')\n      return atBreak(code)\n    }\n    effects.consume(code)\n    return inside\n  }\n\n  /** @type {State} */\n  function after(code) {\n    effects.exit('codeIndented')\n    // To do: allow interrupting like `markdown-rs`.\n    // Feel free to interrupt.\n    // tokenizer.interrupt = false\n    return ok(code)\n  }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeFurtherStart(effects, ok, nok) {\n  const self = this\n  return furtherStart\n\n  /**\n   * At eol, trying to parse another indent.\n   *\n   * ```markdown\n   * > |     aaa\n   *            ^\n   *   |     bbb\n   * ```\n   *\n   * @type {State}\n   */\n  function furtherStart(code) {\n    // To do: improve `lazy` / `pierce` handling.\n    // If this is a lazy line, it can\u2019t be code.\n    if (self.parser.lazy[self.now().line]) {\n      return nok(code)\n    }\n    if (markdownLineEnding(code)) {\n      effects.enter('lineEnding')\n      effects.consume(code)\n      effects.exit('lineEnding')\n      return furtherStart\n    }\n\n    // To do: the code here in `micromark-js` is a bit different from\n    // `markdown-rs` because there it can attempt spaces.\n    // We can\u2019t yet.\n    //\n    // To do: use an improved `space_or_tab` function like `markdown-rs`,\n    // so that we can drop the next state.\n    return factorySpace(effects, afterPrefix, 'linePrefix', 4 + 1)(code)\n  }\n\n  /**\n   * At start, after 1 or 4 spaces.\n   *\n   * ```markdown\n   * > |     aaa\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function afterPrefix(code) {\n    const tail = self.events[self.events.length - 1]\n    return tail &&\n      tail[1].type === 'linePrefix' &&\n      tail[2].sliceSerialize(tail[1], true).length >= 4\n      ? ok(code)\n      : markdownLineEnding(code)\n      ? furtherStart(code)\n      : nok(code)\n  }\n}\n", "/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Previous} Previous\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {markdownLineEnding} from 'micromark-util-character'\n/** @type {Construct} */\nexport const codeText = {\n  name: 'codeText',\n  tokenize: tokenizeCodeText,\n  resolve: resolveCodeText,\n  previous\n}\n\n// To do: next major: don\u2019t resolve, like `markdown-rs`.\n/** @type {Resolver} */\nfunction resolveCodeText(events) {\n  let tailExitIndex = events.length - 4\n  let headEnterIndex = 3\n  /** @type {number} */\n  let index\n  /** @type {number | undefined} */\n  let enter\n\n  // If we start and end with an EOL or a space.\n  if (\n    (events[headEnterIndex][1].type === 'lineEnding' ||\n      events[headEnterIndex][1].type === 'space') &&\n    (events[tailExitIndex][1].type === 'lineEnding' ||\n      events[tailExitIndex][1].type === 'space')\n  ) {\n    index = headEnterIndex\n\n    // And we have data.\n    while (++index < tailExitIndex) {\n      if (events[index][1].type === 'codeTextData') {\n        // Then we have padding.\n        events[headEnterIndex][1].type = 'codeTextPadding'\n        events[tailExitIndex][1].type = 'codeTextPadding'\n        headEnterIndex += 2\n        tailExitIndex -= 2\n        break\n      }\n    }\n  }\n\n  // Merge adjacent spaces and data.\n  index = headEnterIndex - 1\n  tailExitIndex++\n  while (++index <= tailExitIndex) {\n    if (enter === undefined) {\n      if (index !== tailExitIndex && events[index][1].type !== 'lineEnding') {\n        enter = index\n      }\n    } else if (\n      index === tailExitIndex ||\n      events[index][1].type === 'lineEnding'\n    ) {\n      events[enter][1].type = 'codeTextData'\n      if (index !== enter + 2) {\n        events[enter][1].end = events[index - 1][1].end\n        events.splice(enter + 2, index - enter - 2)\n        tailExitIndex -= index - enter - 2\n        index = enter + 2\n      }\n      enter = undefined\n    }\n  }\n  return events\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Previous}\n */\nfunction previous(code) {\n  // If there is a previous code, there will always be a tail.\n  return (\n    code !== 96 ||\n    this.events[this.events.length - 1][1].type === 'characterEscape'\n  )\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeCodeText(effects, ok, nok) {\n  const self = this\n  let sizeOpen = 0\n  /** @type {number} */\n  let size\n  /** @type {Token} */\n  let token\n  return start\n\n  /**\n   * Start of code (text).\n   *\n   * ```markdown\n   * > | `a`\n   *     ^\n   * > | \\`a`\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter('codeText')\n    effects.enter('codeTextSequence')\n    return sequenceOpen(code)\n  }\n\n  /**\n   * In opening sequence.\n   *\n   * ```markdown\n   * > | `a`\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function sequenceOpen(code) {\n    if (code === 96) {\n      effects.consume(code)\n      sizeOpen++\n      return sequenceOpen\n    }\n    effects.exit('codeTextSequence')\n    return between(code)\n  }\n\n  /**\n   * Between something and something else.\n   *\n   * ```markdown\n   * > | `a`\n   *      ^^\n   * ```\n   *\n   * @type {State}\n   */\n  function between(code) {\n    // EOF.\n    if (code === null) {\n      return nok(code)\n    }\n\n    // To do: next major: don\u2019t do spaces in resolve, but when compiling,\n    // like `markdown-rs`.\n    // Tabs don\u2019t work, and virtual spaces don\u2019t make sense.\n    if (code === 32) {\n      effects.enter('space')\n      effects.consume(code)\n      effects.exit('space')\n      return between\n    }\n\n    // Closing fence? Could also be data.\n    if (code === 96) {\n      token = effects.enter('codeTextSequence')\n      size = 0\n      return sequenceClose(code)\n    }\n    if (markdownLineEnding(code)) {\n      effects.enter('lineEnding')\n      effects.consume(code)\n      effects.exit('lineEnding')\n      return between\n    }\n\n    // Data.\n    effects.enter('codeTextData')\n    return data(code)\n  }\n\n  /**\n   * In data.\n   *\n   * ```markdown\n   * > | `a`\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function data(code) {\n    if (\n      code === null ||\n      code === 32 ||\n      code === 96 ||\n      markdownLineEnding(code)\n    ) {\n      effects.exit('codeTextData')\n      return between(code)\n    }\n    effects.consume(code)\n    return data\n  }\n\n  /**\n   * In closing sequence.\n   *\n   * ```markdown\n   * > | `a`\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function sequenceClose(code) {\n    // More.\n    if (code === 96) {\n      effects.consume(code)\n      size++\n      return sequenceClose\n    }\n\n    // Done!\n    if (size === sizeOpen) {\n      effects.exit('codeTextSequence')\n      effects.exit('codeText')\n      return ok(code)\n    }\n\n    // More or less accents: mark as data.\n    token.type = 'codeTextData'\n    return data(code)\n  }\n}\n", "/**\n * @typedef {import('micromark-util-types').Chunk} Chunk\n * @typedef {import('micromark-util-types').Event} Event\n * @typedef {import('micromark-util-types').Token} Token\n */\n\nimport {splice} from 'micromark-util-chunked'\n/**\n * Tokenize subcontent.\n *\n * @param {Array<Event>} events\n *   List of events.\n * @returns {boolean}\n *   Whether subtokens were found.\n */ // eslint-disable-next-line complexity\nexport function subtokenize(events) {\n  /** @type {Record<string, number>} */\n  const jumps = {}\n  let index = -1\n  /** @type {Event} */\n  let event\n  /** @type {number | undefined} */\n  let lineIndex\n  /** @type {number} */\n  let otherIndex\n  /** @type {Event} */\n  let otherEvent\n  /** @type {Array<Event>} */\n  let parameters\n  /** @type {Array<Event>} */\n  let subevents\n  /** @type {boolean | undefined} */\n  let more\n  while (++index < events.length) {\n    while (index in jumps) {\n      index = jumps[index]\n    }\n    event = events[index]\n\n    // Add a hook for the GFM tasklist extension, which needs to know if text\n    // is in the first content of a list item.\n    if (\n      index &&\n      event[1].type === 'chunkFlow' &&\n      events[index - 1][1].type === 'listItemPrefix'\n    ) {\n      subevents = event[1]._tokenizer.events\n      otherIndex = 0\n      if (\n        otherIndex < subevents.length &&\n        subevents[otherIndex][1].type === 'lineEndingBlank'\n      ) {\n        otherIndex += 2\n      }\n      if (\n        otherIndex < subevents.length &&\n        subevents[otherIndex][1].type === 'content'\n      ) {\n        while (++otherIndex < subevents.length) {\n          if (subevents[otherIndex][1].type === 'content') {\n            break\n          }\n          if (subevents[otherIndex][1].type === 'chunkText') {\n            subevents[otherIndex][1]._isInFirstContentOfListItem = true\n            otherIndex++\n          }\n        }\n      }\n    }\n\n    // Enter.\n    if (event[0] === 'enter') {\n      if (event[1].contentType) {\n        Object.assign(jumps, subcontent(events, index))\n        index = jumps[index]\n        more = true\n      }\n    }\n    // Exit.\n    else if (event[1]._container) {\n      otherIndex = index\n      lineIndex = undefined\n      while (otherIndex--) {\n        otherEvent = events[otherIndex]\n        if (\n          otherEvent[1].type === 'lineEnding' ||\n          otherEvent[1].type === 'lineEndingBlank'\n        ) {\n          if (otherEvent[0] === 'enter') {\n            if (lineIndex) {\n              events[lineIndex][1].type = 'lineEndingBlank'\n            }\n            otherEvent[1].type = 'lineEnding'\n            lineIndex = otherIndex\n          }\n        } else {\n          break\n        }\n      }\n      if (lineIndex) {\n        // Fix position.\n        event[1].end = Object.assign({}, events[lineIndex][1].start)\n\n        // Switch container exit w/ line endings.\n        parameters = events.slice(lineIndex, index)\n        parameters.unshift(event)\n        splice(events, lineIndex, index - lineIndex + 1, parameters)\n      }\n    }\n  }\n  return !more\n}\n\n/**\n * Tokenize embedded tokens.\n *\n * @param {Array<Event>} events\n * @param {number} eventIndex\n * @returns {Record<string, number>}\n */\nfunction subcontent(events, eventIndex) {\n  const token = events[eventIndex][1]\n  const context = events[eventIndex][2]\n  let startPosition = eventIndex - 1\n  /** @type {Array<number>} */\n  const startPositions = []\n  const tokenizer =\n    token._tokenizer || context.parser[token.contentType](token.start)\n  const childEvents = tokenizer.events\n  /** @type {Array<[number, number]>} */\n  const jumps = []\n  /** @type {Record<string, number>} */\n  const gaps = {}\n  /** @type {Array<Chunk>} */\n  let stream\n  /** @type {Token | undefined} */\n  let previous\n  let index = -1\n  /** @type {Token | undefined} */\n  let current = token\n  let adjust = 0\n  let start = 0\n  const breaks = [start]\n\n  // Loop forward through the linked tokens to pass them in order to the\n  // subtokenizer.\n  while (current) {\n    // Find the position of the event for this token.\n    while (events[++startPosition][1] !== current) {\n      // Empty.\n    }\n    startPositions.push(startPosition)\n    if (!current._tokenizer) {\n      stream = context.sliceStream(current)\n      if (!current.next) {\n        stream.push(null)\n      }\n      if (previous) {\n        tokenizer.defineSkip(current.start)\n      }\n      if (current._isInFirstContentOfListItem) {\n        tokenizer._gfmTasklistFirstContentOfListItem = true\n      }\n      tokenizer.write(stream)\n      if (current._isInFirstContentOfListItem) {\n        tokenizer._gfmTasklistFirstContentOfListItem = undefined\n      }\n    }\n\n    // Unravel the next token.\n    previous = current\n    current = current.next\n  }\n\n  // Now, loop back through all events (and linked tokens), to figure out which\n  // parts belong where.\n  current = token\n  while (++index < childEvents.length) {\n    if (\n      // Find a void token that includes a break.\n      childEvents[index][0] === 'exit' &&\n      childEvents[index - 1][0] === 'enter' &&\n      childEvents[index][1].type === childEvents[index - 1][1].type &&\n      childEvents[index][1].start.line !== childEvents[index][1].end.line\n    ) {\n      start = index + 1\n      breaks.push(start)\n      // Help GC.\n      current._tokenizer = undefined\n      current.previous = undefined\n      current = current.next\n    }\n  }\n\n  // Help GC.\n  tokenizer.events = []\n\n  // If there\u2019s one more token (which is the cases for lines that end in an\n  // EOF), that\u2019s perfect: the last point we found starts it.\n  // If there isn\u2019t then make sure any remaining content is added to it.\n  if (current) {\n    // Help GC.\n    current._tokenizer = undefined\n    current.previous = undefined\n  } else {\n    breaks.pop()\n  }\n\n  // Now splice the events from the subtokenizer into the current events,\n  // moving back to front so that splice indices aren\u2019t affected.\n  index = breaks.length\n  while (index--) {\n    const slice = childEvents.slice(breaks[index], breaks[index + 1])\n    const start = startPositions.pop()\n    jumps.unshift([start, start + slice.length - 1])\n    splice(events, start, 2, slice)\n  }\n  index = -1\n  while (++index < jumps.length) {\n    gaps[adjust + jumps[index][0]] = adjust + jumps[index][1]\n    adjust += jumps[index][1] - jumps[index][0] - 1\n  }\n  return gaps\n}\n", "/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding} from 'micromark-util-character'\nimport {subtokenize} from 'micromark-util-subtokenize'\n/**\n * No name because it must not be turned off.\n * @type {Construct}\n */\nexport const content = {\n  tokenize: tokenizeContent,\n  resolve: resolveContent\n}\n\n/** @type {Construct} */\nconst continuationConstruct = {\n  tokenize: tokenizeContinuation,\n  partial: true\n}\n\n/**\n * Content is transparent: it\u2019s parsed right now. That way, definitions are also\n * parsed right now: before text in paragraphs (specifically, media) are parsed.\n *\n * @type {Resolver}\n */\nfunction resolveContent(events) {\n  subtokenize(events)\n  return events\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeContent(effects, ok) {\n  /** @type {Token | undefined} */\n  let previous\n  return chunkStart\n\n  /**\n   * Before a content chunk.\n   *\n   * ```markdown\n   * > | abc\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function chunkStart(code) {\n    effects.enter('content')\n    previous = effects.enter('chunkContent', {\n      contentType: 'content'\n    })\n    return chunkInside(code)\n  }\n\n  /**\n   * In a content chunk.\n   *\n   * ```markdown\n   * > | abc\n   *     ^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function chunkInside(code) {\n    if (code === null) {\n      return contentEnd(code)\n    }\n\n    // To do: in `markdown-rs`, each line is parsed on its own, and everything\n    // is stitched together resolving.\n    if (markdownLineEnding(code)) {\n      return effects.check(\n        continuationConstruct,\n        contentContinue,\n        contentEnd\n      )(code)\n    }\n\n    // Data.\n    effects.consume(code)\n    return chunkInside\n  }\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function contentEnd(code) {\n    effects.exit('chunkContent')\n    effects.exit('content')\n    return ok(code)\n  }\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function contentContinue(code) {\n    effects.consume(code)\n    effects.exit('chunkContent')\n    previous.next = effects.enter('chunkContent', {\n      contentType: 'content',\n      previous\n    })\n    previous = previous.next\n    return chunkInside\n  }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeContinuation(effects, ok, nok) {\n  const self = this\n  return startLookahead\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function startLookahead(code) {\n    effects.exit('chunkContent')\n    effects.enter('lineEnding')\n    effects.consume(code)\n    effects.exit('lineEnding')\n    return factorySpace(effects, prefixed, 'linePrefix')\n  }\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function prefixed(code) {\n    if (code === null || markdownLineEnding(code)) {\n      return nok(code)\n    }\n\n    // Always populated by defaults.\n\n    const tail = self.events[self.events.length - 1]\n    if (\n      !self.parser.constructs.disable.null.includes('codeIndented') &&\n      tail &&\n      tail[1].type === 'linePrefix' &&\n      tail[2].sliceSerialize(tail[1], true).length >= 4\n    ) {\n      return ok(code)\n    }\n    return effects.interrupt(self.parser.constructs.flow, nok, ok)(code)\n  }\n}\n", "/**\n * @typedef {import('micromark-util-types').Effects} Effects\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenType} TokenType\n */\n\nimport {\n  asciiControl,\n  markdownLineEndingOrSpace,\n  markdownLineEnding\n} from 'micromark-util-character'\n/**\n * Parse destinations.\n *\n * ###### Examples\n *\n * ```markdown\n * <a>\n * <a\\>b>\n * <a b>\n * <a)>\n * a\n * a\\)b\n * a(b)c\n * a(b)\n * ```\n *\n * @param {Effects} effects\n *   Context.\n * @param {State} ok\n *   State switched to when successful.\n * @param {State} nok\n *   State switched to when unsuccessful.\n * @param {TokenType} type\n *   Type for whole (`<a>` or `b`).\n * @param {TokenType} literalType\n *   Type when enclosed (`<a>`).\n * @param {TokenType} literalMarkerType\n *   Type for enclosing (`<` and `>`).\n * @param {TokenType} rawType\n *   Type when not enclosed (`b`).\n * @param {TokenType} stringType\n *   Type for the value (`a` or `b`).\n * @param {number | undefined} [max=Infinity]\n *   Depth of nested parens (inclusive).\n * @returns {State}\n *   Start state.\n */ // eslint-disable-next-line max-params\nexport function factoryDestination(\n  effects,\n  ok,\n  nok,\n  type,\n  literalType,\n  literalMarkerType,\n  rawType,\n  stringType,\n  max\n) {\n  const limit = max || Number.POSITIVE_INFINITY\n  let balance = 0\n  return start\n\n  /**\n   * Start of destination.\n   *\n   * ```markdown\n   * > | <aa>\n   *     ^\n   * > | aa\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    if (code === 60) {\n      effects.enter(type)\n      effects.enter(literalType)\n      effects.enter(literalMarkerType)\n      effects.consume(code)\n      effects.exit(literalMarkerType)\n      return enclosedBefore\n    }\n\n    // ASCII control, space, closing paren.\n    if (code === null || code === 32 || code === 41 || asciiControl(code)) {\n      return nok(code)\n    }\n    effects.enter(type)\n    effects.enter(rawType)\n    effects.enter(stringType)\n    effects.enter('chunkString', {\n      contentType: 'string'\n    })\n    return raw(code)\n  }\n\n  /**\n   * After `<`, at an enclosed destination.\n   *\n   * ```markdown\n   * > | <aa>\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function enclosedBefore(code) {\n    if (code === 62) {\n      effects.enter(literalMarkerType)\n      effects.consume(code)\n      effects.exit(literalMarkerType)\n      effects.exit(literalType)\n      effects.exit(type)\n      return ok\n    }\n    effects.enter(stringType)\n    effects.enter('chunkString', {\n      contentType: 'string'\n    })\n    return enclosed(code)\n  }\n\n  /**\n   * In enclosed destination.\n   *\n   * ```markdown\n   * > | <aa>\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function enclosed(code) {\n    if (code === 62) {\n      effects.exit('chunkString')\n      effects.exit(stringType)\n      return enclosedBefore(code)\n    }\n    if (code === null || code === 60 || markdownLineEnding(code)) {\n      return nok(code)\n    }\n    effects.consume(code)\n    return code === 92 ? enclosedEscape : enclosed\n  }\n\n  /**\n   * After `\\`, at a special character.\n   *\n   * ```markdown\n   * > | <a\\*a>\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function enclosedEscape(code) {\n    if (code === 60 || code === 62 || code === 92) {\n      effects.consume(code)\n      return enclosed\n    }\n    return enclosed(code)\n  }\n\n  /**\n   * In raw destination.\n   *\n   * ```markdown\n   * > | aa\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function raw(code) {\n    if (\n      !balance &&\n      (code === null || code === 41 || markdownLineEndingOrSpace(code))\n    ) {\n      effects.exit('chunkString')\n      effects.exit(stringType)\n      effects.exit(rawType)\n      effects.exit(type)\n      return ok(code)\n    }\n    if (balance < limit && code === 40) {\n      effects.consume(code)\n      balance++\n      return raw\n    }\n    if (code === 41) {\n      effects.consume(code)\n      balance--\n      return raw\n    }\n\n    // ASCII control (but *not* `\\0`) and space and `(`.\n    // Note: in `markdown-rs`, `\\0` exists in codes, in `micromark-js` it\n    // doesn\u2019t.\n    if (code === null || code === 32 || code === 40 || asciiControl(code)) {\n      return nok(code)\n    }\n    effects.consume(code)\n    return code === 92 ? rawEscape : raw\n  }\n\n  /**\n   * After `\\`, at special character.\n   *\n   * ```markdown\n   * > | a\\*a\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function rawEscape(code) {\n    if (code === 40 || code === 41 || code === 92) {\n      effects.consume(code)\n      return raw\n    }\n    return raw(code)\n  }\n}\n", "/**\n * @typedef {import('micromark-util-types').Effects} Effects\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').TokenType} TokenType\n */\n\nimport {markdownLineEnding, markdownSpace} from 'micromark-util-character'\n/**\n * Parse labels.\n *\n * > \uD83D\uDC49 **Note**: labels in markdown are capped at 999 characters in the string.\n *\n * ###### Examples\n *\n * ```markdown\n * [a]\n * [a\n * b]\n * [a\\]b]\n * ```\n *\n * @this {TokenizeContext}\n *   Tokenize context.\n * @param {Effects} effects\n *   Context.\n * @param {State} ok\n *   State switched to when successful.\n * @param {State} nok\n *   State switched to when unsuccessful.\n * @param {TokenType} type\n *   Type of the whole label (`[a]`).\n * @param {TokenType} markerType\n *   Type for the markers (`[` and `]`).\n * @param {TokenType} stringType\n *   Type for the identifier (`a`).\n * @returns {State}\n *   Start state.\n */ // eslint-disable-next-line max-params\nexport function factoryLabel(effects, ok, nok, type, markerType, stringType) {\n  const self = this\n  let size = 0\n  /** @type {boolean} */\n  let seen\n  return start\n\n  /**\n   * Start of label.\n   *\n   * ```markdown\n   * > | [a]\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(type)\n    effects.enter(markerType)\n    effects.consume(code)\n    effects.exit(markerType)\n    effects.enter(stringType)\n    return atBreak\n  }\n\n  /**\n   * In label, at something, before something else.\n   *\n   * ```markdown\n   * > | [a]\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function atBreak(code) {\n    if (\n      size > 999 ||\n      code === null ||\n      code === 91 ||\n      (code === 93 && !seen) ||\n      // To do: remove in the future once we\u2019ve switched from\n      // `micromark-extension-footnote` to `micromark-extension-gfm-footnote`,\n      // which doesn\u2019t need this.\n      // Hidden footnotes hook.\n      /* c8 ignore next 3 */\n      (code === 94 &&\n        !size &&\n        '_hiddenFootnoteSupport' in self.parser.constructs)\n    ) {\n      return nok(code)\n    }\n    if (code === 93) {\n      effects.exit(stringType)\n      effects.enter(markerType)\n      effects.consume(code)\n      effects.exit(markerType)\n      effects.exit(type)\n      return ok\n    }\n\n    // To do: indent? Link chunks and EOLs together?\n    if (markdownLineEnding(code)) {\n      effects.enter('lineEnding')\n      effects.consume(code)\n      effects.exit('lineEnding')\n      return atBreak\n    }\n    effects.enter('chunkString', {\n      contentType: 'string'\n    })\n    return labelInside(code)\n  }\n\n  /**\n   * In label, in text.\n   *\n   * ```markdown\n   * > | [a]\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function labelInside(code) {\n    if (\n      code === null ||\n      code === 91 ||\n      code === 93 ||\n      markdownLineEnding(code) ||\n      size++ > 999\n    ) {\n      effects.exit('chunkString')\n      return atBreak(code)\n    }\n    effects.consume(code)\n    if (!seen) seen = !markdownSpace(code)\n    return code === 92 ? labelEscape : labelInside\n  }\n\n  /**\n   * After `\\`, at a special character.\n   *\n   * ```markdown\n   * > | [a\\*a]\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function labelEscape(code) {\n    if (code === 91 || code === 92 || code === 93) {\n      effects.consume(code)\n      size++\n      return labelInside\n    }\n    return labelInside(code)\n  }\n}\n", "/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Effects} Effects\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenType} TokenType\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding} from 'micromark-util-character'\n/**\n * Parse titles.\n *\n * ###### Examples\n *\n * ```markdown\n * \"a\"\n * 'b'\n * (c)\n * \"a\n * b\"\n * 'a\n *     b'\n * (a\\)b)\n * ```\n *\n * @param {Effects} effects\n *   Context.\n * @param {State} ok\n *   State switched to when successful.\n * @param {State} nok\n *   State switched to when unsuccessful.\n * @param {TokenType} type\n *   Type of the whole title (`\"a\"`, `'b'`, `(c)`).\n * @param {TokenType} markerType\n *   Type for the markers (`\"`, `'`, `(`, and `)`).\n * @param {TokenType} stringType\n *   Type for the value (`a`).\n * @returns {State}\n *   Start state.\n */ // eslint-disable-next-line max-params\nexport function factoryTitle(effects, ok, nok, type, markerType, stringType) {\n  /** @type {NonNullable<Code>} */\n  let marker\n  return start\n\n  /**\n   * Start of title.\n   *\n   * ```markdown\n   * > | \"a\"\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    if (code === 34 || code === 39 || code === 40) {\n      effects.enter(type)\n      effects.enter(markerType)\n      effects.consume(code)\n      effects.exit(markerType)\n      marker = code === 40 ? 41 : code\n      return begin\n    }\n    return nok(code)\n  }\n\n  /**\n   * After opening marker.\n   *\n   * This is also used at the closing marker.\n   *\n   * ```markdown\n   * > | \"a\"\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function begin(code) {\n    if (code === marker) {\n      effects.enter(markerType)\n      effects.consume(code)\n      effects.exit(markerType)\n      effects.exit(type)\n      return ok\n    }\n    effects.enter(stringType)\n    return atBreak(code)\n  }\n\n  /**\n   * At something, before something else.\n   *\n   * ```markdown\n   * > | \"a\"\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function atBreak(code) {\n    if (code === marker) {\n      effects.exit(stringType)\n      return begin(marker)\n    }\n    if (code === null) {\n      return nok(code)\n    }\n\n    // Note: blank lines can\u2019t exist in content.\n    if (markdownLineEnding(code)) {\n      // To do: use `space_or_tab_eol_with_options`, connect.\n      effects.enter('lineEnding')\n      effects.consume(code)\n      effects.exit('lineEnding')\n      return factorySpace(effects, atBreak, 'linePrefix')\n    }\n    effects.enter('chunkString', {\n      contentType: 'string'\n    })\n    return inside(code)\n  }\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function inside(code) {\n    if (code === marker || code === null || markdownLineEnding(code)) {\n      effects.exit('chunkString')\n      return atBreak(code)\n    }\n    effects.consume(code)\n    return code === 92 ? escape : inside\n  }\n\n  /**\n   * After `\\`, at a special character.\n   *\n   * ```markdown\n   * > | \"a\\*b\"\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function escape(code) {\n    if (code === marker || code === 92) {\n      effects.consume(code)\n      return inside\n    }\n    return inside(code)\n  }\n}\n", "/**\n * @typedef {import('micromark-util-types').Effects} Effects\n * @typedef {import('micromark-util-types').State} State\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding, markdownSpace} from 'micromark-util-character'\n/**\n * Parse spaces and tabs.\n *\n * There is no `nok` parameter:\n *\n * *   line endings or spaces in markdown are often optional, in which case this\n *     factory can be used and `ok` will be switched to whether spaces were found\n *     or not\n * *   one line ending or space can be detected with\n *     `markdownLineEndingOrSpace(code)` right before using `factoryWhitespace`\n *\n * @param {Effects} effects\n *   Context.\n * @param {State} ok\n *   State switched to when successful.\n * @returns {State}\n *   Start state.\n */\nexport function factoryWhitespace(effects, ok) {\n  /** @type {boolean} */\n  let seen\n  return start\n\n  /** @type {State} */\n  function start(code) {\n    if (markdownLineEnding(code)) {\n      effects.enter('lineEnding')\n      effects.consume(code)\n      effects.exit('lineEnding')\n      seen = true\n      return start\n    }\n    if (markdownSpace(code)) {\n      return factorySpace(\n        effects,\n        start,\n        seen ? 'linePrefix' : 'lineSuffix'\n      )(code)\n    }\n    return ok(code)\n  }\n}\n", "/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {factoryDestination} from 'micromark-factory-destination'\nimport {factoryLabel} from 'micromark-factory-label'\nimport {factorySpace} from 'micromark-factory-space'\nimport {factoryTitle} from 'micromark-factory-title'\nimport {factoryWhitespace} from 'micromark-factory-whitespace'\nimport {\n  markdownLineEnding,\n  markdownLineEndingOrSpace,\n  markdownSpace\n} from 'micromark-util-character'\nimport {normalizeIdentifier} from 'micromark-util-normalize-identifier'\n/** @type {Construct} */\nexport const definition = {\n  name: 'definition',\n  tokenize: tokenizeDefinition\n}\n\n/** @type {Construct} */\nconst titleBefore = {\n  tokenize: tokenizeTitleBefore,\n  partial: true\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeDefinition(effects, ok, nok) {\n  const self = this\n  /** @type {string} */\n  let identifier\n  return start\n\n  /**\n   * At start of a definition.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    // Do not interrupt paragraphs (but do follow definitions).\n    // To do: do `interrupt` the way `markdown-rs` does.\n    // To do: parse whitespace the way `markdown-rs` does.\n    effects.enter('definition')\n    return before(code)\n  }\n\n  /**\n   * After optional whitespace, at `[`.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function before(code) {\n    // To do: parse whitespace the way `markdown-rs` does.\n\n    return factoryLabel.call(\n      self,\n      effects,\n      labelAfter,\n      // Note: we don\u2019t need to reset the way `markdown-rs` does.\n      nok,\n      'definitionLabel',\n      'definitionLabelMarker',\n      'definitionLabelString'\n    )(code)\n  }\n\n  /**\n   * After label.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function labelAfter(code) {\n    identifier = normalizeIdentifier(\n      self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1)\n    )\n    if (code === 58) {\n      effects.enter('definitionMarker')\n      effects.consume(code)\n      effects.exit('definitionMarker')\n      return markerAfter\n    }\n    return nok(code)\n  }\n\n  /**\n   * After marker.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function markerAfter(code) {\n    // Note: whitespace is optional.\n    return markdownLineEndingOrSpace(code)\n      ? factoryWhitespace(effects, destinationBefore)(code)\n      : destinationBefore(code)\n  }\n\n  /**\n   * Before destination.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function destinationBefore(code) {\n    return factoryDestination(\n      effects,\n      destinationAfter,\n      // Note: we don\u2019t need to reset the way `markdown-rs` does.\n      nok,\n      'definitionDestination',\n      'definitionDestinationLiteral',\n      'definitionDestinationLiteralMarker',\n      'definitionDestinationRaw',\n      'definitionDestinationString'\n    )(code)\n  }\n\n  /**\n   * After destination.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function destinationAfter(code) {\n    return effects.attempt(titleBefore, after, after)(code)\n  }\n\n  /**\n   * After definition.\n   *\n   * ```markdown\n   * > | [a]: b\n   *           ^\n   * > | [a]: b \"c\"\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    return markdownSpace(code)\n      ? factorySpace(effects, afterWhitespace, 'whitespace')(code)\n      : afterWhitespace(code)\n  }\n\n  /**\n   * After definition, after optional whitespace.\n   *\n   * ```markdown\n   * > | [a]: b\n   *           ^\n   * > | [a]: b \"c\"\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function afterWhitespace(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit('definition')\n\n      // Note: we don\u2019t care about uniqueness.\n      // It\u2019s likely that that doesn\u2019t happen very frequently.\n      // It is more likely that it wastes precious time.\n      self.parser.defined.push(identifier)\n\n      // To do: `markdown-rs` interrupt.\n      // // You\u2019d be interrupting.\n      // tokenizer.interrupt = true\n      return ok(code)\n    }\n    return nok(code)\n  }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeTitleBefore(effects, ok, nok) {\n  return titleBefore\n\n  /**\n   * After destination, at whitespace.\n   *\n   * ```markdown\n   * > | [a]: b\n   *           ^\n   * > | [a]: b \"c\"\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function titleBefore(code) {\n    return markdownLineEndingOrSpace(code)\n      ? factoryWhitespace(effects, beforeMarker)(code)\n      : nok(code)\n  }\n\n  /**\n   * At title.\n   *\n   * ```markdown\n   *   | [a]: b\n   * > | \"c\"\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function beforeMarker(code) {\n    return factoryTitle(\n      effects,\n      titleAfter,\n      nok,\n      'definitionTitle',\n      'definitionTitleMarker',\n      'definitionTitleString'\n    )(code)\n  }\n\n  /**\n   * After title.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function titleAfter(code) {\n    return markdownSpace(code)\n      ? factorySpace(effects, titleAfterOptionalWhitespace, 'whitespace')(code)\n      : titleAfterOptionalWhitespace(code)\n  }\n\n  /**\n   * After title, after optional whitespace.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function titleAfterOptionalWhitespace(code) {\n    return code === null || markdownLineEnding(code) ? ok(code) : nok(code)\n  }\n}\n", "/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {markdownLineEnding} from 'micromark-util-character'\n/** @type {Construct} */\nexport const hardBreakEscape = {\n  name: 'hardBreakEscape',\n  tokenize: tokenizeHardBreakEscape\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeHardBreakEscape(effects, ok, nok) {\n  return start\n\n  /**\n   * Start of a hard break (escape).\n   *\n   * ```markdown\n   * > | a\\\n   *      ^\n   *   | b\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter('hardBreakEscape')\n    effects.consume(code)\n    return after\n  }\n\n  /**\n   * After `\\`, at eol.\n   *\n   * ```markdown\n   * > | a\\\n   *       ^\n   *   | b\n   * ```\n   *\n   *  @type {State}\n   */\n  function after(code) {\n    if (markdownLineEnding(code)) {\n      effects.exit('hardBreakEscape')\n      return ok(code)\n    }\n    return nok(code)\n  }\n}\n", "/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {\n  markdownLineEnding,\n  markdownLineEndingOrSpace,\n  markdownSpace\n} from 'micromark-util-character'\nimport {splice} from 'micromark-util-chunked'\n/** @type {Construct} */\nexport const headingAtx = {\n  name: 'headingAtx',\n  tokenize: tokenizeHeadingAtx,\n  resolve: resolveHeadingAtx\n}\n\n/** @type {Resolver} */\nfunction resolveHeadingAtx(events, context) {\n  let contentEnd = events.length - 2\n  let contentStart = 3\n  /** @type {Token} */\n  let content\n  /** @type {Token} */\n  let text\n\n  // Prefix whitespace, part of the opening.\n  if (events[contentStart][1].type === 'whitespace') {\n    contentStart += 2\n  }\n\n  // Suffix whitespace, part of the closing.\n  if (\n    contentEnd - 2 > contentStart &&\n    events[contentEnd][1].type === 'whitespace'\n  ) {\n    contentEnd -= 2\n  }\n  if (\n    events[contentEnd][1].type === 'atxHeadingSequence' &&\n    (contentStart === contentEnd - 1 ||\n      (contentEnd - 4 > contentStart &&\n        events[contentEnd - 2][1].type === 'whitespace'))\n  ) {\n    contentEnd -= contentStart + 1 === contentEnd ? 2 : 4\n  }\n  if (contentEnd > contentStart) {\n    content = {\n      type: 'atxHeadingText',\n      start: events[contentStart][1].start,\n      end: events[contentEnd][1].end\n    }\n    text = {\n      type: 'chunkText',\n      start: events[contentStart][1].start,\n      end: events[contentEnd][1].end,\n      contentType: 'text'\n    }\n    splice(events, contentStart, contentEnd - contentStart + 1, [\n      ['enter', content, context],\n      ['enter', text, context],\n      ['exit', text, context],\n      ['exit', content, context]\n    ])\n  }\n  return events\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeHeadingAtx(effects, ok, nok) {\n  let size = 0\n  return start\n\n  /**\n   * Start of a heading (atx).\n   *\n   * ```markdown\n   * > | ## aa\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    // To do: parse indent like `markdown-rs`.\n    effects.enter('atxHeading')\n    return before(code)\n  }\n\n  /**\n   * After optional whitespace, at `#`.\n   *\n   * ```markdown\n   * > | ## aa\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function before(code) {\n    effects.enter('atxHeadingSequence')\n    return sequenceOpen(code)\n  }\n\n  /**\n   * In opening sequence.\n   *\n   * ```markdown\n   * > | ## aa\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function sequenceOpen(code) {\n    if (code === 35 && size++ < 6) {\n      effects.consume(code)\n      return sequenceOpen\n    }\n\n    // Always at least one `#`.\n    if (code === null || markdownLineEndingOrSpace(code)) {\n      effects.exit('atxHeadingSequence')\n      return atBreak(code)\n    }\n    return nok(code)\n  }\n\n  /**\n   * After something, before something else.\n   *\n   * ```markdown\n   * > | ## aa\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function atBreak(code) {\n    if (code === 35) {\n      effects.enter('atxHeadingSequence')\n      return sequenceFurther(code)\n    }\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit('atxHeading')\n      // To do: interrupt like `markdown-rs`.\n      // // Feel free to interrupt.\n      // tokenizer.interrupt = false\n      return ok(code)\n    }\n    if (markdownSpace(code)) {\n      return factorySpace(effects, atBreak, 'whitespace')(code)\n    }\n\n    // To do: generate `data` tokens, add the `text` token later.\n    // Needs edit map, see: `markdown.rs`.\n    effects.enter('atxHeadingText')\n    return data(code)\n  }\n\n  /**\n   * In further sequence (after whitespace).\n   *\n   * Could be normal \u201Cvisible\u201D hashes in the heading or a final sequence.\n   *\n   * ```markdown\n   * > | ## aa ##\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function sequenceFurther(code) {\n    if (code === 35) {\n      effects.consume(code)\n      return sequenceFurther\n    }\n    effects.exit('atxHeadingSequence')\n    return atBreak(code)\n  }\n\n  /**\n   * In text.\n   *\n   * ```markdown\n   * > | ## aa\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function data(code) {\n    if (code === null || code === 35 || markdownLineEndingOrSpace(code)) {\n      effects.exit('atxHeadingText')\n      return atBreak(code)\n    }\n    effects.consume(code)\n    return data\n  }\n}\n", "/**\n * List of lowercase HTML \u201Cblock\u201D tag names.\n *\n * The list, when parsing HTML (flow), results in more relaxed rules (condition\n * 6).\n * Because they are known blocks, the HTML-like syntax doesn\u2019t have to be\n * strictly parsed.\n * For tag names not in this list, a more strict algorithm (condition 7) is used\n * to detect whether the HTML-like syntax is seen as HTML (flow) or not.\n *\n * This is copied from:\n * <https://spec.commonmark.org/0.30/#html-blocks>.\n *\n * > \uD83D\uDC49 **Note**: `search` was added in `CommonMark@0.31`.\n */\nexport const htmlBlockNames = [\n  'address',\n  'article',\n  'aside',\n  'base',\n  'basefont',\n  'blockquote',\n  'body',\n  'caption',\n  'center',\n  'col',\n  'colgroup',\n  'dd',\n  'details',\n  'dialog',\n  'dir',\n  'div',\n  'dl',\n  'dt',\n  'fieldset',\n  'figcaption',\n  'figure',\n  'footer',\n  'form',\n  'frame',\n  'frameset',\n  'h1',\n  'h2',\n  'h3',\n  'h4',\n  'h5',\n  'h6',\n  'head',\n  'header',\n  'hr',\n  'html',\n  'iframe',\n  'legend',\n  'li',\n  'link',\n  'main',\n  'menu',\n  'menuitem',\n  'nav',\n  'noframes',\n  'ol',\n  'optgroup',\n  'option',\n  'p',\n  'param',\n  'search',\n  'section',\n  'summary',\n  'table',\n  'tbody',\n  'td',\n  'tfoot',\n  'th',\n  'thead',\n  'title',\n  'tr',\n  'track',\n  'ul'\n]\n\n/**\n * List of lowercase HTML \u201Craw\u201D tag names.\n *\n * The list, when parsing HTML (flow), results in HTML that can include lines\n * without exiting, until a closing tag also in this list is found (condition\n * 1).\n *\n * This module is copied from:\n * <https://spec.commonmark.org/0.30/#html-blocks>.\n *\n * > \uD83D\uDC49 **Note**: `textarea` was added in `CommonMark@0.30`.\n */\nexport const htmlRawNames = ['pre', 'script', 'style', 'textarea']\n", "/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {\n  asciiAlpha,\n  asciiAlphanumeric,\n  markdownLineEnding,\n  markdownLineEndingOrSpace,\n  markdownSpace\n} from 'micromark-util-character'\nimport {htmlBlockNames, htmlRawNames} from 'micromark-util-html-tag-name'\nimport {blankLine} from './blank-line.js'\n\n/** @type {Construct} */\nexport const htmlFlow = {\n  name: 'htmlFlow',\n  tokenize: tokenizeHtmlFlow,\n  resolveTo: resolveToHtmlFlow,\n  concrete: true\n}\n\n/** @type {Construct} */\nconst blankLineBefore = {\n  tokenize: tokenizeBlankLineBefore,\n  partial: true\n}\nconst nonLazyContinuationStart = {\n  tokenize: tokenizeNonLazyContinuationStart,\n  partial: true\n}\n\n/** @type {Resolver} */\nfunction resolveToHtmlFlow(events) {\n  let index = events.length\n  while (index--) {\n    if (events[index][0] === 'enter' && events[index][1].type === 'htmlFlow') {\n      break\n    }\n  }\n  if (index > 1 && events[index - 2][1].type === 'linePrefix') {\n    // Add the prefix start to the HTML token.\n    events[index][1].start = events[index - 2][1].start\n    // Add the prefix start to the HTML line token.\n    events[index + 1][1].start = events[index - 2][1].start\n    // Remove the line prefix.\n    events.splice(index - 2, 2)\n  }\n  return events\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeHtmlFlow(effects, ok, nok) {\n  const self = this\n  /** @type {number} */\n  let marker\n  /** @type {boolean} */\n  let closingTag\n  /** @type {string} */\n  let buffer\n  /** @type {number} */\n  let index\n  /** @type {Code} */\n  let markerB\n  return start\n\n  /**\n   * Start of HTML (flow).\n   *\n   * ```markdown\n   * > | <x />\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    // To do: parse indent like `markdown-rs`.\n    return before(code)\n  }\n\n  /**\n   * At `<`, after optional whitespace.\n   *\n   * ```markdown\n   * > | <x />\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function before(code) {\n    effects.enter('htmlFlow')\n    effects.enter('htmlFlowData')\n    effects.consume(code)\n    return open\n  }\n\n  /**\n   * After `<`, at tag name or other stuff.\n   *\n   * ```markdown\n   * > | <x />\n   *      ^\n   * > | <!doctype>\n   *      ^\n   * > | <!--xxx-->\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function open(code) {\n    if (code === 33) {\n      effects.consume(code)\n      return declarationOpen\n    }\n    if (code === 47) {\n      effects.consume(code)\n      closingTag = true\n      return tagCloseStart\n    }\n    if (code === 63) {\n      effects.consume(code)\n      marker = 3\n      // To do:\n      // tokenizer.concrete = true\n      // To do: use `markdown-rs` style interrupt.\n      // While we\u2019re in an instruction instead of a declaration, we\u2019re on a `?`\n      // right now, so we do need to search for `>`, similar to declarations.\n      return self.interrupt ? ok : continuationDeclarationInside\n    }\n\n    // ASCII alphabetical.\n    if (asciiAlpha(code)) {\n      effects.consume(code)\n      // @ts-expect-error: not null.\n      buffer = String.fromCharCode(code)\n      return tagName\n    }\n    return nok(code)\n  }\n\n  /**\n   * After `<!`, at declaration, comment, or CDATA.\n   *\n   * ```markdown\n   * > | <!doctype>\n   *       ^\n   * > | <!--xxx-->\n   *       ^\n   * > | <![CDATA[>&<]]>\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function declarationOpen(code) {\n    if (code === 45) {\n      effects.consume(code)\n      marker = 2\n      return commentOpenInside\n    }\n    if (code === 91) {\n      effects.consume(code)\n      marker = 5\n      index = 0\n      return cdataOpenInside\n    }\n\n    // ASCII alphabetical.\n    if (asciiAlpha(code)) {\n      effects.consume(code)\n      marker = 4\n      // // Do not form containers.\n      // tokenizer.concrete = true\n      return self.interrupt ? ok : continuationDeclarationInside\n    }\n    return nok(code)\n  }\n\n  /**\n   * After `<!-`, inside a comment, at another `-`.\n   *\n   * ```markdown\n   * > | <!--xxx-->\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function commentOpenInside(code) {\n    if (code === 45) {\n      effects.consume(code)\n      // // Do not form containers.\n      // tokenizer.concrete = true\n      return self.interrupt ? ok : continuationDeclarationInside\n    }\n    return nok(code)\n  }\n\n  /**\n   * After `<![`, inside CDATA, expecting `CDATA[`.\n   *\n   * ```markdown\n   * > | <![CDATA[>&<]]>\n   *        ^^^^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function cdataOpenInside(code) {\n    const value = 'CDATA['\n    if (code === value.charCodeAt(index++)) {\n      effects.consume(code)\n      if (index === value.length) {\n        // // Do not form containers.\n        // tokenizer.concrete = true\n        return self.interrupt ? ok : continuation\n      }\n      return cdataOpenInside\n    }\n    return nok(code)\n  }\n\n  /**\n   * After `</`, in closing tag, at tag name.\n   *\n   * ```markdown\n   * > | </x>\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagCloseStart(code) {\n    if (asciiAlpha(code)) {\n      effects.consume(code)\n      // @ts-expect-error: not null.\n      buffer = String.fromCharCode(code)\n      return tagName\n    }\n    return nok(code)\n  }\n\n  /**\n   * In tag name.\n   *\n   * ```markdown\n   * > | <ab>\n   *      ^^\n   * > | </ab>\n   *       ^^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagName(code) {\n    if (\n      code === null ||\n      code === 47 ||\n      code === 62 ||\n      markdownLineEndingOrSpace(code)\n    ) {\n      const slash = code === 47\n      const name = buffer.toLowerCase()\n      if (!slash && !closingTag && htmlRawNames.includes(name)) {\n        marker = 1\n        // // Do not form containers.\n        // tokenizer.concrete = true\n        return self.interrupt ? ok(code) : continuation(code)\n      }\n      if (htmlBlockNames.includes(buffer.toLowerCase())) {\n        marker = 6\n        if (slash) {\n          effects.consume(code)\n          return basicSelfClosing\n        }\n\n        // // Do not form containers.\n        // tokenizer.concrete = true\n        return self.interrupt ? ok(code) : continuation(code)\n      }\n      marker = 7\n      // Do not support complete HTML when interrupting.\n      return self.interrupt && !self.parser.lazy[self.now().line]\n        ? nok(code)\n        : closingTag\n        ? completeClosingTagAfter(code)\n        : completeAttributeNameBefore(code)\n    }\n\n    // ASCII alphanumerical and `-`.\n    if (code === 45 || asciiAlphanumeric(code)) {\n      effects.consume(code)\n      buffer += String.fromCharCode(code)\n      return tagName\n    }\n    return nok(code)\n  }\n\n  /**\n   * After closing slash of a basic tag name.\n   *\n   * ```markdown\n   * > | <div/>\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function basicSelfClosing(code) {\n    if (code === 62) {\n      effects.consume(code)\n      // // Do not form containers.\n      // tokenizer.concrete = true\n      return self.interrupt ? ok : continuation\n    }\n    return nok(code)\n  }\n\n  /**\n   * After closing slash of a complete tag name.\n   *\n   * ```markdown\n   * > | <x/>\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeClosingTagAfter(code) {\n    if (markdownSpace(code)) {\n      effects.consume(code)\n      return completeClosingTagAfter\n    }\n    return completeEnd(code)\n  }\n\n  /**\n   * At an attribute name.\n   *\n   * At first, this state is used after a complete tag name, after whitespace,\n   * where it expects optional attributes or the end of the tag.\n   * It is also reused after attributes, when expecting more optional\n   * attributes.\n   *\n   * ```markdown\n   * > | <a />\n   *        ^\n   * > | <a :b>\n   *        ^\n   * > | <a _b>\n   *        ^\n   * > | <a b>\n   *        ^\n   * > | <a >\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeNameBefore(code) {\n    if (code === 47) {\n      effects.consume(code)\n      return completeEnd\n    }\n\n    // ASCII alphanumerical and `:` and `_`.\n    if (code === 58 || code === 95 || asciiAlpha(code)) {\n      effects.consume(code)\n      return completeAttributeName\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code)\n      return completeAttributeNameBefore\n    }\n    return completeEnd(code)\n  }\n\n  /**\n   * In attribute name.\n   *\n   * ```markdown\n   * > | <a :b>\n   *         ^\n   * > | <a _b>\n   *         ^\n   * > | <a b>\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeName(code) {\n    // ASCII alphanumerical and `-`, `.`, `:`, and `_`.\n    if (\n      code === 45 ||\n      code === 46 ||\n      code === 58 ||\n      code === 95 ||\n      asciiAlphanumeric(code)\n    ) {\n      effects.consume(code)\n      return completeAttributeName\n    }\n    return completeAttributeNameAfter(code)\n  }\n\n  /**\n   * After attribute name, at an optional initializer, the end of the tag, or\n   * whitespace.\n   *\n   * ```markdown\n   * > | <a b>\n   *         ^\n   * > | <a b=c>\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeNameAfter(code) {\n    if (code === 61) {\n      effects.consume(code)\n      return completeAttributeValueBefore\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code)\n      return completeAttributeNameAfter\n    }\n    return completeAttributeNameBefore(code)\n  }\n\n  /**\n   * Before unquoted, double quoted, or single quoted attribute value, allowing\n   * whitespace.\n   *\n   * ```markdown\n   * > | <a b=c>\n   *          ^\n   * > | <a b=\"c\">\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeValueBefore(code) {\n    if (\n      code === null ||\n      code === 60 ||\n      code === 61 ||\n      code === 62 ||\n      code === 96\n    ) {\n      return nok(code)\n    }\n    if (code === 34 || code === 39) {\n      effects.consume(code)\n      markerB = code\n      return completeAttributeValueQuoted\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code)\n      return completeAttributeValueBefore\n    }\n    return completeAttributeValueUnquoted(code)\n  }\n\n  /**\n   * In double or single quoted attribute value.\n   *\n   * ```markdown\n   * > | <a b=\"c\">\n   *           ^\n   * > | <a b='c'>\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeValueQuoted(code) {\n    if (code === markerB) {\n      effects.consume(code)\n      markerB = null\n      return completeAttributeValueQuotedAfter\n    }\n    if (code === null || markdownLineEnding(code)) {\n      return nok(code)\n    }\n    effects.consume(code)\n    return completeAttributeValueQuoted\n  }\n\n  /**\n   * In unquoted attribute value.\n   *\n   * ```markdown\n   * > | <a b=c>\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeValueUnquoted(code) {\n    if (\n      code === null ||\n      code === 34 ||\n      code === 39 ||\n      code === 47 ||\n      code === 60 ||\n      code === 61 ||\n      code === 62 ||\n      code === 96 ||\n      markdownLineEndingOrSpace(code)\n    ) {\n      return completeAttributeNameAfter(code)\n    }\n    effects.consume(code)\n    return completeAttributeValueUnquoted\n  }\n\n  /**\n   * After double or single quoted attribute value, before whitespace or the\n   * end of the tag.\n   *\n   * ```markdown\n   * > | <a b=\"c\">\n   *            ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeValueQuotedAfter(code) {\n    if (code === 47 || code === 62 || markdownSpace(code)) {\n      return completeAttributeNameBefore(code)\n    }\n    return nok(code)\n  }\n\n  /**\n   * In certain circumstances of a complete tag where only an `>` is allowed.\n   *\n   * ```markdown\n   * > | <a b=\"c\">\n   *             ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeEnd(code) {\n    if (code === 62) {\n      effects.consume(code)\n      return completeAfter\n    }\n    return nok(code)\n  }\n\n  /**\n   * After `>` in a complete tag.\n   *\n   * ```markdown\n   * > | <x>\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAfter(code) {\n    if (code === null || markdownLineEnding(code)) {\n      // // Do not form containers.\n      // tokenizer.concrete = true\n      return continuation(code)\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code)\n      return completeAfter\n    }\n    return nok(code)\n  }\n\n  /**\n   * In continuation of any HTML kind.\n   *\n   * ```markdown\n   * > | <!--xxx-->\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuation(code) {\n    if (code === 45 && marker === 2) {\n      effects.consume(code)\n      return continuationCommentInside\n    }\n    if (code === 60 && marker === 1) {\n      effects.consume(code)\n      return continuationRawTagOpen\n    }\n    if (code === 62 && marker === 4) {\n      effects.consume(code)\n      return continuationClose\n    }\n    if (code === 63 && marker === 3) {\n      effects.consume(code)\n      return continuationDeclarationInside\n    }\n    if (code === 93 && marker === 5) {\n      effects.consume(code)\n      return continuationCdataInside\n    }\n    if (markdownLineEnding(code) && (marker === 6 || marker === 7)) {\n      effects.exit('htmlFlowData')\n      return effects.check(\n        blankLineBefore,\n        continuationAfter,\n        continuationStart\n      )(code)\n    }\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit('htmlFlowData')\n      return continuationStart(code)\n    }\n    effects.consume(code)\n    return continuation\n  }\n\n  /**\n   * In continuation, at eol.\n   *\n   * ```markdown\n   * > | <x>\n   *        ^\n   *   | asd\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationStart(code) {\n    return effects.check(\n      nonLazyContinuationStart,\n      continuationStartNonLazy,\n      continuationAfter\n    )(code)\n  }\n\n  /**\n   * In continuation, at eol, before non-lazy content.\n   *\n   * ```markdown\n   * > | <x>\n   *        ^\n   *   | asd\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationStartNonLazy(code) {\n    effects.enter('lineEnding')\n    effects.consume(code)\n    effects.exit('lineEnding')\n    return continuationBefore\n  }\n\n  /**\n   * In continuation, before non-lazy content.\n   *\n   * ```markdown\n   *   | <x>\n   * > | asd\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationBefore(code) {\n    if (code === null || markdownLineEnding(code)) {\n      return continuationStart(code)\n    }\n    effects.enter('htmlFlowData')\n    return continuation(code)\n  }\n\n  /**\n   * In comment continuation, after one `-`, expecting another.\n   *\n   * ```markdown\n   * > | <!--xxx-->\n   *             ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationCommentInside(code) {\n    if (code === 45) {\n      effects.consume(code)\n      return continuationDeclarationInside\n    }\n    return continuation(code)\n  }\n\n  /**\n   * In raw continuation, after `<`, at `/`.\n   *\n   * ```markdown\n   * > | <script>console.log(1)</script>\n   *                            ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationRawTagOpen(code) {\n    if (code === 47) {\n      effects.consume(code)\n      buffer = ''\n      return continuationRawEndTag\n    }\n    return continuation(code)\n  }\n\n  /**\n   * In raw continuation, after `</`, in a raw tag name.\n   *\n   * ```markdown\n   * > | <script>console.log(1)</script>\n   *                             ^^^^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationRawEndTag(code) {\n    if (code === 62) {\n      const name = buffer.toLowerCase()\n      if (htmlRawNames.includes(name)) {\n        effects.consume(code)\n        return continuationClose\n      }\n      return continuation(code)\n    }\n    if (asciiAlpha(code) && buffer.length < 8) {\n      effects.consume(code)\n      // @ts-expect-error: not null.\n      buffer += String.fromCharCode(code)\n      return continuationRawEndTag\n    }\n    return continuation(code)\n  }\n\n  /**\n   * In cdata continuation, after `]`, expecting `]>`.\n   *\n   * ```markdown\n   * > | <![CDATA[>&<]]>\n   *                  ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationCdataInside(code) {\n    if (code === 93) {\n      effects.consume(code)\n      return continuationDeclarationInside\n    }\n    return continuation(code)\n  }\n\n  /**\n   * In declaration or instruction continuation, at `>`.\n   *\n   * ```markdown\n   * > | <!-->\n   *         ^\n   * > | <?>\n   *       ^\n   * > | <!q>\n   *        ^\n   * > | <!--ab-->\n   *             ^\n   * > | <![CDATA[>&<]]>\n   *                   ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationDeclarationInside(code) {\n    if (code === 62) {\n      effects.consume(code)\n      return continuationClose\n    }\n\n    // More dashes.\n    if (code === 45 && marker === 2) {\n      effects.consume(code)\n      return continuationDeclarationInside\n    }\n    return continuation(code)\n  }\n\n  /**\n   * In closed continuation: everything we get until the eol/eof is part of it.\n   *\n   * ```markdown\n   * > | <!doctype>\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationClose(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit('htmlFlowData')\n      return continuationAfter(code)\n    }\n    effects.consume(code)\n    return continuationClose\n  }\n\n  /**\n   * Done.\n   *\n   * ```markdown\n   * > | <!doctype>\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationAfter(code) {\n    effects.exit('htmlFlow')\n    // // Feel free to interrupt.\n    // tokenizer.interrupt = false\n    // // No longer concrete.\n    // tokenizer.concrete = false\n    return ok(code)\n  }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeNonLazyContinuationStart(effects, ok, nok) {\n  const self = this\n  return start\n\n  /**\n   * At eol, before continuation.\n   *\n   * ```markdown\n   * > | * ```js\n   *            ^\n   *   | b\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    if (markdownLineEnding(code)) {\n      effects.enter('lineEnding')\n      effects.consume(code)\n      effects.exit('lineEnding')\n      return after\n    }\n    return nok(code)\n  }\n\n  /**\n   * A continuation.\n   *\n   * ```markdown\n   *   | * ```js\n   * > | b\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    return self.parser.lazy[self.now().line] ? nok(code) : ok(code)\n  }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeBlankLineBefore(effects, ok, nok) {\n  return start\n\n  /**\n   * Before eol, expecting blank line.\n   *\n   * ```markdown\n   * > | <div>\n   *          ^\n   *   |\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter('lineEnding')\n    effects.consume(code)\n    effects.exit('lineEnding')\n    return effects.attempt(blankLine, ok, nok)\n  }\n}\n", "/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {\n  asciiAlpha,\n  asciiAlphanumeric,\n  markdownLineEnding,\n  markdownLineEndingOrSpace,\n  markdownSpace\n} from 'micromark-util-character'\n/** @type {Construct} */\nexport const htmlText = {\n  name: 'htmlText',\n  tokenize: tokenizeHtmlText\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeHtmlText(effects, ok, nok) {\n  const self = this\n  /** @type {NonNullable<Code> | undefined} */\n  let marker\n  /** @type {number} */\n  let index\n  /** @type {State} */\n  let returnState\n  return start\n\n  /**\n   * Start of HTML (text).\n   *\n   * ```markdown\n   * > | a <b> c\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter('htmlText')\n    effects.enter('htmlTextData')\n    effects.consume(code)\n    return open\n  }\n\n  /**\n   * After `<`, at tag name or other stuff.\n   *\n   * ```markdown\n   * > | a <b> c\n   *        ^\n   * > | a <!doctype> c\n   *        ^\n   * > | a <!--b--> c\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function open(code) {\n    if (code === 33) {\n      effects.consume(code)\n      return declarationOpen\n    }\n    if (code === 47) {\n      effects.consume(code)\n      return tagCloseStart\n    }\n    if (code === 63) {\n      effects.consume(code)\n      return instruction\n    }\n\n    // ASCII alphabetical.\n    if (asciiAlpha(code)) {\n      effects.consume(code)\n      return tagOpen\n    }\n    return nok(code)\n  }\n\n  /**\n   * After `<!`, at declaration, comment, or CDATA.\n   *\n   * ```markdown\n   * > | a <!doctype> c\n   *         ^\n   * > | a <!--b--> c\n   *         ^\n   * > | a <![CDATA[>&<]]> c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function declarationOpen(code) {\n    if (code === 45) {\n      effects.consume(code)\n      return commentOpenInside\n    }\n    if (code === 91) {\n      effects.consume(code)\n      index = 0\n      return cdataOpenInside\n    }\n    if (asciiAlpha(code)) {\n      effects.consume(code)\n      return declaration\n    }\n    return nok(code)\n  }\n\n  /**\n   * In a comment, after `<!-`, at another `-`.\n   *\n   * ```markdown\n   * > | a <!--b--> c\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function commentOpenInside(code) {\n    if (code === 45) {\n      effects.consume(code)\n      return commentEnd\n    }\n    return nok(code)\n  }\n\n  /**\n   * In comment.\n   *\n   * ```markdown\n   * > | a <!--b--> c\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function comment(code) {\n    if (code === null) {\n      return nok(code)\n    }\n    if (code === 45) {\n      effects.consume(code)\n      return commentClose\n    }\n    if (markdownLineEnding(code)) {\n      returnState = comment\n      return lineEndingBefore(code)\n    }\n    effects.consume(code)\n    return comment\n  }\n\n  /**\n   * In comment, after `-`.\n   *\n   * ```markdown\n   * > | a <!--b--> c\n   *             ^\n   * ```\n   *\n   * @type {State}\n   */\n  function commentClose(code) {\n    if (code === 45) {\n      effects.consume(code)\n      return commentEnd\n    }\n    return comment(code)\n  }\n\n  /**\n   * In comment, after `--`.\n   *\n   * ```markdown\n   * > | a <!--b--> c\n   *              ^\n   * ```\n   *\n   * @type {State}\n   */\n  function commentEnd(code) {\n    return code === 62\n      ? end(code)\n      : code === 45\n      ? commentClose(code)\n      : comment(code)\n  }\n\n  /**\n   * After `<![`, in CDATA, expecting `CDATA[`.\n   *\n   * ```markdown\n   * > | a <![CDATA[>&<]]> b\n   *          ^^^^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function cdataOpenInside(code) {\n    const value = 'CDATA['\n    if (code === value.charCodeAt(index++)) {\n      effects.consume(code)\n      return index === value.length ? cdata : cdataOpenInside\n    }\n    return nok(code)\n  }\n\n  /**\n   * In CDATA.\n   *\n   * ```markdown\n   * > | a <![CDATA[>&<]]> b\n   *                ^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function cdata(code) {\n    if (code === null) {\n      return nok(code)\n    }\n    if (code === 93) {\n      effects.consume(code)\n      return cdataClose\n    }\n    if (markdownLineEnding(code)) {\n      returnState = cdata\n      return lineEndingBefore(code)\n    }\n    effects.consume(code)\n    return cdata\n  }\n\n  /**\n   * In CDATA, after `]`, at another `]`.\n   *\n   * ```markdown\n   * > | a <![CDATA[>&<]]> b\n   *                    ^\n   * ```\n   *\n   * @type {State}\n   */\n  function cdataClose(code) {\n    if (code === 93) {\n      effects.consume(code)\n      return cdataEnd\n    }\n    return cdata(code)\n  }\n\n  /**\n   * In CDATA, after `]]`, at `>`.\n   *\n   * ```markdown\n   * > | a <![CDATA[>&<]]> b\n   *                     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function cdataEnd(code) {\n    if (code === 62) {\n      return end(code)\n    }\n    if (code === 93) {\n      effects.consume(code)\n      return cdataEnd\n    }\n    return cdata(code)\n  }\n\n  /**\n   * In declaration.\n   *\n   * ```markdown\n   * > | a <!b> c\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function declaration(code) {\n    if (code === null || code === 62) {\n      return end(code)\n    }\n    if (markdownLineEnding(code)) {\n      returnState = declaration\n      return lineEndingBefore(code)\n    }\n    effects.consume(code)\n    return declaration\n  }\n\n  /**\n   * In instruction.\n   *\n   * ```markdown\n   * > | a <?b?> c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function instruction(code) {\n    if (code === null) {\n      return nok(code)\n    }\n    if (code === 63) {\n      effects.consume(code)\n      return instructionClose\n    }\n    if (markdownLineEnding(code)) {\n      returnState = instruction\n      return lineEndingBefore(code)\n    }\n    effects.consume(code)\n    return instruction\n  }\n\n  /**\n   * In instruction, after `?`, at `>`.\n   *\n   * ```markdown\n   * > | a <?b?> c\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function instructionClose(code) {\n    return code === 62 ? end(code) : instruction(code)\n  }\n\n  /**\n   * After `</`, in closing tag, at tag name.\n   *\n   * ```markdown\n   * > | a </b> c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagCloseStart(code) {\n    // ASCII alphabetical.\n    if (asciiAlpha(code)) {\n      effects.consume(code)\n      return tagClose\n    }\n    return nok(code)\n  }\n\n  /**\n   * After `</x`, in a tag name.\n   *\n   * ```markdown\n   * > | a </b> c\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagClose(code) {\n    // ASCII alphanumerical and `-`.\n    if (code === 45 || asciiAlphanumeric(code)) {\n      effects.consume(code)\n      return tagClose\n    }\n    return tagCloseBetween(code)\n  }\n\n  /**\n   * In closing tag, after tag name.\n   *\n   * ```markdown\n   * > | a </b> c\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagCloseBetween(code) {\n    if (markdownLineEnding(code)) {\n      returnState = tagCloseBetween\n      return lineEndingBefore(code)\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code)\n      return tagCloseBetween\n    }\n    return end(code)\n  }\n\n  /**\n   * After `<x`, in opening tag name.\n   *\n   * ```markdown\n   * > | a <b> c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpen(code) {\n    // ASCII alphanumerical and `-`.\n    if (code === 45 || asciiAlphanumeric(code)) {\n      effects.consume(code)\n      return tagOpen\n    }\n    if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n      return tagOpenBetween(code)\n    }\n    return nok(code)\n  }\n\n  /**\n   * In opening tag, after tag name.\n   *\n   * ```markdown\n   * > | a <b> c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenBetween(code) {\n    if (code === 47) {\n      effects.consume(code)\n      return end\n    }\n\n    // ASCII alphabetical and `:` and `_`.\n    if (code === 58 || code === 95 || asciiAlpha(code)) {\n      effects.consume(code)\n      return tagOpenAttributeName\n    }\n    if (markdownLineEnding(code)) {\n      returnState = tagOpenBetween\n      return lineEndingBefore(code)\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code)\n      return tagOpenBetween\n    }\n    return end(code)\n  }\n\n  /**\n   * In attribute name.\n   *\n   * ```markdown\n   * > | a <b c> d\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenAttributeName(code) {\n    // ASCII alphabetical and `-`, `.`, `:`, and `_`.\n    if (\n      code === 45 ||\n      code === 46 ||\n      code === 58 ||\n      code === 95 ||\n      asciiAlphanumeric(code)\n    ) {\n      effects.consume(code)\n      return tagOpenAttributeName\n    }\n    return tagOpenAttributeNameAfter(code)\n  }\n\n  /**\n   * After attribute name, before initializer, the end of the tag, or\n   * whitespace.\n   *\n   * ```markdown\n   * > | a <b c> d\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenAttributeNameAfter(code) {\n    if (code === 61) {\n      effects.consume(code)\n      return tagOpenAttributeValueBefore\n    }\n    if (markdownLineEnding(code)) {\n      returnState = tagOpenAttributeNameAfter\n      return lineEndingBefore(code)\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code)\n      return tagOpenAttributeNameAfter\n    }\n    return tagOpenBetween(code)\n  }\n\n  /**\n   * Before unquoted, double quoted, or single quoted attribute value, allowing\n   * whitespace.\n   *\n   * ```markdown\n   * > | a <b c=d> e\n   *            ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenAttributeValueBefore(code) {\n    if (\n      code === null ||\n      code === 60 ||\n      code === 61 ||\n      code === 62 ||\n      code === 96\n    ) {\n      return nok(code)\n    }\n    if (code === 34 || code === 39) {\n      effects.consume(code)\n      marker = code\n      return tagOpenAttributeValueQuoted\n    }\n    if (markdownLineEnding(code)) {\n      returnState = tagOpenAttributeValueBefore\n      return lineEndingBefore(code)\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code)\n      return tagOpenAttributeValueBefore\n    }\n    effects.consume(code)\n    return tagOpenAttributeValueUnquoted\n  }\n\n  /**\n   * In double or single quoted attribute value.\n   *\n   * ```markdown\n   * > | a <b c=\"d\"> e\n   *             ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenAttributeValueQuoted(code) {\n    if (code === marker) {\n      effects.consume(code)\n      marker = undefined\n      return tagOpenAttributeValueQuotedAfter\n    }\n    if (code === null) {\n      return nok(code)\n    }\n    if (markdownLineEnding(code)) {\n      returnState = tagOpenAttributeValueQuoted\n      return lineEndingBefore(code)\n    }\n    effects.consume(code)\n    return tagOpenAttributeValueQuoted\n  }\n\n  /**\n   * In unquoted attribute value.\n   *\n   * ```markdown\n   * > | a <b c=d> e\n   *            ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenAttributeValueUnquoted(code) {\n    if (\n      code === null ||\n      code === 34 ||\n      code === 39 ||\n      code === 60 ||\n      code === 61 ||\n      code === 96\n    ) {\n      return nok(code)\n    }\n    if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n      return tagOpenBetween(code)\n    }\n    effects.consume(code)\n    return tagOpenAttributeValueUnquoted\n  }\n\n  /**\n   * After double or single quoted attribute value, before whitespace or the end\n   * of the tag.\n   *\n   * ```markdown\n   * > | a <b c=\"d\"> e\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenAttributeValueQuotedAfter(code) {\n    if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n      return tagOpenBetween(code)\n    }\n    return nok(code)\n  }\n\n  /**\n   * In certain circumstances of a tag where only an `>` is allowed.\n   *\n   * ```markdown\n   * > | a <b c=\"d\"> e\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function end(code) {\n    if (code === 62) {\n      effects.consume(code)\n      effects.exit('htmlTextData')\n      effects.exit('htmlText')\n      return ok\n    }\n    return nok(code)\n  }\n\n  /**\n   * At eol.\n   *\n   * > \uD83D\uDC49 **Note**: we can\u2019t have blank lines in text, so no need to worry about\n   * > empty tokens.\n   *\n   * ```markdown\n   * > | a <!--a\n   *            ^\n   *   | b-->\n   * ```\n   *\n   * @type {State}\n   */\n  function lineEndingBefore(code) {\n    effects.exit('htmlTextData')\n    effects.enter('lineEnding')\n    effects.consume(code)\n    effects.exit('lineEnding')\n    return lineEndingAfter\n  }\n\n  /**\n   * After eol, at optional whitespace.\n   *\n   * > \uD83D\uDC49 **Note**: we can\u2019t have blank lines in text, so no need to worry about\n   * > empty tokens.\n   *\n   * ```markdown\n   *   | a <!--a\n   * > | b-->\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function lineEndingAfter(code) {\n    // Always populated by defaults.\n\n    return markdownSpace(code)\n      ? factorySpace(\n          effects,\n          lineEndingAfterPrefix,\n          'linePrefix',\n          self.parser.constructs.disable.null.includes('codeIndented')\n            ? undefined\n            : 4\n        )(code)\n      : lineEndingAfterPrefix(code)\n  }\n\n  /**\n   * After eol, after optional whitespace.\n   *\n   * > \uD83D\uDC49 **Note**: we can\u2019t have blank lines in text, so no need to worry about\n   * > empty tokens.\n   *\n   * ```markdown\n   *   | a <!--a\n   * > | b-->\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function lineEndingAfterPrefix(code) {\n    effects.enter('htmlTextData')\n    return returnState(code)\n  }\n}\n", "/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Event} Event\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {factoryDestination} from 'micromark-factory-destination'\nimport {factoryLabel} from 'micromark-factory-label'\nimport {factoryTitle} from 'micromark-factory-title'\nimport {factoryWhitespace} from 'micromark-factory-whitespace'\nimport {markdownLineEndingOrSpace} from 'micromark-util-character'\nimport {push, splice} from 'micromark-util-chunked'\nimport {normalizeIdentifier} from 'micromark-util-normalize-identifier'\nimport {resolveAll} from 'micromark-util-resolve-all'\n/** @type {Construct} */\nexport const labelEnd = {\n  name: 'labelEnd',\n  tokenize: tokenizeLabelEnd,\n  resolveTo: resolveToLabelEnd,\n  resolveAll: resolveAllLabelEnd\n}\n\n/** @type {Construct} */\nconst resourceConstruct = {\n  tokenize: tokenizeResource\n}\n/** @type {Construct} */\nconst referenceFullConstruct = {\n  tokenize: tokenizeReferenceFull\n}\n/** @type {Construct} */\nconst referenceCollapsedConstruct = {\n  tokenize: tokenizeReferenceCollapsed\n}\n\n/** @type {Resolver} */\nfunction resolveAllLabelEnd(events) {\n  let index = -1\n  while (++index < events.length) {\n    const token = events[index][1]\n    if (\n      token.type === 'labelImage' ||\n      token.type === 'labelLink' ||\n      token.type === 'labelEnd'\n    ) {\n      // Remove the marker.\n      events.splice(index + 1, token.type === 'labelImage' ? 4 : 2)\n      token.type = 'data'\n      index++\n    }\n  }\n  return events\n}\n\n/** @type {Resolver} */\nfunction resolveToLabelEnd(events, context) {\n  let index = events.length\n  let offset = 0\n  /** @type {Token} */\n  let token\n  /** @type {number | undefined} */\n  let open\n  /** @type {number | undefined} */\n  let close\n  /** @type {Array<Event>} */\n  let media\n\n  // Find an opening.\n  while (index--) {\n    token = events[index][1]\n    if (open) {\n      // If we see another link, or inactive link label, we\u2019ve been here before.\n      if (\n        token.type === 'link' ||\n        (token.type === 'labelLink' && token._inactive)\n      ) {\n        break\n      }\n\n      // Mark other link openings as inactive, as we can\u2019t have links in\n      // links.\n      if (events[index][0] === 'enter' && token.type === 'labelLink') {\n        token._inactive = true\n      }\n    } else if (close) {\n      if (\n        events[index][0] === 'enter' &&\n        (token.type === 'labelImage' || token.type === 'labelLink') &&\n        !token._balanced\n      ) {\n        open = index\n        if (token.type !== 'labelLink') {\n          offset = 2\n          break\n        }\n      }\n    } else if (token.type === 'labelEnd') {\n      close = index\n    }\n  }\n  const group = {\n    type: events[open][1].type === 'labelLink' ? 'link' : 'image',\n    start: Object.assign({}, events[open][1].start),\n    end: Object.assign({}, events[events.length - 1][1].end)\n  }\n  const label = {\n    type: 'label',\n    start: Object.assign({}, events[open][1].start),\n    end: Object.assign({}, events[close][1].end)\n  }\n  const text = {\n    type: 'labelText',\n    start: Object.assign({}, events[open + offset + 2][1].end),\n    end: Object.assign({}, events[close - 2][1].start)\n  }\n  media = [\n    ['enter', group, context],\n    ['enter', label, context]\n  ]\n\n  // Opening marker.\n  media = push(media, events.slice(open + 1, open + offset + 3))\n\n  // Text open.\n  media = push(media, [['enter', text, context]])\n\n  // Always populated by defaults.\n\n  // Between.\n  media = push(\n    media,\n    resolveAll(\n      context.parser.constructs.insideSpan.null,\n      events.slice(open + offset + 4, close - 3),\n      context\n    )\n  )\n\n  // Text close, marker close, label close.\n  media = push(media, [\n    ['exit', text, context],\n    events[close - 2],\n    events[close - 1],\n    ['exit', label, context]\n  ])\n\n  // Reference, resource, or so.\n  media = push(media, events.slice(close + 1))\n\n  // Media close.\n  media = push(media, [['exit', group, context]])\n  splice(events, open, events.length, media)\n  return events\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeLabelEnd(effects, ok, nok) {\n  const self = this\n  let index = self.events.length\n  /** @type {Token} */\n  let labelStart\n  /** @type {boolean} */\n  let defined\n\n  // Find an opening.\n  while (index--) {\n    if (\n      (self.events[index][1].type === 'labelImage' ||\n        self.events[index][1].type === 'labelLink') &&\n      !self.events[index][1]._balanced\n    ) {\n      labelStart = self.events[index][1]\n      break\n    }\n  }\n  return start\n\n  /**\n   * Start of label end.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *       ^\n   * > | [a][b] c\n   *       ^\n   * > | [a][] b\n   *       ^\n   * > | [a] b\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    // If there is not an okay opening.\n    if (!labelStart) {\n      return nok(code)\n    }\n\n    // If the corresponding label (link) start is marked as inactive,\n    // it means we\u2019d be wrapping a link, like this:\n    //\n    // ```markdown\n    // > | a [b [c](d) e](f) g.\n    //                  ^\n    // ```\n    //\n    // We can\u2019t have that, so it\u2019s just balanced brackets.\n    if (labelStart._inactive) {\n      return labelEndNok(code)\n    }\n    defined = self.parser.defined.includes(\n      normalizeIdentifier(\n        self.sliceSerialize({\n          start: labelStart.end,\n          end: self.now()\n        })\n      )\n    )\n    effects.enter('labelEnd')\n    effects.enter('labelMarker')\n    effects.consume(code)\n    effects.exit('labelMarker')\n    effects.exit('labelEnd')\n    return after\n  }\n\n  /**\n   * After `]`.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *       ^\n   * > | [a][b] c\n   *       ^\n   * > | [a][] b\n   *       ^\n   * > | [a] b\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    // Note: `markdown-rs` also parses GFM footnotes here, which for us is in\n    // an extension.\n\n    // Resource (`[asd](fgh)`)?\n    if (code === 40) {\n      return effects.attempt(\n        resourceConstruct,\n        labelEndOk,\n        defined ? labelEndOk : labelEndNok\n      )(code)\n    }\n\n    // Full (`[asd][fgh]`) or collapsed (`[asd][]`) reference?\n    if (code === 91) {\n      return effects.attempt(\n        referenceFullConstruct,\n        labelEndOk,\n        defined ? referenceNotFull : labelEndNok\n      )(code)\n    }\n\n    // Shortcut (`[asd]`) reference?\n    return defined ? labelEndOk(code) : labelEndNok(code)\n  }\n\n  /**\n   * After `]`, at `[`, but not at a full reference.\n   *\n   * > \uD83D\uDC49 **Note**: we only get here if the label is defined.\n   *\n   * ```markdown\n   * > | [a][] b\n   *        ^\n   * > | [a] b\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function referenceNotFull(code) {\n    return effects.attempt(\n      referenceCollapsedConstruct,\n      labelEndOk,\n      labelEndNok\n    )(code)\n  }\n\n  /**\n   * Done, we found something.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *           ^\n   * > | [a][b] c\n   *           ^\n   * > | [a][] b\n   *          ^\n   * > | [a] b\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function labelEndOk(code) {\n    // Note: `markdown-rs` does a bunch of stuff here.\n    return ok(code)\n  }\n\n  /**\n   * Done, it\u2019s nothing.\n   *\n   * There was an okay opening, but we didn\u2019t match anything.\n   *\n   * ```markdown\n   * > | [a](b c\n   *        ^\n   * > | [a][b c\n   *        ^\n   * > | [a] b\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function labelEndNok(code) {\n    labelStart._balanced = true\n    return nok(code)\n  }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeResource(effects, ok, nok) {\n  return resourceStart\n\n  /**\n   * At a resource.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceStart(code) {\n    effects.enter('resource')\n    effects.enter('resourceMarker')\n    effects.consume(code)\n    effects.exit('resourceMarker')\n    return resourceBefore\n  }\n\n  /**\n   * In resource, after `(`, at optional whitespace.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceBefore(code) {\n    return markdownLineEndingOrSpace(code)\n      ? factoryWhitespace(effects, resourceOpen)(code)\n      : resourceOpen(code)\n  }\n\n  /**\n   * In resource, after optional whitespace, at `)` or a destination.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceOpen(code) {\n    if (code === 41) {\n      return resourceEnd(code)\n    }\n    return factoryDestination(\n      effects,\n      resourceDestinationAfter,\n      resourceDestinationMissing,\n      'resourceDestination',\n      'resourceDestinationLiteral',\n      'resourceDestinationLiteralMarker',\n      'resourceDestinationRaw',\n      'resourceDestinationString',\n      32\n    )(code)\n  }\n\n  /**\n   * In resource, after destination, at optional whitespace.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceDestinationAfter(code) {\n    return markdownLineEndingOrSpace(code)\n      ? factoryWhitespace(effects, resourceBetween)(code)\n      : resourceEnd(code)\n  }\n\n  /**\n   * At invalid destination.\n   *\n   * ```markdown\n   * > | [a](<<) b\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceDestinationMissing(code) {\n    return nok(code)\n  }\n\n  /**\n   * In resource, after destination and whitespace, at `(` or title.\n   *\n   * ```markdown\n   * > | [a](b ) c\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceBetween(code) {\n    if (code === 34 || code === 39 || code === 40) {\n      return factoryTitle(\n        effects,\n        resourceTitleAfter,\n        nok,\n        'resourceTitle',\n        'resourceTitleMarker',\n        'resourceTitleString'\n      )(code)\n    }\n    return resourceEnd(code)\n  }\n\n  /**\n   * In resource, after title, at optional whitespace.\n   *\n   * ```markdown\n   * > | [a](b \"c\") d\n   *              ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceTitleAfter(code) {\n    return markdownLineEndingOrSpace(code)\n      ? factoryWhitespace(effects, resourceEnd)(code)\n      : resourceEnd(code)\n  }\n\n  /**\n   * In resource, at `)`.\n   *\n   * ```markdown\n   * > | [a](b) d\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceEnd(code) {\n    if (code === 41) {\n      effects.enter('resourceMarker')\n      effects.consume(code)\n      effects.exit('resourceMarker')\n      effects.exit('resource')\n      return ok\n    }\n    return nok(code)\n  }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeReferenceFull(effects, ok, nok) {\n  const self = this\n  return referenceFull\n\n  /**\n   * In a reference (full), at the `[`.\n   *\n   * ```markdown\n   * > | [a][b] d\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function referenceFull(code) {\n    return factoryLabel.call(\n      self,\n      effects,\n      referenceFullAfter,\n      referenceFullMissing,\n      'reference',\n      'referenceMarker',\n      'referenceString'\n    )(code)\n  }\n\n  /**\n   * In a reference (full), after `]`.\n   *\n   * ```markdown\n   * > | [a][b] d\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function referenceFullAfter(code) {\n    return self.parser.defined.includes(\n      normalizeIdentifier(\n        self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1)\n      )\n    )\n      ? ok(code)\n      : nok(code)\n  }\n\n  /**\n   * In reference (full) that was missing.\n   *\n   * ```markdown\n   * > | [a][b d\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function referenceFullMissing(code) {\n    return nok(code)\n  }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeReferenceCollapsed(effects, ok, nok) {\n  return referenceCollapsedStart\n\n  /**\n   * In reference (collapsed), at `[`.\n   *\n   * > \uD83D\uDC49 **Note**: we only get here if the label is defined.\n   *\n   * ```markdown\n   * > | [a][] d\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function referenceCollapsedStart(code) {\n    // We only attempt a collapsed label if there\u2019s a `[`.\n\n    effects.enter('reference')\n    effects.enter('referenceMarker')\n    effects.consume(code)\n    effects.exit('referenceMarker')\n    return referenceCollapsedOpen\n  }\n\n  /**\n   * In reference (collapsed), at `]`.\n   *\n   * > \uD83D\uDC49 **Note**: we only get here if the label is defined.\n   *\n   * ```markdown\n   * > | [a][] d\n   *         ^\n   * ```\n   *\n   *  @type {State}\n   */\n  function referenceCollapsedOpen(code) {\n    if (code === 93) {\n      effects.enter('referenceMarker')\n      effects.consume(code)\n      effects.exit('referenceMarker')\n      effects.exit('reference')\n      return ok\n    }\n    return nok(code)\n  }\n}\n", "/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {labelEnd} from './label-end.js'\n\n/** @type {Construct} */\nexport const labelStartImage = {\n  name: 'labelStartImage',\n  tokenize: tokenizeLabelStartImage,\n  resolveAll: labelEnd.resolveAll\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeLabelStartImage(effects, ok, nok) {\n  const self = this\n  return start\n\n  /**\n   * Start of label (image) start.\n   *\n   * ```markdown\n   * > | a ![b] c\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter('labelImage')\n    effects.enter('labelImageMarker')\n    effects.consume(code)\n    effects.exit('labelImageMarker')\n    return open\n  }\n\n  /**\n   * After `!`, at `[`.\n   *\n   * ```markdown\n   * > | a ![b] c\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function open(code) {\n    if (code === 91) {\n      effects.enter('labelMarker')\n      effects.consume(code)\n      effects.exit('labelMarker')\n      effects.exit('labelImage')\n      return after\n    }\n    return nok(code)\n  }\n\n  /**\n   * After `![`.\n   *\n   * ```markdown\n   * > | a ![b] c\n   *         ^\n   * ```\n   *\n   * This is needed in because, when GFM footnotes are enabled, images never\n   * form when started with a `^`.\n   * Instead, links form:\n   *\n   * ```markdown\n   * ![^a](b)\n   *\n   * ![^a][b]\n   *\n   * [b]: c\n   * ```\n   *\n   * ```html\n   * <p>!<a href=\\\"b\\\">^a</a></p>\n   * <p>!<a href=\\\"c\\\">^a</a></p>\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    // To do: use a new field to do this, this is still needed for\n    // `micromark-extension-gfm-footnote`, but the `label-start-link`\n    // behavior isn\u2019t.\n    // Hidden footnotes hook.\n    /* c8 ignore next 3 */\n    return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs\n      ? nok(code)\n      : ok(code)\n  }\n}\n", "/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {labelEnd} from './label-end.js'\n\n/** @type {Construct} */\nexport const labelStartLink = {\n  name: 'labelStartLink',\n  tokenize: tokenizeLabelStartLink,\n  resolveAll: labelEnd.resolveAll\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeLabelStartLink(effects, ok, nok) {\n  const self = this\n  return start\n\n  /**\n   * Start of label (link) start.\n   *\n   * ```markdown\n   * > | a [b] c\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter('labelLink')\n    effects.enter('labelMarker')\n    effects.consume(code)\n    effects.exit('labelMarker')\n    effects.exit('labelLink')\n    return after\n  }\n\n  /** @type {State} */\n  function after(code) {\n    // To do: this isn\u2019t needed in `micromark-extension-gfm-footnote`,\n    // remove.\n    // Hidden footnotes hook.\n    /* c8 ignore next 3 */\n    return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs\n      ? nok(code)\n      : ok(code)\n  }\n}\n", "/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding} from 'micromark-util-character'\n/** @type {Construct} */\nexport const lineEnding = {\n  name: 'lineEnding',\n  tokenize: tokenizeLineEnding\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeLineEnding(effects, ok) {\n  return start\n\n  /** @type {State} */\n  function start(code) {\n    effects.enter('lineEnding')\n    effects.consume(code)\n    effects.exit('lineEnding')\n    return factorySpace(effects, ok, 'linePrefix')\n  }\n}\n", "/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding, markdownSpace} from 'micromark-util-character'\n/** @type {Construct} */\nexport const thematicBreak = {\n  name: 'thematicBreak',\n  tokenize: tokenizeThematicBreak\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeThematicBreak(effects, ok, nok) {\n  let size = 0\n  /** @type {NonNullable<Code>} */\n  let marker\n  return start\n\n  /**\n   * Start of thematic break.\n   *\n   * ```markdown\n   * > | ***\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter('thematicBreak')\n    // To do: parse indent like `markdown-rs`.\n    return before(code)\n  }\n\n  /**\n   * After optional whitespace, at marker.\n   *\n   * ```markdown\n   * > | ***\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function before(code) {\n    marker = code\n    return atBreak(code)\n  }\n\n  /**\n   * After something, before something else.\n   *\n   * ```markdown\n   * > | ***\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function atBreak(code) {\n    if (code === marker) {\n      effects.enter('thematicBreakSequence')\n      return sequence(code)\n    }\n    if (size >= 3 && (code === null || markdownLineEnding(code))) {\n      effects.exit('thematicBreak')\n      return ok(code)\n    }\n    return nok(code)\n  }\n\n  /**\n   * In sequence.\n   *\n   * ```markdown\n   * > | ***\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function sequence(code) {\n    if (code === marker) {\n      effects.consume(code)\n      size++\n      return sequence\n    }\n    effects.exit('thematicBreakSequence')\n    return markdownSpace(code)\n      ? factorySpace(effects, atBreak, 'whitespace')(code)\n      : atBreak(code)\n  }\n}\n", "/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').ContainerState} ContainerState\n * @typedef {import('micromark-util-types').Exiter} Exiter\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {asciiDigit, markdownSpace} from 'micromark-util-character'\nimport {blankLine} from './blank-line.js'\nimport {thematicBreak} from './thematic-break.js'\n\n/** @type {Construct} */\nexport const list = {\n  name: 'list',\n  tokenize: tokenizeListStart,\n  continuation: {\n    tokenize: tokenizeListContinuation\n  },\n  exit: tokenizeListEnd\n}\n\n/** @type {Construct} */\nconst listItemPrefixWhitespaceConstruct = {\n  tokenize: tokenizeListItemPrefixWhitespace,\n  partial: true\n}\n\n/** @type {Construct} */\nconst indentConstruct = {\n  tokenize: tokenizeIndent,\n  partial: true\n}\n\n// To do: `markdown-rs` parses list items on their own and later stitches them\n// together.\n\n/**\n * @type {Tokenizer}\n * @this {TokenizeContext}\n */\nfunction tokenizeListStart(effects, ok, nok) {\n  const self = this\n  const tail = self.events[self.events.length - 1]\n  let initialSize =\n    tail && tail[1].type === 'linePrefix'\n      ? tail[2].sliceSerialize(tail[1], true).length\n      : 0\n  let size = 0\n  return start\n\n  /** @type {State} */\n  function start(code) {\n    const kind =\n      self.containerState.type ||\n      (code === 42 || code === 43 || code === 45\n        ? 'listUnordered'\n        : 'listOrdered')\n    if (\n      kind === 'listUnordered'\n        ? !self.containerState.marker || code === self.containerState.marker\n        : asciiDigit(code)\n    ) {\n      if (!self.containerState.type) {\n        self.containerState.type = kind\n        effects.enter(kind, {\n          _container: true\n        })\n      }\n      if (kind === 'listUnordered') {\n        effects.enter('listItemPrefix')\n        return code === 42 || code === 45\n          ? effects.check(thematicBreak, nok, atMarker)(code)\n          : atMarker(code)\n      }\n      if (!self.interrupt || code === 49) {\n        effects.enter('listItemPrefix')\n        effects.enter('listItemValue')\n        return inside(code)\n      }\n    }\n    return nok(code)\n  }\n\n  /** @type {State} */\n  function inside(code) {\n    if (asciiDigit(code) && ++size < 10) {\n      effects.consume(code)\n      return inside\n    }\n    if (\n      (!self.interrupt || size < 2) &&\n      (self.containerState.marker\n        ? code === self.containerState.marker\n        : code === 41 || code === 46)\n    ) {\n      effects.exit('listItemValue')\n      return atMarker(code)\n    }\n    return nok(code)\n  }\n\n  /**\n   * @type {State}\n   **/\n  function atMarker(code) {\n    effects.enter('listItemMarker')\n    effects.consume(code)\n    effects.exit('listItemMarker')\n    self.containerState.marker = self.containerState.marker || code\n    return effects.check(\n      blankLine,\n      // Can\u2019t be empty when interrupting.\n      self.interrupt ? nok : onBlank,\n      effects.attempt(\n        listItemPrefixWhitespaceConstruct,\n        endOfPrefix,\n        otherPrefix\n      )\n    )\n  }\n\n  /** @type {State} */\n  function onBlank(code) {\n    self.containerState.initialBlankLine = true\n    initialSize++\n    return endOfPrefix(code)\n  }\n\n  /** @type {State} */\n  function otherPrefix(code) {\n    if (markdownSpace(code)) {\n      effects.enter('listItemPrefixWhitespace')\n      effects.consume(code)\n      effects.exit('listItemPrefixWhitespace')\n      return endOfPrefix\n    }\n    return nok(code)\n  }\n\n  /** @type {State} */\n  function endOfPrefix(code) {\n    self.containerState.size =\n      initialSize +\n      self.sliceSerialize(effects.exit('listItemPrefix'), true).length\n    return ok(code)\n  }\n}\n\n/**\n * @type {Tokenizer}\n * @this {TokenizeContext}\n */\nfunction tokenizeListContinuation(effects, ok, nok) {\n  const self = this\n  self.containerState._closeFlow = undefined\n  return effects.check(blankLine, onBlank, notBlank)\n\n  /** @type {State} */\n  function onBlank(code) {\n    self.containerState.furtherBlankLines =\n      self.containerState.furtherBlankLines ||\n      self.containerState.initialBlankLine\n\n    // We have a blank line.\n    // Still, try to consume at most the items size.\n    return factorySpace(\n      effects,\n      ok,\n      'listItemIndent',\n      self.containerState.size + 1\n    )(code)\n  }\n\n  /** @type {State} */\n  function notBlank(code) {\n    if (self.containerState.furtherBlankLines || !markdownSpace(code)) {\n      self.containerState.furtherBlankLines = undefined\n      self.containerState.initialBlankLine = undefined\n      return notInCurrentItem(code)\n    }\n    self.containerState.furtherBlankLines = undefined\n    self.containerState.initialBlankLine = undefined\n    return effects.attempt(indentConstruct, ok, notInCurrentItem)(code)\n  }\n\n  /** @type {State} */\n  function notInCurrentItem(code) {\n    // While we do continue, we signal that the flow should be closed.\n    self.containerState._closeFlow = true\n    // As we\u2019re closing flow, we\u2019re no longer interrupting.\n    self.interrupt = undefined\n    // Always populated by defaults.\n\n    return factorySpace(\n      effects,\n      effects.attempt(list, ok, nok),\n      'linePrefix',\n      self.parser.constructs.disable.null.includes('codeIndented')\n        ? undefined\n        : 4\n    )(code)\n  }\n}\n\n/**\n * @type {Tokenizer}\n * @this {TokenizeContext}\n */\nfunction tokenizeIndent(effects, ok, nok) {\n  const self = this\n  return factorySpace(\n    effects,\n    afterPrefix,\n    'listItemIndent',\n    self.containerState.size + 1\n  )\n\n  /** @type {State} */\n  function afterPrefix(code) {\n    const tail = self.events[self.events.length - 1]\n    return tail &&\n      tail[1].type === 'listItemIndent' &&\n      tail[2].sliceSerialize(tail[1], true).length === self.containerState.size\n      ? ok(code)\n      : nok(code)\n  }\n}\n\n/**\n * @type {Exiter}\n * @this {TokenizeContext}\n */\nfunction tokenizeListEnd(effects) {\n  effects.exit(this.containerState.type)\n}\n\n/**\n * @type {Tokenizer}\n * @this {TokenizeContext}\n */\nfunction tokenizeListItemPrefixWhitespace(effects, ok, nok) {\n  const self = this\n\n  // Always populated by defaults.\n\n  return factorySpace(\n    effects,\n    afterPrefix,\n    'listItemPrefixWhitespace',\n    self.parser.constructs.disable.null.includes('codeIndented')\n      ? undefined\n      : 4 + 1\n  )\n\n  /** @type {State} */\n  function afterPrefix(code) {\n    const tail = self.events[self.events.length - 1]\n    return !markdownSpace(code) &&\n      tail &&\n      tail[1].type === 'listItemPrefixWhitespace'\n      ? ok(code)\n      : nok(code)\n  }\n}\n", "/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding, markdownSpace} from 'micromark-util-character'\n/** @type {Construct} */\nexport const setextUnderline = {\n  name: 'setextUnderline',\n  tokenize: tokenizeSetextUnderline,\n  resolveTo: resolveToSetextUnderline\n}\n\n/** @type {Resolver} */\nfunction resolveToSetextUnderline(events, context) {\n  // To do: resolve like `markdown-rs`.\n  let index = events.length\n  /** @type {number | undefined} */\n  let content\n  /** @type {number | undefined} */\n  let text\n  /** @type {number | undefined} */\n  let definition\n\n  // Find the opening of the content.\n  // It\u2019ll always exist: we don\u2019t tokenize if it isn\u2019t there.\n  while (index--) {\n    if (events[index][0] === 'enter') {\n      if (events[index][1].type === 'content') {\n        content = index\n        break\n      }\n      if (events[index][1].type === 'paragraph') {\n        text = index\n      }\n    }\n    // Exit\n    else {\n      if (events[index][1].type === 'content') {\n        // Remove the content end (if needed we\u2019ll add it later)\n        events.splice(index, 1)\n      }\n      if (!definition && events[index][1].type === 'definition') {\n        definition = index\n      }\n    }\n  }\n  const heading = {\n    type: 'setextHeading',\n    start: Object.assign({}, events[text][1].start),\n    end: Object.assign({}, events[events.length - 1][1].end)\n  }\n\n  // Change the paragraph to setext heading text.\n  events[text][1].type = 'setextHeadingText'\n\n  // If we have definitions in the content, we\u2019ll keep on having content,\n  // but we need move it.\n  if (definition) {\n    events.splice(text, 0, ['enter', heading, context])\n    events.splice(definition + 1, 0, ['exit', events[content][1], context])\n    events[content][1].end = Object.assign({}, events[definition][1].end)\n  } else {\n    events[content][1] = heading\n  }\n\n  // Add the heading exit at the end.\n  events.push(['exit', heading, context])\n  return events\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeSetextUnderline(effects, ok, nok) {\n  const self = this\n  /** @type {NonNullable<Code>} */\n  let marker\n  return start\n\n  /**\n   * At start of heading (setext) underline.\n   *\n   * ```markdown\n   *   | aa\n   * > | ==\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    let index = self.events.length\n    /** @type {boolean | undefined} */\n    let paragraph\n    // Find an opening.\n    while (index--) {\n      // Skip enter/exit of line ending, line prefix, and content.\n      // We can now either have a definition or a paragraph.\n      if (\n        self.events[index][1].type !== 'lineEnding' &&\n        self.events[index][1].type !== 'linePrefix' &&\n        self.events[index][1].type !== 'content'\n      ) {\n        paragraph = self.events[index][1].type === 'paragraph'\n        break\n      }\n    }\n\n    // To do: handle lazy/pierce like `markdown-rs`.\n    // To do: parse indent like `markdown-rs`.\n    if (!self.parser.lazy[self.now().line] && (self.interrupt || paragraph)) {\n      effects.enter('setextHeadingLine')\n      marker = code\n      return before(code)\n    }\n    return nok(code)\n  }\n\n  /**\n   * After optional whitespace, at `-` or `=`.\n   *\n   * ```markdown\n   *   | aa\n   * > | ==\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function before(code) {\n    effects.enter('setextHeadingLineSequence')\n    return inside(code)\n  }\n\n  /**\n   * In sequence.\n   *\n   * ```markdown\n   *   | aa\n   * > | ==\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function inside(code) {\n    if (code === marker) {\n      effects.consume(code)\n      return inside\n    }\n    effects.exit('setextHeadingLineSequence')\n    return markdownSpace(code)\n      ? factorySpace(effects, after, 'lineSuffix')(code)\n      : after(code)\n  }\n\n  /**\n   * After sequence, after optional whitespace.\n   *\n   * ```markdown\n   *   | aa\n   * > | ==\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit('setextHeadingLine')\n      return ok(code)\n    }\n    return nok(code)\n  }\n}\n", "export {attention} from './lib/attention.js'\nexport {autolink} from './lib/autolink.js'\nexport {blankLine} from './lib/blank-line.js'\nexport {blockQuote} from './lib/block-quote.js'\nexport {characterEscape} from './lib/character-escape.js'\nexport {characterReference} from './lib/character-reference.js'\nexport {codeFenced} from './lib/code-fenced.js'\nexport {codeIndented} from './lib/code-indented.js'\nexport {codeText} from './lib/code-text.js'\nexport {content} from './lib/content.js'\nexport {definition} from './lib/definition.js'\nexport {hardBreakEscape} from './lib/hard-break-escape.js'\nexport {headingAtx} from './lib/heading-atx.js'\nexport {htmlFlow} from './lib/html-flow.js'\nexport {htmlText} from './lib/html-text.js'\nexport {labelEnd} from './lib/label-end.js'\nexport {labelStartImage} from './lib/label-start-image.js'\nexport {labelStartLink} from './lib/label-start-link.js'\nexport {lineEnding} from './lib/line-ending.js'\nexport {list} from './lib/list.js'\nexport {setextUnderline} from './lib/setext-underline.js'\nexport {thematicBreak} from './lib/thematic-break.js'\n", "/**\n * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct\n * @typedef {import('micromark-util-types').Initializer} Initializer\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n */\n\nimport {blankLine, content} from 'micromark-core-commonmark'\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding} from 'micromark-util-character'\n/** @type {InitialConstruct} */\nexport const flow = {\n  tokenize: initializeFlow\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Initializer}\n */\nfunction initializeFlow(effects) {\n  const self = this\n  const initial = effects.attempt(\n    // Try to parse a blank line.\n    blankLine,\n    atBlankEnding,\n    // Try to parse initial flow (essentially, only code).\n    effects.attempt(\n      this.parser.constructs.flowInitial,\n      afterConstruct,\n      factorySpace(\n        effects,\n        effects.attempt(\n          this.parser.constructs.flow,\n          afterConstruct,\n          effects.attempt(content, afterConstruct)\n        ),\n        'linePrefix'\n      )\n    )\n  )\n  return initial\n\n  /** @type {State} */\n  function atBlankEnding(code) {\n    if (code === null) {\n      effects.consume(code)\n      return\n    }\n    effects.enter('lineEndingBlank')\n    effects.consume(code)\n    effects.exit('lineEndingBlank')\n    self.currentConstruct = undefined\n    return initial\n  }\n\n  /** @type {State} */\n  function afterConstruct(code) {\n    if (code === null) {\n      effects.consume(code)\n      return\n    }\n    effects.enter('lineEnding')\n    effects.consume(code)\n    effects.exit('lineEnding')\n    self.currentConstruct = undefined\n    return initial\n  }\n}\n", "/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct\n * @typedef {import('micromark-util-types').Initializer} Initializer\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n */\n\nexport const resolver = {\n  resolveAll: createResolver()\n}\nexport const string = initializeFactory('string')\nexport const text = initializeFactory('text')\n\n/**\n * @param {'string' | 'text'} field\n * @returns {InitialConstruct}\n */\nfunction initializeFactory(field) {\n  return {\n    tokenize: initializeText,\n    resolveAll: createResolver(\n      field === 'text' ? resolveAllLineSuffixes : undefined\n    )\n  }\n\n  /**\n   * @this {TokenizeContext}\n   * @type {Initializer}\n   */\n  function initializeText(effects) {\n    const self = this\n    const constructs = this.parser.constructs[field]\n    const text = effects.attempt(constructs, start, notText)\n    return start\n\n    /** @type {State} */\n    function start(code) {\n      return atBreak(code) ? text(code) : notText(code)\n    }\n\n    /** @type {State} */\n    function notText(code) {\n      if (code === null) {\n        effects.consume(code)\n        return\n      }\n      effects.enter('data')\n      effects.consume(code)\n      return data\n    }\n\n    /** @type {State} */\n    function data(code) {\n      if (atBreak(code)) {\n        effects.exit('data')\n        return text(code)\n      }\n\n      // Data.\n      effects.consume(code)\n      return data\n    }\n\n    /**\n     * @param {Code} code\n     * @returns {boolean}\n     */\n    function atBreak(code) {\n      if (code === null) {\n        return true\n      }\n      const list = constructs[code]\n      let index = -1\n      if (list) {\n        // Always populated by defaults.\n\n        while (++index < list.length) {\n          const item = list[index]\n          if (!item.previous || item.previous.call(self, self.previous)) {\n            return true\n          }\n        }\n      }\n      return false\n    }\n  }\n}\n\n/**\n * @param {Resolver | undefined} [extraResolver]\n * @returns {Resolver}\n */\nfunction createResolver(extraResolver) {\n  return resolveAllText\n\n  /** @type {Resolver} */\n  function resolveAllText(events, context) {\n    let index = -1\n    /** @type {number | undefined} */\n    let enter\n\n    // A rather boring computation (to merge adjacent `data` events) which\n    // improves mm performance by 29%.\n    while (++index <= events.length) {\n      if (enter === undefined) {\n        if (events[index] && events[index][1].type === 'data') {\n          enter = index\n          index++\n        }\n      } else if (!events[index] || events[index][1].type !== 'data') {\n        // Don\u2019t do anything if there is one data token.\n        if (index !== enter + 2) {\n          events[enter][1].end = events[index - 1][1].end\n          events.splice(enter + 2, index - enter - 2)\n          index = enter + 2\n        }\n        enter = undefined\n      }\n    }\n    return extraResolver ? extraResolver(events, context) : events\n  }\n}\n\n/**\n * A rather ugly set of instructions which again looks at chunks in the input\n * stream.\n * The reason to do this here is that it is *much* faster to parse in reverse.\n * And that we can\u2019t hook into `null` to split the line suffix before an EOF.\n * To do: figure out if we can make this into a clean utility, or even in core.\n * As it will be useful for GFMs literal autolink extension (and maybe even\n * tables?)\n *\n * @type {Resolver}\n */\nfunction resolveAllLineSuffixes(events, context) {\n  let eventIndex = 0 // Skip first.\n\n  while (++eventIndex <= events.length) {\n    if (\n      (eventIndex === events.length ||\n        events[eventIndex][1].type === 'lineEnding') &&\n      events[eventIndex - 1][1].type === 'data'\n    ) {\n      const data = events[eventIndex - 1][1]\n      const chunks = context.sliceStream(data)\n      let index = chunks.length\n      let bufferIndex = -1\n      let size = 0\n      /** @type {boolean | undefined} */\n      let tabs\n      while (index--) {\n        const chunk = chunks[index]\n        if (typeof chunk === 'string') {\n          bufferIndex = chunk.length\n          while (chunk.charCodeAt(bufferIndex - 1) === 32) {\n            size++\n            bufferIndex--\n          }\n          if (bufferIndex) break\n          bufferIndex = -1\n        }\n        // Number\n        else if (chunk === -2) {\n          tabs = true\n          size++\n        } else if (chunk === -1) {\n          // Empty\n        } else {\n          // Replacement character, exit.\n          index++\n          break\n        }\n      }\n      if (size) {\n        const token = {\n          type:\n            eventIndex === events.length || tabs || size < 2\n              ? 'lineSuffix'\n              : 'hardBreakTrailing',\n          start: {\n            line: data.end.line,\n            column: data.end.column - size,\n            offset: data.end.offset - size,\n            _index: data.start._index + index,\n            _bufferIndex: index\n              ? bufferIndex\n              : data.start._bufferIndex + bufferIndex\n          },\n          end: Object.assign({}, data.end)\n        }\n        data.end = Object.assign({}, token.start)\n        if (data.start.offset === data.end.offset) {\n          Object.assign(data, token)\n        } else {\n          events.splice(\n            eventIndex,\n            0,\n            ['enter', token, context],\n            ['exit', token, context]\n          )\n          eventIndex += 2\n        }\n      }\n      eventIndex++\n    }\n  }\n  return events\n}\n", "/**\n * @typedef {import('micromark-util-types').Chunk} Chunk\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').ConstructRecord} ConstructRecord\n * @typedef {import('micromark-util-types').Effects} Effects\n * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct\n * @typedef {import('micromark-util-types').ParseContext} ParseContext\n * @typedef {import('micromark-util-types').Point} Point\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenType} TokenType\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n */\n\n/**\n * @callback Restore\n * @returns {undefined}\n *\n * @typedef Info\n * @property {Restore} restore\n * @property {number} from\n *\n * @callback ReturnHandle\n *   Handle a successful run.\n * @param {Construct} construct\n * @param {Info} info\n * @returns {undefined}\n */\n\nimport {markdownLineEnding} from 'micromark-util-character'\nimport {push, splice} from 'micromark-util-chunked'\nimport {resolveAll} from 'micromark-util-resolve-all'\n/**\n * Create a tokenizer.\n * Tokenizers deal with one type of data (e.g., containers, flow, text).\n * The parser is the object dealing with it all.\n * `initialize` works like other constructs, except that only its `tokenize`\n * function is used, in which case it doesn\u2019t receive an `ok` or `nok`.\n * `from` can be given to set the point before the first character, although\n * when further lines are indented, they must be set with `defineSkip`.\n *\n * @param {ParseContext} parser\n * @param {InitialConstruct} initialize\n * @param {Omit<Point, '_bufferIndex' | '_index'> | undefined} [from]\n * @returns {TokenizeContext}\n */\nexport function createTokenizer(parser, initialize, from) {\n  /** @type {Point} */\n  let point = Object.assign(\n    from\n      ? Object.assign({}, from)\n      : {\n          line: 1,\n          column: 1,\n          offset: 0\n        },\n    {\n      _index: 0,\n      _bufferIndex: -1\n    }\n  )\n  /** @type {Record<string, number>} */\n  const columnStart = {}\n  /** @type {Array<Construct>} */\n  const resolveAllConstructs = []\n  /** @type {Array<Chunk>} */\n  let chunks = []\n  /** @type {Array<Token>} */\n  let stack = []\n  /** @type {boolean | undefined} */\n  let consumed = true\n\n  /**\n   * Tools used for tokenizing.\n   *\n   * @type {Effects}\n   */\n  const effects = {\n    consume,\n    enter,\n    exit,\n    attempt: constructFactory(onsuccessfulconstruct),\n    check: constructFactory(onsuccessfulcheck),\n    interrupt: constructFactory(onsuccessfulcheck, {\n      interrupt: true\n    })\n  }\n\n  /**\n   * State and tools for resolving and serializing.\n   *\n   * @type {TokenizeContext}\n   */\n  const context = {\n    previous: null,\n    code: null,\n    containerState: {},\n    events: [],\n    parser,\n    sliceStream,\n    sliceSerialize,\n    now,\n    defineSkip,\n    write\n  }\n\n  /**\n   * The state function.\n   *\n   * @type {State | undefined}\n   */\n  let state = initialize.tokenize.call(context, effects)\n\n  /**\n   * Track which character we expect to be consumed, to catch bugs.\n   *\n   * @type {Code}\n   */\n  let expectedCode\n  if (initialize.resolveAll) {\n    resolveAllConstructs.push(initialize)\n  }\n  return context\n\n  /** @type {TokenizeContext['write']} */\n  function write(slice) {\n    chunks = push(chunks, slice)\n    main()\n\n    // Exit if we\u2019re not done, resolve might change stuff.\n    if (chunks[chunks.length - 1] !== null) {\n      return []\n    }\n    addResult(initialize, 0)\n\n    // Otherwise, resolve, and exit.\n    context.events = resolveAll(resolveAllConstructs, context.events, context)\n    return context.events\n  }\n\n  //\n  // Tools.\n  //\n\n  /** @type {TokenizeContext['sliceSerialize']} */\n  function sliceSerialize(token, expandTabs) {\n    return serializeChunks(sliceStream(token), expandTabs)\n  }\n\n  /** @type {TokenizeContext['sliceStream']} */\n  function sliceStream(token) {\n    return sliceChunks(chunks, token)\n  }\n\n  /** @type {TokenizeContext['now']} */\n  function now() {\n    // This is a hot path, so we clone manually instead of `Object.assign({}, point)`\n    const {line, column, offset, _index, _bufferIndex} = point\n    return {\n      line,\n      column,\n      offset,\n      _index,\n      _bufferIndex\n    }\n  }\n\n  /** @type {TokenizeContext['defineSkip']} */\n  function defineSkip(value) {\n    columnStart[value.line] = value.column\n    accountForPotentialSkip()\n  }\n\n  //\n  // State management.\n  //\n\n  /**\n   * Main loop (note that `_index` and `_bufferIndex` in `point` are modified by\n   * `consume`).\n   * Here is where we walk through the chunks, which either include strings of\n   * several characters, or numerical character codes.\n   * The reason to do this in a loop instead of a call is so the stack can\n   * drain.\n   *\n   * @returns {undefined}\n   */\n  function main() {\n    /** @type {number} */\n    let chunkIndex\n    while (point._index < chunks.length) {\n      const chunk = chunks[point._index]\n\n      // If we\u2019re in a buffer chunk, loop through it.\n      if (typeof chunk === 'string') {\n        chunkIndex = point._index\n        if (point._bufferIndex < 0) {\n          point._bufferIndex = 0\n        }\n        while (\n          point._index === chunkIndex &&\n          point._bufferIndex < chunk.length\n        ) {\n          go(chunk.charCodeAt(point._bufferIndex))\n        }\n      } else {\n        go(chunk)\n      }\n    }\n  }\n\n  /**\n   * Deal with one code.\n   *\n   * @param {Code} code\n   * @returns {undefined}\n   */\n  function go(code) {\n    consumed = undefined\n    expectedCode = code\n    state = state(code)\n  }\n\n  /** @type {Effects['consume']} */\n  function consume(code) {\n    if (markdownLineEnding(code)) {\n      point.line++\n      point.column = 1\n      point.offset += code === -3 ? 2 : 1\n      accountForPotentialSkip()\n    } else if (code !== -1) {\n      point.column++\n      point.offset++\n    }\n\n    // Not in a string chunk.\n    if (point._bufferIndex < 0) {\n      point._index++\n    } else {\n      point._bufferIndex++\n\n      // At end of string chunk.\n      // @ts-expect-error Points w/ non-negative `_bufferIndex` reference\n      // strings.\n      if (point._bufferIndex === chunks[point._index].length) {\n        point._bufferIndex = -1\n        point._index++\n      }\n    }\n\n    // Expose the previous character.\n    context.previous = code\n\n    // Mark as consumed.\n    consumed = true\n  }\n\n  /** @type {Effects['enter']} */\n  function enter(type, fields) {\n    /** @type {Token} */\n    // @ts-expect-error Patch instead of assign required fields to help GC.\n    const token = fields || {}\n    token.type = type\n    token.start = now()\n    context.events.push(['enter', token, context])\n    stack.push(token)\n    return token\n  }\n\n  /** @type {Effects['exit']} */\n  function exit(type) {\n    const token = stack.pop()\n    token.end = now()\n    context.events.push(['exit', token, context])\n    return token\n  }\n\n  /**\n   * Use results.\n   *\n   * @type {ReturnHandle}\n   */\n  function onsuccessfulconstruct(construct, info) {\n    addResult(construct, info.from)\n  }\n\n  /**\n   * Discard results.\n   *\n   * @type {ReturnHandle}\n   */\n  function onsuccessfulcheck(_, info) {\n    info.restore()\n  }\n\n  /**\n   * Factory to attempt/check/interrupt.\n   *\n   * @param {ReturnHandle} onreturn\n   * @param {{interrupt?: boolean | undefined} | undefined} [fields]\n   */\n  function constructFactory(onreturn, fields) {\n    return hook\n\n    /**\n     * Handle either an object mapping codes to constructs, a list of\n     * constructs, or a single construct.\n     *\n     * @param {Array<Construct> | Construct | ConstructRecord} constructs\n     * @param {State} returnState\n     * @param {State | undefined} [bogusState]\n     * @returns {State}\n     */\n    function hook(constructs, returnState, bogusState) {\n      /** @type {Array<Construct>} */\n      let listOfConstructs\n      /** @type {number} */\n      let constructIndex\n      /** @type {Construct} */\n      let currentConstruct\n      /** @type {Info} */\n      let info\n      return Array.isArray(constructs) /* c8 ignore next 1 */\n        ? handleListOfConstructs(constructs)\n        : 'tokenize' in constructs\n        ? // @ts-expect-error Looks like a construct.\n          handleListOfConstructs([constructs])\n        : handleMapOfConstructs(constructs)\n\n      /**\n       * Handle a list of construct.\n       *\n       * @param {ConstructRecord} map\n       * @returns {State}\n       */\n      function handleMapOfConstructs(map) {\n        return start\n\n        /** @type {State} */\n        function start(code) {\n          const def = code !== null && map[code]\n          const all = code !== null && map.null\n          const list = [\n            // To do: add more extension tests.\n            /* c8 ignore next 2 */\n            ...(Array.isArray(def) ? def : def ? [def] : []),\n            ...(Array.isArray(all) ? all : all ? [all] : [])\n          ]\n          return handleListOfConstructs(list)(code)\n        }\n      }\n\n      /**\n       * Handle a list of construct.\n       *\n       * @param {Array<Construct>} list\n       * @returns {State}\n       */\n      function handleListOfConstructs(list) {\n        listOfConstructs = list\n        constructIndex = 0\n        if (list.length === 0) {\n          return bogusState\n        }\n        return handleConstruct(list[constructIndex])\n      }\n\n      /**\n       * Handle a single construct.\n       *\n       * @param {Construct} construct\n       * @returns {State}\n       */\n      function handleConstruct(construct) {\n        return start\n\n        /** @type {State} */\n        function start(code) {\n          // To do: not needed to store if there is no bogus state, probably?\n          // Currently doesn\u2019t work because `inspect` in document does a check\n          // w/o a bogus, which doesn\u2019t make sense. But it does seem to help perf\n          // by not storing.\n          info = store()\n          currentConstruct = construct\n          if (!construct.partial) {\n            context.currentConstruct = construct\n          }\n\n          // Always populated by defaults.\n\n          if (\n            construct.name &&\n            context.parser.constructs.disable.null.includes(construct.name)\n          ) {\n            return nok(code)\n          }\n          return construct.tokenize.call(\n            // If we do have fields, create an object w/ `context` as its\n            // prototype.\n            // This allows a \u201Clive binding\u201D, which is needed for `interrupt`.\n            fields ? Object.assign(Object.create(context), fields) : context,\n            effects,\n            ok,\n            nok\n          )(code)\n        }\n      }\n\n      /** @type {State} */\n      function ok(code) {\n        consumed = true\n        onreturn(currentConstruct, info)\n        return returnState\n      }\n\n      /** @type {State} */\n      function nok(code) {\n        consumed = true\n        info.restore()\n        if (++constructIndex < listOfConstructs.length) {\n          return handleConstruct(listOfConstructs[constructIndex])\n        }\n        return bogusState\n      }\n    }\n  }\n\n  /**\n   * @param {Construct} construct\n   * @param {number} from\n   * @returns {undefined}\n   */\n  function addResult(construct, from) {\n    if (construct.resolveAll && !resolveAllConstructs.includes(construct)) {\n      resolveAllConstructs.push(construct)\n    }\n    if (construct.resolve) {\n      splice(\n        context.events,\n        from,\n        context.events.length - from,\n        construct.resolve(context.events.slice(from), context)\n      )\n    }\n    if (construct.resolveTo) {\n      context.events = construct.resolveTo(context.events, context)\n    }\n  }\n\n  /**\n   * Store state.\n   *\n   * @returns {Info}\n   */\n  function store() {\n    const startPoint = now()\n    const startPrevious = context.previous\n    const startCurrentConstruct = context.currentConstruct\n    const startEventsIndex = context.events.length\n    const startStack = Array.from(stack)\n    return {\n      restore,\n      from: startEventsIndex\n    }\n\n    /**\n     * Restore state.\n     *\n     * @returns {undefined}\n     */\n    function restore() {\n      point = startPoint\n      context.previous = startPrevious\n      context.currentConstruct = startCurrentConstruct\n      context.events.length = startEventsIndex\n      stack = startStack\n      accountForPotentialSkip()\n    }\n  }\n\n  /**\n   * Move the current point a bit forward in the line when it\u2019s on a column\n   * skip.\n   *\n   * @returns {undefined}\n   */\n  function accountForPotentialSkip() {\n    if (point.line in columnStart && point.column < 2) {\n      point.column = columnStart[point.line]\n      point.offset += columnStart[point.line] - 1\n    }\n  }\n}\n\n/**\n * Get the chunks from a slice of chunks in the range of a token.\n *\n * @param {Array<Chunk>} chunks\n * @param {Pick<Token, 'end' | 'start'>} token\n * @returns {Array<Chunk>}\n */\nfunction sliceChunks(chunks, token) {\n  const startIndex = token.start._index\n  const startBufferIndex = token.start._bufferIndex\n  const endIndex = token.end._index\n  const endBufferIndex = token.end._bufferIndex\n  /** @type {Array<Chunk>} */\n  let view\n  if (startIndex === endIndex) {\n    // @ts-expect-error `_bufferIndex` is used on string chunks.\n    view = [chunks[startIndex].slice(startBufferIndex, endBufferIndex)]\n  } else {\n    view = chunks.slice(startIndex, endIndex)\n    if (startBufferIndex > -1) {\n      const head = view[0]\n      if (typeof head === 'string') {\n        view[0] = head.slice(startBufferIndex)\n      } else {\n        view.shift()\n      }\n    }\n    if (endBufferIndex > 0) {\n      // @ts-expect-error `_bufferIndex` is used on string chunks.\n      view.push(chunks[endIndex].slice(0, endBufferIndex))\n    }\n  }\n  return view\n}\n\n/**\n * Get the string value of a slice of chunks.\n *\n * @param {Array<Chunk>} chunks\n * @param {boolean | undefined} [expandTabs=false]\n * @returns {string}\n */\nfunction serializeChunks(chunks, expandTabs) {\n  let index = -1\n  /** @type {Array<string>} */\n  const result = []\n  /** @type {boolean | undefined} */\n  let atTab\n  while (++index < chunks.length) {\n    const chunk = chunks[index]\n    /** @type {string} */\n    let value\n    if (typeof chunk === 'string') {\n      value = chunk\n    } else\n      switch (chunk) {\n        case -5: {\n          value = '\\r'\n          break\n        }\n        case -4: {\n          value = '\\n'\n          break\n        }\n        case -3: {\n          value = '\\r' + '\\n'\n          break\n        }\n        case -2: {\n          value = expandTabs ? ' ' : '\\t'\n          break\n        }\n        case -1: {\n          if (!expandTabs && atTab) continue\n          value = ' '\n          break\n        }\n        default: {\n          // Currently only replacement character.\n          value = String.fromCharCode(chunk)\n        }\n      }\n    atTab = chunk === -2\n    result.push(value)\n  }\n  return result.join('')\n}\n", "/**\n * @typedef {import('micromark-util-types').Extension} Extension\n */\n\nimport {\n  attention,\n  autolink,\n  blockQuote,\n  characterEscape,\n  characterReference,\n  codeFenced,\n  codeIndented,\n  codeText,\n  definition,\n  hardBreakEscape,\n  headingAtx,\n  htmlFlow,\n  htmlText,\n  labelEnd,\n  labelStartImage,\n  labelStartLink,\n  lineEnding,\n  list,\n  setextUnderline,\n  thematicBreak\n} from 'micromark-core-commonmark'\nimport {resolver as resolveText} from './initialize/text.js'\n\n/** @satisfies {Extension['document']} */\nexport const document = {\n  [42]: list,\n  [43]: list,\n  [45]: list,\n  [48]: list,\n  [49]: list,\n  [50]: list,\n  [51]: list,\n  [52]: list,\n  [53]: list,\n  [54]: list,\n  [55]: list,\n  [56]: list,\n  [57]: list,\n  [62]: blockQuote\n}\n\n/** @satisfies {Extension['contentInitial']} */\nexport const contentInitial = {\n  [91]: definition\n}\n\n/** @satisfies {Extension['flowInitial']} */\nexport const flowInitial = {\n  [-2]: codeIndented,\n  [-1]: codeIndented,\n  [32]: codeIndented\n}\n\n/** @satisfies {Extension['flow']} */\nexport const flow = {\n  [35]: headingAtx,\n  [42]: thematicBreak,\n  [45]: [setextUnderline, thematicBreak],\n  [60]: htmlFlow,\n  [61]: setextUnderline,\n  [95]: thematicBreak,\n  [96]: codeFenced,\n  [126]: codeFenced\n}\n\n/** @satisfies {Extension['string']} */\nexport const string = {\n  [38]: characterReference,\n  [92]: characterEscape\n}\n\n/** @satisfies {Extension['text']} */\nexport const text = {\n  [-5]: lineEnding,\n  [-4]: lineEnding,\n  [-3]: lineEnding,\n  [33]: labelStartImage,\n  [38]: characterReference,\n  [42]: attention,\n  [60]: [autolink, htmlText],\n  [91]: labelStartLink,\n  [92]: [hardBreakEscape, characterEscape],\n  [93]: labelEnd,\n  [95]: attention,\n  [96]: codeText\n}\n\n/** @satisfies {Extension['insideSpan']} */\nexport const insideSpan = {\n  null: [attention, resolveText]\n}\n\n/** @satisfies {Extension['attentionMarkers']} */\nexport const attentionMarkers = {\n  null: [42, 95]\n}\n\n/** @satisfies {Extension['disable']} */\nexport const disable = {\n  null: []\n}\n", "/**\n * @typedef {import('micromark-util-types').Create} Create\n * @typedef {import('micromark-util-types').FullNormalizedExtension} FullNormalizedExtension\n * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct\n * @typedef {import('micromark-util-types').ParseContext} ParseContext\n * @typedef {import('micromark-util-types').ParseOptions} ParseOptions\n */\n\nimport {combineExtensions} from 'micromark-util-combine-extensions'\nimport {content} from './initialize/content.js'\nimport {document} from './initialize/document.js'\nimport {flow} from './initialize/flow.js'\nimport {string, text} from './initialize/text.js'\nimport {createTokenizer} from './create-tokenizer.js'\nimport * as defaultConstructs from './constructs.js'\n\n/**\n * @param {ParseOptions | null | undefined} [options]\n * @returns {ParseContext}\n */\nexport function parse(options) {\n  const settings = options || {}\n  const constructs =\n    /** @type {FullNormalizedExtension} */\n    combineExtensions([defaultConstructs, ...(settings.extensions || [])])\n\n  /** @type {ParseContext} */\n  const parser = {\n    defined: [],\n    lazy: {},\n    constructs,\n    content: create(content),\n    document: create(document),\n    flow: create(flow),\n    string: create(string),\n    text: create(text)\n  }\n  return parser\n\n  /**\n   * @param {InitialConstruct} initial\n   */\n  function create(initial) {\n    return creator\n    /** @type {Create} */\n    function creator(from) {\n      return createTokenizer(parser, initial, from)\n    }\n  }\n}\n", "/**\n * @typedef {import('micromark-util-types').Event} Event\n */\n\nimport {subtokenize} from 'micromark-util-subtokenize'\n\n/**\n * @param {Array<Event>} events\n * @returns {Array<Event>}\n */\nexport function postprocess(events) {\n  while (!subtokenize(events)) {\n    // Empty\n  }\n  return events\n}\n", "/**\n * @typedef {import('micromark-util-types').Chunk} Chunk\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Encoding} Encoding\n * @typedef {import('micromark-util-types').Value} Value\n */\n\n/**\n * @callback Preprocessor\n * @param {Value} value\n * @param {Encoding | null | undefined} [encoding]\n * @param {boolean | null | undefined} [end=false]\n * @returns {Array<Chunk>}\n */\n\nconst search = /[\\0\\t\\n\\r]/g\n\n/**\n * @returns {Preprocessor}\n */\nexport function preprocess() {\n  let column = 1\n  let buffer = ''\n  /** @type {boolean | undefined} */\n  let start = true\n  /** @type {boolean | undefined} */\n  let atCarriageReturn\n  return preprocessor\n\n  /** @type {Preprocessor} */\n  // eslint-disable-next-line complexity\n  function preprocessor(value, encoding, end) {\n    /** @type {Array<Chunk>} */\n    const chunks = []\n    /** @type {RegExpMatchArray | null} */\n    let match\n    /** @type {number} */\n    let next\n    /** @type {number} */\n    let startPosition\n    /** @type {number} */\n    let endPosition\n    /** @type {Code} */\n    let code\n    value =\n      buffer +\n      (typeof value === 'string'\n        ? value.toString()\n        : new TextDecoder(encoding || undefined).decode(value))\n    startPosition = 0\n    buffer = ''\n    if (start) {\n      // To do: `markdown-rs` actually parses BOMs (byte order mark).\n      if (value.charCodeAt(0) === 65279) {\n        startPosition++\n      }\n      start = undefined\n    }\n    while (startPosition < value.length) {\n      search.lastIndex = startPosition\n      match = search.exec(value)\n      endPosition =\n        match && match.index !== undefined ? match.index : value.length\n      code = value.charCodeAt(endPosition)\n      if (!match) {\n        buffer = value.slice(startPosition)\n        break\n      }\n      if (code === 10 && startPosition === endPosition && atCarriageReturn) {\n        chunks.push(-3)\n        atCarriageReturn = undefined\n      } else {\n        if (atCarriageReturn) {\n          chunks.push(-5)\n          atCarriageReturn = undefined\n        }\n        if (startPosition < endPosition) {\n          chunks.push(value.slice(startPosition, endPosition))\n          column += endPosition - startPosition\n        }\n        switch (code) {\n          case 0: {\n            chunks.push(65533)\n            column++\n            break\n          }\n          case 9: {\n            next = Math.ceil(column / 4) * 4\n            chunks.push(-2)\n            while (column++ < next) chunks.push(-1)\n            break\n          }\n          case 10: {\n            chunks.push(-4)\n            column = 1\n            break\n          }\n          default: {\n            atCarriageReturn = true\n            column = 1\n          }\n        }\n      }\n      startPosition = endPosition + 1\n    }\n    if (end) {\n      if (atCarriageReturn) chunks.push(-5)\n      if (buffer) chunks.push(buffer)\n      chunks.push(null)\n    }\n    return chunks\n  }\n}\n", "/**\n * @typedef {import('micromark-util-types').Encoding} Encoding\n * @typedef {import('micromark-util-types').Options} Options\n * @typedef {import('micromark-util-types').Value} Value\n */\n\nimport {compile} from './lib/compile.js'\nimport {parse} from './lib/parse.js'\nimport {postprocess} from './lib/postprocess.js'\nimport {preprocess} from './lib/preprocess.js'\nexport {compile} from './lib/compile.js'\nexport {parse} from './lib/parse.js'\nexport {postprocess} from './lib/postprocess.js'\nexport {preprocess} from './lib/preprocess.js'\n\n/**\n * Compile markdown to HTML.\n *\n * > Note: which encodings are supported depends on the engine.\n * > For info on Node.js, see:\n * > <https://nodejs.org/api/util.html#whatwg-supported-encodings>.\n *\n * @overload\n * @param {Value} value\n *   Markdown to parse (`string` or `Uint8Array`).\n * @param {Encoding | null | undefined} encoding\n *   Character encoding to understand `value` as when it\u2019s a `Uint8Array`\n *   (`string`, default: `'utf8'`).\n * @param {Options | null | undefined} [options]\n *   Configuration.\n * @returns {string}\n *   Compiled HTML.\n *\n * @overload\n * @param {Value} value\n *   Markdown to parse (`string` or `Uint8Array`).\n * @param {Options | null | undefined} [options]\n *   Configuration.\n * @returns {string}\n *   Compiled HTML.\n *\n * @param {Value} value\n *   Markdown to parse (`string` or `Uint8Array`).\n * @param {Encoding | Options | null | undefined} [encoding]\n *   Character encoding to understand `value` as when it\u2019s a `Uint8Array`\n *   (`string`, default: `'utf8'`).\n * @param {Options | null | undefined} [options]\n *   Configuration.\n * @returns {string}\n *   Compiled HTML.\n */\nexport function micromark(value, encoding, options) {\n  if (typeof encoding !== 'string') {\n    options = encoding\n    encoding = undefined\n  }\n  return compile(options)(\n    postprocess(\n      parse(options).document().write(preprocess()(value, encoding, true))\n    )\n  )\n}\n", "import {decodeNamedCharacterReference} from 'decode-named-character-reference'\nimport {decodeNumericCharacterReference} from 'micromark-util-decode-numeric-character-reference'\nconst characterEscapeOrReference =\n  /\\\\([!-/:-@[-`{-~])|&(#(?:\\d{1,7}|x[\\da-f]{1,6})|[\\da-z]{1,31});/gi\n\n/**\n * Decode markdown strings (which occur in places such as fenced code info\n * strings, destinations, labels, and titles).\n *\n * The \u201Cstring\u201D content type allows character escapes and -references.\n * This decodes those.\n *\n * @param {string} value\n *   Value to decode.\n * @returns {string}\n *   Decoded value.\n */\nexport function decodeString(value) {\n  return value.replace(characterEscapeOrReference, decode)\n}\n\n/**\n * @param {string} $0\n * @param {string} $1\n * @param {string} $2\n * @returns {string}\n */\nfunction decode($0, $1, $2) {\n  if ($1) {\n    // Escape.\n    return $1\n  }\n\n  // Reference.\n  const head = $2.charCodeAt(0)\n  if (head === 35) {\n    const head = $2.charCodeAt(1)\n    const hex = head === 120 || head === 88\n    return decodeNumericCharacterReference($2.slice(hex ? 2 : 1), hex ? 16 : 10)\n  }\n  return decodeNamedCharacterReference($2) || $0\n}\n", "/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Point} Point\n * @typedef {import('unist').Position} Position\n */\n\n/**\n * @typedef NodeLike\n * @property {string} type\n * @property {PositionLike | null | undefined} [position]\n *\n * @typedef PointLike\n * @property {number | null | undefined} [line]\n * @property {number | null | undefined} [column]\n * @property {number | null | undefined} [offset]\n *\n * @typedef PositionLike\n * @property {PointLike | null | undefined} [start]\n * @property {PointLike | null | undefined} [end]\n */\n\n/**\n * Serialize the positional info of a point, position (start and end points),\n * or node.\n *\n * @param {Node | NodeLike | Point | PointLike | Position | PositionLike | null | undefined} [value]\n *   Node, position, or point.\n * @returns {string}\n *   Pretty printed positional info of a node (`string`).\n *\n *   In the format of a range `ls:cs-le:ce` (when given `node` or `position`)\n *   or a point `l:c` (when given `point`), where `l` stands for line, `c` for\n *   column, `s` for `start`, and `e` for end.\n *   An empty string (`''`) is returned if the given value is neither `node`,\n *   `position`, nor `point`.\n */\nexport function stringifyPosition(value) {\n  // Nothing.\n  if (!value || typeof value !== 'object') {\n    return ''\n  }\n\n  // Node.\n  if ('position' in value || 'type' in value) {\n    return position(value.position)\n  }\n\n  // Position.\n  if ('start' in value || 'end' in value) {\n    return position(value)\n  }\n\n  // Point.\n  if ('line' in value || 'column' in value) {\n    return point(value)\n  }\n\n  // ?\n  return ''\n}\n\n/**\n * @param {Point | PointLike | null | undefined} point\n * @returns {string}\n */\nfunction point(point) {\n  return index(point && point.line) + ':' + index(point && point.column)\n}\n\n/**\n * @param {Position | PositionLike | null | undefined} pos\n * @returns {string}\n */\nfunction position(pos) {\n  return point(pos && pos.start) + '-' + point(pos && pos.end)\n}\n\n/**\n * @param {number | null | undefined} value\n * @returns {number}\n */\nfunction index(value) {\n  return value && typeof value === 'number' ? value : 1\n}\n", "export {stringifyPosition} from './lib/index.js'\n", "/**\n * @typedef {import('mdast').Break} Break\n * @typedef {import('mdast').Blockquote} Blockquote\n * @typedef {import('mdast').Code} Code\n * @typedef {import('mdast').Definition} Definition\n * @typedef {import('mdast').Emphasis} Emphasis\n * @typedef {import('mdast').Heading} Heading\n * @typedef {import('mdast').Html} Html\n * @typedef {import('mdast').Image} Image\n * @typedef {import('mdast').InlineCode} InlineCode\n * @typedef {import('mdast').Link} Link\n * @typedef {import('mdast').List} List\n * @typedef {import('mdast').ListItem} ListItem\n * @typedef {import('mdast').Nodes} Nodes\n * @typedef {import('mdast').Paragraph} Paragraph\n * @typedef {import('mdast').Parent} Parent\n * @typedef {import('mdast').PhrasingContent} PhrasingContent\n * @typedef {import('mdast').ReferenceType} ReferenceType\n * @typedef {import('mdast').Root} Root\n * @typedef {import('mdast').Strong} Strong\n * @typedef {import('mdast').Text} Text\n * @typedef {import('mdast').ThematicBreak} ThematicBreak\n *\n * @typedef {import('micromark-util-types').Encoding} Encoding\n * @typedef {import('micromark-util-types').Event} Event\n * @typedef {import('micromark-util-types').ParseOptions} ParseOptions\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Value} Value\n *\n * @typedef {import('unist').Point} Point\n *\n * @typedef {import('../index.js').CompileData} CompileData\n */\n\n/**\n * @typedef {Omit<Parent, 'children' | 'type'> & {type: 'fragment', children: Array<PhrasingContent>}} Fragment\n */\n\n/**\n * @callback Transform\n *   Extra transform, to change the AST afterwards.\n * @param {Root} tree\n *   Tree to transform.\n * @returns {Root | null | undefined | void}\n *   New tree or nothing (in which case the current tree is used).\n *\n * @callback Handle\n *   Handle a token.\n * @param {CompileContext} this\n *   Context.\n * @param {Token} token\n *   Current token.\n * @returns {undefined | void}\n *   Nothing.\n *\n * @typedef {Record<string, Handle>} Handles\n *   Token types mapping to handles\n *\n * @callback OnEnterError\n *   Handle the case where the `right` token is open, but it is closed (by the\n *   `left` token) or because we reached the end of the document.\n * @param {Omit<CompileContext, 'sliceSerialize'>} this\n *   Context.\n * @param {Token | undefined} left\n *   Left token.\n * @param {Token} right\n *   Right token.\n * @returns {undefined}\n *   Nothing.\n *\n * @callback OnExitError\n *   Handle the case where the `right` token is open but it is closed by\n *   exiting the `left` token.\n * @param {Omit<CompileContext, 'sliceSerialize'>} this\n *   Context.\n * @param {Token} left\n *   Left token.\n * @param {Token} right\n *   Right token.\n * @returns {undefined}\n *   Nothing.\n *\n * @typedef {[Token, OnEnterError | undefined]} TokenTuple\n *   Open token on the stack, with an optional error handler for when\n *   that token isn\u2019t closed properly.\n */\n\n/**\n * @typedef Config\n *   Configuration.\n *\n *   We have our defaults, but extensions will add more.\n * @property {Array<string>} canContainEols\n *   Token types where line endings are used.\n * @property {Handles} enter\n *   Opening handles.\n * @property {Handles} exit\n *   Closing handles.\n * @property {Array<Transform>} transforms\n *   Tree transforms.\n *\n * @typedef {Partial<Config>} Extension\n *   Change how markdown tokens from micromark are turned into mdast.\n *\n * @typedef CompileContext\n *   mdast compiler context.\n * @property {Array<Fragment | Nodes>} stack\n *   Stack of nodes.\n * @property {Array<TokenTuple>} tokenStack\n *   Stack of tokens.\n * @property {(this: CompileContext) => undefined} buffer\n *   Capture some of the output data.\n * @property {(this: CompileContext) => string} resume\n *   Stop capturing and access the output data.\n * @property {(this: CompileContext, node: Nodes, token: Token, onError?: OnEnterError) => undefined} enter\n *   Enter a node.\n * @property {(this: CompileContext, token: Token, onError?: OnExitError) => undefined} exit\n *   Exit a node.\n * @property {TokenizeContext['sliceSerialize']} sliceSerialize\n *   Get the string value of a token.\n * @property {Config} config\n *   Configuration.\n * @property {CompileData} data\n *   Info passed around; key/value store.\n *\n * @typedef FromMarkdownOptions\n *   Configuration for how to build mdast.\n * @property {Array<Extension | Array<Extension>> | null | undefined} [mdastExtensions]\n *   Extensions for this utility to change how tokens are turned into a tree.\n *\n * @typedef {ParseOptions & FromMarkdownOptions} Options\n *   Configuration.\n */\n\nimport {toString} from 'mdast-util-to-string'\nimport {parse, postprocess, preprocess} from 'micromark'\nimport {decodeNumericCharacterReference} from 'micromark-util-decode-numeric-character-reference'\nimport {decodeString} from 'micromark-util-decode-string'\nimport {normalizeIdentifier} from 'micromark-util-normalize-identifier'\nimport {decodeNamedCharacterReference} from 'decode-named-character-reference'\nimport {stringifyPosition} from 'unist-util-stringify-position'\nconst own = {}.hasOwnProperty\n\n/**\n * Turn markdown into a syntax tree.\n *\n * @overload\n * @param {Value} value\n * @param {Encoding | null | undefined} [encoding]\n * @param {Options | null | undefined} [options]\n * @returns {Root}\n *\n * @overload\n * @param {Value} value\n * @param {Options | null | undefined} [options]\n * @returns {Root}\n *\n * @param {Value} value\n *   Markdown to parse.\n * @param {Encoding | Options | null | undefined} [encoding]\n *   Character encoding for when `value` is `Buffer`.\n * @param {Options | null | undefined} [options]\n *   Configuration.\n * @returns {Root}\n *   mdast tree.\n */\nexport function fromMarkdown(value, encoding, options) {\n  if (typeof encoding !== 'string') {\n    options = encoding\n    encoding = undefined\n  }\n  return compiler(options)(\n    postprocess(\n      parse(options).document().write(preprocess()(value, encoding, true))\n    )\n  )\n}\n\n/**\n * Note this compiler only understand complete buffering, not streaming.\n *\n * @param {Options | null | undefined} [options]\n */\nfunction compiler(options) {\n  /** @type {Config} */\n  const config = {\n    transforms: [],\n    canContainEols: ['emphasis', 'fragment', 'heading', 'paragraph', 'strong'],\n    enter: {\n      autolink: opener(link),\n      autolinkProtocol: onenterdata,\n      autolinkEmail: onenterdata,\n      atxHeading: opener(heading),\n      blockQuote: opener(blockQuote),\n      characterEscape: onenterdata,\n      characterReference: onenterdata,\n      codeFenced: opener(codeFlow),\n      codeFencedFenceInfo: buffer,\n      codeFencedFenceMeta: buffer,\n      codeIndented: opener(codeFlow, buffer),\n      codeText: opener(codeText, buffer),\n      codeTextData: onenterdata,\n      data: onenterdata,\n      codeFlowValue: onenterdata,\n      definition: opener(definition),\n      definitionDestinationString: buffer,\n      definitionLabelString: buffer,\n      definitionTitleString: buffer,\n      emphasis: opener(emphasis),\n      hardBreakEscape: opener(hardBreak),\n      hardBreakTrailing: opener(hardBreak),\n      htmlFlow: opener(html, buffer),\n      htmlFlowData: onenterdata,\n      htmlText: opener(html, buffer),\n      htmlTextData: onenterdata,\n      image: opener(image),\n      label: buffer,\n      link: opener(link),\n      listItem: opener(listItem),\n      listItemValue: onenterlistitemvalue,\n      listOrdered: opener(list, onenterlistordered),\n      listUnordered: opener(list),\n      paragraph: opener(paragraph),\n      reference: onenterreference,\n      referenceString: buffer,\n      resourceDestinationString: buffer,\n      resourceTitleString: buffer,\n      setextHeading: opener(heading),\n      strong: opener(strong),\n      thematicBreak: opener(thematicBreak)\n    },\n    exit: {\n      atxHeading: closer(),\n      atxHeadingSequence: onexitatxheadingsequence,\n      autolink: closer(),\n      autolinkEmail: onexitautolinkemail,\n      autolinkProtocol: onexitautolinkprotocol,\n      blockQuote: closer(),\n      characterEscapeValue: onexitdata,\n      characterReferenceMarkerHexadecimal: onexitcharacterreferencemarker,\n      characterReferenceMarkerNumeric: onexitcharacterreferencemarker,\n      characterReferenceValue: onexitcharacterreferencevalue,\n      codeFenced: closer(onexitcodefenced),\n      codeFencedFence: onexitcodefencedfence,\n      codeFencedFenceInfo: onexitcodefencedfenceinfo,\n      codeFencedFenceMeta: onexitcodefencedfencemeta,\n      codeFlowValue: onexitdata,\n      codeIndented: closer(onexitcodeindented),\n      codeText: closer(onexitcodetext),\n      codeTextData: onexitdata,\n      data: onexitdata,\n      definition: closer(),\n      definitionDestinationString: onexitdefinitiondestinationstring,\n      definitionLabelString: onexitdefinitionlabelstring,\n      definitionTitleString: onexitdefinitiontitlestring,\n      emphasis: closer(),\n      hardBreakEscape: closer(onexithardbreak),\n      hardBreakTrailing: closer(onexithardbreak),\n      htmlFlow: closer(onexithtmlflow),\n      htmlFlowData: onexitdata,\n      htmlText: closer(onexithtmltext),\n      htmlTextData: onexitdata,\n      image: closer(onexitimage),\n      label: onexitlabel,\n      labelText: onexitlabeltext,\n      lineEnding: onexitlineending,\n      link: closer(onexitlink),\n      listItem: closer(),\n      listOrdered: closer(),\n      listUnordered: closer(),\n      paragraph: closer(),\n      referenceString: onexitreferencestring,\n      resourceDestinationString: onexitresourcedestinationstring,\n      resourceTitleString: onexitresourcetitlestring,\n      resource: onexitresource,\n      setextHeading: closer(onexitsetextheading),\n      setextHeadingLineSequence: onexitsetextheadinglinesequence,\n      setextHeadingText: onexitsetextheadingtext,\n      strong: closer(),\n      thematicBreak: closer()\n    }\n  }\n  configure(config, (options || {}).mdastExtensions || [])\n\n  /** @type {CompileData} */\n  const data = {}\n  return compile\n\n  /**\n   * Turn micromark events into an mdast tree.\n   *\n   * @param {Array<Event>} events\n   *   Events.\n   * @returns {Root}\n   *   mdast tree.\n   */\n  function compile(events) {\n    /** @type {Root} */\n    let tree = {\n      type: 'root',\n      children: []\n    }\n    /** @type {Omit<CompileContext, 'sliceSerialize'>} */\n    const context = {\n      stack: [tree],\n      tokenStack: [],\n      config,\n      enter,\n      exit,\n      buffer,\n      resume,\n      data\n    }\n    /** @type {Array<number>} */\n    const listStack = []\n    let index = -1\n    while (++index < events.length) {\n      // We preprocess lists to add `listItem` tokens, and to infer whether\n      // items the list itself are spread out.\n      if (\n        events[index][1].type === 'listOrdered' ||\n        events[index][1].type === 'listUnordered'\n      ) {\n        if (events[index][0] === 'enter') {\n          listStack.push(index)\n        } else {\n          const tail = listStack.pop()\n          index = prepareList(events, tail, index)\n        }\n      }\n    }\n    index = -1\n    while (++index < events.length) {\n      const handler = config[events[index][0]]\n      if (own.call(handler, events[index][1].type)) {\n        handler[events[index][1].type].call(\n          Object.assign(\n            {\n              sliceSerialize: events[index][2].sliceSerialize\n            },\n            context\n          ),\n          events[index][1]\n        )\n      }\n    }\n\n    // Handle tokens still being open.\n    if (context.tokenStack.length > 0) {\n      const tail = context.tokenStack[context.tokenStack.length - 1]\n      const handler = tail[1] || defaultOnError\n      handler.call(context, undefined, tail[0])\n    }\n\n    // Figure out `root` position.\n    tree.position = {\n      start: point(\n        events.length > 0\n          ? events[0][1].start\n          : {\n              line: 1,\n              column: 1,\n              offset: 0\n            }\n      ),\n      end: point(\n        events.length > 0\n          ? events[events.length - 2][1].end\n          : {\n              line: 1,\n              column: 1,\n              offset: 0\n            }\n      )\n    }\n\n    // Call transforms.\n    index = -1\n    while (++index < config.transforms.length) {\n      tree = config.transforms[index](tree) || tree\n    }\n    return tree\n  }\n\n  /**\n   * @param {Array<Event>} events\n   * @param {number} start\n   * @param {number} length\n   * @returns {number}\n   */\n  function prepareList(events, start, length) {\n    let index = start - 1\n    let containerBalance = -1\n    let listSpread = false\n    /** @type {Token | undefined} */\n    let listItem\n    /** @type {number | undefined} */\n    let lineIndex\n    /** @type {number | undefined} */\n    let firstBlankLineIndex\n    /** @type {boolean | undefined} */\n    let atMarker\n    while (++index <= length) {\n      const event = events[index]\n      switch (event[1].type) {\n        case 'listUnordered':\n        case 'listOrdered':\n        case 'blockQuote': {\n          if (event[0] === 'enter') {\n            containerBalance++\n          } else {\n            containerBalance--\n          }\n          atMarker = undefined\n          break\n        }\n        case 'lineEndingBlank': {\n          if (event[0] === 'enter') {\n            if (\n              listItem &&\n              !atMarker &&\n              !containerBalance &&\n              !firstBlankLineIndex\n            ) {\n              firstBlankLineIndex = index\n            }\n            atMarker = undefined\n          }\n          break\n        }\n        case 'linePrefix':\n        case 'listItemValue':\n        case 'listItemMarker':\n        case 'listItemPrefix':\n        case 'listItemPrefixWhitespace': {\n          // Empty.\n\n          break\n        }\n        default: {\n          atMarker = undefined\n        }\n      }\n      if (\n        (!containerBalance &&\n          event[0] === 'enter' &&\n          event[1].type === 'listItemPrefix') ||\n        (containerBalance === -1 &&\n          event[0] === 'exit' &&\n          (event[1].type === 'listUnordered' ||\n            event[1].type === 'listOrdered'))\n      ) {\n        if (listItem) {\n          let tailIndex = index\n          lineIndex = undefined\n          while (tailIndex--) {\n            const tailEvent = events[tailIndex]\n            if (\n              tailEvent[1].type === 'lineEnding' ||\n              tailEvent[1].type === 'lineEndingBlank'\n            ) {\n              if (tailEvent[0] === 'exit') continue\n              if (lineIndex) {\n                events[lineIndex][1].type = 'lineEndingBlank'\n                listSpread = true\n              }\n              tailEvent[1].type = 'lineEnding'\n              lineIndex = tailIndex\n            } else if (\n              tailEvent[1].type === 'linePrefix' ||\n              tailEvent[1].type === 'blockQuotePrefix' ||\n              tailEvent[1].type === 'blockQuotePrefixWhitespace' ||\n              tailEvent[1].type === 'blockQuoteMarker' ||\n              tailEvent[1].type === 'listItemIndent'\n            ) {\n              // Empty\n            } else {\n              break\n            }\n          }\n          if (\n            firstBlankLineIndex &&\n            (!lineIndex || firstBlankLineIndex < lineIndex)\n          ) {\n            listItem._spread = true\n          }\n\n          // Fix position.\n          listItem.end = Object.assign(\n            {},\n            lineIndex ? events[lineIndex][1].start : event[1].end\n          )\n          events.splice(lineIndex || index, 0, ['exit', listItem, event[2]])\n          index++\n          length++\n        }\n\n        // Create a new list item.\n        if (event[1].type === 'listItemPrefix') {\n          /** @type {Token} */\n          const item = {\n            type: 'listItem',\n            _spread: false,\n            start: Object.assign({}, event[1].start),\n            // @ts-expect-error: we\u2019ll add `end` in a second.\n            end: undefined\n          }\n          listItem = item\n          events.splice(index, 0, ['enter', item, event[2]])\n          index++\n          length++\n          firstBlankLineIndex = undefined\n          atMarker = true\n        }\n      }\n    }\n    events[start][1]._spread = listSpread\n    return length\n  }\n\n  /**\n   * Create an opener handle.\n   *\n   * @param {(token: Token) => Nodes} create\n   *   Create a node.\n   * @param {Handle | undefined} [and]\n   *   Optional function to also run.\n   * @returns {Handle}\n   *   Handle.\n   */\n  function opener(create, and) {\n    return open\n\n    /**\n     * @this {CompileContext}\n     * @param {Token} token\n     * @returns {undefined}\n     */\n    function open(token) {\n      enter.call(this, create(token), token)\n      if (and) and.call(this, token)\n    }\n  }\n\n  /**\n   * @this {CompileContext}\n   * @returns {undefined}\n   */\n  function buffer() {\n    this.stack.push({\n      type: 'fragment',\n      children: []\n    })\n  }\n\n  /**\n   * @this {CompileContext}\n   *   Context.\n   * @param {Nodes} node\n   *   Node to enter.\n   * @param {Token} token\n   *   Corresponding token.\n   * @param {OnEnterError | undefined} [errorHandler]\n   *   Handle the case where this token is open, but it is closed by something else.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  function enter(node, token, errorHandler) {\n    const parent = this.stack[this.stack.length - 1]\n    /** @type {Array<Nodes>} */\n    const siblings = parent.children\n    siblings.push(node)\n    this.stack.push(node)\n    this.tokenStack.push([token, errorHandler])\n    node.position = {\n      start: point(token.start),\n      // @ts-expect-error: `end` will be patched later.\n      end: undefined\n    }\n  }\n\n  /**\n   * Create a closer handle.\n   *\n   * @param {Handle | undefined} [and]\n   *   Optional function to also run.\n   * @returns {Handle}\n   *   Handle.\n   */\n  function closer(and) {\n    return close\n\n    /**\n     * @this {CompileContext}\n     * @param {Token} token\n     * @returns {undefined}\n     */\n    function close(token) {\n      if (and) and.call(this, token)\n      exit.call(this, token)\n    }\n  }\n\n  /**\n   * @this {CompileContext}\n   *   Context.\n   * @param {Token} token\n   *   Corresponding token.\n   * @param {OnExitError | undefined} [onExitError]\n   *   Handle the case where another token is open.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  function exit(token, onExitError) {\n    const node = this.stack.pop()\n    const open = this.tokenStack.pop()\n    if (!open) {\n      throw new Error(\n        'Cannot close `' +\n          token.type +\n          '` (' +\n          stringifyPosition({\n            start: token.start,\n            end: token.end\n          }) +\n          '): it\u2019s not open'\n      )\n    } else if (open[0].type !== token.type) {\n      if (onExitError) {\n        onExitError.call(this, token, open[0])\n      } else {\n        const handler = open[1] || defaultOnError\n        handler.call(this, token, open[0])\n      }\n    }\n    node.position.end = point(token.end)\n  }\n\n  /**\n   * @this {CompileContext}\n   * @returns {string}\n   */\n  function resume() {\n    return toString(this.stack.pop())\n  }\n\n  //\n  // Handlers.\n  //\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onenterlistordered() {\n    this.data.expectingFirstListItemValue = true\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onenterlistitemvalue(token) {\n    if (this.data.expectingFirstListItemValue) {\n      const ancestor = this.stack[this.stack.length - 2]\n      ancestor.start = Number.parseInt(this.sliceSerialize(token), 10)\n      this.data.expectingFirstListItemValue = undefined\n    }\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcodefencedfenceinfo() {\n    const data = this.resume()\n    const node = this.stack[this.stack.length - 1]\n    node.lang = data\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcodefencedfencemeta() {\n    const data = this.resume()\n    const node = this.stack[this.stack.length - 1]\n    node.meta = data\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcodefencedfence() {\n    // Exit if this is the closing fence.\n    if (this.data.flowCodeInside) return\n    this.buffer()\n    this.data.flowCodeInside = true\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcodefenced() {\n    const data = this.resume()\n    const node = this.stack[this.stack.length - 1]\n    node.value = data.replace(/^(\\r?\\n|\\r)|(\\r?\\n|\\r)$/g, '')\n    this.data.flowCodeInside = undefined\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcodeindented() {\n    const data = this.resume()\n    const node = this.stack[this.stack.length - 1]\n    node.value = data.replace(/(\\r?\\n|\\r)$/g, '')\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitdefinitionlabelstring(token) {\n    const label = this.resume()\n    const node = this.stack[this.stack.length - 1]\n    node.label = label\n    node.identifier = normalizeIdentifier(\n      this.sliceSerialize(token)\n    ).toLowerCase()\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitdefinitiontitlestring() {\n    const data = this.resume()\n    const node = this.stack[this.stack.length - 1]\n    node.title = data\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitdefinitiondestinationstring() {\n    const data = this.resume()\n    const node = this.stack[this.stack.length - 1]\n    node.url = data\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitatxheadingsequence(token) {\n    const node = this.stack[this.stack.length - 1]\n    if (!node.depth) {\n      const depth = this.sliceSerialize(token).length\n      node.depth = depth\n    }\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitsetextheadingtext() {\n    this.data.setextHeadingSlurpLineEnding = true\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitsetextheadinglinesequence(token) {\n    const node = this.stack[this.stack.length - 1]\n    node.depth = this.sliceSerialize(token).codePointAt(0) === 61 ? 1 : 2\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitsetextheading() {\n    this.data.setextHeadingSlurpLineEnding = undefined\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onenterdata(token) {\n    const node = this.stack[this.stack.length - 1]\n    /** @type {Array<Nodes>} */\n    const siblings = node.children\n    let tail = siblings[siblings.length - 1]\n    if (!tail || tail.type !== 'text') {\n      // Add a new text node.\n      tail = text()\n      tail.position = {\n        start: point(token.start),\n        // @ts-expect-error: we\u2019ll add `end` later.\n        end: undefined\n      }\n      siblings.push(tail)\n    }\n    this.stack.push(tail)\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitdata(token) {\n    const tail = this.stack.pop()\n    tail.value += this.sliceSerialize(token)\n    tail.position.end = point(token.end)\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitlineending(token) {\n    const context = this.stack[this.stack.length - 1]\n    // If we\u2019re at a hard break, include the line ending in there.\n    if (this.data.atHardBreak) {\n      const tail = context.children[context.children.length - 1]\n      tail.position.end = point(token.end)\n      this.data.atHardBreak = undefined\n      return\n    }\n    if (\n      !this.data.setextHeadingSlurpLineEnding &&\n      config.canContainEols.includes(context.type)\n    ) {\n      onenterdata.call(this, token)\n      onexitdata.call(this, token)\n    }\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexithardbreak() {\n    this.data.atHardBreak = true\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexithtmlflow() {\n    const data = this.resume()\n    const node = this.stack[this.stack.length - 1]\n    node.value = data\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexithtmltext() {\n    const data = this.resume()\n    const node = this.stack[this.stack.length - 1]\n    node.value = data\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitcodetext() {\n    const data = this.resume()\n    const node = this.stack[this.stack.length - 1]\n    node.value = data\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitlink() {\n    const node = this.stack[this.stack.length - 1]\n    // Note: there are also `identifier` and `label` fields on this link node!\n    // These are used / cleaned here.\n    // To do: clean.\n    if (this.data.inReference) {\n      /** @type {ReferenceType} */\n      const referenceType = this.data.referenceType || 'shortcut'\n      node.type += 'Reference'\n      // @ts-expect-error: mutate.\n      node.referenceType = referenceType\n      // @ts-expect-error: mutate.\n      delete node.url\n      delete node.title\n    } else {\n      // @ts-expect-error: mutate.\n      delete node.identifier\n      // @ts-expect-error: mutate.\n      delete node.label\n    }\n    this.data.referenceType = undefined\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitimage() {\n    const node = this.stack[this.stack.length - 1]\n    // Note: there are also `identifier` and `label` fields on this link node!\n    // These are used / cleaned here.\n    // To do: clean.\n    if (this.data.inReference) {\n      /** @type {ReferenceType} */\n      const referenceType = this.data.referenceType || 'shortcut'\n      node.type += 'Reference'\n      // @ts-expect-error: mutate.\n      node.referenceType = referenceType\n      // @ts-expect-error: mutate.\n      delete node.url\n      delete node.title\n    } else {\n      // @ts-expect-error: mutate.\n      delete node.identifier\n      // @ts-expect-error: mutate.\n      delete node.label\n    }\n    this.data.referenceType = undefined\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitlabeltext(token) {\n    const string = this.sliceSerialize(token)\n    const ancestor = this.stack[this.stack.length - 2]\n    // @ts-expect-error: stash this on the node, as it might become a reference\n    // later.\n    ancestor.label = decodeString(string)\n    // @ts-expect-error: same as above.\n    ancestor.identifier = normalizeIdentifier(string).toLowerCase()\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitlabel() {\n    const fragment = this.stack[this.stack.length - 1]\n    const value = this.resume()\n    const node = this.stack[this.stack.length - 1]\n    // Assume a reference.\n    this.data.inReference = true\n    if (node.type === 'link') {\n      /** @type {Array<PhrasingContent>} */\n      const children = fragment.children\n      node.children = children\n    } else {\n      node.alt = value\n    }\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitresourcedestinationstring() {\n    const data = this.resume()\n    const node = this.stack[this.stack.length - 1]\n    node.url = data\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitresourcetitlestring() {\n    const data = this.resume()\n    const node = this.stack[this.stack.length - 1]\n    node.title = data\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitresource() {\n    this.data.inReference = undefined\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onenterreference() {\n    this.data.referenceType = 'collapsed'\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitreferencestring(token) {\n    const label = this.resume()\n    const node = this.stack[this.stack.length - 1]\n    // @ts-expect-error: stash this on the node, as it might become a reference\n    // later.\n    node.label = label\n    // @ts-expect-error: same as above.\n    node.identifier = normalizeIdentifier(\n      this.sliceSerialize(token)\n    ).toLowerCase()\n    this.data.referenceType = 'full'\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitcharacterreferencemarker(token) {\n    this.data.characterReferenceType = token.type\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcharacterreferencevalue(token) {\n    const data = this.sliceSerialize(token)\n    const type = this.data.characterReferenceType\n    /** @type {string} */\n    let value\n    if (type) {\n      value = decodeNumericCharacterReference(\n        data,\n        type === 'characterReferenceMarkerNumeric' ? 10 : 16\n      )\n      this.data.characterReferenceType = undefined\n    } else {\n      const result = decodeNamedCharacterReference(data)\n      value = result\n    }\n    const tail = this.stack.pop()\n    tail.value += value\n    tail.position.end = point(token.end)\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitautolinkprotocol(token) {\n    onexitdata.call(this, token)\n    const node = this.stack[this.stack.length - 1]\n    node.url = this.sliceSerialize(token)\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitautolinkemail(token) {\n    onexitdata.call(this, token)\n    const node = this.stack[this.stack.length - 1]\n    node.url = 'mailto:' + this.sliceSerialize(token)\n  }\n\n  //\n  // Creaters.\n  //\n\n  /** @returns {Blockquote} */\n  function blockQuote() {\n    return {\n      type: 'blockquote',\n      children: []\n    }\n  }\n\n  /** @returns {Code} */\n  function codeFlow() {\n    return {\n      type: 'code',\n      lang: null,\n      meta: null,\n      value: ''\n    }\n  }\n\n  /** @returns {InlineCode} */\n  function codeText() {\n    return {\n      type: 'inlineCode',\n      value: ''\n    }\n  }\n\n  /** @returns {Definition} */\n  function definition() {\n    return {\n      type: 'definition',\n      identifier: '',\n      label: null,\n      title: null,\n      url: ''\n    }\n  }\n\n  /** @returns {Emphasis} */\n  function emphasis() {\n    return {\n      type: 'emphasis',\n      children: []\n    }\n  }\n\n  /** @returns {Heading} */\n  function heading() {\n    return {\n      type: 'heading',\n      // @ts-expect-error `depth` will be set later.\n      depth: 0,\n      children: []\n    }\n  }\n\n  /** @returns {Break} */\n  function hardBreak() {\n    return {\n      type: 'break'\n    }\n  }\n\n  /** @returns {Html} */\n  function html() {\n    return {\n      type: 'html',\n      value: ''\n    }\n  }\n\n  /** @returns {Image} */\n  function image() {\n    return {\n      type: 'image',\n      title: null,\n      url: '',\n      alt: null\n    }\n  }\n\n  /** @returns {Link} */\n  function link() {\n    return {\n      type: 'link',\n      title: null,\n      url: '',\n      children: []\n    }\n  }\n\n  /**\n   * @param {Token} token\n   * @returns {List}\n   */\n  function list(token) {\n    return {\n      type: 'list',\n      ordered: token.type === 'listOrdered',\n      start: null,\n      spread: token._spread,\n      children: []\n    }\n  }\n\n  /**\n   * @param {Token} token\n   * @returns {ListItem}\n   */\n  function listItem(token) {\n    return {\n      type: 'listItem',\n      spread: token._spread,\n      checked: null,\n      children: []\n    }\n  }\n\n  /** @returns {Paragraph} */\n  function paragraph() {\n    return {\n      type: 'paragraph',\n      children: []\n    }\n  }\n\n  /** @returns {Strong} */\n  function strong() {\n    return {\n      type: 'strong',\n      children: []\n    }\n  }\n\n  /** @returns {Text} */\n  function text() {\n    return {\n      type: 'text',\n      value: ''\n    }\n  }\n\n  /** @returns {ThematicBreak} */\n  function thematicBreak() {\n    return {\n      type: 'thematicBreak'\n    }\n  }\n}\n\n/**\n * Copy a point-like value.\n *\n * @param {Point} d\n *   Point-like value.\n * @returns {Point}\n *   unist point.\n */\nfunction point(d) {\n  return {\n    line: d.line,\n    column: d.column,\n    offset: d.offset\n  }\n}\n\n/**\n * @param {Config} combined\n * @param {Array<Array<Extension> | Extension>} extensions\n * @returns {undefined}\n */\nfunction configure(combined, extensions) {\n  let index = -1\n  while (++index < extensions.length) {\n    const value = extensions[index]\n    if (Array.isArray(value)) {\n      configure(combined, value)\n    } else {\n      extension(combined, value)\n    }\n  }\n}\n\n/**\n * @param {Config} combined\n * @param {Extension} extension\n * @returns {undefined}\n */\nfunction extension(combined, extension) {\n  /** @type {keyof Extension} */\n  let key\n  for (key in extension) {\n    if (own.call(extension, key)) {\n      switch (key) {\n        case 'canContainEols': {\n          const right = extension[key]\n          if (right) {\n            combined[key].push(...right)\n          }\n          break\n        }\n        case 'transforms': {\n          const right = extension[key]\n          if (right) {\n            combined[key].push(...right)\n          }\n          break\n        }\n        case 'enter':\n        case 'exit': {\n          const right = extension[key]\n          if (right) {\n            Object.assign(combined[key], right)\n          }\n          break\n        }\n        // No default\n      }\n    }\n  }\n}\n\n/** @type {OnEnterError} */\nfunction defaultOnError(left, right) {\n  if (left) {\n    throw new Error(\n      'Cannot close `' +\n        left.type +\n        '` (' +\n        stringifyPosition({\n          start: left.start,\n          end: left.end\n        }) +\n        '): a different token (`' +\n        right.type +\n        '`, ' +\n        stringifyPosition({\n          start: right.start,\n          end: right.end\n        }) +\n        ') is open'\n    )\n  } else {\n    throw new Error(\n      'Cannot close document, a token (`' +\n        right.type +\n        '`, ' +\n        stringifyPosition({\n          start: right.start,\n          end: right.end\n        }) +\n        ') is still open'\n    )\n  }\n}\n", "// Note: types exported from `index.d.ts`.\nexport {fromMarkdown} from './lib/index.js'\n", "/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Parent} Parent\n */\n\n/**\n * @template Fn\n * @template Fallback\n * @typedef {Fn extends (value: any) => value is infer Thing ? Thing : Fallback} Predicate\n */\n\n/**\n * @callback Check\n *   Check that an arbitrary value is a node.\n * @param {unknown} this\n *   The given context.\n * @param {unknown} [node]\n *   Anything (typically a node).\n * @param {number | null | undefined} [index]\n *   The node\u2019s position in its parent.\n * @param {Parent | null | undefined} [parent]\n *   The node\u2019s parent.\n * @returns {boolean}\n *   Whether this is a node and passes a test.\n *\n * @typedef {Record<string, unknown> | Node} Props\n *   Object to check for equivalence.\n *\n *   Note: `Node` is included as it is common but is not indexable.\n *\n * @typedef {Array<Props | TestFunction | string> | Props | TestFunction | string | null | undefined} Test\n *   Check for an arbitrary node.\n *\n * @callback TestFunction\n *   Check if a node passes a test.\n * @param {unknown} this\n *   The given context.\n * @param {Node} node\n *   A node.\n * @param {number | undefined} [index]\n *   The node\u2019s position in its parent.\n * @param {Parent | undefined} [parent]\n *   The node\u2019s parent.\n * @returns {boolean | undefined | void}\n *   Whether this node passes the test.\n *\n *   Note: `void` is included until TS sees no return as `undefined`.\n */\n\n/**\n * Check if `node` is a `Node` and whether it passes the given test.\n *\n * @param {unknown} node\n *   Thing to check, typically `Node`.\n * @param {Test} test\n *   A check for a specific node.\n * @param {number | null | undefined} index\n *   The node\u2019s position in its parent.\n * @param {Parent | null | undefined} parent\n *   The node\u2019s parent.\n * @param {unknown} context\n *   Context object (`this`) to pass to `test` functions.\n * @returns {boolean}\n *   Whether `node` is a node and passes a test.\n */\nexport const is =\n  // Note: overloads in JSDoc can\u2019t yet use different `@template`s.\n  /**\n   * @type {(\n   *   (<Condition extends string>(node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & {type: Condition}) &\n   *   (<Condition extends Props>(node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Condition) &\n   *   (<Condition extends TestFunction>(node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Predicate<Condition, Node>) &\n   *   ((node?: null | undefined) => false) &\n   *   ((node: unknown, test?: null | undefined, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node) &\n   *   ((node: unknown, test?: Test, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => boolean)\n   * )}\n   */\n  (\n    /**\n     * @param {unknown} [node]\n     * @param {Test} [test]\n     * @param {number | null | undefined} [index]\n     * @param {Parent | null | undefined} [parent]\n     * @param {unknown} [context]\n     * @returns {boolean}\n     */\n    // eslint-disable-next-line max-params\n    function (node, test, index, parent, context) {\n      const check = convert(test)\n\n      if (\n        index !== undefined &&\n        index !== null &&\n        (typeof index !== 'number' ||\n          index < 0 ||\n          index === Number.POSITIVE_INFINITY)\n      ) {\n        throw new Error('Expected positive finite index')\n      }\n\n      if (\n        parent !== undefined &&\n        parent !== null &&\n        (!is(parent) || !parent.children)\n      ) {\n        throw new Error('Expected parent node')\n      }\n\n      if (\n        (parent === undefined || parent === null) !==\n        (index === undefined || index === null)\n      ) {\n        throw new Error('Expected both parent and index')\n      }\n\n      return looksLikeANode(node)\n        ? check.call(context, node, index, parent)\n        : false\n    }\n  )\n\n/**\n * Generate an assertion from a test.\n *\n * Useful if you\u2019re going to test many nodes, for example when creating a\n * utility where something else passes a compatible test.\n *\n * The created function is a bit faster because it expects valid input only:\n * a `node`, `index`, and `parent`.\n *\n * @param {Test} test\n *   *   when nullish, checks if `node` is a `Node`.\n *   *   when `string`, works like passing `(node) => node.type === test`.\n *   *   when `function` checks if function passed the node is true.\n *   *   when `object`, checks that all keys in test are in node, and that they have (strictly) equal values.\n *   *   when `array`, checks if any one of the subtests pass.\n * @returns {Check}\n *   An assertion.\n */\nexport const convert =\n  // Note: overloads in JSDoc can\u2019t yet use different `@template`s.\n  /**\n   * @type {(\n   *   (<Condition extends string>(test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & {type: Condition}) &\n   *   (<Condition extends Props>(test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Condition) &\n   *   (<Condition extends TestFunction>(test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Predicate<Condition, Node>) &\n   *   ((test?: null | undefined) => (node?: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node) &\n   *   ((test?: Test) => Check)\n   * )}\n   */\n  (\n    /**\n     * @param {Test} [test]\n     * @returns {Check}\n     */\n    function (test) {\n      if (test === null || test === undefined) {\n        return ok\n      }\n\n      if (typeof test === 'function') {\n        return castFactory(test)\n      }\n\n      if (typeof test === 'object') {\n        return Array.isArray(test) ? anyFactory(test) : propsFactory(test)\n      }\n\n      if (typeof test === 'string') {\n        return typeFactory(test)\n      }\n\n      throw new Error('Expected function, string, or object as test')\n    }\n  )\n\n/**\n * @param {Array<Props | TestFunction | string>} tests\n * @returns {Check}\n */\nfunction anyFactory(tests) {\n  /** @type {Array<Check>} */\n  const checks = []\n  let index = -1\n\n  while (++index < tests.length) {\n    checks[index] = convert(tests[index])\n  }\n\n  return castFactory(any)\n\n  /**\n   * @this {unknown}\n   * @type {TestFunction}\n   */\n  function any(...parameters) {\n    let index = -1\n\n    while (++index < checks.length) {\n      if (checks[index].apply(this, parameters)) return true\n    }\n\n    return false\n  }\n}\n\n/**\n * Turn an object into a test for a node with a certain fields.\n *\n * @param {Props} check\n * @returns {Check}\n */\nfunction propsFactory(check) {\n  const checkAsRecord = /** @type {Record<string, unknown>} */ (check)\n\n  return castFactory(all)\n\n  /**\n   * @param {Node} node\n   * @returns {boolean}\n   */\n  function all(node) {\n    const nodeAsRecord = /** @type {Record<string, unknown>} */ (\n      /** @type {unknown} */ (node)\n    )\n\n    /** @type {string} */\n    let key\n\n    for (key in check) {\n      if (nodeAsRecord[key] !== checkAsRecord[key]) return false\n    }\n\n    return true\n  }\n}\n\n/**\n * Turn a string into a test for a node with a certain type.\n *\n * @param {string} check\n * @returns {Check}\n */\nfunction typeFactory(check) {\n  return castFactory(type)\n\n  /**\n   * @param {Node} node\n   */\n  function type(node) {\n    return node && node.type === check\n  }\n}\n\n/**\n * Turn a custom test into a test for a node that passes that test.\n *\n * @param {TestFunction} testFunction\n * @returns {Check}\n */\nfunction castFactory(testFunction) {\n  return check\n\n  /**\n   * @this {unknown}\n   * @type {Check}\n   */\n  function check(value, index, parent) {\n    return Boolean(\n      looksLikeANode(value) &&\n        testFunction.call(\n          this,\n          value,\n          typeof index === 'number' ? index : undefined,\n          parent || undefined\n        )\n    )\n  }\n}\n\nfunction ok() {\n  return true\n}\n\n/**\n * @param {unknown} value\n * @returns {value is Node}\n */\nfunction looksLikeANode(value) {\n  return value !== null && typeof value === 'object' && 'type' in value\n}\n", "/**\n * @typedef {import('./lib/index.js').Check} Check\n * @typedef {import('./lib/index.js').Test} Test\n * @typedef {import('./lib/index.js').TestFunction} TestFunction\n */\n\nexport {is, convert} from './lib/index.js'\n", "/**\n * @param {string} d\n * @returns {string}\n */\nexport function color(d) {\n  return d\n}\n", "/**\n * @typedef {import('unist').Node} UnistNode\n * @typedef {import('unist').Parent} UnistParent\n */\n\n/**\n * @typedef {Exclude<import('unist-util-is').Test, undefined> | undefined} Test\n *   Test from `unist-util-is`.\n *\n *   Note: we have remove and add `undefined`, because otherwise when generating\n *   automatic `.d.ts` files, TS tries to flatten paths from a local perspective,\n *   which doesn\u2019t work when publishing on npm.\n */\n\n/**\n * @typedef {(\n *   Fn extends (value: any) => value is infer Thing\n *   ? Thing\n *   : Fallback\n * )} Predicate\n *   Get the value of a type guard `Fn`.\n * @template Fn\n *   Value; typically function that is a type guard (such as `(x): x is Y`).\n * @template Fallback\n *   Value to yield if `Fn` is not a type guard.\n */\n\n/**\n * @typedef {(\n *   Check extends null | undefined // No test.\n *   ? Value\n *   : Value extends {type: Check} // String (type) test.\n *   ? Value\n *   : Value extends Check // Partial test.\n *   ? Value\n *   : Check extends Function // Function test.\n *   ? Predicate<Check, Value> extends Value\n *     ? Predicate<Check, Value>\n *     : never\n *   : never // Some other test?\n * )} MatchesOne\n *   Check whether a node matches a primitive check in the type system.\n * @template Value\n *   Value; typically unist `Node`.\n * @template Check\n *   Value; typically `unist-util-is`-compatible test, but not arrays.\n */\n\n/**\n * @typedef {(\n *   Check extends Array<any>\n *   ? MatchesOne<Value, Check[keyof Check]>\n *   : MatchesOne<Value, Check>\n * )} Matches\n *   Check whether a node matches a check in the type system.\n * @template Value\n *   Value; typically unist `Node`.\n * @template Check\n *   Value; typically `unist-util-is`-compatible test.\n */\n\n/**\n * @typedef {0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10} Uint\n *   Number; capped reasonably.\n */\n\n/**\n * @typedef {I extends 0 ? 1 : I extends 1 ? 2 : I extends 2 ? 3 : I extends 3 ? 4 : I extends 4 ? 5 : I extends 5 ? 6 : I extends 6 ? 7 : I extends 7 ? 8 : I extends 8 ? 9 : 10} Increment\n *   Increment a number in the type system.\n * @template {Uint} [I=0]\n *   Index.\n */\n\n/**\n * @typedef {(\n *   Node extends UnistParent\n *   ? Node extends {children: Array<infer Children>}\n *     ? Child extends Children ? Node : never\n *     : never\n *   : never\n * )} InternalParent\n *   Collect nodes that can be parents of `Child`.\n * @template {UnistNode} Node\n *   All node types in a tree.\n * @template {UnistNode} Child\n *   Node to search for.\n */\n\n/**\n * @typedef {InternalParent<InclusiveDescendant<Tree>, Child>} Parent\n *   Collect nodes in `Tree` that can be parents of `Child`.\n * @template {UnistNode} Tree\n *   All node types in a tree.\n * @template {UnistNode} Child\n *   Node to search for.\n */\n\n/**\n * @typedef {(\n *   Depth extends Max\n *   ? never\n *   :\n *     | InternalParent<Node, Child>\n *     | InternalAncestor<Node, InternalParent<Node, Child>, Max, Increment<Depth>>\n * )} InternalAncestor\n *   Collect nodes in `Tree` that can be ancestors of `Child`.\n * @template {UnistNode} Node\n *   All node types in a tree.\n * @template {UnistNode} Child\n *   Node to search for.\n * @template {Uint} [Max=10]\n *   Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n *   Current depth.\n */\n\n/**\n * @typedef {InternalAncestor<InclusiveDescendant<Tree>, Child>} Ancestor\n *   Collect nodes in `Tree` that can be ancestors of `Child`.\n * @template {UnistNode} Tree\n *   All node types in a tree.\n * @template {UnistNode} Child\n *   Node to search for.\n */\n\n/**\n * @typedef {(\n *   Tree extends UnistParent\n *     ? Depth extends Max\n *       ? Tree\n *       : Tree | InclusiveDescendant<Tree['children'][number], Max, Increment<Depth>>\n *     : Tree\n * )} InclusiveDescendant\n *   Collect all (inclusive) descendants of `Tree`.\n *\n *   > \uD83D\uDC49 **Note**: for performance reasons, this seems to be the fastest way to\n *   > recurse without actually running into an infinite loop, which the\n *   > previous version did.\n *   >\n *   > Practically, a max of `2` is typically enough assuming a `Root` is\n *   > passed, but it doesn\u2019t improve performance.\n *   > It gets higher with `List > ListItem > Table > TableRow > TableCell`.\n *   > Using up to `10` doesn\u2019t hurt or help either.\n * @template {UnistNode} Tree\n *   Tree type.\n * @template {Uint} [Max=10]\n *   Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n *   Current depth.\n */\n\n/**\n * @typedef {'skip' | boolean} Action\n *   Union of the action types.\n *\n * @typedef {number} Index\n *   Move to the sibling at `index` next (after node itself is completely\n *   traversed).\n *\n *   Useful if mutating the tree, such as removing the node the visitor is\n *   currently on, or any of its previous siblings.\n *   Results less than 0 or greater than or equal to `children.length` stop\n *   traversing the parent.\n *\n * @typedef {[(Action | null | undefined | void)?, (Index | null | undefined)?]} ActionTuple\n *   List with one or two values, the first an action, the second an index.\n *\n * @typedef {Action | ActionTuple | Index | null | undefined | void} VisitorResult\n *   Any value that can be returned from a visitor.\n */\n\n/**\n * @callback Visitor\n *   Handle a node (matching `test`, if given).\n *\n *   Visitors are free to transform `node`.\n *   They can also transform the parent of node (the last of `ancestors`).\n *\n *   Replacing `node` itself, if `SKIP` is not returned, still causes its\n *   descendants to be walked (which is a bug).\n *\n *   When adding or removing previous siblings of `node` (or next siblings, in\n *   case of reverse), the `Visitor` should return a new `Index` to specify the\n *   sibling to traverse after `node` is traversed.\n *   Adding or removing next siblings of `node` (or previous siblings, in case\n *   of reverse) is handled as expected without needing to return a new `Index`.\n *\n *   Removing the children property of an ancestor still results in them being\n *   traversed.\n * @param {Visited} node\n *   Found node.\n * @param {Array<VisitedParents>} ancestors\n *   Ancestors of `node`.\n * @returns {VisitorResult}\n *   What to do next.\n *\n *   An `Index` is treated as a tuple of `[CONTINUE, Index]`.\n *   An `Action` is treated as a tuple of `[Action]`.\n *\n *   Passing a tuple back only makes sense if the `Action` is `SKIP`.\n *   When the `Action` is `EXIT`, that action can be returned.\n *   When the `Action` is `CONTINUE`, `Index` can be returned.\n * @template {UnistNode} [Visited=UnistNode]\n *   Visited node type.\n * @template {UnistParent} [VisitedParents=UnistParent]\n *   Ancestor type.\n */\n\n/**\n * @typedef {Visitor<Matches<InclusiveDescendant<Tree>, Check>, Ancestor<Tree, Matches<InclusiveDescendant<Tree>, Check>>>} BuildVisitor\n *   Build a typed `Visitor` function from a tree and a test.\n *\n *   It will infer which values are passed as `node` and which as `parents`.\n * @template {UnistNode} [Tree=UnistNode]\n *   Tree type.\n * @template {Test} [Check=Test]\n *   Test type.\n */\n\nimport {convert} from 'unist-util-is'\nimport {color} from 'unist-util-visit-parents/do-not-use-color'\n\n/** @type {Readonly<ActionTuple>} */\nconst empty = []\n\n/**\n * Continue traversing as normal.\n */\nexport const CONTINUE = true\n\n/**\n * Stop traversing immediately.\n */\nexport const EXIT = false\n\n/**\n * Do not traverse this node\u2019s children.\n */\nexport const SKIP = 'skip'\n\n/**\n * Visit nodes, with ancestral information.\n *\n * This algorithm performs *depth-first* *tree traversal* in *preorder*\n * (**NLR**) or if `reverse` is given, in *reverse preorder* (**NRL**).\n *\n * You can choose for which nodes `visitor` is called by passing a `test`.\n * For complex tests, you should test yourself in `visitor`, as it will be\n * faster and will have improved type information.\n *\n * Walking the tree is an intensive task.\n * Make use of the return values of the visitor when possible.\n * Instead of walking a tree multiple times, walk it once, use `unist-util-is`\n * to check if a node matches, and then perform different operations.\n *\n * You can change the tree.\n * See `Visitor` for more info.\n *\n * @overload\n * @param {Tree} tree\n * @param {Check} check\n * @param {BuildVisitor<Tree, Check>} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @overload\n * @param {Tree} tree\n * @param {BuildVisitor<Tree>} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @param {UnistNode} tree\n *   Tree to traverse.\n * @param {Visitor | Test} test\n *   `unist-util-is`-compatible test\n * @param {Visitor | boolean | null | undefined} [visitor]\n *   Handle each node.\n * @param {boolean | null | undefined} [reverse]\n *   Traverse in reverse preorder (NRL) instead of the default preorder (NLR).\n * @returns {undefined}\n *   Nothing.\n *\n * @template {UnistNode} Tree\n *   Node type.\n * @template {Test} Check\n *   `unist-util-is`-compatible test.\n */\nexport function visitParents(tree, test, visitor, reverse) {\n  /** @type {Test} */\n  let check\n\n  if (typeof test === 'function' && typeof visitor !== 'function') {\n    reverse = visitor\n    // @ts-expect-error no visitor given, so `visitor` is test.\n    visitor = test\n  } else {\n    // @ts-expect-error visitor given, so `test` isn\u2019t a visitor.\n    check = test\n  }\n\n  const is = convert(check)\n  const step = reverse ? -1 : 1\n\n  factory(tree, undefined, [])()\n\n  /**\n   * @param {UnistNode} node\n   * @param {number | undefined} index\n   * @param {Array<UnistParent>} parents\n   */\n  function factory(node, index, parents) {\n    const value = /** @type {Record<string, unknown>} */ (\n      node && typeof node === 'object' ? node : {}\n    )\n\n    if (typeof value.type === 'string') {\n      const name =\n        // `hast`\n        typeof value.tagName === 'string'\n          ? value.tagName\n          : // `xast`\n          typeof value.name === 'string'\n          ? value.name\n          : undefined\n\n      Object.defineProperty(visit, 'name', {\n        value:\n          'node (' + color(node.type + (name ? '<' + name + '>' : '')) + ')'\n      })\n    }\n\n    return visit\n\n    function visit() {\n      /** @type {Readonly<ActionTuple>} */\n      let result = empty\n      /** @type {Readonly<ActionTuple>} */\n      let subresult\n      /** @type {number} */\n      let offset\n      /** @type {Array<UnistParent>} */\n      let grandparents\n\n      if (!test || is(node, index, parents[parents.length - 1] || undefined)) {\n        // @ts-expect-error: `visitor` is now a visitor.\n        result = toResult(visitor(node, parents))\n\n        if (result[0] === EXIT) {\n          return result\n        }\n      }\n\n      if ('children' in node && node.children) {\n        const nodeAsParent = /** @type {UnistParent} */ (node)\n\n        if (nodeAsParent.children && result[0] !== SKIP) {\n          offset = (reverse ? nodeAsParent.children.length : -1) + step\n          grandparents = parents.concat(nodeAsParent)\n\n          while (offset > -1 && offset < nodeAsParent.children.length) {\n            const child = nodeAsParent.children[offset]\n\n            subresult = factory(child, offset, grandparents)()\n\n            if (subresult[0] === EXIT) {\n              return subresult\n            }\n\n            offset =\n              typeof subresult[1] === 'number' ? subresult[1] : offset + step\n          }\n        }\n      }\n\n      return result\n    }\n  }\n}\n\n/**\n * Turn a return value into a clean result.\n *\n * @param {VisitorResult} value\n *   Valid return values from visitors.\n * @returns {Readonly<ActionTuple>}\n *   Clean result.\n */\nfunction toResult(value) {\n  if (Array.isArray(value)) {\n    return value\n  }\n\n  if (typeof value === 'number') {\n    return [CONTINUE, value]\n  }\n\n  return value === null || value === undefined ? empty : [value]\n}\n", "// Note: types exported from `index.d.ts`\nexport {CONTINUE, EXIT, SKIP, visitParents} from './lib/index.js'\n", "/**\n * @typedef {import('unist').Node} UnistNode\n * @typedef {import('unist').Parent} UnistParent\n * @typedef {import('unist-util-visit-parents').VisitorResult} VisitorResult\n */\n\n/**\n * @typedef {Exclude<import('unist-util-is').Test, undefined> | undefined} Test\n *   Test from `unist-util-is`.\n *\n *   Note: we have remove and add `undefined`, because otherwise when generating\n *   automatic `.d.ts` files, TS tries to flatten paths from a local perspective,\n *   which doesn\u2019t work when publishing on npm.\n */\n\n// To do: use types from `unist-util-visit-parents` when it\u2019s released.\n\n/**\n * @typedef {(\n *   Fn extends (value: any) => value is infer Thing\n *   ? Thing\n *   : Fallback\n * )} Predicate\n *   Get the value of a type guard `Fn`.\n * @template Fn\n *   Value; typically function that is a type guard (such as `(x): x is Y`).\n * @template Fallback\n *   Value to yield if `Fn` is not a type guard.\n */\n\n/**\n * @typedef {(\n *   Check extends null | undefined // No test.\n *   ? Value\n *   : Value extends {type: Check} // String (type) test.\n *   ? Value\n *   : Value extends Check // Partial test.\n *   ? Value\n *   : Check extends Function // Function test.\n *   ? Predicate<Check, Value> extends Value\n *     ? Predicate<Check, Value>\n *     : never\n *   : never // Some other test?\n * )} MatchesOne\n *   Check whether a node matches a primitive check in the type system.\n * @template Value\n *   Value; typically unist `Node`.\n * @template Check\n *   Value; typically `unist-util-is`-compatible test, but not arrays.\n */\n\n/**\n * @typedef {(\n *   Check extends Array<any>\n *   ? MatchesOne<Value, Check[keyof Check]>\n *   : MatchesOne<Value, Check>\n * )} Matches\n *   Check whether a node matches a check in the type system.\n * @template Value\n *   Value; typically unist `Node`.\n * @template Check\n *   Value; typically `unist-util-is`-compatible test.\n */\n\n/**\n * @typedef {0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10} Uint\n *   Number; capped reasonably.\n */\n\n/**\n * @typedef {I extends 0 ? 1 : I extends 1 ? 2 : I extends 2 ? 3 : I extends 3 ? 4 : I extends 4 ? 5 : I extends 5 ? 6 : I extends 6 ? 7 : I extends 7 ? 8 : I extends 8 ? 9 : 10} Increment\n *   Increment a number in the type system.\n * @template {Uint} [I=0]\n *   Index.\n */\n\n/**\n * @typedef {(\n *   Node extends UnistParent\n *   ? Node extends {children: Array<infer Children>}\n *     ? Child extends Children ? Node : never\n *     : never\n *   : never\n * )} InternalParent\n *   Collect nodes that can be parents of `Child`.\n * @template {UnistNode} Node\n *   All node types in a tree.\n * @template {UnistNode} Child\n *   Node to search for.\n */\n\n/**\n * @typedef {InternalParent<InclusiveDescendant<Tree>, Child>} Parent\n *   Collect nodes in `Tree` that can be parents of `Child`.\n * @template {UnistNode} Tree\n *   All node types in a tree.\n * @template {UnistNode} Child\n *   Node to search for.\n */\n\n/**\n * @typedef {(\n *   Depth extends Max\n *   ? never\n *   :\n *     | InternalParent<Node, Child>\n *     | InternalAncestor<Node, InternalParent<Node, Child>, Max, Increment<Depth>>\n * )} InternalAncestor\n *   Collect nodes in `Tree` that can be ancestors of `Child`.\n * @template {UnistNode} Node\n *   All node types in a tree.\n * @template {UnistNode} Child\n *   Node to search for.\n * @template {Uint} [Max=10]\n *   Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n *   Current depth.\n */\n\n/**\n * @typedef {(\n *   Tree extends UnistParent\n *     ? Depth extends Max\n *       ? Tree\n *       : Tree | InclusiveDescendant<Tree['children'][number], Max, Increment<Depth>>\n *     : Tree\n * )} InclusiveDescendant\n *   Collect all (inclusive) descendants of `Tree`.\n *\n *   > \uD83D\uDC49 **Note**: for performance reasons, this seems to be the fastest way to\n *   > recurse without actually running into an infinite loop, which the\n *   > previous version did.\n *   >\n *   > Practically, a max of `2` is typically enough assuming a `Root` is\n *   > passed, but it doesn\u2019t improve performance.\n *   > It gets higher with `List > ListItem > Table > TableRow > TableCell`.\n *   > Using up to `10` doesn\u2019t hurt or help either.\n * @template {UnistNode} Tree\n *   Tree type.\n * @template {Uint} [Max=10]\n *   Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n *   Current depth.\n */\n\n/**\n * @callback Visitor\n *   Handle a node (matching `test`, if given).\n *\n *   Visitors are free to transform `node`.\n *   They can also transform `parent`.\n *\n *   Replacing `node` itself, if `SKIP` is not returned, still causes its\n *   descendants to be walked (which is a bug).\n *\n *   When adding or removing previous siblings of `node` (or next siblings, in\n *   case of reverse), the `Visitor` should return a new `Index` to specify the\n *   sibling to traverse after `node` is traversed.\n *   Adding or removing next siblings of `node` (or previous siblings, in case\n *   of reverse) is handled as expected without needing to return a new `Index`.\n *\n *   Removing the children property of `parent` still results in them being\n *   traversed.\n * @param {Visited} node\n *   Found node.\n * @param {Visited extends UnistNode ? number | undefined : never} index\n *   Index of `node` in `parent`.\n * @param {Ancestor extends UnistParent ? Ancestor | undefined : never} parent\n *   Parent of `node`.\n * @returns {VisitorResult}\n *   What to do next.\n *\n *   An `Index` is treated as a tuple of `[CONTINUE, Index]`.\n *   An `Action` is treated as a tuple of `[Action]`.\n *\n *   Passing a tuple back only makes sense if the `Action` is `SKIP`.\n *   When the `Action` is `EXIT`, that action can be returned.\n *   When the `Action` is `CONTINUE`, `Index` can be returned.\n * @template {UnistNode} [Visited=UnistNode]\n *   Visited node type.\n * @template {UnistParent} [Ancestor=UnistParent]\n *   Ancestor type.\n */\n\n/**\n * @typedef {Visitor<Visited, Parent<Ancestor, Visited>>} BuildVisitorFromMatch\n *   Build a typed `Visitor` function from a node and all possible parents.\n *\n *   It will infer which values are passed as `node` and which as `parent`.\n * @template {UnistNode} Visited\n *   Node type.\n * @template {UnistParent} Ancestor\n *   Parent type.\n */\n\n/**\n * @typedef {(\n *   BuildVisitorFromMatch<\n *     Matches<Descendant, Check>,\n *     Extract<Descendant, UnistParent>\n *   >\n * )} BuildVisitorFromDescendants\n *   Build a typed `Visitor` function from a list of descendants and a test.\n *\n *   It will infer which values are passed as `node` and which as `parent`.\n * @template {UnistNode} Descendant\n *   Node type.\n * @template {Test} Check\n *   Test type.\n */\n\n/**\n * @typedef {(\n *   BuildVisitorFromDescendants<\n *     InclusiveDescendant<Tree>,\n *     Check\n *   >\n * )} BuildVisitor\n *   Build a typed `Visitor` function from a tree and a test.\n *\n *   It will infer which values are passed as `node` and which as `parent`.\n * @template {UnistNode} [Tree=UnistNode]\n *   Node type.\n * @template {Test} [Check=Test]\n *   Test type.\n */\n\nimport {visitParents} from 'unist-util-visit-parents'\n\nexport {CONTINUE, EXIT, SKIP} from 'unist-util-visit-parents'\n\n/**\n * Visit nodes.\n *\n * This algorithm performs *depth-first* *tree traversal* in *preorder*\n * (**NLR**) or if `reverse` is given, in *reverse preorder* (**NRL**).\n *\n * You can choose for which nodes `visitor` is called by passing a `test`.\n * For complex tests, you should test yourself in `visitor`, as it will be\n * faster and will have improved type information.\n *\n * Walking the tree is an intensive task.\n * Make use of the return values of the visitor when possible.\n * Instead of walking a tree multiple times, walk it once, use `unist-util-is`\n * to check if a node matches, and then perform different operations.\n *\n * You can change the tree.\n * See `Visitor` for more info.\n *\n * @overload\n * @param {Tree} tree\n * @param {Check} check\n * @param {BuildVisitor<Tree, Check>} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @overload\n * @param {Tree} tree\n * @param {BuildVisitor<Tree>} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @param {UnistNode} tree\n *   Tree to traverse.\n * @param {Visitor | Test} testOrVisitor\n *   `unist-util-is`-compatible test (optional, omit to pass a visitor).\n * @param {Visitor | boolean | null | undefined} [visitorOrReverse]\n *   Handle each node (when test is omitted, pass `reverse`).\n * @param {boolean | null | undefined} [maybeReverse=false]\n *   Traverse in reverse preorder (NRL) instead of the default preorder (NLR).\n * @returns {undefined}\n *   Nothing.\n *\n * @template {UnistNode} Tree\n *   Node type.\n * @template {Test} Check\n *   `unist-util-is`-compatible test.\n */\nexport function visit(tree, testOrVisitor, visitorOrReverse, maybeReverse) {\n  /** @type {boolean | null | undefined} */\n  let reverse\n  /** @type {Test} */\n  let test\n  /** @type {Visitor} */\n  let visitor\n\n  if (\n    typeof testOrVisitor === 'function' &&\n    typeof visitorOrReverse !== 'function'\n  ) {\n    test = undefined\n    visitor = testOrVisitor\n    reverse = visitorOrReverse\n  } else {\n    // @ts-expect-error: assume the overload with test was given.\n    test = testOrVisitor\n    // @ts-expect-error: assume the overload with test was given.\n    visitor = visitorOrReverse\n    reverse = maybeReverse\n  }\n\n  visitParents(tree, test, overload, reverse)\n\n  /**\n   * @param {UnistNode} node\n   * @param {Array<UnistParent>} parents\n   */\n  function overload(node, parents) {\n    const parent = parents[parents.length - 1]\n    const index = parent ? parent.children.indexOf(node) : undefined\n    return visitor(node, index, parent)\n  }\n}\n", "// Note: types exported from `index.d.ts`\nexport {CONTINUE, EXIT, SKIP, visit} from './lib/index.js'\n", "/**\n * @callback Handler\n *   Handle a value, with a certain ID field set to a certain value.\n *   The ID field is passed to `zwitch`, and it\u2019s value is this function\u2019s\n *   place on the `handlers` record.\n * @param {...any} parameters\n *   Arbitrary parameters passed to the zwitch.\n *   The first will be an object with a certain ID field set to a certain value.\n * @returns {any}\n *   Anything!\n */\n\n/**\n * @callback UnknownHandler\n *   Handle values that do have a certain ID field, but it\u2019s set to a value\n *   that is not listed in the `handlers` record.\n * @param {unknown} value\n *   An object with a certain ID field set to an unknown value.\n * @param {...any} rest\n *   Arbitrary parameters passed to the zwitch.\n * @returns {any}\n *   Anything!\n */\n\n/**\n * @callback InvalidHandler\n *   Handle values that do not have a certain ID field.\n * @param {unknown} value\n *   Any unknown value.\n * @param {...any} rest\n *   Arbitrary parameters passed to the zwitch.\n * @returns {void|null|undefined|never}\n *   This should crash or return nothing.\n */\n\n/**\n * @template {InvalidHandler} [Invalid=InvalidHandler]\n * @template {UnknownHandler} [Unknown=UnknownHandler]\n * @template {Record<string, Handler>} [Handlers=Record<string, Handler>]\n * @typedef Options\n *   Configuration (required).\n * @property {Invalid} [invalid]\n *   Handler to use for invalid values.\n * @property {Unknown} [unknown]\n *   Handler to use for unknown values.\n * @property {Handlers} [handlers]\n *   Handlers to use.\n */\n\nconst own = {}.hasOwnProperty\n\n/**\n * Handle values based on a field.\n *\n * @template {InvalidHandler} [Invalid=InvalidHandler]\n * @template {UnknownHandler} [Unknown=UnknownHandler]\n * @template {Record<string, Handler>} [Handlers=Record<string, Handler>]\n * @param {string} key\n *   Field to switch on.\n * @param {Options<Invalid, Unknown, Handlers>} [options]\n *   Configuration (required).\n * @returns {{unknown: Unknown, invalid: Invalid, handlers: Handlers, (...parameters: Parameters<Handlers[keyof Handlers]>): ReturnType<Handlers[keyof Handlers]>, (...parameters: Parameters<Unknown>): ReturnType<Unknown>}}\n */\nexport function zwitch(key, options) {\n  const settings = options || {}\n\n  /**\n   * Handle one value.\n   *\n   * Based on the bound `key`, a respective handler will be called.\n   * If `value` is not an object, or doesn\u2019t have a `key` property, the special\n   * \u201Cinvalid\u201D handler will be called.\n   * If `value` has an unknown `key`, the special \u201Cunknown\u201D handler will be\n   * called.\n   *\n   * All arguments, and the context object, are passed through to the handler,\n   * and it\u2019s result is returned.\n   *\n   * @this {unknown}\n   *   Any context object.\n   * @param {unknown} [value]\n   *   Any value.\n   * @param {...unknown} parameters\n   *   Arbitrary parameters passed to the zwitch.\n   * @property {Handler} invalid\n   *   Handle for values that do not have a certain ID field.\n   * @property {Handler} unknown\n   *   Handle values that do have a certain ID field, but it\u2019s set to a value\n   *   that is not listed in the `handlers` record.\n   * @property {Handlers} handlers\n   *   Record of handlers.\n   * @returns {unknown}\n   *   Anything.\n   */\n  function one(value, ...parameters) {\n    /** @type {Handler|undefined} */\n    let fn = one.invalid\n    const handlers = one.handlers\n\n    if (value && own.call(value, key)) {\n      // @ts-expect-error Indexable.\n      const id = String(value[key])\n      // @ts-expect-error Indexable.\n      fn = own.call(handlers, id) ? handlers[id] : one.unknown\n    }\n\n    if (fn) {\n      return fn.call(this, value, ...parameters)\n    }\n  }\n\n  one.handlers = settings.handlers || {}\n  one.invalid = settings.invalid\n  one.unknown = settings.unknown\n\n  // @ts-expect-error: matches!\n  return one\n}\n", "/**\n * @typedef {import('./types.js').Options} Options\n * @typedef {import('./types.js').State} State\n */\n\nconst own = {}.hasOwnProperty\n\n/**\n * @param {State} base\n * @param {Options} extension\n * @returns {State}\n */\nexport function configure(base, extension) {\n  let index = -1\n  /** @type {keyof Options} */\n  let key\n\n  // First do subextensions.\n  if (extension.extensions) {\n    while (++index < extension.extensions.length) {\n      configure(base, extension.extensions[index])\n    }\n  }\n\n  for (key in extension) {\n    if (own.call(extension, key)) {\n      switch (key) {\n        case 'extensions': {\n          // Empty.\n          break\n        }\n\n        /* c8 ignore next 4 */\n        case 'unsafe': {\n          list(base[key], extension[key])\n          break\n        }\n\n        case 'join': {\n          list(base[key], extension[key])\n          break\n        }\n\n        case 'handlers': {\n          map(base[key], extension[key])\n          break\n        }\n\n        default: {\n          // @ts-expect-error: matches.\n          base.options[key] = extension[key]\n        }\n      }\n    }\n  }\n\n  return base\n}\n\n/**\n * @template T\n * @param {Array<T>} left\n * @param {Array<T> | null | undefined} right\n */\nfunction list(left, right) {\n  if (right) {\n    left.push(...right)\n  }\n}\n\n/**\n * @template T\n * @param {Record<string, T>} left\n * @param {Record<string, T> | null | undefined} right\n */\nfunction map(left, right) {\n  if (right) {\n    Object.assign(left, right)\n  }\n}\n", "/**\n * @typedef {import('mdast').Blockquote} Blockquote\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('../types.js').Info} Info\n * @typedef {import('../types.js').Map} Map\n * @typedef {import('../types.js').State} State\n */\n\n/**\n * @param {Blockquote} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function blockquote(node, _, state, info) {\n  const exit = state.enter('blockquote')\n  const tracker = state.createTracker(info)\n  tracker.move('> ')\n  tracker.shift(2)\n  const value = state.indentLines(\n    state.containerFlow(node, tracker.current()),\n    map\n  )\n  exit()\n  return value\n}\n\n/** @type {Map} */\nfunction map(line, _, blank) {\n  return '>' + (blank ? '' : ' ') + line\n}\n", "/**\n * @typedef {import('../types.js').ConstructName} ConstructName\n * @typedef {import('../types.js').Unsafe} Unsafe\n */\n\n/**\n * @param {Array<ConstructName>} stack\n * @param {Unsafe} pattern\n * @returns {boolean}\n */\nexport function patternInScope(stack, pattern) {\n  return (\n    listInScope(stack, pattern.inConstruct, true) &&\n    !listInScope(stack, pattern.notInConstruct, false)\n  )\n}\n\n/**\n * @param {Array<ConstructName>} stack\n * @param {Unsafe['inConstruct']} list\n * @param {boolean} none\n * @returns {boolean}\n */\nfunction listInScope(stack, list, none) {\n  if (typeof list === 'string') {\n    list = [list]\n  }\n\n  if (!list || list.length === 0) {\n    return none\n  }\n\n  let index = -1\n\n  while (++index < list.length) {\n    if (stack.includes(list[index])) {\n      return true\n    }\n  }\n\n  return false\n}\n", "/**\n * @typedef {import('mdast').Break} Break\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('../types.js').Info} Info\n * @typedef {import('../types.js').State} State\n */\n\nimport {patternInScope} from '../util/pattern-in-scope.js'\n\n/**\n * @param {Break} _\n * @param {Parents | undefined} _1\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function hardBreak(_, _1, state, info) {\n  let index = -1\n\n  while (++index < state.unsafe.length) {\n    // If we can\u2019t put eols in this construct (setext headings, tables), use a\n    // space instead.\n    if (\n      state.unsafe[index].character === '\\n' &&\n      patternInScope(state.stack, state.unsafe[index])\n    ) {\n      return /[ \\t]/.test(info.before) ? '' : ' '\n    }\n  }\n\n  return '\\\\\\n'\n}\n", "/**\n * Get the count of the longest repeating streak of `substring` in `value`.\n *\n * @param {string} value\n *   Content to search in.\n * @param {string} substring\n *   Substring to look for, typically one character.\n * @returns {number}\n *   Count of most frequent adjacent `substring`s in `value`.\n */\nexport function longestStreak(value, substring) {\n  const source = String(value)\n  let index = source.indexOf(substring)\n  let expected = index\n  let count = 0\n  let max = 0\n\n  if (typeof substring !== 'string') {\n    throw new TypeError('Expected substring')\n  }\n\n  while (index !== -1) {\n    if (index === expected) {\n      if (++count > max) {\n        max = count\n      }\n    } else {\n      count = 1\n    }\n\n    expected = index + substring.length\n    index = source.indexOf(substring, expected)\n  }\n\n  return max\n}\n", "/**\n * @typedef {import('mdast').Code} Code\n * @typedef {import('../types.js').State} State\n */\n\n/**\n * @param {Code} node\n * @param {State} state\n * @returns {boolean}\n */\nexport function formatCodeAsIndented(node, state) {\n  return Boolean(\n    state.options.fences === false &&\n      node.value &&\n      // If there\u2019s no info\u2026\n      !node.lang &&\n      // And there\u2019s a non-whitespace character\u2026\n      /[^ \\r\\n]/.test(node.value) &&\n      // And the value doesn\u2019t start or end in a blank\u2026\n      !/^[\\t ]*(?:[\\r\\n]|$)|(?:^|[\\r\\n])[\\t ]*$/.test(node.value)\n  )\n}\n", "/**\n * @typedef {import('../types.js').Options} Options\n * @typedef {import('../types.js').State} State\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['fence'], null | undefined>}\n */\nexport function checkFence(state) {\n  const marker = state.options.fence || '`'\n\n  if (marker !== '`' && marker !== '~') {\n    throw new Error(\n      'Cannot serialize code with `' +\n        marker +\n        '` for `options.fence`, expected `` ` `` or `~`'\n    )\n  }\n\n  return marker\n}\n", "/**\n * @typedef {import('mdast').Code} Code\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('../types.js').Info} Info\n * @typedef {import('../types.js').Map} Map\n * @typedef {import('../types.js').State} State\n */\n\nimport {longestStreak} from 'longest-streak'\nimport {formatCodeAsIndented} from '../util/format-code-as-indented.js'\nimport {checkFence} from '../util/check-fence.js'\n\n/**\n * @param {Code} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function code(node, _, state, info) {\n  const marker = checkFence(state)\n  const raw = node.value || ''\n  const suffix = marker === '`' ? 'GraveAccent' : 'Tilde'\n\n  if (formatCodeAsIndented(node, state)) {\n    const exit = state.enter('codeIndented')\n    const value = state.indentLines(raw, map)\n    exit()\n    return value\n  }\n\n  const tracker = state.createTracker(info)\n  const sequence = marker.repeat(Math.max(longestStreak(raw, marker) + 1, 3))\n  const exit = state.enter('codeFenced')\n  let value = tracker.move(sequence)\n\n  if (node.lang) {\n    const subexit = state.enter(`codeFencedLang${suffix}`)\n    value += tracker.move(\n      state.safe(node.lang, {\n        before: value,\n        after: ' ',\n        encode: ['`'],\n        ...tracker.current()\n      })\n    )\n    subexit()\n  }\n\n  if (node.lang && node.meta) {\n    const subexit = state.enter(`codeFencedMeta${suffix}`)\n    value += tracker.move(' ')\n    value += tracker.move(\n      state.safe(node.meta, {\n        before: value,\n        after: '\\n',\n        encode: ['`'],\n        ...tracker.current()\n      })\n    )\n    subexit()\n  }\n\n  value += tracker.move('\\n')\n\n  if (raw) {\n    value += tracker.move(raw + '\\n')\n  }\n\n  value += tracker.move(sequence)\n  exit()\n  return value\n}\n\n/** @type {Map} */\nfunction map(line, _, blank) {\n  return (blank ? '' : '    ') + line\n}\n", "/**\n * @typedef {import('../types.js').Options} Options\n * @typedef {import('../types.js').State} State\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['quote'], null | undefined>}\n */\nexport function checkQuote(state) {\n  const marker = state.options.quote || '\"'\n\n  if (marker !== '\"' && marker !== \"'\") {\n    throw new Error(\n      'Cannot serialize title with `' +\n        marker +\n        '` for `options.quote`, expected `\"`, or `\\'`'\n    )\n  }\n\n  return marker\n}\n", "/**\n * @typedef {import('mdast').Definition} Definition\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('../types.js').Info} Info\n * @typedef {import('../types.js').State} State\n */\n\nimport {checkQuote} from '../util/check-quote.js'\n\n/**\n * @param {Definition} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function definition(node, _, state, info) {\n  const quote = checkQuote(state)\n  const suffix = quote === '\"' ? 'Quote' : 'Apostrophe'\n  const exit = state.enter('definition')\n  let subexit = state.enter('label')\n  const tracker = state.createTracker(info)\n  let value = tracker.move('[')\n  value += tracker.move(\n    state.safe(state.associationId(node), {\n      before: value,\n      after: ']',\n      ...tracker.current()\n    })\n  )\n  value += tracker.move(']: ')\n\n  subexit()\n\n  if (\n    // If there\u2019s no url, or\u2026\n    !node.url ||\n    // If there are control characters or whitespace.\n    /[\\0- \\u007F]/.test(node.url)\n  ) {\n    subexit = state.enter('destinationLiteral')\n    value += tracker.move('<')\n    value += tracker.move(\n      state.safe(node.url, {before: value, after: '>', ...tracker.current()})\n    )\n    value += tracker.move('>')\n  } else {\n    // No whitespace, raw is prettier.\n    subexit = state.enter('destinationRaw')\n    value += tracker.move(\n      state.safe(node.url, {\n        before: value,\n        after: node.title ? ' ' : '\\n',\n        ...tracker.current()\n      })\n    )\n  }\n\n  subexit()\n\n  if (node.title) {\n    subexit = state.enter(`title${suffix}`)\n    value += tracker.move(' ' + quote)\n    value += tracker.move(\n      state.safe(node.title, {\n        before: value,\n        after: quote,\n        ...tracker.current()\n      })\n    )\n    value += tracker.move(quote)\n    subexit()\n  }\n\n  exit()\n\n  return value\n}\n", "/**\n * @typedef {import('../types.js').Options} Options\n * @typedef {import('../types.js').State} State\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['emphasis'], null | undefined>}\n */\nexport function checkEmphasis(state) {\n  const marker = state.options.emphasis || '*'\n\n  if (marker !== '*' && marker !== '_') {\n    throw new Error(\n      'Cannot serialize emphasis with `' +\n        marker +\n        '` for `options.emphasis`, expected `*`, or `_`'\n    )\n  }\n\n  return marker\n}\n", "/**\n * @typedef {import('mdast').Emphasis} Emphasis\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('../types.js').Info} Info\n * @typedef {import('../types.js').State} State\n */\n\nimport {checkEmphasis} from '../util/check-emphasis.js'\n\nemphasis.peek = emphasisPeek\n\n// To do: there are cases where emphasis cannot \u201Cform\u201D depending on the\n// previous or next character of sequences.\n// There\u2019s no way around that though, except for injecting zero-width stuff.\n// Do we need to safeguard against that?\n/**\n * @param {Emphasis} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function emphasis(node, _, state, info) {\n  const marker = checkEmphasis(state)\n  const exit = state.enter('emphasis')\n  const tracker = state.createTracker(info)\n  let value = tracker.move(marker)\n  value += tracker.move(\n    state.containerPhrasing(node, {\n      before: value,\n      after: marker,\n      ...tracker.current()\n    })\n  )\n  value += tracker.move(marker)\n  exit()\n  return value\n}\n\n/**\n * @param {Emphasis} _\n * @param {Parents | undefined} _1\n * @param {State} state\n * @returns {string}\n */\nfunction emphasisPeek(_, _1, state) {\n  return state.options.emphasis || '*'\n}\n", "/**\n * @typedef {import('mdast').Heading} Heading\n * @typedef {import('../types.js').State} State\n */\n\nimport {EXIT, visit} from 'unist-util-visit'\nimport {toString} from 'mdast-util-to-string'\n\n/**\n * @param {Heading} node\n * @param {State} state\n * @returns {boolean}\n */\nexport function formatHeadingAsSetext(node, state) {\n  let literalWithBreak = false\n\n  // Look for literals with a line break.\n  // Note that this also\n  visit(node, function (node) {\n    if (\n      ('value' in node && /\\r?\\n|\\r/.test(node.value)) ||\n      node.type === 'break'\n    ) {\n      literalWithBreak = true\n      return EXIT\n    }\n  })\n\n  return Boolean(\n    (!node.depth || node.depth < 3) &&\n      toString(node) &&\n      (state.options.setext || literalWithBreak)\n  )\n}\n", "/**\n * @typedef {import('mdast').Heading} Heading\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('../types.js').Info} Info\n * @typedef {import('../types.js').State} State\n */\n\nimport {formatHeadingAsSetext} from '../util/format-heading-as-setext.js'\n\n/**\n * @param {Heading} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function heading(node, _, state, info) {\n  const rank = Math.max(Math.min(6, node.depth || 1), 1)\n  const tracker = state.createTracker(info)\n\n  if (formatHeadingAsSetext(node, state)) {\n    const exit = state.enter('headingSetext')\n    const subexit = state.enter('phrasing')\n    const value = state.containerPhrasing(node, {\n      ...tracker.current(),\n      before: '\\n',\n      after: '\\n'\n    })\n    subexit()\n    exit()\n\n    return (\n      value +\n      '\\n' +\n      (rank === 1 ? '=' : '-').repeat(\n        // The whole size\u2026\n        value.length -\n          // Minus the position of the character after the last EOL (or\n          // 0 if there is none)\u2026\n          (Math.max(value.lastIndexOf('\\r'), value.lastIndexOf('\\n')) + 1)\n      )\n    )\n  }\n\n  const sequence = '#'.repeat(rank)\n  const exit = state.enter('headingAtx')\n  const subexit = state.enter('phrasing')\n\n  // Note: for proper tracking, we should reset the output positions when there\n  // is no content returned, because then the space is not output.\n  // Practically, in that case, there is no content, so it doesn\u2019t matter that\n  // we\u2019ve tracked one too many characters.\n  tracker.move(sequence + ' ')\n\n  let value = state.containerPhrasing(node, {\n    before: '# ',\n    after: '\\n',\n    ...tracker.current()\n  })\n\n  if (/^[\\t ]/.test(value)) {\n    // To do: what effect has the character reference on tracking?\n    value =\n      '&#x' +\n      value.charCodeAt(0).toString(16).toUpperCase() +\n      ';' +\n      value.slice(1)\n  }\n\n  value = value ? sequence + ' ' + value : sequence\n\n  if (state.options.closeAtx) {\n    value += ' ' + sequence\n  }\n\n  subexit()\n  exit()\n\n  return value\n}\n", "/**\n * @typedef {import('mdast').Html} Html\n */\n\nhtml.peek = htmlPeek\n\n/**\n * @param {Html} node\n * @returns {string}\n */\nexport function html(node) {\n  return node.value || ''\n}\n\n/**\n * @returns {string}\n */\nfunction htmlPeek() {\n  return '<'\n}\n", "/**\n * @typedef {import('mdast').Image} Image\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('../types.js').Info} Info\n * @typedef {import('../types.js').State} State\n */\n\nimport {checkQuote} from '../util/check-quote.js'\n\nimage.peek = imagePeek\n\n/**\n * @param {Image} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function image(node, _, state, info) {\n  const quote = checkQuote(state)\n  const suffix = quote === '\"' ? 'Quote' : 'Apostrophe'\n  const exit = state.enter('image')\n  let subexit = state.enter('label')\n  const tracker = state.createTracker(info)\n  let value = tracker.move('![')\n  value += tracker.move(\n    state.safe(node.alt, {before: value, after: ']', ...tracker.current()})\n  )\n  value += tracker.move('](')\n\n  subexit()\n\n  if (\n    // If there\u2019s no url but there is a title\u2026\n    (!node.url && node.title) ||\n    // If there are control characters or whitespace.\n    /[\\0- \\u007F]/.test(node.url)\n  ) {\n    subexit = state.enter('destinationLiteral')\n    value += tracker.move('<')\n    value += tracker.move(\n      state.safe(node.url, {before: value, after: '>', ...tracker.current()})\n    )\n    value += tracker.move('>')\n  } else {\n    // No whitespace, raw is prettier.\n    subexit = state.enter('destinationRaw')\n    value += tracker.move(\n      state.safe(node.url, {\n        before: value,\n        after: node.title ? ' ' : ')',\n        ...tracker.current()\n      })\n    )\n  }\n\n  subexit()\n\n  if (node.title) {\n    subexit = state.enter(`title${suffix}`)\n    value += tracker.move(' ' + quote)\n    value += tracker.move(\n      state.safe(node.title, {\n        before: value,\n        after: quote,\n        ...tracker.current()\n      })\n    )\n    value += tracker.move(quote)\n    subexit()\n  }\n\n  value += tracker.move(')')\n  exit()\n\n  return value\n}\n\n/**\n * @returns {string}\n */\nfunction imagePeek() {\n  return '!'\n}\n", "/**\n * @typedef {import('mdast').ImageReference} ImageReference\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('../types.js').Info} Info\n * @typedef {import('../types.js').State} State\n */\n\nimageReference.peek = imageReferencePeek\n\n/**\n * @param {ImageReference} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function imageReference(node, _, state, info) {\n  const type = node.referenceType\n  const exit = state.enter('imageReference')\n  let subexit = state.enter('label')\n  const tracker = state.createTracker(info)\n  let value = tracker.move('![')\n  const alt = state.safe(node.alt, {\n    before: value,\n    after: ']',\n    ...tracker.current()\n  })\n  value += tracker.move(alt + '][')\n\n  subexit()\n  // Hide the fact that we\u2019re in phrasing, because escapes don\u2019t work.\n  const stack = state.stack\n  state.stack = []\n  subexit = state.enter('reference')\n  // Note: for proper tracking, we should reset the output positions when we end\n  // up making a `shortcut` reference, because then there is no brace output.\n  // Practically, in that case, there is no content, so it doesn\u2019t matter that\n  // we\u2019ve tracked one too many characters.\n  const reference = state.safe(state.associationId(node), {\n    before: value,\n    after: ']',\n    ...tracker.current()\n  })\n  subexit()\n  state.stack = stack\n  exit()\n\n  if (type === 'full' || !alt || alt !== reference) {\n    value += tracker.move(reference + ']')\n  } else if (type === 'shortcut') {\n    // Remove the unwanted `[`.\n    value = value.slice(0, -1)\n  } else {\n    value += tracker.move(']')\n  }\n\n  return value\n}\n\n/**\n * @returns {string}\n */\nfunction imageReferencePeek() {\n  return '!'\n}\n", "/**\n * @typedef {import('mdast').InlineCode} InlineCode\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('../types.js').State} State\n */\n\ninlineCode.peek = inlineCodePeek\n\n/**\n * @param {InlineCode} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @returns {string}\n */\nexport function inlineCode(node, _, state) {\n  let value = node.value || ''\n  let sequence = '`'\n  let index = -1\n\n  // If there is a single grave accent on its own in the code, use a fence of\n  // two.\n  // If there are two in a row, use one.\n  while (new RegExp('(^|[^`])' + sequence + '([^`]|$)').test(value)) {\n    sequence += '`'\n  }\n\n  // If this is not just spaces or eols (tabs don\u2019t count), and either the\n  // first or last character are a space, eol, or tick, then pad with spaces.\n  if (\n    /[^ \\r\\n]/.test(value) &&\n    ((/^[ \\r\\n]/.test(value) && /[ \\r\\n]$/.test(value)) || /^`|`$/.test(value))\n  ) {\n    value = ' ' + value + ' '\n  }\n\n  // We have a potential problem: certain characters after eols could result in\n  // blocks being seen.\n  // For example, if someone injected the string `'\\n# b'`, then that would\n  // result in an ATX heading.\n  // We can\u2019t escape characters in `inlineCode`, but because eols are\n  // transformed to spaces when going from markdown to HTML anyway, we can swap\n  // them out.\n  while (++index < state.unsafe.length) {\n    const pattern = state.unsafe[index]\n    const expression = state.compilePattern(pattern)\n    /** @type {RegExpExecArray | null} */\n    let match\n\n    // Only look for `atBreak`s.\n    // Btw: note that `atBreak` patterns will always start the regex at LF or\n    // CR.\n    if (!pattern.atBreak) continue\n\n    while ((match = expression.exec(value))) {\n      let position = match.index\n\n      // Support CRLF (patterns only look for one of the characters).\n      if (\n        value.charCodeAt(position) === 10 /* `\\n` */ &&\n        value.charCodeAt(position - 1) === 13 /* `\\r` */\n      ) {\n        position--\n      }\n\n      value = value.slice(0, position) + ' ' + value.slice(match.index + 1)\n    }\n  }\n\n  return sequence + value + sequence\n}\n\n/**\n * @returns {string}\n */\nfunction inlineCodePeek() {\n  return '`'\n}\n", "/**\n * @typedef {import('mdast').Link} Link\n * @typedef {import('../types.js').State} State\n */\n\nimport {toString} from 'mdast-util-to-string'\n\n/**\n * @param {Link} node\n * @param {State} state\n * @returns {boolean}\n */\nexport function formatLinkAsAutolink(node, state) {\n  const raw = toString(node)\n\n  return Boolean(\n    !state.options.resourceLink &&\n      // If there\u2019s a url\u2026\n      node.url &&\n      // And there\u2019s a no title\u2026\n      !node.title &&\n      // And the content of `node` is a single text node\u2026\n      node.children &&\n      node.children.length === 1 &&\n      node.children[0].type === 'text' &&\n      // And if the url is the same as the content\u2026\n      (raw === node.url || 'mailto:' + raw === node.url) &&\n      // And that starts w/ a protocol\u2026\n      /^[a-z][a-z+.-]+:/i.test(node.url) &&\n      // And that doesn\u2019t contain ASCII control codes (character escapes and\n      // references don\u2019t work), space, or angle brackets\u2026\n      !/[\\0- <>\\u007F]/.test(node.url)\n  )\n}\n", "/**\n * @typedef {import('mdast').Link} Link\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('../types.js').Exit} Exit\n * @typedef {import('../types.js').Info} Info\n * @typedef {import('../types.js').State} State\n */\n\nimport {checkQuote} from '../util/check-quote.js'\nimport {formatLinkAsAutolink} from '../util/format-link-as-autolink.js'\n\nlink.peek = linkPeek\n\n/**\n * @param {Link} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function link(node, _, state, info) {\n  const quote = checkQuote(state)\n  const suffix = quote === '\"' ? 'Quote' : 'Apostrophe'\n  const tracker = state.createTracker(info)\n  /** @type {Exit} */\n  let exit\n  /** @type {Exit} */\n  let subexit\n\n  if (formatLinkAsAutolink(node, state)) {\n    // Hide the fact that we\u2019re in phrasing, because escapes don\u2019t work.\n    const stack = state.stack\n    state.stack = []\n    exit = state.enter('autolink')\n    let value = tracker.move('<')\n    value += tracker.move(\n      state.containerPhrasing(node, {\n        before: value,\n        after: '>',\n        ...tracker.current()\n      })\n    )\n    value += tracker.move('>')\n    exit()\n    state.stack = stack\n    return value\n  }\n\n  exit = state.enter('link')\n  subexit = state.enter('label')\n  let value = tracker.move('[')\n  value += tracker.move(\n    state.containerPhrasing(node, {\n      before: value,\n      after: '](',\n      ...tracker.current()\n    })\n  )\n  value += tracker.move('](')\n  subexit()\n\n  if (\n    // If there\u2019s no url but there is a title\u2026\n    (!node.url && node.title) ||\n    // If there are control characters or whitespace.\n    /[\\0- \\u007F]/.test(node.url)\n  ) {\n    subexit = state.enter('destinationLiteral')\n    value += tracker.move('<')\n    value += tracker.move(\n      state.safe(node.url, {before: value, after: '>', ...tracker.current()})\n    )\n    value += tracker.move('>')\n  } else {\n    // No whitespace, raw is prettier.\n    subexit = state.enter('destinationRaw')\n    value += tracker.move(\n      state.safe(node.url, {\n        before: value,\n        after: node.title ? ' ' : ')',\n        ...tracker.current()\n      })\n    )\n  }\n\n  subexit()\n\n  if (node.title) {\n    subexit = state.enter(`title${suffix}`)\n    value += tracker.move(' ' + quote)\n    value += tracker.move(\n      state.safe(node.title, {\n        before: value,\n        after: quote,\n        ...tracker.current()\n      })\n    )\n    value += tracker.move(quote)\n    subexit()\n  }\n\n  value += tracker.move(')')\n\n  exit()\n  return value\n}\n\n/**\n * @param {Link} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @returns {string}\n */\nfunction linkPeek(node, _, state) {\n  return formatLinkAsAutolink(node, state) ? '<' : '['\n}\n", "/**\n * @typedef {import('mdast').LinkReference} LinkReference\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('../types.js').Info} Info\n * @typedef {import('../types.js').State} State\n */\n\nlinkReference.peek = linkReferencePeek\n\n/**\n * @param {LinkReference} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function linkReference(node, _, state, info) {\n  const type = node.referenceType\n  const exit = state.enter('linkReference')\n  let subexit = state.enter('label')\n  const tracker = state.createTracker(info)\n  let value = tracker.move('[')\n  const text = state.containerPhrasing(node, {\n    before: value,\n    after: ']',\n    ...tracker.current()\n  })\n  value += tracker.move(text + '][')\n\n  subexit()\n  // Hide the fact that we\u2019re in phrasing, because escapes don\u2019t work.\n  const stack = state.stack\n  state.stack = []\n  subexit = state.enter('reference')\n  // Note: for proper tracking, we should reset the output positions when we end\n  // up making a `shortcut` reference, because then there is no brace output.\n  // Practically, in that case, there is no content, so it doesn\u2019t matter that\n  // we\u2019ve tracked one too many characters.\n  const reference = state.safe(state.associationId(node), {\n    before: value,\n    after: ']',\n    ...tracker.current()\n  })\n  subexit()\n  state.stack = stack\n  exit()\n\n  if (type === 'full' || !text || text !== reference) {\n    value += tracker.move(reference + ']')\n  } else if (type === 'shortcut') {\n    // Remove the unwanted `[`.\n    value = value.slice(0, -1)\n  } else {\n    value += tracker.move(']')\n  }\n\n  return value\n}\n\n/**\n * @returns {string}\n */\nfunction linkReferencePeek() {\n  return '['\n}\n", "/**\n * @typedef {import('../types.js').Options} Options\n * @typedef {import('../types.js').State} State\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['bullet'], null | undefined>}\n */\nexport function checkBullet(state) {\n  const marker = state.options.bullet || '*'\n\n  if (marker !== '*' && marker !== '+' && marker !== '-') {\n    throw new Error(\n      'Cannot serialize items with `' +\n        marker +\n        '` for `options.bullet`, expected `*`, `+`, or `-`'\n    )\n  }\n\n  return marker\n}\n", "/**\n * @typedef {import('../types.js').Options} Options\n * @typedef {import('../types.js').State} State\n */\n\nimport {checkBullet} from './check-bullet.js'\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['bullet'], null | undefined>}\n */\nexport function checkBulletOther(state) {\n  const bullet = checkBullet(state)\n  const bulletOther = state.options.bulletOther\n\n  if (!bulletOther) {\n    return bullet === '*' ? '-' : '*'\n  }\n\n  if (bulletOther !== '*' && bulletOther !== '+' && bulletOther !== '-') {\n    throw new Error(\n      'Cannot serialize items with `' +\n        bulletOther +\n        '` for `options.bulletOther`, expected `*`, `+`, or `-`'\n    )\n  }\n\n  if (bulletOther === bullet) {\n    throw new Error(\n      'Expected `bullet` (`' +\n        bullet +\n        '`) and `bulletOther` (`' +\n        bulletOther +\n        '`) to be different'\n    )\n  }\n\n  return bulletOther\n}\n", "/**\n * @typedef {import('../types.js').Options} Options\n * @typedef {import('../types.js').State} State\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['bulletOrdered'], null | undefined>}\n */\nexport function checkBulletOrdered(state) {\n  const marker = state.options.bulletOrdered || '.'\n\n  if (marker !== '.' && marker !== ')') {\n    throw new Error(\n      'Cannot serialize items with `' +\n        marker +\n        '` for `options.bulletOrdered`, expected `.` or `)`'\n    )\n  }\n\n  return marker\n}\n", "/**\n * @typedef {import('../types.js').Options} Options\n * @typedef {import('../types.js').State} State\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['rule'], null | undefined>}\n */\nexport function checkRule(state) {\n  const marker = state.options.rule || '*'\n\n  if (marker !== '*' && marker !== '-' && marker !== '_') {\n    throw new Error(\n      'Cannot serialize rules with `' +\n        marker +\n        '` for `options.rule`, expected `*`, `-`, or `_`'\n    )\n  }\n\n  return marker\n}\n", "/**\n * @typedef {import('mdast').List} List\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('../types.js').Info} Info\n * @typedef {import('../types.js').State} State\n */\n\nimport {checkBullet} from '../util/check-bullet.js'\nimport {checkBulletOther} from '../util/check-bullet-other.js'\nimport {checkBulletOrdered} from '../util/check-bullet-ordered.js'\nimport {checkRule} from '../util/check-rule.js'\n\n/**\n * @param {List} node\n * @param {Parents | undefined} parent\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function list(node, parent, state, info) {\n  const exit = state.enter('list')\n  const bulletCurrent = state.bulletCurrent\n  /** @type {string} */\n  let bullet = node.ordered ? checkBulletOrdered(state) : checkBullet(state)\n  /** @type {string} */\n  const bulletOther = node.ordered\n    ? bullet === '.'\n      ? ')'\n      : '.'\n    : checkBulletOther(state)\n  let useDifferentMarker =\n    parent && state.bulletLastUsed ? bullet === state.bulletLastUsed : false\n\n  if (!node.ordered) {\n    const firstListItem = node.children ? node.children[0] : undefined\n\n    // If there\u2019s an empty first list item directly in two list items,\n    // we have to use a different bullet:\n    //\n    // ```markdown\n    // * - *\n    // ```\n    //\n    // \u2026because otherwise it would become one big thematic break.\n    if (\n      // Bullet could be used as a thematic break marker:\n      (bullet === '*' || bullet === '-') &&\n      // Empty first list item:\n      firstListItem &&\n      (!firstListItem.children || !firstListItem.children[0]) &&\n      // Directly in two other list items:\n      state.stack[state.stack.length - 1] === 'list' &&\n      state.stack[state.stack.length - 2] === 'listItem' &&\n      state.stack[state.stack.length - 3] === 'list' &&\n      state.stack[state.stack.length - 4] === 'listItem' &&\n      // That are each the first child.\n      state.indexStack[state.indexStack.length - 1] === 0 &&\n      state.indexStack[state.indexStack.length - 2] === 0 &&\n      state.indexStack[state.indexStack.length - 3] === 0\n    ) {\n      useDifferentMarker = true\n    }\n\n    // If there\u2019s a thematic break at the start of the first list item,\n    // we have to use a different bullet:\n    //\n    // ```markdown\n    // * ---\n    // ```\n    //\n    // \u2026because otherwise it would become one big thematic break.\n    if (checkRule(state) === bullet && firstListItem) {\n      let index = -1\n\n      while (++index < node.children.length) {\n        const item = node.children[index]\n\n        if (\n          item &&\n          item.type === 'listItem' &&\n          item.children &&\n          item.children[0] &&\n          item.children[0].type === 'thematicBreak'\n        ) {\n          useDifferentMarker = true\n          break\n        }\n      }\n    }\n  }\n\n  if (useDifferentMarker) {\n    bullet = bulletOther\n  }\n\n  state.bulletCurrent = bullet\n  const value = state.containerFlow(node, info)\n  state.bulletLastUsed = bullet\n  state.bulletCurrent = bulletCurrent\n  exit()\n  return value\n}\n", "/**\n * @typedef {import('../types.js').Options} Options\n * @typedef {import('../types.js').State} State\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['listItemIndent'], null | undefined>}\n */\nexport function checkListItemIndent(state) {\n  const style = state.options.listItemIndent || 'one'\n\n  if (style !== 'tab' && style !== 'one' && style !== 'mixed') {\n    throw new Error(\n      'Cannot serialize items with `' +\n        style +\n        '` for `options.listItemIndent`, expected `tab`, `one`, or `mixed`'\n    )\n  }\n\n  return style\n}\n", "/**\n * @typedef {import('mdast').ListItem} ListItem\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('../types.js').Info} Info\n * @typedef {import('../types.js').Map} Map\n * @typedef {import('../types.js').State} State\n */\n\nimport {checkBullet} from '../util/check-bullet.js'\nimport {checkListItemIndent} from '../util/check-list-item-indent.js'\n\n/**\n * @param {ListItem} node\n * @param {Parents | undefined} parent\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function listItem(node, parent, state, info) {\n  const listItemIndent = checkListItemIndent(state)\n  let bullet = state.bulletCurrent || checkBullet(state)\n\n  // Add the marker value for ordered lists.\n  if (parent && parent.type === 'list' && parent.ordered) {\n    bullet =\n      (typeof parent.start === 'number' && parent.start > -1\n        ? parent.start\n        : 1) +\n      (state.options.incrementListMarker === false\n        ? 0\n        : parent.children.indexOf(node)) +\n      bullet\n  }\n\n  let size = bullet.length + 1\n\n  if (\n    listItemIndent === 'tab' ||\n    (listItemIndent === 'mixed' &&\n      ((parent && parent.type === 'list' && parent.spread) || node.spread))\n  ) {\n    size = Math.ceil(size / 4) * 4\n  }\n\n  const tracker = state.createTracker(info)\n  tracker.move(bullet + ' '.repeat(size - bullet.length))\n  tracker.shift(size)\n  const exit = state.enter('listItem')\n  const value = state.indentLines(\n    state.containerFlow(node, tracker.current()),\n    map\n  )\n  exit()\n\n  return value\n\n  /** @type {Map} */\n  function map(line, index, blank) {\n    if (index) {\n      return (blank ? '' : ' '.repeat(size)) + line\n    }\n\n    return (blank ? bullet : bullet + ' '.repeat(size - bullet.length)) + line\n  }\n}\n", "/**\n * @typedef {import('mdast').Paragraph} Paragraph\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('../types.js').Info} Info\n * @typedef {import('../types.js').State} State\n */\n\n/**\n * @param {Paragraph} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function paragraph(node, _, state, info) {\n  const exit = state.enter('paragraph')\n  const subexit = state.enter('phrasing')\n  const value = state.containerPhrasing(node, info)\n  subexit()\n  exit()\n  return value\n}\n", "/**\n * @typedef {import('mdast').PhrasingContent} PhrasingContent\n */\n\nimport {convert} from 'unist-util-is'\n\n/**\n * Check if the given value is *phrasing content*.\n *\n * > \uD83D\uDC49 **Note**: Excludes `html`, which can be both phrasing or flow.\n *\n * @param node\n *   Thing to check, typically `Node`.\n * @returns\n *   Whether `value` is phrasing content.\n */\n\nexport const phrasing =\n  /** @type {(node?: unknown) => node is PhrasingContent} */\n  (\n    convert([\n      'break',\n      'delete',\n      'emphasis',\n      'footnote',\n      'footnoteReference',\n      'image',\n      'imageReference',\n      'inlineCode',\n      'link',\n      'linkReference',\n      'strong',\n      'text'\n    ])\n  )\n", "export {phrasing} from './lib/index.js'\n", "/**\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('mdast').Root} Root\n * @typedef {import('../types.js').Info} Info\n * @typedef {import('../types.js').State} State\n */\n\nimport {phrasing} from 'mdast-util-phrasing'\n\n/**\n * @param {Root} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function root(node, _, state, info) {\n  // Note: `html` nodes are ambiguous.\n  const hasPhrasing = node.children.some(function (d) {\n    return phrasing(d)\n  })\n  const fn = hasPhrasing ? state.containerPhrasing : state.containerFlow\n  return fn.call(state, node, info)\n}\n", "/**\n * @typedef {import('../types.js').Options} Options\n * @typedef {import('../types.js').State} State\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['strong'], null | undefined>}\n */\nexport function checkStrong(state) {\n  const marker = state.options.strong || '*'\n\n  if (marker !== '*' && marker !== '_') {\n    throw new Error(\n      'Cannot serialize strong with `' +\n        marker +\n        '` for `options.strong`, expected `*`, or `_`'\n    )\n  }\n\n  return marker\n}\n", "/**\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('mdast').Strong} Strong\n * @typedef {import('../types.js').Info} Info\n * @typedef {import('../types.js').State} State\n */\n\nimport {checkStrong} from '../util/check-strong.js'\n\nstrong.peek = strongPeek\n\n// To do: there are cases where emphasis cannot \u201Cform\u201D depending on the\n// previous or next character of sequences.\n// There\u2019s no way around that though, except for injecting zero-width stuff.\n// Do we need to safeguard against that?\n/**\n * @param {Strong} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function strong(node, _, state, info) {\n  const marker = checkStrong(state)\n  const exit = state.enter('strong')\n  const tracker = state.createTracker(info)\n  let value = tracker.move(marker + marker)\n  value += tracker.move(\n    state.containerPhrasing(node, {\n      before: value,\n      after: marker,\n      ...tracker.current()\n    })\n  )\n  value += tracker.move(marker + marker)\n  exit()\n  return value\n}\n\n/**\n * @param {Strong} _\n * @param {Parents | undefined} _1\n * @param {State} state\n * @returns {string}\n */\nfunction strongPeek(_, _1, state) {\n  return state.options.strong || '*'\n}\n", "/**\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('mdast').Text} Text\n * @typedef {import('../types.js').Info} Info\n * @typedef {import('../types.js').State} State\n */\n\n/**\n * @param {Text} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function text(node, _, state, info) {\n  return state.safe(node.value, info)\n}\n", "/**\n * @typedef {import('../types.js').Options} Options\n * @typedef {import('../types.js').State} State\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['ruleRepetition'], null | undefined>}\n */\nexport function checkRuleRepetition(state) {\n  const repetition = state.options.ruleRepetition || 3\n\n  if (repetition < 3) {\n    throw new Error(\n      'Cannot serialize rules with repetition `' +\n        repetition +\n        '` for `options.ruleRepetition`, expected `3` or more'\n    )\n  }\n\n  return repetition\n}\n", "/**\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('mdast').ThematicBreak} ThematicBreak\n * @typedef {import('../types.js').State} State\n */\n\nimport {checkRuleRepetition} from '../util/check-rule-repetition.js'\nimport {checkRule} from '../util/check-rule.js'\n\n/**\n * @param {ThematicBreak} _\n * @param {Parents | undefined} _1\n * @param {State} state\n * @returns {string}\n */\nexport function thematicBreak(_, _1, state) {\n  const value = (\n    checkRule(state) + (state.options.ruleSpaces ? ' ' : '')\n  ).repeat(checkRuleRepetition(state))\n\n  return state.options.ruleSpaces ? value.slice(0, -1) : value\n}\n", "import {blockquote} from './blockquote.js'\nimport {hardBreak} from './break.js'\nimport {code} from './code.js'\nimport {definition} from './definition.js'\nimport {emphasis} from './emphasis.js'\nimport {heading} from './heading.js'\nimport {html} from './html.js'\nimport {image} from './image.js'\nimport {imageReference} from './image-reference.js'\nimport {inlineCode} from './inline-code.js'\nimport {link} from './link.js'\nimport {linkReference} from './link-reference.js'\nimport {list} from './list.js'\nimport {listItem} from './list-item.js'\nimport {paragraph} from './paragraph.js'\nimport {root} from './root.js'\nimport {strong} from './strong.js'\nimport {text} from './text.js'\nimport {thematicBreak} from './thematic-break.js'\n\n/**\n * Default (CommonMark) handlers.\n */\nexport const handle = {\n  blockquote,\n  break: hardBreak,\n  code,\n  definition,\n  emphasis,\n  hardBreak,\n  heading,\n  html,\n  image,\n  imageReference,\n  inlineCode,\n  link,\n  linkReference,\n  list,\n  listItem,\n  paragraph,\n  root,\n  strong,\n  text,\n  thematicBreak\n}\n", "/**\n * @typedef {import('./types.js').Join} Join\n */\n\nimport {formatCodeAsIndented} from './util/format-code-as-indented.js'\nimport {formatHeadingAsSetext} from './util/format-heading-as-setext.js'\n\n/** @type {Array<Join>} */\nexport const join = [joinDefaults]\n\n/** @type {Join} */\nfunction joinDefaults(left, right, parent, state) {\n  // Indented code after list or another indented code.\n  if (\n    right.type === 'code' &&\n    formatCodeAsIndented(right, state) &&\n    (left.type === 'list' ||\n      (left.type === right.type && formatCodeAsIndented(left, state)))\n  ) {\n    return false\n  }\n\n  // Join children of a list or an item.\n  // In which case, `parent` has a `spread` field.\n  if ('spread' in parent && typeof parent.spread === 'boolean') {\n    if (\n      left.type === 'paragraph' &&\n      // Two paragraphs.\n      (left.type === right.type ||\n        right.type === 'definition' ||\n        // Paragraph followed by a setext heading.\n        (right.type === 'heading' && formatHeadingAsSetext(right, state)))\n    ) {\n      return\n    }\n\n    return parent.spread ? 1 : 0\n  }\n}\n", "/**\n * @typedef {import('./types.js').ConstructName} ConstructName\n * @typedef {import('./types.js').Unsafe} Unsafe\n */\n\n/**\n * List of constructs that occur in phrasing (paragraphs, headings), but cannot\n * contain things like attention (emphasis, strong), images, or links.\n * So they sort of cancel each other out.\n * Note: could use a better name.\n *\n * @type {Array<ConstructName>}\n */\nconst fullPhrasingSpans = [\n  'autolink',\n  'destinationLiteral',\n  'destinationRaw',\n  'reference',\n  'titleQuote',\n  'titleApostrophe'\n]\n\n/** @type {Array<Unsafe>} */\nexport const unsafe = [\n  {character: '\\t', after: '[\\\\r\\\\n]', inConstruct: 'phrasing'},\n  {character: '\\t', before: '[\\\\r\\\\n]', inConstruct: 'phrasing'},\n  {\n    character: '\\t',\n    inConstruct: ['codeFencedLangGraveAccent', 'codeFencedLangTilde']\n  },\n  {\n    character: '\\r',\n    inConstruct: [\n      'codeFencedLangGraveAccent',\n      'codeFencedLangTilde',\n      'codeFencedMetaGraveAccent',\n      'codeFencedMetaTilde',\n      'destinationLiteral',\n      'headingAtx'\n    ]\n  },\n  {\n    character: '\\n',\n    inConstruct: [\n      'codeFencedLangGraveAccent',\n      'codeFencedLangTilde',\n      'codeFencedMetaGraveAccent',\n      'codeFencedMetaTilde',\n      'destinationLiteral',\n      'headingAtx'\n    ]\n  },\n  {character: ' ', after: '[\\\\r\\\\n]', inConstruct: 'phrasing'},\n  {character: ' ', before: '[\\\\r\\\\n]', inConstruct: 'phrasing'},\n  {\n    character: ' ',\n    inConstruct: ['codeFencedLangGraveAccent', 'codeFencedLangTilde']\n  },\n  // An exclamation mark can start an image, if it is followed by a link or\n  // a link reference.\n  {\n    character: '!',\n    after: '\\\\[',\n    inConstruct: 'phrasing',\n    notInConstruct: fullPhrasingSpans\n  },\n  // A quote can break out of a title.\n  {character: '\"', inConstruct: 'titleQuote'},\n  // A number sign could start an ATX heading if it starts a line.\n  {atBreak: true, character: '#'},\n  {character: '#', inConstruct: 'headingAtx', after: '(?:[\\r\\n]|$)'},\n  // Dollar sign and percentage are not used in markdown.\n  // An ampersand could start a character reference.\n  {character: '&', after: '[#A-Za-z]', inConstruct: 'phrasing'},\n  // An apostrophe can break out of a title.\n  {character: \"'\", inConstruct: 'titleApostrophe'},\n  // A left paren could break out of a destination raw.\n  {character: '(', inConstruct: 'destinationRaw'},\n  // A left paren followed by `]` could make something into a link or image.\n  {\n    before: '\\\\]',\n    character: '(',\n    inConstruct: 'phrasing',\n    notInConstruct: fullPhrasingSpans\n  },\n  // A right paren could start a list item or break out of a destination\n  // raw.\n  {atBreak: true, before: '\\\\d+', character: ')'},\n  {character: ')', inConstruct: 'destinationRaw'},\n  // An asterisk can start thematic breaks, list items, emphasis, strong.\n  {atBreak: true, character: '*', after: '(?:[ \\t\\r\\n*])'},\n  {character: '*', inConstruct: 'phrasing', notInConstruct: fullPhrasingSpans},\n  // A plus sign could start a list item.\n  {atBreak: true, character: '+', after: '(?:[ \\t\\r\\n])'},\n  // A dash can start thematic breaks, list items, and setext heading\n  // underlines.\n  {atBreak: true, character: '-', after: '(?:[ \\t\\r\\n-])'},\n  // A dot could start a list item.\n  {atBreak: true, before: '\\\\d+', character: '.', after: '(?:[ \\t\\r\\n]|$)'},\n  // Slash, colon, and semicolon are not used in markdown for constructs.\n  // A less than can start html (flow or text) or an autolink.\n  // HTML could start with an exclamation mark (declaration, cdata, comment),\n  // slash (closing tag), question mark (instruction), or a letter (tag).\n  // An autolink also starts with a letter.\n  // Finally, it could break out of a destination literal.\n  {atBreak: true, character: '<', after: '[!/?A-Za-z]'},\n  {\n    character: '<',\n    after: '[!/?A-Za-z]',\n    inConstruct: 'phrasing',\n    notInConstruct: fullPhrasingSpans\n  },\n  {character: '<', inConstruct: 'destinationLiteral'},\n  // An equals to can start setext heading underlines.\n  {atBreak: true, character: '='},\n  // A greater than can start block quotes and it can break out of a\n  // destination literal.\n  {atBreak: true, character: '>'},\n  {character: '>', inConstruct: 'destinationLiteral'},\n  // Question mark and at sign are not used in markdown for constructs.\n  // A left bracket can start definitions, references, labels,\n  {atBreak: true, character: '['},\n  {character: '[', inConstruct: 'phrasing', notInConstruct: fullPhrasingSpans},\n  {character: '[', inConstruct: ['label', 'reference']},\n  // A backslash can start an escape (when followed by punctuation) or a\n  // hard break (when followed by an eol).\n  // Note: typical escapes are handled in `safe`!\n  {character: '\\\\', after: '[\\\\r\\\\n]', inConstruct: 'phrasing'},\n  // A right bracket can exit labels.\n  {character: ']', inConstruct: ['label', 'reference']},\n  // Caret is not used in markdown for constructs.\n  // An underscore can start emphasis, strong, or a thematic break.\n  {atBreak: true, character: '_'},\n  {character: '_', inConstruct: 'phrasing', notInConstruct: fullPhrasingSpans},\n  // A grave accent can start code (fenced or text), or it can break out of\n  // a grave accent code fence.\n  {atBreak: true, character: '`'},\n  {\n    character: '`',\n    inConstruct: ['codeFencedLangGraveAccent', 'codeFencedMetaGraveAccent']\n  },\n  {character: '`', inConstruct: 'phrasing', notInConstruct: fullPhrasingSpans},\n  // Left brace, vertical bar, right brace are not used in markdown for\n  // constructs.\n  // A tilde can start code (fenced).\n  {atBreak: true, character: '~'}\n]\n", "/**\n * @typedef {import('../types.js').AssociationId} AssociationId\n */\n\nimport {decodeString} from 'micromark-util-decode-string'\n\n/**\n * Get an identifier from an association to match it to others.\n *\n * Associations are nodes that match to something else through an ID:\n * <https://github.com/syntax-tree/mdast#association>.\n *\n * The `label` of an association is the string value: character escapes and\n * references work, and casing is intact.\n * The `identifier` is used to match one association to another:\n * controversially, character escapes and references don\u2019t work in this\n * matching: `&copy;` does not match `\u00A9`, and `\\+` does not match `+`.\n *\n * But casing is ignored (and whitespace) is trimmed and collapsed: ` A\\nb`\n * matches `a b`.\n * So, we do prefer the label when figuring out how we\u2019re going to serialize:\n * it has whitespace, casing, and we can ignore most useless character\n * escapes and all character references.\n *\n * @type {AssociationId}\n */\nexport function association(node) {\n  if (node.label || !node.identifier) {\n    return node.label || ''\n  }\n\n  return decodeString(node.identifier)\n}\n", "/**\n * @typedef {import('../types.js').CompilePattern} CompilePattern\n */\n\n/**\n * @type {CompilePattern}\n */\nexport function compilePattern(pattern) {\n  if (!pattern._compiled) {\n    const before =\n      (pattern.atBreak ? '[\\\\r\\\\n][\\\\t ]*' : '') +\n      (pattern.before ? '(?:' + pattern.before + ')' : '')\n\n    pattern._compiled = new RegExp(\n      (before ? '(' + before + ')' : '') +\n        (/[|\\\\{}()[\\]^$+*?.-]/.test(pattern.character) ? '\\\\' : '') +\n        pattern.character +\n        (pattern.after ? '(?:' + pattern.after + ')' : ''),\n      'g'\n    )\n  }\n\n  return pattern._compiled\n}\n", "/**\n * @typedef {import('../types.js').Handle} Handle\n * @typedef {import('../types.js').Info} Info\n * @typedef {import('../types.js').PhrasingParents} PhrasingParents\n * @typedef {import('../types.js').State} State\n */\n\n/**\n * Serialize the children of a parent that contains phrasing children.\n *\n * These children will be joined flush together.\n *\n * @param {PhrasingParents} parent\n *   Parent of flow nodes.\n * @param {State} state\n *   Info passed around about the current state.\n * @param {Info} info\n *   Info on where we are in the document we are generating.\n * @returns {string}\n *   Serialized children, joined together.\n */\nexport function containerPhrasing(parent, state, info) {\n  const indexStack = state.indexStack\n  const children = parent.children || []\n  /** @type {Array<string>} */\n  const results = []\n  let index = -1\n  let before = info.before\n\n  indexStack.push(-1)\n  let tracker = state.createTracker(info)\n\n  while (++index < children.length) {\n    const child = children[index]\n    /** @type {string} */\n    let after\n\n    indexStack[indexStack.length - 1] = index\n\n    if (index + 1 < children.length) {\n      /** @type {Handle} */\n      // @ts-expect-error: hush, it\u2019s actually a `zwitch`.\n      let handle = state.handle.handlers[children[index + 1].type]\n      /** @type {Handle} */\n      // @ts-expect-error: hush, it\u2019s actually a `zwitch`.\n      if (handle && handle.peek) handle = handle.peek\n      after = handle\n        ? handle(children[index + 1], parent, state, {\n            before: '',\n            after: '',\n            ...tracker.current()\n          }).charAt(0)\n        : ''\n    } else {\n      after = info.after\n    }\n\n    // In some cases, html (text) can be found in phrasing right after an eol.\n    // When we\u2019d serialize that, in most cases that would be seen as html\n    // (flow).\n    // As we can\u2019t escape or so to prevent it from happening, we take a somewhat\n    // reasonable approach: replace that eol with a space.\n    // See: <https://github.com/syntax-tree/mdast-util-to-markdown/issues/15>\n    if (\n      results.length > 0 &&\n      (before === '\\r' || before === '\\n') &&\n      child.type === 'html'\n    ) {\n      results[results.length - 1] = results[results.length - 1].replace(\n        /(\\r?\\n|\\r)$/,\n        ' '\n      )\n      before = ' '\n\n      // To do: does this work to reset tracker?\n      tracker = state.createTracker(info)\n      tracker.move(results.join(''))\n    }\n\n    results.push(\n      tracker.move(\n        state.handle(child, parent, state, {\n          ...tracker.current(),\n          before,\n          after\n        })\n      )\n    )\n\n    before = results[results.length - 1].slice(-1)\n  }\n\n  indexStack.pop()\n\n  return results.join('')\n}\n", "/**\n * @typedef {import('../types.js').FlowParents} FlowParents\n * @typedef {import('../types.js').FlowChildren} FlowChildren\n * @typedef {import('../types.js').State} State\n * @typedef {import('../types.js').TrackFields} TrackFields\n */\n\n/**\n * @param {FlowParents} parent\n *   Parent of flow nodes.\n * @param {State} state\n *   Info passed around about the current state.\n * @param {TrackFields} info\n *   Info on where we are in the document we are generating.\n * @returns {string}\n *   Serialized children, joined by (blank) lines.\n */\nexport function containerFlow(parent, state, info) {\n  const indexStack = state.indexStack\n  const children = parent.children || []\n  const tracker = state.createTracker(info)\n  /** @type {Array<string>} */\n  const results = []\n  let index = -1\n\n  indexStack.push(-1)\n\n  while (++index < children.length) {\n    const child = children[index]\n\n    indexStack[indexStack.length - 1] = index\n\n    results.push(\n      tracker.move(\n        state.handle(child, parent, state, {\n          before: '\\n',\n          after: '\\n',\n          ...tracker.current()\n        })\n      )\n    )\n\n    if (child.type !== 'list') {\n      state.bulletLastUsed = undefined\n    }\n\n    if (index < children.length - 1) {\n      results.push(\n        tracker.move(between(child, children[index + 1], parent, state))\n      )\n    }\n  }\n\n  indexStack.pop()\n\n  return results.join('')\n}\n\n/**\n * @param {FlowChildren} left\n * @param {FlowChildren} right\n * @param {FlowParents} parent\n * @param {State} state\n * @returns {string}\n */\nfunction between(left, right, parent, state) {\n  let index = state.join.length\n\n  while (index--) {\n    const result = state.join[index](left, right, parent, state)\n\n    if (result === true || result === 1) {\n      break\n    }\n\n    if (typeof result === 'number') {\n      return '\\n'.repeat(1 + result)\n    }\n\n    if (result === false) {\n      return '\\n\\n<!---->\\n\\n'\n    }\n  }\n\n  return '\\n\\n'\n}\n", "/**\n * @typedef {import('../types.js').IndentLines} IndentLines\n */\n\nconst eol = /\\r?\\n|\\r/g\n\n/**\n * @type {IndentLines}\n */\nexport function indentLines(value, map) {\n  /** @type {Array<string>} */\n  const result = []\n  let start = 0\n  let line = 0\n  /** @type {RegExpExecArray | null} */\n  let match\n\n  while ((match = eol.exec(value))) {\n    one(value.slice(start, match.index))\n    result.push(match[0])\n    start = match.index + match[0].length\n    line++\n  }\n\n  one(value.slice(start))\n\n  return result.join('')\n\n  /**\n   * @param {string} value\n   */\n  function one(value) {\n    result.push(map(value, line, !value))\n  }\n}\n", "/**\n * @typedef {import('../types.js').SafeConfig} SafeConfig\n * @typedef {import('../types.js').State} State\n */\n\nimport {patternInScope} from './pattern-in-scope.js'\n\n/**\n * Make a string safe for embedding in markdown constructs.\n *\n * In markdown, almost all punctuation characters can, in certain cases,\n * result in something.\n * Whether they do is highly subjective to where they happen and in what\n * they happen.\n *\n * To solve this, `mdast-util-to-markdown` tracks:\n *\n * * Characters before and after something;\n * * What \u201Cconstructs\u201D we are in.\n *\n * This information is then used by this function to escape or encode\n * special characters.\n *\n * @param {State} state\n *   Info passed around about the current state.\n * @param {string | null | undefined} input\n *   Raw value to make safe.\n * @param {SafeConfig} config\n *   Configuration.\n * @returns {string}\n *   Serialized markdown safe for embedding.\n */\nexport function safe(state, input, config) {\n  const value = (config.before || '') + (input || '') + (config.after || '')\n  /** @type {Array<number>} */\n  const positions = []\n  /** @type {Array<string>} */\n  const result = []\n  /** @type {Record<number, {before: boolean, after: boolean}>} */\n  const infos = {}\n  let index = -1\n\n  while (++index < state.unsafe.length) {\n    const pattern = state.unsafe[index]\n\n    if (!patternInScope(state.stack, pattern)) {\n      continue\n    }\n\n    const expression = state.compilePattern(pattern)\n    /** @type {RegExpExecArray | null} */\n    let match\n\n    while ((match = expression.exec(value))) {\n      const before = 'before' in pattern || Boolean(pattern.atBreak)\n      const after = 'after' in pattern\n      const position = match.index + (before ? match[1].length : 0)\n\n      if (positions.includes(position)) {\n        if (infos[position].before && !before) {\n          infos[position].before = false\n        }\n\n        if (infos[position].after && !after) {\n          infos[position].after = false\n        }\n      } else {\n        positions.push(position)\n        infos[position] = {before, after}\n      }\n    }\n  }\n\n  positions.sort(numerical)\n\n  let start = config.before ? config.before.length : 0\n  const end = value.length - (config.after ? config.after.length : 0)\n  index = -1\n\n  while (++index < positions.length) {\n    const position = positions[index]\n\n    // Character before or after matched:\n    if (position < start || position >= end) {\n      continue\n    }\n\n    // If this character is supposed to be escaped because it has a condition on\n    // the next character, and the next character is definitly being escaped,\n    // then skip this escape.\n    if (\n      (position + 1 < end &&\n        positions[index + 1] === position + 1 &&\n        infos[position].after &&\n        !infos[position + 1].before &&\n        !infos[position + 1].after) ||\n      (positions[index - 1] === position - 1 &&\n        infos[position].before &&\n        !infos[position - 1].before &&\n        !infos[position - 1].after)\n    ) {\n      continue\n    }\n\n    if (start !== position) {\n      // If we have to use a character reference, an ampersand would be more\n      // correct, but as backslashes only care about punctuation, either will\n      // do the trick\n      result.push(escapeBackslashes(value.slice(start, position), '\\\\'))\n    }\n\n    start = position\n\n    if (\n      /[!-/:-@[-`{-~]/.test(value.charAt(position)) &&\n      (!config.encode || !config.encode.includes(value.charAt(position)))\n    ) {\n      // Character escape.\n      result.push('\\\\')\n    } else {\n      // Character reference.\n      result.push(\n        '&#x' + value.charCodeAt(position).toString(16).toUpperCase() + ';'\n      )\n      start++\n    }\n  }\n\n  result.push(escapeBackslashes(value.slice(start, end), config.after))\n\n  return result.join('')\n}\n\n/**\n * @param {number} a\n * @param {number} b\n * @returns {number}\n */\nfunction numerical(a, b) {\n  return a - b\n}\n\n/**\n * @param {string} value\n * @param {string} after\n * @returns {string}\n */\nfunction escapeBackslashes(value, after) {\n  const expression = /\\\\(?=[!-/:-@[-`{-~])/g\n  /** @type {Array<number>} */\n  const positions = []\n  /** @type {Array<string>} */\n  const results = []\n  const whole = value + after\n  let index = -1\n  let start = 0\n  /** @type {RegExpExecArray | null} */\n  let match\n\n  while ((match = expression.exec(whole))) {\n    positions.push(match.index)\n  }\n\n  while (++index < positions.length) {\n    if (start !== positions[index]) {\n      results.push(value.slice(start, positions[index]))\n    }\n\n    results.push('\\\\')\n    start = positions[index]\n  }\n\n  results.push(value.slice(start))\n\n  return results.join('')\n}\n", "/**\n * @typedef {import('../types.js').CreateTracker} CreateTracker\n * @typedef {import('../types.js').TrackCurrent} TrackCurrent\n * @typedef {import('../types.js').TrackMove} TrackMove\n * @typedef {import('../types.js').TrackShift} TrackShift\n */\n\n/**\n * Track positional info in the output.\n *\n * @type {CreateTracker}\n */\nexport function track(config) {\n  // Defaults are used to prevent crashes when older utilities somehow activate\n  // this code.\n  /* c8 ignore next 5 */\n  const options = config || {}\n  const now = options.now || {}\n  let lineShift = options.lineShift || 0\n  let line = now.line || 1\n  let column = now.column || 1\n\n  return {move, current, shift}\n\n  /**\n   * Get the current tracked info.\n   *\n   * @type {TrackCurrent}\n   */\n  function current() {\n    return {now: {line, column}, lineShift}\n  }\n\n  /**\n   * Define an increased line shift (the typical indent for lines).\n   *\n   * @type {TrackShift}\n   */\n  function shift(value) {\n    lineShift += value\n  }\n\n  /**\n   * Move past some generated markdown.\n   *\n   * @type {TrackMove}\n   */\n  function move(input) {\n    // eslint-disable-next-line unicorn/prefer-default-parameters\n    const value = input || ''\n    const chunks = value.split(/\\r?\\n|\\r/g)\n    const tail = chunks[chunks.length - 1]\n    line += chunks.length - 1\n    column =\n      chunks.length === 1 ? column + tail.length : 1 + tail.length + lineShift\n    return value\n  }\n}\n", "/**\n * @typedef {import('mdast').Nodes} Nodes\n * @typedef {import('./types.js').Enter} Enter\n * @typedef {import('./types.js').Info} Info\n * @typedef {import('./types.js').Join} Join\n * @typedef {import('./types.js').FlowParents} FlowParents\n * @typedef {import('./types.js').Options} Options\n * @typedef {import('./types.js').PhrasingParents} PhrasingParents\n * @typedef {import('./types.js').SafeConfig} SafeConfig\n * @typedef {import('./types.js').State} State\n * @typedef {import('./types.js').TrackFields} TrackFields\n */\n\nimport {zwitch} from 'zwitch'\nimport {configure} from './configure.js'\nimport {handle as handlers} from './handle/index.js'\nimport {join} from './join.js'\nimport {unsafe} from './unsafe.js'\nimport {association} from './util/association.js'\nimport {compilePattern} from './util/compile-pattern.js'\nimport {containerPhrasing} from './util/container-phrasing.js'\nimport {containerFlow} from './util/container-flow.js'\nimport {indentLines} from './util/indent-lines.js'\nimport {safe} from './util/safe.js'\nimport {track} from './util/track.js'\n\n/**\n * Turn an mdast syntax tree into markdown.\n *\n * @param {Nodes} tree\n *   Tree to serialize.\n * @param {Options} [options]\n *   Configuration (optional).\n * @returns {string}\n *   Serialized markdown representing `tree`.\n */\nexport function toMarkdown(tree, options = {}) {\n  /** @type {State} */\n  const state = {\n    enter,\n    indentLines,\n    associationId: association,\n    containerPhrasing: containerPhrasingBound,\n    containerFlow: containerFlowBound,\n    createTracker: track,\n    compilePattern,\n    safe: safeBound,\n    stack: [],\n    unsafe: [...unsafe],\n    join: [...join],\n    // @ts-expect-error: GFM / frontmatter are typed in `mdast` but not defined\n    // here.\n    handlers: {...handlers},\n    options: {},\n    indexStack: [],\n    // @ts-expect-error: add `handle` in a second.\n    handle: undefined\n  }\n\n  configure(state, options)\n\n  if (state.options.tightDefinitions) {\n    state.join.push(joinDefinition)\n  }\n\n  state.handle = zwitch('type', {\n    invalid,\n    unknown,\n    handlers: state.handlers\n  })\n\n  let result = state.handle(tree, undefined, state, {\n    before: '\\n',\n    after: '\\n',\n    now: {line: 1, column: 1},\n    lineShift: 0\n  })\n\n  if (\n    result &&\n    result.charCodeAt(result.length - 1) !== 10 &&\n    result.charCodeAt(result.length - 1) !== 13\n  ) {\n    result += '\\n'\n  }\n\n  return result\n\n  /** @type {Enter} */\n  function enter(name) {\n    state.stack.push(name)\n    return exit\n\n    /**\n     * @returns {undefined}\n     */\n    function exit() {\n      state.stack.pop()\n    }\n  }\n}\n\n/**\n * @param {unknown} value\n * @returns {never}\n */\nfunction invalid(value) {\n  throw new Error('Cannot handle value `' + value + '`, expected node')\n}\n\n/**\n * @param {unknown} value\n * @returns {never}\n */\nfunction unknown(value) {\n  // Always a node.\n  const node = /** @type {Nodes} */ (value)\n  throw new Error('Cannot handle unknown node `' + node.type + '`')\n}\n\n/** @type {Join} */\nfunction joinDefinition(left, right) {\n  // No blank line between adjacent definitions.\n  if (left.type === 'definition' && left.type === right.type) {\n    return 0\n  }\n}\n\n/**\n * Serialize the children of a parent that contains phrasing children.\n *\n * These children will be joined flush together.\n *\n * @this {State}\n *   Info passed around about the current state.\n * @param {PhrasingParents} parent\n *   Parent of flow nodes.\n * @param {Info} info\n *   Info on where we are in the document we are generating.\n * @returns {string}\n *   Serialized children, joined together.\n */\nfunction containerPhrasingBound(parent, info) {\n  return containerPhrasing(parent, this, info)\n}\n\n/**\n * Serialize the children of a parent that contains flow children.\n *\n * These children will typically be joined by blank lines.\n * What they are joined by exactly is defined by `Join` functions.\n *\n * @this {State}\n *   Info passed around about the current state.\n * @param {FlowParents} parent\n *   Parent of flow nodes.\n * @param {TrackFields} info\n *   Info on where we are in the document we are generating.\n * @returns {string}\n *   Serialized children, joined by (blank) lines.\n */\nfunction containerFlowBound(parent, info) {\n  return containerFlow(parent, this, info)\n}\n\n/**\n * Make a string safe for embedding in markdown constructs.\n *\n * In markdown, almost all punctuation characters can, in certain cases,\n * result in something.\n * Whether they do is highly subjective to where they happen and in what\n * they happen.\n *\n * To solve this, `mdast-util-to-markdown` tracks:\n *\n * * Characters before and after something;\n * * What \u201Cconstructs\u201D we are in.\n *\n * This information is then used by this function to escape or encode\n * special characters.\n *\n * @this {State}\n *   Info passed around about the current state.\n * @param {string | null | undefined} value\n *   Raw value to make safe.\n * @param {SafeConfig} config\n *   Configuration.\n * @returns {string}\n *   Serialized markdown safe for embedding.\n */\nfunction safeBound(value, config) {\n  return safe(this, value, config)\n}\n", "// Note: extra types exposed from `index.d.ts`.\nexport {toMarkdown} from './lib/index.js'\nexport {handle as defaultHandlers} from './lib/handle/index.js'\n", "import {EditorView, showTooltip, Tooltip, TooltipView} from \"@codemirror/view\";\nimport {EditorState, Extension, StateEffect, StateField} from \"@codemirror/state\";\nimport EditorSelectionHelper from \"../codemirror-helper\";\n\n// \u5B9A\u4E49\u4E00\u4E2A StateEffect \u7528\u4E8E\u63A7\u5236 Tooltip \u7684\u663E\u793A\nconst toggleTooltipEffect = StateEffect.define<boolean>();\n// \u5B9A\u4E49\u4E00\u4E2A StateField \u6765\u7EF4\u62A4 Tooltip \u7684\u663E\u793A\u72B6\u6001\nconst tooltipDisplayField = StateField.define<boolean>({\n    create() {\n        return true; // \u9ED8\u8BA4\u663E\u793A Tooltip\n    },\n    update(value, tr) {\n        // \u5982\u679C\u4E8B\u52A1\u4E2D\u6709 toggleTooltipEffect\uFF0C\u90A3\u4E48\u4F7F\u7528\u8BE5\u6548\u679C\u7684\u503C\u66F4\u65B0\u72B6\u6001\n        for (const effect of tr.effects) {\n            if (effect.is(toggleTooltipEffect)) {\n                return effect.value;\n            }\n        }\n        // \u5982\u679C\u6CA1\u6709\u76F8\u5173\u6548\u679C\uFF0C\u4FDD\u6301\u5F53\u524D\u72B6\u6001\u4E0D\u53D8\n        return value;\n    }\n});\n\n// \u5B9A\u4E49\u4E00\u4E2A StateEffect \u6765\u8BBE\u7F6E\u6216\u6E05\u9664 Tooltip\nexport const setSelectionTooltip = StateEffect.define<Tooltip | null>();\n\n// \u521B\u5EFA\u4E00\u4E2A StateField \u6765\u8DDF\u8E2A Tooltip \u7684\u72B6\u6001\nconst selectionTooltipState = StateField.define<Tooltip | null>({\n    create: (state: EditorState) => null,\n    update: (value, tr) => {\n        if (tr.selection) {\n            // \u5F53\u9009\u62E9\u53D8\u5316\u65F6\uFF0C\u79FB\u9664 Tooltip\n            return null;\n        }\n        for (let effect of tr.effects) {\n            if (effect.is(setSelectionTooltip)) {\n                return effect.value;\n            }\n        }\n        return value;\n    },\n    provide: f => showTooltip.from(f)\n});\n\nclass TooltipActionView implements TooltipView {\n    dom: HTMLElement;\n    text: string;\n    view: EditorView;\n    offset: { x: number; y: number };\n    overlap: boolean;\n    resize: boolean;\n\n    constructor(text: string, view: EditorView) {\n        this.text = text;\n        this.view = view;\n        this.offset = {x: 0, y: 0};\n        this.overlap = false;\n        this.resize = false;\n\n        this.dom = document.createElement(\"div\");\n        this.dom.className = \"cm-tooltip-selection\";\n\n        // \u6DFB\u52A0\u4E00\u4E2A\u6309\u94AE\u7528\u4E8E Markdown \u52A0\u7C97\n        let boldButton = document.createElement(\"span\");\n        boldButton.textContent = \"Bold\";\n        boldButton.onclick = () => {\n            // \u6267\u884C Markdown \u52A0\u7C97\u547D\u4EE4\n            // \u6CE8\u610F\uFF1A\u8FD9\u91CC\u9700\u8981\u5B9E\u73B0\u5177\u4F53\u7684 Markdown \u5305\u88C5\u903B\u8F91\n            wrapWithMarkdown(view, text, \"**\");\n        };\n        this.dom.appendChild(boldButton);\n    }\n\n    destroy(): void {\n        this.dom.remove();\n    }\n\n    mount(view: EditorView): void {\n        this.view = view;\n    }\n}\n\n// Markdown \u5305\u88C5\u51FD\u6570\nfunction wrapWithMarkdown(view: EditorView, text: string, wrapper: string) {\n    const {from, to} = view.state.selection.main;\n    view.dispatch({\n        changes: [\n            {from, insert: wrapper},\n            {from: to, insert: wrapper}\n        ]\n    });\n}\n\n// \u751F\u6210 Tooltip \u7684\u51FD\u6570\nfunction getSelectionTooltip(state: EditorState): Tooltip | null {\n    const {ranges} = state.selection;\n    if (ranges.length !== 1 || ranges[0].empty) return null;\n    const {from, to} = state.selection.main;\n    const text = state.doc.sliceString(from, to);\n\n    // \u68C0\u67E5\u6587\u672C\u662F\u5426\u4E3A\u7A7A\u6216\u53EA\u5305\u542B\u7A7A\u767D\u5B57\u7B26\n    if (\n        !text\n        || text.trim().length === 0\n        || !EditorSelectionHelper.canApplyInlineMarkdown(state)\n    ) return null;\n\n    return {\n        pos: (from + to) / 2,\n        create: (view: EditorView) => new TooltipActionView(text, view),\n        above: true,\n        strictSide: true,\n        arrow: true\n    };\n}\n\n// \u521B\u5EFA\u4E00\u4E2A\u63D2\u4EF6\u6765\u76D1\u542C\u9009\u533A\u53D8\u5316\uFF0C\u6839\u636E tooltipDisplayField \u7684\u72B6\u6001\u6765\u51B3\u5B9A\u662F\u5426\u663E\u793A Tooltip\nconst selectionTooltipPlugin = EditorView.updateListener.of((update) => {\n    // \u53EA\u6709\u5F53 tooltipDisplayField \u4E3A true \u65F6\uFF0C\u624D\u5904\u7406 Tooltip \u7684\u663E\u793A\n\n\n    if (update.selectionSet && update.state.field(tooltipDisplayField)) {\n        const tooltip = getSelectionTooltip(update.state);\n        const effect = tooltip ? setSelectionTooltip.of(tooltip) : setSelectionTooltip.of(null);\n        update.view.dispatch({effects: effect});\n    }\n});\n\nconst selectionTooltipBaseTheme = EditorView.baseTheme({\n    \".cm-tooltip.cm-tooltip-selection\": {\n        backgroundColor: \"#66b\",\n        color: \"white\",\n        border: \"none\",\n        padding: \"2px 7px\",\n        borderRadius: \"4px\",\n        \"& .cm-tooltip-arrow:before\": {\n            borderTopColor: \"#66b\"\n        },\n        \"& .cm-tooltip-arrow:after\": {\n            borderTopColor: \"transparent\"\n        }\n    }\n});\n\n\n// \u6267\u884C\u5E26\u6709\u9009\u4E2D\u7684\u64CD\u4F5C,\u4E0D\u663E\u793A Tooltip\nexport function changeWithTooltipDisabled(view: EditorView, callback: () => void) {\n    // \u5148\u8BB0\u5F55\u539F\u6709\u7684 tooltip \u663E\u793A\u72B6\u6001\n    const originallyShowingTooltips = view.state.field(tooltipDisplayField);\n    // \u5982\u679C\u539F\u672C\u5C31\u7981\u7528\u4E86\uFF0C\u76F4\u63A5\u6389\u7528\u56DE\u8C03\u51FD\u6570\n    if (!originallyShowingTooltips) {\n        callback();\n        return;\n    }\n    // \u7981\u7528 tooltips\n    view.dispatch({\n        effects: toggleTooltipEffect.of(false)\n    });\n    // \u6267\u884C\u9700\u8981\u7684\u64CD\u4F5C\n    callback();\n\n    // \u6062\u590D\u539F\u6709\u7684 tooltips \u663E\u793A\u72B6\u6001\n    view.dispatch({\n        effects: toggleTooltipEffect.of(originallyShowingTooltips)\n    });\n}\n\n// \u6700\u7EC8\u7684\u6269\u5C55\u51FD\u6570\nexport function selectionTooltipAction(): Extension {\n    return [\n        tooltipDisplayField,\n        selectionTooltipPlugin,\n        selectionTooltipState,\n        selectionTooltipBaseTheme];\n}\n\n\n", "import {EditorView, gutter, GutterMarker, ViewPlugin, ViewUpdate} from \"@codemirror/view\";\nimport {RangeSet, RangeSetBuilder} from \"@codemirror/state\";\nimport tippy from \"tippy.js\";\nimport EditorSelectionHelper from \"../codemirror-helper\";\nimport {syntaxTree} from \"@codemirror/language\";\nimport {NodeType, SyntaxNodeRef} from \"@lezer/common\";\nimport {MarkdownTypeIcons} from \"./icons\";\nimport {fromMarkdown } from \"mdast-util-from-markdown\";\nimport { visit } from 'unist-util-visit';\nimport {Heading} from \"mdast-util-from-markdown/lib\";\nimport {toMarkdown} from \"mdast-util-to-markdown\";\nimport {changeWithTooltipDisabled} from \"../codemirror-tooltips-action\";\nfunction generateRandomDomId(prefix = '') {\n    return prefix + '-' + Date.now().toString(36) + '-' + Math.random().toString(36).slice(2, 11);\n}\nclass MarkdownMarker extends GutterMarker {\n    private menu: HTMLElement;\n    constructor(readonly type: NodeType) {\n        super()\n        this.menu = this.createMenu(this.type);\n    }\n    createMenu(type: NodeType): HTMLElement {\n        // \u6839\u636E\u7C7B\u578B\u521B\u5EFA\u83DC\u5355\n        const menuContent = `\n            <div class=\"menu menu-column w-200px\">\n                <div class=\"menu-item\">\n                    <span class=\"menu-link\">\n                        <span class=\"menu-icon\">\n                            <i class=\"ki-outline ki-notification-on fs-3\"></i>\n                        </span>\n                        <span class=\"menu-title\" data-cmd=\"bold\">${type.name} Link</span>\n                    </span>\n                </div>\n            </div>\n        `;\n        const menu = document.createElement('div');\n        menu.className = \"popover popover-menu popover-md shadow-0\"\n        menu.innerHTML = menuContent;\n        return menu;\n    }\n    modifyLineContent(view:EditorView, actionElement: HTMLElement, pos: number) {\n        // \u5728\u6B64\u5904\u4FEE\u6539\u5F53\u524D\u884C\u7684\u5185\u5BB9\n        const line = view.state.doc.lineAt(pos);\n        console.log(\"line content: \", line.text);\n        console.log(\"line number: \", line.number);\n        console.log(\"actionElement: \", actionElement);\n        const tree = fromMarkdown(line.text);\n        console.log(\"line tree\", tree);\n        const heading = tree.children[0];\n        console.log(\"heading\", heading);\n\n        let isHeanding = false;\n\n        visit(tree, 'heading', (node) => {\n            if (node.type === 'heading') {\n                // Cast node to a Heading node to access the depth property\n                const heading = node as Heading;\n                heading.depth = 2;\n                // \u904D\u5386\u6807\u9898\u4E0B\u7684\u6240\u6709\u5B50\u8282\u70B9\n                visit(heading, 'text', (textNode) => {\n                    if (textNode.type === 'text') {\n                        // \u8FD9\u91CC\u53EF\u4EE5\u66F4\u6539\u6587\u672C\u8282\u70B9\u7684\u503C\n                        textNode.value = '\u65B0\u7684\u6807\u9898\u6587\u672C';\n                    }\n                });\n                isHeanding = true;\n            }\n        });\n\n        if (isHeanding) {\n            const markdownString = toMarkdown(tree);\n            const insertString = markdownString.endsWith('\\n') ? markdownString.slice(0, -1) : markdownString;\n            let changeByRange = {\n                changes: [{ from: line.from, to: line.to, insert: insertString }],\n                /* \u4FEE\u6539\u4E4B\u540E\u5149\u6807\u79FB\u52A8\u5230\u7684\u4F4D\u7F6E */\n                selection: { anchor: line.from, head: line.from+insertString.length },\n            }\n            changeWithTooltipDisabled(view, () => {\n                view.dispatch(changeByRange);\n            });\n\n        }\n    }\n    showMenu(element: HTMLElement, view: EditorView, pos: number) {\n        tippy(element, {\n            appendTo: document.body,\n            popperOptions: { strategy: 'fixed'},\n            placement: 'bottom',\n            arrow: true,\n            animation: 'fade',\n            content: this.menu,\n            allowHTML: true,\n            interactive: true,\n            trigger: 'manual',\n            theme: 'light',\n            onShow: (instance) => {\n                const menuElement = instance.popper.querySelector('.menu-link');\n                if (menuElement) {\n                    menuElement.addEventListener('click', (event) => {\n                        const cmdElement = event.target as HTMLElement;\n                        this.modifyLineContent(view, cmdElement, pos);\n                    });\n                }\n            }\n        }).show();\n    }\n    eq(other: MarkdownMarker) {\n        return this.type == other.type\n    }\n    toDOM(view: EditorView) {\n        let span = document.createElement(\"span\")\n        span.id = generateRandomDomId('cm-gutter-markdown');\n        span.style.cursor = 'pointer';\n        // span.textContent = this.type;\n        span.innerHTML = MarkdownTypeIcons[this.type.name];\n        span.className = `cm-gutter-${this.type.name}`;\n        // \u6DFB\u52A0\u70B9\u51FB\u4E8B\u4EF6\u76D1\u542C\u5668\n        // span.addEventListener('click', (event) => {\n        //     event.preventDefault();\n        //     const gutterElement = event.currentTarget as HTMLElement;\n        //     if (gutterElement !== null) {\n        //         // \u83B7\u53D6\u70B9\u51FB\u5143\u7D20\u7684\u5750\u6807\n        //         const rect = gutterElement.getBoundingClientRect();\n        //         const x = rect.left;\n        //         const y = event.clientY;\n        //\n        //         // \u5C06\u5C4F\u5E55\u5750\u6807\u8F6C\u6362\u4E3A\u6587\u6863\u4F4D\u7F6E\n        //         const pos = view.posAtCoords({x, y})\n        //         if (pos !== null) {\n        //             this.showMenu(gutterElement, view, pos);\n        //         }\n        //     }\n        // });\n        return span\n    }\n}\n\nconst markdownGutterTheme = EditorView.baseTheme({\n    \".cm-markdownGutter\": {\n        paddingLeft: \"0.25rem !important\",\n    },\n    \".cm-markdownGutter .cm-gutterElement\": {\n        display: 'inline-block',\n        verticalAlign: 'middle',\n        marginLeft: '0.2ch',\n    },\n    '.cm-markdownGutter .cm-gutterElement span': {\n\n    },\n    \"&light .cm-markdownGutter\": { backgroundColor: \"#ffffff\" },\n    \"&dark .cm-markdownGutter\": { backgroundColor: \"#1e1e2d\" },\n    '&dark .cm-markdownGutter .cm-gutterElement svg path': { fill: \"#ffffff\"},\n});\n\nexport const markdownMarkersPlugin = ViewPlugin.fromClass(class {\n    markers: RangeSet<MarkdownMarker>\n    constructor(view: EditorView) {\n        this.markers = this.buildMarkers(view)\n    }\n    update(update: ViewUpdate) {\n        if (update.docChanged || update.viewportChanged) {\n            this.markers = this.buildMarkers(update.view)\n        }\n    }\n    buildMarkers(view: EditorView) {\n        const builder = new RangeSetBuilder<MarkdownMarker>();\n        let lastLineStart = -1; // Track the start of the last line processed\n        const tree = syntaxTree(view.state);\n        tree.iterate({\n            from: view.viewport.from,\n            to: view.viewport.to,\n            enter: (node: SyntaxNodeRef) => {\n                let from = node.from, to = node.to;\n                if (node.type.isTop) return;\n                // Calculate the current line start position\n                let lineNumber = view.state.doc.lineAt(from).number;\n                // \u53EA\u8981\u7B2C\u4E00\u4E2A\u8282\u70B9\n                if (lineNumber > lastLineStart) {\n                    // Update the last line start position\n                    lastLineStart = lineNumber;\n                    // console.log(`node: ${node.name}, node.type: ${node.type.name}, node.from: ${node.from}, node.to: ${node.to}`);\n                    // \u5904\u7406\u6807\u9898\u8282\u70B9\n                    builder.add(from, to, new MarkdownMarker(node.type));\n                }\n            }\n        });\n        return builder.finish();\n    }\n});\nexport function markdownGutter(config = {}) {\n    return [\n        markdownMarkersPlugin,\n        gutter({\n            class: \"cm-markdownGutter\",\n            renderEmptyElements: true,\n            markers(view) {\n                return view.plugin(markdownMarkersPlugin)?.markers || RangeSet.empty\n            },\n            lineMarker(view, line, otherMarkers) {\n                const lineNumber = view.state.doc.lineAt(line.from).number\n                const currentLine = EditorSelectionHelper.getCurrentLine(view.state).lineNumber\n                const isMultiLineSelection = EditorSelectionHelper.isMultiLineSelection(view.state);\n                if (currentLine === lineNumber && line.length === 0 && !isMultiLineSelection ) {\n                    const hasMarkdownMarker = otherMarkers.some(marker => {\n                        if (marker instanceof MarkdownMarker) {\n                            return true;\n                        }\n                    });\n                    if (hasMarkdownMarker) return null;\n                    return new MarkdownMarker(NodeType.none);\n                }\n                return null;\n            }\n        }),\n        markdownGutterTheme\n    ];\n}", "import { Annotation, StateEffect, EditorSelection, codePointAt, codePointSize, fromCodePoint, Facet, combineConfig, StateField, Prec, Text, MapMode, RangeValue, RangeSet, CharCategory } from '@codemirror/state';\nimport { Direction, logException, showTooltip, EditorView, ViewPlugin, getTooltip, Decoration, WidgetType, keymap } from '@codemirror/view';\nimport { syntaxTree, indentUnit } from '@codemirror/language';\n\n/**\nAn instance of this is passed to completion source functions.\n*/\nclass CompletionContext {\n    /**\n    Create a new completion context. (Mostly useful for testing\n    completion sources\u2014in the editor, the extension will create\n    these for you.)\n    */\n    constructor(\n    /**\n    The editor state that the completion happens in.\n    */\n    state, \n    /**\n    The position at which the completion is happening.\n    */\n    pos, \n    /**\n    Indicates whether completion was activated explicitly, or\n    implicitly by typing. The usual way to respond to this is to\n    only return completions when either there is part of a\n    completable entity before the cursor, or `explicit` is true.\n    */\n    explicit) {\n        this.state = state;\n        this.pos = pos;\n        this.explicit = explicit;\n        /**\n        @internal\n        */\n        this.abortListeners = [];\n    }\n    /**\n    Get the extent, content, and (if there is a token) type of the\n    token before `this.pos`.\n    */\n    tokenBefore(types) {\n        let token = syntaxTree(this.state).resolveInner(this.pos, -1);\n        while (token && types.indexOf(token.name) < 0)\n            token = token.parent;\n        return token ? { from: token.from, to: this.pos,\n            text: this.state.sliceDoc(token.from, this.pos),\n            type: token.type } : null;\n    }\n    /**\n    Get the match of the given expression directly before the\n    cursor.\n    */\n    matchBefore(expr) {\n        let line = this.state.doc.lineAt(this.pos);\n        let start = Math.max(line.from, this.pos - 250);\n        let str = line.text.slice(start - line.from, this.pos - line.from);\n        let found = str.search(ensureAnchor(expr, false));\n        return found < 0 ? null : { from: start + found, to: this.pos, text: str.slice(found) };\n    }\n    /**\n    Yields true when the query has been aborted. Can be useful in\n    asynchronous queries to avoid doing work that will be ignored.\n    */\n    get aborted() { return this.abortListeners == null; }\n    /**\n    Allows you to register abort handlers, which will be called when\n    the query is\n    [aborted](https://codemirror.net/6/docs/ref/#autocomplete.CompletionContext.aborted).\n    */\n    addEventListener(type, listener) {\n        if (type == \"abort\" && this.abortListeners)\n            this.abortListeners.push(listener);\n    }\n}\nfunction toSet(chars) {\n    let flat = Object.keys(chars).join(\"\");\n    let words = /\\w/.test(flat);\n    if (words)\n        flat = flat.replace(/\\w/g, \"\");\n    return `[${words ? \"\\\\w\" : \"\"}${flat.replace(/[^\\w\\s]/g, \"\\\\$&\")}]`;\n}\nfunction prefixMatch(options) {\n    let first = Object.create(null), rest = Object.create(null);\n    for (let { label } of options) {\n        first[label[0]] = true;\n        for (let i = 1; i < label.length; i++)\n            rest[label[i]] = true;\n    }\n    let source = toSet(first) + toSet(rest) + \"*$\";\n    return [new RegExp(\"^\" + source), new RegExp(source)];\n}\n/**\nGiven a a fixed array of options, return an autocompleter that\ncompletes them.\n*/\nfunction completeFromList(list) {\n    let options = list.map(o => typeof o == \"string\" ? { label: o } : o);\n    let [validFor, match] = options.every(o => /^\\w+$/.test(o.label)) ? [/\\w*$/, /\\w+$/] : prefixMatch(options);\n    return (context) => {\n        let token = context.matchBefore(match);\n        return token || context.explicit ? { from: token ? token.from : context.pos, options, validFor } : null;\n    };\n}\n/**\nWrap the given completion source so that it will only fire when the\ncursor is in a syntax node with one of the given names.\n*/\nfunction ifIn(nodes, source) {\n    return (context) => {\n        for (let pos = syntaxTree(context.state).resolveInner(context.pos, -1); pos; pos = pos.parent) {\n            if (nodes.indexOf(pos.name) > -1)\n                return source(context);\n            if (pos.type.isTop)\n                break;\n        }\n        return null;\n    };\n}\n/**\nWrap the given completion source so that it will not fire when the\ncursor is in a syntax node with one of the given names.\n*/\nfunction ifNotIn(nodes, source) {\n    return (context) => {\n        for (let pos = syntaxTree(context.state).resolveInner(context.pos, -1); pos; pos = pos.parent) {\n            if (nodes.indexOf(pos.name) > -1)\n                return null;\n            if (pos.type.isTop)\n                break;\n        }\n        return source(context);\n    };\n}\nclass Option {\n    constructor(completion, source, match, score) {\n        this.completion = completion;\n        this.source = source;\n        this.match = match;\n        this.score = score;\n    }\n}\nfunction cur(state) { return state.selection.main.from; }\n// Make sure the given regexp has a $ at its end and, if `start` is\n// true, a ^ at its start.\nfunction ensureAnchor(expr, start) {\n    var _a;\n    let { source } = expr;\n    let addStart = start && source[0] != \"^\", addEnd = source[source.length - 1] != \"$\";\n    if (!addStart && !addEnd)\n        return expr;\n    return new RegExp(`${addStart ? \"^\" : \"\"}(?:${source})${addEnd ? \"$\" : \"\"}`, (_a = expr.flags) !== null && _a !== void 0 ? _a : (expr.ignoreCase ? \"i\" : \"\"));\n}\n/**\nThis annotation is added to transactions that are produced by\npicking a completion.\n*/\nconst pickedCompletion = /*@__PURE__*/Annotation.define();\n/**\nHelper function that returns a transaction spec which inserts a\ncompletion's text in the main selection range, and any other\nselection range that has the same text in front of it.\n*/\nfunction insertCompletionText(state, text, from, to) {\n    let { main } = state.selection, fromOff = from - main.from, toOff = to - main.from;\n    return Object.assign(Object.assign({}, state.changeByRange(range => {\n        if (range != main && from != to &&\n            state.sliceDoc(range.from + fromOff, range.from + toOff) != state.sliceDoc(from, to))\n            return { range };\n        return {\n            changes: { from: range.from + fromOff, to: to == main.from ? range.to : range.from + toOff, insert: text },\n            range: EditorSelection.cursor(range.from + fromOff + text.length)\n        };\n    })), { scrollIntoView: true, userEvent: \"input.complete\" });\n}\nconst SourceCache = /*@__PURE__*/new WeakMap();\nfunction asSource(source) {\n    if (!Array.isArray(source))\n        return source;\n    let known = SourceCache.get(source);\n    if (!known)\n        SourceCache.set(source, known = completeFromList(source));\n    return known;\n}\nconst startCompletionEffect = /*@__PURE__*/StateEffect.define();\nconst closeCompletionEffect = /*@__PURE__*/StateEffect.define();\n\n// A pattern matcher for fuzzy completion matching. Create an instance\n// once for a pattern, and then use that to match any number of\n// completions.\nclass FuzzyMatcher {\n    constructor(pattern) {\n        this.pattern = pattern;\n        this.chars = [];\n        this.folded = [];\n        // Buffers reused by calls to `match` to track matched character\n        // positions.\n        this.any = [];\n        this.precise = [];\n        this.byWord = [];\n        this.score = 0;\n        this.matched = [];\n        for (let p = 0; p < pattern.length;) {\n            let char = codePointAt(pattern, p), size = codePointSize(char);\n            this.chars.push(char);\n            let part = pattern.slice(p, p + size), upper = part.toUpperCase();\n            this.folded.push(codePointAt(upper == part ? part.toLowerCase() : upper, 0));\n            p += size;\n        }\n        this.astral = pattern.length != this.chars.length;\n    }\n    ret(score, matched) {\n        this.score = score;\n        this.matched = matched;\n        return true;\n    }\n    // Matches a given word (completion) against the pattern (input).\n    // Will return a boolean indicating whether there was a match and,\n    // on success, set `this.score` to the score, `this.matched` to an\n    // array of `from, to` pairs indicating the matched parts of `word`.\n    //\n    // The score is a number that is more negative the worse the match\n    // is. See `Penalty` above.\n    match(word) {\n        if (this.pattern.length == 0)\n            return this.ret(-100 /* Penalty.NotFull */, []);\n        if (word.length < this.pattern.length)\n            return false;\n        let { chars, folded, any, precise, byWord } = this;\n        // For single-character queries, only match when they occur right\n        // at the start\n        if (chars.length == 1) {\n            let first = codePointAt(word, 0), firstSize = codePointSize(first);\n            let score = firstSize == word.length ? 0 : -100 /* Penalty.NotFull */;\n            if (first == chars[0]) ;\n            else if (first == folded[0])\n                score += -200 /* Penalty.CaseFold */;\n            else\n                return false;\n            return this.ret(score, [0, firstSize]);\n        }\n        let direct = word.indexOf(this.pattern);\n        if (direct == 0)\n            return this.ret(word.length == this.pattern.length ? 0 : -100 /* Penalty.NotFull */, [0, this.pattern.length]);\n        let len = chars.length, anyTo = 0;\n        if (direct < 0) {\n            for (let i = 0, e = Math.min(word.length, 200); i < e && anyTo < len;) {\n                let next = codePointAt(word, i);\n                if (next == chars[anyTo] || next == folded[anyTo])\n                    any[anyTo++] = i;\n                i += codePointSize(next);\n            }\n            // No match, exit immediately\n            if (anyTo < len)\n                return false;\n        }\n        // This tracks the extent of the precise (non-folded, not\n        // necessarily adjacent) match\n        let preciseTo = 0;\n        // Tracks whether there is a match that hits only characters that\n        // appear to be starting words. `byWordFolded` is set to true when\n        // a case folded character is encountered in such a match\n        let byWordTo = 0, byWordFolded = false;\n        // If we've found a partial adjacent match, these track its state\n        let adjacentTo = 0, adjacentStart = -1, adjacentEnd = -1;\n        let hasLower = /[a-z]/.test(word), wordAdjacent = true;\n        // Go over the option's text, scanning for the various kinds of matches\n        for (let i = 0, e = Math.min(word.length, 200), prevType = 0 /* Tp.NonWord */; i < e && byWordTo < len;) {\n            let next = codePointAt(word, i);\n            if (direct < 0) {\n                if (preciseTo < len && next == chars[preciseTo])\n                    precise[preciseTo++] = i;\n                if (adjacentTo < len) {\n                    if (next == chars[adjacentTo] || next == folded[adjacentTo]) {\n                        if (adjacentTo == 0)\n                            adjacentStart = i;\n                        adjacentEnd = i + 1;\n                        adjacentTo++;\n                    }\n                    else {\n                        adjacentTo = 0;\n                    }\n                }\n            }\n            let ch, type = next < 0xff\n                ? (next >= 48 && next <= 57 || next >= 97 && next <= 122 ? 2 /* Tp.Lower */ : next >= 65 && next <= 90 ? 1 /* Tp.Upper */ : 0 /* Tp.NonWord */)\n                : ((ch = fromCodePoint(next)) != ch.toLowerCase() ? 1 /* Tp.Upper */ : ch != ch.toUpperCase() ? 2 /* Tp.Lower */ : 0 /* Tp.NonWord */);\n            if (!i || type == 1 /* Tp.Upper */ && hasLower || prevType == 0 /* Tp.NonWord */ && type != 0 /* Tp.NonWord */) {\n                if (chars[byWordTo] == next || (folded[byWordTo] == next && (byWordFolded = true)))\n                    byWord[byWordTo++] = i;\n                else if (byWord.length)\n                    wordAdjacent = false;\n            }\n            prevType = type;\n            i += codePointSize(next);\n        }\n        if (byWordTo == len && byWord[0] == 0 && wordAdjacent)\n            return this.result(-100 /* Penalty.ByWord */ + (byWordFolded ? -200 /* Penalty.CaseFold */ : 0), byWord, word);\n        if (adjacentTo == len && adjacentStart == 0)\n            return this.ret(-200 /* Penalty.CaseFold */ - word.length + (adjacentEnd == word.length ? 0 : -100 /* Penalty.NotFull */), [0, adjacentEnd]);\n        if (direct > -1)\n            return this.ret(-700 /* Penalty.NotStart */ - word.length, [direct, direct + this.pattern.length]);\n        if (adjacentTo == len)\n            return this.ret(-200 /* Penalty.CaseFold */ + -700 /* Penalty.NotStart */ - word.length, [adjacentStart, adjacentEnd]);\n        if (byWordTo == len)\n            return this.result(-100 /* Penalty.ByWord */ + (byWordFolded ? -200 /* Penalty.CaseFold */ : 0) + -700 /* Penalty.NotStart */ +\n                (wordAdjacent ? 0 : -1100 /* Penalty.Gap */), byWord, word);\n        return chars.length == 2 ? false\n            : this.result((any[0] ? -700 /* Penalty.NotStart */ : 0) + -200 /* Penalty.CaseFold */ + -1100 /* Penalty.Gap */, any, word);\n    }\n    result(score, positions, word) {\n        let result = [], i = 0;\n        for (let pos of positions) {\n            let to = pos + (this.astral ? codePointSize(codePointAt(word, pos)) : 1);\n            if (i && result[i - 1] == pos)\n                result[i - 1] = to;\n            else {\n                result[i++] = pos;\n                result[i++] = to;\n            }\n        }\n        return this.ret(score - word.length, result);\n    }\n}\n\nconst completionConfig = /*@__PURE__*/Facet.define({\n    combine(configs) {\n        return combineConfig(configs, {\n            activateOnTyping: true,\n            selectOnOpen: true,\n            override: null,\n            closeOnBlur: true,\n            maxRenderedOptions: 100,\n            defaultKeymap: true,\n            tooltipClass: () => \"\",\n            optionClass: () => \"\",\n            aboveCursor: false,\n            icons: true,\n            addToOptions: [],\n            positionInfo: defaultPositionInfo,\n            compareCompletions: (a, b) => a.label.localeCompare(b.label),\n            interactionDelay: 75,\n            updateSyncTime: 100\n        }, {\n            defaultKeymap: (a, b) => a && b,\n            closeOnBlur: (a, b) => a && b,\n            icons: (a, b) => a && b,\n            tooltipClass: (a, b) => c => joinClass(a(c), b(c)),\n            optionClass: (a, b) => c => joinClass(a(c), b(c)),\n            addToOptions: (a, b) => a.concat(b)\n        });\n    }\n});\nfunction joinClass(a, b) {\n    return a ? b ? a + \" \" + b : a : b;\n}\nfunction defaultPositionInfo(view, list, option, info, space, tooltip) {\n    let rtl = view.textDirection == Direction.RTL, left = rtl, narrow = false;\n    let side = \"top\", offset, maxWidth;\n    let spaceLeft = list.left - space.left, spaceRight = space.right - list.right;\n    let infoWidth = info.right - info.left, infoHeight = info.bottom - info.top;\n    if (left && spaceLeft < Math.min(infoWidth, spaceRight))\n        left = false;\n    else if (!left && spaceRight < Math.min(infoWidth, spaceLeft))\n        left = true;\n    if (infoWidth <= (left ? spaceLeft : spaceRight)) {\n        offset = Math.max(space.top, Math.min(option.top, space.bottom - infoHeight)) - list.top;\n        maxWidth = Math.min(400 /* Info.Width */, left ? spaceLeft : spaceRight);\n    }\n    else {\n        narrow = true;\n        maxWidth = Math.min(400 /* Info.Width */, (rtl ? list.right : space.right - list.left) - 30 /* Info.Margin */);\n        let spaceBelow = space.bottom - list.bottom;\n        if (spaceBelow >= infoHeight || spaceBelow > list.top) { // Below the completion\n            offset = option.bottom - list.top;\n        }\n        else { // Above it\n            side = \"bottom\";\n            offset = list.bottom - option.top;\n        }\n    }\n    let scaleY = (list.bottom - list.top) / tooltip.offsetHeight;\n    let scaleX = (list.right - list.left) / tooltip.offsetWidth;\n    return {\n        style: `${side}: ${offset / scaleY}px; max-width: ${maxWidth / scaleX}px`,\n        class: \"cm-completionInfo-\" + (narrow ? (rtl ? \"left-narrow\" : \"right-narrow\") : left ? \"left\" : \"right\")\n    };\n}\n\nfunction optionContent(config) {\n    let content = config.addToOptions.slice();\n    if (config.icons)\n        content.push({\n            render(completion) {\n                let icon = document.createElement(\"div\");\n                icon.classList.add(\"cm-completionIcon\");\n                if (completion.type)\n                    icon.classList.add(...completion.type.split(/\\s+/g).map(cls => \"cm-completionIcon-\" + cls));\n                icon.setAttribute(\"aria-hidden\", \"true\");\n                return icon;\n            },\n            position: 20\n        });\n    content.push({\n        render(completion, _s, _v, match) {\n            let labelElt = document.createElement(\"span\");\n            labelElt.className = \"cm-completionLabel\";\n            let label = completion.displayLabel || completion.label, off = 0;\n            for (let j = 0; j < match.length;) {\n                let from = match[j++], to = match[j++];\n                if (from > off)\n                    labelElt.appendChild(document.createTextNode(label.slice(off, from)));\n                let span = labelElt.appendChild(document.createElement(\"span\"));\n                span.appendChild(document.createTextNode(label.slice(from, to)));\n                span.className = \"cm-completionMatchedText\";\n                off = to;\n            }\n            if (off < label.length)\n                labelElt.appendChild(document.createTextNode(label.slice(off)));\n            return labelElt;\n        },\n        position: 50\n    }, {\n        render(completion) {\n            if (!completion.detail)\n                return null;\n            let detailElt = document.createElement(\"span\");\n            detailElt.className = \"cm-completionDetail\";\n            detailElt.textContent = completion.detail;\n            return detailElt;\n        },\n        position: 80\n    });\n    return content.sort((a, b) => a.position - b.position).map(a => a.render);\n}\nfunction rangeAroundSelected(total, selected, max) {\n    if (total <= max)\n        return { from: 0, to: total };\n    if (selected < 0)\n        selected = 0;\n    if (selected <= (total >> 1)) {\n        let off = Math.floor(selected / max);\n        return { from: off * max, to: (off + 1) * max };\n    }\n    let off = Math.floor((total - selected) / max);\n    return { from: total - (off + 1) * max, to: total - off * max };\n}\nclass CompletionTooltip {\n    constructor(view, stateField, applyCompletion) {\n        this.view = view;\n        this.stateField = stateField;\n        this.applyCompletion = applyCompletion;\n        this.info = null;\n        this.infoDestroy = null;\n        this.placeInfoReq = {\n            read: () => this.measureInfo(),\n            write: (pos) => this.placeInfo(pos),\n            key: this\n        };\n        this.space = null;\n        this.currentClass = \"\";\n        let cState = view.state.field(stateField);\n        let { options, selected } = cState.open;\n        let config = view.state.facet(completionConfig);\n        this.optionContent = optionContent(config);\n        this.optionClass = config.optionClass;\n        this.tooltipClass = config.tooltipClass;\n        this.range = rangeAroundSelected(options.length, selected, config.maxRenderedOptions);\n        this.dom = document.createElement(\"div\");\n        this.dom.className = \"cm-tooltip-autocomplete\";\n        this.updateTooltipClass(view.state);\n        this.dom.addEventListener(\"mousedown\", (e) => {\n            let { options } = view.state.field(stateField).open;\n            for (let dom = e.target, match; dom && dom != this.dom; dom = dom.parentNode) {\n                if (dom.nodeName == \"LI\" && (match = /-(\\d+)$/.exec(dom.id)) && +match[1] < options.length) {\n                    this.applyCompletion(view, options[+match[1]]);\n                    e.preventDefault();\n                    return;\n                }\n            }\n        });\n        this.dom.addEventListener(\"focusout\", (e) => {\n            let state = view.state.field(this.stateField, false);\n            if (state && state.tooltip && view.state.facet(completionConfig).closeOnBlur &&\n                e.relatedTarget != view.contentDOM)\n                view.dispatch({ effects: closeCompletionEffect.of(null) });\n        });\n        this.showOptions(options, cState.id);\n    }\n    mount() { this.updateSel(); }\n    showOptions(options, id) {\n        if (this.list)\n            this.list.remove();\n        this.list = this.dom.appendChild(this.createListBox(options, id, this.range));\n        this.list.addEventListener(\"scroll\", () => {\n            if (this.info)\n                this.view.requestMeasure(this.placeInfoReq);\n        });\n    }\n    update(update) {\n        var _a;\n        let cState = update.state.field(this.stateField);\n        let prevState = update.startState.field(this.stateField);\n        this.updateTooltipClass(update.state);\n        if (cState != prevState) {\n            let { options, selected, disabled } = cState.open;\n            if (!prevState.open || prevState.open.options != options) {\n                this.range = rangeAroundSelected(options.length, selected, update.state.facet(completionConfig).maxRenderedOptions);\n                this.showOptions(options, cState.id);\n            }\n            this.updateSel();\n            if (disabled != ((_a = prevState.open) === null || _a === void 0 ? void 0 : _a.disabled))\n                this.dom.classList.toggle(\"cm-tooltip-autocomplete-disabled\", !!disabled);\n        }\n    }\n    updateTooltipClass(state) {\n        let cls = this.tooltipClass(state);\n        if (cls != this.currentClass) {\n            for (let c of this.currentClass.split(\" \"))\n                if (c)\n                    this.dom.classList.remove(c);\n            for (let c of cls.split(\" \"))\n                if (c)\n                    this.dom.classList.add(c);\n            this.currentClass = cls;\n        }\n    }\n    positioned(space) {\n        this.space = space;\n        if (this.info)\n            this.view.requestMeasure(this.placeInfoReq);\n    }\n    updateSel() {\n        let cState = this.view.state.field(this.stateField), open = cState.open;\n        if (open.selected > -1 && open.selected < this.range.from || open.selected >= this.range.to) {\n            this.range = rangeAroundSelected(open.options.length, open.selected, this.view.state.facet(completionConfig).maxRenderedOptions);\n            this.showOptions(open.options, cState.id);\n        }\n        if (this.updateSelectedOption(open.selected)) {\n            this.destroyInfo();\n            let { completion } = open.options[open.selected];\n            let { info } = completion;\n            if (!info)\n                return;\n            let infoResult = typeof info === \"string\" ? document.createTextNode(info) : info(completion);\n            if (!infoResult)\n                return;\n            if (\"then\" in infoResult) {\n                infoResult.then(obj => {\n                    if (obj && this.view.state.field(this.stateField, false) == cState)\n                        this.addInfoPane(obj, completion);\n                }).catch(e => logException(this.view.state, e, \"completion info\"));\n            }\n            else {\n                this.addInfoPane(infoResult, completion);\n            }\n        }\n    }\n    addInfoPane(content, completion) {\n        this.destroyInfo();\n        let wrap = this.info = document.createElement(\"div\");\n        wrap.className = \"cm-tooltip cm-completionInfo\";\n        if (content.nodeType != null) {\n            wrap.appendChild(content);\n            this.infoDestroy = null;\n        }\n        else {\n            let { dom, destroy } = content;\n            wrap.appendChild(dom);\n            this.infoDestroy = destroy || null;\n        }\n        this.dom.appendChild(wrap);\n        this.view.requestMeasure(this.placeInfoReq);\n    }\n    updateSelectedOption(selected) {\n        let set = null;\n        for (let opt = this.list.firstChild, i = this.range.from; opt; opt = opt.nextSibling, i++) {\n            if (opt.nodeName != \"LI\" || !opt.id) {\n                i--; // A section header\n            }\n            else if (i == selected) {\n                if (!opt.hasAttribute(\"aria-selected\")) {\n                    opt.setAttribute(\"aria-selected\", \"true\");\n                    set = opt;\n                }\n            }\n            else {\n                if (opt.hasAttribute(\"aria-selected\"))\n                    opt.removeAttribute(\"aria-selected\");\n            }\n        }\n        if (set)\n            scrollIntoView(this.list, set);\n        return set;\n    }\n    measureInfo() {\n        let sel = this.dom.querySelector(\"[aria-selected]\");\n        if (!sel || !this.info)\n            return null;\n        let listRect = this.dom.getBoundingClientRect();\n        let infoRect = this.info.getBoundingClientRect();\n        let selRect = sel.getBoundingClientRect();\n        let space = this.space;\n        if (!space) {\n            let win = this.dom.ownerDocument.defaultView || window;\n            space = { left: 0, top: 0, right: win.innerWidth, bottom: win.innerHeight };\n        }\n        if (selRect.top > Math.min(space.bottom, listRect.bottom) - 10 ||\n            selRect.bottom < Math.max(space.top, listRect.top) + 10)\n            return null;\n        return this.view.state.facet(completionConfig).positionInfo(this.view, listRect, selRect, infoRect, space, this.dom);\n    }\n    placeInfo(pos) {\n        if (this.info) {\n            if (pos) {\n                if (pos.style)\n                    this.info.style.cssText = pos.style;\n                this.info.className = \"cm-tooltip cm-completionInfo \" + (pos.class || \"\");\n            }\n            else {\n                this.info.style.cssText = \"top: -1e6px\";\n            }\n        }\n    }\n    createListBox(options, id, range) {\n        const ul = document.createElement(\"ul\");\n        ul.id = id;\n        ul.setAttribute(\"role\", \"listbox\");\n        ul.setAttribute(\"aria-expanded\", \"true\");\n        ul.setAttribute(\"aria-label\", this.view.state.phrase(\"Completions\"));\n        let curSection = null;\n        for (let i = range.from; i < range.to; i++) {\n            let { completion, match } = options[i], { section } = completion;\n            if (section) {\n                let name = typeof section == \"string\" ? section : section.name;\n                if (name != curSection && (i > range.from || range.from == 0)) {\n                    curSection = name;\n                    if (typeof section != \"string\" && section.header) {\n                        ul.appendChild(section.header(section));\n                    }\n                    else {\n                        let header = ul.appendChild(document.createElement(\"completion-section\"));\n                        header.textContent = name;\n                    }\n                }\n            }\n            const li = ul.appendChild(document.createElement(\"li\"));\n            li.id = id + \"-\" + i;\n            li.setAttribute(\"role\", \"option\");\n            let cls = this.optionClass(completion);\n            if (cls)\n                li.className = cls;\n            for (let source of this.optionContent) {\n                let node = source(completion, this.view.state, this.view, match);\n                if (node)\n                    li.appendChild(node);\n            }\n        }\n        if (range.from)\n            ul.classList.add(\"cm-completionListIncompleteTop\");\n        if (range.to < options.length)\n            ul.classList.add(\"cm-completionListIncompleteBottom\");\n        return ul;\n    }\n    destroyInfo() {\n        if (this.info) {\n            if (this.infoDestroy)\n                this.infoDestroy();\n            this.info.remove();\n            this.info = null;\n        }\n    }\n    destroy() {\n        this.destroyInfo();\n    }\n}\nfunction completionTooltip(stateField, applyCompletion) {\n    return (view) => new CompletionTooltip(view, stateField, applyCompletion);\n}\nfunction scrollIntoView(container, element) {\n    let parent = container.getBoundingClientRect();\n    let self = element.getBoundingClientRect();\n    let scaleY = parent.height / container.offsetHeight;\n    if (self.top < parent.top)\n        container.scrollTop -= (parent.top - self.top) / scaleY;\n    else if (self.bottom > parent.bottom)\n        container.scrollTop += (self.bottom - parent.bottom) / scaleY;\n}\n\n// Used to pick a preferred option when two options with the same\n// label occur in the result.\nfunction score(option) {\n    return (option.boost || 0) * 100 + (option.apply ? 10 : 0) + (option.info ? 5 : 0) +\n        (option.type ? 1 : 0);\n}\nfunction sortOptions(active, state) {\n    let options = [];\n    let sections = null;\n    let addOption = (option) => {\n        options.push(option);\n        let { section } = option.completion;\n        if (section) {\n            if (!sections)\n                sections = [];\n            let name = typeof section == \"string\" ? section : section.name;\n            if (!sections.some(s => s.name == name))\n                sections.push(typeof section == \"string\" ? { name } : section);\n        }\n    };\n    for (let a of active)\n        if (a.hasResult()) {\n            let getMatch = a.result.getMatch;\n            if (a.result.filter === false) {\n                for (let option of a.result.options) {\n                    addOption(new Option(option, a.source, getMatch ? getMatch(option) : [], 1e9 - options.length));\n                }\n            }\n            else {\n                let matcher = new FuzzyMatcher(state.sliceDoc(a.from, a.to));\n                for (let option of a.result.options)\n                    if (matcher.match(option.label)) {\n                        let matched = !option.displayLabel ? matcher.matched : getMatch ? getMatch(option, matcher.matched) : [];\n                        addOption(new Option(option, a.source, matched, matcher.score + (option.boost || 0)));\n                    }\n            }\n        }\n    if (sections) {\n        let sectionOrder = Object.create(null), pos = 0;\n        let cmp = (a, b) => { var _a, _b; return ((_a = a.rank) !== null && _a !== void 0 ? _a : 1e9) - ((_b = b.rank) !== null && _b !== void 0 ? _b : 1e9) || (a.name < b.name ? -1 : 1); };\n        for (let s of sections.sort(cmp)) {\n            pos -= 1e5;\n            sectionOrder[s.name] = pos;\n        }\n        for (let option of options) {\n            let { section } = option.completion;\n            if (section)\n                option.score += sectionOrder[typeof section == \"string\" ? section : section.name];\n        }\n    }\n    let result = [], prev = null;\n    let compare = state.facet(completionConfig).compareCompletions;\n    for (let opt of options.sort((a, b) => (b.score - a.score) || compare(a.completion, b.completion))) {\n        let cur = opt.completion;\n        if (!prev || prev.label != cur.label || prev.detail != cur.detail ||\n            (prev.type != null && cur.type != null && prev.type != cur.type) ||\n            prev.apply != cur.apply || prev.boost != cur.boost)\n            result.push(opt);\n        else if (score(opt.completion) > score(prev))\n            result[result.length - 1] = opt;\n        prev = opt.completion;\n    }\n    return result;\n}\nclass CompletionDialog {\n    constructor(options, attrs, tooltip, timestamp, selected, disabled) {\n        this.options = options;\n        this.attrs = attrs;\n        this.tooltip = tooltip;\n        this.timestamp = timestamp;\n        this.selected = selected;\n        this.disabled = disabled;\n    }\n    setSelected(selected, id) {\n        return selected == this.selected || selected >= this.options.length ? this\n            : new CompletionDialog(this.options, makeAttrs(id, selected), this.tooltip, this.timestamp, selected, this.disabled);\n    }\n    static build(active, state, id, prev, conf) {\n        let options = sortOptions(active, state);\n        if (!options.length) {\n            return prev && active.some(a => a.state == 1 /* State.Pending */) ?\n                new CompletionDialog(prev.options, prev.attrs, prev.tooltip, prev.timestamp, prev.selected, true) : null;\n        }\n        let selected = state.facet(completionConfig).selectOnOpen ? 0 : -1;\n        if (prev && prev.selected != selected && prev.selected != -1) {\n            let selectedValue = prev.options[prev.selected].completion;\n            for (let i = 0; i < options.length; i++)\n                if (options[i].completion == selectedValue) {\n                    selected = i;\n                    break;\n                }\n        }\n        return new CompletionDialog(options, makeAttrs(id, selected), {\n            pos: active.reduce((a, b) => b.hasResult() ? Math.min(a, b.from) : a, 1e8),\n            create: createTooltip,\n            above: conf.aboveCursor,\n        }, prev ? prev.timestamp : Date.now(), selected, false);\n    }\n    map(changes) {\n        return new CompletionDialog(this.options, this.attrs, Object.assign(Object.assign({}, this.tooltip), { pos: changes.mapPos(this.tooltip.pos) }), this.timestamp, this.selected, this.disabled);\n    }\n}\nclass CompletionState {\n    constructor(active, id, open) {\n        this.active = active;\n        this.id = id;\n        this.open = open;\n    }\n    static start() {\n        return new CompletionState(none, \"cm-ac-\" + Math.floor(Math.random() * 2e6).toString(36), null);\n    }\n    update(tr) {\n        let { state } = tr, conf = state.facet(completionConfig);\n        let sources = conf.override ||\n            state.languageDataAt(\"autocomplete\", cur(state)).map(asSource);\n        let active = sources.map(source => {\n            let value = this.active.find(s => s.source == source) ||\n                new ActiveSource(source, this.active.some(a => a.state != 0 /* State.Inactive */) ? 1 /* State.Pending */ : 0 /* State.Inactive */);\n            return value.update(tr, conf);\n        });\n        if (active.length == this.active.length && active.every((a, i) => a == this.active[i]))\n            active = this.active;\n        let open = this.open;\n        if (open && tr.docChanged)\n            open = open.map(tr.changes);\n        if (tr.selection || active.some(a => a.hasResult() && tr.changes.touchesRange(a.from, a.to)) ||\n            !sameResults(active, this.active))\n            open = CompletionDialog.build(active, state, this.id, open, conf);\n        else if (open && open.disabled && !active.some(a => a.state == 1 /* State.Pending */))\n            open = null;\n        if (!open && active.every(a => a.state != 1 /* State.Pending */) && active.some(a => a.hasResult()))\n            active = active.map(a => a.hasResult() ? new ActiveSource(a.source, 0 /* State.Inactive */) : a);\n        for (let effect of tr.effects)\n            if (effect.is(setSelectedEffect))\n                open = open && open.setSelected(effect.value, this.id);\n        return active == this.active && open == this.open ? this : new CompletionState(active, this.id, open);\n    }\n    get tooltip() { return this.open ? this.open.tooltip : null; }\n    get attrs() { return this.open ? this.open.attrs : baseAttrs; }\n}\nfunction sameResults(a, b) {\n    if (a == b)\n        return true;\n    for (let iA = 0, iB = 0;;) {\n        while (iA < a.length && !a[iA].hasResult)\n            iA++;\n        while (iB < b.length && !b[iB].hasResult)\n            iB++;\n        let endA = iA == a.length, endB = iB == b.length;\n        if (endA || endB)\n            return endA == endB;\n        if (a[iA++].result != b[iB++].result)\n            return false;\n    }\n}\nconst baseAttrs = {\n    \"aria-autocomplete\": \"list\"\n};\nfunction makeAttrs(id, selected) {\n    let result = {\n        \"aria-autocomplete\": \"list\",\n        \"aria-haspopup\": \"listbox\",\n        \"aria-controls\": id\n    };\n    if (selected > -1)\n        result[\"aria-activedescendant\"] = id + \"-\" + selected;\n    return result;\n}\nconst none = [];\nfunction getUserEvent(tr) {\n    return tr.isUserEvent(\"input.type\") ? \"input\" : tr.isUserEvent(\"delete.backward\") ? \"delete\" : null;\n}\nclass ActiveSource {\n    constructor(source, state, explicitPos = -1) {\n        this.source = source;\n        this.state = state;\n        this.explicitPos = explicitPos;\n    }\n    hasResult() { return false; }\n    update(tr, conf) {\n        let event = getUserEvent(tr), value = this;\n        if (event)\n            value = value.handleUserEvent(tr, event, conf);\n        else if (tr.docChanged)\n            value = value.handleChange(tr);\n        else if (tr.selection && value.state != 0 /* State.Inactive */)\n            value = new ActiveSource(value.source, 0 /* State.Inactive */);\n        for (let effect of tr.effects) {\n            if (effect.is(startCompletionEffect))\n                value = new ActiveSource(value.source, 1 /* State.Pending */, effect.value ? cur(tr.state) : -1);\n            else if (effect.is(closeCompletionEffect))\n                value = new ActiveSource(value.source, 0 /* State.Inactive */);\n            else if (effect.is(setActiveEffect))\n                for (let active of effect.value)\n                    if (active.source == value.source)\n                        value = active;\n        }\n        return value;\n    }\n    handleUserEvent(tr, type, conf) {\n        return type == \"delete\" || !conf.activateOnTyping ? this.map(tr.changes) : new ActiveSource(this.source, 1 /* State.Pending */);\n    }\n    handleChange(tr) {\n        return tr.changes.touchesRange(cur(tr.startState)) ? new ActiveSource(this.source, 0 /* State.Inactive */) : this.map(tr.changes);\n    }\n    map(changes) {\n        return changes.empty || this.explicitPos < 0 ? this : new ActiveSource(this.source, this.state, changes.mapPos(this.explicitPos));\n    }\n}\nclass ActiveResult extends ActiveSource {\n    constructor(source, explicitPos, result, from, to) {\n        super(source, 2 /* State.Result */, explicitPos);\n        this.result = result;\n        this.from = from;\n        this.to = to;\n    }\n    hasResult() { return true; }\n    handleUserEvent(tr, type, conf) {\n        var _a;\n        let from = tr.changes.mapPos(this.from), to = tr.changes.mapPos(this.to, 1);\n        let pos = cur(tr.state);\n        if ((this.explicitPos < 0 ? pos <= from : pos < this.from) ||\n            pos > to ||\n            type == \"delete\" && cur(tr.startState) == this.from)\n            return new ActiveSource(this.source, type == \"input\" && conf.activateOnTyping ? 1 /* State.Pending */ : 0 /* State.Inactive */);\n        let explicitPos = this.explicitPos < 0 ? -1 : tr.changes.mapPos(this.explicitPos), updated;\n        if (checkValid(this.result.validFor, tr.state, from, to))\n            return new ActiveResult(this.source, explicitPos, this.result, from, to);\n        if (this.result.update &&\n            (updated = this.result.update(this.result, from, to, new CompletionContext(tr.state, pos, explicitPos >= 0))))\n            return new ActiveResult(this.source, explicitPos, updated, updated.from, (_a = updated.to) !== null && _a !== void 0 ? _a : cur(tr.state));\n        return new ActiveSource(this.source, 1 /* State.Pending */, explicitPos);\n    }\n    handleChange(tr) {\n        return tr.changes.touchesRange(this.from, this.to) ? new ActiveSource(this.source, 0 /* State.Inactive */) : this.map(tr.changes);\n    }\n    map(mapping) {\n        return mapping.empty ? this :\n            new ActiveResult(this.source, this.explicitPos < 0 ? -1 : mapping.mapPos(this.explicitPos), this.result, mapping.mapPos(this.from), mapping.mapPos(this.to, 1));\n    }\n}\nfunction checkValid(validFor, state, from, to) {\n    if (!validFor)\n        return false;\n    let text = state.sliceDoc(from, to);\n    return typeof validFor == \"function\" ? validFor(text, from, to, state) : ensureAnchor(validFor, true).test(text);\n}\nconst setActiveEffect = /*@__PURE__*/StateEffect.define({\n    map(sources, mapping) { return sources.map(s => s.map(mapping)); }\n});\nconst setSelectedEffect = /*@__PURE__*/StateEffect.define();\nconst completionState = /*@__PURE__*/StateField.define({\n    create() { return CompletionState.start(); },\n    update(value, tr) { return value.update(tr); },\n    provide: f => [\n        showTooltip.from(f, val => val.tooltip),\n        EditorView.contentAttributes.from(f, state => state.attrs)\n    ]\n});\nfunction applyCompletion(view, option) {\n    const apply = option.completion.apply || option.completion.label;\n    let result = view.state.field(completionState).active.find(a => a.source == option.source);\n    if (!(result instanceof ActiveResult))\n        return false;\n    if (typeof apply == \"string\")\n        view.dispatch(Object.assign(Object.assign({}, insertCompletionText(view.state, apply, result.from, result.to)), { annotations: pickedCompletion.of(option.completion) }));\n    else\n        apply(view, option.completion, result.from, result.to);\n    return true;\n}\nconst createTooltip = /*@__PURE__*/completionTooltip(completionState, applyCompletion);\n\n/**\nReturns a command that moves the completion selection forward or\nbackward by the given amount.\n*/\nfunction moveCompletionSelection(forward, by = \"option\") {\n    return (view) => {\n        let cState = view.state.field(completionState, false);\n        if (!cState || !cState.open || cState.open.disabled ||\n            Date.now() - cState.open.timestamp < view.state.facet(completionConfig).interactionDelay)\n            return false;\n        let step = 1, tooltip;\n        if (by == \"page\" && (tooltip = getTooltip(view, cState.open.tooltip)))\n            step = Math.max(2, Math.floor(tooltip.dom.offsetHeight /\n                tooltip.dom.querySelector(\"li\").offsetHeight) - 1);\n        let { length } = cState.open.options;\n        let selected = cState.open.selected > -1 ? cState.open.selected + step * (forward ? 1 : -1) : forward ? 0 : length - 1;\n        if (selected < 0)\n            selected = by == \"page\" ? 0 : length - 1;\n        else if (selected >= length)\n            selected = by == \"page\" ? length - 1 : 0;\n        view.dispatch({ effects: setSelectedEffect.of(selected) });\n        return true;\n    };\n}\n/**\nAccept the current completion.\n*/\nconst acceptCompletion = (view) => {\n    let cState = view.state.field(completionState, false);\n    if (view.state.readOnly || !cState || !cState.open || cState.open.selected < 0 || cState.open.disabled ||\n        Date.now() - cState.open.timestamp < view.state.facet(completionConfig).interactionDelay)\n        return false;\n    return applyCompletion(view, cState.open.options[cState.open.selected]);\n};\n/**\nExplicitly start autocompletion.\n*/\nconst startCompletion = (view) => {\n    let cState = view.state.field(completionState, false);\n    if (!cState)\n        return false;\n    view.dispatch({ effects: startCompletionEffect.of(true) });\n    return true;\n};\n/**\nClose the currently active completion.\n*/\nconst closeCompletion = (view) => {\n    let cState = view.state.field(completionState, false);\n    if (!cState || !cState.active.some(a => a.state != 0 /* State.Inactive */))\n        return false;\n    view.dispatch({ effects: closeCompletionEffect.of(null) });\n    return true;\n};\nclass RunningQuery {\n    constructor(active, context) {\n        this.active = active;\n        this.context = context;\n        this.time = Date.now();\n        this.updates = [];\n        // Note that 'undefined' means 'not done yet', whereas 'null' means\n        // 'query returned null'.\n        this.done = undefined;\n    }\n}\nconst MaxUpdateCount = 50, MinAbortTime = 1000;\nconst completionPlugin = /*@__PURE__*/ViewPlugin.fromClass(class {\n    constructor(view) {\n        this.view = view;\n        this.debounceUpdate = -1;\n        this.running = [];\n        this.debounceAccept = -1;\n        this.composing = 0 /* CompositionState.None */;\n        for (let active of view.state.field(completionState).active)\n            if (active.state == 1 /* State.Pending */)\n                this.startQuery(active);\n    }\n    update(update) {\n        let cState = update.state.field(completionState);\n        if (!update.selectionSet && !update.docChanged && update.startState.field(completionState) == cState)\n            return;\n        let doesReset = update.transactions.some(tr => {\n            return (tr.selection || tr.docChanged) && !getUserEvent(tr);\n        });\n        for (let i = 0; i < this.running.length; i++) {\n            let query = this.running[i];\n            if (doesReset ||\n                query.updates.length + update.transactions.length > MaxUpdateCount && Date.now() - query.time > MinAbortTime) {\n                for (let handler of query.context.abortListeners) {\n                    try {\n                        handler();\n                    }\n                    catch (e) {\n                        logException(this.view.state, e);\n                    }\n                }\n                query.context.abortListeners = null;\n                this.running.splice(i--, 1);\n            }\n            else {\n                query.updates.push(...update.transactions);\n            }\n        }\n        if (this.debounceUpdate > -1)\n            clearTimeout(this.debounceUpdate);\n        this.debounceUpdate = cState.active.some(a => a.state == 1 /* State.Pending */ && !this.running.some(q => q.active.source == a.source))\n            ? setTimeout(() => this.startUpdate(), 50) : -1;\n        if (this.composing != 0 /* CompositionState.None */)\n            for (let tr of update.transactions) {\n                if (getUserEvent(tr) == \"input\")\n                    this.composing = 2 /* CompositionState.Changed */;\n                else if (this.composing == 2 /* CompositionState.Changed */ && tr.selection)\n                    this.composing = 3 /* CompositionState.ChangedAndMoved */;\n            }\n    }\n    startUpdate() {\n        this.debounceUpdate = -1;\n        let { state } = this.view, cState = state.field(completionState);\n        for (let active of cState.active) {\n            if (active.state == 1 /* State.Pending */ && !this.running.some(r => r.active.source == active.source))\n                this.startQuery(active);\n        }\n    }\n    startQuery(active) {\n        let { state } = this.view, pos = cur(state);\n        let context = new CompletionContext(state, pos, active.explicitPos == pos);\n        let pending = new RunningQuery(active, context);\n        this.running.push(pending);\n        Promise.resolve(active.source(context)).then(result => {\n            if (!pending.context.aborted) {\n                pending.done = result || null;\n                this.scheduleAccept();\n            }\n        }, err => {\n            this.view.dispatch({ effects: closeCompletionEffect.of(null) });\n            logException(this.view.state, err);\n        });\n    }\n    scheduleAccept() {\n        if (this.running.every(q => q.done !== undefined))\n            this.accept();\n        else if (this.debounceAccept < 0)\n            this.debounceAccept = setTimeout(() => this.accept(), this.view.state.facet(completionConfig).updateSyncTime);\n    }\n    // For each finished query in this.running, try to create a result\n    // or, if appropriate, restart the query.\n    accept() {\n        var _a;\n        if (this.debounceAccept > -1)\n            clearTimeout(this.debounceAccept);\n        this.debounceAccept = -1;\n        let updated = [];\n        let conf = this.view.state.facet(completionConfig);\n        for (let i = 0; i < this.running.length; i++) {\n            let query = this.running[i];\n            if (query.done === undefined)\n                continue;\n            this.running.splice(i--, 1);\n            if (query.done) {\n                let active = new ActiveResult(query.active.source, query.active.explicitPos, query.done, query.done.from, (_a = query.done.to) !== null && _a !== void 0 ? _a : cur(query.updates.length ? query.updates[0].startState : this.view.state));\n                // Replay the transactions that happened since the start of\n                // the request and see if that preserves the result\n                for (let tr of query.updates)\n                    active = active.update(tr, conf);\n                if (active.hasResult()) {\n                    updated.push(active);\n                    continue;\n                }\n            }\n            let current = this.view.state.field(completionState).active.find(a => a.source == query.active.source);\n            if (current && current.state == 1 /* State.Pending */) {\n                if (query.done == null) {\n                    // Explicitly failed. Should clear the pending status if it\n                    // hasn't been re-set in the meantime.\n                    let active = new ActiveSource(query.active.source, 0 /* State.Inactive */);\n                    for (let tr of query.updates)\n                        active = active.update(tr, conf);\n                    if (active.state != 1 /* State.Pending */)\n                        updated.push(active);\n                }\n                else {\n                    // Cleared by subsequent transactions. Restart.\n                    this.startQuery(current);\n                }\n            }\n        }\n        if (updated.length)\n            this.view.dispatch({ effects: setActiveEffect.of(updated) });\n    }\n}, {\n    eventHandlers: {\n        blur(event) {\n            let state = this.view.state.field(completionState, false);\n            if (state && state.tooltip && this.view.state.facet(completionConfig).closeOnBlur) {\n                let dialog = state.open && getTooltip(this.view, state.open.tooltip);\n                if (!dialog || !dialog.dom.contains(event.relatedTarget))\n                    this.view.dispatch({ effects: closeCompletionEffect.of(null) });\n            }\n        },\n        compositionstart() {\n            this.composing = 1 /* CompositionState.Started */;\n        },\n        compositionend() {\n            if (this.composing == 3 /* CompositionState.ChangedAndMoved */) {\n                // Safari fires compositionend events synchronously, possibly\n                // from inside an update, so dispatch asynchronously to avoid reentrancy\n                setTimeout(() => this.view.dispatch({ effects: startCompletionEffect.of(false) }), 20);\n            }\n            this.composing = 0 /* CompositionState.None */;\n        }\n    }\n});\n\nconst baseTheme = /*@__PURE__*/EditorView.baseTheme({\n    \".cm-tooltip.cm-tooltip-autocomplete\": {\n        \"& > ul\": {\n            fontFamily: \"monospace\",\n            whiteSpace: \"nowrap\",\n            overflow: \"hidden auto\",\n            maxWidth_fallback: \"700px\",\n            maxWidth: \"min(700px, 95vw)\",\n            minWidth: \"250px\",\n            maxHeight: \"10em\",\n            height: \"100%\",\n            listStyle: \"none\",\n            margin: 0,\n            padding: 0,\n            \"& > li, & > completion-section\": {\n                padding: \"1px 3px\",\n                lineHeight: 1.2\n            },\n            \"& > li\": {\n                overflowX: \"hidden\",\n                textOverflow: \"ellipsis\",\n                cursor: \"pointer\"\n            },\n            \"& > completion-section\": {\n                display: \"list-item\",\n                borderBottom: \"1px solid silver\",\n                paddingLeft: \"0.5em\",\n                opacity: 0.7\n            }\n        }\n    },\n    \"&light .cm-tooltip-autocomplete ul li[aria-selected]\": {\n        background: \"#17c\",\n        color: \"white\",\n    },\n    \"&light .cm-tooltip-autocomplete-disabled ul li[aria-selected]\": {\n        background: \"#777\",\n    },\n    \"&dark .cm-tooltip-autocomplete ul li[aria-selected]\": {\n        background: \"#347\",\n        color: \"white\",\n    },\n    \"&dark .cm-tooltip-autocomplete-disabled ul li[aria-selected]\": {\n        background: \"#444\",\n    },\n    \".cm-completionListIncompleteTop:before, .cm-completionListIncompleteBottom:after\": {\n        content: '\"\u00B7\u00B7\u00B7\"',\n        opacity: 0.5,\n        display: \"block\",\n        textAlign: \"center\"\n    },\n    \".cm-tooltip.cm-completionInfo\": {\n        position: \"absolute\",\n        padding: \"3px 9px\",\n        width: \"max-content\",\n        maxWidth: `${400 /* Info.Width */}px`,\n        boxSizing: \"border-box\"\n    },\n    \".cm-completionInfo.cm-completionInfo-left\": { right: \"100%\" },\n    \".cm-completionInfo.cm-completionInfo-right\": { left: \"100%\" },\n    \".cm-completionInfo.cm-completionInfo-left-narrow\": { right: `${30 /* Info.Margin */}px` },\n    \".cm-completionInfo.cm-completionInfo-right-narrow\": { left: `${30 /* Info.Margin */}px` },\n    \"&light .cm-snippetField\": { backgroundColor: \"#00000022\" },\n    \"&dark .cm-snippetField\": { backgroundColor: \"#ffffff22\" },\n    \".cm-snippetFieldPosition\": {\n        verticalAlign: \"text-top\",\n        width: 0,\n        height: \"1.15em\",\n        display: \"inline-block\",\n        margin: \"0 -0.7px -.7em\",\n        borderLeft: \"1.4px dotted #888\"\n    },\n    \".cm-completionMatchedText\": {\n        textDecoration: \"underline\"\n    },\n    \".cm-completionDetail\": {\n        marginLeft: \"0.5em\",\n        fontStyle: \"italic\"\n    },\n    \".cm-completionIcon\": {\n        fontSize: \"90%\",\n        width: \".8em\",\n        display: \"inline-block\",\n        textAlign: \"center\",\n        paddingRight: \".6em\",\n        opacity: \"0.6\",\n        boxSizing: \"content-box\"\n    },\n    \".cm-completionIcon-function, .cm-completionIcon-method\": {\n        \"&:after\": { content: \"'\u0192'\" }\n    },\n    \".cm-completionIcon-class\": {\n        \"&:after\": { content: \"'\u25CB'\" }\n    },\n    \".cm-completionIcon-interface\": {\n        \"&:after\": { content: \"'\u25CC'\" }\n    },\n    \".cm-completionIcon-variable\": {\n        \"&:after\": { content: \"'\uD835\uDC65'\" }\n    },\n    \".cm-completionIcon-constant\": {\n        \"&:after\": { content: \"'\uD835\uDC36'\" }\n    },\n    \".cm-completionIcon-type\": {\n        \"&:after\": { content: \"'\uD835\uDC61'\" }\n    },\n    \".cm-completionIcon-enum\": {\n        \"&:after\": { content: \"'\u222A'\" }\n    },\n    \".cm-completionIcon-property\": {\n        \"&:after\": { content: \"'\u25A1'\" }\n    },\n    \".cm-completionIcon-keyword\": {\n        \"&:after\": { content: \"'\uD83D\uDD11\\uFE0E'\" } // Disable emoji rendering\n    },\n    \".cm-completionIcon-namespace\": {\n        \"&:after\": { content: \"'\u25A2'\" }\n    },\n    \".cm-completionIcon-text\": {\n        \"&:after\": { content: \"'abc'\", fontSize: \"50%\", verticalAlign: \"middle\" }\n    }\n});\n\nclass FieldPos {\n    constructor(field, line, from, to) {\n        this.field = field;\n        this.line = line;\n        this.from = from;\n        this.to = to;\n    }\n}\nclass FieldRange {\n    constructor(field, from, to) {\n        this.field = field;\n        this.from = from;\n        this.to = to;\n    }\n    map(changes) {\n        let from = changes.mapPos(this.from, -1, MapMode.TrackDel);\n        let to = changes.mapPos(this.to, 1, MapMode.TrackDel);\n        return from == null || to == null ? null : new FieldRange(this.field, from, to);\n    }\n}\nclass Snippet {\n    constructor(lines, fieldPositions) {\n        this.lines = lines;\n        this.fieldPositions = fieldPositions;\n    }\n    instantiate(state, pos) {\n        let text = [], lineStart = [pos];\n        let lineObj = state.doc.lineAt(pos), baseIndent = /^\\s*/.exec(lineObj.text)[0];\n        for (let line of this.lines) {\n            if (text.length) {\n                let indent = baseIndent, tabs = /^\\t*/.exec(line)[0].length;\n                for (let i = 0; i < tabs; i++)\n                    indent += state.facet(indentUnit);\n                lineStart.push(pos + indent.length - tabs);\n                line = indent + line.slice(tabs);\n            }\n            text.push(line);\n            pos += line.length + 1;\n        }\n        let ranges = this.fieldPositions.map(pos => new FieldRange(pos.field, lineStart[pos.line] + pos.from, lineStart[pos.line] + pos.to));\n        return { text, ranges };\n    }\n    static parse(template) {\n        let fields = [];\n        let lines = [], positions = [], m;\n        for (let line of template.split(/\\r\\n?|\\n/)) {\n            while (m = /[#$]\\{(?:(\\d+)(?::([^}]*))?|([^}]*))\\}/.exec(line)) {\n                let seq = m[1] ? +m[1] : null, name = m[2] || m[3] || \"\", found = -1;\n                for (let i = 0; i < fields.length; i++) {\n                    if (seq != null ? fields[i].seq == seq : name ? fields[i].name == name : false)\n                        found = i;\n                }\n                if (found < 0) {\n                    let i = 0;\n                    while (i < fields.length && (seq == null || (fields[i].seq != null && fields[i].seq < seq)))\n                        i++;\n                    fields.splice(i, 0, { seq, name });\n                    found = i;\n                    for (let pos of positions)\n                        if (pos.field >= found)\n                            pos.field++;\n                }\n                positions.push(new FieldPos(found, lines.length, m.index, m.index + name.length));\n                line = line.slice(0, m.index) + name + line.slice(m.index + m[0].length);\n            }\n            for (let esc; esc = /\\\\([{}])/.exec(line);) {\n                line = line.slice(0, esc.index) + esc[1] + line.slice(esc.index + esc[0].length);\n                for (let pos of positions)\n                    if (pos.line == lines.length && pos.from > esc.index) {\n                        pos.from--;\n                        pos.to--;\n                    }\n            }\n            lines.push(line);\n        }\n        return new Snippet(lines, positions);\n    }\n}\nlet fieldMarker = /*@__PURE__*/Decoration.widget({ widget: /*@__PURE__*/new class extends WidgetType {\n        toDOM() {\n            let span = document.createElement(\"span\");\n            span.className = \"cm-snippetFieldPosition\";\n            return span;\n        }\n        ignoreEvent() { return false; }\n    } });\nlet fieldRange = /*@__PURE__*/Decoration.mark({ class: \"cm-snippetField\" });\nclass ActiveSnippet {\n    constructor(ranges, active) {\n        this.ranges = ranges;\n        this.active = active;\n        this.deco = Decoration.set(ranges.map(r => (r.from == r.to ? fieldMarker : fieldRange).range(r.from, r.to)));\n    }\n    map(changes) {\n        let ranges = [];\n        for (let r of this.ranges) {\n            let mapped = r.map(changes);\n            if (!mapped)\n                return null;\n            ranges.push(mapped);\n        }\n        return new ActiveSnippet(ranges, this.active);\n    }\n    selectionInsideField(sel) {\n        return sel.ranges.every(range => this.ranges.some(r => r.field == this.active && r.from <= range.from && r.to >= range.to));\n    }\n}\nconst setActive = /*@__PURE__*/StateEffect.define({\n    map(value, changes) { return value && value.map(changes); }\n});\nconst moveToField = /*@__PURE__*/StateEffect.define();\nconst snippetState = /*@__PURE__*/StateField.define({\n    create() { return null; },\n    update(value, tr) {\n        for (let effect of tr.effects) {\n            if (effect.is(setActive))\n                return effect.value;\n            if (effect.is(moveToField) && value)\n                return new ActiveSnippet(value.ranges, effect.value);\n        }\n        if (value && tr.docChanged)\n            value = value.map(tr.changes);\n        if (value && tr.selection && !value.selectionInsideField(tr.selection))\n            value = null;\n        return value;\n    },\n    provide: f => EditorView.decorations.from(f, val => val ? val.deco : Decoration.none)\n});\nfunction fieldSelection(ranges, field) {\n    return EditorSelection.create(ranges.filter(r => r.field == field).map(r => EditorSelection.range(r.from, r.to)));\n}\n/**\nConvert a snippet template to a function that can\n[apply](https://codemirror.net/6/docs/ref/#autocomplete.Completion.apply) it. Snippets are written\nusing syntax like this:\n\n    \"for (let ${index} = 0; ${index} < ${end}; ${index}++) {\\n\\t${}\\n}\"\n\nEach `${}` placeholder (you may also use `#{}`) indicates a field\nthat the user can fill in. Its name, if any, will be the default\ncontent for the field.\n\nWhen the snippet is activated by calling the returned function,\nthe code is inserted at the given position. Newlines in the\ntemplate are indented by the indentation of the start line, plus\none [indent unit](https://codemirror.net/6/docs/ref/#language.indentUnit) per tab character after\nthe newline.\n\nOn activation, (all instances of) the first field are selected.\nThe user can move between fields with Tab and Shift-Tab as long as\nthe fields are active. Moving to the last field or moving the\ncursor out of the current field deactivates the fields.\n\nThe order of fields defaults to textual order, but you can add\nnumbers to placeholders (`${1}` or `${1:defaultText}`) to provide\na custom order.\n\nTo include a literal `{` or `}` in your template, put a backslash\nin front of it. This will be removed and the brace will not be\ninterpreted as indicating a placeholder.\n*/\nfunction snippet(template) {\n    let snippet = Snippet.parse(template);\n    return (editor, completion, from, to) => {\n        let { text, ranges } = snippet.instantiate(editor.state, from);\n        let spec = {\n            changes: { from, to, insert: Text.of(text) },\n            scrollIntoView: true,\n            annotations: completion ? pickedCompletion.of(completion) : undefined\n        };\n        if (ranges.length)\n            spec.selection = fieldSelection(ranges, 0);\n        if (ranges.length > 1) {\n            let active = new ActiveSnippet(ranges, 0);\n            let effects = spec.effects = [setActive.of(active)];\n            if (editor.state.field(snippetState, false) === undefined)\n                effects.push(StateEffect.appendConfig.of([snippetState, addSnippetKeymap, snippetPointerHandler, baseTheme]));\n        }\n        editor.dispatch(editor.state.update(spec));\n    };\n}\nfunction moveField(dir) {\n    return ({ state, dispatch }) => {\n        let active = state.field(snippetState, false);\n        if (!active || dir < 0 && active.active == 0)\n            return false;\n        let next = active.active + dir, last = dir > 0 && !active.ranges.some(r => r.field == next + dir);\n        dispatch(state.update({\n            selection: fieldSelection(active.ranges, next),\n            effects: setActive.of(last ? null : new ActiveSnippet(active.ranges, next)),\n            scrollIntoView: true\n        }));\n        return true;\n    };\n}\n/**\nA command that clears the active snippet, if any.\n*/\nconst clearSnippet = ({ state, dispatch }) => {\n    let active = state.field(snippetState, false);\n    if (!active)\n        return false;\n    dispatch(state.update({ effects: setActive.of(null) }));\n    return true;\n};\n/**\nMove to the next snippet field, if available.\n*/\nconst nextSnippetField = /*@__PURE__*/moveField(1);\n/**\nMove to the previous snippet field, if available.\n*/\nconst prevSnippetField = /*@__PURE__*/moveField(-1);\n/**\nCheck if there is an active snippet with a next field for\n`nextSnippetField` to move to.\n*/\nfunction hasNextSnippetField(state) {\n    let active = state.field(snippetState, false);\n    return !!(active && active.ranges.some(r => r.field == active.active + 1));\n}\n/**\nReturns true if there is an active snippet and a previous field\nfor `prevSnippetField` to move to.\n*/\nfunction hasPrevSnippetField(state) {\n    let active = state.field(snippetState, false);\n    return !!(active && active.active > 0);\n}\nconst defaultSnippetKeymap = [\n    { key: \"Tab\", run: nextSnippetField, shift: prevSnippetField },\n    { key: \"Escape\", run: clearSnippet }\n];\n/**\nA facet that can be used to configure the key bindings used by\nsnippets. The default binds Tab to\n[`nextSnippetField`](https://codemirror.net/6/docs/ref/#autocomplete.nextSnippetField), Shift-Tab to\n[`prevSnippetField`](https://codemirror.net/6/docs/ref/#autocomplete.prevSnippetField), and Escape\nto [`clearSnippet`](https://codemirror.net/6/docs/ref/#autocomplete.clearSnippet).\n*/\nconst snippetKeymap = /*@__PURE__*/Facet.define({\n    combine(maps) { return maps.length ? maps[0] : defaultSnippetKeymap; }\n});\nconst addSnippetKeymap = /*@__PURE__*/Prec.highest(/*@__PURE__*/keymap.compute([snippetKeymap], state => state.facet(snippetKeymap)));\n/**\nCreate a completion from a snippet. Returns an object with the\nproperties from `completion`, plus an `apply` function that\napplies the snippet.\n*/\nfunction snippetCompletion(template, completion) {\n    return Object.assign(Object.assign({}, completion), { apply: snippet(template) });\n}\nconst snippetPointerHandler = /*@__PURE__*/EditorView.domEventHandlers({\n    mousedown(event, view) {\n        let active = view.state.field(snippetState, false), pos;\n        if (!active || (pos = view.posAtCoords({ x: event.clientX, y: event.clientY })) == null)\n            return false;\n        let match = active.ranges.find(r => r.from <= pos && r.to >= pos);\n        if (!match || match.field == active.active)\n            return false;\n        view.dispatch({\n            selection: fieldSelection(active.ranges, match.field),\n            effects: setActive.of(active.ranges.some(r => r.field > match.field)\n                ? new ActiveSnippet(active.ranges, match.field) : null),\n            scrollIntoView: true\n        });\n        return true;\n    }\n});\n\nfunction wordRE(wordChars) {\n    let escaped = wordChars.replace(/[\\]\\-\\\\]/g, \"\\\\$&\");\n    try {\n        return new RegExp(`[\\\\p{Alphabetic}\\\\p{Number}_${escaped}]+`, \"ug\");\n    }\n    catch (_a) {\n        return new RegExp(`[\\w${escaped}]`, \"g\");\n    }\n}\nfunction mapRE(re, f) {\n    return new RegExp(f(re.source), re.unicode ? \"u\" : \"\");\n}\nconst wordCaches = /*@__PURE__*/Object.create(null);\nfunction wordCache(wordChars) {\n    return wordCaches[wordChars] || (wordCaches[wordChars] = new WeakMap);\n}\nfunction storeWords(doc, wordRE, result, seen, ignoreAt) {\n    for (let lines = doc.iterLines(), pos = 0; !lines.next().done;) {\n        let { value } = lines, m;\n        wordRE.lastIndex = 0;\n        while (m = wordRE.exec(value)) {\n            if (!seen[m[0]] && pos + m.index != ignoreAt) {\n                result.push({ type: \"text\", label: m[0] });\n                seen[m[0]] = true;\n                if (result.length >= 2000 /* C.MaxList */)\n                    return;\n            }\n        }\n        pos += value.length + 1;\n    }\n}\nfunction collectWords(doc, cache, wordRE, to, ignoreAt) {\n    let big = doc.length >= 1000 /* C.MinCacheLen */;\n    let cached = big && cache.get(doc);\n    if (cached)\n        return cached;\n    let result = [], seen = Object.create(null);\n    if (doc.children) {\n        let pos = 0;\n        for (let ch of doc.children) {\n            if (ch.length >= 1000 /* C.MinCacheLen */) {\n                for (let c of collectWords(ch, cache, wordRE, to - pos, ignoreAt - pos)) {\n                    if (!seen[c.label]) {\n                        seen[c.label] = true;\n                        result.push(c);\n                    }\n                }\n            }\n            else {\n                storeWords(ch, wordRE, result, seen, ignoreAt - pos);\n            }\n            pos += ch.length + 1;\n        }\n    }\n    else {\n        storeWords(doc, wordRE, result, seen, ignoreAt);\n    }\n    if (big && result.length < 2000 /* C.MaxList */)\n        cache.set(doc, result);\n    return result;\n}\n/**\nA completion source that will scan the document for words (using a\n[character categorizer](https://codemirror.net/6/docs/ref/#state.EditorState.charCategorizer)), and\nreturn those as completions.\n*/\nconst completeAnyWord = context => {\n    let wordChars = context.state.languageDataAt(\"wordChars\", context.pos).join(\"\");\n    let re = wordRE(wordChars);\n    let token = context.matchBefore(mapRE(re, s => s + \"$\"));\n    if (!token && !context.explicit)\n        return null;\n    let from = token ? token.from : context.pos;\n    let options = collectWords(context.state.doc, wordCache(wordChars), re, 50000 /* C.Range */, from);\n    return { from, options, validFor: mapRE(re, s => \"^\" + s) };\n};\n\nconst defaults = {\n    brackets: [\"(\", \"[\", \"{\", \"'\", '\"'],\n    before: \")]}:;>\",\n    stringPrefixes: []\n};\nconst closeBracketEffect = /*@__PURE__*/StateEffect.define({\n    map(value, mapping) {\n        let mapped = mapping.mapPos(value, -1, MapMode.TrackAfter);\n        return mapped == null ? undefined : mapped;\n    }\n});\nconst closedBracket = /*@__PURE__*/new class extends RangeValue {\n};\nclosedBracket.startSide = 1;\nclosedBracket.endSide = -1;\nconst bracketState = /*@__PURE__*/StateField.define({\n    create() { return RangeSet.empty; },\n    update(value, tr) {\n        if (tr.selection) {\n            let line = tr.state.doc.lineAt(tr.selection.main.head);\n            value = value.update({ filter: from => from >= line.from && from <= line.to });\n        }\n        value = value.map(tr.changes);\n        for (let effect of tr.effects)\n            if (effect.is(closeBracketEffect))\n                value = value.update({ add: [closedBracket.range(effect.value, effect.value + 1)] });\n        return value;\n    }\n});\n/**\nExtension to enable bracket-closing behavior. When a closeable\nbracket is typed, its closing bracket is immediately inserted\nafter the cursor. When closing a bracket directly in front of a\nclosing bracket inserted by the extension, the cursor moves over\nthat bracket.\n*/\nfunction closeBrackets() {\n    return [inputHandler, bracketState];\n}\nconst definedClosing = \"()[]{}<>\";\nfunction closing(ch) {\n    for (let i = 0; i < definedClosing.length; i += 2)\n        if (definedClosing.charCodeAt(i) == ch)\n            return definedClosing.charAt(i + 1);\n    return fromCodePoint(ch < 128 ? ch : ch + 1);\n}\nfunction config(state, pos) {\n    return state.languageDataAt(\"closeBrackets\", pos)[0] || defaults;\n}\nconst android = typeof navigator == \"object\" && /*@__PURE__*//Android\\b/.test(navigator.userAgent);\nconst inputHandler = /*@__PURE__*/EditorView.inputHandler.of((view, from, to, insert) => {\n    if ((android ? view.composing : view.compositionStarted) || view.state.readOnly)\n        return false;\n    let sel = view.state.selection.main;\n    if (insert.length > 2 || insert.length == 2 && codePointSize(codePointAt(insert, 0)) == 1 ||\n        from != sel.from || to != sel.to)\n        return false;\n    let tr = insertBracket(view.state, insert);\n    if (!tr)\n        return false;\n    view.dispatch(tr);\n    return true;\n});\n/**\nCommand that implements deleting a pair of matching brackets when\nthe cursor is between them.\n*/\nconst deleteBracketPair = ({ state, dispatch }) => {\n    if (state.readOnly)\n        return false;\n    let conf = config(state, state.selection.main.head);\n    let tokens = conf.brackets || defaults.brackets;\n    let dont = null, changes = state.changeByRange(range => {\n        if (range.empty) {\n            let before = prevChar(state.doc, range.head);\n            for (let token of tokens) {\n                if (token == before && nextChar(state.doc, range.head) == closing(codePointAt(token, 0)))\n                    return { changes: { from: range.head - token.length, to: range.head + token.length },\n                        range: EditorSelection.cursor(range.head - token.length) };\n            }\n        }\n        return { range: dont = range };\n    });\n    if (!dont)\n        dispatch(state.update(changes, { scrollIntoView: true, userEvent: \"delete.backward\" }));\n    return !dont;\n};\n/**\nClose-brackets related key bindings. Binds Backspace to\n[`deleteBracketPair`](https://codemirror.net/6/docs/ref/#autocomplete.deleteBracketPair).\n*/\nconst closeBracketsKeymap = [\n    { key: \"Backspace\", run: deleteBracketPair }\n];\n/**\nImplements the extension's behavior on text insertion. If the\ngiven string counts as a bracket in the language around the\nselection, and replacing the selection with it requires custom\nbehavior (inserting a closing version or skipping past a\npreviously-closed bracket), this function returns a transaction\nrepresenting that custom behavior. (You only need this if you want\nto programmatically insert brackets\u2014the\n[`closeBrackets`](https://codemirror.net/6/docs/ref/#autocomplete.closeBrackets) extension will\ntake care of running this for user input.)\n*/\nfunction insertBracket(state, bracket) {\n    let conf = config(state, state.selection.main.head);\n    let tokens = conf.brackets || defaults.brackets;\n    for (let tok of tokens) {\n        let closed = closing(codePointAt(tok, 0));\n        if (bracket == tok)\n            return closed == tok ? handleSame(state, tok, tokens.indexOf(tok + tok + tok) > -1, conf)\n                : handleOpen(state, tok, closed, conf.before || defaults.before);\n        if (bracket == closed && closedBracketAt(state, state.selection.main.from))\n            return handleClose(state, tok, closed);\n    }\n    return null;\n}\nfunction closedBracketAt(state, pos) {\n    let found = false;\n    state.field(bracketState).between(0, state.doc.length, from => {\n        if (from == pos)\n            found = true;\n    });\n    return found;\n}\nfunction nextChar(doc, pos) {\n    let next = doc.sliceString(pos, pos + 2);\n    return next.slice(0, codePointSize(codePointAt(next, 0)));\n}\nfunction prevChar(doc, pos) {\n    let prev = doc.sliceString(pos - 2, pos);\n    return codePointSize(codePointAt(prev, 0)) == prev.length ? prev : prev.slice(1);\n}\nfunction handleOpen(state, open, close, closeBefore) {\n    let dont = null, changes = state.changeByRange(range => {\n        if (!range.empty)\n            return { changes: [{ insert: open, from: range.from }, { insert: close, from: range.to }],\n                effects: closeBracketEffect.of(range.to + open.length),\n                range: EditorSelection.range(range.anchor + open.length, range.head + open.length) };\n        let next = nextChar(state.doc, range.head);\n        if (!next || /\\s/.test(next) || closeBefore.indexOf(next) > -1)\n            return { changes: { insert: open + close, from: range.head },\n                effects: closeBracketEffect.of(range.head + open.length),\n                range: EditorSelection.cursor(range.head + open.length) };\n        return { range: dont = range };\n    });\n    return dont ? null : state.update(changes, {\n        scrollIntoView: true,\n        userEvent: \"input.type\"\n    });\n}\nfunction handleClose(state, _open, close) {\n    let dont = null, changes = state.changeByRange(range => {\n        if (range.empty && nextChar(state.doc, range.head) == close)\n            return { changes: { from: range.head, to: range.head + close.length, insert: close },\n                range: EditorSelection.cursor(range.head + close.length) };\n        return dont = { range };\n    });\n    return dont ? null : state.update(changes, {\n        scrollIntoView: true,\n        userEvent: \"input.type\"\n    });\n}\n// Handles cases where the open and close token are the same, and\n// possibly triple quotes (as in `\"\"\"abc\"\"\"`-style quoting).\nfunction handleSame(state, token, allowTriple, config) {\n    let stringPrefixes = config.stringPrefixes || defaults.stringPrefixes;\n    let dont = null, changes = state.changeByRange(range => {\n        if (!range.empty)\n            return { changes: [{ insert: token, from: range.from }, { insert: token, from: range.to }],\n                effects: closeBracketEffect.of(range.to + token.length),\n                range: EditorSelection.range(range.anchor + token.length, range.head + token.length) };\n        let pos = range.head, next = nextChar(state.doc, pos), start;\n        if (next == token) {\n            if (nodeStart(state, pos)) {\n                return { changes: { insert: token + token, from: pos },\n                    effects: closeBracketEffect.of(pos + token.length),\n                    range: EditorSelection.cursor(pos + token.length) };\n            }\n            else if (closedBracketAt(state, pos)) {\n                let isTriple = allowTriple && state.sliceDoc(pos, pos + token.length * 3) == token + token + token;\n                let content = isTriple ? token + token + token : token;\n                return { changes: { from: pos, to: pos + content.length, insert: content },\n                    range: EditorSelection.cursor(pos + content.length) };\n            }\n        }\n        else if (allowTriple && state.sliceDoc(pos - 2 * token.length, pos) == token + token &&\n            (start = canStartStringAt(state, pos - 2 * token.length, stringPrefixes)) > -1 &&\n            nodeStart(state, start)) {\n            return { changes: { insert: token + token + token + token, from: pos },\n                effects: closeBracketEffect.of(pos + token.length),\n                range: EditorSelection.cursor(pos + token.length) };\n        }\n        else if (state.charCategorizer(pos)(next) != CharCategory.Word) {\n            if (canStartStringAt(state, pos, stringPrefixes) > -1 && !probablyInString(state, pos, token, stringPrefixes))\n                return { changes: { insert: token + token, from: pos },\n                    effects: closeBracketEffect.of(pos + token.length),\n                    range: EditorSelection.cursor(pos + token.length) };\n        }\n        return { range: dont = range };\n    });\n    return dont ? null : state.update(changes, {\n        scrollIntoView: true,\n        userEvent: \"input.type\"\n    });\n}\nfunction nodeStart(state, pos) {\n    let tree = syntaxTree(state).resolveInner(pos + 1);\n    return tree.parent && tree.from == pos;\n}\nfunction probablyInString(state, pos, quoteToken, prefixes) {\n    let node = syntaxTree(state).resolveInner(pos, -1);\n    let maxPrefix = prefixes.reduce((m, p) => Math.max(m, p.length), 0);\n    for (let i = 0; i < 5; i++) {\n        let start = state.sliceDoc(node.from, Math.min(node.to, node.from + quoteToken.length + maxPrefix));\n        let quotePos = start.indexOf(quoteToken);\n        if (!quotePos || quotePos > -1 && prefixes.indexOf(start.slice(0, quotePos)) > -1) {\n            let first = node.firstChild;\n            while (first && first.from == node.from && first.to - first.from > quoteToken.length + quotePos) {\n                if (state.sliceDoc(first.to - quoteToken.length, first.to) == quoteToken)\n                    return false;\n                first = first.firstChild;\n            }\n            return true;\n        }\n        let parent = node.to == pos && node.parent;\n        if (!parent)\n            break;\n        node = parent;\n    }\n    return false;\n}\nfunction canStartStringAt(state, pos, prefixes) {\n    let charCat = state.charCategorizer(pos);\n    if (charCat(state.sliceDoc(pos - 1, pos)) != CharCategory.Word)\n        return pos;\n    for (let prefix of prefixes) {\n        let start = pos - prefix.length;\n        if (state.sliceDoc(start, pos) == prefix && charCat(state.sliceDoc(start - 1, start)) != CharCategory.Word)\n            return start;\n    }\n    return -1;\n}\n\n/**\nReturns an extension that enables autocompletion.\n*/\nfunction autocompletion(config = {}) {\n    return [\n        completionState,\n        completionConfig.of(config),\n        completionPlugin,\n        completionKeymapExt,\n        baseTheme\n    ];\n}\n/**\nBasic keybindings for autocompletion.\n\n - Ctrl-Space: [`startCompletion`](https://codemirror.net/6/docs/ref/#autocomplete.startCompletion)\n - Escape: [`closeCompletion`](https://codemirror.net/6/docs/ref/#autocomplete.closeCompletion)\n - ArrowDown: [`moveCompletionSelection`](https://codemirror.net/6/docs/ref/#autocomplete.moveCompletionSelection)`(true)`\n - ArrowUp: [`moveCompletionSelection`](https://codemirror.net/6/docs/ref/#autocomplete.moveCompletionSelection)`(false)`\n - PageDown: [`moveCompletionSelection`](https://codemirror.net/6/docs/ref/#autocomplete.moveCompletionSelection)`(true, \"page\")`\n - PageDown: [`moveCompletionSelection`](https://codemirror.net/6/docs/ref/#autocomplete.moveCompletionSelection)`(true, \"page\")`\n - Enter: [`acceptCompletion`](https://codemirror.net/6/docs/ref/#autocomplete.acceptCompletion)\n*/\nconst completionKeymap = [\n    { key: \"Ctrl-Space\", run: startCompletion },\n    { key: \"Escape\", run: closeCompletion },\n    { key: \"ArrowDown\", run: /*@__PURE__*/moveCompletionSelection(true) },\n    { key: \"ArrowUp\", run: /*@__PURE__*/moveCompletionSelection(false) },\n    { key: \"PageDown\", run: /*@__PURE__*/moveCompletionSelection(true, \"page\") },\n    { key: \"PageUp\", run: /*@__PURE__*/moveCompletionSelection(false, \"page\") },\n    { key: \"Enter\", run: acceptCompletion }\n];\nconst completionKeymapExt = /*@__PURE__*/Prec.highest(/*@__PURE__*/keymap.computeN([completionConfig], state => state.facet(completionConfig).defaultKeymap ? [completionKeymap] : []));\n/**\nGet the current completion status. When completions are available,\nthis will return `\"active\"`. When completions are pending (in the\nprocess of being queried), this returns `\"pending\"`. Otherwise, it\nreturns `null`.\n*/\nfunction completionStatus(state) {\n    let cState = state.field(completionState, false);\n    return cState && cState.active.some(a => a.state == 1 /* State.Pending */) ? \"pending\"\n        : cState && cState.active.some(a => a.state != 0 /* State.Inactive */) ? \"active\" : null;\n}\nconst completionArrayCache = /*@__PURE__*/new WeakMap;\n/**\nReturns the available completions as an array.\n*/\nfunction currentCompletions(state) {\n    var _a;\n    let open = (_a = state.field(completionState, false)) === null || _a === void 0 ? void 0 : _a.open;\n    if (!open || open.disabled)\n        return [];\n    let completions = completionArrayCache.get(open.options);\n    if (!completions)\n        completionArrayCache.set(open.options, completions = open.options.map(o => o.completion));\n    return completions;\n}\n/**\nReturn the currently selected completion, if any.\n*/\nfunction selectedCompletion(state) {\n    var _a;\n    let open = (_a = state.field(completionState, false)) === null || _a === void 0 ? void 0 : _a.open;\n    return open && !open.disabled && open.selected >= 0 ? open.options[open.selected].completion : null;\n}\n/**\nReturns the currently selected position in the active completion\nlist, or null if no completions are active.\n*/\nfunction selectedCompletionIndex(state) {\n    var _a;\n    let open = (_a = state.field(completionState, false)) === null || _a === void 0 ? void 0 : _a.open;\n    return open && !open.disabled && open.selected >= 0 ? open.selected : null;\n}\n/**\nCreate an effect that can be attached to a transaction to change\nthe currently selected completion.\n*/\nfunction setSelectedCompletion(index) {\n    return setSelectedEffect.of(index);\n}\n\nexport { CompletionContext, acceptCompletion, autocompletion, clearSnippet, closeBrackets, closeBracketsKeymap, closeCompletion, completeAnyWord, completeFromList, completionKeymap, completionStatus, currentCompletions, deleteBracketPair, hasNextSnippetField, hasPrevSnippetField, ifIn, ifNotIn, insertBracket, insertCompletionText, moveCompletionSelection, nextSnippetField, pickedCompletion, prevSnippetField, selectedCompletion, selectedCompletionIndex, setSelectedCompletion, snippet, snippetCompletion, snippetKeymap, startCompletion };\n", "export default function crelt() {\n  var elt = arguments[0]\n  if (typeof elt == \"string\") elt = document.createElement(elt)\n  var i = 1, next = arguments[1]\n  if (next && typeof next == \"object\" && next.nodeType == null && !Array.isArray(next)) {\n    for (var name in next) if (Object.prototype.hasOwnProperty.call(next, name)) {\n      var value = next[name]\n      if (typeof value == \"string\") elt.setAttribute(name, value)\n      else if (value != null) elt[name] = value\n    }\n    i++\n  }\n  for (; i < arguments.length; i++) add(elt, arguments[i])\n  return elt\n}\n\nfunction add(elt, child) {\n  if (typeof child == \"string\") {\n    elt.appendChild(document.createTextNode(child))\n  } else if (child == null) {\n  } else if (child.nodeType != null) {\n    elt.appendChild(child)\n  } else if (Array.isArray(child)) {\n    for (var i = 0; i < child.length; i++) add(elt, child[i])\n  } else {\n    throw new RangeError(\"Unsupported child node: \" + child)\n  }\n}\n", "import { showPanel, EditorView, getPanel, Decoration, ViewPlugin, runScopeHandlers } from '@codemirror/view';\nimport { codePointAt, fromCodePoint, codePointSize, StateEffect, StateField, EditorSelection, Facet, combineConfig, CharCategory, RangeSetBuilder, Prec, EditorState, findClusterBreak } from '@codemirror/state';\nimport elt from 'crelt';\n\nconst basicNormalize = typeof String.prototype.normalize == \"function\"\n    ? x => x.normalize(\"NFKD\") : x => x;\n/**\nA search cursor provides an iterator over text matches in a\ndocument.\n*/\nclass SearchCursor {\n    /**\n    Create a text cursor. The query is the search string, `from` to\n    `to` provides the region to search.\n    \n    When `normalize` is given, it will be called, on both the query\n    string and the content it is matched against, before comparing.\n    You can, for example, create a case-insensitive search by\n    passing `s => s.toLowerCase()`.\n    \n    Text is always normalized with\n    [`.normalize(\"NFKD\")`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize)\n    (when supported).\n    */\n    constructor(text, query, from = 0, to = text.length, normalize, test) {\n        this.test = test;\n        /**\n        The current match (only holds a meaningful value after\n        [`next`](https://codemirror.net/6/docs/ref/#search.SearchCursor.next) has been called and when\n        `done` is false).\n        */\n        this.value = { from: 0, to: 0 };\n        /**\n        Whether the end of the iterated region has been reached.\n        */\n        this.done = false;\n        this.matches = [];\n        this.buffer = \"\";\n        this.bufferPos = 0;\n        this.iter = text.iterRange(from, to);\n        this.bufferStart = from;\n        this.normalize = normalize ? x => normalize(basicNormalize(x)) : basicNormalize;\n        this.query = this.normalize(query);\n    }\n    peek() {\n        if (this.bufferPos == this.buffer.length) {\n            this.bufferStart += this.buffer.length;\n            this.iter.next();\n            if (this.iter.done)\n                return -1;\n            this.bufferPos = 0;\n            this.buffer = this.iter.value;\n        }\n        return codePointAt(this.buffer, this.bufferPos);\n    }\n    /**\n    Look for the next match. Updates the iterator's\n    [`value`](https://codemirror.net/6/docs/ref/#search.SearchCursor.value) and\n    [`done`](https://codemirror.net/6/docs/ref/#search.SearchCursor.done) properties. Should be called\n    at least once before using the cursor.\n    */\n    next() {\n        while (this.matches.length)\n            this.matches.pop();\n        return this.nextOverlapping();\n    }\n    /**\n    The `next` method will ignore matches that partially overlap a\n    previous match. This method behaves like `next`, but includes\n    such matches.\n    */\n    nextOverlapping() {\n        for (;;) {\n            let next = this.peek();\n            if (next < 0) {\n                this.done = true;\n                return this;\n            }\n            let str = fromCodePoint(next), start = this.bufferStart + this.bufferPos;\n            this.bufferPos += codePointSize(next);\n            let norm = this.normalize(str);\n            for (let i = 0, pos = start;; i++) {\n                let code = norm.charCodeAt(i);\n                let match = this.match(code, pos);\n                if (i == norm.length - 1) {\n                    if (match) {\n                        this.value = match;\n                        return this;\n                    }\n                    break;\n                }\n                if (pos == start && i < str.length && str.charCodeAt(i) == code)\n                    pos++;\n            }\n        }\n    }\n    match(code, pos) {\n        let match = null;\n        for (let i = 0; i < this.matches.length; i += 2) {\n            let index = this.matches[i], keep = false;\n            if (this.query.charCodeAt(index) == code) {\n                if (index == this.query.length - 1) {\n                    match = { from: this.matches[i + 1], to: pos + 1 };\n                }\n                else {\n                    this.matches[i]++;\n                    keep = true;\n                }\n            }\n            if (!keep) {\n                this.matches.splice(i, 2);\n                i -= 2;\n            }\n        }\n        if (this.query.charCodeAt(0) == code) {\n            if (this.query.length == 1)\n                match = { from: pos, to: pos + 1 };\n            else\n                this.matches.push(1, pos);\n        }\n        if (match && this.test && !this.test(match.from, match.to, this.buffer, this.bufferStart))\n            match = null;\n        return match;\n    }\n}\nif (typeof Symbol != \"undefined\")\n    SearchCursor.prototype[Symbol.iterator] = function () { return this; };\n\nconst empty = { from: -1, to: -1, match: /*@__PURE__*//.*/.exec(\"\") };\nconst baseFlags = \"gm\" + (/x/.unicode == null ? \"\" : \"u\");\n/**\nThis class is similar to [`SearchCursor`](https://codemirror.net/6/docs/ref/#search.SearchCursor)\nbut searches for a regular expression pattern instead of a plain\nstring.\n*/\nclass RegExpCursor {\n    /**\n    Create a cursor that will search the given range in the given\n    document. `query` should be the raw pattern (as you'd pass it to\n    `new RegExp`).\n    */\n    constructor(text, query, options, from = 0, to = text.length) {\n        this.text = text;\n        this.to = to;\n        this.curLine = \"\";\n        /**\n        Set to `true` when the cursor has reached the end of the search\n        range.\n        */\n        this.done = false;\n        /**\n        Will contain an object with the extent of the match and the\n        match object when [`next`](https://codemirror.net/6/docs/ref/#search.RegExpCursor.next)\n        sucessfully finds a match.\n        */\n        this.value = empty;\n        if (/\\\\[sWDnr]|\\n|\\r|\\[\\^/.test(query))\n            return new MultilineRegExpCursor(text, query, options, from, to);\n        this.re = new RegExp(query, baseFlags + ((options === null || options === void 0 ? void 0 : options.ignoreCase) ? \"i\" : \"\"));\n        this.test = options === null || options === void 0 ? void 0 : options.test;\n        this.iter = text.iter();\n        let startLine = text.lineAt(from);\n        this.curLineStart = startLine.from;\n        this.matchPos = toCharEnd(text, from);\n        this.getLine(this.curLineStart);\n    }\n    getLine(skip) {\n        this.iter.next(skip);\n        if (this.iter.lineBreak) {\n            this.curLine = \"\";\n        }\n        else {\n            this.curLine = this.iter.value;\n            if (this.curLineStart + this.curLine.length > this.to)\n                this.curLine = this.curLine.slice(0, this.to - this.curLineStart);\n            this.iter.next();\n        }\n    }\n    nextLine() {\n        this.curLineStart = this.curLineStart + this.curLine.length + 1;\n        if (this.curLineStart > this.to)\n            this.curLine = \"\";\n        else\n            this.getLine(0);\n    }\n    /**\n    Move to the next match, if there is one.\n    */\n    next() {\n        for (let off = this.matchPos - this.curLineStart;;) {\n            this.re.lastIndex = off;\n            let match = this.matchPos <= this.to && this.re.exec(this.curLine);\n            if (match) {\n                let from = this.curLineStart + match.index, to = from + match[0].length;\n                this.matchPos = toCharEnd(this.text, to + (from == to ? 1 : 0));\n                if (from == this.curLineStart + this.curLine.length)\n                    this.nextLine();\n                if ((from < to || from > this.value.to) && (!this.test || this.test(from, to, match))) {\n                    this.value = { from, to, match };\n                    return this;\n                }\n                off = this.matchPos - this.curLineStart;\n            }\n            else if (this.curLineStart + this.curLine.length < this.to) {\n                this.nextLine();\n                off = 0;\n            }\n            else {\n                this.done = true;\n                return this;\n            }\n        }\n    }\n}\nconst flattened = /*@__PURE__*/new WeakMap();\n// Reusable (partially) flattened document strings\nclass FlattenedDoc {\n    constructor(from, text) {\n        this.from = from;\n        this.text = text;\n    }\n    get to() { return this.from + this.text.length; }\n    static get(doc, from, to) {\n        let cached = flattened.get(doc);\n        if (!cached || cached.from >= to || cached.to <= from) {\n            let flat = new FlattenedDoc(from, doc.sliceString(from, to));\n            flattened.set(doc, flat);\n            return flat;\n        }\n        if (cached.from == from && cached.to == to)\n            return cached;\n        let { text, from: cachedFrom } = cached;\n        if (cachedFrom > from) {\n            text = doc.sliceString(from, cachedFrom) + text;\n            cachedFrom = from;\n        }\n        if (cached.to < to)\n            text += doc.sliceString(cached.to, to);\n        flattened.set(doc, new FlattenedDoc(cachedFrom, text));\n        return new FlattenedDoc(from, text.slice(from - cachedFrom, to - cachedFrom));\n    }\n}\nclass MultilineRegExpCursor {\n    constructor(text, query, options, from, to) {\n        this.text = text;\n        this.to = to;\n        this.done = false;\n        this.value = empty;\n        this.matchPos = toCharEnd(text, from);\n        this.re = new RegExp(query, baseFlags + ((options === null || options === void 0 ? void 0 : options.ignoreCase) ? \"i\" : \"\"));\n        this.test = options === null || options === void 0 ? void 0 : options.test;\n        this.flat = FlattenedDoc.get(text, from, this.chunkEnd(from + 5000 /* Chunk.Base */));\n    }\n    chunkEnd(pos) {\n        return pos >= this.to ? this.to : this.text.lineAt(pos).to;\n    }\n    next() {\n        for (;;) {\n            let off = this.re.lastIndex = this.matchPos - this.flat.from;\n            let match = this.re.exec(this.flat.text);\n            // Skip empty matches directly after the last match\n            if (match && !match[0] && match.index == off) {\n                this.re.lastIndex = off + 1;\n                match = this.re.exec(this.flat.text);\n            }\n            if (match) {\n                let from = this.flat.from + match.index, to = from + match[0].length;\n                // If a match goes almost to the end of a noncomplete chunk, try\n                // again, since it'll likely be able to match more\n                if ((this.flat.to >= this.to || match.index + match[0].length <= this.flat.text.length - 10) &&\n                    (!this.test || this.test(from, to, match))) {\n                    this.value = { from, to, match };\n                    this.matchPos = toCharEnd(this.text, to + (from == to ? 1 : 0));\n                    return this;\n                }\n            }\n            if (this.flat.to == this.to) {\n                this.done = true;\n                return this;\n            }\n            // Grow the flattened doc\n            this.flat = FlattenedDoc.get(this.text, this.flat.from, this.chunkEnd(this.flat.from + this.flat.text.length * 2));\n        }\n    }\n}\nif (typeof Symbol != \"undefined\") {\n    RegExpCursor.prototype[Symbol.iterator] = MultilineRegExpCursor.prototype[Symbol.iterator] =\n        function () { return this; };\n}\nfunction validRegExp(source) {\n    try {\n        new RegExp(source, baseFlags);\n        return true;\n    }\n    catch (_a) {\n        return false;\n    }\n}\nfunction toCharEnd(text, pos) {\n    if (pos >= text.length)\n        return pos;\n    let line = text.lineAt(pos), next;\n    while (pos < line.to && (next = line.text.charCodeAt(pos - line.from)) >= 0xDC00 && next < 0xE000)\n        pos++;\n    return pos;\n}\n\nfunction createLineDialog(view) {\n    let line = String(view.state.doc.lineAt(view.state.selection.main.head).number);\n    let input = elt(\"input\", { class: \"cm-textfield\", name: \"line\", value: line });\n    let dom = elt(\"form\", {\n        class: \"cm-gotoLine\",\n        onkeydown: (event) => {\n            if (event.keyCode == 27) { // Escape\n                event.preventDefault();\n                view.dispatch({ effects: dialogEffect.of(false) });\n                view.focus();\n            }\n            else if (event.keyCode == 13) { // Enter\n                event.preventDefault();\n                go();\n            }\n        },\n        onsubmit: (event) => {\n            event.preventDefault();\n            go();\n        }\n    }, elt(\"label\", view.state.phrase(\"Go to line\"), \": \", input), \" \", elt(\"button\", { class: \"cm-button\", type: \"submit\" }, view.state.phrase(\"go\")));\n    function go() {\n        let match = /^([+-])?(\\d+)?(:\\d+)?(%)?$/.exec(input.value);\n        if (!match)\n            return;\n        let { state } = view, startLine = state.doc.lineAt(state.selection.main.head);\n        let [, sign, ln, cl, percent] = match;\n        let col = cl ? +cl.slice(1) : 0;\n        let line = ln ? +ln : startLine.number;\n        if (ln && percent) {\n            let pc = line / 100;\n            if (sign)\n                pc = pc * (sign == \"-\" ? -1 : 1) + (startLine.number / state.doc.lines);\n            line = Math.round(state.doc.lines * pc);\n        }\n        else if (ln && sign) {\n            line = line * (sign == \"-\" ? -1 : 1) + startLine.number;\n        }\n        let docLine = state.doc.line(Math.max(1, Math.min(state.doc.lines, line)));\n        let selection = EditorSelection.cursor(docLine.from + Math.max(0, Math.min(col, docLine.length)));\n        view.dispatch({\n            effects: [dialogEffect.of(false), EditorView.scrollIntoView(selection.from, { y: 'center' })],\n            selection,\n        });\n        view.focus();\n    }\n    return { dom };\n}\nconst dialogEffect = /*@__PURE__*/StateEffect.define();\nconst dialogField = /*@__PURE__*/StateField.define({\n    create() { return true; },\n    update(value, tr) {\n        for (let e of tr.effects)\n            if (e.is(dialogEffect))\n                value = e.value;\n        return value;\n    },\n    provide: f => showPanel.from(f, val => val ? createLineDialog : null)\n});\n/**\nCommand that shows a dialog asking the user for a line number, and\nwhen a valid position is provided, moves the cursor to that line.\n\nSupports line numbers, relative line offsets prefixed with `+` or\n`-`, document percentages suffixed with `%`, and an optional\ncolumn position by adding `:` and a second number after the line\nnumber.\n*/\nconst gotoLine = view => {\n    let panel = getPanel(view, createLineDialog);\n    if (!panel) {\n        let effects = [dialogEffect.of(true)];\n        if (view.state.field(dialogField, false) == null)\n            effects.push(StateEffect.appendConfig.of([dialogField, baseTheme$1]));\n        view.dispatch({ effects });\n        panel = getPanel(view, createLineDialog);\n    }\n    if (panel)\n        panel.dom.querySelector(\"input\").select();\n    return true;\n};\nconst baseTheme$1 = /*@__PURE__*/EditorView.baseTheme({\n    \".cm-panel.cm-gotoLine\": {\n        padding: \"2px 6px 4px\",\n        \"& label\": { fontSize: \"80%\" }\n    }\n});\n\nconst defaultHighlightOptions = {\n    highlightWordAroundCursor: false,\n    minSelectionLength: 1,\n    maxMatches: 100,\n    wholeWords: false\n};\nconst highlightConfig = /*@__PURE__*/Facet.define({\n    combine(options) {\n        return combineConfig(options, defaultHighlightOptions, {\n            highlightWordAroundCursor: (a, b) => a || b,\n            minSelectionLength: Math.min,\n            maxMatches: Math.min\n        });\n    }\n});\n/**\nThis extension highlights text that matches the selection. It uses\nthe `\"cm-selectionMatch\"` class for the highlighting. When\n`highlightWordAroundCursor` is enabled, the word at the cursor\nitself will be highlighted with `\"cm-selectionMatch-main\"`.\n*/\nfunction highlightSelectionMatches(options) {\n    let ext = [defaultTheme, matchHighlighter];\n    if (options)\n        ext.push(highlightConfig.of(options));\n    return ext;\n}\nconst matchDeco = /*@__PURE__*/Decoration.mark({ class: \"cm-selectionMatch\" });\nconst mainMatchDeco = /*@__PURE__*/Decoration.mark({ class: \"cm-selectionMatch cm-selectionMatch-main\" });\n// Whether the characters directly outside the given positions are non-word characters\nfunction insideWordBoundaries(check, state, from, to) {\n    return (from == 0 || check(state.sliceDoc(from - 1, from)) != CharCategory.Word) &&\n        (to == state.doc.length || check(state.sliceDoc(to, to + 1)) != CharCategory.Word);\n}\n// Whether the characters directly at the given positions are word characters\nfunction insideWord(check, state, from, to) {\n    return check(state.sliceDoc(from, from + 1)) == CharCategory.Word\n        && check(state.sliceDoc(to - 1, to)) == CharCategory.Word;\n}\nconst matchHighlighter = /*@__PURE__*/ViewPlugin.fromClass(class {\n    constructor(view) {\n        this.decorations = this.getDeco(view);\n    }\n    update(update) {\n        if (update.selectionSet || update.docChanged || update.viewportChanged)\n            this.decorations = this.getDeco(update.view);\n    }\n    getDeco(view) {\n        let conf = view.state.facet(highlightConfig);\n        let { state } = view, sel = state.selection;\n        if (sel.ranges.length > 1)\n            return Decoration.none;\n        let range = sel.main, query, check = null;\n        if (range.empty) {\n            if (!conf.highlightWordAroundCursor)\n                return Decoration.none;\n            let word = state.wordAt(range.head);\n            if (!word)\n                return Decoration.none;\n            check = state.charCategorizer(range.head);\n            query = state.sliceDoc(word.from, word.to);\n        }\n        else {\n            let len = range.to - range.from;\n            if (len < conf.minSelectionLength || len > 200)\n                return Decoration.none;\n            if (conf.wholeWords) {\n                query = state.sliceDoc(range.from, range.to); // TODO: allow and include leading/trailing space?\n                check = state.charCategorizer(range.head);\n                if (!(insideWordBoundaries(check, state, range.from, range.to)\n                    && insideWord(check, state, range.from, range.to)))\n                    return Decoration.none;\n            }\n            else {\n                query = state.sliceDoc(range.from, range.to).trim();\n                if (!query)\n                    return Decoration.none;\n            }\n        }\n        let deco = [];\n        for (let part of view.visibleRanges) {\n            let cursor = new SearchCursor(state.doc, query, part.from, part.to);\n            while (!cursor.next().done) {\n                let { from, to } = cursor.value;\n                if (!check || insideWordBoundaries(check, state, from, to)) {\n                    if (range.empty && from <= range.from && to >= range.to)\n                        deco.push(mainMatchDeco.range(from, to));\n                    else if (from >= range.to || to <= range.from)\n                        deco.push(matchDeco.range(from, to));\n                    if (deco.length > conf.maxMatches)\n                        return Decoration.none;\n                }\n            }\n        }\n        return Decoration.set(deco);\n    }\n}, {\n    decorations: v => v.decorations\n});\nconst defaultTheme = /*@__PURE__*/EditorView.baseTheme({\n    \".cm-selectionMatch\": { backgroundColor: \"#99ff7780\" },\n    \".cm-searchMatch .cm-selectionMatch\": { backgroundColor: \"transparent\" }\n});\n// Select the words around the cursors.\nconst selectWord = ({ state, dispatch }) => {\n    let { selection } = state;\n    let newSel = EditorSelection.create(selection.ranges.map(range => state.wordAt(range.head) || EditorSelection.cursor(range.head)), selection.mainIndex);\n    if (newSel.eq(selection))\n        return false;\n    dispatch(state.update({ selection: newSel }));\n    return true;\n};\n// Find next occurrence of query relative to last cursor. Wrap around\n// the document if there are no more matches.\nfunction findNextOccurrence(state, query) {\n    let { main, ranges } = state.selection;\n    let word = state.wordAt(main.head), fullWord = word && word.from == main.from && word.to == main.to;\n    for (let cycled = false, cursor = new SearchCursor(state.doc, query, ranges[ranges.length - 1].to);;) {\n        cursor.next();\n        if (cursor.done) {\n            if (cycled)\n                return null;\n            cursor = new SearchCursor(state.doc, query, 0, Math.max(0, ranges[ranges.length - 1].from - 1));\n            cycled = true;\n        }\n        else {\n            if (cycled && ranges.some(r => r.from == cursor.value.from))\n                continue;\n            if (fullWord) {\n                let word = state.wordAt(cursor.value.from);\n                if (!word || word.from != cursor.value.from || word.to != cursor.value.to)\n                    continue;\n            }\n            return cursor.value;\n        }\n    }\n}\n/**\nSelect next occurrence of the current selection. Expand selection\nto the surrounding word when the selection is empty.\n*/\nconst selectNextOccurrence = ({ state, dispatch }) => {\n    let { ranges } = state.selection;\n    if (ranges.some(sel => sel.from === sel.to))\n        return selectWord({ state, dispatch });\n    let searchedText = state.sliceDoc(ranges[0].from, ranges[0].to);\n    if (state.selection.ranges.some(r => state.sliceDoc(r.from, r.to) != searchedText))\n        return false;\n    let range = findNextOccurrence(state, searchedText);\n    if (!range)\n        return false;\n    dispatch(state.update({\n        selection: state.selection.addRange(EditorSelection.range(range.from, range.to), false),\n        effects: EditorView.scrollIntoView(range.to)\n    }));\n    return true;\n};\n\nconst searchConfigFacet = /*@__PURE__*/Facet.define({\n    combine(configs) {\n        return combineConfig(configs, {\n            top: false,\n            caseSensitive: false,\n            literal: false,\n            regexp: false,\n            wholeWord: false,\n            createPanel: view => new SearchPanel(view),\n            scrollToMatch: range => EditorView.scrollIntoView(range)\n        });\n    }\n});\n/**\nAdd search state to the editor configuration, and optionally\nconfigure the search extension.\n([`openSearchPanel`](https://codemirror.net/6/docs/ref/#search.openSearchPanel) will automatically\nenable this if it isn't already on).\n*/\nfunction search(config) {\n    return config ? [searchConfigFacet.of(config), searchExtensions] : searchExtensions;\n}\n/**\nA search query. Part of the editor's search state.\n*/\nclass SearchQuery {\n    /**\n    Create a query object.\n    */\n    constructor(config) {\n        this.search = config.search;\n        this.caseSensitive = !!config.caseSensitive;\n        this.literal = !!config.literal;\n        this.regexp = !!config.regexp;\n        this.replace = config.replace || \"\";\n        this.valid = !!this.search && (!this.regexp || validRegExp(this.search));\n        this.unquoted = this.unquote(this.search);\n        this.wholeWord = !!config.wholeWord;\n    }\n    /**\n    @internal\n    */\n    unquote(text) {\n        return this.literal ? text :\n            text.replace(/\\\\([nrt\\\\])/g, (_, ch) => ch == \"n\" ? \"\\n\" : ch == \"r\" ? \"\\r\" : ch == \"t\" ? \"\\t\" : \"\\\\\");\n    }\n    /**\n    Compare this query to another query.\n    */\n    eq(other) {\n        return this.search == other.search && this.replace == other.replace &&\n            this.caseSensitive == other.caseSensitive && this.regexp == other.regexp &&\n            this.wholeWord == other.wholeWord;\n    }\n    /**\n    @internal\n    */\n    create() {\n        return this.regexp ? new RegExpQuery(this) : new StringQuery(this);\n    }\n    /**\n    Get a search cursor for this query, searching through the given\n    range in the given state.\n    */\n    getCursor(state, from = 0, to) {\n        let st = state.doc ? state : EditorState.create({ doc: state });\n        if (to == null)\n            to = st.doc.length;\n        return this.regexp ? regexpCursor(this, st, from, to) : stringCursor(this, st, from, to);\n    }\n}\nclass QueryType {\n    constructor(spec) {\n        this.spec = spec;\n    }\n}\nfunction stringCursor(spec, state, from, to) {\n    return new SearchCursor(state.doc, spec.unquoted, from, to, spec.caseSensitive ? undefined : x => x.toLowerCase(), spec.wholeWord ? stringWordTest(state.doc, state.charCategorizer(state.selection.main.head)) : undefined);\n}\nfunction stringWordTest(doc, categorizer) {\n    return (from, to, buf, bufPos) => {\n        if (bufPos > from || bufPos + buf.length < to) {\n            bufPos = Math.max(0, from - 2);\n            buf = doc.sliceString(bufPos, Math.min(doc.length, to + 2));\n        }\n        return (categorizer(charBefore(buf, from - bufPos)) != CharCategory.Word ||\n            categorizer(charAfter(buf, from - bufPos)) != CharCategory.Word) &&\n            (categorizer(charAfter(buf, to - bufPos)) != CharCategory.Word ||\n                categorizer(charBefore(buf, to - bufPos)) != CharCategory.Word);\n    };\n}\nclass StringQuery extends QueryType {\n    constructor(spec) {\n        super(spec);\n    }\n    nextMatch(state, curFrom, curTo) {\n        let cursor = stringCursor(this.spec, state, curTo, state.doc.length).nextOverlapping();\n        if (cursor.done)\n            cursor = stringCursor(this.spec, state, 0, curFrom).nextOverlapping();\n        return cursor.done ? null : cursor.value;\n    }\n    // Searching in reverse is, rather than implementing an inverted search\n    // cursor, done by scanning chunk after chunk forward.\n    prevMatchInRange(state, from, to) {\n        for (let pos = to;;) {\n            let start = Math.max(from, pos - 10000 /* FindPrev.ChunkSize */ - this.spec.unquoted.length);\n            let cursor = stringCursor(this.spec, state, start, pos), range = null;\n            while (!cursor.nextOverlapping().done)\n                range = cursor.value;\n            if (range)\n                return range;\n            if (start == from)\n                return null;\n            pos -= 10000 /* FindPrev.ChunkSize */;\n        }\n    }\n    prevMatch(state, curFrom, curTo) {\n        return this.prevMatchInRange(state, 0, curFrom) ||\n            this.prevMatchInRange(state, curTo, state.doc.length);\n    }\n    getReplacement(_result) { return this.spec.unquote(this.spec.replace); }\n    matchAll(state, limit) {\n        let cursor = stringCursor(this.spec, state, 0, state.doc.length), ranges = [];\n        while (!cursor.next().done) {\n            if (ranges.length >= limit)\n                return null;\n            ranges.push(cursor.value);\n        }\n        return ranges;\n    }\n    highlight(state, from, to, add) {\n        let cursor = stringCursor(this.spec, state, Math.max(0, from - this.spec.unquoted.length), Math.min(to + this.spec.unquoted.length, state.doc.length));\n        while (!cursor.next().done)\n            add(cursor.value.from, cursor.value.to);\n    }\n}\nfunction regexpCursor(spec, state, from, to) {\n    return new RegExpCursor(state.doc, spec.search, {\n        ignoreCase: !spec.caseSensitive,\n        test: spec.wholeWord ? regexpWordTest(state.charCategorizer(state.selection.main.head)) : undefined\n    }, from, to);\n}\nfunction charBefore(str, index) {\n    return str.slice(findClusterBreak(str, index, false), index);\n}\nfunction charAfter(str, index) {\n    return str.slice(index, findClusterBreak(str, index));\n}\nfunction regexpWordTest(categorizer) {\n    return (_from, _to, match) => !match[0].length ||\n        (categorizer(charBefore(match.input, match.index)) != CharCategory.Word ||\n            categorizer(charAfter(match.input, match.index)) != CharCategory.Word) &&\n            (categorizer(charAfter(match.input, match.index + match[0].length)) != CharCategory.Word ||\n                categorizer(charBefore(match.input, match.index + match[0].length)) != CharCategory.Word);\n}\nclass RegExpQuery extends QueryType {\n    nextMatch(state, curFrom, curTo) {\n        let cursor = regexpCursor(this.spec, state, curTo, state.doc.length).next();\n        if (cursor.done)\n            cursor = regexpCursor(this.spec, state, 0, curFrom).next();\n        return cursor.done ? null : cursor.value;\n    }\n    prevMatchInRange(state, from, to) {\n        for (let size = 1;; size++) {\n            let start = Math.max(from, to - size * 10000 /* FindPrev.ChunkSize */);\n            let cursor = regexpCursor(this.spec, state, start, to), range = null;\n            while (!cursor.next().done)\n                range = cursor.value;\n            if (range && (start == from || range.from > start + 10))\n                return range;\n            if (start == from)\n                return null;\n        }\n    }\n    prevMatch(state, curFrom, curTo) {\n        return this.prevMatchInRange(state, 0, curFrom) ||\n            this.prevMatchInRange(state, curTo, state.doc.length);\n    }\n    getReplacement(result) {\n        return this.spec.unquote(this.spec.replace.replace(/\\$([$&\\d+])/g, (m, i) => i == \"$\" ? \"$\"\n            : i == \"&\" ? result.match[0]\n                : i != \"0\" && +i < result.match.length ? result.match[i]\n                    : m));\n    }\n    matchAll(state, limit) {\n        let cursor = regexpCursor(this.spec, state, 0, state.doc.length), ranges = [];\n        while (!cursor.next().done) {\n            if (ranges.length >= limit)\n                return null;\n            ranges.push(cursor.value);\n        }\n        return ranges;\n    }\n    highlight(state, from, to, add) {\n        let cursor = regexpCursor(this.spec, state, Math.max(0, from - 250 /* RegExp.HighlightMargin */), Math.min(to + 250 /* RegExp.HighlightMargin */, state.doc.length));\n        while (!cursor.next().done)\n            add(cursor.value.from, cursor.value.to);\n    }\n}\n/**\nA state effect that updates the current search query. Note that\nthis only has an effect if the search state has been initialized\n(by including [`search`](https://codemirror.net/6/docs/ref/#search.search) in your configuration or\nby running [`openSearchPanel`](https://codemirror.net/6/docs/ref/#search.openSearchPanel) at least\nonce).\n*/\nconst setSearchQuery = /*@__PURE__*/StateEffect.define();\nconst togglePanel = /*@__PURE__*/StateEffect.define();\nconst searchState = /*@__PURE__*/StateField.define({\n    create(state) {\n        return new SearchState(defaultQuery(state).create(), null);\n    },\n    update(value, tr) {\n        for (let effect of tr.effects) {\n            if (effect.is(setSearchQuery))\n                value = new SearchState(effect.value.create(), value.panel);\n            else if (effect.is(togglePanel))\n                value = new SearchState(value.query, effect.value ? createSearchPanel : null);\n        }\n        return value;\n    },\n    provide: f => showPanel.from(f, val => val.panel)\n});\n/**\nGet the current search query from an editor state.\n*/\nfunction getSearchQuery(state) {\n    let curState = state.field(searchState, false);\n    return curState ? curState.query.spec : defaultQuery(state);\n}\n/**\nQuery whether the search panel is open in the given editor state.\n*/\nfunction searchPanelOpen(state) {\n    var _a;\n    return ((_a = state.field(searchState, false)) === null || _a === void 0 ? void 0 : _a.panel) != null;\n}\nclass SearchState {\n    constructor(query, panel) {\n        this.query = query;\n        this.panel = panel;\n    }\n}\nconst matchMark = /*@__PURE__*/Decoration.mark({ class: \"cm-searchMatch\" }), selectedMatchMark = /*@__PURE__*/Decoration.mark({ class: \"cm-searchMatch cm-searchMatch-selected\" });\nconst searchHighlighter = /*@__PURE__*/ViewPlugin.fromClass(class {\n    constructor(view) {\n        this.view = view;\n        this.decorations = this.highlight(view.state.field(searchState));\n    }\n    update(update) {\n        let state = update.state.field(searchState);\n        if (state != update.startState.field(searchState) || update.docChanged || update.selectionSet || update.viewportChanged)\n            this.decorations = this.highlight(state);\n    }\n    highlight({ query, panel }) {\n        if (!panel || !query.spec.valid)\n            return Decoration.none;\n        let { view } = this;\n        let builder = new RangeSetBuilder();\n        for (let i = 0, ranges = view.visibleRanges, l = ranges.length; i < l; i++) {\n            let { from, to } = ranges[i];\n            while (i < l - 1 && to > ranges[i + 1].from - 2 * 250 /* RegExp.HighlightMargin */)\n                to = ranges[++i].to;\n            query.highlight(view.state, from, to, (from, to) => {\n                let selected = view.state.selection.ranges.some(r => r.from == from && r.to == to);\n                builder.add(from, to, selected ? selectedMatchMark : matchMark);\n            });\n        }\n        return builder.finish();\n    }\n}, {\n    decorations: v => v.decorations\n});\nfunction searchCommand(f) {\n    return view => {\n        let state = view.state.field(searchState, false);\n        return state && state.query.spec.valid ? f(view, state) : openSearchPanel(view);\n    };\n}\n/**\nOpen the search panel if it isn't already open, and move the\nselection to the first match after the current main selection.\nWill wrap around to the start of the document when it reaches the\nend.\n*/\nconst findNext = /*@__PURE__*/searchCommand((view, { query }) => {\n    let { to } = view.state.selection.main;\n    let next = query.nextMatch(view.state, to, to);\n    if (!next)\n        return false;\n    let selection = EditorSelection.single(next.from, next.to);\n    let config = view.state.facet(searchConfigFacet);\n    view.dispatch({\n        selection,\n        effects: [announceMatch(view, next), config.scrollToMatch(selection.main, view)],\n        userEvent: \"select.search\"\n    });\n    selectSearchInput(view);\n    return true;\n});\n/**\nMove the selection to the previous instance of the search query,\nbefore the current main selection. Will wrap past the start\nof the document to start searching at the end again.\n*/\nconst findPrevious = /*@__PURE__*/searchCommand((view, { query }) => {\n    let { state } = view, { from } = state.selection.main;\n    let prev = query.prevMatch(state, from, from);\n    if (!prev)\n        return false;\n    let selection = EditorSelection.single(prev.from, prev.to);\n    let config = view.state.facet(searchConfigFacet);\n    view.dispatch({\n        selection,\n        effects: [announceMatch(view, prev), config.scrollToMatch(selection.main, view)],\n        userEvent: \"select.search\"\n    });\n    selectSearchInput(view);\n    return true;\n});\n/**\nSelect all instances of the search query.\n*/\nconst selectMatches = /*@__PURE__*/searchCommand((view, { query }) => {\n    let ranges = query.matchAll(view.state, 1000);\n    if (!ranges || !ranges.length)\n        return false;\n    view.dispatch({\n        selection: EditorSelection.create(ranges.map(r => EditorSelection.range(r.from, r.to))),\n        userEvent: \"select.search.matches\"\n    });\n    return true;\n});\n/**\nSelect all instances of the currently selected text.\n*/\nconst selectSelectionMatches = ({ state, dispatch }) => {\n    let sel = state.selection;\n    if (sel.ranges.length > 1 || sel.main.empty)\n        return false;\n    let { from, to } = sel.main;\n    let ranges = [], main = 0;\n    for (let cur = new SearchCursor(state.doc, state.sliceDoc(from, to)); !cur.next().done;) {\n        if (ranges.length > 1000)\n            return false;\n        if (cur.value.from == from)\n            main = ranges.length;\n        ranges.push(EditorSelection.range(cur.value.from, cur.value.to));\n    }\n    dispatch(state.update({\n        selection: EditorSelection.create(ranges, main),\n        userEvent: \"select.search.matches\"\n    }));\n    return true;\n};\n/**\nReplace the current match of the search query.\n*/\nconst replaceNext = /*@__PURE__*/searchCommand((view, { query }) => {\n    let { state } = view, { from, to } = state.selection.main;\n    if (state.readOnly)\n        return false;\n    let next = query.nextMatch(state, from, from);\n    if (!next)\n        return false;\n    let changes = [], selection, replacement;\n    let effects = [];\n    if (next.from == from && next.to == to) {\n        replacement = state.toText(query.getReplacement(next));\n        changes.push({ from: next.from, to: next.to, insert: replacement });\n        next = query.nextMatch(state, next.from, next.to);\n        effects.push(EditorView.announce.of(state.phrase(\"replaced match on line $\", state.doc.lineAt(from).number) + \".\"));\n    }\n    if (next) {\n        let off = changes.length == 0 || changes[0].from >= next.to ? 0 : next.to - next.from - replacement.length;\n        selection = EditorSelection.single(next.from - off, next.to - off);\n        effects.push(announceMatch(view, next));\n        effects.push(state.facet(searchConfigFacet).scrollToMatch(selection.main, view));\n    }\n    view.dispatch({\n        changes, selection, effects,\n        userEvent: \"input.replace\"\n    });\n    return true;\n});\n/**\nReplace all instances of the search query with the given\nreplacement.\n*/\nconst replaceAll = /*@__PURE__*/searchCommand((view, { query }) => {\n    if (view.state.readOnly)\n        return false;\n    let changes = query.matchAll(view.state, 1e9).map(match => {\n        let { from, to } = match;\n        return { from, to, insert: query.getReplacement(match) };\n    });\n    if (!changes.length)\n        return false;\n    let announceText = view.state.phrase(\"replaced $ matches\", changes.length) + \".\";\n    view.dispatch({\n        changes,\n        effects: EditorView.announce.of(announceText),\n        userEvent: \"input.replace.all\"\n    });\n    return true;\n});\nfunction createSearchPanel(view) {\n    return view.state.facet(searchConfigFacet).createPanel(view);\n}\nfunction defaultQuery(state, fallback) {\n    var _a, _b, _c, _d, _e;\n    let sel = state.selection.main;\n    let selText = sel.empty || sel.to > sel.from + 100 ? \"\" : state.sliceDoc(sel.from, sel.to);\n    if (fallback && !selText)\n        return fallback;\n    let config = state.facet(searchConfigFacet);\n    return new SearchQuery({\n        search: ((_a = fallback === null || fallback === void 0 ? void 0 : fallback.literal) !== null && _a !== void 0 ? _a : config.literal) ? selText : selText.replace(/\\n/g, \"\\\\n\"),\n        caseSensitive: (_b = fallback === null || fallback === void 0 ? void 0 : fallback.caseSensitive) !== null && _b !== void 0 ? _b : config.caseSensitive,\n        literal: (_c = fallback === null || fallback === void 0 ? void 0 : fallback.literal) !== null && _c !== void 0 ? _c : config.literal,\n        regexp: (_d = fallback === null || fallback === void 0 ? void 0 : fallback.regexp) !== null && _d !== void 0 ? _d : config.regexp,\n        wholeWord: (_e = fallback === null || fallback === void 0 ? void 0 : fallback.wholeWord) !== null && _e !== void 0 ? _e : config.wholeWord\n    });\n}\nfunction getSearchInput(view) {\n    let panel = getPanel(view, createSearchPanel);\n    return panel && panel.dom.querySelector(\"[main-field]\");\n}\nfunction selectSearchInput(view) {\n    let input = getSearchInput(view);\n    if (input && input == view.root.activeElement)\n        input.select();\n}\n/**\nMake sure the search panel is open and focused.\n*/\nconst openSearchPanel = view => {\n    let state = view.state.field(searchState, false);\n    if (state && state.panel) {\n        let searchInput = getSearchInput(view);\n        if (searchInput && searchInput != view.root.activeElement) {\n            let query = defaultQuery(view.state, state.query.spec);\n            if (query.valid)\n                view.dispatch({ effects: setSearchQuery.of(query) });\n            searchInput.focus();\n            searchInput.select();\n        }\n    }\n    else {\n        view.dispatch({ effects: [\n                togglePanel.of(true),\n                state ? setSearchQuery.of(defaultQuery(view.state, state.query.spec)) : StateEffect.appendConfig.of(searchExtensions)\n            ] });\n    }\n    return true;\n};\n/**\nClose the search panel.\n*/\nconst closeSearchPanel = view => {\n    let state = view.state.field(searchState, false);\n    if (!state || !state.panel)\n        return false;\n    let panel = getPanel(view, createSearchPanel);\n    if (panel && panel.dom.contains(view.root.activeElement))\n        view.focus();\n    view.dispatch({ effects: togglePanel.of(false) });\n    return true;\n};\n/**\nDefault search-related key bindings.\n\n - Mod-f: [`openSearchPanel`](https://codemirror.net/6/docs/ref/#search.openSearchPanel)\n - F3, Mod-g: [`findNext`](https://codemirror.net/6/docs/ref/#search.findNext)\n - Shift-F3, Shift-Mod-g: [`findPrevious`](https://codemirror.net/6/docs/ref/#search.findPrevious)\n - Alt-g: [`gotoLine`](https://codemirror.net/6/docs/ref/#search.gotoLine)\n - Mod-d: [`selectNextOccurrence`](https://codemirror.net/6/docs/ref/#search.selectNextOccurrence)\n*/\nconst searchKeymap = [\n    { key: \"Mod-f\", run: openSearchPanel, scope: \"editor search-panel\" },\n    { key: \"F3\", run: findNext, shift: findPrevious, scope: \"editor search-panel\", preventDefault: true },\n    { key: \"Mod-g\", run: findNext, shift: findPrevious, scope: \"editor search-panel\", preventDefault: true },\n    { key: \"Escape\", run: closeSearchPanel, scope: \"editor search-panel\" },\n    { key: \"Mod-Shift-l\", run: selectSelectionMatches },\n    { key: \"Alt-g\", run: gotoLine },\n    { key: \"Mod-d\", run: selectNextOccurrence, preventDefault: true },\n];\nclass SearchPanel {\n    constructor(view) {\n        this.view = view;\n        let query = this.query = view.state.field(searchState).query.spec;\n        this.commit = this.commit.bind(this);\n        this.searchField = elt(\"input\", {\n            value: query.search,\n            placeholder: phrase(view, \"Find\"),\n            \"aria-label\": phrase(view, \"Find\"),\n            class: \"cm-textfield\",\n            name: \"search\",\n            form: \"\",\n            \"main-field\": \"true\",\n            onchange: this.commit,\n            onkeyup: this.commit\n        });\n        this.replaceField = elt(\"input\", {\n            value: query.replace,\n            placeholder: phrase(view, \"Replace\"),\n            \"aria-label\": phrase(view, \"Replace\"),\n            class: \"cm-textfield\",\n            name: \"replace\",\n            form: \"\",\n            onchange: this.commit,\n            onkeyup: this.commit\n        });\n        this.caseField = elt(\"input\", {\n            type: \"checkbox\",\n            name: \"case\",\n            form: \"\",\n            checked: query.caseSensitive,\n            onchange: this.commit\n        });\n        this.reField = elt(\"input\", {\n            type: \"checkbox\",\n            name: \"re\",\n            form: \"\",\n            checked: query.regexp,\n            onchange: this.commit\n        });\n        this.wordField = elt(\"input\", {\n            type: \"checkbox\",\n            name: \"word\",\n            form: \"\",\n            checked: query.wholeWord,\n            onchange: this.commit\n        });\n        function button(name, onclick, content) {\n            return elt(\"button\", { class: \"cm-button\", name, onclick, type: \"button\" }, content);\n        }\n        this.dom = elt(\"div\", { onkeydown: (e) => this.keydown(e), class: \"cm-search\" }, [\n            this.searchField,\n            button(\"next\", () => findNext(view), [phrase(view, \"next\")]),\n            button(\"prev\", () => findPrevious(view), [phrase(view, \"previous\")]),\n            button(\"select\", () => selectMatches(view), [phrase(view, \"all\")]),\n            elt(\"label\", null, [this.caseField, phrase(view, \"match case\")]),\n            elt(\"label\", null, [this.reField, phrase(view, \"regexp\")]),\n            elt(\"label\", null, [this.wordField, phrase(view, \"by word\")]),\n            ...view.state.readOnly ? [] : [\n                elt(\"br\"),\n                this.replaceField,\n                button(\"replace\", () => replaceNext(view), [phrase(view, \"replace\")]),\n                button(\"replaceAll\", () => replaceAll(view), [phrase(view, \"replace all\")])\n            ],\n            elt(\"button\", {\n                name: \"close\",\n                onclick: () => closeSearchPanel(view),\n                \"aria-label\": phrase(view, \"close\"),\n                type: \"button\"\n            }, [\"\u00D7\"])\n        ]);\n    }\n    commit() {\n        let query = new SearchQuery({\n            search: this.searchField.value,\n            caseSensitive: this.caseField.checked,\n            regexp: this.reField.checked,\n            wholeWord: this.wordField.checked,\n            replace: this.replaceField.value,\n        });\n        if (!query.eq(this.query)) {\n            this.query = query;\n            this.view.dispatch({ effects: setSearchQuery.of(query) });\n        }\n    }\n    keydown(e) {\n        if (runScopeHandlers(this.view, e, \"search-panel\")) {\n            e.preventDefault();\n        }\n        else if (e.keyCode == 13 && e.target == this.searchField) {\n            e.preventDefault();\n            (e.shiftKey ? findPrevious : findNext)(this.view);\n        }\n        else if (e.keyCode == 13 && e.target == this.replaceField) {\n            e.preventDefault();\n            replaceNext(this.view);\n        }\n    }\n    update(update) {\n        for (let tr of update.transactions)\n            for (let effect of tr.effects) {\n                if (effect.is(setSearchQuery) && !effect.value.eq(this.query))\n                    this.setQuery(effect.value);\n            }\n    }\n    setQuery(query) {\n        this.query = query;\n        this.searchField.value = query.search;\n        this.replaceField.value = query.replace;\n        this.caseField.checked = query.caseSensitive;\n        this.reField.checked = query.regexp;\n        this.wordField.checked = query.wholeWord;\n    }\n    mount() {\n        this.searchField.select();\n    }\n    get pos() { return 80; }\n    get top() { return this.view.state.facet(searchConfigFacet).top; }\n}\nfunction phrase(view, phrase) { return view.state.phrase(phrase); }\nconst AnnounceMargin = 30;\nconst Break = /[\\s\\.,:;?!]/;\nfunction announceMatch(view, { from, to }) {\n    let line = view.state.doc.lineAt(from), lineEnd = view.state.doc.lineAt(to).to;\n    let start = Math.max(line.from, from - AnnounceMargin), end = Math.min(lineEnd, to + AnnounceMargin);\n    let text = view.state.sliceDoc(start, end);\n    if (start != line.from) {\n        for (let i = 0; i < AnnounceMargin; i++)\n            if (!Break.test(text[i + 1]) && Break.test(text[i])) {\n                text = text.slice(i);\n                break;\n            }\n    }\n    if (end != lineEnd) {\n        for (let i = text.length - 1; i > text.length - AnnounceMargin; i--)\n            if (!Break.test(text[i - 1]) && Break.test(text[i])) {\n                text = text.slice(0, i);\n                break;\n            }\n    }\n    return EditorView.announce.of(`${view.state.phrase(\"current match\")}. ${text} ${view.state.phrase(\"on line\")} ${line.number}.`);\n}\nconst baseTheme = /*@__PURE__*/EditorView.baseTheme({\n    \".cm-panel.cm-search\": {\n        padding: \"2px 6px 4px\",\n        position: \"relative\",\n        \"& [name=close]\": {\n            position: \"absolute\",\n            top: \"0\",\n            right: \"4px\",\n            backgroundColor: \"inherit\",\n            border: \"none\",\n            font: \"inherit\",\n            padding: 0,\n            margin: 0\n        },\n        \"& input, & button, & label\": {\n            margin: \".2em .6em .2em 0\"\n        },\n        \"& input[type=checkbox]\": {\n            marginRight: \".2em\"\n        },\n        \"& label\": {\n            fontSize: \"80%\",\n            whiteSpace: \"pre\"\n        }\n    },\n    \"&light .cm-searchMatch\": { backgroundColor: \"#ffff0054\" },\n    \"&dark .cm-searchMatch\": { backgroundColor: \"#00ffff8a\" },\n    \"&light .cm-searchMatch-selected\": { backgroundColor: \"#ff6a0054\" },\n    \"&dark .cm-searchMatch-selected\": { backgroundColor: \"#ff00ff8a\" }\n});\nconst searchExtensions = [\n    searchState,\n    /*@__PURE__*/Prec.low(searchHighlighter),\n    baseTheme\n];\n\nexport { RegExpCursor, SearchCursor, SearchQuery, closeSearchPanel, findNext, findPrevious, getSearchQuery, gotoLine, highlightSelectionMatches, openSearchPanel, replaceAll, replaceNext, search, searchKeymap, searchPanelOpen, selectMatches, selectNextOccurrence, selectSelectionMatches, setSearchQuery };\n", "var au=Object.create;var $e=Object.defineProperty;var Du=Object.getOwnPropertyDescriptor;var cu=Object.getOwnPropertyNames;var lu=Object.getPrototypeOf,fu=Object.prototype.hasOwnProperty;var pu=(t,e)=>()=>(t&&(e=t(t=0)),e);var Ue=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),Me=(t,e)=>{for(var r in e)$e(t,r,{get:e[r],enumerable:!0})},nr=(t,e,r,n)=>{if(e&&typeof e==\"object\"||typeof e==\"function\")for(let o of cu(e))!fu.call(t,o)&&o!==r&&$e(t,o,{get:()=>e[o],enumerable:!(n=Du(e,o))||n.enumerable});return t};var Ce=(t,e,r)=>(r=t!=null?au(lu(t)):{},nr(e||!t||!t.__esModule?$e(r,\"default\",{value:t,enumerable:!0}):r,t)),du=t=>nr($e({},\"__esModule\",{value:!0}),t);var Fu=(t,e,r)=>{if(!e.has(t))throw TypeError(\"Cannot \"+r)};var Ct=(t,e,r)=>{if(e.has(t))throw TypeError(\"Cannot add the same private member more than once\");e instanceof WeakSet?e.add(t):e.set(t,r)};var ce=(t,e,r)=>(Fu(t,e,\"access private method\"),r);var or=Ue(gt=>{\"use strict\";Object.defineProperty(gt,\"__esModule\",{value:!0});gt.default=ur;function ur(){}ur.prototype={diff:function(e,r){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},o=n.callback;typeof n==\"function\"&&(o=n,n={}),this.options=n;var u=this;function i(p){return o?(setTimeout(function(){o(void 0,p)},0),!0):p}e=this.castInput(e),r=this.castInput(r),e=this.removeEmpty(this.tokenize(e)),r=this.removeEmpty(this.tokenize(r));var s=r.length,a=e.length,D=1,c=s+a;n.maxEditLength&&(c=Math.min(c,n.maxEditLength));var F=[{newPos:-1,components:[]}],f=this.extractCommon(F[0],r,e,0);if(F[0].newPos+1>=s&&f+1>=a)return i([{value:this.join(r),count:r.length}]);function d(){for(var p=-1*D;p<=D;p+=2){var m=void 0,E=F[p-1],h=F[p+1],g=(h?h.newPos:0)-p;E&&(F[p-1]=void 0);var C=E&&E.newPos+1<s,_=h&&0<=g&&g<a;if(!C&&!_){F[p]=void 0;continue}if(!C||_&&E.newPos<h.newPos?(m=hu(h),u.pushComponent(m.components,void 0,!0)):(m=E,m.newPos++,u.pushComponent(m.components,!0,void 0)),g=u.extractCommon(m,r,e,p),m.newPos+1>=s&&g+1>=a)return i(Eu(u,m.components,r,e,u.useLongestToken));F[p]=m}D++}if(o)(function p(){setTimeout(function(){if(D>c)return o();d()||p()},0)})();else for(;D<=c;){var l=d();if(l)return l}},pushComponent:function(e,r,n){var o=e[e.length-1];o&&o.added===r&&o.removed===n?e[e.length-1]={count:o.count+1,added:r,removed:n}:e.push({count:1,added:r,removed:n})},extractCommon:function(e,r,n,o){for(var u=r.length,i=n.length,s=e.newPos,a=s-o,D=0;s+1<u&&a+1<i&&this.equals(r[s+1],n[a+1]);)s++,a++,D++;return D&&e.components.push({count:D}),e.newPos=s,a},equals:function(e,r){return this.options.comparator?this.options.comparator(e,r):e===r||this.options.ignoreCase&&e.toLowerCase()===r.toLowerCase()},removeEmpty:function(e){for(var r=[],n=0;n<e.length;n++)e[n]&&r.push(e[n]);return r},castInput:function(e){return e},tokenize:function(e){return e.split(\"\")},join:function(e){return e.join(\"\")}};function Eu(t,e,r,n,o){for(var u=0,i=e.length,s=0,a=0;u<i;u++){var D=e[u];if(D.removed){if(D.value=t.join(n.slice(a,a+D.count)),a+=D.count,u&&e[u-1].added){var F=e[u-1];e[u-1]=e[u],e[u]=F}}else{if(!D.added&&o){var c=r.slice(s,s+D.count);c=c.map(function(d,l){var p=n[a+l];return p.length>d.length?p:d}),D.value=t.join(c)}else D.value=t.join(r.slice(s,s+D.count));s+=D.count,D.added||(a+=D.count)}}var f=e[i-1];return i>1&&typeof f.value==\"string\"&&(f.added||f.removed)&&t.equals(\"\",f.value)&&(e[i-2].value+=f.value,e.pop()),e}function hu(t){return{newPos:t.newPos,components:t.components.slice(0)}}});var ir=Ue(ye=>{\"use strict\";Object.defineProperty(ye,\"__esModule\",{value:!0});ye.diffArrays=yu;ye.arrayDiff=void 0;var Cu=gu(or());function gu(t){return t&&t.__esModule?t:{default:t}}var ge=new Cu.default;ye.arrayDiff=ge;ge.tokenize=function(t){return t.slice()};ge.join=ge.removeEmpty=function(t){return t};function yu(t,e,r){return ge.diff(t,e,r)}});var Pe=Ue((ss,Rr)=>{\"use strict\";var Ir=new Proxy(String,{get:()=>Ir});Rr.exports=Ir});var ln={};Me(ln,{default:()=>to,shouldHighlight:()=>eo});var eo,to,fn=pu(()=>{eo=()=>!1,to=String});var hn=Ue(pt=>{\"use strict\";Object.defineProperty(pt,\"__esModule\",{value:!0});pt.codeFrameColumns=En;pt.default=io;var pn=(fn(),du(ln)),ro=Pe(),dn=ro,jt;function no(t){if(t){var e;return(e=jt)!=null||(jt=new dn.constructor({enabled:!0,level:1})),jt}return dn}var Fn=!1;function uo(t){return{gutter:t.grey,marker:t.red.bold,message:t.red.bold}}var mn=/\\r\\n|[\\n\\r\\u2028\\u2029]/;function oo(t,e,r){let n=Object.assign({column:0,line:-1},t.start),o=Object.assign({},n,t.end),{linesAbove:u=2,linesBelow:i=3}=r||{},s=n.line,a=n.column,D=o.line,c=o.column,F=Math.max(s-(u+1),0),f=Math.min(e.length,D+i);s===-1&&(F=0),D===-1&&(f=e.length);let d=D-s,l={};if(d)for(let p=0;p<=d;p++){let m=p+s;if(!a)l[m]=!0;else if(p===0){let E=e[m-1].length;l[m]=[a,E-a+1]}else if(p===d)l[m]=[0,c];else{let E=e[m-p].length;l[m]=[0,E]}}else a===c?a?l[s]=[a,0]:l[s]=!0:l[s]=[a,c-a];return{start:F,end:f,markerLines:l}}function En(t,e,r={}){let n=(r.highlightCode||r.forceColor)&&(0,pn.shouldHighlight)(r),o=no(r.forceColor),u=uo(o),i=(p,m)=>n?p(m):m,s=t.split(mn),{start:a,end:D,markerLines:c}=oo(e,s,r),F=e.start&&typeof e.start.column==\"number\",f=String(D).length,l=(n?(0,pn.default)(t,r):t).split(mn,D).slice(a,D).map((p,m)=>{let E=a+1+m,g=` ${` ${E}`.slice(-f)} |`,C=c[E],_=!c[E+1];if(C){let Z=\"\";if(Array.isArray(C)){let $=p.slice(0,Math.max(C[0]-1,0)).replace(/[^\\t]/g,\" \"),Q=C[1]||1;Z=[`\n `,i(u.gutter,g.replace(/\\d/g,\" \")),\" \",$,i(u.marker,\"^\").repeat(Q)].join(\"\"),_&&r.message&&(Z+=\" \"+i(u.message,r.message))}return[i(u.marker,\">\"),i(u.gutter,g),p.length>0?` ${p}`:\"\",Z].join(\"\")}else return` ${i(u.gutter,g)}${p.length>0?` ${p}`:\"\"}`}).join(`\n`);return r.message&&!F&&(l=`${\" \".repeat(f+1)}${r.message}\n${l}`),n?o.reset(l):l}function io(t,e,r,n={}){if(!Fn){Fn=!0;let u=\"Passing lineNumber and colNumber is deprecated to @babel/code-frame. Please use `codeFrameColumns`.\";{let i=new Error(u);i.name=\"DeprecationWarning\",console.warn(new Error(u))}}return r=Math.max(r,0),En(t,{start:{column:r,line:e}},n)}});var tr={};Me(tr,{__debug:()=>Qo,check:()=>Xo,doc:()=>er,format:()=>su,formatWithCursor:()=>iu,getSupportInfo:()=>Zo,util:()=>Qt,version:()=>ou});var mu=(t,e,r,n)=>{if(!(t&&e==null))return e.replaceAll?e.replaceAll(r,n):r.global?e.replace(r,n):e.split(r).join(n)},ee=mu;var Wn=Ce(ir(),1);var U=\"string\",j=\"array\",M=\"cursor\",T=\"indent\",S=\"align\",v=\"trim\",A=\"group\",k=\"fill\",B=\"if-break\",P=\"indent-if-break\",L=\"line-suffix\",I=\"line-suffix-boundary\",x=\"line\",O=\"label\",b=\"break-parent\",We=new Set([M,T,S,v,A,k,B,P,L,I,x,O,b]);function xu(t){if(typeof t==\"string\")return U;if(Array.isArray(t))return j;if(!t)return;let{type:e}=t;if(We.has(e))return e}var W=xu;var _u=t=>new Intl.ListFormat(\"en-US\",{type:\"disjunction\"}).format(t);function Au(t){let e=t===null?\"null\":typeof t;if(e!==\"string\"&&e!==\"object\")return`Unexpected doc '${e}', \nExpected it to be 'string' or 'object'.`;if(W(t))throw new Error(\"doc is valid.\");let r=Object.prototype.toString.call(t);if(r!==\"[object Object]\")return`Unexpected doc '${r}'.`;let n=_u([...We].map(o=>`'${o}'`));return`Unexpected doc.type '${t.type}'.\nExpected it to be ${n}.`}var yt=class extends Error{name=\"InvalidDocError\";constructor(e){super(Au(e)),this.doc=e}},q=yt;var sr={};function Bu(t,e,r,n){let o=[t];for(;o.length>0;){let u=o.pop();if(u===sr){r(o.pop());continue}r&&o.push(u,sr);let i=W(u);if(!i)throw new q(u);if((e==null?void 0:e(u))!==!1)switch(i){case j:case k:{let s=i===j?u:u.parts;for(let a=s.length,D=a-1;D>=0;--D)o.push(s[D]);break}case B:o.push(u.flatContents,u.breakContents);break;case A:if(n&&u.expandedStates)for(let s=u.expandedStates.length,a=s-1;a>=0;--a)o.push(u.expandedStates[a]);else o.push(u.contents);break;case S:case T:case P:case O:case L:o.push(u.contents);break;case U:case M:case v:case I:case x:case b:break;default:throw new q(u)}}}var xe=Bu;var ar=()=>{},z=ar,ze=ar;function ie(t){return z(t),{type:T,contents:t}}function oe(t,e){return z(e),{type:S,contents:e,n:t}}function xt(t,e={}){return z(t),ze(e.expandedStates,!0),{type:A,id:e.id,contents:t,break:!!e.shouldBreak,expandedStates:e.expandedStates}}function Dr(t){return oe(Number.NEGATIVE_INFINITY,t)}function cr(t){return oe({type:\"root\"},t)}function lr(t){return oe(-1,t)}function fr(t,e){return xt(t[0],{...e,expandedStates:t})}function Ge(t){return ze(t),{type:k,parts:t}}function pr(t,e=\"\",r={}){return z(t),e!==\"\"&&z(e),{type:B,breakContents:t,flatContents:e,groupId:r.groupId}}function dr(t,e){return z(t),{type:P,contents:t,groupId:e.groupId,negate:e.negate}}function _e(t){return z(t),{type:L,contents:t}}var Fr={type:I},le={type:b},mr={type:v},Ae={type:x,hard:!0},_t={type:x,hard:!0,literal:!0},Ke={type:x},Er={type:x,soft:!0},G=[Ae,le],He=[_t,le],Be={type:M};function ke(t,e){z(t),ze(e);let r=[];for(let n=0;n<e.length;n++)n!==0&&r.push(t),r.push(e[n]);return r}function qe(t,e,r){z(t);let n=t;if(e>0){for(let o=0;o<Math.floor(e/r);++o)n=ie(n);n=oe(e%r,n),n=oe(Number.NEGATIVE_INFINITY,n)}return n}function hr(t,e){return z(e),t?{type:O,label:t,contents:e}:e}var ku=(t,e,r)=>{if(!(t&&e==null))return Array.isArray(e)||typeof e==\"string\"?e[r<0?e.length+r:r]:e.at(r)},y=ku;function Cr(t){let e=t.indexOf(\"\\r\");return e>=0?t.charAt(e+1)===`\n`?\"crlf\":\"cr\":\"lf\"}function be(t){switch(t){case\"cr\":return\"\\r\";case\"crlf\":return`\\r\n`;default:return`\n`}}function At(t,e){let r;switch(e){case`\n`:r=/\\n/g;break;case\"\\r\":r=/\\r/g;break;case`\\r\n`:r=/\\r\\n/g;break;default:throw new Error(`Unexpected \"eol\" ${JSON.stringify(e)}.`)}let n=t.match(r);return n?n.length:0}function gr(t){return ee(!1,t,/\\r\\n?/g,`\n`)}var yr=()=>/[#*0-9]\\uFE0F?\\u20E3|[\\xA9\\xAE\\u203C\\u2049\\u2122\\u2139\\u2194-\\u2199\\u21A9\\u21AA\\u231A\\u231B\\u2328\\u23CF\\u23ED-\\u23EF\\u23F1\\u23F2\\u23F8-\\u23FA\\u24C2\\u25AA\\u25AB\\u25B6\\u25C0\\u25FB\\u25FC\\u25FE\\u2600-\\u2604\\u260E\\u2611\\u2614\\u2615\\u2618\\u2620\\u2622\\u2623\\u2626\\u262A\\u262E\\u262F\\u2638-\\u263A\\u2640\\u2642\\u2648-\\u2653\\u265F\\u2660\\u2663\\u2665\\u2666\\u2668\\u267B\\u267E\\u267F\\u2692\\u2694-\\u2697\\u2699\\u269B\\u269C\\u26A0\\u26A7\\u26AA\\u26B0\\u26B1\\u26BD\\u26BE\\u26C4\\u26C8\\u26CF\\u26D1\\u26D3\\u26E9\\u26F0-\\u26F5\\u26F7\\u26F8\\u26FA\\u2702\\u2708\\u2709\\u270F\\u2712\\u2714\\u2716\\u271D\\u2721\\u2733\\u2734\\u2744\\u2747\\u2757\\u2763\\u27A1\\u2934\\u2935\\u2B05-\\u2B07\\u2B1B\\u2B1C\\u2B55\\u3030\\u303D\\u3297\\u3299]\\uFE0F?|[\\u261D\\u270C\\u270D](?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])?|[\\u270A\\u270B](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\u23E9-\\u23EC\\u23F0\\u23F3\\u25FD\\u2693\\u26A1\\u26AB\\u26C5\\u26CE\\u26D4\\u26EA\\u26FD\\u2705\\u2728\\u274C\\u274E\\u2753-\\u2755\\u2795-\\u2797\\u27B0\\u27BF\\u2B50]|\\u26F9(?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|\\u2764\\uFE0F?(?:\\u200D(?:\\uD83D\\uDD25|\\uD83E\\uDE79))?|\\uD83C(?:[\\uDC04\\uDD70\\uDD71\\uDD7E\\uDD7F\\uDE02\\uDE37\\uDF21\\uDF24-\\uDF2C\\uDF36\\uDF7D\\uDF96\\uDF97\\uDF99-\\uDF9B\\uDF9E\\uDF9F\\uDFCD\\uDFCE\\uDFD4-\\uDFDF\\uDFF5\\uDFF7]\\uFE0F?|[\\uDF85\\uDFC2\\uDFC7](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDFC3\\uDFC4\\uDFCA](?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDFCB\\uDFCC](?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDCCF\\uDD8E\\uDD91-\\uDD9A\\uDE01\\uDE1A\\uDE2F\\uDE32-\\uDE36\\uDE38-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF20\\uDF2D-\\uDF35\\uDF37-\\uDF7C\\uDF7E-\\uDF84\\uDF86-\\uDF93\\uDFA0-\\uDFC1\\uDFC5\\uDFC6\\uDFC8\\uDFC9\\uDFCF-\\uDFD3\\uDFE0-\\uDFF0\\uDFF8-\\uDFFF]|\\uDDE6\\uD83C[\\uDDE8-\\uDDEC\\uDDEE\\uDDF1\\uDDF2\\uDDF4\\uDDF6-\\uDDFA\\uDDFC\\uDDFD\\uDDFF]|\\uDDE7\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEF\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9\\uDDFB\\uDDFC\\uDDFE\\uDDFF]|\\uDDE8\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDEE\\uDDF0-\\uDDF5\\uDDF7\\uDDFA-\\uDDFF]|\\uDDE9\\uD83C[\\uDDEA\\uDDEC\\uDDEF\\uDDF0\\uDDF2\\uDDF4\\uDDFF]|\\uDDEA\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDED\\uDDF7-\\uDDFA]|\\uDDEB\\uD83C[\\uDDEE-\\uDDF0\\uDDF2\\uDDF4\\uDDF7]|\\uDDEC\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEE\\uDDF1-\\uDDF3\\uDDF5-\\uDDFA\\uDDFC\\uDDFE]|\\uDDED\\uD83C[\\uDDF0\\uDDF2\\uDDF3\\uDDF7\\uDDF9\\uDDFA]|\\uDDEE\\uD83C[\\uDDE8-\\uDDEA\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9]|\\uDDEF\\uD83C[\\uDDEA\\uDDF2\\uDDF4\\uDDF5]|\\uDDF0\\uD83C[\\uDDEA\\uDDEC-\\uDDEE\\uDDF2\\uDDF3\\uDDF5\\uDDF7\\uDDFC\\uDDFE\\uDDFF]|\\uDDF1\\uD83C[\\uDDE6-\\uDDE8\\uDDEE\\uDDF0\\uDDF7-\\uDDFB\\uDDFE]|\\uDDF2\\uD83C[\\uDDE6\\uDDE8-\\uDDED\\uDDF0-\\uDDFF]|\\uDDF3\\uD83C[\\uDDE6\\uDDE8\\uDDEA-\\uDDEC\\uDDEE\\uDDF1\\uDDF4\\uDDF5\\uDDF7\\uDDFA\\uDDFF]|\\uDDF4\\uD83C\\uDDF2|\\uDDF5\\uD83C[\\uDDE6\\uDDEA-\\uDDED\\uDDF0-\\uDDF3\\uDDF7-\\uDDF9\\uDDFC\\uDDFE]|\\uDDF6\\uD83C\\uDDE6|\\uDDF7\\uD83C[\\uDDEA\\uDDF4\\uDDF8\\uDDFA\\uDDFC]|\\uDDF8\\uD83C[\\uDDE6-\\uDDEA\\uDDEC-\\uDDF4\\uDDF7-\\uDDF9\\uDDFB\\uDDFD-\\uDDFF]|\\uDDF9\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDED\\uDDEF-\\uDDF4\\uDDF7\\uDDF9\\uDDFB\\uDDFC\\uDDFF]|\\uDDFA\\uD83C[\\uDDE6\\uDDEC\\uDDF2\\uDDF3\\uDDF8\\uDDFE\\uDDFF]|\\uDDFB\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDEE\\uDDF3\\uDDFA]|\\uDDFC\\uD83C[\\uDDEB\\uDDF8]|\\uDDFD\\uD83C\\uDDF0|\\uDDFE\\uD83C[\\uDDEA\\uDDF9]|\\uDDFF\\uD83C[\\uDDE6\\uDDF2\\uDDFC]|\\uDFF3\\uFE0F?(?:\\u200D(?:\\u26A7\\uFE0F?|\\uD83C\\uDF08))?|\\uDFF4(?:\\u200D\\u2620\\uFE0F?|\\uDB40\\uDC67\\uDB40\\uDC62\\uDB40(?:\\uDC65\\uDB40\\uDC6E\\uDB40\\uDC67|\\uDC73\\uDB40\\uDC63\\uDB40\\uDC74|\\uDC77\\uDB40\\uDC6C\\uDB40\\uDC73)\\uDB40\\uDC7F)?)|\\uD83D(?:[\\uDC08\\uDC26](?:\\u200D\\u2B1B)?|[\\uDC3F\\uDCFD\\uDD49\\uDD4A\\uDD6F\\uDD70\\uDD73\\uDD76-\\uDD79\\uDD87\\uDD8A-\\uDD8D\\uDDA5\\uDDA8\\uDDB1\\uDDB2\\uDDBC\\uDDC2-\\uDDC4\\uDDD1-\\uDDD3\\uDDDC-\\uDDDE\\uDDE1\\uDDE3\\uDDE8\\uDDEF\\uDDF3\\uDDFA\\uDECB\\uDECD-\\uDECF\\uDEE0-\\uDEE5\\uDEE9\\uDEF0\\uDEF3]\\uFE0F?|[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66\\uDC67\\uDC6B-\\uDC6D\\uDC72\\uDC74-\\uDC76\\uDC78\\uDC7C\\uDC83\\uDC85\\uDC8F\\uDC91\\uDCAA\\uDD7A\\uDD95\\uDD96\\uDE4C\\uDE4F\\uDEC0\\uDECC](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDC6E\\uDC70\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6](?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDD74\\uDD90](?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDC00-\\uDC07\\uDC09-\\uDC14\\uDC16-\\uDC25\\uDC27-\\uDC3A\\uDC3C-\\uDC3E\\uDC40\\uDC44\\uDC45\\uDC51-\\uDC65\\uDC6A\\uDC79-\\uDC7B\\uDC7D-\\uDC80\\uDC84\\uDC88-\\uDC8E\\uDC90\\uDC92-\\uDCA9\\uDCAB-\\uDCFC\\uDCFF-\\uDD3D\\uDD4B-\\uDD4E\\uDD50-\\uDD67\\uDDA4\\uDDFB-\\uDE2D\\uDE2F-\\uDE34\\uDE37-\\uDE44\\uDE48-\\uDE4A\\uDE80-\\uDEA2\\uDEA4-\\uDEB3\\uDEB7-\\uDEBF\\uDEC1-\\uDEC5\\uDED0-\\uDED2\\uDED5-\\uDED7\\uDEDC-\\uDEDF\\uDEEB\\uDEEC\\uDEF4-\\uDEFC\\uDFE0-\\uDFEB\\uDFF0]|\\uDC15(?:\\u200D\\uD83E\\uDDBA)?|\\uDC3B(?:\\u200D\\u2744\\uFE0F?)?|\\uDC41\\uFE0F?(?:\\u200D\\uD83D\\uDDE8\\uFE0F?)?|\\uDC68(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDC68\\uDC69]\\u200D\\uD83D(?:\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?)|[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?)|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C(?:\\uDFFB(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFC-\\uDFFF])))?|\\uDFFC(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])))?|\\uDFFD(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])))?|\\uDFFE(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])))?|\\uDFFF(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB-\\uDFFE])))?))?|\\uDC69(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?[\\uDC68\\uDC69]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?|\\uDC69\\u200D\\uD83D(?:\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?))|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C(?:\\uDFFB(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFC-\\uDFFF])))?|\\uDFFC(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])))?|\\uDFFD(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])))?|\\uDFFE(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])))?|\\uDFFF(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB-\\uDFFE])))?))?|\\uDC6F(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|\\uDD75(?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|\\uDE2E(?:\\u200D\\uD83D\\uDCA8)?|\\uDE35(?:\\u200D\\uD83D\\uDCAB)?|\\uDE36(?:\\u200D\\uD83C\\uDF2B\\uFE0F?)?)|\\uD83E(?:[\\uDD0C\\uDD0F\\uDD18-\\uDD1F\\uDD30-\\uDD34\\uDD36\\uDD77\\uDDB5\\uDDB6\\uDDBB\\uDDD2\\uDDD3\\uDDD5\\uDEC3-\\uDEC5\\uDEF0\\uDEF2-\\uDEF8](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD4\\uDDD6-\\uDDDD](?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDDDE\\uDDDF](?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDD0D\\uDD0E\\uDD10-\\uDD17\\uDD20-\\uDD25\\uDD27-\\uDD2F\\uDD3A\\uDD3F-\\uDD45\\uDD47-\\uDD76\\uDD78-\\uDDB4\\uDDB7\\uDDBA\\uDDBC-\\uDDCC\\uDDD0\\uDDE0-\\uDDFF\\uDE70-\\uDE7C\\uDE80-\\uDE88\\uDE90-\\uDEBD\\uDEBF-\\uDEC2\\uDECE-\\uDEDB\\uDEE0-\\uDEE8]|\\uDD3C(?:\\u200D[\\u2640\\u2642]\\uFE0F?|\\uD83C[\\uDFFB-\\uDFFF])?|\\uDDD1(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83E\\uDDD1))|\\uD83C(?:\\uDFFB(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFC-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?|\\uDFFC(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB\\uDFFD-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?|\\uDFFD(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?|\\uDFFE(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFD\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?|\\uDFFF(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFE]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?))?|\\uDEF1(?:\\uD83C(?:\\uDFFB(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFC-\\uDFFF])?|\\uDFFC(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])?|\\uDFFD(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])?|\\uDFFE(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])?|\\uDFFF(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB-\\uDFFE])?))?)/g;var xr={eastAsianWidth(t){var e=t.charCodeAt(0),r=t.length==2?t.charCodeAt(1):0,n=e;return 55296<=e&&e<=56319&&56320<=r&&r<=57343&&(e&=1023,r&=1023,n=e<<10|r,n+=65536),n==12288||65281<=n&&n<=65376||65504<=n&&n<=65510?\"F\":4352<=n&&n<=4447||4515<=n&&n<=4519||4602<=n&&n<=4607||9001<=n&&n<=9002||11904<=n&&n<=11929||11931<=n&&n<=12019||12032<=n&&n<=12245||12272<=n&&n<=12283||12289<=n&&n<=12350||12353<=n&&n<=12438||12441<=n&&n<=12543||12549<=n&&n<=12589||12593<=n&&n<=12686||12688<=n&&n<=12730||12736<=n&&n<=12771||12784<=n&&n<=12830||12832<=n&&n<=12871||12880<=n&&n<=13054||13056<=n&&n<=19903||19968<=n&&n<=42124||42128<=n&&n<=42182||43360<=n&&n<=43388||44032<=n&&n<=55203||55216<=n&&n<=55238||55243<=n&&n<=55291||63744<=n&&n<=64255||65040<=n&&n<=65049||65072<=n&&n<=65106||65108<=n&&n<=65126||65128<=n&&n<=65131||110592<=n&&n<=110593||127488<=n&&n<=127490||127504<=n&&n<=127546||127552<=n&&n<=127560||127568<=n&&n<=127569||131072<=n&&n<=194367||177984<=n&&n<=196605||196608<=n&&n<=262141?\"W\":\"N\"}};var bu=/[^\\x20-\\x7F]/;function wu(t){if(!t)return 0;if(!bu.test(t))return t.length;t=t.replace(yr(),\"  \");let e=0;for(let r of t){let n=r.codePointAt(0);if(n<=31||n>=127&&n<=159||n>=768&&n<=879)continue;let o=xr.eastAsianWidth(r);e+=o===\"F\"||o===\"W\"?2:1}return e}var we=wu;var Br=t=>{if(Array.isArray(t))return t;if(t.type!==k)throw new Error(`Expect doc to be 'array' or '${k}'.`);return t.parts};function Ne(t,e){if(typeof t==\"string\")return e(t);let r=new Map;return n(t);function n(u){if(r.has(u))return r.get(u);let i=o(u);return r.set(u,i),i}function o(u){switch(W(u)){case j:return e(u.map(n));case k:return e({...u,parts:u.parts.map(n)});case B:return e({...u,breakContents:n(u.breakContents),flatContents:n(u.flatContents)});case A:{let{expandedStates:i,contents:s}=u;return i?(i=i.map(n),s=i[0]):s=n(s),e({...u,contents:s,expandedStates:i})}case S:case T:case P:case O:case L:return e({...u,contents:n(u.contents)});case U:case M:case v:case I:case x:case b:return e(u);default:throw new q(u)}}}function Je(t,e,r){let n=r,o=!1;function u(i){if(o)return!1;let s=e(i);s!==void 0&&(o=!0,n=s)}return xe(t,u),n}function Ou(t){if(t.type===A&&t.break||t.type===x&&t.hard||t.type===b)return!0}function kr(t){return Je(t,Ou,!1)}function _r(t){if(t.length>0){let e=y(!1,t,-1);!e.expandedStates&&!e.break&&(e.break=\"propagated\")}return null}function br(t){let e=new Set,r=[];function n(u){if(u.type===b&&_r(r),u.type===A){if(r.push(u),e.has(u))return!1;e.add(u)}}function o(u){u.type===A&&r.pop().break&&_r(r)}xe(t,n,o,!0)}function Nu(t){return t.type===x&&!t.hard?t.soft?\"\":\" \":t.type===B?t.flatContents:t}function wr(t){return Ne(t,Nu)}function Ar(t){for(t=[...t];t.length>=2&&y(!1,t,-2).type===x&&y(!1,t,-1).type===b;)t.length-=2;if(t.length>0){let e=Oe(y(!1,t,-1));t[t.length-1]=e}return t}function Oe(t){switch(W(t)){case S:case T:case P:case A:case L:case O:{let e=Oe(t.contents);return{...t,contents:e}}case B:return{...t,breakContents:Oe(t.breakContents),flatContents:Oe(t.flatContents)};case k:return{...t,parts:Ar(t.parts)};case j:return Ar(t);case U:return t.replace(/[\\n\\r]*$/,\"\");case M:case v:case I:case x:case b:break;default:throw new q(t)}return t}function Xe(t){return Oe(Su(t))}function Tu(t){switch(W(t)){case k:if(t.parts.every(e=>e===\"\"))return\"\";break;case A:if(!t.contents&&!t.id&&!t.break&&!t.expandedStates)return\"\";if(t.contents.type===A&&t.contents.id===t.id&&t.contents.break===t.break&&t.contents.expandedStates===t.expandedStates)return t.contents;break;case S:case T:case P:case L:if(!t.contents)return\"\";break;case B:if(!t.flatContents&&!t.breakContents)return\"\";break;case j:{let e=[];for(let r of t){if(!r)continue;let[n,...o]=Array.isArray(r)?r:[r];typeof n==\"string\"&&typeof y(!1,e,-1)==\"string\"?e[e.length-1]+=n:e.push(n),e.push(...o)}return e.length===0?\"\":e.length===1?e[0]:e}case U:case M:case v:case I:case x:case O:case b:break;default:throw new q(t)}return t}function Su(t){return Ne(t,e=>Tu(e))}function Or(t,e=He){return Ne(t,r=>typeof r==\"string\"?ke(e,r.split(`\n`)):r)}function vu(t){if(t.type===x)return!0}function Nr(t){return Je(t,vu,!1)}function Ze(t,e){return t.type===O?{...t,contents:e(t.contents)}:e(t)}var R=Symbol(\"MODE_BREAK\"),K=Symbol(\"MODE_FLAT\"),Te=Symbol(\"cursor\");function Tr(){return{value:\"\",length:0,queue:[]}}function Pu(t,e){return Bt(t,{type:\"indent\"},e)}function Lu(t,e,r){return e===Number.NEGATIVE_INFINITY?t.root||Tr():e<0?Bt(t,{type:\"dedent\"},r):e?e.type===\"root\"?{...t,root:t}:Bt(t,{type:typeof e==\"string\"?\"stringAlign\":\"numberAlign\",n:e},r):t}function Bt(t,e,r){let n=e.type===\"dedent\"?t.queue.slice(0,-1):[...t.queue,e],o=\"\",u=0,i=0,s=0;for(let l of n)switch(l.type){case\"indent\":c(),r.useTabs?a(1):D(r.tabWidth);break;case\"stringAlign\":c(),o+=l.n,u+=l.n.length;break;case\"numberAlign\":i+=1,s+=l.n;break;default:throw new Error(`Unexpected type '${l.type}'`)}return f(),{...t,value:o,length:u,queue:n};function a(l){o+=\"\t\".repeat(l),u+=r.tabWidth*l}function D(l){o+=\" \".repeat(l),u+=l}function c(){r.useTabs?F():f()}function F(){i>0&&a(i),d()}function f(){s>0&&D(s),d()}function d(){i=0,s=0}}function kt(t){let e=0,r=0,n=t.length;e:for(;n--;){let o=t[n];if(o===Te){r++;continue}for(let u=o.length-1;u>=0;u--){let i=o[u];if(i===\" \"||i===\"\t\")e++;else{t[n]=o.slice(0,u+1);break e}}}if(e>0||r>0)for(t.length=n+1;r-- >0;)t.push(Te);return e}function Qe(t,e,r,n,o,u){if(r===Number.POSITIVE_INFINITY)return!0;let i=e.length,s=[t],a=[];for(;r>=0;){if(s.length===0){if(i===0)return!0;s.push(e[--i]);continue}let{mode:D,doc:c}=s.pop();switch(W(c)){case U:a.push(c),r-=we(c);break;case j:case k:{let F=Br(c);for(let f=F.length-1;f>=0;f--)s.push({mode:D,doc:F[f]});break}case T:case S:case P:case O:s.push({mode:D,doc:c.contents});break;case v:r+=kt(a);break;case A:{if(u&&c.break)return!1;let F=c.break?R:D,f=c.expandedStates&&F===R?y(!1,c.expandedStates,-1):c.contents;s.push({mode:F,doc:f});break}case B:{let f=(c.groupId?o[c.groupId]||K:D)===R?c.breakContents:c.flatContents;f&&s.push({mode:D,doc:f});break}case x:if(D===R||c.hard)return!0;c.soft||(a.push(\" \"),r--);break;case L:n=!0;break;case I:if(n)return!1;break}}return!1}function fe(t,e){let r={},n=e.printWidth,o=be(e.endOfLine),u=0,i=[{ind:Tr(),mode:R,doc:t}],s=[],a=!1,D=[],c=0;for(br(t);i.length>0;){let{ind:f,mode:d,doc:l}=i.pop();switch(W(l)){case U:{let p=o!==`\n`?ee(!1,l,`\n`,o):l;s.push(p),i.length>0&&(u+=we(p));break}case j:for(let p=l.length-1;p>=0;p--)i.push({ind:f,mode:d,doc:l[p]});break;case M:if(c>=2)throw new Error(\"There are too many 'cursor' in doc.\");s.push(Te),c++;break;case T:i.push({ind:Pu(f,e),mode:d,doc:l.contents});break;case S:i.push({ind:Lu(f,l.n,e),mode:d,doc:l.contents});break;case v:u-=kt(s);break;case A:switch(d){case K:if(!a){i.push({ind:f,mode:l.break?R:K,doc:l.contents});break}case R:{a=!1;let p={ind:f,mode:K,doc:l.contents},m=n-u,E=D.length>0;if(!l.break&&Qe(p,i,m,E,r))i.push(p);else if(l.expandedStates){let h=y(!1,l.expandedStates,-1);if(l.break){i.push({ind:f,mode:R,doc:h});break}else for(let g=1;g<l.expandedStates.length+1;g++)if(g>=l.expandedStates.length){i.push({ind:f,mode:R,doc:h});break}else{let C=l.expandedStates[g],_={ind:f,mode:K,doc:C};if(Qe(_,i,m,E,r)){i.push(_);break}}}else i.push({ind:f,mode:R,doc:l.contents});break}}l.id&&(r[l.id]=y(!1,i,-1).mode);break;case k:{let p=n-u,{parts:m}=l;if(m.length===0)break;let[E,h]=m,g={ind:f,mode:K,doc:E},C={ind:f,mode:R,doc:E},_=Qe(g,[],p,D.length>0,r,!0);if(m.length===1){_?i.push(g):i.push(C);break}let Z={ind:f,mode:K,doc:h},$={ind:f,mode:R,doc:h};if(m.length===2){_?i.push(Z,g):i.push($,C);break}m.splice(0,2);let Q={ind:f,mode:d,doc:Ge(m)},rr=m[0];Qe({ind:f,mode:K,doc:[E,h,rr]},[],p,D.length>0,r,!0)?i.push(Q,Z,g):_?i.push(Q,$,g):i.push(Q,$,C);break}case B:case P:{let p=l.groupId?r[l.groupId]:d;if(p===R){let m=l.type===B?l.breakContents:l.negate?l.contents:ie(l.contents);m&&i.push({ind:f,mode:d,doc:m})}if(p===K){let m=l.type===B?l.flatContents:l.negate?ie(l.contents):l.contents;m&&i.push({ind:f,mode:d,doc:m})}break}case L:D.push({ind:f,mode:d,doc:l.contents});break;case I:D.length>0&&i.push({ind:f,mode:d,doc:Ae});break;case x:switch(d){case K:if(l.hard)a=!0;else{l.soft||(s.push(\" \"),u+=1);break}case R:if(D.length>0){i.push({ind:f,mode:d,doc:l},...D.reverse()),D.length=0;break}l.literal?f.root?(s.push(o,f.root.value),u=f.root.length):(s.push(o),u=0):(u-=kt(s),s.push(o+f.value),u=f.length);break}break;case O:i.push({ind:f,mode:d,doc:l.contents});break;case b:break;default:throw new q(l)}i.length===0&&D.length>0&&(i.push(...D.reverse()),D.length=0)}let F=s.indexOf(Te);if(F!==-1){let f=s.indexOf(Te,F+1),d=s.slice(0,F).join(\"\"),l=s.slice(F+1,f).join(\"\"),p=s.slice(f+1).join(\"\");return{formatted:d+l+p,cursorNodeStart:d.length,cursorNodeText:l}}return{formatted:s.join(\"\")}}function J(t){var e;if(!t)return\"\";if(Array.isArray(t)){let r=[];for(let n of t)if(Array.isArray(n))r.push(...J(n));else{let o=J(n);o!==\"\"&&r.push(o)}return r}return t.type===B?{...t,breakContents:J(t.breakContents),flatContents:J(t.flatContents)}:t.type===A?{...t,contents:J(t.contents),expandedStates:(e=t.expandedStates)==null?void 0:e.map(J)}:t.type===k?{type:\"fill\",parts:t.parts.map(J)}:t.contents?{...t,contents:J(t.contents)}:t}function Sr(t){let e=Object.create(null),r=new Set;return n(J(t));function n(u,i,s){var a,D;if(typeof u==\"string\")return JSON.stringify(u);if(Array.isArray(u)){let c=u.map(n).filter(Boolean);return c.length===1?c[0]:`[${c.join(\", \")}]`}if(u.type===x){let c=((a=s==null?void 0:s[i+1])==null?void 0:a.type)===b;return u.literal?c?\"literalline\":\"literallineWithoutBreakParent\":u.hard?c?\"hardline\":\"hardlineWithoutBreakParent\":u.soft?\"softline\":\"line\"}if(u.type===b)return((D=s==null?void 0:s[i-1])==null?void 0:D.type)===x&&s[i-1].hard?void 0:\"breakParent\";if(u.type===v)return\"trim\";if(u.type===T)return\"indent(\"+n(u.contents)+\")\";if(u.type===S)return u.n===Number.NEGATIVE_INFINITY?\"dedentToRoot(\"+n(u.contents)+\")\":u.n<0?\"dedent(\"+n(u.contents)+\")\":u.n.type===\"root\"?\"markAsRoot(\"+n(u.contents)+\")\":\"align(\"+JSON.stringify(u.n)+\", \"+n(u.contents)+\")\";if(u.type===B)return\"ifBreak(\"+n(u.breakContents)+(u.flatContents?\", \"+n(u.flatContents):\"\")+(u.groupId?(u.flatContents?\"\":', \"\"')+`, { groupId: ${o(u.groupId)} }`:\"\")+\")\";if(u.type===P){let c=[];u.negate&&c.push(\"negate: true\"),u.groupId&&c.push(`groupId: ${o(u.groupId)}`);let F=c.length>0?`, { ${c.join(\", \")} }`:\"\";return`indentIfBreak(${n(u.contents)}${F})`}if(u.type===A){let c=[];u.break&&u.break!==\"propagated\"&&c.push(\"shouldBreak: true\"),u.id&&c.push(`id: ${o(u.id)}`);let F=c.length>0?`, { ${c.join(\", \")} }`:\"\";return u.expandedStates?`conditionalGroup([${u.expandedStates.map(f=>n(f)).join(\",\")}]${F})`:`group(${n(u.contents)}${F})`}if(u.type===k)return`fill([${u.parts.map(c=>n(c)).join(\", \")}])`;if(u.type===L)return\"lineSuffix(\"+n(u.contents)+\")\";if(u.type===I)return\"lineSuffixBoundary\";if(u.type===O)return`label(${JSON.stringify(u.label)}, ${n(u.contents)})`;throw new Error(\"Unknown doc type \"+u.type)}function o(u){if(typeof u!=\"symbol\")return JSON.stringify(String(u));if(u in e)return e[u];let i=u.description||\"symbol\";for(let s=0;;s++){let a=i+(s>0?` #${s}`:\"\");if(!r.has(a))return r.add(a),e[u]=`Symbol.for(${JSON.stringify(a)})`}}}function Iu(t,e,r=0){let n=0;for(let o=r;o<t.length;++o)t[o]===\"\t\"?n=n+e-n%e:n++;return n}var pe=Iu;var Se=class extends Error{name=\"ConfigError\"},ve=class extends Error{name=\"UndefinedParserError\"};var vr={cursorOffset:{category:\"Special\",type:\"int\",default:-1,range:{start:-1,end:1/0,step:1},description:`Print (to stderr) where a cursor at the given position would move to after formatting.\nThis option cannot be used with --range-start and --range-end.`,cliCategory:\"Editor\"},endOfLine:{category:\"Global\",type:\"choice\",default:\"lf\",description:\"Which end of line characters to apply.\",choices:[{value:\"lf\",description:\"Line Feed only (\\\\n), common on Linux and macOS as well as inside git repos\"},{value:\"crlf\",description:\"Carriage Return + Line Feed characters (\\\\r\\\\n), common on Windows\"},{value:\"cr\",description:\"Carriage Return character only (\\\\r), used very rarely\"},{value:\"auto\",description:`Maintain existing\n(mixed values within one file are normalised by looking at what's used after the first line)`}]},filepath:{category:\"Special\",type:\"path\",description:\"Specify the input filepath. This will be used to do parser inference.\",cliName:\"stdin-filepath\",cliCategory:\"Other\",cliDescription:\"Path to the file to pretend that stdin comes from.\"},insertPragma:{category:\"Special\",type:\"boolean\",default:!1,description:\"Insert @format pragma into file's first docblock comment.\",cliCategory:\"Other\"},parser:{category:\"Global\",type:\"choice\",default:void 0,description:\"Which parser to use.\",exception:t=>typeof t==\"string\"||typeof t==\"function\",choices:[{value:\"flow\",description:\"Flow\"},{value:\"babel\",description:\"JavaScript\"},{value:\"babel-flow\",description:\"Flow\"},{value:\"babel-ts\",description:\"TypeScript\"},{value:\"typescript\",description:\"TypeScript\"},{value:\"acorn\",description:\"JavaScript\"},{value:\"espree\",description:\"JavaScript\"},{value:\"meriyah\",description:\"JavaScript\"},{value:\"css\",description:\"CSS\"},{value:\"less\",description:\"Less\"},{value:\"scss\",description:\"SCSS\"},{value:\"json\",description:\"JSON\"},{value:\"json5\",description:\"JSON5\"},{value:\"json-stringify\",description:\"JSON.stringify\"},{value:\"graphql\",description:\"GraphQL\"},{value:\"markdown\",description:\"Markdown\"},{value:\"mdx\",description:\"MDX\"},{value:\"vue\",description:\"Vue\"},{value:\"yaml\",description:\"YAML\"},{value:\"glimmer\",description:\"Ember / Handlebars\"},{value:\"html\",description:\"HTML\"},{value:\"angular\",description:\"Angular\"},{value:\"lwc\",description:\"Lightning Web Components\"}]},plugins:{type:\"path\",array:!0,default:[{value:[]}],category:\"Global\",description:\"Add a plugin. Multiple plugins can be passed as separate `--plugin`s.\",exception:t=>typeof t==\"string\"||typeof t==\"object\",cliName:\"plugin\",cliCategory:\"Config\"},printWidth:{category:\"Global\",type:\"int\",default:80,description:\"The line length where Prettier will try wrap.\",range:{start:0,end:1/0,step:1}},rangeEnd:{category:\"Special\",type:\"int\",default:1/0,range:{start:0,end:1/0,step:1},description:`Format code ending at a given character offset (exclusive).\nThe range will extend forwards to the end of the selected statement.\nThis option cannot be used with --cursor-offset.`,cliCategory:\"Editor\"},rangeStart:{category:\"Special\",type:\"int\",default:0,range:{start:0,end:1/0,step:1},description:`Format code starting at a given character offset.\nThe range will extend backwards to the start of the first line containing the selected statement.\nThis option cannot be used with --cursor-offset.`,cliCategory:\"Editor\"},requirePragma:{category:\"Special\",type:\"boolean\",default:!1,description:`Require either '@prettier' or '@format' to be present in the file's first docblock comment\nin order for it to be formatted.`,cliCategory:\"Other\"},tabWidth:{type:\"int\",category:\"Global\",default:2,description:\"Number of spaces per indentation level.\",range:{start:0,end:1/0,step:1}},useTabs:{category:\"Global\",type:\"boolean\",default:!1,description:\"Indent with tabs instead of spaces.\"},embeddedLanguageFormatting:{category:\"Global\",type:\"choice\",default:\"auto\",description:\"Control how Prettier formats quoted code embedded in the file.\",choices:[{value:\"auto\",description:\"Format embedded code if Prettier can automatically identify it.\"},{value:\"off\",description:\"Never automatically format embedded code.\"}]}};function et({plugins:t=[],showDeprecated:e=!1}={}){let r=t.flatMap(o=>o.languages??[]),n=[];for(let o of Yu(Object.assign({},...t.map(({options:u})=>u),vr)))!e&&o.deprecated||(Array.isArray(o.choices)&&(e||(o.choices=o.choices.filter(u=>!u.deprecated)),o.name===\"parser\"&&(o.choices=[...o.choices,...Ru(o.choices,r,t)])),o.pluginDefaults=Object.fromEntries(t.filter(u=>{var i;return((i=u.defaultOptions)==null?void 0:i[o.name])!==void 0}).map(u=>[u.name,u.defaultOptions[o.name]])),n.push(o));return{languages:r,options:n}}function*Ru(t,e,r){let n=new Set(t.map(o=>o.value));for(let o of e)if(o.parsers){for(let u of o.parsers)if(!n.has(u)){n.add(u);let i=r.find(a=>a.parsers&&Object.prototype.hasOwnProperty.call(a.parsers,u)),s=o.name;i!=null&&i.name&&(s+=` (plugin: ${i.name})`),yield{value:u,description:s}}}}function Yu(t){let e=[];for(let[r,n]of Object.entries(t)){let o={name:r,...n};Array.isArray(o.default)&&(o.default=y(!1,o.default,-1).value),e.push(o)}return e}var ju=t=>t.split(/[/\\\\]/).pop();function Pr(t,e){if(!e)return;let r=ju(e).toLowerCase();return t.find(n=>{var o,u;return((o=n.extensions)==null?void 0:o.some(i=>r.endsWith(i)))||((u=n.filenames)==null?void 0:u.some(i=>i.toLowerCase()===r))})}function Vu(t,e){if(e)return t.find(({name:r})=>r.toLowerCase()===e)??t.find(({aliases:r})=>r==null?void 0:r.includes(e))??t.find(({extensions:r})=>r==null?void 0:r.includes(`.${e}`))}function $u(t,e){let r=t.plugins.flatMap(o=>o.languages??[]),n=Vu(r,e.language)??Pr(r,e.physicalFile)??Pr(r,e.file)??(e.physicalFile,void 0);return n==null?void 0:n.parsers[0]}var Lr=$u;var te={key:t=>/^[$_a-zA-Z][$_a-zA-Z0-9]*$/.test(t)?t:JSON.stringify(t),value(t){if(t===null||typeof t!=\"object\")return JSON.stringify(t);if(Array.isArray(t))return`[${t.map(r=>te.value(r)).join(\", \")}]`;let e=Object.keys(t);return e.length===0?\"{}\":`{ ${e.map(r=>`${te.key(r)}: ${te.value(t[r])}`).join(\", \")} }`},pair:({key:t,value:e})=>te.value({[t]:e})};var bt=Ce(Pe(),1),Yr=(t,e,{descriptor:r})=>{let n=[`${bt.default.yellow(typeof t==\"string\"?r.key(t):r.pair(t))} is deprecated`];return e&&n.push(`we now treat it as ${bt.default.blue(typeof e==\"string\"?r.key(e):r.pair(e))}`),n.join(\"; \")+\".\"};var se=Ce(Pe(),1);var tt=Symbol.for(\"vnopts.VALUE_NOT_EXIST\"),de=Symbol.for(\"vnopts.VALUE_UNCHANGED\");var jr=\" \".repeat(2),$r=(t,e,r)=>{let{text:n,list:o}=r.normalizeExpectedResult(r.schemas[t].expected(r)),u=[];return n&&u.push(Vr(t,e,n,r.descriptor)),o&&u.push([Vr(t,e,o.title,r.descriptor)].concat(o.values.map(i=>Ur(i,r.loggerPrintWidth))).join(`\n`)),Mr(u,r.loggerPrintWidth)};function Vr(t,e,r,n){return[`Invalid ${se.default.red(n.key(t))} value.`,`Expected ${se.default.blue(r)},`,`but received ${e===tt?se.default.gray(\"nothing\"):se.default.red(n.value(e))}.`].join(\" \")}function Ur({text:t,list:e},r){let n=[];return t&&n.push(`- ${se.default.blue(t)}`),e&&n.push([`- ${se.default.blue(e.title)}:`].concat(e.values.map(o=>Ur(o,r-jr.length).replace(/^|\\n/g,`$&${jr}`))).join(`\n`)),Mr(n,r)}function Mr(t,e){if(t.length===1)return t[0];let[r,n]=t,[o,u]=t.map(i=>i.split(`\n`,1)[0].length);return o>e&&o>u?n:r}var Nt=Ce(Pe(),1);var wt=[],Wr=[];function Ot(t,e){if(t===e)return 0;let r=t;t.length>e.length&&(t=e,e=r);let n=t.length,o=e.length;for(;n>0&&t.charCodeAt(~-n)===e.charCodeAt(~-o);)n--,o--;let u=0;for(;u<n&&t.charCodeAt(u)===e.charCodeAt(u);)u++;if(n-=u,o-=u,n===0)return o;let i,s,a,D,c=0,F=0;for(;c<n;)Wr[c]=t.charCodeAt(u+c),wt[c]=++c;for(;F<o;)for(i=e.charCodeAt(u+F),a=F++,s=F,c=0;c<n;c++)D=i===Wr[c]?a:a+1,a=wt[c],s=wt[c]=a>s?D>s?s+1:D:D>a?a+1:D;return s}var rt=(t,e,{descriptor:r,logger:n,schemas:o})=>{let u=[`Ignored unknown option ${Nt.default.yellow(r.pair({key:t,value:e}))}.`],i=Object.keys(o).sort().find(s=>Ot(t,s)<3);i&&u.push(`Did you mean ${Nt.default.blue(r.key(i))}?`),n.warn(u.join(\" \"))};var Uu=[\"default\",\"expected\",\"validate\",\"deprecated\",\"forward\",\"redirect\",\"overlap\",\"preprocess\",\"postprocess\"];function Mu(t,e){let r=new t(e),n=Object.create(r);for(let o of Uu)o in e&&(n[o]=Wu(e[o],r,w.prototype[o].length));return n}var w=class{static create(e){return Mu(this,e)}constructor(e){this.name=e.name}default(e){}expected(e){return\"nothing\"}validate(e,r){return!1}deprecated(e,r){return!1}forward(e,r){}redirect(e,r){}overlap(e,r,n){return e}preprocess(e,r){return e}postprocess(e,r){return de}};function Wu(t,e,r){return typeof t==\"function\"?(...n)=>t(...n.slice(0,r-1),e,...n.slice(r-1)):()=>t}var nt=class extends w{constructor(e){super(e),this._sourceName=e.sourceName}expected(e){return e.schemas[this._sourceName].expected(e)}validate(e,r){return r.schemas[this._sourceName].validate(e,r)}redirect(e,r){return this._sourceName}};var ut=class extends w{expected(){return\"anything\"}validate(){return!0}};var ot=class extends w{constructor({valueSchema:e,name:r=e.name,...n}){super({...n,name:r}),this._valueSchema=e}expected(e){let{text:r,list:n}=e.normalizeExpectedResult(this._valueSchema.expected(e));return{text:r&&`an array of ${r}`,list:n&&{title:\"an array of the following values\",values:[{list:n}]}}}validate(e,r){if(!Array.isArray(e))return!1;let n=[];for(let o of e){let u=r.normalizeValidateResult(this._valueSchema.validate(o,r),o);u!==!0&&n.push(u.value)}return n.length===0?!0:{value:n}}deprecated(e,r){let n=[];for(let o of e){let u=r.normalizeDeprecatedResult(this._valueSchema.deprecated(o,r),o);u!==!1&&n.push(...u.map(({value:i})=>({value:[i]})))}return n}forward(e,r){let n=[];for(let o of e){let u=r.normalizeForwardResult(this._valueSchema.forward(o,r),o);n.push(...u.map(zr))}return n}redirect(e,r){let n=[],o=[];for(let u of e){let i=r.normalizeRedirectResult(this._valueSchema.redirect(u,r),u);\"remain\"in i&&n.push(i.remain),o.push(...i.redirect.map(zr))}return n.length===0?{redirect:o}:{redirect:o,remain:n}}overlap(e,r){return e.concat(r)}};function zr({from:t,to:e}){return{from:[t],to:e}}var it=class extends w{expected(){return\"true or false\"}validate(e){return typeof e==\"boolean\"}};function Kr(t,e){let r=Object.create(null);for(let n of t){let o=n[e];if(r[o])throw new Error(`Duplicate ${e} ${JSON.stringify(o)}`);r[o]=n}return r}function Hr(t,e){let r=new Map;for(let n of t){let o=n[e];if(r.has(o))throw new Error(`Duplicate ${e} ${JSON.stringify(o)}`);r.set(o,n)}return r}function qr(){let t=Object.create(null);return e=>{let r=JSON.stringify(e);return t[r]?!0:(t[r]=!0,!1)}}function Jr(t,e){let r=[],n=[];for(let o of t)e(o)?r.push(o):n.push(o);return[r,n]}function Xr(t){return t===Math.floor(t)}function Zr(t,e){if(t===e)return 0;let r=typeof t,n=typeof e,o=[\"undefined\",\"object\",\"boolean\",\"number\",\"string\"];return r!==n?o.indexOf(r)-o.indexOf(n):r!==\"string\"?Number(t)-Number(e):t.localeCompare(e)}function Qr(t){return(...e)=>{let r=t(...e);return typeof r==\"string\"?new Error(r):r}}function Tt(t){return t===void 0?{}:t}function St(t){if(typeof t==\"string\")return{text:t};let{text:e,list:r}=t;return zu((e||r)!==void 0,\"Unexpected `expected` result, there should be at least one field.\"),r?{text:e,list:{title:r.title,values:r.values.map(St)}}:{text:e}}function vt(t,e){return t===!0?!0:t===!1?{value:e}:t}function Pt(t,e,r=!1){return t===!1?!1:t===!0?r?!0:[{value:e}]:\"value\"in t?[t]:t.length===0?!1:t}function Gr(t,e){return typeof t==\"string\"||\"key\"in t?{from:e,to:t}:\"from\"in t?{from:t.from,to:t.to}:{from:e,to:t.to}}function st(t,e){return t===void 0?[]:Array.isArray(t)?t.map(r=>Gr(r,e)):[Gr(t,e)]}function Lt(t,e){let r=st(typeof t==\"object\"&&\"redirect\"in t?t.redirect:t,e);return r.length===0?{remain:e,redirect:r}:typeof t==\"object\"&&\"remain\"in t?{remain:t.remain,redirect:r}:{redirect:r}}function zu(t,e){if(!t)throw new Error(e)}var at=class extends w{constructor(e){super(e),this._choices=Hr(e.choices.map(r=>r&&typeof r==\"object\"?r:{value:r}),\"value\")}expected({descriptor:e}){let r=Array.from(this._choices.keys()).map(i=>this._choices.get(i)).filter(({hidden:i})=>!i).map(i=>i.value).sort(Zr).map(e.value),n=r.slice(0,-2),o=r.slice(-2);return{text:n.concat(o.join(\" or \")).join(\", \"),list:{title:\"one of the following values\",values:r}}}validate(e){return this._choices.has(e)}deprecated(e){let r=this._choices.get(e);return r&&r.deprecated?{value:e}:!1}forward(e){let r=this._choices.get(e);return r?r.forward:void 0}redirect(e){let r=this._choices.get(e);return r?r.redirect:void 0}};var Dt=class extends w{expected(){return\"a number\"}validate(e,r){return typeof e==\"number\"}};var ct=class extends Dt{expected(){return\"an integer\"}validate(e,r){return r.normalizeValidateResult(super.validate(e,r),e)===!0&&Xr(e)}};var Le=class extends w{expected(){return\"a string\"}validate(e){return typeof e==\"string\"}};var en=te,tn=rt,rn=$r,nn=Yr;var lt=class{constructor(e,r){let{logger:n=console,loggerPrintWidth:o=80,descriptor:u=en,unknown:i=tn,invalid:s=rn,deprecated:a=nn,missing:D=()=>!1,required:c=()=>!1,preprocess:F=d=>d,postprocess:f=()=>de}=r||{};this._utils={descriptor:u,logger:n||{warn:()=>{}},loggerPrintWidth:o,schemas:Kr(e,\"name\"),normalizeDefaultResult:Tt,normalizeExpectedResult:St,normalizeDeprecatedResult:Pt,normalizeForwardResult:st,normalizeRedirectResult:Lt,normalizeValidateResult:vt},this._unknownHandler=i,this._invalidHandler=Qr(s),this._deprecatedHandler=a,this._identifyMissing=(d,l)=>!(d in l)||D(d,l),this._identifyRequired=c,this._preprocess=F,this._postprocess=f,this.cleanHistory()}cleanHistory(){this._hasDeprecationWarned=qr()}normalize(e){let r={},o=[this._preprocess(e,this._utils)],u=()=>{for(;o.length!==0;){let i=o.shift(),s=this._applyNormalization(i,r);o.push(...s)}};u();for(let i of Object.keys(this._utils.schemas)){let s=this._utils.schemas[i];if(!(i in r)){let a=Tt(s.default(this._utils));\"value\"in a&&o.push({[i]:a.value})}}u();for(let i of Object.keys(this._utils.schemas)){if(!(i in r))continue;let s=this._utils.schemas[i],a=r[i],D=s.postprocess(a,this._utils);D!==de&&(this._applyValidation(D,i,s),r[i]=D)}return this._applyPostprocess(r),this._applyRequiredCheck(r),r}_applyNormalization(e,r){let n=[],{knownKeys:o,unknownKeys:u}=this._partitionOptionKeys(e);for(let i of o){let s=this._utils.schemas[i],a=s.preprocess(e[i],this._utils);this._applyValidation(a,i,s);let D=({from:d,to:l})=>{n.push(typeof l==\"string\"?{[l]:d}:{[l.key]:l.value})},c=({value:d,redirectTo:l})=>{let p=Pt(s.deprecated(d,this._utils),a,!0);if(p!==!1)if(p===!0)this._hasDeprecationWarned(i)||this._utils.logger.warn(this._deprecatedHandler(i,l,this._utils));else for(let{value:m}of p){let E={key:i,value:m};if(!this._hasDeprecationWarned(E)){let h=typeof l==\"string\"?{key:l,value:m}:l;this._utils.logger.warn(this._deprecatedHandler(E,h,this._utils))}}};st(s.forward(a,this._utils),a).forEach(D);let f=Lt(s.redirect(a,this._utils),a);if(f.redirect.forEach(D),\"remain\"in f){let d=f.remain;r[i]=i in r?s.overlap(r[i],d,this._utils):d,c({value:d})}for(let{from:d,to:l}of f.redirect)c({value:d,redirectTo:l})}for(let i of u){let s=e[i];this._applyUnknownHandler(i,s,r,(a,D)=>{n.push({[a]:D})})}return n}_applyRequiredCheck(e){for(let r of Object.keys(this._utils.schemas))if(this._identifyMissing(r,e)&&this._identifyRequired(r))throw this._invalidHandler(r,tt,this._utils)}_partitionOptionKeys(e){let[r,n]=Jr(Object.keys(e).filter(o=>!this._identifyMissing(o,e)),o=>o in this._utils.schemas);return{knownKeys:r,unknownKeys:n}}_applyValidation(e,r,n){let o=vt(n.validate(e,this._utils),e);if(o!==!0)throw this._invalidHandler(r,o.value,this._utils)}_applyUnknownHandler(e,r,n,o){let u=this._unknownHandler(e,r,this._utils);if(u)for(let i of Object.keys(u)){if(this._identifyMissing(i,u))continue;let s=u[i];i in this._utils.schemas?o(i,s):n[i]=s}}_applyPostprocess(e){let r=this._postprocess(e,this._utils);if(r!==de){if(r.delete)for(let n of r.delete)delete e[n];if(r.override){let{knownKeys:n,unknownKeys:o}=this._partitionOptionKeys(r.override);for(let u of n){let i=r.override[u];this._applyValidation(i,u,this._utils.schemas[u]),e[u]=i}for(let u of o){let i=r.override[u];this._applyUnknownHandler(u,i,e,(s,a)=>{let D=this._utils.schemas[s];this._applyValidation(a,s,D),e[s]=a})}}}}};var It;function Ku(t,e,{logger:r=!1,isCLI:n=!1,passThrough:o=!1,FlagSchema:u,descriptor:i}={}){if(n){if(!u)throw new Error(\"'FlagSchema' option is required.\");if(!i)throw new Error(\"'descriptor' option is required.\")}else i=te;let s=o?Array.isArray(o)?(f,d)=>o.includes(f)?{[f]:d}:void 0:(f,d)=>({[f]:d}):(f,d,l)=>{let{_:p,...m}=l.schemas;return rt(f,d,{...l,schemas:m})},a=Hu(e,{isCLI:n,FlagSchema:u}),D=new lt(a,{logger:r,unknown:s,descriptor:i}),c=r!==!1;c&&It&&(D._hasDeprecationWarned=It);let F=D.normalize(t);return c&&(It=D._hasDeprecationWarned),F}function Hu(t,{isCLI:e,FlagSchema:r}){let n=[];e&&n.push(ut.create({name:\"_\"}));for(let o of t)n.push(qu(o,{isCLI:e,optionInfos:t,FlagSchema:r})),o.alias&&e&&n.push(nt.create({name:o.alias,sourceName:o.name}));return n}function qu(t,{isCLI:e,optionInfos:r,FlagSchema:n}){let{name:o}=t,u={name:o},i,s={};switch(t.type){case\"int\":i=ct,e&&(u.preprocess=Number);break;case\"string\":i=Le;break;case\"choice\":i=at,u.choices=t.choices.map(a=>a!=null&&a.redirect?{...a,redirect:{to:{key:t.name,value:a.redirect}}}:a);break;case\"boolean\":i=it;break;case\"flag\":i=n,u.flags=r.flatMap(a=>[a.alias,a.description&&a.name,a.oppositeDescription&&`no-${a.name}`].filter(Boolean));break;case\"path\":i=Le;break;default:throw new Error(`Unexpected type ${t.type}`)}if(t.exception?u.validate=(a,D,c)=>t.exception(a)||D.validate(a,c):u.validate=(a,D,c)=>a===void 0||D.validate(a,c),t.redirect&&(s.redirect=a=>a?{to:{key:t.redirect.option,value:t.redirect.value}}:void 0),t.deprecated&&(s.deprecated=!0),e&&!t.array){let a=u.preprocess||(D=>D);u.preprocess=(D,c,F)=>c.preprocess(a(Array.isArray(D)?y(!1,D,-1):D),F)}return t.array?ot.create({...e?{preprocess:a=>Array.isArray(a)?a:[a]}:{},...s,valueSchema:i.create(u)}):i.create({...u,...s})}var un=Ku;function Rt(t,e){if(!e)throw new Error(\"parserName is required.\");for(let n=t.length-1;n>=0;n--){let o=t[n];if(o.parsers&&Object.prototype.hasOwnProperty.call(o.parsers,e))return o}let r=`Couldn't resolve parser \"${e}\".`;throw r+=\" Plugins must be explicitly added to the standalone bundle.\",new Se(r)}function on(t,e){if(!e)throw new Error(\"astFormat is required.\");for(let n=t.length-1;n>=0;n--){let o=t[n];if(o.printers&&Object.prototype.hasOwnProperty.call(o.printers,e))return o}let r=`Couldn't find plugin for AST format \"${e}\".`;throw r+=\" Plugins must be explicitly added to the standalone bundle.\",new Se(r)}function ft({plugins:t,parser:e}){let r=Rt(t,e);return Yt(r,e)}function Yt(t,e){let r=t.parsers[e];return typeof r==\"function\"?r():r}function sn(t,e){let r=t.printers[e];return typeof r==\"function\"?r():r}var an={astFormat:\"estree\",printer:{},originalText:void 0,locStart:null,locEnd:null};async function Ju(t,e={}){var F;let r={...t};if(!r.parser)if(r.filepath){if(r.parser=Lr(r,{physicalFile:r.filepath}),!r.parser)throw new ve(`No parser could be inferred for file \"${r.filepath}\".`)}else throw new ve(\"No parser and no file path given, couldn't infer a parser.\");let n=et({plugins:t.plugins,showDeprecated:!0}).options,o={...an,...Object.fromEntries(n.filter(f=>f.default!==void 0).map(f=>[f.name,f.default]))},u=Rt(r.plugins,r.parser),i=await Yt(u,r.parser);r.astFormat=i.astFormat,r.locEnd=i.locEnd,r.locStart=i.locStart;let s=(F=u.printers)!=null&&F[i.astFormat]?u:on(r.plugins,i.astFormat),a=await sn(s,i.astFormat);r.printer=a;let D=s.defaultOptions?Object.fromEntries(Object.entries(s.defaultOptions).filter(([,f])=>f!==void 0)):{},c={...o,...D};for(let[f,d]of Object.entries(c))(r[f]===null||r[f]===void 0)&&(r[f]=d);return r.parser===\"json\"&&(r.trailingComma=\"none\"),un(r,n,{passThrough:Object.keys(an),...e})}var re=Ju;var Dn=new Set([\"tokens\",\"comments\",\"parent\",\"enclosingNode\",\"precedingNode\",\"followingNode\"]),Xu=t=>Object.keys(t).filter(e=>!Dn.has(e));function Zu(t){return t?e=>t(e,Dn):Xu}var H=Zu;function Qu(t,e){let{printer:{massageAstNode:r,getVisitorKeys:n}}=e;if(!r)return t;let o=H(n),u=r.ignoredProperties??new Set;return i(t);function i(s,a){if(!(s!==null&&typeof s==\"object\"))return s;if(Array.isArray(s))return s.map(f=>i(f,a)).filter(Boolean);let D={},c=new Set(o(s));for(let f in s)!Object.prototype.hasOwnProperty.call(s,f)||u.has(f)||(c.has(f)?D[f]=i(s[f],s):D[f]=s[f]);let F=r(s,D,a);if(F!==null)return F??D}}var cn=Qu;var Cn=Ce(hn(),1);async function so(t,e){let r=await ft(e),n=r.preprocess?r.preprocess(t,e):t;e.originalText=n;let o;try{o=await r.parse(n,e,e)}catch(u){ao(u,t)}return{text:n,ast:o}}function ao(t,e){let{loc:r}=t;if(r){let n=(0,Cn.codeFrameColumns)(e,r,{highlightCode:!0});throw t.message+=`\n`+n,t.codeFrame=n,t}throw t}var ae=so;var Ie,$t,Fe,dt,Vt=class{constructor(e){Ct(this,Ie);Ct(this,Fe);this.stack=[e]}get key(){let{stack:e,siblings:r}=this;return y(!1,e,r===null?-2:-4)??null}get index(){return this.siblings===null?null:y(!1,this.stack,-2)}get node(){return y(!1,this.stack,-1)}get parent(){return this.getNode(1)}get grandparent(){return this.getNode(2)}get isInArray(){return this.siblings!==null}get siblings(){let{stack:e}=this,r=y(!1,e,-3);return Array.isArray(r)?r:null}get next(){let{siblings:e}=this;return e===null?null:e[this.index+1]}get previous(){let{siblings:e}=this;return e===null?null:e[this.index-1]}get isFirst(){return this.index===0}get isLast(){let{siblings:e,index:r}=this;return e!==null&&r===e.length-1}get isRoot(){return this.stack.length===1}get root(){return this.stack[0]}get ancestors(){return[...ce(this,Fe,dt).call(this)]}getName(){let{stack:e}=this,{length:r}=e;return r>1?y(!1,e,-2):null}getValue(){return y(!1,this.stack,-1)}getNode(e=0){let r=ce(this,Ie,$t).call(this,e);return r===-1?null:this.stack[r]}getParentNode(e=0){return this.getNode(e+1)}call(e,...r){let{stack:n}=this,{length:o}=n,u=y(!1,n,-1);for(let i of r)u=u[i],n.push(i,u);try{return e(this)}finally{n.length=o}}callParent(e,r=0){let n=ce(this,Ie,$t).call(this,r+1),o=this.stack.splice(n+1);try{return e(this)}finally{this.stack.push(...o)}}each(e,...r){let{stack:n}=this,{length:o}=n,u=y(!1,n,-1);for(let i of r)u=u[i],n.push(i,u);try{for(let i=0;i<u.length;++i)n.push(i,u[i]),e(this,i,u),n.length-=2}finally{n.length=o}}map(e,...r){let n=[];return this.each((o,u,i)=>{n[u]=e(o,u,i)},...r),n}match(...e){let r=this.stack.length-1,n=null,o=this.stack[r--];for(let u of e){if(o===void 0)return!1;let i=null;if(typeof n==\"number\"&&(i=n,n=this.stack[r--],o=this.stack[r--]),u&&!u(o,n,i))return!1;n=this.stack[r--],o=this.stack[r--]}return!0}findAncestor(e){for(let r of ce(this,Fe,dt).call(this))if(e(r))return r}hasAncestor(e){for(let r of ce(this,Fe,dt).call(this))if(e(r))return!0;return!1}};Ie=new WeakSet,$t=function(e){let{stack:r}=this;for(let n=r.length-1;n>=0;n-=2)if(!Array.isArray(r[n])&&--e<0)return n;return-1},Fe=new WeakSet,dt=function*(){let{stack:e}=this;for(let r=e.length-3;r>=0;r-=2){let n=e[r];Array.isArray(n)||(yield n)}};var gn=Vt;var yn=new Proxy(()=>{},{get:()=>yn}),Re=yn;function me(t){return(e,r,n)=>{let o=!!(n!=null&&n.backwards);if(r===!1)return!1;let{length:u}=e,i=r;for(;i>=0&&i<u;){let s=e.charAt(i);if(t instanceof RegExp){if(!t.test(s))return i}else if(!t.includes(s))return i;o?i--:i++}return i===-1||i===u?i:!1}}var xn=me(/\\s/),N=me(\" \t\"),Ft=me(\",; \t\"),mt=me(/[^\\n\\r]/);function Do(t,e,r){let n=!!(r!=null&&r.backwards);if(e===!1)return!1;let o=t.charAt(e);if(n){if(t.charAt(e-1)===\"\\r\"&&o===`\n`)return e-2;if(o===`\n`||o===\"\\r\"||o===\"\\u2028\"||o===\"\\u2029\")return e-1}else{if(o===\"\\r\"&&t.charAt(e+1)===`\n`)return e+2;if(o===`\n`||o===\"\\r\"||o===\"\\u2028\"||o===\"\\u2029\")return e+1}return e}var Y=Do;function co(t,e,r={}){let n=N(t,r.backwards?e-1:e,r),o=Y(t,n,r);return n!==o}var V=co;function lo(t){return Array.isArray(t)&&t.length>0}var Ut=lo;function fo(t){return t!==null&&typeof t==\"object\"}var _n=fo;function*Mt(t,e){let{getVisitorKeys:r,filter:n=()=>!0}=e,o=u=>_n(u)&&n(u);for(let u of r(t)){let i=t[u];if(Array.isArray(i))for(let s of i)o(s)&&(yield s);else o(i)&&(yield i)}}function*An(t,e){let r=[t];for(let n=0;n<r.length;n++){let o=r[n];for(let u of Mt(o,e))yield u,r.push(u)}}function po(t){let e=t.type||t.kind||\"(unknown type)\",r=String(t.name||t.id&&(typeof t.id==\"object\"?t.id.name:t.id)||t.key&&(typeof t.key==\"object\"?t.key.name:t.key)||t.value&&(typeof t.value==\"object\"?\"\":String(t.value))||t.operator||\"\");return r.length>20&&(r=r.slice(0,19)+\"\\u2026\"),e+(r?\" \"+r:\"\")}function Wt(t,e){(t.comments??(t.comments=[])).push(e),e.printed=!1,e.nodeDescription=po(t)}function ne(t,e){e.leading=!0,e.trailing=!1,Wt(t,e)}function X(t,e,r){e.leading=!1,e.trailing=!1,r&&(e.marker=r),Wt(t,e)}function ue(t,e){e.leading=!1,e.trailing=!0,Wt(t,e)}var zt=new WeakMap;function Et(t,e){if(zt.has(t))return zt.get(t);let{printer:{getCommentChildNodes:r,canAttachComment:n,getVisitorKeys:o},locStart:u,locEnd:i}=e;if(!n)return[];let s=((r==null?void 0:r(t,e))??[...Mt(t,{getVisitorKeys:H(o)})]).flatMap(a=>n(a)?[a]:Et(a,e));return s.sort((a,D)=>u(a)-u(D)||i(a)-i(D)),zt.set(t,s),s}function kn(t,e,r,n){let{locStart:o,locEnd:u}=r,i=o(e),s=u(e),a=Et(t,r),D,c,F=0,f=a.length;for(;F<f;){let d=F+f>>1,l=a[d],p=o(l),m=u(l);if(p<=i&&s<=m)return kn(l,e,r,l);if(m<=i){D=l,F=d+1;continue}if(s<=p){c=l,f=d;continue}throw new Error(\"Comment location overlaps with node location\")}if((n==null?void 0:n.type)===\"TemplateLiteral\"){let{quasis:d}=n,l=Kt(d,e,r);D&&Kt(d,D,r)!==l&&(D=null),c&&Kt(d,c,r)!==l&&(c=null)}return{enclosingNode:n,precedingNode:D,followingNode:c}}var Gt=()=>!1;function bn(t,e){let{comments:r}=t;if(delete t.comments,!Ut(r)||!e.printer.canAttachComment)return;let n=[],{locStart:o,locEnd:u,printer:{experimentalFeatures:{avoidAstMutation:i=!1}={},handleComments:s={}},originalText:a}=e,{ownLine:D=Gt,endOfLine:c=Gt,remaining:F=Gt}=s,f=r.map((d,l)=>({...kn(t,d,e),comment:d,text:a,options:e,ast:t,isLastComment:r.length-1===l}));for(let[d,l]of f.entries()){let{comment:p,precedingNode:m,enclosingNode:E,followingNode:h,text:g,options:C,ast:_,isLastComment:Z}=l;if(C.parser===\"json\"||C.parser===\"json5\"||C.parser===\"__js_expression\"||C.parser===\"__ts_expression\"||C.parser===\"__vue_expression\"||C.parser===\"__vue_ts_expression\"){if(o(p)-o(_)<=0){ne(_,p);continue}if(u(p)-u(_)>=0){ue(_,p);continue}}let $;if(i?$=[l]:(p.enclosingNode=E,p.precedingNode=m,p.followingNode=h,$=[p,g,C,_,Z]),Fo(g,C,f,d))p.placement=\"ownLine\",D(...$)||(h?ne(h,p):m?ue(m,p):E?X(E,p):X(_,p));else if(mo(g,C,f,d))p.placement=\"endOfLine\",c(...$)||(m?ue(m,p):h?ne(h,p):E?X(E,p):X(_,p));else if(p.placement=\"remaining\",!F(...$))if(m&&h){let Q=n.length;Q>0&&n[Q-1].followingNode!==h&&Bn(n,C),n.push(l)}else m?ue(m,p):h?ne(h,p):E?X(E,p):X(_,p)}if(Bn(n,e),!i)for(let d of r)delete d.precedingNode,delete d.enclosingNode,delete d.followingNode}var wn=t=>!/[\\S\\n\\u2028\\u2029]/.test(t);function Fo(t,e,r,n){let{comment:o,precedingNode:u}=r[n],{locStart:i,locEnd:s}=e,a=i(o);if(u)for(let D=n-1;D>=0;D--){let{comment:c,precedingNode:F}=r[D];if(F!==u||!wn(t.slice(s(c),a)))break;a=i(c)}return V(t,a,{backwards:!0})}function mo(t,e,r,n){let{comment:o,followingNode:u}=r[n],{locStart:i,locEnd:s}=e,a=s(o);if(u)for(let D=n+1;D<r.length;D++){let{comment:c,followingNode:F}=r[D];if(F!==u||!wn(t.slice(a,i(c))))break;a=s(c)}return V(t,a)}function Bn(t,e){var s,a;let r=t.length;if(r===0)return;let{precedingNode:n,followingNode:o}=t[0],u=e.locStart(o),i;for(i=r;i>0;--i){let{comment:D,precedingNode:c,followingNode:F}=t[i-1];Re.strictEqual(c,n),Re.strictEqual(F,o);let f=e.originalText.slice(e.locEnd(D),u);if(((a=(s=e.printer).isGap)==null?void 0:a.call(s,f,e))??/^[\\s(]*$/.test(f))u=e.locStart(D);else break}for(let[D,{comment:c}]of t.entries())D<i?ue(n,c):ne(o,c);for(let D of[n,o])D.comments&&D.comments.length>1&&D.comments.sort((c,F)=>e.locStart(c)-e.locStart(F));t.length=0}function Kt(t,e,r){let n=r.locStart(e)-1;for(let o=1;o<t.length;++o)if(n<r.locStart(t[o]))return o-1;return 0}function Eo(t,e){let r=e-1;r=N(t,r,{backwards:!0}),r=Y(t,r,{backwards:!0}),r=N(t,r,{backwards:!0});let n=Y(t,r,{backwards:!0});return r!==n}var Ye=Eo;function On(t,e){let r=t.node;return r.printed=!0,e.printer.printComment(t,e)}function ho(t,e){var c;let r=t.node,n=[On(t,e)],{printer:o,originalText:u,locStart:i,locEnd:s}=e;if((c=o.isBlockComment)==null?void 0:c.call(o,r)){let F=V(u,s(r))?V(u,i(r),{backwards:!0})?G:Ke:\" \";n.push(F)}else n.push(G);let D=Y(u,N(u,s(r)));return D!==!1&&V(u,D)&&n.push(G),n}function Co(t,e,r){var D;let n=t.node,o=On(t,e),{printer:u,originalText:i,locStart:s}=e,a=(D=u.isBlockComment)==null?void 0:D.call(u,n);if(r!=null&&r.hasLineSuffix&&!(r!=null&&r.isBlock)||V(i,s(n),{backwards:!0})){let c=Ye(i,s(n));return{doc:_e([G,c?G:\"\",o]),isBlock:a,hasLineSuffix:!0}}return!a||r!=null&&r.hasLineSuffix?{doc:[_e([\" \",o]),le],isBlock:a,hasLineSuffix:!0}:{doc:[\" \",o],isBlock:a,hasLineSuffix:!1}}function go(t,e){let r=t.node;if(!r)return{};let n=e[Symbol.for(\"printedComments\")];if((r.comments||[]).filter(a=>!n.has(a)).length===0)return{leading:\"\",trailing:\"\"};let u=[],i=[],s;return t.each(()=>{let a=t.node;if(n!=null&&n.has(a))return;let{leading:D,trailing:c}=a;D?u.push(ho(t,e)):c&&(s=Co(t,e,s),i.push(s.doc))},\"comments\"),{leading:u,trailing:i}}function Nn(t,e,r){let{leading:n,trailing:o}=go(t,r);return!n&&!o?e:Ze(e,u=>[n,u,o])}function Tn(t){let{[Symbol.for(\"comments\")]:e,[Symbol.for(\"printedComments\")]:r}=t;for(let n of e){if(!n.printed&&!r.has(n))throw new Error('Comment \"'+n.value.trim()+'\" was not printed. Please report this error!');delete n.printed}}async function Sn(t,e,r,n,o){let{embeddedLanguageFormatting:u,printer:{embed:i,hasPrettierIgnore:s=()=>!1,getVisitorKeys:a}}=r;if(!i||u!==\"auto\")return;if(i.length>2)throw new Error(\"printer.embed has too many parameters. The API changed in Prettier v3. Please update your plugin. See https://prettier.io/docs/en/plugins.html#optional-embed\");let D=H(i.getVisitorKeys??a),c=[];d();let F=t.stack;for(let{print:l,node:p,pathStack:m}of c)try{t.stack=m;let E=await l(f,e,t,r);E&&o.set(p,E)}catch(E){if(globalThis.PRETTIER_DEBUG)throw E}t.stack=F;function f(l,p){return yo(l,p,r,n)}function d(){let{node:l}=t;if(l===null||typeof l!=\"object\"||s(t))return;for(let m of D(l))Array.isArray(l[m])?t.each(d,m):t.call(d,m);let p=i(t,r);if(p){if(typeof p==\"function\"){c.push({print:p,node:l,pathStack:[...t.stack]});return}o.set(l,p)}}}async function yo(t,e,r,n){let o=await re({...r,...e,parentParser:r.parser,originalText:t},{passThrough:!0}),{ast:u}=await ae(t,o),i=await n(u,o);return Xe(i)}function xo(t){return()=>{}}var vn=xo;function _o(t,e){let{originalText:r,[Symbol.for(\"comments\")]:n,locStart:o,locEnd:u,[Symbol.for(\"printedComments\")]:i}=e,{node:s}=t,a=o(s),D=u(s);for(let c of n)o(c)>=a&&u(c)<=D&&i.add(c);return r.slice(a,D)}var Pn=_o;async function je(t,e){({ast:t}=await Ht(t,e));let r=new Map,n=new gn(t),o=vn(e),u=new Map;await Sn(n,s,e,je,u);let i=await Ln(n,e,s,void 0,u);return Tn(e),i;function s(D,c){return D===void 0||D===n?a(c):Array.isArray(D)?n.call(()=>a(c),...D):n.call(()=>a(c),D)}function a(D){o(n);let c=n.node;if(c==null)return\"\";let F=c&&typeof c==\"object\"&&D===void 0;if(F&&r.has(c))return r.get(c);let f=Ln(n,e,s,D,u);return F&&r.set(c,f),f}}function Ln(t,e,r,n,o){var a;let{node:u}=t,{printer:i}=e,s;return(a=i.hasPrettierIgnore)!=null&&a.call(i,t)?s=Pn(t,e):o.has(u)?s=o.get(u):s=i.print(t,e,r,n),u===e.cursorNode&&(s=Ze(s,D=>[Be,D,Be])),i.printComment&&(!i.willPrintOwnComments||!i.willPrintOwnComments(t,e))&&(s=Nn(t,s,e)),s}async function Ht(t,e){let r=t.comments??[];e[Symbol.for(\"comments\")]=r,e[Symbol.for(\"tokens\")]=t.tokens??[],e[Symbol.for(\"printedComments\")]=new Set,bn(t,e);let{printer:{preprocess:n}}=e;return t=n?await n(t,e):t,{ast:t,comments:r}}var Ao=({parser:t})=>t===\"json\"||t===\"json5\"||t===\"json-stringify\";function Bo(t,e){let r=[t.node,...t.parentNodes],n=new Set([e.node,...e.parentNodes]);return r.find(o=>Yn.has(o.type)&&n.has(o))}function In(t){let e=t.length-1;for(;;){let r=t[e];if((r==null?void 0:r.type)===\"Program\"||(r==null?void 0:r.type)===\"File\")e--;else break}return t.slice(0,e+1)}function ko(t,e,{locStart:r,locEnd:n}){let o=t.node,u=e.node;if(o===u)return{startNode:o,endNode:u};let i=r(t.node);for(let a of In(e.parentNodes))if(r(a)>=i)u=a;else break;let s=n(e.node);for(let a of In(t.parentNodes)){if(n(a)<=s)o=a;else break;if(o===u)break}return{startNode:o,endNode:u}}function qt(t,e,r,n,o=[],u){let{locStart:i,locEnd:s}=r,a=i(t),D=s(t);if(!(e>D||e<a||u===\"rangeEnd\"&&e===a||u===\"rangeStart\"&&e===D)){for(let c of Et(t,r)){let F=qt(c,e,r,n,[t,...o],u);if(F)return F}if(!n||n(t,o[0]))return{node:t,parentNodes:o}}}function bo(t,e){return e!==\"DeclareExportDeclaration\"&&t!==\"TypeParameterDeclaration\"&&(t===\"Directive\"||t===\"TypeAlias\"||t===\"TSExportAssignment\"||t.startsWith(\"Declare\")||t.startsWith(\"TSDeclare\")||t.endsWith(\"Statement\")||t.endsWith(\"Declaration\"))}var Yn=new Set([\"JsonRoot\",\"ObjectExpression\",\"ArrayExpression\",\"StringLiteral\",\"NumericLiteral\",\"BooleanLiteral\",\"NullLiteral\",\"UnaryExpression\",\"TemplateLiteral\"]),wo=new Set([\"OperationDefinition\",\"FragmentDefinition\",\"VariableDefinition\",\"TypeExtensionDefinition\",\"ObjectTypeDefinition\",\"FieldDefinition\",\"DirectiveDefinition\",\"EnumTypeDefinition\",\"EnumValueDefinition\",\"InputValueDefinition\",\"InputObjectTypeDefinition\",\"SchemaDefinition\",\"OperationTypeDefinition\",\"InterfaceTypeDefinition\",\"UnionTypeDefinition\",\"ScalarTypeDefinition\"]);function Rn(t,e,r){if(!e)return!1;switch(t.parser){case\"flow\":case\"babel\":case\"babel-flow\":case\"babel-ts\":case\"typescript\":case\"acorn\":case\"espree\":case\"meriyah\":case\"__babel_estree\":return bo(e.type,r==null?void 0:r.type);case\"json\":case\"json5\":case\"json-stringify\":return Yn.has(e.type);case\"graphql\":return wo.has(e.kind);case\"vue\":return e.tag!==\"root\"}return!1}function jn(t,e,r){let{rangeStart:n,rangeEnd:o,locStart:u,locEnd:i}=e;Re.ok(o>n);let s=t.slice(n,o).search(/\\S/),a=s===-1;if(!a)for(n+=s;o>n&&!/\\S/.test(t[o-1]);--o);let D=qt(r,n,e,(d,l)=>Rn(e,d,l),[],\"rangeStart\"),c=a?D:qt(r,o,e,d=>Rn(e,d),[],\"rangeEnd\");if(!D||!c)return{rangeStart:0,rangeEnd:0};let F,f;if(Ao(e)){let d=Bo(D,c);F=d,f=d}else({startNode:F,endNode:f}=ko(D,c,e));return{rangeStart:Math.min(u(F),u(f)),rangeEnd:Math.max(i(F),i(f))}}function Oo(t,e){let{cursorOffset:r,locStart:n,locEnd:o}=e,u=H(e.printer.getVisitorKeys),i=a=>n(a)<=r&&o(a)>=r,s=t;for(let a of An(t,{getVisitorKeys:u,filter:i}))s=a;return s}var Vn=Oo;var zn=\"\\uFEFF\",$n=Symbol(\"cursor\");async function Gn(t,e,r=0){if(!t||t.trim().length===0)return{formatted:\"\",cursorOffset:-1,comments:[]};let{ast:n,text:o}=await ae(t,e);e.cursorOffset>=0&&(e.cursorNode=Vn(n,e));let u=await je(n,e,r);r>0&&(u=qe([G,u],r,e.tabWidth));let i=fe(u,e);if(r>0){let a=i.formatted.trim();i.cursorNodeStart!==void 0&&(i.cursorNodeStart-=i.formatted.indexOf(a)),i.formatted=a+be(e.endOfLine)}let s=e[Symbol.for(\"comments\")];if(e.cursorOffset>=0){let a,D,c,F,f;if(e.cursorNode&&i.cursorNodeText?(a=e.locStart(e.cursorNode),D=o.slice(a,e.locEnd(e.cursorNode)),c=e.cursorOffset-a,F=i.cursorNodeStart,f=i.cursorNodeText):(a=0,D=o,c=e.cursorOffset,F=0,f=i.formatted),D===f)return{formatted:i.formatted,cursorOffset:F+c,comments:s};let d=D.split(\"\");d.splice(c,0,$n);let l=f.split(\"\"),p=(0,Wn.diffArrays)(d,l),m=F;for(let E of p)if(E.removed){if(E.value.includes($n))break}else m+=E.count;return{formatted:i.formatted,cursorOffset:m,comments:s}}return{formatted:i.formatted,cursorOffset:-1,comments:s}}async function No(t,e){let{ast:r,text:n}=await ae(t,e),{rangeStart:o,rangeEnd:u}=jn(n,e,r),i=n.slice(o,u),s=Math.min(o,n.lastIndexOf(`\n`,o)+1),a=n.slice(s,o).match(/^\\s*/)[0],D=pe(a,e.tabWidth),c=await Gn(i,{...e,rangeStart:0,rangeEnd:Number.POSITIVE_INFINITY,cursorOffset:e.cursorOffset>o&&e.cursorOffset<=u?e.cursorOffset-o:-1,endOfLine:\"lf\"},D),F=c.formatted.trimEnd(),{cursorOffset:f}=e;f>u?f+=F.length-i.length:c.cursorOffset>=0&&(f=c.cursorOffset+o);let d=n.slice(0,o)+F+n.slice(u);if(e.endOfLine!==\"lf\"){let l=be(e.endOfLine);f>=0&&l===`\\r\n`&&(f+=At(d.slice(0,f),`\n`)),d=ee(!1,d,`\n`,l)}return{formatted:d,cursorOffset:f,comments:c.comments}}function Jt(t,e,r){return typeof e!=\"number\"||Number.isNaN(e)||e<0||e>t.length?r:e}function Un(t,e){let{cursorOffset:r,rangeStart:n,rangeEnd:o}=e;return r=Jt(t,r,-1),n=Jt(t,n,0),o=Jt(t,o,t.length),{...e,cursorOffset:r,rangeStart:n,rangeEnd:o}}function Kn(t,e){let{cursorOffset:r,rangeStart:n,rangeEnd:o,endOfLine:u}=Un(t,e),i=t.charAt(0)===zn;if(i&&(t=t.slice(1),r--,n--,o--),u===\"auto\"&&(u=Cr(t)),t.includes(\"\\r\")){let s=a=>At(t.slice(0,Math.max(a,0)),`\\r\n`);r-=s(r),n-=s(n),o-=s(o),t=gr(t)}return{hasBOM:i,text:t,options:Un(t,{...e,cursorOffset:r,rangeStart:n,rangeEnd:o,endOfLine:u})}}async function Mn(t,e){let r=await ft(e);return!r.hasPragma||r.hasPragma(t)}async function Xt(t,e){let{hasBOM:r,text:n,options:o}=Kn(t,await re(e));if(o.rangeStart>=o.rangeEnd&&n!==\"\"||o.requirePragma&&!await Mn(n,o))return{formatted:t,cursorOffset:e.cursorOffset,comments:[]};let u;return o.rangeStart>0||o.rangeEnd<n.length?u=await No(n,o):(!o.requirePragma&&o.insertPragma&&o.printer.insertPragma&&!await Mn(n,o)&&(n=o.printer.insertPragma(n)),u=await Gn(n,o)),r&&(u.formatted=zn+u.formatted,u.cursorOffset>=0&&u.cursorOffset++),u}async function Hn(t,e,r){let{text:n,options:o}=Kn(t,await re(e)),u=await ae(n,o);return r&&(r.preprocessForPrint&&(u.ast=await Ht(u.ast,o)),r.massage&&(u.ast=cn(u.ast,o))),u}async function qn(t,e){e=await re(e);let r=await je(t,e);return fe(r,e)}async function Jn(t,e){let r=Sr(t),{formatted:n}=await Xt(r,{...e,parser:\"__js_expression\"});return n}async function Xn(t,e){e=await re(e);let{ast:r}=await ae(t,e);return je(r,e)}async function Zn(t,e){return fe(t,await re(e))}var Qt={};Me(Qt,{addDanglingComment:()=>X,addLeadingComment:()=>ne,addTrailingComment:()=>ue,getAlignmentSize:()=>pe,getIndentSize:()=>eu,getMaxContinuousCount:()=>Qn,getNextNonSpaceNonCommentCharacter:()=>nu,getNextNonSpaceNonCommentCharacterIndex:()=>Mo,getStringWidth:()=>we,hasNewline:()=>V,hasNewlineInRange:()=>tu,hasSpaces:()=>ru,isNextLineEmpty:()=>Ko,isNextLineEmptyAfterIndex:()=>ht,isPreviousLineEmpty:()=>zo,makeString:()=>uu,skip:()=>me,skipEverythingButNewLine:()=>mt,skipInlineComment:()=>Ee,skipNewline:()=>Y,skipSpaces:()=>N,skipToLineEnd:()=>Ft,skipTrailingComment:()=>he,skipWhitespace:()=>xn});function So(t,e){if(e===!1)return!1;if(t.charAt(e)===\"/\"&&t.charAt(e+1)===\"*\"){for(let r=e+2;r<t.length;++r)if(t.charAt(r)===\"*\"&&t.charAt(r+1)===\"/\")return r+2}return e}var Ee=So;function vo(t,e){return e===!1?!1:t.charAt(e)===\"/\"&&t.charAt(e+1)===\"/\"?mt(t,e):e}var he=vo;function Po(t,e){let r=null,n=e;for(;n!==r;)r=n,n=N(t,n),n=Ee(t,n),n=he(t,n),n=Y(t,n);return n}var Ve=Po;function Lo(t,e){let r=null,n=e;for(;n!==r;)r=n,n=Ft(t,n),n=Ee(t,n),n=N(t,n);return n=he(t,n),n=Y(t,n),n!==!1&&V(t,n)}var ht=Lo;function Zt(t){if(typeof t!=\"string\")throw new TypeError(\"Expected a string\");return t.replace(/[|\\\\{}()[\\]^$+*?.]/g,\"\\\\$&\").replace(/-/g,\"\\\\x2d\")}function Io(t,e){let r=t.match(new RegExp(`(${Zt(e)})+`,\"g\"));return r===null?0:r.reduce((n,o)=>Math.max(n,o.length/e.length),0)}var Qn=Io;function Ro(t,e){let r=t.lastIndexOf(`\n`);return r===-1?0:pe(t.slice(r+1).match(/^[\\t ]*/)[0],e)}var eu=Ro;function Yo(t,e,r){for(let n=e;n<r;++n)if(t.charAt(n)===`\n`)return!0;return!1}var tu=Yo;function jo(t,e,r={}){return N(t,r.backwards?e-1:e,r)!==e}var ru=jo;function Vo(t,e){let r=Ve(t,e);return r===!1?\"\":t.charAt(r)}var nu=Vo;function $o(t,e,r){let n=e==='\"'?\"'\":'\"',u=ee(!1,t,/\\\\(.)|([\"'])/gs,(i,s,a)=>s===n?s:a===e?\"\\\\\"+a:a||(r&&/^[^\\n\\r\"'0-7\\\\bfnrt-vx\\u2028\\u2029]$/.test(s)?s:\"\\\\\"+s));return e+u+e}var uu=$o;function Uo(t,e,r){return Ve(t,r(e))}function Mo(t,e){return arguments.length===2||typeof e==\"number\"?Ve(t,e):Uo(...arguments)}function Wo(t,e,r){return Ye(t,r(e))}function zo(t,e){return arguments.length===2||typeof e==\"number\"?Ye(t,e):Wo(...arguments)}function Go(t,e,r){return ht(t,r(e))}function Ko(t,e){return arguments.length===2||typeof e==\"number\"?ht(t,e):Go(...arguments)}var er={};Me(er,{builders:()=>Ho,printer:()=>qo,utils:()=>Jo});var Ho={join:ke,line:Ke,softline:Er,hardline:G,literalline:He,group:xt,conditionalGroup:fr,fill:Ge,lineSuffix:_e,lineSuffixBoundary:Fr,cursor:Be,breakParent:le,ifBreak:pr,trim:mr,indent:ie,indentIfBreak:dr,align:oe,addAlignmentToDoc:qe,markAsRoot:cr,dedentToRoot:Dr,dedent:lr,hardlineWithoutBreakParent:Ae,literallineWithoutBreakParent:_t,label:hr,concat:t=>t},qo={printDocToString:fe},Jo={willBreak:kr,traverseDoc:xe,findInDoc:Je,mapDoc:Ne,removeLines:wr,stripTrailingHardline:Xe,replaceEndOfLine:Or,canBreak:Nr};var ou=\"3.0.3\";function De(t,e=1){return async(...r)=>{let n=r[e]??{},o=n.plugins??[];return r[e]={...n,plugins:Array.isArray(o)?o:Object.values(o)},t(...r)}}var iu=De(Xt);async function su(t,e){let{formatted:r}=await iu(t,{...e,cursorOffset:-1});return r}async function Xo(t,e){return await su(t,e)===t}var Zo=De(et,0),Qo={parse:De(Hn),formatAST:De(qn),formatDoc:De(Jn),printToDoc:De(Xn),printDocToString:De(Zn)};var Uc=tr;export{Qo as __debug,Xo as check,Uc as default,er as doc,su as format,iu as formatWithCursor,Zo as getSupportInfo,Qt as util,ou as version};\n", "var el=Object.create;var lt=Object.defineProperty;var rl=Object.getOwnPropertyDescriptor;var tl=Object.getOwnPropertyNames;var nl=Object.getPrototypeOf,il=Object.prototype.hasOwnProperty;var C=(e,r)=>()=>(r||e((r={exports:{}}).exports,r),r.exports),On=(e,r)=>{for(var n in r)lt(e,n,{get:r[n],enumerable:!0})},ul=(e,r,n,t)=>{if(r&&typeof r==\"object\"||typeof r==\"function\")for(let a of tl(r))!il.call(e,a)&&a!==n&&lt(e,a,{get:()=>r[a],enumerable:!(t=rl(r,a))||t.enumerable});return e};var Ie=(e,r,n)=>(n=e!=null?el(nl(e)):{},ul(r||!e||!e.__esModule?lt(n,\"default\",{value:e,enumerable:!0}):n,e));var kr=C((Tg,In)=>{\"use strict\";In.exports=sl;function sl(e){return String(e).replace(/\\s+/g,\" \")}});var _e=C((_v,Si)=>{Si.exports=cf;var sf=Object.prototype.hasOwnProperty;function cf(){for(var e={},r=0;r<arguments.length;r++){var n=arguments[r];for(var t in n)sf.call(n,t)&&(e[t]=n[t])}return e}});var Pi=C((Lv,yt)=>{typeof Object.create==\"function\"?yt.exports=function(r,n){n&&(r.super_=n,r.prototype=Object.create(n.prototype,{constructor:{value:r,enumerable:!1,writable:!0,configurable:!0}}))}:yt.exports=function(r,n){if(n){r.super_=n;var t=function(){};t.prototype=n.prototype,r.prototype=new t,r.prototype.constructor=r}}});var Oi=C((Ov,Li)=>{\"use strict\";var lf=_e(),_i=Pi();Li.exports=ff;function ff(e){var r,n,t;_i(i,e),_i(a,i),r=i.prototype;for(n in r)t=r[n],t&&typeof t==\"object\"&&(r[n]=\"concat\"in t?t.concat():lf(t));return i;function a(u){return e.apply(this,u)}function i(){return this instanceof i?e.apply(this,arguments):new a(arguments)}}});var Ni=C((Iv,Ii)=>{\"use strict\";Ii.exports=Df;function Df(e,r,n){return t;function t(){var a=n||this,i=a[e];return a[e]=!r,u;function u(){a[e]=i}}}});var zi=C((Nv,Ri)=>{\"use strict\";Ri.exports=pf;function pf(e){for(var r=String(e),n=[],t=/\\r?\\n|\\r/g;t.exec(r);)n.push(t.lastIndex);return n.push(r.length+1),{toPoint:a,toPosition:a,toOffset:i};function a(u){var o=-1;if(u>-1&&u<n[n.length-1]){for(;++o<n.length;)if(n[o]>u)return{line:o+1,column:u-(n[o-1]||0)+1,offset:u}}return{}}function i(u){var o=u&&u.line,s=u&&u.column,l;return!isNaN(o)&&!isNaN(s)&&o-1 in n&&(l=(n[o-2]||0)+s-1||0),l>-1&&l<n[n.length-1]?l:-1}}});var Ui=C((Rv,Mi)=>{\"use strict\";Mi.exports=df;var kt=\"\\\\\";function df(e,r){return n;function n(t){for(var a=0,i=t.indexOf(kt),u=e[r],o=[],s;i!==-1;)o.push(t.slice(a,i)),a=i+1,s=t.charAt(a),(!s||u.indexOf(s)===-1)&&o.push(kt),i=t.indexOf(kt,a+1);return o.push(t.slice(a)),o.join(\"\")}}});var Yi=C((zv,hf)=>{hf.exports={AElig:\"\\xC6\",AMP:\"&\",Aacute:\"\\xC1\",Acirc:\"\\xC2\",Agrave:\"\\xC0\",Aring:\"\\xC5\",Atilde:\"\\xC3\",Auml:\"\\xC4\",COPY:\"\\xA9\",Ccedil:\"\\xC7\",ETH:\"\\xD0\",Eacute:\"\\xC9\",Ecirc:\"\\xCA\",Egrave:\"\\xC8\",Euml:\"\\xCB\",GT:\">\",Iacute:\"\\xCD\",Icirc:\"\\xCE\",Igrave:\"\\xCC\",Iuml:\"\\xCF\",LT:\"<\",Ntilde:\"\\xD1\",Oacute:\"\\xD3\",Ocirc:\"\\xD4\",Ograve:\"\\xD2\",Oslash:\"\\xD8\",Otilde:\"\\xD5\",Ouml:\"\\xD6\",QUOT:'\"',REG:\"\\xAE\",THORN:\"\\xDE\",Uacute:\"\\xDA\",Ucirc:\"\\xDB\",Ugrave:\"\\xD9\",Uuml:\"\\xDC\",Yacute:\"\\xDD\",aacute:\"\\xE1\",acirc:\"\\xE2\",acute:\"\\xB4\",aelig:\"\\xE6\",agrave:\"\\xE0\",amp:\"&\",aring:\"\\xE5\",atilde:\"\\xE3\",auml:\"\\xE4\",brvbar:\"\\xA6\",ccedil:\"\\xE7\",cedil:\"\\xB8\",cent:\"\\xA2\",copy:\"\\xA9\",curren:\"\\xA4\",deg:\"\\xB0\",divide:\"\\xF7\",eacute:\"\\xE9\",ecirc:\"\\xEA\",egrave:\"\\xE8\",eth:\"\\xF0\",euml:\"\\xEB\",frac12:\"\\xBD\",frac14:\"\\xBC\",frac34:\"\\xBE\",gt:\">\",iacute:\"\\xED\",icirc:\"\\xEE\",iexcl:\"\\xA1\",igrave:\"\\xEC\",iquest:\"\\xBF\",iuml:\"\\xEF\",laquo:\"\\xAB\",lt:\"<\",macr:\"\\xAF\",micro:\"\\xB5\",middot:\"\\xB7\",nbsp:\"\\xA0\",not:\"\\xAC\",ntilde:\"\\xF1\",oacute:\"\\xF3\",ocirc:\"\\xF4\",ograve:\"\\xF2\",ordf:\"\\xAA\",ordm:\"\\xBA\",oslash:\"\\xF8\",otilde:\"\\xF5\",ouml:\"\\xF6\",para:\"\\xB6\",plusmn:\"\\xB1\",pound:\"\\xA3\",quot:'\"',raquo:\"\\xBB\",reg:\"\\xAE\",sect:\"\\xA7\",shy:\"\\xAD\",sup1:\"\\xB9\",sup2:\"\\xB2\",sup3:\"\\xB3\",szlig:\"\\xDF\",thorn:\"\\xFE\",times:\"\\xD7\",uacute:\"\\xFA\",ucirc:\"\\xFB\",ugrave:\"\\xF9\",uml:\"\\xA8\",uuml:\"\\xFC\",yacute:\"\\xFD\",yen:\"\\xA5\",yuml:\"\\xFF\"}});var Vi=C((Mv,mf)=>{mf.exports={\"0\":\"\\uFFFD\",\"128\":\"\\u20AC\",\"130\":\"\\u201A\",\"131\":\"\\u0192\",\"132\":\"\\u201E\",\"133\":\"\\u2026\",\"134\":\"\\u2020\",\"135\":\"\\u2021\",\"136\":\"\\u02C6\",\"137\":\"\\u2030\",\"138\":\"\\u0160\",\"139\":\"\\u2039\",\"140\":\"\\u0152\",\"142\":\"\\u017D\",\"145\":\"\\u2018\",\"146\":\"\\u2019\",\"147\":\"\\u201C\",\"148\":\"\\u201D\",\"149\":\"\\u2022\",\"150\":\"\\u2013\",\"151\":\"\\u2014\",\"152\":\"\\u02DC\",\"153\":\"\\u2122\",\"154\":\"\\u0161\",\"155\":\"\\u203A\",\"156\":\"\\u0153\",\"158\":\"\\u017E\",\"159\":\"\\u0178\"}});var Le=C((Uv,ji)=>{\"use strict\";ji.exports=gf;function gf(e){var r=typeof e==\"string\"?e.charCodeAt(0):e;return r>=48&&r<=57}});var Gi=C((Yv,$i)=>{\"use strict\";$i.exports=vf;function vf(e){var r=typeof e==\"string\"?e.charCodeAt(0):e;return r>=97&&r<=102||r>=65&&r<=70||r>=48&&r<=57}});var ze=C((Vv,Hi)=>{\"use strict\";Hi.exports=Ff;function Ff(e){var r=typeof e==\"string\"?e.charCodeAt(0):e;return r>=97&&r<=122||r>=65&&r<=90}});var Ki=C((jv,Wi)=>{\"use strict\";var Ef=ze(),Cf=Le();Wi.exports=bf;function bf(e){return Ef(e)||Cf(e)}});var Ji=C(($v,xf)=>{xf.exports={AEli:\"\\xC6\",AElig:\"\\xC6\",AM:\"&\",AMP:\"&\",Aacut:\"\\xC1\",Aacute:\"\\xC1\",Abreve:\"\\u0102\",Acir:\"\\xC2\",Acirc:\"\\xC2\",Acy:\"\\u0410\",Afr:\"\\u{1D504}\",Agrav:\"\\xC0\",Agrave:\"\\xC0\",Alpha:\"\\u0391\",Amacr:\"\\u0100\",And:\"\\u2A53\",Aogon:\"\\u0104\",Aopf:\"\\u{1D538}\",ApplyFunction:\"\\u2061\",Arin:\"\\xC5\",Aring:\"\\xC5\",Ascr:\"\\u{1D49C}\",Assign:\"\\u2254\",Atild:\"\\xC3\",Atilde:\"\\xC3\",Aum:\"\\xC4\",Auml:\"\\xC4\",Backslash:\"\\u2216\",Barv:\"\\u2AE7\",Barwed:\"\\u2306\",Bcy:\"\\u0411\",Because:\"\\u2235\",Bernoullis:\"\\u212C\",Beta:\"\\u0392\",Bfr:\"\\u{1D505}\",Bopf:\"\\u{1D539}\",Breve:\"\\u02D8\",Bscr:\"\\u212C\",Bumpeq:\"\\u224E\",CHcy:\"\\u0427\",COP:\"\\xA9\",COPY:\"\\xA9\",Cacute:\"\\u0106\",Cap:\"\\u22D2\",CapitalDifferentialD:\"\\u2145\",Cayleys:\"\\u212D\",Ccaron:\"\\u010C\",Ccedi:\"\\xC7\",Ccedil:\"\\xC7\",Ccirc:\"\\u0108\",Cconint:\"\\u2230\",Cdot:\"\\u010A\",Cedilla:\"\\xB8\",CenterDot:\"\\xB7\",Cfr:\"\\u212D\",Chi:\"\\u03A7\",CircleDot:\"\\u2299\",CircleMinus:\"\\u2296\",CirclePlus:\"\\u2295\",CircleTimes:\"\\u2297\",ClockwiseContourIntegral:\"\\u2232\",CloseCurlyDoubleQuote:\"\\u201D\",CloseCurlyQuote:\"\\u2019\",Colon:\"\\u2237\",Colone:\"\\u2A74\",Congruent:\"\\u2261\",Conint:\"\\u222F\",ContourIntegral:\"\\u222E\",Copf:\"\\u2102\",Coproduct:\"\\u2210\",CounterClockwiseContourIntegral:\"\\u2233\",Cross:\"\\u2A2F\",Cscr:\"\\u{1D49E}\",Cup:\"\\u22D3\",CupCap:\"\\u224D\",DD:\"\\u2145\",DDotrahd:\"\\u2911\",DJcy:\"\\u0402\",DScy:\"\\u0405\",DZcy:\"\\u040F\",Dagger:\"\\u2021\",Darr:\"\\u21A1\",Dashv:\"\\u2AE4\",Dcaron:\"\\u010E\",Dcy:\"\\u0414\",Del:\"\\u2207\",Delta:\"\\u0394\",Dfr:\"\\u{1D507}\",DiacriticalAcute:\"\\xB4\",DiacriticalDot:\"\\u02D9\",DiacriticalDoubleAcute:\"\\u02DD\",DiacriticalGrave:\"`\",DiacriticalTilde:\"\\u02DC\",Diamond:\"\\u22C4\",DifferentialD:\"\\u2146\",Dopf:\"\\u{1D53B}\",Dot:\"\\xA8\",DotDot:\"\\u20DC\",DotEqual:\"\\u2250\",DoubleContourIntegral:\"\\u222F\",DoubleDot:\"\\xA8\",DoubleDownArrow:\"\\u21D3\",DoubleLeftArrow:\"\\u21D0\",DoubleLeftRightArrow:\"\\u21D4\",DoubleLeftTee:\"\\u2AE4\",DoubleLongLeftArrow:\"\\u27F8\",DoubleLongLeftRightArrow:\"\\u27FA\",DoubleLongRightArrow:\"\\u27F9\",DoubleRightArrow:\"\\u21D2\",DoubleRightTee:\"\\u22A8\",DoubleUpArrow:\"\\u21D1\",DoubleUpDownArrow:\"\\u21D5\",DoubleVerticalBar:\"\\u2225\",DownArrow:\"\\u2193\",DownArrowBar:\"\\u2913\",DownArrowUpArrow:\"\\u21F5\",DownBreve:\"\\u0311\",DownLeftRightVector:\"\\u2950\",DownLeftTeeVector:\"\\u295E\",DownLeftVector:\"\\u21BD\",DownLeftVectorBar:\"\\u2956\",DownRightTeeVector:\"\\u295F\",DownRightVector:\"\\u21C1\",DownRightVectorBar:\"\\u2957\",DownTee:\"\\u22A4\",DownTeeArrow:\"\\u21A7\",Downarrow:\"\\u21D3\",Dscr:\"\\u{1D49F}\",Dstrok:\"\\u0110\",ENG:\"\\u014A\",ET:\"\\xD0\",ETH:\"\\xD0\",Eacut:\"\\xC9\",Eacute:\"\\xC9\",Ecaron:\"\\u011A\",Ecir:\"\\xCA\",Ecirc:\"\\xCA\",Ecy:\"\\u042D\",Edot:\"\\u0116\",Efr:\"\\u{1D508}\",Egrav:\"\\xC8\",Egrave:\"\\xC8\",Element:\"\\u2208\",Emacr:\"\\u0112\",EmptySmallSquare:\"\\u25FB\",EmptyVerySmallSquare:\"\\u25AB\",Eogon:\"\\u0118\",Eopf:\"\\u{1D53C}\",Epsilon:\"\\u0395\",Equal:\"\\u2A75\",EqualTilde:\"\\u2242\",Equilibrium:\"\\u21CC\",Escr:\"\\u2130\",Esim:\"\\u2A73\",Eta:\"\\u0397\",Eum:\"\\xCB\",Euml:\"\\xCB\",Exists:\"\\u2203\",ExponentialE:\"\\u2147\",Fcy:\"\\u0424\",Ffr:\"\\u{1D509}\",FilledSmallSquare:\"\\u25FC\",FilledVerySmallSquare:\"\\u25AA\",Fopf:\"\\u{1D53D}\",ForAll:\"\\u2200\",Fouriertrf:\"\\u2131\",Fscr:\"\\u2131\",GJcy:\"\\u0403\",G:\">\",GT:\">\",Gamma:\"\\u0393\",Gammad:\"\\u03DC\",Gbreve:\"\\u011E\",Gcedil:\"\\u0122\",Gcirc:\"\\u011C\",Gcy:\"\\u0413\",Gdot:\"\\u0120\",Gfr:\"\\u{1D50A}\",Gg:\"\\u22D9\",Gopf:\"\\u{1D53E}\",GreaterEqual:\"\\u2265\",GreaterEqualLess:\"\\u22DB\",GreaterFullEqual:\"\\u2267\",GreaterGreater:\"\\u2AA2\",GreaterLess:\"\\u2277\",GreaterSlantEqual:\"\\u2A7E\",GreaterTilde:\"\\u2273\",Gscr:\"\\u{1D4A2}\",Gt:\"\\u226B\",HARDcy:\"\\u042A\",Hacek:\"\\u02C7\",Hat:\"^\",Hcirc:\"\\u0124\",Hfr:\"\\u210C\",HilbertSpace:\"\\u210B\",Hopf:\"\\u210D\",HorizontalLine:\"\\u2500\",Hscr:\"\\u210B\",Hstrok:\"\\u0126\",HumpDownHump:\"\\u224E\",HumpEqual:\"\\u224F\",IEcy:\"\\u0415\",IJlig:\"\\u0132\",IOcy:\"\\u0401\",Iacut:\"\\xCD\",Iacute:\"\\xCD\",Icir:\"\\xCE\",Icirc:\"\\xCE\",Icy:\"\\u0418\",Idot:\"\\u0130\",Ifr:\"\\u2111\",Igrav:\"\\xCC\",Igrave:\"\\xCC\",Im:\"\\u2111\",Imacr:\"\\u012A\",ImaginaryI:\"\\u2148\",Implies:\"\\u21D2\",Int:\"\\u222C\",Integral:\"\\u222B\",Intersection:\"\\u22C2\",InvisibleComma:\"\\u2063\",InvisibleTimes:\"\\u2062\",Iogon:\"\\u012E\",Iopf:\"\\u{1D540}\",Iota:\"\\u0399\",Iscr:\"\\u2110\",Itilde:\"\\u0128\",Iukcy:\"\\u0406\",Ium:\"\\xCF\",Iuml:\"\\xCF\",Jcirc:\"\\u0134\",Jcy:\"\\u0419\",Jfr:\"\\u{1D50D}\",Jopf:\"\\u{1D541}\",Jscr:\"\\u{1D4A5}\",Jsercy:\"\\u0408\",Jukcy:\"\\u0404\",KHcy:\"\\u0425\",KJcy:\"\\u040C\",Kappa:\"\\u039A\",Kcedil:\"\\u0136\",Kcy:\"\\u041A\",Kfr:\"\\u{1D50E}\",Kopf:\"\\u{1D542}\",Kscr:\"\\u{1D4A6}\",LJcy:\"\\u0409\",L:\"<\",LT:\"<\",Lacute:\"\\u0139\",Lambda:\"\\u039B\",Lang:\"\\u27EA\",Laplacetrf:\"\\u2112\",Larr:\"\\u219E\",Lcaron:\"\\u013D\",Lcedil:\"\\u013B\",Lcy:\"\\u041B\",LeftAngleBracket:\"\\u27E8\",LeftArrow:\"\\u2190\",LeftArrowBar:\"\\u21E4\",LeftArrowRightArrow:\"\\u21C6\",LeftCeiling:\"\\u2308\",LeftDoubleBracket:\"\\u27E6\",LeftDownTeeVector:\"\\u2961\",LeftDownVector:\"\\u21C3\",LeftDownVectorBar:\"\\u2959\",LeftFloor:\"\\u230A\",LeftRightArrow:\"\\u2194\",LeftRightVector:\"\\u294E\",LeftTee:\"\\u22A3\",LeftTeeArrow:\"\\u21A4\",LeftTeeVector:\"\\u295A\",LeftTriangle:\"\\u22B2\",LeftTriangleBar:\"\\u29CF\",LeftTriangleEqual:\"\\u22B4\",LeftUpDownVector:\"\\u2951\",LeftUpTeeVector:\"\\u2960\",LeftUpVector:\"\\u21BF\",LeftUpVectorBar:\"\\u2958\",LeftVector:\"\\u21BC\",LeftVectorBar:\"\\u2952\",Leftarrow:\"\\u21D0\",Leftrightarrow:\"\\u21D4\",LessEqualGreater:\"\\u22DA\",LessFullEqual:\"\\u2266\",LessGreater:\"\\u2276\",LessLess:\"\\u2AA1\",LessSlantEqual:\"\\u2A7D\",LessTilde:\"\\u2272\",Lfr:\"\\u{1D50F}\",Ll:\"\\u22D8\",Lleftarrow:\"\\u21DA\",Lmidot:\"\\u013F\",LongLeftArrow:\"\\u27F5\",LongLeftRightArrow:\"\\u27F7\",LongRightArrow:\"\\u27F6\",Longleftarrow:\"\\u27F8\",Longleftrightarrow:\"\\u27FA\",Longrightarrow:\"\\u27F9\",Lopf:\"\\u{1D543}\",LowerLeftArrow:\"\\u2199\",LowerRightArrow:\"\\u2198\",Lscr:\"\\u2112\",Lsh:\"\\u21B0\",Lstrok:\"\\u0141\",Lt:\"\\u226A\",Map:\"\\u2905\",Mcy:\"\\u041C\",MediumSpace:\"\\u205F\",Mellintrf:\"\\u2133\",Mfr:\"\\u{1D510}\",MinusPlus:\"\\u2213\",Mopf:\"\\u{1D544}\",Mscr:\"\\u2133\",Mu:\"\\u039C\",NJcy:\"\\u040A\",Nacute:\"\\u0143\",Ncaron:\"\\u0147\",Ncedil:\"\\u0145\",Ncy:\"\\u041D\",NegativeMediumSpace:\"\\u200B\",NegativeThickSpace:\"\\u200B\",NegativeThinSpace:\"\\u200B\",NegativeVeryThinSpace:\"\\u200B\",NestedGreaterGreater:\"\\u226B\",NestedLessLess:\"\\u226A\",NewLine:`\n`,Nfr:\"\\u{1D511}\",NoBreak:\"\\u2060\",NonBreakingSpace:\"\\xA0\",Nopf:\"\\u2115\",Not:\"\\u2AEC\",NotCongruent:\"\\u2262\",NotCupCap:\"\\u226D\",NotDoubleVerticalBar:\"\\u2226\",NotElement:\"\\u2209\",NotEqual:\"\\u2260\",NotEqualTilde:\"\\u2242\\u0338\",NotExists:\"\\u2204\",NotGreater:\"\\u226F\",NotGreaterEqual:\"\\u2271\",NotGreaterFullEqual:\"\\u2267\\u0338\",NotGreaterGreater:\"\\u226B\\u0338\",NotGreaterLess:\"\\u2279\",NotGreaterSlantEqual:\"\\u2A7E\\u0338\",NotGreaterTilde:\"\\u2275\",NotHumpDownHump:\"\\u224E\\u0338\",NotHumpEqual:\"\\u224F\\u0338\",NotLeftTriangle:\"\\u22EA\",NotLeftTriangleBar:\"\\u29CF\\u0338\",NotLeftTriangleEqual:\"\\u22EC\",NotLess:\"\\u226E\",NotLessEqual:\"\\u2270\",NotLessGreater:\"\\u2278\",NotLessLess:\"\\u226A\\u0338\",NotLessSlantEqual:\"\\u2A7D\\u0338\",NotLessTilde:\"\\u2274\",NotNestedGreaterGreater:\"\\u2AA2\\u0338\",NotNestedLessLess:\"\\u2AA1\\u0338\",NotPrecedes:\"\\u2280\",NotPrecedesEqual:\"\\u2AAF\\u0338\",NotPrecedesSlantEqual:\"\\u22E0\",NotReverseElement:\"\\u220C\",NotRightTriangle:\"\\u22EB\",NotRightTriangleBar:\"\\u29D0\\u0338\",NotRightTriangleEqual:\"\\u22ED\",NotSquareSubset:\"\\u228F\\u0338\",NotSquareSubsetEqual:\"\\u22E2\",NotSquareSuperset:\"\\u2290\\u0338\",NotSquareSupersetEqual:\"\\u22E3\",NotSubset:\"\\u2282\\u20D2\",NotSubsetEqual:\"\\u2288\",NotSucceeds:\"\\u2281\",NotSucceedsEqual:\"\\u2AB0\\u0338\",NotSucceedsSlantEqual:\"\\u22E1\",NotSucceedsTilde:\"\\u227F\\u0338\",NotSuperset:\"\\u2283\\u20D2\",NotSupersetEqual:\"\\u2289\",NotTilde:\"\\u2241\",NotTildeEqual:\"\\u2244\",NotTildeFullEqual:\"\\u2247\",NotTildeTilde:\"\\u2249\",NotVerticalBar:\"\\u2224\",Nscr:\"\\u{1D4A9}\",Ntild:\"\\xD1\",Ntilde:\"\\xD1\",Nu:\"\\u039D\",OElig:\"\\u0152\",Oacut:\"\\xD3\",Oacute:\"\\xD3\",Ocir:\"\\xD4\",Ocirc:\"\\xD4\",Ocy:\"\\u041E\",Odblac:\"\\u0150\",Ofr:\"\\u{1D512}\",Ograv:\"\\xD2\",Ograve:\"\\xD2\",Omacr:\"\\u014C\",Omega:\"\\u03A9\",Omicron:\"\\u039F\",Oopf:\"\\u{1D546}\",OpenCurlyDoubleQuote:\"\\u201C\",OpenCurlyQuote:\"\\u2018\",Or:\"\\u2A54\",Oscr:\"\\u{1D4AA}\",Oslas:\"\\xD8\",Oslash:\"\\xD8\",Otild:\"\\xD5\",Otilde:\"\\xD5\",Otimes:\"\\u2A37\",Oum:\"\\xD6\",Ouml:\"\\xD6\",OverBar:\"\\u203E\",OverBrace:\"\\u23DE\",OverBracket:\"\\u23B4\",OverParenthesis:\"\\u23DC\",PartialD:\"\\u2202\",Pcy:\"\\u041F\",Pfr:\"\\u{1D513}\",Phi:\"\\u03A6\",Pi:\"\\u03A0\",PlusMinus:\"\\xB1\",Poincareplane:\"\\u210C\",Popf:\"\\u2119\",Pr:\"\\u2ABB\",Precedes:\"\\u227A\",PrecedesEqual:\"\\u2AAF\",PrecedesSlantEqual:\"\\u227C\",PrecedesTilde:\"\\u227E\",Prime:\"\\u2033\",Product:\"\\u220F\",Proportion:\"\\u2237\",Proportional:\"\\u221D\",Pscr:\"\\u{1D4AB}\",Psi:\"\\u03A8\",QUO:'\"',QUOT:'\"',Qfr:\"\\u{1D514}\",Qopf:\"\\u211A\",Qscr:\"\\u{1D4AC}\",RBarr:\"\\u2910\",RE:\"\\xAE\",REG:\"\\xAE\",Racute:\"\\u0154\",Rang:\"\\u27EB\",Rarr:\"\\u21A0\",Rarrtl:\"\\u2916\",Rcaron:\"\\u0158\",Rcedil:\"\\u0156\",Rcy:\"\\u0420\",Re:\"\\u211C\",ReverseElement:\"\\u220B\",ReverseEquilibrium:\"\\u21CB\",ReverseUpEquilibrium:\"\\u296F\",Rfr:\"\\u211C\",Rho:\"\\u03A1\",RightAngleBracket:\"\\u27E9\",RightArrow:\"\\u2192\",RightArrowBar:\"\\u21E5\",RightArrowLeftArrow:\"\\u21C4\",RightCeiling:\"\\u2309\",RightDoubleBracket:\"\\u27E7\",RightDownTeeVector:\"\\u295D\",RightDownVector:\"\\u21C2\",RightDownVectorBar:\"\\u2955\",RightFloor:\"\\u230B\",RightTee:\"\\u22A2\",RightTeeArrow:\"\\u21A6\",RightTeeVector:\"\\u295B\",RightTriangle:\"\\u22B3\",RightTriangleBar:\"\\u29D0\",RightTriangleEqual:\"\\u22B5\",RightUpDownVector:\"\\u294F\",RightUpTeeVector:\"\\u295C\",RightUpVector:\"\\u21BE\",RightUpVectorBar:\"\\u2954\",RightVector:\"\\u21C0\",RightVectorBar:\"\\u2953\",Rightarrow:\"\\u21D2\",Ropf:\"\\u211D\",RoundImplies:\"\\u2970\",Rrightarrow:\"\\u21DB\",Rscr:\"\\u211B\",Rsh:\"\\u21B1\",RuleDelayed:\"\\u29F4\",SHCHcy:\"\\u0429\",SHcy:\"\\u0428\",SOFTcy:\"\\u042C\",Sacute:\"\\u015A\",Sc:\"\\u2ABC\",Scaron:\"\\u0160\",Scedil:\"\\u015E\",Scirc:\"\\u015C\",Scy:\"\\u0421\",Sfr:\"\\u{1D516}\",ShortDownArrow:\"\\u2193\",ShortLeftArrow:\"\\u2190\",ShortRightArrow:\"\\u2192\",ShortUpArrow:\"\\u2191\",Sigma:\"\\u03A3\",SmallCircle:\"\\u2218\",Sopf:\"\\u{1D54A}\",Sqrt:\"\\u221A\",Square:\"\\u25A1\",SquareIntersection:\"\\u2293\",SquareSubset:\"\\u228F\",SquareSubsetEqual:\"\\u2291\",SquareSuperset:\"\\u2290\",SquareSupersetEqual:\"\\u2292\",SquareUnion:\"\\u2294\",Sscr:\"\\u{1D4AE}\",Star:\"\\u22C6\",Sub:\"\\u22D0\",Subset:\"\\u22D0\",SubsetEqual:\"\\u2286\",Succeeds:\"\\u227B\",SucceedsEqual:\"\\u2AB0\",SucceedsSlantEqual:\"\\u227D\",SucceedsTilde:\"\\u227F\",SuchThat:\"\\u220B\",Sum:\"\\u2211\",Sup:\"\\u22D1\",Superset:\"\\u2283\",SupersetEqual:\"\\u2287\",Supset:\"\\u22D1\",THOR:\"\\xDE\",THORN:\"\\xDE\",TRADE:\"\\u2122\",TSHcy:\"\\u040B\",TScy:\"\\u0426\",Tab:\"\t\",Tau:\"\\u03A4\",Tcaron:\"\\u0164\",Tcedil:\"\\u0162\",Tcy:\"\\u0422\",Tfr:\"\\u{1D517}\",Therefore:\"\\u2234\",Theta:\"\\u0398\",ThickSpace:\"\\u205F\\u200A\",ThinSpace:\"\\u2009\",Tilde:\"\\u223C\",TildeEqual:\"\\u2243\",TildeFullEqual:\"\\u2245\",TildeTilde:\"\\u2248\",Topf:\"\\u{1D54B}\",TripleDot:\"\\u20DB\",Tscr:\"\\u{1D4AF}\",Tstrok:\"\\u0166\",Uacut:\"\\xDA\",Uacute:\"\\xDA\",Uarr:\"\\u219F\",Uarrocir:\"\\u2949\",Ubrcy:\"\\u040E\",Ubreve:\"\\u016C\",Ucir:\"\\xDB\",Ucirc:\"\\xDB\",Ucy:\"\\u0423\",Udblac:\"\\u0170\",Ufr:\"\\u{1D518}\",Ugrav:\"\\xD9\",Ugrave:\"\\xD9\",Umacr:\"\\u016A\",UnderBar:\"_\",UnderBrace:\"\\u23DF\",UnderBracket:\"\\u23B5\",UnderParenthesis:\"\\u23DD\",Union:\"\\u22C3\",UnionPlus:\"\\u228E\",Uogon:\"\\u0172\",Uopf:\"\\u{1D54C}\",UpArrow:\"\\u2191\",UpArrowBar:\"\\u2912\",UpArrowDownArrow:\"\\u21C5\",UpDownArrow:\"\\u2195\",UpEquilibrium:\"\\u296E\",UpTee:\"\\u22A5\",UpTeeArrow:\"\\u21A5\",Uparrow:\"\\u21D1\",Updownarrow:\"\\u21D5\",UpperLeftArrow:\"\\u2196\",UpperRightArrow:\"\\u2197\",Upsi:\"\\u03D2\",Upsilon:\"\\u03A5\",Uring:\"\\u016E\",Uscr:\"\\u{1D4B0}\",Utilde:\"\\u0168\",Uum:\"\\xDC\",Uuml:\"\\xDC\",VDash:\"\\u22AB\",Vbar:\"\\u2AEB\",Vcy:\"\\u0412\",Vdash:\"\\u22A9\",Vdashl:\"\\u2AE6\",Vee:\"\\u22C1\",Verbar:\"\\u2016\",Vert:\"\\u2016\",VerticalBar:\"\\u2223\",VerticalLine:\"|\",VerticalSeparator:\"\\u2758\",VerticalTilde:\"\\u2240\",VeryThinSpace:\"\\u200A\",Vfr:\"\\u{1D519}\",Vopf:\"\\u{1D54D}\",Vscr:\"\\u{1D4B1}\",Vvdash:\"\\u22AA\",Wcirc:\"\\u0174\",Wedge:\"\\u22C0\",Wfr:\"\\u{1D51A}\",Wopf:\"\\u{1D54E}\",Wscr:\"\\u{1D4B2}\",Xfr:\"\\u{1D51B}\",Xi:\"\\u039E\",Xopf:\"\\u{1D54F}\",Xscr:\"\\u{1D4B3}\",YAcy:\"\\u042F\",YIcy:\"\\u0407\",YUcy:\"\\u042E\",Yacut:\"\\xDD\",Yacute:\"\\xDD\",Ycirc:\"\\u0176\",Ycy:\"\\u042B\",Yfr:\"\\u{1D51C}\",Yopf:\"\\u{1D550}\",Yscr:\"\\u{1D4B4}\",Yuml:\"\\u0178\",ZHcy:\"\\u0416\",Zacute:\"\\u0179\",Zcaron:\"\\u017D\",Zcy:\"\\u0417\",Zdot:\"\\u017B\",ZeroWidthSpace:\"\\u200B\",Zeta:\"\\u0396\",Zfr:\"\\u2128\",Zopf:\"\\u2124\",Zscr:\"\\u{1D4B5}\",aacut:\"\\xE1\",aacute:\"\\xE1\",abreve:\"\\u0103\",ac:\"\\u223E\",acE:\"\\u223E\\u0333\",acd:\"\\u223F\",acir:\"\\xE2\",acirc:\"\\xE2\",acut:\"\\xB4\",acute:\"\\xB4\",acy:\"\\u0430\",aeli:\"\\xE6\",aelig:\"\\xE6\",af:\"\\u2061\",afr:\"\\u{1D51E}\",agrav:\"\\xE0\",agrave:\"\\xE0\",alefsym:\"\\u2135\",aleph:\"\\u2135\",alpha:\"\\u03B1\",amacr:\"\\u0101\",amalg:\"\\u2A3F\",am:\"&\",amp:\"&\",and:\"\\u2227\",andand:\"\\u2A55\",andd:\"\\u2A5C\",andslope:\"\\u2A58\",andv:\"\\u2A5A\",ang:\"\\u2220\",ange:\"\\u29A4\",angle:\"\\u2220\",angmsd:\"\\u2221\",angmsdaa:\"\\u29A8\",angmsdab:\"\\u29A9\",angmsdac:\"\\u29AA\",angmsdad:\"\\u29AB\",angmsdae:\"\\u29AC\",angmsdaf:\"\\u29AD\",angmsdag:\"\\u29AE\",angmsdah:\"\\u29AF\",angrt:\"\\u221F\",angrtvb:\"\\u22BE\",angrtvbd:\"\\u299D\",angsph:\"\\u2222\",angst:\"\\xC5\",angzarr:\"\\u237C\",aogon:\"\\u0105\",aopf:\"\\u{1D552}\",ap:\"\\u2248\",apE:\"\\u2A70\",apacir:\"\\u2A6F\",ape:\"\\u224A\",apid:\"\\u224B\",apos:\"'\",approx:\"\\u2248\",approxeq:\"\\u224A\",arin:\"\\xE5\",aring:\"\\xE5\",ascr:\"\\u{1D4B6}\",ast:\"*\",asymp:\"\\u2248\",asympeq:\"\\u224D\",atild:\"\\xE3\",atilde:\"\\xE3\",aum:\"\\xE4\",auml:\"\\xE4\",awconint:\"\\u2233\",awint:\"\\u2A11\",bNot:\"\\u2AED\",backcong:\"\\u224C\",backepsilon:\"\\u03F6\",backprime:\"\\u2035\",backsim:\"\\u223D\",backsimeq:\"\\u22CD\",barvee:\"\\u22BD\",barwed:\"\\u2305\",barwedge:\"\\u2305\",bbrk:\"\\u23B5\",bbrktbrk:\"\\u23B6\",bcong:\"\\u224C\",bcy:\"\\u0431\",bdquo:\"\\u201E\",becaus:\"\\u2235\",because:\"\\u2235\",bemptyv:\"\\u29B0\",bepsi:\"\\u03F6\",bernou:\"\\u212C\",beta:\"\\u03B2\",beth:\"\\u2136\",between:\"\\u226C\",bfr:\"\\u{1D51F}\",bigcap:\"\\u22C2\",bigcirc:\"\\u25EF\",bigcup:\"\\u22C3\",bigodot:\"\\u2A00\",bigoplus:\"\\u2A01\",bigotimes:\"\\u2A02\",bigsqcup:\"\\u2A06\",bigstar:\"\\u2605\",bigtriangledown:\"\\u25BD\",bigtriangleup:\"\\u25B3\",biguplus:\"\\u2A04\",bigvee:\"\\u22C1\",bigwedge:\"\\u22C0\",bkarow:\"\\u290D\",blacklozenge:\"\\u29EB\",blacksquare:\"\\u25AA\",blacktriangle:\"\\u25B4\",blacktriangledown:\"\\u25BE\",blacktriangleleft:\"\\u25C2\",blacktriangleright:\"\\u25B8\",blank:\"\\u2423\",blk12:\"\\u2592\",blk14:\"\\u2591\",blk34:\"\\u2593\",block:\"\\u2588\",bne:\"=\\u20E5\",bnequiv:\"\\u2261\\u20E5\",bnot:\"\\u2310\",bopf:\"\\u{1D553}\",bot:\"\\u22A5\",bottom:\"\\u22A5\",bowtie:\"\\u22C8\",boxDL:\"\\u2557\",boxDR:\"\\u2554\",boxDl:\"\\u2556\",boxDr:\"\\u2553\",boxH:\"\\u2550\",boxHD:\"\\u2566\",boxHU:\"\\u2569\",boxHd:\"\\u2564\",boxHu:\"\\u2567\",boxUL:\"\\u255D\",boxUR:\"\\u255A\",boxUl:\"\\u255C\",boxUr:\"\\u2559\",boxV:\"\\u2551\",boxVH:\"\\u256C\",boxVL:\"\\u2563\",boxVR:\"\\u2560\",boxVh:\"\\u256B\",boxVl:\"\\u2562\",boxVr:\"\\u255F\",boxbox:\"\\u29C9\",boxdL:\"\\u2555\",boxdR:\"\\u2552\",boxdl:\"\\u2510\",boxdr:\"\\u250C\",boxh:\"\\u2500\",boxhD:\"\\u2565\",boxhU:\"\\u2568\",boxhd:\"\\u252C\",boxhu:\"\\u2534\",boxminus:\"\\u229F\",boxplus:\"\\u229E\",boxtimes:\"\\u22A0\",boxuL:\"\\u255B\",boxuR:\"\\u2558\",boxul:\"\\u2518\",boxur:\"\\u2514\",boxv:\"\\u2502\",boxvH:\"\\u256A\",boxvL:\"\\u2561\",boxvR:\"\\u255E\",boxvh:\"\\u253C\",boxvl:\"\\u2524\",boxvr:\"\\u251C\",bprime:\"\\u2035\",breve:\"\\u02D8\",brvba:\"\\xA6\",brvbar:\"\\xA6\",bscr:\"\\u{1D4B7}\",bsemi:\"\\u204F\",bsim:\"\\u223D\",bsime:\"\\u22CD\",bsol:\"\\\\\",bsolb:\"\\u29C5\",bsolhsub:\"\\u27C8\",bull:\"\\u2022\",bullet:\"\\u2022\",bump:\"\\u224E\",bumpE:\"\\u2AAE\",bumpe:\"\\u224F\",bumpeq:\"\\u224F\",cacute:\"\\u0107\",cap:\"\\u2229\",capand:\"\\u2A44\",capbrcup:\"\\u2A49\",capcap:\"\\u2A4B\",capcup:\"\\u2A47\",capdot:\"\\u2A40\",caps:\"\\u2229\\uFE00\",caret:\"\\u2041\",caron:\"\\u02C7\",ccaps:\"\\u2A4D\",ccaron:\"\\u010D\",ccedi:\"\\xE7\",ccedil:\"\\xE7\",ccirc:\"\\u0109\",ccups:\"\\u2A4C\",ccupssm:\"\\u2A50\",cdot:\"\\u010B\",cedi:\"\\xB8\",cedil:\"\\xB8\",cemptyv:\"\\u29B2\",cen:\"\\xA2\",cent:\"\\xA2\",centerdot:\"\\xB7\",cfr:\"\\u{1D520}\",chcy:\"\\u0447\",check:\"\\u2713\",checkmark:\"\\u2713\",chi:\"\\u03C7\",cir:\"\\u25CB\",cirE:\"\\u29C3\",circ:\"\\u02C6\",circeq:\"\\u2257\",circlearrowleft:\"\\u21BA\",circlearrowright:\"\\u21BB\",circledR:\"\\xAE\",circledS:\"\\u24C8\",circledast:\"\\u229B\",circledcirc:\"\\u229A\",circleddash:\"\\u229D\",cire:\"\\u2257\",cirfnint:\"\\u2A10\",cirmid:\"\\u2AEF\",cirscir:\"\\u29C2\",clubs:\"\\u2663\",clubsuit:\"\\u2663\",colon:\":\",colone:\"\\u2254\",coloneq:\"\\u2254\",comma:\",\",commat:\"@\",comp:\"\\u2201\",compfn:\"\\u2218\",complement:\"\\u2201\",complexes:\"\\u2102\",cong:\"\\u2245\",congdot:\"\\u2A6D\",conint:\"\\u222E\",copf:\"\\u{1D554}\",coprod:\"\\u2210\",cop:\"\\xA9\",copy:\"\\xA9\",copysr:\"\\u2117\",crarr:\"\\u21B5\",cross:\"\\u2717\",cscr:\"\\u{1D4B8}\",csub:\"\\u2ACF\",csube:\"\\u2AD1\",csup:\"\\u2AD0\",csupe:\"\\u2AD2\",ctdot:\"\\u22EF\",cudarrl:\"\\u2938\",cudarrr:\"\\u2935\",cuepr:\"\\u22DE\",cuesc:\"\\u22DF\",cularr:\"\\u21B6\",cularrp:\"\\u293D\",cup:\"\\u222A\",cupbrcap:\"\\u2A48\",cupcap:\"\\u2A46\",cupcup:\"\\u2A4A\",cupdot:\"\\u228D\",cupor:\"\\u2A45\",cups:\"\\u222A\\uFE00\",curarr:\"\\u21B7\",curarrm:\"\\u293C\",curlyeqprec:\"\\u22DE\",curlyeqsucc:\"\\u22DF\",curlyvee:\"\\u22CE\",curlywedge:\"\\u22CF\",curre:\"\\xA4\",curren:\"\\xA4\",curvearrowleft:\"\\u21B6\",curvearrowright:\"\\u21B7\",cuvee:\"\\u22CE\",cuwed:\"\\u22CF\",cwconint:\"\\u2232\",cwint:\"\\u2231\",cylcty:\"\\u232D\",dArr:\"\\u21D3\",dHar:\"\\u2965\",dagger:\"\\u2020\",daleth:\"\\u2138\",darr:\"\\u2193\",dash:\"\\u2010\",dashv:\"\\u22A3\",dbkarow:\"\\u290F\",dblac:\"\\u02DD\",dcaron:\"\\u010F\",dcy:\"\\u0434\",dd:\"\\u2146\",ddagger:\"\\u2021\",ddarr:\"\\u21CA\",ddotseq:\"\\u2A77\",de:\"\\xB0\",deg:\"\\xB0\",delta:\"\\u03B4\",demptyv:\"\\u29B1\",dfisht:\"\\u297F\",dfr:\"\\u{1D521}\",dharl:\"\\u21C3\",dharr:\"\\u21C2\",diam:\"\\u22C4\",diamond:\"\\u22C4\",diamondsuit:\"\\u2666\",diams:\"\\u2666\",die:\"\\xA8\",digamma:\"\\u03DD\",disin:\"\\u22F2\",div:\"\\xF7\",divid:\"\\xF7\",divide:\"\\xF7\",divideontimes:\"\\u22C7\",divonx:\"\\u22C7\",djcy:\"\\u0452\",dlcorn:\"\\u231E\",dlcrop:\"\\u230D\",dollar:\"$\",dopf:\"\\u{1D555}\",dot:\"\\u02D9\",doteq:\"\\u2250\",doteqdot:\"\\u2251\",dotminus:\"\\u2238\",dotplus:\"\\u2214\",dotsquare:\"\\u22A1\",doublebarwedge:\"\\u2306\",downarrow:\"\\u2193\",downdownarrows:\"\\u21CA\",downharpoonleft:\"\\u21C3\",downharpoonright:\"\\u21C2\",drbkarow:\"\\u2910\",drcorn:\"\\u231F\",drcrop:\"\\u230C\",dscr:\"\\u{1D4B9}\",dscy:\"\\u0455\",dsol:\"\\u29F6\",dstrok:\"\\u0111\",dtdot:\"\\u22F1\",dtri:\"\\u25BF\",dtrif:\"\\u25BE\",duarr:\"\\u21F5\",duhar:\"\\u296F\",dwangle:\"\\u29A6\",dzcy:\"\\u045F\",dzigrarr:\"\\u27FF\",eDDot:\"\\u2A77\",eDot:\"\\u2251\",eacut:\"\\xE9\",eacute:\"\\xE9\",easter:\"\\u2A6E\",ecaron:\"\\u011B\",ecir:\"\\xEA\",ecirc:\"\\xEA\",ecolon:\"\\u2255\",ecy:\"\\u044D\",edot:\"\\u0117\",ee:\"\\u2147\",efDot:\"\\u2252\",efr:\"\\u{1D522}\",eg:\"\\u2A9A\",egrav:\"\\xE8\",egrave:\"\\xE8\",egs:\"\\u2A96\",egsdot:\"\\u2A98\",el:\"\\u2A99\",elinters:\"\\u23E7\",ell:\"\\u2113\",els:\"\\u2A95\",elsdot:\"\\u2A97\",emacr:\"\\u0113\",empty:\"\\u2205\",emptyset:\"\\u2205\",emptyv:\"\\u2205\",emsp13:\"\\u2004\",emsp14:\"\\u2005\",emsp:\"\\u2003\",eng:\"\\u014B\",ensp:\"\\u2002\",eogon:\"\\u0119\",eopf:\"\\u{1D556}\",epar:\"\\u22D5\",eparsl:\"\\u29E3\",eplus:\"\\u2A71\",epsi:\"\\u03B5\",epsilon:\"\\u03B5\",epsiv:\"\\u03F5\",eqcirc:\"\\u2256\",eqcolon:\"\\u2255\",eqsim:\"\\u2242\",eqslantgtr:\"\\u2A96\",eqslantless:\"\\u2A95\",equals:\"=\",equest:\"\\u225F\",equiv:\"\\u2261\",equivDD:\"\\u2A78\",eqvparsl:\"\\u29E5\",erDot:\"\\u2253\",erarr:\"\\u2971\",escr:\"\\u212F\",esdot:\"\\u2250\",esim:\"\\u2242\",eta:\"\\u03B7\",et:\"\\xF0\",eth:\"\\xF0\",eum:\"\\xEB\",euml:\"\\xEB\",euro:\"\\u20AC\",excl:\"!\",exist:\"\\u2203\",expectation:\"\\u2130\",exponentiale:\"\\u2147\",fallingdotseq:\"\\u2252\",fcy:\"\\u0444\",female:\"\\u2640\",ffilig:\"\\uFB03\",fflig:\"\\uFB00\",ffllig:\"\\uFB04\",ffr:\"\\u{1D523}\",filig:\"\\uFB01\",fjlig:\"fj\",flat:\"\\u266D\",fllig:\"\\uFB02\",fltns:\"\\u25B1\",fnof:\"\\u0192\",fopf:\"\\u{1D557}\",forall:\"\\u2200\",fork:\"\\u22D4\",forkv:\"\\u2AD9\",fpartint:\"\\u2A0D\",frac1:\"\\xBC\",frac12:\"\\xBD\",frac13:\"\\u2153\",frac14:\"\\xBC\",frac15:\"\\u2155\",frac16:\"\\u2159\",frac18:\"\\u215B\",frac23:\"\\u2154\",frac25:\"\\u2156\",frac3:\"\\xBE\",frac34:\"\\xBE\",frac35:\"\\u2157\",frac38:\"\\u215C\",frac45:\"\\u2158\",frac56:\"\\u215A\",frac58:\"\\u215D\",frac78:\"\\u215E\",frasl:\"\\u2044\",frown:\"\\u2322\",fscr:\"\\u{1D4BB}\",gE:\"\\u2267\",gEl:\"\\u2A8C\",gacute:\"\\u01F5\",gamma:\"\\u03B3\",gammad:\"\\u03DD\",gap:\"\\u2A86\",gbreve:\"\\u011F\",gcirc:\"\\u011D\",gcy:\"\\u0433\",gdot:\"\\u0121\",ge:\"\\u2265\",gel:\"\\u22DB\",geq:\"\\u2265\",geqq:\"\\u2267\",geqslant:\"\\u2A7E\",ges:\"\\u2A7E\",gescc:\"\\u2AA9\",gesdot:\"\\u2A80\",gesdoto:\"\\u2A82\",gesdotol:\"\\u2A84\",gesl:\"\\u22DB\\uFE00\",gesles:\"\\u2A94\",gfr:\"\\u{1D524}\",gg:\"\\u226B\",ggg:\"\\u22D9\",gimel:\"\\u2137\",gjcy:\"\\u0453\",gl:\"\\u2277\",glE:\"\\u2A92\",gla:\"\\u2AA5\",glj:\"\\u2AA4\",gnE:\"\\u2269\",gnap:\"\\u2A8A\",gnapprox:\"\\u2A8A\",gne:\"\\u2A88\",gneq:\"\\u2A88\",gneqq:\"\\u2269\",gnsim:\"\\u22E7\",gopf:\"\\u{1D558}\",grave:\"`\",gscr:\"\\u210A\",gsim:\"\\u2273\",gsime:\"\\u2A8E\",gsiml:\"\\u2A90\",g:\">\",gt:\">\",gtcc:\"\\u2AA7\",gtcir:\"\\u2A7A\",gtdot:\"\\u22D7\",gtlPar:\"\\u2995\",gtquest:\"\\u2A7C\",gtrapprox:\"\\u2A86\",gtrarr:\"\\u2978\",gtrdot:\"\\u22D7\",gtreqless:\"\\u22DB\",gtreqqless:\"\\u2A8C\",gtrless:\"\\u2277\",gtrsim:\"\\u2273\",gvertneqq:\"\\u2269\\uFE00\",gvnE:\"\\u2269\\uFE00\",hArr:\"\\u21D4\",hairsp:\"\\u200A\",half:\"\\xBD\",hamilt:\"\\u210B\",hardcy:\"\\u044A\",harr:\"\\u2194\",harrcir:\"\\u2948\",harrw:\"\\u21AD\",hbar:\"\\u210F\",hcirc:\"\\u0125\",hearts:\"\\u2665\",heartsuit:\"\\u2665\",hellip:\"\\u2026\",hercon:\"\\u22B9\",hfr:\"\\u{1D525}\",hksearow:\"\\u2925\",hkswarow:\"\\u2926\",hoarr:\"\\u21FF\",homtht:\"\\u223B\",hookleftarrow:\"\\u21A9\",hookrightarrow:\"\\u21AA\",hopf:\"\\u{1D559}\",horbar:\"\\u2015\",hscr:\"\\u{1D4BD}\",hslash:\"\\u210F\",hstrok:\"\\u0127\",hybull:\"\\u2043\",hyphen:\"\\u2010\",iacut:\"\\xED\",iacute:\"\\xED\",ic:\"\\u2063\",icir:\"\\xEE\",icirc:\"\\xEE\",icy:\"\\u0438\",iecy:\"\\u0435\",iexc:\"\\xA1\",iexcl:\"\\xA1\",iff:\"\\u21D4\",ifr:\"\\u{1D526}\",igrav:\"\\xEC\",igrave:\"\\xEC\",ii:\"\\u2148\",iiiint:\"\\u2A0C\",iiint:\"\\u222D\",iinfin:\"\\u29DC\",iiota:\"\\u2129\",ijlig:\"\\u0133\",imacr:\"\\u012B\",image:\"\\u2111\",imagline:\"\\u2110\",imagpart:\"\\u2111\",imath:\"\\u0131\",imof:\"\\u22B7\",imped:\"\\u01B5\",in:\"\\u2208\",incare:\"\\u2105\",infin:\"\\u221E\",infintie:\"\\u29DD\",inodot:\"\\u0131\",int:\"\\u222B\",intcal:\"\\u22BA\",integers:\"\\u2124\",intercal:\"\\u22BA\",intlarhk:\"\\u2A17\",intprod:\"\\u2A3C\",iocy:\"\\u0451\",iogon:\"\\u012F\",iopf:\"\\u{1D55A}\",iota:\"\\u03B9\",iprod:\"\\u2A3C\",iques:\"\\xBF\",iquest:\"\\xBF\",iscr:\"\\u{1D4BE}\",isin:\"\\u2208\",isinE:\"\\u22F9\",isindot:\"\\u22F5\",isins:\"\\u22F4\",isinsv:\"\\u22F3\",isinv:\"\\u2208\",it:\"\\u2062\",itilde:\"\\u0129\",iukcy:\"\\u0456\",ium:\"\\xEF\",iuml:\"\\xEF\",jcirc:\"\\u0135\",jcy:\"\\u0439\",jfr:\"\\u{1D527}\",jmath:\"\\u0237\",jopf:\"\\u{1D55B}\",jscr:\"\\u{1D4BF}\",jsercy:\"\\u0458\",jukcy:\"\\u0454\",kappa:\"\\u03BA\",kappav:\"\\u03F0\",kcedil:\"\\u0137\",kcy:\"\\u043A\",kfr:\"\\u{1D528}\",kgreen:\"\\u0138\",khcy:\"\\u0445\",kjcy:\"\\u045C\",kopf:\"\\u{1D55C}\",kscr:\"\\u{1D4C0}\",lAarr:\"\\u21DA\",lArr:\"\\u21D0\",lAtail:\"\\u291B\",lBarr:\"\\u290E\",lE:\"\\u2266\",lEg:\"\\u2A8B\",lHar:\"\\u2962\",lacute:\"\\u013A\",laemptyv:\"\\u29B4\",lagran:\"\\u2112\",lambda:\"\\u03BB\",lang:\"\\u27E8\",langd:\"\\u2991\",langle:\"\\u27E8\",lap:\"\\u2A85\",laqu:\"\\xAB\",laquo:\"\\xAB\",larr:\"\\u2190\",larrb:\"\\u21E4\",larrbfs:\"\\u291F\",larrfs:\"\\u291D\",larrhk:\"\\u21A9\",larrlp:\"\\u21AB\",larrpl:\"\\u2939\",larrsim:\"\\u2973\",larrtl:\"\\u21A2\",lat:\"\\u2AAB\",latail:\"\\u2919\",late:\"\\u2AAD\",lates:\"\\u2AAD\\uFE00\",lbarr:\"\\u290C\",lbbrk:\"\\u2772\",lbrace:\"{\",lbrack:\"[\",lbrke:\"\\u298B\",lbrksld:\"\\u298F\",lbrkslu:\"\\u298D\",lcaron:\"\\u013E\",lcedil:\"\\u013C\",lceil:\"\\u2308\",lcub:\"{\",lcy:\"\\u043B\",ldca:\"\\u2936\",ldquo:\"\\u201C\",ldquor:\"\\u201E\",ldrdhar:\"\\u2967\",ldrushar:\"\\u294B\",ldsh:\"\\u21B2\",le:\"\\u2264\",leftarrow:\"\\u2190\",leftarrowtail:\"\\u21A2\",leftharpoondown:\"\\u21BD\",leftharpoonup:\"\\u21BC\",leftleftarrows:\"\\u21C7\",leftrightarrow:\"\\u2194\",leftrightarrows:\"\\u21C6\",leftrightharpoons:\"\\u21CB\",leftrightsquigarrow:\"\\u21AD\",leftthreetimes:\"\\u22CB\",leg:\"\\u22DA\",leq:\"\\u2264\",leqq:\"\\u2266\",leqslant:\"\\u2A7D\",les:\"\\u2A7D\",lescc:\"\\u2AA8\",lesdot:\"\\u2A7F\",lesdoto:\"\\u2A81\",lesdotor:\"\\u2A83\",lesg:\"\\u22DA\\uFE00\",lesges:\"\\u2A93\",lessapprox:\"\\u2A85\",lessdot:\"\\u22D6\",lesseqgtr:\"\\u22DA\",lesseqqgtr:\"\\u2A8B\",lessgtr:\"\\u2276\",lesssim:\"\\u2272\",lfisht:\"\\u297C\",lfloor:\"\\u230A\",lfr:\"\\u{1D529}\",lg:\"\\u2276\",lgE:\"\\u2A91\",lhard:\"\\u21BD\",lharu:\"\\u21BC\",lharul:\"\\u296A\",lhblk:\"\\u2584\",ljcy:\"\\u0459\",ll:\"\\u226A\",llarr:\"\\u21C7\",llcorner:\"\\u231E\",llhard:\"\\u296B\",lltri:\"\\u25FA\",lmidot:\"\\u0140\",lmoust:\"\\u23B0\",lmoustache:\"\\u23B0\",lnE:\"\\u2268\",lnap:\"\\u2A89\",lnapprox:\"\\u2A89\",lne:\"\\u2A87\",lneq:\"\\u2A87\",lneqq:\"\\u2268\",lnsim:\"\\u22E6\",loang:\"\\u27EC\",loarr:\"\\u21FD\",lobrk:\"\\u27E6\",longleftarrow:\"\\u27F5\",longleftrightarrow:\"\\u27F7\",longmapsto:\"\\u27FC\",longrightarrow:\"\\u27F6\",looparrowleft:\"\\u21AB\",looparrowright:\"\\u21AC\",lopar:\"\\u2985\",lopf:\"\\u{1D55D}\",loplus:\"\\u2A2D\",lotimes:\"\\u2A34\",lowast:\"\\u2217\",lowbar:\"_\",loz:\"\\u25CA\",lozenge:\"\\u25CA\",lozf:\"\\u29EB\",lpar:\"(\",lparlt:\"\\u2993\",lrarr:\"\\u21C6\",lrcorner:\"\\u231F\",lrhar:\"\\u21CB\",lrhard:\"\\u296D\",lrm:\"\\u200E\",lrtri:\"\\u22BF\",lsaquo:\"\\u2039\",lscr:\"\\u{1D4C1}\",lsh:\"\\u21B0\",lsim:\"\\u2272\",lsime:\"\\u2A8D\",lsimg:\"\\u2A8F\",lsqb:\"[\",lsquo:\"\\u2018\",lsquor:\"\\u201A\",lstrok:\"\\u0142\",l:\"<\",lt:\"<\",ltcc:\"\\u2AA6\",ltcir:\"\\u2A79\",ltdot:\"\\u22D6\",lthree:\"\\u22CB\",ltimes:\"\\u22C9\",ltlarr:\"\\u2976\",ltquest:\"\\u2A7B\",ltrPar:\"\\u2996\",ltri:\"\\u25C3\",ltrie:\"\\u22B4\",ltrif:\"\\u25C2\",lurdshar:\"\\u294A\",luruhar:\"\\u2966\",lvertneqq:\"\\u2268\\uFE00\",lvnE:\"\\u2268\\uFE00\",mDDot:\"\\u223A\",mac:\"\\xAF\",macr:\"\\xAF\",male:\"\\u2642\",malt:\"\\u2720\",maltese:\"\\u2720\",map:\"\\u21A6\",mapsto:\"\\u21A6\",mapstodown:\"\\u21A7\",mapstoleft:\"\\u21A4\",mapstoup:\"\\u21A5\",marker:\"\\u25AE\",mcomma:\"\\u2A29\",mcy:\"\\u043C\",mdash:\"\\u2014\",measuredangle:\"\\u2221\",mfr:\"\\u{1D52A}\",mho:\"\\u2127\",micr:\"\\xB5\",micro:\"\\xB5\",mid:\"\\u2223\",midast:\"*\",midcir:\"\\u2AF0\",middo:\"\\xB7\",middot:\"\\xB7\",minus:\"\\u2212\",minusb:\"\\u229F\",minusd:\"\\u2238\",minusdu:\"\\u2A2A\",mlcp:\"\\u2ADB\",mldr:\"\\u2026\",mnplus:\"\\u2213\",models:\"\\u22A7\",mopf:\"\\u{1D55E}\",mp:\"\\u2213\",mscr:\"\\u{1D4C2}\",mstpos:\"\\u223E\",mu:\"\\u03BC\",multimap:\"\\u22B8\",mumap:\"\\u22B8\",nGg:\"\\u22D9\\u0338\",nGt:\"\\u226B\\u20D2\",nGtv:\"\\u226B\\u0338\",nLeftarrow:\"\\u21CD\",nLeftrightarrow:\"\\u21CE\",nLl:\"\\u22D8\\u0338\",nLt:\"\\u226A\\u20D2\",nLtv:\"\\u226A\\u0338\",nRightarrow:\"\\u21CF\",nVDash:\"\\u22AF\",nVdash:\"\\u22AE\",nabla:\"\\u2207\",nacute:\"\\u0144\",nang:\"\\u2220\\u20D2\",nap:\"\\u2249\",napE:\"\\u2A70\\u0338\",napid:\"\\u224B\\u0338\",napos:\"\\u0149\",napprox:\"\\u2249\",natur:\"\\u266E\",natural:\"\\u266E\",naturals:\"\\u2115\",nbs:\"\\xA0\",nbsp:\"\\xA0\",nbump:\"\\u224E\\u0338\",nbumpe:\"\\u224F\\u0338\",ncap:\"\\u2A43\",ncaron:\"\\u0148\",ncedil:\"\\u0146\",ncong:\"\\u2247\",ncongdot:\"\\u2A6D\\u0338\",ncup:\"\\u2A42\",ncy:\"\\u043D\",ndash:\"\\u2013\",ne:\"\\u2260\",neArr:\"\\u21D7\",nearhk:\"\\u2924\",nearr:\"\\u2197\",nearrow:\"\\u2197\",nedot:\"\\u2250\\u0338\",nequiv:\"\\u2262\",nesear:\"\\u2928\",nesim:\"\\u2242\\u0338\",nexist:\"\\u2204\",nexists:\"\\u2204\",nfr:\"\\u{1D52B}\",ngE:\"\\u2267\\u0338\",nge:\"\\u2271\",ngeq:\"\\u2271\",ngeqq:\"\\u2267\\u0338\",ngeqslant:\"\\u2A7E\\u0338\",nges:\"\\u2A7E\\u0338\",ngsim:\"\\u2275\",ngt:\"\\u226F\",ngtr:\"\\u226F\",nhArr:\"\\u21CE\",nharr:\"\\u21AE\",nhpar:\"\\u2AF2\",ni:\"\\u220B\",nis:\"\\u22FC\",nisd:\"\\u22FA\",niv:\"\\u220B\",njcy:\"\\u045A\",nlArr:\"\\u21CD\",nlE:\"\\u2266\\u0338\",nlarr:\"\\u219A\",nldr:\"\\u2025\",nle:\"\\u2270\",nleftarrow:\"\\u219A\",nleftrightarrow:\"\\u21AE\",nleq:\"\\u2270\",nleqq:\"\\u2266\\u0338\",nleqslant:\"\\u2A7D\\u0338\",nles:\"\\u2A7D\\u0338\",nless:\"\\u226E\",nlsim:\"\\u2274\",nlt:\"\\u226E\",nltri:\"\\u22EA\",nltrie:\"\\u22EC\",nmid:\"\\u2224\",nopf:\"\\u{1D55F}\",no:\"\\xAC\",not:\"\\xAC\",notin:\"\\u2209\",notinE:\"\\u22F9\\u0338\",notindot:\"\\u22F5\\u0338\",notinva:\"\\u2209\",notinvb:\"\\u22F7\",notinvc:\"\\u22F6\",notni:\"\\u220C\",notniva:\"\\u220C\",notnivb:\"\\u22FE\",notnivc:\"\\u22FD\",npar:\"\\u2226\",nparallel:\"\\u2226\",nparsl:\"\\u2AFD\\u20E5\",npart:\"\\u2202\\u0338\",npolint:\"\\u2A14\",npr:\"\\u2280\",nprcue:\"\\u22E0\",npre:\"\\u2AAF\\u0338\",nprec:\"\\u2280\",npreceq:\"\\u2AAF\\u0338\",nrArr:\"\\u21CF\",nrarr:\"\\u219B\",nrarrc:\"\\u2933\\u0338\",nrarrw:\"\\u219D\\u0338\",nrightarrow:\"\\u219B\",nrtri:\"\\u22EB\",nrtrie:\"\\u22ED\",nsc:\"\\u2281\",nsccue:\"\\u22E1\",nsce:\"\\u2AB0\\u0338\",nscr:\"\\u{1D4C3}\",nshortmid:\"\\u2224\",nshortparallel:\"\\u2226\",nsim:\"\\u2241\",nsime:\"\\u2244\",nsimeq:\"\\u2244\",nsmid:\"\\u2224\",nspar:\"\\u2226\",nsqsube:\"\\u22E2\",nsqsupe:\"\\u22E3\",nsub:\"\\u2284\",nsubE:\"\\u2AC5\\u0338\",nsube:\"\\u2288\",nsubset:\"\\u2282\\u20D2\",nsubseteq:\"\\u2288\",nsubseteqq:\"\\u2AC5\\u0338\",nsucc:\"\\u2281\",nsucceq:\"\\u2AB0\\u0338\",nsup:\"\\u2285\",nsupE:\"\\u2AC6\\u0338\",nsupe:\"\\u2289\",nsupset:\"\\u2283\\u20D2\",nsupseteq:\"\\u2289\",nsupseteqq:\"\\u2AC6\\u0338\",ntgl:\"\\u2279\",ntild:\"\\xF1\",ntilde:\"\\xF1\",ntlg:\"\\u2278\",ntriangleleft:\"\\u22EA\",ntrianglelefteq:\"\\u22EC\",ntriangleright:\"\\u22EB\",ntrianglerighteq:\"\\u22ED\",nu:\"\\u03BD\",num:\"#\",numero:\"\\u2116\",numsp:\"\\u2007\",nvDash:\"\\u22AD\",nvHarr:\"\\u2904\",nvap:\"\\u224D\\u20D2\",nvdash:\"\\u22AC\",nvge:\"\\u2265\\u20D2\",nvgt:\">\\u20D2\",nvinfin:\"\\u29DE\",nvlArr:\"\\u2902\",nvle:\"\\u2264\\u20D2\",nvlt:\"<\\u20D2\",nvltrie:\"\\u22B4\\u20D2\",nvrArr:\"\\u2903\",nvrtrie:\"\\u22B5\\u20D2\",nvsim:\"\\u223C\\u20D2\",nwArr:\"\\u21D6\",nwarhk:\"\\u2923\",nwarr:\"\\u2196\",nwarrow:\"\\u2196\",nwnear:\"\\u2927\",oS:\"\\u24C8\",oacut:\"\\xF3\",oacute:\"\\xF3\",oast:\"\\u229B\",ocir:\"\\xF4\",ocirc:\"\\xF4\",ocy:\"\\u043E\",odash:\"\\u229D\",odblac:\"\\u0151\",odiv:\"\\u2A38\",odot:\"\\u2299\",odsold:\"\\u29BC\",oelig:\"\\u0153\",ofcir:\"\\u29BF\",ofr:\"\\u{1D52C}\",ogon:\"\\u02DB\",ograv:\"\\xF2\",ograve:\"\\xF2\",ogt:\"\\u29C1\",ohbar:\"\\u29B5\",ohm:\"\\u03A9\",oint:\"\\u222E\",olarr:\"\\u21BA\",olcir:\"\\u29BE\",olcross:\"\\u29BB\",oline:\"\\u203E\",olt:\"\\u29C0\",omacr:\"\\u014D\",omega:\"\\u03C9\",omicron:\"\\u03BF\",omid:\"\\u29B6\",ominus:\"\\u2296\",oopf:\"\\u{1D560}\",opar:\"\\u29B7\",operp:\"\\u29B9\",oplus:\"\\u2295\",or:\"\\u2228\",orarr:\"\\u21BB\",ord:\"\\xBA\",order:\"\\u2134\",orderof:\"\\u2134\",ordf:\"\\xAA\",ordm:\"\\xBA\",origof:\"\\u22B6\",oror:\"\\u2A56\",orslope:\"\\u2A57\",orv:\"\\u2A5B\",oscr:\"\\u2134\",oslas:\"\\xF8\",oslash:\"\\xF8\",osol:\"\\u2298\",otild:\"\\xF5\",otilde:\"\\xF5\",otimes:\"\\u2297\",otimesas:\"\\u2A36\",oum:\"\\xF6\",ouml:\"\\xF6\",ovbar:\"\\u233D\",par:\"\\xB6\",para:\"\\xB6\",parallel:\"\\u2225\",parsim:\"\\u2AF3\",parsl:\"\\u2AFD\",part:\"\\u2202\",pcy:\"\\u043F\",percnt:\"%\",period:\".\",permil:\"\\u2030\",perp:\"\\u22A5\",pertenk:\"\\u2031\",pfr:\"\\u{1D52D}\",phi:\"\\u03C6\",phiv:\"\\u03D5\",phmmat:\"\\u2133\",phone:\"\\u260E\",pi:\"\\u03C0\",pitchfork:\"\\u22D4\",piv:\"\\u03D6\",planck:\"\\u210F\",planckh:\"\\u210E\",plankv:\"\\u210F\",plus:\"+\",plusacir:\"\\u2A23\",plusb:\"\\u229E\",pluscir:\"\\u2A22\",plusdo:\"\\u2214\",plusdu:\"\\u2A25\",pluse:\"\\u2A72\",plusm:\"\\xB1\",plusmn:\"\\xB1\",plussim:\"\\u2A26\",plustwo:\"\\u2A27\",pm:\"\\xB1\",pointint:\"\\u2A15\",popf:\"\\u{1D561}\",poun:\"\\xA3\",pound:\"\\xA3\",pr:\"\\u227A\",prE:\"\\u2AB3\",prap:\"\\u2AB7\",prcue:\"\\u227C\",pre:\"\\u2AAF\",prec:\"\\u227A\",precapprox:\"\\u2AB7\",preccurlyeq:\"\\u227C\",preceq:\"\\u2AAF\",precnapprox:\"\\u2AB9\",precneqq:\"\\u2AB5\",precnsim:\"\\u22E8\",precsim:\"\\u227E\",prime:\"\\u2032\",primes:\"\\u2119\",prnE:\"\\u2AB5\",prnap:\"\\u2AB9\",prnsim:\"\\u22E8\",prod:\"\\u220F\",profalar:\"\\u232E\",profline:\"\\u2312\",profsurf:\"\\u2313\",prop:\"\\u221D\",propto:\"\\u221D\",prsim:\"\\u227E\",prurel:\"\\u22B0\",pscr:\"\\u{1D4C5}\",psi:\"\\u03C8\",puncsp:\"\\u2008\",qfr:\"\\u{1D52E}\",qint:\"\\u2A0C\",qopf:\"\\u{1D562}\",qprime:\"\\u2057\",qscr:\"\\u{1D4C6}\",quaternions:\"\\u210D\",quatint:\"\\u2A16\",quest:\"?\",questeq:\"\\u225F\",quo:'\"',quot:'\"',rAarr:\"\\u21DB\",rArr:\"\\u21D2\",rAtail:\"\\u291C\",rBarr:\"\\u290F\",rHar:\"\\u2964\",race:\"\\u223D\\u0331\",racute:\"\\u0155\",radic:\"\\u221A\",raemptyv:\"\\u29B3\",rang:\"\\u27E9\",rangd:\"\\u2992\",range:\"\\u29A5\",rangle:\"\\u27E9\",raqu:\"\\xBB\",raquo:\"\\xBB\",rarr:\"\\u2192\",rarrap:\"\\u2975\",rarrb:\"\\u21E5\",rarrbfs:\"\\u2920\",rarrc:\"\\u2933\",rarrfs:\"\\u291E\",rarrhk:\"\\u21AA\",rarrlp:\"\\u21AC\",rarrpl:\"\\u2945\",rarrsim:\"\\u2974\",rarrtl:\"\\u21A3\",rarrw:\"\\u219D\",ratail:\"\\u291A\",ratio:\"\\u2236\",rationals:\"\\u211A\",rbarr:\"\\u290D\",rbbrk:\"\\u2773\",rbrace:\"}\",rbrack:\"]\",rbrke:\"\\u298C\",rbrksld:\"\\u298E\",rbrkslu:\"\\u2990\",rcaron:\"\\u0159\",rcedil:\"\\u0157\",rceil:\"\\u2309\",rcub:\"}\",rcy:\"\\u0440\",rdca:\"\\u2937\",rdldhar:\"\\u2969\",rdquo:\"\\u201D\",rdquor:\"\\u201D\",rdsh:\"\\u21B3\",real:\"\\u211C\",realine:\"\\u211B\",realpart:\"\\u211C\",reals:\"\\u211D\",rect:\"\\u25AD\",re:\"\\xAE\",reg:\"\\xAE\",rfisht:\"\\u297D\",rfloor:\"\\u230B\",rfr:\"\\u{1D52F}\",rhard:\"\\u21C1\",rharu:\"\\u21C0\",rharul:\"\\u296C\",rho:\"\\u03C1\",rhov:\"\\u03F1\",rightarrow:\"\\u2192\",rightarrowtail:\"\\u21A3\",rightharpoondown:\"\\u21C1\",rightharpoonup:\"\\u21C0\",rightleftarrows:\"\\u21C4\",rightleftharpoons:\"\\u21CC\",rightrightarrows:\"\\u21C9\",rightsquigarrow:\"\\u219D\",rightthreetimes:\"\\u22CC\",ring:\"\\u02DA\",risingdotseq:\"\\u2253\",rlarr:\"\\u21C4\",rlhar:\"\\u21CC\",rlm:\"\\u200F\",rmoust:\"\\u23B1\",rmoustache:\"\\u23B1\",rnmid:\"\\u2AEE\",roang:\"\\u27ED\",roarr:\"\\u21FE\",robrk:\"\\u27E7\",ropar:\"\\u2986\",ropf:\"\\u{1D563}\",roplus:\"\\u2A2E\",rotimes:\"\\u2A35\",rpar:\")\",rpargt:\"\\u2994\",rppolint:\"\\u2A12\",rrarr:\"\\u21C9\",rsaquo:\"\\u203A\",rscr:\"\\u{1D4C7}\",rsh:\"\\u21B1\",rsqb:\"]\",rsquo:\"\\u2019\",rsquor:\"\\u2019\",rthree:\"\\u22CC\",rtimes:\"\\u22CA\",rtri:\"\\u25B9\",rtrie:\"\\u22B5\",rtrif:\"\\u25B8\",rtriltri:\"\\u29CE\",ruluhar:\"\\u2968\",rx:\"\\u211E\",sacute:\"\\u015B\",sbquo:\"\\u201A\",sc:\"\\u227B\",scE:\"\\u2AB4\",scap:\"\\u2AB8\",scaron:\"\\u0161\",sccue:\"\\u227D\",sce:\"\\u2AB0\",scedil:\"\\u015F\",scirc:\"\\u015D\",scnE:\"\\u2AB6\",scnap:\"\\u2ABA\",scnsim:\"\\u22E9\",scpolint:\"\\u2A13\",scsim:\"\\u227F\",scy:\"\\u0441\",sdot:\"\\u22C5\",sdotb:\"\\u22A1\",sdote:\"\\u2A66\",seArr:\"\\u21D8\",searhk:\"\\u2925\",searr:\"\\u2198\",searrow:\"\\u2198\",sec:\"\\xA7\",sect:\"\\xA7\",semi:\";\",seswar:\"\\u2929\",setminus:\"\\u2216\",setmn:\"\\u2216\",sext:\"\\u2736\",sfr:\"\\u{1D530}\",sfrown:\"\\u2322\",sharp:\"\\u266F\",shchcy:\"\\u0449\",shcy:\"\\u0448\",shortmid:\"\\u2223\",shortparallel:\"\\u2225\",sh:\"\\xAD\",shy:\"\\xAD\",sigma:\"\\u03C3\",sigmaf:\"\\u03C2\",sigmav:\"\\u03C2\",sim:\"\\u223C\",simdot:\"\\u2A6A\",sime:\"\\u2243\",simeq:\"\\u2243\",simg:\"\\u2A9E\",simgE:\"\\u2AA0\",siml:\"\\u2A9D\",simlE:\"\\u2A9F\",simne:\"\\u2246\",simplus:\"\\u2A24\",simrarr:\"\\u2972\",slarr:\"\\u2190\",smallsetminus:\"\\u2216\",smashp:\"\\u2A33\",smeparsl:\"\\u29E4\",smid:\"\\u2223\",smile:\"\\u2323\",smt:\"\\u2AAA\",smte:\"\\u2AAC\",smtes:\"\\u2AAC\\uFE00\",softcy:\"\\u044C\",sol:\"/\",solb:\"\\u29C4\",solbar:\"\\u233F\",sopf:\"\\u{1D564}\",spades:\"\\u2660\",spadesuit:\"\\u2660\",spar:\"\\u2225\",sqcap:\"\\u2293\",sqcaps:\"\\u2293\\uFE00\",sqcup:\"\\u2294\",sqcups:\"\\u2294\\uFE00\",sqsub:\"\\u228F\",sqsube:\"\\u2291\",sqsubset:\"\\u228F\",sqsubseteq:\"\\u2291\",sqsup:\"\\u2290\",sqsupe:\"\\u2292\",sqsupset:\"\\u2290\",sqsupseteq:\"\\u2292\",squ:\"\\u25A1\",square:\"\\u25A1\",squarf:\"\\u25AA\",squf:\"\\u25AA\",srarr:\"\\u2192\",sscr:\"\\u{1D4C8}\",ssetmn:\"\\u2216\",ssmile:\"\\u2323\",sstarf:\"\\u22C6\",star:\"\\u2606\",starf:\"\\u2605\",straightepsilon:\"\\u03F5\",straightphi:\"\\u03D5\",strns:\"\\xAF\",sub:\"\\u2282\",subE:\"\\u2AC5\",subdot:\"\\u2ABD\",sube:\"\\u2286\",subedot:\"\\u2AC3\",submult:\"\\u2AC1\",subnE:\"\\u2ACB\",subne:\"\\u228A\",subplus:\"\\u2ABF\",subrarr:\"\\u2979\",subset:\"\\u2282\",subseteq:\"\\u2286\",subseteqq:\"\\u2AC5\",subsetneq:\"\\u228A\",subsetneqq:\"\\u2ACB\",subsim:\"\\u2AC7\",subsub:\"\\u2AD5\",subsup:\"\\u2AD3\",succ:\"\\u227B\",succapprox:\"\\u2AB8\",succcurlyeq:\"\\u227D\",succeq:\"\\u2AB0\",succnapprox:\"\\u2ABA\",succneqq:\"\\u2AB6\",succnsim:\"\\u22E9\",succsim:\"\\u227F\",sum:\"\\u2211\",sung:\"\\u266A\",sup:\"\\u2283\",sup1:\"\\xB9\",sup2:\"\\xB2\",sup3:\"\\xB3\",supE:\"\\u2AC6\",supdot:\"\\u2ABE\",supdsub:\"\\u2AD8\",supe:\"\\u2287\",supedot:\"\\u2AC4\",suphsol:\"\\u27C9\",suphsub:\"\\u2AD7\",suplarr:\"\\u297B\",supmult:\"\\u2AC2\",supnE:\"\\u2ACC\",supne:\"\\u228B\",supplus:\"\\u2AC0\",supset:\"\\u2283\",supseteq:\"\\u2287\",supseteqq:\"\\u2AC6\",supsetneq:\"\\u228B\",supsetneqq:\"\\u2ACC\",supsim:\"\\u2AC8\",supsub:\"\\u2AD4\",supsup:\"\\u2AD6\",swArr:\"\\u21D9\",swarhk:\"\\u2926\",swarr:\"\\u2199\",swarrow:\"\\u2199\",swnwar:\"\\u292A\",szli:\"\\xDF\",szlig:\"\\xDF\",target:\"\\u2316\",tau:\"\\u03C4\",tbrk:\"\\u23B4\",tcaron:\"\\u0165\",tcedil:\"\\u0163\",tcy:\"\\u0442\",tdot:\"\\u20DB\",telrec:\"\\u2315\",tfr:\"\\u{1D531}\",there4:\"\\u2234\",therefore:\"\\u2234\",theta:\"\\u03B8\",thetasym:\"\\u03D1\",thetav:\"\\u03D1\",thickapprox:\"\\u2248\",thicksim:\"\\u223C\",thinsp:\"\\u2009\",thkap:\"\\u2248\",thksim:\"\\u223C\",thor:\"\\xFE\",thorn:\"\\xFE\",tilde:\"\\u02DC\",time:\"\\xD7\",times:\"\\xD7\",timesb:\"\\u22A0\",timesbar:\"\\u2A31\",timesd:\"\\u2A30\",tint:\"\\u222D\",toea:\"\\u2928\",top:\"\\u22A4\",topbot:\"\\u2336\",topcir:\"\\u2AF1\",topf:\"\\u{1D565}\",topfork:\"\\u2ADA\",tosa:\"\\u2929\",tprime:\"\\u2034\",trade:\"\\u2122\",triangle:\"\\u25B5\",triangledown:\"\\u25BF\",triangleleft:\"\\u25C3\",trianglelefteq:\"\\u22B4\",triangleq:\"\\u225C\",triangleright:\"\\u25B9\",trianglerighteq:\"\\u22B5\",tridot:\"\\u25EC\",trie:\"\\u225C\",triminus:\"\\u2A3A\",triplus:\"\\u2A39\",trisb:\"\\u29CD\",tritime:\"\\u2A3B\",trpezium:\"\\u23E2\",tscr:\"\\u{1D4C9}\",tscy:\"\\u0446\",tshcy:\"\\u045B\",tstrok:\"\\u0167\",twixt:\"\\u226C\",twoheadleftarrow:\"\\u219E\",twoheadrightarrow:\"\\u21A0\",uArr:\"\\u21D1\",uHar:\"\\u2963\",uacut:\"\\xFA\",uacute:\"\\xFA\",uarr:\"\\u2191\",ubrcy:\"\\u045E\",ubreve:\"\\u016D\",ucir:\"\\xFB\",ucirc:\"\\xFB\",ucy:\"\\u0443\",udarr:\"\\u21C5\",udblac:\"\\u0171\",udhar:\"\\u296E\",ufisht:\"\\u297E\",ufr:\"\\u{1D532}\",ugrav:\"\\xF9\",ugrave:\"\\xF9\",uharl:\"\\u21BF\",uharr:\"\\u21BE\",uhblk:\"\\u2580\",ulcorn:\"\\u231C\",ulcorner:\"\\u231C\",ulcrop:\"\\u230F\",ultri:\"\\u25F8\",umacr:\"\\u016B\",um:\"\\xA8\",uml:\"\\xA8\",uogon:\"\\u0173\",uopf:\"\\u{1D566}\",uparrow:\"\\u2191\",updownarrow:\"\\u2195\",upharpoonleft:\"\\u21BF\",upharpoonright:\"\\u21BE\",uplus:\"\\u228E\",upsi:\"\\u03C5\",upsih:\"\\u03D2\",upsilon:\"\\u03C5\",upuparrows:\"\\u21C8\",urcorn:\"\\u231D\",urcorner:\"\\u231D\",urcrop:\"\\u230E\",uring:\"\\u016F\",urtri:\"\\u25F9\",uscr:\"\\u{1D4CA}\",utdot:\"\\u22F0\",utilde:\"\\u0169\",utri:\"\\u25B5\",utrif:\"\\u25B4\",uuarr:\"\\u21C8\",uum:\"\\xFC\",uuml:\"\\xFC\",uwangle:\"\\u29A7\",vArr:\"\\u21D5\",vBar:\"\\u2AE8\",vBarv:\"\\u2AE9\",vDash:\"\\u22A8\",vangrt:\"\\u299C\",varepsilon:\"\\u03F5\",varkappa:\"\\u03F0\",varnothing:\"\\u2205\",varphi:\"\\u03D5\",varpi:\"\\u03D6\",varpropto:\"\\u221D\",varr:\"\\u2195\",varrho:\"\\u03F1\",varsigma:\"\\u03C2\",varsubsetneq:\"\\u228A\\uFE00\",varsubsetneqq:\"\\u2ACB\\uFE00\",varsupsetneq:\"\\u228B\\uFE00\",varsupsetneqq:\"\\u2ACC\\uFE00\",vartheta:\"\\u03D1\",vartriangleleft:\"\\u22B2\",vartriangleright:\"\\u22B3\",vcy:\"\\u0432\",vdash:\"\\u22A2\",vee:\"\\u2228\",veebar:\"\\u22BB\",veeeq:\"\\u225A\",vellip:\"\\u22EE\",verbar:\"|\",vert:\"|\",vfr:\"\\u{1D533}\",vltri:\"\\u22B2\",vnsub:\"\\u2282\\u20D2\",vnsup:\"\\u2283\\u20D2\",vopf:\"\\u{1D567}\",vprop:\"\\u221D\",vrtri:\"\\u22B3\",vscr:\"\\u{1D4CB}\",vsubnE:\"\\u2ACB\\uFE00\",vsubne:\"\\u228A\\uFE00\",vsupnE:\"\\u2ACC\\uFE00\",vsupne:\"\\u228B\\uFE00\",vzigzag:\"\\u299A\",wcirc:\"\\u0175\",wedbar:\"\\u2A5F\",wedge:\"\\u2227\",wedgeq:\"\\u2259\",weierp:\"\\u2118\",wfr:\"\\u{1D534}\",wopf:\"\\u{1D568}\",wp:\"\\u2118\",wr:\"\\u2240\",wreath:\"\\u2240\",wscr:\"\\u{1D4CC}\",xcap:\"\\u22C2\",xcirc:\"\\u25EF\",xcup:\"\\u22C3\",xdtri:\"\\u25BD\",xfr:\"\\u{1D535}\",xhArr:\"\\u27FA\",xharr:\"\\u27F7\",xi:\"\\u03BE\",xlArr:\"\\u27F8\",xlarr:\"\\u27F5\",xmap:\"\\u27FC\",xnis:\"\\u22FB\",xodot:\"\\u2A00\",xopf:\"\\u{1D569}\",xoplus:\"\\u2A01\",xotime:\"\\u2A02\",xrArr:\"\\u27F9\",xrarr:\"\\u27F6\",xscr:\"\\u{1D4CD}\",xsqcup:\"\\u2A06\",xuplus:\"\\u2A04\",xutri:\"\\u25B3\",xvee:\"\\u22C1\",xwedge:\"\\u22C0\",yacut:\"\\xFD\",yacute:\"\\xFD\",yacy:\"\\u044F\",ycirc:\"\\u0177\",ycy:\"\\u044B\",ye:\"\\xA5\",yen:\"\\xA5\",yfr:\"\\u{1D536}\",yicy:\"\\u0457\",yopf:\"\\u{1D56A}\",yscr:\"\\u{1D4CE}\",yucy:\"\\u044E\",yum:\"\\xFF\",yuml:\"\\xFF\",zacute:\"\\u017A\",zcaron:\"\\u017E\",zcy:\"\\u0437\",zdot:\"\\u017C\",zeetrf:\"\\u2128\",zeta:\"\\u03B6\",zfr:\"\\u{1D537}\",zhcy:\"\\u0436\",zigrarr:\"\\u21DD\",zopf:\"\\u{1D56B}\",zscr:\"\\u{1D4CF}\",zwj:\"\\u200D\",zwnj:\"\\u200C\"}});var Zi=C((Gv,Qi)=>{\"use strict\";var Xi=Ji();Qi.exports=kf;var yf={}.hasOwnProperty;function kf(e){return yf.call(Xi,e)?Xi[e]:!1}});var lr=C((Hv,Du)=>{\"use strict\";var eu=Yi(),ru=Vi(),wf=Le(),Af=Gi(),uu=Ki(),Bf=Zi();Du.exports=Uf;var qf={}.hasOwnProperty,Me=String.fromCharCode,Tf=Function.prototype,tu={warning:null,reference:null,text:null,warningContext:null,referenceContext:null,textContext:null,position:{},additional:null,attribute:!1,nonTerminated:!0},Sf=9,nu=10,Pf=12,_f=32,iu=38,Lf=59,Of=60,If=61,Nf=35,Rf=88,zf=120,Mf=65533,Ue=\"named\",At=\"hexadecimal\",Bt=\"decimal\",qt={};qt[At]=16;qt[Bt]=10;var Nr={};Nr[Ue]=uu;Nr[Bt]=wf;Nr[At]=Af;var au=1,ou=2,su=3,cu=4,lu=5,wt=6,fu=7,xe={};xe[au]=\"Named character references must be terminated by a semicolon\";xe[ou]=\"Numeric character references must be terminated by a semicolon\";xe[su]=\"Named character references cannot be empty\";xe[cu]=\"Numeric character references cannot be empty\";xe[lu]=\"Named character references must be known\";xe[wt]=\"Numeric character references cannot be disallowed\";xe[fu]=\"Numeric character references cannot be outside the permissible Unicode range\";function Uf(e,r){var n={},t,a;r||(r={});for(a in tu)t=r[a],n[a]=t??tu[a];return(n.position.indent||n.position.start)&&(n.indent=n.position.indent||[],n.position=n.position.start),Yf(e,n)}function Yf(e,r){var n=r.additional,t=r.nonTerminated,a=r.text,i=r.reference,u=r.warning,o=r.textContext,s=r.referenceContext,l=r.warningContext,c=r.position,f=r.indent||[],D=e.length,h=0,p=-1,d=c.column||1,m=c.line||1,g=\"\",x=[],F,B,b,v,y,k,E,w,A,q,T,N,_,P,S,L,we,j,I;for(typeof n==\"string\"&&(n=n.charCodeAt(0)),L=J(),w=u?K:Tf,h--,D++;++h<D;)if(y===nu&&(d=f[p]||1),y=e.charCodeAt(h),y===iu){if(E=e.charCodeAt(h+1),E===Sf||E===nu||E===Pf||E===_f||E===iu||E===Of||E!==E||n&&E===n){g+=Me(y),d++;continue}for(_=h+1,N=_,I=_,E===Nf?(I=++N,E=e.charCodeAt(I),E===Rf||E===zf?(P=At,I=++N):P=Bt):P=Ue,F=\"\",T=\"\",v=\"\",S=Nr[P],I--;++I<D&&(E=e.charCodeAt(I),!!S(E));)v+=Me(E),P===Ue&&qf.call(eu,v)&&(F=v,T=eu[v]);b=e.charCodeAt(I)===Lf,b&&(I++,B=P===Ue?Bf(v):!1,B&&(F=v,T=B)),j=1+I-_,!b&&!t||(v?P===Ue?(b&&!T?w(lu,1):(F!==v&&(I=N+F.length,j=1+I-N,b=!1),b||(A=F?au:su,r.attribute?(E=e.charCodeAt(I),E===If?(w(A,j),T=null):uu(E)?T=null:w(A,j)):w(A,j))),k=T):(b||w(ou,j),k=parseInt(v,qt[P]),Vf(k)?(w(fu,j),k=Me(Mf)):k in ru?(w(wt,j),k=ru[k]):(q=\"\",jf(k)&&w(wt,j),k>65535&&(k-=65536,q+=Me(k>>>10|55296),k=56320|k&1023),k=q+Me(k))):P!==Ue&&w(cu,j)),k?(me(),L=J(),h=I-1,d+=I-_+1,x.push(k),we=J(),we.offset++,i&&i.call(s,k,{start:L,end:we},e.slice(_-1,I)),L=we):(v=e.slice(_-1,I),g+=v,d+=v.length,h=I-1)}else y===10&&(m++,p++,d=0),y===y?(g+=Me(y),d++):me();return x.join(\"\");function J(){return{line:m,column:d,offset:h+(c.offset||0)}}function K(ge,M){var ct=J();ct.column+=M,ct.offset+=M,u.call(l,xe[ge],ct,ge)}function me(){g&&(x.push(g),a&&a.call(o,g,{start:L,end:J()}),g=\"\")}}function Vf(e){return e>=55296&&e<=57343||e>1114111}function jf(e){return e>=1&&e<=8||e===11||e>=13&&e<=31||e>=127&&e<=159||e>=64976&&e<=65007||(e&65535)===65535||(e&65535)===65534}});var hu=C((Wv,du)=>{\"use strict\";var $f=_e(),pu=lr();du.exports=Gf;function Gf(e){return n.raw=t,n;function r(i){for(var u=e.offset,o=i.line,s=[];++o&&o in u;)s.push((u[o]||0)+1);return{start:i,indent:s}}function n(i,u,o){pu(i,{position:r(u),warning:a,text:o,reference:o,textContext:e,referenceContext:e})}function t(i,u,o){return pu(i,$f(o,{position:r(u),warning:a}))}function a(i,u,o){o!==3&&e.file.message(i,u)}}});var vu=C((Kv,gu)=>{\"use strict\";gu.exports=Hf;function Hf(e){return r;function r(n,t){var a=this,i=a.offset,u=[],o=a[e+\"Methods\"],s=a[e+\"Tokenizers\"],l=t.line,c=t.column,f,D,h,p,d,m;if(!n)return u;for(k.now=F,k.file=a.file,g(\"\");n;){for(f=-1,D=o.length,d=!1;++f<D&&(p=o[f],h=s[p],!(h&&(!h.onlyAtStart||a.atStart)&&(!h.notInList||!a.inList)&&(!h.notInBlock||!a.inBlock)&&(!h.notInLink||!a.inLink)&&(m=n.length,h.apply(a,[k,n]),d=m!==n.length,d))););d||a.file.fail(new Error(\"Infinite loop\"),k.now())}return a.eof=F(),u;function g(E){for(var w=-1,A=E.indexOf(`\n`);A!==-1;)l++,w=A,A=E.indexOf(`\n`,A+1);w===-1?c+=E.length:c=E.length-w,l in i&&(w!==-1?c+=i[l]:c<=i[l]&&(c=i[l]+1))}function x(){var E=[],w=l+1;return function(){for(var A=l+1;w<A;)E.push((i[w]||0)+1),w++;return E}}function F(){var E={line:l,column:c};return E.offset=a.toOffset(E),E}function B(E){this.start=E,this.end=F()}function b(E){n.slice(0,E.length)!==E&&a.file.fail(new Error(\"Incorrectly eaten value: please report this warning on https://git.io/vg5Ft\"),F())}function v(){var E=F();return w;function w(A,q){var T=A.position,N=T?T.start:E,_=[],P=T&&T.end.line,S=E.line;if(A.position=new B(N),T&&q&&T.indent){if(_=T.indent,P<S){for(;++P<S;)_.push((i[P]||0)+1);_.push(E.column)}q=_.concat(q)}return A.position.indent=q||[],A}}function y(E,w){var A=w?w.children:u,q=A[A.length-1],T;return q&&E.type===q.type&&(E.type===\"text\"||E.type===\"blockquote\")&&mu(q)&&mu(E)&&(T=E.type===\"text\"?Wf:Kf,E=T.call(a,q,E)),E!==q&&A.push(E),a.atStart&&u.length!==0&&a.exitStart(),E}function k(E){var w=x(),A=v(),q=F();return b(E),T.reset=N,N.test=_,T.test=_,n=n.slice(E.length),g(E),w=w(),T;function T(P,S){return A(y(A(P),S),w)}function N(){var P=T.apply(null,arguments);return l=q.line,c=q.column,n=E+n,P}function _(){var P=A({});return l=q.line,c=q.column,n=E+n,P.position}}}}function mu(e){var r,n;return e.type!==\"text\"||!e.position?!0:(r=e.position.start,n=e.position.end,r.line!==n.line||n.column-r.column===e.value.length)}function Wf(e,r){return e.value+=r.value,e}function Kf(e,r){return this.options.commonmark||this.options.gfm?r:(e.children=e.children.concat(r.children),e)}});var Cu=C((Jv,Eu)=>{\"use strict\";Eu.exports=Rr;var Tt=[\"\\\\\",\"`\",\"*\",\"{\",\"}\",\"[\",\"]\",\"(\",\")\",\"#\",\"+\",\"-\",\".\",\"!\",\"_\",\">\"],St=Tt.concat([\"~\",\"|\"]),Fu=St.concat([`\n`,'\"',\"$\",\"%\",\"&\",\"'\",\",\",\"/\",\":\",\";\",\"<\",\"=\",\"?\",\"@\",\"^\"]);Rr.default=Tt;Rr.gfm=St;Rr.commonmark=Fu;function Rr(e){var r=e||{};return r.commonmark?Fu:r.gfm?St:Tt}});var xu=C((Xv,bu)=>{\"use strict\";bu.exports=[\"address\",\"article\",\"aside\",\"base\",\"basefont\",\"blockquote\",\"body\",\"caption\",\"center\",\"col\",\"colgroup\",\"dd\",\"details\",\"dialog\",\"dir\",\"div\",\"dl\",\"dt\",\"fieldset\",\"figcaption\",\"figure\",\"footer\",\"form\",\"frame\",\"frameset\",\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\",\"head\",\"header\",\"hgroup\",\"hr\",\"html\",\"iframe\",\"legend\",\"li\",\"link\",\"main\",\"menu\",\"menuitem\",\"meta\",\"nav\",\"noframes\",\"ol\",\"optgroup\",\"option\",\"p\",\"param\",\"pre\",\"section\",\"source\",\"title\",\"summary\",\"table\",\"tbody\",\"td\",\"tfoot\",\"th\",\"thead\",\"title\",\"tr\",\"track\",\"ul\"]});var Pt=C((Qv,yu)=>{\"use strict\";yu.exports={position:!0,gfm:!0,commonmark:!1,pedantic:!1,blocks:xu()}});var wu=C((Zv,ku)=>{\"use strict\";var Jf=_e(),Xf=Cu(),Qf=Pt();ku.exports=Zf;function Zf(e){var r=this,n=r.options,t,a;if(e==null)e={};else if(typeof e==\"object\")e=Jf(e);else throw new Error(\"Invalid value `\"+e+\"` for setting `options`\");for(t in Qf){if(a=e[t],a==null&&(a=n[t]),t!==\"blocks\"&&typeof a!=\"boolean\"||t===\"blocks\"&&typeof a!=\"object\")throw new Error(\"Invalid value `\"+a+\"` for setting `options.\"+t+\"`\");e[t]=a}return r.options=e,r.escape=Xf(e),r}});var qu=C((eF,Bu)=>{\"use strict\";Bu.exports=Au;function Au(e){if(e==null)return nD;if(typeof e==\"string\")return tD(e);if(typeof e==\"object\")return\"length\"in e?rD(e):eD(e);if(typeof e==\"function\")return e;throw new Error(\"Expected function, string, or object as test\")}function eD(e){return r;function r(n){var t;for(t in e)if(n[t]!==e[t])return!1;return!0}}function rD(e){for(var r=[],n=-1;++n<e.length;)r[n]=Au(e[n]);return t;function t(){for(var a=-1;++a<r.length;)if(r[a].apply(this,arguments))return!0;return!1}}function tD(e){return r;function r(n){return!!(n&&n.type===e)}}function nD(){return!0}});var Su=C((rF,Tu)=>{Tu.exports=iD;function iD(e){return e}});var Ou=C((tF,Lu)=>{\"use strict\";Lu.exports=zr;var uD=qu(),aD=Su(),Pu=!0,_u=\"skip\",_t=!1;zr.CONTINUE=Pu;zr.SKIP=_u;zr.EXIT=_t;function zr(e,r,n,t){var a,i;typeof r==\"function\"&&typeof n!=\"function\"&&(t=n,n=r,r=null),i=uD(r),a=t?-1:1,u(e,null,[])();function u(o,s,l){var c=typeof o==\"object\"&&o!==null?o:{},f;return typeof c.type==\"string\"&&(f=typeof c.tagName==\"string\"?c.tagName:typeof c.name==\"string\"?c.name:void 0,D.displayName=\"node (\"+aD(c.type+(f?\"<\"+f+\">\":\"\"))+\")\"),D;function D(){var h=l.concat(o),p=[],d,m;if((!r||i(o,s,l[l.length-1]||null))&&(p=oD(n(o,l)),p[0]===_t))return p;if(o.children&&p[0]!==_u)for(m=(t?o.children.length:-1)+a;m>-1&&m<o.children.length;){if(d=u(o.children[m],m,h)(),d[0]===_t)return d;m=typeof d[1]==\"number\"?d[1]:m+a}return p}}}function oD(e){return e!==null&&typeof e==\"object\"&&\"length\"in e?e:typeof e==\"number\"?[Pu,e]:[e]}});var Nu=C((nF,Iu)=>{\"use strict\";Iu.exports=Ur;var Mr=Ou(),sD=Mr.CONTINUE,cD=Mr.SKIP,lD=Mr.EXIT;Ur.CONTINUE=sD;Ur.SKIP=cD;Ur.EXIT=lD;function Ur(e,r,n,t){typeof r==\"function\"&&typeof n!=\"function\"&&(t=n,n=r,r=null),Mr(e,r,a,t);function a(i,u){var o=u[u.length-1],s=o?o.children.indexOf(i):null;return n(i,s,o)}}});var zu=C((iF,Ru)=>{\"use strict\";var fD=Nu();Ru.exports=DD;function DD(e,r){return fD(e,r?pD:dD),e}function pD(e){delete e.position}function dD(e){e.position=void 0}});var Yu=C((uF,Uu)=>{\"use strict\";var Mu=_e(),hD=zu();Uu.exports=vD;var mD=`\n`,gD=/\\r\\n|\\r/g;function vD(){var e=this,r=String(e.file),n={line:1,column:1,offset:0},t=Mu(n),a;return r=r.replace(gD,mD),r.charCodeAt(0)===65279&&(r=r.slice(1),t.column++,t.offset++),a={type:\"root\",children:e.tokenizeBlock(r,t),position:{start:n,end:e.eof||Mu(n)}},e.options.position||hD(a,!0),a}});var ju=C((aF,Vu)=>{\"use strict\";var FD=/^[ \\t]*(\\n|$)/;Vu.exports=ED;function ED(e,r,n){for(var t,a=\"\",i=0,u=r.length;i<u&&(t=FD.exec(r.slice(i)),t!=null);)i+=t[0].length,a+=t[0];if(a!==\"\"){if(n)return!0;e(a)}}});var Yr=C((oF,$u)=>{\"use strict\";var pe=\"\",Lt;$u.exports=CD;function CD(e,r){if(typeof e!=\"string\")throw new TypeError(\"expected a string\");if(r===1)return e;if(r===2)return e+e;var n=e.length*r;if(Lt!==e||typeof Lt>\"u\")Lt=e,pe=\"\";else if(pe.length>=n)return pe.substr(0,n);for(;n>pe.length&&r>1;)r&1&&(pe+=e),r>>=1,e+=e;return pe+=e,pe=pe.substr(0,n),pe}});var Ot=C((sF,Gu)=>{\"use strict\";Gu.exports=bD;function bD(e){return String(e).replace(/\\n+$/,\"\")}});var Ku=C((cF,Wu)=>{\"use strict\";var xD=Yr(),yD=Ot();Wu.exports=AD;var It=`\n`,Hu=\"\t\",Nt=\" \",kD=4,wD=xD(Nt,kD);function AD(e,r,n){for(var t=-1,a=r.length,i=\"\",u=\"\",o=\"\",s=\"\",l,c,f;++t<a;)if(l=r.charAt(t),f)if(f=!1,i+=o,u+=s,o=\"\",s=\"\",l===It)o=l,s=l;else for(i+=l,u+=l;++t<a;){if(l=r.charAt(t),!l||l===It){s=l,o=l;break}i+=l,u+=l}else if(l===Nt&&r.charAt(t+1)===l&&r.charAt(t+2)===l&&r.charAt(t+3)===l)o+=wD,t+=3,f=!0;else if(l===Hu)o+=l,f=!0;else{for(c=\"\";l===Hu||l===Nt;)c+=l,l=r.charAt(++t);if(l!==It)break;o+=c+l,s+=l}if(u)return n?!0:e(i)({type:\"code\",lang:null,meta:null,value:yD(u)})}});var Qu=C((lF,Xu)=>{\"use strict\";Xu.exports=SD;var Vr=`\n`,fr=\"\t\",Ye=\" \",BD=\"~\",Ju=\"`\",qD=3,TD=4;function SD(e,r,n){var t=this,a=t.options.gfm,i=r.length+1,u=0,o=\"\",s,l,c,f,D,h,p,d,m,g,x,F,B;if(a){for(;u<i&&(c=r.charAt(u),!(c!==Ye&&c!==fr));)o+=c,u++;if(F=u,c=r.charAt(u),!(c!==BD&&c!==Ju)){for(u++,l=c,s=1,o+=c;u<i&&(c=r.charAt(u),c===l);)o+=c,s++,u++;if(!(s<qD)){for(;u<i&&(c=r.charAt(u),!(c!==Ye&&c!==fr));)o+=c,u++;for(f=\"\",p=\"\";u<i&&(c=r.charAt(u),!(c===Vr||l===Ju&&c===l));)c===Ye||c===fr?p+=c:(f+=p+c,p=\"\"),u++;if(c=r.charAt(u),!(c&&c!==Vr)){if(n)return!0;B=e.now(),B.column+=o.length,B.offset+=o.length,o+=f,f=t.decode.raw(t.unescape(f),B),p&&(o+=p),p=\"\",g=\"\",x=\"\",d=\"\",m=\"\";for(var b=!0;u<i;){if(c=r.charAt(u),d+=g,m+=x,g=\"\",x=\"\",c!==Vr){d+=c,x+=c,u++;continue}for(b?(o+=c,b=!1):(g+=c,x+=c),p=\"\",u++;u<i&&(c=r.charAt(u),c===Ye);)p+=c,u++;if(g+=p,x+=p.slice(F),!(p.length>=TD)){for(p=\"\";u<i&&(c=r.charAt(u),c===l);)p+=c,u++;if(g+=p,x+=p,!(p.length<s)){for(p=\"\";u<i&&(c=r.charAt(u),!(c!==Ye&&c!==fr));)g+=c,x+=c,u++;if(!c||c===Vr)break}}}for(o+=d+g,u=-1,i=f.length;++u<i;)if(c=f.charAt(u),c===Ye||c===fr)D||(D=f.slice(0,u));else if(D){h=f.slice(u);break}return e(o)({type:\"code\",lang:D||f||null,meta:h||null,value:m})}}}}}});var Oe=C((Ve,Zu)=>{Ve=Zu.exports=PD;function PD(e){return e.trim?e.trim():Ve.right(Ve.left(e))}Ve.left=function(e){return e.trimLeft?e.trimLeft():e.replace(/^\\s\\s*/,\"\")};Ve.right=function(e){if(e.trimRight)return e.trimRight();for(var r=/\\s/,n=e.length;r.test(e.charAt(--n)););return e.slice(0,n+1)}});var jr=C((fF,ea)=>{\"use strict\";ea.exports=_D;function _D(e,r,n,t){for(var a=e.length,i=-1,u,o;++i<a;)if(u=e[i],o=u[1]||{},!(o.pedantic!==void 0&&o.pedantic!==n.options.pedantic)&&!(o.commonmark!==void 0&&o.commonmark!==n.options.commonmark)&&r[u[0]].apply(n,t))return!0;return!1}});var ia=C((DF,na)=>{\"use strict\";var LD=Oe(),OD=jr();na.exports=ID;var Rt=`\n`,ra=\"\t\",zt=\" \",ta=\">\";function ID(e,r,n){for(var t=this,a=t.offset,i=t.blockTokenizers,u=t.interruptBlockquote,o=e.now(),s=o.line,l=r.length,c=[],f=[],D=[],h,p=0,d,m,g,x,F,B,b,v;p<l&&(d=r.charAt(p),!(d!==zt&&d!==ra));)p++;if(r.charAt(p)===ta){if(n)return!0;for(p=0;p<l;){for(g=r.indexOf(Rt,p),B=p,b=!1,g===-1&&(g=l);p<l&&(d=r.charAt(p),!(d!==zt&&d!==ra));)p++;if(r.charAt(p)===ta?(p++,b=!0,r.charAt(p)===zt&&p++):p=B,x=r.slice(p,g),!b&&!LD(x)){p=B;break}if(!b&&(m=r.slice(p),OD(u,i,t,[e,m,!0])))break;F=B===p?x:r.slice(B,g),D.push(p-B),c.push(F),f.push(x),p=g+1}for(p=-1,l=D.length,h=e(c.join(Rt));++p<l;)a[s]=(a[s]||0)+D[p],s++;return v=t.enterBlock(),f=t.tokenizeBlock(f.join(Rt),o),v(),h({type:\"blockquote\",children:f})}}});var oa=C((pF,aa)=>{\"use strict\";aa.exports=RD;var ua=`\n`,Dr=\"\t\",pr=\" \",dr=\"#\",ND=6;function RD(e,r,n){for(var t=this,a=t.options.pedantic,i=r.length+1,u=-1,o=e.now(),s=\"\",l=\"\",c,f,D;++u<i;){if(c=r.charAt(u),c!==pr&&c!==Dr){u--;break}s+=c}for(D=0;++u<=i;){if(c=r.charAt(u),c!==dr){u--;break}s+=c,D++}if(!(D>ND)&&!(!D||!a&&r.charAt(u+1)===dr)){for(i=r.length+1,f=\"\";++u<i;){if(c=r.charAt(u),c!==pr&&c!==Dr){u--;break}f+=c}if(!(!a&&f.length===0&&c&&c!==ua)){if(n)return!0;for(s+=f,f=\"\",l=\"\";++u<i&&(c=r.charAt(u),!(!c||c===ua));){if(c!==pr&&c!==Dr&&c!==dr){l+=f+c,f=\"\";continue}for(;c===pr||c===Dr;)f+=c,c=r.charAt(++u);if(!a&&l&&!f&&c===dr){l+=c;continue}for(;c===dr;)f+=c,c=r.charAt(++u);for(;c===pr||c===Dr;)f+=c,c=r.charAt(++u);u--}return o.column+=s.length,o.offset+=s.length,s+=l+f,e(s)({type:\"heading\",depth:D,children:t.tokenizeInline(l,o)})}}}});var la=C((dF,ca)=>{\"use strict\";ca.exports=$D;var zD=\"\t\",MD=`\n`,sa=\" \",UD=\"*\",YD=\"-\",VD=\"_\",jD=3;function $D(e,r,n){for(var t=-1,a=r.length+1,i=\"\",u,o,s,l;++t<a&&(u=r.charAt(t),!(u!==zD&&u!==sa));)i+=u;if(!(u!==UD&&u!==YD&&u!==VD))for(o=u,i+=u,s=1,l=\"\";++t<a;)if(u=r.charAt(t),u===o)s++,i+=l+o,l=\"\";else if(u===sa)l+=u;else return s>=jD&&(!u||u===MD)?(i+=l,n?!0:e(i)({type:\"thematicBreak\"})):void 0}});var Mt=C((hF,Da)=>{\"use strict\";Da.exports=KD;var fa=\"\t\",GD=\" \",HD=1,WD=4;function KD(e){for(var r=0,n=0,t=e.charAt(r),a={},i,u=0;t===fa||t===GD;){for(i=t===fa?WD:HD,n+=i,i>1&&(n=Math.floor(n/i)*i);u<n;)a[++u]=r;t=e.charAt(++r)}return{indent:n,stops:a}}});var ha=C((mF,da)=>{\"use strict\";var JD=Oe(),XD=Yr(),QD=Mt();da.exports=rp;var pa=`\n`,ZD=\" \",ep=\"!\";function rp(e,r){var n=e.split(pa),t=n.length+1,a=1/0,i=[],u,o,s;for(n.unshift(XD(ZD,r)+ep);t--;)if(o=QD(n[t]),i[t]=o.stops,JD(n[t]).length!==0)if(o.indent)o.indent>0&&o.indent<a&&(a=o.indent);else{a=1/0;break}if(a!==1/0)for(t=n.length;t--;){for(s=i[t],u=a;u&&!(u in s);)u--;n[t]=n[t].slice(s[u]+1)}return n.shift(),n.join(pa)}});var Ca=C((gF,Ea)=>{\"use strict\";var tp=Oe(),np=Yr(),ma=Le(),ip=Mt(),up=ha(),ap=jr();Ea.exports=dp;var Ut=\"*\",op=\"_\",ga=\"+\",Yt=\"-\",va=\".\",de=\" \",te=`\n`,$r=\"\t\",Fa=\")\",sp=\"x\",ye=4,cp=/\\n\\n(?!\\s*$)/,lp=/^\\[([ X\\tx])][ \\t]/,fp=/^([ \\t]*)([*+-]|\\d+[.)])( {1,4}(?! )| |\\t|$|(?=\\n))([^\\n]*)/,Dp=/^([ \\t]*)([*+-]|\\d+[.)])([ \\t]+)/,pp=/^( {1,4}|\\t)?/gm;function dp(e,r,n){for(var t=this,a=t.options.commonmark,i=t.options.pedantic,u=t.blockTokenizers,o=t.interruptList,s=0,l=r.length,c=null,f,D,h,p,d,m,g,x,F,B,b,v,y,k,E,w,A,q,T,N=!1,_,P,S,L;s<l&&(p=r.charAt(s),!(p!==$r&&p!==de));)s++;if(p=r.charAt(s),p===Ut||p===ga||p===Yt)d=p,h=!1;else{for(h=!0,D=\"\";s<l&&(p=r.charAt(s),!!ma(p));)D+=p,s++;if(p=r.charAt(s),!D||!(p===va||a&&p===Fa)||n&&D!==\"1\")return;c=parseInt(D,10),d=p}if(p=r.charAt(++s),!(p!==de&&p!==$r&&(i||p!==te&&p!==\"\"))){if(n)return!0;for(s=0,k=[],E=[],w=[];s<l;){for(m=r.indexOf(te,s),g=s,x=!1,L=!1,m===-1&&(m=l),f=0;s<l;){if(p=r.charAt(s),p===$r)f+=ye-f%ye;else if(p===de)f++;else break;s++}if(A&&f>=A.indent&&(L=!0),p=r.charAt(s),F=null,!L){if(p===Ut||p===ga||p===Yt)F=p,s++,f++;else{for(D=\"\";s<l&&(p=r.charAt(s),!!ma(p));)D+=p,s++;p=r.charAt(s),s++,D&&(p===va||a&&p===Fa)&&(F=p,f+=D.length+1)}if(F)if(p=r.charAt(s),p===$r)f+=ye-f%ye,s++;else if(p===de){for(S=s+ye;s<S&&r.charAt(s)===de;)s++,f++;s===S&&r.charAt(s)===de&&(s-=ye-1,f-=ye-1)}else p!==te&&p!==\"\"&&(F=null)}if(F){if(!i&&d!==F)break;x=!0}else!a&&!L&&r.charAt(g)===de?L=!0:a&&A&&(L=f>=A.indent||f>ye),x=!1,s=g;if(b=r.slice(g,m),B=g===s?b:r.slice(s,m),(F===Ut||F===op||F===Yt)&&u.thematicBreak.call(t,e,b,!0))break;if(v=y,y=!x&&!tp(B).length,L&&A)A.value=A.value.concat(w,b),E=E.concat(w,b),w=[];else if(x)w.length!==0&&(N=!0,A.value.push(\"\"),A.trail=w.concat()),A={value:[b],indent:f,trail:[]},k.push(A),E=E.concat(w,b),w=[];else if(y){if(v&&!a)break;w.push(b)}else{if(v||ap(o,u,t,[e,b,!0]))break;A.value=A.value.concat(w,b),E=E.concat(w,b),w=[]}s=m+1}for(_=e(E.join(te)).reset({type:\"list\",ordered:h,start:c,spread:N,children:[]}),q=t.enterList(),T=t.enterBlock(),s=-1,l=k.length;++s<l;)A=k[s].value.join(te),P=e.now(),e(A)(hp(t,A,P),_),A=k[s].trail.join(te),s!==l-1&&(A+=te),e(A);return q(),T(),_}}function hp(e,r,n){var t=e.offset,a=e.options.pedantic?mp:gp,i=null,u,o;return r=a.apply(null,arguments),e.options.gfm&&(u=r.match(lp),u&&(o=u[0].length,i=u[1].toLowerCase()===sp,t[n.line]+=o,r=r.slice(o))),{type:\"listItem\",spread:cp.test(r),checked:i,children:e.tokenizeBlock(r,n)}}function mp(e,r,n){var t=e.offset,a=n.line;return r=r.replace(Dp,i),a=n.line,r.replace(pp,i);function i(u){return t[a]=(t[a]||0)+u.length,a++,\"\"}}function gp(e,r,n){var t=e.offset,a=n.line,i,u,o,s,l,c,f;for(r=r.replace(fp,D),s=r.split(te),l=up(r,ip(i).indent).split(te),l[0]=o,t[a]=(t[a]||0)+u.length,a++,c=0,f=s.length;++c<f;)t[a]=(t[a]||0)+s[c].length-l[c].length,a++;return l.join(te);function D(h,p,d,m,g){return u=p+d+m,o=g,Number(d)<10&&u.length%2===1&&(d=de+d),i=p+np(de,d.length)+m,i+o}}});var ka=C((vF,ya)=>{\"use strict\";ya.exports=xp;var Vt=`\n`,vp=\"\t\",ba=\" \",xa=\"=\",Fp=\"-\",Ep=3,Cp=1,bp=2;function xp(e,r,n){for(var t=this,a=e.now(),i=r.length,u=-1,o=\"\",s,l,c,f,D;++u<i;){if(c=r.charAt(u),c!==ba||u>=Ep){u--;break}o+=c}for(s=\"\",l=\"\";++u<i;){if(c=r.charAt(u),c===Vt){u--;break}c===ba||c===vp?l+=c:(s+=l+c,l=\"\")}if(a.column+=o.length,a.offset+=o.length,o+=s+l,c=r.charAt(++u),f=r.charAt(++u),!(c!==Vt||f!==xa&&f!==Fp)){for(o+=c,l=f,D=f===xa?Cp:bp;++u<i;){if(c=r.charAt(u),c!==f){if(c!==Vt)return;u--;break}l+=c}return n?!0:e(o+l)({type:\"heading\",depth:D,children:t.tokenizeInline(s,a)})}}});var $t=C(jt=>{\"use strict\";var yp=\"[a-zA-Z_:][a-zA-Z0-9:._-]*\",kp=\"[^\\\"'=<>`\\\\u0000-\\\\u0020]+\",wp=\"'[^']*'\",Ap='\"[^\"]*\"',Bp=\"(?:\"+kp+\"|\"+wp+\"|\"+Ap+\")\",qp=\"(?:\\\\s+\"+yp+\"(?:\\\\s*=\\\\s*\"+Bp+\")?)\",wa=\"<[A-Za-z][A-Za-z0-9\\\\-]*\"+qp+\"*\\\\s*\\\\/?>\",Aa=\"<\\\\/[A-Za-z][A-Za-z0-9\\\\-]*\\\\s*>\",Tp=\"<!---->|<!--(?:-?[^>-])(?:-?[^-])*-->\",Sp=\"<[?].*?[?]>\",Pp=\"<![A-Za-z]+\\\\s+[^>]*>\",_p=\"<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>\";jt.openCloseTag=new RegExp(\"^(?:\"+wa+\"|\"+Aa+\")\");jt.tag=new RegExp(\"^(?:\"+wa+\"|\"+Aa+\"|\"+Tp+\"|\"+Sp+\"|\"+Pp+\"|\"+_p+\")\")});var Sa=C((EF,Ta)=>{\"use strict\";var Lp=$t().openCloseTag;Ta.exports=Kp;var Op=\"\t\",Ip=\" \",Ba=`\n`,Np=\"<\",Rp=/^<(script|pre|style)(?=(\\s|>|$))/i,zp=/<\\/(script|pre|style)>/i,Mp=/^<!--/,Up=/-->/,Yp=/^<\\?/,Vp=/\\?>/,jp=/^<![A-Za-z]/,$p=/>/,Gp=/^<!\\[CDATA\\[/,Hp=/]]>/,qa=/^$/,Wp=new RegExp(Lp.source+\"\\\\s*$\");function Kp(e,r,n){for(var t=this,a=t.options.blocks.join(\"|\"),i=new RegExp(\"^</?(\"+a+\")(?=(\\\\s|/?>|$))\",\"i\"),u=r.length,o=0,s,l,c,f,D,h,p,d=[[Rp,zp,!0],[Mp,Up,!0],[Yp,Vp,!0],[jp,$p,!0],[Gp,Hp,!0],[i,qa,!0],[Wp,qa,!1]];o<u&&(f=r.charAt(o),!(f!==Op&&f!==Ip));)o++;if(r.charAt(o)===Np){for(s=r.indexOf(Ba,o+1),s=s===-1?u:s,l=r.slice(o,s),c=-1,D=d.length;++c<D;)if(d[c][0].test(l)){h=d[c];break}if(h){if(n)return h[2];if(o=s,!h[1].test(l))for(;o<u;){if(s=r.indexOf(Ba,o+1),s=s===-1?u:s,l=r.slice(o+1,s),h[1].test(l)){l&&(o=s);break}o=s}return p=r.slice(0,o),e(p)({type:\"html\",value:p})}}}});var ne=C((CF,Pa)=>{\"use strict\";Pa.exports=Qp;var Jp=String.fromCharCode,Xp=/\\s/;function Qp(e){return Xp.test(typeof e==\"number\"?Jp(e):e.charAt(0))}});var Gt=C((bF,_a)=>{\"use strict\";var Zp=kr();_a.exports=ed;function ed(e){return Zp(e).toLowerCase()}});var Ma=C((xF,za)=>{\"use strict\";var rd=ne(),td=Gt();za.exports=ad;var La='\"',Oa=\"'\",nd=\"\\\\\",je=`\n`,Gr=\"\t\",Hr=\" \",Wt=\"[\",hr=\"]\",id=\"(\",ud=\")\",Ia=\":\",Na=\"<\",Ra=\">\";function ad(e,r,n){for(var t=this,a=t.options.commonmark,i=0,u=r.length,o=\"\",s,l,c,f,D,h,p,d;i<u&&(f=r.charAt(i),!(f!==Hr&&f!==Gr));)o+=f,i++;if(f=r.charAt(i),f===Wt){for(i++,o+=f,c=\"\";i<u&&(f=r.charAt(i),f!==hr);)f===nd&&(c+=f,i++,f=r.charAt(i)),c+=f,i++;if(!(!c||r.charAt(i)!==hr||r.charAt(i+1)!==Ia)){for(h=c,o+=c+hr+Ia,i=o.length,c=\"\";i<u&&(f=r.charAt(i),!(f!==Gr&&f!==Hr&&f!==je));)o+=f,i++;if(f=r.charAt(i),c=\"\",s=o,f===Na){for(i++;i<u&&(f=r.charAt(i),!!Ht(f));)c+=f,i++;if(f=r.charAt(i),f===Ht.delimiter)o+=Na+c+f,i++;else{if(a)return;i-=c.length+1,c=\"\"}}if(!c){for(;i<u&&(f=r.charAt(i),!!od(f));)c+=f,i++;o+=c}if(c){for(p=c,c=\"\";i<u&&(f=r.charAt(i),!(f!==Gr&&f!==Hr&&f!==je));)c+=f,i++;if(f=r.charAt(i),D=null,f===La?D=La:f===Oa?D=Oa:f===id&&(D=ud),!D)c=\"\",i=o.length;else if(c){for(o+=c+f,i=o.length,c=\"\";i<u&&(f=r.charAt(i),f!==D);){if(f===je){if(i++,f=r.charAt(i),f===je||f===D)return;c+=je}c+=f,i++}if(f=r.charAt(i),f!==D)return;l=o,o+=c+f,i++,d=c,c=\"\"}else return;for(;i<u&&(f=r.charAt(i),!(f!==Gr&&f!==Hr));)o+=f,i++;if(f=r.charAt(i),!f||f===je)return n?!0:(s=e(s).test().end,p=t.decode.raw(t.unescape(p),s,{nonTerminated:!1}),d&&(l=e(l).test().end,d=t.decode.raw(t.unescape(d),l)),e(o)({type:\"definition\",identifier:td(h),label:h,title:d||null,url:p}))}}}}function Ht(e){return e!==Ra&&e!==Wt&&e!==hr}Ht.delimiter=Ra;function od(e){return e!==Wt&&e!==hr&&!rd(e)}});var Va=C((yF,Ya)=>{\"use strict\";var sd=ne();Ya.exports=vd;var cd=\"\t\",Wr=`\n`,ld=\" \",fd=\"-\",Dd=\":\",pd=\"\\\\\",Kt=\"|\",dd=1,hd=2,Ua=\"left\",md=\"center\",gd=\"right\";function vd(e,r,n){var t=this,a,i,u,o,s,l,c,f,D,h,p,d,m,g,x,F,B,b,v,y,k,E;if(t.options.gfm){for(a=0,F=0,l=r.length+1,c=[];a<l;){if(y=r.indexOf(Wr,a),k=r.indexOf(Kt,a+1),y===-1&&(y=r.length),k===-1||k>y){if(F<hd)return;break}c.push(r.slice(a,y)),F++,a=y+1}for(o=c.join(Wr),i=c.splice(1,1)[0]||[],a=0,l=i.length,F--,u=!1,p=[];a<l;){if(D=i.charAt(a),D===Kt){if(h=null,u===!1){if(E===!1)return}else p.push(u),u=!1;E=!1}else if(D===fd)h=!0,u=u||null;else if(D===Dd)u===Ua?u=md:h&&u===null?u=gd:u=Ua;else if(!sd(D))return;a++}if(u!==!1&&p.push(u),!(p.length<dd)){if(n)return!0;for(x=-1,b=[],v=e(o).reset({type:\"table\",align:p,children:b});++x<F;){for(B=c[x],s={type:\"tableRow\",children:[]},x&&e(Wr),e(B).reset(s,v),l=B.length+1,a=0,f=\"\",d=\"\",m=!0;a<l;){if(D=B.charAt(a),D===cd||D===ld){d?f+=D:e(D),a++;continue}D===\"\"||D===Kt?m?e(D):((d||D)&&!m&&(o=d,f.length>1&&(D?(o+=f.slice(0,-1),f=f.charAt(f.length-1)):(o+=f,f=\"\")),g=e.now(),e(o)({type:\"tableCell\",children:t.tokenizeInline(d,g)},s)),e(f+D),f=\"\",d=\"\"):(f&&(d+=f,f=\"\"),d+=D,D===pd&&a!==l-2&&(d+=B.charAt(a+1),a++)),m=!1,a++}x||e(Wr+i)}return v}}}});var Ga=C((kF,$a)=>{\"use strict\";var Fd=Oe(),Ed=Ot(),Cd=jr();$a.exports=yd;var bd=\"\t\",mr=`\n`,xd=\" \",ja=4;function yd(e,r,n){for(var t=this,a=t.options,i=a.commonmark,u=t.blockTokenizers,o=t.interruptParagraph,s=r.indexOf(mr),l=r.length,c,f,D,h,p;s<l;){if(s===-1){s=l;break}if(r.charAt(s+1)===mr)break;if(i){for(h=0,c=s+1;c<l;){if(D=r.charAt(c),D===bd){h=ja;break}else if(D===xd)h++;else break;c++}if(h>=ja&&D!==mr){s=r.indexOf(mr,s+1);continue}}if(f=r.slice(s+1),Cd(o,u,t,[e,f,!0]))break;if(c=s,s=r.indexOf(mr,s+1),s!==-1&&Fd(r.slice(c,s))===\"\"){s=c;break}}return f=r.slice(0,s),n?!0:(p=e.now(),f=Ed(f),e(f)({type:\"paragraph\",children:t.tokenizeInline(f,p)}))}});var Wa=C((wF,Ha)=>{\"use strict\";Ha.exports=kd;function kd(e,r){return e.indexOf(\"\\\\\",r)}});var Qa=C((AF,Xa)=>{\"use strict\";var wd=Wa();Xa.exports=Ja;Ja.locator=wd;var Ad=`\n`,Ka=\"\\\\\";function Ja(e,r,n){var t=this,a,i;if(r.charAt(0)===Ka&&(a=r.charAt(1),t.escape.indexOf(a)!==-1))return n?!0:(a===Ad?i={type:\"break\"}:i={type:\"text\",value:a},e(Ka+a)(i))}});var Jt=C((BF,Za)=>{\"use strict\";Za.exports=Bd;function Bd(e,r){return e.indexOf(\"<\",r)}});var io=C((qF,no)=>{\"use strict\";var eo=ne(),qd=lr(),Td=Jt();no.exports=en;en.locator=Td;en.notInLink=!0;var ro=\"<\",Xt=\">\",to=\"@\",Qt=\"/\",Zt=\"mailto:\",Kr=Zt.length;function en(e,r,n){var t=this,a=\"\",i=r.length,u=0,o=\"\",s=!1,l=\"\",c,f,D,h,p;if(r.charAt(0)===ro){for(u++,a=ro;u<i&&(c=r.charAt(u),!(eo(c)||c===Xt||c===to||c===\":\"&&r.charAt(u+1)===Qt));)o+=c,u++;if(o){if(l+=o,o=\"\",c=r.charAt(u),l+=c,u++,c===to)s=!0;else{if(c!==\":\"||r.charAt(u+1)!==Qt)return;l+=Qt,u++}for(;u<i&&(c=r.charAt(u),!(eo(c)||c===Xt));)o+=c,u++;if(c=r.charAt(u),!(!o||c!==Xt))return n?!0:(l+=o,D=l,a+=l+c,f=e.now(),f.column++,f.offset++,s&&(l.slice(0,Kr).toLowerCase()===Zt?(D=D.slice(Kr),f.column+=Kr,f.offset+=Kr):l=Zt+l),h=t.inlineTokenizers,t.inlineTokenizers={text:h.text},p=t.enterLink(),D=t.tokenizeInline(D,f),t.inlineTokenizers=h,p(),e(a)({type:\"link\",title:null,url:qd(l,{nonTerminated:!1}),children:D}))}}}});var ao=C((TF,uo)=>{\"use strict\";uo.exports=Sd;function Sd(e,r){var n=String(e),t=0,a;if(typeof r!=\"string\")throw new Error(\"Expected character\");for(a=n.indexOf(r);a!==-1;)t++,a=n.indexOf(r,a+r.length);return t}});var co=C((SF,so)=>{\"use strict\";so.exports=Pd;var oo=[\"www.\",\"http://\",\"https://\"];function Pd(e,r){var n=-1,t,a,i;if(!this.options.gfm)return n;for(a=oo.length,t=-1;++t<a;)i=e.indexOf(oo[t],r),i!==-1&&(n===-1||i<n)&&(n=i);return n}});var ho=C((PF,po)=>{\"use strict\";var lo=ao(),_d=lr(),Ld=Le(),rn=ze(),Od=ne(),Id=co();po.exports=nn;nn.locator=Id;nn.notInLink=!0;var Nd=33,Rd=38,zd=41,Md=42,Ud=44,Yd=45,tn=46,Vd=58,jd=59,$d=63,Gd=60,fo=95,Hd=126,Wd=\"(\",Do=\")\";function nn(e,r,n){var t=this,a=t.options.gfm,i=t.inlineTokenizers,u=r.length,o=-1,s=!1,l,c,f,D,h,p,d,m,g,x,F,B,b,v;if(a){if(r.slice(0,4)===\"www.\")s=!0,D=4;else if(r.slice(0,7).toLowerCase()===\"http://\")D=7;else if(r.slice(0,8).toLowerCase()===\"https://\")D=8;else return;for(o=D-1,f=D,l=[];D<u;){if(d=r.charCodeAt(D),d===tn){if(o===D-1)break;l.push(D),o=D,D++;continue}if(Ld(d)||rn(d)||d===Yd||d===fo){D++;continue}break}if(d===tn&&(l.pop(),D--),l[0]!==void 0&&(c=l.length<2?f:l[l.length-2]+1,r.slice(c,D).indexOf(\"_\")===-1)){if(n)return!0;for(m=D,h=D;D<u&&(d=r.charCodeAt(D),!(Od(d)||d===Gd));)D++,d===Nd||d===Md||d===Ud||d===tn||d===Vd||d===$d||d===fo||d===Hd||(m=D);if(D=m,r.charCodeAt(D-1)===zd)for(p=r.slice(h,D),g=lo(p,Wd),x=lo(p,Do);x>g;)D=h+p.lastIndexOf(Do),p=r.slice(h,D),x--;if(r.charCodeAt(D-1)===jd&&(D--,rn(r.charCodeAt(D-1)))){for(m=D-2;rn(r.charCodeAt(m));)m--;r.charCodeAt(m)===Rd&&(D=m)}return F=r.slice(0,D),b=_d(F,{nonTerminated:!1}),s&&(b=\"http://\"+b),v=t.enterLink(),t.inlineTokenizers={text:i.text},B=t.tokenizeInline(F,e.now()),t.inlineTokenizers=i,v(),e(F)({type:\"link\",title:null,url:b,children:B})}}}});var Fo=C((_F,vo)=>{\"use strict\";var Kd=Le(),Jd=ze(),Xd=43,Qd=45,Zd=46,eh=95;vo.exports=go;function go(e,r){var n=this,t,a;if(!this.options.gfm||(t=e.indexOf(\"@\",r),t===-1))return-1;if(a=t,a===r||!mo(e.charCodeAt(a-1)))return go.call(n,e,t+1);for(;a>r&&mo(e.charCodeAt(a-1));)a--;return a}function mo(e){return Kd(e)||Jd(e)||e===Xd||e===Qd||e===Zd||e===eh}});var xo=C((LF,bo)=>{\"use strict\";var rh=lr(),Eo=Le(),Co=ze(),th=Fo();bo.exports=on;on.locator=th;on.notInLink=!0;var nh=43,un=45,Jr=46,ih=64,an=95;function on(e,r,n){var t=this,a=t.options.gfm,i=t.inlineTokenizers,u=0,o=r.length,s=-1,l,c,f,D;if(a){for(l=r.charCodeAt(u);Eo(l)||Co(l)||l===nh||l===un||l===Jr||l===an;)l=r.charCodeAt(++u);if(u!==0&&l===ih){for(u++;u<o;){if(l=r.charCodeAt(u),Eo(l)||Co(l)||l===un||l===Jr||l===an){u++,s===-1&&l===Jr&&(s=u);continue}break}if(!(s===-1||s===u||l===un||l===an))return l===Jr&&u--,c=r.slice(0,u),n?!0:(D=t.enterLink(),t.inlineTokenizers={text:i.text},f=t.tokenizeInline(c,e.now()),t.inlineTokenizers=i,D(),e(c)({type:\"link\",title:null,url:\"mailto:\"+rh(c,{nonTerminated:!1}),children:f}))}}}});var wo=C((OF,ko)=>{\"use strict\";var uh=ze(),ah=Jt(),oh=$t().tag;ko.exports=yo;yo.locator=ah;var sh=\"<\",ch=\"?\",lh=\"!\",fh=\"/\",Dh=/^<a /i,ph=/^<\\/a>/i;function yo(e,r,n){var t=this,a=r.length,i,u;if(!(r.charAt(0)!==sh||a<3)&&(i=r.charAt(1),!(!uh(i)&&i!==ch&&i!==lh&&i!==fh)&&(u=r.match(oh),!!u)))return n?!0:(u=u[0],!t.inLink&&Dh.test(u)?t.inLink=!0:t.inLink&&ph.test(u)&&(t.inLink=!1),e(u)({type:\"html\",value:u}))}});var sn=C((IF,Ao)=>{\"use strict\";Ao.exports=dh;function dh(e,r){var n=e.indexOf(\"[\",r),t=e.indexOf(\"![\",r);return t===-1||n<t?n:t}});var Lo=C((NF,_o)=>{\"use strict\";var gr=ne(),hh=sn();_o.exports=Po;Po.locator=hh;var mh=`\n`,gh=\"!\",Bo='\"',qo=\"'\",$e=\"(\",vr=\")\",cn=\"<\",ln=\">\",To=\"[\",Fr=\"\\\\\",vh=\"]\",So=\"`\";function Po(e,r,n){var t=this,a=\"\",i=0,u=r.charAt(0),o=t.options.pedantic,s=t.options.commonmark,l=t.options.gfm,c,f,D,h,p,d,m,g,x,F,B,b,v,y,k,E,w,A;if(u===gh&&(g=!0,a=u,u=r.charAt(++i)),u===To&&!(!g&&t.inLink)){for(a+=u,y=\"\",i++,B=r.length,E=e.now(),v=0,E.column+=i,E.offset+=i;i<B;){if(u=r.charAt(i),d=u,u===So){for(f=1;r.charAt(i+1)===So;)d+=u,i++,f++;D?f>=D&&(D=0):D=f}else if(u===Fr)i++,d+=r.charAt(i);else if((!D||l)&&u===To)v++;else if((!D||l)&&u===vh)if(v)v--;else{if(r.charAt(i+1)!==$e)return;d+=$e,c=!0,i++;break}y+=d,d=\"\",i++}if(c){for(x=y,a+=y+d,i++;i<B&&(u=r.charAt(i),!!gr(u));)a+=u,i++;if(u=r.charAt(i),y=\"\",h=a,u===cn){for(i++,h+=cn;i<B&&(u=r.charAt(i),u!==ln);){if(s&&u===mh)return;y+=u,i++}if(r.charAt(i)!==ln)return;a+=cn+y+ln,k=y,i++}else{for(u=null,d=\"\";i<B&&(u=r.charAt(i),!(d&&(u===Bo||u===qo||s&&u===$e)));){if(gr(u)){if(!o)break;d+=u}else{if(u===$e)v++;else if(u===vr){if(v===0)break;v--}y+=d,d=\"\",u===Fr&&(y+=Fr,u=r.charAt(++i)),y+=u}i++}a+=y,k=y,i=a.length}for(y=\"\";i<B&&(u=r.charAt(i),!!gr(u));)y+=u,i++;if(u=r.charAt(i),a+=y,y&&(u===Bo||u===qo||s&&u===$e))if(i++,a+=u,y=\"\",F=u===$e?vr:u,p=a,s){for(;i<B&&(u=r.charAt(i),u!==F);)u===Fr&&(y+=Fr,u=r.charAt(++i)),i++,y+=u;if(u=r.charAt(i),u!==F)return;for(b=y,a+=y+u,i++;i<B&&(u=r.charAt(i),!!gr(u));)a+=u,i++}else for(d=\"\";i<B;){if(u=r.charAt(i),u===F)m&&(y+=F+d,d=\"\"),m=!0;else if(!m)y+=u;else if(u===vr){a+=y+F+d,b=y;break}else gr(u)?d+=u:(y+=F+d+u,d=\"\",m=!1);i++}if(r.charAt(i)===vr)return n?!0:(a+=vr,k=t.decode.raw(t.unescape(k),e(h).test().end,{nonTerminated:!1}),b&&(p=e(p).test().end,b=t.decode.raw(t.unescape(b),p)),A={type:g?\"image\":\"link\",title:b||null,url:k},g?A.alt=t.decode.raw(t.unescape(x),E)||null:(w=t.enterLink(),A.children=t.tokenizeInline(x,E),w()),e(a)(A))}}}});var No=C((RF,Io)=>{\"use strict\";var Fh=ne(),Eh=sn(),Ch=Gt();Io.exports=Oo;Oo.locator=Eh;var fn=\"link\",bh=\"image\",xh=\"shortcut\",yh=\"collapsed\",Dn=\"full\",kh=\"!\",Xr=\"[\",Qr=\"\\\\\",Zr=\"]\";function Oo(e,r,n){var t=this,a=t.options.commonmark,i=r.charAt(0),u=0,o=r.length,s=\"\",l=\"\",c=fn,f=xh,D,h,p,d,m,g,x,F;if(i===kh&&(c=bh,l=i,i=r.charAt(++u)),i===Xr){for(u++,l+=i,g=\"\",F=0;u<o;){if(i=r.charAt(u),i===Xr)x=!0,F++;else if(i===Zr){if(!F)break;F--}i===Qr&&(g+=Qr,i=r.charAt(++u)),g+=i,u++}if(s=g,D=g,i=r.charAt(u),i===Zr){if(u++,s+=i,g=\"\",!a)for(;u<o&&(i=r.charAt(u),!!Fh(i));)g+=i,u++;if(i=r.charAt(u),i===Xr){for(h=\"\",g+=i,u++;u<o&&(i=r.charAt(u),!(i===Xr||i===Zr));)i===Qr&&(h+=Qr,i=r.charAt(++u)),h+=i,u++;i=r.charAt(u),i===Zr?(f=h?Dn:yh,g+=h+i,u++):h=\"\",s+=g,g=\"\"}else{if(!D)return;h=D}if(!(f!==Dn&&x))return s=l+s,c===fn&&t.inLink?null:n?!0:(p=e.now(),p.column+=l.length,p.offset+=l.length,h=f===Dn?h:D,d={type:c+\"Reference\",identifier:Ch(h),label:h,referenceType:f},c===fn?(m=t.enterLink(),d.children=t.tokenizeInline(D,p),m()):d.alt=t.decode.raw(t.unescape(D),p)||null,e(s)(d))}}}});var zo=C((zF,Ro)=>{\"use strict\";Ro.exports=wh;function wh(e,r){var n=e.indexOf(\"**\",r),t=e.indexOf(\"__\",r);return t===-1?n:n===-1||t<n?t:n}});var Vo=C((MF,Yo)=>{\"use strict\";var Ah=Oe(),Mo=ne(),Bh=zo();Yo.exports=Uo;Uo.locator=Bh;var qh=\"\\\\\",Th=\"*\",Sh=\"_\";function Uo(e,r,n){var t=this,a=0,i=r.charAt(a),u,o,s,l,c,f,D;if(!(i!==Th&&i!==Sh||r.charAt(++a)!==i)&&(o=t.options.pedantic,s=i,c=s+s,f=r.length,a++,l=\"\",i=\"\",!(o&&Mo(r.charAt(a)))))for(;a<f;){if(D=i,i=r.charAt(a),i===s&&r.charAt(a+1)===s&&(!o||!Mo(D))&&(i=r.charAt(a+2),i!==s))return Ah(l)?n?!0:(u=e.now(),u.column+=2,u.offset+=2,e(c+l+c)({type:\"strong\",children:t.tokenizeInline(l,u)})):void 0;!o&&i===qh&&(l+=i,i=r.charAt(++a)),l+=i,a++}}});var $o=C((UF,jo)=>{\"use strict\";jo.exports=Lh;var Ph=String.fromCharCode,_h=/\\w/;function Lh(e){return _h.test(typeof e==\"number\"?Ph(e):e.charAt(0))}});var Ho=C((YF,Go)=>{\"use strict\";Go.exports=Oh;function Oh(e,r){var n=e.indexOf(\"*\",r),t=e.indexOf(\"_\",r);return t===-1?n:n===-1||t<n?t:n}});var Qo=C((VF,Xo)=>{\"use strict\";var Ih=Oe(),Nh=$o(),Wo=ne(),Rh=Ho();Xo.exports=Jo;Jo.locator=Rh;var zh=\"*\",Ko=\"_\",Mh=\"\\\\\";function Jo(e,r,n){var t=this,a=0,i=r.charAt(a),u,o,s,l,c,f,D;if(!(i!==zh&&i!==Ko)&&(o=t.options.pedantic,c=i,s=i,f=r.length,a++,l=\"\",i=\"\",!(o&&Wo(r.charAt(a)))))for(;a<f;){if(D=i,i=r.charAt(a),i===s&&(!o||!Wo(D))){if(i=r.charAt(++a),i!==s){if(!Ih(l)||D===s)return;if(!o&&s===Ko&&Nh(i)){l+=s;continue}return n?!0:(u=e.now(),u.column++,u.offset++,e(c+l+s)({type:\"emphasis\",children:t.tokenizeInline(l,u)}))}l+=s}!o&&i===Mh&&(l+=i,i=r.charAt(++a)),l+=i,a++}}});var es=C((jF,Zo)=>{\"use strict\";Zo.exports=Uh;function Uh(e,r){return e.indexOf(\"~~\",r)}});var us=C(($F,is)=>{\"use strict\";var rs=ne(),Yh=es();is.exports=ns;ns.locator=Yh;var et=\"~\",ts=\"~~\";function ns(e,r,n){var t=this,a=\"\",i=\"\",u=\"\",o=\"\",s,l,c;if(!(!t.options.gfm||r.charAt(0)!==et||r.charAt(1)!==et||rs(r.charAt(2))))for(s=1,l=r.length,c=e.now(),c.column+=2,c.offset+=2;++s<l;){if(a=r.charAt(s),a===et&&i===et&&(!u||!rs(u)))return n?!0:e(ts+o+ts)({type:\"delete\",children:t.tokenizeInline(o,c)});o+=i,u=i,i=a}}});var os=C((GF,as)=>{\"use strict\";as.exports=Vh;function Vh(e,r){return e.indexOf(\"`\",r)}});var ls=C((HF,cs)=>{\"use strict\";var jh=os();cs.exports=ss;ss.locator=jh;var pn=10,dn=32,hn=96;function ss(e,r,n){for(var t=r.length,a=0,i,u,o,s,l,c;a<t&&r.charCodeAt(a)===hn;)a++;if(!(a===0||a===t)){for(i=a,l=r.charCodeAt(a);a<t;){if(s=l,l=r.charCodeAt(a+1),s===hn){if(u===void 0&&(u=a),o=a+1,l!==hn&&o-u===i){c=!0;break}}else u!==void 0&&(u=void 0,o=void 0);a++}if(c){if(n)return!0;if(a=i,t=u,s=r.charCodeAt(a),l=r.charCodeAt(t-1),c=!1,t-a>2&&(s===dn||s===pn)&&(l===dn||l===pn)){for(a++,t--;a<t;){if(s=r.charCodeAt(a),s!==dn&&s!==pn){c=!0;break}a++}c===!0&&(i++,u--)}return e(r.slice(0,o))({type:\"inlineCode\",value:r.slice(i,u)})}}}});var Ds=C((WF,fs)=>{\"use strict\";fs.exports=$h;function $h(e,r){for(var n=e.indexOf(`\n`,r);n>r&&e.charAt(n-1)===\" \";)n--;return n}});var hs=C((KF,ds)=>{\"use strict\";var Gh=Ds();ds.exports=ps;ps.locator=Gh;var Hh=\" \",Wh=`\n`,Kh=2;function ps(e,r,n){for(var t=r.length,a=-1,i=\"\",u;++a<t;){if(u=r.charAt(a),u===Wh)return a<Kh?void 0:n?!0:(i+=u,e(i)({type:\"break\"}));if(u!==Hh)return;i+=u}}});var gs=C((JF,ms)=>{\"use strict\";ms.exports=Jh;function Jh(e,r,n){var t=this,a,i,u,o,s,l,c,f,D,h;if(n)return!0;for(a=t.inlineMethods,o=a.length,i=t.inlineTokenizers,u=-1,D=r.length;++u<o;)f=a[u],!(f===\"text\"||!i[f])&&(c=i[f].locator,c||e.file.fail(\"Missing locator: `\"+f+\"`\"),l=c.call(t,r,1),l!==-1&&l<D&&(D=l));s=r.slice(0,D),h=e.now(),t.decode(s,h,p);function p(d,m,g){e(g||d)({type:\"text\",value:d})}}});var Cs=C((XF,Es)=>{\"use strict\";var Xh=_e(),rt=Ni(),Qh=zi(),Zh=Ui(),em=hu(),mn=vu();Es.exports=vs;function vs(e,r){this.file=r,this.offset={},this.options=Xh(this.options),this.setOptions({}),this.inList=!1,this.inBlock=!1,this.inLink=!1,this.atStart=!0,this.toOffset=Qh(r).toOffset,this.unescape=Zh(this,\"escape\"),this.decode=em(this)}var z=vs.prototype;z.setOptions=wu();z.parse=Yu();z.options=Pt();z.exitStart=rt(\"atStart\",!0);z.enterList=rt(\"inList\",!1);z.enterLink=rt(\"inLink\",!1);z.enterBlock=rt(\"inBlock\",!1);z.interruptParagraph=[[\"thematicBreak\"],[\"list\"],[\"atxHeading\"],[\"fencedCode\"],[\"blockquote\"],[\"html\"],[\"setextHeading\",{commonmark:!1}],[\"definition\",{commonmark:!1}]];z.interruptList=[[\"atxHeading\",{pedantic:!1}],[\"fencedCode\",{pedantic:!1}],[\"thematicBreak\",{pedantic:!1}],[\"definition\",{commonmark:!1}]];z.interruptBlockquote=[[\"indentedCode\",{commonmark:!0}],[\"fencedCode\",{commonmark:!0}],[\"atxHeading\",{commonmark:!0}],[\"setextHeading\",{commonmark:!0}],[\"thematicBreak\",{commonmark:!0}],[\"html\",{commonmark:!0}],[\"list\",{commonmark:!0}],[\"definition\",{commonmark:!1}]];z.blockTokenizers={blankLine:ju(),indentedCode:Ku(),fencedCode:Qu(),blockquote:ia(),atxHeading:oa(),thematicBreak:la(),list:Ca(),setextHeading:ka(),html:Sa(),definition:Ma(),table:Va(),paragraph:Ga()};z.inlineTokenizers={escape:Qa(),autoLink:io(),url:ho(),email:xo(),html:wo(),link:Lo(),reference:No(),strong:Vo(),emphasis:Qo(),deletion:us(),code:ls(),break:hs(),text:gs()};z.blockMethods=Fs(z.blockTokenizers);z.inlineMethods=Fs(z.inlineTokenizers);z.tokenizeBlock=mn(\"block\");z.tokenizeInline=mn(\"inline\");z.tokenizeFactory=mn;function Fs(e){var r=[],n;for(n in e)r.push(n);return r}});var ks=C((QF,ys)=>{\"use strict\";var rm=Oi(),tm=_e(),bs=Cs();ys.exports=xs;xs.Parser=bs;function xs(e){var r=this.data(\"settings\"),n=rm(bs);n.prototype.options=tm(n.prototype.options,r,e),this.Parser=n}});var As=C((ZF,ws)=>{\"use strict\";ws.exports=nm;function nm(e){if(e)throw e}});var gn=C((eE,Bs)=>{Bs.exports=function(r){return r!=null&&r.constructor!=null&&typeof r.constructor.isBuffer==\"function\"&&r.constructor.isBuffer(r)}});var Ns=C((rE,Is)=>{\"use strict\";var tt=Object.prototype.hasOwnProperty,Os=Object.prototype.toString,qs=Object.defineProperty,Ts=Object.getOwnPropertyDescriptor,Ss=function(r){return typeof Array.isArray==\"function\"?Array.isArray(r):Os.call(r)===\"[object Array]\"},Ps=function(r){if(!r||Os.call(r)!==\"[object Object]\")return!1;var n=tt.call(r,\"constructor\"),t=r.constructor&&r.constructor.prototype&&tt.call(r.constructor.prototype,\"isPrototypeOf\");if(r.constructor&&!n&&!t)return!1;var a;for(a in r);return typeof a>\"u\"||tt.call(r,a)},_s=function(r,n){qs&&n.name===\"__proto__\"?qs(r,n.name,{enumerable:!0,configurable:!0,value:n.newValue,writable:!0}):r[n.name]=n.newValue},Ls=function(r,n){if(n===\"__proto__\")if(tt.call(r,n)){if(Ts)return Ts(r,n).value}else return;return r[n]};Is.exports=function e(){var r,n,t,a,i,u,o=arguments[0],s=1,l=arguments.length,c=!1;for(typeof o==\"boolean\"&&(c=o,o=arguments[1]||{},s=2),(o==null||typeof o!=\"object\"&&typeof o!=\"function\")&&(o={});s<l;++s)if(r=arguments[s],r!=null)for(n in r)t=Ls(o,n),a=Ls(r,n),o!==a&&(c&&a&&(Ps(a)||(i=Ss(a)))?(i?(i=!1,u=t&&Ss(t)?t:[]):u=t&&Ps(t)?t:{},_s(o,{name:n,newValue:e(c,u,a)})):typeof a<\"u\"&&_s(o,{name:n,newValue:a}));return o}});var zs=C((tE,Rs)=>{\"use strict\";Rs.exports=e=>{if(Object.prototype.toString.call(e)!==\"[object Object]\")return!1;let r=Object.getPrototypeOf(e);return r===null||r===Object.prototype}});var Us=C((nE,Ms)=>{\"use strict\";var im=[].slice;Ms.exports=um;function um(e,r){var n;return t;function t(){var u=im.call(arguments,0),o=e.length>u.length,s;o&&u.push(a);try{s=e.apply(null,u)}catch(l){if(o&&n)throw l;return a(l)}o||(s&&typeof s.then==\"function\"?s.then(i,a):s instanceof Error?a(s):i(s))}function a(){n||(n=!0,r.apply(null,arguments))}function i(u){a(null,u)}}});var Gs=C((iE,$s)=>{\"use strict\";var Vs=Us();$s.exports=js;js.wrap=Vs;var Ys=[].slice;function js(){var e=[],r={};return r.run=n,r.use=t,r;function n(){var a=-1,i=Ys.call(arguments,0,-1),u=arguments[arguments.length-1];if(typeof u!=\"function\")throw new Error(\"Expected function as last argument, not \"+u);o.apply(null,[null].concat(i));function o(s){var l=e[++a],c=Ys.call(arguments,0),f=c.slice(1),D=i.length,h=-1;if(s){u(s);return}for(;++h<D;)(f[h]===null||f[h]===void 0)&&(f[h]=i[h]);i=f,l?Vs(l,o).apply(null,i):u.apply(null,[null].concat(i))}}function t(a){if(typeof a!=\"function\")throw new Error(\"Expected `fn` to be a function, not \"+a);return e.push(a),r}}});var Js=C((uE,Ks)=>{\"use strict\";var Ge={}.hasOwnProperty;Ks.exports=am;function am(e){return!e||typeof e!=\"object\"?\"\":Ge.call(e,\"position\")||Ge.call(e,\"type\")?Hs(e.position):Ge.call(e,\"start\")||Ge.call(e,\"end\")?Hs(e):Ge.call(e,\"line\")||Ge.call(e,\"column\")?vn(e):\"\"}function vn(e){return(!e||typeof e!=\"object\")&&(e={}),Ws(e.line)+\":\"+Ws(e.column)}function Hs(e){return(!e||typeof e!=\"object\")&&(e={}),vn(e.start)+\"-\"+vn(e.end)}function Ws(e){return e&&typeof e==\"number\"?e:1}});var Zs=C((aE,Qs)=>{\"use strict\";var om=Js();Qs.exports=Fn;function Xs(){}Xs.prototype=Error.prototype;Fn.prototype=new Xs;var ke=Fn.prototype;ke.file=\"\";ke.name=\"\";ke.reason=\"\";ke.message=\"\";ke.stack=\"\";ke.fatal=null;ke.column=null;ke.line=null;function Fn(e,r,n){var t,a,i;typeof r==\"string\"&&(n=r,r=null),t=sm(n),a=om(r)||\"1:1\",i={start:{line:null,column:null},end:{line:null,column:null}},r&&r.position&&(r=r.position),r&&(r.start?(i=r,r=r.start):i.start=r),e.stack&&(this.stack=e.stack,e=e.message),this.message=e,this.name=a,this.reason=e,this.line=r?r.line:null,this.column=r?r.column:null,this.location=i,this.source=t[0],this.ruleId=t[1]}function sm(e){var r=[null,null],n;return typeof e==\"string\"&&(n=e.indexOf(\":\"),n===-1?r[1]=e:(r[0]=e.slice(0,n),r[1]=e.slice(n+1))),r}});var ec=C(He=>{\"use strict\";He.basename=cm;He.dirname=lm;He.extname=fm;He.join=Dm;He.sep=\"/\";function cm(e,r){var n=0,t=-1,a,i,u,o;if(r!==void 0&&typeof r!=\"string\")throw new TypeError('\"ext\" argument must be a string');if(Er(e),a=e.length,r===void 0||!r.length||r.length>e.length){for(;a--;)if(e.charCodeAt(a)===47){if(u){n=a+1;break}}else t<0&&(u=!0,t=a+1);return t<0?\"\":e.slice(n,t)}if(r===e)return\"\";for(i=-1,o=r.length-1;a--;)if(e.charCodeAt(a)===47){if(u){n=a+1;break}}else i<0&&(u=!0,i=a+1),o>-1&&(e.charCodeAt(a)===r.charCodeAt(o--)?o<0&&(t=a):(o=-1,t=i));return n===t?t=i:t<0&&(t=e.length),e.slice(n,t)}function lm(e){var r,n,t;if(Er(e),!e.length)return\".\";for(r=-1,t=e.length;--t;)if(e.charCodeAt(t)===47){if(n){r=t;break}}else n||(n=!0);return r<0?e.charCodeAt(0)===47?\"/\":\".\":r===1&&e.charCodeAt(0)===47?\"//\":e.slice(0,r)}function fm(e){var r=-1,n=0,t=-1,a=0,i,u,o;for(Er(e),o=e.length;o--;){if(u=e.charCodeAt(o),u===47){if(i){n=o+1;break}continue}t<0&&(i=!0,t=o+1),u===46?r<0?r=o:a!==1&&(a=1):r>-1&&(a=-1)}return r<0||t<0||a===0||a===1&&r===t-1&&r===n+1?\"\":e.slice(r,t)}function Dm(){for(var e=-1,r;++e<arguments.length;)Er(arguments[e]),arguments[e]&&(r=r===void 0?arguments[e]:r+\"/\"+arguments[e]);return r===void 0?\".\":pm(r)}function pm(e){var r,n;return Er(e),r=e.charCodeAt(0)===47,n=dm(e,!r),!n.length&&!r&&(n=\".\"),n.length&&e.charCodeAt(e.length-1)===47&&(n+=\"/\"),r?\"/\"+n:n}function dm(e,r){for(var n=\"\",t=0,a=-1,i=0,u=-1,o,s;++u<=e.length;){if(u<e.length)o=e.charCodeAt(u);else{if(o===47)break;o=47}if(o===47){if(!(a===u-1||i===1))if(a!==u-1&&i===2){if(n.length<2||t!==2||n.charCodeAt(n.length-1)!==46||n.charCodeAt(n.length-2)!==46){if(n.length>2){if(s=n.lastIndexOf(\"/\"),s!==n.length-1){s<0?(n=\"\",t=0):(n=n.slice(0,s),t=n.length-1-n.lastIndexOf(\"/\")),a=u,i=0;continue}}else if(n.length){n=\"\",t=0,a=u,i=0;continue}}r&&(n=n.length?n+\"/..\":\"..\",t=2)}else n.length?n+=\"/\"+e.slice(a+1,u):n=e.slice(a+1,u),t=u-a-1;a=u,i=0}else o===46&&i>-1?i++:i=-1}return n}function Er(e){if(typeof e!=\"string\")throw new TypeError(\"Path must be a string. Received \"+JSON.stringify(e))}});var tc=C(rc=>{\"use strict\";rc.cwd=hm;function hm(){return\"/\"}});var uc=C((cE,ic)=>{\"use strict\";var ie=ec(),mm=tc(),gm=gn();ic.exports=he;var vm={}.hasOwnProperty,En=[\"history\",\"path\",\"basename\",\"stem\",\"extname\",\"dirname\"];he.prototype.toString=qm;Object.defineProperty(he.prototype,\"path\",{get:Fm,set:Em});Object.defineProperty(he.prototype,\"dirname\",{get:Cm,set:bm});Object.defineProperty(he.prototype,\"basename\",{get:xm,set:ym});Object.defineProperty(he.prototype,\"extname\",{get:km,set:wm});Object.defineProperty(he.prototype,\"stem\",{get:Am,set:Bm});function he(e){var r,n;if(!e)e={};else if(typeof e==\"string\"||gm(e))e={contents:e};else if(\"message\"in e&&\"messages\"in e)return e;if(!(this instanceof he))return new he(e);for(this.data={},this.messages=[],this.history=[],this.cwd=mm.cwd(),n=-1;++n<En.length;)r=En[n],vm.call(e,r)&&(this[r]=e[r]);for(r in e)En.indexOf(r)<0&&(this[r]=e[r])}function Fm(){return this.history[this.history.length-1]}function Em(e){bn(e,\"path\"),this.path!==e&&this.history.push(e)}function Cm(){return typeof this.path==\"string\"?ie.dirname(this.path):void 0}function bm(e){nc(this.path,\"dirname\"),this.path=ie.join(e||\"\",this.basename)}function xm(){return typeof this.path==\"string\"?ie.basename(this.path):void 0}function ym(e){bn(e,\"basename\"),Cn(e,\"basename\"),this.path=ie.join(this.dirname||\"\",e)}function km(){return typeof this.path==\"string\"?ie.extname(this.path):void 0}function wm(e){if(Cn(e,\"extname\"),nc(this.path,\"extname\"),e){if(e.charCodeAt(0)!==46)throw new Error(\"`extname` must start with `.`\");if(e.indexOf(\".\",1)>-1)throw new Error(\"`extname` cannot contain multiple dots\")}this.path=ie.join(this.dirname,this.stem+(e||\"\"))}function Am(){return typeof this.path==\"string\"?ie.basename(this.path,this.extname):void 0}function Bm(e){bn(e,\"stem\"),Cn(e,\"stem\"),this.path=ie.join(this.dirname||\"\",e+(this.extname||\"\"))}function qm(e){return(this.contents||\"\").toString(e)}function Cn(e,r){if(e&&e.indexOf(ie.sep)>-1)throw new Error(\"`\"+r+\"` cannot be a path: did not expect `\"+ie.sep+\"`\")}function bn(e,r){if(!e)throw new Error(\"`\"+r+\"` cannot be empty\")}function nc(e,r){if(!e)throw new Error(\"Setting `\"+r+\"` requires `path` to be set too\")}});var oc=C((lE,ac)=>{\"use strict\";var Tm=Zs(),nt=uc();ac.exports=nt;nt.prototype.message=Sm;nt.prototype.info=_m;nt.prototype.fail=Pm;function Sm(e,r,n){var t=new Tm(e,r,n);return this.path&&(t.name=this.path+\":\"+t.name,t.file=this.path),t.fatal=!1,this.messages.push(t),t}function Pm(){var e=this.message.apply(this,arguments);throw e.fatal=!0,e}function _m(){var e=this.message.apply(this,arguments);return e.fatal=null,e}});var cc=C((fE,sc)=>{\"use strict\";sc.exports=oc()});var vc=C((DE,gc)=>{\"use strict\";var lc=As(),Lm=gn(),it=Ns(),fc=zs(),hc=Gs(),Cr=cc();gc.exports=mc().freeze();var Om=[].slice,Im={}.hasOwnProperty,Nm=hc().use(Rm).use(zm).use(Mm);function Rm(e,r){r.tree=e.parse(r.file)}function zm(e,r,n){e.run(r.tree,r.file,t);function t(a,i,u){a?n(a):(r.tree=i,r.file=u,n())}}function Mm(e,r){var n=e.stringify(r.tree,r.file);n==null||(typeof n==\"string\"||Lm(n)?(\"value\"in r.file&&(r.file.value=n),r.file.contents=n):r.file.result=n)}function mc(){var e=[],r=hc(),n={},t=-1,a;return i.data=o,i.freeze=u,i.attachers=e,i.use=s,i.parse=c,i.stringify=h,i.run=f,i.runSync=D,i.process=p,i.processSync=d,i;function i(){for(var m=mc(),g=-1;++g<e.length;)m.use.apply(null,e[g]);return m.data(it(!0,{},n)),m}function u(){var m,g;if(a)return i;for(;++t<e.length;)m=e[t],m[1]!==!1&&(m[1]===!0&&(m[1]=void 0),g=m[0].apply(i,m.slice(1)),typeof g==\"function\"&&r.use(g));return a=!0,t=1/0,i}function o(m,g){return typeof m==\"string\"?arguments.length===2?(kn(\"data\",a),n[m]=g,i):Im.call(n,m)&&n[m]||null:m?(kn(\"data\",a),n=m,i):n}function s(m){var g;if(kn(\"use\",a),m!=null)if(typeof m==\"function\")b.apply(null,arguments);else if(typeof m==\"object\")\"length\"in m?B(m):x(m);else throw new Error(\"Expected usable value, not `\"+m+\"`\");return g&&(n.settings=it(n.settings||{},g)),i;function x(v){B(v.plugins),v.settings&&(g=it(g||{},v.settings))}function F(v){if(typeof v==\"function\")b(v);else if(typeof v==\"object\")\"length\"in v?b.apply(null,v):x(v);else throw new Error(\"Expected usable value, not `\"+v+\"`\")}function B(v){var y=-1;if(v!=null)if(typeof v==\"object\"&&\"length\"in v)for(;++y<v.length;)F(v[y]);else throw new Error(\"Expected a list of plugins, not `\"+v+\"`\")}function b(v,y){var k=l(v);k?(fc(k[1])&&fc(y)&&(y=it(!0,k[1],y)),k[1]=y):e.push(Om.call(arguments))}}function l(m){for(var g=-1;++g<e.length;)if(e[g][0]===m)return e[g]}function c(m){var g=Cr(m),x;return u(),x=i.Parser,xn(\"parse\",x),Dc(x,\"parse\")?new x(String(g),g).parse():x(String(g),g)}function f(m,g,x){if(pc(m),u(),!x&&typeof g==\"function\"&&(x=g,g=null),!x)return new Promise(F);F(null,x);function F(B,b){r.run(m,Cr(g),v);function v(y,k,E){k=k||m,y?b(y):B?B(k):x(null,k,E)}}}function D(m,g){var x,F;return f(m,g,B),dc(\"runSync\",\"run\",F),x;function B(b,v){F=!0,x=v,lc(b)}}function h(m,g){var x=Cr(g),F;return u(),F=i.Compiler,yn(\"stringify\",F),pc(m),Dc(F,\"compile\")?new F(m,x).compile():F(m,x)}function p(m,g){if(u(),xn(\"process\",i.Parser),yn(\"process\",i.Compiler),!g)return new Promise(x);x(null,g);function x(F,B){var b=Cr(m);Nm.run(i,{file:b},v);function v(y){y?B(y):F?F(b):g(null,b)}}}function d(m){var g,x;return u(),xn(\"processSync\",i.Parser),yn(\"processSync\",i.Compiler),g=Cr(m),p(g,F),dc(\"processSync\",\"process\",x),g;function F(B){x=!0,lc(B)}}}function Dc(e,r){return typeof e==\"function\"&&e.prototype&&(Um(e.prototype)||r in e.prototype)}function Um(e){var r;for(r in e)return!0;return!1}function xn(e,r){if(typeof r!=\"function\")throw new Error(\"Cannot `\"+e+\"` without `Parser`\")}function yn(e,r){if(typeof r!=\"function\")throw new Error(\"Cannot `\"+e+\"` without `Compiler`\")}function kn(e,r){if(r)throw new Error(\"Cannot invoke `\"+e+\"` on a frozen processor.\\nCreate a new processor first, by invoking it: use `processor()` instead of `processor`.\")}function pc(e){if(!e||typeof e.type!=\"string\")throw new Error(\"Expected node, got `\"+e+\"`\")}function dc(e,r,n){if(!n)throw new Error(\"`\"+e+\"` finished async. Use `\"+r+\"` instead\")}});var An=C(wn=>{wn.isRemarkParser=Ym;wn.isRemarkCompiler=Vm;function Ym(e){return!!(e&&e.prototype&&e.prototype.blockTokenizers)}function Vm(e){return!!(e&&e.prototype&&e.prototype.visitors)}});var kc=C((dE,yc)=>{var Fc=An();yc.exports=Hm;var Ec=9,Cc=32,ut=36,jm=48,$m=57,bc=92,Gm=[\"math\",\"math-inline\"],xc=\"math-display\";function Hm(e){let r=this.Parser,n=this.Compiler;Fc.isRemarkParser(r)&&Wm(r,e),Fc.isRemarkCompiler(n)&&Km(n,e)}function Wm(e,r){let n=e.prototype,t=n.inlineMethods;i.locator=a,n.inlineTokenizers.math=i,t.splice(t.indexOf(\"text\"),0,\"math\");function a(u,o){return u.indexOf(\"$\",o)}function i(u,o,s){let l=o.length,c=!1,f=!1,D=0,h,p,d,m,g,x,F;if(o.charCodeAt(D)===bc&&(f=!0,D++),o.charCodeAt(D)===ut){if(D++,f)return s?!0:u(o.slice(0,D))({type:\"text\",value:\"$\"});if(o.charCodeAt(D)===ut&&(c=!0,D++),d=o.charCodeAt(D),!(d===Cc||d===Ec)){for(m=D;D<l;){if(p=d,d=o.charCodeAt(D+1),p===ut){if(h=o.charCodeAt(D-1),h!==Cc&&h!==Ec&&(d!==d||d<jm||d>$m)&&(!c||d===ut)){g=D-1,D++,c&&D++,x=D;break}}else p===bc&&(D++,d=o.charCodeAt(D+1));D++}if(x!==void 0)return s?!0:(F=o.slice(m,g+1),u(o.slice(0,x))({type:\"inlineMath\",value:F,data:{hName:\"span\",hProperties:{className:Gm.concat(c&&r.inlineMathDouble?[xc]:[])},hChildren:[{type:\"text\",value:F}]}}))}}}}function Km(e){let r=e.prototype;r.visitors.inlineMath=n;function n(t){let a=\"$\";return(t.data&&t.data.hProperties&&t.data.hProperties.className||[]).includes(xc)&&(a=\"$$\"),a+t.value+a}}});var Tc=C((hE,qc)=>{var wc=An();qc.exports=Zm;var Ac=10,br=32,Bn=36,Bc=`\n`,Jm=\"$\",Xm=2,Qm=[\"math\",\"math-display\"];function Zm(){let e=this.Parser,r=this.Compiler;wc.isRemarkParser(e)&&eg(e),wc.isRemarkCompiler(r)&&rg(r)}function eg(e){let r=e.prototype,n=r.blockMethods,t=r.interruptParagraph,a=r.interruptList,i=r.interruptBlockquote;r.blockTokenizers.math=u,n.splice(n.indexOf(\"fencedCode\")+1,0,\"math\"),t.splice(t.indexOf(\"fencedCode\")+1,0,[\"math\"]),a.splice(a.indexOf(\"fencedCode\")+1,0,[\"math\"]),i.splice(i.indexOf(\"fencedCode\")+1,0,[\"math\"]);function u(o,s,l){var c=s.length,f=0;let D,h,p,d,m,g,x,F,B,b,v;for(;f<c&&s.charCodeAt(f)===br;)f++;for(m=f;f<c&&s.charCodeAt(f)===Bn;)f++;if(g=f-m,!(g<Xm)){for(;f<c&&s.charCodeAt(f)===br;)f++;for(x=f;f<c;){if(D=s.charCodeAt(f),D===Bn)return;if(D===Ac)break;f++}if(s.charCodeAt(f)===Ac){if(l)return!0;for(h=[],x!==f&&h.push(s.slice(x,f)),f++,p=s.indexOf(Bc,f+1),p=p===-1?c:p;f<c;){for(F=!1,b=f,v=p,d=p,B=0;d>b&&s.charCodeAt(d-1)===br;)d--;for(;d>b&&s.charCodeAt(d-1)===Bn;)B++,d--;for(g<=B&&s.indexOf(Jm,b)===d&&(F=!0,v=d);b<=v&&b-f<m&&s.charCodeAt(b)===br;)b++;if(F)for(;v>b&&s.charCodeAt(v-1)===br;)v--;if((!F||b!==v)&&h.push(s.slice(b,v)),F)break;f=p+1,p=s.indexOf(Bc,f+1),p=p===-1?c:p}return h=h.join(`\n`),o(s.slice(0,p))({type:\"math\",value:h,data:{hName:\"div\",hProperties:{className:Qm.concat()},hChildren:[{type:\"text\",value:h}]}})}}}}function rg(e){let r=e.prototype;r.visitors.math=n;function n(t){return`$$\n`+t.value+`\n$$`}}});var Pc=C((mE,Sc)=>{var tg=kc(),ng=Tc();Sc.exports=ig;function ig(e){var r=e||{};ng.call(this,r),tg.call(this,r)}});var Lc=C((gE,_c)=>{\"use strict\";_c.exports=cg;var xr=9,at=10,We=32,ug=33,ag=58,Ke=91,og=92,qn=93,yr=94,ot=96,st=4,sg=1024;function cg(e){var r=this.Parser,n=this.Compiler;lg(r)&&Dg(r,e),fg(n)&&pg(n)}function lg(e){return!!(e&&e.prototype&&e.prototype.blockTokenizers)}function fg(e){return!!(e&&e.prototype&&e.prototype.visitors)}function Dg(e,r){for(var n=r||{},t=e.prototype,a=t.blockTokenizers,i=t.inlineTokenizers,u=t.blockMethods,o=t.inlineMethods,s=a.definition,l=i.reference,c=[],f=-1,D=u.length,h;++f<D;)h=u[f],!(h===\"newline\"||h===\"indentedCode\"||h===\"paragraph\"||h===\"footnoteDefinition\")&&c.push([h]);c.push([\"footnoteDefinition\"]),n.inlineNotes&&(Tn(o,\"reference\",\"inlineNote\"),i.inlineNote=m),Tn(u,\"definition\",\"footnoteDefinition\"),Tn(o,\"reference\",\"footnoteCall\"),a.definition=x,a.footnoteDefinition=p,i.footnoteCall=d,i.reference=g,t.interruptFootnoteDefinition=c,g.locator=l.locator,d.locator=F,m.locator=B;function p(b,v,y){for(var k=this,E=k.interruptFootnoteDefinition,w=k.offset,A=v.length+1,q=0,T=[],N,_,P,S,L,we,j,I,J,K,me,ge,M;q<A&&(S=v.charCodeAt(q),!(S!==xr&&S!==We));)q++;if(v.charCodeAt(q++)===Ke&&v.charCodeAt(q++)===yr){for(_=q;q<A;){if(S=v.charCodeAt(q),S!==S||S===at||S===xr||S===We)return;if(S===qn){P=q,q++;break}q++}if(!(P===void 0||_===P||v.charCodeAt(q++)!==ag)){if(y)return!0;for(N=v.slice(_,P),L=b.now(),J=0,K=0,me=q,ge=[];q<A;){if(S=v.charCodeAt(q),S!==S||S===at)M={start:J,contentStart:me||q,contentEnd:q,end:q},ge.push(M),S===at&&(J=q+1,K=0,me=void 0,M.end=J);else if(K!==void 0)if(S===We||S===xr)K+=S===We?1:st-K%st,K>st&&(K=void 0,me=q);else{if(K<st&&M&&(M.contentStart===M.contentEnd||dg(E,a,k,[b,v.slice(q,sg),!0])))break;K=void 0,me=q}q++}for(q=-1,A=ge.length;A>0&&(M=ge[A-1],M.contentStart===M.contentEnd);)A--;for(we=b(v.slice(0,M.contentEnd));++q<A;)M=ge[q],w[L.line+q]=(w[L.line+q]||0)+(M.contentStart-M.start),T.push(v.slice(M.contentStart,M.end));return j=k.enterBlock(),I=k.tokenizeBlock(T.join(\"\"),L),j(),we({type:\"footnoteDefinition\",identifier:N.toLowerCase(),label:N,children:I})}}}function d(b,v,y){var k=v.length+1,E=0,w,A,q,T;if(v.charCodeAt(E++)===Ke&&v.charCodeAt(E++)===yr){for(A=E;E<k;){if(T=v.charCodeAt(E),T!==T||T===at||T===xr||T===We)return;if(T===qn){q=E,E++;break}E++}if(!(q===void 0||A===q))return y?!0:(w=v.slice(A,q),b(v.slice(0,E))({type:\"footnoteReference\",identifier:w.toLowerCase(),label:w}))}}function m(b,v,y){var k=this,E=v.length+1,w=0,A=0,q,T,N,_,P,S,L;if(v.charCodeAt(w++)===yr&&v.charCodeAt(w++)===Ke){for(N=w;w<E;){if(T=v.charCodeAt(w),T!==T)return;if(S===void 0)if(T===og)w+=2;else if(T===Ke)A++,w++;else if(T===qn)if(A===0){_=w,w++;break}else A--,w++;else if(T===ot){for(P=w,S=1;v.charCodeAt(P+S)===ot;)S++;w+=S}else w++;else if(T===ot){for(P=w,L=1;v.charCodeAt(P+L)===ot;)L++;w+=L,S===L&&(S=void 0),L=void 0}else w++}if(_!==void 0)return y?!0:(q=b.now(),q.column+=2,q.offset+=2,b(v.slice(0,w))({type:\"footnote\",children:k.tokenizeInline(v.slice(N,_),q)}))}}function g(b,v,y){var k=0;if(v.charCodeAt(k)===ug&&k++,v.charCodeAt(k)===Ke&&v.charCodeAt(k+1)!==yr)return l.call(this,b,v,y)}function x(b,v,y){for(var k=0,E=v.charCodeAt(k);E===We||E===xr;)E=v.charCodeAt(++k);if(E===Ke&&v.charCodeAt(k+1)!==yr)return s.call(this,b,v,y)}function F(b,v){return b.indexOf(\"[\",v)}function B(b,v){return b.indexOf(\"^[\",v)}}function pg(e){var r=e.prototype.visitors,n=\"    \";r.footnote=t,r.footnoteReference=a,r.footnoteDefinition=i;function t(u){return\"^[\"+this.all(u).join(\"\")+\"]\"}function a(u){return\"[^\"+(u.label||u.identifier)+\"]\"}function i(u){for(var o=this.all(u).join(`\n\n`).split(`\n`),s=0,l=o.length,c;++s<l;)c=o[s],c!==\"\"&&(o[s]=n+c);return\"[^\"+(u.label||u.identifier)+\"]: \"+o.join(`\n`)}}function Tn(e,r,n){e.splice(e.indexOf(r),0,n)}function dg(e,r,n,t){for(var a=e.length,i=-1;++i<a;)if(r[e[i][0]].apply(n,t))return!0;return!1}});var Ln={};On(Ln,{languages:()=>Qc,options:()=>Zc,parsers:()=>Pn,printers:()=>wg});var al=(e,r,n,t)=>{if(!(e&&r==null))return r.replaceAll?r.replaceAll(n,t):n.global?r.replace(n,t):r.split(n).join(t)},R=al;var ol=(e,r,n)=>{if(!(e&&r==null))return Array.isArray(r)||typeof r==\"string\"?r[n<0?r.length+n:n]:r.at(n)},U=ol;var qi=Ie(kr(),1);function Je(e){if(typeof e!=\"string\")throw new TypeError(\"Expected a string\");return e.replace(/[|\\\\{}()[\\]^$+*?.]/g,\"\\\\$&\").replace(/-/g,\"\\\\x2d\")}function cl(e,r){let n=e.match(new RegExp(`(${Je(r)})+`,\"g\"));if(n===null)return 0;let t=new Map,a=0;for(let i of n){let u=i.length/r.length;t.set(u,!0),u>a&&(a=u)}for(let i=1;i<a;i++)if(!t.get(i))return i;return a+1}var Nn=cl;function ll(e,r){let n=e.match(new RegExp(`(${Je(r)})+`,\"g\"));return n===null?0:n.reduce((t,a)=>Math.max(t,a.length/r.length),0)}var wr=ll;var Rn=()=>/[#*0-9]\\uFE0F?\\u20E3|[\\xA9\\xAE\\u203C\\u2049\\u2122\\u2139\\u2194-\\u2199\\u21A9\\u21AA\\u231A\\u231B\\u2328\\u23CF\\u23ED-\\u23EF\\u23F1\\u23F2\\u23F8-\\u23FA\\u24C2\\u25AA\\u25AB\\u25B6\\u25C0\\u25FB\\u25FC\\u25FE\\u2600-\\u2604\\u260E\\u2611\\u2614\\u2615\\u2618\\u2620\\u2622\\u2623\\u2626\\u262A\\u262E\\u262F\\u2638-\\u263A\\u2640\\u2642\\u2648-\\u2653\\u265F\\u2660\\u2663\\u2665\\u2666\\u2668\\u267B\\u267E\\u267F\\u2692\\u2694-\\u2697\\u2699\\u269B\\u269C\\u26A0\\u26A7\\u26AA\\u26B0\\u26B1\\u26BD\\u26BE\\u26C4\\u26C8\\u26CF\\u26D1\\u26D3\\u26E9\\u26F0-\\u26F5\\u26F7\\u26F8\\u26FA\\u2702\\u2708\\u2709\\u270F\\u2712\\u2714\\u2716\\u271D\\u2721\\u2733\\u2734\\u2744\\u2747\\u2757\\u2763\\u27A1\\u2934\\u2935\\u2B05-\\u2B07\\u2B1B\\u2B1C\\u2B55\\u3030\\u303D\\u3297\\u3299]\\uFE0F?|[\\u261D\\u270C\\u270D](?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])?|[\\u270A\\u270B](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\u23E9-\\u23EC\\u23F0\\u23F3\\u25FD\\u2693\\u26A1\\u26AB\\u26C5\\u26CE\\u26D4\\u26EA\\u26FD\\u2705\\u2728\\u274C\\u274E\\u2753-\\u2755\\u2795-\\u2797\\u27B0\\u27BF\\u2B50]|\\u26F9(?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|\\u2764\\uFE0F?(?:\\u200D(?:\\uD83D\\uDD25|\\uD83E\\uDE79))?|\\uD83C(?:[\\uDC04\\uDD70\\uDD71\\uDD7E\\uDD7F\\uDE02\\uDE37\\uDF21\\uDF24-\\uDF2C\\uDF36\\uDF7D\\uDF96\\uDF97\\uDF99-\\uDF9B\\uDF9E\\uDF9F\\uDFCD\\uDFCE\\uDFD4-\\uDFDF\\uDFF5\\uDFF7]\\uFE0F?|[\\uDF85\\uDFC2\\uDFC7](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDFC3\\uDFC4\\uDFCA](?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDFCB\\uDFCC](?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDCCF\\uDD8E\\uDD91-\\uDD9A\\uDE01\\uDE1A\\uDE2F\\uDE32-\\uDE36\\uDE38-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF20\\uDF2D-\\uDF35\\uDF37-\\uDF7C\\uDF7E-\\uDF84\\uDF86-\\uDF93\\uDFA0-\\uDFC1\\uDFC5\\uDFC6\\uDFC8\\uDFC9\\uDFCF-\\uDFD3\\uDFE0-\\uDFF0\\uDFF8-\\uDFFF]|\\uDDE6\\uD83C[\\uDDE8-\\uDDEC\\uDDEE\\uDDF1\\uDDF2\\uDDF4\\uDDF6-\\uDDFA\\uDDFC\\uDDFD\\uDDFF]|\\uDDE7\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEF\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9\\uDDFB\\uDDFC\\uDDFE\\uDDFF]|\\uDDE8\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDEE\\uDDF0-\\uDDF5\\uDDF7\\uDDFA-\\uDDFF]|\\uDDE9\\uD83C[\\uDDEA\\uDDEC\\uDDEF\\uDDF0\\uDDF2\\uDDF4\\uDDFF]|\\uDDEA\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDED\\uDDF7-\\uDDFA]|\\uDDEB\\uD83C[\\uDDEE-\\uDDF0\\uDDF2\\uDDF4\\uDDF7]|\\uDDEC\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEE\\uDDF1-\\uDDF3\\uDDF5-\\uDDFA\\uDDFC\\uDDFE]|\\uDDED\\uD83C[\\uDDF0\\uDDF2\\uDDF3\\uDDF7\\uDDF9\\uDDFA]|\\uDDEE\\uD83C[\\uDDE8-\\uDDEA\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9]|\\uDDEF\\uD83C[\\uDDEA\\uDDF2\\uDDF4\\uDDF5]|\\uDDF0\\uD83C[\\uDDEA\\uDDEC-\\uDDEE\\uDDF2\\uDDF3\\uDDF5\\uDDF7\\uDDFC\\uDDFE\\uDDFF]|\\uDDF1\\uD83C[\\uDDE6-\\uDDE8\\uDDEE\\uDDF0\\uDDF7-\\uDDFB\\uDDFE]|\\uDDF2\\uD83C[\\uDDE6\\uDDE8-\\uDDED\\uDDF0-\\uDDFF]|\\uDDF3\\uD83C[\\uDDE6\\uDDE8\\uDDEA-\\uDDEC\\uDDEE\\uDDF1\\uDDF4\\uDDF5\\uDDF7\\uDDFA\\uDDFF]|\\uDDF4\\uD83C\\uDDF2|\\uDDF5\\uD83C[\\uDDE6\\uDDEA-\\uDDED\\uDDF0-\\uDDF3\\uDDF7-\\uDDF9\\uDDFC\\uDDFE]|\\uDDF6\\uD83C\\uDDE6|\\uDDF7\\uD83C[\\uDDEA\\uDDF4\\uDDF8\\uDDFA\\uDDFC]|\\uDDF8\\uD83C[\\uDDE6-\\uDDEA\\uDDEC-\\uDDF4\\uDDF7-\\uDDF9\\uDDFB\\uDDFD-\\uDDFF]|\\uDDF9\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDED\\uDDEF-\\uDDF4\\uDDF7\\uDDF9\\uDDFB\\uDDFC\\uDDFF]|\\uDDFA\\uD83C[\\uDDE6\\uDDEC\\uDDF2\\uDDF3\\uDDF8\\uDDFE\\uDDFF]|\\uDDFB\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDEE\\uDDF3\\uDDFA]|\\uDDFC\\uD83C[\\uDDEB\\uDDF8]|\\uDDFD\\uD83C\\uDDF0|\\uDDFE\\uD83C[\\uDDEA\\uDDF9]|\\uDDFF\\uD83C[\\uDDE6\\uDDF2\\uDDFC]|\\uDFF3\\uFE0F?(?:\\u200D(?:\\u26A7\\uFE0F?|\\uD83C\\uDF08))?|\\uDFF4(?:\\u200D\\u2620\\uFE0F?|\\uDB40\\uDC67\\uDB40\\uDC62\\uDB40(?:\\uDC65\\uDB40\\uDC6E\\uDB40\\uDC67|\\uDC73\\uDB40\\uDC63\\uDB40\\uDC74|\\uDC77\\uDB40\\uDC6C\\uDB40\\uDC73)\\uDB40\\uDC7F)?)|\\uD83D(?:[\\uDC08\\uDC26](?:\\u200D\\u2B1B)?|[\\uDC3F\\uDCFD\\uDD49\\uDD4A\\uDD6F\\uDD70\\uDD73\\uDD76-\\uDD79\\uDD87\\uDD8A-\\uDD8D\\uDDA5\\uDDA8\\uDDB1\\uDDB2\\uDDBC\\uDDC2-\\uDDC4\\uDDD1-\\uDDD3\\uDDDC-\\uDDDE\\uDDE1\\uDDE3\\uDDE8\\uDDEF\\uDDF3\\uDDFA\\uDECB\\uDECD-\\uDECF\\uDEE0-\\uDEE5\\uDEE9\\uDEF0\\uDEF3]\\uFE0F?|[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66\\uDC67\\uDC6B-\\uDC6D\\uDC72\\uDC74-\\uDC76\\uDC78\\uDC7C\\uDC83\\uDC85\\uDC8F\\uDC91\\uDCAA\\uDD7A\\uDD95\\uDD96\\uDE4C\\uDE4F\\uDEC0\\uDECC](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDC6E\\uDC70\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6](?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDD74\\uDD90](?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDC00-\\uDC07\\uDC09-\\uDC14\\uDC16-\\uDC25\\uDC27-\\uDC3A\\uDC3C-\\uDC3E\\uDC40\\uDC44\\uDC45\\uDC51-\\uDC65\\uDC6A\\uDC79-\\uDC7B\\uDC7D-\\uDC80\\uDC84\\uDC88-\\uDC8E\\uDC90\\uDC92-\\uDCA9\\uDCAB-\\uDCFC\\uDCFF-\\uDD3D\\uDD4B-\\uDD4E\\uDD50-\\uDD67\\uDDA4\\uDDFB-\\uDE2D\\uDE2F-\\uDE34\\uDE37-\\uDE44\\uDE48-\\uDE4A\\uDE80-\\uDEA2\\uDEA4-\\uDEB3\\uDEB7-\\uDEBF\\uDEC1-\\uDEC5\\uDED0-\\uDED2\\uDED5-\\uDED7\\uDEDC-\\uDEDF\\uDEEB\\uDEEC\\uDEF4-\\uDEFC\\uDFE0-\\uDFEB\\uDFF0]|\\uDC15(?:\\u200D\\uD83E\\uDDBA)?|\\uDC3B(?:\\u200D\\u2744\\uFE0F?)?|\\uDC41\\uFE0F?(?:\\u200D\\uD83D\\uDDE8\\uFE0F?)?|\\uDC68(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDC68\\uDC69]\\u200D\\uD83D(?:\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?)|[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?)|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C(?:\\uDFFB(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFC-\\uDFFF])))?|\\uDFFC(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])))?|\\uDFFD(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])))?|\\uDFFE(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])))?|\\uDFFF(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB-\\uDFFE])))?))?|\\uDC69(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?[\\uDC68\\uDC69]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?|\\uDC69\\u200D\\uD83D(?:\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?))|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C(?:\\uDFFB(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFC-\\uDFFF])))?|\\uDFFC(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])))?|\\uDFFD(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])))?|\\uDFFE(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])))?|\\uDFFF(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB-\\uDFFE])))?))?|\\uDC6F(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|\\uDD75(?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|\\uDE2E(?:\\u200D\\uD83D\\uDCA8)?|\\uDE35(?:\\u200D\\uD83D\\uDCAB)?|\\uDE36(?:\\u200D\\uD83C\\uDF2B\\uFE0F?)?)|\\uD83E(?:[\\uDD0C\\uDD0F\\uDD18-\\uDD1F\\uDD30-\\uDD34\\uDD36\\uDD77\\uDDB5\\uDDB6\\uDDBB\\uDDD2\\uDDD3\\uDDD5\\uDEC3-\\uDEC5\\uDEF0\\uDEF2-\\uDEF8](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD4\\uDDD6-\\uDDDD](?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDDDE\\uDDDF](?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDD0D\\uDD0E\\uDD10-\\uDD17\\uDD20-\\uDD25\\uDD27-\\uDD2F\\uDD3A\\uDD3F-\\uDD45\\uDD47-\\uDD76\\uDD78-\\uDDB4\\uDDB7\\uDDBA\\uDDBC-\\uDDCC\\uDDD0\\uDDE0-\\uDDFF\\uDE70-\\uDE7C\\uDE80-\\uDE88\\uDE90-\\uDEBD\\uDEBF-\\uDEC2\\uDECE-\\uDEDB\\uDEE0-\\uDEE8]|\\uDD3C(?:\\u200D[\\u2640\\u2642]\\uFE0F?|\\uD83C[\\uDFFB-\\uDFFF])?|\\uDDD1(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83E\\uDDD1))|\\uD83C(?:\\uDFFB(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFC-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?|\\uDFFC(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB\\uDFFD-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?|\\uDFFD(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?|\\uDFFE(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFD\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?|\\uDFFF(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFE]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF])))?))?|\\uDEF1(?:\\uD83C(?:\\uDFFB(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFC-\\uDFFF])?|\\uDFFC(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])?|\\uDFFD(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])?|\\uDFFE(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])?|\\uDFFF(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB-\\uDFFE])?))?)/g;var zn={eastAsianWidth(e){var r=e.charCodeAt(0),n=e.length==2?e.charCodeAt(1):0,t=r;return 55296<=r&&r<=56319&&56320<=n&&n<=57343&&(r&=1023,n&=1023,t=r<<10|n,t+=65536),t==12288||65281<=t&&t<=65376||65504<=t&&t<=65510?\"F\":4352<=t&&t<=4447||4515<=t&&t<=4519||4602<=t&&t<=4607||9001<=t&&t<=9002||11904<=t&&t<=11929||11931<=t&&t<=12019||12032<=t&&t<=12245||12272<=t&&t<=12283||12289<=t&&t<=12350||12353<=t&&t<=12438||12441<=t&&t<=12543||12549<=t&&t<=12589||12593<=t&&t<=12686||12688<=t&&t<=12730||12736<=t&&t<=12771||12784<=t&&t<=12830||12832<=t&&t<=12871||12880<=t&&t<=13054||13056<=t&&t<=19903||19968<=t&&t<=42124||42128<=t&&t<=42182||43360<=t&&t<=43388||44032<=t&&t<=55203||55216<=t&&t<=55238||55243<=t&&t<=55291||63744<=t&&t<=64255||65040<=t&&t<=65049||65072<=t&&t<=65106||65108<=t&&t<=65126||65128<=t&&t<=65131||110592<=t&&t<=110593||127488<=t&&t<=127490||127504<=t&&t<=127546||127552<=t&&t<=127560||127568<=t&&t<=127569||131072<=t&&t<=194367||177984<=t&&t<=196605||196608<=t&&t<=262141?\"W\":\"N\"}};var fl=/[^\\x20-\\x7F]/;function Dl(e){if(!e)return 0;if(!fl.test(e))return e.length;e=e.replace(Rn(),\"  \");let r=0;for(let n of e){let t=n.codePointAt(0);if(t<=31||t>=127&&t<=159||t>=768&&t<=879)continue;let a=zn.eastAsianWidth(n);r+=a===\"F\"||a===\"W\"?2:1}return r}var Xe=Dl;var Ar=\"'\",Mn='\"';function pl(e,r){let n=r===!0||r===Ar?Ar:Mn,t=n===Ar?Mn:Ar,a=0,i=0;for(let u of e)u===n?a++:u===t&&i++;return a>i?t:n}var Un=pl;var ue=\"string\",X=\"array\",ve=\"cursor\",Q=\"indent\",Z=\"align\",ae=\"trim\",G=\"group\",H=\"fill\",W=\"if-break\",oe=\"indent-if-break\",se=\"line-suffix\",ce=\"line-suffix-boundary\",$=\"line\",le=\"label\",ee=\"break-parent\",Br=new Set([ve,Q,Z,ae,G,H,W,oe,se,ce,$,le,ee]);function dl(e){if(typeof e==\"string\")return ue;if(Array.isArray(e))return X;if(!e)return;let{type:r}=e;if(Br.has(r))return r}var fe=dl;var hl=e=>new Intl.ListFormat(\"en-US\",{type:\"disjunction\"}).format(e);function ml(e){let r=e===null?\"null\":typeof e;if(r!==\"string\"&&r!==\"object\")return`Unexpected doc '${r}', \nExpected it to be 'string' or 'object'.`;if(fe(e))throw new Error(\"doc is valid.\");let n=Object.prototype.toString.call(e);if(n!==\"[object Object]\")return`Unexpected doc '${n}'.`;let t=hl([...Br].map(a=>`'${a}'`));return`Unexpected doc.type '${e.type}'.\nExpected it to be ${t}.`}var ft=class extends Error{name=\"InvalidDocError\";constructor(r){super(ml(r)),this.doc=r}},Ae=ft;var Yn={};function gl(e,r,n,t){let a=[e];for(;a.length>0;){let i=a.pop();if(i===Yn){n(a.pop());continue}n&&a.push(i,Yn);let u=fe(i);if(!u)throw new Ae(i);if((r==null?void 0:r(i))!==!1)switch(u){case X:case H:{let o=u===X?i:i.parts;for(let s=o.length,l=s-1;l>=0;--l)a.push(o[l]);break}case W:a.push(i.flatContents,i.breakContents);break;case G:if(t&&i.expandedStates)for(let o=i.expandedStates.length,s=o-1;s>=0;--s)a.push(i.expandedStates[s]);else a.push(i.contents);break;case Z:case Q:case oe:case le:case se:a.push(i.contents);break;case ue:case ve:case ae:case ce:case $:case ee:break;default:throw new Ae(i)}}}var Vn=gl;var jn=()=>{},Be=jn,qr=jn;function Qe(e){return Be(e),{type:Q,contents:e}}function Fe(e,r){return Be(r),{type:Z,contents:r,n:e}}function Ze(e,r={}){return Be(e),qr(r.expandedStates,!0),{type:G,id:r.id,contents:e,break:!!r.shouldBreak,expandedStates:r.expandedStates}}function qe(e){return Fe({type:\"root\"},e)}function Tr(e){return qr(e),{type:H,parts:e}}function $n(e,r=\"\",n={}){return Be(e),r!==\"\"&&Be(r),{type:W,breakContents:e,flatContents:r,groupId:n.groupId}}var er={type:ee};var Ne={type:$,hard:!0},vl={type:$,hard:!0,literal:!0},Sr={type:$},rr={type:$,soft:!0},O=[Ne,er],tr=[vl,er];function nr(e,r){Be(e),qr(r);let n=[];for(let t=0;t<r.length;t++)t!==0&&n.push(e),n.push(r[t]);return n}var Wn=e=>{if(Array.isArray(e))return e;if(e.type!==H)throw new Error(`Expect doc to be 'array' or '${H}'.`);return e.parts};function Kn(e,r){if(typeof e==\"string\")return r(e);let n=new Map;return t(e);function t(i){if(n.has(i))return n.get(i);let u=a(i);return n.set(i,u),u}function a(i){switch(fe(i)){case X:return r(i.map(t));case H:return r({...i,parts:i.parts.map(t)});case W:return r({...i,breakContents:t(i.breakContents),flatContents:t(i.flatContents)});case G:{let{expandedStates:u,contents:o}=i;return u?(u=u.map(t),o=u[0]):o=t(o),r({...i,contents:o,expandedStates:u})}case Z:case Q:case oe:case le:case se:return r({...i,contents:t(i.contents)});case ue:case ve:case ae:case ce:case $:case ee:return r(i);default:throw new Ae(i)}}}function Gn(e){if(e.length>0){let r=U(!1,e,-1);!r.expandedStates&&!r.break&&(r.break=\"propagated\")}return null}function Jn(e){let r=new Set,n=[];function t(i){if(i.type===ee&&Gn(n),i.type===G){if(n.push(i),r.has(i))return!1;r.add(i)}}function a(i){i.type===G&&n.pop().break&&Gn(n)}Vn(e,t,a,!0)}function Hn(e){let r=[],n=e.filter(Boolean);for(;n.length>0;){let t=n.shift();if(t){if(Array.isArray(t)){n.unshift(...t);continue}if(r.length>0&&typeof U(!1,r,-1)==\"string\"&&typeof t==\"string\"){r[r.length-1]+=t;continue}r.push(t)}}return r}function Xn(e){return Kn(e,r=>Array.isArray(r)?Hn(r):r.parts?{...r,parts:Hn(r.parts)}:r)}function Ee(e,r=tr){return Kn(e,n=>typeof n==\"string\"?nr(r,n.split(`\n`)):n)}function Qn(e){switch(e){case\"cr\":return\"\\r\";case\"crlf\":return`\\r\n`;default:return`\n`}}var V=Symbol(\"MODE_BREAK\"),re=Symbol(\"MODE_FLAT\"),ir=Symbol(\"cursor\");function Zn(){return{value:\"\",length:0,queue:[]}}function Fl(e,r){return Dt(e,{type:\"indent\"},r)}function El(e,r,n){return r===Number.NEGATIVE_INFINITY?e.root||Zn():r<0?Dt(e,{type:\"dedent\"},n):r?r.type===\"root\"?{...e,root:e}:Dt(e,{type:typeof r==\"string\"?\"stringAlign\":\"numberAlign\",n:r},n):e}function Dt(e,r,n){let t=r.type===\"dedent\"?e.queue.slice(0,-1):[...e.queue,r],a=\"\",i=0,u=0,o=0;for(let p of t)switch(p.type){case\"indent\":c(),n.useTabs?s(1):l(n.tabWidth);break;case\"stringAlign\":c(),a+=p.n,i+=p.n.length;break;case\"numberAlign\":u+=1,o+=p.n;break;default:throw new Error(`Unexpected type '${p.type}'`)}return D(),{...e,value:a,length:i,queue:t};function s(p){a+=\"\t\".repeat(p),i+=n.tabWidth*p}function l(p){a+=\" \".repeat(p),i+=p}function c(){n.useTabs?f():D()}function f(){u>0&&s(u),h()}function D(){o>0&&l(o),h()}function h(){u=0,o=0}}function pt(e){let r=0,n=0,t=e.length;e:for(;t--;){let a=e[t];if(a===ir){n++;continue}for(let i=a.length-1;i>=0;i--){let u=a[i];if(u===\" \"||u===\"\t\")r++;else{e[t]=a.slice(0,i+1);break e}}}if(r>0||n>0)for(e.length=t+1;n-- >0;)e.push(ir);return r}function Pr(e,r,n,t,a,i){if(n===Number.POSITIVE_INFINITY)return!0;let u=r.length,o=[e],s=[];for(;n>=0;){if(o.length===0){if(u===0)return!0;o.push(r[--u]);continue}let{mode:l,doc:c}=o.pop();switch(fe(c)){case ue:s.push(c),n-=Xe(c);break;case X:case H:{let f=Wn(c);for(let D=f.length-1;D>=0;D--)o.push({mode:l,doc:f[D]});break}case Q:case Z:case oe:case le:o.push({mode:l,doc:c.contents});break;case ae:n+=pt(s);break;case G:{if(i&&c.break)return!1;let f=c.break?V:l,D=c.expandedStates&&f===V?U(!1,c.expandedStates,-1):c.contents;o.push({mode:f,doc:D});break}case W:{let D=(c.groupId?a[c.groupId]||re:l)===V?c.breakContents:c.flatContents;D&&o.push({mode:l,doc:D});break}case $:if(l===V||c.hard)return!0;c.soft||(s.push(\" \"),n--);break;case se:t=!0;break;case ce:if(t)return!1;break}}return!1}function ei(e,r){let n={},t=r.printWidth,a=Qn(r.endOfLine),i=0,u=[{ind:Zn(),mode:V,doc:e}],o=[],s=!1,l=[],c=0;for(Jn(e);u.length>0;){let{ind:D,mode:h,doc:p}=u.pop();switch(fe(p)){case ue:{let d=a!==`\n`?R(!1,p,`\n`,a):p;o.push(d),u.length>0&&(i+=Xe(d));break}case X:for(let d=p.length-1;d>=0;d--)u.push({ind:D,mode:h,doc:p[d]});break;case ve:if(c>=2)throw new Error(\"There are too many 'cursor' in doc.\");o.push(ir),c++;break;case Q:u.push({ind:Fl(D,r),mode:h,doc:p.contents});break;case Z:u.push({ind:El(D,p.n,r),mode:h,doc:p.contents});break;case ae:i-=pt(o);break;case G:switch(h){case re:if(!s){u.push({ind:D,mode:p.break?V:re,doc:p.contents});break}case V:{s=!1;let d={ind:D,mode:re,doc:p.contents},m=t-i,g=l.length>0;if(!p.break&&Pr(d,u,m,g,n))u.push(d);else if(p.expandedStates){let x=U(!1,p.expandedStates,-1);if(p.break){u.push({ind:D,mode:V,doc:x});break}else for(let F=1;F<p.expandedStates.length+1;F++)if(F>=p.expandedStates.length){u.push({ind:D,mode:V,doc:x});break}else{let B=p.expandedStates[F],b={ind:D,mode:re,doc:B};if(Pr(b,u,m,g,n)){u.push(b);break}}}else u.push({ind:D,mode:V,doc:p.contents});break}}p.id&&(n[p.id]=U(!1,u,-1).mode);break;case H:{let d=t-i,{parts:m}=p;if(m.length===0)break;let[g,x]=m,F={ind:D,mode:re,doc:g},B={ind:D,mode:V,doc:g},b=Pr(F,[],d,l.length>0,n,!0);if(m.length===1){b?u.push(F):u.push(B);break}let v={ind:D,mode:re,doc:x},y={ind:D,mode:V,doc:x};if(m.length===2){b?u.push(v,F):u.push(y,B);break}m.splice(0,2);let k={ind:D,mode:h,doc:Tr(m)},E=m[0];Pr({ind:D,mode:re,doc:[g,x,E]},[],d,l.length>0,n,!0)?u.push(k,v,F):b?u.push(k,y,F):u.push(k,y,B);break}case W:case oe:{let d=p.groupId?n[p.groupId]:h;if(d===V){let m=p.type===W?p.breakContents:p.negate?p.contents:Qe(p.contents);m&&u.push({ind:D,mode:h,doc:m})}if(d===re){let m=p.type===W?p.flatContents:p.negate?Qe(p.contents):p.contents;m&&u.push({ind:D,mode:h,doc:m})}break}case se:l.push({ind:D,mode:h,doc:p.contents});break;case ce:l.length>0&&u.push({ind:D,mode:h,doc:Ne});break;case $:switch(h){case re:if(p.hard)s=!0;else{p.soft||(o.push(\" \"),i+=1);break}case V:if(l.length>0){u.push({ind:D,mode:h,doc:p},...l.reverse()),l.length=0;break}p.literal?D.root?(o.push(a,D.root.value),i=D.root.length):(o.push(a),i=0):(i-=pt(o),o.push(a+D.value),i=D.length);break}break;case le:u.push({ind:D,mode:h,doc:p.contents});break;case ee:break;default:throw new Ae(p)}u.length===0&&l.length>0&&(u.push(...l.reverse()),l.length=0)}let f=o.indexOf(ir);if(f!==-1){let D=o.indexOf(ir,f+1),h=o.slice(0,f).join(\"\"),p=o.slice(f+1,D).join(\"\"),d=o.slice(D+1).join(\"\");return{formatted:h+p+d,cursorNodeStart:h.length,cursorNodeText:p}}return{formatted:o.join(\"\")}}var dt=class extends Error{name=\"UnexpectedNodeError\";constructor(r,n,t=\"type\"){super(`Unexpected ${n} node ${t}: ${JSON.stringify(r[t])}.`),this.node=r}},ri=dt;async function Cl(e,r){if(e.lang===\"yaml\"){let n=e.value.trim(),t=n?await r(n,{parser:\"yaml\"}):\"\";return qe([e.startDelimiter,O,t,t?O:\"\",e.endDelimiter])}}var ti=Cl;var bl=e=>e.split(/[/\\\\]/).pop();function ni(e,r){if(!r)return;let n=bl(r).toLowerCase();return e.find(t=>{var a,i;return((a=t.extensions)==null?void 0:a.some(u=>n.endsWith(u)))||((i=t.filenames)==null?void 0:i.some(u=>u.toLowerCase()===n))})}function xl(e,r){if(r)return e.find(({name:n})=>n.toLowerCase()===r)??e.find(({aliases:n})=>n==null?void 0:n.includes(r))??e.find(({extensions:n})=>n==null?void 0:n.includes(`.${r}`))}function yl(e,r){let n=e.plugins.flatMap(a=>a.languages??[]),t=xl(n,r.language)??ni(n,r.physicalFile)??ni(n,r.file)??(r.physicalFile,void 0);return t==null?void 0:t.parsers[0]}var ii=yl;var kl=new Proxy(()=>{},{get:()=>kl});function Te(e){return e.position.start.offset}function Se(e){return e.position.end.offset}var ui=\"(?:[\\\\u02ea-\\\\u02eb\\\\u1100-\\\\u11ff\\\\u2e80-\\\\u2e99\\\\u2e9b-\\\\u2ef3\\\\u2f00-\\\\u2fd5\\\\u2ff0-\\\\u303f\\\\u3041-\\\\u3096\\\\u3099-\\\\u309f\\\\u30a1-\\\\u30fa\\\\u30fc-\\\\u30ff\\\\u3105-\\\\u312f\\\\u3131-\\\\u318e\\\\u3190-\\\\u3191\\\\u3196-\\\\u31e3\\\\u31f0-\\\\u321e\\\\u322a-\\\\u3247\\\\u3260-\\\\u327e\\\\u328a-\\\\u32b0\\\\u32c0-\\\\u32cb\\\\u32d0-\\\\u3370\\\\u337b-\\\\u337f\\\\u33e0-\\\\u33fe\\\\u3400-\\\\u4dbf\\\\u4e00-\\\\u9fff\\\\ua700-\\\\ua707\\\\ua960-\\\\ua97c\\\\uac00-\\\\ud7a3\\\\ud7b0-\\\\ud7c6\\\\ud7cb-\\\\ud7fb\\\\uf900-\\\\ufa6d\\\\ufa70-\\\\ufad9\\\\ufe10-\\\\ufe1f\\\\ufe30-\\\\ufe6f\\\\uff00-\\\\uffef]|[\\\\ud840-\\\\ud868\\\\ud86a-\\\\ud86c\\\\ud86f-\\\\ud872\\\\ud874-\\\\ud879\\\\ud880-\\\\ud883\\\\ud885-\\\\ud887][\\\\udc00-\\\\udfff]|\\\\ud81b[\\\\udfe3]|\\\\ud82b[\\\\udff0-\\\\udff3\\\\udff5-\\\\udffb\\\\udffd-\\\\udffe]|\\\\ud82c[\\\\udc00-\\\\udd22\\\\udd32\\\\udd50-\\\\udd52\\\\udd55\\\\udd64-\\\\udd67]|\\\\ud83c[\\\\ude00\\\\ude50-\\\\ude51]|\\\\ud869[\\\\udc00-\\\\udedf\\\\udf00-\\\\udfff]|\\\\ud86d[\\\\udc00-\\\\udf39\\\\udf40-\\\\udfff]|\\\\ud86e[\\\\udc00-\\\\udc1d\\\\udc20-\\\\udfff]|\\\\ud873[\\\\udc00-\\\\udea1\\\\udeb0-\\\\udfff]|\\\\ud87a[\\\\udc00-\\\\udfe0]|\\\\ud87e[\\\\udc00-\\\\ude1d]|\\\\ud884[\\\\udc00-\\\\udf4a\\\\udf50-\\\\udfff]|\\\\ud888[\\\\udc00-\\\\udfaf])(?:[\\\\ufe00-\\\\ufe0f]|\\\\udb40[\\\\udd00-\\\\uddef])?\",ai=new RegExp(\"[\\\\u1100-\\\\u11ff\\\\u3001-\\\\u3003\\\\u3008-\\\\u3011\\\\u3013-\\\\u301f\\\\u302e-\\\\u3030\\\\u3037\\\\u30fb\\\\u3131-\\\\u318e\\\\u3200-\\\\u321e\\\\u3260-\\\\u327e\\\\ua960-\\\\ua97c\\\\uac00-\\\\ud7a3\\\\ud7b0-\\\\ud7c6\\\\ud7cb-\\\\ud7fb\\\\ufe45-\\\\ufe46\\\\uff61-\\\\uff65\\\\uffa0-\\\\uffbe\\\\uffc2-\\\\uffc7\\\\uffca-\\\\uffcf\\\\uffd2-\\\\uffd7\\\\uffda-\\\\uffdc]\",\"\"),ur=\"[\\\\u0021-\\\\u002f\\\\u003a-\\\\u0040\\\\u005b-\\\\u0060\\\\u007b-\\\\u007e\\\\u00a1\\\\u00a7\\\\u00ab\\\\u00b6-\\\\u00b7\\\\u00bb\\\\u00bf\\\\u037e\\\\u0387\\\\u055a-\\\\u055f\\\\u0589-\\\\u058a\\\\u05be\\\\u05c0\\\\u05c3\\\\u05c6\\\\u05f3-\\\\u05f4\\\\u0609-\\\\u060a\\\\u060c-\\\\u060d\\\\u061b\\\\u061d-\\\\u061f\\\\u066a-\\\\u066d\\\\u06d4\\\\u0700-\\\\u070d\\\\u07f7-\\\\u07f9\\\\u0830-\\\\u083e\\\\u085e\\\\u0964-\\\\u0965\\\\u0970\\\\u09fd\\\\u0a76\\\\u0af0\\\\u0c77\\\\u0c84\\\\u0df4\\\\u0e4f\\\\u0e5a-\\\\u0e5b\\\\u0f04-\\\\u0f12\\\\u0f14\\\\u0f3a-\\\\u0f3d\\\\u0f85\\\\u0fd0-\\\\u0fd4\\\\u0fd9-\\\\u0fda\\\\u104a-\\\\u104f\\\\u10fb\\\\u1360-\\\\u1368\\\\u1400\\\\u166e\\\\u169b-\\\\u169c\\\\u16eb-\\\\u16ed\\\\u1735-\\\\u1736\\\\u17d4-\\\\u17d6\\\\u17d8-\\\\u17da\\\\u1800-\\\\u180a\\\\u1944-\\\\u1945\\\\u1a1e-\\\\u1a1f\\\\u1aa0-\\\\u1aa6\\\\u1aa8-\\\\u1aad\\\\u1b5a-\\\\u1b60\\\\u1b7d-\\\\u1b7e\\\\u1bfc-\\\\u1bff\\\\u1c3b-\\\\u1c3f\\\\u1c7e-\\\\u1c7f\\\\u1cc0-\\\\u1cc7\\\\u1cd3\\\\u2010-\\\\u2027\\\\u2030-\\\\u2043\\\\u2045-\\\\u2051\\\\u2053-\\\\u205e\\\\u207d-\\\\u207e\\\\u208d-\\\\u208e\\\\u2308-\\\\u230b\\\\u2329-\\\\u232a\\\\u2768-\\\\u2775\\\\u27c5-\\\\u27c6\\\\u27e6-\\\\u27ef\\\\u2983-\\\\u2998\\\\u29d8-\\\\u29db\\\\u29fc-\\\\u29fd\\\\u2cf9-\\\\u2cfc\\\\u2cfe-\\\\u2cff\\\\u2d70\\\\u2e00-\\\\u2e2e\\\\u2e30-\\\\u2e4f\\\\u2e52-\\\\u2e5d\\\\u3001-\\\\u3003\\\\u3008-\\\\u3011\\\\u3014-\\\\u301f\\\\u3030\\\\u303d\\\\u30a0\\\\u30fb\\\\ua4fe-\\\\ua4ff\\\\ua60d-\\\\ua60f\\\\ua673\\\\ua67e\\\\ua6f2-\\\\ua6f7\\\\ua874-\\\\ua877\\\\ua8ce-\\\\ua8cf\\\\ua8f8-\\\\ua8fa\\\\ua8fc\\\\ua92e-\\\\ua92f\\\\ua95f\\\\ua9c1-\\\\ua9cd\\\\ua9de-\\\\ua9df\\\\uaa5c-\\\\uaa5f\\\\uaade-\\\\uaadf\\\\uaaf0-\\\\uaaf1\\\\uabeb\\\\ufd3e-\\\\ufd3f\\\\ufe10-\\\\ufe19\\\\ufe30-\\\\ufe52\\\\ufe54-\\\\ufe61\\\\ufe63\\\\ufe68\\\\ufe6a-\\\\ufe6b\\\\uff01-\\\\uff03\\\\uff05-\\\\uff0a\\\\uff0c-\\\\uff0f\\\\uff1a-\\\\uff1b\\\\uff1f-\\\\uff20\\\\uff3b-\\\\uff3d\\\\uff3f\\\\uff5b\\\\uff5d\\\\uff5f-\\\\uff65]|\\\\ud800[\\\\udd00-\\\\udd02\\\\udf9f\\\\udfd0]|\\\\ud801[\\\\udd6f]|\\\\ud802[\\\\udc57\\\\udd1f\\\\udd3f\\\\ude50-\\\\ude58\\\\ude7f\\\\udef0-\\\\udef6\\\\udf39-\\\\udf3f\\\\udf99-\\\\udf9c]|\\\\ud803[\\\\udead\\\\udf55-\\\\udf59\\\\udf86-\\\\udf89]|\\\\ud804[\\\\udc47-\\\\udc4d\\\\udcbb-\\\\udcbc\\\\udcbe-\\\\udcc1\\\\udd40-\\\\udd43\\\\udd74-\\\\udd75\\\\uddc5-\\\\uddc8\\\\uddcd\\\\udddb\\\\udddd-\\\\udddf\\\\ude38-\\\\ude3d\\\\udea9]|\\\\ud805[\\\\udc4b-\\\\udc4f\\\\udc5a-\\\\udc5b\\\\udc5d\\\\udcc6\\\\uddc1-\\\\uddd7\\\\ude41-\\\\ude43\\\\ude60-\\\\ude6c\\\\udeb9\\\\udf3c-\\\\udf3e]|\\\\ud806[\\\\udc3b\\\\udd44-\\\\udd46\\\\udde2\\\\ude3f-\\\\ude46\\\\ude9a-\\\\ude9c\\\\ude9e-\\\\udea2\\\\udf00-\\\\udf09]|\\\\ud807[\\\\udc41-\\\\udc45\\\\udc70-\\\\udc71\\\\udef7-\\\\udef8\\\\udf43-\\\\udf4f\\\\udfff]|\\\\ud809[\\\\udc70-\\\\udc74]|\\\\ud80b[\\\\udff1-\\\\udff2]|\\\\ud81a[\\\\ude6e-\\\\ude6f\\\\udef5\\\\udf37-\\\\udf3b\\\\udf44]|\\\\ud81b[\\\\ude97-\\\\ude9a\\\\udfe2]|\\\\ud82f[\\\\udc9f]|\\\\ud836[\\\\ude87-\\\\ude8b]|\\\\ud83a[\\\\udd5e-\\\\udd5f]\";var mt=new Set([\"liquidNode\",\"inlineCode\",\"emphasis\",\"esComment\",\"strong\",\"delete\",\"wikiLink\",\"link\",\"linkReference\",\"image\",\"imageReference\",\"footnote\",\"footnoteReference\",\"sentence\",\"whitespace\",\"word\",\"break\",\"inlineMath\"]),_r=new Set([...mt,\"tableCell\",\"paragraph\",\"heading\"]),ht=new RegExp(ur),Pe=\"non-cjk\",De=\"cj-letter\",Ce=\"k-letter\",ar=\"cjk-punctuation\";function Lr(e){let r=[],n=e.split(/([\\t\\n ]+)/);for(let[a,i]of n.entries()){if(a%2===1){r.push({type:\"whitespace\",value:/\\n/.test(i)?`\n`:\" \"});continue}if((a===0||a===n.length-1)&&i===\"\")continue;let u=i.split(new RegExp(`(${ui})`));for(let[o,s]of u.entries())if(!((o===0||o===u.length-1)&&s===\"\")){if(o%2===0){s!==\"\"&&t({type:\"word\",value:s,kind:Pe,hasLeadingPunctuation:ht.test(s[0]),hasTrailingPunctuation:ht.test(U(!1,s,-1))});continue}t(ht.test(s)?{type:\"word\",value:s,kind:ar,hasLeadingPunctuation:!0,hasTrailingPunctuation:!0}:{type:\"word\",value:s,kind:ai.test(s)?Ce:De,hasLeadingPunctuation:!1,hasTrailingPunctuation:!1})}}return r;function t(a){let i=U(!1,r,-1);(i==null?void 0:i.type)===\"word\"&&!u(Pe,ar)&&![i.value,a.value].some(o=>/\\u3000/.test(o))&&r.push({type:\"whitespace\",value:\"\"}),r.push(a);function u(o,s){return i.kind===o&&a.kind===s||i.kind===s&&a.kind===o}}}function Re(e,r){let[,n,t,a]=r.slice(e.position.start.offset,e.position.end.offset).match(/^\\s*(\\d+)(\\.|\\))(\\s*)/);return{numberText:n,marker:t,leadingSpaces:a}}function oi(e,r){if(!e.ordered||e.children.length<2)return!1;let n=Number(Re(e.children[0],r.originalText).numberText),t=Number(Re(e.children[1],r.originalText).numberText);if(n===0&&e.children.length>2){let a=Number(Re(e.children[2],r.originalText).numberText);return t===1&&a===1}return t===1}function Or(e,r){let{value:n}=e;return e.position.end.offset===r.length&&n.endsWith(`\n`)&&r.endsWith(`\n`)?n.slice(0,-1):n}function be(e,r){return function n(t,a,i){let u={...r(t,a,i)};return u.children&&(u.children=u.children.map((o,s)=>n(o,s,[u,...i]))),u}(e,null,[])}function gt(e){if((e==null?void 0:e.type)!==\"link\"||e.children.length!==1)return!1;let[r]=e.children;return Te(e)===Te(r)&&Se(e)===Se(r)}function wl(e,r){let{node:n}=e;if(n.type===\"code\"&&n.lang!==null){let t=ii(r,{language:n.lang});if(t)return async a=>{let i=r.__inJsTemplate?\"~\":\"`\",u=i.repeat(Math.max(3,wr(n.value,i)+1)),o={parser:t};n.lang===\"ts\"||n.lang===\"typescript\"?o.filepath=\"dummy.ts\":n.lang===\"tsx\"&&(o.filepath=\"dummy.tsx\");let s=await a(Or(n,r.originalText),o);return qe([u,n.lang,n.meta?\" \"+n.meta:\"\",O,Ee(s),O,u])}}switch(n.type){case\"front-matter\":return t=>ti(n,t);case\"import\":case\"export\":return t=>t(n.value,{parser:\"babel\"});case\"jsx\":return t=>t(`<$>${n.value}</$>`,{parser:\"__js_expression\",rootMarker:\"mdx\"})}return null}var si=wl;var Al=new RegExp(\"^(?<startDelimiter>-{3}|\\\\+{3})(?<language>[^\\\\n]*)\\\\n(?:|(?<value>.*?)\\\\n)(?<endDelimiter>\\\\k<startDelimiter>|\\\\.{3})[^\\\\S\\\\n]*(?:\\\\n|$)\",\"s\");function Bl(e){let r=e.match(Al);if(!r)return{content:e};let{startDelimiter:n,language:t,value:a=\"\",endDelimiter:i}=r.groups,u=t.trim()||\"yaml\";if(n===\"+++\"&&(u=\"toml\"),u!==\"yaml\"&&n!==i)return{content:e};let[o]=r;return{frontMatter:{type:\"front-matter\",lang:u,value:a,startDelimiter:n,endDelimiter:i,raw:o.replace(/\\n$/,\"\")},content:R(!1,o,/[^\\n]/g,\" \")+e.slice(o.length)}}var or=Bl;var ci=[\"format\",\"prettier\"];function vt(e){let r=`@(${ci.join(\"|\")})`,n=new RegExp([`<!--\\\\s*${r}\\\\s*-->`,`{\\\\s*\\\\/\\\\*\\\\s*${r}\\\\s*\\\\*\\\\/\\\\s*}`,`<!--.*\\r?\n[\\\\s\\\\S]*(^|\n)[^\\\\S\n]*${r}[^\\\\S\n]*($|\n)[\\\\s\\\\S]*\n.*-->`].join(\"|\"),\"m\"),t=e.match(n);return(t==null?void 0:t.index)===0}var li=e=>vt(or(e).content.trimStart()),fi=e=>{let r=or(e),n=`<!-- @${ci[0]} -->`;return r.frontMatter?`${r.frontMatter.raw}\n\n${n}\n\n${r.content}`:`${n}\n\n${r.content}`};var ql=/^.$/su;function Tl(e,r){return e=Sl(e,r),e=_l(e),e=Ol(e,r),e=Il(e,r),e=Ll(e),e}function Sl(e,r){return be(e,n=>n.type!==\"text\"||n.value===\"*\"||n.value===\"_\"||!ql.test(n.value)||n.position.end.offset-n.position.start.offset===n.value.length?n:{...n,value:r.originalText.slice(n.position.start.offset,n.position.end.offset)})}function Pl(e,r,n){return be(e,t=>{if(!t.children)return t;let a=t.children.reduce((i,u)=>{let o=U(!1,i,-1);return o&&r(o,u)?i.splice(-1,1,n(o,u)):i.push(u),i},[]);return{...t,children:a}})}function _l(e){return Pl(e,(r,n)=>r.type===\"text\"&&n.type===\"text\",(r,n)=>({type:\"text\",value:r.value+n.value,position:{start:r.position.start,end:n.position.end}}))}function Ll(e){return be(e,(r,n,[t])=>{if(r.type!==\"text\")return r;let{value:a}=r;return t.type===\"paragraph\"&&(n===0&&(a=a.trimStart()),n===t.children.length-1&&(a=a.trimEnd())),{type:\"sentence\",position:r.position,children:Lr(a)}})}function Ol(e,r){return be(e,(n,t,a)=>{if(n.type===\"code\"){let i=/^\\n?(?: {4,}|\\t)/.test(r.originalText.slice(n.position.start.offset,n.position.end.offset));if(n.isIndented=i,i)for(let u=0;u<a.length;u++){let o=a[u];if(o.hasIndentedCodeblock)break;o.type===\"list\"&&(o.hasIndentedCodeblock=!0)}}return n})}function Il(e,r){return be(e,(a,i,u)=>{if(a.type===\"list\"&&a.children.length>0){for(let o=0;o<u.length;o++){let s=u[o];if(s.type===\"list\"&&!s.isAligned)return a.isAligned=!1,a}a.isAligned=t(a)}return a});function n(a){return a.children.length===0?-1:a.children[0].position.start.column-1}function t(a){if(!a.ordered)return!0;let[i,u]=a.children;if(Re(i,r.originalText).leadingSpaces.length>1)return!0;let s=n(i);if(s===-1)return!1;if(a.children.length===1)return s%r.tabWidth===0;let l=n(u);return s!==l?!1:s%r.tabWidth===0?!0:Re(u,r.originalText).leadingSpaces.length>1}}var Di=Tl;var di=Ie(kr(),1);function Nl(e){return(e==null?void 0:e.type)===\"front-matter\"}var pi=Nl;var Rl=new Set([\"position\",\"raw\"]);function hi(e,r,n){if((e.type===\"front-matter\"||e.type===\"code\"||e.type===\"yaml\"||e.type===\"import\"||e.type===\"export\"||e.type===\"jsx\")&&delete r.value,e.type===\"list\"&&delete r.isAligned,(e.type===\"list\"||e.type===\"listItem\")&&delete r.spread,e.type===\"text\"||(e.type===\"inlineCode\"&&(r.value=R(!1,e.value,`\n`,\" \")),e.type===\"wikiLink\"&&(r.value=R(!1,e.value.trim(),/[\\t\\n]+/g,\" \")),(e.type===\"definition\"||e.type===\"linkReference\"||e.type===\"imageReference\")&&(r.label=(0,di.default)(e.label)),(e.type===\"definition\"||e.type===\"link\"||e.type===\"image\")&&e.title&&(r.title=R(!1,e.title,/\\\\(?=[\"')])/g,\"\")),(n==null?void 0:n.type)===\"root\"&&n.children.length>0&&(n.children[0]===e||pi(n.children[0])&&n.children[1]===e)&&e.type===\"html\"&&vt(e.value)))return null}hi.ignoredProperties=Rl;var mi=hi;var sr=null;function cr(e){if(sr!==null&&typeof sr.property){let r=sr;return sr=cr.prototype=null,r}return sr=cr.prototype=e??Object.create(null),new cr}var zl=10;for(let e=0;e<=zl;e++)cr();function Ft(e){return cr(e)}function Ml(e,r=\"type\"){Ft(e);function n(t){let a=t[r],i=e[a];if(!Array.isArray(i))throw Object.assign(new Error(`Missing visitor keys for '${a}'.`),{node:t});return i}return n}var gi=Ml;var Ul={\"front-matter\":[],root:[\"children\"],paragraph:[\"children\"],sentence:[\"children\"],word:[],whitespace:[],emphasis:[\"children\"],strong:[\"children\"],delete:[\"children\"],inlineCode:[],wikiLink:[],link:[\"children\"],image:[],blockquote:[\"children\"],heading:[\"children\"],code:[],html:[],list:[\"children\"],thematicBreak:[],linkReference:[\"children\"],imageReference:[],definition:[],footnote:[\"children\"],footnoteReference:[],footnoteDefinition:[\"children\"],table:[\"children\"],tableCell:[\"children\"],break:[],liquidNode:[],import:[],export:[],esComment:[],jsx:[],math:[],inlineMath:[],tableRow:[\"children\"],listItem:[\"children\"],text:[]},vi=Ul;var Yl=gi(vi),Fi=Yl;var Vl=new Set([\"heading\",\"tableCell\",\"link\",\"wikiLink\"]),jl=new Set(`$(\\xA3\\xA5\\xB7'\"\\u3008\\u300A\\u300C\\u300E\\u3010\\u3014\\u3016\\u301D\\uFE59\\uFE5B\\uFF04\\uFF08\\uFF3B\\uFF5B\\uFFE1\\uFFE5[{\\u2035\\uFE34\\uFE35\\uFE37\\uFE39\\uFE3B\\uFE3D\\uFE3F\\uFE41\\uFE43\\uFE4F\\u3018\\uFF5F\\xAB`),$l=new Set(`!%),.:;?]}\\xA2\\xB0\\xB7'\"\\u2020\\u2021\\u203A\\u2103\\u2236\\u3001\\u3002\\u3003\\u3006\\u3015\\u3017\\u301E\\uFE5A\\uFE5C\\uFF01\\uFF02\\uFF05\\uFF07\\uFF09\\uFF0C\\uFF0E\\uFF1A\\uFF1B\\uFF1F\\uFF3D\\uFF5D\\uFF5E\\u2013\\u2014\\u2022\\u3009\\u300B\\u300D\\uFE30\\uFE31\\uFE32\\uFE33\\uFE50\\uFE51\\uFE52\\uFE53\\uFE54\\uFE55\\uFE56\\uFE58\\uFE36\\uFE38\\uFE3A\\uFE3C\\uFE3E\\uFE40\\uFE42\\uFE57\\uFF5C\\uFF64\\u300F\\u3011\\u3019\\u301F\\uFF60\\xBB\\u30FD\\u30FE\\u30FC\\u30A1\\u30A3\\u30A5\\u30A7\\u30A9\\u30C3\\u30E3\\u30E5\\u30E7\\u30EE\\u30F5\\u30F6\\u3041\\u3043\\u3045\\u3047\\u3049\\u3063\\u3083\\u3085\\u3087\\u308E\\u3095\\u3096\\u31F0\\u31F1\\u31F2\\u31F3\\u31F4\\u31F5\\u31F6\\u31F7\\u31F8\\u31F9\\u31FA\\u31FB\\u31FC\\u31FD\\u31FE\\u31FF\\u3005\\u303B\\u2010\\u30A0\\u301C\\uFF5E\\u203C\\u2047\\u2048\\u2049\\u30FB`),Ei=new Set(\"!\\\"#$%&'()*+,-./:;<=>?@[\\\\]^_`{|}~\");function Gl({parent:e}){if(e.usesCJSpaces===void 0){let r={\" \":0,\"\":0},{children:n}=e;for(let t=1;t<n.length-1;++t){let a=n[t];if(a.type===\"whitespace\"&&(a.value===\" \"||a.value===\"\")){let i=n[t-1].kind,u=n[t+1].kind;(i===De&&u===Pe||i===Pe&&u===De)&&++r[a.value]}}e.usesCJSpaces=r[\" \"]>r[\"\"]}return e.usesCJSpaces}function Hl(e,r){if(r)return!0;let{previous:n,next:t}=e;if(!n||!t)return!0;let a=n.kind,i=t.kind;return bi(a)&&bi(i)||a===Ce&&i===De||i===Ce&&a===De?!0:a===ar||i===ar||a===De&&i===De?!1:Ei.has(t.value[0])||Ei.has(U(!1,n.value,-1))?!0:n.hasTrailingPunctuation||t.hasLeadingPunctuation?!1:Gl(e)}function Ci(e){return e===Pe||e===De||e===Ce}function bi(e){return e===Pe||e===Ce}function Wl(e,r,n,t,a){if(n!==\"always\"||e.hasAncestor(s=>Vl.has(s.type)))return!1;if(t)return r!==\"\";if(r===\" \")return!0;let{previous:i,next:u}=e;return!(r===\"\"&&((i==null?void 0:i.kind)===Ce&&Ci(u==null?void 0:u.kind)||(u==null?void 0:u.kind)===Ce&&Ci(i==null?void 0:i.kind))||!a&&(u&&$l.has(u.value[0])||i&&jl.has(U(!1,i.value,-1))))}function Et(e,r,n,t){if(n===\"preserve\"&&r===`\n`)return O;let a=r===\" \"||r===`\n`&&Hl(e,t);return Wl(e,r,n,t,a)?a?Sr:rr:a?\" \":\"\"}var Kl=new Set([\"listItem\",\"definition\",\"footnoteDefinition\"]);function Jl(e,r,n){var a,i,u;let{node:t}=e;if(nf(e))return Lr(r.originalText.slice(t.position.start.offset,t.position.end.offset)).map(o=>o.type===\"word\"?o.value:Et(e,o.value,r.proseWrap,!0));switch(t.type){case\"front-matter\":return r.originalText.slice(t.position.start.offset,t.position.end.offset);case\"root\":return t.children.length===0?\"\":[Xn(ef(e,r,n)),O];case\"paragraph\":return Y(e,r,n,{postprocessor:Tr});case\"sentence\":return Y(e,r,n);case\"word\":{let o=R(!1,R(!1,t.value,\"*\",\"\\\\*\"),new RegExp([`(^|${ur})(_+)`,`(_+)(${ur}|$)`].join(\"|\"),\"g\"),(c,f,D,h,p)=>R(!1,D?`${f}${D}`:`${h}${p}`,\"_\",\"\\\\_\")),s=(c,f,D)=>c.type===\"sentence\"&&D===0,l=(c,f,D)=>gt(c.children[D-1]);return o!==t.value&&(e.match(void 0,s,l)||e.match(void 0,s,(c,f,D)=>c.type===\"emphasis\"&&D===0,l))&&(o=o.replace(/^(\\\\?[*_])+/,c=>R(!1,c,\"\\\\\",\"\"))),o}case\"whitespace\":{let{next:o}=e,s=o&&/^>|^(?:[*+-]|#{1,6}|\\d+[).])$/.test(o.value)?\"never\":r.proseWrap;return Et(e,t.value,s)}case\"emphasis\":{let o;if(gt(t.children[0]))o=r.originalText[t.position.start.offset];else{let{previous:s,next:l}=e;o=(s==null?void 0:s.type)===\"sentence\"&&((a=U(!1,s.children,-1))==null?void 0:a.type)===\"word\"&&!U(!1,s.children,-1).hasTrailingPunctuation||(l==null?void 0:l.type)===\"sentence\"&&((i=l.children[0])==null?void 0:i.type)===\"word\"&&!l.children[0].hasLeadingPunctuation||e.hasAncestor(f=>f.type===\"emphasis\")?\"*\":\"_\"}return[o,Y(e,r,n),o]}case\"strong\":return[\"**\",Y(e,r,n),\"**\"];case\"delete\":return[\"~~\",Y(e,r,n),\"~~\"];case\"inlineCode\":{let o=r.proseWrap===\"preserve\"?t.value:R(!1,t.value,`\n`,\" \"),s=Nn(o,\"`\"),l=\"`\".repeat(s||1),c=o.startsWith(\"`\")||o.endsWith(\"`\")||/^[\\n ]/.test(o)&&/[\\n ]$/.test(o)&&/[^\\n ]/.test(o)?\" \":\"\";return[l,c,o,c,l]}case\"wikiLink\":{let o=\"\";return r.proseWrap===\"preserve\"?o=t.value:o=R(!1,t.value,/[\\t\\n]+/g,\" \"),[\"[[\",o,\"]]\"]}case\"link\":switch(r.originalText[t.position.start.offset]){case\"<\":{let o=\"mailto:\";return[\"<\",t.url.startsWith(o)&&r.originalText.slice(t.position.start.offset+1,t.position.start.offset+1+o.length)!==o?t.url.slice(o.length):t.url,\">\"]}case\"[\":return[\"[\",Y(e,r,n),\"](\",Ct(t.url,\")\"),Ir(t.title,r),\")\"];default:return r.originalText.slice(t.position.start.offset,t.position.end.offset)}case\"image\":return[\"![\",t.alt||\"\",\"](\",Ct(t.url,\")\"),Ir(t.title,r),\")\"];case\"blockquote\":return[\"> \",Fe(\"> \",Y(e,r,n))];case\"heading\":return[\"#\".repeat(t.depth)+\" \",Y(e,r,n)];case\"code\":{if(t.isIndented){let l=\" \".repeat(4);return Fe(l,[l,Ee(t.value,O)])}let o=r.__inJsTemplate?\"~\":\"`\",s=o.repeat(Math.max(3,wr(t.value,o)+1));return[s,t.lang||\"\",t.meta?\" \"+t.meta:\"\",O,Ee(Or(t,r.originalText),O),O,s]}case\"html\":{let{parent:o,isLast:s}=e,l=o.type===\"root\"&&s?t.value.trimEnd():t.value,c=/^<!--.*-->$/s.test(l);return Ee(l,c?O:qe(tr))}case\"list\":{let o=yi(t,e.parent),s=oi(t,r);return Y(e,r,n,{processor(l){let c=D(),f=l.node;if(f.children.length===2&&f.children[1].type===\"html\"&&f.children[0].position.start.column!==f.children[1].position.start.column)return[c,xi(l,r,n,c)];return[c,Fe(\" \".repeat(c.length),xi(l,r,n,c))];function D(){let h=t.ordered?(l.isFirst?t.start:s?1:t.start+l.index)+(o%2===0?\". \":\") \"):o%2===0?\"- \":\"* \";return t.isAligned||t.hasIndentedCodeblock?Xl(h,r):h}}})}case\"thematicBreak\":{let{ancestors:o}=e,s=o.findIndex(c=>c.type===\"list\");return s===-1?\"---\":yi(o[s],o[s+1])%2===0?\"***\":\"---\"}case\"linkReference\":return[\"[\",Y(e,r,n),\"]\",t.referenceType===\"full\"?bt(t):t.referenceType===\"collapsed\"?\"[]\":\"\"];case\"imageReference\":switch(t.referenceType){case\"full\":return[\"![\",t.alt||\"\",\"]\",bt(t)];default:return[\"![\",t.alt,\"]\",t.referenceType===\"collapsed\"?\"[]\":\"\"]}case\"definition\":{let o=r.proseWrap===\"always\"?Sr:\" \";return Ze([bt(t),\":\",Qe([o,Ct(t.url),t.title===null?\"\":[o,Ir(t.title,r,!1)]])])}case\"footnote\":return[\"[^\",Y(e,r,n),\"]\"];case\"footnoteReference\":return Bi(t);case\"footnoteDefinition\":{let o=t.children.length===1&&t.children[0].type===\"paragraph\"&&(r.proseWrap===\"never\"||r.proseWrap===\"preserve\"&&t.children[0].position.start.line===t.children[0].position.end.line);return[Bi(t),\": \",o?Y(e,r,n):Ze([Fe(\" \".repeat(4),Y(e,r,n,{processor:({isFirst:s})=>s?Ze([rr,n()]):n()})),((u=e.next)==null?void 0:u.type)===\"footnoteDefinition\"?rr:\"\"])]}case\"table\":return Zl(e,r,n);case\"tableCell\":return Y(e,r,n);case\"break\":return/\\s/.test(r.originalText[t.position.start.offset])?[\"  \",qe(tr)]:[\"\\\\\",O];case\"liquidNode\":return Ee(t.value,O);case\"import\":case\"export\":case\"jsx\":return t.value;case\"esComment\":return[\"{/* \",t.value,\" */}\"];case\"math\":return[\"$$\",O,t.value?[Ee(t.value,O),O]:\"\",\"$$\"];case\"inlineMath\":return r.originalText.slice(Te(t),Se(t));case\"tableRow\":case\"listItem\":case\"text\":default:throw new ri(t,\"Markdown\")}}function xi(e,r,n,t){let{node:a}=e,i=a.checked===null?\"\":a.checked?\"[x] \":\"[ ] \";return[i,Y(e,r,n,{processor({node:u,isFirst:o}){if(o&&u.type!==\"list\")return Fe(\" \".repeat(i.length),n());let s=\" \".repeat(uf(r.tabWidth-t.length,0,3));return[s,Fe(s,n())]}})]}function Xl(e,r){let n=t();return e+\" \".repeat(n>=4?0:n);function t(){let a=e.length%r.tabWidth;return a===0?0:r.tabWidth-a}}function yi(e,r){return Ql(e,r,n=>n.ordered===e.ordered)}function Ql(e,r,n){let t=-1;for(let a of r.children)if(a.type===e.type&&n(a)?t++:t=-1,a===e)return t}function Zl(e,r,n){let{node:t}=e,a=[],i=e.map(()=>e.map(({index:f})=>{let D=ei(n(),r).formatted,h=Xe(D);return a[f]=Math.max(a[f]||3,h),{text:D,width:h}},\"children\"),\"children\"),u=s(!1);if(r.proseWrap!==\"never\")return[er,u];let o=s(!0);return[er,Ze($n(o,u))];function s(f){let D=[c(i[0],f),l(f)];return i.length>1&&D.push(nr(Ne,i.slice(1).map(h=>c(h,f)))),nr(Ne,D)}function l(f){return`| ${a.map((h,p)=>{let d=t.align[p],m=d===\"center\"||d===\"left\"?\":\":\"-\",g=d===\"center\"||d===\"right\"?\":\":\"-\",x=f?\"-\":\"-\".repeat(h-2);return`${m}${x}${g}`}).join(\" | \")} |`}function c(f,D){return`| ${f.map(({text:p,width:d},m)=>{if(D)return p;let g=a[m]-d,x=t.align[m],F=0;x===\"right\"?F=g:x===\"center\"&&(F=Math.floor(g/2));let B=g-F;return`${\" \".repeat(F)}${p}${\" \".repeat(B)}`}).join(\" | \")} |`}}function ef(e,r,n){let t=[],a=null,{children:i}=e.node;for(let[u,o]of i.entries())switch(xt(o)){case\"start\":a===null&&(a={index:u,offset:o.position.end.offset});break;case\"end\":a!==null&&(t.push({start:a,end:{index:u,offset:o.position.start.offset}}),a=null);break;default:break}return Y(e,r,n,{processor({index:u}){if(t.length>0){let o=t[0];if(u===o.start.index)return[ki(i[o.start.index]),r.originalText.slice(o.start.offset,o.end.offset),ki(i[o.end.index])];if(o.start.index<u&&u<o.end.index)return!1;if(u===o.end.index)return t.shift(),!1}return n()}})}function Y(e,r,n,t={}){let{postprocessor:a=o=>o,processor:i=()=>n()}=t,u=[];return e.each(()=>{let o=i(e);o!==!1&&(u.length>0&&rf(e)&&(u.push(O),(tf(e,r)||Ai(e))&&u.push(O),Ai(e)&&u.push(O)),u.push(o))},\"children\"),a(u)}function ki(e){if(e.type===\"html\")return e.value;if(e.type===\"paragraph\"&&Array.isArray(e.children)&&e.children.length===1&&e.children[0].type===\"esComment\")return[\"{/* \",e.children[0].value,\" */}\"]}function xt(e){let r;if(e.type===\"html\")r=e.value.match(/^<!--\\s*prettier-ignore(?:-(start|end))?\\s*-->$/);else{let n;e.type===\"esComment\"?n=e:e.type===\"paragraph\"&&e.children.length===1&&e.children[0].type===\"esComment\"&&(n=e.children[0]),n&&(r=n.value.match(/^prettier-ignore(?:-(start|end))?$/))}return r?r[1]||\"next\":!1}function rf({node:e,parent:r}){let n=mt.has(e.type),t=e.type===\"html\"&&_r.has(r.type);return!n&&!t}function wi(e,r){return e.type===\"listItem\"&&(e.spread||r.originalText.charAt(e.position.end.offset-1)===`\n`)}function tf({node:e,previous:r,parent:n},t){if(wi(r,t))return!0;let u=r.type===e.type&&Kl.has(e.type),o=n.type===\"listItem\"&&!wi(n,t),s=xt(r)===\"next\",l=e.type===\"html\"&&r.type===\"html\"&&r.position.end.line+1===e.position.start.line,c=e.type===\"html\"&&n.type===\"listItem\"&&r.type===\"paragraph\"&&r.position.end.line+1===e.position.start.line;return!(u||o||s||l||c)}function Ai({node:e,previous:r}){let n=r.type===\"list\",t=e.type===\"code\"&&e.isIndented;return n&&t}function nf(e){let r=e.findAncestor(n=>n.type===\"linkReference\"||n.type===\"imageReference\");return r&&(r.type!==\"linkReference\"||r.referenceType!==\"full\")}function Ct(e,r=[]){let n=[\" \",...Array.isArray(r)?r:[r]];return new RegExp(n.map(t=>`\\\\${t}`).join(\"|\")).test(e)?`<${e}>`:e}function Ir(e,r,n=!0){if(!e)return\"\";if(n)return\" \"+Ir(e,r,!1);if(e=R(!1,e,/\\\\(?=[\"')])/g,\"\"),e.includes('\"')&&e.includes(\"'\")&&!e.includes(\")\"))return`(${e})`;let t=Un(e,r.singleQuote);return e=R(!1,e,\"\\\\\",\"\\\\\\\\\"),e=R(!1,e,t,`\\\\${t}`),`${t}${e}${t}`}function uf(e,r,n){return e<r?r:e>n?n:e}function af(e){return e.index>0&&xt(e.previous)===\"next\"}function bt(e){return`[${(0,qi.default)(e.label)}]`}function Bi(e){return`[^${e.label}]`}var of={preprocess:Di,print:Jl,embed:si,massageAstNode:mi,hasPrettierIgnore:af,insertPragma:fi,getVisitorKeys:Fi},Ti=of;var Pn={};On(Pn,{markdown:()=>xg,mdx:()=>yg,remark:()=>xg});var Gc=Ie(ks(),1),Hc=Ie(vc(),1),Wc=Ie(Pc(),1),Kc=Ie(Lc(),1);var hg=/^import\\s/,mg=/^export\\s/,Oc=\"[a-z][a-z0-9]*(\\\\.[a-z][a-z0-9]*)*|\",Ic=/<!---->|<!---?[^>-](?:-?[^-])*-->/,gg=/^{\\s*\\/\\*(.*)\\*\\/\\s*}/,vg=`\n\n`,Nc=e=>hg.test(e),Sn=e=>mg.test(e),Rc=(e,r)=>{let n=r.indexOf(vg),t=r.slice(0,n);if(Sn(t)||Nc(t))return e(t)({type:Sn(t)?\"export\":\"import\",value:t})},zc=(e,r)=>{let n=gg.exec(r);if(n)return e(n[0])({type:\"esComment\",value:n[1].trim()})};Rc.locator=e=>Sn(e)||Nc(e)?-1:1;zc.locator=(e,r)=>e.indexOf(\"{\",r);var Mc=function(){let{Parser:e}=this,{blockTokenizers:r,blockMethods:n,inlineTokenizers:t,inlineMethods:a}=e.prototype;r.esSyntax=Rc,t.esComment=zc,n.splice(n.indexOf(\"paragraph\"),0,\"esSyntax\"),a.splice(a.indexOf(\"text\"),0,\"esComment\")};function Fg(){return e=>be(e,(r,n,[t])=>r.type!==\"html\"||Ic.test(r.value)||_r.has(t.type)?r:{...r,type:\"jsx\"})}var Uc=Fg;var Eg=function(){let e=this.Parser.prototype;e.blockMethods=[\"frontMatter\",...e.blockMethods],e.blockTokenizers.frontMatter=r;function r(n,t){let a=or(t);if(a.frontMatter)return n(a.frontMatter.raw)(a.frontMatter)}r.onlyAtStart=!0},Yc=Eg;var Cg=function(){let e=this.Parser.prototype,r=e.inlineMethods;r.splice(r.indexOf(\"text\"),0,\"liquid\"),e.inlineTokenizers.liquid=n;function n(t,a){let i=a.match(/^({%.*?%}|{{.*?}})/s);if(i)return t(i[0])({type:\"liquidNode\",value:i[0]})}n.locator=function(t,a){return t.indexOf(\"{\",a)}},Vc=Cg;var bg=function(){let e=\"wikiLink\",r=/^\\[\\[(?<linkContents>.+?)]]/s,n=this.Parser.prototype,t=n.inlineMethods;t.splice(t.indexOf(\"link\"),0,e),n.inlineTokenizers.wikiLink=a;function a(i,u){let o=r.exec(u);if(o){let s=o.groups.linkContents.trim();return i(o[0])({type:e,value:s})}}a.locator=function(i,u){return i.indexOf(\"[\",u)}},jc=bg;function Jc({isMDX:e}){return r=>{let n=(0,Hc.default)().use(Gc.default,{commonmark:!0,...e&&{blocks:[Oc]}}).use(Kc.default).use(Yc).use(Wc.default).use(e?Mc:$c).use(Vc).use(e?Uc:$c).use(jc);return n.run(n.parse(r))}}function $c(){}var Xc={astFormat:\"mdast\",hasPragma:li,locStart:Te,locEnd:Se},xg={...Xc,parse:Jc({isMDX:!1})},yg={...Xc,parse:Jc({isMDX:!0})};var Qc=[{linguistLanguageId:222,name:\"Markdown\",type:\"prose\",color:\"#083fa1\",aliases:[\"md\",\"pandoc\"],aceMode:\"markdown\",codemirrorMode:\"gfm\",codemirrorMimeType:\"text/x-gfm\",wrap:!0,extensions:[\".md\",\".livemd\",\".markdown\",\".mdown\",\".mdwn\",\".mkd\",\".mkdn\",\".mkdown\",\".ronn\",\".scd\",\".workbook\"],filenames:[\"contents.lr\",\"README\"],tmScope:\"text.md\",parsers:[\"markdown\"],vscodeLanguageIds:[\"markdown\"]},{linguistLanguageId:222,name:\"MDX\",type:\"prose\",color:\"#083fa1\",aliases:[\"md\",\"pandoc\"],aceMode:\"markdown\",codemirrorMode:\"gfm\",codemirrorMimeType:\"text/x-gfm\",wrap:!0,extensions:[\".mdx\"],filenames:[],tmScope:\"text.md\",parsers:[\"mdx\"],vscodeLanguageIds:[\"mdx\"]}];var _n={bracketSpacing:{category:\"Common\",type:\"boolean\",default:!0,description:\"Print spaces between brackets.\",oppositeDescription:\"Do not print spaces between brackets.\"},singleQuote:{category:\"Common\",type:\"boolean\",default:!1,description:\"Use single quotes instead of double quotes.\"},proseWrap:{category:\"Common\",type:\"choice\",default:\"preserve\",description:\"How to wrap prose.\",choices:[{value:\"always\",description:\"Wrap prose if it exceeds the print width.\"},{value:\"never\",description:\"Do not wrap prose.\"},{value:\"preserve\",description:\"Wrap prose as-is.\"}]},bracketSameLine:{category:\"Common\",type:\"boolean\",default:!1,description:\"Put > of opening tags on the last line instead of on a new line.\"},singleAttributePerLine:{category:\"Common\",type:\"boolean\",default:!1,description:\"Enforce single attribute per line in HTML, Vue and JSX.\"}};var kg={proseWrap:_n.proseWrap,singleQuote:_n.singleQuote},Zc=kg;var wg={mdast:Ti};var YE=Ln;export{YE as default,Qc as languages,Zc as options,Pn as parsers,wg as printers};\n", "import {\n    Decoration, DecorationSet, EditorView, MatchDecorator,\n    ViewPlugin, ViewUpdate, WidgetType\n} from \"@codemirror/view\"\nconst placeholderMatcher = new MatchDecorator({\n    regexp: /\\[\\[(@[^]+?)\\]\\]/g,\n    decoration: match => Decoration.replace({\n        widget: new PlaceholderWidget(match[1]),\n    })\n});\n\nclass PlaceholderWidget extends WidgetType {\n    content: string;\n\n    constructor(content: string) {\n        super();\n        this.content = content;\n    }\n\n    eq(other: PlaceholderWidget) {\n        return this.content == other.content\n    }\n\n    toDOM() {\n        let span = document.createElement(\"span\");\n        if (!this.content) return span;\n        span.className = \"badge badge-light-success me-1 \";\n        span.textContent = this.content;\n        return span;\n    }\n\n    ignoreEvent() {\n        return true;\n    }\n\n    destroy(dom: HTMLElement) {\n        dom.remove();\n    }\n}\n\n\n\nconst placeholdersPlugin = ViewPlugin.fromClass(\n    class {\n        placeholders: DecorationSet;\n        constructor(view: EditorView) {\n            this.placeholders = placeholderMatcher.createDeco(view);\n        }\n        update(update: ViewUpdate) {\n            this.placeholders = placeholderMatcher.updateDeco(update, this.placeholders);\n        }\n    }, {\n        decorations: (instance: any) => {\n            return instance.placeholders;\n        },\n        provide: (plugin: any) =>\n            EditorView.atomicRanges.of((view: any) => {\n                return view.plugin(plugin)?.placeholders || Decoration.none;\n            }),\n    }\n);\n\nexport {placeholdersPlugin}", "export { PickerElement as Picker } from './components/Picker'\nexport { EmojiElement as Emoji } from './components/Emoji'\n\nexport { FrequentlyUsed, SafeFlags, SearchIndex, Store } from './helpers'\n\nexport { init, Data, I18n } from './config'\n\nexport { getEmojiDataFromNative } from './utils'\n", "// @ts-nocheck\nexport { default as Picker } from './Picker'\nexport { default as PickerElement } from './PickerElement'\nexport { default as PickerStyles } from 'bundle-text:./PickerStyles.scss'\n", "// @ts-nocheck\nimport { Component, createRef } from 'preact'\n\nimport { deepEqual, sleep, getEmojiData } from '../../utils'\nimport { Data, I18n, init } from '../../config'\nimport { SearchIndex, Store, FrequentlyUsed } from '../../helpers'\nimport Icons from '../../icons'\n\nimport { Emoji } from '../Emoji'\nimport { Navigation } from '../Navigation'\nimport { PureInlineComponent } from '../HOCs'\n\nconst Performance = {\n  rowsPerRender: 10,\n}\n\nexport default class Picker extends Component {\n  constructor(props) {\n    super()\n\n    this.observers = []\n\n    this.state = {\n      pos: [-1, -1],\n      perLine: this.initDynamicPerLine(props),\n      visibleRows: { 0: true },\n      ...this.getInitialState(props),\n    }\n  }\n\n  getInitialState(props = this.props) {\n    return {\n      skin: Store.get('skin') || props.skin,\n      theme: this.initTheme(props.theme),\n    }\n  }\n\n  componentWillMount() {\n    this.dir = I18n.rtl ? 'rtl' : 'ltr'\n    this.refs = {\n      menu: createRef(),\n      navigation: createRef(),\n      scroll: createRef(),\n      search: createRef(),\n      searchInput: createRef(),\n      skinToneButton: createRef(),\n      skinToneRadio: createRef(),\n    }\n\n    this.initGrid()\n\n    if (\n      this.props.stickySearch == false &&\n      this.props.searchPosition == 'sticky'\n    ) {\n      console.warn(\n        '[EmojiMart] Deprecation warning: `stickySearch` has been renamed `searchPosition`.',\n      )\n\n      this.props.searchPosition = 'static'\n    }\n  }\n\n  componentDidMount() {\n    this.register()\n\n    this.shadowRoot = this.base.parentNode\n\n    if (this.props.autoFocus) {\n      const { searchInput } = this.refs\n      if (searchInput.current) {\n        searchInput.current.focus()\n      }\n    }\n  }\n\n  componentWillReceiveProps(nextProps) {\n    this.nextState || (this.nextState = {})\n\n    for (const k in nextProps) {\n      this.nextState[k] = nextProps[k]\n    }\n\n    clearTimeout(this.nextStateTimer)\n    this.nextStateTimer = setTimeout(() => {\n      let requiresGridReset = false\n\n      for (const k in this.nextState) {\n        this.props[k] = this.nextState[k]\n\n        if (k === 'custom' || k === 'categories') {\n          requiresGridReset = true\n        }\n      }\n\n      delete this.nextState\n      const nextState = this.getInitialState()\n\n      if (requiresGridReset) {\n        return this.reset(nextState)\n      }\n\n      this.setState(nextState)\n    })\n  }\n\n  componentWillUnmount() {\n    this.unregister()\n  }\n\n  async reset(nextState = {}) {\n    await init(this.props)\n\n    this.initGrid()\n    this.unobserve()\n\n    this.setState(nextState, () => {\n      this.observeCategories()\n      this.observeRows()\n    })\n  }\n\n  register() {\n    document.addEventListener('click', this.handleClickOutside)\n    this.observe()\n  }\n\n  unregister() {\n    document.removeEventListener('click', this.handleClickOutside)\n    this.unobserve()\n  }\n\n  observe() {\n    this.observeCategories()\n    this.observeRows()\n  }\n\n  unobserve({ except = [] } = {}) {\n    if (!Array.isArray(except)) {\n      except = [except]\n    }\n\n    for (const observer of this.observers) {\n      if (except.includes(observer)) continue\n      observer.disconnect()\n    }\n\n    this.observers = [].concat(except)\n  }\n\n  initGrid() {\n    const { categories } = Data\n\n    this.refs.categories = new Map()\n\n    const navKey = Data.categories.map((category) => category.id).join(',')\n    if (this.navKey && this.navKey != navKey) {\n      this.refs.scroll.current && (this.refs.scroll.current.scrollTop = 0)\n    }\n    this.navKey = navKey\n\n    this.grid = []\n    this.grid.setsize = 0\n\n    const addRow = (rows, category) => {\n      const row = []\n      row.__categoryId = category.id\n      row.__index = rows.length\n      this.grid.push(row)\n\n      const rowIndex = this.grid.length - 1\n      const rowRef = rowIndex % Performance.rowsPerRender ? {} : createRef()\n      rowRef.index = rowIndex\n      rowRef.posinset = this.grid.setsize + 1\n      rows.push(rowRef)\n\n      return row\n    }\n\n    for (let category of categories) {\n      const rows = []\n      let row = addRow(rows, category)\n\n      for (let emoji of category.emojis) {\n        if (row.length == this.getPerLine()) {\n          row = addRow(rows, category)\n        }\n\n        this.grid.setsize += 1\n        row.push(emoji)\n      }\n\n      this.refs.categories.set(category.id, { root: createRef(), rows })\n    }\n  }\n\n  initTheme(theme) {\n    if (theme != 'auto') return theme\n\n    if (!this.darkMedia) {\n      this.darkMedia = matchMedia('(prefers-color-scheme: dark)')\n      if (this.darkMedia.media.match(/^not/)) return 'light'\n\n      this.darkMedia.addListener(() => {\n        if (this.props.theme != 'auto') return\n        this.setState({ theme: this.darkMedia.matches ? 'dark' : 'light' })\n      })\n    }\n\n    return this.darkMedia.matches ? 'dark' : 'light'\n  }\n\n  handleClickOutside = (e) => {\n    const { element } = this.props\n\n    if (e.target != element) {\n      if (this.state.showSkins) {\n        this.closeSkins()\n      }\n\n      if (this.props.onClickOutside) {\n        this.props.onClickOutside(e)\n      }\n    }\n  }\n\n  handleBaseClick = (e) => {\n    if (!this.state.showSkins) return\n    if (!e.target.closest('.menu')) {\n      e.preventDefault()\n      e.stopImmediatePropagation()\n\n      this.closeSkins()\n    }\n  }\n\n  handleBaseKeydown = (e) => {\n    if (!this.state.showSkins) return\n    if (e.key == 'Escape') {\n      e.preventDefault()\n      e.stopImmediatePropagation()\n\n      this.closeSkins()\n    }\n  }\n\n  initDynamicPerLine(props = this.props) {\n    if (!props.dynamicWidth) return\n    const { element, emojiButtonSize } = props\n\n    const calculatePerLine = () => {\n      const { width } = element.getBoundingClientRect()\n      return Math.floor(width / emojiButtonSize)\n    }\n\n    const observer = new ResizeObserver(() => {\n      this.unobserve({ except: observer })\n      this.setState({ perLine: calculatePerLine() }, () => {\n        this.initGrid()\n        this.forceUpdate(() => {\n          this.observeCategories()\n          this.observeRows()\n        })\n      })\n    })\n\n    observer.observe(element)\n    this.observers.push(observer)\n\n    return calculatePerLine()\n  }\n\n  getPerLine() {\n    return this.state.perLine || this.props.perLine\n  }\n\n  getEmojiByPos([p1, p2]) {\n    const grid = this.state.searchResults || this.grid\n    const emoji = grid[p1] && grid[p1][p2]\n\n    if (!emoji) return\n    return SearchIndex.get(emoji)\n  }\n\n  observeCategories() {\n    const navigation = this.refs.navigation.current\n    if (!navigation) return\n\n    const visibleCategories = new Map()\n    const setFocusedCategory = (categoryId) => {\n      if (categoryId != navigation.state.categoryId) {\n        navigation.setState({ categoryId })\n      }\n    }\n\n    const observerOptions = {\n      root: this.refs.scroll.current,\n      threshold: [0.0, 1.0],\n    }\n\n    const observer = new IntersectionObserver((entries) => {\n      for (const entry of entries) {\n        const id = entry.target.dataset.id\n        visibleCategories.set(id, entry.intersectionRatio)\n      }\n\n      const ratios = [...visibleCategories]\n      for (const [id, ratio] of ratios) {\n        if (ratio) {\n          setFocusedCategory(id)\n          break\n        }\n      }\n    }, observerOptions)\n\n    for (const { root } of this.refs.categories.values()) {\n      observer.observe(root.current)\n    }\n\n    this.observers.push(observer)\n  }\n\n  observeRows() {\n    const visibleRows = { ...this.state.visibleRows }\n\n    const observer = new IntersectionObserver(\n      (entries) => {\n        for (const entry of entries) {\n          const index = parseInt(entry.target.dataset.index)\n\n          if (entry.isIntersecting) {\n            visibleRows[index] = true\n          } else {\n            delete visibleRows[index]\n          }\n        }\n\n        this.setState({ visibleRows })\n      },\n      {\n        root: this.refs.scroll.current,\n        rootMargin: `${\n          this.props.emojiButtonSize * (Performance.rowsPerRender + 5)\n        }px 0px ${this.props.emojiButtonSize * Performance.rowsPerRender}px`,\n      },\n    )\n\n    for (const { rows } of this.refs.categories.values()) {\n      for (const row of rows) {\n        if (row.current) {\n          observer.observe(row.current)\n        }\n      }\n    }\n\n    this.observers.push(observer)\n  }\n\n  preventDefault(e) {\n    e.preventDefault()\n  }\n\n  handleSearchClick = () => {\n    const emoji = this.getEmojiByPos(this.state.pos)\n    if (!emoji) return\n\n    this.setState({ pos: [-1, -1] })\n  }\n\n  handleSearchInput = async () => {\n    const input = this.refs.searchInput.current\n    if (!input) return\n\n    const { value } = input\n    const searchResults = await SearchIndex.search(value)\n    const afterRender = () => {\n      if (!this.refs.scroll.current) return\n      this.refs.scroll.current.scrollTop = 0\n    }\n\n    if (!searchResults) {\n      return this.setState({ searchResults, pos: [-1, -1] }, afterRender)\n    }\n\n    const pos = input.selectionStart == input.value.length ? [0, 0] : [-1, -1]\n    const grid = []\n    grid.setsize = searchResults.length\n    let row = null\n\n    for (let emoji of searchResults) {\n      if (!grid.length || row.length == this.getPerLine()) {\n        row = []\n        row.__categoryId = 'search'\n        row.__index = grid.length\n        grid.push(row)\n      }\n\n      row.push(emoji)\n    }\n\n    this.ignoreMouse()\n    this.setState({ searchResults: grid, pos }, afterRender)\n  }\n\n  handleSearchKeyDown = (e) => {\n    // const specialKey = e.altKey || e.ctrlKey || e.metaKey\n    const input = e.currentTarget\n    e.stopImmediatePropagation()\n\n    switch (e.key) {\n      case 'ArrowLeft':\n        // if (specialKey) return\n        // e.preventDefault()\n        this.navigate({ e, input, left: true })\n        break\n\n      case 'ArrowRight':\n        // if (specialKey) return\n        // e.preventDefault()\n        this.navigate({ e, input, right: true })\n        break\n\n      case 'ArrowUp':\n        // if (specialKey) return\n        // e.preventDefault()\n        this.navigate({ e, input, up: true })\n        break\n\n      case 'ArrowDown':\n        // if (specialKey) return\n        // e.preventDefault()\n        this.navigate({ e, input, down: true })\n        break\n\n      case 'Enter':\n        e.preventDefault()\n        this.handleEmojiClick({ e, pos: this.state.pos })\n        break\n\n      case 'Escape':\n        e.preventDefault()\n        if (this.state.searchResults) {\n          this.clearSearch()\n        } else {\n          this.unfocusSearch()\n        }\n        break\n\n      default:\n        break\n    }\n  }\n\n  clearSearch = () => {\n    const input = this.refs.searchInput.current\n    if (!input) return\n\n    input.value = ''\n    input.focus()\n\n    this.handleSearchInput()\n  }\n\n  unfocusSearch() {\n    const input = this.refs.searchInput.current\n    if (!input) return\n\n    input.blur()\n  }\n\n  navigate({ e, input, left, right, up, down }) {\n    const grid = this.state.searchResults || this.grid\n    if (!grid.length) return\n\n    let [p1, p2] = this.state.pos\n\n    const pos = (() => {\n      if (p1 == 0) {\n        if (p2 == 0 && !e.repeat && (left || up)) {\n          return null\n        }\n      }\n\n      if (p1 == -1) {\n        if (\n          !e.repeat &&\n          (right || down) &&\n          input.selectionStart == input.value.length\n        ) {\n          return [0, 0]\n        }\n\n        return null\n      }\n\n      if (left || right) {\n        let row = grid[p1]\n        const increment = left ? -1 : 1\n\n        p2 += increment\n        if (!row[p2]) {\n          p1 += increment\n          row = grid[p1]\n\n          if (!row) {\n            p1 = left ? 0 : grid.length - 1\n            p2 = left ? 0 : grid[p1].length - 1\n\n            return [p1, p2]\n          }\n\n          p2 = left ? row.length - 1 : 0\n        }\n\n        return [p1, p2]\n      }\n\n      if (up || down) {\n        p1 += up ? -1 : 1\n        const row = grid[p1]\n\n        if (!row) {\n          p1 = up ? 0 : grid.length - 1\n          p2 = up ? 0 : grid[p1].length - 1\n\n          return [p1, p2]\n        }\n\n        if (!row[p2]) {\n          p2 = row.length - 1\n        }\n\n        return [p1, p2]\n      }\n    })()\n\n    if (pos) {\n      e.preventDefault()\n    } else {\n      if (this.state.pos[0] > -1) {\n        this.setState({ pos: [-1, -1] })\n      }\n\n      return\n    }\n\n    this.setState({ pos, keyboard: true }, () => {\n      this.scrollTo({ row: pos[0] })\n    })\n  }\n\n  scrollTo({ categoryId, row }) {\n    const grid = this.state.searchResults || this.grid\n    if (!grid.length) return\n\n    const scroll = this.refs.scroll.current\n    const scrollRect = scroll.getBoundingClientRect()\n\n    let scrollTop = 0\n\n    if (row >= 0) {\n      categoryId = grid[row].__categoryId\n    }\n\n    if (categoryId) {\n      const ref =\n        this.refs[categoryId] || this.refs.categories.get(categoryId).root\n      const categoryRect = ref.current.getBoundingClientRect()\n\n      scrollTop = categoryRect.top - (scrollRect.top - scroll.scrollTop) + 1\n    }\n\n    if (row >= 0) {\n      if (!row) {\n        scrollTop = 0\n      } else {\n        const rowIndex = grid[row].__index\n        const rowTop = scrollTop + rowIndex * this.props.emojiButtonSize\n        const rowBot =\n          rowTop +\n          this.props.emojiButtonSize +\n          this.props.emojiButtonSize * 0.88\n\n        if (rowTop < scroll.scrollTop) {\n          scrollTop = rowTop\n        } else if (rowBot > scroll.scrollTop + scrollRect.height) {\n          scrollTop = rowBot - scrollRect.height\n        } else {\n          return\n        }\n      }\n    }\n\n    this.ignoreMouse()\n    scroll.scrollTop = scrollTop\n  }\n\n  ignoreMouse() {\n    this.mouseIsIgnored = true\n    clearTimeout(this.ignoreMouseTimer)\n    this.ignoreMouseTimer = setTimeout(() => {\n      delete this.mouseIsIgnored\n    }, 100)\n  }\n\n  handleCategoryClick = ({ category, i }) => {\n    this.scrollTo(i == 0 ? { row: -1 } : { categoryId: category.id })\n  }\n\n  handleEmojiOver(pos) {\n    if (this.mouseIsIgnored || this.state.showSkins) return\n    this.setState({ pos: pos || [-1, -1], keyboard: false })\n  }\n\n  handleEmojiClick({ e, emoji, pos }) {\n    if (!this.props.onEmojiSelect) return\n\n    if (!emoji && pos) {\n      emoji = this.getEmojiByPos(pos)\n    }\n\n    if (emoji) {\n      const emojiData = getEmojiData(emoji, { skinIndex: this.state.skin - 1 })\n\n      if (this.props.maxFrequentRows) {\n        FrequentlyUsed.add(emojiData, this.props)\n      }\n\n      this.props.onEmojiSelect(emojiData, e)\n    }\n  }\n\n  openSkins = (e) => {\n    const { currentTarget } = e\n    const rect = currentTarget.getBoundingClientRect()\n\n    this.setState({ showSkins: rect }, async () => {\n      // Firefox requires 2 frames for the transition to consistenly work\n      await sleep(2)\n\n      const menu = this.refs.menu.current\n      if (!menu) return\n\n      menu.classList.remove('hidden')\n      this.refs.skinToneRadio.current.focus()\n\n      this.base.addEventListener('click', this.handleBaseClick, true)\n      this.base.addEventListener('keydown', this.handleBaseKeydown, true)\n    })\n  }\n\n  closeSkins() {\n    if (!this.state.showSkins) return\n    this.setState({ showSkins: null, tempSkin: null })\n\n    this.base.removeEventListener('click', this.handleBaseClick)\n    this.base.removeEventListener('keydown', this.handleBaseKeydown)\n  }\n\n  handleSkinMouseOver(tempSkin) {\n    this.setState({ tempSkin })\n  }\n\n  handleSkinClick(skin) {\n    this.ignoreMouse()\n    this.closeSkins()\n\n    this.setState({ skin, tempSkin: null })\n    Store.set('skin', skin)\n  }\n\n  renderNav() {\n    return (\n      <Navigation\n        key={this.navKey}\n        ref={this.refs.navigation}\n        icons={this.props.icons}\n        theme={this.state.theme}\n        dir={this.dir}\n        unfocused={!!this.state.searchResults}\n        position={this.props.navPosition}\n        onClick={this.handleCategoryClick}\n      />\n    )\n  }\n\n  renderPreview() {\n    const emoji = this.getEmojiByPos(this.state.pos)\n    const noSearchResults =\n      this.state.searchResults && !this.state.searchResults.length\n\n    return (\n      <div\n        id=\"preview\"\n        class=\"flex flex-middle\"\n        dir={this.dir}\n        data-position={this.props.previewPosition}\n      >\n        <div class=\"flex flex-middle flex-grow\">\n          <div\n            class=\"flex flex-auto flex-middle flex-center\"\n            style={{\n              height: this.props.emojiButtonSize,\n              fontSize: this.props.emojiButtonSize,\n            }}\n          >\n            <Emoji\n              emoji={emoji}\n              id={\n                noSearchResults\n                  ? this.props.noResultsEmoji || 'cry'\n                  : this.props.previewEmoji ||\n                    (this.props.previewPosition == 'top'\n                      ? 'point_down'\n                      : 'point_up')\n              }\n              set={this.props.set}\n              size={this.props.emojiButtonSize}\n              skin={this.state.tempSkin || this.state.skin}\n              spritesheet={true}\n              getSpritesheetURL={this.props.getSpritesheetURL}\n            />\n          </div>\n\n          <div class={`margin-${this.dir[0]}`}>\n            {emoji || noSearchResults ? (\n              <div class={`padding-${this.dir[2]} align-${this.dir[0]}`}>\n                <div class=\"preview-title ellipsis\">\n                  {emoji ? emoji.name : I18n.search_no_results_1}\n                </div>\n                <div class=\"preview-subtitle ellipsis color-c\">\n                  {emoji ? emoji.skins[0].shortcodes : I18n.search_no_results_2}\n                </div>\n              </div>\n            ) : (\n              <div class=\"preview-placeholder color-c\">{I18n.pick}</div>\n            )}\n          </div>\n        </div>\n\n        {!emoji &&\n          this.props.skinTonePosition == 'preview' &&\n          this.renderSkinToneButton()}\n      </div>\n    )\n  }\n\n  renderEmojiButton(emoji, { pos, posinset, grid }) {\n    const size = this.props.emojiButtonSize\n    const skin = this.state.tempSkin || this.state.skin\n    const emojiSkin = emoji.skins[skin - 1] || emoji.skins[0]\n    const native = emojiSkin.native\n    const selected = deepEqual(this.state.pos, pos)\n    const key = pos.concat(emoji.id).join('')\n\n    return (\n      <PureInlineComponent key={key} {...{ selected, skin, size }}>\n        <button\n          aria-label={native}\n          aria-selected={selected || undefined}\n          aria-posinset={posinset}\n          aria-setsize={grid.setsize}\n          data-keyboard={this.state.keyboard}\n          title={this.props.previewPosition == 'none' ? emoji.name : undefined}\n          type=\"button\"\n          class=\"flex flex-center flex-middle\"\n          tabindex=\"-1\"\n          onClick={(e) => this.handleEmojiClick({ e, emoji })}\n          onMouseEnter={() => this.handleEmojiOver(pos)}\n          onMouseLeave={() => this.handleEmojiOver()}\n          style={{\n            width: this.props.emojiButtonSize,\n            height: this.props.emojiButtonSize,\n            fontSize: this.props.emojiSize,\n            lineHeight: 0,\n          }}\n        >\n          <div\n            aria-hidden=\"true\"\n            class=\"background\"\n            style={{\n              borderRadius: this.props.emojiButtonRadius,\n              backgroundColor: this.props.emojiButtonColors\n                ? this.props.emojiButtonColors[\n                    (posinset - 1) % this.props.emojiButtonColors.length\n                  ]\n                : undefined,\n            }}\n          ></div>\n          <Emoji\n            emoji={emoji}\n            set={this.props.set}\n            size={this.props.emojiSize}\n            skin={skin}\n            spritesheet={true}\n            getSpritesheetURL={this.props.getSpritesheetURL}\n          />\n        </button>\n      </PureInlineComponent>\n    )\n  }\n\n  renderSearch() {\n    const renderSkinTone =\n      this.props.previewPosition == 'none' ||\n      this.props.skinTonePosition == 'search'\n\n    return (\n      <div>\n        <div class=\"spacer\"></div>\n        <div class=\"flex flex-middle\">\n          <div class=\"search relative flex-grow\">\n            <input\n              type=\"search\"\n              ref={this.refs.searchInput}\n              placeholder={I18n.search}\n              onClick={this.handleSearchClick}\n              onInput={this.handleSearchInput}\n              onKeyDown={this.handleSearchKeyDown}\n              autoComplete=\"off\"\n            ></input>\n            <span class=\"icon loupe flex\">{Icons.search.loupe}</span>\n            {this.state.searchResults && (\n              <button\n                title=\"Clear\"\n                aria-label=\"Clear\"\n                type=\"button\"\n                class=\"icon delete flex\"\n                onClick={this.clearSearch}\n                onMouseDown={this.preventDefault}\n              >\n                {Icons.search.delete}\n              </button>\n            )}\n          </div>\n\n          {renderSkinTone && this.renderSkinToneButton()}\n        </div>\n      </div>\n    )\n  }\n\n  renderSearchResults() {\n    const { searchResults } = this.state\n    if (!searchResults) return null\n\n    return (\n      <div class=\"category\" ref={this.refs.search}>\n        <div class={`sticky padding-small align-${this.dir[0]}`}>\n          {I18n.categories.search}\n        </div>\n        <div>\n          {!searchResults.length ? (\n            <div class={`padding-small align-${this.dir[0]}`}>\n              {this.props.onAddCustomEmoji && (\n                <a onClick={this.props.onAddCustomEmoji}>{I18n.add_custom}</a>\n              )}\n            </div>\n          ) : (\n            searchResults.map((row, i) => {\n              return (\n                <div class=\"flex\">\n                  {row.map((emoji, ii) => {\n                    return this.renderEmojiButton(emoji, {\n                      pos: [i, ii],\n                      posinset: i * this.props.perLine + ii + 1,\n                      grid: searchResults,\n                    })\n                  })}\n                </div>\n              )\n            })\n          )}\n        </div>\n      </div>\n    )\n  }\n\n  renderCategories() {\n    const { categories } = Data\n    const hidden = !!this.state.searchResults\n    const perLine = this.getPerLine()\n\n    return (\n      <div\n        style={{\n          visibility: hidden ? 'hidden' : undefined,\n          display: hidden ? 'none' : undefined,\n          height: '100%',\n        }}\n      >\n        {categories.map((category) => {\n          const { root, rows } = this.refs.categories.get(category.id)\n\n          return (\n            <div\n              data-id={category.target ? category.target.id : category.id}\n              class=\"category\"\n              ref={root}\n            >\n              <div class={`sticky padding-small align-${this.dir[0]}`}>\n                {category.name || I18n.categories[category.id]}\n              </div>\n              <div\n                class=\"relative\"\n                style={{\n                  height: rows.length * this.props.emojiButtonSize,\n                }}\n              >\n                {rows.map((row, i) => {\n                  const targetRow =\n                    row.index - (row.index % Performance.rowsPerRender)\n                  const visible = this.state.visibleRows[targetRow]\n                  const ref = 'current' in row ? row : undefined\n\n                  if (!visible && !ref) {\n                    return null\n                  }\n\n                  const start = i * perLine\n                  const end = start + perLine\n                  const emojiIds = category.emojis.slice(start, end)\n\n                  if (emojiIds.length < perLine) {\n                    emojiIds.push(...new Array(perLine - emojiIds.length))\n                  }\n\n                  return (\n                    <div\n                      key={row.index}\n                      data-index={row.index}\n                      ref={ref}\n                      class=\"flex row\"\n                      style={{ top: i * this.props.emojiButtonSize }}\n                    >\n                      {visible &&\n                        emojiIds.map((emojiId, ii) => {\n                          if (!emojiId) {\n                            return (\n                              <div\n                                style={{\n                                  width: this.props.emojiButtonSize,\n                                  height: this.props.emojiButtonSize,\n                                }}\n                              ></div>\n                            )\n                          }\n\n                          const emoji = SearchIndex.get(emojiId)\n\n                          return this.renderEmojiButton(emoji, {\n                            pos: [row.index, ii],\n                            posinset: row.posinset + ii,\n                            grid: this.grid,\n                          })\n                        })}\n                    </div>\n                  )\n                })}\n              </div>\n            </div>\n          )\n        })}\n      </div>\n    )\n  }\n\n  renderSkinToneButton() {\n    if (this.props.skinTonePosition == 'none') {\n      return null\n    }\n\n    return (\n      <div\n        class=\"flex flex-auto flex-center flex-middle\"\n        style={{\n          position: 'relative',\n          width: this.props.emojiButtonSize,\n          height: this.props.emojiButtonSize,\n        }}\n      >\n        <button\n          type=\"button\"\n          ref={this.refs.skinToneButton}\n          class=\"skin-tone-button flex flex-auto flex-center flex-middle\"\n          aria-selected={this.state.showSkins ? '' : undefined}\n          aria-label={I18n.skins.choose}\n          title={I18n.skins.choose}\n          onClick={this.openSkins}\n          style={{\n            width: this.props.emojiSize,\n            height: this.props.emojiSize,\n          }}\n        >\n          <span class={`skin-tone skin-tone-${this.state.skin}`}></span>\n        </button>\n      </div>\n    )\n  }\n\n  renderLiveRegion() {\n    const emoji = this.getEmojiByPos(this.state.pos)\n    const contents = emoji ? emoji.name : ''\n\n    return (\n      <div aria-live=\"polite\" class=\"sr-only\">\n        {contents}\n      </div>\n    )\n  }\n\n  renderSkins() {\n    const skinToneButton = this.refs.skinToneButton.current\n    const skinToneButtonRect = skinToneButton.getBoundingClientRect()\n    const baseRect = this.base.getBoundingClientRect()\n\n    const position = {}\n\n    if (this.dir == 'ltr') {\n      position.right = baseRect.right - skinToneButtonRect.right - 3\n    } else {\n      position.left = skinToneButtonRect.left - baseRect.left - 3\n    }\n\n    if (\n      this.props.previewPosition == 'bottom' &&\n      this.props.skinTonePosition == 'preview'\n    ) {\n      position.bottom = baseRect.bottom - skinToneButtonRect.top + 6\n    } else {\n      position.top = skinToneButtonRect.bottom - baseRect.top + 3\n      position.bottom = 'auto'\n    }\n\n    return (\n      <div\n        ref={this.refs.menu}\n        role=\"radiogroup\"\n        dir={this.dir}\n        aria-label={I18n.skins.choose}\n        class=\"menu hidden\"\n        data-position={position.top ? 'top' : 'bottom'}\n        style={position}\n      >\n        {[...Array(6).keys()].map((i) => {\n          const skin = i + 1\n          const checked = this.state.skin == skin\n\n          return (\n            <div>\n              <input\n                type=\"radio\"\n                name=\"skin-tone\"\n                value={skin}\n                aria-label={I18n.skins[skin]}\n                ref={checked ? this.refs.skinToneRadio : null}\n                defaultChecked={checked}\n                onChange={() => this.handleSkinMouseOver(skin)}\n                onKeyDown={(e) => {\n                  if (\n                    e.code == 'Enter' ||\n                    e.code == 'Space' ||\n                    e.code == 'Tab'\n                  ) {\n                    e.preventDefault()\n                    this.handleSkinClick(skin)\n                  }\n                }}\n              ></input>\n\n              <button\n                aria-hidden=\"true\"\n                tabindex=\"-1\"\n                onClick={() => this.handleSkinClick(skin)}\n                onMouseEnter={() => this.handleSkinMouseOver(skin)}\n                onMouseLeave={() => this.handleSkinMouseOver()}\n                class=\"option flex flex-grow flex-middle\"\n              >\n                <span class={`skin-tone skin-tone-${skin}`}></span>\n                <span class=\"margin-small-lr\">{I18n.skins[skin]}</span>\n              </button>\n            </div>\n          )\n        })}\n      </div>\n    )\n  }\n\n  render() {\n    const lineWidth = this.props.perLine * this.props.emojiButtonSize\n\n    return (\n      <section\n        id=\"root\"\n        class=\"flex flex-column\"\n        dir={this.dir}\n        style={{\n          width: this.props.dynamicWidth\n            ? '100%'\n            : `calc(${lineWidth}px + (var(--padding) + var(--sidebar-width)))`,\n        }}\n        data-emoji-set={this.props.set}\n        data-theme={this.state.theme}\n        data-menu={this.state.showSkins ? '' : undefined}\n      >\n        {this.props.previewPosition == 'top' && this.renderPreview()}\n        {this.props.navPosition == 'top' && this.renderNav()}\n        {this.props.searchPosition == 'sticky' && (\n          <div class=\"padding-lr\">{this.renderSearch()}</div>\n        )}\n\n        <div ref={this.refs.scroll} class=\"scroll flex-grow padding-lr\">\n          <div\n            style={{\n              width: this.props.dynamicWidth ? '100%' : lineWidth,\n              height: '100%',\n            }}\n          >\n            {this.props.searchPosition == 'static' && this.renderSearch()}\n            {this.renderSearchResults()}\n            {this.renderCategories()}\n          </div>\n        </div>\n\n        {this.props.navPosition == 'bottom' && this.renderNav()}\n        {this.props.previewPosition == 'bottom' && this.renderPreview()}\n        {this.state.showSkins && this.renderSkins()}\n        {this.renderLiveRegion()}\n      </section>\n    )\n  }\n}\n", "export default function _defineProperty(obj, key, value) {\n  if (key in obj) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n  } else {\n    obj[key] = value;\n  }\n\n  return obj;\n}\n", "import{options as r,Fragment as _}from\"preact\";export{Fragment}from\"preact\";var o=0;function e(_,e,n,t,f){var l,s,u={};for(s in e)\"ref\"==s?l=e[s]:u[s]=e[s];var a={type:_,props:u,key:n,ref:l,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,__h:null,constructor:void 0,__v:--o,__source:t,__self:f};if(\"function\"==typeof _&&(l=_.defaultProps))for(s in l)void 0===u[s]&&(u[s]=l[s]);return r.vnode&&r.vnode(a),a}export{e as jsx,e as jsxs,e as jsxDEV};\n//# sourceMappingURL=jsxRuntime.module.js.map\n", "import { options, Fragment } from 'preact';\r\n\r\n/** @typedef {import('preact').VNode} VNode */\r\n\r\nlet vnodeId = 0;\r\n\r\n/**\r\n * @fileoverview\r\n * This file exports various methods that implement Babel's \"automatic\" JSX runtime API:\r\n * - jsx(type, props, key)\r\n * - jsxs(type, props, key)\r\n * - jsxDEV(type, props, key, __source, __self)\r\n *\r\n * The implementation of createVNode here is optimized for performance.\r\n * Benchmarks: https://esbench.com/bench/5f6b54a0b4632100a7dcd2b3\r\n */\r\n\r\n/**\r\n * JSX.Element factory used by Babel's {runtime:\"automatic\"} JSX transform\r\n * @param {VNode['type']} type\r\n * @param {VNode['props']} props\r\n * @param {VNode['key']} [key]\r\n * @param {string} [__source]\r\n * @param {string} [__self]\r\n */\r\nfunction createVNode(type, props, key, __source, __self) {\r\n\t// We'll want to preserve `ref` in props to get rid of the need for\r\n\t// forwardRef components in the future, but that should happen via\r\n\t// a separate PR.\r\n\tlet normalizedProps = {},\r\n\t\tref,\r\n\t\ti;\r\n\tfor (i in props) {\r\n\t\tif (i == 'ref') {\r\n\t\t\tref = props[i];\r\n\t\t} else {\r\n\t\t\tnormalizedProps[i] = props[i];\r\n\t\t}\r\n\t}\r\n\r\n\tconst vnode = {\r\n\t\ttype,\r\n\t\tprops: normalizedProps,\r\n\t\tkey,\r\n\t\tref,\r\n\t\t_children: null,\r\n\t\t_parent: null,\r\n\t\t_depth: 0,\r\n\t\t_dom: null,\r\n\t\t_nextDom: undefined,\r\n\t\t_component: null,\r\n\t\t_hydrating: null,\r\n\t\tconstructor: undefined,\r\n\t\t_original: --vnodeId,\r\n\t\t__source,\r\n\t\t__self\r\n\t};\r\n\r\n\t// If a Component VNode, check for and apply defaultProps.\r\n\t// Note: `type` is often a String, and can be `undefined` in development.\r\n\tif (typeof type === 'function' && (ref = type.defaultProps)) {\r\n\t\tfor (i in ref)\r\n\t\t\tif (typeof normalizedProps[i] === 'undefined') {\r\n\t\t\t\tnormalizedProps[i] = ref[i];\r\n\t\t\t}\r\n\t}\r\n\r\n\tif (options.vnode) options.vnode(vnode);\r\n\treturn vnode;\r\n}\r\n\r\nexport {\r\n\tcreateVNode as jsx,\r\n\tcreateVNode as jsxs,\r\n\tcreateVNode as jsxDEV,\r\n\tFragment\r\n};\r\n", "var n,l,u,i,t,r,o,f,e={},c=[],s=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i;function a(n,l){for(var u in l)n[u]=l[u];return n}function h(n){var l=n.parentNode;l&&l.removeChild(n)}function v(l,u,i){var t,r,o,f={};for(o in u)\"key\"==o?t=u[o]:\"ref\"==o?r=u[o]:f[o]=u[o];if(arguments.length>2&&(f.children=arguments.length>3?n.call(arguments,2):i),\"function\"==typeof l&&null!=l.defaultProps)for(o in l.defaultProps)void 0===f[o]&&(f[o]=l.defaultProps[o]);return y(l,f,t,r,null)}function y(n,i,t,r,o){var f={type:n,props:i,key:t,ref:r,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,__h:null,constructor:void 0,__v:null==o?++u:o};return null==o&&null!=l.vnode&&l.vnode(f),f}function p(){return{current:null}}function d(n){return n.children}function _(n,l){this.props=n,this.context=l}function k(n,l){if(null==l)return n.__?k(n.__,n.__.__k.indexOf(n)+1):null;for(var u;l<n.__k.length;l++)if(null!=(u=n.__k[l])&&null!=u.__e)return u.__e;return\"function\"==typeof n.type?k(n):null}function b(n){var l,u;if(null!=(n=n.__)&&null!=n.__c){for(n.__e=n.__c.base=null,l=0;l<n.__k.length;l++)if(null!=(u=n.__k[l])&&null!=u.__e){n.__e=n.__c.base=u.__e;break}return b(n)}}function m(n){(!n.__d&&(n.__d=!0)&&t.push(n)&&!g.__r++||o!==l.debounceRendering)&&((o=l.debounceRendering)||r)(g)}function g(){for(var n;g.__r=t.length;)n=t.sort(function(n,l){return n.__v.__b-l.__v.__b}),t=[],n.some(function(n){var l,u,i,t,r,o;n.__d&&(r=(t=(l=n).__v).__e,(o=l.__P)&&(u=[],(i=a({},t)).__v=t.__v+1,j(o,t,i,l.__n,void 0!==o.ownerSVGElement,null!=t.__h?[r]:null,u,null==r?k(t):r,t.__h),z(u,t),t.__e!=r&&b(t)))})}function w(n,l,u,i,t,r,o,f,s,a){var h,v,p,_,b,m,g,w=i&&i.__k||c,A=w.length;for(u.__k=[],h=0;h<l.length;h++)if(null!=(_=u.__k[h]=null==(_=l[h])||\"boolean\"==typeof _?null:\"string\"==typeof _||\"number\"==typeof _||\"bigint\"==typeof _?y(null,_,null,null,_):Array.isArray(_)?y(d,{children:_},null,null,null):_.__b>0?y(_.type,_.props,_.key,null,_.__v):_)){if(_.__=u,_.__b=u.__b+1,null===(p=w[h])||p&&_.key==p.key&&_.type===p.type)w[h]=void 0;else for(v=0;v<A;v++){if((p=w[v])&&_.key==p.key&&_.type===p.type){w[v]=void 0;break}p=null}j(n,_,p=p||e,t,r,o,f,s,a),b=_.__e,(v=_.ref)&&p.ref!=v&&(g||(g=[]),p.ref&&g.push(p.ref,null,_),g.push(v,_.__c||b,_)),null!=b?(null==m&&(m=b),\"function\"==typeof _.type&&_.__k===p.__k?_.__d=s=x(_,s,n):s=P(n,_,p,w,b,s),\"function\"==typeof u.type&&(u.__d=s)):s&&p.__e==s&&s.parentNode!=n&&(s=k(p))}for(u.__e=m,h=A;h--;)null!=w[h]&&(\"function\"==typeof u.type&&null!=w[h].__e&&w[h].__e==u.__d&&(u.__d=k(i,h+1)),N(w[h],w[h]));if(g)for(h=0;h<g.length;h++)M(g[h],g[++h],g[++h])}function x(n,l,u){for(var i,t=n.__k,r=0;t&&r<t.length;r++)(i=t[r])&&(i.__=n,l=\"function\"==typeof i.type?x(i,l,u):P(u,i,i,t,i.__e,l));return l}function A(n,l){return l=l||[],null==n||\"boolean\"==typeof n||(Array.isArray(n)?n.some(function(n){A(n,l)}):l.push(n)),l}function P(n,l,u,i,t,r){var o,f,e;if(void 0!==l.__d)o=l.__d,l.__d=void 0;else if(null==u||t!=r||null==t.parentNode)n:if(null==r||r.parentNode!==n)n.appendChild(t),o=null;else{for(f=r,e=0;(f=f.nextSibling)&&e<i.length;e+=2)if(f==t)break n;n.insertBefore(t,r),o=r}return void 0!==o?o:t.nextSibling}function C(n,l,u,i,t){var r;for(r in u)\"children\"===r||\"key\"===r||r in l||H(n,r,null,u[r],i);for(r in l)t&&\"function\"!=typeof l[r]||\"children\"===r||\"key\"===r||\"value\"===r||\"checked\"===r||u[r]===l[r]||H(n,r,l[r],u[r],i)}function $(n,l,u){\"-\"===l[0]?n.setProperty(l,u):n[l]=null==u?\"\":\"number\"!=typeof u||s.test(l)?u:u+\"px\"}function H(n,l,u,i,t){var r;n:if(\"style\"===l)if(\"string\"==typeof u)n.style.cssText=u;else{if(\"string\"==typeof i&&(n.style.cssText=i=\"\"),i)for(l in i)u&&l in u||$(n.style,l,\"\");if(u)for(l in u)i&&u[l]===i[l]||$(n.style,l,u[l])}else if(\"o\"===l[0]&&\"n\"===l[1])r=l!==(l=l.replace(/Capture$/,\"\")),l=l.toLowerCase()in n?l.toLowerCase().slice(2):l.slice(2),n.l||(n.l={}),n.l[l+r]=u,u?i||n.addEventListener(l,r?T:I,r):n.removeEventListener(l,r?T:I,r);else if(\"dangerouslySetInnerHTML\"!==l){if(t)l=l.replace(/xlink[H:h]/,\"h\").replace(/sName$/,\"s\");else if(\"href\"!==l&&\"list\"!==l&&\"form\"!==l&&\"tabIndex\"!==l&&\"download\"!==l&&l in n)try{n[l]=null==u?\"\":u;break n}catch(n){}\"function\"==typeof u||(null!=u&&(!1!==u||\"a\"===l[0]&&\"r\"===l[1])?n.setAttribute(l,u):n.removeAttribute(l))}}function I(n){this.l[n.type+!1](l.event?l.event(n):n)}function T(n){this.l[n.type+!0](l.event?l.event(n):n)}function j(n,u,i,t,r,o,f,e,c){var s,h,v,y,p,k,b,m,g,x,A,P=u.type;if(void 0!==u.constructor)return null;null!=i.__h&&(c=i.__h,e=u.__e=i.__e,u.__h=null,o=[e]),(s=l.__b)&&s(u);try{n:if(\"function\"==typeof P){if(m=u.props,g=(s=P.contextType)&&t[s.__c],x=s?g?g.props.value:s.__:t,i.__c?b=(h=u.__c=i.__c).__=h.__E:(\"prototype\"in P&&P.prototype.render?u.__c=h=new P(m,x):(u.__c=h=new _(m,x),h.constructor=P,h.render=O),g&&g.sub(h),h.props=m,h.state||(h.state={}),h.context=x,h.__n=t,v=h.__d=!0,h.__h=[]),null==h.__s&&(h.__s=h.state),null!=P.getDerivedStateFromProps&&(h.__s==h.state&&(h.__s=a({},h.__s)),a(h.__s,P.getDerivedStateFromProps(m,h.__s))),y=h.props,p=h.state,v)null==P.getDerivedStateFromProps&&null!=h.componentWillMount&&h.componentWillMount(),null!=h.componentDidMount&&h.__h.push(h.componentDidMount);else{if(null==P.getDerivedStateFromProps&&m!==y&&null!=h.componentWillReceiveProps&&h.componentWillReceiveProps(m,x),!h.__e&&null!=h.shouldComponentUpdate&&!1===h.shouldComponentUpdate(m,h.__s,x)||u.__v===i.__v){h.props=m,h.state=h.__s,u.__v!==i.__v&&(h.__d=!1),h.__v=u,u.__e=i.__e,u.__k=i.__k,u.__k.forEach(function(n){n&&(n.__=u)}),h.__h.length&&f.push(h);break n}null!=h.componentWillUpdate&&h.componentWillUpdate(m,h.__s,x),null!=h.componentDidUpdate&&h.__h.push(function(){h.componentDidUpdate(y,p,k)})}h.context=x,h.props=m,h.state=h.__s,(s=l.__r)&&s(u),h.__d=!1,h.__v=u,h.__P=n,s=h.render(h.props,h.state,h.context),h.state=h.__s,null!=h.getChildContext&&(t=a(a({},t),h.getChildContext())),v||null==h.getSnapshotBeforeUpdate||(k=h.getSnapshotBeforeUpdate(y,p)),A=null!=s&&s.type===d&&null==s.key?s.props.children:s,w(n,Array.isArray(A)?A:[A],u,i,t,r,o,f,e,c),h.base=u.__e,u.__h=null,h.__h.length&&f.push(h),b&&(h.__E=h.__=null),h.__e=!1}else null==o&&u.__v===i.__v?(u.__k=i.__k,u.__e=i.__e):u.__e=L(i.__e,u,i,t,r,o,f,c);(s=l.diffed)&&s(u)}catch(n){u.__v=null,(c||null!=o)&&(u.__e=e,u.__h=!!c,o[o.indexOf(e)]=null),l.__e(n,u,i)}}function z(n,u){l.__c&&l.__c(u,n),n.some(function(u){try{n=u.__h,u.__h=[],n.some(function(n){n.call(u)})}catch(n){l.__e(n,u.__v)}})}function L(l,u,i,t,r,o,f,c){var s,a,v,y=i.props,p=u.props,d=u.type,_=0;if(\"svg\"===d&&(r=!0),null!=o)for(;_<o.length;_++)if((s=o[_])&&\"setAttribute\"in s==!!d&&(d?s.localName===d:3===s.nodeType)){l=s,o[_]=null;break}if(null==l){if(null===d)return document.createTextNode(p);l=r?document.createElementNS(\"http://www.w3.org/2000/svg\",d):document.createElement(d,p.is&&p),o=null,c=!1}if(null===d)y===p||c&&l.data===p||(l.data=p);else{if(o=o&&n.call(l.childNodes),a=(y=i.props||e).dangerouslySetInnerHTML,v=p.dangerouslySetInnerHTML,!c){if(null!=o)for(y={},_=0;_<l.attributes.length;_++)y[l.attributes[_].name]=l.attributes[_].value;(v||a)&&(v&&(a&&v.__html==a.__html||v.__html===l.innerHTML)||(l.innerHTML=v&&v.__html||\"\"))}if(C(l,p,y,r,c),v)u.__k=[];else if(_=u.props.children,w(l,Array.isArray(_)?_:[_],u,i,t,r&&\"foreignObject\"!==d,o,f,o?o[0]:i.__k&&k(i,0),c),null!=o)for(_=o.length;_--;)null!=o[_]&&h(o[_]);c||(\"value\"in p&&void 0!==(_=p.value)&&(_!==y.value||_!==l.value||\"progress\"===d&&!_)&&H(l,\"value\",_,y.value,!1),\"checked\"in p&&void 0!==(_=p.checked)&&_!==l.checked&&H(l,\"checked\",_,y.checked,!1))}return l}function M(n,u,i){try{\"function\"==typeof n?n(u):n.current=u}catch(n){l.__e(n,i)}}function N(n,u,i){var t,r;if(l.unmount&&l.unmount(n),(t=n.ref)&&(t.current&&t.current!==n.__e||M(t,null,u)),null!=(t=n.__c)){if(t.componentWillUnmount)try{t.componentWillUnmount()}catch(n){l.__e(n,u)}t.base=t.__P=null}if(t=n.__k)for(r=0;r<t.length;r++)t[r]&&N(t[r],u,\"function\"!=typeof n.type);i||null==n.__e||h(n.__e),n.__e=n.__d=void 0}function O(n,l,u){return this.constructor(n,u)}function S(u,i,t){var r,o,f;l.__&&l.__(u,i),o=(r=\"function\"==typeof t)?null:t&&t.__k||i.__k,f=[],j(i,u=(!r&&t||i).__k=v(d,null,[u]),o||e,e,void 0!==i.ownerSVGElement,!r&&t?[t]:o?null:i.firstChild?n.call(i.childNodes):null,f,!r&&t?t:o?o.__e:i.firstChild,r),z(f,u)}function q(n,l){S(n,l,q)}function B(l,u,i){var t,r,o,f=a({},l.props);for(o in u)\"key\"==o?t=u[o]:\"ref\"==o?r=u[o]:f[o]=u[o];return arguments.length>2&&(f.children=arguments.length>3?n.call(arguments,2):i),y(l.type,f,t||l.key,r||l.ref,null)}function D(n,l){var u={__c:l=\"__cC\"+f++,__:n,Consumer:function(n,l){return n.children(l)},Provider:function(n){var u,i;return this.getChildContext||(u=[],(i={})[l]=this,this.getChildContext=function(){return i},this.shouldComponentUpdate=function(n){this.props.value!==n.value&&u.some(m)},this.sub=function(n){u.push(n);var l=n.componentWillUnmount;n.componentWillUnmount=function(){u.splice(u.indexOf(n),1),l&&l.call(n)}}),n.children}};return u.Provider.__=u.Consumer.contextType=u}n=c.slice,l={__e:function(n,l){for(var u,i,t;l=l.__;)if((u=l.__c)&&!u.__)try{if((i=u.constructor)&&null!=i.getDerivedStateFromError&&(u.setState(i.getDerivedStateFromError(n)),t=u.__d),null!=u.componentDidCatch&&(u.componentDidCatch(n),t=u.__d),t)return u.__E=u}catch(l){n=l}throw n}},u=0,i=function(n){return null!=n&&void 0===n.constructor},_.prototype.setState=function(n,l){var u;u=null!=this.__s&&this.__s!==this.state?this.__s:this.__s=a({},this.state),\"function\"==typeof n&&(n=n(a({},u),this.props)),n&&a(u,n),null!=n&&this.__v&&(l&&this.__h.push(l),m(this))},_.prototype.forceUpdate=function(n){this.__v&&(this.__e=!0,n&&this.__h.push(n),m(this))},_.prototype.render=d,t=[],r=\"function\"==typeof Promise?Promise.prototype.then.bind(Promise.resolve()):setTimeout,g.__r=0,f=0;export{S as render,q as hydrate,v as createElement,v as h,d as Fragment,p as createRef,i as isValidElement,_ as Component,B as cloneElement,D as createContext,A as toChildArray,l as options};\n//# sourceMappingURL=preact.module.js.map\n", "export const EMPTY_OBJ = {};\r\nexport const EMPTY_ARR = [];\r\nexport const IS_NON_DIMENSIONAL = /acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i;\r\n", "import { EMPTY_ARR } from \"./constants\";\r\n\r\n/**\r\n * Assign properties from `props` to `obj`\r\n * @template O, P The obj and props types\r\n * @param {O} obj The object to copy properties to\r\n * @param {P} props The object to copy properties from\r\n * @returns {O & P}\r\n */\r\nexport function assign(obj, props) {\r\n\t// @ts-ignore We change the type of `obj` to be `O & P`\r\n\tfor (let i in props) obj[i] = props[i];\r\n\treturn /** @type {O & P} */ (obj);\r\n}\r\n\r\n/**\r\n * Remove a child node from its parent if attached. This is a workaround for\r\n * IE11 which doesn't support `Element.prototype.remove()`. Using this function\r\n * is smaller than including a dedicated polyfill.\r\n * @param {Node} node The node to remove\r\n */\r\nexport function removeNode(node) {\r\n\tlet parentNode = node.parentNode;\r\n\tif (parentNode) parentNode.removeChild(node);\r\n}\r\n\r\nexport const slice = EMPTY_ARR.slice;\r\n", "import { _catchError } from './diff/catch-error';\r\n\r\n/**\r\n * The `option` object can potentially contain callback functions\r\n * that are called during various stages of our renderer. This is the\r\n * foundation on which all our addons like `preact/debug`, `preact/compat`,\r\n * and `preact/hooks` are based on. See the `Options` type in `internal.d.ts`\r\n * for a full list of available option hooks (most editors/IDEs allow you to\r\n * ctrl+click or cmd+click on mac the type definition below).\r\n * @type {import('./internal').Options}\r\n */\r\nconst options = {\r\n\t_catchError\r\n};\r\n\r\nexport default options;\r\n", "import { slice } from './util';\r\nimport options from './options';\r\n\r\nlet vnodeId = 0;\r\n\r\n/**\r\n * Create an virtual node (used for JSX)\r\n * @param {import('./internal').VNode[\"type\"]} type The node name or Component\r\n * constructor for this virtual node\r\n * @param {object | null | undefined} [props] The properties of the virtual node\r\n * @param {Array<import('.').ComponentChildren>} [children] The children of the virtual node\r\n * @returns {import('./internal').VNode}\r\n */\r\nexport function createElement(type, props, children) {\r\n\tlet normalizedProps = {},\r\n\t\tkey,\r\n\t\tref,\r\n\t\ti;\r\n\tfor (i in props) {\r\n\t\tif (i == 'key') key = props[i];\r\n\t\telse if (i == 'ref') ref = props[i];\r\n\t\telse normalizedProps[i] = props[i];\r\n\t}\r\n\r\n\tif (arguments.length > 2) {\r\n\t\tnormalizedProps.children =\r\n\t\t\targuments.length > 3 ? slice.call(arguments, 2) : children;\r\n\t}\r\n\r\n\t// If a Component VNode, check for and apply defaultProps\r\n\t// Note: type may be undefined in development, must never error here.\r\n\tif (typeof type == 'function' && type.defaultProps != null) {\r\n\t\tfor (i in type.defaultProps) {\r\n\t\t\tif (normalizedProps[i] === undefined) {\r\n\t\t\t\tnormalizedProps[i] = type.defaultProps[i];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn createVNode(type, normalizedProps, key, ref, null);\r\n}\r\n\r\n/**\r\n * Create a VNode (used internally by Preact)\r\n * @param {import('./internal').VNode[\"type\"]} type The node name or Component\r\n * Constructor for this virtual node\r\n * @param {object | string | number | null} props The properties of this virtual node.\r\n * If this virtual node represents a text node, this is the text of the node (string or number).\r\n * @param {string | number | null} key The key for this virtual node, used when\r\n * diffing it against its children\r\n * @param {import('./internal').VNode[\"ref\"]} ref The ref property that will\r\n * receive a reference to its created child\r\n * @returns {import('./internal').VNode}\r\n */\r\nexport function createVNode(type, props, key, ref, original) {\r\n\t// V8 seems to be better at detecting type shapes if the object is allocated from the same call site\r\n\t// Do not inline into createElement and coerceToVNode!\r\n\tconst vnode = {\r\n\t\ttype,\r\n\t\tprops,\r\n\t\tkey,\r\n\t\tref,\r\n\t\t_children: null,\r\n\t\t_parent: null,\r\n\t\t_depth: 0,\r\n\t\t_dom: null,\r\n\t\t// _nextDom must be initialized to undefined b/c it will eventually\r\n\t\t// be set to dom.nextSibling which can return `null` and it is important\r\n\t\t// to be able to distinguish between an uninitialized _nextDom and\r\n\t\t// a _nextDom that has been set to `null`\r\n\t\t_nextDom: undefined,\r\n\t\t_component: null,\r\n\t\t_hydrating: null,\r\n\t\tconstructor: undefined,\r\n\t\t_original: original == null ? ++vnodeId : original\r\n\t};\r\n\r\n\t// Only invoke the vnode hook if this was *not* a direct copy:\r\n\tif (original == null && options.vnode != null) options.vnode(vnode);\r\n\r\n\treturn vnode;\r\n}\r\n\r\nexport function createRef() {\r\n\treturn { current: null };\r\n}\r\n\r\nexport function Fragment(props) {\r\n\treturn props.children;\r\n}\r\n\r\n/**\r\n * Check if a the argument is a valid Preact VNode.\r\n * @param {*} vnode\r\n * @returns {vnode is import('./internal').VNode}\r\n */\r\nexport const isValidElement = vnode =>\r\n\tvnode != null && vnode.constructor === undefined;\r\n", "import { assign } from './util';\r\nimport { diff, commitRoot } from './diff/index';\r\nimport options from './options';\r\nimport { Fragment } from './create-element';\r\n\r\n/**\r\n * Base Component class. Provides `setState()` and `forceUpdate()`, which\r\n * trigger rendering\r\n * @param {object} props The initial component props\r\n * @param {object} context The initial context from parent components'\r\n * getChildContext\r\n */\r\nexport function Component(props, context) {\r\n\tthis.props = props;\r\n\tthis.context = context;\r\n}\r\n\r\n/**\r\n * Update component state and schedule a re-render.\r\n * @this {import('./internal').Component}\r\n * @param {object | ((s: object, p: object) => object)} update A hash of state\r\n * properties to update with new values or a function that given the current\r\n * state and props returns a new partial state\r\n * @param {() => void} [callback] A function to be called once component state is\r\n * updated\r\n */\r\nComponent.prototype.setState = function(update, callback) {\r\n\t// only clone state when copying to nextState the first time.\r\n\tlet s;\r\n\tif (this._nextState != null && this._nextState !== this.state) {\r\n\t\ts = this._nextState;\r\n\t} else {\r\n\t\ts = this._nextState = assign({}, this.state);\r\n\t}\r\n\r\n\tif (typeof update == 'function') {\r\n\t\t// Some libraries like `immer` mark the current state as readonly,\r\n\t\t// preventing us from mutating it, so we need to clone it. See #2716\r\n\t\tupdate = update(assign({}, s), this.props);\r\n\t}\r\n\r\n\tif (update) {\r\n\t\tassign(s, update);\r\n\t}\r\n\r\n\t// Skip update if updater function returned null\r\n\tif (update == null) return;\r\n\r\n\tif (this._vnode) {\r\n\t\tif (callback) this._renderCallbacks.push(callback);\r\n\t\tenqueueRender(this);\r\n\t}\r\n};\r\n\r\n/**\r\n * Immediately perform a synchronous re-render of the component\r\n * @this {import('./internal').Component}\r\n * @param {() => void} [callback] A function to be called after component is\r\n * re-rendered\r\n */\r\nComponent.prototype.forceUpdate = function(callback) {\r\n\tif (this._vnode) {\r\n\t\t// Set render mode so that we can differentiate where the render request\r\n\t\t// is coming from. We need this because forceUpdate should never call\r\n\t\t// shouldComponentUpdate\r\n\t\tthis._force = true;\r\n\t\tif (callback) this._renderCallbacks.push(callback);\r\n\t\tenqueueRender(this);\r\n\t}\r\n};\r\n\r\n/**\r\n * Accepts `props` and `state`, and returns a new Virtual DOM tree to build.\r\n * Virtual DOM is generally constructed via [JSX](http://jasonformat.com/wtf-is-jsx).\r\n * @param {object} props Props (eg: JSX attributes) received from parent\r\n * element/component\r\n * @param {object} state The component's current state\r\n * @param {object} context Context object, as returned by the nearest\r\n * ancestor's `getChildContext()`\r\n * @returns {import('./index').ComponentChildren | void}\r\n */\r\nComponent.prototype.render = Fragment;\r\n\r\n/**\r\n * @param {import('./internal').VNode} vnode\r\n * @param {number | null} [childIndex]\r\n */\r\nexport function getDomSibling(vnode, childIndex) {\r\n\tif (childIndex == null) {\r\n\t\t// Use childIndex==null as a signal to resume the search from the vnode's sibling\r\n\t\treturn vnode._parent\r\n\t\t\t? getDomSibling(vnode._parent, vnode._parent._children.indexOf(vnode) + 1)\r\n\t\t\t: null;\r\n\t}\r\n\r\n\tlet sibling;\r\n\tfor (; childIndex < vnode._children.length; childIndex++) {\r\n\t\tsibling = vnode._children[childIndex];\r\n\r\n\t\tif (sibling != null && sibling._dom != null) {\r\n\t\t\t// Since updateParentDomPointers keeps _dom pointer correct,\r\n\t\t\t// we can rely on _dom to tell us if this subtree contains a\r\n\t\t\t// rendered DOM node, and what the first rendered DOM node is\r\n\t\t\treturn sibling._dom;\r\n\t\t}\r\n\t}\r\n\r\n\t// If we get here, we have not found a DOM node in this vnode's children.\r\n\t// We must resume from this vnode's sibling (in it's parent _children array)\r\n\t// Only climb up and search the parent if we aren't searching through a DOM\r\n\t// VNode (meaning we reached the DOM parent of the original vnode that began\r\n\t// the search)\r\n\treturn typeof vnode.type == 'function' ? getDomSibling(vnode) : null;\r\n}\r\n\r\n/**\r\n * Trigger in-place re-rendering of a component.\r\n * @param {import('./internal').Component} component The component to rerender\r\n */\r\nfunction renderComponent(component) {\r\n\tlet vnode = component._vnode,\r\n\t\toldDom = vnode._dom,\r\n\t\tparentDom = component._parentDom;\r\n\r\n\tif (parentDom) {\r\n\t\tlet commitQueue = [];\r\n\t\tconst oldVNode = assign({}, vnode);\r\n\t\toldVNode._original = vnode._original + 1;\r\n\r\n\t\tdiff(\r\n\t\t\tparentDom,\r\n\t\t\tvnode,\r\n\t\t\toldVNode,\r\n\t\t\tcomponent._globalContext,\r\n\t\t\tparentDom.ownerSVGElement !== undefined,\r\n\t\t\tvnode._hydrating != null ? [oldDom] : null,\r\n\t\t\tcommitQueue,\r\n\t\t\toldDom == null ? getDomSibling(vnode) : oldDom,\r\n\t\t\tvnode._hydrating\r\n\t\t);\r\n\t\tcommitRoot(commitQueue, vnode);\r\n\r\n\t\tif (vnode._dom != oldDom) {\r\n\t\t\tupdateParentDomPointers(vnode);\r\n\t\t}\r\n\t}\r\n}\r\n\r\n/**\r\n * @param {import('./internal').VNode} vnode\r\n */\r\nfunction updateParentDomPointers(vnode) {\r\n\tif ((vnode = vnode._parent) != null && vnode._component != null) {\r\n\t\tvnode._dom = vnode._component.base = null;\r\n\t\tfor (let i = 0; i < vnode._children.length; i++) {\r\n\t\t\tlet child = vnode._children[i];\r\n\t\t\tif (child != null && child._dom != null) {\r\n\t\t\t\tvnode._dom = vnode._component.base = child._dom;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn updateParentDomPointers(vnode);\r\n\t}\r\n}\r\n\r\n/**\r\n * The render queue\r\n * @type {Array<import('./internal').Component>}\r\n */\r\nlet rerenderQueue = [];\r\n\r\n/**\r\n * Asynchronously schedule a callback\r\n * @type {(cb: () => void) => void}\r\n */\r\n/* istanbul ignore next */\r\n// Note the following line isn't tree-shaken by rollup cuz of rollup/rollup#2566\r\nconst defer =\r\n\ttypeof Promise == 'function'\r\n\t\t? Promise.prototype.then.bind(Promise.resolve())\r\n\t\t: setTimeout;\r\n\r\n/*\r\n * The value of `Component.debounce` must asynchronously invoke the passed in callback. It is\r\n * important that contributors to Preact can consistently reason about what calls to `setState`, etc.\r\n * do, and when their effects will be applied. See the links below for some further reading on designing\r\n * asynchronous APIs.\r\n * * [Designing APIs for Asynchrony](https://blog.izs.me/2013/08/designing-apis-for-asynchrony)\r\n * * [Callbacks synchronous and asynchronous](https://blog.ometer.com/2011/07/24/callbacks-synchronous-and-asynchronous/)\r\n */\r\n\r\nlet prevDebounce;\r\n\r\n/**\r\n * Enqueue a rerender of a component\r\n * @param {import('./internal').Component} c The component to rerender\r\n */\r\nexport function enqueueRender(c) {\r\n\tif (\r\n\t\t(!c._dirty &&\r\n\t\t\t(c._dirty = true) &&\r\n\t\t\trerenderQueue.push(c) &&\r\n\t\t\t!process._rerenderCount++) ||\r\n\t\tprevDebounce !== options.debounceRendering\r\n\t) {\r\n\t\tprevDebounce = options.debounceRendering;\r\n\t\t(prevDebounce || defer)(process);\r\n\t}\r\n}\r\n\r\n/** Flush the render queue by rerendering all queued components */\r\nfunction process() {\r\n\tlet queue;\r\n\twhile ((process._rerenderCount = rerenderQueue.length)) {\r\n\t\tqueue = rerenderQueue.sort((a, b) => a._vnode._depth - b._vnode._depth);\r\n\t\trerenderQueue = [];\r\n\t\t// Don't update `renderCount` yet. Keep its value non-zero to prevent unnecessary\r\n\t\t// process() calls from getting scheduled while `queue` is still being consumed.\r\n\t\tqueue.some(c => {\r\n\t\t\tif (c._dirty) renderComponent(c);\r\n\t\t});\r\n\t}\r\n}\r\nprocess._rerenderCount = 0;\r\n", "import { enqueueRender } from './component';\r\n\r\nexport let i = 0;\r\n\r\nexport function createContext(defaultValue, contextId) {\r\n\tcontextId = '__cC' + i++;\r\n\r\n\tconst context = {\r\n\t\t_id: contextId,\r\n\t\t_defaultValue: defaultValue,\r\n\t\t/** @type {import('./internal').FunctionComponent} */\r\n\t\tConsumer(props, contextValue) {\r\n\t\t\t// return props.children(\r\n\t\t\t// \tcontext[contextId] ? context[contextId].props.value : defaultValue\r\n\t\t\t// );\r\n\t\t\treturn props.children(contextValue);\r\n\t\t},\r\n\t\t/** @type {import('./internal').FunctionComponent} */\r\n\t\tProvider(props) {\r\n\t\t\tif (!this.getChildContext) {\r\n\t\t\t\tlet subs = [];\r\n\t\t\t\tlet ctx = {};\r\n\t\t\t\tctx[contextId] = this;\r\n\r\n\t\t\t\tthis.getChildContext = () => ctx;\r\n\r\n\t\t\t\tthis.shouldComponentUpdate = function(_props) {\r\n\t\t\t\t\tif (this.props.value !== _props.value) {\r\n\t\t\t\t\t\t// I think the forced value propagation here was only needed when `options.debounceRendering` was being bypassed:\r\n\t\t\t\t\t\t// https://github.com/preactjs/preact/commit/4d339fb803bea09e9f198abf38ca1bf8ea4b7771#diff-54682ce380935a717e41b8bfc54737f6R358\r\n\t\t\t\t\t\t// In those cases though, even with the value corrected, we're double-rendering all nodes.\r\n\t\t\t\t\t\t// It might be better to just tell folks not to use force-sync mode.\r\n\t\t\t\t\t\t// Currently, using `useContext()` in a class component will overwrite its `this.context` value.\r\n\t\t\t\t\t\t// subs.some(c => {\r\n\t\t\t\t\t\t// \tc.context = _props.value;\r\n\t\t\t\t\t\t// \tenqueueRender(c);\r\n\t\t\t\t\t\t// });\r\n\r\n\t\t\t\t\t\t// subs.some(c => {\r\n\t\t\t\t\t\t// \tc.context[contextId] = _props.value;\r\n\t\t\t\t\t\t// \tenqueueRender(c);\r\n\t\t\t\t\t\t// });\r\n\t\t\t\t\t\tsubs.some(enqueueRender);\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\r\n\t\t\t\tthis.sub = c => {\r\n\t\t\t\t\tsubs.push(c);\r\n\t\t\t\t\tlet old = c.componentWillUnmount;\r\n\t\t\t\t\tc.componentWillUnmount = () => {\r\n\t\t\t\t\t\tsubs.splice(subs.indexOf(c), 1);\r\n\t\t\t\t\t\tif (old) old.call(c);\r\n\t\t\t\t\t};\r\n\t\t\t\t};\r\n\t\t\t}\r\n\r\n\t\t\treturn props.children;\r\n\t\t}\r\n\t};\r\n\r\n\t// Devtools needs access to the context object when it\r\n\t// encounters a Provider. This is necessary to support\r\n\t// setting `displayName` on the context object instead\r\n\t// of on the component itself. See:\r\n\t// https://reactjs.org/docs/context.html#contextdisplayname\r\n\r\n\treturn (context.Provider._contextRef = context.Consumer.contextType = context);\r\n}\r\n", "import { diff, unmount, applyRef } from './index';\r\nimport { createVNode, Fragment } from '../create-element';\r\nimport { EMPTY_OBJ, EMPTY_ARR } from '../constants';\r\nimport { getDomSibling } from '../component';\r\n\r\n/**\r\n * Diff the children of a virtual node\r\n * @param {import('../internal').PreactElement} parentDom The DOM element whose\r\n * children are being diffed\r\n * @param {import('../internal').ComponentChildren[]} renderResult\r\n * @param {import('../internal').VNode} newParentVNode The new virtual\r\n * node whose children should be diff'ed against oldParentVNode\r\n * @param {import('../internal').VNode} oldParentVNode The old virtual\r\n * node whose children should be diff'ed against newParentVNode\r\n * @param {object} globalContext The current context object - modified by getChildContext\r\n * @param {boolean} isSvg Whether or not this DOM node is an SVG node\r\n * @param {Array<import('../internal').PreactElement>} excessDomChildren\r\n * @param {Array<import('../internal').Component>} commitQueue List of components\r\n * which have callbacks to invoke in commitRoot\r\n * @param {import('../internal').PreactElement} oldDom The current attached DOM\r\n * element any new dom elements should be placed around. Likely `null` on first\r\n * render (except when hydrating). Can be a sibling DOM element when diffing\r\n * Fragments that have siblings. In most cases, it starts out as `oldChildren[0]._dom`.\r\n * @param {boolean} isHydrating Whether or not we are in hydration\r\n */\r\nexport function diffChildren(\r\n\tparentDom,\r\n\trenderResult,\r\n\tnewParentVNode,\r\n\toldParentVNode,\r\n\tglobalContext,\r\n\tisSvg,\r\n\texcessDomChildren,\r\n\tcommitQueue,\r\n\toldDom,\r\n\tisHydrating\r\n) {\r\n\tlet i, j, oldVNode, childVNode, newDom, firstChildDom, refs;\r\n\r\n\t// This is a compression of oldParentVNode!=null && oldParentVNode != EMPTY_OBJ && oldParentVNode._children || EMPTY_ARR\r\n\t// as EMPTY_OBJ._children should be `undefined`.\r\n\tlet oldChildren = (oldParentVNode && oldParentVNode._children) || EMPTY_ARR;\r\n\r\n\tlet oldChildrenLength = oldChildren.length;\r\n\r\n\tnewParentVNode._children = [];\r\n\tfor (i = 0; i < renderResult.length; i++) {\r\n\t\tchildVNode = renderResult[i];\r\n\r\n\t\tif (childVNode == null || typeof childVNode == 'boolean') {\r\n\t\t\tchildVNode = newParentVNode._children[i] = null;\r\n\t\t}\r\n\t\t// If this newVNode is being reused (e.g. <div>{reuse}{reuse}</div>) in the same diff,\r\n\t\t// or we are rendering a component (e.g. setState) copy the oldVNodes so it can have\r\n\t\t// it's own DOM & etc. pointers\r\n\t\telse if (\r\n\t\t\ttypeof childVNode == 'string' ||\r\n\t\t\ttypeof childVNode == 'number' ||\r\n\t\t\t// eslint-disable-next-line valid-typeof\r\n\t\t\ttypeof childVNode == 'bigint'\r\n\t\t) {\r\n\t\t\tchildVNode = newParentVNode._children[i] = createVNode(\r\n\t\t\t\tnull,\r\n\t\t\t\tchildVNode,\r\n\t\t\t\tnull,\r\n\t\t\t\tnull,\r\n\t\t\t\tchildVNode\r\n\t\t\t);\r\n\t\t} else if (Array.isArray(childVNode)) {\r\n\t\t\tchildVNode = newParentVNode._children[i] = createVNode(\r\n\t\t\t\tFragment,\r\n\t\t\t\t{ children: childVNode },\r\n\t\t\t\tnull,\r\n\t\t\t\tnull,\r\n\t\t\t\tnull\r\n\t\t\t);\r\n\t\t} else if (childVNode._depth > 0) {\r\n\t\t\t// VNode is already in use, clone it. This can happen in the following\r\n\t\t\t// scenario:\r\n\t\t\t//   const reuse = <div />\r\n\t\t\t//   <div>{reuse}<span />{reuse}</div>\r\n\t\t\tchildVNode = newParentVNode._children[i] = createVNode(\r\n\t\t\t\tchildVNode.type,\r\n\t\t\t\tchildVNode.props,\r\n\t\t\t\tchildVNode.key,\r\n\t\t\t\tnull,\r\n\t\t\t\tchildVNode._original\r\n\t\t\t);\r\n\t\t} else {\r\n\t\t\tchildVNode = newParentVNode._children[i] = childVNode;\r\n\t\t}\r\n\r\n\t\t// Terser removes the `continue` here and wraps the loop body\r\n\t\t// in a `if (childVNode) { ... } condition\r\n\t\tif (childVNode == null) {\r\n\t\t\tcontinue;\r\n\t\t}\r\n\r\n\t\tchildVNode._parent = newParentVNode;\r\n\t\tchildVNode._depth = newParentVNode._depth + 1;\r\n\r\n\t\t// Check if we find a corresponding element in oldChildren.\r\n\t\t// If found, delete the array item by setting to `undefined`.\r\n\t\t// We use `undefined`, as `null` is reserved for empty placeholders\r\n\t\t// (holes).\r\n\t\toldVNode = oldChildren[i];\r\n\r\n\t\tif (\r\n\t\t\toldVNode === null ||\r\n\t\t\t(oldVNode &&\r\n\t\t\t\tchildVNode.key == oldVNode.key &&\r\n\t\t\t\tchildVNode.type === oldVNode.type)\r\n\t\t) {\r\n\t\t\toldChildren[i] = undefined;\r\n\t\t} else {\r\n\t\t\t// Either oldVNode === undefined or oldChildrenLength > 0,\r\n\t\t\t// so after this loop oldVNode == null or oldVNode is a valid value.\r\n\t\t\tfor (j = 0; j < oldChildrenLength; j++) {\r\n\t\t\t\toldVNode = oldChildren[j];\r\n\t\t\t\t// If childVNode is unkeyed, we only match similarly unkeyed nodes, otherwise we match by key.\r\n\t\t\t\t// We always match by type (in either case).\r\n\t\t\t\tif (\r\n\t\t\t\t\toldVNode &&\r\n\t\t\t\t\tchildVNode.key == oldVNode.key &&\r\n\t\t\t\t\tchildVNode.type === oldVNode.type\r\n\t\t\t\t) {\r\n\t\t\t\t\toldChildren[j] = undefined;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\toldVNode = null;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\toldVNode = oldVNode || EMPTY_OBJ;\r\n\r\n\t\t// Morph the old element into the new one, but don't append it to the dom yet\r\n\t\tdiff(\r\n\t\t\tparentDom,\r\n\t\t\tchildVNode,\r\n\t\t\toldVNode,\r\n\t\t\tglobalContext,\r\n\t\t\tisSvg,\r\n\t\t\texcessDomChildren,\r\n\t\t\tcommitQueue,\r\n\t\t\toldDom,\r\n\t\t\tisHydrating\r\n\t\t);\r\n\r\n\t\tnewDom = childVNode._dom;\r\n\r\n\t\tif ((j = childVNode.ref) && oldVNode.ref != j) {\r\n\t\t\tif (!refs) refs = [];\r\n\t\t\tif (oldVNode.ref) refs.push(oldVNode.ref, null, childVNode);\r\n\t\t\trefs.push(j, childVNode._component || newDom, childVNode);\r\n\t\t}\r\n\r\n\t\tif (newDom != null) {\r\n\t\t\tif (firstChildDom == null) {\r\n\t\t\t\tfirstChildDom = newDom;\r\n\t\t\t}\r\n\r\n\t\t\tif (\r\n\t\t\t\ttypeof childVNode.type == 'function' &&\r\n\t\t\t\tchildVNode._children === oldVNode._children\r\n\t\t\t) {\r\n\t\t\t\tchildVNode._nextDom = oldDom = reorderChildren(\r\n\t\t\t\t\tchildVNode,\r\n\t\t\t\t\toldDom,\r\n\t\t\t\t\tparentDom\r\n\t\t\t\t);\r\n\t\t\t} else {\r\n\t\t\t\toldDom = placeChild(\r\n\t\t\t\t\tparentDom,\r\n\t\t\t\t\tchildVNode,\r\n\t\t\t\t\toldVNode,\r\n\t\t\t\t\toldChildren,\r\n\t\t\t\t\tnewDom,\r\n\t\t\t\t\toldDom\r\n\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\tif (typeof newParentVNode.type == 'function') {\r\n\t\t\t\t// Because the newParentVNode is Fragment-like, we need to set it's\r\n\t\t\t\t// _nextDom property to the nextSibling of its last child DOM node.\r\n\t\t\t\t//\r\n\t\t\t\t// `oldDom` contains the correct value here because if the last child\r\n\t\t\t\t// is a Fragment-like, then oldDom has already been set to that child's _nextDom.\r\n\t\t\t\t// If the last child is a DOM VNode, then oldDom will be set to that DOM\r\n\t\t\t\t// node's nextSibling.\r\n\t\t\t\tnewParentVNode._nextDom = oldDom;\r\n\t\t\t}\r\n\t\t} else if (\r\n\t\t\toldDom &&\r\n\t\t\toldVNode._dom == oldDom &&\r\n\t\t\toldDom.parentNode != parentDom\r\n\t\t) {\r\n\t\t\t// The above condition is to handle null placeholders. See test in placeholder.test.js:\r\n\t\t\t// `efficiently replace null placeholders in parent rerenders`\r\n\t\t\toldDom = getDomSibling(oldVNode);\r\n\t\t}\r\n\t}\r\n\r\n\tnewParentVNode._dom = firstChildDom;\r\n\r\n\t// Remove remaining oldChildren if there are any.\r\n\tfor (i = oldChildrenLength; i--; ) {\r\n\t\tif (oldChildren[i] != null) {\r\n\t\t\tif (\r\n\t\t\t\ttypeof newParentVNode.type == 'function' &&\r\n\t\t\t\toldChildren[i]._dom != null &&\r\n\t\t\t\toldChildren[i]._dom == newParentVNode._nextDom\r\n\t\t\t) {\r\n\t\t\t\t// If the newParentVNode.__nextDom points to a dom node that is about to\r\n\t\t\t\t// be unmounted, then get the next sibling of that vnode and set\r\n\t\t\t\t// _nextDom to it\r\n\t\t\t\tnewParentVNode._nextDom = getDomSibling(oldParentVNode, i + 1);\r\n\t\t\t}\r\n\r\n\t\t\tunmount(oldChildren[i], oldChildren[i]);\r\n\t\t}\r\n\t}\r\n\r\n\t// Set refs only after unmount\r\n\tif (refs) {\r\n\t\tfor (i = 0; i < refs.length; i++) {\r\n\t\t\tapplyRef(refs[i], refs[++i], refs[++i]);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nfunction reorderChildren(childVNode, oldDom, parentDom) {\r\n\t// Note: VNodes in nested suspended trees may be missing _children.\r\n\tlet c = childVNode._children;\r\n\tlet tmp = 0;\r\n\tfor (; c && tmp < c.length; tmp++) {\r\n\t\tlet vnode = c[tmp];\r\n\t\tif (vnode) {\r\n\t\t\t// We typically enter this code path on sCU bailout, where we copy\r\n\t\t\t// oldVNode._children to newVNode._children. If that is the case, we need\r\n\t\t\t// to update the old children's _parent pointer to point to the newVNode\r\n\t\t\t// (childVNode here).\r\n\t\t\tvnode._parent = childVNode;\r\n\r\n\t\t\tif (typeof vnode.type == 'function') {\r\n\t\t\t\toldDom = reorderChildren(vnode, oldDom, parentDom);\r\n\t\t\t} else {\r\n\t\t\t\toldDom = placeChild(\r\n\t\t\t\t\tparentDom,\r\n\t\t\t\t\tvnode,\r\n\t\t\t\t\tvnode,\r\n\t\t\t\t\tc,\r\n\t\t\t\t\tvnode._dom,\r\n\t\t\t\t\toldDom\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn oldDom;\r\n}\r\n\r\n/**\r\n * Flatten and loop through the children of a virtual node\r\n * @param {import('../index').ComponentChildren} children The unflattened\r\n * children of a virtual node\r\n * @returns {import('../internal').VNode[]}\r\n */\r\nexport function toChildArray(children, out) {\r\n\tout = out || [];\r\n\tif (children == null || typeof children == 'boolean') {\r\n\t} else if (Array.isArray(children)) {\r\n\t\tchildren.some(child => {\r\n\t\t\ttoChildArray(child, out);\r\n\t\t});\r\n\t} else {\r\n\t\tout.push(children);\r\n\t}\r\n\treturn out;\r\n}\r\n\r\nfunction placeChild(\r\n\tparentDom,\r\n\tchildVNode,\r\n\toldVNode,\r\n\toldChildren,\r\n\tnewDom,\r\n\toldDom\r\n) {\r\n\tlet nextDom;\r\n\tif (childVNode._nextDom !== undefined) {\r\n\t\t// Only Fragments or components that return Fragment like VNodes will\r\n\t\t// have a non-undefined _nextDom. Continue the diff from the sibling\r\n\t\t// of last DOM child of this child VNode\r\n\t\tnextDom = childVNode._nextDom;\r\n\r\n\t\t// Eagerly cleanup _nextDom. We don't need to persist the value because\r\n\t\t// it is only used by `diffChildren` to determine where to resume the diff after\r\n\t\t// diffing Components and Fragments. Once we store it the nextDOM local var, we\r\n\t\t// can clean up the property\r\n\t\tchildVNode._nextDom = undefined;\r\n\t} else if (\r\n\t\toldVNode == null ||\r\n\t\tnewDom != oldDom ||\r\n\t\tnewDom.parentNode == null\r\n\t) {\r\n\t\touter: if (oldDom == null || oldDom.parentNode !== parentDom) {\r\n\t\t\tparentDom.appendChild(newDom);\r\n\t\t\tnextDom = null;\r\n\t\t} else {\r\n\t\t\t// `j<oldChildrenLength; j+=2` is an alternative to `j++<oldChildrenLength/2`\r\n\t\t\tfor (\r\n\t\t\t\tlet sibDom = oldDom, j = 0;\r\n\t\t\t\t(sibDom = sibDom.nextSibling) && j < oldChildren.length;\r\n\t\t\t\tj += 2\r\n\t\t\t) {\r\n\t\t\t\tif (sibDom == newDom) {\r\n\t\t\t\t\tbreak outer;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tparentDom.insertBefore(newDom, oldDom);\r\n\t\t\tnextDom = oldDom;\r\n\t\t}\r\n\t}\r\n\r\n\t// If we have pre-calculated the nextDOM node, use it. Else calculate it now\r\n\t// Strictly check for `undefined` here cuz `null` is a valid value of `nextDom`.\r\n\t// See more detail in create-element.js:createVNode\r\n\tif (nextDom !== undefined) {\r\n\t\toldDom = nextDom;\r\n\t} else {\r\n\t\toldDom = newDom.nextSibling;\r\n\t}\r\n\r\n\treturn oldDom;\r\n}\r\n", "import { IS_NON_DIMENSIONAL } from '../constants';\r\nimport options from '../options';\r\n\r\n/**\r\n * Diff the old and new properties of a VNode and apply changes to the DOM node\r\n * @param {import('../internal').PreactElement} dom The DOM node to apply\r\n * changes to\r\n * @param {object} newProps The new props\r\n * @param {object} oldProps The old props\r\n * @param {boolean} isSvg Whether or not this node is an SVG node\r\n * @param {boolean} hydrate Whether or not we are in hydration mode\r\n */\r\nexport function diffProps(dom, newProps, oldProps, isSvg, hydrate) {\r\n\tlet i;\r\n\r\n\tfor (i in oldProps) {\r\n\t\tif (i !== 'children' && i !== 'key' && !(i in newProps)) {\r\n\t\t\tsetProperty(dom, i, null, oldProps[i], isSvg);\r\n\t\t}\r\n\t}\r\n\r\n\tfor (i in newProps) {\r\n\t\tif (\r\n\t\t\t(!hydrate || typeof newProps[i] == 'function') &&\r\n\t\t\ti !== 'children' &&\r\n\t\t\ti !== 'key' &&\r\n\t\t\ti !== 'value' &&\r\n\t\t\ti !== 'checked' &&\r\n\t\t\toldProps[i] !== newProps[i]\r\n\t\t) {\r\n\t\t\tsetProperty(dom, i, newProps[i], oldProps[i], isSvg);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nfunction setStyle(style, key, value) {\r\n\tif (key[0] === '-') {\r\n\t\tstyle.setProperty(key, value);\r\n\t} else if (value == null) {\r\n\t\tstyle[key] = '';\r\n\t} else if (typeof value != 'number' || IS_NON_DIMENSIONAL.test(key)) {\r\n\t\tstyle[key] = value;\r\n\t} else {\r\n\t\tstyle[key] = value + 'px';\r\n\t}\r\n}\r\n\r\n/**\r\n * Set a property value on a DOM node\r\n * @param {import('../internal').PreactElement} dom The DOM node to modify\r\n * @param {string} name The name of the property to set\r\n * @param {*} value The value to set the property to\r\n * @param {*} oldValue The old value the property had\r\n * @param {boolean} isSvg Whether or not this DOM node is an SVG node or not\r\n */\r\nexport function setProperty(dom, name, value, oldValue, isSvg) {\r\n\tlet useCapture;\r\n\r\n\to: if (name === 'style') {\r\n\t\tif (typeof value == 'string') {\r\n\t\t\tdom.style.cssText = value;\r\n\t\t} else {\r\n\t\t\tif (typeof oldValue == 'string') {\r\n\t\t\t\tdom.style.cssText = oldValue = '';\r\n\t\t\t}\r\n\r\n\t\t\tif (oldValue) {\r\n\t\t\t\tfor (name in oldValue) {\r\n\t\t\t\t\tif (!(value && name in value)) {\r\n\t\t\t\t\t\tsetStyle(dom.style, name, '');\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (value) {\r\n\t\t\t\tfor (name in value) {\r\n\t\t\t\t\tif (!oldValue || value[name] !== oldValue[name]) {\r\n\t\t\t\t\t\tsetStyle(dom.style, name, value[name]);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t// Benchmark for comparison: https://esbench.com/bench/574c954bdb965b9a00965ac6\r\n\telse if (name[0] === 'o' && name[1] === 'n') {\r\n\t\tuseCapture = name !== (name = name.replace(/Capture$/, ''));\r\n\r\n\t\t// Infer correct casing for DOM built-in events:\r\n\t\tif (name.toLowerCase() in dom) name = name.toLowerCase().slice(2);\r\n\t\telse name = name.slice(2);\r\n\r\n\t\tif (!dom._listeners) dom._listeners = {};\r\n\t\tdom._listeners[name + useCapture] = value;\r\n\r\n\t\tif (value) {\r\n\t\t\tif (!oldValue) {\r\n\t\t\t\tconst handler = useCapture ? eventProxyCapture : eventProxy;\r\n\t\t\t\tdom.addEventListener(name, handler, useCapture);\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tconst handler = useCapture ? eventProxyCapture : eventProxy;\r\n\t\t\tdom.removeEventListener(name, handler, useCapture);\r\n\t\t}\r\n\t} else if (name !== 'dangerouslySetInnerHTML') {\r\n\t\tif (isSvg) {\r\n\t\t\t// Normalize incorrect prop usage for SVG:\r\n\t\t\t// - xlink:href / xlinkHref --> href (xlink:href was removed from SVG and isn't needed)\r\n\t\t\t// - className --> class\r\n\t\t\tname = name.replace(/xlink[H:h]/, 'h').replace(/sName$/, 's');\r\n\t\t} else if (\r\n\t\t\tname !== 'href' &&\r\n\t\t\tname !== 'list' &&\r\n\t\t\tname !== 'form' &&\r\n\t\t\t// Default value in browsers is `-1` and an empty string is\r\n\t\t\t// cast to `0` instead\r\n\t\t\tname !== 'tabIndex' &&\r\n\t\t\tname !== 'download' &&\r\n\t\t\tname in dom\r\n\t\t) {\r\n\t\t\ttry {\r\n\t\t\t\tdom[name] = value == null ? '' : value;\r\n\t\t\t\t// labelled break is 1b smaller here than a return statement (sorry)\r\n\t\t\t\tbreak o;\r\n\t\t\t} catch (e) {}\r\n\t\t}\r\n\r\n\t\t// ARIA-attributes have a different notion of boolean values.\r\n\t\t// The value `false` is different from the attribute not\r\n\t\t// existing on the DOM, so we can't remove it. For non-boolean\r\n\t\t// ARIA-attributes we could treat false as a removal, but the\r\n\t\t// amount of exceptions would cost us too many bytes. On top of\r\n\t\t// that other VDOM frameworks also always stringify `false`.\r\n\r\n\t\tif (typeof value === 'function') {\r\n\t\t\t// never serialize functions as attribute values\r\n\t\t} else if (\r\n\t\t\tvalue != null &&\r\n\t\t\t(value !== false || (name[0] === 'a' && name[1] === 'r'))\r\n\t\t) {\r\n\t\t\tdom.setAttribute(name, value);\r\n\t\t} else {\r\n\t\t\tdom.removeAttribute(name);\r\n\t\t}\r\n\t}\r\n}\r\n\r\n/**\r\n * Proxy an event to hooked event handlers\r\n * @param {Event} e The event object from the browser\r\n * @private\r\n */\r\nfunction eventProxy(e) {\r\n\tthis._listeners[e.type + false](options.event ? options.event(e) : e);\r\n}\r\n\r\nfunction eventProxyCapture(e) {\r\n\tthis._listeners[e.type + true](options.event ? options.event(e) : e);\r\n}\r\n", "import { EMPTY_OBJ } from '../constants';\r\nimport { Component, getDomSibling } from '../component';\r\nimport { Fragment } from '../create-element';\r\nimport { diffChildren } from './children';\r\nimport { diffProps, setProperty } from './props';\r\nimport { assign, removeNode, slice } from '../util';\r\nimport options from '../options';\r\n\r\n/**\r\n * Diff two virtual nodes and apply proper changes to the DOM\r\n * @param {import('../internal').PreactElement} parentDom The parent of the DOM element\r\n * @param {import('../internal').VNode} newVNode The new virtual node\r\n * @param {import('../internal').VNode} oldVNode The old virtual node\r\n * @param {object} globalContext The current context object. Modified by getChildContext\r\n * @param {boolean} isSvg Whether or not this element is an SVG node\r\n * @param {Array<import('../internal').PreactElement>} excessDomChildren\r\n * @param {Array<import('../internal').Component>} commitQueue List of components\r\n * which have callbacks to invoke in commitRoot\r\n * @param {import('../internal').PreactElement} oldDom The current attached DOM\r\n * element any new dom elements should be placed around. Likely `null` on first\r\n * render (except when hydrating). Can be a sibling DOM element when diffing\r\n * Fragments that have siblings. In most cases, it starts out as `oldChildren[0]._dom`.\r\n * @param {boolean} [isHydrating] Whether or not we are in hydration\r\n */\r\nexport function diff(\r\n\tparentDom,\r\n\tnewVNode,\r\n\toldVNode,\r\n\tglobalContext,\r\n\tisSvg,\r\n\texcessDomChildren,\r\n\tcommitQueue,\r\n\toldDom,\r\n\tisHydrating\r\n) {\r\n\tlet tmp,\r\n\t\tnewType = newVNode.type;\r\n\r\n\t// When passing through createElement it assigns the object\r\n\t// constructor as undefined. This to prevent JSON-injection.\r\n\tif (newVNode.constructor !== undefined) return null;\r\n\r\n\t// If the previous diff bailed out, resume creating/hydrating.\r\n\tif (oldVNode._hydrating != null) {\r\n\t\tisHydrating = oldVNode._hydrating;\r\n\t\toldDom = newVNode._dom = oldVNode._dom;\r\n\t\t// if we resume, we want the tree to be \"unlocked\"\r\n\t\tnewVNode._hydrating = null;\r\n\t\texcessDomChildren = [oldDom];\r\n\t}\r\n\r\n\tif ((tmp = options._diff)) tmp(newVNode);\r\n\r\n\ttry {\r\n\t\touter: if (typeof newType == 'function') {\r\n\t\t\tlet c, isNew, oldProps, oldState, snapshot, clearProcessingException;\r\n\t\t\tlet newProps = newVNode.props;\r\n\r\n\t\t\t// Necessary for createContext api. Setting this property will pass\r\n\t\t\t// the context value as `this.context` just for this component.\r\n\t\t\ttmp = newType.contextType;\r\n\t\t\tlet provider = tmp && globalContext[tmp._id];\r\n\t\t\tlet componentContext = tmp\r\n\t\t\t\t? provider\r\n\t\t\t\t\t? provider.props.value\r\n\t\t\t\t\t: tmp._defaultValue\r\n\t\t\t\t: globalContext;\r\n\r\n\t\t\t// Get component and set it to `c`\r\n\t\t\tif (oldVNode._component) {\r\n\t\t\t\tc = newVNode._component = oldVNode._component;\r\n\t\t\t\tclearProcessingException = c._processingException = c._pendingError;\r\n\t\t\t} else {\r\n\t\t\t\t// Instantiate the new component\r\n\t\t\t\tif ('prototype' in newType && newType.prototype.render) {\r\n\t\t\t\t\t// @ts-ignore The check above verifies that newType is suppose to be constructed\r\n\t\t\t\t\tnewVNode._component = c = new newType(newProps, componentContext); // eslint-disable-line new-cap\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// @ts-ignore Trust me, Component implements the interface we want\r\n\t\t\t\t\tnewVNode._component = c = new Component(newProps, componentContext);\r\n\t\t\t\t\tc.constructor = newType;\r\n\t\t\t\t\tc.render = doRender;\r\n\t\t\t\t}\r\n\t\t\t\tif (provider) provider.sub(c);\r\n\r\n\t\t\t\tc.props = newProps;\r\n\t\t\t\tif (!c.state) c.state = {};\r\n\t\t\t\tc.context = componentContext;\r\n\t\t\t\tc._globalContext = globalContext;\r\n\t\t\t\tisNew = c._dirty = true;\r\n\t\t\t\tc._renderCallbacks = [];\r\n\t\t\t}\r\n\r\n\t\t\t// Invoke getDerivedStateFromProps\r\n\t\t\tif (c._nextState == null) {\r\n\t\t\t\tc._nextState = c.state;\r\n\t\t\t}\r\n\t\t\tif (newType.getDerivedStateFromProps != null) {\r\n\t\t\t\tif (c._nextState == c.state) {\r\n\t\t\t\t\tc._nextState = assign({}, c._nextState);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tassign(\r\n\t\t\t\t\tc._nextState,\r\n\t\t\t\t\tnewType.getDerivedStateFromProps(newProps, c._nextState)\r\n\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\toldProps = c.props;\r\n\t\t\toldState = c.state;\r\n\r\n\t\t\t// Invoke pre-render lifecycle methods\r\n\t\t\tif (isNew) {\r\n\t\t\t\tif (\r\n\t\t\t\t\tnewType.getDerivedStateFromProps == null &&\r\n\t\t\t\t\tc.componentWillMount != null\r\n\t\t\t\t) {\r\n\t\t\t\t\tc.componentWillMount();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (c.componentDidMount != null) {\r\n\t\t\t\t\tc._renderCallbacks.push(c.componentDidMount);\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tif (\r\n\t\t\t\t\tnewType.getDerivedStateFromProps == null &&\r\n\t\t\t\t\tnewProps !== oldProps &&\r\n\t\t\t\t\tc.componentWillReceiveProps != null\r\n\t\t\t\t) {\r\n\t\t\t\t\tc.componentWillReceiveProps(newProps, componentContext);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (\r\n\t\t\t\t\t(!c._force &&\r\n\t\t\t\t\t\tc.shouldComponentUpdate != null &&\r\n\t\t\t\t\t\tc.shouldComponentUpdate(\r\n\t\t\t\t\t\t\tnewProps,\r\n\t\t\t\t\t\t\tc._nextState,\r\n\t\t\t\t\t\t\tcomponentContext\r\n\t\t\t\t\t\t) === false) ||\r\n\t\t\t\t\tnewVNode._original === oldVNode._original\r\n\t\t\t\t) {\r\n\t\t\t\t\tc.props = newProps;\r\n\t\t\t\t\tc.state = c._nextState;\r\n\t\t\t\t\t// More info about this here: https://gist.github.com/JoviDeCroock/bec5f2ce93544d2e6070ef8e0036e4e8\r\n\t\t\t\t\tif (newVNode._original !== oldVNode._original) c._dirty = false;\r\n\t\t\t\t\tc._vnode = newVNode;\r\n\t\t\t\t\tnewVNode._dom = oldVNode._dom;\r\n\t\t\t\t\tnewVNode._children = oldVNode._children;\r\n\t\t\t\t\tnewVNode._children.forEach(vnode => {\r\n\t\t\t\t\t\tif (vnode) vnode._parent = newVNode;\r\n\t\t\t\t\t});\r\n\t\t\t\t\tif (c._renderCallbacks.length) {\r\n\t\t\t\t\t\tcommitQueue.push(c);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tbreak outer;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (c.componentWillUpdate != null) {\r\n\t\t\t\t\tc.componentWillUpdate(newProps, c._nextState, componentContext);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (c.componentDidUpdate != null) {\r\n\t\t\t\t\tc._renderCallbacks.push(() => {\r\n\t\t\t\t\t\tc.componentDidUpdate(oldProps, oldState, snapshot);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tc.context = componentContext;\r\n\t\t\tc.props = newProps;\r\n\t\t\tc.state = c._nextState;\r\n\r\n\t\t\tif ((tmp = options._render)) tmp(newVNode);\r\n\r\n\t\t\tc._dirty = false;\r\n\t\t\tc._vnode = newVNode;\r\n\t\t\tc._parentDom = parentDom;\r\n\r\n\t\t\ttmp = c.render(c.props, c.state, c.context);\r\n\r\n\t\t\t// Handle setState called in render, see #2553\r\n\t\t\tc.state = c._nextState;\r\n\r\n\t\t\tif (c.getChildContext != null) {\r\n\t\t\t\tglobalContext = assign(assign({}, globalContext), c.getChildContext());\r\n\t\t\t}\r\n\r\n\t\t\tif (!isNew && c.getSnapshotBeforeUpdate != null) {\r\n\t\t\t\tsnapshot = c.getSnapshotBeforeUpdate(oldProps, oldState);\r\n\t\t\t}\r\n\r\n\t\t\tlet isTopLevelFragment =\r\n\t\t\t\ttmp != null && tmp.type === Fragment && tmp.key == null;\r\n\t\t\tlet renderResult = isTopLevelFragment ? tmp.props.children : tmp;\r\n\r\n\t\t\tdiffChildren(\r\n\t\t\t\tparentDom,\r\n\t\t\t\tArray.isArray(renderResult) ? renderResult : [renderResult],\r\n\t\t\t\tnewVNode,\r\n\t\t\t\toldVNode,\r\n\t\t\t\tglobalContext,\r\n\t\t\t\tisSvg,\r\n\t\t\t\texcessDomChildren,\r\n\t\t\t\tcommitQueue,\r\n\t\t\t\toldDom,\r\n\t\t\t\tisHydrating\r\n\t\t\t);\r\n\r\n\t\t\tc.base = newVNode._dom;\r\n\r\n\t\t\t// We successfully rendered this VNode, unset any stored hydration/bailout state:\r\n\t\t\tnewVNode._hydrating = null;\r\n\r\n\t\t\tif (c._renderCallbacks.length) {\r\n\t\t\t\tcommitQueue.push(c);\r\n\t\t\t}\r\n\r\n\t\t\tif (clearProcessingException) {\r\n\t\t\t\tc._pendingError = c._processingException = null;\r\n\t\t\t}\r\n\r\n\t\t\tc._force = false;\r\n\t\t} else if (\r\n\t\t\texcessDomChildren == null &&\r\n\t\t\tnewVNode._original === oldVNode._original\r\n\t\t) {\r\n\t\t\tnewVNode._children = oldVNode._children;\r\n\t\t\tnewVNode._dom = oldVNode._dom;\r\n\t\t} else {\r\n\t\t\tnewVNode._dom = diffElementNodes(\r\n\t\t\t\toldVNode._dom,\r\n\t\t\t\tnewVNode,\r\n\t\t\t\toldVNode,\r\n\t\t\t\tglobalContext,\r\n\t\t\t\tisSvg,\r\n\t\t\t\texcessDomChildren,\r\n\t\t\t\tcommitQueue,\r\n\t\t\t\tisHydrating\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\tif ((tmp = options.diffed)) tmp(newVNode);\r\n\t} catch (e) {\r\n\t\tnewVNode._original = null;\r\n\t\t// if hydrating or creating initial tree, bailout preserves DOM:\r\n\t\tif (isHydrating || excessDomChildren != null) {\r\n\t\t\tnewVNode._dom = oldDom;\r\n\t\t\tnewVNode._hydrating = !!isHydrating;\r\n\t\t\texcessDomChildren[excessDomChildren.indexOf(oldDom)] = null;\r\n\t\t\t// ^ could possibly be simplified to:\r\n\t\t\t// excessDomChildren.length = 0;\r\n\t\t}\r\n\t\toptions._catchError(e, newVNode, oldVNode);\r\n\t}\r\n}\r\n\r\n/**\r\n * @param {Array<import('../internal').Component>} commitQueue List of components\r\n * which have callbacks to invoke in commitRoot\r\n * @param {import('../internal').VNode} root\r\n */\r\nexport function commitRoot(commitQueue, root) {\r\n\tif (options._commit) options._commit(root, commitQueue);\r\n\r\n\tcommitQueue.some(c => {\r\n\t\ttry {\r\n\t\t\t// @ts-ignore Reuse the commitQueue variable here so the type changes\r\n\t\t\tcommitQueue = c._renderCallbacks;\r\n\t\t\tc._renderCallbacks = [];\r\n\t\t\tcommitQueue.some(cb => {\r\n\t\t\t\t// @ts-ignore See above ts-ignore on commitQueue\r\n\t\t\t\tcb.call(c);\r\n\t\t\t});\r\n\t\t} catch (e) {\r\n\t\t\toptions._catchError(e, c._vnode);\r\n\t\t}\r\n\t});\r\n}\r\n\r\n/**\r\n * Diff two virtual nodes representing DOM element\r\n * @param {import('../internal').PreactElement} dom The DOM element representing\r\n * the virtual nodes being diffed\r\n * @param {import('../internal').VNode} newVNode The new virtual node\r\n * @param {import('../internal').VNode} oldVNode The old virtual node\r\n * @param {object} globalContext The current context object\r\n * @param {boolean} isSvg Whether or not this DOM node is an SVG node\r\n * @param {*} excessDomChildren\r\n * @param {Array<import('../internal').Component>} commitQueue List of components\r\n * which have callbacks to invoke in commitRoot\r\n * @param {boolean} isHydrating Whether or not we are in hydration\r\n * @returns {import('../internal').PreactElement}\r\n */\r\nfunction diffElementNodes(\r\n\tdom,\r\n\tnewVNode,\r\n\toldVNode,\r\n\tglobalContext,\r\n\tisSvg,\r\n\texcessDomChildren,\r\n\tcommitQueue,\r\n\tisHydrating\r\n) {\r\n\tlet oldProps = oldVNode.props;\r\n\tlet newProps = newVNode.props;\r\n\tlet nodeType = newVNode.type;\r\n\tlet i = 0;\r\n\r\n\t// Tracks entering and exiting SVG namespace when descending through the tree.\r\n\tif (nodeType === 'svg') isSvg = true;\r\n\r\n\tif (excessDomChildren != null) {\r\n\t\tfor (; i < excessDomChildren.length; i++) {\r\n\t\t\tconst child = excessDomChildren[i];\r\n\r\n\t\t\t// if newVNode matches an element in excessDomChildren or the `dom`\r\n\t\t\t// argument matches an element in excessDomChildren, remove it from\r\n\t\t\t// excessDomChildren so it isn't later removed in diffChildren\r\n\t\t\tif (\r\n\t\t\t\tchild &&\r\n\t\t\t\t'setAttribute' in child === !!nodeType &&\r\n\t\t\t\t(nodeType ? child.localName === nodeType : child.nodeType === 3)\r\n\t\t\t) {\r\n\t\t\t\tdom = child;\r\n\t\t\t\texcessDomChildren[i] = null;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (dom == null) {\r\n\t\tif (nodeType === null) {\r\n\t\t\t// @ts-ignore createTextNode returns Text, we expect PreactElement\r\n\t\t\treturn document.createTextNode(newProps);\r\n\t\t}\r\n\r\n\t\tif (isSvg) {\r\n\t\t\tdom = document.createElementNS(\r\n\t\t\t\t'http://www.w3.org/2000/svg',\r\n\t\t\t\t// @ts-ignore We know `newVNode.type` is a string\r\n\t\t\t\tnodeType\r\n\t\t\t);\r\n\t\t} else {\r\n\t\t\tdom = document.createElement(\r\n\t\t\t\t// @ts-ignore We know `newVNode.type` is a string\r\n\t\t\t\tnodeType,\r\n\t\t\t\tnewProps.is && newProps\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\t// we created a new parent, so none of the previously attached children can be reused:\r\n\t\texcessDomChildren = null;\r\n\t\t// we are creating a new node, so we can assume this is a new subtree (in case we are hydrating), this deopts the hydrate\r\n\t\tisHydrating = false;\r\n\t}\r\n\r\n\tif (nodeType === null) {\r\n\t\t// During hydration, we still have to split merged text from SSR'd HTML.\r\n\t\tif (oldProps !== newProps && (!isHydrating || dom.data !== newProps)) {\r\n\t\t\tdom.data = newProps;\r\n\t\t}\r\n\t} else {\r\n\t\t// If excessDomChildren was not null, repopulate it with the current element's children:\r\n\t\texcessDomChildren = excessDomChildren && slice.call(dom.childNodes);\r\n\r\n\t\toldProps = oldVNode.props || EMPTY_OBJ;\r\n\r\n\t\tlet oldHtml = oldProps.dangerouslySetInnerHTML;\r\n\t\tlet newHtml = newProps.dangerouslySetInnerHTML;\r\n\r\n\t\t// During hydration, props are not diffed at all (including dangerouslySetInnerHTML)\r\n\t\t// @TODO we should warn in debug mode when props don't match here.\r\n\t\tif (!isHydrating) {\r\n\t\t\t// But, if we are in a situation where we are using existing DOM (e.g. replaceNode)\r\n\t\t\t// we should read the existing DOM attributes to diff them\r\n\t\t\tif (excessDomChildren != null) {\r\n\t\t\t\toldProps = {};\r\n\t\t\t\tfor (i = 0; i < dom.attributes.length; i++) {\r\n\t\t\t\t\toldProps[dom.attributes[i].name] = dom.attributes[i].value;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (newHtml || oldHtml) {\r\n\t\t\t\t// Avoid re-applying the same '__html' if it did not changed between re-render\r\n\t\t\t\tif (\r\n\t\t\t\t\t!newHtml ||\r\n\t\t\t\t\t((!oldHtml || newHtml.__html != oldHtml.__html) &&\r\n\t\t\t\t\t\tnewHtml.__html !== dom.innerHTML)\r\n\t\t\t\t) {\r\n\t\t\t\t\tdom.innerHTML = (newHtml && newHtml.__html) || '';\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tdiffProps(dom, newProps, oldProps, isSvg, isHydrating);\r\n\r\n\t\t// If the new vnode didn't have dangerouslySetInnerHTML, diff its children\r\n\t\tif (newHtml) {\r\n\t\t\tnewVNode._children = [];\r\n\t\t} else {\r\n\t\t\ti = newVNode.props.children;\r\n\t\t\tdiffChildren(\r\n\t\t\t\tdom,\r\n\t\t\t\tArray.isArray(i) ? i : [i],\r\n\t\t\t\tnewVNode,\r\n\t\t\t\toldVNode,\r\n\t\t\t\tglobalContext,\r\n\t\t\t\tisSvg && nodeType !== 'foreignObject',\r\n\t\t\t\texcessDomChildren,\r\n\t\t\t\tcommitQueue,\r\n\t\t\t\texcessDomChildren\r\n\t\t\t\t\t? excessDomChildren[0]\r\n\t\t\t\t\t: oldVNode._children && getDomSibling(oldVNode, 0),\r\n\t\t\t\tisHydrating\r\n\t\t\t);\r\n\r\n\t\t\t// Remove children that are not part of any vnode.\r\n\t\t\tif (excessDomChildren != null) {\r\n\t\t\t\tfor (i = excessDomChildren.length; i--; ) {\r\n\t\t\t\t\tif (excessDomChildren[i] != null) removeNode(excessDomChildren[i]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// (as above, don't diff props during hydration)\r\n\t\tif (!isHydrating) {\r\n\t\t\tif (\r\n\t\t\t\t'value' in newProps &&\r\n\t\t\t\t(i = newProps.value) !== undefined &&\r\n\t\t\t\t// #2756 For the <progress>-element the initial value is 0,\r\n\t\t\t\t// despite the attribute not being present. When the attribute\r\n\t\t\t\t// is missing the progress bar is treated as indeterminate.\r\n\t\t\t\t// To fix that we'll always update it when it is 0 for progress elements\r\n\t\t\t\t(i !== oldProps.value ||\r\n\t\t\t\t\ti !== dom.value ||\r\n\t\t\t\t\t(nodeType === 'progress' && !i))\r\n\t\t\t) {\r\n\t\t\t\tsetProperty(dom, 'value', i, oldProps.value, false);\r\n\t\t\t}\r\n\t\t\tif (\r\n\t\t\t\t'checked' in newProps &&\r\n\t\t\t\t(i = newProps.checked) !== undefined &&\r\n\t\t\t\ti !== dom.checked\r\n\t\t\t) {\r\n\t\t\t\tsetProperty(dom, 'checked', i, oldProps.checked, false);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn dom;\r\n}\r\n\r\n/**\r\n * Invoke or update a ref, depending on whether it is a function or object ref.\r\n * @param {object|function} ref\r\n * @param {any} value\r\n * @param {import('../internal').VNode} vnode\r\n */\r\nexport function applyRef(ref, value, vnode) {\r\n\ttry {\r\n\t\tif (typeof ref == 'function') ref(value);\r\n\t\telse ref.current = value;\r\n\t} catch (e) {\r\n\t\toptions._catchError(e, vnode);\r\n\t}\r\n}\r\n\r\n/**\r\n * Unmount a virtual node from the tree and apply DOM changes\r\n * @param {import('../internal').VNode} vnode The virtual node to unmount\r\n * @param {import('../internal').VNode} parentVNode The parent of the VNode that\r\n * initiated the unmount\r\n * @param {boolean} [skipRemove] Flag that indicates that a parent node of the\r\n * current element is already detached from the DOM.\r\n */\r\nexport function unmount(vnode, parentVNode, skipRemove) {\r\n\tlet r;\r\n\tif (options.unmount) options.unmount(vnode);\r\n\r\n\tif ((r = vnode.ref)) {\r\n\t\tif (!r.current || r.current === vnode._dom) applyRef(r, null, parentVNode);\r\n\t}\r\n\r\n\tif ((r = vnode._component) != null) {\r\n\t\tif (r.componentWillUnmount) {\r\n\t\t\ttry {\r\n\t\t\t\tr.componentWillUnmount();\r\n\t\t\t} catch (e) {\r\n\t\t\t\toptions._catchError(e, parentVNode);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tr.base = r._parentDom = null;\r\n\t}\r\n\r\n\tif ((r = vnode._children)) {\r\n\t\tfor (let i = 0; i < r.length; i++) {\r\n\t\t\tif (r[i]) {\r\n\t\t\t\tunmount(r[i], parentVNode, typeof vnode.type != 'function');\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!skipRemove && vnode._dom != null) removeNode(vnode._dom);\r\n\r\n\t// Must be set to `undefined` to properly clean up `_nextDom`\r\n\t// for which `null` is a valid value. See comment in `create-element.js`\r\n\tvnode._dom = vnode._nextDom = undefined;\r\n}\r\n\r\n/** The `.render()` method for a PFC backing instance. */\r\nfunction doRender(props, state, context) {\r\n\treturn this.constructor(props, context);\r\n}\r\n", "import { EMPTY_OBJ } from './constants';\r\nimport { commitRoot, diff } from './diff/index';\r\nimport { createElement, Fragment } from './create-element';\r\nimport options from './options';\r\nimport { slice } from './util';\r\n\r\n/**\r\n * Render a Preact virtual node into a DOM element\r\n * @param {import('./internal').ComponentChild} vnode The virtual node to render\r\n * @param {import('./internal').PreactElement} parentDom The DOM element to\r\n * render into\r\n * @param {import('./internal').PreactElement | object} [replaceNode] Optional: Attempt to re-use an\r\n * existing DOM tree rooted at `replaceNode`\r\n */\r\nexport function render(vnode, parentDom, replaceNode) {\r\n\tif (options._root) options._root(vnode, parentDom);\r\n\r\n\t// We abuse the `replaceNode` parameter in `hydrate()` to signal if we are in\r\n\t// hydration mode or not by passing the `hydrate` function instead of a DOM\r\n\t// element..\r\n\tlet isHydrating = typeof replaceNode === 'function';\r\n\r\n\t// To be able to support calling `render()` multiple times on the same\r\n\t// DOM node, we need to obtain a reference to the previous tree. We do\r\n\t// this by assigning a new `_children` property to DOM nodes which points\r\n\t// to the last rendered tree. By default this property is not present, which\r\n\t// means that we are mounting a new tree for the first time.\r\n\tlet oldVNode = isHydrating\r\n\t\t? null\r\n\t\t: (replaceNode && replaceNode._children) || parentDom._children;\r\n\r\n\tvnode = (\r\n\t\t(!isHydrating && replaceNode) ||\r\n\t\tparentDom\r\n\t)._children = createElement(Fragment, null, [vnode]);\r\n\r\n\t// List of effects that need to be called after diffing.\r\n\tlet commitQueue = [];\r\n\tdiff(\r\n\t\tparentDom,\r\n\t\t// Determine the new vnode tree and store it on the DOM element on\r\n\t\t// our custom `_children` property.\r\n\t\tvnode,\r\n\t\toldVNode || EMPTY_OBJ,\r\n\t\tEMPTY_OBJ,\r\n\t\tparentDom.ownerSVGElement !== undefined,\r\n\t\t!isHydrating && replaceNode\r\n\t\t\t? [replaceNode]\r\n\t\t\t: oldVNode\r\n\t\t\t? null\r\n\t\t\t: parentDom.firstChild\r\n\t\t\t? slice.call(parentDom.childNodes)\r\n\t\t\t: null,\r\n\t\tcommitQueue,\r\n\t\t!isHydrating && replaceNode\r\n\t\t\t? replaceNode\r\n\t\t\t: oldVNode\r\n\t\t\t? oldVNode._dom\r\n\t\t\t: parentDom.firstChild,\r\n\t\tisHydrating\r\n\t);\r\n\r\n\t// Flush all queued effects\r\n\tcommitRoot(commitQueue, vnode);\r\n}\r\n\r\n/**\r\n * Update an existing DOM element with data from a Preact virtual node\r\n * @param {import('./internal').ComponentChild} vnode The virtual node to render\r\n * @param {import('./internal').PreactElement} parentDom The DOM element to\r\n * update\r\n */\r\nexport function hydrate(vnode, parentDom) {\r\n\trender(vnode, parentDom, hydrate);\r\n}\r\n", "import { assign, slice } from './util';\r\nimport { createVNode } from './create-element';\r\n\r\n/**\r\n * Clones the given VNode, optionally adding attributes/props and replacing its children.\r\n * @param {import('./internal').VNode} vnode The virtual DOM element to clone\r\n * @param {object} props Attributes/props to add when cloning\r\n * @param {Array<import('./internal').ComponentChildren>} rest Any additional arguments will be used as replacement children.\r\n * @returns {import('./internal').VNode}\r\n */\r\nexport function cloneElement(vnode, props, children) {\r\n\tlet normalizedProps = assign({}, vnode.props),\r\n\t\tkey,\r\n\t\tref,\r\n\t\ti;\r\n\tfor (i in props) {\r\n\t\tif (i == 'key') key = props[i];\r\n\t\telse if (i == 'ref') ref = props[i];\r\n\t\telse normalizedProps[i] = props[i];\r\n\t}\r\n\r\n\tif (arguments.length > 2) {\r\n\t\tnormalizedProps.children =\r\n\t\t\targuments.length > 3 ? slice.call(arguments, 2) : children;\r\n\t}\r\n\r\n\treturn createVNode(\r\n\t\tvnode.type,\r\n\t\tnormalizedProps,\r\n\t\tkey || vnode.key,\r\n\t\tref || vnode.ref,\r\n\t\tnull\r\n\t);\r\n}\r\n", "/**\r\n * Find the closest error boundary to a thrown error and call it\r\n * @param {object} error The thrown value\r\n * @param {import('../internal').VNode} vnode The vnode that threw\r\n * the error that was caught (except for unmounting when this parameter\r\n * is the highest parent that was being unmounted)\r\n */\r\nexport function _catchError(error, vnode) {\r\n\t/** @type {import('../internal').Component} */\r\n\tlet component, ctor, handled;\r\n\r\n\tfor (; (vnode = vnode._parent); ) {\r\n\t\tif ((component = vnode._component) && !component._processingException) {\r\n\t\t\ttry {\r\n\t\t\t\tctor = component.constructor;\r\n\r\n\t\t\t\tif (ctor && ctor.getDerivedStateFromError != null) {\r\n\t\t\t\t\tcomponent.setState(ctor.getDerivedStateFromError(error));\r\n\t\t\t\t\thandled = component._dirty;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (component.componentDidCatch != null) {\r\n\t\t\t\t\tcomponent.componentDidCatch(error);\r\n\t\t\t\t\thandled = component._dirty;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// This is an error boundary. Mark it as having bailed out, and whether it was mid-hydration.\r\n\t\t\t\tif (handled) {\r\n\t\t\t\t\treturn (component._pendingError = component);\r\n\t\t\t\t}\r\n\t\t\t} catch (e) {\r\n\t\t\t\terror = e;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tthrow error;\r\n}\r\n", "import { SearchIndex } from './helpers'\n\nexport function deepEqual(a: any, b: any): boolean {\n  return (\n    Array.isArray(a) &&\n    Array.isArray(b) &&\n    a.length === b.length &&\n    a.every((val, index) => val == b[index])\n  )\n}\n\nexport async function sleep(frames = 1) {\n  for (let _ in [...Array(frames).keys()]) {\n    await new Promise(requestAnimationFrame)\n  }\n}\n\nexport function getEmojiData(emoji, { skinIndex = 0 } = {}) {\n  const skin =\n    emoji.skins[skinIndex] ||\n    (() => {\n      skinIndex = 0\n      return emoji.skins[skinIndex]\n    })()\n\n  const emojiData: any = {\n    id: emoji.id,\n    name: emoji.name,\n    native: skin.native,\n    unified: skin.unified,\n    keywords: emoji.keywords,\n    shortcodes: skin.shortcodes || emoji.shortcodes,\n  }\n\n  if (emoji.skins.length > 1) {\n    emojiData.skin = skinIndex + 1\n  }\n\n  if (skin.src) {\n    emojiData.src = skin.src\n  }\n\n  if (emoji.aliases && emoji.aliases.length) {\n    emojiData.aliases = emoji.aliases\n  }\n\n  if (emoji.emoticons && emoji.emoticons.length) {\n    emojiData.emoticons = emoji.emoticons\n  }\n\n  return emojiData\n}\n\nexport async function getEmojiDataFromNative(nativeString) {\n  const results = await SearchIndex.search(nativeString, {\n    maxResults: 1,\n    caller: 'getEmojiDataFromNative',\n  })\n  if (!results || !results.length) return null\n\n  const emoji = results[0]\n  let skinIndex = 0\n\n  for (let skin of emoji.skins) {\n    if (skin.native == nativeString) {\n      break\n    }\n\n    skinIndex++\n  }\n\n  return getEmojiData(emoji, { skinIndex })\n}\n", "export { default as Store } from './store'\n\nexport { default as NativeSupport } from './native-support'\nexport { default as FrequentlyUsed } from './frequently-used'\nexport { default as SearchIndex } from './search-index'\n\nexport const SafeFlags = [\n  'checkered_flag',\n  'crossed_flags',\n  'pirate_flag',\n  'rainbow-flag',\n  'transgender_flag',\n  'triangular_flag_on_post',\n  'waving_black_flag',\n  'waving_white_flag',\n]\n", "function set(key: string, value: string) {\n  try {\n    window.localStorage[`emoji-mart.${key}`] = JSON.stringify(value)\n  } catch (error) {}\n}\n\nfunction get(key: string): any {\n  try {\n    const value = window.localStorage[`emoji-mart.${key}`]\n\n    if (value) {\n      return JSON.parse(value)\n    }\n  } catch (error) {}\n}\n\nexport default { set, get }\n", "const CACHE = new Map()\nconst VERSIONS = [\n  { v: 14, emoji: '🫠' },\n  { v: 13.1, emoji: '😶‍🌫️' },\n  { v: 13, emoji: '🥸' },\n  { v: 12.1, emoji: '🧑‍🦰' },\n  { v: 12, emoji: '🥱' },\n  { v: 11, emoji: '🥰' },\n  { v: 5, emoji: '🤩' },\n  { v: 4, emoji: '👱‍♀️' },\n  { v: 3, emoji: '🤣' },\n  { v: 2, emoji: '👋🏻' },\n  { v: 1, emoji: '🙃' },\n]\n\nfunction latestVersion() {\n  for (const { v, emoji } of VERSIONS) {\n    if (isSupported(emoji)) {\n      return v\n    }\n  }\n}\n\nfunction noCountryFlags() {\n  if (isSupported('🇨🇦')) {\n    return false\n  }\n\n  return true\n}\n\nfunction isSupported(emoji) {\n  if (CACHE.has(emoji)) {\n    return CACHE.get(emoji)\n  }\n\n  const supported = isEmojiSupported(emoji)\n  CACHE.set(emoji, supported)\n\n  return supported\n}\n\n// https://github.com/koala-interactive/is-emoji-supported\nconst isEmojiSupported = (() => {\n  let ctx = null\n  try {\n    if (!navigator.userAgent.includes('jsdom')) {\n      ctx = document\n        .createElement('canvas')\n        .getContext('2d', { willReadFrequently: true })\n    }\n  } catch {}\n\n  // Not in browser env\n  if (!ctx) {\n    return () => false\n  }\n\n  const CANVAS_HEIGHT = 25\n  const CANVAS_WIDTH = 20\n  const textSize = Math.floor(CANVAS_HEIGHT / 2)\n\n  // Initialize convas context\n  ctx.font = textSize + 'px Arial, Sans-Serif'\n  ctx.textBaseline = 'top'\n  ctx.canvas.width = CANVAS_WIDTH * 2\n  ctx.canvas.height = CANVAS_HEIGHT\n\n  return (unicode) => {\n    ctx.clearRect(0, 0, CANVAS_WIDTH * 2, CANVAS_HEIGHT)\n\n    // Draw in red on the left\n    ctx.fillStyle = '#FF0000'\n    ctx.fillText(unicode, 0, 22)\n\n    // Draw in blue on right\n    ctx.fillStyle = '#0000FF'\n    ctx.fillText(unicode, CANVAS_WIDTH, 22)\n\n    const a = ctx.getImageData(0, 0, CANVAS_WIDTH, CANVAS_HEIGHT).data\n    const count = a.length\n    let i = 0\n\n    // Search the first visible pixel\n    for (; i < count && !a[i + 3]; i += 4);\n\n    // No visible pixel\n    if (i >= count) {\n      return false\n    }\n\n    // Emoji has immutable color, so we check the color of the emoji in two different colors\n    // the result show be the same.\n    const x = CANVAS_WIDTH + ((i / 4) % CANVAS_WIDTH)\n    const y = Math.floor(i / 4 / CANVAS_WIDTH)\n    const b = ctx.getImageData(x, y, 1, 1).data\n\n    if (a[i] !== b[0] || a[i + 2] !== b[2]) {\n      return false\n    }\n\n    // Some emojis are a contraction of different ones, so if it's not\n    // supported, it will show multiple characters\n    if (ctx.measureText(unicode).width >= CANVAS_WIDTH) {\n      return false\n    }\n\n    // Supported\n    return true\n  }\n})()\n\nexport default { latestVersion, noCountryFlags }\n", "// @ts-nocheck\nimport { Store } from '../helpers'\n\nconst DEFAULTS = [\n  '+1',\n  'grinning',\n  'kissing_heart',\n  'heart_eyes',\n  'laughing',\n  'stuck_out_tongue_winking_eye',\n  'sweat_smile',\n  'joy',\n  'scream',\n  'disappointed',\n  'unamused',\n  'weary',\n  'sob',\n  'sunglasses',\n  'heart',\n]\n\nlet Index: any | null = null\n\nfunction add(emoji: { id: string }) {\n  Index || (Index = Store.get('frequently') || {})\n\n  const emojiId = emoji.id || emoji\n  if (!emojiId) return\n\n  Index[emojiId] || (Index[emojiId] = 0)\n  Index[emojiId] += 1\n\n  Store.set('last', emojiId)\n  Store.set('frequently', Index)\n}\n\nfunction get({ maxFrequentRows, perLine }) {\n  if (!maxFrequentRows) return []\n\n  Index || (Index = Store.get('frequently'))\n  let emojiIds = []\n\n  if (!Index) {\n    Index = {}\n\n    for (let i in DEFAULTS.slice(0, perLine)) {\n      const emojiId = DEFAULTS[i]\n\n      Index[emojiId] = perLine - i\n      emojiIds.push(emojiId)\n    }\n\n    return emojiIds\n  }\n\n  const max = maxFrequentRows * perLine\n  const last = Store.get('last')\n\n  for (let emojiId in Index) {\n    emojiIds.push(emojiId)\n  }\n\n  emojiIds.sort((a, b) => {\n    const aScore = Index[b]\n    const bScore = Index[a]\n\n    if (aScore == bScore) {\n      return a.localeCompare(b)\n    }\n\n    return aScore - bScore\n  })\n\n  if (emojiIds.length > max) {\n    const removedIds = emojiIds.slice(max)\n    emojiIds = emojiIds.slice(0, max)\n\n    for (let removedId of removedIds) {\n      if (removedId == last) continue\n      delete Index[removedId]\n    }\n\n    if (last && emojiIds.indexOf(last) == -1) {\n      delete Index[emojiIds[emojiIds.length - 1]]\n      emojiIds.splice(-1, 1, last)\n    }\n\n    Store.set('frequently', Index)\n  }\n\n  return emojiIds\n}\n\nexport default { add, get, DEFAULTS }\n", "// @ts-nocheck\nimport { init, Data } from '../config'\n\nconst SHORTCODES_REGEX = /^(?:\\:([^\\:]+)\\:)(?:\\:skin-tone-(\\d)\\:)?$/\nlet Pool = null\n\nfunction get(emojiId) {\n  if (emojiId.id) {\n    return emojiId\n  }\n\n  return (\n    Data.emojis[emojiId] ||\n    Data.emojis[Data.aliases[emojiId]] ||\n    Data.emojis[Data.natives[emojiId]]\n  )\n}\n\nfunction reset() {\n  Pool = null\n}\n\nasync function search(value, { maxResults, caller } = {}) {\n  if (!value || !value.trim().length) return null\n  maxResults || (maxResults = 90)\n\n  await init(null, { caller: caller || 'SearchIndex.search' })\n\n  const values = value\n    .toLowerCase()\n    .replace(/(\\w)-/, '$1 ')\n    .split(/[\\s|,]+/)\n    .filter((word, i, words) => {\n      return word.trim() && words.indexOf(word) == i\n    })\n\n  if (!values.length) return\n\n  let pool = Pool || (Pool = Object.values(Data.emojis))\n  let results, scores\n\n  for (const value of values) {\n    if (!pool.length) break\n\n    results = []\n    scores = {}\n\n    for (const emoji of pool) {\n      if (!emoji.search) continue\n      const score = emoji.search.indexOf(`,${value}`)\n      if (score == -1) continue\n\n      results.push(emoji)\n      scores[emoji.id] || (scores[emoji.id] = 0)\n      scores[emoji.id] += emoji.id == value ? 0 : score + 1\n    }\n\n    pool = results\n  }\n\n  if (results.length < 2) {\n    return results\n  }\n\n  results.sort((a, b) => {\n    const aScore = scores[a.id]\n    const bScore = scores[b.id]\n\n    if (aScore == bScore) {\n      return a.id.localeCompare(b.id)\n    }\n\n    return aScore - bScore\n  })\n\n  if (results.length > maxResults) {\n    results = results.slice(0, maxResults)\n  }\n\n  return results\n}\n\nexport default { search, get, reset, SHORTCODES_REGEX }\n", "// @ts-nocheck\nimport i18n_en from '@emoji-mart/data/i18n/en.json'\nimport PickerProps from './components/Picker/PickerProps'\nimport {\n  FrequentlyUsed,\n  NativeSupport,\n  SafeFlags,\n  SearchIndex,\n} from './helpers'\n\nexport let I18n = null\nexport let Data = null\n\nconst fetchCache = {}\nasync function fetchJSON(src) {\n  if (fetchCache[src]) {\n    return fetchCache[src]\n  }\n\n  const response = await fetch(src)\n  const json = await response.json()\n\n  fetchCache[src] = json\n  return json\n}\n\nlet promise: Promise<void> | null = null\nlet initiated = false\nlet initCallback = null\nlet initialized = false\n\nexport function init(options, { caller } = {}) {\n  promise ||\n    (promise = new Promise((resolve) => {\n      initCallback = resolve\n    }))\n\n  if (options) {\n    _init(options)\n  } else if (caller && !initialized) {\n    console.warn(\n      `\\`${caller}\\` requires data to be initialized first. Promise will be pending until \\`init\\` is called.`,\n    )\n  }\n\n  return promise\n}\n\nasync function _init(props) {\n  initialized = true\n\n  let { emojiVersion, set, locale } = props\n  emojiVersion || (emojiVersion = PickerProps.emojiVersion.value)\n  set || (set = PickerProps.set.value)\n  locale || (locale = PickerProps.locale.value)\n\n  if (!Data) {\n    Data =\n      (typeof props.data === 'function' ? await props.data() : props.data) ||\n      (await fetchJSON(\n        `https://cdn.jsdelivr.net/npm/@emoji-mart/data@latest/sets/${emojiVersion}/${set}.json`,\n      ))\n\n    Data.emoticons = {}\n    Data.natives = {}\n\n    Data.categories.unshift({\n      id: 'frequent',\n      emojis: [],\n    })\n\n    for (const alias in Data.aliases) {\n      const emojiId = Data.aliases[alias]\n      const emoji = Data.emojis[emojiId]\n      if (!emoji) continue\n\n      emoji.aliases || (emoji.aliases = [])\n      emoji.aliases.push(alias)\n    }\n\n    Data.originalCategories = Data.categories\n  } else {\n    Data.categories = Data.categories.filter((c) => {\n      const isCustom = !!c.name\n      if (!isCustom) return true\n\n      return false\n    })\n  }\n\n  I18n =\n    (typeof props.i18n === 'function' ? await props.i18n() : props.i18n) ||\n    (locale == 'en'\n      ? i18n_en\n      : await fetchJSON(\n          `https://cdn.jsdelivr.net/npm/@emoji-mart/data@latest/i18n/${locale}.json`,\n        ))\n\n  if (props.custom) {\n    for (let i in props.custom) {\n      i = parseInt(i)\n      const category = props.custom[i]\n      const prevCategory = props.custom[i - 1]\n\n      if (!category.emojis || !category.emojis.length) continue\n\n      category.id || (category.id = `custom_${i + 1}`)\n      category.name || (category.name = I18n.categories.custom)\n\n      if (prevCategory && !category.icon) {\n        category.target = prevCategory.target || prevCategory\n      }\n\n      Data.categories.push(category)\n\n      for (const emoji of category.emojis) {\n        Data.emojis[emoji.id] = emoji\n      }\n    }\n  }\n\n  if (props.categories) {\n    Data.categories = Data.originalCategories\n      .filter((c) => {\n        return props.categories.indexOf(c.id) != -1\n      })\n      .sort((c1, c2) => {\n        const i1 = props.categories.indexOf(c1.id)\n        const i2 = props.categories.indexOf(c2.id)\n\n        return i1 - i2\n      })\n  }\n\n  let latestVersionSupport = null\n  let noCountryFlags = null\n  if (set == 'native') {\n    latestVersionSupport = NativeSupport.latestVersion()\n    noCountryFlags = props.noCountryFlags || NativeSupport.noCountryFlags()\n  }\n\n  let categoryIndex = Data.categories.length\n  let resetSearchIndex = false\n  while (categoryIndex--) {\n    const category = Data.categories[categoryIndex]\n\n    if (category.id == 'frequent') {\n      let { maxFrequentRows, perLine } = props\n\n      maxFrequentRows =\n        maxFrequentRows >= 0\n          ? maxFrequentRows\n          : PickerProps.maxFrequentRows.value\n      perLine || (perLine = PickerProps.perLine.value)\n\n      category.emojis = FrequentlyUsed.get({ maxFrequentRows, perLine })\n    }\n\n    if (!category.emojis || !category.emojis.length) {\n      Data.categories.splice(categoryIndex, 1)\n      continue\n    }\n\n    const { categoryIcons } = props\n    if (categoryIcons) {\n      const icon = categoryIcons[category.id]\n      if (icon && !category.icon) {\n        category.icon = icon\n      }\n    }\n\n    let emojiIndex = category.emojis.length\n    while (emojiIndex--) {\n      const emojiId = category.emojis[emojiIndex]\n      const emoji = emojiId.id ? emojiId : Data.emojis[emojiId]\n\n      const ignore = () => {\n        category.emojis.splice(emojiIndex, 1)\n      }\n\n      if (\n        !emoji ||\n        (props.exceptEmojis && props.exceptEmojis.includes(emoji.id))\n      ) {\n        ignore()\n        continue\n      }\n\n      if (latestVersionSupport && emoji.version > latestVersionSupport) {\n        ignore()\n        continue\n      }\n\n      if (noCountryFlags && category.id == 'flags') {\n        if (!SafeFlags.includes(emoji.id)) {\n          ignore()\n          continue\n        }\n      }\n\n      if (!emoji.search) {\n        resetSearchIndex = true\n        emoji.search =\n          ',' +\n          [\n            [emoji.id, false],\n            [emoji.name, true],\n            [emoji.keywords, false],\n            [emoji.emoticons, false],\n          ]\n            .map(([strings, split]) => {\n              if (!strings) return\n              return (Array.isArray(strings) ? strings : [strings])\n                .map((string) => {\n                  return (split ? string.split(/[-|_|\\s]+/) : [string]).map(\n                    (s) => s.toLowerCase(),\n                  )\n                })\n                .flat()\n            })\n            .flat()\n            .filter((a) => a && a.trim())\n            .join(',')\n\n        if (emoji.emoticons) {\n          for (const emoticon of emoji.emoticons) {\n            if (Data.emoticons[emoticon]) continue\n            Data.emoticons[emoticon] = emoji.id\n          }\n        }\n\n        let skinIndex = 0\n        for (const skin of emoji.skins) {\n          if (!skin) continue\n          skinIndex++\n\n          const { native } = skin\n          if (native) {\n            Data.natives[native] = emoji.id\n            emoji.search += `,${native}`\n          }\n\n          const skinShortcodes =\n            skinIndex == 1 ? '' : `:skin-tone-${skinIndex}:`\n          skin.shortcodes = `:${emoji.id}:${skinShortcodes}`\n        }\n      }\n    }\n  }\n\n  if (resetSearchIndex) {\n    SearchIndex.reset()\n  }\n\n  initCallback()\n}\n\nexport function getProps(props, defaultProps, element) {\n  props || (props = {})\n\n  const _props = {}\n  for (let k in defaultProps) {\n    _props[k] = getProp(k, props, defaultProps, element)\n  }\n\n  return _props\n}\n\nexport function getProp(propName, props, defaultProps, element) {\n  const defaults = defaultProps[propName]\n  let value =\n    (element && element.getAttribute(propName)) ||\n    (props[propName] != null && props[propName] != undefined\n      ? props[propName]\n      : null)\n\n  if (!defaults) {\n    return value\n  }\n\n  if (\n    value != null &&\n    defaults.value &&\n    typeof defaults.value != typeof value\n  ) {\n    if (typeof defaults.value == 'boolean') {\n      value = value == 'false' ? false : true\n    } else {\n      value = defaults.value.constructor(value)\n    }\n  }\n\n  if (defaults.transform && value) {\n    value = defaults.transform(value)\n  }\n\n  if (\n    value == null ||\n    (defaults.choices && defaults.choices.indexOf(value) == -1)\n  ) {\n    value = defaults.value\n  }\n\n  return value\n}\n", "{\n  \"search\": \"Search\",\n  \"search_no_results_1\": \"Oh no!\",\n  \"search_no_results_2\": \"That emoji couldn’t be found\",\n  \"pick\": \"Pick an emoji…\",\n  \"add_custom\": \"Add custom emoji\",\n  \"categories\": {\n    \"activity\": \"Activity\",\n    \"custom\": \"Custom\",\n    \"flags\": \"Flags\",\n    \"foods\": \"Food & Drink\",\n    \"frequent\": \"Frequently used\",\n    \"nature\": \"Animals & Nature\",\n    \"objects\": \"Objects\",\n    \"people\": \"Smileys & People\",\n    \"places\": \"Travel & Places\",\n    \"search\": \"Search Results\",\n    \"symbols\": \"Symbols\"\n  },\n  \"skins\": {\n    \"choose\": \"Choose default skin tone\",\n    \"1\": \"Default\",\n    \"2\": \"Light\",\n    \"3\": \"Medium-Light\",\n    \"4\": \"Medium\",\n    \"5\": \"Medium-Dark\",\n    \"6\": \"Dark\"\n  }\n}\n", "export default {\n  autoFocus: {\n    value: false,\n  },\n  dynamicWidth: {\n    value: false,\n  },\n  emojiButtonColors: {\n    value: null,\n  },\n  emojiButtonRadius: {\n    value: '100%',\n  },\n  emojiButtonSize: {\n    value: 36,\n  },\n  emojiSize: {\n    value: 24,\n  },\n  emojiVersion: {\n    value: 14,\n    choices: [1, 2, 3, 4, 5, 11, 12, 12.1, 13, 13.1, 14],\n  },\n  exceptEmojis: {\n    value: [],\n  },\n  icons: {\n    value: 'auto',\n    choices: ['auto', 'outline', 'solid'],\n  },\n  locale: {\n    value: 'en',\n    choices: [\n      'en',\n      'ar',\n      'be',\n      'cs',\n      'de',\n      'es',\n      'fa',\n      'fi',\n      'fr',\n      'hi',\n      'it',\n      'ja',\n      'kr',\n      'nl',\n      'pl',\n      'pt',\n      'ru',\n      'sa',\n      'tr',\n      'uk',\n      'vi',\n      'zh',\n    ],\n  },\n  maxFrequentRows: {\n    value: 4,\n  },\n  navPosition: {\n    value: 'top',\n    choices: ['top', 'bottom', 'none'],\n  },\n  noCountryFlags: {\n    value: false,\n  },\n  noResultsEmoji: {\n    value: null,\n  },\n  perLine: {\n    value: 9,\n  },\n  previewEmoji: {\n    value: null,\n  },\n  previewPosition: {\n    value: 'bottom',\n    choices: ['top', 'bottom', 'none'],\n  },\n  searchPosition: {\n    value: 'sticky',\n    choices: ['sticky', 'static', 'none'],\n  },\n  set: {\n    value: 'native',\n    choices: ['native', 'apple', 'facebook', 'google', 'twitter'],\n  },\n  skin: {\n    value: 1,\n    choices: [1, 2, 3, 4, 5, 6],\n  },\n  skinTonePosition: {\n    value: 'preview',\n    choices: ['preview', 'search', 'none'],\n  },\n  theme: {\n    value: 'auto',\n    choices: ['auto', 'light', 'dark'],\n  },\n\n  // Data\n  categories: null,\n  categoryIcons: null,\n  custom: null,\n  data: null,\n  i18n: null,\n\n  // Callbacks\n  getImageURL: null,\n  getSpritesheetURL: null,\n  onAddCustomEmoji: null,\n  onClickOutside: null,\n  onEmojiSelect: null,\n\n  // Deprecated\n  stickySearch: {\n    deprecated: true,\n    value: true,\n  },\n}\n", "const categories = {\n  activity: {\n    outline: (\n      <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n        <path d=\"M12 0C5.373 0 0 5.372 0 12c0 6.627 5.373 12 12 12 6.628 0 12-5.373 12-12 0-6.628-5.372-12-12-12m9.949 11H17.05c.224-2.527 1.232-4.773 1.968-6.113A9.966 9.966 0 0 1 21.949 11M13 11V2.051a9.945 9.945 0 0 1 4.432 1.564c-.858 1.491-2.156 4.22-2.392 7.385H13zm-2 0H8.961c-.238-3.165-1.536-5.894-2.393-7.385A9.95 9.95 0 0 1 11 2.051V11zm0 2v8.949a9.937 9.937 0 0 1-4.432-1.564c.857-1.492 2.155-4.221 2.393-7.385H11zm4.04 0c.236 3.164 1.534 5.893 2.392 7.385A9.92 9.92 0 0 1 13 21.949V13h2.04zM4.982 4.887C5.718 6.227 6.726 8.473 6.951 11h-4.9a9.977 9.977 0 0 1 2.931-6.113M2.051 13h4.9c-.226 2.527-1.233 4.771-1.969 6.113A9.972 9.972 0 0 1 2.051 13m16.967 6.113c-.735-1.342-1.744-3.586-1.968-6.113h4.899a9.961 9.961 0 0 1-2.931 6.113\" />\n      </svg>\n    ),\n    solid: (\n      <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\">\n        <path d=\"M16.17 337.5c0 44.98 7.565 83.54 13.98 107.9C35.22 464.3 50.46 496 174.9 496c9.566 0 19.59-.4707 29.84-1.271L17.33 307.3C16.53 317.6 16.17 327.7 16.17 337.5zM495.8 174.5c0-44.98-7.565-83.53-13.98-107.9c-4.688-17.54-18.34-31.23-36.04-35.95C435.5 27.91 392.9 16 337 16c-9.564 0-19.59 .4707-29.84 1.271l187.5 187.5C495.5 194.4 495.8 184.3 495.8 174.5zM26.77 248.8l236.3 236.3c142-36.1 203.9-150.4 222.2-221.1L248.9 26.87C106.9 62.96 45.07 177.2 26.77 248.8zM256 335.1c0 9.141-7.474 16-16 16c-4.094 0-8.188-1.564-11.31-4.689L164.7 283.3C161.6 280.2 160 276.1 160 271.1c0-8.529 6.865-16 16-16c4.095 0 8.189 1.562 11.31 4.688l64.01 64C254.4 327.8 256 331.9 256 335.1zM304 287.1c0 9.141-7.474 16-16 16c-4.094 0-8.188-1.564-11.31-4.689L212.7 235.3C209.6 232.2 208 228.1 208 223.1c0-9.141 7.473-16 16-16c4.094 0 8.188 1.562 11.31 4.688l64.01 64.01C302.5 279.8 304 283.9 304 287.1zM256 175.1c0-9.141 7.473-16 16-16c4.094 0 8.188 1.562 11.31 4.688l64.01 64.01c3.125 3.125 4.688 7.219 4.688 11.31c0 9.133-7.468 16-16 16c-4.094 0-8.189-1.562-11.31-4.688l-64.01-64.01C257.6 184.2 256 180.1 256 175.1z\" />\n      </svg>\n    ),\n  },\n\n  custom: (\n    <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\">\n      <path d=\"M417.1 368c-5.937 10.27-16.69 16-27.75 16c-5.422 0-10.92-1.375-15.97-4.281L256 311.4V448c0 17.67-14.33 32-31.1 32S192 465.7 192 448V311.4l-118.3 68.29C68.67 382.6 63.17 384 57.75 384c-11.06 0-21.81-5.734-27.75-16c-8.828-15.31-3.594-34.88 11.72-43.72L159.1 256L41.72 187.7C26.41 178.9 21.17 159.3 29.1 144C36.63 132.5 49.26 126.7 61.65 128.2C65.78 128.7 69.88 130.1 73.72 132.3L192 200.6V64c0-17.67 14.33-32 32-32S256 46.33 256 64v136.6l118.3-68.29c3.838-2.213 7.939-3.539 12.07-4.051C398.7 126.7 411.4 132.5 417.1 144c8.828 15.31 3.594 34.88-11.72 43.72L288 256l118.3 68.28C421.6 333.1 426.8 352.7 417.1 368z\" />\n    </svg>\n  ),\n\n  flags: {\n    outline: (\n      <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n        <path d=\"M0 0l6.084 24H8L1.916 0zM21 5h-4l-1-4H4l3 12h3l1 4h13L21 5zM6.563 3h7.875l2 8H8.563l-2-8zm8.832 10l-2.856 1.904L12.063 13h3.332zM19 13l-1.5-6h1.938l2 8H16l3-2z\" />\n      </svg>\n    ),\n    solid: (\n      <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\">\n        <path d=\"M64 496C64 504.8 56.75 512 48 512h-32C7.25 512 0 504.8 0 496V32c0-17.75 14.25-32 32-32s32 14.25 32 32V496zM476.3 0c-6.365 0-13.01 1.35-19.34 4.233c-45.69 20.86-79.56 27.94-107.8 27.94c-59.96 0-94.81-31.86-163.9-31.87C160.9 .3055 131.6 4.867 96 15.75v350.5c32-9.984 59.87-14.1 84.85-14.1c73.63 0 124.9 31.78 198.6 31.78c31.91 0 68.02-5.971 111.1-23.09C504.1 355.9 512 344.4 512 332.1V30.73C512 11.1 495.3 0 476.3 0z\" />\n      </svg>\n    ),\n  },\n\n  foods: {\n    outline: (\n      <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n        <path d=\"M17 4.978c-1.838 0-2.876.396-3.68.934.513-1.172 1.768-2.934 4.68-2.934a1 1 0 0 0 0-2c-2.921 0-4.629 1.365-5.547 2.512-.064.078-.119.162-.18.244C11.73 1.838 10.798.023 9.207.023 8.579.022 7.85.306 7 .978 5.027 2.54 5.329 3.902 6.492 4.999 3.609 5.222 0 7.352 0 12.969c0 4.582 4.961 11.009 9 11.009 1.975 0 2.371-.486 3-1 .629.514 1.025 1 3 1 4.039 0 9-6.418 9-11 0-5.953-4.055-8-7-8M8.242 2.546c.641-.508.943-.523.965-.523.426.169.975 1.405 1.357 3.055-1.527-.629-2.741-1.352-2.98-1.846.059-.112.241-.356.658-.686M15 21.978c-1.08 0-1.21-.109-1.559-.402l-.176-.146c-.367-.302-.816-.452-1.266-.452s-.898.15-1.266.452l-.176.146c-.347.292-.477.402-1.557.402-2.813 0-7-5.389-7-9.009 0-5.823 4.488-5.991 5-5.991 1.939 0 2.484.471 3.387 1.251l.323.276a1.995 1.995 0 0 0 2.58 0l.323-.276c.902-.78 1.447-1.251 3.387-1.251.512 0 5 .168 5 6 0 3.617-4.187 9-7 9\" />\n      </svg>\n    ),\n    solid: (\n      <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\">\n        <path d=\"M481.9 270.1C490.9 279.1 496 291.3 496 304C496 316.7 490.9 328.9 481.9 337.9C472.9 346.9 460.7 352 448 352H64C51.27 352 39.06 346.9 30.06 337.9C21.06 328.9 16 316.7 16 304C16 291.3 21.06 279.1 30.06 270.1C39.06 261.1 51.27 256 64 256H448C460.7 256 472.9 261.1 481.9 270.1zM475.3 388.7C478.3 391.7 480 395.8 480 400V416C480 432.1 473.3 449.3 461.3 461.3C449.3 473.3 432.1 480 416 480H96C79.03 480 62.75 473.3 50.75 461.3C38.74 449.3 32 432.1 32 416V400C32 395.8 33.69 391.7 36.69 388.7C39.69 385.7 43.76 384 48 384H464C468.2 384 472.3 385.7 475.3 388.7zM50.39 220.8C45.93 218.6 42.03 215.5 38.97 211.6C35.91 207.7 33.79 203.2 32.75 198.4C31.71 193.5 31.8 188.5 32.99 183.7C54.98 97.02 146.5 32 256 32C365.5 32 457 97.02 479 183.7C480.2 188.5 480.3 193.5 479.2 198.4C478.2 203.2 476.1 207.7 473 211.6C469.1 215.5 466.1 218.6 461.6 220.8C457.2 222.9 452.3 224 447.3 224H64.67C59.73 224 54.84 222.9 50.39 220.8zM372.7 116.7C369.7 119.7 368 123.8 368 128C368 131.2 368.9 134.3 370.7 136.9C372.5 139.5 374.1 141.6 377.9 142.8C380.8 143.1 384 144.3 387.1 143.7C390.2 143.1 393.1 141.6 395.3 139.3C397.6 137.1 399.1 134.2 399.7 131.1C400.3 128 399.1 124.8 398.8 121.9C397.6 118.1 395.5 116.5 392.9 114.7C390.3 112.9 387.2 111.1 384 111.1C379.8 111.1 375.7 113.7 372.7 116.7V116.7zM244.7 84.69C241.7 87.69 240 91.76 240 96C240 99.16 240.9 102.3 242.7 104.9C244.5 107.5 246.1 109.6 249.9 110.8C252.8 111.1 256 112.3 259.1 111.7C262.2 111.1 265.1 109.6 267.3 107.3C269.6 105.1 271.1 102.2 271.7 99.12C272.3 96.02 271.1 92.8 270.8 89.88C269.6 86.95 267.5 84.45 264.9 82.7C262.3 80.94 259.2 79.1 256 79.1C251.8 79.1 247.7 81.69 244.7 84.69V84.69zM116.7 116.7C113.7 119.7 112 123.8 112 128C112 131.2 112.9 134.3 114.7 136.9C116.5 139.5 118.1 141.6 121.9 142.8C124.8 143.1 128 144.3 131.1 143.7C134.2 143.1 137.1 141.6 139.3 139.3C141.6 137.1 143.1 134.2 143.7 131.1C144.3 128 143.1 124.8 142.8 121.9C141.6 118.1 139.5 116.5 136.9 114.7C134.3 112.9 131.2 111.1 128 111.1C123.8 111.1 119.7 113.7 116.7 116.7L116.7 116.7z\" />\n      </svg>\n    ),\n  },\n\n  frequent: {\n    outline: (\n      <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n        <path d=\"M13 4h-2l-.001 7H9v2h2v2h2v-2h4v-2h-4z\" />\n        <path d=\"M12 0C5.373 0 0 5.373 0 12s5.373 12 12 12 12-5.373 12-12S18.627 0 12 0m0 22C6.486 22 2 17.514 2 12S6.486 2 12 2s10 4.486 10 10-4.486 10-10 10\" />\n      </svg>\n    ),\n    solid: (\n      <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\">\n        <path d=\"M256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512zM232 256C232 264 236 271.5 242.7 275.1L338.7 339.1C349.7 347.3 364.6 344.3 371.1 333.3C379.3 322.3 376.3 307.4 365.3 300L280 243.2V120C280 106.7 269.3 96 255.1 96C242.7 96 231.1 106.7 231.1 120L232 256z\" />\n      </svg>\n    ),\n  },\n\n  nature: {\n    outline: (\n      <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n        <path d=\"M15.5 8a1.5 1.5 0 1 0 .001 3.001A1.5 1.5 0 0 0 15.5 8M8.5 8a1.5 1.5 0 1 0 .001 3.001A1.5 1.5 0 0 0 8.5 8\" />\n        <path d=\"M18.933 0h-.027c-.97 0-2.138.787-3.018 1.497-1.274-.374-2.612-.51-3.887-.51-1.285 0-2.616.133-3.874.517C7.245.79 6.069 0 5.093 0h-.027C3.352 0 .07 2.67.002 7.026c-.039 2.479.276 4.238 1.04 5.013.254.258.882.677 1.295.882.191 3.177.922 5.238 2.536 6.38.897.637 2.187.949 3.2 1.102C8.04 20.6 8 20.795 8 21c0 1.773 2.35 3 4 3 1.648 0 4-1.227 4-3 0-.201-.038-.393-.072-.586 2.573-.385 5.435-1.877 5.925-7.587.396-.22.887-.568 1.104-.788.763-.774 1.079-2.534 1.04-5.013C23.929 2.67 20.646 0 18.933 0M3.223 9.135c-.237.281-.837 1.155-.884 1.238-.15-.41-.368-1.349-.337-3.291.051-3.281 2.478-4.972 3.091-5.031.256.015.731.27 1.265.646-1.11 1.171-2.275 2.915-2.352 5.125-.133.546-.398.858-.783 1.313M12 22c-.901 0-1.954-.693-2-1 0-.654.475-1.236 1-1.602V20a1 1 0 1 0 2 0v-.602c.524.365 1 .947 1 1.602-.046.307-1.099 1-2 1m3-3.48v.02a4.752 4.752 0 0 0-1.262-1.02c1.092-.516 2.239-1.334 2.239-2.217 0-1.842-1.781-2.195-3.977-2.195-2.196 0-3.978.354-3.978 2.195 0 .883 1.148 1.701 2.238 2.217A4.8 4.8 0 0 0 9 18.539v-.025c-1-.076-2.182-.281-2.973-.842-1.301-.92-1.838-3.045-1.853-6.478l.023-.041c.496-.826 1.49-1.45 1.804-3.102 0-2.047 1.357-3.631 2.362-4.522C9.37 3.178 10.555 3 11.948 3c1.447 0 2.685.192 3.733.57 1 .9 2.316 2.465 2.316 4.48.313 1.651 1.307 2.275 1.803 3.102.035.058.068.117.102.178-.059 5.967-1.949 7.01-4.902 7.19m6.628-8.202c-.037-.065-.074-.13-.113-.195a7.587 7.587 0 0 0-.739-.987c-.385-.455-.648-.768-.782-1.313-.076-2.209-1.241-3.954-2.353-5.124.531-.376 1.004-.63 1.261-.647.636.071 3.044 1.764 3.096 5.031.027 1.81-.347 3.218-.37 3.235\" />\n      </svg>\n    ),\n    solid: (\n      <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 576 512\">\n        <path d=\"M332.7 19.85C334.6 8.395 344.5 0 356.1 0C363.6 0 370.6 3.52 375.1 9.502L392 32H444.1C456.8 32 469.1 37.06 478.1 46.06L496 64H552C565.3 64 576 74.75 576 88V112C576 156.2 540.2 192 496 192H426.7L421.6 222.5L309.6 158.5L332.7 19.85zM448 64C439.2 64 432 71.16 432 80C432 88.84 439.2 96 448 96C456.8 96 464 88.84 464 80C464 71.16 456.8 64 448 64zM416 256.1V480C416 497.7 401.7 512 384 512H352C334.3 512 320 497.7 320 480V364.8C295.1 377.1 268.8 384 240 384C211.2 384 184 377.1 160 364.8V480C160 497.7 145.7 512 128 512H96C78.33 512 64 497.7 64 480V249.8C35.23 238.9 12.64 214.5 4.836 183.3L.9558 167.8C-3.331 150.6 7.094 133.2 24.24 128.1C41.38 124.7 58.76 135.1 63.05 152.2L66.93 167.8C70.49 182 83.29 191.1 97.97 191.1H303.8L416 256.1z\" />\n      </svg>\n    ),\n  },\n\n  objects: {\n    outline: (\n      <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n        <path d=\"M12 0a9 9 0 0 0-5 16.482V21s2.035 3 5 3 5-3 5-3v-4.518A9 9 0 0 0 12 0zm0 2c3.86 0 7 3.141 7 7s-3.14 7-7 7-7-3.141-7-7 3.14-7 7-7zM9 17.477c.94.332 1.946.523 3 .523s2.06-.19 3-.523v.834c-.91.436-1.925.689-3 .689a6.924 6.924 0 0 1-3-.69v-.833zm.236 3.07A8.854 8.854 0 0 0 12 21c.965 0 1.888-.167 2.758-.451C14.155 21.173 13.153 22 12 22c-1.102 0-2.117-.789-2.764-1.453z\" />\n        <path d=\"M14.745 12.449h-.004c-.852-.024-1.188-.858-1.577-1.824-.421-1.061-.703-1.561-1.182-1.566h-.009c-.481 0-.783.497-1.235 1.537-.436.982-.801 1.811-1.636 1.791l-.276-.043c-.565-.171-.853-.691-1.284-1.794-.125-.313-.202-.632-.27-.913-.051-.213-.127-.53-.195-.634C7.067 9.004 7.039 9 6.99 9A1 1 0 0 1 7 7h.01c1.662.017 2.015 1.373 2.198 2.134.486-.981 1.304-2.058 2.797-2.075 1.531.018 2.28 1.153 2.731 2.141l.002-.008C14.944 8.424 15.327 7 16.979 7h.032A1 1 0 1 1 17 9h-.011c-.149.076-.256.474-.319.709a6.484 6.484 0 0 1-.311.951c-.429.973-.79 1.789-1.614 1.789\" />\n      </svg>\n    ),\n    solid: (\n      <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 384 512\">\n        <path d=\"M112.1 454.3c0 6.297 1.816 12.44 5.284 17.69l17.14 25.69c5.25 7.875 17.17 14.28 26.64 14.28h61.67c9.438 0 21.36-6.401 26.61-14.28l17.08-25.68c2.938-4.438 5.348-12.37 5.348-17.7L272 415.1h-160L112.1 454.3zM191.4 .0132C89.44 .3257 16 82.97 16 175.1c0 44.38 16.44 84.84 43.56 115.8c16.53 18.84 42.34 58.23 52.22 91.45c.0313 .25 .0938 .5166 .125 .7823h160.2c.0313-.2656 .0938-.5166 .125-.7823c9.875-33.22 35.69-72.61 52.22-91.45C351.6 260.8 368 220.4 368 175.1C368 78.61 288.9-.2837 191.4 .0132zM192 96.01c-44.13 0-80 35.89-80 79.1C112 184.8 104.8 192 96 192S80 184.8 80 176c0-61.76 50.25-111.1 112-111.1c8.844 0 16 7.159 16 16S200.8 96.01 192 96.01z\" />\n      </svg>\n    ),\n  },\n\n  people: {\n    outline: (\n      <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n        <path d=\"M12 0C5.373 0 0 5.373 0 12s5.373 12 12 12 12-5.373 12-12S18.627 0 12 0m0 22C6.486 22 2 17.514 2 12S6.486 2 12 2s10 4.486 10 10-4.486 10-10 10\" />\n        <path d=\"M8 7a2 2 0 1 0-.001 3.999A2 2 0 0 0 8 7M16 7a2 2 0 1 0-.001 3.999A2 2 0 0 0 16 7M15.232 15c-.693 1.195-1.87 2-3.349 2-1.477 0-2.655-.805-3.347-2H15m3-2H6a6 6 0 1 0 12 0\" />\n      </svg>\n    ),\n    solid: (\n      <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\">\n        <path d=\"M0 256C0 114.6 114.6 0 256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256zM256 432C332.1 432 396.2 382 415.2 314.1C419.1 300.4 407.8 288 393.6 288H118.4C104.2 288 92.92 300.4 96.76 314.1C115.8 382 179.9 432 256 432V432zM176.4 160C158.7 160 144.4 174.3 144.4 192C144.4 209.7 158.7 224 176.4 224C194 224 208.4 209.7 208.4 192C208.4 174.3 194 160 176.4 160zM336.4 224C354 224 368.4 209.7 368.4 192C368.4 174.3 354 160 336.4 160C318.7 160 304.4 174.3 304.4 192C304.4 209.7 318.7 224 336.4 224z\" />\n      </svg>\n    ),\n  },\n\n  places: {\n    outline: (\n      <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n        <path d=\"M6.5 12C5.122 12 4 13.121 4 14.5S5.122 17 6.5 17 9 15.879 9 14.5 7.878 12 6.5 12m0 3c-.275 0-.5-.225-.5-.5s.225-.5.5-.5.5.225.5.5-.225.5-.5.5M17.5 12c-1.378 0-2.5 1.121-2.5 2.5s1.122 2.5 2.5 2.5 2.5-1.121 2.5-2.5-1.122-2.5-2.5-2.5m0 3c-.275 0-.5-.225-.5-.5s.225-.5.5-.5.5.225.5.5-.225.5-.5.5\" />\n        <path d=\"M22.482 9.494l-1.039-.346L21.4 9h.6c.552 0 1-.439 1-.992 0-.006-.003-.008-.003-.008H23c0-1-.889-2-1.984-2h-.642l-.731-1.717C19.262 3.012 18.091 2 16.764 2H7.236C5.909 2 4.738 3.012 4.357 4.283L3.626 6h-.642C1.889 6 1 7 1 8h.003S1 8.002 1 8.008C1 8.561 1.448 9 2 9h.6l-.043.148-1.039.346a2.001 2.001 0 0 0-1.359 2.097l.751 7.508a1 1 0 0 0 .994.901H3v1c0 1.103.896 2 2 2h2c1.104 0 2-.897 2-2v-1h6v1c0 1.103.896 2 2 2h2c1.104 0 2-.897 2-2v-1h1.096a.999.999 0 0 0 .994-.901l.751-7.508a2.001 2.001 0 0 0-1.359-2.097M6.273 4.857C6.402 4.43 6.788 4 7.236 4h9.527c.448 0 .834.43.963.857L19.313 9H4.688l1.585-4.143zM7 21H5v-1h2v1zm12 0h-2v-1h2v1zm2.189-3H2.811l-.662-6.607L3 11h18l.852.393L21.189 18z\" />\n      </svg>\n    ),\n    solid: (\n      <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\">\n        <path d=\"M39.61 196.8L74.8 96.29C88.27 57.78 124.6 32 165.4 32H346.6C387.4 32 423.7 57.78 437.2 96.29L472.4 196.8C495.6 206.4 512 229.3 512 256V448C512 465.7 497.7 480 480 480H448C430.3 480 416 465.7 416 448V400H96V448C96 465.7 81.67 480 64 480H32C14.33 480 0 465.7 0 448V256C0 229.3 16.36 206.4 39.61 196.8V196.8zM109.1 192H402.9L376.8 117.4C372.3 104.6 360.2 96 346.6 96H165.4C151.8 96 139.7 104.6 135.2 117.4L109.1 192zM96 256C78.33 256 64 270.3 64 288C64 305.7 78.33 320 96 320C113.7 320 128 305.7 128 288C128 270.3 113.7 256 96 256zM416 320C433.7 320 448 305.7 448 288C448 270.3 433.7 256 416 256C398.3 256 384 270.3 384 288C384 305.7 398.3 320 416 320z\" />\n      </svg>\n    ),\n  },\n\n  symbols: {\n    outline: (\n      <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n        <path d=\"M0 0h11v2H0zM4 11h3V6h4V4H0v2h4zM15.5 17c1.381 0 2.5-1.116 2.5-2.493s-1.119-2.493-2.5-2.493S13 13.13 13 14.507 14.119 17 15.5 17m0-2.986c.276 0 .5.222.5.493 0 .272-.224.493-.5.493s-.5-.221-.5-.493.224-.493.5-.493M21.5 19.014c-1.381 0-2.5 1.116-2.5 2.493S20.119 24 21.5 24s2.5-1.116 2.5-2.493-1.119-2.493-2.5-2.493m0 2.986a.497.497 0 0 1-.5-.493c0-.271.224-.493.5-.493s.5.222.5.493a.497.497 0 0 1-.5.493M22 13l-9 9 1.513 1.5 8.99-9.009zM17 11c2.209 0 4-1.119 4-2.5V2s.985-.161 1.498.949C23.01 4.055 23 6 23 6s1-1.119 1-3.135C24-.02 21 0 21 0h-2v6.347A5.853 5.853 0 0 0 17 6c-2.209 0-4 1.119-4 2.5s1.791 2.5 4 2.5M10.297 20.482l-1.475-1.585a47.54 47.54 0 0 1-1.442 1.129c-.307-.288-.989-1.016-2.045-2.183.902-.836 1.479-1.466 1.729-1.892s.376-.871.376-1.336c0-.592-.273-1.178-.818-1.759-.546-.581-1.329-.871-2.349-.871-1.008 0-1.79.293-2.344.879-.556.587-.832 1.181-.832 1.784 0 .813.419 1.748 1.256 2.805-.847.614-1.444 1.208-1.794 1.784a3.465 3.465 0 0 0-.523 1.833c0 .857.308 1.56.924 2.107.616.549 1.423.823 2.42.823 1.173 0 2.444-.379 3.813-1.137L8.235 24h2.819l-2.09-2.383 1.333-1.135zm-6.736-6.389a1.02 1.02 0 0 1 .73-.286c.31 0 .559.085.747.254a.849.849 0 0 1 .283.659c0 .518-.419 1.112-1.257 1.784-.536-.651-.805-1.231-.805-1.742a.901.901 0 0 1 .302-.669M3.74 22c-.427 0-.778-.116-1.057-.349-.279-.232-.418-.487-.418-.766 0-.594.509-1.288 1.527-2.083.968 1.134 1.717 1.946 2.248 2.438-.921.507-1.686.76-2.3.76\" />\n      </svg>\n    ),\n    solid: (\n      <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\">\n        <path d=\"M500.3 7.251C507.7 13.33 512 22.41 512 31.1V175.1C512 202.5 483.3 223.1 447.1 223.1C412.7 223.1 383.1 202.5 383.1 175.1C383.1 149.5 412.7 127.1 447.1 127.1V71.03L351.1 90.23V207.1C351.1 234.5 323.3 255.1 287.1 255.1C252.7 255.1 223.1 234.5 223.1 207.1C223.1 181.5 252.7 159.1 287.1 159.1V63.1C287.1 48.74 298.8 35.61 313.7 32.62L473.7 .6198C483.1-1.261 492.9 1.173 500.3 7.251H500.3zM74.66 303.1L86.5 286.2C92.43 277.3 102.4 271.1 113.1 271.1H174.9C185.6 271.1 195.6 277.3 201.5 286.2L213.3 303.1H239.1C266.5 303.1 287.1 325.5 287.1 351.1V463.1C287.1 490.5 266.5 511.1 239.1 511.1H47.1C21.49 511.1-.0019 490.5-.0019 463.1V351.1C-.0019 325.5 21.49 303.1 47.1 303.1H74.66zM143.1 359.1C117.5 359.1 95.1 381.5 95.1 407.1C95.1 434.5 117.5 455.1 143.1 455.1C170.5 455.1 191.1 434.5 191.1 407.1C191.1 381.5 170.5 359.1 143.1 359.1zM440.3 367.1H496C502.7 367.1 508.6 372.1 510.1 378.4C513.3 384.6 511.6 391.7 506.5 396L378.5 508C372.9 512.1 364.6 513.3 358.6 508.9C352.6 504.6 350.3 496.6 353.3 489.7L391.7 399.1H336C329.3 399.1 323.4 395.9 321 389.6C318.7 383.4 320.4 376.3 325.5 371.1L453.5 259.1C459.1 255 467.4 254.7 473.4 259.1C479.4 263.4 481.6 271.4 478.7 278.3L440.3 367.1zM116.7 219.1L19.85 119.2C-8.112 90.26-6.614 42.31 24.85 15.34C51.82-8.137 93.26-3.642 118.2 21.83L128.2 32.32L137.7 21.83C162.7-3.642 203.6-8.137 231.6 15.34C262.6 42.31 264.1 90.26 236.1 119.2L139.7 219.1C133.2 225.6 122.7 225.6 116.7 219.1H116.7z\" />\n      </svg>\n    ),\n  },\n}\n\nconst search = {\n  loupe: (\n    <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\">\n      <path d=\"M12.9 14.32a8 8 0 1 1 1.41-1.41l5.35 5.33-1.42 1.42-5.33-5.34zM8 14A6 6 0 1 0 8 2a6 6 0 0 0 0 12z\" />\n    </svg>\n  ),\n\n  delete: (\n    <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\">\n      <path d=\"M10 8.586L2.929 1.515 1.515 2.929 8.586 10l-7.071 7.071 1.414 1.414L10 11.414l7.071 7.071 1.414-1.414L11.414 10l7.071-7.071-1.414-1.414L10 8.586z\" />\n    </svg>\n  ),\n}\n\nexport default { categories, search }\n", "export { default as Emoji } from './Emoji'\nexport { default as EmojiElement } from './EmojiElement'\n", "import { Data } from '../../config'\nimport { SearchIndex } from '../../helpers'\n\nexport default function Emoji(props) {\n  let { id, skin, emoji } = props\n\n  if (props.shortcodes) {\n    const matches = props.shortcodes.match(SearchIndex.SHORTCODES_REGEX)\n\n    if (matches) {\n      id = matches[1]\n\n      if (matches[2]) {\n        skin = matches[2]\n      }\n    }\n  }\n\n  emoji || (emoji = SearchIndex.get(id || props.native))\n  if (!emoji) return props.fallback\n\n  const emojiSkin = emoji.skins[skin - 1] || emoji.skins[0]\n\n  const imageSrc =\n    emojiSkin.src ||\n    (props.set != 'native' && !props.spritesheet\n      ? typeof props.getImageURL === 'function'\n        ? props.getImageURL(props.set, emojiSkin.unified)\n        : `https://cdn.jsdelivr.net/npm/emoji-datasource-${props.set}@14.0.0/img/${props.set}/64/${emojiSkin.unified}.png`\n      : undefined)\n\n  const spritesheetSrc =\n    typeof props.getSpritesheetURL === 'function'\n      ? props.getSpritesheetURL(props.set)\n      : `https://cdn.jsdelivr.net/npm/emoji-datasource-${props.set}@14.0.0/img/${props.set}/sheets-256/64.png`\n\n  return (\n    <span class=\"emoji-mart-emoji\" data-emoji-set={props.set}>\n      {imageSrc ? (\n        <img\n          style={{\n            maxWidth: props.size || '1em',\n            maxHeight: props.size || '1em',\n            display: 'inline-block',\n          }}\n          alt={emojiSkin.native || emojiSkin.shortcodes}\n          src={imageSrc}\n        />\n      ) : props.set == 'native' ? (\n        <span\n          style={{\n            fontSize: props.size,\n            fontFamily:\n              '\"EmojiMart\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Segoe UI\", \"Apple Color Emoji\", \"Twemoji Mozilla\", \"Noto Color Emoji\", \"Android Emoji\"',\n          }}\n        >\n          {emojiSkin.native}\n        </span>\n      ) : (\n        <span\n          style={{\n            display: 'block',\n            width: props.size,\n            height: props.size,\n            backgroundImage: `url(${spritesheetSrc})`,\n            backgroundSize: `${100 * Data.sheet.cols}% ${\n              100 * Data.sheet.rows\n            }%`,\n            backgroundPosition: `${\n              (100 / (Data.sheet.cols - 1)) * emojiSkin.x\n            }% ${(100 / (Data.sheet.rows - 1)) * emojiSkin.y}%`,\n          }}\n        ></span>\n      )}\n    </span>\n  )\n}\n", "import { render } from 'preact'\n\nimport { init, getProps } from '../../config'\nimport { HTMLElement } from '../HTMLElement'\nimport { Emoji } from '.'\nimport EmojiProps from './EmojiProps'\n\nexport default class EmojiElement extends HTMLElement {\n  static Props = EmojiProps\n\n  constructor(props) {\n    super(props)\n  }\n\n  async connectedCallback() {\n    const props = getProps(this.props, EmojiProps, this)\n    props.element = this\n    props.ref = (component) => {\n      this.component = component\n    }\n\n    await init()\n    if (this.disconnected) return\n\n    render(<Emoji {...props} />, this)\n  }\n}\n\nif (typeof customElements !== 'undefined' && !customElements.get('em-emoji')) {\n  customElements.define('em-emoji', EmojiElement)\n}\n", "export { default as HTMLElement } from './HTMLElement'\nexport { default as ShadowElement } from './ShadowElement'\n", "// @ts-nocheck\nimport { getProp } from '../../config'\n\nconst WindowHTMLElement =\n  typeof window !== 'undefined' && window.HTMLElement\n    ? window.HTMLElement\n    : Object\n\nexport default class HTMLElement extends WindowHTMLElement {\n  static get observedAttributes() {\n    return Object.keys(this.Props)\n  }\n\n  constructor(props = {}) {\n    super()\n    this.props = props\n\n    if (props.parent || props.ref) {\n      let ref = null\n      const parent = props.parent || (ref = props.ref && props.ref.current)\n\n      if (ref) ref.innerHTML = ''\n      if (parent) parent.appendChild(this)\n    }\n  }\n\n  update(props = {}) {\n    for (let k in props) {\n      this.attributeChangedCallback(k, null, props[k])\n    }\n  }\n\n  attributeChangedCallback(attr, _, newValue) {\n    if (!this.component) return\n\n    const value = getProp(\n      attr,\n      { [attr]: newValue },\n      this.constructor.Props,\n      this,\n    )\n\n    if (this.component.componentWillReceiveProps) {\n      this.component.componentWillReceiveProps({ [attr]: value })\n    } else {\n      this.component.props[attr] = value\n      this.component.forceUpdate()\n    }\n  }\n\n  disconnectedCallback() {\n    this.disconnected = true\n\n    if (this.component && this.component.unregister) {\n      this.component.unregister()\n    }\n  }\n}\n", "// @ts-nocheck\nimport { HTMLElement } from '.'\n\nexport default class ShadowElement extends HTMLElement {\n  constructor(props, { styles } = {}) {\n    super(props)\n\n    this.setShadow()\n    this.injectStyles(styles)\n  }\n\n  setShadow() {\n    this.attachShadow({ mode: 'open' })\n  }\n\n  injectStyles(styles) {\n    if (!styles) return\n\n    const style = document.createElement('style')\n    style.textContent = styles\n\n    this.shadowRoot.insertBefore(style, this.shadowRoot.firstChild)\n  }\n}\n", "import PickerProps from '../Picker/PickerProps'\n\nexport default {\n  fallback: '',\n  id: '',\n  native: '',\n  shortcodes: '',\n  size: {\n    value: '',\n    transform: (value) => {\n      // If the value is a number, then we assume it’s a pixel value.\n      if (!/\\D/.test(value)) {\n        return `${value}px`\n      }\n\n      return value\n    },\n  },\n\n  // Shared\n  set: PickerProps.set,\n  skin: PickerProps.skin,\n}\n", "export { default as Navigation } from './Navigation'\n", "// @ts-nocheck\nimport { PureComponent } from 'preact/compat'\nimport { Data, I18n } from '../../config'\nimport Icons from '../../icons'\n\nconst THEME_ICONS = {\n  light: 'outline',\n  dark: 'solid',\n}\n\nexport default class Navigation extends PureComponent {\n  constructor() {\n    super()\n\n    this.categories = Data.categories.filter((category) => {\n      return !category.target\n    })\n\n    this.state = {\n      categoryId: this.categories[0].id,\n    }\n  }\n\n  renderIcon(category) {\n    const { icon } = category\n\n    if (icon) {\n      if (icon.svg) {\n        return (\n          <span\n            class=\"flex\"\n            dangerouslySetInnerHTML={{ __html: icon.svg }}\n          ></span>\n        )\n      }\n\n      if (icon.src) {\n        return <img src={icon.src} />\n      }\n    }\n\n    const categoryIcons =\n      Icons.categories[category.id] || Icons.categories.custom\n\n    const style =\n      this.props.icons == 'auto'\n        ? THEME_ICONS[this.props.theme]\n        : this.props.icons\n\n    return categoryIcons[style] || categoryIcons\n  }\n\n  render() {\n    let selectedCategoryIndex = null\n\n    return (\n      <nav\n        id=\"nav\"\n        class=\"padding\"\n        data-position={this.props.position}\n        dir={this.props.dir}\n      >\n        <div class=\"flex relative\">\n          {this.categories.map((category, i) => {\n            const title = category.name || I18n.categories[category.id]\n            const selected =\n              !this.props.unfocused && category.id == this.state.categoryId\n\n            if (selected) {\n              selectedCategoryIndex = i\n            }\n\n            return (\n              <button\n                aria-label={title}\n                aria-selected={selected || undefined}\n                title={title}\n                type=\"button\"\n                class=\"flex flex-grow flex-center\"\n                onMouseDown={(e) => e.preventDefault()}\n                onClick={() => {\n                  this.props.onClick({ category, i })\n                }}\n              >\n                {this.renderIcon(category)}\n              </button>\n            )\n          })}\n\n          <div\n            class=\"bar\"\n            style={{\n              width: `${100 / this.categories.length}%`,\n              opacity: selectedCategoryIndex == null ? 0 : 1,\n              transform:\n                this.props.dir === 'rtl'\n                  ? `scaleX(-1) translateX(${selectedCategoryIndex * 100}%)`\n                  : `translateX(${selectedCategoryIndex * 100}%)`,\n            }}\n          ></div>\n        </div>\n      </nav>\n    )\n  }\n}\n", "import{useState as n,useReducer as t,useEffect as e,useLayoutEffect as r,useRef as u,useImperativeHandle as o,useMemo as i,useCallback as l,useContext as c,useDebugValue as f}from\"preact/hooks\";export*from\"preact/hooks\";import{Component as a,createElement as s,options as h,toChildArray as d,Fragment as v,render as p,hydrate as m,cloneElement as y,createRef as b,createContext as _}from\"preact\";export{createElement,createContext,createRef,Fragment,Component}from\"preact\";function S(n,t){for(var e in t)n[e]=t[e];return n}function C(n,t){for(var e in n)if(\"__source\"!==e&&!(e in t))return!0;for(var r in t)if(\"__source\"!==r&&n[r]!==t[r])return!0;return!1}function E(n){this.props=n}function g(n,t){function e(n){var e=this.props.ref,r=e==n.ref;return!r&&e&&(e.call?e(null):e.current=null),t?!t(this.props,n)||!r:C(this.props,n)}function r(t){return this.shouldComponentUpdate=e,s(n,t)}return r.displayName=\"Memo(\"+(n.displayName||n.name)+\")\",r.prototype.isReactComponent=!0,r.__f=!0,r}(E.prototype=new a).isPureReactComponent=!0,E.prototype.shouldComponentUpdate=function(n,t){return C(this.props,n)||C(this.state,t)};var w=h.__b;h.__b=function(n){n.type&&n.type.__f&&n.ref&&(n.props.ref=n.ref,n.ref=null),w&&w(n)};var R=\"undefined\"!=typeof Symbol&&Symbol.for&&Symbol.for(\"react.forward_ref\")||3911;function x(n){function t(t,e){var r=S({},t);return delete r.ref,n(r,(e=t.ref||e)&&(\"object\"!=typeof e||\"current\"in e)?e:null)}return t.$$typeof=R,t.render=t,t.prototype.isReactComponent=t.__f=!0,t.displayName=\"ForwardRef(\"+(n.displayName||n.name)+\")\",t}var N=function(n,t){return null==n?null:d(d(n).map(t))},k={map:N,forEach:N,count:function(n){return n?d(n).length:0},only:function(n){var t=d(n);if(1!==t.length)throw\"Children.only\";return t[0]},toArray:d},A=h.__e;h.__e=function(n,t,e){if(n.then)for(var r,u=t;u=u.__;)if((r=u.__c)&&r.__c)return null==t.__e&&(t.__e=e.__e,t.__k=e.__k),r.__c(n,t);A(n,t,e)};var O=h.unmount;function L(){this.__u=0,this.t=null,this.__b=null}function U(n){var t=n.__.__c;return t&&t.__e&&t.__e(n)}function F(n){var t,e,r;function u(u){if(t||(t=n()).then(function(n){e=n.default||n},function(n){r=n}),r)throw r;if(!e)throw t;return s(e,u)}return u.displayName=\"Lazy\",u.__f=!0,u}function M(){this.u=null,this.o=null}h.unmount=function(n){var t=n.__c;t&&t.__R&&t.__R(),t&&!0===n.__h&&(n.type=null),O&&O(n)},(L.prototype=new a).__c=function(n,t){var e=t.__c,r=this;null==r.t&&(r.t=[]),r.t.push(e);var u=U(r.__v),o=!1,i=function(){o||(o=!0,e.__R=null,u?u(l):l())};e.__R=i;var l=function(){if(!--r.__u){if(r.state.__e){var n=r.state.__e;r.__v.__k[0]=function n(t,e,r){return t&&(t.__v=null,t.__k=t.__k&&t.__k.map(function(t){return n(t,e,r)}),t.__c&&t.__c.__P===e&&(t.__e&&r.insertBefore(t.__e,t.__d),t.__c.__e=!0,t.__c.__P=r)),t}(n,n.__c.__P,n.__c.__O)}var t;for(r.setState({__e:r.__b=null});t=r.t.pop();)t.forceUpdate()}},c=!0===t.__h;r.__u++||c||r.setState({__e:r.__b=r.__v.__k[0]}),n.then(i,i)},L.prototype.componentWillUnmount=function(){this.t=[]},L.prototype.render=function(n,t){if(this.__b){if(this.__v.__k){var e=document.createElement(\"div\"),r=this.__v.__k[0].__c;this.__v.__k[0]=function n(t,e,r){return t&&(t.__c&&t.__c.__H&&(t.__c.__H.__.forEach(function(n){\"function\"==typeof n.__c&&n.__c()}),t.__c.__H=null),null!=(t=S({},t)).__c&&(t.__c.__P===r&&(t.__c.__P=e),t.__c=null),t.__k=t.__k&&t.__k.map(function(t){return n(t,e,r)})),t}(this.__b,e,r.__O=r.__P)}this.__b=null}var u=t.__e&&s(v,null,n.fallback);return u&&(u.__h=null),[s(v,null,t.__e?null:n.children),u]};var T=function(n,t,e){if(++e[1]===e[0]&&n.o.delete(t),n.props.revealOrder&&(\"t\"!==n.props.revealOrder[0]||!n.o.size))for(e=n.u;e;){for(;e.length>3;)e.pop()();if(e[1]<e[0])break;n.u=e=e[2]}};function D(n){return this.getChildContext=function(){return n.context},n.children}function I(n){var t=this,e=n.i;t.componentWillUnmount=function(){p(null,t.l),t.l=null,t.i=null},t.i&&t.i!==e&&t.componentWillUnmount(),n.__v?(t.l||(t.i=e,t.l={nodeType:1,parentNode:e,childNodes:[],appendChild:function(n){this.childNodes.push(n),t.i.appendChild(n)},insertBefore:function(n,e){this.childNodes.push(n),t.i.appendChild(n)},removeChild:function(n){this.childNodes.splice(this.childNodes.indexOf(n)>>>1,1),t.i.removeChild(n)}}),p(s(D,{context:t.context},n.__v),t.l)):t.l&&t.componentWillUnmount()}function W(n,t){return s(I,{__v:n,i:t})}(M.prototype=new a).__e=function(n){var t=this,e=U(t.__v),r=t.o.get(n);return r[0]++,function(u){var o=function(){t.props.revealOrder?(r.push(u),T(t,n,r)):u()};e?e(o):o()}},M.prototype.render=function(n){this.u=null,this.o=new Map;var t=d(n.children);n.revealOrder&&\"b\"===n.revealOrder[0]&&t.reverse();for(var e=t.length;e--;)this.o.set(t[e],this.u=[1,0,this.u]);return n.children},M.prototype.componentDidUpdate=M.prototype.componentDidMount=function(){var n=this;this.o.forEach(function(t,e){T(n,e,t)})};var j=\"undefined\"!=typeof Symbol&&Symbol.for&&Symbol.for(\"react.element\")||60103,P=/^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|marker(?!H|W|U)|overline|paint|stop|strikethrough|stroke|text(?!L)|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/,V=\"undefined\"!=typeof document,z=function(n){return(\"undefined\"!=typeof Symbol&&\"symbol\"==typeof Symbol()?/fil|che|rad/i:/fil|che|ra/i).test(n)};function B(n,t,e){return null==t.__k&&(t.textContent=\"\"),p(n,t),\"function\"==typeof e&&e(),n?n.__c:null}function $(n,t,e){return m(n,t),\"function\"==typeof e&&e(),n?n.__c:null}a.prototype.isReactComponent={},[\"componentWillMount\",\"componentWillReceiveProps\",\"componentWillUpdate\"].forEach(function(n){Object.defineProperty(a.prototype,n,{configurable:!0,get:function(){return this[\"UNSAFE_\"+n]},set:function(t){Object.defineProperty(this,n,{configurable:!0,writable:!0,value:t})}})});var H=h.event;function Z(){}function Y(){return this.cancelBubble}function q(){return this.defaultPrevented}h.event=function(n){return H&&(n=H(n)),n.persist=Z,n.isPropagationStopped=Y,n.isDefaultPrevented=q,n.nativeEvent=n};var G,J={configurable:!0,get:function(){return this.class}},K=h.vnode;h.vnode=function(n){var t=n.type,e=n.props,r=e;if(\"string\"==typeof t){var u=-1===t.indexOf(\"-\");for(var o in r={},e){var i=e[o];V&&\"children\"===o&&\"noscript\"===t||\"value\"===o&&\"defaultValue\"in e&&null==i||(\"defaultValue\"===o&&\"value\"in e&&null==e.value?o=\"value\":\"download\"===o&&!0===i?i=\"\":/ondoubleclick/i.test(o)?o=\"ondblclick\":/^onchange(textarea|input)/i.test(o+t)&&!z(e.type)?o=\"oninput\":/^onfocus$/i.test(o)?o=\"onfocusin\":/^onblur$/i.test(o)?o=\"onfocusout\":/^on(Ani|Tra|Tou|BeforeInp)/.test(o)?o=o.toLowerCase():u&&P.test(o)?o=o.replace(/[A-Z0-9]/,\"-$&\").toLowerCase():null===i&&(i=void 0),r[o]=i)}\"select\"==t&&r.multiple&&Array.isArray(r.value)&&(r.value=d(e.children).forEach(function(n){n.props.selected=-1!=r.value.indexOf(n.props.value)})),\"select\"==t&&null!=r.defaultValue&&(r.value=d(e.children).forEach(function(n){n.props.selected=r.multiple?-1!=r.defaultValue.indexOf(n.props.value):r.defaultValue==n.props.value})),n.props=r,e.class!=e.className&&(J.enumerable=\"className\"in e,null!=e.className&&(r.class=e.className),Object.defineProperty(r,\"className\",J))}n.$$typeof=j,K&&K(n)};var Q=h.__r;h.__r=function(n){Q&&Q(n),G=n.__c};var X={ReactCurrentDispatcher:{current:{readContext:function(n){return G.__n[n.__c].props.value}}}},nn=\"17.0.2\";function tn(n){return s.bind(null,n)}function en(n){return!!n&&n.$$typeof===j}function rn(n){return en(n)?y.apply(null,arguments):n}function un(n){return!!n.__k&&(p(null,n),!0)}function on(n){return n&&(n.base||1===n.nodeType&&n)||null}var ln=function(n,t){return n(t)},cn=function(n,t){return n(t)},fn=v;export default{useState:n,useReducer:t,useEffect:e,useLayoutEffect:r,useRef:u,useImperativeHandle:o,useMemo:i,useCallback:l,useContext:c,useDebugValue:f,version:\"17.0.2\",Children:k,render:B,hydrate:$,unmountComponentAtNode:un,createPortal:W,createElement:s,createContext:_,createFactory:tn,cloneElement:rn,createRef:b,Fragment:v,isValidElement:en,findDOMNode:on,Component:a,PureComponent:E,memo:g,forwardRef:x,flushSync:cn,unstable_batchedUpdates:ln,StrictMode:v,Suspense:L,SuspenseList:M,lazy:F,__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:X};export{nn as version,k as Children,B as render,$ as hydrate,un as unmountComponentAtNode,W as createPortal,tn as createFactory,rn as cloneElement,en as isValidElement,on as findDOMNode,E as PureComponent,g as memo,x as forwardRef,cn as flushSync,ln as unstable_batchedUpdates,fn as StrictMode,L as Suspense,M as SuspenseList,F as lazy,X as __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED};\n//# sourceMappingURL=compat.module.js.map\n", "/**\r\n * Assign properties from `props` to `obj`\r\n * @template O, P The obj and props types\r\n * @param {O} obj The object to copy properties to\r\n * @param {P} props The object to copy properties from\r\n * @returns {O & P}\r\n */\r\nexport function assign(obj, props) {\r\n\tfor (let i in props) obj[i] = props[i];\r\n\treturn /** @type {O & P} */ (obj);\r\n}\r\n\r\n/**\r\n * Check if two objects have a different shape\r\n * @param {object} a\r\n * @param {object} b\r\n * @returns {boolean}\r\n */\r\nexport function shallowDiffers(a, b) {\r\n\tfor (let i in a) if (i !== '__source' && !(i in b)) return true;\r\n\tfor (let i in b) if (i !== '__source' && a[i] !== b[i]) return true;\r\n\treturn false;\r\n}\r\n\r\nexport function removeNode(node) {\r\n\tlet parentNode = node.parentNode;\r\n\tif (parentNode) parentNode.removeChild(node);\r\n}\r\n", "import { Component } from 'preact';\r\nimport { shallowDiffers } from './util';\r\n\r\n/**\r\n * Component class with a predefined `shouldComponentUpdate` implementation\r\n */\r\nexport function PureComponent(p) {\r\n\tthis.props = p;\r\n}\r\nPureComponent.prototype = new Component();\r\n// Some third-party libraries check if this property is present\r\nPureComponent.prototype.isPureReactComponent = true;\r\nPureComponent.prototype.shouldComponentUpdate = function(props, state) {\r\n\treturn shallowDiffers(this.props, props) || shallowDiffers(this.state, state);\r\n};\r\n", "import { createElement } from 'preact';\r\nimport { shallowDiffers } from './util';\r\n\r\n/**\r\n * Memoize a component, so that it only updates when the props actually have\r\n * changed. This was previously known as `React.pure`.\r\n * @param {import('./internal').FunctionComponent} c functional component\r\n * @param {(prev: object, next: object) => boolean} [comparer] Custom equality function\r\n * @returns {import('./internal').FunctionComponent}\r\n */\r\nexport function memo(c, comparer) {\r\n\tfunction shouldUpdate(nextProps) {\r\n\t\tlet ref = this.props.ref;\r\n\t\tlet updateRef = ref == nextProps.ref;\r\n\t\tif (!updateRef && ref) {\r\n\t\t\tref.call ? ref(null) : (ref.current = null);\r\n\t\t}\r\n\r\n\t\tif (!comparer) {\r\n\t\t\treturn shallowDiffers(this.props, nextProps);\r\n\t\t}\r\n\r\n\t\treturn !comparer(this.props, nextProps) || !updateRef;\r\n\t}\r\n\r\n\tfunction Memoed(props) {\r\n\t\tthis.shouldComponentUpdate = shouldUpdate;\r\n\t\treturn createElement(c, props);\r\n\t}\r\n\tMemoed.displayName = 'Memo(' + (c.displayName || c.name) + ')';\r\n\tMemoed.prototype.isReactComponent = true;\r\n\tMemoed._forwarded = true;\r\n\treturn Memoed;\r\n}\r\n", "import { options } from 'preact';\r\nimport { assign } from './util';\r\n\r\nlet oldDiffHook = options._diff;\r\noptions._diff = vnode => {\r\n\tif (vnode.type && vnode.type._forwarded && vnode.ref) {\r\n\t\tvnode.props.ref = vnode.ref;\r\n\t\tvnode.ref = null;\r\n\t}\r\n\tif (oldDiffHook) oldDiffHook(vnode);\r\n};\r\n\r\nexport const REACT_FORWARD_SYMBOL =\r\n\t(typeof Symbol != 'undefined' &&\r\n\t\tSymbol.for &&\r\n\t\tSymbol.for('react.forward_ref')) ||\r\n\t0xf47;\r\n\r\n/**\r\n * Pass ref down to a child. This is mainly used in libraries with HOCs that\r\n * wrap components. Using `forwardRef` there is an easy way to get a reference\r\n * of the wrapped component instead of one of the wrapper itself.\r\n * @param {import('./index').ForwardFn} fn\r\n * @returns {import('./internal').FunctionComponent}\r\n */\r\nexport function forwardRef(fn) {\r\n\t// We always have ref in props.ref, except for\r\n\t// mobx-react. It will call this function directly\r\n\t// and always pass ref as the second argument.\r\n\tfunction Forwarded(props, ref) {\r\n\t\tlet clone = assign({}, props);\r\n\t\tdelete clone.ref;\r\n\t\tref = props.ref || ref;\r\n\t\treturn fn(\r\n\t\t\tclone,\r\n\t\t\t!ref || (typeof ref === 'object' && !('current' in ref)) ? null : ref\r\n\t\t);\r\n\t}\r\n\r\n\t// mobx-react checks for this being present\r\n\tForwarded.$$typeof = REACT_FORWARD_SYMBOL;\r\n\t// mobx-react heavily relies on implementation details.\r\n\t// It expects an object here with a `render` property,\r\n\t// and prototype.render will fail. Without this\r\n\t// mobx-react throws.\r\n\tForwarded.render = Forwarded;\r\n\r\n\tForwarded.prototype.isReactComponent = Forwarded._forwarded = true;\r\n\tForwarded.displayName = 'ForwardRef(' + (fn.displayName || fn.name) + ')';\r\n\treturn Forwarded;\r\n}\r\n", "import { toChildArray } from 'preact';\r\n\r\nconst mapFn = (children, fn) => {\r\n\tif (children == null) return null;\r\n\treturn toChildArray(toChildArray(children).map(fn));\r\n};\r\n\r\n// This API is completely unnecessary for Preact, so it's basically passthrough.\r\nexport const Children = {\r\n\tmap: mapFn,\r\n\tforEach: mapFn,\r\n\tcount(children) {\r\n\t\treturn children ? toChildArray(children).length : 0;\r\n\t},\r\n\tonly(children) {\r\n\t\tconst normalized = toChildArray(children);\r\n\t\tif (normalized.length !== 1) throw 'Children.only';\r\n\t\treturn normalized[0];\r\n\t},\r\n\ttoArray: toChildArray\r\n};\r\n", "import { Component, createElement, options, Fragment } from 'preact';\r\nimport { assign } from './util';\r\n\r\nconst oldCatchError = options._catchError;\r\noptions._catchError = function(error, newVNode, oldVNode) {\r\n\tif (error.then) {\r\n\t\t/** @type {import('./internal').Component} */\r\n\t\tlet component;\r\n\t\tlet vnode = newVNode;\r\n\r\n\t\tfor (; (vnode = vnode._parent); ) {\r\n\t\t\tif ((component = vnode._component) && component._childDidSuspend) {\r\n\t\t\t\tif (newVNode._dom == null) {\r\n\t\t\t\t\tnewVNode._dom = oldVNode._dom;\r\n\t\t\t\t\tnewVNode._children = oldVNode._children;\r\n\t\t\t\t}\r\n\t\t\t\t// Don't call oldCatchError if we found a Suspense\r\n\t\t\t\treturn component._childDidSuspend(error, newVNode);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\toldCatchError(error, newVNode, oldVNode);\r\n};\r\n\r\nconst oldUnmount = options.unmount;\r\noptions.unmount = function(vnode) {\r\n\t/** @type {import('./internal').Component} */\r\n\tconst component = vnode._component;\r\n\tif (component && component._onResolve) {\r\n\t\tcomponent._onResolve();\r\n\t}\r\n\r\n\t// if the component is still hydrating\r\n\t// most likely it is because the component is suspended\r\n\t// we set the vnode.type as `null` so that it is not a typeof function\r\n\t// so the unmount will remove the vnode._dom\r\n\tif (component && vnode._hydrating === true) {\r\n\t\tvnode.type = null;\r\n\t}\r\n\r\n\tif (oldUnmount) oldUnmount(vnode);\r\n};\r\n\r\nfunction detachedClone(vnode, detachedParent, parentDom) {\r\n\tif (vnode) {\r\n\t\tif (vnode._component && vnode._component.__hooks) {\r\n\t\t\tvnode._component.__hooks._list.forEach(effect => {\r\n\t\t\t\tif (typeof effect._cleanup == 'function') effect._cleanup();\r\n\t\t\t});\r\n\r\n\t\t\tvnode._component.__hooks = null;\r\n\t\t}\r\n\r\n\t\tvnode = assign({}, vnode);\r\n\t\tif (vnode._component != null) {\r\n\t\t\tif (vnode._component._parentDom === parentDom) {\r\n\t\t\t\tvnode._component._parentDom = detachedParent;\r\n\t\t\t}\r\n\t\t\tvnode._component = null;\r\n\t\t}\r\n\r\n\t\tvnode._children =\r\n\t\t\tvnode._children &&\r\n\t\t\tvnode._children.map(child =>\r\n\t\t\t\tdetachedClone(child, detachedParent, parentDom)\r\n\t\t\t);\r\n\t}\r\n\r\n\treturn vnode;\r\n}\r\n\r\nfunction removeOriginal(vnode, detachedParent, originalParent) {\r\n\tif (vnode) {\r\n\t\tvnode._original = null;\r\n\t\tvnode._children =\r\n\t\t\tvnode._children &&\r\n\t\t\tvnode._children.map(child =>\r\n\t\t\t\tremoveOriginal(child, detachedParent, originalParent)\r\n\t\t\t);\r\n\r\n\t\tif (vnode._component) {\r\n\t\t\tif (vnode._component._parentDom === detachedParent) {\r\n\t\t\t\tif (vnode._dom) {\r\n\t\t\t\t\toriginalParent.insertBefore(vnode._dom, vnode._nextDom);\r\n\t\t\t\t}\r\n\t\t\t\tvnode._component._force = true;\r\n\t\t\t\tvnode._component._parentDom = originalParent;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn vnode;\r\n}\r\n\r\n// having custom inheritance instead of a class here saves a lot of bytes\r\nexport function Suspense() {\r\n\t// we do not call super here to golf some bytes...\r\n\tthis._pendingSuspensionCount = 0;\r\n\tthis._suspenders = null;\r\n\tthis._detachOnNextRender = null;\r\n}\r\n\r\n// Things we do here to save some bytes but are not proper JS inheritance:\r\n// - call `new Component()` as the prototype\r\n// - do not set `Suspense.prototype.constructor` to `Suspense`\r\nSuspense.prototype = new Component();\r\n\r\n/**\r\n * @this {import('./internal').SuspenseComponent}\r\n * @param {Promise} promise The thrown promise\r\n * @param {import('./internal').VNode<any, any>} suspendingVNode The suspending component\r\n */\r\nSuspense.prototype._childDidSuspend = function(promise, suspendingVNode) {\r\n\tconst suspendingComponent = suspendingVNode._component;\r\n\r\n\t/** @type {import('./internal').SuspenseComponent} */\r\n\tconst c = this;\r\n\r\n\tif (c._suspenders == null) {\r\n\t\tc._suspenders = [];\r\n\t}\r\n\tc._suspenders.push(suspendingComponent);\r\n\r\n\tconst resolve = suspended(c._vnode);\r\n\r\n\tlet resolved = false;\r\n\tconst onResolved = () => {\r\n\t\tif (resolved) return;\r\n\r\n\t\tresolved = true;\r\n\t\tsuspendingComponent._onResolve = null;\r\n\r\n\t\tif (resolve) {\r\n\t\t\tresolve(onSuspensionComplete);\r\n\t\t} else {\r\n\t\t\tonSuspensionComplete();\r\n\t\t}\r\n\t};\r\n\r\n\tsuspendingComponent._onResolve = onResolved;\r\n\r\n\tconst onSuspensionComplete = () => {\r\n\t\tif (!--c._pendingSuspensionCount) {\r\n\t\t\t// If the suspension was during hydration we don't need to restore the\r\n\t\t\t// suspended children into the _children array\r\n\t\t\tif (c.state._suspended) {\r\n\t\t\t\tconst suspendedVNode = c.state._suspended;\r\n\t\t\t\tc._vnode._children[0] = removeOriginal(\r\n\t\t\t\t\tsuspendedVNode,\r\n\t\t\t\t\tsuspendedVNode._component._parentDom,\r\n\t\t\t\t\tsuspendedVNode._component._originalParentDom\r\n\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\tc.setState({ _suspended: (c._detachOnNextRender = null) });\r\n\r\n\t\t\tlet suspended;\r\n\t\t\twhile ((suspended = c._suspenders.pop())) {\r\n\t\t\t\tsuspended.forceUpdate();\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t/**\r\n\t * We do not set `suspended: true` during hydration because we want the actual markup\r\n\t * to remain on screen and hydrate it when the suspense actually gets resolved.\r\n\t * While in non-hydration cases the usual fallback -> component flow would occour.\r\n\t */\r\n\tconst wasHydrating = suspendingVNode._hydrating === true;\r\n\tif (!c._pendingSuspensionCount++ && !wasHydrating) {\r\n\t\tc.setState({ _suspended: (c._detachOnNextRender = c._vnode._children[0]) });\r\n\t}\r\n\tpromise.then(onResolved, onResolved);\r\n};\r\n\r\nSuspense.prototype.componentWillUnmount = function() {\r\n\tthis._suspenders = [];\r\n};\r\n\r\n/**\r\n * @this {import('./internal').SuspenseComponent}\r\n * @param {import('./internal').SuspenseComponent[\"props\"]} props\r\n * @param {import('./internal').SuspenseState} state\r\n */\r\nSuspense.prototype.render = function(props, state) {\r\n\tif (this._detachOnNextRender) {\r\n\t\t// When the Suspense's _vnode was created by a call to createVNode\r\n\t\t// (i.e. due to a setState further up in the tree)\r\n\t\t// it's _children prop is null, in this case we \"forget\" about the parked vnodes to detach\r\n\t\tif (this._vnode._children) {\r\n\t\t\tconst detachedParent = document.createElement('div');\r\n\t\t\tconst detachedComponent = this._vnode._children[0]._component;\r\n\t\t\tthis._vnode._children[0] = detachedClone(\r\n\t\t\t\tthis._detachOnNextRender,\r\n\t\t\t\tdetachedParent,\r\n\t\t\t\t(detachedComponent._originalParentDom = detachedComponent._parentDom)\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\tthis._detachOnNextRender = null;\r\n\t}\r\n\r\n\t// Wrap fallback tree in a VNode that prevents itself from being marked as aborting mid-hydration:\r\n\t/** @type {import('./internal').VNode} */\r\n\tconst fallback =\r\n\t\tstate._suspended && createElement(Fragment, null, props.fallback);\r\n\tif (fallback) fallback._hydrating = null;\r\n\r\n\treturn [\r\n\t\tcreateElement(Fragment, null, state._suspended ? null : props.children),\r\n\t\tfallback\r\n\t];\r\n};\r\n\r\n/**\r\n * Checks and calls the parent component's _suspended method, passing in the\r\n * suspended vnode. This is a way for a parent (e.g. SuspenseList) to get notified\r\n * that one of its children/descendants suspended.\r\n *\r\n * The parent MAY return a callback. The callback will get called when the\r\n * suspension resolves, notifying the parent of the fact.\r\n * Moreover, the callback gets function `unsuspend` as a parameter. The resolved\r\n * child descendant will not actually get unsuspended until `unsuspend` gets called.\r\n * This is a way for the parent to delay unsuspending.\r\n *\r\n * If the parent does not return a callback then the resolved vnode\r\n * gets unsuspended immediately when it resolves.\r\n *\r\n * @param {import('./internal').VNode} vnode\r\n * @returns {((unsuspend: () => void) => void)?}\r\n */\r\nexport function suspended(vnode) {\r\n\t/** @type {import('./internal').Component} */\r\n\tlet component = vnode._parent._component;\r\n\treturn component && component._suspended && component._suspended(vnode);\r\n}\r\n\r\nexport function lazy(loader) {\r\n\tlet prom;\r\n\tlet component;\r\n\tlet error;\r\n\r\n\tfunction Lazy(props) {\r\n\t\tif (!prom) {\r\n\t\t\tprom = loader();\r\n\t\t\tprom.then(\r\n\t\t\t\texports => {\r\n\t\t\t\t\tcomponent = exports.default || exports;\r\n\t\t\t\t},\r\n\t\t\t\te => {\r\n\t\t\t\t\terror = e;\r\n\t\t\t\t}\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\tif (error) {\r\n\t\t\tthrow error;\r\n\t\t}\r\n\r\n\t\tif (!component) {\r\n\t\t\tthrow prom;\r\n\t\t}\r\n\r\n\t\treturn createElement(component, props);\r\n\t}\r\n\r\n\tLazy.displayName = 'Lazy';\r\n\tLazy._forwarded = true;\r\n\treturn Lazy;\r\n}\r\n", "import { Component, toChildArray } from 'preact';\r\nimport { suspended } from './suspense.js';\r\n\r\n// Indexes to linked list nodes (nodes are stored as arrays to save bytes).\r\nconst SUSPENDED_COUNT = 0;\r\nconst RESOLVED_COUNT = 1;\r\nconst NEXT_NODE = 2;\r\n\r\n// Having custom inheritance instead of a class here saves a lot of bytes.\r\nexport function SuspenseList() {\r\n\tthis._next = null;\r\n\tthis._map = null;\r\n}\r\n\r\n// Mark one of child's earlier suspensions as resolved.\r\n// Some pending callbacks may become callable due to this\r\n// (e.g. the last suspended descendant gets resolved when\r\n// revealOrder === 'together'). Process those callbacks as well.\r\nconst resolve = (list, child, node) => {\r\n\tif (++node[RESOLVED_COUNT] === node[SUSPENDED_COUNT]) {\r\n\t\t// The number a child (or any of its descendants) has been suspended\r\n\t\t// matches the number of times it's been resolved. Therefore we\r\n\t\t// mark the child as completely resolved by deleting it from ._map.\r\n\t\t// This is used to figure out when *all* children have been completely\r\n\t\t// resolved when revealOrder is 'together'.\r\n\t\tlist._map.delete(child);\r\n\t}\r\n\r\n\t// If revealOrder is falsy then we can do an early exit, as the\r\n\t// callbacks won't get queued in the node anyway.\r\n\t// If revealOrder is 'together' then also do an early exit\r\n\t// if all suspended descendants have not yet been resolved.\r\n\tif (\r\n\t\t!list.props.revealOrder ||\r\n\t\t(list.props.revealOrder[0] === 't' && list._map.size)\r\n\t) {\r\n\t\treturn;\r\n\t}\r\n\r\n\t// Walk the currently suspended children in order, calling their\r\n\t// stored callbacks on the way. Stop if we encounter a child that\r\n\t// has not been completely resolved yet.\r\n\tnode = list._next;\r\n\twhile (node) {\r\n\t\twhile (node.length > 3) {\r\n\t\t\tnode.pop()();\r\n\t\t}\r\n\t\tif (node[RESOLVED_COUNT] < node[SUSPENDED_COUNT]) {\r\n\t\t\tbreak;\r\n\t\t}\r\n\t\tlist._next = node = node[NEXT_NODE];\r\n\t}\r\n};\r\n\r\n// Things we do here to save some bytes but are not proper JS inheritance:\r\n// - call `new Component()` as the prototype\r\n// - do not set `Suspense.prototype.constructor` to `Suspense`\r\nSuspenseList.prototype = new Component();\r\n\r\nSuspenseList.prototype._suspended = function(child) {\r\n\tconst list = this;\r\n\tconst delegated = suspended(list._vnode);\r\n\r\n\tlet node = list._map.get(child);\r\n\tnode[SUSPENDED_COUNT]++;\r\n\r\n\treturn unsuspend => {\r\n\t\tconst wrappedUnsuspend = () => {\r\n\t\t\tif (!list.props.revealOrder) {\r\n\t\t\t\t// Special case the undefined (falsy) revealOrder, as there\r\n\t\t\t\t// is no need to coordinate a specific order or unsuspends.\r\n\t\t\t\tunsuspend();\r\n\t\t\t} else {\r\n\t\t\t\tnode.push(unsuspend);\r\n\t\t\t\tresolve(list, child, node);\r\n\t\t\t}\r\n\t\t};\r\n\t\tif (delegated) {\r\n\t\t\tdelegated(wrappedUnsuspend);\r\n\t\t} else {\r\n\t\t\twrappedUnsuspend();\r\n\t\t}\r\n\t};\r\n};\r\n\r\nSuspenseList.prototype.render = function(props) {\r\n\tthis._next = null;\r\n\tthis._map = new Map();\r\n\r\n\tconst children = toChildArray(props.children);\r\n\tif (props.revealOrder && props.revealOrder[0] === 'b') {\r\n\t\t// If order === 'backwards' (or, well, anything starting with a 'b')\r\n\t\t// then flip the child list around so that the last child will be\r\n\t\t// the first in the linked list.\r\n\t\tchildren.reverse();\r\n\t}\r\n\t// Build the linked list. Iterate through the children in reverse order\r\n\t// so that `_next` points to the first linked list node to be resolved.\r\n\tfor (let i = children.length; i--; ) {\r\n\t\t// Create a new linked list node as an array of form:\r\n\t\t// \t[suspended_count, resolved_count, next_node]\r\n\t\t// where suspended_count and resolved_count are numeric counters for\r\n\t\t// keeping track how many times a node has been suspended and resolved.\r\n\t\t//\r\n\t\t// Note that suspended_count starts from 1 instead of 0, so we can block\r\n\t\t// processing callbacks until componentDidMount has been called. In a sense\r\n\t\t// node is suspended at least until componentDidMount gets called!\r\n\t\t//\r\n\t\t// Pending callbacks are added to the end of the node:\r\n\t\t// \t[suspended_count, resolved_count, next_node, callback_0, callback_1, ...]\r\n\t\tthis._map.set(children[i], (this._next = [1, 0, this._next]));\r\n\t}\r\n\treturn props.children;\r\n};\r\n\r\nSuspenseList.prototype.componentDidUpdate = SuspenseList.prototype.componentDidMount = function() {\r\n\t// Iterate through all children after mounting for two reasons:\r\n\t// 1. As each node[SUSPENDED_COUNT] starts from 1, this iteration increases\r\n\t//    each node[RELEASED_COUNT] by 1, therefore balancing the counters.\r\n\t//    The nodes can now be completely consumed from the linked list.\r\n\t// 2. Handle nodes that might have gotten resolved between render and\r\n\t//    componentDidMount.\r\n\tthis._map.forEach((node, child) => {\r\n\t\tresolve(this, child, node);\r\n\t});\r\n};\r\n", "import { createElement, render } from 'preact';\r\n\r\n/**\r\n * @param {import('../../src/index').RenderableProps<{ context: any }>} props\r\n */\r\nfunction ContextProvider(props) {\r\n\tthis.getChildContext = () => props.context;\r\n\treturn props.children;\r\n}\r\n\r\n/**\r\n * Portal component\r\n * @this {import('./internal').Component}\r\n * @param {object | null | undefined} props\r\n *\r\n * TODO: use createRoot() instead of fake root\r\n */\r\nfunction Portal(props) {\r\n\tconst _this = this;\r\n\tlet container = props._container;\r\n\r\n\t_this.componentWillUnmount = function() {\r\n\t\trender(null, _this._temp);\r\n\t\t_this._temp = null;\r\n\t\t_this._container = null;\r\n\t};\r\n\r\n\t// When we change container we should clear our old container and\r\n\t// indicate a new mount.\r\n\tif (_this._container && _this._container !== container) {\r\n\t\t_this.componentWillUnmount();\r\n\t}\r\n\r\n\t// When props.vnode is undefined/false/null we are dealing with some kind of\r\n\t// conditional vnode. This should not trigger a render.\r\n\tif (props._vnode) {\r\n\t\tif (!_this._temp) {\r\n\t\t\t_this._container = container;\r\n\r\n\t\t\t// Create a fake DOM parent node that manages a subset of `container`'s children:\r\n\t\t\t_this._temp = {\r\n\t\t\t\tnodeType: 1,\r\n\t\t\t\tparentNode: container,\r\n\t\t\t\tchildNodes: [],\r\n\t\t\t\tappendChild(child) {\r\n\t\t\t\t\tthis.childNodes.push(child);\r\n\t\t\t\t\t_this._container.appendChild(child);\r\n\t\t\t\t},\r\n\t\t\t\tinsertBefore(child, before) {\r\n\t\t\t\t\tthis.childNodes.push(child);\r\n\t\t\t\t\t_this._container.appendChild(child);\r\n\t\t\t\t},\r\n\t\t\t\tremoveChild(child) {\r\n\t\t\t\t\tthis.childNodes.splice(this.childNodes.indexOf(child) >>> 1, 1);\r\n\t\t\t\t\t_this._container.removeChild(child);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\t// Render our wrapping element into temp.\r\n\t\trender(\r\n\t\t\tcreateElement(ContextProvider, { context: _this.context }, props._vnode),\r\n\t\t\t_this._temp\r\n\t\t);\r\n\t}\r\n\t// When we come from a conditional render, on a mounted\r\n\t// portal we should clear the DOM.\r\n\telse if (_this._temp) {\r\n\t\t_this.componentWillUnmount();\r\n\t}\r\n}\r\n\r\n/**\r\n * Create a `Portal` to continue rendering the vnode tree at a different DOM node\r\n * @param {import('./internal').VNode} vnode The vnode to render\r\n * @param {import('./internal').PreactElement} container The DOM node to continue rendering in to.\r\n */\r\nexport function createPortal(vnode, container) {\r\n\treturn createElement(Portal, { _vnode: vnode, _container: container });\r\n}\r\n", "import {\r\n\trender as preactRender,\r\n\thydrate as preactHydrate,\r\n\toptions,\r\n\ttoChildArray,\r\n\tComponent\r\n} from 'preact';\r\n\r\nexport const REACT_ELEMENT_TYPE =\r\n\t(typeof Symbol != 'undefined' && Symbol.for && Symbol.for('react.element')) ||\r\n\t0xeac7;\r\n\r\nconst CAMEL_PROPS = /^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|marker(?!H|W|U)|overline|paint|stop|strikethrough|stroke|text(?!L)|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/;\r\n\r\nconst IS_DOM = typeof document !== 'undefined';\r\n\r\n// Input types for which onchange should not be converted to oninput.\r\n// type=\"file|checkbox|radio\", plus \"range\" in IE11.\r\n// (IE11 doesn't support Symbol, which we use here to turn `rad` into `ra` which matches \"range\")\r\nconst onChangeInputType = type =>\r\n\t(typeof Symbol != 'undefined' && typeof Symbol() == 'symbol'\r\n\t\t? /fil|che|rad/i\r\n\t\t: /fil|che|ra/i\r\n\t).test(type);\r\n\r\n// Some libraries like `react-virtualized` explicitly check for this.\r\nComponent.prototype.isReactComponent = {};\r\n\r\n// `UNSAFE_*` lifecycle hooks\r\n// Preact only ever invokes the unprefixed methods.\r\n// Here we provide a base \"fallback\" implementation that calls any defined UNSAFE_ prefixed method.\r\n// - If a component defines its own `componentDidMount()` (including via defineProperty), use that.\r\n// - If a component defines `UNSAFE_componentDidMount()`, `componentDidMount` is the alias getter/setter.\r\n// - If anything assigns to an `UNSAFE_*` property, the assignment is forwarded to the unprefixed property.\r\n// See https://github.com/preactjs/preact/issues/1941\r\n[\r\n\t'componentWillMount',\r\n\t'componentWillReceiveProps',\r\n\t'componentWillUpdate'\r\n].forEach(key => {\r\n\tObject.defineProperty(Component.prototype, key, {\r\n\t\tconfigurable: true,\r\n\t\tget() {\r\n\t\t\treturn this['UNSAFE_' + key];\r\n\t\t},\r\n\t\tset(v) {\r\n\t\t\tObject.defineProperty(this, key, {\r\n\t\t\t\tconfigurable: true,\r\n\t\t\t\twritable: true,\r\n\t\t\t\tvalue: v\r\n\t\t\t});\r\n\t\t}\r\n\t});\r\n});\r\n\r\n/**\r\n * Proxy render() since React returns a Component reference.\r\n * @param {import('./internal').VNode} vnode VNode tree to render\r\n * @param {import('./internal').PreactElement} parent DOM node to render vnode tree into\r\n * @param {() => void} [callback] Optional callback that will be called after rendering\r\n * @returns {import('./internal').Component | null} The root component reference or null\r\n */\r\nexport function render(vnode, parent, callback) {\r\n\t// React destroys any existing DOM nodes, see #1727\r\n\t// ...but only on the first render, see #1828\r\n\tif (parent._children == null) {\r\n\t\tparent.textContent = '';\r\n\t}\r\n\r\n\tpreactRender(vnode, parent);\r\n\tif (typeof callback == 'function') callback();\r\n\r\n\treturn vnode ? vnode._component : null;\r\n}\r\n\r\nexport function hydrate(vnode, parent, callback) {\r\n\tpreactHydrate(vnode, parent);\r\n\tif (typeof callback == 'function') callback();\r\n\r\n\treturn vnode ? vnode._component : null;\r\n}\r\n\r\nlet oldEventHook = options.event;\r\noptions.event = e => {\r\n\tif (oldEventHook) e = oldEventHook(e);\r\n\te.persist = empty;\r\n\te.isPropagationStopped = isPropagationStopped;\r\n\te.isDefaultPrevented = isDefaultPrevented;\r\n\treturn (e.nativeEvent = e);\r\n};\r\n\r\nfunction empty() {}\r\n\r\nfunction isPropagationStopped() {\r\n\treturn this.cancelBubble;\r\n}\r\n\r\nfunction isDefaultPrevented() {\r\n\treturn this.defaultPrevented;\r\n}\r\n\r\nlet classNameDescriptor = {\r\n\tconfigurable: true,\r\n\tget() {\r\n\t\treturn this.class;\r\n\t}\r\n};\r\n\r\nlet oldVNodeHook = options.vnode;\r\noptions.vnode = vnode => {\r\n\tlet type = vnode.type;\r\n\tlet props = vnode.props;\r\n\tlet normalizedProps = props;\r\n\r\n\t// only normalize props on Element nodes\r\n\tif (typeof type === 'string') {\r\n\t\tconst nonCustomElement = type.indexOf('-') === -1;\r\n\t\tnormalizedProps = {};\r\n\r\n\t\tfor (let i in props) {\r\n\t\t\tlet value = props[i];\r\n\r\n\t\t\tif (IS_DOM && i === 'children' && type === 'noscript') {\r\n\t\t\t\t// Emulate React's behavior of not rendering the contents of noscript tags on the client.\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\t\t\telse if (i === 'value' && 'defaultValue' in props && value == null) {\r\n\t\t\t\t// Skip applying value if it is null/undefined and we already set\r\n\t\t\t\t// a default value\r\n\t\t\t\tcontinue;\r\n\t\t\t} else if (\r\n\t\t\t\ti === 'defaultValue' &&\r\n\t\t\t\t'value' in props &&\r\n\t\t\t\tprops.value == null\r\n\t\t\t) {\r\n\t\t\t\t// `defaultValue` is treated as a fallback `value` when a value prop is present but null/undefined.\r\n\t\t\t\t// `defaultValue` for Elements with no value prop is the same as the DOM defaultValue property.\r\n\t\t\t\ti = 'value';\r\n\t\t\t} else if (i === 'download' && value === true) {\r\n\t\t\t\t// Calling `setAttribute` with a truthy value will lead to it being\r\n\t\t\t\t// passed as a stringified value, e.g. `download=\"true\"`. React\r\n\t\t\t\t// converts it to an empty string instead, otherwise the attribute\r\n\t\t\t\t// value will be used as the file name and the file will be called\r\n\t\t\t\t// \"true\" upon downloading it.\r\n\t\t\t\tvalue = '';\r\n\t\t\t} else if (/ondoubleclick/i.test(i)) {\r\n\t\t\t\ti = 'ondblclick';\r\n\t\t\t} else if (\r\n\t\t\t\t/^onchange(textarea|input)/i.test(i + type) &&\r\n\t\t\t\t!onChangeInputType(props.type)\r\n\t\t\t) {\r\n\t\t\t\ti = 'oninput';\r\n\t\t\t} else if (/^onfocus$/i.test(i)) {\r\n\t\t\t\ti = 'onfocusin';\r\n\t\t\t} else if (/^onblur$/i.test(i)) {\r\n\t\t\t\ti = 'onfocusout';\r\n\t\t\t} else if (/^on(Ani|Tra|Tou|BeforeInp)/.test(i)) {\r\n\t\t\t\ti = i.toLowerCase();\r\n\t\t\t} else if (nonCustomElement && CAMEL_PROPS.test(i)) {\r\n\t\t\t\ti = i.replace(/[A-Z0-9]/, '-$&').toLowerCase();\r\n\t\t\t} else if (value === null) {\r\n\t\t\t\tvalue = undefined;\r\n\t\t\t}\r\n\r\n\t\t\tnormalizedProps[i] = value;\r\n\t\t}\r\n\r\n\t\t// Add support for array select values: <select multiple value={[]} />\r\n\t\tif (\r\n\t\t\ttype == 'select' &&\r\n\t\t\tnormalizedProps.multiple &&\r\n\t\t\tArray.isArray(normalizedProps.value)\r\n\t\t) {\r\n\t\t\t// forEach() always returns undefined, which we abuse here to unset the value prop.\r\n\t\t\tnormalizedProps.value = toChildArray(props.children).forEach(child => {\r\n\t\t\t\tchild.props.selected =\r\n\t\t\t\t\tnormalizedProps.value.indexOf(child.props.value) != -1;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\t// Adding support for defaultValue in select tag\r\n\t\tif (type == 'select' && normalizedProps.defaultValue != null) {\r\n\t\t\tnormalizedProps.value = toChildArray(props.children).forEach(child => {\r\n\t\t\t\tif (normalizedProps.multiple) {\r\n\t\t\t\t\tchild.props.selected =\r\n\t\t\t\t\t\tnormalizedProps.defaultValue.indexOf(child.props.value) != -1;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tchild.props.selected =\r\n\t\t\t\t\t\tnormalizedProps.defaultValue == child.props.value;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tvnode.props = normalizedProps;\r\n\r\n\t\tif (props.class != props.className) {\r\n\t\t\tclassNameDescriptor.enumerable = 'className' in props;\r\n\t\t\tif (props.className != null) normalizedProps.class = props.className;\r\n\t\t\tObject.defineProperty(normalizedProps, 'className', classNameDescriptor);\r\n\t\t}\r\n\t}\r\n\r\n\tvnode.$$typeof = REACT_ELEMENT_TYPE;\r\n\r\n\tif (oldVNodeHook) oldVNodeHook(vnode);\r\n};\r\n\r\n// Only needed for react-relay\r\nlet currentComponent;\r\nconst oldBeforeRender = options._render;\r\noptions._render = function(vnode) {\r\n\tif (oldBeforeRender) {\r\n\t\toldBeforeRender(vnode);\r\n\t}\r\n\tcurrentComponent = vnode._component;\r\n};\r\n\r\n// This is a very very private internal function for React it\r\n// is used to sort-of do runtime dependency injection. So far\r\n// only `react-relay` makes use of it. It uses it to read the\r\n// context value.\r\nexport const __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = {\r\n\tReactCurrentDispatcher: {\r\n\t\tcurrent: {\r\n\t\t\treadContext(context) {\r\n\t\t\t\treturn currentComponent._globalContext[context._id].props.value;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n};\r\n", "import {\r\n\tcreateElement,\r\n\trender as preactRender,\r\n\tcloneElement as preactCloneElement,\r\n\tcreateRef,\r\n\tComponent,\r\n\tcreateContext,\r\n\tFragment\r\n} from 'preact';\r\nimport {\r\n\tuseState,\r\n\tuseReducer,\r\n\tuseEffect,\r\n\tuseLayoutEffect,\r\n\tuseRef,\r\n\tuseImperativeHandle,\r\n\tuseMemo,\r\n\tuseCallback,\r\n\tuseContext,\r\n\tuseDebugValue\r\n} from 'preact/hooks';\r\nimport { PureComponent } from './PureComponent';\r\nimport { memo } from './memo';\r\nimport { forwardRef } from './forwardRef';\r\nimport { Children } from './Children';\r\nimport { Suspense, lazy } from './suspense';\r\nimport { SuspenseList } from './suspense-list';\r\nimport { createPortal } from './portals';\r\nimport {\r\n\thydrate,\r\n\trender,\r\n\tREACT_ELEMENT_TYPE,\r\n\t__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED\r\n} from './render';\r\n\r\nconst version = '17.0.2'; // trick libraries to think we are react\r\n\r\n/**\r\n * Legacy version of createElement.\r\n * @param {import('./internal').VNode[\"type\"]} type The node name or Component constructor\r\n */\r\nfunction createFactory(type) {\r\n\treturn createElement.bind(null, type);\r\n}\r\n\r\n/**\r\n * Check if the passed element is a valid (p)react node.\r\n * @param {*} element The element to check\r\n * @returns {boolean}\r\n */\r\nfunction isValidElement(element) {\r\n\treturn !!element && element.$$typeof === REACT_ELEMENT_TYPE;\r\n}\r\n\r\n/**\r\n * Wrap `cloneElement` to abort if the passed element is not a valid element and apply\r\n * all vnode normalizations.\r\n * @param {import('./internal').VNode} element The vnode to clone\r\n * @param {object} props Props to add when cloning\r\n * @param {Array<import('./internal').ComponentChildren>} rest Optional component children\r\n */\r\nfunction cloneElement(element) {\r\n\tif (!isValidElement(element)) return element;\r\n\treturn preactCloneElement.apply(null, arguments);\r\n}\r\n\r\n/**\r\n * Remove a component tree from the DOM, including state and event handlers.\r\n * @param {import('./internal').PreactElement} container\r\n * @returns {boolean}\r\n */\r\nfunction unmountComponentAtNode(container) {\r\n\tif (container._children) {\r\n\t\tpreactRender(null, container);\r\n\t\treturn true;\r\n\t}\r\n\treturn false;\r\n}\r\n\r\n/**\r\n * Get the matching DOM node for a component\r\n * @param {import('./internal').Component} component\r\n * @returns {import('./internal').PreactElement | null}\r\n */\r\nfunction findDOMNode(component) {\r\n\treturn (\r\n\t\t(component &&\r\n\t\t\t(component.base || (component.nodeType === 1 && component))) ||\r\n\t\tnull\r\n\t);\r\n}\r\n\r\n/**\r\n * Deprecated way to control batched rendering inside the reconciler, but we\r\n * already schedule in batches inside our rendering code\r\n * @template Arg\r\n * @param {(arg: Arg) => void} callback function that triggers the updated\r\n * @param {Arg} [arg] Optional argument that can be passed to the callback\r\n */\r\n// eslint-disable-next-line camelcase\r\nconst unstable_batchedUpdates = (callback, arg) => callback(arg);\r\n\r\n/**\r\n * In React, `flushSync` flushes the entire tree and forces a rerender. It's\r\n * implmented here as a no-op.\r\n * @template Arg\r\n * @template Result\r\n * @param {(arg: Arg) => Result} callback function that runs before the flush\r\n * @param {Arg} [arg] Optional arugment that can be passed to the callback\r\n * @returns\r\n */\r\nconst flushSync = (callback, arg) => callback(arg);\r\n\r\n/**\r\n * Strict Mode is not implemented in Preact, so we provide a stand-in for it\r\n * that just renders its children without imposing any restrictions.\r\n */\r\nconst StrictMode = Fragment;\r\n\r\nexport * from 'preact/hooks';\r\nexport {\r\n\tversion,\r\n\tChildren,\r\n\trender,\r\n\thydrate,\r\n\tunmountComponentAtNode,\r\n\tcreatePortal,\r\n\tcreateElement,\r\n\tcreateContext,\r\n\tcreateFactory,\r\n\tcloneElement,\r\n\tcreateRef,\r\n\tFragment,\r\n\tisValidElement,\r\n\tfindDOMNode,\r\n\tComponent,\r\n\tPureComponent,\r\n\tmemo,\r\n\tforwardRef,\r\n\tflushSync,\r\n\t// eslint-disable-next-line camelcase\r\n\tunstable_batchedUpdates,\r\n\tStrictMode,\r\n\tSuspense,\r\n\tSuspenseList,\r\n\tlazy,\r\n\t__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED\r\n};\r\n\r\n// React copies the named exports to the default one.\r\nexport default {\r\n\tuseState,\r\n\tuseReducer,\r\n\tuseEffect,\r\n\tuseLayoutEffect,\r\n\tuseRef,\r\n\tuseImperativeHandle,\r\n\tuseMemo,\r\n\tuseCallback,\r\n\tuseContext,\r\n\tuseDebugValue,\r\n\tversion,\r\n\tChildren,\r\n\trender,\r\n\thydrate,\r\n\tunmountComponentAtNode,\r\n\tcreatePortal,\r\n\tcreateElement,\r\n\tcreateContext,\r\n\tcreateFactory,\r\n\tcloneElement,\r\n\tcreateRef,\r\n\tFragment,\r\n\tisValidElement,\r\n\tfindDOMNode,\r\n\tComponent,\r\n\tPureComponent,\r\n\tmemo,\r\n\tforwardRef,\r\n\tflushSync,\r\n\tunstable_batchedUpdates,\r\n\tStrictMode,\r\n\tSuspense,\r\n\tSuspenseList,\r\n\tlazy,\r\n\t__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED\r\n};\r\n", "import{options as n}from\"preact\";var t,u,r,o=0,i=[],c=n.__b,f=n.__r,e=n.diffed,a=n.__c,v=n.unmount;function m(t,r){n.__h&&n.__h(u,t,o||r),o=0;var i=u.__H||(u.__H={__:[],__h:[]});return t>=i.__.length&&i.__.push({}),i.__[t]}function l(n){return o=1,p(w,n)}function p(n,r,o){var i=m(t++,2);return i.t=n,i.__c||(i.__=[o?o(r):w(void 0,r),function(n){var t=i.t(i.__[0],n);i.__[0]!==t&&(i.__=[t,i.__[1]],i.__c.setState({}))}],i.__c=u),i.__}function y(r,o){var i=m(t++,3);!n.__s&&k(i.__H,o)&&(i.__=r,i.__H=o,u.__H.__h.push(i))}function h(r,o){var i=m(t++,4);!n.__s&&k(i.__H,o)&&(i.__=r,i.__H=o,u.__h.push(i))}function s(n){return o=5,d(function(){return{current:n}},[])}function _(n,t,u){o=6,h(function(){\"function\"==typeof n?n(t()):n&&(n.current=t())},null==u?u:u.concat(n))}function d(n,u){var r=m(t++,7);return k(r.__H,u)&&(r.__=n(),r.__H=u,r.__h=n),r.__}function A(n,t){return o=8,d(function(){return n},t)}function F(n){var r=u.context[n.__c],o=m(t++,9);return o.c=n,r?(null==o.__&&(o.__=!0,r.sub(u)),r.props.value):n.__}function T(t,u){n.useDebugValue&&n.useDebugValue(u?u(t):t)}function q(n){var r=m(t++,10),o=l();return r.__=n,u.componentDidCatch||(u.componentDidCatch=function(n){r.__&&r.__(n),o[1](n)}),[o[0],function(){o[1](void 0)}]}function x(){var t;for(i.sort(function(n,t){return n.__v.__b-t.__v.__b});t=i.pop();)if(t.__P)try{t.__H.__h.forEach(g),t.__H.__h.forEach(j),t.__H.__h=[]}catch(u){t.__H.__h=[],n.__e(u,t.__v)}}n.__b=function(n){u=null,c&&c(n)},n.__r=function(n){f&&f(n),t=0;var r=(u=n.__c).__H;r&&(r.__h.forEach(g),r.__h.forEach(j),r.__h=[])},n.diffed=function(t){e&&e(t);var o=t.__c;o&&o.__H&&o.__H.__h.length&&(1!==i.push(o)&&r===n.requestAnimationFrame||((r=n.requestAnimationFrame)||function(n){var t,u=function(){clearTimeout(r),b&&cancelAnimationFrame(t),setTimeout(n)},r=setTimeout(u,100);b&&(t=requestAnimationFrame(u))})(x)),u=null},n.__c=function(t,u){u.some(function(t){try{t.__h.forEach(g),t.__h=t.__h.filter(function(n){return!n.__||j(n)})}catch(r){u.some(function(n){n.__h&&(n.__h=[])}),u=[],n.__e(r,t.__v)}}),a&&a(t,u)},n.unmount=function(t){v&&v(t);var u,r=t.__c;r&&r.__H&&(r.__H.__.forEach(function(n){try{g(n)}catch(n){u=n}}),u&&n.__e(u,r.__v))};var b=\"function\"==typeof requestAnimationFrame;function g(n){var t=u,r=n.__c;\"function\"==typeof r&&(n.__c=void 0,r()),u=t}function j(n){var t=u;n.__c=n.__(),u=t}function k(n,t){return!n||n.length!==t.length||t.some(function(t,u){return t!==n[u]})}function w(n,t){return\"function\"==typeof t?t(n):t}export{l as useState,p as useReducer,y as useEffect,h as useLayoutEffect,s as useRef,_ as useImperativeHandle,d as useMemo,A as useCallback,F as useContext,T as useDebugValue,q as useErrorBoundary};\n//# sourceMappingURL=hooks.module.js.map\n", "import { options } from 'preact';\r\n\r\n/** @type {number} */\r\nlet currentIndex;\r\n\r\n/** @type {import('./internal').Component} */\r\nlet currentComponent;\r\n\r\n/** @type {number} */\r\nlet currentHook = 0;\r\n\r\n/** @type {Array<import('./internal').Component>} */\r\nlet afterPaintEffects = [];\r\n\r\nlet oldBeforeDiff = options._diff;\r\nlet oldBeforeRender = options._render;\r\nlet oldAfterDiff = options.diffed;\r\nlet oldCommit = options._commit;\r\nlet oldBeforeUnmount = options.unmount;\r\n\r\nconst RAF_TIMEOUT = 100;\r\nlet prevRaf;\r\n\r\noptions._diff = vnode => {\r\n\tcurrentComponent = null;\r\n\tif (oldBeforeDiff) oldBeforeDiff(vnode);\r\n};\r\n\r\noptions._render = vnode => {\r\n\tif (oldBeforeRender) oldBeforeRender(vnode);\r\n\r\n\tcurrentComponent = vnode._component;\r\n\tcurrentIndex = 0;\r\n\r\n\tconst hooks = currentComponent.__hooks;\r\n\tif (hooks) {\r\n\t\thooks._pendingEffects.forEach(invokeCleanup);\r\n\t\thooks._pendingEffects.forEach(invokeEffect);\r\n\t\thooks._pendingEffects = [];\r\n\t}\r\n};\r\n\r\noptions.diffed = vnode => {\r\n\tif (oldAfterDiff) oldAfterDiff(vnode);\r\n\r\n\tconst c = vnode._component;\r\n\tif (c && c.__hooks && c.__hooks._pendingEffects.length) {\r\n\t\tafterPaint(afterPaintEffects.push(c));\r\n\t}\r\n\tcurrentComponent = null;\r\n};\r\n\r\noptions._commit = (vnode, commitQueue) => {\r\n\tcommitQueue.some(component => {\r\n\t\ttry {\r\n\t\t\tcomponent._renderCallbacks.forEach(invokeCleanup);\r\n\t\t\tcomponent._renderCallbacks = component._renderCallbacks.filter(cb =>\r\n\t\t\t\tcb._value ? invokeEffect(cb) : true\r\n\t\t\t);\r\n\t\t} catch (e) {\r\n\t\t\tcommitQueue.some(c => {\r\n\t\t\t\tif (c._renderCallbacks) c._renderCallbacks = [];\r\n\t\t\t});\r\n\t\t\tcommitQueue = [];\r\n\t\t\toptions._catchError(e, component._vnode);\r\n\t\t}\r\n\t});\r\n\r\n\tif (oldCommit) oldCommit(vnode, commitQueue);\r\n};\r\n\r\noptions.unmount = vnode => {\r\n\tif (oldBeforeUnmount) oldBeforeUnmount(vnode);\r\n\r\n\tconst c = vnode._component;\r\n\tif (c && c.__hooks) {\r\n\t\tlet hasErrored;\r\n\t\tc.__hooks._list.forEach(s => {\r\n\t\t\ttry {\r\n\t\t\t\tinvokeCleanup(s);\r\n\t\t\t} catch (e) {\r\n\t\t\t\thasErrored = e;\r\n\t\t\t}\r\n\t\t});\r\n\t\tif (hasErrored) options._catchError(hasErrored, c._vnode);\r\n\t}\r\n};\r\n\r\n/**\r\n * Get a hook's state from the currentComponent\r\n * @param {number} index The index of the hook to get\r\n * @param {number} type The index of the hook to get\r\n * @returns {any}\r\n */\r\nfunction getHookState(index, type) {\r\n\tif (options._hook) {\r\n\t\toptions._hook(currentComponent, index, currentHook || type);\r\n\t}\r\n\tcurrentHook = 0;\r\n\r\n\t// Largely inspired by:\r\n\t// * https://github.com/michael-klein/funcy.js/blob/f6be73468e6ec46b0ff5aa3cc4c9baf72a29025a/src/hooks/core_hooks.mjs\r\n\t// * https://github.com/michael-klein/funcy.js/blob/650beaa58c43c33a74820a3c98b3c7079cf2e333/src/renderer.mjs\r\n\t// Other implementations to look at:\r\n\t// * https://codesandbox.io/s/mnox05qp8\r\n\tconst hooks =\r\n\t\tcurrentComponent.__hooks ||\r\n\t\t(currentComponent.__hooks = {\r\n\t\t\t_list: [],\r\n\t\t\t_pendingEffects: []\r\n\t\t});\r\n\r\n\tif (index >= hooks._list.length) {\r\n\t\thooks._list.push({});\r\n\t}\r\n\treturn hooks._list[index];\r\n}\r\n\r\n/**\r\n * @param {import('./index').StateUpdater<any>} [initialState]\r\n */\r\nexport function useState(initialState) {\r\n\tcurrentHook = 1;\r\n\treturn useReducer(invokeOrReturn, initialState);\r\n}\r\n\r\n/**\r\n * @param {import('./index').Reducer<any, any>} reducer\r\n * @param {import('./index').StateUpdater<any>} initialState\r\n * @param {(initialState: any) => void} [init]\r\n * @returns {[ any, (state: any) => void ]}\r\n */\r\nexport function useReducer(reducer, initialState, init) {\r\n\t/** @type {import('./internal').ReducerHookState} */\r\n\tconst hookState = getHookState(currentIndex++, 2);\r\n\thookState._reducer = reducer;\r\n\tif (!hookState._component) {\r\n\t\thookState._value = [\r\n\t\t\t!init ? invokeOrReturn(undefined, initialState) : init(initialState),\r\n\r\n\t\t\taction => {\r\n\t\t\t\tconst nextValue = hookState._reducer(hookState._value[0], action);\r\n\t\t\t\tif (hookState._value[0] !== nextValue) {\r\n\t\t\t\t\thookState._value = [nextValue, hookState._value[1]];\r\n\t\t\t\t\thookState._component.setState({});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t];\r\n\r\n\t\thookState._component = currentComponent;\r\n\t}\r\n\r\n\treturn hookState._value;\r\n}\r\n\r\n/**\r\n * @param {import('./internal').Effect} callback\r\n * @param {any[]} args\r\n */\r\nexport function useEffect(callback, args) {\r\n\t/** @type {import('./internal').EffectHookState} */\r\n\tconst state = getHookState(currentIndex++, 3);\r\n\tif (!options._skipEffects && argsChanged(state._args, args)) {\r\n\t\tstate._value = callback;\r\n\t\tstate._args = args;\r\n\r\n\t\tcurrentComponent.__hooks._pendingEffects.push(state);\r\n\t}\r\n}\r\n\r\n/**\r\n * @param {import('./internal').Effect} callback\r\n * @param {any[]} args\r\n */\r\nexport function useLayoutEffect(callback, args) {\r\n\t/** @type {import('./internal').EffectHookState} */\r\n\tconst state = getHookState(currentIndex++, 4);\r\n\tif (!options._skipEffects && argsChanged(state._args, args)) {\r\n\t\tstate._value = callback;\r\n\t\tstate._args = args;\r\n\r\n\t\tcurrentComponent._renderCallbacks.push(state);\r\n\t}\r\n}\r\n\r\nexport function useRef(initialValue) {\r\n\tcurrentHook = 5;\r\n\treturn useMemo(() => ({ current: initialValue }), []);\r\n}\r\n\r\n/**\r\n * @param {object} ref\r\n * @param {() => object} createHandle\r\n * @param {any[]} args\r\n */\r\nexport function useImperativeHandle(ref, createHandle, args) {\r\n\tcurrentHook = 6;\r\n\tuseLayoutEffect(\r\n\t\t() => {\r\n\t\t\tif (typeof ref == 'function') ref(createHandle());\r\n\t\t\telse if (ref) ref.current = createHandle();\r\n\t\t},\r\n\t\targs == null ? args : args.concat(ref)\r\n\t);\r\n}\r\n\r\n/**\r\n * @param {() => any} factory\r\n * @param {any[]} args\r\n */\r\nexport function useMemo(factory, args) {\r\n\t/** @type {import('./internal').MemoHookState} */\r\n\tconst state = getHookState(currentIndex++, 7);\r\n\tif (argsChanged(state._args, args)) {\r\n\t\tstate._value = factory();\r\n\t\tstate._args = args;\r\n\t\tstate._factory = factory;\r\n\t}\r\n\r\n\treturn state._value;\r\n}\r\n\r\n/**\r\n * @param {() => void} callback\r\n * @param {any[]} args\r\n */\r\nexport function useCallback(callback, args) {\r\n\tcurrentHook = 8;\r\n\treturn useMemo(() => callback, args);\r\n}\r\n\r\n/**\r\n * @param {import('./internal').PreactContext} context\r\n */\r\nexport function useContext(context) {\r\n\tconst provider = currentComponent.context[context._id];\r\n\t// We could skip this call here, but than we'd not call\r\n\t// `options._hook`. We need to do that in order to make\r\n\t// the devtools aware of this hook.\r\n\t/** @type {import('./internal').ContextHookState} */\r\n\tconst state = getHookState(currentIndex++, 9);\r\n\t// The devtools needs access to the context object to\r\n\t// be able to pull of the default value when no provider\r\n\t// is present in the tree.\r\n\tstate._context = context;\r\n\tif (!provider) return context._defaultValue;\r\n\t// This is probably not safe to convert to \"!\"\r\n\tif (state._value == null) {\r\n\t\tstate._value = true;\r\n\t\tprovider.sub(currentComponent);\r\n\t}\r\n\treturn provider.props.value;\r\n}\r\n\r\n/**\r\n * Display a custom label for a custom hook for the devtools panel\r\n * @type {<T>(value: T, cb?: (value: T) => string | number) => void}\r\n */\r\nexport function useDebugValue(value, formatter) {\r\n\tif (options.useDebugValue) {\r\n\t\toptions.useDebugValue(formatter ? formatter(value) : value);\r\n\t}\r\n}\r\n\r\n/**\r\n * @param {(error: any) => void} cb\r\n */\r\nexport function useErrorBoundary(cb) {\r\n\t/** @type {import('./internal').ErrorBoundaryHookState} */\r\n\tconst state = getHookState(currentIndex++, 10);\r\n\tconst errState = useState();\r\n\tstate._value = cb;\r\n\tif (!currentComponent.componentDidCatch) {\r\n\t\tcurrentComponent.componentDidCatch = err => {\r\n\t\t\tif (state._value) state._value(err);\r\n\t\t\terrState[1](err);\r\n\t\t};\r\n\t}\r\n\treturn [\r\n\t\terrState[0],\r\n\t\t() => {\r\n\t\t\terrState[1](undefined);\r\n\t\t}\r\n\t];\r\n}\r\n\r\n/**\r\n * After paint effects consumer.\r\n */\r\nfunction flushAfterPaintEffects() {\r\n\tlet component;\r\n\t// sort the queue by depth (outermost to innermost)\r\n\tafterPaintEffects.sort((a, b) => a._vnode._depth - b._vnode._depth);\r\n\twhile (component = afterPaintEffects.pop()) {\r\n\t\tif (!component._parentDom) continue;\r\n\t\ttry {\r\n\t\t\tcomponent.__hooks._pendingEffects.forEach(invokeCleanup);\r\n\t\t\tcomponent.__hooks._pendingEffects.forEach(invokeEffect);\r\n\t\t\tcomponent.__hooks._pendingEffects = [];\r\n\t\t} catch (e) {\r\n\t\t\tcomponent.__hooks._pendingEffects = [];\r\n\t\t\toptions._catchError(e, component._vnode);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nlet HAS_RAF = typeof requestAnimationFrame == 'function';\r\n\r\n/**\r\n * Schedule a callback to be invoked after the browser has a chance to paint a new frame.\r\n * Do this by combining requestAnimationFrame (rAF) + setTimeout to invoke a callback after\r\n * the next browser frame.\r\n *\r\n * Also, schedule a timeout in parallel to the the rAF to ensure the callback is invoked\r\n * even if RAF doesn't fire (for example if the browser tab is not visible)\r\n *\r\n * @param {() => void} callback\r\n */\r\nfunction afterNextFrame(callback) {\r\n\tconst done = () => {\r\n\t\tclearTimeout(timeout);\r\n\t\tif (HAS_RAF) cancelAnimationFrame(raf);\r\n\t\tsetTimeout(callback);\r\n\t};\r\n\tconst timeout = setTimeout(done, RAF_TIMEOUT);\r\n\r\n\tlet raf;\r\n\tif (HAS_RAF) {\r\n\t\traf = requestAnimationFrame(done);\r\n\t}\r\n}\r\n\r\n// Note: if someone used options.debounceRendering = requestAnimationFrame,\r\n// then effects will ALWAYS run on the NEXT frame instead of the current one, incurring a ~16ms delay.\r\n// Perhaps this is not such a big deal.\r\n/**\r\n * Schedule afterPaintEffects flush after the browser paints\r\n * @param {number} newQueueLength\r\n */\r\nfunction afterPaint(newQueueLength) {\r\n\tif (newQueueLength === 1 || prevRaf !== options.requestAnimationFrame) {\r\n\t\tprevRaf = options.requestAnimationFrame;\r\n\t\t(prevRaf || afterNextFrame)(flushAfterPaintEffects);\r\n\t}\r\n}\r\n\r\n/**\r\n * @param {import('./internal').EffectHookState} hook\r\n */\r\nfunction invokeCleanup(hook) {\r\n\t// A hook cleanup can introduce a call to render which creates a new root, this will call options.vnode\r\n\t// and move the currentComponent away.\r\n\tconst comp = currentComponent;\r\n\tlet cleanup = hook._cleanup;\r\n\tif (typeof cleanup == 'function') {\r\n\t\thook._cleanup = undefined;\r\n\t\tcleanup();\r\n\t}\r\n\tcurrentComponent = comp;\r\n}\r\n\r\n/**\r\n * Invoke a Hook's effect\r\n * @param {import('./internal').EffectHookState} hook\r\n */\r\nfunction invokeEffect(hook) {\r\n\t// A hook call can introduce a call to render which creates a new root, this will call options.vnode\r\n\t// and move the currentComponent away.\r\n\tconst comp = currentComponent;\r\n\thook._cleanup = hook._value();\r\n\tcurrentComponent = comp;\r\n}\r\n\r\n/**\r\n * @param {any[]} oldArgs\r\n * @param {any[]} newArgs\r\n */\r\nfunction argsChanged(oldArgs, newArgs) {\r\n\treturn (\r\n\t\t!oldArgs ||\r\n\t\toldArgs.length !== newArgs.length ||\r\n\t\tnewArgs.some((arg, index) => arg !== oldArgs[index])\r\n\t);\r\n}\r\n\r\nfunction invokeOrReturn(arg, f) {\r\n\treturn typeof f == 'function' ? f(arg) : f;\r\n}\r\n", "export { default as PureInlineComponent } from './PureInlineComponent'\n", "import { PureComponent } from 'preact/compat'\n\nexport default class PureInlineComponent extends PureComponent {\n  shouldComponentUpdate(nextProps) {\n    for (let k in nextProps) {\n      if (k == 'children') continue\n\n      if (nextProps[k] != this.props[k]) {\n        return true\n      }\n    }\n\n    return false\n  }\n\n  render() {\n    return this.props.children\n  }\n}\n", "// @ts-nocheck\nimport { render } from 'preact'\n\nimport { init, getProps } from '../../config'\nimport { ShadowElement } from '../HTMLElement'\nimport { Picker, PickerStyles } from '.'\nimport PickerProps from './PickerProps'\n\nexport default class PickerElement extends ShadowElement {\n  static Props = PickerProps\n\n  constructor(props) {\n    super(props, { styles: PickerStyles })\n  }\n\n  async connectedCallback() {\n    const props = getProps(this.props, PickerProps, this)\n    props.element = this\n    props.ref = (component) => {\n      this.component = component\n    }\n\n    await init(props)\n    if (this.disconnected) return\n\n    render(<Picker {...props} />, this.shadowRoot)\n  }\n}\n\nif (\n  typeof customElements !== 'undefined' &&\n  !customElements.get('em-emoji-picker')\n) {\n  customElements.define('em-emoji-picker', PickerElement)\n}\n", "module.exports = \"565112e37e99085c\";", "import {\n    Decoration, DecorationSet, EditorView, MatchDecorator,\n    ViewPlugin, ViewUpdate, WidgetType\n} from \"@codemirror/view\"\n\nimport {SearchIndex} from 'emoji-mart'\n\nconst placeholderMatcher = new MatchDecorator({\n    regexp: /\\:([^]+?)\\:/g,\n    decoration: match => Decoration.replace({\n        widget: new PlaceholderWidget(match[1]),\n    })\n});\n\nclass PlaceholderWidget extends WidgetType {\n    content: string;\n\n    constructor(content: string) {\n        super();\n        this.content = content;\n    }\n\n    eq(other: PlaceholderWidget) {\n        return this.content == other.content\n    }\n\n    toDOM() {\n        const span = document.createElement(\"span\");\n        span.className = \"cm-emoji\";\n\n        if (this.content) {\n            SearchIndex.search(this.content).then((emojis:any) => {\n                if (emojis[0]){\n                    span.textContent =  emojis[0].skins[0].native;\n                } else {\n                    // \u5982\u679C\u627E\u4E0D\u5230\u8868\u60C5\u7B26\u53F7\uFF0C\u8FD4\u56DE\u539F\u59CB\u5185\u5BB9\n                    span.textContent = `:${this.content}:`;\n                }\n            }).catch(() => {\n                // \u5982\u679C\u53D1\u751F\u9519\u8BEF\uFF0C\u4E5F\u8FD4\u56DE\u539F\u59CB\u5185\u5BB9\n                span.textContent = `:${this.content}:`;\n            });\n        }\n        return span;\n    }\n\n    ignoreEvent() {\n        return true;\n    }\n\n    destroy(dom: HTMLElement) {\n        dom.remove();\n    }\n}\n\nconst emojiPlaceholdersPlugin = ViewPlugin.fromClass(\n    class {\n        placeholders: DecorationSet;\n        constructor(view: EditorView) {\n            this.placeholders = placeholderMatcher.createDeco(view);\n        }\n        update(update: ViewUpdate) {\n            this.placeholders = placeholderMatcher.updateDeco(update, this.placeholders);\n        }\n    }, {\n        decorations: (instance: any) => {\n            return instance.placeholders;\n        },\n        provide: (plugin: any) =>\n            EditorView.atomicRanges.of((view: any) => {\n                return view.plugin(plugin)?.placeholders || Decoration.none;\n            }),\n    }\n);\n\nexport {emojiPlaceholdersPlugin}\n", "import { CompletionContext, Completion } from '@codemirror/autocomplete';\n\nexport function mentionSuggestions(data: Completion[] = [], keyword: string = \"@\") {\n    return (context: CompletionContext) => {\n        let regexp = new RegExp(keyword + \"(\\\\w+)?\");\n        let word = context.matchBefore(regexp);\n        if (!word) return null;\n        if (word && word.from == word.to && !context.explicit) {\n            return null;\n        }\n        return {\n            from: word?.from!,\n            options: [...data],\n            filter: true,\n        };\n    };\n}\n\n", "{\"categories\":[{\"id\":\"people\",\"emojis\":[\"grinning\",\"smiley\",\"smile\",\"grin\",\"laughing\",\"sweat_smile\",\"rolling_on_the_floor_laughing\",\"joy\",\"slightly_smiling_face\",\"upside_down_face\",\"melting_face\",\"wink\",\"blush\",\"innocent\",\"smiling_face_with_3_hearts\",\"heart_eyes\",\"star-struck\",\"kissing_heart\",\"kissing\",\"relaxed\",\"kissing_closed_eyes\",\"kissing_smiling_eyes\",\"smiling_face_with_tear\",\"yum\",\"stuck_out_tongue\",\"stuck_out_tongue_winking_eye\",\"zany_face\",\"stuck_out_tongue_closed_eyes\",\"money_mouth_face\",\"hugging_face\",\"face_with_hand_over_mouth\",\"face_with_open_eyes_and_hand_over_mouth\",\"face_with_peeking_eye\",\"shushing_face\",\"thinking_face\",\"saluting_face\",\"zipper_mouth_face\",\"face_with_raised_eyebrow\",\"neutral_face\",\"expressionless\",\"no_mouth\",\"dotted_line_face\",\"face_in_clouds\",\"smirk\",\"unamused\",\"face_with_rolling_eyes\",\"grimacing\",\"face_exhaling\",\"lying_face\",\"relieved\",\"pensive\",\"sleepy\",\"drooling_face\",\"sleeping\",\"mask\",\"face_with_thermometer\",\"face_with_head_bandage\",\"nauseated_face\",\"face_vomiting\",\"sneezing_face\",\"hot_face\",\"cold_face\",\"woozy_face\",\"dizzy_face\",\"face_with_spiral_eyes\",\"exploding_head\",\"face_with_cowboy_hat\",\"partying_face\",\"disguised_face\",\"sunglasses\",\"nerd_face\",\"face_with_monocle\",\"confused\",\"face_with_diagonal_mouth\",\"worried\",\"slightly_frowning_face\",\"white_frowning_face\",\"open_mouth\",\"hushed\",\"astonished\",\"flushed\",\"pleading_face\",\"face_holding_back_tears\",\"frowning\",\"anguished\",\"fearful\",\"cold_sweat\",\"disappointed_relieved\",\"cry\",\"sob\",\"scream\",\"confounded\",\"persevere\",\"disappointed\",\"sweat\",\"weary\",\"tired_face\",\"yawning_face\",\"triumph\",\"rage\",\"angry\",\"face_with_symbols_on_mouth\",\"smiling_imp\",\"imp\",\"skull\",\"skull_and_crossbones\",\"hankey\",\"clown_face\",\"japanese_ogre\",\"japanese_goblin\",\"ghost\",\"alien\",\"space_invader\",\"robot_face\",\"wave\",\"raised_back_of_hand\",\"raised_hand_with_fingers_splayed\",\"hand\",\"spock-hand\",\"rightwards_hand\",\"leftwards_hand\",\"palm_down_hand\",\"palm_up_hand\",\"ok_hand\",\"pinched_fingers\",\"pinching_hand\",\"v\",\"crossed_fingers\",\"hand_with_index_finger_and_thumb_crossed\",\"i_love_you_hand_sign\",\"the_horns\",\"call_me_hand\",\"point_left\",\"point_right\",\"point_up_2\",\"middle_finger\",\"point_down\",\"point_up\",\"index_pointing_at_the_viewer\",\"+1\",\"-1\",\"fist\",\"facepunch\",\"left-facing_fist\",\"right-facing_fist\",\"clap\",\"raised_hands\",\"heart_hands\",\"open_hands\",\"palms_up_together\",\"handshake\",\"pray\",\"writing_hand\",\"nail_care\",\"selfie\",\"muscle\",\"mechanical_arm\",\"mechanical_leg\",\"leg\",\"foot\",\"ear\",\"ear_with_hearing_aid\",\"nose\",\"brain\",\"anatomical_heart\",\"lungs\",\"tooth\",\"bone\",\"eyes\",\"eye\",\"tongue\",\"lips\",\"biting_lip\",\"baby\",\"child\",\"boy\",\"girl\",\"adult\",\"person_with_blond_hair\",\"man\",\"bearded_person\",\"man_with_beard\",\"woman_with_beard\",\"red_haired_man\",\"curly_haired_man\",\"white_haired_man\",\"bald_man\",\"woman\",\"red_haired_woman\",\"red_haired_person\",\"curly_haired_woman\",\"curly_haired_person\",\"white_haired_woman\",\"white_haired_person\",\"bald_woman\",\"bald_person\",\"blond-haired-woman\",\"blond-haired-man\",\"older_adult\",\"older_man\",\"older_woman\",\"person_frowning\",\"man-frowning\",\"woman-frowning\",\"person_with_pouting_face\",\"man-pouting\",\"woman-pouting\",\"no_good\",\"man-gesturing-no\",\"woman-gesturing-no\",\"ok_woman\",\"man-gesturing-ok\",\"woman-gesturing-ok\",\"information_desk_person\",\"man-tipping-hand\",\"woman-tipping-hand\",\"raising_hand\",\"man-raising-hand\",\"woman-raising-hand\",\"deaf_person\",\"deaf_man\",\"deaf_woman\",\"bow\",\"man-bowing\",\"woman-bowing\",\"face_palm\",\"man-facepalming\",\"woman-facepalming\",\"shrug\",\"man-shrugging\",\"woman-shrugging\",\"health_worker\",\"male-doctor\",\"female-doctor\",\"student\",\"male-student\",\"female-student\",\"teacher\",\"male-teacher\",\"female-teacher\",\"judge\",\"male-judge\",\"female-judge\",\"farmer\",\"male-farmer\",\"female-farmer\",\"cook\",\"male-cook\",\"female-cook\",\"mechanic\",\"male-mechanic\",\"female-mechanic\",\"factory_worker\",\"male-factory-worker\",\"female-factory-worker\",\"office_worker\",\"male-office-worker\",\"female-office-worker\",\"scientist\",\"male-scientist\",\"female-scientist\",\"technologist\",\"male-technologist\",\"female-technologist\",\"singer\",\"male-singer\",\"female-singer\",\"artist\",\"male-artist\",\"female-artist\",\"pilot\",\"male-pilot\",\"female-pilot\",\"astronaut\",\"male-astronaut\",\"female-astronaut\",\"firefighter\",\"male-firefighter\",\"female-firefighter\",\"cop\",\"male-police-officer\",\"female-police-officer\",\"sleuth_or_spy\",\"male-detective\",\"female-detective\",\"guardsman\",\"male-guard\",\"female-guard\",\"ninja\",\"construction_worker\",\"male-construction-worker\",\"female-construction-worker\",\"person_with_crown\",\"prince\",\"princess\",\"man_with_turban\",\"man-wearing-turban\",\"woman-wearing-turban\",\"man_with_gua_pi_mao\",\"person_with_headscarf\",\"person_in_tuxedo\",\"man_in_tuxedo\",\"woman_in_tuxedo\",\"bride_with_veil\",\"man_with_veil\",\"woman_with_veil\",\"pregnant_woman\",\"pregnant_man\",\"pregnant_person\",\"breast-feeding\",\"woman_feeding_baby\",\"man_feeding_baby\",\"person_feeding_baby\",\"angel\",\"santa\",\"mrs_claus\",\"mx_claus\",\"superhero\",\"male_superhero\",\"female_superhero\",\"supervillain\",\"male_supervillain\",\"female_supervillain\",\"mage\",\"male_mage\",\"female_mage\",\"fairy\",\"male_fairy\",\"female_fairy\",\"vampire\",\"male_vampire\",\"female_vampire\",\"merperson\",\"merman\",\"mermaid\",\"elf\",\"male_elf\",\"female_elf\",\"genie\",\"male_genie\",\"female_genie\",\"zombie\",\"male_zombie\",\"female_zombie\",\"troll\",\"massage\",\"man-getting-massage\",\"woman-getting-massage\",\"haircut\",\"man-getting-haircut\",\"woman-getting-haircut\",\"walking\",\"man-walking\",\"woman-walking\",\"standing_person\",\"man_standing\",\"woman_standing\",\"kneeling_person\",\"man_kneeling\",\"woman_kneeling\",\"person_with_probing_cane\",\"man_with_probing_cane\",\"woman_with_probing_cane\",\"person_in_motorized_wheelchair\",\"man_in_motorized_wheelchair\",\"woman_in_motorized_wheelchair\",\"person_in_manual_wheelchair\",\"man_in_manual_wheelchair\",\"woman_in_manual_wheelchair\",\"runner\",\"man-running\",\"woman-running\",\"dancer\",\"man_dancing\",\"man_in_business_suit_levitating\",\"dancers\",\"men-with-bunny-ears-partying\",\"women-with-bunny-ears-partying\",\"person_in_steamy_room\",\"man_in_steamy_room\",\"woman_in_steamy_room\",\"person_climbing\",\"man_climbing\",\"woman_climbing\",\"fencer\",\"horse_racing\",\"skier\",\"snowboarder\",\"golfer\",\"man-golfing\",\"woman-golfing\",\"surfer\",\"man-surfing\",\"woman-surfing\",\"rowboat\",\"man-rowing-boat\",\"woman-rowing-boat\",\"swimmer\",\"man-swimming\",\"woman-swimming\",\"person_with_ball\",\"man-bouncing-ball\",\"woman-bouncing-ball\",\"weight_lifter\",\"man-lifting-weights\",\"woman-lifting-weights\",\"bicyclist\",\"man-biking\",\"woman-biking\",\"mountain_bicyclist\",\"man-mountain-biking\",\"woman-mountain-biking\",\"person_doing_cartwheel\",\"man-cartwheeling\",\"woman-cartwheeling\",\"wrestlers\",\"man-wrestling\",\"woman-wrestling\",\"water_polo\",\"man-playing-water-polo\",\"woman-playing-water-polo\",\"handball\",\"man-playing-handball\",\"woman-playing-handball\",\"juggling\",\"man-juggling\",\"woman-juggling\",\"person_in_lotus_position\",\"man_in_lotus_position\",\"woman_in_lotus_position\",\"bath\",\"sleeping_accommodation\",\"people_holding_hands\",\"two_women_holding_hands\",\"man_and_woman_holding_hands\",\"two_men_holding_hands\",\"couplekiss\",\"woman-kiss-man\",\"man-kiss-man\",\"woman-kiss-woman\",\"couple_with_heart\",\"woman-heart-man\",\"man-heart-man\",\"woman-heart-woman\",\"family\",\"man-woman-boy\",\"man-woman-girl\",\"man-woman-girl-boy\",\"man-woman-boy-boy\",\"man-woman-girl-girl\",\"man-man-boy\",\"man-man-girl\",\"man-man-girl-boy\",\"man-man-boy-boy\",\"man-man-girl-girl\",\"woman-woman-boy\",\"woman-woman-girl\",\"woman-woman-girl-boy\",\"woman-woman-boy-boy\",\"woman-woman-girl-girl\",\"man-boy\",\"man-boy-boy\",\"man-girl\",\"man-girl-boy\",\"man-girl-girl\",\"woman-boy\",\"woman-boy-boy\",\"woman-girl\",\"woman-girl-boy\",\"woman-girl-girl\",\"speaking_head_in_silhouette\",\"bust_in_silhouette\",\"busts_in_silhouette\",\"people_hugging\",\"footprints\",\"smiley_cat\",\"smile_cat\",\"joy_cat\",\"heart_eyes_cat\",\"smirk_cat\",\"kissing_cat\",\"scream_cat\",\"crying_cat_face\",\"pouting_cat\",\"see_no_evil\",\"hear_no_evil\",\"speak_no_evil\",\"kiss\",\"love_letter\",\"cupid\",\"gift_heart\",\"sparkling_heart\",\"heartpulse\",\"heartbeat\",\"revolving_hearts\",\"two_hearts\",\"heart_decoration\",\"heavy_heart_exclamation_mark_ornament\",\"broken_heart\",\"heart_on_fire\",\"mending_heart\",\"heart\",\"orange_heart\",\"yellow_heart\",\"green_heart\",\"blue_heart\",\"purple_heart\",\"brown_heart\",\"black_heart\",\"white_heart\",\"100\",\"anger\",\"boom\",\"dizzy\",\"sweat_drops\",\"dash\",\"hole\",\"bomb\",\"speech_balloon\",\"eye-in-speech-bubble\",\"left_speech_bubble\",\"right_anger_bubble\",\"thought_balloon\",\"zzz\"]},{\"id\":\"nature\",\"emojis\":[\"monkey_face\",\"monkey\",\"gorilla\",\"orangutan\",\"dog\",\"dog2\",\"guide_dog\",\"service_dog\",\"poodle\",\"wolf\",\"fox_face\",\"raccoon\",\"cat\",\"cat2\",\"black_cat\",\"lion_face\",\"tiger\",\"tiger2\",\"leopard\",\"horse\",\"racehorse\",\"unicorn_face\",\"zebra_face\",\"deer\",\"bison\",\"cow\",\"ox\",\"water_buffalo\",\"cow2\",\"pig\",\"pig2\",\"boar\",\"pig_nose\",\"ram\",\"sheep\",\"goat\",\"dromedary_camel\",\"camel\",\"llama\",\"giraffe_face\",\"elephant\",\"mammoth\",\"rhinoceros\",\"hippopotamus\",\"mouse\",\"mouse2\",\"rat\",\"hamster\",\"rabbit\",\"rabbit2\",\"chipmunk\",\"beaver\",\"hedgehog\",\"bat\",\"bear\",\"polar_bear\",\"koala\",\"panda_face\",\"sloth\",\"otter\",\"skunk\",\"kangaroo\",\"badger\",\"feet\",\"turkey\",\"chicken\",\"rooster\",\"hatching_chick\",\"baby_chick\",\"hatched_chick\",\"bird\",\"penguin\",\"dove_of_peace\",\"eagle\",\"duck\",\"swan\",\"owl\",\"dodo\",\"feather\",\"flamingo\",\"peacock\",\"parrot\",\"frog\",\"crocodile\",\"turtle\",\"lizard\",\"snake\",\"dragon_face\",\"dragon\",\"sauropod\",\"t-rex\",\"whale\",\"whale2\",\"dolphin\",\"seal\",\"fish\",\"tropical_fish\",\"blowfish\",\"shark\",\"octopus\",\"shell\",\"coral\",\"snail\",\"butterfly\",\"bug\",\"ant\",\"bee\",\"beetle\",\"ladybug\",\"cricket\",\"cockroach\",\"spider\",\"spider_web\",\"scorpion\",\"mosquito\",\"fly\",\"worm\",\"microbe\",\"bouquet\",\"cherry_blossom\",\"white_flower\",\"lotus\",\"rosette\",\"rose\",\"wilted_flower\",\"hibiscus\",\"sunflower\",\"blossom\",\"tulip\",\"seedling\",\"potted_plant\",\"evergreen_tree\",\"deciduous_tree\",\"palm_tree\",\"cactus\",\"ear_of_rice\",\"herb\",\"shamrock\",\"four_leaf_clover\",\"maple_leaf\",\"fallen_leaf\",\"leaves\",\"empty_nest\",\"nest_with_eggs\"]},{\"id\":\"foods\",\"emojis\":[\"grapes\",\"melon\",\"watermelon\",\"tangerine\",\"lemon\",\"banana\",\"pineapple\",\"mango\",\"apple\",\"green_apple\",\"pear\",\"peach\",\"cherries\",\"strawberry\",\"blueberries\",\"kiwifruit\",\"tomato\",\"olive\",\"coconut\",\"avocado\",\"eggplant\",\"potato\",\"carrot\",\"corn\",\"hot_pepper\",\"bell_pepper\",\"cucumber\",\"leafy_green\",\"broccoli\",\"garlic\",\"onion\",\"mushroom\",\"peanuts\",\"beans\",\"chestnut\",\"bread\",\"croissant\",\"baguette_bread\",\"flatbread\",\"pretzel\",\"bagel\",\"pancakes\",\"waffle\",\"cheese_wedge\",\"meat_on_bone\",\"poultry_leg\",\"cut_of_meat\",\"bacon\",\"hamburger\",\"fries\",\"pizza\",\"hotdog\",\"sandwich\",\"taco\",\"burrito\",\"tamale\",\"stuffed_flatbread\",\"falafel\",\"egg\",\"fried_egg\",\"shallow_pan_of_food\",\"stew\",\"fondue\",\"bowl_with_spoon\",\"green_salad\",\"popcorn\",\"butter\",\"salt\",\"canned_food\",\"bento\",\"rice_cracker\",\"rice_ball\",\"rice\",\"curry\",\"ramen\",\"spaghetti\",\"sweet_potato\",\"oden\",\"sushi\",\"fried_shrimp\",\"fish_cake\",\"moon_cake\",\"dango\",\"dumpling\",\"fortune_cookie\",\"takeout_box\",\"crab\",\"lobster\",\"shrimp\",\"squid\",\"oyster\",\"icecream\",\"shaved_ice\",\"ice_cream\",\"doughnut\",\"cookie\",\"birthday\",\"cake\",\"cupcake\",\"pie\",\"chocolate_bar\",\"candy\",\"lollipop\",\"custard\",\"honey_pot\",\"baby_bottle\",\"glass_of_milk\",\"coffee\",\"teapot\",\"tea\",\"sake\",\"champagne\",\"wine_glass\",\"cocktail\",\"tropical_drink\",\"beer\",\"beers\",\"clinking_glasses\",\"tumbler_glass\",\"pouring_liquid\",\"cup_with_straw\",\"bubble_tea\",\"beverage_box\",\"mate_drink\",\"ice_cube\",\"chopsticks\",\"knife_fork_plate\",\"fork_and_knife\",\"spoon\",\"hocho\",\"jar\",\"amphora\"]},{\"id\":\"activity\",\"emojis\":[\"jack_o_lantern\",\"christmas_tree\",\"fireworks\",\"sparkler\",\"firecracker\",\"sparkles\",\"balloon\",\"tada\",\"confetti_ball\",\"tanabata_tree\",\"bamboo\",\"dolls\",\"flags\",\"wind_chime\",\"rice_scene\",\"red_envelope\",\"ribbon\",\"gift\",\"reminder_ribbon\",\"admission_tickets\",\"ticket\",\"medal\",\"trophy\",\"sports_medal\",\"first_place_medal\",\"second_place_medal\",\"third_place_medal\",\"soccer\",\"baseball\",\"softball\",\"basketball\",\"volleyball\",\"football\",\"rugby_football\",\"tennis\",\"flying_disc\",\"bowling\",\"cricket_bat_and_ball\",\"field_hockey_stick_and_ball\",\"ice_hockey_stick_and_puck\",\"lacrosse\",\"table_tennis_paddle_and_ball\",\"badminton_racquet_and_shuttlecock\",\"boxing_glove\",\"martial_arts_uniform\",\"goal_net\",\"golf\",\"ice_skate\",\"fishing_pole_and_fish\",\"diving_mask\",\"running_shirt_with_sash\",\"ski\",\"sled\",\"curling_stone\",\"dart\",\"yo-yo\",\"kite\",\"8ball\",\"crystal_ball\",\"magic_wand\",\"nazar_amulet\",\"hamsa\",\"video_game\",\"joystick\",\"slot_machine\",\"game_die\",\"jigsaw\",\"teddy_bear\",\"pinata\",\"mirror_ball\",\"nesting_dolls\",\"spades\",\"hearts\",\"diamonds\",\"clubs\",\"chess_pawn\",\"black_joker\",\"mahjong\",\"flower_playing_cards\",\"performing_arts\",\"frame_with_picture\",\"art\",\"thread\",\"sewing_needle\",\"yarn\",\"knot\"]},{\"id\":\"places\",\"emojis\":[\"earth_africa\",\"earth_americas\",\"earth_asia\",\"globe_with_meridians\",\"world_map\",\"japan\",\"compass\",\"snow_capped_mountain\",\"mountain\",\"volcano\",\"mount_fuji\",\"camping\",\"beach_with_umbrella\",\"desert\",\"desert_island\",\"national_park\",\"stadium\",\"classical_building\",\"building_construction\",\"bricks\",\"rock\",\"wood\",\"hut\",\"house_buildings\",\"derelict_house_building\",\"house\",\"house_with_garden\",\"office\",\"post_office\",\"european_post_office\",\"hospital\",\"bank\",\"hotel\",\"love_hotel\",\"convenience_store\",\"school\",\"department_store\",\"factory\",\"japanese_castle\",\"european_castle\",\"wedding\",\"tokyo_tower\",\"statue_of_liberty\",\"church\",\"mosque\",\"hindu_temple\",\"synagogue\",\"shinto_shrine\",\"kaaba\",\"fountain\",\"tent\",\"foggy\",\"night_with_stars\",\"cityscape\",\"sunrise_over_mountains\",\"sunrise\",\"city_sunset\",\"city_sunrise\",\"bridge_at_night\",\"hotsprings\",\"carousel_horse\",\"playground_slide\",\"ferris_wheel\",\"roller_coaster\",\"barber\",\"circus_tent\",\"steam_locomotive\",\"railway_car\",\"bullettrain_side\",\"bullettrain_front\",\"train2\",\"metro\",\"light_rail\",\"station\",\"tram\",\"monorail\",\"mountain_railway\",\"train\",\"bus\",\"oncoming_bus\",\"trolleybus\",\"minibus\",\"ambulance\",\"fire_engine\",\"police_car\",\"oncoming_police_car\",\"taxi\",\"oncoming_taxi\",\"car\",\"oncoming_automobile\",\"blue_car\",\"pickup_truck\",\"truck\",\"articulated_lorry\",\"tractor\",\"racing_car\",\"racing_motorcycle\",\"motor_scooter\",\"manual_wheelchair\",\"motorized_wheelchair\",\"auto_rickshaw\",\"bike\",\"scooter\",\"skateboard\",\"roller_skate\",\"busstop\",\"motorway\",\"railway_track\",\"oil_drum\",\"fuelpump\",\"wheel\",\"rotating_light\",\"traffic_light\",\"vertical_traffic_light\",\"octagonal_sign\",\"construction\",\"anchor\",\"ring_buoy\",\"boat\",\"canoe\",\"speedboat\",\"passenger_ship\",\"ferry\",\"motor_boat\",\"ship\",\"airplane\",\"small_airplane\",\"airplane_departure\",\"airplane_arriving\",\"parachute\",\"seat\",\"helicopter\",\"suspension_railway\",\"mountain_cableway\",\"aerial_tramway\",\"satellite\",\"rocket\",\"flying_saucer\",\"bellhop_bell\",\"luggage\",\"hourglass\",\"hourglass_flowing_sand\",\"watch\",\"alarm_clock\",\"stopwatch\",\"timer_clock\",\"mantelpiece_clock\",\"clock12\",\"clock1230\",\"clock1\",\"clock130\",\"clock2\",\"clock230\",\"clock3\",\"clock330\",\"clock4\",\"clock430\",\"clock5\",\"clock530\",\"clock6\",\"clock630\",\"clock7\",\"clock730\",\"clock8\",\"clock830\",\"clock9\",\"clock930\",\"clock10\",\"clock1030\",\"clock11\",\"clock1130\",\"new_moon\",\"waxing_crescent_moon\",\"first_quarter_moon\",\"moon\",\"full_moon\",\"waning_gibbous_moon\",\"last_quarter_moon\",\"waning_crescent_moon\",\"crescent_moon\",\"new_moon_with_face\",\"first_quarter_moon_with_face\",\"last_quarter_moon_with_face\",\"thermometer\",\"sunny\",\"full_moon_with_face\",\"sun_with_face\",\"ringed_planet\",\"star\",\"star2\",\"stars\",\"milky_way\",\"cloud\",\"partly_sunny\",\"thunder_cloud_and_rain\",\"mostly_sunny\",\"barely_sunny\",\"partly_sunny_rain\",\"rain_cloud\",\"snow_cloud\",\"lightning\",\"tornado\",\"fog\",\"wind_blowing_face\",\"cyclone\",\"rainbow\",\"closed_umbrella\",\"umbrella\",\"umbrella_with_rain_drops\",\"umbrella_on_ground\",\"zap\",\"snowflake\",\"snowman\",\"snowman_without_snow\",\"comet\",\"fire\",\"droplet\",\"ocean\"]},{\"id\":\"objects\",\"emojis\":[\"eyeglasses\",\"dark_sunglasses\",\"goggles\",\"lab_coat\",\"safety_vest\",\"necktie\",\"shirt\",\"jeans\",\"scarf\",\"gloves\",\"coat\",\"socks\",\"dress\",\"kimono\",\"sari\",\"one-piece_swimsuit\",\"briefs\",\"shorts\",\"bikini\",\"womans_clothes\",\"purse\",\"handbag\",\"pouch\",\"shopping_bags\",\"school_satchel\",\"thong_sandal\",\"mans_shoe\",\"athletic_shoe\",\"hiking_boot\",\"womans_flat_shoe\",\"high_heel\",\"sandal\",\"ballet_shoes\",\"boot\",\"crown\",\"womans_hat\",\"tophat\",\"mortar_board\",\"billed_cap\",\"military_helmet\",\"helmet_with_white_cross\",\"prayer_beads\",\"lipstick\",\"ring\",\"gem\",\"mute\",\"speaker\",\"sound\",\"loud_sound\",\"loudspeaker\",\"mega\",\"postal_horn\",\"bell\",\"no_bell\",\"musical_score\",\"musical_note\",\"notes\",\"studio_microphone\",\"level_slider\",\"control_knobs\",\"microphone\",\"headphones\",\"radio\",\"saxophone\",\"accordion\",\"guitar\",\"musical_keyboard\",\"trumpet\",\"violin\",\"banjo\",\"drum_with_drumsticks\",\"long_drum\",\"iphone\",\"calling\",\"phone\",\"telephone_receiver\",\"pager\",\"fax\",\"battery\",\"low_battery\",\"electric_plug\",\"computer\",\"desktop_computer\",\"printer\",\"keyboard\",\"three_button_mouse\",\"trackball\",\"minidisc\",\"floppy_disk\",\"cd\",\"dvd\",\"abacus\",\"movie_camera\",\"film_frames\",\"film_projector\",\"clapper\",\"tv\",\"camera\",\"camera_with_flash\",\"video_camera\",\"vhs\",\"mag\",\"mag_right\",\"candle\",\"bulb\",\"flashlight\",\"izakaya_lantern\",\"diya_lamp\",\"notebook_with_decorative_cover\",\"closed_book\",\"book\",\"green_book\",\"blue_book\",\"orange_book\",\"books\",\"notebook\",\"ledger\",\"page_with_curl\",\"scroll\",\"page_facing_up\",\"newspaper\",\"rolled_up_newspaper\",\"bookmark_tabs\",\"bookmark\",\"label\",\"moneybag\",\"coin\",\"yen\",\"dollar\",\"euro\",\"pound\",\"money_with_wings\",\"credit_card\",\"receipt\",\"chart\",\"email\",\"e-mail\",\"incoming_envelope\",\"envelope_with_arrow\",\"outbox_tray\",\"inbox_tray\",\"package\",\"mailbox\",\"mailbox_closed\",\"mailbox_with_mail\",\"mailbox_with_no_mail\",\"postbox\",\"ballot_box_with_ballot\",\"pencil2\",\"black_nib\",\"lower_left_fountain_pen\",\"lower_left_ballpoint_pen\",\"lower_left_paintbrush\",\"lower_left_crayon\",\"memo\",\"briefcase\",\"file_folder\",\"open_file_folder\",\"card_index_dividers\",\"date\",\"calendar\",\"spiral_note_pad\",\"spiral_calendar_pad\",\"card_index\",\"chart_with_upwards_trend\",\"chart_with_downwards_trend\",\"bar_chart\",\"clipboard\",\"pushpin\",\"round_pushpin\",\"paperclip\",\"linked_paperclips\",\"straight_ruler\",\"triangular_ruler\",\"scissors\",\"card_file_box\",\"file_cabinet\",\"wastebasket\",\"lock\",\"unlock\",\"lock_with_ink_pen\",\"closed_lock_with_key\",\"key\",\"old_key\",\"hammer\",\"axe\",\"pick\",\"hammer_and_pick\",\"hammer_and_wrench\",\"dagger_knife\",\"crossed_swords\",\"gun\",\"boomerang\",\"bow_and_arrow\",\"shield\",\"carpentry_saw\",\"wrench\",\"screwdriver\",\"nut_and_bolt\",\"gear\",\"compression\",\"scales\",\"probing_cane\",\"link\",\"chains\",\"hook\",\"toolbox\",\"magnet\",\"ladder\",\"alembic\",\"test_tube\",\"petri_dish\",\"dna\",\"microscope\",\"telescope\",\"satellite_antenna\",\"syringe\",\"drop_of_blood\",\"pill\",\"adhesive_bandage\",\"crutch\",\"stethoscope\",\"x-ray\",\"door\",\"elevator\",\"mirror\",\"window\",\"bed\",\"couch_and_lamp\",\"chair\",\"toilet\",\"plunger\",\"shower\",\"bathtub\",\"mouse_trap\",\"razor\",\"lotion_bottle\",\"safety_pin\",\"broom\",\"basket\",\"roll_of_paper\",\"bucket\",\"soap\",\"bubbles\",\"toothbrush\",\"sponge\",\"fire_extinguisher\",\"shopping_trolley\",\"smoking\",\"coffin\",\"headstone\",\"funeral_urn\",\"moyai\",\"placard\",\"identification_card\"]},{\"id\":\"symbols\",\"emojis\":[\"atm\",\"put_litter_in_its_place\",\"potable_water\",\"wheelchair\",\"mens\",\"womens\",\"restroom\",\"baby_symbol\",\"wc\",\"passport_control\",\"customs\",\"baggage_claim\",\"left_luggage\",\"warning\",\"children_crossing\",\"no_entry\",\"no_entry_sign\",\"no_bicycles\",\"no_smoking\",\"do_not_litter\",\"non-potable_water\",\"no_pedestrians\",\"no_mobile_phones\",\"underage\",\"radioactive_sign\",\"biohazard_sign\",\"arrow_up\",\"arrow_upper_right\",\"arrow_right\",\"arrow_lower_right\",\"arrow_down\",\"arrow_lower_left\",\"arrow_left\",\"arrow_upper_left\",\"arrow_up_down\",\"left_right_arrow\",\"leftwards_arrow_with_hook\",\"arrow_right_hook\",\"arrow_heading_up\",\"arrow_heading_down\",\"arrows_clockwise\",\"arrows_counterclockwise\",\"back\",\"end\",\"on\",\"soon\",\"top\",\"place_of_worship\",\"atom_symbol\",\"om_symbol\",\"star_of_david\",\"wheel_of_dharma\",\"yin_yang\",\"latin_cross\",\"orthodox_cross\",\"star_and_crescent\",\"peace_symbol\",\"menorah_with_nine_branches\",\"six_pointed_star\",\"aries\",\"taurus\",\"gemini\",\"cancer\",\"leo\",\"virgo\",\"libra\",\"scorpius\",\"sagittarius\",\"capricorn\",\"aquarius\",\"pisces\",\"ophiuchus\",\"twisted_rightwards_arrows\",\"repeat\",\"repeat_one\",\"arrow_forward\",\"fast_forward\",\"black_right_pointing_double_triangle_with_vertical_bar\",\"black_right_pointing_triangle_with_double_vertical_bar\",\"arrow_backward\",\"rewind\",\"black_left_pointing_double_triangle_with_vertical_bar\",\"arrow_up_small\",\"arrow_double_up\",\"arrow_down_small\",\"arrow_double_down\",\"double_vertical_bar\",\"black_square_for_stop\",\"black_circle_for_record\",\"eject\",\"cinema\",\"low_brightness\",\"high_brightness\",\"signal_strength\",\"vibration_mode\",\"mobile_phone_off\",\"female_sign\",\"male_sign\",\"transgender_symbol\",\"heavy_multiplication_x\",\"heavy_plus_sign\",\"heavy_minus_sign\",\"heavy_division_sign\",\"heavy_equals_sign\",\"infinity\",\"bangbang\",\"interrobang\",\"question\",\"grey_question\",\"grey_exclamation\",\"exclamation\",\"wavy_dash\",\"currency_exchange\",\"heavy_dollar_sign\",\"medical_symbol\",\"recycle\",\"fleur_de_lis\",\"trident\",\"name_badge\",\"beginner\",\"o\",\"white_check_mark\",\"ballot_box_with_check\",\"heavy_check_mark\",\"x\",\"negative_squared_cross_mark\",\"curly_loop\",\"loop\",\"part_alternation_mark\",\"eight_spoked_asterisk\",\"eight_pointed_black_star\",\"sparkle\",\"copyright\",\"registered\",\"tm\",\"hash\",\"keycap_star\",\"zero\",\"one\",\"two\",\"three\",\"four\",\"five\",\"six\",\"seven\",\"eight\",\"nine\",\"keycap_ten\",\"capital_abcd\",\"abcd\",\"1234\",\"symbols\",\"abc\",\"a\",\"ab\",\"b\",\"cl\",\"cool\",\"free\",\"information_source\",\"id\",\"m\",\"new\",\"ng\",\"o2\",\"ok\",\"parking\",\"sos\",\"up\",\"vs\",\"koko\",\"sa\",\"u6708\",\"u6709\",\"u6307\",\"ideograph_advantage\",\"u5272\",\"u7121\",\"u7981\",\"accept\",\"u7533\",\"u5408\",\"u7a7a\",\"congratulations\",\"secret\",\"u55b6\",\"u6e80\",\"red_circle\",\"large_orange_circle\",\"large_yellow_circle\",\"large_green_circle\",\"large_blue_circle\",\"large_purple_circle\",\"large_brown_circle\",\"black_circle\",\"white_circle\",\"large_red_square\",\"large_orange_square\",\"large_yellow_square\",\"large_green_square\",\"large_blue_square\",\"large_purple_square\",\"large_brown_square\",\"black_large_square\",\"white_large_square\",\"black_medium_square\",\"white_medium_square\",\"black_medium_small_square\",\"white_medium_small_square\",\"black_small_square\",\"white_small_square\",\"large_orange_diamond\",\"large_blue_diamond\",\"small_orange_diamond\",\"small_blue_diamond\",\"small_red_triangle\",\"small_red_triangle_down\",\"diamond_shape_with_a_dot_inside\",\"radio_button\",\"white_square_button\",\"black_square_button\"]},{\"id\":\"flags\",\"emojis\":[\"checkered_flag\",\"cn\",\"crossed_flags\",\"de\",\"es\",\"flag-ac\",\"flag-ad\",\"flag-ae\",\"flag-af\",\"flag-ag\",\"flag-ai\",\"flag-al\",\"flag-am\",\"flag-ao\",\"flag-aq\",\"flag-ar\",\"flag-as\",\"flag-at\",\"flag-au\",\"flag-aw\",\"flag-ax\",\"flag-az\",\"flag-ba\",\"flag-bb\",\"flag-bd\",\"flag-be\",\"flag-bf\",\"flag-bg\",\"flag-bh\",\"flag-bi\",\"flag-bj\",\"flag-bl\",\"flag-bm\",\"flag-bn\",\"flag-bo\",\"flag-bq\",\"flag-br\",\"flag-bs\",\"flag-bt\",\"flag-bv\",\"flag-bw\",\"flag-by\",\"flag-bz\",\"flag-ca\",\"flag-cc\",\"flag-cd\",\"flag-cf\",\"flag-cg\",\"flag-ch\",\"flag-ci\",\"flag-ck\",\"flag-cl\",\"flag-cm\",\"flag-co\",\"flag-cp\",\"flag-cr\",\"flag-cu\",\"flag-cv\",\"flag-cw\",\"flag-cx\",\"flag-cy\",\"flag-cz\",\"flag-dg\",\"flag-dj\",\"flag-dk\",\"flag-dm\",\"flag-do\",\"flag-dz\",\"flag-ea\",\"flag-ec\",\"flag-ee\",\"flag-eg\",\"flag-eh\",\"flag-england\",\"flag-er\",\"flag-et\",\"flag-eu\",\"flag-fi\",\"flag-fj\",\"flag-fk\",\"flag-fm\",\"flag-fo\",\"flag-ga\",\"flag-gd\",\"flag-ge\",\"flag-gf\",\"flag-gg\",\"flag-gh\",\"flag-gi\",\"flag-gl\",\"flag-gm\",\"flag-gn\",\"flag-gp\",\"flag-gq\",\"flag-gr\",\"flag-gs\",\"flag-gt\",\"flag-gu\",\"flag-gw\",\"flag-gy\",\"flag-hk\",\"flag-hm\",\"flag-hn\",\"flag-hr\",\"flag-ht\",\"flag-hu\",\"flag-ic\",\"flag-id\",\"flag-ie\",\"flag-il\",\"flag-im\",\"flag-in\",\"flag-io\",\"flag-iq\",\"flag-ir\",\"flag-is\",\"flag-je\",\"flag-jm\",\"flag-jo\",\"flag-ke\",\"flag-kg\",\"flag-kh\",\"flag-ki\",\"flag-km\",\"flag-kn\",\"flag-kp\",\"flag-kw\",\"flag-ky\",\"flag-kz\",\"flag-la\",\"flag-lb\",\"flag-lc\",\"flag-li\",\"flag-lk\",\"flag-lr\",\"flag-ls\",\"flag-lt\",\"flag-lu\",\"flag-lv\",\"flag-ly\",\"flag-ma\",\"flag-mc\",\"flag-md\",\"flag-me\",\"flag-mf\",\"flag-mg\",\"flag-mh\",\"flag-mk\",\"flag-ml\",\"flag-mm\",\"flag-mn\",\"flag-mo\",\"flag-mp\",\"flag-mq\",\"flag-mr\",\"flag-ms\",\"flag-mt\",\"flag-mu\",\"flag-mv\",\"flag-mw\",\"flag-mx\",\"flag-my\",\"flag-mz\",\"flag-na\",\"flag-nc\",\"flag-ne\",\"flag-nf\",\"flag-ng\",\"flag-ni\",\"flag-nl\",\"flag-no\",\"flag-np\",\"flag-nr\",\"flag-nu\",\"flag-nz\",\"flag-om\",\"flag-pa\",\"flag-pe\",\"flag-pf\",\"flag-pg\",\"flag-ph\",\"flag-pk\",\"flag-pl\",\"flag-pm\",\"flag-pn\",\"flag-pr\",\"flag-ps\",\"flag-pt\",\"flag-pw\",\"flag-py\",\"flag-qa\",\"flag-re\",\"flag-ro\",\"flag-rs\",\"flag-rw\",\"flag-sa\",\"flag-sb\",\"flag-sc\",\"flag-scotland\",\"flag-sd\",\"flag-se\",\"flag-sg\",\"flag-sh\",\"flag-si\",\"flag-sj\",\"flag-sk\",\"flag-sl\",\"flag-sm\",\"flag-sn\",\"flag-so\",\"flag-sr\",\"flag-ss\",\"flag-st\",\"flag-sv\",\"flag-sx\",\"flag-sy\",\"flag-sz\",\"flag-ta\",\"flag-tc\",\"flag-td\",\"flag-tf\",\"flag-tg\",\"flag-th\",\"flag-tj\",\"flag-tk\",\"flag-tl\",\"flag-tm\",\"flag-tn\",\"flag-to\",\"flag-tr\",\"flag-tt\",\"flag-tv\",\"flag-tw\",\"flag-tz\",\"flag-ua\",\"flag-ug\",\"flag-um\",\"flag-un\",\"flag-uy\",\"flag-uz\",\"flag-va\",\"flag-vc\",\"flag-ve\",\"flag-vg\",\"flag-vi\",\"flag-vn\",\"flag-vu\",\"flag-wales\",\"flag-wf\",\"flag-ws\",\"flag-xk\",\"flag-ye\",\"flag-yt\",\"flag-za\",\"flag-zm\",\"flag-zw\",\"fr\",\"gb\",\"it\",\"jp\",\"kr\",\"pirate_flag\",\"rainbow-flag\",\"ru\",\"transgender_flag\",\"triangular_flag_on_post\",\"us\",\"waving_black_flag\",\"waving_white_flag\"]}],\"emojis\":{\"100\":{\"id\":\"100\",\"name\":\"Hundred Points\",\"keywords\":[\"100\",\"score\",\"perfect\",\"numbers\",\"century\",\"exam\",\"quiz\",\"test\",\"pass\"],\"skins\":[{\"unified\":\"1f4af\",\"native\":\"\uD83D\uDCAF\"}],\"version\":1},\"1234\":{\"id\":\"1234\",\"name\":\"Input Numbers\",\"keywords\":[\"1234\",\"blue\",\"square\"],\"skins\":[{\"unified\":\"1f522\",\"native\":\"\uD83D\uDD22\"}],\"version\":1},\"grinning\":{\"id\":\"grinning\",\"name\":\"Grinning Face\",\"emoticons\":[\":D\"],\"keywords\":[\"smile\",\"happy\",\"joy\",\":D\",\"grin\"],\"skins\":[{\"unified\":\"1f600\",\"native\":\"\uD83D\uDE00\"}],\"version\":1},\"smiley\":{\"id\":\"smiley\",\"name\":\"Grinning Face with Big Eyes\",\"emoticons\":[\":)\",\"=)\",\"=-)\"],\"keywords\":[\"smiley\",\"happy\",\"joy\",\"haha\",\":D\",\":)\",\"smile\",\"funny\"],\"skins\":[{\"unified\":\"1f603\",\"native\":\"\uD83D\uDE03\"}],\"version\":1},\"smile\":{\"id\":\"smile\",\"name\":\"Grinning Face with Smiling Eyes\",\"emoticons\":[\":)\",\"C:\",\"c:\",\":D\",\":-D\"],\"keywords\":[\"smile\",\"happy\",\"joy\",\"funny\",\"haha\",\"laugh\",\"like\",\":D\",\":)\"],\"skins\":[{\"unified\":\"1f604\",\"native\":\"\uD83D\uDE04\"}],\"version\":1},\"grin\":{\"id\":\"grin\",\"name\":\"Beaming Face with Smiling Eyes\",\"keywords\":[\"grin\",\"happy\",\"smile\",\"joy\",\"kawaii\"],\"skins\":[{\"unified\":\"1f601\",\"native\":\"\uD83D\uDE01\"}],\"version\":1},\"laughing\":{\"id\":\"laughing\",\"name\":\"Grinning Squinting Face\",\"emoticons\":[\":>\",\":->\"],\"keywords\":[\"laughing\",\"satisfied\",\"happy\",\"joy\",\"lol\",\"haha\",\"glad\",\"XD\",\"laugh\"],\"skins\":[{\"unified\":\"1f606\",\"native\":\"\uD83D\uDE06\"}],\"version\":1},\"sweat_smile\":{\"id\":\"sweat_smile\",\"name\":\"Grinning Face with Sweat\",\"keywords\":[\"smile\",\"hot\",\"happy\",\"laugh\",\"relief\"],\"skins\":[{\"unified\":\"1f605\",\"native\":\"\uD83D\uDE05\"}],\"version\":1},\"rolling_on_the_floor_laughing\":{\"id\":\"rolling_on_the_floor_laughing\",\"name\":\"Rolling on the Floor Laughing\",\"keywords\":[\"face\",\"lol\",\"haha\",\"rofl\"],\"skins\":[{\"unified\":\"1f923\",\"native\":\"\uD83E\uDD23\"}],\"version\":3},\"joy\":{\"id\":\"joy\",\"name\":\"Face with Tears of Joy\",\"keywords\":[\"cry\",\"weep\",\"happy\",\"happytears\",\"haha\"],\"skins\":[{\"unified\":\"1f602\",\"native\":\"\uD83D\uDE02\"}],\"version\":1},\"slightly_smiling_face\":{\"id\":\"slightly_smiling_face\",\"name\":\"Slightly Smiling Face\",\"emoticons\":[\":)\",\"(:\",\":-)\"],\"keywords\":[\"smile\"],\"skins\":[{\"unified\":\"1f642\",\"native\":\"\uD83D\uDE42\"}],\"version\":1},\"upside_down_face\":{\"id\":\"upside_down_face\",\"name\":\"Upside-Down Face\",\"keywords\":[\"upside\",\"down\",\"flipped\",\"silly\",\"smile\"],\"skins\":[{\"unified\":\"1f643\",\"native\":\"\uD83D\uDE43\"}],\"version\":1},\"melting_face\":{\"id\":\"melting_face\",\"name\":\"Melting Face\",\"keywords\":[\"hot\",\"heat\"],\"skins\":[{\"unified\":\"1fae0\",\"native\":\"\uD83E\uDEE0\"}],\"version\":14},\"wink\":{\"id\":\"wink\",\"name\":\"Winking Face\",\"emoticons\":[\";)\",\";-)\"],\"keywords\":[\"wink\",\"happy\",\"mischievous\",\"secret\",\";)\",\"smile\",\"eye\"],\"skins\":[{\"unified\":\"1f609\",\"native\":\"\uD83D\uDE09\"}],\"version\":1},\"blush\":{\"id\":\"blush\",\"name\":\"Smiling Face with Smiling Eyes\",\"emoticons\":[\":)\"],\"keywords\":[\"blush\",\"smile\",\"happy\",\"flushed\",\"crush\",\"embarrassed\",\"shy\",\"joy\"],\"skins\":[{\"unified\":\"1f60a\",\"native\":\"\uD83D\uDE0A\"}],\"version\":1},\"innocent\":{\"id\":\"innocent\",\"name\":\"Smiling Face with Halo\",\"keywords\":[\"innocent\",\"angel\",\"heaven\"],\"skins\":[{\"unified\":\"1f607\",\"native\":\"\uD83D\uDE07\"}],\"version\":1},\"smiling_face_with_3_hearts\":{\"id\":\"smiling_face_with_3_hearts\",\"name\":\"Smiling Face with Hearts\",\"keywords\":[\"3\",\"love\",\"like\",\"affection\",\"valentines\",\"infatuation\",\"crush\",\"adore\"],\"skins\":[{\"unified\":\"1f970\",\"native\":\"\uD83E\uDD70\"}],\"version\":11},\"heart_eyes\":{\"id\":\"heart_eyes\",\"name\":\"Smiling Face with Heart-Eyes\",\"keywords\":[\"heart\",\"eyes\",\"love\",\"like\",\"affection\",\"valentines\",\"infatuation\",\"crush\"],\"skins\":[{\"unified\":\"1f60d\",\"native\":\"\uD83D\uDE0D\"}],\"version\":1},\"star-struck\":{\"id\":\"star-struck\",\"name\":\"Star-Struck\",\"keywords\":[\"star\",\"struck\",\"grinning\",\"face\",\"with\",\"eyes\",\"smile\",\"starry\"],\"skins\":[{\"unified\":\"1f929\",\"native\":\"\uD83E\uDD29\"}],\"version\":5},\"kissing_heart\":{\"id\":\"kissing_heart\",\"name\":\"Face Blowing a Kiss\",\"emoticons\":[\":*\",\":-*\"],\"keywords\":[\"kissing\",\"heart\",\"love\",\"like\",\"affection\",\"valentines\",\"infatuation\"],\"skins\":[{\"unified\":\"1f618\",\"native\":\"\uD83D\uDE18\"}],\"version\":1},\"kissing\":{\"id\":\"kissing\",\"name\":\"Kissing Face\",\"keywords\":[\"love\",\"like\",\"3\",\"valentines\",\"infatuation\",\"kiss\"],\"skins\":[{\"unified\":\"1f617\",\"native\":\"\uD83D\uDE17\"}],\"version\":1},\"relaxed\":{\"id\":\"relaxed\",\"name\":\"Smiling Face\",\"keywords\":[\"relaxed\",\"blush\",\"massage\",\"happiness\"],\"skins\":[{\"unified\":\"263a-fe0f\",\"native\":\"\u263A\uFE0F\"}],\"version\":1},\"kissing_closed_eyes\":{\"id\":\"kissing_closed_eyes\",\"name\":\"Kissing Face with Closed Eyes\",\"keywords\":[\"love\",\"like\",\"affection\",\"valentines\",\"infatuation\",\"kiss\"],\"skins\":[{\"unified\":\"1f61a\",\"native\":\"\uD83D\uDE1A\"}],\"version\":1},\"kissing_smiling_eyes\":{\"id\":\"kissing_smiling_eyes\",\"name\":\"Kissing Face with Smiling Eyes\",\"keywords\":[\"affection\",\"valentines\",\"infatuation\",\"kiss\"],\"skins\":[{\"unified\":\"1f619\",\"native\":\"\uD83D\uDE19\"}],\"version\":1},\"smiling_face_with_tear\":{\"id\":\"smiling_face_with_tear\",\"name\":\"Smiling Face with Tear\",\"keywords\":[\"sad\",\"cry\",\"pretend\"],\"skins\":[{\"unified\":\"1f972\",\"native\":\"\uD83E\uDD72\"}],\"version\":13},\"yum\":{\"id\":\"yum\",\"name\":\"Face Savoring Food\",\"keywords\":[\"yum\",\"happy\",\"joy\",\"tongue\",\"smile\",\"silly\",\"yummy\",\"nom\",\"delicious\",\"savouring\"],\"skins\":[{\"unified\":\"1f60b\",\"native\":\"\uD83D\uDE0B\"}],\"version\":1},\"stuck_out_tongue\":{\"id\":\"stuck_out_tongue\",\"name\":\"Face with Tongue\",\"emoticons\":[\":p\",\":-p\",\":P\",\":-P\",\":b\",\":-b\"],\"keywords\":[\"stuck\",\"out\",\"prank\",\"childish\",\"playful\",\"mischievous\",\"smile\"],\"skins\":[{\"unified\":\"1f61b\",\"native\":\"\uD83D\uDE1B\"}],\"version\":1},\"stuck_out_tongue_winking_eye\":{\"id\":\"stuck_out_tongue_winking_eye\",\"name\":\"Winking Face with Tongue\",\"emoticons\":[\";p\",\";-p\",\";b\",\";-b\",\";P\",\";-P\"],\"keywords\":[\"stuck\",\"out\",\"eye\",\"prank\",\"childish\",\"playful\",\"mischievous\",\"smile\",\"wink\"],\"skins\":[{\"unified\":\"1f61c\",\"native\":\"\uD83D\uDE1C\"}],\"version\":1},\"zany_face\":{\"id\":\"zany_face\",\"name\":\"Zany Face\",\"keywords\":[\"grinning\",\"with\",\"one\",\"large\",\"and\",\"small\",\"eye\",\"goofy\",\"crazy\"],\"skins\":[{\"unified\":\"1f92a\",\"native\":\"\uD83E\uDD2A\"}],\"version\":5},\"stuck_out_tongue_closed_eyes\":{\"id\":\"stuck_out_tongue_closed_eyes\",\"name\":\"Squinting Face with Tongue\",\"keywords\":[\"stuck\",\"out\",\"closed\",\"eyes\",\"prank\",\"playful\",\"mischievous\",\"smile\"],\"skins\":[{\"unified\":\"1f61d\",\"native\":\"\uD83D\uDE1D\"}],\"version\":1},\"money_mouth_face\":{\"id\":\"money_mouth_face\",\"name\":\"Money-Mouth Face\",\"keywords\":[\"money\",\"mouth\",\"rich\",\"dollar\"],\"skins\":[{\"unified\":\"1f911\",\"native\":\"\uD83E\uDD11\"}],\"version\":1},\"hugging_face\":{\"id\":\"hugging_face\",\"name\":\"Hugging Face\",\"keywords\":[\"smile\",\"hug\"],\"skins\":[{\"unified\":\"1f917\",\"native\":\"\uD83E\uDD17\"}],\"version\":1},\"face_with_hand_over_mouth\":{\"id\":\"face_with_hand_over_mouth\",\"name\":\"Face with Hand over Mouth\",\"keywords\":[\"smiling\",\"eyes\",\"and\",\"covering\",\"whoops\",\"shock\",\"surprise\"],\"skins\":[{\"unified\":\"1f92d\",\"native\":\"\uD83E\uDD2D\"}],\"version\":5},\"face_with_open_eyes_and_hand_over_mouth\":{\"id\":\"face_with_open_eyes_and_hand_over_mouth\",\"name\":\"Face with Open Eyes and Hand over Mouth\",\"keywords\":[\"silence\",\"secret\",\"shock\",\"surprise\"],\"skins\":[{\"unified\":\"1fae2\",\"native\":\"\uD83E\uDEE2\"}],\"version\":14},\"face_with_peeking_eye\":{\"id\":\"face_with_peeking_eye\",\"name\":\"Face with Peeking Eye\",\"keywords\":[\"scared\",\"frightening\",\"embarrassing\"],\"skins\":[{\"unified\":\"1fae3\",\"native\":\"\uD83E\uDEE3\"}],\"version\":14},\"shushing_face\":{\"id\":\"shushing_face\",\"name\":\"Shushing Face\",\"keywords\":[\"with\",\"finger\",\"covering\",\"closed\",\"lips\",\"quiet\",\"shhh\"],\"skins\":[{\"unified\":\"1f92b\",\"native\":\"\uD83E\uDD2B\"}],\"version\":5},\"thinking_face\":{\"id\":\"thinking_face\",\"name\":\"Thinking Face\",\"keywords\":[\"hmmm\",\"think\",\"consider\"],\"skins\":[{\"unified\":\"1f914\",\"native\":\"\uD83E\uDD14\"}],\"version\":1},\"saluting_face\":{\"id\":\"saluting_face\",\"name\":\"Saluting Face\",\"keywords\":[\"respect\",\"salute\"],\"skins\":[{\"unified\":\"1fae1\",\"native\":\"\uD83E\uDEE1\"}],\"version\":14},\"zipper_mouth_face\":{\"id\":\"zipper_mouth_face\",\"name\":\"Zipper-Mouth Face\",\"keywords\":[\"zipper\",\"mouth\",\"sealed\",\"secret\"],\"skins\":[{\"unified\":\"1f910\",\"native\":\"\uD83E\uDD10\"}],\"version\":1},\"face_with_raised_eyebrow\":{\"id\":\"face_with_raised_eyebrow\",\"name\":\"Face with Raised Eyebrow\",\"keywords\":[\"one\",\"distrust\",\"scepticism\",\"disapproval\",\"disbelief\",\"surprise\"],\"skins\":[{\"unified\":\"1f928\",\"native\":\"\uD83E\uDD28\"}],\"version\":5},\"neutral_face\":{\"id\":\"neutral_face\",\"name\":\"Neutral Face\",\"emoticons\":[\":|\",\":-|\"],\"keywords\":[\"indifference\",\"meh\",\":\",\"\"],\"skins\":[{\"unified\":\"1f610\",\"native\":\"\uD83D\uDE10\"}],\"version\":1},\"expressionless\":{\"id\":\"expressionless\",\"name\":\"Expressionless Face\",\"emoticons\":[\"-_-\"],\"keywords\":[\"indifferent\",\"-\",\"\",\"meh\",\"deadpan\"],\"skins\":[{\"unified\":\"1f611\",\"native\":\"\uD83D\uDE11\"}],\"version\":1},\"no_mouth\":{\"id\":\"no_mouth\",\"name\":\"Face Without Mouth\",\"keywords\":[\"no\",\"hellokitty\"],\"skins\":[{\"unified\":\"1f636\",\"native\":\"\uD83D\uDE36\"}],\"version\":1},\"dotted_line_face\":{\"id\":\"dotted_line_face\",\"name\":\"Dotted Line Face\",\"keywords\":[\"invisible\",\"lonely\",\"isolation\",\"depression\"],\"skins\":[{\"unified\":\"1fae5\",\"native\":\"\uD83E\uDEE5\"}],\"version\":14},\"face_in_clouds\":{\"id\":\"face_in_clouds\",\"name\":\"Face in Clouds\",\"keywords\":[\"shower\",\"steam\",\"dream\"],\"skins\":[{\"unified\":\"1f636-200d-1f32b-fe0f\",\"native\":\"\uD83D\uDE36\u200D\uD83C\uDF2B\uFE0F\"}],\"version\":13.1},\"smirk\":{\"id\":\"smirk\",\"name\":\"Smirking Face\",\"keywords\":[\"smirk\",\"smile\",\"mean\",\"prank\",\"smug\",\"sarcasm\"],\"skins\":[{\"unified\":\"1f60f\",\"native\":\"\uD83D\uDE0F\"}],\"version\":1},\"unamused\":{\"id\":\"unamused\",\"name\":\"Unamused Face\",\"emoticons\":[\":(\"],\"keywords\":[\"indifference\",\"bored\",\"straight\",\"serious\",\"sarcasm\",\"unimpressed\",\"skeptical\",\"dubious\",\"side\",\"eye\"],\"skins\":[{\"unified\":\"1f612\",\"native\":\"\uD83D\uDE12\"}],\"version\":1},\"face_with_rolling_eyes\":{\"id\":\"face_with_rolling_eyes\",\"name\":\"Face with Rolling Eyes\",\"keywords\":[\"eyeroll\",\"frustrated\"],\"skins\":[{\"unified\":\"1f644\",\"native\":\"\uD83D\uDE44\"}],\"version\":1},\"grimacing\":{\"id\":\"grimacing\",\"name\":\"Grimacing Face\",\"keywords\":[\"grimace\",\"teeth\"],\"skins\":[{\"unified\":\"1f62c\",\"native\":\"\uD83D\uDE2C\"}],\"version\":1},\"face_exhaling\":{\"id\":\"face_exhaling\",\"name\":\"Face Exhaling\",\"keywords\":[\"relieve\",\"relief\",\"tired\",\"sigh\"],\"skins\":[{\"unified\":\"1f62e-200d-1f4a8\",\"native\":\"\uD83D\uDE2E\u200D\uD83D\uDCA8\"}],\"version\":13.1},\"lying_face\":{\"id\":\"lying_face\",\"name\":\"Lying Face\",\"keywords\":[\"lie\",\"pinocchio\"],\"skins\":[{\"unified\":\"1f925\",\"native\":\"\uD83E\uDD25\"}],\"version\":3},\"relieved\":{\"id\":\"relieved\",\"name\":\"Relieved Face\",\"keywords\":[\"relaxed\",\"phew\",\"massage\",\"happiness\"],\"skins\":[{\"unified\":\"1f60c\",\"native\":\"\uD83D\uDE0C\"}],\"version\":1},\"pensive\":{\"id\":\"pensive\",\"name\":\"Pensive Face\",\"keywords\":[\"sad\",\"depressed\",\"upset\"],\"skins\":[{\"unified\":\"1f614\",\"native\":\"\uD83D\uDE14\"}],\"version\":1},\"sleepy\":{\"id\":\"sleepy\",\"name\":\"Sleepy Face\",\"keywords\":[\"tired\",\"rest\",\"nap\"],\"skins\":[{\"unified\":\"1f62a\",\"native\":\"\uD83D\uDE2A\"}],\"version\":1},\"drooling_face\":{\"id\":\"drooling_face\",\"name\":\"Drooling Face\",\"keywords\":[],\"skins\":[{\"unified\":\"1f924\",\"native\":\"\uD83E\uDD24\"}],\"version\":3},\"sleeping\":{\"id\":\"sleeping\",\"name\":\"Sleeping Face\",\"keywords\":[\"tired\",\"sleepy\",\"night\",\"zzz\"],\"skins\":[{\"unified\":\"1f634\",\"native\":\"\uD83D\uDE34\"}],\"version\":1},\"mask\":{\"id\":\"mask\",\"name\":\"Face with Medical Mask\",\"keywords\":[\"sick\",\"ill\",\"disease\"],\"skins\":[{\"unified\":\"1f637\",\"native\":\"\uD83D\uDE37\"}],\"version\":1},\"face_with_thermometer\":{\"id\":\"face_with_thermometer\",\"name\":\"Face with Thermometer\",\"keywords\":[\"sick\",\"temperature\",\"cold\",\"fever\"],\"skins\":[{\"unified\":\"1f912\",\"native\":\"\uD83E\uDD12\"}],\"version\":1},\"face_with_head_bandage\":{\"id\":\"face_with_head_bandage\",\"name\":\"Face with Head-Bandage\",\"keywords\":[\"head\",\"bandage\",\"injured\",\"clumsy\",\"hurt\"],\"skins\":[{\"unified\":\"1f915\",\"native\":\"\uD83E\uDD15\"}],\"version\":1},\"nauseated_face\":{\"id\":\"nauseated_face\",\"name\":\"Nauseated Face\",\"keywords\":[\"vomit\",\"gross\",\"green\",\"sick\",\"throw\",\"up\",\"ill\"],\"skins\":[{\"unified\":\"1f922\",\"native\":\"\uD83E\uDD22\"}],\"version\":3},\"face_vomiting\":{\"id\":\"face_vomiting\",\"name\":\"Face Vomiting\",\"keywords\":[\"with\",\"open\",\"mouth\",\"sick\"],\"skins\":[{\"unified\":\"1f92e\",\"native\":\"\uD83E\uDD2E\"}],\"version\":5},\"sneezing_face\":{\"id\":\"sneezing_face\",\"name\":\"Sneezing Face\",\"keywords\":[\"gesundheit\",\"sneeze\",\"sick\",\"allergy\"],\"skins\":[{\"unified\":\"1f927\",\"native\":\"\uD83E\uDD27\"}],\"version\":3},\"hot_face\":{\"id\":\"hot_face\",\"name\":\"Hot Face\",\"keywords\":[\"feverish\",\"heat\",\"red\",\"sweating\"],\"skins\":[{\"unified\":\"1f975\",\"native\":\"\uD83E\uDD75\"}],\"version\":11},\"cold_face\":{\"id\":\"cold_face\",\"name\":\"Cold Face\",\"keywords\":[\"blue\",\"freezing\",\"frozen\",\"frostbite\",\"icicles\"],\"skins\":[{\"unified\":\"1f976\",\"native\":\"\uD83E\uDD76\"}],\"version\":11},\"woozy_face\":{\"id\":\"woozy_face\",\"name\":\"Woozy Face\",\"keywords\":[\"dizzy\",\"intoxicated\",\"tipsy\",\"wavy\"],\"skins\":[{\"unified\":\"1f974\",\"native\":\"\uD83E\uDD74\"}],\"version\":11},\"dizzy_face\":{\"id\":\"dizzy_face\",\"name\":\"Dizzy Face\",\"keywords\":[\"spent\",\"unconscious\",\"xox\"],\"skins\":[{\"unified\":\"1f635\",\"native\":\"\uD83D\uDE35\"}],\"version\":1},\"face_with_spiral_eyes\":{\"id\":\"face_with_spiral_eyes\",\"name\":\"Face with Spiral Eyes\",\"keywords\":[\"sick\",\"ill\",\"confused\",\"nauseous\",\"nausea\"],\"skins\":[{\"unified\":\"1f635-200d-1f4ab\",\"native\":\"\uD83D\uDE35\u200D\uD83D\uDCAB\"}],\"version\":13.1},\"exploding_head\":{\"id\":\"exploding_head\",\"name\":\"Exploding Head\",\"keywords\":[\"shocked\",\"face\",\"with\",\"mind\",\"blown\"],\"skins\":[{\"unified\":\"1f92f\",\"native\":\"\uD83E\uDD2F\"}],\"version\":5},\"face_with_cowboy_hat\":{\"id\":\"face_with_cowboy_hat\",\"name\":\"Cowboy Hat Face\",\"keywords\":[\"with\",\"cowgirl\"],\"skins\":[{\"unified\":\"1f920\",\"native\":\"\uD83E\uDD20\"}],\"version\":3},\"partying_face\":{\"id\":\"partying_face\",\"name\":\"Partying Face\",\"keywords\":[\"celebration\",\"woohoo\"],\"skins\":[{\"unified\":\"1f973\",\"native\":\"\uD83E\uDD73\"}],\"version\":11},\"disguised_face\":{\"id\":\"disguised_face\",\"name\":\"Disguised Face\",\"keywords\":[\"pretent\",\"brows\",\"glasses\",\"moustache\"],\"skins\":[{\"unified\":\"1f978\",\"native\":\"\uD83E\uDD78\"}],\"version\":13},\"sunglasses\":{\"id\":\"sunglasses\",\"name\":\"Smiling Face with Sunglasses\",\"emoticons\":[\"8)\"],\"keywords\":[\"cool\",\"smile\",\"summer\",\"beach\",\"sunglass\"],\"skins\":[{\"unified\":\"1f60e\",\"native\":\"\uD83D\uDE0E\"}],\"version\":1},\"nerd_face\":{\"id\":\"nerd_face\",\"name\":\"Nerd Face\",\"keywords\":[\"nerdy\",\"geek\",\"dork\"],\"skins\":[{\"unified\":\"1f913\",\"native\":\"\uD83E\uDD13\"}],\"version\":1},\"face_with_monocle\":{\"id\":\"face_with_monocle\",\"name\":\"Face with Monocle\",\"keywords\":[\"stuffy\",\"wealthy\"],\"skins\":[{\"unified\":\"1f9d0\",\"native\":\"\uD83E\uDDD0\"}],\"version\":5},\"confused\":{\"id\":\"confused\",\"name\":\"Confused Face\",\"emoticons\":[\":\\\\\",\":-\\\\\",\":/\",\":-/\"],\"keywords\":[\"indifference\",\"huh\",\"weird\",\"hmmm\",\":/\"],\"skins\":[{\"unified\":\"1f615\",\"native\":\"\uD83D\uDE15\"}],\"version\":1},\"face_with_diagonal_mouth\":{\"id\":\"face_with_diagonal_mouth\",\"name\":\"Face with Diagonal Mouth\",\"keywords\":[\"skeptic\",\"confuse\",\"frustrated\",\"indifferent\"],\"skins\":[{\"unified\":\"1fae4\",\"native\":\"\uD83E\uDEE4\"}],\"version\":14},\"worried\":{\"id\":\"worried\",\"name\":\"Worried Face\",\"keywords\":[\"concern\",\"nervous\",\":(\"],\"skins\":[{\"unified\":\"1f61f\",\"native\":\"\uD83D\uDE1F\"}],\"version\":1},\"slightly_frowning_face\":{\"id\":\"slightly_frowning_face\",\"name\":\"Slightly Frowning Face\",\"keywords\":[\"disappointed\",\"sad\",\"upset\"],\"skins\":[{\"unified\":\"1f641\",\"native\":\"\uD83D\uDE41\"}],\"version\":1},\"white_frowning_face\":{\"id\":\"white_frowning_face\",\"name\":\"Frowning Face\",\"keywords\":[\"white\",\"sad\",\"upset\",\"frown\"],\"skins\":[{\"unified\":\"2639-fe0f\",\"native\":\"\u2639\uFE0F\"}],\"version\":1},\"open_mouth\":{\"id\":\"open_mouth\",\"name\":\"Face with Open Mouth\",\"emoticons\":[\":o\",\":-o\",\":O\",\":-O\"],\"keywords\":[\"surprise\",\"impressed\",\"wow\",\"whoa\",\":O\"],\"skins\":[{\"unified\":\"1f62e\",\"native\":\"\uD83D\uDE2E\"}],\"version\":1},\"hushed\":{\"id\":\"hushed\",\"name\":\"Hushed Face\",\"keywords\":[\"woo\",\"shh\"],\"skins\":[{\"unified\":\"1f62f\",\"native\":\"\uD83D\uDE2F\"}],\"version\":1},\"astonished\":{\"id\":\"astonished\",\"name\":\"Astonished Face\",\"keywords\":[\"xox\",\"surprised\",\"poisoned\"],\"skins\":[{\"unified\":\"1f632\",\"native\":\"\uD83D\uDE32\"}],\"version\":1},\"flushed\":{\"id\":\"flushed\",\"name\":\"Flushed Face\",\"keywords\":[\"blush\",\"shy\",\"flattered\"],\"skins\":[{\"unified\":\"1f633\",\"native\":\"\uD83D\uDE33\"}],\"version\":1},\"pleading_face\":{\"id\":\"pleading_face\",\"name\":\"Pleading Face\",\"keywords\":[\"begging\",\"mercy\"],\"skins\":[{\"unified\":\"1f97a\",\"native\":\"\uD83E\uDD7A\"}],\"version\":11},\"face_holding_back_tears\":{\"id\":\"face_holding_back_tears\",\"name\":\"Face Holding Back Tears\",\"keywords\":[\"touched\",\"gratitude\"],\"skins\":[{\"unified\":\"1f979\",\"native\":\"\uD83E\uDD79\"}],\"version\":14},\"frowning\":{\"id\":\"frowning\",\"name\":\"Frowning Face with Open Mouth\",\"keywords\":[\"aw\",\"what\"],\"skins\":[{\"unified\":\"1f626\",\"native\":\"\uD83D\uDE26\"}],\"version\":1},\"anguished\":{\"id\":\"anguished\",\"name\":\"Anguished Face\",\"emoticons\":[\"D:\"],\"keywords\":[\"stunned\",\"nervous\"],\"skins\":[{\"unified\":\"1f627\",\"native\":\"\uD83D\uDE27\"}],\"version\":1},\"fearful\":{\"id\":\"fearful\",\"name\":\"Fearful Face\",\"keywords\":[\"scared\",\"terrified\",\"nervous\",\"oops\",\"huh\"],\"skins\":[{\"unified\":\"1f628\",\"native\":\"\uD83D\uDE28\"}],\"version\":1},\"cold_sweat\":{\"id\":\"cold_sweat\",\"name\":\"Anxious Face with Sweat\",\"keywords\":[\"cold\",\"nervous\"],\"skins\":[{\"unified\":\"1f630\",\"native\":\"\uD83D\uDE30\"}],\"version\":1},\"disappointed_relieved\":{\"id\":\"disappointed_relieved\",\"name\":\"Sad but Relieved Face\",\"keywords\":[\"disappointed\",\"phew\",\"sweat\",\"nervous\"],\"skins\":[{\"unified\":\"1f625\",\"native\":\"\uD83D\uDE25\"}],\"version\":1},\"cry\":{\"id\":\"cry\",\"name\":\"Crying Face\",\"emoticons\":[\":'(\"],\"keywords\":[\"cry\",\"tears\",\"sad\",\"depressed\",\"upset\",\":'(\"],\"skins\":[{\"unified\":\"1f622\",\"native\":\"\uD83D\uDE22\"}],\"version\":1},\"sob\":{\"id\":\"sob\",\"name\":\"Loudly Crying Face\",\"emoticons\":[\":'(\"],\"keywords\":[\"sob\",\"cry\",\"tears\",\"sad\",\"upset\",\"depressed\"],\"skins\":[{\"unified\":\"1f62d\",\"native\":\"\uD83D\uDE2D\"}],\"version\":1},\"scream\":{\"id\":\"scream\",\"name\":\"Face Screaming in Fear\",\"keywords\":[\"scream\",\"munch\",\"scared\",\"omg\"],\"skins\":[{\"unified\":\"1f631\",\"native\":\"\uD83D\uDE31\"}],\"version\":1},\"confounded\":{\"id\":\"confounded\",\"name\":\"Confounded Face\",\"keywords\":[\"confused\",\"sick\",\"unwell\",\"oops\",\":S\"],\"skins\":[{\"unified\":\"1f616\",\"native\":\"\uD83D\uDE16\"}],\"version\":1},\"persevere\":{\"id\":\"persevere\",\"name\":\"Persevering Face\",\"keywords\":[\"persevere\",\"sick\",\"no\",\"upset\",\"oops\"],\"skins\":[{\"unified\":\"1f623\",\"native\":\"\uD83D\uDE23\"}],\"version\":1},\"disappointed\":{\"id\":\"disappointed\",\"name\":\"Disappointed Face\",\"emoticons\":[\"):\",\":(\",\":-(\"],\"keywords\":[\"sad\",\"upset\",\"depressed\",\":(\"],\"skins\":[{\"unified\":\"1f61e\",\"native\":\"\uD83D\uDE1E\"}],\"version\":1},\"sweat\":{\"id\":\"sweat\",\"name\":\"Face with Cold Sweat\",\"keywords\":[\"downcast\",\"hot\",\"sad\",\"tired\",\"exercise\"],\"skins\":[{\"unified\":\"1f613\",\"native\":\"\uD83D\uDE13\"}],\"version\":1},\"weary\":{\"id\":\"weary\",\"name\":\"Weary Face\",\"keywords\":[\"tired\",\"sleepy\",\"sad\",\"frustrated\",\"upset\"],\"skins\":[{\"unified\":\"1f629\",\"native\":\"\uD83D\uDE29\"}],\"version\":1},\"tired_face\":{\"id\":\"tired_face\",\"name\":\"Tired Face\",\"keywords\":[\"sick\",\"whine\",\"upset\",\"frustrated\"],\"skins\":[{\"unified\":\"1f62b\",\"native\":\"\uD83D\uDE2B\"}],\"version\":1},\"yawning_face\":{\"id\":\"yawning_face\",\"name\":\"Yawning Face\",\"keywords\":[\"tired\",\"sleepy\"],\"skins\":[{\"unified\":\"1f971\",\"native\":\"\uD83E\uDD71\"}],\"version\":12},\"triumph\":{\"id\":\"triumph\",\"name\":\"Face with Look of Triumph\",\"keywords\":[\"steam\",\"from\",\"nose\",\"gas\",\"phew\",\"proud\",\"pride\"],\"skins\":[{\"unified\":\"1f624\",\"native\":\"\uD83D\uDE24\"}],\"version\":1},\"rage\":{\"id\":\"rage\",\"name\":\"Pouting Face\",\"keywords\":[\"rage\",\"angry\",\"mad\",\"hate\",\"despise\"],\"skins\":[{\"unified\":\"1f621\",\"native\":\"\uD83D\uDE21\"}],\"version\":1},\"angry\":{\"id\":\"angry\",\"name\":\"Angry Face\",\"emoticons\":[\">:(\",\">:-(\"],\"keywords\":[\"mad\",\"annoyed\",\"frustrated\"],\"skins\":[{\"unified\":\"1f620\",\"native\":\"\uD83D\uDE20\"}],\"version\":1},\"face_with_symbols_on_mouth\":{\"id\":\"face_with_symbols_on_mouth\",\"name\":\"Face with Symbols on Mouth\",\"keywords\":[\"serious\",\"covering\",\"swearing\",\"cursing\",\"cussing\",\"profanity\",\"expletive\"],\"skins\":[{\"unified\":\"1f92c\",\"native\":\"\uD83E\uDD2C\"}],\"version\":5},\"smiling_imp\":{\"id\":\"smiling_imp\",\"name\":\"Smiling Face with Horns\",\"keywords\":[\"imp\",\"devil\"],\"skins\":[{\"unified\":\"1f608\",\"native\":\"\uD83D\uDE08\"}],\"version\":1},\"imp\":{\"id\":\"imp\",\"name\":\"Imp\",\"keywords\":[\"angry\",\"face\",\"with\",\"horns\",\"devil\"],\"skins\":[{\"unified\":\"1f47f\",\"native\":\"\uD83D\uDC7F\"}],\"version\":1},\"skull\":{\"id\":\"skull\",\"name\":\"Skull\",\"keywords\":[\"dead\",\"skeleton\",\"creepy\",\"death\"],\"skins\":[{\"unified\":\"1f480\",\"native\":\"\uD83D\uDC80\"}],\"version\":1},\"skull_and_crossbones\":{\"id\":\"skull_and_crossbones\",\"name\":\"Skull and Crossbones\",\"keywords\":[\"poison\",\"danger\",\"deadly\",\"scary\",\"death\",\"pirate\",\"evil\"],\"skins\":[{\"unified\":\"2620-fe0f\",\"native\":\"\u2620\uFE0F\"}],\"version\":1},\"hankey\":{\"id\":\"hankey\",\"name\":\"Pile of Poo\",\"keywords\":[\"hankey\",\"poop\",\"shit\",\"shitface\",\"fail\",\"turd\"],\"skins\":[{\"unified\":\"1f4a9\",\"native\":\"\uD83D\uDCA9\"}],\"version\":1},\"clown_face\":{\"id\":\"clown_face\",\"name\":\"Clown Face\",\"keywords\":[],\"skins\":[{\"unified\":\"1f921\",\"native\":\"\uD83E\uDD21\"}],\"version\":3},\"japanese_ogre\":{\"id\":\"japanese_ogre\",\"name\":\"Ogre\",\"keywords\":[\"japanese\",\"monster\",\"red\",\"mask\",\"halloween\",\"scary\",\"creepy\",\"devil\",\"demon\"],\"skins\":[{\"unified\":\"1f479\",\"native\":\"\uD83D\uDC79\"}],\"version\":1},\"japanese_goblin\":{\"id\":\"japanese_goblin\",\"name\":\"Goblin\",\"keywords\":[\"japanese\",\"red\",\"evil\",\"mask\",\"monster\",\"scary\",\"creepy\"],\"skins\":[{\"unified\":\"1f47a\",\"native\":\"\uD83D\uDC7A\"}],\"version\":1},\"ghost\":{\"id\":\"ghost\",\"name\":\"Ghost\",\"keywords\":[\"halloween\",\"spooky\",\"scary\"],\"skins\":[{\"unified\":\"1f47b\",\"native\":\"\uD83D\uDC7B\"}],\"version\":1},\"alien\":{\"id\":\"alien\",\"name\":\"Alien\",\"keywords\":[\"UFO\",\"paul\",\"weird\",\"outer\",\"space\"],\"skins\":[{\"unified\":\"1f47d\",\"native\":\"\uD83D\uDC7D\"}],\"version\":1},\"space_invader\":{\"id\":\"space_invader\",\"name\":\"Alien Monster\",\"keywords\":[\"space\",\"invader\",\"game\",\"arcade\",\"play\"],\"skins\":[{\"unified\":\"1f47e\",\"native\":\"\uD83D\uDC7E\"}],\"version\":1},\"robot_face\":{\"id\":\"robot_face\",\"name\":\"Robot\",\"keywords\":[\"face\",\"computer\",\"machine\",\"bot\"],\"skins\":[{\"unified\":\"1f916\",\"native\":\"\uD83E\uDD16\"}],\"version\":1},\"smiley_cat\":{\"id\":\"smiley_cat\",\"name\":\"Grinning Cat\",\"keywords\":[\"smiley\",\"animal\",\"cats\",\"happy\",\"smile\"],\"skins\":[{\"unified\":\"1f63a\",\"native\":\"\uD83D\uDE3A\"}],\"version\":1},\"smile_cat\":{\"id\":\"smile_cat\",\"name\":\"Grinning Cat with Smiling Eyes\",\"keywords\":[\"smile\",\"animal\",\"cats\"],\"skins\":[{\"unified\":\"1f638\",\"native\":\"\uD83D\uDE38\"}],\"version\":1},\"joy_cat\":{\"id\":\"joy_cat\",\"name\":\"Cat with Tears of Joy\",\"keywords\":[\"animal\",\"cats\",\"haha\",\"happy\"],\"skins\":[{\"unified\":\"1f639\",\"native\":\"\uD83D\uDE39\"}],\"version\":1},\"heart_eyes_cat\":{\"id\":\"heart_eyes_cat\",\"name\":\"Smiling Cat with Heart-Eyes\",\"keywords\":[\"heart\",\"eyes\",\"animal\",\"love\",\"like\",\"affection\",\"cats\",\"valentines\"],\"skins\":[{\"unified\":\"1f63b\",\"native\":\"\uD83D\uDE3B\"}],\"version\":1},\"smirk_cat\":{\"id\":\"smirk_cat\",\"name\":\"Cat with Wry Smile\",\"keywords\":[\"smirk\",\"animal\",\"cats\"],\"skins\":[{\"unified\":\"1f63c\",\"native\":\"\uD83D\uDE3C\"}],\"version\":1},\"kissing_cat\":{\"id\":\"kissing_cat\",\"name\":\"Kissing Cat\",\"keywords\":[\"animal\",\"cats\",\"kiss\"],\"skins\":[{\"unified\":\"1f63d\",\"native\":\"\uD83D\uDE3D\"}],\"version\":1},\"scream_cat\":{\"id\":\"scream_cat\",\"name\":\"Weary Cat\",\"keywords\":[\"scream\",\"animal\",\"cats\",\"munch\",\"scared\"],\"skins\":[{\"unified\":\"1f640\",\"native\":\"\uD83D\uDE40\"}],\"version\":1},\"crying_cat_face\":{\"id\":\"crying_cat_face\",\"name\":\"Crying Cat\",\"keywords\":[\"face\",\"animal\",\"tears\",\"weep\",\"sad\",\"cats\",\"upset\",\"cry\"],\"skins\":[{\"unified\":\"1f63f\",\"native\":\"\uD83D\uDE3F\"}],\"version\":1},\"pouting_cat\":{\"id\":\"pouting_cat\",\"name\":\"Pouting Cat\",\"keywords\":[\"animal\",\"cats\"],\"skins\":[{\"unified\":\"1f63e\",\"native\":\"\uD83D\uDE3E\"}],\"version\":1},\"see_no_evil\":{\"id\":\"see_no_evil\",\"name\":\"See-No-Evil Monkey\",\"keywords\":[\"see\",\"no\",\"evil\",\"animal\",\"nature\",\"haha\"],\"skins\":[{\"unified\":\"1f648\",\"native\":\"\uD83D\uDE48\"}],\"version\":1},\"hear_no_evil\":{\"id\":\"hear_no_evil\",\"name\":\"Hear-No-Evil Monkey\",\"keywords\":[\"hear\",\"no\",\"evil\",\"animal\",\"nature\"],\"skins\":[{\"unified\":\"1f649\",\"native\":\"\uD83D\uDE49\"}],\"version\":1},\"speak_no_evil\":{\"id\":\"speak_no_evil\",\"name\":\"Speak-No-Evil Monkey\",\"keywords\":[\"speak\",\"no\",\"evil\",\"animal\",\"nature\",\"omg\"],\"skins\":[{\"unified\":\"1f64a\",\"native\":\"\uD83D\uDE4A\"}],\"version\":1},\"kiss\":{\"id\":\"kiss\",\"name\":\"Kiss Mark\",\"keywords\":[\"face\",\"lips\",\"love\",\"like\",\"affection\",\"valentines\"],\"skins\":[{\"unified\":\"1f48b\",\"native\":\"\uD83D\uDC8B\"}],\"version\":1},\"love_letter\":{\"id\":\"love_letter\",\"name\":\"Love Letter\",\"keywords\":[\"email\",\"like\",\"affection\",\"envelope\",\"valentines\"],\"skins\":[{\"unified\":\"1f48c\",\"native\":\"\uD83D\uDC8C\"}],\"version\":1},\"cupid\":{\"id\":\"cupid\",\"name\":\"Heart with Arrow\",\"keywords\":[\"cupid\",\"love\",\"like\",\"affection\",\"valentines\"],\"skins\":[{\"unified\":\"1f498\",\"native\":\"\uD83D\uDC98\"}],\"version\":1},\"gift_heart\":{\"id\":\"gift_heart\",\"name\":\"Heart with Ribbon\",\"keywords\":[\"gift\",\"love\",\"valentines\"],\"skins\":[{\"unified\":\"1f49d\",\"native\":\"\uD83D\uDC9D\"}],\"version\":1},\"sparkling_heart\":{\"id\":\"sparkling_heart\",\"name\":\"Sparkling Heart\",\"keywords\":[\"love\",\"like\",\"affection\",\"valentines\"],\"skins\":[{\"unified\":\"1f496\",\"native\":\"\uD83D\uDC96\"}],\"version\":1},\"heartpulse\":{\"id\":\"heartpulse\",\"name\":\"Growing Heart\",\"keywords\":[\"heartpulse\",\"like\",\"love\",\"affection\",\"valentines\",\"pink\"],\"skins\":[{\"unified\":\"1f497\",\"native\":\"\uD83D\uDC97\"}],\"version\":1},\"heartbeat\":{\"id\":\"heartbeat\",\"name\":\"Beating Heart\",\"keywords\":[\"heartbeat\",\"love\",\"like\",\"affection\",\"valentines\",\"pink\"],\"skins\":[{\"unified\":\"1f493\",\"native\":\"\uD83D\uDC93\"}],\"version\":1},\"revolving_hearts\":{\"id\":\"revolving_hearts\",\"name\":\"Revolving Hearts\",\"keywords\":[\"love\",\"like\",\"affection\",\"valentines\"],\"skins\":[{\"unified\":\"1f49e\",\"native\":\"\uD83D\uDC9E\"}],\"version\":1},\"two_hearts\":{\"id\":\"two_hearts\",\"name\":\"Two Hearts\",\"keywords\":[\"love\",\"like\",\"affection\",\"valentines\",\"heart\"],\"skins\":[{\"unified\":\"1f495\",\"native\":\"\uD83D\uDC95\"}],\"version\":1},\"heart_decoration\":{\"id\":\"heart_decoration\",\"name\":\"Heart Decoration\",\"keywords\":[\"purple\",\"square\",\"love\",\"like\"],\"skins\":[{\"unified\":\"1f49f\",\"native\":\"\uD83D\uDC9F\"}],\"version\":1},\"heavy_heart_exclamation_mark_ornament\":{\"id\":\"heavy_heart_exclamation_mark_ornament\",\"name\":\"Heart Exclamation\",\"keywords\":[\"heavy\",\"mark\",\"ornament\",\"decoration\",\"love\"],\"skins\":[{\"unified\":\"2763-fe0f\",\"native\":\"\u2763\uFE0F\"}],\"version\":1},\"broken_heart\":{\"id\":\"broken_heart\",\"name\":\"Broken Heart\",\"emoticons\":[\"</3\"],\"keywords\":[\"sad\",\"sorry\",\"break\",\"heartbreak\"],\"skins\":[{\"unified\":\"1f494\",\"native\":\"\uD83D\uDC94\"}],\"version\":1},\"heart_on_fire\":{\"id\":\"heart_on_fire\",\"name\":\"Heart on Fire\",\"keywords\":[\"passionate\",\"enthusiastic\"],\"skins\":[{\"unified\":\"2764-fe0f-200d-1f525\",\"native\":\"\u2764\uFE0F\u200D\uD83D\uDD25\"}],\"version\":13.1},\"mending_heart\":{\"id\":\"mending_heart\",\"name\":\"Mending Heart\",\"keywords\":[\"broken\",\"bandage\",\"wounded\"],\"skins\":[{\"unified\":\"2764-fe0f-200d-1fa79\",\"native\":\"\u2764\uFE0F\u200D\uD83E\uDE79\"}],\"version\":13.1},\"heart\":{\"id\":\"heart\",\"name\":\"Red Heart\",\"emoticons\":[\"<3\"],\"keywords\":[\"love\",\"like\",\"valentines\"],\"skins\":[{\"unified\":\"2764-fe0f\",\"native\":\"\u2764\uFE0F\"}],\"version\":1},\"orange_heart\":{\"id\":\"orange_heart\",\"name\":\"Orange Heart\",\"keywords\":[\"love\",\"like\",\"affection\",\"valentines\"],\"skins\":[{\"unified\":\"1f9e1\",\"native\":\"\uD83E\uDDE1\"}],\"version\":5},\"yellow_heart\":{\"id\":\"yellow_heart\",\"name\":\"Yellow Heart\",\"emoticons\":[\"<3\"],\"keywords\":[\"love\",\"like\",\"affection\",\"valentines\"],\"skins\":[{\"unified\":\"1f49b\",\"native\":\"\uD83D\uDC9B\"}],\"version\":1},\"green_heart\":{\"id\":\"green_heart\",\"name\":\"Green Heart\",\"emoticons\":[\"<3\"],\"keywords\":[\"love\",\"like\",\"affection\",\"valentines\"],\"skins\":[{\"unified\":\"1f49a\",\"native\":\"\uD83D\uDC9A\"}],\"version\":1},\"blue_heart\":{\"id\":\"blue_heart\",\"name\":\"Blue Heart\",\"emoticons\":[\"<3\"],\"keywords\":[\"love\",\"like\",\"affection\",\"valentines\"],\"skins\":[{\"unified\":\"1f499\",\"native\":\"\uD83D\uDC99\"}],\"version\":1},\"purple_heart\":{\"id\":\"purple_heart\",\"name\":\"Purple Heart\",\"emoticons\":[\"<3\"],\"keywords\":[\"love\",\"like\",\"affection\",\"valentines\"],\"skins\":[{\"unified\":\"1f49c\",\"native\":\"\uD83D\uDC9C\"}],\"version\":1},\"brown_heart\":{\"id\":\"brown_heart\",\"name\":\"Brown Heart\",\"keywords\":[\"coffee\"],\"skins\":[{\"unified\":\"1f90e\",\"native\":\"\uD83E\uDD0E\"}],\"version\":12},\"black_heart\":{\"id\":\"black_heart\",\"name\":\"Black Heart\",\"keywords\":[\"evil\"],\"skins\":[{\"unified\":\"1f5a4\",\"native\":\"\uD83D\uDDA4\"}],\"version\":3},\"white_heart\":{\"id\":\"white_heart\",\"name\":\"White Heart\",\"keywords\":[\"pure\"],\"skins\":[{\"unified\":\"1f90d\",\"native\":\"\uD83E\uDD0D\"}],\"version\":12},\"anger\":{\"id\":\"anger\",\"name\":\"Anger Symbol\",\"keywords\":[\"angry\",\"mad\"],\"skins\":[{\"unified\":\"1f4a2\",\"native\":\"\uD83D\uDCA2\"}],\"version\":1},\"boom\":{\"id\":\"boom\",\"name\":\"Collision\",\"keywords\":[\"boom\",\"bomb\",\"explode\",\"explosion\",\"blown\"],\"skins\":[{\"unified\":\"1f4a5\",\"native\":\"\uD83D\uDCA5\"}],\"version\":1},\"dizzy\":{\"id\":\"dizzy\",\"name\":\"Dizzy\",\"keywords\":[\"star\",\"sparkle\",\"shoot\",\"magic\"],\"skins\":[{\"unified\":\"1f4ab\",\"native\":\"\uD83D\uDCAB\"}],\"version\":1},\"sweat_drops\":{\"id\":\"sweat_drops\",\"name\":\"Sweat Droplets\",\"keywords\":[\"drops\",\"water\",\"drip\",\"oops\"],\"skins\":[{\"unified\":\"1f4a6\",\"native\":\"\uD83D\uDCA6\"}],\"version\":1},\"dash\":{\"id\":\"dash\",\"name\":\"Dash Symbol\",\"keywords\":[\"dashing\",\"away\",\"wind\",\"air\",\"fast\",\"shoo\",\"fart\",\"smoke\",\"puff\"],\"skins\":[{\"unified\":\"1f4a8\",\"native\":\"\uD83D\uDCA8\"}],\"version\":1},\"hole\":{\"id\":\"hole\",\"name\":\"Hole\",\"keywords\":[\"embarrassing\"],\"skins\":[{\"unified\":\"1f573-fe0f\",\"native\":\"\uD83D\uDD73\uFE0F\"}],\"version\":1},\"bomb\":{\"id\":\"bomb\",\"name\":\"Bomb\",\"keywords\":[\"boom\",\"explode\",\"explosion\",\"terrorism\"],\"skins\":[{\"unified\":\"1f4a3\",\"native\":\"\uD83D\uDCA3\"}],\"version\":1},\"speech_balloon\":{\"id\":\"speech_balloon\",\"name\":\"Speech Balloon\",\"keywords\":[\"bubble\",\"words\",\"message\",\"talk\",\"chatting\"],\"skins\":[{\"unified\":\"1f4ac\",\"native\":\"\uD83D\uDCAC\"}],\"version\":1},\"eye-in-speech-bubble\":{\"id\":\"eye-in-speech-bubble\",\"name\":\"Eye in Speech Bubble\",\"keywords\":[\"in-speech-bubble\",\"info\"],\"skins\":[{\"unified\":\"1f441-fe0f-200d-1f5e8-fe0f\",\"native\":\"\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8\uFE0F\"}],\"version\":2},\"left_speech_bubble\":{\"id\":\"left_speech_bubble\",\"name\":\"Left Speech Bubble\",\"keywords\":[\"words\",\"message\",\"talk\",\"chatting\"],\"skins\":[{\"unified\":\"1f5e8-fe0f\",\"native\":\"\uD83D\uDDE8\uFE0F\"}],\"version\":2},\"right_anger_bubble\":{\"id\":\"right_anger_bubble\",\"name\":\"Right Anger Bubble\",\"keywords\":[\"caption\",\"speech\",\"thinking\",\"mad\"],\"skins\":[{\"unified\":\"1f5ef-fe0f\",\"native\":\"\uD83D\uDDEF\uFE0F\"}],\"version\":1},\"thought_balloon\":{\"id\":\"thought_balloon\",\"name\":\"Thought Balloon\",\"keywords\":[\"bubble\",\"cloud\",\"speech\",\"thinking\",\"dream\"],\"skins\":[{\"unified\":\"1f4ad\",\"native\":\"\uD83D\uDCAD\"}],\"version\":1},\"zzz\":{\"id\":\"zzz\",\"name\":\"Zzz\",\"keywords\":[\"sleepy\",\"tired\",\"dream\"],\"skins\":[{\"unified\":\"1f4a4\",\"native\":\"\uD83D\uDCA4\"}],\"version\":1},\"wave\":{\"id\":\"wave\",\"name\":\"Waving Hand\",\"keywords\":[\"wave\",\"hands\",\"gesture\",\"goodbye\",\"solong\",\"farewell\",\"hello\",\"hi\",\"palm\"],\"skins\":[{\"unified\":\"1f44b\",\"native\":\"\uD83D\uDC4B\"},{\"unified\":\"1f44b-1f3fb\",\"native\":\"\uD83D\uDC4B\uD83C\uDFFB\"},{\"unified\":\"1f44b-1f3fc\",\"native\":\"\uD83D\uDC4B\uD83C\uDFFC\"},{\"unified\":\"1f44b-1f3fd\",\"native\":\"\uD83D\uDC4B\uD83C\uDFFD\"},{\"unified\":\"1f44b-1f3fe\",\"native\":\"\uD83D\uDC4B\uD83C\uDFFE\"},{\"unified\":\"1f44b-1f3ff\",\"native\":\"\uD83D\uDC4B\uD83C\uDFFF\"}],\"version\":1},\"raised_back_of_hand\":{\"id\":\"raised_back_of_hand\",\"name\":\"Raised Back of Hand\",\"keywords\":[\"fingers\",\"backhand\"],\"skins\":[{\"unified\":\"1f91a\",\"native\":\"\uD83E\uDD1A\"},{\"unified\":\"1f91a-1f3fb\",\"native\":\"\uD83E\uDD1A\uD83C\uDFFB\"},{\"unified\":\"1f91a-1f3fc\",\"native\":\"\uD83E\uDD1A\uD83C\uDFFC\"},{\"unified\":\"1f91a-1f3fd\",\"native\":\"\uD83E\uDD1A\uD83C\uDFFD\"},{\"unified\":\"1f91a-1f3fe\",\"native\":\"\uD83E\uDD1A\uD83C\uDFFE\"},{\"unified\":\"1f91a-1f3ff\",\"native\":\"\uD83E\uDD1A\uD83C\uDFFF\"}],\"version\":3},\"raised_hand_with_fingers_splayed\":{\"id\":\"raised_hand_with_fingers_splayed\",\"name\":\"Hand with Fingers Splayed\",\"keywords\":[\"raised\",\"palm\"],\"skins\":[{\"unified\":\"1f590-fe0f\",\"native\":\"\uD83D\uDD90\uFE0F\"},{\"unified\":\"1f590-1f3fb\",\"native\":\"\uD83D\uDD90\uD83C\uDFFB\"},{\"unified\":\"1f590-1f3fc\",\"native\":\"\uD83D\uDD90\uD83C\uDFFC\"},{\"unified\":\"1f590-1f3fd\",\"native\":\"\uD83D\uDD90\uD83C\uDFFD\"},{\"unified\":\"1f590-1f3fe\",\"native\":\"\uD83D\uDD90\uD83C\uDFFE\"},{\"unified\":\"1f590-1f3ff\",\"native\":\"\uD83D\uDD90\uD83C\uDFFF\"}],\"version\":1},\"hand\":{\"id\":\"hand\",\"name\":\"Raised Hand\",\"keywords\":[\"fingers\",\"stop\",\"highfive\",\"high\",\"five\",\"palm\",\"ban\"],\"skins\":[{\"unified\":\"270b\",\"native\":\"\u270B\"},{\"unified\":\"270b-1f3fb\",\"native\":\"\u270B\uD83C\uDFFB\"},{\"unified\":\"270b-1f3fc\",\"native\":\"\u270B\uD83C\uDFFC\"},{\"unified\":\"270b-1f3fd\",\"native\":\"\u270B\uD83C\uDFFD\"},{\"unified\":\"270b-1f3fe\",\"native\":\"\u270B\uD83C\uDFFE\"},{\"unified\":\"270b-1f3ff\",\"native\":\"\u270B\uD83C\uDFFF\"}],\"version\":1},\"spock-hand\":{\"id\":\"spock-hand\",\"name\":\"Vulcan Salute\",\"keywords\":[\"spock\",\"hand\",\"fingers\",\"star\",\"trek\"],\"skins\":[{\"unified\":\"1f596\",\"native\":\"\uD83D\uDD96\"},{\"unified\":\"1f596-1f3fb\",\"native\":\"\uD83D\uDD96\uD83C\uDFFB\"},{\"unified\":\"1f596-1f3fc\",\"native\":\"\uD83D\uDD96\uD83C\uDFFC\"},{\"unified\":\"1f596-1f3fd\",\"native\":\"\uD83D\uDD96\uD83C\uDFFD\"},{\"unified\":\"1f596-1f3fe\",\"native\":\"\uD83D\uDD96\uD83C\uDFFE\"},{\"unified\":\"1f596-1f3ff\",\"native\":\"\uD83D\uDD96\uD83C\uDFFF\"}],\"version\":1},\"rightwards_hand\":{\"id\":\"rightwards_hand\",\"name\":\"Rightwards Hand\",\"keywords\":[\"palm\",\"offer\"],\"skins\":[{\"unified\":\"1faf1\",\"native\":\"\uD83E\uDEF1\"},{\"unified\":\"1faf1-1f3fb\",\"native\":\"\uD83E\uDEF1\uD83C\uDFFB\"},{\"unified\":\"1faf1-1f3fc\",\"native\":\"\uD83E\uDEF1\uD83C\uDFFC\"},{\"unified\":\"1faf1-1f3fd\",\"native\":\"\uD83E\uDEF1\uD83C\uDFFD\"},{\"unified\":\"1faf1-1f3fe\",\"native\":\"\uD83E\uDEF1\uD83C\uDFFE\"},{\"unified\":\"1faf1-1f3ff\",\"native\":\"\uD83E\uDEF1\uD83C\uDFFF\"}],\"version\":14},\"leftwards_hand\":{\"id\":\"leftwards_hand\",\"name\":\"Leftwards Hand\",\"keywords\":[\"palm\",\"offer\"],\"skins\":[{\"unified\":\"1faf2\",\"native\":\"\uD83E\uDEF2\"},{\"unified\":\"1faf2-1f3fb\",\"native\":\"\uD83E\uDEF2\uD83C\uDFFB\"},{\"unified\":\"1faf2-1f3fc\",\"native\":\"\uD83E\uDEF2\uD83C\uDFFC\"},{\"unified\":\"1faf2-1f3fd\",\"native\":\"\uD83E\uDEF2\uD83C\uDFFD\"},{\"unified\":\"1faf2-1f3fe\",\"native\":\"\uD83E\uDEF2\uD83C\uDFFE\"},{\"unified\":\"1faf2-1f3ff\",\"native\":\"\uD83E\uDEF2\uD83C\uDFFF\"}],\"version\":14},\"palm_down_hand\":{\"id\":\"palm_down_hand\",\"name\":\"Palm Down Hand\",\"keywords\":[\"drop\"],\"skins\":[{\"unified\":\"1faf3\",\"native\":\"\uD83E\uDEF3\"},{\"unified\":\"1faf3-1f3fb\",\"native\":\"\uD83E\uDEF3\uD83C\uDFFB\"},{\"unified\":\"1faf3-1f3fc\",\"native\":\"\uD83E\uDEF3\uD83C\uDFFC\"},{\"unified\":\"1faf3-1f3fd\",\"native\":\"\uD83E\uDEF3\uD83C\uDFFD\"},{\"unified\":\"1faf3-1f3fe\",\"native\":\"\uD83E\uDEF3\uD83C\uDFFE\"},{\"unified\":\"1faf3-1f3ff\",\"native\":\"\uD83E\uDEF3\uD83C\uDFFF\"}],\"version\":14},\"palm_up_hand\":{\"id\":\"palm_up_hand\",\"name\":\"Palm Up Hand\",\"keywords\":[\"lift\",\"offer\",\"demand\"],\"skins\":[{\"unified\":\"1faf4\",\"native\":\"\uD83E\uDEF4\"},{\"unified\":\"1faf4-1f3fb\",\"native\":\"\uD83E\uDEF4\uD83C\uDFFB\"},{\"unified\":\"1faf4-1f3fc\",\"native\":\"\uD83E\uDEF4\uD83C\uDFFC\"},{\"unified\":\"1faf4-1f3fd\",\"native\":\"\uD83E\uDEF4\uD83C\uDFFD\"},{\"unified\":\"1faf4-1f3fe\",\"native\":\"\uD83E\uDEF4\uD83C\uDFFE\"},{\"unified\":\"1faf4-1f3ff\",\"native\":\"\uD83E\uDEF4\uD83C\uDFFF\"}],\"version\":14},\"ok_hand\":{\"id\":\"ok_hand\",\"name\":\"Ok Hand\",\"keywords\":[\"fingers\",\"limbs\",\"perfect\",\"okay\"],\"skins\":[{\"unified\":\"1f44c\",\"native\":\"\uD83D\uDC4C\"},{\"unified\":\"1f44c-1f3fb\",\"native\":\"\uD83D\uDC4C\uD83C\uDFFB\"},{\"unified\":\"1f44c-1f3fc\",\"native\":\"\uD83D\uDC4C\uD83C\uDFFC\"},{\"unified\":\"1f44c-1f3fd\",\"native\":\"\uD83D\uDC4C\uD83C\uDFFD\"},{\"unified\":\"1f44c-1f3fe\",\"native\":\"\uD83D\uDC4C\uD83C\uDFFE\"},{\"unified\":\"1f44c-1f3ff\",\"native\":\"\uD83D\uDC4C\uD83C\uDFFF\"}],\"version\":1},\"pinched_fingers\":{\"id\":\"pinched_fingers\",\"name\":\"Pinched Fingers\",\"keywords\":[\"size\",\"tiny\",\"small\"],\"skins\":[{\"unified\":\"1f90c\",\"native\":\"\uD83E\uDD0C\"},{\"unified\":\"1f90c-1f3fb\",\"native\":\"\uD83E\uDD0C\uD83C\uDFFB\"},{\"unified\":\"1f90c-1f3fc\",\"native\":\"\uD83E\uDD0C\uD83C\uDFFC\"},{\"unified\":\"1f90c-1f3fd\",\"native\":\"\uD83E\uDD0C\uD83C\uDFFD\"},{\"unified\":\"1f90c-1f3fe\",\"native\":\"\uD83E\uDD0C\uD83C\uDFFE\"},{\"unified\":\"1f90c-1f3ff\",\"native\":\"\uD83E\uDD0C\uD83C\uDFFF\"}],\"version\":13},\"pinching_hand\":{\"id\":\"pinching_hand\",\"name\":\"Pinching Hand\",\"keywords\":[\"tiny\",\"small\",\"size\"],\"skins\":[{\"unified\":\"1f90f\",\"native\":\"\uD83E\uDD0F\"},{\"unified\":\"1f90f-1f3fb\",\"native\":\"\uD83E\uDD0F\uD83C\uDFFB\"},{\"unified\":\"1f90f-1f3fc\",\"native\":\"\uD83E\uDD0F\uD83C\uDFFC\"},{\"unified\":\"1f90f-1f3fd\",\"native\":\"\uD83E\uDD0F\uD83C\uDFFD\"},{\"unified\":\"1f90f-1f3fe\",\"native\":\"\uD83E\uDD0F\uD83C\uDFFE\"},{\"unified\":\"1f90f-1f3ff\",\"native\":\"\uD83E\uDD0F\uD83C\uDFFF\"}],\"version\":12},\"v\":{\"id\":\"v\",\"name\":\"Victory Hand\",\"keywords\":[\"v\",\"fingers\",\"ohyeah\",\"peace\",\"two\"],\"skins\":[{\"unified\":\"270c-fe0f\",\"native\":\"\u270C\uFE0F\"},{\"unified\":\"270c-1f3fb\",\"native\":\"\u270C\uD83C\uDFFB\"},{\"unified\":\"270c-1f3fc\",\"native\":\"\u270C\uD83C\uDFFC\"},{\"unified\":\"270c-1f3fd\",\"native\":\"\u270C\uD83C\uDFFD\"},{\"unified\":\"270c-1f3fe\",\"native\":\"\u270C\uD83C\uDFFE\"},{\"unified\":\"270c-1f3ff\",\"native\":\"\u270C\uD83C\uDFFF\"}],\"version\":1},\"crossed_fingers\":{\"id\":\"crossed_fingers\",\"name\":\"Crossed Fingers\",\"keywords\":[\"hand\",\"with\",\"index\",\"and\",\"middle\",\"good\",\"lucky\"],\"skins\":[{\"unified\":\"1f91e\",\"native\":\"\uD83E\uDD1E\"},{\"unified\":\"1f91e-1f3fb\",\"native\":\"\uD83E\uDD1E\uD83C\uDFFB\"},{\"unified\":\"1f91e-1f3fc\",\"native\":\"\uD83E\uDD1E\uD83C\uDFFC\"},{\"unified\":\"1f91e-1f3fd\",\"native\":\"\uD83E\uDD1E\uD83C\uDFFD\"},{\"unified\":\"1f91e-1f3fe\",\"native\":\"\uD83E\uDD1E\uD83C\uDFFE\"},{\"unified\":\"1f91e-1f3ff\",\"native\":\"\uD83E\uDD1E\uD83C\uDFFF\"}],\"version\":3},\"hand_with_index_finger_and_thumb_crossed\":{\"id\":\"hand_with_index_finger_and_thumb_crossed\",\"name\":\"Hand with Index Finger and Thumb Crossed\",\"keywords\":[\"heart\",\"love\",\"money\",\"expensive\"],\"skins\":[{\"unified\":\"1faf0\",\"native\":\"\uD83E\uDEF0\"},{\"unified\":\"1faf0-1f3fb\",\"native\":\"\uD83E\uDEF0\uD83C\uDFFB\"},{\"unified\":\"1faf0-1f3fc\",\"native\":\"\uD83E\uDEF0\uD83C\uDFFC\"},{\"unified\":\"1faf0-1f3fd\",\"native\":\"\uD83E\uDEF0\uD83C\uDFFD\"},{\"unified\":\"1faf0-1f3fe\",\"native\":\"\uD83E\uDEF0\uD83C\uDFFE\"},{\"unified\":\"1faf0-1f3ff\",\"native\":\"\uD83E\uDEF0\uD83C\uDFFF\"}],\"version\":14},\"i_love_you_hand_sign\":{\"id\":\"i_love_you_hand_sign\",\"name\":\"Love-You Gesture\",\"keywords\":[\"i\",\"love\",\"you\",\"hand\",\"sign\",\"fingers\"],\"skins\":[{\"unified\":\"1f91f\",\"native\":\"\uD83E\uDD1F\"},{\"unified\":\"1f91f-1f3fb\",\"native\":\"\uD83E\uDD1F\uD83C\uDFFB\"},{\"unified\":\"1f91f-1f3fc\",\"native\":\"\uD83E\uDD1F\uD83C\uDFFC\"},{\"unified\":\"1f91f-1f3fd\",\"native\":\"\uD83E\uDD1F\uD83C\uDFFD\"},{\"unified\":\"1f91f-1f3fe\",\"native\":\"\uD83E\uDD1F\uD83C\uDFFE\"},{\"unified\":\"1f91f-1f3ff\",\"native\":\"\uD83E\uDD1F\uD83C\uDFFF\"}],\"version\":5},\"the_horns\":{\"id\":\"the_horns\",\"name\":\"Sign of the Horns\",\"keywords\":[\"hand\",\"fingers\",\"evil\",\"eye\",\"rock\",\"on\"],\"skins\":[{\"unified\":\"1f918\",\"native\":\"\uD83E\uDD18\"},{\"unified\":\"1f918-1f3fb\",\"native\":\"\uD83E\uDD18\uD83C\uDFFB\"},{\"unified\":\"1f918-1f3fc\",\"native\":\"\uD83E\uDD18\uD83C\uDFFC\"},{\"unified\":\"1f918-1f3fd\",\"native\":\"\uD83E\uDD18\uD83C\uDFFD\"},{\"unified\":\"1f918-1f3fe\",\"native\":\"\uD83E\uDD18\uD83C\uDFFE\"},{\"unified\":\"1f918-1f3ff\",\"native\":\"\uD83E\uDD18\uD83C\uDFFF\"}],\"version\":1},\"call_me_hand\":{\"id\":\"call_me_hand\",\"name\":\"Call Me Hand\",\"keywords\":[\"hands\",\"gesture\",\"shaka\"],\"skins\":[{\"unified\":\"1f919\",\"native\":\"\uD83E\uDD19\"},{\"unified\":\"1f919-1f3fb\",\"native\":\"\uD83E\uDD19\uD83C\uDFFB\"},{\"unified\":\"1f919-1f3fc\",\"native\":\"\uD83E\uDD19\uD83C\uDFFC\"},{\"unified\":\"1f919-1f3fd\",\"native\":\"\uD83E\uDD19\uD83C\uDFFD\"},{\"unified\":\"1f919-1f3fe\",\"native\":\"\uD83E\uDD19\uD83C\uDFFE\"},{\"unified\":\"1f919-1f3ff\",\"native\":\"\uD83E\uDD19\uD83C\uDFFF\"}],\"version\":3},\"point_left\":{\"id\":\"point_left\",\"name\":\"Backhand Index Pointing Left\",\"keywords\":[\"point\",\"direction\",\"fingers\",\"hand\"],\"skins\":[{\"unified\":\"1f448\",\"native\":\"\uD83D\uDC48\"},{\"unified\":\"1f448-1f3fb\",\"native\":\"\uD83D\uDC48\uD83C\uDFFB\"},{\"unified\":\"1f448-1f3fc\",\"native\":\"\uD83D\uDC48\uD83C\uDFFC\"},{\"unified\":\"1f448-1f3fd\",\"native\":\"\uD83D\uDC48\uD83C\uDFFD\"},{\"unified\":\"1f448-1f3fe\",\"native\":\"\uD83D\uDC48\uD83C\uDFFE\"},{\"unified\":\"1f448-1f3ff\",\"native\":\"\uD83D\uDC48\uD83C\uDFFF\"}],\"version\":1},\"point_right\":{\"id\":\"point_right\",\"name\":\"Backhand Index Pointing Right\",\"keywords\":[\"point\",\"fingers\",\"hand\",\"direction\"],\"skins\":[{\"unified\":\"1f449\",\"native\":\"\uD83D\uDC49\"},{\"unified\":\"1f449-1f3fb\",\"native\":\"\uD83D\uDC49\uD83C\uDFFB\"},{\"unified\":\"1f449-1f3fc\",\"native\":\"\uD83D\uDC49\uD83C\uDFFC\"},{\"unified\":\"1f449-1f3fd\",\"native\":\"\uD83D\uDC49\uD83C\uDFFD\"},{\"unified\":\"1f449-1f3fe\",\"native\":\"\uD83D\uDC49\uD83C\uDFFE\"},{\"unified\":\"1f449-1f3ff\",\"native\":\"\uD83D\uDC49\uD83C\uDFFF\"}],\"version\":1},\"point_up_2\":{\"id\":\"point_up_2\",\"name\":\"Backhand Index Pointing Up\",\"keywords\":[\"point\",\"2\",\"fingers\",\"hand\",\"direction\"],\"skins\":[{\"unified\":\"1f446\",\"native\":\"\uD83D\uDC46\"},{\"unified\":\"1f446-1f3fb\",\"native\":\"\uD83D\uDC46\uD83C\uDFFB\"},{\"unified\":\"1f446-1f3fc\",\"native\":\"\uD83D\uDC46\uD83C\uDFFC\"},{\"unified\":\"1f446-1f3fd\",\"native\":\"\uD83D\uDC46\uD83C\uDFFD\"},{\"unified\":\"1f446-1f3fe\",\"native\":\"\uD83D\uDC46\uD83C\uDFFE\"},{\"unified\":\"1f446-1f3ff\",\"native\":\"\uD83D\uDC46\uD83C\uDFFF\"}],\"version\":1},\"middle_finger\":{\"id\":\"middle_finger\",\"name\":\"Middle Finger\",\"keywords\":[\"reversed\",\"hand\",\"with\",\"extended\",\"fingers\",\"rude\",\"flipping\"],\"skins\":[{\"unified\":\"1f595\",\"native\":\"\uD83D\uDD95\"},{\"unified\":\"1f595-1f3fb\",\"native\":\"\uD83D\uDD95\uD83C\uDFFB\"},{\"unified\":\"1f595-1f3fc\",\"native\":\"\uD83D\uDD95\uD83C\uDFFC\"},{\"unified\":\"1f595-1f3fd\",\"native\":\"\uD83D\uDD95\uD83C\uDFFD\"},{\"unified\":\"1f595-1f3fe\",\"native\":\"\uD83D\uDD95\uD83C\uDFFE\"},{\"unified\":\"1f595-1f3ff\",\"native\":\"\uD83D\uDD95\uD83C\uDFFF\"}],\"version\":1},\"point_down\":{\"id\":\"point_down\",\"name\":\"Backhand Index Pointing Down\",\"keywords\":[\"point\",\"fingers\",\"hand\",\"direction\"],\"skins\":[{\"unified\":\"1f447\",\"native\":\"\uD83D\uDC47\"},{\"unified\":\"1f447-1f3fb\",\"native\":\"\uD83D\uDC47\uD83C\uDFFB\"},{\"unified\":\"1f447-1f3fc\",\"native\":\"\uD83D\uDC47\uD83C\uDFFC\"},{\"unified\":\"1f447-1f3fd\",\"native\":\"\uD83D\uDC47\uD83C\uDFFD\"},{\"unified\":\"1f447-1f3fe\",\"native\":\"\uD83D\uDC47\uD83C\uDFFE\"},{\"unified\":\"1f447-1f3ff\",\"native\":\"\uD83D\uDC47\uD83C\uDFFF\"}],\"version\":1},\"point_up\":{\"id\":\"point_up\",\"name\":\"Index Pointing Up\",\"keywords\":[\"point\",\"hand\",\"fingers\",\"direction\"],\"skins\":[{\"unified\":\"261d-fe0f\",\"native\":\"\u261D\uFE0F\"},{\"unified\":\"261d-1f3fb\",\"native\":\"\u261D\uD83C\uDFFB\"},{\"unified\":\"261d-1f3fc\",\"native\":\"\u261D\uD83C\uDFFC\"},{\"unified\":\"261d-1f3fd\",\"native\":\"\u261D\uD83C\uDFFD\"},{\"unified\":\"261d-1f3fe\",\"native\":\"\u261D\uD83C\uDFFE\"},{\"unified\":\"261d-1f3ff\",\"native\":\"\u261D\uD83C\uDFFF\"}],\"version\":1},\"index_pointing_at_the_viewer\":{\"id\":\"index_pointing_at_the_viewer\",\"name\":\"Index Pointing at the Viewer\",\"keywords\":[\"you\",\"recruit\"],\"skins\":[{\"unified\":\"1faf5\",\"native\":\"\uD83E\uDEF5\"},{\"unified\":\"1faf5-1f3fb\",\"native\":\"\uD83E\uDEF5\uD83C\uDFFB\"},{\"unified\":\"1faf5-1f3fc\",\"native\":\"\uD83E\uDEF5\uD83C\uDFFC\"},{\"unified\":\"1faf5-1f3fd\",\"native\":\"\uD83E\uDEF5\uD83C\uDFFD\"},{\"unified\":\"1faf5-1f3fe\",\"native\":\"\uD83E\uDEF5\uD83C\uDFFE\"},{\"unified\":\"1faf5-1f3ff\",\"native\":\"\uD83E\uDEF5\uD83C\uDFFF\"}],\"version\":14},\"+1\":{\"id\":\"+1\",\"name\":\"Thumbs Up\",\"keywords\":[\"+1\",\"thumbsup\",\"yes\",\"awesome\",\"good\",\"agree\",\"accept\",\"cool\",\"hand\",\"like\"],\"skins\":[{\"unified\":\"1f44d\",\"native\":\"\uD83D\uDC4D\"},{\"unified\":\"1f44d-1f3fb\",\"native\":\"\uD83D\uDC4D\uD83C\uDFFB\"},{\"unified\":\"1f44d-1f3fc\",\"native\":\"\uD83D\uDC4D\uD83C\uDFFC\"},{\"unified\":\"1f44d-1f3fd\",\"native\":\"\uD83D\uDC4D\uD83C\uDFFD\"},{\"unified\":\"1f44d-1f3fe\",\"native\":\"\uD83D\uDC4D\uD83C\uDFFE\"},{\"unified\":\"1f44d-1f3ff\",\"native\":\"\uD83D\uDC4D\uD83C\uDFFF\"}],\"version\":1},\"-1\":{\"id\":\"-1\",\"name\":\"Thumbs Down\",\"keywords\":[\"-1\",\"thumbsdown\",\"no\",\"dislike\",\"hand\"],\"skins\":[{\"unified\":\"1f44e\",\"native\":\"\uD83D\uDC4E\"},{\"unified\":\"1f44e-1f3fb\",\"native\":\"\uD83D\uDC4E\uD83C\uDFFB\"},{\"unified\":\"1f44e-1f3fc\",\"native\":\"\uD83D\uDC4E\uD83C\uDFFC\"},{\"unified\":\"1f44e-1f3fd\",\"native\":\"\uD83D\uDC4E\uD83C\uDFFD\"},{\"unified\":\"1f44e-1f3fe\",\"native\":\"\uD83D\uDC4E\uD83C\uDFFE\"},{\"unified\":\"1f44e-1f3ff\",\"native\":\"\uD83D\uDC4E\uD83C\uDFFF\"}],\"version\":1},\"fist\":{\"id\":\"fist\",\"name\":\"Raised Fist\",\"keywords\":[\"fingers\",\"hand\",\"grasp\"],\"skins\":[{\"unified\":\"270a\",\"native\":\"\u270A\"},{\"unified\":\"270a-1f3fb\",\"native\":\"\u270A\uD83C\uDFFB\"},{\"unified\":\"270a-1f3fc\",\"native\":\"\u270A\uD83C\uDFFC\"},{\"unified\":\"270a-1f3fd\",\"native\":\"\u270A\uD83C\uDFFD\"},{\"unified\":\"270a-1f3fe\",\"native\":\"\u270A\uD83C\uDFFE\"},{\"unified\":\"270a-1f3ff\",\"native\":\"\u270A\uD83C\uDFFF\"}],\"version\":1},\"facepunch\":{\"id\":\"facepunch\",\"name\":\"Oncoming Fist\",\"keywords\":[\"facepunch\",\"punch\",\"angry\",\"violence\",\"hit\",\"attack\",\"hand\"],\"skins\":[{\"unified\":\"1f44a\",\"native\":\"\uD83D\uDC4A\"},{\"unified\":\"1f44a-1f3fb\",\"native\":\"\uD83D\uDC4A\uD83C\uDFFB\"},{\"unified\":\"1f44a-1f3fc\",\"native\":\"\uD83D\uDC4A\uD83C\uDFFC\"},{\"unified\":\"1f44a-1f3fd\",\"native\":\"\uD83D\uDC4A\uD83C\uDFFD\"},{\"unified\":\"1f44a-1f3fe\",\"native\":\"\uD83D\uDC4A\uD83C\uDFFE\"},{\"unified\":\"1f44a-1f3ff\",\"native\":\"\uD83D\uDC4A\uD83C\uDFFF\"}],\"version\":1},\"left-facing_fist\":{\"id\":\"left-facing_fist\",\"name\":\"Left-Facing Fist\",\"keywords\":[\"left\",\"facing\",\"hand\",\"fistbump\"],\"skins\":[{\"unified\":\"1f91b\",\"native\":\"\uD83E\uDD1B\"},{\"unified\":\"1f91b-1f3fb\",\"native\":\"\uD83E\uDD1B\uD83C\uDFFB\"},{\"unified\":\"1f91b-1f3fc\",\"native\":\"\uD83E\uDD1B\uD83C\uDFFC\"},{\"unified\":\"1f91b-1f3fd\",\"native\":\"\uD83E\uDD1B\uD83C\uDFFD\"},{\"unified\":\"1f91b-1f3fe\",\"native\":\"\uD83E\uDD1B\uD83C\uDFFE\"},{\"unified\":\"1f91b-1f3ff\",\"native\":\"\uD83E\uDD1B\uD83C\uDFFF\"}],\"version\":3},\"right-facing_fist\":{\"id\":\"right-facing_fist\",\"name\":\"Right-Facing Fist\",\"keywords\":[\"right\",\"facing\",\"hand\",\"fistbump\"],\"skins\":[{\"unified\":\"1f91c\",\"native\":\"\uD83E\uDD1C\"},{\"unified\":\"1f91c-1f3fb\",\"native\":\"\uD83E\uDD1C\uD83C\uDFFB\"},{\"unified\":\"1f91c-1f3fc\",\"native\":\"\uD83E\uDD1C\uD83C\uDFFC\"},{\"unified\":\"1f91c-1f3fd\",\"native\":\"\uD83E\uDD1C\uD83C\uDFFD\"},{\"unified\":\"1f91c-1f3fe\",\"native\":\"\uD83E\uDD1C\uD83C\uDFFE\"},{\"unified\":\"1f91c-1f3ff\",\"native\":\"\uD83E\uDD1C\uD83C\uDFFF\"}],\"version\":3},\"clap\":{\"id\":\"clap\",\"name\":\"Clapping Hands\",\"keywords\":[\"clap\",\"praise\",\"applause\",\"congrats\",\"yay\"],\"skins\":[{\"unified\":\"1f44f\",\"native\":\"\uD83D\uDC4F\"},{\"unified\":\"1f44f-1f3fb\",\"native\":\"\uD83D\uDC4F\uD83C\uDFFB\"},{\"unified\":\"1f44f-1f3fc\",\"native\":\"\uD83D\uDC4F\uD83C\uDFFC\"},{\"unified\":\"1f44f-1f3fd\",\"native\":\"\uD83D\uDC4F\uD83C\uDFFD\"},{\"unified\":\"1f44f-1f3fe\",\"native\":\"\uD83D\uDC4F\uD83C\uDFFE\"},{\"unified\":\"1f44f-1f3ff\",\"native\":\"\uD83D\uDC4F\uD83C\uDFFF\"}],\"version\":1},\"raised_hands\":{\"id\":\"raised_hands\",\"name\":\"Raising Hands\",\"keywords\":[\"raised\",\"gesture\",\"hooray\",\"yea\",\"celebration\"],\"skins\":[{\"unified\":\"1f64c\",\"native\":\"\uD83D\uDE4C\"},{\"unified\":\"1f64c-1f3fb\",\"native\":\"\uD83D\uDE4C\uD83C\uDFFB\"},{\"unified\":\"1f64c-1f3fc\",\"native\":\"\uD83D\uDE4C\uD83C\uDFFC\"},{\"unified\":\"1f64c-1f3fd\",\"native\":\"\uD83D\uDE4C\uD83C\uDFFD\"},{\"unified\":\"1f64c-1f3fe\",\"native\":\"\uD83D\uDE4C\uD83C\uDFFE\"},{\"unified\":\"1f64c-1f3ff\",\"native\":\"\uD83D\uDE4C\uD83C\uDFFF\"}],\"version\":1},\"heart_hands\":{\"id\":\"heart_hands\",\"name\":\"Heart Hands\",\"keywords\":[\"love\",\"appreciation\",\"support\"],\"skins\":[{\"unified\":\"1faf6\",\"native\":\"\uD83E\uDEF6\"},{\"unified\":\"1faf6-1f3fb\",\"native\":\"\uD83E\uDEF6\uD83C\uDFFB\"},{\"unified\":\"1faf6-1f3fc\",\"native\":\"\uD83E\uDEF6\uD83C\uDFFC\"},{\"unified\":\"1faf6-1f3fd\",\"native\":\"\uD83E\uDEF6\uD83C\uDFFD\"},{\"unified\":\"1faf6-1f3fe\",\"native\":\"\uD83E\uDEF6\uD83C\uDFFE\"},{\"unified\":\"1faf6-1f3ff\",\"native\":\"\uD83E\uDEF6\uD83C\uDFFF\"}],\"version\":14},\"open_hands\":{\"id\":\"open_hands\",\"name\":\"Open Hands\",\"keywords\":[\"fingers\",\"butterfly\"],\"skins\":[{\"unified\":\"1f450\",\"native\":\"\uD83D\uDC50\"},{\"unified\":\"1f450-1f3fb\",\"native\":\"\uD83D\uDC50\uD83C\uDFFB\"},{\"unified\":\"1f450-1f3fc\",\"native\":\"\uD83D\uDC50\uD83C\uDFFC\"},{\"unified\":\"1f450-1f3fd\",\"native\":\"\uD83D\uDC50\uD83C\uDFFD\"},{\"unified\":\"1f450-1f3fe\",\"native\":\"\uD83D\uDC50\uD83C\uDFFE\"},{\"unified\":\"1f450-1f3ff\",\"native\":\"\uD83D\uDC50\uD83C\uDFFF\"}],\"version\":1},\"palms_up_together\":{\"id\":\"palms_up_together\",\"name\":\"Palms Up Together\",\"keywords\":[\"hands\",\"gesture\",\"cupped\",\"prayer\"],\"skins\":[{\"unified\":\"1f932\",\"native\":\"\uD83E\uDD32\"},{\"unified\":\"1f932-1f3fb\",\"native\":\"\uD83E\uDD32\uD83C\uDFFB\"},{\"unified\":\"1f932-1f3fc\",\"native\":\"\uD83E\uDD32\uD83C\uDFFC\"},{\"unified\":\"1f932-1f3fd\",\"native\":\"\uD83E\uDD32\uD83C\uDFFD\"},{\"unified\":\"1f932-1f3fe\",\"native\":\"\uD83E\uDD32\uD83C\uDFFE\"},{\"unified\":\"1f932-1f3ff\",\"native\":\"\uD83E\uDD32\uD83C\uDFFF\"}],\"version\":5},\"handshake\":{\"id\":\"handshake\",\"name\":\"Handshake\",\"keywords\":[\"agreement\",\"shake\"],\"skins\":[{\"unified\":\"1f91d\",\"native\":\"\uD83E\uDD1D\"},{\"unified\":\"1f91d-1f3fb\",\"native\":\"\uD83E\uDD1D\uD83C\uDFFB\"},{\"unified\":\"1f91d-1f3fc\",\"native\":\"\uD83E\uDD1D\uD83C\uDFFC\"},{\"unified\":\"1f91d-1f3fd\",\"native\":\"\uD83E\uDD1D\uD83C\uDFFD\"},{\"unified\":\"1f91d-1f3fe\",\"native\":\"\uD83E\uDD1D\uD83C\uDFFE\"},{\"unified\":\"1f91d-1f3ff\",\"native\":\"\uD83E\uDD1D\uD83C\uDFFF\"}],\"version\":3},\"pray\":{\"id\":\"pray\",\"name\":\"Folded Hands\",\"keywords\":[\"pray\",\"please\",\"hope\",\"wish\",\"namaste\",\"highfive\",\"high\",\"five\"],\"skins\":[{\"unified\":\"1f64f\",\"native\":\"\uD83D\uDE4F\"},{\"unified\":\"1f64f-1f3fb\",\"native\":\"\uD83D\uDE4F\uD83C\uDFFB\"},{\"unified\":\"1f64f-1f3fc\",\"native\":\"\uD83D\uDE4F\uD83C\uDFFC\"},{\"unified\":\"1f64f-1f3fd\",\"native\":\"\uD83D\uDE4F\uD83C\uDFFD\"},{\"unified\":\"1f64f-1f3fe\",\"native\":\"\uD83D\uDE4F\uD83C\uDFFE\"},{\"unified\":\"1f64f-1f3ff\",\"native\":\"\uD83D\uDE4F\uD83C\uDFFF\"}],\"version\":1},\"writing_hand\":{\"id\":\"writing_hand\",\"name\":\"Writing Hand\",\"keywords\":[\"lower\",\"left\",\"ballpoint\",\"pen\",\"stationery\",\"write\",\"compose\"],\"skins\":[{\"unified\":\"270d-fe0f\",\"native\":\"\u270D\uFE0F\"},{\"unified\":\"270d-1f3fb\",\"native\":\"\u270D\uD83C\uDFFB\"},{\"unified\":\"270d-1f3fc\",\"native\":\"\u270D\uD83C\uDFFC\"},{\"unified\":\"270d-1f3fd\",\"native\":\"\u270D\uD83C\uDFFD\"},{\"unified\":\"270d-1f3fe\",\"native\":\"\u270D\uD83C\uDFFE\"},{\"unified\":\"270d-1f3ff\",\"native\":\"\u270D\uD83C\uDFFF\"}],\"version\":1},\"nail_care\":{\"id\":\"nail_care\",\"name\":\"Nail Polish\",\"keywords\":[\"care\",\"beauty\",\"manicure\",\"finger\",\"fashion\"],\"skins\":[{\"unified\":\"1f485\",\"native\":\"\uD83D\uDC85\"},{\"unified\":\"1f485-1f3fb\",\"native\":\"\uD83D\uDC85\uD83C\uDFFB\"},{\"unified\":\"1f485-1f3fc\",\"native\":\"\uD83D\uDC85\uD83C\uDFFC\"},{\"unified\":\"1f485-1f3fd\",\"native\":\"\uD83D\uDC85\uD83C\uDFFD\"},{\"unified\":\"1f485-1f3fe\",\"native\":\"\uD83D\uDC85\uD83C\uDFFE\"},{\"unified\":\"1f485-1f3ff\",\"native\":\"\uD83D\uDC85\uD83C\uDFFF\"}],\"version\":1},\"selfie\":{\"id\":\"selfie\",\"name\":\"Selfie\",\"keywords\":[\"camera\",\"phone\"],\"skins\":[{\"unified\":\"1f933\",\"native\":\"\uD83E\uDD33\"},{\"unified\":\"1f933-1f3fb\",\"native\":\"\uD83E\uDD33\uD83C\uDFFB\"},{\"unified\":\"1f933-1f3fc\",\"native\":\"\uD83E\uDD33\uD83C\uDFFC\"},{\"unified\":\"1f933-1f3fd\",\"native\":\"\uD83E\uDD33\uD83C\uDFFD\"},{\"unified\":\"1f933-1f3fe\",\"native\":\"\uD83E\uDD33\uD83C\uDFFE\"},{\"unified\":\"1f933-1f3ff\",\"native\":\"\uD83E\uDD33\uD83C\uDFFF\"}],\"version\":3},\"muscle\":{\"id\":\"muscle\",\"name\":\"Flexed Biceps\",\"keywords\":[\"muscle\",\"arm\",\"flex\",\"hand\",\"summer\",\"strong\"],\"skins\":[{\"unified\":\"1f4aa\",\"native\":\"\uD83D\uDCAA\"},{\"unified\":\"1f4aa-1f3fb\",\"native\":\"\uD83D\uDCAA\uD83C\uDFFB\"},{\"unified\":\"1f4aa-1f3fc\",\"native\":\"\uD83D\uDCAA\uD83C\uDFFC\"},{\"unified\":\"1f4aa-1f3fd\",\"native\":\"\uD83D\uDCAA\uD83C\uDFFD\"},{\"unified\":\"1f4aa-1f3fe\",\"native\":\"\uD83D\uDCAA\uD83C\uDFFE\"},{\"unified\":\"1f4aa-1f3ff\",\"native\":\"\uD83D\uDCAA\uD83C\uDFFF\"}],\"version\":1},\"mechanical_arm\":{\"id\":\"mechanical_arm\",\"name\":\"Mechanical Arm\",\"keywords\":[\"accessibility\"],\"skins\":[{\"unified\":\"1f9be\",\"native\":\"\uD83E\uDDBE\"}],\"version\":12},\"mechanical_leg\":{\"id\":\"mechanical_leg\",\"name\":\"Mechanical Leg\",\"keywords\":[\"accessibility\"],\"skins\":[{\"unified\":\"1f9bf\",\"native\":\"\uD83E\uDDBF\"}],\"version\":12},\"leg\":{\"id\":\"leg\",\"name\":\"Leg\",\"keywords\":[\"kick\",\"limb\"],\"skins\":[{\"unified\":\"1f9b5\",\"native\":\"\uD83E\uDDB5\"},{\"unified\":\"1f9b5-1f3fb\",\"native\":\"\uD83E\uDDB5\uD83C\uDFFB\"},{\"unified\":\"1f9b5-1f3fc\",\"native\":\"\uD83E\uDDB5\uD83C\uDFFC\"},{\"unified\":\"1f9b5-1f3fd\",\"native\":\"\uD83E\uDDB5\uD83C\uDFFD\"},{\"unified\":\"1f9b5-1f3fe\",\"native\":\"\uD83E\uDDB5\uD83C\uDFFE\"},{\"unified\":\"1f9b5-1f3ff\",\"native\":\"\uD83E\uDDB5\uD83C\uDFFF\"}],\"version\":11},\"foot\":{\"id\":\"foot\",\"name\":\"Foot\",\"keywords\":[\"kick\",\"stomp\"],\"skins\":[{\"unified\":\"1f9b6\",\"native\":\"\uD83E\uDDB6\"},{\"unified\":\"1f9b6-1f3fb\",\"native\":\"\uD83E\uDDB6\uD83C\uDFFB\"},{\"unified\":\"1f9b6-1f3fc\",\"native\":\"\uD83E\uDDB6\uD83C\uDFFC\"},{\"unified\":\"1f9b6-1f3fd\",\"native\":\"\uD83E\uDDB6\uD83C\uDFFD\"},{\"unified\":\"1f9b6-1f3fe\",\"native\":\"\uD83E\uDDB6\uD83C\uDFFE\"},{\"unified\":\"1f9b6-1f3ff\",\"native\":\"\uD83E\uDDB6\uD83C\uDFFF\"}],\"version\":11},\"ear\":{\"id\":\"ear\",\"name\":\"Ear\",\"keywords\":[\"face\",\"hear\",\"sound\",\"listen\"],\"skins\":[{\"unified\":\"1f442\",\"native\":\"\uD83D\uDC42\"},{\"unified\":\"1f442-1f3fb\",\"native\":\"\uD83D\uDC42\uD83C\uDFFB\"},{\"unified\":\"1f442-1f3fc\",\"native\":\"\uD83D\uDC42\uD83C\uDFFC\"},{\"unified\":\"1f442-1f3fd\",\"native\":\"\uD83D\uDC42\uD83C\uDFFD\"},{\"unified\":\"1f442-1f3fe\",\"native\":\"\uD83D\uDC42\uD83C\uDFFE\"},{\"unified\":\"1f442-1f3ff\",\"native\":\"\uD83D\uDC42\uD83C\uDFFF\"}],\"version\":1},\"ear_with_hearing_aid\":{\"id\":\"ear_with_hearing_aid\",\"name\":\"Ear with Hearing Aid\",\"keywords\":[\"accessibility\"],\"skins\":[{\"unified\":\"1f9bb\",\"native\":\"\uD83E\uDDBB\"},{\"unified\":\"1f9bb-1f3fb\",\"native\":\"\uD83E\uDDBB\uD83C\uDFFB\"},{\"unified\":\"1f9bb-1f3fc\",\"native\":\"\uD83E\uDDBB\uD83C\uDFFC\"},{\"unified\":\"1f9bb-1f3fd\",\"native\":\"\uD83E\uDDBB\uD83C\uDFFD\"},{\"unified\":\"1f9bb-1f3fe\",\"native\":\"\uD83E\uDDBB\uD83C\uDFFE\"},{\"unified\":\"1f9bb-1f3ff\",\"native\":\"\uD83E\uDDBB\uD83C\uDFFF\"}],\"version\":12},\"nose\":{\"id\":\"nose\",\"name\":\"Nose\",\"keywords\":[\"smell\",\"sniff\"],\"skins\":[{\"unified\":\"1f443\",\"native\":\"\uD83D\uDC43\"},{\"unified\":\"1f443-1f3fb\",\"native\":\"\uD83D\uDC43\uD83C\uDFFB\"},{\"unified\":\"1f443-1f3fc\",\"native\":\"\uD83D\uDC43\uD83C\uDFFC\"},{\"unified\":\"1f443-1f3fd\",\"native\":\"\uD83D\uDC43\uD83C\uDFFD\"},{\"unified\":\"1f443-1f3fe\",\"native\":\"\uD83D\uDC43\uD83C\uDFFE\"},{\"unified\":\"1f443-1f3ff\",\"native\":\"\uD83D\uDC43\uD83C\uDFFF\"}],\"version\":1},\"brain\":{\"id\":\"brain\",\"name\":\"Brain\",\"keywords\":[\"smart\",\"intelligent\"],\"skins\":[{\"unified\":\"1f9e0\",\"native\":\"\uD83E\uDDE0\"}],\"version\":5},\"anatomical_heart\":{\"id\":\"anatomical_heart\",\"name\":\"Anatomical Heart\",\"keywords\":[\"health\",\"heartbeat\"],\"skins\":[{\"unified\":\"1fac0\",\"native\":\"\uD83E\uDEC0\"}],\"version\":13},\"lungs\":{\"id\":\"lungs\",\"name\":\"Lungs\",\"keywords\":[\"breathe\"],\"skins\":[{\"unified\":\"1fac1\",\"native\":\"\uD83E\uDEC1\"}],\"version\":13},\"tooth\":{\"id\":\"tooth\",\"name\":\"Tooth\",\"keywords\":[\"teeth\",\"dentist\"],\"skins\":[{\"unified\":\"1f9b7\",\"native\":\"\uD83E\uDDB7\"}],\"version\":11},\"bone\":{\"id\":\"bone\",\"name\":\"Bone\",\"keywords\":[\"skeleton\"],\"skins\":[{\"unified\":\"1f9b4\",\"native\":\"\uD83E\uDDB4\"}],\"version\":11},\"eyes\":{\"id\":\"eyes\",\"name\":\"Eyes\",\"keywords\":[\"look\",\"watch\",\"stalk\",\"peek\",\"see\"],\"skins\":[{\"unified\":\"1f440\",\"native\":\"\uD83D\uDC40\"}],\"version\":1},\"eye\":{\"id\":\"eye\",\"name\":\"Eye\",\"keywords\":[\"face\",\"look\",\"see\",\"watch\",\"stare\"],\"skins\":[{\"unified\":\"1f441-fe0f\",\"native\":\"\uD83D\uDC41\uFE0F\"}],\"version\":1},\"tongue\":{\"id\":\"tongue\",\"name\":\"Tongue\",\"keywords\":[\"mouth\",\"playful\"],\"skins\":[{\"unified\":\"1f445\",\"native\":\"\uD83D\uDC45\"}],\"version\":1},\"lips\":{\"id\":\"lips\",\"name\":\"Mouth\",\"keywords\":[\"lips\",\"kiss\"],\"skins\":[{\"unified\":\"1f444\",\"native\":\"\uD83D\uDC44\"}],\"version\":1},\"biting_lip\":{\"id\":\"biting_lip\",\"name\":\"Biting Lip\",\"keywords\":[\"flirt\",\"sexy\",\"pain\",\"worry\"],\"skins\":[{\"unified\":\"1fae6\",\"native\":\"\uD83E\uDEE6\"}],\"version\":14},\"baby\":{\"id\":\"baby\",\"name\":\"Baby\",\"keywords\":[\"child\",\"boy\",\"girl\",\"toddler\"],\"skins\":[{\"unified\":\"1f476\",\"native\":\"\uD83D\uDC76\"},{\"unified\":\"1f476-1f3fb\",\"native\":\"\uD83D\uDC76\uD83C\uDFFB\"},{\"unified\":\"1f476-1f3fc\",\"native\":\"\uD83D\uDC76\uD83C\uDFFC\"},{\"unified\":\"1f476-1f3fd\",\"native\":\"\uD83D\uDC76\uD83C\uDFFD\"},{\"unified\":\"1f476-1f3fe\",\"native\":\"\uD83D\uDC76\uD83C\uDFFE\"},{\"unified\":\"1f476-1f3ff\",\"native\":\"\uD83D\uDC76\uD83C\uDFFF\"}],\"version\":1},\"child\":{\"id\":\"child\",\"name\":\"Child\",\"keywords\":[\"gender\",\"neutral\",\"young\"],\"skins\":[{\"unified\":\"1f9d2\",\"native\":\"\uD83E\uDDD2\"},{\"unified\":\"1f9d2-1f3fb\",\"native\":\"\uD83E\uDDD2\uD83C\uDFFB\"},{\"unified\":\"1f9d2-1f3fc\",\"native\":\"\uD83E\uDDD2\uD83C\uDFFC\"},{\"unified\":\"1f9d2-1f3fd\",\"native\":\"\uD83E\uDDD2\uD83C\uDFFD\"},{\"unified\":\"1f9d2-1f3fe\",\"native\":\"\uD83E\uDDD2\uD83C\uDFFE\"},{\"unified\":\"1f9d2-1f3ff\",\"native\":\"\uD83E\uDDD2\uD83C\uDFFF\"}],\"version\":5},\"boy\":{\"id\":\"boy\",\"name\":\"Boy\",\"keywords\":[\"man\",\"male\",\"guy\",\"teenager\"],\"skins\":[{\"unified\":\"1f466\",\"native\":\"\uD83D\uDC66\"},{\"unified\":\"1f466-1f3fb\",\"native\":\"\uD83D\uDC66\uD83C\uDFFB\"},{\"unified\":\"1f466-1f3fc\",\"native\":\"\uD83D\uDC66\uD83C\uDFFC\"},{\"unified\":\"1f466-1f3fd\",\"native\":\"\uD83D\uDC66\uD83C\uDFFD\"},{\"unified\":\"1f466-1f3fe\",\"native\":\"\uD83D\uDC66\uD83C\uDFFE\"},{\"unified\":\"1f466-1f3ff\",\"native\":\"\uD83D\uDC66\uD83C\uDFFF\"}],\"version\":1},\"girl\":{\"id\":\"girl\",\"name\":\"Girl\",\"keywords\":[\"female\",\"woman\",\"teenager\"],\"skins\":[{\"unified\":\"1f467\",\"native\":\"\uD83D\uDC67\"},{\"unified\":\"1f467-1f3fb\",\"native\":\"\uD83D\uDC67\uD83C\uDFFB\"},{\"unified\":\"1f467-1f3fc\",\"native\":\"\uD83D\uDC67\uD83C\uDFFC\"},{\"unified\":\"1f467-1f3fd\",\"native\":\"\uD83D\uDC67\uD83C\uDFFD\"},{\"unified\":\"1f467-1f3fe\",\"native\":\"\uD83D\uDC67\uD83C\uDFFE\"},{\"unified\":\"1f467-1f3ff\",\"native\":\"\uD83D\uDC67\uD83C\uDFFF\"}],\"version\":1},\"adult\":{\"id\":\"adult\",\"name\":\"Adult\",\"keywords\":[\"person\",\"gender\",\"neutral\"],\"skins\":[{\"unified\":\"1f9d1\",\"native\":\"\uD83E\uDDD1\"},{\"unified\":\"1f9d1-1f3fb\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFB\"},{\"unified\":\"1f9d1-1f3fc\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFC\"},{\"unified\":\"1f9d1-1f3fd\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFD\"},{\"unified\":\"1f9d1-1f3fe\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFE\"},{\"unified\":\"1f9d1-1f3ff\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFF\"}],\"version\":5},\"person_with_blond_hair\":{\"id\":\"person_with_blond_hair\",\"name\":\"Person Blond Hair\",\"keywords\":[\"with\",\"hairstyle\"],\"skins\":[{\"unified\":\"1f471\",\"native\":\"\uD83D\uDC71\"},{\"unified\":\"1f471-1f3fb\",\"native\":\"\uD83D\uDC71\uD83C\uDFFB\"},{\"unified\":\"1f471-1f3fc\",\"native\":\"\uD83D\uDC71\uD83C\uDFFC\"},{\"unified\":\"1f471-1f3fd\",\"native\":\"\uD83D\uDC71\uD83C\uDFFD\"},{\"unified\":\"1f471-1f3fe\",\"native\":\"\uD83D\uDC71\uD83C\uDFFE\"},{\"unified\":\"1f471-1f3ff\",\"native\":\"\uD83D\uDC71\uD83C\uDFFF\"}],\"version\":1},\"man\":{\"id\":\"man\",\"name\":\"Man\",\"keywords\":[\"mustache\",\"father\",\"dad\",\"guy\",\"classy\",\"sir\",\"moustache\"],\"skins\":[{\"unified\":\"1f468\",\"native\":\"\uD83D\uDC68\"},{\"unified\":\"1f468-1f3fb\",\"native\":\"\uD83D\uDC68\uD83C\uDFFB\"},{\"unified\":\"1f468-1f3fc\",\"native\":\"\uD83D\uDC68\uD83C\uDFFC\"},{\"unified\":\"1f468-1f3fd\",\"native\":\"\uD83D\uDC68\uD83C\uDFFD\"},{\"unified\":\"1f468-1f3fe\",\"native\":\"\uD83D\uDC68\uD83C\uDFFE\"},{\"unified\":\"1f468-1f3ff\",\"native\":\"\uD83D\uDC68\uD83C\uDFFF\"}],\"version\":1},\"bearded_person\":{\"id\":\"bearded_person\",\"name\":\"Person Beard\",\"keywords\":[\"bearded\",\"man\",\"bewhiskered\"],\"skins\":[{\"unified\":\"1f9d4\",\"native\":\"\uD83E\uDDD4\"},{\"unified\":\"1f9d4-1f3fb\",\"native\":\"\uD83E\uDDD4\uD83C\uDFFB\"},{\"unified\":\"1f9d4-1f3fc\",\"native\":\"\uD83E\uDDD4\uD83C\uDFFC\"},{\"unified\":\"1f9d4-1f3fd\",\"native\":\"\uD83E\uDDD4\uD83C\uDFFD\"},{\"unified\":\"1f9d4-1f3fe\",\"native\":\"\uD83E\uDDD4\uD83C\uDFFE\"},{\"unified\":\"1f9d4-1f3ff\",\"native\":\"\uD83E\uDDD4\uD83C\uDFFF\"}],\"version\":5},\"man_with_beard\":{\"id\":\"man_with_beard\",\"name\":\"Man: Beard\",\"keywords\":[\"man\",\"with\",\"facial\",\"hair\"],\"skins\":[{\"unified\":\"1f9d4-200d-2642-fe0f\",\"native\":\"\uD83E\uDDD4\u200D\u2642\uFE0F\"},{\"unified\":\"1f9d4-1f3fb-200d-2642-fe0f\",\"native\":\"\uD83E\uDDD4\uD83C\uDFFB\u200D\u2642\uFE0F\"},{\"unified\":\"1f9d4-1f3fc-200d-2642-fe0f\",\"native\":\"\uD83E\uDDD4\uD83C\uDFFC\u200D\u2642\uFE0F\"},{\"unified\":\"1f9d4-1f3fd-200d-2642-fe0f\",\"native\":\"\uD83E\uDDD4\uD83C\uDFFD\u200D\u2642\uFE0F\"},{\"unified\":\"1f9d4-1f3fe-200d-2642-fe0f\",\"native\":\"\uD83E\uDDD4\uD83C\uDFFE\u200D\u2642\uFE0F\"},{\"unified\":\"1f9d4-1f3ff-200d-2642-fe0f\",\"native\":\"\uD83E\uDDD4\uD83C\uDFFF\u200D\u2642\uFE0F\"}],\"version\":13.1},\"woman_with_beard\":{\"id\":\"woman_with_beard\",\"name\":\"Woman: Beard\",\"keywords\":[\"woman\",\"with\",\"facial\",\"hair\"],\"skins\":[{\"unified\":\"1f9d4-200d-2640-fe0f\",\"native\":\"\uD83E\uDDD4\u200D\u2640\uFE0F\"},{\"unified\":\"1f9d4-1f3fb-200d-2640-fe0f\",\"native\":\"\uD83E\uDDD4\uD83C\uDFFB\u200D\u2640\uFE0F\"},{\"unified\":\"1f9d4-1f3fc-200d-2640-fe0f\",\"native\":\"\uD83E\uDDD4\uD83C\uDFFC\u200D\u2640\uFE0F\"},{\"unified\":\"1f9d4-1f3fd-200d-2640-fe0f\",\"native\":\"\uD83E\uDDD4\uD83C\uDFFD\u200D\u2640\uFE0F\"},{\"unified\":\"1f9d4-1f3fe-200d-2640-fe0f\",\"native\":\"\uD83E\uDDD4\uD83C\uDFFE\u200D\u2640\uFE0F\"},{\"unified\":\"1f9d4-1f3ff-200d-2640-fe0f\",\"native\":\"\uD83E\uDDD4\uD83C\uDFFF\u200D\u2640\uFE0F\"}],\"version\":13.1},\"red_haired_man\":{\"id\":\"red_haired_man\",\"name\":\"Man: Red Hair\",\"keywords\":[\"haired\",\"man\",\"hairstyle\"],\"skins\":[{\"unified\":\"1f468-200d-1f9b0\",\"native\":\"\uD83D\uDC68\u200D\uD83E\uDDB0\"},{\"unified\":\"1f468-1f3fb-200d-1f9b0\",\"native\":\"\uD83D\uDC68\uD83C\uDFFB\u200D\uD83E\uDDB0\"},{\"unified\":\"1f468-1f3fc-200d-1f9b0\",\"native\":\"\uD83D\uDC68\uD83C\uDFFC\u200D\uD83E\uDDB0\"},{\"unified\":\"1f468-1f3fd-200d-1f9b0\",\"native\":\"\uD83D\uDC68\uD83C\uDFFD\u200D\uD83E\uDDB0\"},{\"unified\":\"1f468-1f3fe-200d-1f9b0\",\"native\":\"\uD83D\uDC68\uD83C\uDFFE\u200D\uD83E\uDDB0\"},{\"unified\":\"1f468-1f3ff-200d-1f9b0\",\"native\":\"\uD83D\uDC68\uD83C\uDFFF\u200D\uD83E\uDDB0\"}],\"version\":11},\"curly_haired_man\":{\"id\":\"curly_haired_man\",\"name\":\"Man: Curly Hair\",\"keywords\":[\"haired\",\"man\",\"hairstyle\"],\"skins\":[{\"unified\":\"1f468-200d-1f9b1\",\"native\":\"\uD83D\uDC68\u200D\uD83E\uDDB1\"},{\"unified\":\"1f468-1f3fb-200d-1f9b1\",\"native\":\"\uD83D\uDC68\uD83C\uDFFB\u200D\uD83E\uDDB1\"},{\"unified\":\"1f468-1f3fc-200d-1f9b1\",\"native\":\"\uD83D\uDC68\uD83C\uDFFC\u200D\uD83E\uDDB1\"},{\"unified\":\"1f468-1f3fd-200d-1f9b1\",\"native\":\"\uD83D\uDC68\uD83C\uDFFD\u200D\uD83E\uDDB1\"},{\"unified\":\"1f468-1f3fe-200d-1f9b1\",\"native\":\"\uD83D\uDC68\uD83C\uDFFE\u200D\uD83E\uDDB1\"},{\"unified\":\"1f468-1f3ff-200d-1f9b1\",\"native\":\"\uD83D\uDC68\uD83C\uDFFF\u200D\uD83E\uDDB1\"}],\"version\":11},\"white_haired_man\":{\"id\":\"white_haired_man\",\"name\":\"Man: White Hair\",\"keywords\":[\"haired\",\"man\",\"old\",\"elder\"],\"skins\":[{\"unified\":\"1f468-200d-1f9b3\",\"native\":\"\uD83D\uDC68\u200D\uD83E\uDDB3\"},{\"unified\":\"1f468-1f3fb-200d-1f9b3\",\"native\":\"\uD83D\uDC68\uD83C\uDFFB\u200D\uD83E\uDDB3\"},{\"unified\":\"1f468-1f3fc-200d-1f9b3\",\"native\":\"\uD83D\uDC68\uD83C\uDFFC\u200D\uD83E\uDDB3\"},{\"unified\":\"1f468-1f3fd-200d-1f9b3\",\"native\":\"\uD83D\uDC68\uD83C\uDFFD\u200D\uD83E\uDDB3\"},{\"unified\":\"1f468-1f3fe-200d-1f9b3\",\"native\":\"\uD83D\uDC68\uD83C\uDFFE\u200D\uD83E\uDDB3\"},{\"unified\":\"1f468-1f3ff-200d-1f9b3\",\"native\":\"\uD83D\uDC68\uD83C\uDFFF\u200D\uD83E\uDDB3\"}],\"version\":11},\"bald_man\":{\"id\":\"bald_man\",\"name\":\"Man: Bald\",\"keywords\":[\"man\",\"hairless\"],\"skins\":[{\"unified\":\"1f468-200d-1f9b2\",\"native\":\"\uD83D\uDC68\u200D\uD83E\uDDB2\"},{\"unified\":\"1f468-1f3fb-200d-1f9b2\",\"native\":\"\uD83D\uDC68\uD83C\uDFFB\u200D\uD83E\uDDB2\"},{\"unified\":\"1f468-1f3fc-200d-1f9b2\",\"native\":\"\uD83D\uDC68\uD83C\uDFFC\u200D\uD83E\uDDB2\"},{\"unified\":\"1f468-1f3fd-200d-1f9b2\",\"native\":\"\uD83D\uDC68\uD83C\uDFFD\u200D\uD83E\uDDB2\"},{\"unified\":\"1f468-1f3fe-200d-1f9b2\",\"native\":\"\uD83D\uDC68\uD83C\uDFFE\u200D\uD83E\uDDB2\"},{\"unified\":\"1f468-1f3ff-200d-1f9b2\",\"native\":\"\uD83D\uDC68\uD83C\uDFFF\u200D\uD83E\uDDB2\"}],\"version\":11},\"woman\":{\"id\":\"woman\",\"name\":\"Woman\",\"keywords\":[\"female\",\"girls\",\"lady\"],\"skins\":[{\"unified\":\"1f469\",\"native\":\"\uD83D\uDC69\"},{\"unified\":\"1f469-1f3fb\",\"native\":\"\uD83D\uDC69\uD83C\uDFFB\"},{\"unified\":\"1f469-1f3fc\",\"native\":\"\uD83D\uDC69\uD83C\uDFFC\"},{\"unified\":\"1f469-1f3fd\",\"native\":\"\uD83D\uDC69\uD83C\uDFFD\"},{\"unified\":\"1f469-1f3fe\",\"native\":\"\uD83D\uDC69\uD83C\uDFFE\"},{\"unified\":\"1f469-1f3ff\",\"native\":\"\uD83D\uDC69\uD83C\uDFFF\"}],\"version\":1},\"red_haired_woman\":{\"id\":\"red_haired_woman\",\"name\":\"Woman: Red Hair\",\"keywords\":[\"haired\",\"woman\",\"hairstyle\"],\"skins\":[{\"unified\":\"1f469-200d-1f9b0\",\"native\":\"\uD83D\uDC69\u200D\uD83E\uDDB0\"},{\"unified\":\"1f469-1f3fb-200d-1f9b0\",\"native\":\"\uD83D\uDC69\uD83C\uDFFB\u200D\uD83E\uDDB0\"},{\"unified\":\"1f469-1f3fc-200d-1f9b0\",\"native\":\"\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDDB0\"},{\"unified\":\"1f469-1f3fd-200d-1f9b0\",\"native\":\"\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDDB0\"},{\"unified\":\"1f469-1f3fe-200d-1f9b0\",\"native\":\"\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDDB0\"},{\"unified\":\"1f469-1f3ff-200d-1f9b0\",\"native\":\"\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDDB0\"}],\"version\":11},\"red_haired_person\":{\"id\":\"red_haired_person\",\"name\":\"Person: Red Hair\",\"keywords\":[\"haired\",\"person\",\"hairstyle\"],\"skins\":[{\"unified\":\"1f9d1-200d-1f9b0\",\"native\":\"\uD83E\uDDD1\u200D\uD83E\uDDB0\"},{\"unified\":\"1f9d1-1f3fb-200d-1f9b0\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFB\u200D\uD83E\uDDB0\"},{\"unified\":\"1f9d1-1f3fc-200d-1f9b0\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFC\u200D\uD83E\uDDB0\"},{\"unified\":\"1f9d1-1f3fd-200d-1f9b0\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFD\u200D\uD83E\uDDB0\"},{\"unified\":\"1f9d1-1f3fe-200d-1f9b0\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFE\u200D\uD83E\uDDB0\"},{\"unified\":\"1f9d1-1f3ff-200d-1f9b0\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFF\u200D\uD83E\uDDB0\"}],\"version\":12.1},\"curly_haired_woman\":{\"id\":\"curly_haired_woman\",\"name\":\"Woman: Curly Hair\",\"keywords\":[\"haired\",\"woman\",\"hairstyle\"],\"skins\":[{\"unified\":\"1f469-200d-1f9b1\",\"native\":\"\uD83D\uDC69\u200D\uD83E\uDDB1\"},{\"unified\":\"1f469-1f3fb-200d-1f9b1\",\"native\":\"\uD83D\uDC69\uD83C\uDFFB\u200D\uD83E\uDDB1\"},{\"unified\":\"1f469-1f3fc-200d-1f9b1\",\"native\":\"\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDDB1\"},{\"unified\":\"1f469-1f3fd-200d-1f9b1\",\"native\":\"\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDDB1\"},{\"unified\":\"1f469-1f3fe-200d-1f9b1\",\"native\":\"\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDDB1\"},{\"unified\":\"1f469-1f3ff-200d-1f9b1\",\"native\":\"\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDDB1\"}],\"version\":11},\"curly_haired_person\":{\"id\":\"curly_haired_person\",\"name\":\"Person: Curly Hair\",\"keywords\":[\"haired\",\"person\",\"hairstyle\"],\"skins\":[{\"unified\":\"1f9d1-200d-1f9b1\",\"native\":\"\uD83E\uDDD1\u200D\uD83E\uDDB1\"},{\"unified\":\"1f9d1-1f3fb-200d-1f9b1\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFB\u200D\uD83E\uDDB1\"},{\"unified\":\"1f9d1-1f3fc-200d-1f9b1\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFC\u200D\uD83E\uDDB1\"},{\"unified\":\"1f9d1-1f3fd-200d-1f9b1\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFD\u200D\uD83E\uDDB1\"},{\"unified\":\"1f9d1-1f3fe-200d-1f9b1\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFE\u200D\uD83E\uDDB1\"},{\"unified\":\"1f9d1-1f3ff-200d-1f9b1\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFF\u200D\uD83E\uDDB1\"}],\"version\":12.1},\"white_haired_woman\":{\"id\":\"white_haired_woman\",\"name\":\"Woman: White Hair\",\"keywords\":[\"haired\",\"woman\",\"old\",\"elder\"],\"skins\":[{\"unified\":\"1f469-200d-1f9b3\",\"native\":\"\uD83D\uDC69\u200D\uD83E\uDDB3\"},{\"unified\":\"1f469-1f3fb-200d-1f9b3\",\"native\":\"\uD83D\uDC69\uD83C\uDFFB\u200D\uD83E\uDDB3\"},{\"unified\":\"1f469-1f3fc-200d-1f9b3\",\"native\":\"\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDDB3\"},{\"unified\":\"1f469-1f3fd-200d-1f9b3\",\"native\":\"\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDDB3\"},{\"unified\":\"1f469-1f3fe-200d-1f9b3\",\"native\":\"\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDDB3\"},{\"unified\":\"1f469-1f3ff-200d-1f9b3\",\"native\":\"\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDDB3\"}],\"version\":11},\"white_haired_person\":{\"id\":\"white_haired_person\",\"name\":\"Person: White Hair\",\"keywords\":[\"haired\",\"person\",\"elder\",\"old\"],\"skins\":[{\"unified\":\"1f9d1-200d-1f9b3\",\"native\":\"\uD83E\uDDD1\u200D\uD83E\uDDB3\"},{\"unified\":\"1f9d1-1f3fb-200d-1f9b3\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFB\u200D\uD83E\uDDB3\"},{\"unified\":\"1f9d1-1f3fc-200d-1f9b3\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFC\u200D\uD83E\uDDB3\"},{\"unified\":\"1f9d1-1f3fd-200d-1f9b3\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFD\u200D\uD83E\uDDB3\"},{\"unified\":\"1f9d1-1f3fe-200d-1f9b3\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFE\u200D\uD83E\uDDB3\"},{\"unified\":\"1f9d1-1f3ff-200d-1f9b3\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFF\u200D\uD83E\uDDB3\"}],\"version\":12.1},\"bald_woman\":{\"id\":\"bald_woman\",\"name\":\"Woman: Bald\",\"keywords\":[\"woman\",\"hairless\"],\"skins\":[{\"unified\":\"1f469-200d-1f9b2\",\"native\":\"\uD83D\uDC69\u200D\uD83E\uDDB2\"},{\"unified\":\"1f469-1f3fb-200d-1f9b2\",\"native\":\"\uD83D\uDC69\uD83C\uDFFB\u200D\uD83E\uDDB2\"},{\"unified\":\"1f469-1f3fc-200d-1f9b2\",\"native\":\"\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDDB2\"},{\"unified\":\"1f469-1f3fd-200d-1f9b2\",\"native\":\"\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDDB2\"},{\"unified\":\"1f469-1f3fe-200d-1f9b2\",\"native\":\"\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDDB2\"},{\"unified\":\"1f469-1f3ff-200d-1f9b2\",\"native\":\"\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDDB2\"}],\"version\":11},\"bald_person\":{\"id\":\"bald_person\",\"name\":\"Person: Bald\",\"keywords\":[\"person\",\"hairless\"],\"skins\":[{\"unified\":\"1f9d1-200d-1f9b2\",\"native\":\"\uD83E\uDDD1\u200D\uD83E\uDDB2\"},{\"unified\":\"1f9d1-1f3fb-200d-1f9b2\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFB\u200D\uD83E\uDDB2\"},{\"unified\":\"1f9d1-1f3fc-200d-1f9b2\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFC\u200D\uD83E\uDDB2\"},{\"unified\":\"1f9d1-1f3fd-200d-1f9b2\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFD\u200D\uD83E\uDDB2\"},{\"unified\":\"1f9d1-1f3fe-200d-1f9b2\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFE\u200D\uD83E\uDDB2\"},{\"unified\":\"1f9d1-1f3ff-200d-1f9b2\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFF\u200D\uD83E\uDDB2\"}],\"version\":12.1},\"blond-haired-woman\":{\"id\":\"blond-haired-woman\",\"name\":\"Woman: Blond Hair\",\"keywords\":[\"haired-woman\",\"woman\",\"female\",\"girl\",\"blonde\",\"person\"],\"skins\":[{\"unified\":\"1f471-200d-2640-fe0f\",\"native\":\"\uD83D\uDC71\u200D\u2640\uFE0F\"},{\"unified\":\"1f471-1f3fb-200d-2640-fe0f\",\"native\":\"\uD83D\uDC71\uD83C\uDFFB\u200D\u2640\uFE0F\"},{\"unified\":\"1f471-1f3fc-200d-2640-fe0f\",\"native\":\"\uD83D\uDC71\uD83C\uDFFC\u200D\u2640\uFE0F\"},{\"unified\":\"1f471-1f3fd-200d-2640-fe0f\",\"native\":\"\uD83D\uDC71\uD83C\uDFFD\u200D\u2640\uFE0F\"},{\"unified\":\"1f471-1f3fe-200d-2640-fe0f\",\"native\":\"\uD83D\uDC71\uD83C\uDFFE\u200D\u2640\uFE0F\"},{\"unified\":\"1f471-1f3ff-200d-2640-fe0f\",\"native\":\"\uD83D\uDC71\uD83C\uDFFF\u200D\u2640\uFE0F\"}],\"version\":4},\"blond-haired-man\":{\"id\":\"blond-haired-man\",\"name\":\"Man: Blond Hair\",\"keywords\":[\"haired-man\",\"man\",\"male\",\"boy\",\"blonde\",\"guy\",\"person\"],\"skins\":[{\"unified\":\"1f471-200d-2642-fe0f\",\"native\":\"\uD83D\uDC71\u200D\u2642\uFE0F\"},{\"unified\":\"1f471-1f3fb-200d-2642-fe0f\",\"native\":\"\uD83D\uDC71\uD83C\uDFFB\u200D\u2642\uFE0F\"},{\"unified\":\"1f471-1f3fc-200d-2642-fe0f\",\"native\":\"\uD83D\uDC71\uD83C\uDFFC\u200D\u2642\uFE0F\"},{\"unified\":\"1f471-1f3fd-200d-2642-fe0f\",\"native\":\"\uD83D\uDC71\uD83C\uDFFD\u200D\u2642\uFE0F\"},{\"unified\":\"1f471-1f3fe-200d-2642-fe0f\",\"native\":\"\uD83D\uDC71\uD83C\uDFFE\u200D\u2642\uFE0F\"},{\"unified\":\"1f471-1f3ff-200d-2642-fe0f\",\"native\":\"\uD83D\uDC71\uD83C\uDFFF\u200D\u2642\uFE0F\"}],\"version\":4},\"older_adult\":{\"id\":\"older_adult\",\"name\":\"Older Adult\",\"keywords\":[\"person\",\"human\",\"elder\",\"senior\",\"gender\",\"neutral\"],\"skins\":[{\"unified\":\"1f9d3\",\"native\":\"\uD83E\uDDD3\"},{\"unified\":\"1f9d3-1f3fb\",\"native\":\"\uD83E\uDDD3\uD83C\uDFFB\"},{\"unified\":\"1f9d3-1f3fc\",\"native\":\"\uD83E\uDDD3\uD83C\uDFFC\"},{\"unified\":\"1f9d3-1f3fd\",\"native\":\"\uD83E\uDDD3\uD83C\uDFFD\"},{\"unified\":\"1f9d3-1f3fe\",\"native\":\"\uD83E\uDDD3\uD83C\uDFFE\"},{\"unified\":\"1f9d3-1f3ff\",\"native\":\"\uD83E\uDDD3\uD83C\uDFFF\"}],\"version\":5},\"older_man\":{\"id\":\"older_man\",\"name\":\"Old Man\",\"keywords\":[\"older\",\"human\",\"male\",\"men\",\"elder\",\"senior\"],\"skins\":[{\"unified\":\"1f474\",\"native\":\"\uD83D\uDC74\"},{\"unified\":\"1f474-1f3fb\",\"native\":\"\uD83D\uDC74\uD83C\uDFFB\"},{\"unified\":\"1f474-1f3fc\",\"native\":\"\uD83D\uDC74\uD83C\uDFFC\"},{\"unified\":\"1f474-1f3fd\",\"native\":\"\uD83D\uDC74\uD83C\uDFFD\"},{\"unified\":\"1f474-1f3fe\",\"native\":\"\uD83D\uDC74\uD83C\uDFFE\"},{\"unified\":\"1f474-1f3ff\",\"native\":\"\uD83D\uDC74\uD83C\uDFFF\"}],\"version\":1},\"older_woman\":{\"id\":\"older_woman\",\"name\":\"Old Woman\",\"keywords\":[\"older\",\"human\",\"female\",\"women\",\"lady\",\"elder\",\"senior\"],\"skins\":[{\"unified\":\"1f475\",\"native\":\"\uD83D\uDC75\"},{\"unified\":\"1f475-1f3fb\",\"native\":\"\uD83D\uDC75\uD83C\uDFFB\"},{\"unified\":\"1f475-1f3fc\",\"native\":\"\uD83D\uDC75\uD83C\uDFFC\"},{\"unified\":\"1f475-1f3fd\",\"native\":\"\uD83D\uDC75\uD83C\uDFFD\"},{\"unified\":\"1f475-1f3fe\",\"native\":\"\uD83D\uDC75\uD83C\uDFFE\"},{\"unified\":\"1f475-1f3ff\",\"native\":\"\uD83D\uDC75\uD83C\uDFFF\"}],\"version\":1},\"person_frowning\":{\"id\":\"person_frowning\",\"name\":\"Person Frowning\",\"keywords\":[\"worried\"],\"skins\":[{\"unified\":\"1f64d\",\"native\":\"\uD83D\uDE4D\"},{\"unified\":\"1f64d-1f3fb\",\"native\":\"\uD83D\uDE4D\uD83C\uDFFB\"},{\"unified\":\"1f64d-1f3fc\",\"native\":\"\uD83D\uDE4D\uD83C\uDFFC\"},{\"unified\":\"1f64d-1f3fd\",\"native\":\"\uD83D\uDE4D\uD83C\uDFFD\"},{\"unified\":\"1f64d-1f3fe\",\"native\":\"\uD83D\uDE4D\uD83C\uDFFE\"},{\"unified\":\"1f64d-1f3ff\",\"native\":\"\uD83D\uDE4D\uD83C\uDFFF\"}],\"version\":1},\"man-frowning\":{\"id\":\"man-frowning\",\"name\":\"Man Frowning\",\"keywords\":[\"male\",\"boy\",\"sad\",\"depressed\",\"discouraged\",\"unhappy\"],\"skins\":[{\"unified\":\"1f64d-200d-2642-fe0f\",\"native\":\"\uD83D\uDE4D\u200D\u2642\uFE0F\"},{\"unified\":\"1f64d-1f3fb-200d-2642-fe0f\",\"native\":\"\uD83D\uDE4D\uD83C\uDFFB\u200D\u2642\uFE0F\"},{\"unified\":\"1f64d-1f3fc-200d-2642-fe0f\",\"native\":\"\uD83D\uDE4D\uD83C\uDFFC\u200D\u2642\uFE0F\"},{\"unified\":\"1f64d-1f3fd-200d-2642-fe0f\",\"native\":\"\uD83D\uDE4D\uD83C\uDFFD\u200D\u2642\uFE0F\"},{\"unified\":\"1f64d-1f3fe-200d-2642-fe0f\",\"native\":\"\uD83D\uDE4D\uD83C\uDFFE\u200D\u2642\uFE0F\"},{\"unified\":\"1f64d-1f3ff-200d-2642-fe0f\",\"native\":\"\uD83D\uDE4D\uD83C\uDFFF\u200D\u2642\uFE0F\"}],\"version\":4},\"woman-frowning\":{\"id\":\"woman-frowning\",\"name\":\"Woman Frowning\",\"keywords\":[\"female\",\"girl\",\"sad\",\"depressed\",\"discouraged\",\"unhappy\"],\"skins\":[{\"unified\":\"1f64d-200d-2640-fe0f\",\"native\":\"\uD83D\uDE4D\u200D\u2640\uFE0F\"},{\"unified\":\"1f64d-1f3fb-200d-2640-fe0f\",\"native\":\"\uD83D\uDE4D\uD83C\uDFFB\u200D\u2640\uFE0F\"},{\"unified\":\"1f64d-1f3fc-200d-2640-fe0f\",\"native\":\"\uD83D\uDE4D\uD83C\uDFFC\u200D\u2640\uFE0F\"},{\"unified\":\"1f64d-1f3fd-200d-2640-fe0f\",\"native\":\"\uD83D\uDE4D\uD83C\uDFFD\u200D\u2640\uFE0F\"},{\"unified\":\"1f64d-1f3fe-200d-2640-fe0f\",\"native\":\"\uD83D\uDE4D\uD83C\uDFFE\u200D\u2640\uFE0F\"},{\"unified\":\"1f64d-1f3ff-200d-2640-fe0f\",\"native\":\"\uD83D\uDE4D\uD83C\uDFFF\u200D\u2640\uFE0F\"}],\"version\":4},\"person_with_pouting_face\":{\"id\":\"person_with_pouting_face\",\"name\":\"Person Pouting\",\"keywords\":[\"with\",\"face\",\"upset\"],\"skins\":[{\"unified\":\"1f64e\",\"native\":\"\uD83D\uDE4E\"},{\"unified\":\"1f64e-1f3fb\",\"native\":\"\uD83D\uDE4E\uD83C\uDFFB\"},{\"unified\":\"1f64e-1f3fc\",\"native\":\"\uD83D\uDE4E\uD83C\uDFFC\"},{\"unified\":\"1f64e-1f3fd\",\"native\":\"\uD83D\uDE4E\uD83C\uDFFD\"},{\"unified\":\"1f64e-1f3fe\",\"native\":\"\uD83D\uDE4E\uD83C\uDFFE\"},{\"unified\":\"1f64e-1f3ff\",\"native\":\"\uD83D\uDE4E\uD83C\uDFFF\"}],\"version\":1},\"man-pouting\":{\"id\":\"man-pouting\",\"name\":\"Man Pouting\",\"keywords\":[\"male\",\"boy\"],\"skins\":[{\"unified\":\"1f64e-200d-2642-fe0f\",\"native\":\"\uD83D\uDE4E\u200D\u2642\uFE0F\"},{\"unified\":\"1f64e-1f3fb-200d-2642-fe0f\",\"native\":\"\uD83D\uDE4E\uD83C\uDFFB\u200D\u2642\uFE0F\"},{\"unified\":\"1f64e-1f3fc-200d-2642-fe0f\",\"native\":\"\uD83D\uDE4E\uD83C\uDFFC\u200D\u2642\uFE0F\"},{\"unified\":\"1f64e-1f3fd-200d-2642-fe0f\",\"native\":\"\uD83D\uDE4E\uD83C\uDFFD\u200D\u2642\uFE0F\"},{\"unified\":\"1f64e-1f3fe-200d-2642-fe0f\",\"native\":\"\uD83D\uDE4E\uD83C\uDFFE\u200D\u2642\uFE0F\"},{\"unified\":\"1f64e-1f3ff-200d-2642-fe0f\",\"native\":\"\uD83D\uDE4E\uD83C\uDFFF\u200D\u2642\uFE0F\"}],\"version\":4},\"woman-pouting\":{\"id\":\"woman-pouting\",\"name\":\"Woman Pouting\",\"keywords\":[\"female\",\"girl\"],\"skins\":[{\"unified\":\"1f64e-200d-2640-fe0f\",\"native\":\"\uD83D\uDE4E\u200D\u2640\uFE0F\"},{\"unified\":\"1f64e-1f3fb-200d-2640-fe0f\",\"native\":\"\uD83D\uDE4E\uD83C\uDFFB\u200D\u2640\uFE0F\"},{\"unified\":\"1f64e-1f3fc-200d-2640-fe0f\",\"native\":\"\uD83D\uDE4E\uD83C\uDFFC\u200D\u2640\uFE0F\"},{\"unified\":\"1f64e-1f3fd-200d-2640-fe0f\",\"native\":\"\uD83D\uDE4E\uD83C\uDFFD\u200D\u2640\uFE0F\"},{\"unified\":\"1f64e-1f3fe-200d-2640-fe0f\",\"native\":\"\uD83D\uDE4E\uD83C\uDFFE\u200D\u2640\uFE0F\"},{\"unified\":\"1f64e-1f3ff-200d-2640-fe0f\",\"native\":\"\uD83D\uDE4E\uD83C\uDFFF\u200D\u2640\uFE0F\"}],\"version\":4},\"no_good\":{\"id\":\"no_good\",\"name\":\"Person Gesturing No\",\"keywords\":[\"good\",\"decline\"],\"skins\":[{\"unified\":\"1f645\",\"native\":\"\uD83D\uDE45\"},{\"unified\":\"1f645-1f3fb\",\"native\":\"\uD83D\uDE45\uD83C\uDFFB\"},{\"unified\":\"1f645-1f3fc\",\"native\":\"\uD83D\uDE45\uD83C\uDFFC\"},{\"unified\":\"1f645-1f3fd\",\"native\":\"\uD83D\uDE45\uD83C\uDFFD\"},{\"unified\":\"1f645-1f3fe\",\"native\":\"\uD83D\uDE45\uD83C\uDFFE\"},{\"unified\":\"1f645-1f3ff\",\"native\":\"\uD83D\uDE45\uD83C\uDFFF\"}],\"version\":1},\"man-gesturing-no\":{\"id\":\"man-gesturing-no\",\"name\":\"Man Gesturing No\",\"keywords\":[\"gesturing-no\",\"male\",\"boy\",\"nope\"],\"skins\":[{\"unified\":\"1f645-200d-2642-fe0f\",\"native\":\"\uD83D\uDE45\u200D\u2642\uFE0F\"},{\"unified\":\"1f645-1f3fb-200d-2642-fe0f\",\"native\":\"\uD83D\uDE45\uD83C\uDFFB\u200D\u2642\uFE0F\"},{\"unified\":\"1f645-1f3fc-200d-2642-fe0f\",\"native\":\"\uD83D\uDE45\uD83C\uDFFC\u200D\u2642\uFE0F\"},{\"unified\":\"1f645-1f3fd-200d-2642-fe0f\",\"native\":\"\uD83D\uDE45\uD83C\uDFFD\u200D\u2642\uFE0F\"},{\"unified\":\"1f645-1f3fe-200d-2642-fe0f\",\"native\":\"\uD83D\uDE45\uD83C\uDFFE\u200D\u2642\uFE0F\"},{\"unified\":\"1f645-1f3ff-200d-2642-fe0f\",\"native\":\"\uD83D\uDE45\uD83C\uDFFF\u200D\u2642\uFE0F\"}],\"version\":4},\"woman-gesturing-no\":{\"id\":\"woman-gesturing-no\",\"name\":\"Woman Gesturing No\",\"keywords\":[\"gesturing-no\",\"female\",\"girl\",\"nope\"],\"skins\":[{\"unified\":\"1f645-200d-2640-fe0f\",\"native\":\"\uD83D\uDE45\u200D\u2640\uFE0F\"},{\"unified\":\"1f645-1f3fb-200d-2640-fe0f\",\"native\":\"\uD83D\uDE45\uD83C\uDFFB\u200D\u2640\uFE0F\"},{\"unified\":\"1f645-1f3fc-200d-2640-fe0f\",\"native\":\"\uD83D\uDE45\uD83C\uDFFC\u200D\u2640\uFE0F\"},{\"unified\":\"1f645-1f3fd-200d-2640-fe0f\",\"native\":\"\uD83D\uDE45\uD83C\uDFFD\u200D\u2640\uFE0F\"},{\"unified\":\"1f645-1f3fe-200d-2640-fe0f\",\"native\":\"\uD83D\uDE45\uD83C\uDFFE\u200D\u2640\uFE0F\"},{\"unified\":\"1f645-1f3ff-200d-2640-fe0f\",\"native\":\"\uD83D\uDE45\uD83C\uDFFF\u200D\u2640\uFE0F\"}],\"version\":4},\"ok_woman\":{\"id\":\"ok_woman\",\"name\":\"Person Gesturing Ok\",\"keywords\":[\"woman\",\"agree\"],\"skins\":[{\"unified\":\"1f646\",\"native\":\"\uD83D\uDE46\"},{\"unified\":\"1f646-1f3fb\",\"native\":\"\uD83D\uDE46\uD83C\uDFFB\"},{\"unified\":\"1f646-1f3fc\",\"native\":\"\uD83D\uDE46\uD83C\uDFFC\"},{\"unified\":\"1f646-1f3fd\",\"native\":\"\uD83D\uDE46\uD83C\uDFFD\"},{\"unified\":\"1f646-1f3fe\",\"native\":\"\uD83D\uDE46\uD83C\uDFFE\"},{\"unified\":\"1f646-1f3ff\",\"native\":\"\uD83D\uDE46\uD83C\uDFFF\"}],\"version\":1},\"man-gesturing-ok\":{\"id\":\"man-gesturing-ok\",\"name\":\"Man Gesturing Ok\",\"keywords\":[\"gesturing-ok\",\"men\",\"boy\",\"male\",\"blue\",\"human\"],\"skins\":[{\"unified\":\"1f646-200d-2642-fe0f\",\"native\":\"\uD83D\uDE46\u200D\u2642\uFE0F\"},{\"unified\":\"1f646-1f3fb-200d-2642-fe0f\",\"native\":\"\uD83D\uDE46\uD83C\uDFFB\u200D\u2642\uFE0F\"},{\"unified\":\"1f646-1f3fc-200d-2642-fe0f\",\"native\":\"\uD83D\uDE46\uD83C\uDFFC\u200D\u2642\uFE0F\"},{\"unified\":\"1f646-1f3fd-200d-2642-fe0f\",\"native\":\"\uD83D\uDE46\uD83C\uDFFD\u200D\u2642\uFE0F\"},{\"unified\":\"1f646-1f3fe-200d-2642-fe0f\",\"native\":\"\uD83D\uDE46\uD83C\uDFFE\u200D\u2642\uFE0F\"},{\"unified\":\"1f646-1f3ff-200d-2642-fe0f\",\"native\":\"\uD83D\uDE46\uD83C\uDFFF\u200D\u2642\uFE0F\"}],\"version\":4},\"woman-gesturing-ok\":{\"id\":\"woman-gesturing-ok\",\"name\":\"Woman Gesturing Ok\",\"keywords\":[\"gesturing-ok\",\"women\",\"girl\",\"female\",\"pink\",\"human\"],\"skins\":[{\"unified\":\"1f646-200d-2640-fe0f\",\"native\":\"\uD83D\uDE46\u200D\u2640\uFE0F\"},{\"unified\":\"1f646-1f3fb-200d-2640-fe0f\",\"native\":\"\uD83D\uDE46\uD83C\uDFFB\u200D\u2640\uFE0F\"},{\"unified\":\"1f646-1f3fc-200d-2640-fe0f\",\"native\":\"\uD83D\uDE46\uD83C\uDFFC\u200D\u2640\uFE0F\"},{\"unified\":\"1f646-1f3fd-200d-2640-fe0f\",\"native\":\"\uD83D\uDE46\uD83C\uDFFD\u200D\u2640\uFE0F\"},{\"unified\":\"1f646-1f3fe-200d-2640-fe0f\",\"native\":\"\uD83D\uDE46\uD83C\uDFFE\u200D\u2640\uFE0F\"},{\"unified\":\"1f646-1f3ff-200d-2640-fe0f\",\"native\":\"\uD83D\uDE46\uD83C\uDFFF\u200D\u2640\uFE0F\"}],\"version\":4},\"information_desk_person\":{\"id\":\"information_desk_person\",\"name\":\"Person Tipping Hand\",\"keywords\":[\"information\",\"desk\"],\"skins\":[{\"unified\":\"1f481\",\"native\":\"\uD83D\uDC81\"},{\"unified\":\"1f481-1f3fb\",\"native\":\"\uD83D\uDC81\uD83C\uDFFB\"},{\"unified\":\"1f481-1f3fc\",\"native\":\"\uD83D\uDC81\uD83C\uDFFC\"},{\"unified\":\"1f481-1f3fd\",\"native\":\"\uD83D\uDC81\uD83C\uDFFD\"},{\"unified\":\"1f481-1f3fe\",\"native\":\"\uD83D\uDC81\uD83C\uDFFE\"},{\"unified\":\"1f481-1f3ff\",\"native\":\"\uD83D\uDC81\uD83C\uDFFF\"}],\"version\":1},\"man-tipping-hand\":{\"id\":\"man-tipping-hand\",\"name\":\"Man Tipping Hand\",\"keywords\":[\"tipping-hand\",\"male\",\"boy\",\"human\",\"information\"],\"skins\":[{\"unified\":\"1f481-200d-2642-fe0f\",\"native\":\"\uD83D\uDC81\u200D\u2642\uFE0F\"},{\"unified\":\"1f481-1f3fb-200d-2642-fe0f\",\"native\":\"\uD83D\uDC81\uD83C\uDFFB\u200D\u2642\uFE0F\"},{\"unified\":\"1f481-1f3fc-200d-2642-fe0f\",\"native\":\"\uD83D\uDC81\uD83C\uDFFC\u200D\u2642\uFE0F\"},{\"unified\":\"1f481-1f3fd-200d-2642-fe0f\",\"native\":\"\uD83D\uDC81\uD83C\uDFFD\u200D\u2642\uFE0F\"},{\"unified\":\"1f481-1f3fe-200d-2642-fe0f\",\"native\":\"\uD83D\uDC81\uD83C\uDFFE\u200D\u2642\uFE0F\"},{\"unified\":\"1f481-1f3ff-200d-2642-fe0f\",\"native\":\"\uD83D\uDC81\uD83C\uDFFF\u200D\u2642\uFE0F\"}],\"version\":4},\"woman-tipping-hand\":{\"id\":\"woman-tipping-hand\",\"name\":\"Woman Tipping Hand\",\"keywords\":[\"tipping-hand\",\"female\",\"girl\",\"human\",\"information\"],\"skins\":[{\"unified\":\"1f481-200d-2640-fe0f\",\"native\":\"\uD83D\uDC81\u200D\u2640\uFE0F\"},{\"unified\":\"1f481-1f3fb-200d-2640-fe0f\",\"native\":\"\uD83D\uDC81\uD83C\uDFFB\u200D\u2640\uFE0F\"},{\"unified\":\"1f481-1f3fc-200d-2640-fe0f\",\"native\":\"\uD83D\uDC81\uD83C\uDFFC\u200D\u2640\uFE0F\"},{\"unified\":\"1f481-1f3fd-200d-2640-fe0f\",\"native\":\"\uD83D\uDC81\uD83C\uDFFD\u200D\u2640\uFE0F\"},{\"unified\":\"1f481-1f3fe-200d-2640-fe0f\",\"native\":\"\uD83D\uDC81\uD83C\uDFFE\u200D\u2640\uFE0F\"},{\"unified\":\"1f481-1f3ff-200d-2640-fe0f\",\"native\":\"\uD83D\uDC81\uD83C\uDFFF\u200D\u2640\uFE0F\"}],\"version\":4},\"raising_hand\":{\"id\":\"raising_hand\",\"name\":\"Person Raising Hand\",\"keywords\":[\"question\"],\"skins\":[{\"unified\":\"1f64b\",\"native\":\"\uD83D\uDE4B\"},{\"unified\":\"1f64b-1f3fb\",\"native\":\"\uD83D\uDE4B\uD83C\uDFFB\"},{\"unified\":\"1f64b-1f3fc\",\"native\":\"\uD83D\uDE4B\uD83C\uDFFC\"},{\"unified\":\"1f64b-1f3fd\",\"native\":\"\uD83D\uDE4B\uD83C\uDFFD\"},{\"unified\":\"1f64b-1f3fe\",\"native\":\"\uD83D\uDE4B\uD83C\uDFFE\"},{\"unified\":\"1f64b-1f3ff\",\"native\":\"\uD83D\uDE4B\uD83C\uDFFF\"}],\"version\":1},\"man-raising-hand\":{\"id\":\"man-raising-hand\",\"name\":\"Man Raising Hand\",\"keywords\":[\"raising-hand\",\"male\",\"boy\"],\"skins\":[{\"unified\":\"1f64b-200d-2642-fe0f\",\"native\":\"\uD83D\uDE4B\u200D\u2642\uFE0F\"},{\"unified\":\"1f64b-1f3fb-200d-2642-fe0f\",\"native\":\"\uD83D\uDE4B\uD83C\uDFFB\u200D\u2642\uFE0F\"},{\"unified\":\"1f64b-1f3fc-200d-2642-fe0f\",\"native\":\"\uD83D\uDE4B\uD83C\uDFFC\u200D\u2642\uFE0F\"},{\"unified\":\"1f64b-1f3fd-200d-2642-fe0f\",\"native\":\"\uD83D\uDE4B\uD83C\uDFFD\u200D\u2642\uFE0F\"},{\"unified\":\"1f64b-1f3fe-200d-2642-fe0f\",\"native\":\"\uD83D\uDE4B\uD83C\uDFFE\u200D\u2642\uFE0F\"},{\"unified\":\"1f64b-1f3ff-200d-2642-fe0f\",\"native\":\"\uD83D\uDE4B\uD83C\uDFFF\u200D\u2642\uFE0F\"}],\"version\":4},\"woman-raising-hand\":{\"id\":\"woman-raising-hand\",\"name\":\"Woman Raising Hand\",\"keywords\":[\"raising-hand\",\"female\",\"girl\"],\"skins\":[{\"unified\":\"1f64b-200d-2640-fe0f\",\"native\":\"\uD83D\uDE4B\u200D\u2640\uFE0F\"},{\"unified\":\"1f64b-1f3fb-200d-2640-fe0f\",\"native\":\"\uD83D\uDE4B\uD83C\uDFFB\u200D\u2640\uFE0F\"},{\"unified\":\"1f64b-1f3fc-200d-2640-fe0f\",\"native\":\"\uD83D\uDE4B\uD83C\uDFFC\u200D\u2640\uFE0F\"},{\"unified\":\"1f64b-1f3fd-200d-2640-fe0f\",\"native\":\"\uD83D\uDE4B\uD83C\uDFFD\u200D\u2640\uFE0F\"},{\"unified\":\"1f64b-1f3fe-200d-2640-fe0f\",\"native\":\"\uD83D\uDE4B\uD83C\uDFFE\u200D\u2640\uFE0F\"},{\"unified\":\"1f64b-1f3ff-200d-2640-fe0f\",\"native\":\"\uD83D\uDE4B\uD83C\uDFFF\u200D\u2640\uFE0F\"}],\"version\":4},\"deaf_person\":{\"id\":\"deaf_person\",\"name\":\"Deaf Person\",\"keywords\":[\"accessibility\"],\"skins\":[{\"unified\":\"1f9cf\",\"native\":\"\uD83E\uDDCF\"},{\"unified\":\"1f9cf-1f3fb\",\"native\":\"\uD83E\uDDCF\uD83C\uDFFB\"},{\"unified\":\"1f9cf-1f3fc\",\"native\":\"\uD83E\uDDCF\uD83C\uDFFC\"},{\"unified\":\"1f9cf-1f3fd\",\"native\":\"\uD83E\uDDCF\uD83C\uDFFD\"},{\"unified\":\"1f9cf-1f3fe\",\"native\":\"\uD83E\uDDCF\uD83C\uDFFE\"},{\"unified\":\"1f9cf-1f3ff\",\"native\":\"\uD83E\uDDCF\uD83C\uDFFF\"}],\"version\":12},\"deaf_man\":{\"id\":\"deaf_man\",\"name\":\"Deaf Man\",\"keywords\":[\"accessibility\"],\"skins\":[{\"unified\":\"1f9cf-200d-2642-fe0f\",\"native\":\"\uD83E\uDDCF\u200D\u2642\uFE0F\"},{\"unified\":\"1f9cf-1f3fb-200d-2642-fe0f\",\"native\":\"\uD83E\uDDCF\uD83C\uDFFB\u200D\u2642\uFE0F\"},{\"unified\":\"1f9cf-1f3fc-200d-2642-fe0f\",\"native\":\"\uD83E\uDDCF\uD83C\uDFFC\u200D\u2642\uFE0F\"},{\"unified\":\"1f9cf-1f3fd-200d-2642-fe0f\",\"native\":\"\uD83E\uDDCF\uD83C\uDFFD\u200D\u2642\uFE0F\"},{\"unified\":\"1f9cf-1f3fe-200d-2642-fe0f\",\"native\":\"\uD83E\uDDCF\uD83C\uDFFE\u200D\u2642\uFE0F\"},{\"unified\":\"1f9cf-1f3ff-200d-2642-fe0f\",\"native\":\"\uD83E\uDDCF\uD83C\uDFFF\u200D\u2642\uFE0F\"}],\"version\":12},\"deaf_woman\":{\"id\":\"deaf_woman\",\"name\":\"Deaf Woman\",\"keywords\":[\"accessibility\"],\"skins\":[{\"unified\":\"1f9cf-200d-2640-fe0f\",\"native\":\"\uD83E\uDDCF\u200D\u2640\uFE0F\"},{\"unified\":\"1f9cf-1f3fb-200d-2640-fe0f\",\"native\":\"\uD83E\uDDCF\uD83C\uDFFB\u200D\u2640\uFE0F\"},{\"unified\":\"1f9cf-1f3fc-200d-2640-fe0f\",\"native\":\"\uD83E\uDDCF\uD83C\uDFFC\u200D\u2640\uFE0F\"},{\"unified\":\"1f9cf-1f3fd-200d-2640-fe0f\",\"native\":\"\uD83E\uDDCF\uD83C\uDFFD\u200D\u2640\uFE0F\"},{\"unified\":\"1f9cf-1f3fe-200d-2640-fe0f\",\"native\":\"\uD83E\uDDCF\uD83C\uDFFE\u200D\u2640\uFE0F\"},{\"unified\":\"1f9cf-1f3ff-200d-2640-fe0f\",\"native\":\"\uD83E\uDDCF\uD83C\uDFFF\u200D\u2640\uFE0F\"}],\"version\":12},\"bow\":{\"id\":\"bow\",\"name\":\"Person Bowing\",\"keywords\":[\"bow\",\"respectiful\"],\"skins\":[{\"unified\":\"1f647\",\"native\":\"\uD83D\uDE47\"},{\"unified\":\"1f647-1f3fb\",\"native\":\"\uD83D\uDE47\uD83C\uDFFB\"},{\"unified\":\"1f647-1f3fc\",\"native\":\"\uD83D\uDE47\uD83C\uDFFC\"},{\"unified\":\"1f647-1f3fd\",\"native\":\"\uD83D\uDE47\uD83C\uDFFD\"},{\"unified\":\"1f647-1f3fe\",\"native\":\"\uD83D\uDE47\uD83C\uDFFE\"},{\"unified\":\"1f647-1f3ff\",\"native\":\"\uD83D\uDE47\uD83C\uDFFF\"}],\"version\":1},\"man-bowing\":{\"id\":\"man-bowing\",\"name\":\"Man Bowing\",\"keywords\":[\"male\",\"boy\"],\"skins\":[{\"unified\":\"1f647-200d-2642-fe0f\",\"native\":\"\uD83D\uDE47\u200D\u2642\uFE0F\"},{\"unified\":\"1f647-1f3fb-200d-2642-fe0f\",\"native\":\"\uD83D\uDE47\uD83C\uDFFB\u200D\u2642\uFE0F\"},{\"unified\":\"1f647-1f3fc-200d-2642-fe0f\",\"native\":\"\uD83D\uDE47\uD83C\uDFFC\u200D\u2642\uFE0F\"},{\"unified\":\"1f647-1f3fd-200d-2642-fe0f\",\"native\":\"\uD83D\uDE47\uD83C\uDFFD\u200D\u2642\uFE0F\"},{\"unified\":\"1f647-1f3fe-200d-2642-fe0f\",\"native\":\"\uD83D\uDE47\uD83C\uDFFE\u200D\u2642\uFE0F\"},{\"unified\":\"1f647-1f3ff-200d-2642-fe0f\",\"native\":\"\uD83D\uDE47\uD83C\uDFFF\u200D\u2642\uFE0F\"}],\"version\":4},\"woman-bowing\":{\"id\":\"woman-bowing\",\"name\":\"Woman Bowing\",\"keywords\":[\"female\",\"girl\"],\"skins\":[{\"unified\":\"1f647-200d-2640-fe0f\",\"native\":\"\uD83D\uDE47\u200D\u2640\uFE0F\"},{\"unified\":\"1f647-1f3fb-200d-2640-fe0f\",\"native\":\"\uD83D\uDE47\uD83C\uDFFB\u200D\u2640\uFE0F\"},{\"unified\":\"1f647-1f3fc-200d-2640-fe0f\",\"native\":\"\uD83D\uDE47\uD83C\uDFFC\u200D\u2640\uFE0F\"},{\"unified\":\"1f647-1f3fd-200d-2640-fe0f\",\"native\":\"\uD83D\uDE47\uD83C\uDFFD\u200D\u2640\uFE0F\"},{\"unified\":\"1f647-1f3fe-200d-2640-fe0f\",\"native\":\"\uD83D\uDE47\uD83C\uDFFE\u200D\u2640\uFE0F\"},{\"unified\":\"1f647-1f3ff-200d-2640-fe0f\",\"native\":\"\uD83D\uDE47\uD83C\uDFFF\u200D\u2640\uFE0F\"}],\"version\":4},\"face_palm\":{\"id\":\"face_palm\",\"name\":\"Face Palm\",\"keywords\":[\"person\",\"facepalming\",\"disappointed\"],\"skins\":[{\"unified\":\"1f926\",\"native\":\"\uD83E\uDD26\"},{\"unified\":\"1f926-1f3fb\",\"native\":\"\uD83E\uDD26\uD83C\uDFFB\"},{\"unified\":\"1f926-1f3fc\",\"native\":\"\uD83E\uDD26\uD83C\uDFFC\"},{\"unified\":\"1f926-1f3fd\",\"native\":\"\uD83E\uDD26\uD83C\uDFFD\"},{\"unified\":\"1f926-1f3fe\",\"native\":\"\uD83E\uDD26\uD83C\uDFFE\"},{\"unified\":\"1f926-1f3ff\",\"native\":\"\uD83E\uDD26\uD83C\uDFFF\"}],\"version\":3},\"man-facepalming\":{\"id\":\"man-facepalming\",\"name\":\"Man Facepalming\",\"keywords\":[\"male\",\"boy\",\"disbelief\"],\"skins\":[{\"unified\":\"1f926-200d-2642-fe0f\",\"native\":\"\uD83E\uDD26\u200D\u2642\uFE0F\"},{\"unified\":\"1f926-1f3fb-200d-2642-fe0f\",\"native\":\"\uD83E\uDD26\uD83C\uDFFB\u200D\u2642\uFE0F\"},{\"unified\":\"1f926-1f3fc-200d-2642-fe0f\",\"native\":\"\uD83E\uDD26\uD83C\uDFFC\u200D\u2642\uFE0F\"},{\"unified\":\"1f926-1f3fd-200d-2642-fe0f\",\"native\":\"\uD83E\uDD26\uD83C\uDFFD\u200D\u2642\uFE0F\"},{\"unified\":\"1f926-1f3fe-200d-2642-fe0f\",\"native\":\"\uD83E\uDD26\uD83C\uDFFE\u200D\u2642\uFE0F\"},{\"unified\":\"1f926-1f3ff-200d-2642-fe0f\",\"native\":\"\uD83E\uDD26\uD83C\uDFFF\u200D\u2642\uFE0F\"}],\"version\":4},\"woman-facepalming\":{\"id\":\"woman-facepalming\",\"name\":\"Woman Facepalming\",\"keywords\":[\"female\",\"girl\",\"disbelief\"],\"skins\":[{\"unified\":\"1f926-200d-2640-fe0f\",\"native\":\"\uD83E\uDD26\u200D\u2640\uFE0F\"},{\"unified\":\"1f926-1f3fb-200d-2640-fe0f\",\"native\":\"\uD83E\uDD26\uD83C\uDFFB\u200D\u2640\uFE0F\"},{\"unified\":\"1f926-1f3fc-200d-2640-fe0f\",\"native\":\"\uD83E\uDD26\uD83C\uDFFC\u200D\u2640\uFE0F\"},{\"unified\":\"1f926-1f3fd-200d-2640-fe0f\",\"native\":\"\uD83E\uDD26\uD83C\uDFFD\u200D\u2640\uFE0F\"},{\"unified\":\"1f926-1f3fe-200d-2640-fe0f\",\"native\":\"\uD83E\uDD26\uD83C\uDFFE\u200D\u2640\uFE0F\"},{\"unified\":\"1f926-1f3ff-200d-2640-fe0f\",\"native\":\"\uD83E\uDD26\uD83C\uDFFF\u200D\u2640\uFE0F\"}],\"version\":4},\"shrug\":{\"id\":\"shrug\",\"name\":\"Shrug\",\"keywords\":[\"person\",\"shrugging\",\"regardless\"],\"skins\":[{\"unified\":\"1f937\",\"native\":\"\uD83E\uDD37\"},{\"unified\":\"1f937-1f3fb\",\"native\":\"\uD83E\uDD37\uD83C\uDFFB\"},{\"unified\":\"1f937-1f3fc\",\"native\":\"\uD83E\uDD37\uD83C\uDFFC\"},{\"unified\":\"1f937-1f3fd\",\"native\":\"\uD83E\uDD37\uD83C\uDFFD\"},{\"unified\":\"1f937-1f3fe\",\"native\":\"\uD83E\uDD37\uD83C\uDFFE\"},{\"unified\":\"1f937-1f3ff\",\"native\":\"\uD83E\uDD37\uD83C\uDFFF\"}],\"version\":3},\"man-shrugging\":{\"id\":\"man-shrugging\",\"name\":\"Man Shrugging\",\"keywords\":[\"male\",\"boy\",\"confused\",\"indifferent\",\"doubt\"],\"skins\":[{\"unified\":\"1f937-200d-2642-fe0f\",\"native\":\"\uD83E\uDD37\u200D\u2642\uFE0F\"},{\"unified\":\"1f937-1f3fb-200d-2642-fe0f\",\"native\":\"\uD83E\uDD37\uD83C\uDFFB\u200D\u2642\uFE0F\"},{\"unified\":\"1f937-1f3fc-200d-2642-fe0f\",\"native\":\"\uD83E\uDD37\uD83C\uDFFC\u200D\u2642\uFE0F\"},{\"unified\":\"1f937-1f3fd-200d-2642-fe0f\",\"native\":\"\uD83E\uDD37\uD83C\uDFFD\u200D\u2642\uFE0F\"},{\"unified\":\"1f937-1f3fe-200d-2642-fe0f\",\"native\":\"\uD83E\uDD37\uD83C\uDFFE\u200D\u2642\uFE0F\"},{\"unified\":\"1f937-1f3ff-200d-2642-fe0f\",\"native\":\"\uD83E\uDD37\uD83C\uDFFF\u200D\u2642\uFE0F\"}],\"version\":4},\"woman-shrugging\":{\"id\":\"woman-shrugging\",\"name\":\"Woman Shrugging\",\"keywords\":[\"female\",\"girl\",\"confused\",\"indifferent\",\"doubt\"],\"skins\":[{\"unified\":\"1f937-200d-2640-fe0f\",\"native\":\"\uD83E\uDD37\u200D\u2640\uFE0F\"},{\"unified\":\"1f937-1f3fb-200d-2640-fe0f\",\"native\":\"\uD83E\uDD37\uD83C\uDFFB\u200D\u2640\uFE0F\"},{\"unified\":\"1f937-1f3fc-200d-2640-fe0f\",\"native\":\"\uD83E\uDD37\uD83C\uDFFC\u200D\u2640\uFE0F\"},{\"unified\":\"1f937-1f3fd-200d-2640-fe0f\",\"native\":\"\uD83E\uDD37\uD83C\uDFFD\u200D\u2640\uFE0F\"},{\"unified\":\"1f937-1f3fe-200d-2640-fe0f\",\"native\":\"\uD83E\uDD37\uD83C\uDFFE\u200D\u2640\uFE0F\"},{\"unified\":\"1f937-1f3ff-200d-2640-fe0f\",\"native\":\"\uD83E\uDD37\uD83C\uDFFF\u200D\u2640\uFE0F\"}],\"version\":4},\"health_worker\":{\"id\":\"health_worker\",\"name\":\"Health Worker\",\"keywords\":[\"hospital\"],\"skins\":[{\"unified\":\"1f9d1-200d-2695-fe0f\",\"native\":\"\uD83E\uDDD1\u200D\u2695\uFE0F\"},{\"unified\":\"1f9d1-1f3fb-200d-2695-fe0f\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFB\u200D\u2695\uFE0F\"},{\"unified\":\"1f9d1-1f3fc-200d-2695-fe0f\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFC\u200D\u2695\uFE0F\"},{\"unified\":\"1f9d1-1f3fd-200d-2695-fe0f\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFD\u200D\u2695\uFE0F\"},{\"unified\":\"1f9d1-1f3fe-200d-2695-fe0f\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFE\u200D\u2695\uFE0F\"},{\"unified\":\"1f9d1-1f3ff-200d-2695-fe0f\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFF\u200D\u2695\uFE0F\"}],\"version\":12.1},\"male-doctor\":{\"id\":\"male-doctor\",\"name\":\"Man Health Worker\",\"keywords\":[\"male\",\"doctor\",\"nurse\",\"therapist\",\"healthcare\",\"human\"],\"skins\":[{\"unified\":\"1f468-200d-2695-fe0f\",\"native\":\"\uD83D\uDC68\u200D\u2695\uFE0F\"},{\"unified\":\"1f468-1f3fb-200d-2695-fe0f\",\"native\":\"\uD83D\uDC68\uD83C\uDFFB\u200D\u2695\uFE0F\"},{\"unified\":\"1f468-1f3fc-200d-2695-fe0f\",\"native\":\"\uD83D\uDC68\uD83C\uDFFC\u200D\u2695\uFE0F\"},{\"unified\":\"1f468-1f3fd-200d-2695-fe0f\",\"native\":\"\uD83D\uDC68\uD83C\uDFFD\u200D\u2695\uFE0F\"},{\"unified\":\"1f468-1f3fe-200d-2695-fe0f\",\"native\":\"\uD83D\uDC68\uD83C\uDFFE\u200D\u2695\uFE0F\"},{\"unified\":\"1f468-1f3ff-200d-2695-fe0f\",\"native\":\"\uD83D\uDC68\uD83C\uDFFF\u200D\u2695\uFE0F\"}],\"version\":4},\"female-doctor\":{\"id\":\"female-doctor\",\"name\":\"Woman Health Worker\",\"keywords\":[\"female\",\"doctor\",\"nurse\",\"therapist\",\"healthcare\",\"human\"],\"skins\":[{\"unified\":\"1f469-200d-2695-fe0f\",\"native\":\"\uD83D\uDC69\u200D\u2695\uFE0F\"},{\"unified\":\"1f469-1f3fb-200d-2695-fe0f\",\"native\":\"\uD83D\uDC69\uD83C\uDFFB\u200D\u2695\uFE0F\"},{\"unified\":\"1f469-1f3fc-200d-2695-fe0f\",\"native\":\"\uD83D\uDC69\uD83C\uDFFC\u200D\u2695\uFE0F\"},{\"unified\":\"1f469-1f3fd-200d-2695-fe0f\",\"native\":\"\uD83D\uDC69\uD83C\uDFFD\u200D\u2695\uFE0F\"},{\"unified\":\"1f469-1f3fe-200d-2695-fe0f\",\"native\":\"\uD83D\uDC69\uD83C\uDFFE\u200D\u2695\uFE0F\"},{\"unified\":\"1f469-1f3ff-200d-2695-fe0f\",\"native\":\"\uD83D\uDC69\uD83C\uDFFF\u200D\u2695\uFE0F\"}],\"version\":4},\"student\":{\"id\":\"student\",\"name\":\"Student\",\"keywords\":[\"learn\"],\"skins\":[{\"unified\":\"1f9d1-200d-1f393\",\"native\":\"\uD83E\uDDD1\u200D\uD83C\uDF93\"},{\"unified\":\"1f9d1-1f3fb-200d-1f393\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFB\u200D\uD83C\uDF93\"},{\"unified\":\"1f9d1-1f3fc-200d-1f393\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFC\u200D\uD83C\uDF93\"},{\"unified\":\"1f9d1-1f3fd-200d-1f393\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFD\u200D\uD83C\uDF93\"},{\"unified\":\"1f9d1-1f3fe-200d-1f393\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFE\u200D\uD83C\uDF93\"},{\"unified\":\"1f9d1-1f3ff-200d-1f393\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFF\u200D\uD83C\uDF93\"}],\"version\":12.1},\"male-student\":{\"id\":\"male-student\",\"name\":\"Man Student\",\"keywords\":[\"male\",\"graduate\",\"human\"],\"skins\":[{\"unified\":\"1f468-200d-1f393\",\"native\":\"\uD83D\uDC68\u200D\uD83C\uDF93\"},{\"unified\":\"1f468-1f3fb-200d-1f393\",\"native\":\"\uD83D\uDC68\uD83C\uDFFB\u200D\uD83C\uDF93\"},{\"unified\":\"1f468-1f3fc-200d-1f393\",\"native\":\"\uD83D\uDC68\uD83C\uDFFC\u200D\uD83C\uDF93\"},{\"unified\":\"1f468-1f3fd-200d-1f393\",\"native\":\"\uD83D\uDC68\uD83C\uDFFD\u200D\uD83C\uDF93\"},{\"unified\":\"1f468-1f3fe-200d-1f393\",\"native\":\"\uD83D\uDC68\uD83C\uDFFE\u200D\uD83C\uDF93\"},{\"unified\":\"1f468-1f3ff-200d-1f393\",\"native\":\"\uD83D\uDC68\uD83C\uDFFF\u200D\uD83C\uDF93\"}],\"version\":4},\"female-student\":{\"id\":\"female-student\",\"name\":\"Woman Student\",\"keywords\":[\"female\",\"graduate\",\"human\"],\"skins\":[{\"unified\":\"1f469-200d-1f393\",\"native\":\"\uD83D\uDC69\u200D\uD83C\uDF93\"},{\"unified\":\"1f469-1f3fb-200d-1f393\",\"native\":\"\uD83D\uDC69\uD83C\uDFFB\u200D\uD83C\uDF93\"},{\"unified\":\"1f469-1f3fc-200d-1f393\",\"native\":\"\uD83D\uDC69\uD83C\uDFFC\u200D\uD83C\uDF93\"},{\"unified\":\"1f469-1f3fd-200d-1f393\",\"native\":\"\uD83D\uDC69\uD83C\uDFFD\u200D\uD83C\uDF93\"},{\"unified\":\"1f469-1f3fe-200d-1f393\",\"native\":\"\uD83D\uDC69\uD83C\uDFFE\u200D\uD83C\uDF93\"},{\"unified\":\"1f469-1f3ff-200d-1f393\",\"native\":\"\uD83D\uDC69\uD83C\uDFFF\u200D\uD83C\uDF93\"}],\"version\":4},\"teacher\":{\"id\":\"teacher\",\"name\":\"Teacher\",\"keywords\":[\"professor\"],\"skins\":[{\"unified\":\"1f9d1-200d-1f3eb\",\"native\":\"\uD83E\uDDD1\u200D\uD83C\uDFEB\"},{\"unified\":\"1f9d1-1f3fb-200d-1f3eb\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFB\u200D\uD83C\uDFEB\"},{\"unified\":\"1f9d1-1f3fc-200d-1f3eb\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFC\u200D\uD83C\uDFEB\"},{\"unified\":\"1f9d1-1f3fd-200d-1f3eb\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFD\u200D\uD83C\uDFEB\"},{\"unified\":\"1f9d1-1f3fe-200d-1f3eb\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFE\u200D\uD83C\uDFEB\"},{\"unified\":\"1f9d1-1f3ff-200d-1f3eb\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFF\u200D\uD83C\uDFEB\"}],\"version\":12.1},\"male-teacher\":{\"id\":\"male-teacher\",\"name\":\"Man Teacher\",\"keywords\":[\"male\",\"instructor\",\"professor\",\"human\"],\"skins\":[{\"unified\":\"1f468-200d-1f3eb\",\"native\":\"\uD83D\uDC68\u200D\uD83C\uDFEB\"},{\"unified\":\"1f468-1f3fb-200d-1f3eb\",\"native\":\"\uD83D\uDC68\uD83C\uDFFB\u200D\uD83C\uDFEB\"},{\"unified\":\"1f468-1f3fc-200d-1f3eb\",\"native\":\"\uD83D\uDC68\uD83C\uDFFC\u200D\uD83C\uDFEB\"},{\"unified\":\"1f468-1f3fd-200d-1f3eb\",\"native\":\"\uD83D\uDC68\uD83C\uDFFD\u200D\uD83C\uDFEB\"},{\"unified\":\"1f468-1f3fe-200d-1f3eb\",\"native\":\"\uD83D\uDC68\uD83C\uDFFE\u200D\uD83C\uDFEB\"},{\"unified\":\"1f468-1f3ff-200d-1f3eb\",\"native\":\"\uD83D\uDC68\uD83C\uDFFF\u200D\uD83C\uDFEB\"}],\"version\":4},\"female-teacher\":{\"id\":\"female-teacher\",\"name\":\"Woman Teacher\",\"keywords\":[\"female\",\"instructor\",\"professor\",\"human\"],\"skins\":[{\"unified\":\"1f469-200d-1f3eb\",\"native\":\"\uD83D\uDC69\u200D\uD83C\uDFEB\"},{\"unified\":\"1f469-1f3fb-200d-1f3eb\",\"native\":\"\uD83D\uDC69\uD83C\uDFFB\u200D\uD83C\uDFEB\"},{\"unified\":\"1f469-1f3fc-200d-1f3eb\",\"native\":\"\uD83D\uDC69\uD83C\uDFFC\u200D\uD83C\uDFEB\"},{\"unified\":\"1f469-1f3fd-200d-1f3eb\",\"native\":\"\uD83D\uDC69\uD83C\uDFFD\u200D\uD83C\uDFEB\"},{\"unified\":\"1f469-1f3fe-200d-1f3eb\",\"native\":\"\uD83D\uDC69\uD83C\uDFFE\u200D\uD83C\uDFEB\"},{\"unified\":\"1f469-1f3ff-200d-1f3eb\",\"native\":\"\uD83D\uDC69\uD83C\uDFFF\u200D\uD83C\uDFEB\"}],\"version\":4},\"judge\":{\"id\":\"judge\",\"name\":\"Judge\",\"keywords\":[\"law\"],\"skins\":[{\"unified\":\"1f9d1-200d-2696-fe0f\",\"native\":\"\uD83E\uDDD1\u200D\u2696\uFE0F\"},{\"unified\":\"1f9d1-1f3fb-200d-2696-fe0f\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFB\u200D\u2696\uFE0F\"},{\"unified\":\"1f9d1-1f3fc-200d-2696-fe0f\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFC\u200D\u2696\uFE0F\"},{\"unified\":\"1f9d1-1f3fd-200d-2696-fe0f\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFD\u200D\u2696\uFE0F\"},{\"unified\":\"1f9d1-1f3fe-200d-2696-fe0f\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFE\u200D\u2696\uFE0F\"},{\"unified\":\"1f9d1-1f3ff-200d-2696-fe0f\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFF\u200D\u2696\uFE0F\"}],\"version\":12.1},\"male-judge\":{\"id\":\"male-judge\",\"name\":\"Man Judge\",\"keywords\":[\"male\",\"justice\",\"court\",\"human\"],\"skins\":[{\"unified\":\"1f468-200d-2696-fe0f\",\"native\":\"\uD83D\uDC68\u200D\u2696\uFE0F\"},{\"unified\":\"1f468-1f3fb-200d-2696-fe0f\",\"native\":\"\uD83D\uDC68\uD83C\uDFFB\u200D\u2696\uFE0F\"},{\"unified\":\"1f468-1f3fc-200d-2696-fe0f\",\"native\":\"\uD83D\uDC68\uD83C\uDFFC\u200D\u2696\uFE0F\"},{\"unified\":\"1f468-1f3fd-200d-2696-fe0f\",\"native\":\"\uD83D\uDC68\uD83C\uDFFD\u200D\u2696\uFE0F\"},{\"unified\":\"1f468-1f3fe-200d-2696-fe0f\",\"native\":\"\uD83D\uDC68\uD83C\uDFFE\u200D\u2696\uFE0F\"},{\"unified\":\"1f468-1f3ff-200d-2696-fe0f\",\"native\":\"\uD83D\uDC68\uD83C\uDFFF\u200D\u2696\uFE0F\"}],\"version\":4},\"female-judge\":{\"id\":\"female-judge\",\"name\":\"Woman Judge\",\"keywords\":[\"female\",\"justice\",\"court\",\"human\"],\"skins\":[{\"unified\":\"1f469-200d-2696-fe0f\",\"native\":\"\uD83D\uDC69\u200D\u2696\uFE0F\"},{\"unified\":\"1f469-1f3fb-200d-2696-fe0f\",\"native\":\"\uD83D\uDC69\uD83C\uDFFB\u200D\u2696\uFE0F\"},{\"unified\":\"1f469-1f3fc-200d-2696-fe0f\",\"native\":\"\uD83D\uDC69\uD83C\uDFFC\u200D\u2696\uFE0F\"},{\"unified\":\"1f469-1f3fd-200d-2696-fe0f\",\"native\":\"\uD83D\uDC69\uD83C\uDFFD\u200D\u2696\uFE0F\"},{\"unified\":\"1f469-1f3fe-200d-2696-fe0f\",\"native\":\"\uD83D\uDC69\uD83C\uDFFE\u200D\u2696\uFE0F\"},{\"unified\":\"1f469-1f3ff-200d-2696-fe0f\",\"native\":\"\uD83D\uDC69\uD83C\uDFFF\u200D\u2696\uFE0F\"}],\"version\":4},\"farmer\":{\"id\":\"farmer\",\"name\":\"Farmer\",\"keywords\":[\"crops\"],\"skins\":[{\"unified\":\"1f9d1-200d-1f33e\",\"native\":\"\uD83E\uDDD1\u200D\uD83C\uDF3E\"},{\"unified\":\"1f9d1-1f3fb-200d-1f33e\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFB\u200D\uD83C\uDF3E\"},{\"unified\":\"1f9d1-1f3fc-200d-1f33e\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFC\u200D\uD83C\uDF3E\"},{\"unified\":\"1f9d1-1f3fd-200d-1f33e\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFD\u200D\uD83C\uDF3E\"},{\"unified\":\"1f9d1-1f3fe-200d-1f33e\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFE\u200D\uD83C\uDF3E\"},{\"unified\":\"1f9d1-1f3ff-200d-1f33e\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFF\u200D\uD83C\uDF3E\"}],\"version\":12.1},\"male-farmer\":{\"id\":\"male-farmer\",\"name\":\"Man Farmer\",\"keywords\":[\"male\",\"rancher\",\"gardener\",\"human\"],\"skins\":[{\"unified\":\"1f468-200d-1f33e\",\"native\":\"\uD83D\uDC68\u200D\uD83C\uDF3E\"},{\"unified\":\"1f468-1f3fb-200d-1f33e\",\"native\":\"\uD83D\uDC68\uD83C\uDFFB\u200D\uD83C\uDF3E\"},{\"unified\":\"1f468-1f3fc-200d-1f33e\",\"native\":\"\uD83D\uDC68\uD83C\uDFFC\u200D\uD83C\uDF3E\"},{\"unified\":\"1f468-1f3fd-200d-1f33e\",\"native\":\"\uD83D\uDC68\uD83C\uDFFD\u200D\uD83C\uDF3E\"},{\"unified\":\"1f468-1f3fe-200d-1f33e\",\"native\":\"\uD83D\uDC68\uD83C\uDFFE\u200D\uD83C\uDF3E\"},{\"unified\":\"1f468-1f3ff-200d-1f33e\",\"native\":\"\uD83D\uDC68\uD83C\uDFFF\u200D\uD83C\uDF3E\"}],\"version\":4},\"female-farmer\":{\"id\":\"female-farmer\",\"name\":\"Woman Farmer\",\"keywords\":[\"female\",\"rancher\",\"gardener\",\"human\"],\"skins\":[{\"unified\":\"1f469-200d-1f33e\",\"native\":\"\uD83D\uDC69\u200D\uD83C\uDF3E\"},{\"unified\":\"1f469-1f3fb-200d-1f33e\",\"native\":\"\uD83D\uDC69\uD83C\uDFFB\u200D\uD83C\uDF3E\"},{\"unified\":\"1f469-1f3fc-200d-1f33e\",\"native\":\"\uD83D\uDC69\uD83C\uDFFC\u200D\uD83C\uDF3E\"},{\"unified\":\"1f469-1f3fd-200d-1f33e\",\"native\":\"\uD83D\uDC69\uD83C\uDFFD\u200D\uD83C\uDF3E\"},{\"unified\":\"1f469-1f3fe-200d-1f33e\",\"native\":\"\uD83D\uDC69\uD83C\uDFFE\u200D\uD83C\uDF3E\"},{\"unified\":\"1f469-1f3ff-200d-1f33e\",\"native\":\"\uD83D\uDC69\uD83C\uDFFF\u200D\uD83C\uDF3E\"}],\"version\":4},\"cook\":{\"id\":\"cook\",\"name\":\"Cook\",\"keywords\":[\"food\",\"kitchen\",\"culinary\"],\"skins\":[{\"unified\":\"1f9d1-200d-1f373\",\"native\":\"\uD83E\uDDD1\u200D\uD83C\uDF73\"},{\"unified\":\"1f9d1-1f3fb-200d-1f373\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFB\u200D\uD83C\uDF73\"},{\"unified\":\"1f9d1-1f3fc-200d-1f373\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFC\u200D\uD83C\uDF73\"},{\"unified\":\"1f9d1-1f3fd-200d-1f373\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFD\u200D\uD83C\uDF73\"},{\"unified\":\"1f9d1-1f3fe-200d-1f373\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFE\u200D\uD83C\uDF73\"},{\"unified\":\"1f9d1-1f3ff-200d-1f373\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFF\u200D\uD83C\uDF73\"}],\"version\":12.1},\"male-cook\":{\"id\":\"male-cook\",\"name\":\"Man Cook\",\"keywords\":[\"male\",\"chef\",\"human\"],\"skins\":[{\"unified\":\"1f468-200d-1f373\",\"native\":\"\uD83D\uDC68\u200D\uD83C\uDF73\"},{\"unified\":\"1f468-1f3fb-200d-1f373\",\"native\":\"\uD83D\uDC68\uD83C\uDFFB\u200D\uD83C\uDF73\"},{\"unified\":\"1f468-1f3fc-200d-1f373\",\"native\":\"\uD83D\uDC68\uD83C\uDFFC\u200D\uD83C\uDF73\"},{\"unified\":\"1f468-1f3fd-200d-1f373\",\"native\":\"\uD83D\uDC68\uD83C\uDFFD\u200D\uD83C\uDF73\"},{\"unified\":\"1f468-1f3fe-200d-1f373\",\"native\":\"\uD83D\uDC68\uD83C\uDFFE\u200D\uD83C\uDF73\"},{\"unified\":\"1f468-1f3ff-200d-1f373\",\"native\":\"\uD83D\uDC68\uD83C\uDFFF\u200D\uD83C\uDF73\"}],\"version\":4},\"female-cook\":{\"id\":\"female-cook\",\"name\":\"Woman Cook\",\"keywords\":[\"female\",\"chef\",\"human\"],\"skins\":[{\"unified\":\"1f469-200d-1f373\",\"native\":\"\uD83D\uDC69\u200D\uD83C\uDF73\"},{\"unified\":\"1f469-1f3fb-200d-1f373\",\"native\":\"\uD83D\uDC69\uD83C\uDFFB\u200D\uD83C\uDF73\"},{\"unified\":\"1f469-1f3fc-200d-1f373\",\"native\":\"\uD83D\uDC69\uD83C\uDFFC\u200D\uD83C\uDF73\"},{\"unified\":\"1f469-1f3fd-200d-1f373\",\"native\":\"\uD83D\uDC69\uD83C\uDFFD\u200D\uD83C\uDF73\"},{\"unified\":\"1f469-1f3fe-200d-1f373\",\"native\":\"\uD83D\uDC69\uD83C\uDFFE\u200D\uD83C\uDF73\"},{\"unified\":\"1f469-1f3ff-200d-1f373\",\"native\":\"\uD83D\uDC69\uD83C\uDFFF\u200D\uD83C\uDF73\"}],\"version\":4},\"mechanic\":{\"id\":\"mechanic\",\"name\":\"Mechanic\",\"keywords\":[\"worker\",\"technician\"],\"skins\":[{\"unified\":\"1f9d1-200d-1f527\",\"native\":\"\uD83E\uDDD1\u200D\uD83D\uDD27\"},{\"unified\":\"1f9d1-1f3fb-200d-1f527\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFB\u200D\uD83D\uDD27\"},{\"unified\":\"1f9d1-1f3fc-200d-1f527\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFC\u200D\uD83D\uDD27\"},{\"unified\":\"1f9d1-1f3fd-200d-1f527\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFD\u200D\uD83D\uDD27\"},{\"unified\":\"1f9d1-1f3fe-200d-1f527\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFE\u200D\uD83D\uDD27\"},{\"unified\":\"1f9d1-1f3ff-200d-1f527\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFF\u200D\uD83D\uDD27\"}],\"version\":12.1},\"male-mechanic\":{\"id\":\"male-mechanic\",\"name\":\"Man Mechanic\",\"keywords\":[\"male\",\"plumber\",\"human\",\"wrench\"],\"skins\":[{\"unified\":\"1f468-200d-1f527\",\"native\":\"\uD83D\uDC68\u200D\uD83D\uDD27\"},{\"unified\":\"1f468-1f3fb-200d-1f527\",\"native\":\"\uD83D\uDC68\uD83C\uDFFB\u200D\uD83D\uDD27\"},{\"unified\":\"1f468-1f3fc-200d-1f527\",\"native\":\"\uD83D\uDC68\uD83C\uDFFC\u200D\uD83D\uDD27\"},{\"unified\":\"1f468-1f3fd-200d-1f527\",\"native\":\"\uD83D\uDC68\uD83C\uDFFD\u200D\uD83D\uDD27\"},{\"unified\":\"1f468-1f3fe-200d-1f527\",\"native\":\"\uD83D\uDC68\uD83C\uDFFE\u200D\uD83D\uDD27\"},{\"unified\":\"1f468-1f3ff-200d-1f527\",\"native\":\"\uD83D\uDC68\uD83C\uDFFF\u200D\uD83D\uDD27\"}],\"version\":4},\"female-mechanic\":{\"id\":\"female-mechanic\",\"name\":\"Woman Mechanic\",\"keywords\":[\"female\",\"plumber\",\"human\",\"wrench\"],\"skins\":[{\"unified\":\"1f469-200d-1f527\",\"native\":\"\uD83D\uDC69\u200D\uD83D\uDD27\"},{\"unified\":\"1f469-1f3fb-200d-1f527\",\"native\":\"\uD83D\uDC69\uD83C\uDFFB\u200D\uD83D\uDD27\"},{\"unified\":\"1f469-1f3fc-200d-1f527\",\"native\":\"\uD83D\uDC69\uD83C\uDFFC\u200D\uD83D\uDD27\"},{\"unified\":\"1f469-1f3fd-200d-1f527\",\"native\":\"\uD83D\uDC69\uD83C\uDFFD\u200D\uD83D\uDD27\"},{\"unified\":\"1f469-1f3fe-200d-1f527\",\"native\":\"\uD83D\uDC69\uD83C\uDFFE\u200D\uD83D\uDD27\"},{\"unified\":\"1f469-1f3ff-200d-1f527\",\"native\":\"\uD83D\uDC69\uD83C\uDFFF\u200D\uD83D\uDD27\"}],\"version\":4},\"factory_worker\":{\"id\":\"factory_worker\",\"name\":\"Factory Worker\",\"keywords\":[\"labor\"],\"skins\":[{\"unified\":\"1f9d1-200d-1f3ed\",\"native\":\"\uD83E\uDDD1\u200D\uD83C\uDFED\"},{\"unified\":\"1f9d1-1f3fb-200d-1f3ed\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFB\u200D\uD83C\uDFED\"},{\"unified\":\"1f9d1-1f3fc-200d-1f3ed\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFC\u200D\uD83C\uDFED\"},{\"unified\":\"1f9d1-1f3fd-200d-1f3ed\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFD\u200D\uD83C\uDFED\"},{\"unified\":\"1f9d1-1f3fe-200d-1f3ed\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFE\u200D\uD83C\uDFED\"},{\"unified\":\"1f9d1-1f3ff-200d-1f3ed\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFF\u200D\uD83C\uDFED\"}],\"version\":12.1},\"male-factory-worker\":{\"id\":\"male-factory-worker\",\"name\":\"Man Factory Worker\",\"keywords\":[\"male\",\"factory-worker\",\"assembly\",\"industrial\",\"human\"],\"skins\":[{\"unified\":\"1f468-200d-1f3ed\",\"native\":\"\uD83D\uDC68\u200D\uD83C\uDFED\"},{\"unified\":\"1f468-1f3fb-200d-1f3ed\",\"native\":\"\uD83D\uDC68\uD83C\uDFFB\u200D\uD83C\uDFED\"},{\"unified\":\"1f468-1f3fc-200d-1f3ed\",\"native\":\"\uD83D\uDC68\uD83C\uDFFC\u200D\uD83C\uDFED\"},{\"unified\":\"1f468-1f3fd-200d-1f3ed\",\"native\":\"\uD83D\uDC68\uD83C\uDFFD\u200D\uD83C\uDFED\"},{\"unified\":\"1f468-1f3fe-200d-1f3ed\",\"native\":\"\uD83D\uDC68\uD83C\uDFFE\u200D\uD83C\uDFED\"},{\"unified\":\"1f468-1f3ff-200d-1f3ed\",\"native\":\"\uD83D\uDC68\uD83C\uDFFF\u200D\uD83C\uDFED\"}],\"version\":4},\"female-factory-worker\":{\"id\":\"female-factory-worker\",\"name\":\"Woman Factory Worker\",\"keywords\":[\"female\",\"factory-worker\",\"assembly\",\"industrial\",\"human\"],\"skins\":[{\"unified\":\"1f469-200d-1f3ed\",\"native\":\"\uD83D\uDC69\u200D\uD83C\uDFED\"},{\"unified\":\"1f469-1f3fb-200d-1f3ed\",\"native\":\"\uD83D\uDC69\uD83C\uDFFB\u200D\uD83C\uDFED\"},{\"unified\":\"1f469-1f3fc-200d-1f3ed\",\"native\":\"\uD83D\uDC69\uD83C\uDFFC\u200D\uD83C\uDFED\"},{\"unified\":\"1f469-1f3fd-200d-1f3ed\",\"native\":\"\uD83D\uDC69\uD83C\uDFFD\u200D\uD83C\uDFED\"},{\"unified\":\"1f469-1f3fe-200d-1f3ed\",\"native\":\"\uD83D\uDC69\uD83C\uDFFE\u200D\uD83C\uDFED\"},{\"unified\":\"1f469-1f3ff-200d-1f3ed\",\"native\":\"\uD83D\uDC69\uD83C\uDFFF\u200D\uD83C\uDFED\"}],\"version\":4},\"office_worker\":{\"id\":\"office_worker\",\"name\":\"Office Worker\",\"keywords\":[\"business\"],\"skins\":[{\"unified\":\"1f9d1-200d-1f4bc\",\"native\":\"\uD83E\uDDD1\u200D\uD83D\uDCBC\"},{\"unified\":\"1f9d1-1f3fb-200d-1f4bc\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFB\u200D\uD83D\uDCBC\"},{\"unified\":\"1f9d1-1f3fc-200d-1f4bc\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFC\u200D\uD83D\uDCBC\"},{\"unified\":\"1f9d1-1f3fd-200d-1f4bc\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFD\u200D\uD83D\uDCBC\"},{\"unified\":\"1f9d1-1f3fe-200d-1f4bc\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFE\u200D\uD83D\uDCBC\"},{\"unified\":\"1f9d1-1f3ff-200d-1f4bc\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFF\u200D\uD83D\uDCBC\"}],\"version\":12.1},\"male-office-worker\":{\"id\":\"male-office-worker\",\"name\":\"Man Office Worker\",\"keywords\":[\"male\",\"office-worker\",\"business\",\"manager\",\"human\"],\"skins\":[{\"unified\":\"1f468-200d-1f4bc\",\"native\":\"\uD83D\uDC68\u200D\uD83D\uDCBC\"},{\"unified\":\"1f468-1f3fb-200d-1f4bc\",\"native\":\"\uD83D\uDC68\uD83C\uDFFB\u200D\uD83D\uDCBC\"},{\"unified\":\"1f468-1f3fc-200d-1f4bc\",\"native\":\"\uD83D\uDC68\uD83C\uDFFC\u200D\uD83D\uDCBC\"},{\"unified\":\"1f468-1f3fd-200d-1f4bc\",\"native\":\"\uD83D\uDC68\uD83C\uDFFD\u200D\uD83D\uDCBC\"},{\"unified\":\"1f468-1f3fe-200d-1f4bc\",\"native\":\"\uD83D\uDC68\uD83C\uDFFE\u200D\uD83D\uDCBC\"},{\"unified\":\"1f468-1f3ff-200d-1f4bc\",\"native\":\"\uD83D\uDC68\uD83C\uDFFF\u200D\uD83D\uDCBC\"}],\"version\":4},\"female-office-worker\":{\"id\":\"female-office-worker\",\"name\":\"Woman Office Worker\",\"keywords\":[\"female\",\"office-worker\",\"business\",\"manager\",\"human\"],\"skins\":[{\"unified\":\"1f469-200d-1f4bc\",\"native\":\"\uD83D\uDC69\u200D\uD83D\uDCBC\"},{\"unified\":\"1f469-1f3fb-200d-1f4bc\",\"native\":\"\uD83D\uDC69\uD83C\uDFFB\u200D\uD83D\uDCBC\"},{\"unified\":\"1f469-1f3fc-200d-1f4bc\",\"native\":\"\uD83D\uDC69\uD83C\uDFFC\u200D\uD83D\uDCBC\"},{\"unified\":\"1f469-1f3fd-200d-1f4bc\",\"native\":\"\uD83D\uDC69\uD83C\uDFFD\u200D\uD83D\uDCBC\"},{\"unified\":\"1f469-1f3fe-200d-1f4bc\",\"native\":\"\uD83D\uDC69\uD83C\uDFFE\u200D\uD83D\uDCBC\"},{\"unified\":\"1f469-1f3ff-200d-1f4bc\",\"native\":\"\uD83D\uDC69\uD83C\uDFFF\u200D\uD83D\uDCBC\"}],\"version\":4},\"scientist\":{\"id\":\"scientist\",\"name\":\"Scientist\",\"keywords\":[\"chemistry\"],\"skins\":[{\"unified\":\"1f9d1-200d-1f52c\",\"native\":\"\uD83E\uDDD1\u200D\uD83D\uDD2C\"},{\"unified\":\"1f9d1-1f3fb-200d-1f52c\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFB\u200D\uD83D\uDD2C\"},{\"unified\":\"1f9d1-1f3fc-200d-1f52c\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFC\u200D\uD83D\uDD2C\"},{\"unified\":\"1f9d1-1f3fd-200d-1f52c\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFD\u200D\uD83D\uDD2C\"},{\"unified\":\"1f9d1-1f3fe-200d-1f52c\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFE\u200D\uD83D\uDD2C\"},{\"unified\":\"1f9d1-1f3ff-200d-1f52c\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFF\u200D\uD83D\uDD2C\"}],\"version\":12.1},\"male-scientist\":{\"id\":\"male-scientist\",\"name\":\"Man Scientist\",\"keywords\":[\"male\",\"biologist\",\"chemist\",\"engineer\",\"physicist\",\"human\"],\"skins\":[{\"unified\":\"1f468-200d-1f52c\",\"native\":\"\uD83D\uDC68\u200D\uD83D\uDD2C\"},{\"unified\":\"1f468-1f3fb-200d-1f52c\",\"native\":\"\uD83D\uDC68\uD83C\uDFFB\u200D\uD83D\uDD2C\"},{\"unified\":\"1f468-1f3fc-200d-1f52c\",\"native\":\"\uD83D\uDC68\uD83C\uDFFC\u200D\uD83D\uDD2C\"},{\"unified\":\"1f468-1f3fd-200d-1f52c\",\"native\":\"\uD83D\uDC68\uD83C\uDFFD\u200D\uD83D\uDD2C\"},{\"unified\":\"1f468-1f3fe-200d-1f52c\",\"native\":\"\uD83D\uDC68\uD83C\uDFFE\u200D\uD83D\uDD2C\"},{\"unified\":\"1f468-1f3ff-200d-1f52c\",\"native\":\"\uD83D\uDC68\uD83C\uDFFF\u200D\uD83D\uDD2C\"}],\"version\":4},\"female-scientist\":{\"id\":\"female-scientist\",\"name\":\"Woman Scientist\",\"keywords\":[\"female\",\"biologist\",\"chemist\",\"engineer\",\"physicist\",\"human\"],\"skins\":[{\"unified\":\"1f469-200d-1f52c\",\"native\":\"\uD83D\uDC69\u200D\uD83D\uDD2C\"},{\"unified\":\"1f469-1f3fb-200d-1f52c\",\"native\":\"\uD83D\uDC69\uD83C\uDFFB\u200D\uD83D\uDD2C\"},{\"unified\":\"1f469-1f3fc-200d-1f52c\",\"native\":\"\uD83D\uDC69\uD83C\uDFFC\u200D\uD83D\uDD2C\"},{\"unified\":\"1f469-1f3fd-200d-1f52c\",\"native\":\"\uD83D\uDC69\uD83C\uDFFD\u200D\uD83D\uDD2C\"},{\"unified\":\"1f469-1f3fe-200d-1f52c\",\"native\":\"\uD83D\uDC69\uD83C\uDFFE\u200D\uD83D\uDD2C\"},{\"unified\":\"1f469-1f3ff-200d-1f52c\",\"native\":\"\uD83D\uDC69\uD83C\uDFFF\u200D\uD83D\uDD2C\"}],\"version\":4},\"technologist\":{\"id\":\"technologist\",\"name\":\"Technologist\",\"keywords\":[\"computer\"],\"skins\":[{\"unified\":\"1f9d1-200d-1f4bb\",\"native\":\"\uD83E\uDDD1\u200D\uD83D\uDCBB\"},{\"unified\":\"1f9d1-1f3fb-200d-1f4bb\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFB\u200D\uD83D\uDCBB\"},{\"unified\":\"1f9d1-1f3fc-200d-1f4bb\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFC\u200D\uD83D\uDCBB\"},{\"unified\":\"1f9d1-1f3fd-200d-1f4bb\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFD\u200D\uD83D\uDCBB\"},{\"unified\":\"1f9d1-1f3fe-200d-1f4bb\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFE\u200D\uD83D\uDCBB\"},{\"unified\":\"1f9d1-1f3ff-200d-1f4bb\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFF\u200D\uD83D\uDCBB\"}],\"version\":12.1},\"male-technologist\":{\"id\":\"male-technologist\",\"name\":\"Man Technologist\",\"keywords\":[\"male\",\"coder\",\"developer\",\"engineer\",\"programmer\",\"software\",\"human\",\"laptop\",\"computer\"],\"skins\":[{\"unified\":\"1f468-200d-1f4bb\",\"native\":\"\uD83D\uDC68\u200D\uD83D\uDCBB\"},{\"unified\":\"1f468-1f3fb-200d-1f4bb\",\"native\":\"\uD83D\uDC68\uD83C\uDFFB\u200D\uD83D\uDCBB\"},{\"unified\":\"1f468-1f3fc-200d-1f4bb\",\"native\":\"\uD83D\uDC68\uD83C\uDFFC\u200D\uD83D\uDCBB\"},{\"unified\":\"1f468-1f3fd-200d-1f4bb\",\"native\":\"\uD83D\uDC68\uD83C\uDFFD\u200D\uD83D\uDCBB\"},{\"unified\":\"1f468-1f3fe-200d-1f4bb\",\"native\":\"\uD83D\uDC68\uD83C\uDFFE\u200D\uD83D\uDCBB\"},{\"unified\":\"1f468-1f3ff-200d-1f4bb\",\"native\":\"\uD83D\uDC68\uD83C\uDFFF\u200D\uD83D\uDCBB\"}],\"version\":4},\"female-technologist\":{\"id\":\"female-technologist\",\"name\":\"Woman Technologist\",\"keywords\":[\"female\",\"coder\",\"developer\",\"engineer\",\"programmer\",\"software\",\"human\",\"laptop\",\"computer\"],\"skins\":[{\"unified\":\"1f469-200d-1f4bb\",\"native\":\"\uD83D\uDC69\u200D\uD83D\uDCBB\"},{\"unified\":\"1f469-1f3fb-200d-1f4bb\",\"native\":\"\uD83D\uDC69\uD83C\uDFFB\u200D\uD83D\uDCBB\"},{\"unified\":\"1f469-1f3fc-200d-1f4bb\",\"native\":\"\uD83D\uDC69\uD83C\uDFFC\u200D\uD83D\uDCBB\"},{\"unified\":\"1f469-1f3fd-200d-1f4bb\",\"native\":\"\uD83D\uDC69\uD83C\uDFFD\u200D\uD83D\uDCBB\"},{\"unified\":\"1f469-1f3fe-200d-1f4bb\",\"native\":\"\uD83D\uDC69\uD83C\uDFFE\u200D\uD83D\uDCBB\"},{\"unified\":\"1f469-1f3ff-200d-1f4bb\",\"native\":\"\uD83D\uDC69\uD83C\uDFFF\u200D\uD83D\uDCBB\"}],\"version\":4},\"singer\":{\"id\":\"singer\",\"name\":\"Singer\",\"keywords\":[\"song\",\"artist\",\"performer\"],\"skins\":[{\"unified\":\"1f9d1-200d-1f3a4\",\"native\":\"\uD83E\uDDD1\u200D\uD83C\uDFA4\"},{\"unified\":\"1f9d1-1f3fb-200d-1f3a4\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFB\u200D\uD83C\uDFA4\"},{\"unified\":\"1f9d1-1f3fc-200d-1f3a4\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFC\u200D\uD83C\uDFA4\"},{\"unified\":\"1f9d1-1f3fd-200d-1f3a4\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFD\u200D\uD83C\uDFA4\"},{\"unified\":\"1f9d1-1f3fe-200d-1f3a4\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFE\u200D\uD83C\uDFA4\"},{\"unified\":\"1f9d1-1f3ff-200d-1f3a4\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFF\u200D\uD83C\uDFA4\"}],\"version\":12.1},\"male-singer\":{\"id\":\"male-singer\",\"name\":\"Man Singer\",\"keywords\":[\"male\",\"rockstar\",\"entertainer\",\"human\"],\"skins\":[{\"unified\":\"1f468-200d-1f3a4\",\"native\":\"\uD83D\uDC68\u200D\uD83C\uDFA4\"},{\"unified\":\"1f468-1f3fb-200d-1f3a4\",\"native\":\"\uD83D\uDC68\uD83C\uDFFB\u200D\uD83C\uDFA4\"},{\"unified\":\"1f468-1f3fc-200d-1f3a4\",\"native\":\"\uD83D\uDC68\uD83C\uDFFC\u200D\uD83C\uDFA4\"},{\"unified\":\"1f468-1f3fd-200d-1f3a4\",\"native\":\"\uD83D\uDC68\uD83C\uDFFD\u200D\uD83C\uDFA4\"},{\"unified\":\"1f468-1f3fe-200d-1f3a4\",\"native\":\"\uD83D\uDC68\uD83C\uDFFE\u200D\uD83C\uDFA4\"},{\"unified\":\"1f468-1f3ff-200d-1f3a4\",\"native\":\"\uD83D\uDC68\uD83C\uDFFF\u200D\uD83C\uDFA4\"}],\"version\":4},\"female-singer\":{\"id\":\"female-singer\",\"name\":\"Woman Singer\",\"keywords\":[\"female\",\"rockstar\",\"entertainer\",\"human\"],\"skins\":[{\"unified\":\"1f469-200d-1f3a4\",\"native\":\"\uD83D\uDC69\u200D\uD83C\uDFA4\"},{\"unified\":\"1f469-1f3fb-200d-1f3a4\",\"native\":\"\uD83D\uDC69\uD83C\uDFFB\u200D\uD83C\uDFA4\"},{\"unified\":\"1f469-1f3fc-200d-1f3a4\",\"native\":\"\uD83D\uDC69\uD83C\uDFFC\u200D\uD83C\uDFA4\"},{\"unified\":\"1f469-1f3fd-200d-1f3a4\",\"native\":\"\uD83D\uDC69\uD83C\uDFFD\u200D\uD83C\uDFA4\"},{\"unified\":\"1f469-1f3fe-200d-1f3a4\",\"native\":\"\uD83D\uDC69\uD83C\uDFFE\u200D\uD83C\uDFA4\"},{\"unified\":\"1f469-1f3ff-200d-1f3a4\",\"native\":\"\uD83D\uDC69\uD83C\uDFFF\u200D\uD83C\uDFA4\"}],\"version\":4},\"artist\":{\"id\":\"artist\",\"name\":\"Artist\",\"keywords\":[\"painting\",\"draw\",\"creativity\"],\"skins\":[{\"unified\":\"1f9d1-200d-1f3a8\",\"native\":\"\uD83E\uDDD1\u200D\uD83C\uDFA8\"},{\"unified\":\"1f9d1-1f3fb-200d-1f3a8\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFB\u200D\uD83C\uDFA8\"},{\"unified\":\"1f9d1-1f3fc-200d-1f3a8\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFC\u200D\uD83C\uDFA8\"},{\"unified\":\"1f9d1-1f3fd-200d-1f3a8\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFD\u200D\uD83C\uDFA8\"},{\"unified\":\"1f9d1-1f3fe-200d-1f3a8\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFE\u200D\uD83C\uDFA8\"},{\"unified\":\"1f9d1-1f3ff-200d-1f3a8\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFF\u200D\uD83C\uDFA8\"}],\"version\":12.1},\"male-artist\":{\"id\":\"male-artist\",\"name\":\"Man Artist\",\"keywords\":[\"male\",\"painter\",\"human\"],\"skins\":[{\"unified\":\"1f468-200d-1f3a8\",\"native\":\"\uD83D\uDC68\u200D\uD83C\uDFA8\"},{\"unified\":\"1f468-1f3fb-200d-1f3a8\",\"native\":\"\uD83D\uDC68\uD83C\uDFFB\u200D\uD83C\uDFA8\"},{\"unified\":\"1f468-1f3fc-200d-1f3a8\",\"native\":\"\uD83D\uDC68\uD83C\uDFFC\u200D\uD83C\uDFA8\"},{\"unified\":\"1f468-1f3fd-200d-1f3a8\",\"native\":\"\uD83D\uDC68\uD83C\uDFFD\u200D\uD83C\uDFA8\"},{\"unified\":\"1f468-1f3fe-200d-1f3a8\",\"native\":\"\uD83D\uDC68\uD83C\uDFFE\u200D\uD83C\uDFA8\"},{\"unified\":\"1f468-1f3ff-200d-1f3a8\",\"native\":\"\uD83D\uDC68\uD83C\uDFFF\u200D\uD83C\uDFA8\"}],\"version\":4},\"female-artist\":{\"id\":\"female-artist\",\"name\":\"Woman Artist\",\"keywords\":[\"female\",\"painter\",\"human\"],\"skins\":[{\"unified\":\"1f469-200d-1f3a8\",\"native\":\"\uD83D\uDC69\u200D\uD83C\uDFA8\"},{\"unified\":\"1f469-1f3fb-200d-1f3a8\",\"native\":\"\uD83D\uDC69\uD83C\uDFFB\u200D\uD83C\uDFA8\"},{\"unified\":\"1f469-1f3fc-200d-1f3a8\",\"native\":\"\uD83D\uDC69\uD83C\uDFFC\u200D\uD83C\uDFA8\"},{\"unified\":\"1f469-1f3fd-200d-1f3a8\",\"native\":\"\uD83D\uDC69\uD83C\uDFFD\u200D\uD83C\uDFA8\"},{\"unified\":\"1f469-1f3fe-200d-1f3a8\",\"native\":\"\uD83D\uDC69\uD83C\uDFFE\u200D\uD83C\uDFA8\"},{\"unified\":\"1f469-1f3ff-200d-1f3a8\",\"native\":\"\uD83D\uDC69\uD83C\uDFFF\u200D\uD83C\uDFA8\"}],\"version\":4},\"pilot\":{\"id\":\"pilot\",\"name\":\"Pilot\",\"keywords\":[\"fly\",\"plane\",\"airplane\"],\"skins\":[{\"unified\":\"1f9d1-200d-2708-fe0f\",\"native\":\"\uD83E\uDDD1\u200D\u2708\uFE0F\"},{\"unified\":\"1f9d1-1f3fb-200d-2708-fe0f\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFB\u200D\u2708\uFE0F\"},{\"unified\":\"1f9d1-1f3fc-200d-2708-fe0f\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFC\u200D\u2708\uFE0F\"},{\"unified\":\"1f9d1-1f3fd-200d-2708-fe0f\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFD\u200D\u2708\uFE0F\"},{\"unified\":\"1f9d1-1f3fe-200d-2708-fe0f\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFE\u200D\u2708\uFE0F\"},{\"unified\":\"1f9d1-1f3ff-200d-2708-fe0f\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFF\u200D\u2708\uFE0F\"}],\"version\":12.1},\"male-pilot\":{\"id\":\"male-pilot\",\"name\":\"Man Pilot\",\"keywords\":[\"male\",\"aviator\",\"plane\",\"human\"],\"skins\":[{\"unified\":\"1f468-200d-2708-fe0f\",\"native\":\"\uD83D\uDC68\u200D\u2708\uFE0F\"},{\"unified\":\"1f468-1f3fb-200d-2708-fe0f\",\"native\":\"\uD83D\uDC68\uD83C\uDFFB\u200D\u2708\uFE0F\"},{\"unified\":\"1f468-1f3fc-200d-2708-fe0f\",\"native\":\"\uD83D\uDC68\uD83C\uDFFC\u200D\u2708\uFE0F\"},{\"unified\":\"1f468-1f3fd-200d-2708-fe0f\",\"native\":\"\uD83D\uDC68\uD83C\uDFFD\u200D\u2708\uFE0F\"},{\"unified\":\"1f468-1f3fe-200d-2708-fe0f\",\"native\":\"\uD83D\uDC68\uD83C\uDFFE\u200D\u2708\uFE0F\"},{\"unified\":\"1f468-1f3ff-200d-2708-fe0f\",\"native\":\"\uD83D\uDC68\uD83C\uDFFF\u200D\u2708\uFE0F\"}],\"version\":4},\"female-pilot\":{\"id\":\"female-pilot\",\"name\":\"Woman Pilot\",\"keywords\":[\"female\",\"aviator\",\"plane\",\"human\"],\"skins\":[{\"unified\":\"1f469-200d-2708-fe0f\",\"native\":\"\uD83D\uDC69\u200D\u2708\uFE0F\"},{\"unified\":\"1f469-1f3fb-200d-2708-fe0f\",\"native\":\"\uD83D\uDC69\uD83C\uDFFB\u200D\u2708\uFE0F\"},{\"unified\":\"1f469-1f3fc-200d-2708-fe0f\",\"native\":\"\uD83D\uDC69\uD83C\uDFFC\u200D\u2708\uFE0F\"},{\"unified\":\"1f469-1f3fd-200d-2708-fe0f\",\"native\":\"\uD83D\uDC69\uD83C\uDFFD\u200D\u2708\uFE0F\"},{\"unified\":\"1f469-1f3fe-200d-2708-fe0f\",\"native\":\"\uD83D\uDC69\uD83C\uDFFE\u200D\u2708\uFE0F\"},{\"unified\":\"1f469-1f3ff-200d-2708-fe0f\",\"native\":\"\uD83D\uDC69\uD83C\uDFFF\u200D\u2708\uFE0F\"}],\"version\":4},\"astronaut\":{\"id\":\"astronaut\",\"name\":\"Astronaut\",\"keywords\":[\"outerspace\"],\"skins\":[{\"unified\":\"1f9d1-200d-1f680\",\"native\":\"\uD83E\uDDD1\u200D\uD83D\uDE80\"},{\"unified\":\"1f9d1-1f3fb-200d-1f680\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFB\u200D\uD83D\uDE80\"},{\"unified\":\"1f9d1-1f3fc-200d-1f680\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFC\u200D\uD83D\uDE80\"},{\"unified\":\"1f9d1-1f3fd-200d-1f680\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFD\u200D\uD83D\uDE80\"},{\"unified\":\"1f9d1-1f3fe-200d-1f680\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFE\u200D\uD83D\uDE80\"},{\"unified\":\"1f9d1-1f3ff-200d-1f680\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFF\u200D\uD83D\uDE80\"}],\"version\":12.1},\"male-astronaut\":{\"id\":\"male-astronaut\",\"name\":\"Man Astronaut\",\"keywords\":[\"male\",\"space\",\"rocket\",\"human\"],\"skins\":[{\"unified\":\"1f468-200d-1f680\",\"native\":\"\uD83D\uDC68\u200D\uD83D\uDE80\"},{\"unified\":\"1f468-1f3fb-200d-1f680\",\"native\":\"\uD83D\uDC68\uD83C\uDFFB\u200D\uD83D\uDE80\"},{\"unified\":\"1f468-1f3fc-200d-1f680\",\"native\":\"\uD83D\uDC68\uD83C\uDFFC\u200D\uD83D\uDE80\"},{\"unified\":\"1f468-1f3fd-200d-1f680\",\"native\":\"\uD83D\uDC68\uD83C\uDFFD\u200D\uD83D\uDE80\"},{\"unified\":\"1f468-1f3fe-200d-1f680\",\"native\":\"\uD83D\uDC68\uD83C\uDFFE\u200D\uD83D\uDE80\"},{\"unified\":\"1f468-1f3ff-200d-1f680\",\"native\":\"\uD83D\uDC68\uD83C\uDFFF\u200D\uD83D\uDE80\"}],\"version\":4},\"female-astronaut\":{\"id\":\"female-astronaut\",\"name\":\"Woman Astronaut\",\"keywords\":[\"female\",\"space\",\"rocket\",\"human\"],\"skins\":[{\"unified\":\"1f469-200d-1f680\",\"native\":\"\uD83D\uDC69\u200D\uD83D\uDE80\"},{\"unified\":\"1f469-1f3fb-200d-1f680\",\"native\":\"\uD83D\uDC69\uD83C\uDFFB\u200D\uD83D\uDE80\"},{\"unified\":\"1f469-1f3fc-200d-1f680\",\"native\":\"\uD83D\uDC69\uD83C\uDFFC\u200D\uD83D\uDE80\"},{\"unified\":\"1f469-1f3fd-200d-1f680\",\"native\":\"\uD83D\uDC69\uD83C\uDFFD\u200D\uD83D\uDE80\"},{\"unified\":\"1f469-1f3fe-200d-1f680\",\"native\":\"\uD83D\uDC69\uD83C\uDFFE\u200D\uD83D\uDE80\"},{\"unified\":\"1f469-1f3ff-200d-1f680\",\"native\":\"\uD83D\uDC69\uD83C\uDFFF\u200D\uD83D\uDE80\"}],\"version\":4},\"firefighter\":{\"id\":\"firefighter\",\"name\":\"Firefighter\",\"keywords\":[\"fire\"],\"skins\":[{\"unified\":\"1f9d1-200d-1f692\",\"native\":\"\uD83E\uDDD1\u200D\uD83D\uDE92\"},{\"unified\":\"1f9d1-1f3fb-200d-1f692\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFB\u200D\uD83D\uDE92\"},{\"unified\":\"1f9d1-1f3fc-200d-1f692\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFC\u200D\uD83D\uDE92\"},{\"unified\":\"1f9d1-1f3fd-200d-1f692\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFD\u200D\uD83D\uDE92\"},{\"unified\":\"1f9d1-1f3fe-200d-1f692\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFE\u200D\uD83D\uDE92\"},{\"unified\":\"1f9d1-1f3ff-200d-1f692\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFF\u200D\uD83D\uDE92\"}],\"version\":12.1},\"male-firefighter\":{\"id\":\"male-firefighter\",\"name\":\"Man Firefighter\",\"keywords\":[\"male\",\"fireman\",\"human\"],\"skins\":[{\"unified\":\"1f468-200d-1f692\",\"native\":\"\uD83D\uDC68\u200D\uD83D\uDE92\"},{\"unified\":\"1f468-1f3fb-200d-1f692\",\"native\":\"\uD83D\uDC68\uD83C\uDFFB\u200D\uD83D\uDE92\"},{\"unified\":\"1f468-1f3fc-200d-1f692\",\"native\":\"\uD83D\uDC68\uD83C\uDFFC\u200D\uD83D\uDE92\"},{\"unified\":\"1f468-1f3fd-200d-1f692\",\"native\":\"\uD83D\uDC68\uD83C\uDFFD\u200D\uD83D\uDE92\"},{\"unified\":\"1f468-1f3fe-200d-1f692\",\"native\":\"\uD83D\uDC68\uD83C\uDFFE\u200D\uD83D\uDE92\"},{\"unified\":\"1f468-1f3ff-200d-1f692\",\"native\":\"\uD83D\uDC68\uD83C\uDFFF\u200D\uD83D\uDE92\"}],\"version\":4},\"female-firefighter\":{\"id\":\"female-firefighter\",\"name\":\"Woman Firefighter\",\"keywords\":[\"female\",\"fireman\",\"human\"],\"skins\":[{\"unified\":\"1f469-200d-1f692\",\"native\":\"\uD83D\uDC69\u200D\uD83D\uDE92\"},{\"unified\":\"1f469-1f3fb-200d-1f692\",\"native\":\"\uD83D\uDC69\uD83C\uDFFB\u200D\uD83D\uDE92\"},{\"unified\":\"1f469-1f3fc-200d-1f692\",\"native\":\"\uD83D\uDC69\uD83C\uDFFC\u200D\uD83D\uDE92\"},{\"unified\":\"1f469-1f3fd-200d-1f692\",\"native\":\"\uD83D\uDC69\uD83C\uDFFD\u200D\uD83D\uDE92\"},{\"unified\":\"1f469-1f3fe-200d-1f692\",\"native\":\"\uD83D\uDC69\uD83C\uDFFE\u200D\uD83D\uDE92\"},{\"unified\":\"1f469-1f3ff-200d-1f692\",\"native\":\"\uD83D\uDC69\uD83C\uDFFF\u200D\uD83D\uDE92\"}],\"version\":4},\"cop\":{\"id\":\"cop\",\"name\":\"Police Officer\",\"keywords\":[\"cop\"],\"skins\":[{\"unified\":\"1f46e\",\"native\":\"\uD83D\uDC6E\"},{\"unified\":\"1f46e-1f3fb\",\"native\":\"\uD83D\uDC6E\uD83C\uDFFB\"},{\"unified\":\"1f46e-1f3fc\",\"native\":\"\uD83D\uDC6E\uD83C\uDFFC\"},{\"unified\":\"1f46e-1f3fd\",\"native\":\"\uD83D\uDC6E\uD83C\uDFFD\"},{\"unified\":\"1f46e-1f3fe\",\"native\":\"\uD83D\uDC6E\uD83C\uDFFE\"},{\"unified\":\"1f46e-1f3ff\",\"native\":\"\uD83D\uDC6E\uD83C\uDFFF\"}],\"version\":1},\"male-police-officer\":{\"id\":\"male-police-officer\",\"name\":\"Man Police Officer\",\"keywords\":[\"male\",\"police-officer\",\"law\",\"legal\",\"enforcement\",\"arrest\",\"911\"],\"skins\":[{\"unified\":\"1f46e-200d-2642-fe0f\",\"native\":\"\uD83D\uDC6E\u200D\u2642\uFE0F\"},{\"unified\":\"1f46e-1f3fb-200d-2642-fe0f\",\"native\":\"\uD83D\uDC6E\uD83C\uDFFB\u200D\u2642\uFE0F\"},{\"unified\":\"1f46e-1f3fc-200d-2642-fe0f\",\"native\":\"\uD83D\uDC6E\uD83C\uDFFC\u200D\u2642\uFE0F\"},{\"unified\":\"1f46e-1f3fd-200d-2642-fe0f\",\"native\":\"\uD83D\uDC6E\uD83C\uDFFD\u200D\u2642\uFE0F\"},{\"unified\":\"1f46e-1f3fe-200d-2642-fe0f\",\"native\":\"\uD83D\uDC6E\uD83C\uDFFE\u200D\u2642\uFE0F\"},{\"unified\":\"1f46e-1f3ff-200d-2642-fe0f\",\"native\":\"\uD83D\uDC6E\uD83C\uDFFF\u200D\u2642\uFE0F\"}],\"version\":4},\"female-police-officer\":{\"id\":\"female-police-officer\",\"name\":\"Woman Police Officer\",\"keywords\":[\"female\",\"police-officer\",\"law\",\"legal\",\"enforcement\",\"arrest\",\"911\"],\"skins\":[{\"unified\":\"1f46e-200d-2640-fe0f\",\"native\":\"\uD83D\uDC6E\u200D\u2640\uFE0F\"},{\"unified\":\"1f46e-1f3fb-200d-2640-fe0f\",\"native\":\"\uD83D\uDC6E\uD83C\uDFFB\u200D\u2640\uFE0F\"},{\"unified\":\"1f46e-1f3fc-200d-2640-fe0f\",\"native\":\"\uD83D\uDC6E\uD83C\uDFFC\u200D\u2640\uFE0F\"},{\"unified\":\"1f46e-1f3fd-200d-2640-fe0f\",\"native\":\"\uD83D\uDC6E\uD83C\uDFFD\u200D\u2640\uFE0F\"},{\"unified\":\"1f46e-1f3fe-200d-2640-fe0f\",\"native\":\"\uD83D\uDC6E\uD83C\uDFFE\u200D\u2640\uFE0F\"},{\"unified\":\"1f46e-1f3ff-200d-2640-fe0f\",\"native\":\"\uD83D\uDC6E\uD83C\uDFFF\u200D\u2640\uFE0F\"}],\"version\":4},\"sleuth_or_spy\":{\"id\":\"sleuth_or_spy\",\"name\":\"Detective\",\"keywords\":[\"sleuth\",\"or\",\"spy\",\"human\"],\"skins\":[{\"unified\":\"1f575-fe0f\",\"native\":\"\uD83D\uDD75\uFE0F\"},{\"unified\":\"1f575-1f3fb\",\"native\":\"\uD83D\uDD75\uD83C\uDFFB\"},{\"unified\":\"1f575-1f3fc\",\"native\":\"\uD83D\uDD75\uD83C\uDFFC\"},{\"unified\":\"1f575-1f3fd\",\"native\":\"\uD83D\uDD75\uD83C\uDFFD\"},{\"unified\":\"1f575-1f3fe\",\"native\":\"\uD83D\uDD75\uD83C\uDFFE\"},{\"unified\":\"1f575-1f3ff\",\"native\":\"\uD83D\uDD75\uD83C\uDFFF\"}],\"version\":1},\"male-detective\":{\"id\":\"male-detective\",\"name\":\"Man Detective\",\"keywords\":[\"male\",\"crime\"],\"skins\":[{\"unified\":\"1f575-fe0f-200d-2642-fe0f\",\"native\":\"\uD83D\uDD75\uFE0F\u200D\u2642\uFE0F\"},{\"unified\":\"1f575-1f3fb-200d-2642-fe0f\",\"native\":\"\uD83D\uDD75\uD83C\uDFFB\u200D\u2642\uFE0F\"},{\"unified\":\"1f575-1f3fc-200d-2642-fe0f\",\"native\":\"\uD83D\uDD75\uD83C\uDFFC\u200D\u2642\uFE0F\"},{\"unified\":\"1f575-1f3fd-200d-2642-fe0f\",\"native\":\"\uD83D\uDD75\uD83C\uDFFD\u200D\u2642\uFE0F\"},{\"unified\":\"1f575-1f3fe-200d-2642-fe0f\",\"native\":\"\uD83D\uDD75\uD83C\uDFFE\u200D\u2642\uFE0F\"},{\"unified\":\"1f575-1f3ff-200d-2642-fe0f\",\"native\":\"\uD83D\uDD75\uD83C\uDFFF\u200D\u2642\uFE0F\"}],\"version\":4},\"female-detective\":{\"id\":\"female-detective\",\"name\":\"Woman Detective\",\"keywords\":[\"female\",\"human\",\"spy\"],\"skins\":[{\"unified\":\"1f575-fe0f-200d-2640-fe0f\",\"native\":\"\uD83D\uDD75\uFE0F\u200D\u2640\uFE0F\"},{\"unified\":\"1f575-1f3fb-200d-2640-fe0f\",\"native\":\"\uD83D\uDD75\uD83C\uDFFB\u200D\u2640\uFE0F\"},{\"unified\":\"1f575-1f3fc-200d-2640-fe0f\",\"native\":\"\uD83D\uDD75\uD83C\uDFFC\u200D\u2640\uFE0F\"},{\"unified\":\"1f575-1f3fd-200d-2640-fe0f\",\"native\":\"\uD83D\uDD75\uD83C\uDFFD\u200D\u2640\uFE0F\"},{\"unified\":\"1f575-1f3fe-200d-2640-fe0f\",\"native\":\"\uD83D\uDD75\uD83C\uDFFE\u200D\u2640\uFE0F\"},{\"unified\":\"1f575-1f3ff-200d-2640-fe0f\",\"native\":\"\uD83D\uDD75\uD83C\uDFFF\u200D\u2640\uFE0F\"}],\"version\":4},\"guardsman\":{\"id\":\"guardsman\",\"name\":\"Guard\",\"keywords\":[\"guardsman\",\"protect\"],\"skins\":[{\"unified\":\"1f482\",\"native\":\"\uD83D\uDC82\"},{\"unified\":\"1f482-1f3fb\",\"native\":\"\uD83D\uDC82\uD83C\uDFFB\"},{\"unified\":\"1f482-1f3fc\",\"native\":\"\uD83D\uDC82\uD83C\uDFFC\"},{\"unified\":\"1f482-1f3fd\",\"native\":\"\uD83D\uDC82\uD83C\uDFFD\"},{\"unified\":\"1f482-1f3fe\",\"native\":\"\uD83D\uDC82\uD83C\uDFFE\"},{\"unified\":\"1f482-1f3ff\",\"native\":\"\uD83D\uDC82\uD83C\uDFFF\"}],\"version\":1},\"male-guard\":{\"id\":\"male-guard\",\"name\":\"Man Guard\",\"keywords\":[\"male\",\"uk\",\"gb\",\"british\",\"guy\",\"royal\"],\"skins\":[{\"unified\":\"1f482-200d-2642-fe0f\",\"native\":\"\uD83D\uDC82\u200D\u2642\uFE0F\"},{\"unified\":\"1f482-1f3fb-200d-2642-fe0f\",\"native\":\"\uD83D\uDC82\uD83C\uDFFB\u200D\u2642\uFE0F\"},{\"unified\":\"1f482-1f3fc-200d-2642-fe0f\",\"native\":\"\uD83D\uDC82\uD83C\uDFFC\u200D\u2642\uFE0F\"},{\"unified\":\"1f482-1f3fd-200d-2642-fe0f\",\"native\":\"\uD83D\uDC82\uD83C\uDFFD\u200D\u2642\uFE0F\"},{\"unified\":\"1f482-1f3fe-200d-2642-fe0f\",\"native\":\"\uD83D\uDC82\uD83C\uDFFE\u200D\u2642\uFE0F\"},{\"unified\":\"1f482-1f3ff-200d-2642-fe0f\",\"native\":\"\uD83D\uDC82\uD83C\uDFFF\u200D\u2642\uFE0F\"}],\"version\":4},\"female-guard\":{\"id\":\"female-guard\",\"name\":\"Woman Guard\",\"keywords\":[\"female\",\"uk\",\"gb\",\"british\",\"royal\"],\"skins\":[{\"unified\":\"1f482-200d-2640-fe0f\",\"native\":\"\uD83D\uDC82\u200D\u2640\uFE0F\"},{\"unified\":\"1f482-1f3fb-200d-2640-fe0f\",\"native\":\"\uD83D\uDC82\uD83C\uDFFB\u200D\u2640\uFE0F\"},{\"unified\":\"1f482-1f3fc-200d-2640-fe0f\",\"native\":\"\uD83D\uDC82\uD83C\uDFFC\u200D\u2640\uFE0F\"},{\"unified\":\"1f482-1f3fd-200d-2640-fe0f\",\"native\":\"\uD83D\uDC82\uD83C\uDFFD\u200D\u2640\uFE0F\"},{\"unified\":\"1f482-1f3fe-200d-2640-fe0f\",\"native\":\"\uD83D\uDC82\uD83C\uDFFE\u200D\u2640\uFE0F\"},{\"unified\":\"1f482-1f3ff-200d-2640-fe0f\",\"native\":\"\uD83D\uDC82\uD83C\uDFFF\u200D\u2640\uFE0F\"}],\"version\":4},\"ninja\":{\"id\":\"ninja\",\"name\":\"Ninja\",\"keywords\":[\"ninjutsu\",\"skills\",\"japanese\"],\"skins\":[{\"unified\":\"1f977\",\"native\":\"\uD83E\uDD77\"},{\"unified\":\"1f977-1f3fb\",\"native\":\"\uD83E\uDD77\uD83C\uDFFB\"},{\"unified\":\"1f977-1f3fc\",\"native\":\"\uD83E\uDD77\uD83C\uDFFC\"},{\"unified\":\"1f977-1f3fd\",\"native\":\"\uD83E\uDD77\uD83C\uDFFD\"},{\"unified\":\"1f977-1f3fe\",\"native\":\"\uD83E\uDD77\uD83C\uDFFE\"},{\"unified\":\"1f977-1f3ff\",\"native\":\"\uD83E\uDD77\uD83C\uDFFF\"}],\"version\":13},\"construction_worker\":{\"id\":\"construction_worker\",\"name\":\"Construction Worker\",\"keywords\":[\"labor\",\"build\"],\"skins\":[{\"unified\":\"1f477\",\"native\":\"\uD83D\uDC77\"},{\"unified\":\"1f477-1f3fb\",\"native\":\"\uD83D\uDC77\uD83C\uDFFB\"},{\"unified\":\"1f477-1f3fc\",\"native\":\"\uD83D\uDC77\uD83C\uDFFC\"},{\"unified\":\"1f477-1f3fd\",\"native\":\"\uD83D\uDC77\uD83C\uDFFD\"},{\"unified\":\"1f477-1f3fe\",\"native\":\"\uD83D\uDC77\uD83C\uDFFE\"},{\"unified\":\"1f477-1f3ff\",\"native\":\"\uD83D\uDC77\uD83C\uDFFF\"}],\"version\":1},\"male-construction-worker\":{\"id\":\"male-construction-worker\",\"name\":\"Man Construction Worker\",\"keywords\":[\"male\",\"construction-worker\",\"human\",\"wip\",\"guy\",\"build\",\"labor\"],\"skins\":[{\"unified\":\"1f477-200d-2642-fe0f\",\"native\":\"\uD83D\uDC77\u200D\u2642\uFE0F\"},{\"unified\":\"1f477-1f3fb-200d-2642-fe0f\",\"native\":\"\uD83D\uDC77\uD83C\uDFFB\u200D\u2642\uFE0F\"},{\"unified\":\"1f477-1f3fc-200d-2642-fe0f\",\"native\":\"\uD83D\uDC77\uD83C\uDFFC\u200D\u2642\uFE0F\"},{\"unified\":\"1f477-1f3fd-200d-2642-fe0f\",\"native\":\"\uD83D\uDC77\uD83C\uDFFD\u200D\u2642\uFE0F\"},{\"unified\":\"1f477-1f3fe-200d-2642-fe0f\",\"native\":\"\uD83D\uDC77\uD83C\uDFFE\u200D\u2642\uFE0F\"},{\"unified\":\"1f477-1f3ff-200d-2642-fe0f\",\"native\":\"\uD83D\uDC77\uD83C\uDFFF\u200D\u2642\uFE0F\"}],\"version\":4},\"female-construction-worker\":{\"id\":\"female-construction-worker\",\"name\":\"Woman Construction Worker\",\"keywords\":[\"female\",\"construction-worker\",\"human\",\"wip\",\"build\",\"labor\"],\"skins\":[{\"unified\":\"1f477-200d-2640-fe0f\",\"native\":\"\uD83D\uDC77\u200D\u2640\uFE0F\"},{\"unified\":\"1f477-1f3fb-200d-2640-fe0f\",\"native\":\"\uD83D\uDC77\uD83C\uDFFB\u200D\u2640\uFE0F\"},{\"unified\":\"1f477-1f3fc-200d-2640-fe0f\",\"native\":\"\uD83D\uDC77\uD83C\uDFFC\u200D\u2640\uFE0F\"},{\"unified\":\"1f477-1f3fd-200d-2640-fe0f\",\"native\":\"\uD83D\uDC77\uD83C\uDFFD\u200D\u2640\uFE0F\"},{\"unified\":\"1f477-1f3fe-200d-2640-fe0f\",\"native\":\"\uD83D\uDC77\uD83C\uDFFE\u200D\u2640\uFE0F\"},{\"unified\":\"1f477-1f3ff-200d-2640-fe0f\",\"native\":\"\uD83D\uDC77\uD83C\uDFFF\u200D\u2640\uFE0F\"}],\"version\":4},\"person_with_crown\":{\"id\":\"person_with_crown\",\"name\":\"Person with Crown\",\"keywords\":[\"royalty\",\"power\"],\"skins\":[{\"unified\":\"1fac5\",\"native\":\"\uD83E\uDEC5\"},{\"unified\":\"1fac5-1f3fb\",\"native\":\"\uD83E\uDEC5\uD83C\uDFFB\"},{\"unified\":\"1fac5-1f3fc\",\"native\":\"\uD83E\uDEC5\uD83C\uDFFC\"},{\"unified\":\"1fac5-1f3fd\",\"native\":\"\uD83E\uDEC5\uD83C\uDFFD\"},{\"unified\":\"1fac5-1f3fe\",\"native\":\"\uD83E\uDEC5\uD83C\uDFFE\"},{\"unified\":\"1fac5-1f3ff\",\"native\":\"\uD83E\uDEC5\uD83C\uDFFF\"}],\"version\":14},\"prince\":{\"id\":\"prince\",\"name\":\"Prince\",\"keywords\":[\"boy\",\"man\",\"male\",\"crown\",\"royal\",\"king\"],\"skins\":[{\"unified\":\"1f934\",\"native\":\"\uD83E\uDD34\"},{\"unified\":\"1f934-1f3fb\",\"native\":\"\uD83E\uDD34\uD83C\uDFFB\"},{\"unified\":\"1f934-1f3fc\",\"native\":\"\uD83E\uDD34\uD83C\uDFFC\"},{\"unified\":\"1f934-1f3fd\",\"native\":\"\uD83E\uDD34\uD83C\uDFFD\"},{\"unified\":\"1f934-1f3fe\",\"native\":\"\uD83E\uDD34\uD83C\uDFFE\"},{\"unified\":\"1f934-1f3ff\",\"native\":\"\uD83E\uDD34\uD83C\uDFFF\"}],\"version\":3},\"princess\":{\"id\":\"princess\",\"name\":\"Princess\",\"keywords\":[\"girl\",\"woman\",\"female\",\"blond\",\"crown\",\"royal\",\"queen\"],\"skins\":[{\"unified\":\"1f478\",\"native\":\"\uD83D\uDC78\"},{\"unified\":\"1f478-1f3fb\",\"native\":\"\uD83D\uDC78\uD83C\uDFFB\"},{\"unified\":\"1f478-1f3fc\",\"native\":\"\uD83D\uDC78\uD83C\uDFFC\"},{\"unified\":\"1f478-1f3fd\",\"native\":\"\uD83D\uDC78\uD83C\uDFFD\"},{\"unified\":\"1f478-1f3fe\",\"native\":\"\uD83D\uDC78\uD83C\uDFFE\"},{\"unified\":\"1f478-1f3ff\",\"native\":\"\uD83D\uDC78\uD83C\uDFFF\"}],\"version\":1},\"man_with_turban\":{\"id\":\"man_with_turban\",\"name\":\"Man with Turban\",\"keywords\":[\"person\",\"wearing\",\"headdress\"],\"skins\":[{\"unified\":\"1f473\",\"native\":\"\uD83D\uDC73\"},{\"unified\":\"1f473-1f3fb\",\"native\":\"\uD83D\uDC73\uD83C\uDFFB\"},{\"unified\":\"1f473-1f3fc\",\"native\":\"\uD83D\uDC73\uD83C\uDFFC\"},{\"unified\":\"1f473-1f3fd\",\"native\":\"\uD83D\uDC73\uD83C\uDFFD\"},{\"unified\":\"1f473-1f3fe\",\"native\":\"\uD83D\uDC73\uD83C\uDFFE\"},{\"unified\":\"1f473-1f3ff\",\"native\":\"\uD83D\uDC73\uD83C\uDFFF\"}],\"version\":1},\"man-wearing-turban\":{\"id\":\"man-wearing-turban\",\"name\":\"Man Wearing Turban\",\"keywords\":[\"wearing-turban\",\"male\",\"indian\",\"hinduism\",\"arabs\"],\"skins\":[{\"unified\":\"1f473-200d-2642-fe0f\",\"native\":\"\uD83D\uDC73\u200D\u2642\uFE0F\"},{\"unified\":\"1f473-1f3fb-200d-2642-fe0f\",\"native\":\"\uD83D\uDC73\uD83C\uDFFB\u200D\u2642\uFE0F\"},{\"unified\":\"1f473-1f3fc-200d-2642-fe0f\",\"native\":\"\uD83D\uDC73\uD83C\uDFFC\u200D\u2642\uFE0F\"},{\"unified\":\"1f473-1f3fd-200d-2642-fe0f\",\"native\":\"\uD83D\uDC73\uD83C\uDFFD\u200D\u2642\uFE0F\"},{\"unified\":\"1f473-1f3fe-200d-2642-fe0f\",\"native\":\"\uD83D\uDC73\uD83C\uDFFE\u200D\u2642\uFE0F\"},{\"unified\":\"1f473-1f3ff-200d-2642-fe0f\",\"native\":\"\uD83D\uDC73\uD83C\uDFFF\u200D\u2642\uFE0F\"}],\"version\":4},\"woman-wearing-turban\":{\"id\":\"woman-wearing-turban\",\"name\":\"Woman Wearing Turban\",\"keywords\":[\"wearing-turban\",\"female\",\"indian\",\"hinduism\",\"arabs\"],\"skins\":[{\"unified\":\"1f473-200d-2640-fe0f\",\"native\":\"\uD83D\uDC73\u200D\u2640\uFE0F\"},{\"unified\":\"1f473-1f3fb-200d-2640-fe0f\",\"native\":\"\uD83D\uDC73\uD83C\uDFFB\u200D\u2640\uFE0F\"},{\"unified\":\"1f473-1f3fc-200d-2640-fe0f\",\"native\":\"\uD83D\uDC73\uD83C\uDFFC\u200D\u2640\uFE0F\"},{\"unified\":\"1f473-1f3fd-200d-2640-fe0f\",\"native\":\"\uD83D\uDC73\uD83C\uDFFD\u200D\u2640\uFE0F\"},{\"unified\":\"1f473-1f3fe-200d-2640-fe0f\",\"native\":\"\uD83D\uDC73\uD83C\uDFFE\u200D\u2640\uFE0F\"},{\"unified\":\"1f473-1f3ff-200d-2640-fe0f\",\"native\":\"\uD83D\uDC73\uD83C\uDFFF\u200D\u2640\uFE0F\"}],\"version\":4},\"man_with_gua_pi_mao\":{\"id\":\"man_with_gua_pi_mao\",\"name\":\"Man with Gua Pi Mao\",\"keywords\":[\"skullcap\",\"male\",\"boy\",\"chinese\"],\"skins\":[{\"unified\":\"1f472\",\"native\":\"\uD83D\uDC72\"},{\"unified\":\"1f472-1f3fb\",\"native\":\"\uD83D\uDC72\uD83C\uDFFB\"},{\"unified\":\"1f472-1f3fc\",\"native\":\"\uD83D\uDC72\uD83C\uDFFC\"},{\"unified\":\"1f472-1f3fd\",\"native\":\"\uD83D\uDC72\uD83C\uDFFD\"},{\"unified\":\"1f472-1f3fe\",\"native\":\"\uD83D\uDC72\uD83C\uDFFE\"},{\"unified\":\"1f472-1f3ff\",\"native\":\"\uD83D\uDC72\uD83C\uDFFF\"}],\"version\":1},\"person_with_headscarf\":{\"id\":\"person_with_headscarf\",\"name\":\"Woman with Headscarf\",\"keywords\":[\"person\",\"female\",\"hijab\",\"mantilla\",\"tichel\"],\"skins\":[{\"unified\":\"1f9d5\",\"native\":\"\uD83E\uDDD5\"},{\"unified\":\"1f9d5-1f3fb\",\"native\":\"\uD83E\uDDD5\uD83C\uDFFB\"},{\"unified\":\"1f9d5-1f3fc\",\"native\":\"\uD83E\uDDD5\uD83C\uDFFC\"},{\"unified\":\"1f9d5-1f3fd\",\"native\":\"\uD83E\uDDD5\uD83C\uDFFD\"},{\"unified\":\"1f9d5-1f3fe\",\"native\":\"\uD83E\uDDD5\uD83C\uDFFE\"},{\"unified\":\"1f9d5-1f3ff\",\"native\":\"\uD83E\uDDD5\uD83C\uDFFF\"}],\"version\":5},\"person_in_tuxedo\":{\"id\":\"person_in_tuxedo\",\"name\":\"Man in Tuxedo\",\"keywords\":[\"person\",\"couple\",\"marriage\",\"wedding\",\"groom\"],\"skins\":[{\"unified\":\"1f935\",\"native\":\"\uD83E\uDD35\"},{\"unified\":\"1f935-1f3fb\",\"native\":\"\uD83E\uDD35\uD83C\uDFFB\"},{\"unified\":\"1f935-1f3fc\",\"native\":\"\uD83E\uDD35\uD83C\uDFFC\"},{\"unified\":\"1f935-1f3fd\",\"native\":\"\uD83E\uDD35\uD83C\uDFFD\"},{\"unified\":\"1f935-1f3fe\",\"native\":\"\uD83E\uDD35\uD83C\uDFFE\"},{\"unified\":\"1f935-1f3ff\",\"native\":\"\uD83E\uDD35\uD83C\uDFFF\"}],\"version\":3},\"man_in_tuxedo\":{\"id\":\"man_in_tuxedo\",\"name\":\"Man in Tuxedo\",\"keywords\":[\"formal\",\"fashion\"],\"skins\":[{\"unified\":\"1f935-200d-2642-fe0f\",\"native\":\"\uD83E\uDD35\u200D\u2642\uFE0F\"},{\"unified\":\"1f935-1f3fb-200d-2642-fe0f\",\"native\":\"\uD83E\uDD35\uD83C\uDFFB\u200D\u2642\uFE0F\"},{\"unified\":\"1f935-1f3fc-200d-2642-fe0f\",\"native\":\"\uD83E\uDD35\uD83C\uDFFC\u200D\u2642\uFE0F\"},{\"unified\":\"1f935-1f3fd-200d-2642-fe0f\",\"native\":\"\uD83E\uDD35\uD83C\uDFFD\u200D\u2642\uFE0F\"},{\"unified\":\"1f935-1f3fe-200d-2642-fe0f\",\"native\":\"\uD83E\uDD35\uD83C\uDFFE\u200D\u2642\uFE0F\"},{\"unified\":\"1f935-1f3ff-200d-2642-fe0f\",\"native\":\"\uD83E\uDD35\uD83C\uDFFF\u200D\u2642\uFE0F\"}],\"version\":13},\"woman_in_tuxedo\":{\"id\":\"woman_in_tuxedo\",\"name\":\"Woman in Tuxedo\",\"keywords\":[\"formal\",\"fashion\"],\"skins\":[{\"unified\":\"1f935-200d-2640-fe0f\",\"native\":\"\uD83E\uDD35\u200D\u2640\uFE0F\"},{\"unified\":\"1f935-1f3fb-200d-2640-fe0f\",\"native\":\"\uD83E\uDD35\uD83C\uDFFB\u200D\u2640\uFE0F\"},{\"unified\":\"1f935-1f3fc-200d-2640-fe0f\",\"native\":\"\uD83E\uDD35\uD83C\uDFFC\u200D\u2640\uFE0F\"},{\"unified\":\"1f935-1f3fd-200d-2640-fe0f\",\"native\":\"\uD83E\uDD35\uD83C\uDFFD\u200D\u2640\uFE0F\"},{\"unified\":\"1f935-1f3fe-200d-2640-fe0f\",\"native\":\"\uD83E\uDD35\uD83C\uDFFE\u200D\u2640\uFE0F\"},{\"unified\":\"1f935-1f3ff-200d-2640-fe0f\",\"native\":\"\uD83E\uDD35\uD83C\uDFFF\u200D\u2640\uFE0F\"}],\"version\":13},\"bride_with_veil\":{\"id\":\"bride_with_veil\",\"name\":\"Bride with Veil\",\"keywords\":[\"couple\",\"marriage\",\"wedding\",\"woman\"],\"skins\":[{\"unified\":\"1f470\",\"native\":\"\uD83D\uDC70\"},{\"unified\":\"1f470-1f3fb\",\"native\":\"\uD83D\uDC70\uD83C\uDFFB\"},{\"unified\":\"1f470-1f3fc\",\"native\":\"\uD83D\uDC70\uD83C\uDFFC\"},{\"unified\":\"1f470-1f3fd\",\"native\":\"\uD83D\uDC70\uD83C\uDFFD\"},{\"unified\":\"1f470-1f3fe\",\"native\":\"\uD83D\uDC70\uD83C\uDFFE\"},{\"unified\":\"1f470-1f3ff\",\"native\":\"\uD83D\uDC70\uD83C\uDFFF\"}],\"version\":1},\"man_with_veil\":{\"id\":\"man_with_veil\",\"name\":\"Man with Veil\",\"keywords\":[\"wedding\",\"marriage\"],\"skins\":[{\"unified\":\"1f470-200d-2642-fe0f\",\"native\":\"\uD83D\uDC70\u200D\u2642\uFE0F\"},{\"unified\":\"1f470-1f3fb-200d-2642-fe0f\",\"native\":\"\uD83D\uDC70\uD83C\uDFFB\u200D\u2642\uFE0F\"},{\"unified\":\"1f470-1f3fc-200d-2642-fe0f\",\"native\":\"\uD83D\uDC70\uD83C\uDFFC\u200D\u2642\uFE0F\"},{\"unified\":\"1f470-1f3fd-200d-2642-fe0f\",\"native\":\"\uD83D\uDC70\uD83C\uDFFD\u200D\u2642\uFE0F\"},{\"unified\":\"1f470-1f3fe-200d-2642-fe0f\",\"native\":\"\uD83D\uDC70\uD83C\uDFFE\u200D\u2642\uFE0F\"},{\"unified\":\"1f470-1f3ff-200d-2642-fe0f\",\"native\":\"\uD83D\uDC70\uD83C\uDFFF\u200D\u2642\uFE0F\"}],\"version\":13},\"woman_with_veil\":{\"id\":\"woman_with_veil\",\"name\":\"Woman with Veil\",\"keywords\":[\"wedding\",\"marriage\"],\"skins\":[{\"unified\":\"1f470-200d-2640-fe0f\",\"native\":\"\uD83D\uDC70\u200D\u2640\uFE0F\"},{\"unified\":\"1f470-1f3fb-200d-2640-fe0f\",\"native\":\"\uD83D\uDC70\uD83C\uDFFB\u200D\u2640\uFE0F\"},{\"unified\":\"1f470-1f3fc-200d-2640-fe0f\",\"native\":\"\uD83D\uDC70\uD83C\uDFFC\u200D\u2640\uFE0F\"},{\"unified\":\"1f470-1f3fd-200d-2640-fe0f\",\"native\":\"\uD83D\uDC70\uD83C\uDFFD\u200D\u2640\uFE0F\"},{\"unified\":\"1f470-1f3fe-200d-2640-fe0f\",\"native\":\"\uD83D\uDC70\uD83C\uDFFE\u200D\u2640\uFE0F\"},{\"unified\":\"1f470-1f3ff-200d-2640-fe0f\",\"native\":\"\uD83D\uDC70\uD83C\uDFFF\u200D\u2640\uFE0F\"}],\"version\":13},\"pregnant_woman\":{\"id\":\"pregnant_woman\",\"name\":\"Pregnant Woman\",\"keywords\":[\"baby\"],\"skins\":[{\"unified\":\"1f930\",\"native\":\"\uD83E\uDD30\"},{\"unified\":\"1f930-1f3fb\",\"native\":\"\uD83E\uDD30\uD83C\uDFFB\"},{\"unified\":\"1f930-1f3fc\",\"native\":\"\uD83E\uDD30\uD83C\uDFFC\"},{\"unified\":\"1f930-1f3fd\",\"native\":\"\uD83E\uDD30\uD83C\uDFFD\"},{\"unified\":\"1f930-1f3fe\",\"native\":\"\uD83E\uDD30\uD83C\uDFFE\"},{\"unified\":\"1f930-1f3ff\",\"native\":\"\uD83E\uDD30\uD83C\uDFFF\"}],\"version\":3},\"pregnant_man\":{\"id\":\"pregnant_man\",\"name\":\"Pregnant Man\",\"keywords\":[\"baby\",\"belly\"],\"skins\":[{\"unified\":\"1fac3\",\"native\":\"\uD83E\uDEC3\"},{\"unified\":\"1fac3-1f3fb\",\"native\":\"\uD83E\uDEC3\uD83C\uDFFB\"},{\"unified\":\"1fac3-1f3fc\",\"native\":\"\uD83E\uDEC3\uD83C\uDFFC\"},{\"unified\":\"1fac3-1f3fd\",\"native\":\"\uD83E\uDEC3\uD83C\uDFFD\"},{\"unified\":\"1fac3-1f3fe\",\"native\":\"\uD83E\uDEC3\uD83C\uDFFE\"},{\"unified\":\"1fac3-1f3ff\",\"native\":\"\uD83E\uDEC3\uD83C\uDFFF\"}],\"version\":14},\"pregnant_person\":{\"id\":\"pregnant_person\",\"name\":\"Pregnant Person\",\"keywords\":[\"baby\",\"belly\"],\"skins\":[{\"unified\":\"1fac4\",\"native\":\"\uD83E\uDEC4\"},{\"unified\":\"1fac4-1f3fb\",\"native\":\"\uD83E\uDEC4\uD83C\uDFFB\"},{\"unified\":\"1fac4-1f3fc\",\"native\":\"\uD83E\uDEC4\uD83C\uDFFC\"},{\"unified\":\"1fac4-1f3fd\",\"native\":\"\uD83E\uDEC4\uD83C\uDFFD\"},{\"unified\":\"1fac4-1f3fe\",\"native\":\"\uD83E\uDEC4\uD83C\uDFFE\"},{\"unified\":\"1fac4-1f3ff\",\"native\":\"\uD83E\uDEC4\uD83C\uDFFF\"}],\"version\":14},\"breast-feeding\":{\"id\":\"breast-feeding\",\"name\":\"Breast-Feeding\",\"keywords\":[\"breast\",\"feeding\",\"nursing\",\"baby\"],\"skins\":[{\"unified\":\"1f931\",\"native\":\"\uD83E\uDD31\"},{\"unified\":\"1f931-1f3fb\",\"native\":\"\uD83E\uDD31\uD83C\uDFFB\"},{\"unified\":\"1f931-1f3fc\",\"native\":\"\uD83E\uDD31\uD83C\uDFFC\"},{\"unified\":\"1f931-1f3fd\",\"native\":\"\uD83E\uDD31\uD83C\uDFFD\"},{\"unified\":\"1f931-1f3fe\",\"native\":\"\uD83E\uDD31\uD83C\uDFFE\"},{\"unified\":\"1f931-1f3ff\",\"native\":\"\uD83E\uDD31\uD83C\uDFFF\"}],\"version\":5},\"woman_feeding_baby\":{\"id\":\"woman_feeding_baby\",\"name\":\"Woman Feeding Baby\",\"keywords\":[\"birth\",\"food\"],\"skins\":[{\"unified\":\"1f469-200d-1f37c\",\"native\":\"\uD83D\uDC69\u200D\uD83C\uDF7C\"},{\"unified\":\"1f469-1f3fb-200d-1f37c\",\"native\":\"\uD83D\uDC69\uD83C\uDFFB\u200D\uD83C\uDF7C\"},{\"unified\":\"1f469-1f3fc-200d-1f37c\",\"native\":\"\uD83D\uDC69\uD83C\uDFFC\u200D\uD83C\uDF7C\"},{\"unified\":\"1f469-1f3fd-200d-1f37c\",\"native\":\"\uD83D\uDC69\uD83C\uDFFD\u200D\uD83C\uDF7C\"},{\"unified\":\"1f469-1f3fe-200d-1f37c\",\"native\":\"\uD83D\uDC69\uD83C\uDFFE\u200D\uD83C\uDF7C\"},{\"unified\":\"1f469-1f3ff-200d-1f37c\",\"native\":\"\uD83D\uDC69\uD83C\uDFFF\u200D\uD83C\uDF7C\"}],\"version\":13},\"man_feeding_baby\":{\"id\":\"man_feeding_baby\",\"name\":\"Man Feeding Baby\",\"keywords\":[\"birth\",\"food\"],\"skins\":[{\"unified\":\"1f468-200d-1f37c\",\"native\":\"\uD83D\uDC68\u200D\uD83C\uDF7C\"},{\"unified\":\"1f468-1f3fb-200d-1f37c\",\"native\":\"\uD83D\uDC68\uD83C\uDFFB\u200D\uD83C\uDF7C\"},{\"unified\":\"1f468-1f3fc-200d-1f37c\",\"native\":\"\uD83D\uDC68\uD83C\uDFFC\u200D\uD83C\uDF7C\"},{\"unified\":\"1f468-1f3fd-200d-1f37c\",\"native\":\"\uD83D\uDC68\uD83C\uDFFD\u200D\uD83C\uDF7C\"},{\"unified\":\"1f468-1f3fe-200d-1f37c\",\"native\":\"\uD83D\uDC68\uD83C\uDFFE\u200D\uD83C\uDF7C\"},{\"unified\":\"1f468-1f3ff-200d-1f37c\",\"native\":\"\uD83D\uDC68\uD83C\uDFFF\u200D\uD83C\uDF7C\"}],\"version\":13},\"person_feeding_baby\":{\"id\":\"person_feeding_baby\",\"name\":\"Person Feeding Baby\",\"keywords\":[\"birth\",\"food\"],\"skins\":[{\"unified\":\"1f9d1-200d-1f37c\",\"native\":\"\uD83E\uDDD1\u200D\uD83C\uDF7C\"},{\"unified\":\"1f9d1-1f3fb-200d-1f37c\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFB\u200D\uD83C\uDF7C\"},{\"unified\":\"1f9d1-1f3fc-200d-1f37c\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFC\u200D\uD83C\uDF7C\"},{\"unified\":\"1f9d1-1f3fd-200d-1f37c\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFD\u200D\uD83C\uDF7C\"},{\"unified\":\"1f9d1-1f3fe-200d-1f37c\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFE\u200D\uD83C\uDF7C\"},{\"unified\":\"1f9d1-1f3ff-200d-1f37c\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFF\u200D\uD83C\uDF7C\"}],\"version\":13},\"angel\":{\"id\":\"angel\",\"name\":\"Baby Angel\",\"keywords\":[\"heaven\",\"wings\",\"halo\"],\"skins\":[{\"unified\":\"1f47c\",\"native\":\"\uD83D\uDC7C\"},{\"unified\":\"1f47c-1f3fb\",\"native\":\"\uD83D\uDC7C\uD83C\uDFFB\"},{\"unified\":\"1f47c-1f3fc\",\"native\":\"\uD83D\uDC7C\uD83C\uDFFC\"},{\"unified\":\"1f47c-1f3fd\",\"native\":\"\uD83D\uDC7C\uD83C\uDFFD\"},{\"unified\":\"1f47c-1f3fe\",\"native\":\"\uD83D\uDC7C\uD83C\uDFFE\"},{\"unified\":\"1f47c-1f3ff\",\"native\":\"\uD83D\uDC7C\uD83C\uDFFF\"}],\"version\":1},\"santa\":{\"id\":\"santa\",\"name\":\"Santa Claus\",\"keywords\":[\"festival\",\"man\",\"male\",\"xmas\",\"father\",\"christmas\"],\"skins\":[{\"unified\":\"1f385\",\"native\":\"\uD83C\uDF85\"},{\"unified\":\"1f385-1f3fb\",\"native\":\"\uD83C\uDF85\uD83C\uDFFB\"},{\"unified\":\"1f385-1f3fc\",\"native\":\"\uD83C\uDF85\uD83C\uDFFC\"},{\"unified\":\"1f385-1f3fd\",\"native\":\"\uD83C\uDF85\uD83C\uDFFD\"},{\"unified\":\"1f385-1f3fe\",\"native\":\"\uD83C\uDF85\uD83C\uDFFE\"},{\"unified\":\"1f385-1f3ff\",\"native\":\"\uD83C\uDF85\uD83C\uDFFF\"}],\"version\":1},\"mrs_claus\":{\"id\":\"mrs_claus\",\"name\":\"Mrs. Claus\",\"keywords\":[\"mrs\",\"mother\",\"christmas\",\"woman\",\"female\",\"xmas\"],\"skins\":[{\"unified\":\"1f936\",\"native\":\"\uD83E\uDD36\"},{\"unified\":\"1f936-1f3fb\",\"native\":\"\uD83E\uDD36\uD83C\uDFFB\"},{\"unified\":\"1f936-1f3fc\",\"native\":\"\uD83E\uDD36\uD83C\uDFFC\"},{\"unified\":\"1f936-1f3fd\",\"native\":\"\uD83E\uDD36\uD83C\uDFFD\"},{\"unified\":\"1f936-1f3fe\",\"native\":\"\uD83E\uDD36\uD83C\uDFFE\"},{\"unified\":\"1f936-1f3ff\",\"native\":\"\uD83E\uDD36\uD83C\uDFFF\"}],\"version\":3},\"mx_claus\":{\"id\":\"mx_claus\",\"name\":\"Mx Claus\",\"keywords\":[\"christmas\"],\"skins\":[{\"unified\":\"1f9d1-200d-1f384\",\"native\":\"\uD83E\uDDD1\u200D\uD83C\uDF84\"},{\"unified\":\"1f9d1-1f3fb-200d-1f384\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFB\u200D\uD83C\uDF84\"},{\"unified\":\"1f9d1-1f3fc-200d-1f384\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFC\u200D\uD83C\uDF84\"},{\"unified\":\"1f9d1-1f3fd-200d-1f384\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFD\u200D\uD83C\uDF84\"},{\"unified\":\"1f9d1-1f3fe-200d-1f384\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFE\u200D\uD83C\uDF84\"},{\"unified\":\"1f9d1-1f3ff-200d-1f384\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFF\u200D\uD83C\uDF84\"}],\"version\":13},\"superhero\":{\"id\":\"superhero\",\"name\":\"Superhero\",\"keywords\":[\"marvel\"],\"skins\":[{\"unified\":\"1f9b8\",\"native\":\"\uD83E\uDDB8\"},{\"unified\":\"1f9b8-1f3fb\",\"native\":\"\uD83E\uDDB8\uD83C\uDFFB\"},{\"unified\":\"1f9b8-1f3fc\",\"native\":\"\uD83E\uDDB8\uD83C\uDFFC\"},{\"unified\":\"1f9b8-1f3fd\",\"native\":\"\uD83E\uDDB8\uD83C\uDFFD\"},{\"unified\":\"1f9b8-1f3fe\",\"native\":\"\uD83E\uDDB8\uD83C\uDFFE\"},{\"unified\":\"1f9b8-1f3ff\",\"native\":\"\uD83E\uDDB8\uD83C\uDFFF\"}],\"version\":11},\"male_superhero\":{\"id\":\"male_superhero\",\"name\":\"Man Superhero\",\"keywords\":[\"male\",\"good\",\"hero\",\"superpowers\"],\"skins\":[{\"unified\":\"1f9b8-200d-2642-fe0f\",\"native\":\"\uD83E\uDDB8\u200D\u2642\uFE0F\"},{\"unified\":\"1f9b8-1f3fb-200d-2642-fe0f\",\"native\":\"\uD83E\uDDB8\uD83C\uDFFB\u200D\u2642\uFE0F\"},{\"unified\":\"1f9b8-1f3fc-200d-2642-fe0f\",\"native\":\"\uD83E\uDDB8\uD83C\uDFFC\u200D\u2642\uFE0F\"},{\"unified\":\"1f9b8-1f3fd-200d-2642-fe0f\",\"native\":\"\uD83E\uDDB8\uD83C\uDFFD\u200D\u2642\uFE0F\"},{\"unified\":\"1f9b8-1f3fe-200d-2642-fe0f\",\"native\":\"\uD83E\uDDB8\uD83C\uDFFE\u200D\u2642\uFE0F\"},{\"unified\":\"1f9b8-1f3ff-200d-2642-fe0f\",\"native\":\"\uD83E\uDDB8\uD83C\uDFFF\u200D\u2642\uFE0F\"}],\"version\":11},\"female_superhero\":{\"id\":\"female_superhero\",\"name\":\"Woman Superhero\",\"keywords\":[\"female\",\"good\",\"heroine\",\"superpowers\"],\"skins\":[{\"unified\":\"1f9b8-200d-2640-fe0f\",\"native\":\"\uD83E\uDDB8\u200D\u2640\uFE0F\"},{\"unified\":\"1f9b8-1f3fb-200d-2640-fe0f\",\"native\":\"\uD83E\uDDB8\uD83C\uDFFB\u200D\u2640\uFE0F\"},{\"unified\":\"1f9b8-1f3fc-200d-2640-fe0f\",\"native\":\"\uD83E\uDDB8\uD83C\uDFFC\u200D\u2640\uFE0F\"},{\"unified\":\"1f9b8-1f3fd-200d-2640-fe0f\",\"native\":\"\uD83E\uDDB8\uD83C\uDFFD\u200D\u2640\uFE0F\"},{\"unified\":\"1f9b8-1f3fe-200d-2640-fe0f\",\"native\":\"\uD83E\uDDB8\uD83C\uDFFE\u200D\u2640\uFE0F\"},{\"unified\":\"1f9b8-1f3ff-200d-2640-fe0f\",\"native\":\"\uD83E\uDDB8\uD83C\uDFFF\u200D\u2640\uFE0F\"}],\"version\":11},\"supervillain\":{\"id\":\"supervillain\",\"name\":\"Supervillain\",\"keywords\":[\"marvel\"],\"skins\":[{\"unified\":\"1f9b9\",\"native\":\"\uD83E\uDDB9\"},{\"unified\":\"1f9b9-1f3fb\",\"native\":\"\uD83E\uDDB9\uD83C\uDFFB\"},{\"unified\":\"1f9b9-1f3fc\",\"native\":\"\uD83E\uDDB9\uD83C\uDFFC\"},{\"unified\":\"1f9b9-1f3fd\",\"native\":\"\uD83E\uDDB9\uD83C\uDFFD\"},{\"unified\":\"1f9b9-1f3fe\",\"native\":\"\uD83E\uDDB9\uD83C\uDFFE\"},{\"unified\":\"1f9b9-1f3ff\",\"native\":\"\uD83E\uDDB9\uD83C\uDFFF\"}],\"version\":11},\"male_supervillain\":{\"id\":\"male_supervillain\",\"name\":\"Man Supervillain\",\"keywords\":[\"male\",\"evil\",\"bad\",\"criminal\",\"hero\",\"superpowers\"],\"skins\":[{\"unified\":\"1f9b9-200d-2642-fe0f\",\"native\":\"\uD83E\uDDB9\u200D\u2642\uFE0F\"},{\"unified\":\"1f9b9-1f3fb-200d-2642-fe0f\",\"native\":\"\uD83E\uDDB9\uD83C\uDFFB\u200D\u2642\uFE0F\"},{\"unified\":\"1f9b9-1f3fc-200d-2642-fe0f\",\"native\":\"\uD83E\uDDB9\uD83C\uDFFC\u200D\u2642\uFE0F\"},{\"unified\":\"1f9b9-1f3fd-200d-2642-fe0f\",\"native\":\"\uD83E\uDDB9\uD83C\uDFFD\u200D\u2642\uFE0F\"},{\"unified\":\"1f9b9-1f3fe-200d-2642-fe0f\",\"native\":\"\uD83E\uDDB9\uD83C\uDFFE\u200D\u2642\uFE0F\"},{\"unified\":\"1f9b9-1f3ff-200d-2642-fe0f\",\"native\":\"\uD83E\uDDB9\uD83C\uDFFF\u200D\u2642\uFE0F\"}],\"version\":11},\"female_supervillain\":{\"id\":\"female_supervillain\",\"name\":\"Woman Supervillain\",\"keywords\":[\"female\",\"evil\",\"bad\",\"criminal\",\"heroine\",\"superpowers\"],\"skins\":[{\"unified\":\"1f9b9-200d-2640-fe0f\",\"native\":\"\uD83E\uDDB9\u200D\u2640\uFE0F\"},{\"unified\":\"1f9b9-1f3fb-200d-2640-fe0f\",\"native\":\"\uD83E\uDDB9\uD83C\uDFFB\u200D\u2640\uFE0F\"},{\"unified\":\"1f9b9-1f3fc-200d-2640-fe0f\",\"native\":\"\uD83E\uDDB9\uD83C\uDFFC\u200D\u2640\uFE0F\"},{\"unified\":\"1f9b9-1f3fd-200d-2640-fe0f\",\"native\":\"\uD83E\uDDB9\uD83C\uDFFD\u200D\u2640\uFE0F\"},{\"unified\":\"1f9b9-1f3fe-200d-2640-fe0f\",\"native\":\"\uD83E\uDDB9\uD83C\uDFFE\u200D\u2640\uFE0F\"},{\"unified\":\"1f9b9-1f3ff-200d-2640-fe0f\",\"native\":\"\uD83E\uDDB9\uD83C\uDFFF\u200D\u2640\uFE0F\"}],\"version\":11},\"mage\":{\"id\":\"mage\",\"name\":\"Mage\",\"keywords\":[\"magic\"],\"skins\":[{\"unified\":\"1f9d9\",\"native\":\"\uD83E\uDDD9\"},{\"unified\":\"1f9d9-1f3fb\",\"native\":\"\uD83E\uDDD9\uD83C\uDFFB\"},{\"unified\":\"1f9d9-1f3fc\",\"native\":\"\uD83E\uDDD9\uD83C\uDFFC\"},{\"unified\":\"1f9d9-1f3fd\",\"native\":\"\uD83E\uDDD9\uD83C\uDFFD\"},{\"unified\":\"1f9d9-1f3fe\",\"native\":\"\uD83E\uDDD9\uD83C\uDFFE\"},{\"unified\":\"1f9d9-1f3ff\",\"native\":\"\uD83E\uDDD9\uD83C\uDFFF\"}],\"version\":5},\"male_mage\":{\"id\":\"male_mage\",\"name\":\"Man Mage\",\"keywords\":[\"male\",\"sorcerer\"],\"skins\":[{\"unified\":\"1f9d9-200d-2642-fe0f\",\"native\":\"\uD83E\uDDD9\u200D\u2642\uFE0F\"},{\"unified\":\"1f9d9-1f3fb-200d-2642-fe0f\",\"native\":\"\uD83E\uDDD9\uD83C\uDFFB\u200D\u2642\uFE0F\"},{\"unified\":\"1f9d9-1f3fc-200d-2642-fe0f\",\"native\":\"\uD83E\uDDD9\uD83C\uDFFC\u200D\u2642\uFE0F\"},{\"unified\":\"1f9d9-1f3fd-200d-2642-fe0f\",\"native\":\"\uD83E\uDDD9\uD83C\uDFFD\u200D\u2642\uFE0F\"},{\"unified\":\"1f9d9-1f3fe-200d-2642-fe0f\",\"native\":\"\uD83E\uDDD9\uD83C\uDFFE\u200D\u2642\uFE0F\"},{\"unified\":\"1f9d9-1f3ff-200d-2642-fe0f\",\"native\":\"\uD83E\uDDD9\uD83C\uDFFF\u200D\u2642\uFE0F\"}],\"version\":5},\"female_mage\":{\"id\":\"female_mage\",\"name\":\"Woman Mage\",\"keywords\":[\"female\",\"witch\"],\"skins\":[{\"unified\":\"1f9d9-200d-2640-fe0f\",\"native\":\"\uD83E\uDDD9\u200D\u2640\uFE0F\"},{\"unified\":\"1f9d9-1f3fb-200d-2640-fe0f\",\"native\":\"\uD83E\uDDD9\uD83C\uDFFB\u200D\u2640\uFE0F\"},{\"unified\":\"1f9d9-1f3fc-200d-2640-fe0f\",\"native\":\"\uD83E\uDDD9\uD83C\uDFFC\u200D\u2640\uFE0F\"},{\"unified\":\"1f9d9-1f3fd-200d-2640-fe0f\",\"native\":\"\uD83E\uDDD9\uD83C\uDFFD\u200D\u2640\uFE0F\"},{\"unified\":\"1f9d9-1f3fe-200d-2640-fe0f\",\"native\":\"\uD83E\uDDD9\uD83C\uDFFE\u200D\u2640\uFE0F\"},{\"unified\":\"1f9d9-1f3ff-200d-2640-fe0f\",\"native\":\"\uD83E\uDDD9\uD83C\uDFFF\u200D\u2640\uFE0F\"}],\"version\":5},\"fairy\":{\"id\":\"fairy\",\"name\":\"Fairy\",\"keywords\":[\"wings\",\"magical\"],\"skins\":[{\"unified\":\"1f9da\",\"native\":\"\uD83E\uDDDA\"},{\"unified\":\"1f9da-1f3fb\",\"native\":\"\uD83E\uDDDA\uD83C\uDFFB\"},{\"unified\":\"1f9da-1f3fc\",\"native\":\"\uD83E\uDDDA\uD83C\uDFFC\"},{\"unified\":\"1f9da-1f3fd\",\"native\":\"\uD83E\uDDDA\uD83C\uDFFD\"},{\"unified\":\"1f9da-1f3fe\",\"native\":\"\uD83E\uDDDA\uD83C\uDFFE\"},{\"unified\":\"1f9da-1f3ff\",\"native\":\"\uD83E\uDDDA\uD83C\uDFFF\"}],\"version\":5},\"male_fairy\":{\"id\":\"male_fairy\",\"name\":\"Man Fairy\",\"keywords\":[\"male\"],\"skins\":[{\"unified\":\"1f9da-200d-2642-fe0f\",\"native\":\"\uD83E\uDDDA\u200D\u2642\uFE0F\"},{\"unified\":\"1f9da-1f3fb-200d-2642-fe0f\",\"native\":\"\uD83E\uDDDA\uD83C\uDFFB\u200D\u2642\uFE0F\"},{\"unified\":\"1f9da-1f3fc-200d-2642-fe0f\",\"native\":\"\uD83E\uDDDA\uD83C\uDFFC\u200D\u2642\uFE0F\"},{\"unified\":\"1f9da-1f3fd-200d-2642-fe0f\",\"native\":\"\uD83E\uDDDA\uD83C\uDFFD\u200D\u2642\uFE0F\"},{\"unified\":\"1f9da-1f3fe-200d-2642-fe0f\",\"native\":\"\uD83E\uDDDA\uD83C\uDFFE\u200D\u2642\uFE0F\"},{\"unified\":\"1f9da-1f3ff-200d-2642-fe0f\",\"native\":\"\uD83E\uDDDA\uD83C\uDFFF\u200D\u2642\uFE0F\"}],\"version\":5},\"female_fairy\":{\"id\":\"female_fairy\",\"name\":\"Woman Fairy\",\"keywords\":[\"female\"],\"skins\":[{\"unified\":\"1f9da-200d-2640-fe0f\",\"native\":\"\uD83E\uDDDA\u200D\u2640\uFE0F\"},{\"unified\":\"1f9da-1f3fb-200d-2640-fe0f\",\"native\":\"\uD83E\uDDDA\uD83C\uDFFB\u200D\u2640\uFE0F\"},{\"unified\":\"1f9da-1f3fc-200d-2640-fe0f\",\"native\":\"\uD83E\uDDDA\uD83C\uDFFC\u200D\u2640\uFE0F\"},{\"unified\":\"1f9da-1f3fd-200d-2640-fe0f\",\"native\":\"\uD83E\uDDDA\uD83C\uDFFD\u200D\u2640\uFE0F\"},{\"unified\":\"1f9da-1f3fe-200d-2640-fe0f\",\"native\":\"\uD83E\uDDDA\uD83C\uDFFE\u200D\u2640\uFE0F\"},{\"unified\":\"1f9da-1f3ff-200d-2640-fe0f\",\"native\":\"\uD83E\uDDDA\uD83C\uDFFF\u200D\u2640\uFE0F\"}],\"version\":5},\"vampire\":{\"id\":\"vampire\",\"name\":\"Vampire\",\"keywords\":[\"blood\",\"twilight\"],\"skins\":[{\"unified\":\"1f9db\",\"native\":\"\uD83E\uDDDB\"},{\"unified\":\"1f9db-1f3fb\",\"native\":\"\uD83E\uDDDB\uD83C\uDFFB\"},{\"unified\":\"1f9db-1f3fc\",\"native\":\"\uD83E\uDDDB\uD83C\uDFFC\"},{\"unified\":\"1f9db-1f3fd\",\"native\":\"\uD83E\uDDDB\uD83C\uDFFD\"},{\"unified\":\"1f9db-1f3fe\",\"native\":\"\uD83E\uDDDB\uD83C\uDFFE\"},{\"unified\":\"1f9db-1f3ff\",\"native\":\"\uD83E\uDDDB\uD83C\uDFFF\"}],\"version\":5},\"male_vampire\":{\"id\":\"male_vampire\",\"name\":\"Man Vampire\",\"keywords\":[\"male\",\"dracula\"],\"skins\":[{\"unified\":\"1f9db-200d-2642-fe0f\",\"native\":\"\uD83E\uDDDB\u200D\u2642\uFE0F\"},{\"unified\":\"1f9db-1f3fb-200d-2642-fe0f\",\"native\":\"\uD83E\uDDDB\uD83C\uDFFB\u200D\u2642\uFE0F\"},{\"unified\":\"1f9db-1f3fc-200d-2642-fe0f\",\"native\":\"\uD83E\uDDDB\uD83C\uDFFC\u200D\u2642\uFE0F\"},{\"unified\":\"1f9db-1f3fd-200d-2642-fe0f\",\"native\":\"\uD83E\uDDDB\uD83C\uDFFD\u200D\u2642\uFE0F\"},{\"unified\":\"1f9db-1f3fe-200d-2642-fe0f\",\"native\":\"\uD83E\uDDDB\uD83C\uDFFE\u200D\u2642\uFE0F\"},{\"unified\":\"1f9db-1f3ff-200d-2642-fe0f\",\"native\":\"\uD83E\uDDDB\uD83C\uDFFF\u200D\u2642\uFE0F\"}],\"version\":5},\"female_vampire\":{\"id\":\"female_vampire\",\"name\":\"Woman Vampire\",\"keywords\":[\"female\"],\"skins\":[{\"unified\":\"1f9db-200d-2640-fe0f\",\"native\":\"\uD83E\uDDDB\u200D\u2640\uFE0F\"},{\"unified\":\"1f9db-1f3fb-200d-2640-fe0f\",\"native\":\"\uD83E\uDDDB\uD83C\uDFFB\u200D\u2640\uFE0F\"},{\"unified\":\"1f9db-1f3fc-200d-2640-fe0f\",\"native\":\"\uD83E\uDDDB\uD83C\uDFFC\u200D\u2640\uFE0F\"},{\"unified\":\"1f9db-1f3fd-200d-2640-fe0f\",\"native\":\"\uD83E\uDDDB\uD83C\uDFFD\u200D\u2640\uFE0F\"},{\"unified\":\"1f9db-1f3fe-200d-2640-fe0f\",\"native\":\"\uD83E\uDDDB\uD83C\uDFFE\u200D\u2640\uFE0F\"},{\"unified\":\"1f9db-1f3ff-200d-2640-fe0f\",\"native\":\"\uD83E\uDDDB\uD83C\uDFFF\u200D\u2640\uFE0F\"}],\"version\":5},\"merperson\":{\"id\":\"merperson\",\"name\":\"Merperson\",\"keywords\":[\"sea\"],\"skins\":[{\"unified\":\"1f9dc\",\"native\":\"\uD83E\uDDDC\"},{\"unified\":\"1f9dc-1f3fb\",\"native\":\"\uD83E\uDDDC\uD83C\uDFFB\"},{\"unified\":\"1f9dc-1f3fc\",\"native\":\"\uD83E\uDDDC\uD83C\uDFFC\"},{\"unified\":\"1f9dc-1f3fd\",\"native\":\"\uD83E\uDDDC\uD83C\uDFFD\"},{\"unified\":\"1f9dc-1f3fe\",\"native\":\"\uD83E\uDDDC\uD83C\uDFFE\"},{\"unified\":\"1f9dc-1f3ff\",\"native\":\"\uD83E\uDDDC\uD83C\uDFFF\"}],\"version\":5},\"merman\":{\"id\":\"merman\",\"name\":\"Merman\",\"keywords\":[\"man\",\"male\",\"triton\"],\"skins\":[{\"unified\":\"1f9dc-200d-2642-fe0f\",\"native\":\"\uD83E\uDDDC\u200D\u2642\uFE0F\"},{\"unified\":\"1f9dc-1f3fb-200d-2642-fe0f\",\"native\":\"\uD83E\uDDDC\uD83C\uDFFB\u200D\u2642\uFE0F\"},{\"unified\":\"1f9dc-1f3fc-200d-2642-fe0f\",\"native\":\"\uD83E\uDDDC\uD83C\uDFFC\u200D\u2642\uFE0F\"},{\"unified\":\"1f9dc-1f3fd-200d-2642-fe0f\",\"native\":\"\uD83E\uDDDC\uD83C\uDFFD\u200D\u2642\uFE0F\"},{\"unified\":\"1f9dc-1f3fe-200d-2642-fe0f\",\"native\":\"\uD83E\uDDDC\uD83C\uDFFE\u200D\u2642\uFE0F\"},{\"unified\":\"1f9dc-1f3ff-200d-2642-fe0f\",\"native\":\"\uD83E\uDDDC\uD83C\uDFFF\u200D\u2642\uFE0F\"}],\"version\":5},\"mermaid\":{\"id\":\"mermaid\",\"name\":\"Mermaid\",\"keywords\":[\"woman\",\"female\",\"merwoman\",\"ariel\"],\"skins\":[{\"unified\":\"1f9dc-200d-2640-fe0f\",\"native\":\"\uD83E\uDDDC\u200D\u2640\uFE0F\"},{\"unified\":\"1f9dc-1f3fb-200d-2640-fe0f\",\"native\":\"\uD83E\uDDDC\uD83C\uDFFB\u200D\u2640\uFE0F\"},{\"unified\":\"1f9dc-1f3fc-200d-2640-fe0f\",\"native\":\"\uD83E\uDDDC\uD83C\uDFFC\u200D\u2640\uFE0F\"},{\"unified\":\"1f9dc-1f3fd-200d-2640-fe0f\",\"native\":\"\uD83E\uDDDC\uD83C\uDFFD\u200D\u2640\uFE0F\"},{\"unified\":\"1f9dc-1f3fe-200d-2640-fe0f\",\"native\":\"\uD83E\uDDDC\uD83C\uDFFE\u200D\u2640\uFE0F\"},{\"unified\":\"1f9dc-1f3ff-200d-2640-fe0f\",\"native\":\"\uD83E\uDDDC\uD83C\uDFFF\u200D\u2640\uFE0F\"}],\"version\":5},\"elf\":{\"id\":\"elf\",\"name\":\"Elf\",\"keywords\":[\"magical\"],\"skins\":[{\"unified\":\"1f9dd\",\"native\":\"\uD83E\uDDDD\"},{\"unified\":\"1f9dd-1f3fb\",\"native\":\"\uD83E\uDDDD\uD83C\uDFFB\"},{\"unified\":\"1f9dd-1f3fc\",\"native\":\"\uD83E\uDDDD\uD83C\uDFFC\"},{\"unified\":\"1f9dd-1f3fd\",\"native\":\"\uD83E\uDDDD\uD83C\uDFFD\"},{\"unified\":\"1f9dd-1f3fe\",\"native\":\"\uD83E\uDDDD\uD83C\uDFFE\"},{\"unified\":\"1f9dd-1f3ff\",\"native\":\"\uD83E\uDDDD\uD83C\uDFFF\"}],\"version\":5},\"male_elf\":{\"id\":\"male_elf\",\"name\":\"Man Elf\",\"keywords\":[\"male\"],\"skins\":[{\"unified\":\"1f9dd-200d-2642-fe0f\",\"native\":\"\uD83E\uDDDD\u200D\u2642\uFE0F\"},{\"unified\":\"1f9dd-1f3fb-200d-2642-fe0f\",\"native\":\"\uD83E\uDDDD\uD83C\uDFFB\u200D\u2642\uFE0F\"},{\"unified\":\"1f9dd-1f3fc-200d-2642-fe0f\",\"native\":\"\uD83E\uDDDD\uD83C\uDFFC\u200D\u2642\uFE0F\"},{\"unified\":\"1f9dd-1f3fd-200d-2642-fe0f\",\"native\":\"\uD83E\uDDDD\uD83C\uDFFD\u200D\u2642\uFE0F\"},{\"unified\":\"1f9dd-1f3fe-200d-2642-fe0f\",\"native\":\"\uD83E\uDDDD\uD83C\uDFFE\u200D\u2642\uFE0F\"},{\"unified\":\"1f9dd-1f3ff-200d-2642-fe0f\",\"native\":\"\uD83E\uDDDD\uD83C\uDFFF\u200D\u2642\uFE0F\"}],\"version\":5},\"female_elf\":{\"id\":\"female_elf\",\"name\":\"Woman Elf\",\"keywords\":[\"female\"],\"skins\":[{\"unified\":\"1f9dd-200d-2640-fe0f\",\"native\":\"\uD83E\uDDDD\u200D\u2640\uFE0F\"},{\"unified\":\"1f9dd-1f3fb-200d-2640-fe0f\",\"native\":\"\uD83E\uDDDD\uD83C\uDFFB\u200D\u2640\uFE0F\"},{\"unified\":\"1f9dd-1f3fc-200d-2640-fe0f\",\"native\":\"\uD83E\uDDDD\uD83C\uDFFC\u200D\u2640\uFE0F\"},{\"unified\":\"1f9dd-1f3fd-200d-2640-fe0f\",\"native\":\"\uD83E\uDDDD\uD83C\uDFFD\u200D\u2640\uFE0F\"},{\"unified\":\"1f9dd-1f3fe-200d-2640-fe0f\",\"native\":\"\uD83E\uDDDD\uD83C\uDFFE\u200D\u2640\uFE0F\"},{\"unified\":\"1f9dd-1f3ff-200d-2640-fe0f\",\"native\":\"\uD83E\uDDDD\uD83C\uDFFF\u200D\u2640\uFE0F\"}],\"version\":5},\"genie\":{\"id\":\"genie\",\"name\":\"Genie\",\"keywords\":[\"magical\",\"wishes\"],\"skins\":[{\"unified\":\"1f9de\",\"native\":\"\uD83E\uDDDE\"}],\"version\":5},\"male_genie\":{\"id\":\"male_genie\",\"name\":\"Man Genie\",\"keywords\":[\"male\"],\"skins\":[{\"unified\":\"1f9de-200d-2642-fe0f\",\"native\":\"\uD83E\uDDDE\u200D\u2642\uFE0F\"}],\"version\":5},\"female_genie\":{\"id\":\"female_genie\",\"name\":\"Woman Genie\",\"keywords\":[\"female\"],\"skins\":[{\"unified\":\"1f9de-200d-2640-fe0f\",\"native\":\"\uD83E\uDDDE\u200D\u2640\uFE0F\"}],\"version\":5},\"zombie\":{\"id\":\"zombie\",\"name\":\"Zombie\",\"keywords\":[\"dead\"],\"skins\":[{\"unified\":\"1f9df\",\"native\":\"\uD83E\uDDDF\"}],\"version\":5},\"male_zombie\":{\"id\":\"male_zombie\",\"name\":\"Man Zombie\",\"keywords\":[\"male\",\"dracula\",\"undead\",\"walking\",\"dead\"],\"skins\":[{\"unified\":\"1f9df-200d-2642-fe0f\",\"native\":\"\uD83E\uDDDF\u200D\u2642\uFE0F\"}],\"version\":5},\"female_zombie\":{\"id\":\"female_zombie\",\"name\":\"Woman Zombie\",\"keywords\":[\"female\",\"undead\",\"walking\",\"dead\"],\"skins\":[{\"unified\":\"1f9df-200d-2640-fe0f\",\"native\":\"\uD83E\uDDDF\u200D\u2640\uFE0F\"}],\"version\":5},\"troll\":{\"id\":\"troll\",\"name\":\"Troll\",\"keywords\":[\"mystical\",\"monster\"],\"skins\":[{\"unified\":\"1f9cc\",\"native\":\"\uD83E\uDDCC\"}],\"version\":14},\"massage\":{\"id\":\"massage\",\"name\":\"Face Massage\",\"keywords\":[\"person\",\"getting\",\"relax\"],\"skins\":[{\"unified\":\"1f486\",\"native\":\"\uD83D\uDC86\"},{\"unified\":\"1f486-1f3fb\",\"native\":\"\uD83D\uDC86\uD83C\uDFFB\"},{\"unified\":\"1f486-1f3fc\",\"native\":\"\uD83D\uDC86\uD83C\uDFFC\"},{\"unified\":\"1f486-1f3fd\",\"native\":\"\uD83D\uDC86\uD83C\uDFFD\"},{\"unified\":\"1f486-1f3fe\",\"native\":\"\uD83D\uDC86\uD83C\uDFFE\"},{\"unified\":\"1f486-1f3ff\",\"native\":\"\uD83D\uDC86\uD83C\uDFFF\"}],\"version\":1},\"man-getting-massage\":{\"id\":\"man-getting-massage\",\"name\":\"Man Getting Massage\",\"keywords\":[\"getting-massage\",\"male\",\"boy\",\"head\"],\"skins\":[{\"unified\":\"1f486-200d-2642-fe0f\",\"native\":\"\uD83D\uDC86\u200D\u2642\uFE0F\"},{\"unified\":\"1f486-1f3fb-200d-2642-fe0f\",\"native\":\"\uD83D\uDC86\uD83C\uDFFB\u200D\u2642\uFE0F\"},{\"unified\":\"1f486-1f3fc-200d-2642-fe0f\",\"native\":\"\uD83D\uDC86\uD83C\uDFFC\u200D\u2642\uFE0F\"},{\"unified\":\"1f486-1f3fd-200d-2642-fe0f\",\"native\":\"\uD83D\uDC86\uD83C\uDFFD\u200D\u2642\uFE0F\"},{\"unified\":\"1f486-1f3fe-200d-2642-fe0f\",\"native\":\"\uD83D\uDC86\uD83C\uDFFE\u200D\u2642\uFE0F\"},{\"unified\":\"1f486-1f3ff-200d-2642-fe0f\",\"native\":\"\uD83D\uDC86\uD83C\uDFFF\u200D\u2642\uFE0F\"}],\"version\":4},\"woman-getting-massage\":{\"id\":\"woman-getting-massage\",\"name\":\"Woman Getting Massage\",\"keywords\":[\"getting-massage\",\"female\",\"girl\",\"head\"],\"skins\":[{\"unified\":\"1f486-200d-2640-fe0f\",\"native\":\"\uD83D\uDC86\u200D\u2640\uFE0F\"},{\"unified\":\"1f486-1f3fb-200d-2640-fe0f\",\"native\":\"\uD83D\uDC86\uD83C\uDFFB\u200D\u2640\uFE0F\"},{\"unified\":\"1f486-1f3fc-200d-2640-fe0f\",\"native\":\"\uD83D\uDC86\uD83C\uDFFC\u200D\u2640\uFE0F\"},{\"unified\":\"1f486-1f3fd-200d-2640-fe0f\",\"native\":\"\uD83D\uDC86\uD83C\uDFFD\u200D\u2640\uFE0F\"},{\"unified\":\"1f486-1f3fe-200d-2640-fe0f\",\"native\":\"\uD83D\uDC86\uD83C\uDFFE\u200D\u2640\uFE0F\"},{\"unified\":\"1f486-1f3ff-200d-2640-fe0f\",\"native\":\"\uD83D\uDC86\uD83C\uDFFF\u200D\u2640\uFE0F\"}],\"version\":4},\"haircut\":{\"id\":\"haircut\",\"name\":\"Haircut\",\"keywords\":[\"person\",\"getting\",\"hairstyle\"],\"skins\":[{\"unified\":\"1f487\",\"native\":\"\uD83D\uDC87\"},{\"unified\":\"1f487-1f3fb\",\"native\":\"\uD83D\uDC87\uD83C\uDFFB\"},{\"unified\":\"1f487-1f3fc\",\"native\":\"\uD83D\uDC87\uD83C\uDFFC\"},{\"unified\":\"1f487-1f3fd\",\"native\":\"\uD83D\uDC87\uD83C\uDFFD\"},{\"unified\":\"1f487-1f3fe\",\"native\":\"\uD83D\uDC87\uD83C\uDFFE\"},{\"unified\":\"1f487-1f3ff\",\"native\":\"\uD83D\uDC87\uD83C\uDFFF\"}],\"version\":1},\"man-getting-haircut\":{\"id\":\"man-getting-haircut\",\"name\":\"Man Getting Haircut\",\"keywords\":[\"getting-haircut\",\"male\",\"boy\"],\"skins\":[{\"unified\":\"1f487-200d-2642-fe0f\",\"native\":\"\uD83D\uDC87\u200D\u2642\uFE0F\"},{\"unified\":\"1f487-1f3fb-200d-2642-fe0f\",\"native\":\"\uD83D\uDC87\uD83C\uDFFB\u200D\u2642\uFE0F\"},{\"unified\":\"1f487-1f3fc-200d-2642-fe0f\",\"native\":\"\uD83D\uDC87\uD83C\uDFFC\u200D\u2642\uFE0F\"},{\"unified\":\"1f487-1f3fd-200d-2642-fe0f\",\"native\":\"\uD83D\uDC87\uD83C\uDFFD\u200D\u2642\uFE0F\"},{\"unified\":\"1f487-1f3fe-200d-2642-fe0f\",\"native\":\"\uD83D\uDC87\uD83C\uDFFE\u200D\u2642\uFE0F\"},{\"unified\":\"1f487-1f3ff-200d-2642-fe0f\",\"native\":\"\uD83D\uDC87\uD83C\uDFFF\u200D\u2642\uFE0F\"}],\"version\":4},\"woman-getting-haircut\":{\"id\":\"woman-getting-haircut\",\"name\":\"Woman Getting Haircut\",\"keywords\":[\"getting-haircut\",\"female\",\"girl\"],\"skins\":[{\"unified\":\"1f487-200d-2640-fe0f\",\"native\":\"\uD83D\uDC87\u200D\u2640\uFE0F\"},{\"unified\":\"1f487-1f3fb-200d-2640-fe0f\",\"native\":\"\uD83D\uDC87\uD83C\uDFFB\u200D\u2640\uFE0F\"},{\"unified\":\"1f487-1f3fc-200d-2640-fe0f\",\"native\":\"\uD83D\uDC87\uD83C\uDFFC\u200D\u2640\uFE0F\"},{\"unified\":\"1f487-1f3fd-200d-2640-fe0f\",\"native\":\"\uD83D\uDC87\uD83C\uDFFD\u200D\u2640\uFE0F\"},{\"unified\":\"1f487-1f3fe-200d-2640-fe0f\",\"native\":\"\uD83D\uDC87\uD83C\uDFFE\u200D\u2640\uFE0F\"},{\"unified\":\"1f487-1f3ff-200d-2640-fe0f\",\"native\":\"\uD83D\uDC87\uD83C\uDFFF\u200D\u2640\uFE0F\"}],\"version\":4},\"walking\":{\"id\":\"walking\",\"name\":\"Pedestrian\",\"keywords\":[\"walking\",\"person\",\"move\"],\"skins\":[{\"unified\":\"1f6b6\",\"native\":\"\uD83D\uDEB6\"},{\"unified\":\"1f6b6-1f3fb\",\"native\":\"\uD83D\uDEB6\uD83C\uDFFB\"},{\"unified\":\"1f6b6-1f3fc\",\"native\":\"\uD83D\uDEB6\uD83C\uDFFC\"},{\"unified\":\"1f6b6-1f3fd\",\"native\":\"\uD83D\uDEB6\uD83C\uDFFD\"},{\"unified\":\"1f6b6-1f3fe\",\"native\":\"\uD83D\uDEB6\uD83C\uDFFE\"},{\"unified\":\"1f6b6-1f3ff\",\"native\":\"\uD83D\uDEB6\uD83C\uDFFF\"}],\"version\":1},\"man-walking\":{\"id\":\"man-walking\",\"name\":\"Man Walking\",\"keywords\":[\"human\",\"feet\",\"steps\"],\"skins\":[{\"unified\":\"1f6b6-200d-2642-fe0f\",\"native\":\"\uD83D\uDEB6\u200D\u2642\uFE0F\"},{\"unified\":\"1f6b6-1f3fb-200d-2642-fe0f\",\"native\":\"\uD83D\uDEB6\uD83C\uDFFB\u200D\u2642\uFE0F\"},{\"unified\":\"1f6b6-1f3fc-200d-2642-fe0f\",\"native\":\"\uD83D\uDEB6\uD83C\uDFFC\u200D\u2642\uFE0F\"},{\"unified\":\"1f6b6-1f3fd-200d-2642-fe0f\",\"native\":\"\uD83D\uDEB6\uD83C\uDFFD\u200D\u2642\uFE0F\"},{\"unified\":\"1f6b6-1f3fe-200d-2642-fe0f\",\"native\":\"\uD83D\uDEB6\uD83C\uDFFE\u200D\u2642\uFE0F\"},{\"unified\":\"1f6b6-1f3ff-200d-2642-fe0f\",\"native\":\"\uD83D\uDEB6\uD83C\uDFFF\u200D\u2642\uFE0F\"}],\"version\":4},\"woman-walking\":{\"id\":\"woman-walking\",\"name\":\"Woman Walking\",\"keywords\":[\"human\",\"feet\",\"steps\",\"female\"],\"skins\":[{\"unified\":\"1f6b6-200d-2640-fe0f\",\"native\":\"\uD83D\uDEB6\u200D\u2640\uFE0F\"},{\"unified\":\"1f6b6-1f3fb-200d-2640-fe0f\",\"native\":\"\uD83D\uDEB6\uD83C\uDFFB\u200D\u2640\uFE0F\"},{\"unified\":\"1f6b6-1f3fc-200d-2640-fe0f\",\"native\":\"\uD83D\uDEB6\uD83C\uDFFC\u200D\u2640\uFE0F\"},{\"unified\":\"1f6b6-1f3fd-200d-2640-fe0f\",\"native\":\"\uD83D\uDEB6\uD83C\uDFFD\u200D\u2640\uFE0F\"},{\"unified\":\"1f6b6-1f3fe-200d-2640-fe0f\",\"native\":\"\uD83D\uDEB6\uD83C\uDFFE\u200D\u2640\uFE0F\"},{\"unified\":\"1f6b6-1f3ff-200d-2640-fe0f\",\"native\":\"\uD83D\uDEB6\uD83C\uDFFF\u200D\u2640\uFE0F\"}],\"version\":4},\"standing_person\":{\"id\":\"standing_person\",\"name\":\"Standing Person\",\"keywords\":[\"still\"],\"skins\":[{\"unified\":\"1f9cd\",\"native\":\"\uD83E\uDDCD\"},{\"unified\":\"1f9cd-1f3fb\",\"native\":\"\uD83E\uDDCD\uD83C\uDFFB\"},{\"unified\":\"1f9cd-1f3fc\",\"native\":\"\uD83E\uDDCD\uD83C\uDFFC\"},{\"unified\":\"1f9cd-1f3fd\",\"native\":\"\uD83E\uDDCD\uD83C\uDFFD\"},{\"unified\":\"1f9cd-1f3fe\",\"native\":\"\uD83E\uDDCD\uD83C\uDFFE\"},{\"unified\":\"1f9cd-1f3ff\",\"native\":\"\uD83E\uDDCD\uD83C\uDFFF\"}],\"version\":12},\"man_standing\":{\"id\":\"man_standing\",\"name\":\"Man Standing\",\"keywords\":[\"still\"],\"skins\":[{\"unified\":\"1f9cd-200d-2642-fe0f\",\"native\":\"\uD83E\uDDCD\u200D\u2642\uFE0F\"},{\"unified\":\"1f9cd-1f3fb-200d-2642-fe0f\",\"native\":\"\uD83E\uDDCD\uD83C\uDFFB\u200D\u2642\uFE0F\"},{\"unified\":\"1f9cd-1f3fc-200d-2642-fe0f\",\"native\":\"\uD83E\uDDCD\uD83C\uDFFC\u200D\u2642\uFE0F\"},{\"unified\":\"1f9cd-1f3fd-200d-2642-fe0f\",\"native\":\"\uD83E\uDDCD\uD83C\uDFFD\u200D\u2642\uFE0F\"},{\"unified\":\"1f9cd-1f3fe-200d-2642-fe0f\",\"native\":\"\uD83E\uDDCD\uD83C\uDFFE\u200D\u2642\uFE0F\"},{\"unified\":\"1f9cd-1f3ff-200d-2642-fe0f\",\"native\":\"\uD83E\uDDCD\uD83C\uDFFF\u200D\u2642\uFE0F\"}],\"version\":12},\"woman_standing\":{\"id\":\"woman_standing\",\"name\":\"Woman Standing\",\"keywords\":[\"still\"],\"skins\":[{\"unified\":\"1f9cd-200d-2640-fe0f\",\"native\":\"\uD83E\uDDCD\u200D\u2640\uFE0F\"},{\"unified\":\"1f9cd-1f3fb-200d-2640-fe0f\",\"native\":\"\uD83E\uDDCD\uD83C\uDFFB\u200D\u2640\uFE0F\"},{\"unified\":\"1f9cd-1f3fc-200d-2640-fe0f\",\"native\":\"\uD83E\uDDCD\uD83C\uDFFC\u200D\u2640\uFE0F\"},{\"unified\":\"1f9cd-1f3fd-200d-2640-fe0f\",\"native\":\"\uD83E\uDDCD\uD83C\uDFFD\u200D\u2640\uFE0F\"},{\"unified\":\"1f9cd-1f3fe-200d-2640-fe0f\",\"native\":\"\uD83E\uDDCD\uD83C\uDFFE\u200D\u2640\uFE0F\"},{\"unified\":\"1f9cd-1f3ff-200d-2640-fe0f\",\"native\":\"\uD83E\uDDCD\uD83C\uDFFF\u200D\u2640\uFE0F\"}],\"version\":12},\"kneeling_person\":{\"id\":\"kneeling_person\",\"name\":\"Kneeling Person\",\"keywords\":[\"pray\",\"respectful\"],\"skins\":[{\"unified\":\"1f9ce\",\"native\":\"\uD83E\uDDCE\"},{\"unified\":\"1f9ce-1f3fb\",\"native\":\"\uD83E\uDDCE\uD83C\uDFFB\"},{\"unified\":\"1f9ce-1f3fc\",\"native\":\"\uD83E\uDDCE\uD83C\uDFFC\"},{\"unified\":\"1f9ce-1f3fd\",\"native\":\"\uD83E\uDDCE\uD83C\uDFFD\"},{\"unified\":\"1f9ce-1f3fe\",\"native\":\"\uD83E\uDDCE\uD83C\uDFFE\"},{\"unified\":\"1f9ce-1f3ff\",\"native\":\"\uD83E\uDDCE\uD83C\uDFFF\"}],\"version\":12},\"man_kneeling\":{\"id\":\"man_kneeling\",\"name\":\"Man Kneeling\",\"keywords\":[\"pray\",\"respectful\"],\"skins\":[{\"unified\":\"1f9ce-200d-2642-fe0f\",\"native\":\"\uD83E\uDDCE\u200D\u2642\uFE0F\"},{\"unified\":\"1f9ce-1f3fb-200d-2642-fe0f\",\"native\":\"\uD83E\uDDCE\uD83C\uDFFB\u200D\u2642\uFE0F\"},{\"unified\":\"1f9ce-1f3fc-200d-2642-fe0f\",\"native\":\"\uD83E\uDDCE\uD83C\uDFFC\u200D\u2642\uFE0F\"},{\"unified\":\"1f9ce-1f3fd-200d-2642-fe0f\",\"native\":\"\uD83E\uDDCE\uD83C\uDFFD\u200D\u2642\uFE0F\"},{\"unified\":\"1f9ce-1f3fe-200d-2642-fe0f\",\"native\":\"\uD83E\uDDCE\uD83C\uDFFE\u200D\u2642\uFE0F\"},{\"unified\":\"1f9ce-1f3ff-200d-2642-fe0f\",\"native\":\"\uD83E\uDDCE\uD83C\uDFFF\u200D\u2642\uFE0F\"}],\"version\":12},\"woman_kneeling\":{\"id\":\"woman_kneeling\",\"name\":\"Woman Kneeling\",\"keywords\":[\"respectful\",\"pray\"],\"skins\":[{\"unified\":\"1f9ce-200d-2640-fe0f\",\"native\":\"\uD83E\uDDCE\u200D\u2640\uFE0F\"},{\"unified\":\"1f9ce-1f3fb-200d-2640-fe0f\",\"native\":\"\uD83E\uDDCE\uD83C\uDFFB\u200D\u2640\uFE0F\"},{\"unified\":\"1f9ce-1f3fc-200d-2640-fe0f\",\"native\":\"\uD83E\uDDCE\uD83C\uDFFC\u200D\u2640\uFE0F\"},{\"unified\":\"1f9ce-1f3fd-200d-2640-fe0f\",\"native\":\"\uD83E\uDDCE\uD83C\uDFFD\u200D\u2640\uFE0F\"},{\"unified\":\"1f9ce-1f3fe-200d-2640-fe0f\",\"native\":\"\uD83E\uDDCE\uD83C\uDFFE\u200D\u2640\uFE0F\"},{\"unified\":\"1f9ce-1f3ff-200d-2640-fe0f\",\"native\":\"\uD83E\uDDCE\uD83C\uDFFF\u200D\u2640\uFE0F\"}],\"version\":12},\"person_with_probing_cane\":{\"id\":\"person_with_probing_cane\",\"name\":\"Person with White Cane\",\"keywords\":[\"probing\",\"blind\"],\"skins\":[{\"unified\":\"1f9d1-200d-1f9af\",\"native\":\"\uD83E\uDDD1\u200D\uD83E\uDDAF\"},{\"unified\":\"1f9d1-1f3fb-200d-1f9af\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFB\u200D\uD83E\uDDAF\"},{\"unified\":\"1f9d1-1f3fc-200d-1f9af\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFC\u200D\uD83E\uDDAF\"},{\"unified\":\"1f9d1-1f3fd-200d-1f9af\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFD\u200D\uD83E\uDDAF\"},{\"unified\":\"1f9d1-1f3fe-200d-1f9af\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFE\u200D\uD83E\uDDAF\"},{\"unified\":\"1f9d1-1f3ff-200d-1f9af\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFF\u200D\uD83E\uDDAF\"}],\"version\":12.1},\"man_with_probing_cane\":{\"id\":\"man_with_probing_cane\",\"name\":\"Man with White Cane\",\"keywords\":[\"probing\",\"blind\"],\"skins\":[{\"unified\":\"1f468-200d-1f9af\",\"native\":\"\uD83D\uDC68\u200D\uD83E\uDDAF\"},{\"unified\":\"1f468-1f3fb-200d-1f9af\",\"native\":\"\uD83D\uDC68\uD83C\uDFFB\u200D\uD83E\uDDAF\"},{\"unified\":\"1f468-1f3fc-200d-1f9af\",\"native\":\"\uD83D\uDC68\uD83C\uDFFC\u200D\uD83E\uDDAF\"},{\"unified\":\"1f468-1f3fd-200d-1f9af\",\"native\":\"\uD83D\uDC68\uD83C\uDFFD\u200D\uD83E\uDDAF\"},{\"unified\":\"1f468-1f3fe-200d-1f9af\",\"native\":\"\uD83D\uDC68\uD83C\uDFFE\u200D\uD83E\uDDAF\"},{\"unified\":\"1f468-1f3ff-200d-1f9af\",\"native\":\"\uD83D\uDC68\uD83C\uDFFF\u200D\uD83E\uDDAF\"}],\"version\":12},\"woman_with_probing_cane\":{\"id\":\"woman_with_probing_cane\",\"name\":\"Woman with White Cane\",\"keywords\":[\"probing\",\"blind\"],\"skins\":[{\"unified\":\"1f469-200d-1f9af\",\"native\":\"\uD83D\uDC69\u200D\uD83E\uDDAF\"},{\"unified\":\"1f469-1f3fb-200d-1f9af\",\"native\":\"\uD83D\uDC69\uD83C\uDFFB\u200D\uD83E\uDDAF\"},{\"unified\":\"1f469-1f3fc-200d-1f9af\",\"native\":\"\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDDAF\"},{\"unified\":\"1f469-1f3fd-200d-1f9af\",\"native\":\"\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDDAF\"},{\"unified\":\"1f469-1f3fe-200d-1f9af\",\"native\":\"\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDDAF\"},{\"unified\":\"1f469-1f3ff-200d-1f9af\",\"native\":\"\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDDAF\"}],\"version\":12},\"person_in_motorized_wheelchair\":{\"id\":\"person_in_motorized_wheelchair\",\"name\":\"Person in Motorized Wheelchair\",\"keywords\":[\"disability\",\"accessibility\"],\"skins\":[{\"unified\":\"1f9d1-200d-1f9bc\",\"native\":\"\uD83E\uDDD1\u200D\uD83E\uDDBC\"},{\"unified\":\"1f9d1-1f3fb-200d-1f9bc\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFB\u200D\uD83E\uDDBC\"},{\"unified\":\"1f9d1-1f3fc-200d-1f9bc\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFC\u200D\uD83E\uDDBC\"},{\"unified\":\"1f9d1-1f3fd-200d-1f9bc\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFD\u200D\uD83E\uDDBC\"},{\"unified\":\"1f9d1-1f3fe-200d-1f9bc\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFE\u200D\uD83E\uDDBC\"},{\"unified\":\"1f9d1-1f3ff-200d-1f9bc\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFF\u200D\uD83E\uDDBC\"}],\"version\":12.1},\"man_in_motorized_wheelchair\":{\"id\":\"man_in_motorized_wheelchair\",\"name\":\"Man in Motorized Wheelchair\",\"keywords\":[\"disability\",\"accessibility\"],\"skins\":[{\"unified\":\"1f468-200d-1f9bc\",\"native\":\"\uD83D\uDC68\u200D\uD83E\uDDBC\"},{\"unified\":\"1f468-1f3fb-200d-1f9bc\",\"native\":\"\uD83D\uDC68\uD83C\uDFFB\u200D\uD83E\uDDBC\"},{\"unified\":\"1f468-1f3fc-200d-1f9bc\",\"native\":\"\uD83D\uDC68\uD83C\uDFFC\u200D\uD83E\uDDBC\"},{\"unified\":\"1f468-1f3fd-200d-1f9bc\",\"native\":\"\uD83D\uDC68\uD83C\uDFFD\u200D\uD83E\uDDBC\"},{\"unified\":\"1f468-1f3fe-200d-1f9bc\",\"native\":\"\uD83D\uDC68\uD83C\uDFFE\u200D\uD83E\uDDBC\"},{\"unified\":\"1f468-1f3ff-200d-1f9bc\",\"native\":\"\uD83D\uDC68\uD83C\uDFFF\u200D\uD83E\uDDBC\"}],\"version\":12},\"woman_in_motorized_wheelchair\":{\"id\":\"woman_in_motorized_wheelchair\",\"name\":\"Woman in Motorized Wheelchair\",\"keywords\":[\"disability\",\"accessibility\"],\"skins\":[{\"unified\":\"1f469-200d-1f9bc\",\"native\":\"\uD83D\uDC69\u200D\uD83E\uDDBC\"},{\"unified\":\"1f469-1f3fb-200d-1f9bc\",\"native\":\"\uD83D\uDC69\uD83C\uDFFB\u200D\uD83E\uDDBC\"},{\"unified\":\"1f469-1f3fc-200d-1f9bc\",\"native\":\"\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDDBC\"},{\"unified\":\"1f469-1f3fd-200d-1f9bc\",\"native\":\"\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDDBC\"},{\"unified\":\"1f469-1f3fe-200d-1f9bc\",\"native\":\"\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDDBC\"},{\"unified\":\"1f469-1f3ff-200d-1f9bc\",\"native\":\"\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDDBC\"}],\"version\":12},\"person_in_manual_wheelchair\":{\"id\":\"person_in_manual_wheelchair\",\"name\":\"Person in Manual Wheelchair\",\"keywords\":[\"disability\",\"accessibility\"],\"skins\":[{\"unified\":\"1f9d1-200d-1f9bd\",\"native\":\"\uD83E\uDDD1\u200D\uD83E\uDDBD\"},{\"unified\":\"1f9d1-1f3fb-200d-1f9bd\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFB\u200D\uD83E\uDDBD\"},{\"unified\":\"1f9d1-1f3fc-200d-1f9bd\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFC\u200D\uD83E\uDDBD\"},{\"unified\":\"1f9d1-1f3fd-200d-1f9bd\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFD\u200D\uD83E\uDDBD\"},{\"unified\":\"1f9d1-1f3fe-200d-1f9bd\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFE\u200D\uD83E\uDDBD\"},{\"unified\":\"1f9d1-1f3ff-200d-1f9bd\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFF\u200D\uD83E\uDDBD\"}],\"version\":12.1},\"man_in_manual_wheelchair\":{\"id\":\"man_in_manual_wheelchair\",\"name\":\"Man in Manual Wheelchair\",\"keywords\":[\"disability\",\"accessibility\"],\"skins\":[{\"unified\":\"1f468-200d-1f9bd\",\"native\":\"\uD83D\uDC68\u200D\uD83E\uDDBD\"},{\"unified\":\"1f468-1f3fb-200d-1f9bd\",\"native\":\"\uD83D\uDC68\uD83C\uDFFB\u200D\uD83E\uDDBD\"},{\"unified\":\"1f468-1f3fc-200d-1f9bd\",\"native\":\"\uD83D\uDC68\uD83C\uDFFC\u200D\uD83E\uDDBD\"},{\"unified\":\"1f468-1f3fd-200d-1f9bd\",\"native\":\"\uD83D\uDC68\uD83C\uDFFD\u200D\uD83E\uDDBD\"},{\"unified\":\"1f468-1f3fe-200d-1f9bd\",\"native\":\"\uD83D\uDC68\uD83C\uDFFE\u200D\uD83E\uDDBD\"},{\"unified\":\"1f468-1f3ff-200d-1f9bd\",\"native\":\"\uD83D\uDC68\uD83C\uDFFF\u200D\uD83E\uDDBD\"}],\"version\":12},\"woman_in_manual_wheelchair\":{\"id\":\"woman_in_manual_wheelchair\",\"name\":\"Woman in Manual Wheelchair\",\"keywords\":[\"disability\",\"accessibility\"],\"skins\":[{\"unified\":\"1f469-200d-1f9bd\",\"native\":\"\uD83D\uDC69\u200D\uD83E\uDDBD\"},{\"unified\":\"1f469-1f3fb-200d-1f9bd\",\"native\":\"\uD83D\uDC69\uD83C\uDFFB\u200D\uD83E\uDDBD\"},{\"unified\":\"1f469-1f3fc-200d-1f9bd\",\"native\":\"\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDDBD\"},{\"unified\":\"1f469-1f3fd-200d-1f9bd\",\"native\":\"\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDDBD\"},{\"unified\":\"1f469-1f3fe-200d-1f9bd\",\"native\":\"\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDDBD\"},{\"unified\":\"1f469-1f3ff-200d-1f9bd\",\"native\":\"\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDDBD\"}],\"version\":12},\"runner\":{\"id\":\"runner\",\"name\":\"Runner\",\"keywords\":[\"running\",\"person\",\"move\"],\"skins\":[{\"unified\":\"1f3c3\",\"native\":\"\uD83C\uDFC3\"},{\"unified\":\"1f3c3-1f3fb\",\"native\":\"\uD83C\uDFC3\uD83C\uDFFB\"},{\"unified\":\"1f3c3-1f3fc\",\"native\":\"\uD83C\uDFC3\uD83C\uDFFC\"},{\"unified\":\"1f3c3-1f3fd\",\"native\":\"\uD83C\uDFC3\uD83C\uDFFD\"},{\"unified\":\"1f3c3-1f3fe\",\"native\":\"\uD83C\uDFC3\uD83C\uDFFE\"},{\"unified\":\"1f3c3-1f3ff\",\"native\":\"\uD83C\uDFC3\uD83C\uDFFF\"}],\"version\":1},\"man-running\":{\"id\":\"man-running\",\"name\":\"Man Running\",\"keywords\":[\"walking\",\"exercise\",\"race\"],\"skins\":[{\"unified\":\"1f3c3-200d-2642-fe0f\",\"native\":\"\uD83C\uDFC3\u200D\u2642\uFE0F\"},{\"unified\":\"1f3c3-1f3fb-200d-2642-fe0f\",\"native\":\"\uD83C\uDFC3\uD83C\uDFFB\u200D\u2642\uFE0F\"},{\"unified\":\"1f3c3-1f3fc-200d-2642-fe0f\",\"native\":\"\uD83C\uDFC3\uD83C\uDFFC\u200D\u2642\uFE0F\"},{\"unified\":\"1f3c3-1f3fd-200d-2642-fe0f\",\"native\":\"\uD83C\uDFC3\uD83C\uDFFD\u200D\u2642\uFE0F\"},{\"unified\":\"1f3c3-1f3fe-200d-2642-fe0f\",\"native\":\"\uD83C\uDFC3\uD83C\uDFFE\u200D\u2642\uFE0F\"},{\"unified\":\"1f3c3-1f3ff-200d-2642-fe0f\",\"native\":\"\uD83C\uDFC3\uD83C\uDFFF\u200D\u2642\uFE0F\"}],\"version\":4},\"woman-running\":{\"id\":\"woman-running\",\"name\":\"Woman Running\",\"keywords\":[\"walking\",\"exercise\",\"race\",\"female\"],\"skins\":[{\"unified\":\"1f3c3-200d-2640-fe0f\",\"native\":\"\uD83C\uDFC3\u200D\u2640\uFE0F\"},{\"unified\":\"1f3c3-1f3fb-200d-2640-fe0f\",\"native\":\"\uD83C\uDFC3\uD83C\uDFFB\u200D\u2640\uFE0F\"},{\"unified\":\"1f3c3-1f3fc-200d-2640-fe0f\",\"native\":\"\uD83C\uDFC3\uD83C\uDFFC\u200D\u2640\uFE0F\"},{\"unified\":\"1f3c3-1f3fd-200d-2640-fe0f\",\"native\":\"\uD83C\uDFC3\uD83C\uDFFD\u200D\u2640\uFE0F\"},{\"unified\":\"1f3c3-1f3fe-200d-2640-fe0f\",\"native\":\"\uD83C\uDFC3\uD83C\uDFFE\u200D\u2640\uFE0F\"},{\"unified\":\"1f3c3-1f3ff-200d-2640-fe0f\",\"native\":\"\uD83C\uDFC3\uD83C\uDFFF\u200D\u2640\uFE0F\"}],\"version\":4},\"dancer\":{\"id\":\"dancer\",\"name\":\"Dancer\",\"keywords\":[\"woman\",\"dancing\",\"female\",\"girl\",\"fun\"],\"skins\":[{\"unified\":\"1f483\",\"native\":\"\uD83D\uDC83\"},{\"unified\":\"1f483-1f3fb\",\"native\":\"\uD83D\uDC83\uD83C\uDFFB\"},{\"unified\":\"1f483-1f3fc\",\"native\":\"\uD83D\uDC83\uD83C\uDFFC\"},{\"unified\":\"1f483-1f3fd\",\"native\":\"\uD83D\uDC83\uD83C\uDFFD\"},{\"unified\":\"1f483-1f3fe\",\"native\":\"\uD83D\uDC83\uD83C\uDFFE\"},{\"unified\":\"1f483-1f3ff\",\"native\":\"\uD83D\uDC83\uD83C\uDFFF\"}],\"version\":1},\"man_dancing\":{\"id\":\"man_dancing\",\"name\":\"Man Dancing\",\"keywords\":[\"male\",\"boy\",\"fun\",\"dancer\"],\"skins\":[{\"unified\":\"1f57a\",\"native\":\"\uD83D\uDD7A\"},{\"unified\":\"1f57a-1f3fb\",\"native\":\"\uD83D\uDD7A\uD83C\uDFFB\"},{\"unified\":\"1f57a-1f3fc\",\"native\":\"\uD83D\uDD7A\uD83C\uDFFC\"},{\"unified\":\"1f57a-1f3fd\",\"native\":\"\uD83D\uDD7A\uD83C\uDFFD\"},{\"unified\":\"1f57a-1f3fe\",\"native\":\"\uD83D\uDD7A\uD83C\uDFFE\"},{\"unified\":\"1f57a-1f3ff\",\"native\":\"\uD83D\uDD7A\uD83C\uDFFF\"}],\"version\":3},\"man_in_business_suit_levitating\":{\"id\":\"man_in_business_suit_levitating\",\"name\":\"Person in Suit Levitating\",\"keywords\":[\"man\",\"business\",\"levitate\",\"hover\",\"jump\"],\"skins\":[{\"unified\":\"1f574-fe0f\",\"native\":\"\uD83D\uDD74\uFE0F\"},{\"unified\":\"1f574-1f3fb\",\"native\":\"\uD83D\uDD74\uD83C\uDFFB\"},{\"unified\":\"1f574-1f3fc\",\"native\":\"\uD83D\uDD74\uD83C\uDFFC\"},{\"unified\":\"1f574-1f3fd\",\"native\":\"\uD83D\uDD74\uD83C\uDFFD\"},{\"unified\":\"1f574-1f3fe\",\"native\":\"\uD83D\uDD74\uD83C\uDFFE\"},{\"unified\":\"1f574-1f3ff\",\"native\":\"\uD83D\uDD74\uD83C\uDFFF\"}],\"version\":1},\"dancers\":{\"id\":\"dancers\",\"name\":\"Woman with Bunny Ears\",\"keywords\":[\"dancers\",\"people\",\"perform\",\"costume\"],\"skins\":[{\"unified\":\"1f46f\",\"native\":\"\uD83D\uDC6F\"}],\"version\":1},\"men-with-bunny-ears-partying\":{\"id\":\"men-with-bunny-ears-partying\",\"name\":\"Men with Bunny Ears\",\"keywords\":[\"with-bunny-ears-partying\",\"man\",\"male\",\"boys\"],\"skins\":[{\"unified\":\"1f46f-200d-2642-fe0f\",\"native\":\"\uD83D\uDC6F\u200D\u2642\uFE0F\"}],\"version\":4},\"women-with-bunny-ears-partying\":{\"id\":\"women-with-bunny-ears-partying\",\"name\":\"Women with Bunny Ears\",\"keywords\":[\"with-bunny-ears-partying\",\"woman\",\"female\",\"girls\"],\"skins\":[{\"unified\":\"1f46f-200d-2640-fe0f\",\"native\":\"\uD83D\uDC6F\u200D\u2640\uFE0F\"}],\"version\":4},\"person_in_steamy_room\":{\"id\":\"person_in_steamy_room\",\"name\":\"Person in Steamy Room\",\"keywords\":[\"relax\",\"spa\"],\"skins\":[{\"unified\":\"1f9d6\",\"native\":\"\uD83E\uDDD6\"},{\"unified\":\"1f9d6-1f3fb\",\"native\":\"\uD83E\uDDD6\uD83C\uDFFB\"},{\"unified\":\"1f9d6-1f3fc\",\"native\":\"\uD83E\uDDD6\uD83C\uDFFC\"},{\"unified\":\"1f9d6-1f3fd\",\"native\":\"\uD83E\uDDD6\uD83C\uDFFD\"},{\"unified\":\"1f9d6-1f3fe\",\"native\":\"\uD83E\uDDD6\uD83C\uDFFE\"},{\"unified\":\"1f9d6-1f3ff\",\"native\":\"\uD83E\uDDD6\uD83C\uDFFF\"}],\"version\":5},\"man_in_steamy_room\":{\"id\":\"man_in_steamy_room\",\"name\":\"Man in Steamy Room\",\"keywords\":[\"male\",\"spa\",\"steamroom\",\"sauna\"],\"skins\":[{\"unified\":\"1f9d6-200d-2642-fe0f\",\"native\":\"\uD83E\uDDD6\u200D\u2642\uFE0F\"},{\"unified\":\"1f9d6-1f3fb-200d-2642-fe0f\",\"native\":\"\uD83E\uDDD6\uD83C\uDFFB\u200D\u2642\uFE0F\"},{\"unified\":\"1f9d6-1f3fc-200d-2642-fe0f\",\"native\":\"\uD83E\uDDD6\uD83C\uDFFC\u200D\u2642\uFE0F\"},{\"unified\":\"1f9d6-1f3fd-200d-2642-fe0f\",\"native\":\"\uD83E\uDDD6\uD83C\uDFFD\u200D\u2642\uFE0F\"},{\"unified\":\"1f9d6-1f3fe-200d-2642-fe0f\",\"native\":\"\uD83E\uDDD6\uD83C\uDFFE\u200D\u2642\uFE0F\"},{\"unified\":\"1f9d6-1f3ff-200d-2642-fe0f\",\"native\":\"\uD83E\uDDD6\uD83C\uDFFF\u200D\u2642\uFE0F\"}],\"version\":5},\"woman_in_steamy_room\":{\"id\":\"woman_in_steamy_room\",\"name\":\"Woman in Steamy Room\",\"keywords\":[\"female\",\"spa\",\"steamroom\",\"sauna\"],\"skins\":[{\"unified\":\"1f9d6-200d-2640-fe0f\",\"native\":\"\uD83E\uDDD6\u200D\u2640\uFE0F\"},{\"unified\":\"1f9d6-1f3fb-200d-2640-fe0f\",\"native\":\"\uD83E\uDDD6\uD83C\uDFFB\u200D\u2640\uFE0F\"},{\"unified\":\"1f9d6-1f3fc-200d-2640-fe0f\",\"native\":\"\uD83E\uDDD6\uD83C\uDFFC\u200D\u2640\uFE0F\"},{\"unified\":\"1f9d6-1f3fd-200d-2640-fe0f\",\"native\":\"\uD83E\uDDD6\uD83C\uDFFD\u200D\u2640\uFE0F\"},{\"unified\":\"1f9d6-1f3fe-200d-2640-fe0f\",\"native\":\"\uD83E\uDDD6\uD83C\uDFFE\u200D\u2640\uFE0F\"},{\"unified\":\"1f9d6-1f3ff-200d-2640-fe0f\",\"native\":\"\uD83E\uDDD6\uD83C\uDFFF\u200D\u2640\uFE0F\"}],\"version\":5},\"person_climbing\":{\"id\":\"person_climbing\",\"name\":\"Person Climbing\",\"keywords\":[\"sport\"],\"skins\":[{\"unified\":\"1f9d7\",\"native\":\"\uD83E\uDDD7\"},{\"unified\":\"1f9d7-1f3fb\",\"native\":\"\uD83E\uDDD7\uD83C\uDFFB\"},{\"unified\":\"1f9d7-1f3fc\",\"native\":\"\uD83E\uDDD7\uD83C\uDFFC\"},{\"unified\":\"1f9d7-1f3fd\",\"native\":\"\uD83E\uDDD7\uD83C\uDFFD\"},{\"unified\":\"1f9d7-1f3fe\",\"native\":\"\uD83E\uDDD7\uD83C\uDFFE\"},{\"unified\":\"1f9d7-1f3ff\",\"native\":\"\uD83E\uDDD7\uD83C\uDFFF\"}],\"version\":5},\"man_climbing\":{\"id\":\"man_climbing\",\"name\":\"Man Climbing\",\"keywords\":[\"sports\",\"hobby\",\"male\",\"rock\"],\"skins\":[{\"unified\":\"1f9d7-200d-2642-fe0f\",\"native\":\"\uD83E\uDDD7\u200D\u2642\uFE0F\"},{\"unified\":\"1f9d7-1f3fb-200d-2642-fe0f\",\"native\":\"\uD83E\uDDD7\uD83C\uDFFB\u200D\u2642\uFE0F\"},{\"unified\":\"1f9d7-1f3fc-200d-2642-fe0f\",\"native\":\"\uD83E\uDDD7\uD83C\uDFFC\u200D\u2642\uFE0F\"},{\"unified\":\"1f9d7-1f3fd-200d-2642-fe0f\",\"native\":\"\uD83E\uDDD7\uD83C\uDFFD\u200D\u2642\uFE0F\"},{\"unified\":\"1f9d7-1f3fe-200d-2642-fe0f\",\"native\":\"\uD83E\uDDD7\uD83C\uDFFE\u200D\u2642\uFE0F\"},{\"unified\":\"1f9d7-1f3ff-200d-2642-fe0f\",\"native\":\"\uD83E\uDDD7\uD83C\uDFFF\u200D\u2642\uFE0F\"}],\"version\":5},\"woman_climbing\":{\"id\":\"woman_climbing\",\"name\":\"Woman Climbing\",\"keywords\":[\"sports\",\"hobby\",\"female\",\"rock\"],\"skins\":[{\"unified\":\"1f9d7-200d-2640-fe0f\",\"native\":\"\uD83E\uDDD7\u200D\u2640\uFE0F\"},{\"unified\":\"1f9d7-1f3fb-200d-2640-fe0f\",\"native\":\"\uD83E\uDDD7\uD83C\uDFFB\u200D\u2640\uFE0F\"},{\"unified\":\"1f9d7-1f3fc-200d-2640-fe0f\",\"native\":\"\uD83E\uDDD7\uD83C\uDFFC\u200D\u2640\uFE0F\"},{\"unified\":\"1f9d7-1f3fd-200d-2640-fe0f\",\"native\":\"\uD83E\uDDD7\uD83C\uDFFD\u200D\u2640\uFE0F\"},{\"unified\":\"1f9d7-1f3fe-200d-2640-fe0f\",\"native\":\"\uD83E\uDDD7\uD83C\uDFFE\u200D\u2640\uFE0F\"},{\"unified\":\"1f9d7-1f3ff-200d-2640-fe0f\",\"native\":\"\uD83E\uDDD7\uD83C\uDFFF\u200D\u2640\uFE0F\"}],\"version\":5},\"fencer\":{\"id\":\"fencer\",\"name\":\"Fencer\",\"keywords\":[\"person\",\"fencing\",\"sports\",\"sword\"],\"skins\":[{\"unified\":\"1f93a\",\"native\":\"\uD83E\uDD3A\"}],\"version\":3},\"horse_racing\":{\"id\":\"horse_racing\",\"name\":\"Horse Racing\",\"keywords\":[\"animal\",\"betting\",\"competition\",\"gambling\",\"luck\"],\"skins\":[{\"unified\":\"1f3c7\",\"native\":\"\uD83C\uDFC7\"},{\"unified\":\"1f3c7-1f3fb\",\"native\":\"\uD83C\uDFC7\uD83C\uDFFB\"},{\"unified\":\"1f3c7-1f3fc\",\"native\":\"\uD83C\uDFC7\uD83C\uDFFC\"},{\"unified\":\"1f3c7-1f3fd\",\"native\":\"\uD83C\uDFC7\uD83C\uDFFD\"},{\"unified\":\"1f3c7-1f3fe\",\"native\":\"\uD83C\uDFC7\uD83C\uDFFE\"},{\"unified\":\"1f3c7-1f3ff\",\"native\":\"\uD83C\uDFC7\uD83C\uDFFF\"}],\"version\":1},\"skier\":{\"id\":\"skier\",\"name\":\"Skier\",\"keywords\":[\"sports\",\"winter\",\"snow\"],\"skins\":[{\"unified\":\"26f7-fe0f\",\"native\":\"\u26F7\uFE0F\"}],\"version\":1},\"snowboarder\":{\"id\":\"snowboarder\",\"name\":\"Snowboarder\",\"keywords\":[\"sports\",\"winter\"],\"skins\":[{\"unified\":\"1f3c2\",\"native\":\"\uD83C\uDFC2\"},{\"unified\":\"1f3c2-1f3fb\",\"native\":\"\uD83C\uDFC2\uD83C\uDFFB\"},{\"unified\":\"1f3c2-1f3fc\",\"native\":\"\uD83C\uDFC2\uD83C\uDFFC\"},{\"unified\":\"1f3c2-1f3fd\",\"native\":\"\uD83C\uDFC2\uD83C\uDFFD\"},{\"unified\":\"1f3c2-1f3fe\",\"native\":\"\uD83C\uDFC2\uD83C\uDFFE\"},{\"unified\":\"1f3c2-1f3ff\",\"native\":\"\uD83C\uDFC2\uD83C\uDFFF\"}],\"version\":1},\"golfer\":{\"id\":\"golfer\",\"name\":\"Person Golfing\",\"keywords\":[\"golfer\",\"sports\",\"business\"],\"skins\":[{\"unified\":\"1f3cc-fe0f\",\"native\":\"\uD83C\uDFCC\uFE0F\"},{\"unified\":\"1f3cc-1f3fb\",\"native\":\"\uD83C\uDFCC\uD83C\uDFFB\"},{\"unified\":\"1f3cc-1f3fc\",\"native\":\"\uD83C\uDFCC\uD83C\uDFFC\"},{\"unified\":\"1f3cc-1f3fd\",\"native\":\"\uD83C\uDFCC\uD83C\uDFFD\"},{\"unified\":\"1f3cc-1f3fe\",\"native\":\"\uD83C\uDFCC\uD83C\uDFFE\"},{\"unified\":\"1f3cc-1f3ff\",\"native\":\"\uD83C\uDFCC\uD83C\uDFFF\"}],\"version\":1},\"man-golfing\":{\"id\":\"man-golfing\",\"name\":\"Man Golfing\",\"keywords\":[\"sport\"],\"skins\":[{\"unified\":\"1f3cc-fe0f-200d-2642-fe0f\",\"native\":\"\uD83C\uDFCC\uFE0F\u200D\u2642\uFE0F\"},{\"unified\":\"1f3cc-1f3fb-200d-2642-fe0f\",\"native\":\"\uD83C\uDFCC\uD83C\uDFFB\u200D\u2642\uFE0F\"},{\"unified\":\"1f3cc-1f3fc-200d-2642-fe0f\",\"native\":\"\uD83C\uDFCC\uD83C\uDFFC\u200D\u2642\uFE0F\"},{\"unified\":\"1f3cc-1f3fd-200d-2642-fe0f\",\"native\":\"\uD83C\uDFCC\uD83C\uDFFD\u200D\u2642\uFE0F\"},{\"unified\":\"1f3cc-1f3fe-200d-2642-fe0f\",\"native\":\"\uD83C\uDFCC\uD83C\uDFFE\u200D\u2642\uFE0F\"},{\"unified\":\"1f3cc-1f3ff-200d-2642-fe0f\",\"native\":\"\uD83C\uDFCC\uD83C\uDFFF\u200D\u2642\uFE0F\"}],\"version\":4},\"woman-golfing\":{\"id\":\"woman-golfing\",\"name\":\"Woman Golfing\",\"keywords\":[\"sports\",\"business\",\"female\"],\"skins\":[{\"unified\":\"1f3cc-fe0f-200d-2640-fe0f\",\"native\":\"\uD83C\uDFCC\uFE0F\u200D\u2640\uFE0F\"},{\"unified\":\"1f3cc-1f3fb-200d-2640-fe0f\",\"native\":\"\uD83C\uDFCC\uD83C\uDFFB\u200D\u2640\uFE0F\"},{\"unified\":\"1f3cc-1f3fc-200d-2640-fe0f\",\"native\":\"\uD83C\uDFCC\uD83C\uDFFC\u200D\u2640\uFE0F\"},{\"unified\":\"1f3cc-1f3fd-200d-2640-fe0f\",\"native\":\"\uD83C\uDFCC\uD83C\uDFFD\u200D\u2640\uFE0F\"},{\"unified\":\"1f3cc-1f3fe-200d-2640-fe0f\",\"native\":\"\uD83C\uDFCC\uD83C\uDFFE\u200D\u2640\uFE0F\"},{\"unified\":\"1f3cc-1f3ff-200d-2640-fe0f\",\"native\":\"\uD83C\uDFCC\uD83C\uDFFF\u200D\u2640\uFE0F\"}],\"version\":4},\"surfer\":{\"id\":\"surfer\",\"name\":\"Surfer\",\"keywords\":[\"person\",\"surfing\",\"sport\",\"sea\"],\"skins\":[{\"unified\":\"1f3c4\",\"native\":\"\uD83C\uDFC4\"},{\"unified\":\"1f3c4-1f3fb\",\"native\":\"\uD83C\uDFC4\uD83C\uDFFB\"},{\"unified\":\"1f3c4-1f3fc\",\"native\":\"\uD83C\uDFC4\uD83C\uDFFC\"},{\"unified\":\"1f3c4-1f3fd\",\"native\":\"\uD83C\uDFC4\uD83C\uDFFD\"},{\"unified\":\"1f3c4-1f3fe\",\"native\":\"\uD83C\uDFC4\uD83C\uDFFE\"},{\"unified\":\"1f3c4-1f3ff\",\"native\":\"\uD83C\uDFC4\uD83C\uDFFF\"}],\"version\":1},\"man-surfing\":{\"id\":\"man-surfing\",\"name\":\"Man Surfing\",\"keywords\":[\"sports\",\"ocean\",\"sea\",\"summer\",\"beach\"],\"skins\":[{\"unified\":\"1f3c4-200d-2642-fe0f\",\"native\":\"\uD83C\uDFC4\u200D\u2642\uFE0F\"},{\"unified\":\"1f3c4-1f3fb-200d-2642-fe0f\",\"native\":\"\uD83C\uDFC4\uD83C\uDFFB\u200D\u2642\uFE0F\"},{\"unified\":\"1f3c4-1f3fc-200d-2642-fe0f\",\"native\":\"\uD83C\uDFC4\uD83C\uDFFC\u200D\u2642\uFE0F\"},{\"unified\":\"1f3c4-1f3fd-200d-2642-fe0f\",\"native\":\"\uD83C\uDFC4\uD83C\uDFFD\u200D\u2642\uFE0F\"},{\"unified\":\"1f3c4-1f3fe-200d-2642-fe0f\",\"native\":\"\uD83C\uDFC4\uD83C\uDFFE\u200D\u2642\uFE0F\"},{\"unified\":\"1f3c4-1f3ff-200d-2642-fe0f\",\"native\":\"\uD83C\uDFC4\uD83C\uDFFF\u200D\u2642\uFE0F\"}],\"version\":4},\"woman-surfing\":{\"id\":\"woman-surfing\",\"name\":\"Woman Surfing\",\"keywords\":[\"sports\",\"ocean\",\"sea\",\"summer\",\"beach\",\"female\"],\"skins\":[{\"unified\":\"1f3c4-200d-2640-fe0f\",\"native\":\"\uD83C\uDFC4\u200D\u2640\uFE0F\"},{\"unified\":\"1f3c4-1f3fb-200d-2640-fe0f\",\"native\":\"\uD83C\uDFC4\uD83C\uDFFB\u200D\u2640\uFE0F\"},{\"unified\":\"1f3c4-1f3fc-200d-2640-fe0f\",\"native\":\"\uD83C\uDFC4\uD83C\uDFFC\u200D\u2640\uFE0F\"},{\"unified\":\"1f3c4-1f3fd-200d-2640-fe0f\",\"native\":\"\uD83C\uDFC4\uD83C\uDFFD\u200D\u2640\uFE0F\"},{\"unified\":\"1f3c4-1f3fe-200d-2640-fe0f\",\"native\":\"\uD83C\uDFC4\uD83C\uDFFE\u200D\u2640\uFE0F\"},{\"unified\":\"1f3c4-1f3ff-200d-2640-fe0f\",\"native\":\"\uD83C\uDFC4\uD83C\uDFFF\u200D\u2640\uFE0F\"}],\"version\":4},\"rowboat\":{\"id\":\"rowboat\",\"name\":\"Rowboat\",\"keywords\":[\"person\",\"rowing\",\"boat\",\"sport\",\"move\"],\"skins\":[{\"unified\":\"1f6a3\",\"native\":\"\uD83D\uDEA3\"},{\"unified\":\"1f6a3-1f3fb\",\"native\":\"\uD83D\uDEA3\uD83C\uDFFB\"},{\"unified\":\"1f6a3-1f3fc\",\"native\":\"\uD83D\uDEA3\uD83C\uDFFC\"},{\"unified\":\"1f6a3-1f3fd\",\"native\":\"\uD83D\uDEA3\uD83C\uDFFD\"},{\"unified\":\"1f6a3-1f3fe\",\"native\":\"\uD83D\uDEA3\uD83C\uDFFE\"},{\"unified\":\"1f6a3-1f3ff\",\"native\":\"\uD83D\uDEA3\uD83C\uDFFF\"}],\"version\":1},\"man-rowing-boat\":{\"id\":\"man-rowing-boat\",\"name\":\"Man Rowing Boat\",\"keywords\":[\"rowing-boat\",\"sports\",\"hobby\",\"water\",\"ship\"],\"skins\":[{\"unified\":\"1f6a3-200d-2642-fe0f\",\"native\":\"\uD83D\uDEA3\u200D\u2642\uFE0F\"},{\"unified\":\"1f6a3-1f3fb-200d-2642-fe0f\",\"native\":\"\uD83D\uDEA3\uD83C\uDFFB\u200D\u2642\uFE0F\"},{\"unified\":\"1f6a3-1f3fc-200d-2642-fe0f\",\"native\":\"\uD83D\uDEA3\uD83C\uDFFC\u200D\u2642\uFE0F\"},{\"unified\":\"1f6a3-1f3fd-200d-2642-fe0f\",\"native\":\"\uD83D\uDEA3\uD83C\uDFFD\u200D\u2642\uFE0F\"},{\"unified\":\"1f6a3-1f3fe-200d-2642-fe0f\",\"native\":\"\uD83D\uDEA3\uD83C\uDFFE\u200D\u2642\uFE0F\"},{\"unified\":\"1f6a3-1f3ff-200d-2642-fe0f\",\"native\":\"\uD83D\uDEA3\uD83C\uDFFF\u200D\u2642\uFE0F\"}],\"version\":4},\"woman-rowing-boat\":{\"id\":\"woman-rowing-boat\",\"name\":\"Woman Rowing Boat\",\"keywords\":[\"rowing-boat\",\"sports\",\"hobby\",\"water\",\"ship\",\"female\"],\"skins\":[{\"unified\":\"1f6a3-200d-2640-fe0f\",\"native\":\"\uD83D\uDEA3\u200D\u2640\uFE0F\"},{\"unified\":\"1f6a3-1f3fb-200d-2640-fe0f\",\"native\":\"\uD83D\uDEA3\uD83C\uDFFB\u200D\u2640\uFE0F\"},{\"unified\":\"1f6a3-1f3fc-200d-2640-fe0f\",\"native\":\"\uD83D\uDEA3\uD83C\uDFFC\u200D\u2640\uFE0F\"},{\"unified\":\"1f6a3-1f3fd-200d-2640-fe0f\",\"native\":\"\uD83D\uDEA3\uD83C\uDFFD\u200D\u2640\uFE0F\"},{\"unified\":\"1f6a3-1f3fe-200d-2640-fe0f\",\"native\":\"\uD83D\uDEA3\uD83C\uDFFE\u200D\u2640\uFE0F\"},{\"unified\":\"1f6a3-1f3ff-200d-2640-fe0f\",\"native\":\"\uD83D\uDEA3\uD83C\uDFFF\u200D\u2640\uFE0F\"}],\"version\":4},\"swimmer\":{\"id\":\"swimmer\",\"name\":\"Swimmer\",\"keywords\":[\"person\",\"swimming\",\"sport\",\"pool\"],\"skins\":[{\"unified\":\"1f3ca\",\"native\":\"\uD83C\uDFCA\"},{\"unified\":\"1f3ca-1f3fb\",\"native\":\"\uD83C\uDFCA\uD83C\uDFFB\"},{\"unified\":\"1f3ca-1f3fc\",\"native\":\"\uD83C\uDFCA\uD83C\uDFFC\"},{\"unified\":\"1f3ca-1f3fd\",\"native\":\"\uD83C\uDFCA\uD83C\uDFFD\"},{\"unified\":\"1f3ca-1f3fe\",\"native\":\"\uD83C\uDFCA\uD83C\uDFFE\"},{\"unified\":\"1f3ca-1f3ff\",\"native\":\"\uD83C\uDFCA\uD83C\uDFFF\"}],\"version\":1},\"man-swimming\":{\"id\":\"man-swimming\",\"name\":\"Man Swimming\",\"keywords\":[\"sports\",\"exercise\",\"human\",\"athlete\",\"water\",\"summer\"],\"skins\":[{\"unified\":\"1f3ca-200d-2642-fe0f\",\"native\":\"\uD83C\uDFCA\u200D\u2642\uFE0F\"},{\"unified\":\"1f3ca-1f3fb-200d-2642-fe0f\",\"native\":\"\uD83C\uDFCA\uD83C\uDFFB\u200D\u2642\uFE0F\"},{\"unified\":\"1f3ca-1f3fc-200d-2642-fe0f\",\"native\":\"\uD83C\uDFCA\uD83C\uDFFC\u200D\u2642\uFE0F\"},{\"unified\":\"1f3ca-1f3fd-200d-2642-fe0f\",\"native\":\"\uD83C\uDFCA\uD83C\uDFFD\u200D\u2642\uFE0F\"},{\"unified\":\"1f3ca-1f3fe-200d-2642-fe0f\",\"native\":\"\uD83C\uDFCA\uD83C\uDFFE\u200D\u2642\uFE0F\"},{\"unified\":\"1f3ca-1f3ff-200d-2642-fe0f\",\"native\":\"\uD83C\uDFCA\uD83C\uDFFF\u200D\u2642\uFE0F\"}],\"version\":4},\"woman-swimming\":{\"id\":\"woman-swimming\",\"name\":\"Woman Swimming\",\"keywords\":[\"sports\",\"exercise\",\"human\",\"athlete\",\"water\",\"summer\",\"female\"],\"skins\":[{\"unified\":\"1f3ca-200d-2640-fe0f\",\"native\":\"\uD83C\uDFCA\u200D\u2640\uFE0F\"},{\"unified\":\"1f3ca-1f3fb-200d-2640-fe0f\",\"native\":\"\uD83C\uDFCA\uD83C\uDFFB\u200D\u2640\uFE0F\"},{\"unified\":\"1f3ca-1f3fc-200d-2640-fe0f\",\"native\":\"\uD83C\uDFCA\uD83C\uDFFC\u200D\u2640\uFE0F\"},{\"unified\":\"1f3ca-1f3fd-200d-2640-fe0f\",\"native\":\"\uD83C\uDFCA\uD83C\uDFFD\u200D\u2640\uFE0F\"},{\"unified\":\"1f3ca-1f3fe-200d-2640-fe0f\",\"native\":\"\uD83C\uDFCA\uD83C\uDFFE\u200D\u2640\uFE0F\"},{\"unified\":\"1f3ca-1f3ff-200d-2640-fe0f\",\"native\":\"\uD83C\uDFCA\uD83C\uDFFF\u200D\u2640\uFE0F\"}],\"version\":4},\"person_with_ball\":{\"id\":\"person_with_ball\",\"name\":\"Person Bouncing Ball\",\"keywords\":[\"with\",\"sports\",\"human\"],\"skins\":[{\"unified\":\"26f9-fe0f\",\"native\":\"\u26F9\uFE0F\"},{\"unified\":\"26f9-1f3fb\",\"native\":\"\u26F9\uD83C\uDFFB\"},{\"unified\":\"26f9-1f3fc\",\"native\":\"\u26F9\uD83C\uDFFC\"},{\"unified\":\"26f9-1f3fd\",\"native\":\"\u26F9\uD83C\uDFFD\"},{\"unified\":\"26f9-1f3fe\",\"native\":\"\u26F9\uD83C\uDFFE\"},{\"unified\":\"26f9-1f3ff\",\"native\":\"\u26F9\uD83C\uDFFF\"}],\"version\":1},\"man-bouncing-ball\":{\"id\":\"man-bouncing-ball\",\"name\":\"Man Bouncing Ball\",\"keywords\":[\"bouncing-ball\",\"sport\"],\"skins\":[{\"unified\":\"26f9-fe0f-200d-2642-fe0f\",\"native\":\"\u26F9\uFE0F\u200D\u2642\uFE0F\"},{\"unified\":\"26f9-1f3fb-200d-2642-fe0f\",\"native\":\"\u26F9\uD83C\uDFFB\u200D\u2642\uFE0F\"},{\"unified\":\"26f9-1f3fc-200d-2642-fe0f\",\"native\":\"\u26F9\uD83C\uDFFC\u200D\u2642\uFE0F\"},{\"unified\":\"26f9-1f3fd-200d-2642-fe0f\",\"native\":\"\u26F9\uD83C\uDFFD\u200D\u2642\uFE0F\"},{\"unified\":\"26f9-1f3fe-200d-2642-fe0f\",\"native\":\"\u26F9\uD83C\uDFFE\u200D\u2642\uFE0F\"},{\"unified\":\"26f9-1f3ff-200d-2642-fe0f\",\"native\":\"\u26F9\uD83C\uDFFF\u200D\u2642\uFE0F\"}],\"version\":4},\"woman-bouncing-ball\":{\"id\":\"woman-bouncing-ball\",\"name\":\"Woman Bouncing Ball\",\"keywords\":[\"bouncing-ball\",\"sports\",\"human\",\"female\"],\"skins\":[{\"unified\":\"26f9-fe0f-200d-2640-fe0f\",\"native\":\"\u26F9\uFE0F\u200D\u2640\uFE0F\"},{\"unified\":\"26f9-1f3fb-200d-2640-fe0f\",\"native\":\"\u26F9\uD83C\uDFFB\u200D\u2640\uFE0F\"},{\"unified\":\"26f9-1f3fc-200d-2640-fe0f\",\"native\":\"\u26F9\uD83C\uDFFC\u200D\u2640\uFE0F\"},{\"unified\":\"26f9-1f3fd-200d-2640-fe0f\",\"native\":\"\u26F9\uD83C\uDFFD\u200D\u2640\uFE0F\"},{\"unified\":\"26f9-1f3fe-200d-2640-fe0f\",\"native\":\"\u26F9\uD83C\uDFFE\u200D\u2640\uFE0F\"},{\"unified\":\"26f9-1f3ff-200d-2640-fe0f\",\"native\":\"\u26F9\uD83C\uDFFF\u200D\u2640\uFE0F\"}],\"version\":4},\"weight_lifter\":{\"id\":\"weight_lifter\",\"name\":\"Person Lifting Weights\",\"keywords\":[\"weight\",\"lifter\",\"sports\",\"training\",\"exercise\"],\"skins\":[{\"unified\":\"1f3cb-fe0f\",\"native\":\"\uD83C\uDFCB\uFE0F\"},{\"unified\":\"1f3cb-1f3fb\",\"native\":\"\uD83C\uDFCB\uD83C\uDFFB\"},{\"unified\":\"1f3cb-1f3fc\",\"native\":\"\uD83C\uDFCB\uD83C\uDFFC\"},{\"unified\":\"1f3cb-1f3fd\",\"native\":\"\uD83C\uDFCB\uD83C\uDFFD\"},{\"unified\":\"1f3cb-1f3fe\",\"native\":\"\uD83C\uDFCB\uD83C\uDFFE\"},{\"unified\":\"1f3cb-1f3ff\",\"native\":\"\uD83C\uDFCB\uD83C\uDFFF\"}],\"version\":1},\"man-lifting-weights\":{\"id\":\"man-lifting-weights\",\"name\":\"Man Lifting Weights\",\"keywords\":[\"lifting-weights\",\"sport\"],\"skins\":[{\"unified\":\"1f3cb-fe0f-200d-2642-fe0f\",\"native\":\"\uD83C\uDFCB\uFE0F\u200D\u2642\uFE0F\"},{\"unified\":\"1f3cb-1f3fb-200d-2642-fe0f\",\"native\":\"\uD83C\uDFCB\uD83C\uDFFB\u200D\u2642\uFE0F\"},{\"unified\":\"1f3cb-1f3fc-200d-2642-fe0f\",\"native\":\"\uD83C\uDFCB\uD83C\uDFFC\u200D\u2642\uFE0F\"},{\"unified\":\"1f3cb-1f3fd-200d-2642-fe0f\",\"native\":\"\uD83C\uDFCB\uD83C\uDFFD\u200D\u2642\uFE0F\"},{\"unified\":\"1f3cb-1f3fe-200d-2642-fe0f\",\"native\":\"\uD83C\uDFCB\uD83C\uDFFE\u200D\u2642\uFE0F\"},{\"unified\":\"1f3cb-1f3ff-200d-2642-fe0f\",\"native\":\"\uD83C\uDFCB\uD83C\uDFFF\u200D\u2642\uFE0F\"}],\"version\":4},\"woman-lifting-weights\":{\"id\":\"woman-lifting-weights\",\"name\":\"Woman Lifting Weights\",\"keywords\":[\"lifting-weights\",\"sports\",\"training\",\"exercise\",\"female\"],\"skins\":[{\"unified\":\"1f3cb-fe0f-200d-2640-fe0f\",\"native\":\"\uD83C\uDFCB\uFE0F\u200D\u2640\uFE0F\"},{\"unified\":\"1f3cb-1f3fb-200d-2640-fe0f\",\"native\":\"\uD83C\uDFCB\uD83C\uDFFB\u200D\u2640\uFE0F\"},{\"unified\":\"1f3cb-1f3fc-200d-2640-fe0f\",\"native\":\"\uD83C\uDFCB\uD83C\uDFFC\u200D\u2640\uFE0F\"},{\"unified\":\"1f3cb-1f3fd-200d-2640-fe0f\",\"native\":\"\uD83C\uDFCB\uD83C\uDFFD\u200D\u2640\uFE0F\"},{\"unified\":\"1f3cb-1f3fe-200d-2640-fe0f\",\"native\":\"\uD83C\uDFCB\uD83C\uDFFE\u200D\u2640\uFE0F\"},{\"unified\":\"1f3cb-1f3ff-200d-2640-fe0f\",\"native\":\"\uD83C\uDFCB\uD83C\uDFFF\u200D\u2640\uFE0F\"}],\"version\":4},\"bicyclist\":{\"id\":\"bicyclist\",\"name\":\"Bicyclist\",\"keywords\":[\"person\",\"biking\",\"sport\",\"move\"],\"skins\":[{\"unified\":\"1f6b4\",\"native\":\"\uD83D\uDEB4\"},{\"unified\":\"1f6b4-1f3fb\",\"native\":\"\uD83D\uDEB4\uD83C\uDFFB\"},{\"unified\":\"1f6b4-1f3fc\",\"native\":\"\uD83D\uDEB4\uD83C\uDFFC\"},{\"unified\":\"1f6b4-1f3fd\",\"native\":\"\uD83D\uDEB4\uD83C\uDFFD\"},{\"unified\":\"1f6b4-1f3fe\",\"native\":\"\uD83D\uDEB4\uD83C\uDFFE\"},{\"unified\":\"1f6b4-1f3ff\",\"native\":\"\uD83D\uDEB4\uD83C\uDFFF\"}],\"version\":1},\"man-biking\":{\"id\":\"man-biking\",\"name\":\"Man Biking\",\"keywords\":[\"sports\",\"bike\",\"exercise\",\"hipster\"],\"skins\":[{\"unified\":\"1f6b4-200d-2642-fe0f\",\"native\":\"\uD83D\uDEB4\u200D\u2642\uFE0F\"},{\"unified\":\"1f6b4-1f3fb-200d-2642-fe0f\",\"native\":\"\uD83D\uDEB4\uD83C\uDFFB\u200D\u2642\uFE0F\"},{\"unified\":\"1f6b4-1f3fc-200d-2642-fe0f\",\"native\":\"\uD83D\uDEB4\uD83C\uDFFC\u200D\u2642\uFE0F\"},{\"unified\":\"1f6b4-1f3fd-200d-2642-fe0f\",\"native\":\"\uD83D\uDEB4\uD83C\uDFFD\u200D\u2642\uFE0F\"},{\"unified\":\"1f6b4-1f3fe-200d-2642-fe0f\",\"native\":\"\uD83D\uDEB4\uD83C\uDFFE\u200D\u2642\uFE0F\"},{\"unified\":\"1f6b4-1f3ff-200d-2642-fe0f\",\"native\":\"\uD83D\uDEB4\uD83C\uDFFF\u200D\u2642\uFE0F\"}],\"version\":4},\"woman-biking\":{\"id\":\"woman-biking\",\"name\":\"Woman Biking\",\"keywords\":[\"sports\",\"bike\",\"exercise\",\"hipster\",\"female\"],\"skins\":[{\"unified\":\"1f6b4-200d-2640-fe0f\",\"native\":\"\uD83D\uDEB4\u200D\u2640\uFE0F\"},{\"unified\":\"1f6b4-1f3fb-200d-2640-fe0f\",\"native\":\"\uD83D\uDEB4\uD83C\uDFFB\u200D\u2640\uFE0F\"},{\"unified\":\"1f6b4-1f3fc-200d-2640-fe0f\",\"native\":\"\uD83D\uDEB4\uD83C\uDFFC\u200D\u2640\uFE0F\"},{\"unified\":\"1f6b4-1f3fd-200d-2640-fe0f\",\"native\":\"\uD83D\uDEB4\uD83C\uDFFD\u200D\u2640\uFE0F\"},{\"unified\":\"1f6b4-1f3fe-200d-2640-fe0f\",\"native\":\"\uD83D\uDEB4\uD83C\uDFFE\u200D\u2640\uFE0F\"},{\"unified\":\"1f6b4-1f3ff-200d-2640-fe0f\",\"native\":\"\uD83D\uDEB4\uD83C\uDFFF\u200D\u2640\uFE0F\"}],\"version\":4},\"mountain_bicyclist\":{\"id\":\"mountain_bicyclist\",\"name\":\"Mountain Bicyclist\",\"keywords\":[\"person\",\"biking\",\"sport\",\"move\"],\"skins\":[{\"unified\":\"1f6b5\",\"native\":\"\uD83D\uDEB5\"},{\"unified\":\"1f6b5-1f3fb\",\"native\":\"\uD83D\uDEB5\uD83C\uDFFB\"},{\"unified\":\"1f6b5-1f3fc\",\"native\":\"\uD83D\uDEB5\uD83C\uDFFC\"},{\"unified\":\"1f6b5-1f3fd\",\"native\":\"\uD83D\uDEB5\uD83C\uDFFD\"},{\"unified\":\"1f6b5-1f3fe\",\"native\":\"\uD83D\uDEB5\uD83C\uDFFE\"},{\"unified\":\"1f6b5-1f3ff\",\"native\":\"\uD83D\uDEB5\uD83C\uDFFF\"}],\"version\":1},\"man-mountain-biking\":{\"id\":\"man-mountain-biking\",\"name\":\"Man Mountain Biking\",\"keywords\":[\"mountain-biking\",\"transportation\",\"sports\",\"human\",\"race\",\"bike\"],\"skins\":[{\"unified\":\"1f6b5-200d-2642-fe0f\",\"native\":\"\uD83D\uDEB5\u200D\u2642\uFE0F\"},{\"unified\":\"1f6b5-1f3fb-200d-2642-fe0f\",\"native\":\"\uD83D\uDEB5\uD83C\uDFFB\u200D\u2642\uFE0F\"},{\"unified\":\"1f6b5-1f3fc-200d-2642-fe0f\",\"native\":\"\uD83D\uDEB5\uD83C\uDFFC\u200D\u2642\uFE0F\"},{\"unified\":\"1f6b5-1f3fd-200d-2642-fe0f\",\"native\":\"\uD83D\uDEB5\uD83C\uDFFD\u200D\u2642\uFE0F\"},{\"unified\":\"1f6b5-1f3fe-200d-2642-fe0f\",\"native\":\"\uD83D\uDEB5\uD83C\uDFFE\u200D\u2642\uFE0F\"},{\"unified\":\"1f6b5-1f3ff-200d-2642-fe0f\",\"native\":\"\uD83D\uDEB5\uD83C\uDFFF\u200D\u2642\uFE0F\"}],\"version\":4},\"woman-mountain-biking\":{\"id\":\"woman-mountain-biking\",\"name\":\"Woman Mountain Biking\",\"keywords\":[\"mountain-biking\",\"transportation\",\"sports\",\"human\",\"race\",\"bike\",\"female\"],\"skins\":[{\"unified\":\"1f6b5-200d-2640-fe0f\",\"native\":\"\uD83D\uDEB5\u200D\u2640\uFE0F\"},{\"unified\":\"1f6b5-1f3fb-200d-2640-fe0f\",\"native\":\"\uD83D\uDEB5\uD83C\uDFFB\u200D\u2640\uFE0F\"},{\"unified\":\"1f6b5-1f3fc-200d-2640-fe0f\",\"native\":\"\uD83D\uDEB5\uD83C\uDFFC\u200D\u2640\uFE0F\"},{\"unified\":\"1f6b5-1f3fd-200d-2640-fe0f\",\"native\":\"\uD83D\uDEB5\uD83C\uDFFD\u200D\u2640\uFE0F\"},{\"unified\":\"1f6b5-1f3fe-200d-2640-fe0f\",\"native\":\"\uD83D\uDEB5\uD83C\uDFFE\u200D\u2640\uFE0F\"},{\"unified\":\"1f6b5-1f3ff-200d-2640-fe0f\",\"native\":\"\uD83D\uDEB5\uD83C\uDFFF\u200D\u2640\uFE0F\"}],\"version\":4},\"person_doing_cartwheel\":{\"id\":\"person_doing_cartwheel\",\"name\":\"Person Cartwheeling\",\"keywords\":[\"doing\",\"cartwheel\",\"sport\",\"gymnastic\"],\"skins\":[{\"unified\":\"1f938\",\"native\":\"\uD83E\uDD38\"},{\"unified\":\"1f938-1f3fb\",\"native\":\"\uD83E\uDD38\uD83C\uDFFB\"},{\"unified\":\"1f938-1f3fc\",\"native\":\"\uD83E\uDD38\uD83C\uDFFC\"},{\"unified\":\"1f938-1f3fd\",\"native\":\"\uD83E\uDD38\uD83C\uDFFD\"},{\"unified\":\"1f938-1f3fe\",\"native\":\"\uD83E\uDD38\uD83C\uDFFE\"},{\"unified\":\"1f938-1f3ff\",\"native\":\"\uD83E\uDD38\uD83C\uDFFF\"}],\"version\":3},\"man-cartwheeling\":{\"id\":\"man-cartwheeling\",\"name\":\"Man Cartwheeling\",\"keywords\":[\"gymnastics\"],\"skins\":[{\"unified\":\"1f938-200d-2642-fe0f\",\"native\":\"\uD83E\uDD38\u200D\u2642\uFE0F\"},{\"unified\":\"1f938-1f3fb-200d-2642-fe0f\",\"native\":\"\uD83E\uDD38\uD83C\uDFFB\u200D\u2642\uFE0F\"},{\"unified\":\"1f938-1f3fc-200d-2642-fe0f\",\"native\":\"\uD83E\uDD38\uD83C\uDFFC\u200D\u2642\uFE0F\"},{\"unified\":\"1f938-1f3fd-200d-2642-fe0f\",\"native\":\"\uD83E\uDD38\uD83C\uDFFD\u200D\u2642\uFE0F\"},{\"unified\":\"1f938-1f3fe-200d-2642-fe0f\",\"native\":\"\uD83E\uDD38\uD83C\uDFFE\u200D\u2642\uFE0F\"},{\"unified\":\"1f938-1f3ff-200d-2642-fe0f\",\"native\":\"\uD83E\uDD38\uD83C\uDFFF\u200D\u2642\uFE0F\"}],\"version\":4},\"woman-cartwheeling\":{\"id\":\"woman-cartwheeling\",\"name\":\"Woman Cartwheeling\",\"keywords\":[\"gymnastics\"],\"skins\":[{\"unified\":\"1f938-200d-2640-fe0f\",\"native\":\"\uD83E\uDD38\u200D\u2640\uFE0F\"},{\"unified\":\"1f938-1f3fb-200d-2640-fe0f\",\"native\":\"\uD83E\uDD38\uD83C\uDFFB\u200D\u2640\uFE0F\"},{\"unified\":\"1f938-1f3fc-200d-2640-fe0f\",\"native\":\"\uD83E\uDD38\uD83C\uDFFC\u200D\u2640\uFE0F\"},{\"unified\":\"1f938-1f3fd-200d-2640-fe0f\",\"native\":\"\uD83E\uDD38\uD83C\uDFFD\u200D\u2640\uFE0F\"},{\"unified\":\"1f938-1f3fe-200d-2640-fe0f\",\"native\":\"\uD83E\uDD38\uD83C\uDFFE\u200D\u2640\uFE0F\"},{\"unified\":\"1f938-1f3ff-200d-2640-fe0f\",\"native\":\"\uD83E\uDD38\uD83C\uDFFF\u200D\u2640\uFE0F\"}],\"version\":4},\"wrestlers\":{\"id\":\"wrestlers\",\"name\":\"Wrestlers\",\"keywords\":[\"people\",\"wrestling\",\"sport\"],\"skins\":[{\"unified\":\"1f93c\",\"native\":\"\uD83E\uDD3C\"}],\"version\":3},\"man-wrestling\":{\"id\":\"man-wrestling\",\"name\":\"Men Wrestling\",\"keywords\":[\"man\",\"sports\",\"wrestlers\"],\"skins\":[{\"unified\":\"1f93c-200d-2642-fe0f\",\"native\":\"\uD83E\uDD3C\u200D\u2642\uFE0F\"}],\"version\":4},\"woman-wrestling\":{\"id\":\"woman-wrestling\",\"name\":\"Women Wrestling\",\"keywords\":[\"woman\",\"sports\",\"wrestlers\"],\"skins\":[{\"unified\":\"1f93c-200d-2640-fe0f\",\"native\":\"\uD83E\uDD3C\u200D\u2640\uFE0F\"}],\"version\":4},\"water_polo\":{\"id\":\"water_polo\",\"name\":\"Water Polo\",\"keywords\":[\"person\",\"playing\",\"sport\"],\"skins\":[{\"unified\":\"1f93d\",\"native\":\"\uD83E\uDD3D\"},{\"unified\":\"1f93d-1f3fb\",\"native\":\"\uD83E\uDD3D\uD83C\uDFFB\"},{\"unified\":\"1f93d-1f3fc\",\"native\":\"\uD83E\uDD3D\uD83C\uDFFC\"},{\"unified\":\"1f93d-1f3fd\",\"native\":\"\uD83E\uDD3D\uD83C\uDFFD\"},{\"unified\":\"1f93d-1f3fe\",\"native\":\"\uD83E\uDD3D\uD83C\uDFFE\"},{\"unified\":\"1f93d-1f3ff\",\"native\":\"\uD83E\uDD3D\uD83C\uDFFF\"}],\"version\":3},\"man-playing-water-polo\":{\"id\":\"man-playing-water-polo\",\"name\":\"Man Playing Water Polo\",\"keywords\":[\"playing-water-polo\",\"sports\",\"pool\"],\"skins\":[{\"unified\":\"1f93d-200d-2642-fe0f\",\"native\":\"\uD83E\uDD3D\u200D\u2642\uFE0F\"},{\"unified\":\"1f93d-1f3fb-200d-2642-fe0f\",\"native\":\"\uD83E\uDD3D\uD83C\uDFFB\u200D\u2642\uFE0F\"},{\"unified\":\"1f93d-1f3fc-200d-2642-fe0f\",\"native\":\"\uD83E\uDD3D\uD83C\uDFFC\u200D\u2642\uFE0F\"},{\"unified\":\"1f93d-1f3fd-200d-2642-fe0f\",\"native\":\"\uD83E\uDD3D\uD83C\uDFFD\u200D\u2642\uFE0F\"},{\"unified\":\"1f93d-1f3fe-200d-2642-fe0f\",\"native\":\"\uD83E\uDD3D\uD83C\uDFFE\u200D\u2642\uFE0F\"},{\"unified\":\"1f93d-1f3ff-200d-2642-fe0f\",\"native\":\"\uD83E\uDD3D\uD83C\uDFFF\u200D\u2642\uFE0F\"}],\"version\":4},\"woman-playing-water-polo\":{\"id\":\"woman-playing-water-polo\",\"name\":\"Woman Playing Water Polo\",\"keywords\":[\"playing-water-polo\",\"sports\",\"pool\"],\"skins\":[{\"unified\":\"1f93d-200d-2640-fe0f\",\"native\":\"\uD83E\uDD3D\u200D\u2640\uFE0F\"},{\"unified\":\"1f93d-1f3fb-200d-2640-fe0f\",\"native\":\"\uD83E\uDD3D\uD83C\uDFFB\u200D\u2640\uFE0F\"},{\"unified\":\"1f93d-1f3fc-200d-2640-fe0f\",\"native\":\"\uD83E\uDD3D\uD83C\uDFFC\u200D\u2640\uFE0F\"},{\"unified\":\"1f93d-1f3fd-200d-2640-fe0f\",\"native\":\"\uD83E\uDD3D\uD83C\uDFFD\u200D\u2640\uFE0F\"},{\"unified\":\"1f93d-1f3fe-200d-2640-fe0f\",\"native\":\"\uD83E\uDD3D\uD83C\uDFFE\u200D\u2640\uFE0F\"},{\"unified\":\"1f93d-1f3ff-200d-2640-fe0f\",\"native\":\"\uD83E\uDD3D\uD83C\uDFFF\u200D\u2640\uFE0F\"}],\"version\":4},\"handball\":{\"id\":\"handball\",\"name\":\"Handball\",\"keywords\":[\"person\",\"playing\",\"sport\"],\"skins\":[{\"unified\":\"1f93e\",\"native\":\"\uD83E\uDD3E\"},{\"unified\":\"1f93e-1f3fb\",\"native\":\"\uD83E\uDD3E\uD83C\uDFFB\"},{\"unified\":\"1f93e-1f3fc\",\"native\":\"\uD83E\uDD3E\uD83C\uDFFC\"},{\"unified\":\"1f93e-1f3fd\",\"native\":\"\uD83E\uDD3E\uD83C\uDFFD\"},{\"unified\":\"1f93e-1f3fe\",\"native\":\"\uD83E\uDD3E\uD83C\uDFFE\"},{\"unified\":\"1f93e-1f3ff\",\"native\":\"\uD83E\uDD3E\uD83C\uDFFF\"}],\"version\":3},\"man-playing-handball\":{\"id\":\"man-playing-handball\",\"name\":\"Man Playing Handball\",\"keywords\":[\"playing-handball\",\"sports\"],\"skins\":[{\"unified\":\"1f93e-200d-2642-fe0f\",\"native\":\"\uD83E\uDD3E\u200D\u2642\uFE0F\"},{\"unified\":\"1f93e-1f3fb-200d-2642-fe0f\",\"native\":\"\uD83E\uDD3E\uD83C\uDFFB\u200D\u2642\uFE0F\"},{\"unified\":\"1f93e-1f3fc-200d-2642-fe0f\",\"native\":\"\uD83E\uDD3E\uD83C\uDFFC\u200D\u2642\uFE0F\"},{\"unified\":\"1f93e-1f3fd-200d-2642-fe0f\",\"native\":\"\uD83E\uDD3E\uD83C\uDFFD\u200D\u2642\uFE0F\"},{\"unified\":\"1f93e-1f3fe-200d-2642-fe0f\",\"native\":\"\uD83E\uDD3E\uD83C\uDFFE\u200D\u2642\uFE0F\"},{\"unified\":\"1f93e-1f3ff-200d-2642-fe0f\",\"native\":\"\uD83E\uDD3E\uD83C\uDFFF\u200D\u2642\uFE0F\"}],\"version\":4},\"woman-playing-handball\":{\"id\":\"woman-playing-handball\",\"name\":\"Woman Playing Handball\",\"keywords\":[\"playing-handball\",\"sports\"],\"skins\":[{\"unified\":\"1f93e-200d-2640-fe0f\",\"native\":\"\uD83E\uDD3E\u200D\u2640\uFE0F\"},{\"unified\":\"1f93e-1f3fb-200d-2640-fe0f\",\"native\":\"\uD83E\uDD3E\uD83C\uDFFB\u200D\u2640\uFE0F\"},{\"unified\":\"1f93e-1f3fc-200d-2640-fe0f\",\"native\":\"\uD83E\uDD3E\uD83C\uDFFC\u200D\u2640\uFE0F\"},{\"unified\":\"1f93e-1f3fd-200d-2640-fe0f\",\"native\":\"\uD83E\uDD3E\uD83C\uDFFD\u200D\u2640\uFE0F\"},{\"unified\":\"1f93e-1f3fe-200d-2640-fe0f\",\"native\":\"\uD83E\uDD3E\uD83C\uDFFE\u200D\u2640\uFE0F\"},{\"unified\":\"1f93e-1f3ff-200d-2640-fe0f\",\"native\":\"\uD83E\uDD3E\uD83C\uDFFF\u200D\u2640\uFE0F\"}],\"version\":4},\"juggling\":{\"id\":\"juggling\",\"name\":\"Juggling\",\"keywords\":[\"person\",\"performance\",\"balance\"],\"skins\":[{\"unified\":\"1f939\",\"native\":\"\uD83E\uDD39\"},{\"unified\":\"1f939-1f3fb\",\"native\":\"\uD83E\uDD39\uD83C\uDFFB\"},{\"unified\":\"1f939-1f3fc\",\"native\":\"\uD83E\uDD39\uD83C\uDFFC\"},{\"unified\":\"1f939-1f3fd\",\"native\":\"\uD83E\uDD39\uD83C\uDFFD\"},{\"unified\":\"1f939-1f3fe\",\"native\":\"\uD83E\uDD39\uD83C\uDFFE\"},{\"unified\":\"1f939-1f3ff\",\"native\":\"\uD83E\uDD39\uD83C\uDFFF\"}],\"version\":3},\"man-juggling\":{\"id\":\"man-juggling\",\"name\":\"Man Juggling\",\"keywords\":[\"juggle\",\"balance\",\"skill\",\"multitask\"],\"skins\":[{\"unified\":\"1f939-200d-2642-fe0f\",\"native\":\"\uD83E\uDD39\u200D\u2642\uFE0F\"},{\"unified\":\"1f939-1f3fb-200d-2642-fe0f\",\"native\":\"\uD83E\uDD39\uD83C\uDFFB\u200D\u2642\uFE0F\"},{\"unified\":\"1f939-1f3fc-200d-2642-fe0f\",\"native\":\"\uD83E\uDD39\uD83C\uDFFC\u200D\u2642\uFE0F\"},{\"unified\":\"1f939-1f3fd-200d-2642-fe0f\",\"native\":\"\uD83E\uDD39\uD83C\uDFFD\u200D\u2642\uFE0F\"},{\"unified\":\"1f939-1f3fe-200d-2642-fe0f\",\"native\":\"\uD83E\uDD39\uD83C\uDFFE\u200D\u2642\uFE0F\"},{\"unified\":\"1f939-1f3ff-200d-2642-fe0f\",\"native\":\"\uD83E\uDD39\uD83C\uDFFF\u200D\u2642\uFE0F\"}],\"version\":4},\"woman-juggling\":{\"id\":\"woman-juggling\",\"name\":\"Woman Juggling\",\"keywords\":[\"juggle\",\"balance\",\"skill\",\"multitask\"],\"skins\":[{\"unified\":\"1f939-200d-2640-fe0f\",\"native\":\"\uD83E\uDD39\u200D\u2640\uFE0F\"},{\"unified\":\"1f939-1f3fb-200d-2640-fe0f\",\"native\":\"\uD83E\uDD39\uD83C\uDFFB\u200D\u2640\uFE0F\"},{\"unified\":\"1f939-1f3fc-200d-2640-fe0f\",\"native\":\"\uD83E\uDD39\uD83C\uDFFC\u200D\u2640\uFE0F\"},{\"unified\":\"1f939-1f3fd-200d-2640-fe0f\",\"native\":\"\uD83E\uDD39\uD83C\uDFFD\u200D\u2640\uFE0F\"},{\"unified\":\"1f939-1f3fe-200d-2640-fe0f\",\"native\":\"\uD83E\uDD39\uD83C\uDFFE\u200D\u2640\uFE0F\"},{\"unified\":\"1f939-1f3ff-200d-2640-fe0f\",\"native\":\"\uD83E\uDD39\uD83C\uDFFF\u200D\u2640\uFE0F\"}],\"version\":4},\"person_in_lotus_position\":{\"id\":\"person_in_lotus_position\",\"name\":\"Person in Lotus Position\",\"keywords\":[\"meditate\"],\"skins\":[{\"unified\":\"1f9d8\",\"native\":\"\uD83E\uDDD8\"},{\"unified\":\"1f9d8-1f3fb\",\"native\":\"\uD83E\uDDD8\uD83C\uDFFB\"},{\"unified\":\"1f9d8-1f3fc\",\"native\":\"\uD83E\uDDD8\uD83C\uDFFC\"},{\"unified\":\"1f9d8-1f3fd\",\"native\":\"\uD83E\uDDD8\uD83C\uDFFD\"},{\"unified\":\"1f9d8-1f3fe\",\"native\":\"\uD83E\uDDD8\uD83C\uDFFE\"},{\"unified\":\"1f9d8-1f3ff\",\"native\":\"\uD83E\uDDD8\uD83C\uDFFF\"}],\"version\":5},\"man_in_lotus_position\":{\"id\":\"man_in_lotus_position\",\"name\":\"Man in Lotus Position\",\"keywords\":[\"male\",\"meditation\",\"yoga\",\"serenity\",\"zen\",\"mindfulness\"],\"skins\":[{\"unified\":\"1f9d8-200d-2642-fe0f\",\"native\":\"\uD83E\uDDD8\u200D\u2642\uFE0F\"},{\"unified\":\"1f9d8-1f3fb-200d-2642-fe0f\",\"native\":\"\uD83E\uDDD8\uD83C\uDFFB\u200D\u2642\uFE0F\"},{\"unified\":\"1f9d8-1f3fc-200d-2642-fe0f\",\"native\":\"\uD83E\uDDD8\uD83C\uDFFC\u200D\u2642\uFE0F\"},{\"unified\":\"1f9d8-1f3fd-200d-2642-fe0f\",\"native\":\"\uD83E\uDDD8\uD83C\uDFFD\u200D\u2642\uFE0F\"},{\"unified\":\"1f9d8-1f3fe-200d-2642-fe0f\",\"native\":\"\uD83E\uDDD8\uD83C\uDFFE\u200D\u2642\uFE0F\"},{\"unified\":\"1f9d8-1f3ff-200d-2642-fe0f\",\"native\":\"\uD83E\uDDD8\uD83C\uDFFF\u200D\u2642\uFE0F\"}],\"version\":5},\"woman_in_lotus_position\":{\"id\":\"woman_in_lotus_position\",\"name\":\"Woman in Lotus Position\",\"keywords\":[\"female\",\"meditation\",\"yoga\",\"serenity\",\"zen\",\"mindfulness\"],\"skins\":[{\"unified\":\"1f9d8-200d-2640-fe0f\",\"native\":\"\uD83E\uDDD8\u200D\u2640\uFE0F\"},{\"unified\":\"1f9d8-1f3fb-200d-2640-fe0f\",\"native\":\"\uD83E\uDDD8\uD83C\uDFFB\u200D\u2640\uFE0F\"},{\"unified\":\"1f9d8-1f3fc-200d-2640-fe0f\",\"native\":\"\uD83E\uDDD8\uD83C\uDFFC\u200D\u2640\uFE0F\"},{\"unified\":\"1f9d8-1f3fd-200d-2640-fe0f\",\"native\":\"\uD83E\uDDD8\uD83C\uDFFD\u200D\u2640\uFE0F\"},{\"unified\":\"1f9d8-1f3fe-200d-2640-fe0f\",\"native\":\"\uD83E\uDDD8\uD83C\uDFFE\u200D\u2640\uFE0F\"},{\"unified\":\"1f9d8-1f3ff-200d-2640-fe0f\",\"native\":\"\uD83E\uDDD8\uD83C\uDFFF\u200D\u2640\uFE0F\"}],\"version\":5},\"bath\":{\"id\":\"bath\",\"name\":\"Bath\",\"keywords\":[\"person\",\"taking\",\"clean\",\"shower\",\"bathroom\"],\"skins\":[{\"unified\":\"1f6c0\",\"native\":\"\uD83D\uDEC0\"},{\"unified\":\"1f6c0-1f3fb\",\"native\":\"\uD83D\uDEC0\uD83C\uDFFB\"},{\"unified\":\"1f6c0-1f3fc\",\"native\":\"\uD83D\uDEC0\uD83C\uDFFC\"},{\"unified\":\"1f6c0-1f3fd\",\"native\":\"\uD83D\uDEC0\uD83C\uDFFD\"},{\"unified\":\"1f6c0-1f3fe\",\"native\":\"\uD83D\uDEC0\uD83C\uDFFE\"},{\"unified\":\"1f6c0-1f3ff\",\"native\":\"\uD83D\uDEC0\uD83C\uDFFF\"}],\"version\":1},\"sleeping_accommodation\":{\"id\":\"sleeping_accommodation\",\"name\":\"Person in Bed\",\"keywords\":[\"sleeping\",\"accommodation\",\"rest\"],\"skins\":[{\"unified\":\"1f6cc\",\"native\":\"\uD83D\uDECC\"},{\"unified\":\"1f6cc-1f3fb\",\"native\":\"\uD83D\uDECC\uD83C\uDFFB\"},{\"unified\":\"1f6cc-1f3fc\",\"native\":\"\uD83D\uDECC\uD83C\uDFFC\"},{\"unified\":\"1f6cc-1f3fd\",\"native\":\"\uD83D\uDECC\uD83C\uDFFD\"},{\"unified\":\"1f6cc-1f3fe\",\"native\":\"\uD83D\uDECC\uD83C\uDFFE\"},{\"unified\":\"1f6cc-1f3ff\",\"native\":\"\uD83D\uDECC\uD83C\uDFFF\"}],\"version\":1},\"people_holding_hands\":{\"id\":\"people_holding_hands\",\"name\":\"People Holding Hands\",\"keywords\":[\"friendship\"],\"skins\":[{\"unified\":\"1f9d1-200d-1f91d-200d-1f9d1\",\"native\":\"\uD83E\uDDD1\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1\"},{\"unified\":\"1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3fb\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1\uD83C\uDFFB\"},{\"unified\":\"1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3fc\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1\uD83C\uDFFC\"},{\"unified\":\"1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3fd\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1\uD83C\uDFFD\"},{\"unified\":\"1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3fe\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1\uD83C\uDFFE\"},{\"unified\":\"1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3ff\",\"native\":\"\uD83E\uDDD1\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1\uD83C\uDFFF\"}],\"version\":12},\"two_women_holding_hands\":{\"id\":\"two_women_holding_hands\",\"name\":\"Women Holding Hands\",\"keywords\":[\"two\",\"pair\",\"friendship\",\"couple\",\"love\",\"like\",\"female\",\"people\",\"human\"],\"skins\":[{\"unified\":\"1f46d\",\"native\":\"\uD83D\uDC6D\"},{\"unified\":\"1f46d-1f3fb\",\"native\":\"\uD83D\uDC6D\uD83C\uDFFB\"},{\"unified\":\"1f46d-1f3fc\",\"native\":\"\uD83D\uDC6D\uD83C\uDFFC\"},{\"unified\":\"1f46d-1f3fd\",\"native\":\"\uD83D\uDC6D\uD83C\uDFFD\"},{\"unified\":\"1f46d-1f3fe\",\"native\":\"\uD83D\uDC6D\uD83C\uDFFE\"},{\"unified\":\"1f46d-1f3ff\",\"native\":\"\uD83D\uDC6D\uD83C\uDFFF\"}],\"version\":1},\"man_and_woman_holding_hands\":{\"id\":\"man_and_woman_holding_hands\",\"name\":\"Man and Woman Holding Hands\",\"keywords\":[\"couple\",\"pair\",\"people\",\"human\",\"love\",\"date\",\"dating\",\"like\",\"affection\",\"valentines\",\"marriage\"],\"skins\":[{\"unified\":\"1f46b\",\"native\":\"\uD83D\uDC6B\"},{\"unified\":\"1f46b-1f3fb\",\"native\":\"\uD83D\uDC6B\uD83C\uDFFB\"},{\"unified\":\"1f46b-1f3fc\",\"native\":\"\uD83D\uDC6B\uD83C\uDFFC\"},{\"unified\":\"1f46b-1f3fd\",\"native\":\"\uD83D\uDC6B\uD83C\uDFFD\"},{\"unified\":\"1f46b-1f3fe\",\"native\":\"\uD83D\uDC6B\uD83C\uDFFE\"},{\"unified\":\"1f46b-1f3ff\",\"native\":\"\uD83D\uDC6B\uD83C\uDFFF\"}],\"version\":1},\"two_men_holding_hands\":{\"id\":\"two_men_holding_hands\",\"name\":\"Men Holding Hands\",\"keywords\":[\"two\",\"pair\",\"couple\",\"love\",\"like\",\"bromance\",\"friendship\",\"people\",\"human\"],\"skins\":[{\"unified\":\"1f46c\",\"native\":\"\uD83D\uDC6C\"},{\"unified\":\"1f46c-1f3fb\",\"native\":\"\uD83D\uDC6C\uD83C\uDFFB\"},{\"unified\":\"1f46c-1f3fc\",\"native\":\"\uD83D\uDC6C\uD83C\uDFFC\"},{\"unified\":\"1f46c-1f3fd\",\"native\":\"\uD83D\uDC6C\uD83C\uDFFD\"},{\"unified\":\"1f46c-1f3fe\",\"native\":\"\uD83D\uDC6C\uD83C\uDFFE\"},{\"unified\":\"1f46c-1f3ff\",\"native\":\"\uD83D\uDC6C\uD83C\uDFFF\"}],\"version\":1},\"couplekiss\":{\"id\":\"couplekiss\",\"name\":\"Kiss\",\"keywords\":[\"couplekiss\",\"pair\",\"valentines\",\"love\",\"like\",\"dating\",\"marriage\"],\"skins\":[{\"unified\":\"1f48f\",\"native\":\"\uD83D\uDC8F\"},{\"unified\":\"1f48f-1f3fb\",\"native\":\"\uD83D\uDC8F\uD83C\uDFFB\"},{\"unified\":\"1f48f-1f3fc\",\"native\":\"\uD83D\uDC8F\uD83C\uDFFC\"},{\"unified\":\"1f48f-1f3fd\",\"native\":\"\uD83D\uDC8F\uD83C\uDFFD\"},{\"unified\":\"1f48f-1f3fe\",\"native\":\"\uD83D\uDC8F\uD83C\uDFFE\"},{\"unified\":\"1f48f-1f3ff\",\"native\":\"\uD83D\uDC8F\uD83C\uDFFF\"}],\"version\":1},\"woman-kiss-man\":{\"id\":\"woman-kiss-man\",\"name\":\"Kiss: Woman, Man\",\"keywords\":[\"woman\",\"kiss-man\",\"kiss\",\"love\"],\"skins\":[{\"unified\":\"1f469-200d-2764-fe0f-200d-1f48b-200d-1f468\",\"native\":\"\uD83D\uDC69\u200D\u2764\uFE0F\u200D\uD83D\uDC8B\u200D\uD83D\uDC68\"},{\"unified\":\"1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb\",\"native\":\"\uD83D\uDC69\uD83C\uDFFB\u200D\u2764\uFE0F\u200D\uD83D\uDC8B\u200D\uD83D\uDC68\uD83C\uDFFB\"},{\"unified\":\"1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc\",\"native\":\"\uD83D\uDC69\uD83C\uDFFC\u200D\u2764\uFE0F\u200D\uD83D\uDC8B\u200D\uD83D\uDC68\uD83C\uDFFC\"},{\"unified\":\"1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd\",\"native\":\"\uD83D\uDC69\uD83C\uDFFD\u200D\u2764\uFE0F\u200D\uD83D\uDC8B\u200D\uD83D\uDC68\uD83C\uDFFD\"},{\"unified\":\"1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe\",\"native\":\"\uD83D\uDC69\uD83C\uDFFE\u200D\u2764\uFE0F\u200D\uD83D\uDC8B\u200D\uD83D\uDC68\uD83C\uDFFE\"},{\"unified\":\"1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff\",\"native\":\"\uD83D\uDC69\uD83C\uDFFF\u200D\u2764\uFE0F\u200D\uD83D\uDC8B\u200D\uD83D\uDC68\uD83C\uDFFF\"}],\"version\":2},\"man-kiss-man\":{\"id\":\"man-kiss-man\",\"name\":\"Kiss: Man, Man\",\"keywords\":[\"kiss-man\",\"kiss\",\"pair\",\"valentines\",\"love\",\"like\",\"dating\",\"marriage\"],\"skins\":[{\"unified\":\"1f468-200d-2764-fe0f-200d-1f48b-200d-1f468\",\"native\":\"\uD83D\uDC68\u200D\u2764\uFE0F\u200D\uD83D\uDC8B\u200D\uD83D\uDC68\"},{\"unified\":\"1f468-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb\",\"native\":\"\uD83D\uDC68\uD83C\uDFFB\u200D\u2764\uFE0F\u200D\uD83D\uDC8B\u200D\uD83D\uDC68\uD83C\uDFFB\"},{\"unified\":\"1f468-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc\",\"native\":\"\uD83D\uDC68\uD83C\uDFFC\u200D\u2764\uFE0F\u200D\uD83D\uDC8B\u200D\uD83D\uDC68\uD83C\uDFFC\"},{\"unified\":\"1f468-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd\",\"native\":\"\uD83D\uDC68\uD83C\uDFFD\u200D\u2764\uFE0F\u200D\uD83D\uDC8B\u200D\uD83D\uDC68\uD83C\uDFFD\"},{\"unified\":\"1f468-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe\",\"native\":\"\uD83D\uDC68\uD83C\uDFFE\u200D\u2764\uFE0F\u200D\uD83D\uDC8B\u200D\uD83D\uDC68\uD83C\uDFFE\"},{\"unified\":\"1f468-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff\",\"native\":\"\uD83D\uDC68\uD83C\uDFFF\u200D\u2764\uFE0F\u200D\uD83D\uDC8B\u200D\uD83D\uDC68\uD83C\uDFFF\"}],\"version\":2},\"woman-kiss-woman\":{\"id\":\"woman-kiss-woman\",\"name\":\"Kiss: Woman, Woman\",\"keywords\":[\"kiss-woman\",\"kiss\",\"pair\",\"valentines\",\"love\",\"like\",\"dating\",\"marriage\"],\"skins\":[{\"unified\":\"1f469-200d-2764-fe0f-200d-1f48b-200d-1f469\",\"native\":\"\uD83D\uDC69\u200D\u2764\uFE0F\u200D\uD83D\uDC8B\u200D\uD83D\uDC69\"},{\"unified\":\"1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fb\",\"native\":\"\uD83D\uDC69\uD83C\uDFFB\u200D\u2764\uFE0F\u200D\uD83D\uDC8B\u200D\uD83D\uDC69\uD83C\uDFFB\"},{\"unified\":\"1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fc\",\"native\":\"\uD83D\uDC69\uD83C\uDFFC\u200D\u2764\uFE0F\u200D\uD83D\uDC8B\u200D\uD83D\uDC69\uD83C\uDFFC\"},{\"unified\":\"1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fd\",\"native\":\"\uD83D\uDC69\uD83C\uDFFD\u200D\u2764\uFE0F\u200D\uD83D\uDC8B\u200D\uD83D\uDC69\uD83C\uDFFD\"},{\"unified\":\"1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fe\",\"native\":\"\uD83D\uDC69\uD83C\uDFFE\u200D\u2764\uFE0F\u200D\uD83D\uDC8B\u200D\uD83D\uDC69\uD83C\uDFFE\"},{\"unified\":\"1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3ff\",\"native\":\"\uD83D\uDC69\uD83C\uDFFF\u200D\u2764\uFE0F\u200D\uD83D\uDC8B\u200D\uD83D\uDC69\uD83C\uDFFF\"}],\"version\":2},\"couple_with_heart\":{\"id\":\"couple_with_heart\",\"name\":\"Couple with Heart\",\"keywords\":[\"pair\",\"love\",\"like\",\"affection\",\"human\",\"dating\",\"valentines\",\"marriage\"],\"skins\":[{\"unified\":\"1f491\",\"native\":\"\uD83D\uDC91\"},{\"unified\":\"1f491-1f3fb\",\"native\":\"\uD83D\uDC91\uD83C\uDFFB\"},{\"unified\":\"1f491-1f3fc\",\"native\":\"\uD83D\uDC91\uD83C\uDFFC\"},{\"unified\":\"1f491-1f3fd\",\"native\":\"\uD83D\uDC91\uD83C\uDFFD\"},{\"unified\":\"1f491-1f3fe\",\"native\":\"\uD83D\uDC91\uD83C\uDFFE\"},{\"unified\":\"1f491-1f3ff\",\"native\":\"\uD83D\uDC91\uD83C\uDFFF\"}],\"version\":1},\"woman-heart-man\":{\"id\":\"woman-heart-man\",\"name\":\"Couple with Heart: Woman, Man\",\"keywords\":[\"woman\",\"heart-man\",\"heart\",\"love\"],\"skins\":[{\"unified\":\"1f469-200d-2764-fe0f-200d-1f468\",\"native\":\"\uD83D\uDC69\u200D\u2764\uFE0F\u200D\uD83D\uDC68\"},{\"unified\":\"1f469-1f3fb-200d-2764-fe0f-200d-1f468-1f3fb\",\"native\":\"\uD83D\uDC69\uD83C\uDFFB\u200D\u2764\uFE0F\u200D\uD83D\uDC68\uD83C\uDFFB\"},{\"unified\":\"1f469-1f3fc-200d-2764-fe0f-200d-1f468-1f3fc\",\"native\":\"\uD83D\uDC69\uD83C\uDFFC\u200D\u2764\uFE0F\u200D\uD83D\uDC68\uD83C\uDFFC\"},{\"unified\":\"1f469-1f3fd-200d-2764-fe0f-200d-1f468-1f3fd\",\"native\":\"\uD83D\uDC69\uD83C\uDFFD\u200D\u2764\uFE0F\u200D\uD83D\uDC68\uD83C\uDFFD\"},{\"unified\":\"1f469-1f3fe-200d-2764-fe0f-200d-1f468-1f3fe\",\"native\":\"\uD83D\uDC69\uD83C\uDFFE\u200D\u2764\uFE0F\u200D\uD83D\uDC68\uD83C\uDFFE\"},{\"unified\":\"1f469-1f3ff-200d-2764-fe0f-200d-1f468-1f3ff\",\"native\":\"\uD83D\uDC69\uD83C\uDFFF\u200D\u2764\uFE0F\u200D\uD83D\uDC68\uD83C\uDFFF\"}],\"version\":2},\"man-heart-man\":{\"id\":\"man-heart-man\",\"name\":\"Couple with Heart: Man, Man\",\"keywords\":[\"heart-man\",\"heart\",\"pair\",\"love\",\"like\",\"affection\",\"human\",\"dating\",\"valentines\",\"marriage\"],\"skins\":[{\"unified\":\"1f468-200d-2764-fe0f-200d-1f468\",\"native\":\"\uD83D\uDC68\u200D\u2764\uFE0F\u200D\uD83D\uDC68\"},{\"unified\":\"1f468-1f3fb-200d-2764-fe0f-200d-1f468-1f3fb\",\"native\":\"\uD83D\uDC68\uD83C\uDFFB\u200D\u2764\uFE0F\u200D\uD83D\uDC68\uD83C\uDFFB\"},{\"unified\":\"1f468-1f3fc-200d-2764-fe0f-200d-1f468-1f3fc\",\"native\":\"\uD83D\uDC68\uD83C\uDFFC\u200D\u2764\uFE0F\u200D\uD83D\uDC68\uD83C\uDFFC\"},{\"unified\":\"1f468-1f3fd-200d-2764-fe0f-200d-1f468-1f3fd\",\"native\":\"\uD83D\uDC68\uD83C\uDFFD\u200D\u2764\uFE0F\u200D\uD83D\uDC68\uD83C\uDFFD\"},{\"unified\":\"1f468-1f3fe-200d-2764-fe0f-200d-1f468-1f3fe\",\"native\":\"\uD83D\uDC68\uD83C\uDFFE\u200D\u2764\uFE0F\u200D\uD83D\uDC68\uD83C\uDFFE\"},{\"unified\":\"1f468-1f3ff-200d-2764-fe0f-200d-1f468-1f3ff\",\"native\":\"\uD83D\uDC68\uD83C\uDFFF\u200D\u2764\uFE0F\u200D\uD83D\uDC68\uD83C\uDFFF\"}],\"version\":2},\"woman-heart-woman\":{\"id\":\"woman-heart-woman\",\"name\":\"Couple with Heart: Woman, Woman\",\"keywords\":[\"heart-woman\",\"heart\",\"pair\",\"love\",\"like\",\"affection\",\"human\",\"dating\",\"valentines\",\"marriage\"],\"skins\":[{\"unified\":\"1f469-200d-2764-fe0f-200d-1f469\",\"native\":\"\uD83D\uDC69\u200D\u2764\uFE0F\u200D\uD83D\uDC69\"},{\"unified\":\"1f469-1f3fb-200d-2764-fe0f-200d-1f469-1f3fb\",\"native\":\"\uD83D\uDC69\uD83C\uDFFB\u200D\u2764\uFE0F\u200D\uD83D\uDC69\uD83C\uDFFB\"},{\"unified\":\"1f469-1f3fc-200d-2764-fe0f-200d-1f469-1f3fc\",\"native\":\"\uD83D\uDC69\uD83C\uDFFC\u200D\u2764\uFE0F\u200D\uD83D\uDC69\uD83C\uDFFC\"},{\"unified\":\"1f469-1f3fd-200d-2764-fe0f-200d-1f469-1f3fd\",\"native\":\"\uD83D\uDC69\uD83C\uDFFD\u200D\u2764\uFE0F\u200D\uD83D\uDC69\uD83C\uDFFD\"},{\"unified\":\"1f469-1f3fe-200d-2764-fe0f-200d-1f469-1f3fe\",\"native\":\"\uD83D\uDC69\uD83C\uDFFE\u200D\u2764\uFE0F\u200D\uD83D\uDC69\uD83C\uDFFE\"},{\"unified\":\"1f469-1f3ff-200d-2764-fe0f-200d-1f469-1f3ff\",\"native\":\"\uD83D\uDC69\uD83C\uDFFF\u200D\u2764\uFE0F\u200D\uD83D\uDC69\uD83C\uDFFF\"}],\"version\":2},\"family\":{\"id\":\"family\",\"name\":\"Family\",\"keywords\":[\"home\",\"parents\",\"child\",\"mom\",\"dad\",\"father\",\"mother\",\"people\",\"human\"],\"skins\":[{\"unified\":\"1f46a\",\"native\":\"\uD83D\uDC6A\"}],\"version\":1},\"man-woman-boy\":{\"id\":\"man-woman-boy\",\"name\":\"Family: Man, Woman, Boy\",\"keywords\":[\"man\",\"woman-boy\",\"family\",\"woman\",\"love\"],\"skins\":[{\"unified\":\"1f468-200d-1f469-200d-1f466\",\"native\":\"\uD83D\uDC68\u200D\uD83D\uDC69\u200D\uD83D\uDC66\"}],\"version\":2},\"man-woman-girl\":{\"id\":\"man-woman-girl\",\"name\":\"Family: Man, Woman, Girl\",\"keywords\":[\"man\",\"woman-girl\",\"family\",\"woman\",\"home\",\"parents\",\"people\",\"human\",\"child\"],\"skins\":[{\"unified\":\"1f468-200d-1f469-200d-1f467\",\"native\":\"\uD83D\uDC68\u200D\uD83D\uDC69\u200D\uD83D\uDC67\"}],\"version\":2},\"man-woman-girl-boy\":{\"id\":\"man-woman-girl-boy\",\"name\":\"Family: Man, Woman, Girl, Boy\",\"keywords\":[\"man\",\"woman-girl-boy\",\"family\",\"woman\",\"girl\",\"home\",\"parents\",\"people\",\"human\",\"children\"],\"skins\":[{\"unified\":\"1f468-200d-1f469-200d-1f467-200d-1f466\",\"native\":\"\uD83D\uDC68\u200D\uD83D\uDC69\u200D\uD83D\uDC67\u200D\uD83D\uDC66\"}],\"version\":2},\"man-woman-boy-boy\":{\"id\":\"man-woman-boy-boy\",\"name\":\"Family: Man, Woman, Boy, Boy\",\"keywords\":[\"man\",\"woman-boy-boy\",\"family\",\"woman\",\"home\",\"parents\",\"people\",\"human\",\"children\"],\"skins\":[{\"unified\":\"1f468-200d-1f469-200d-1f466-200d-1f466\",\"native\":\"\uD83D\uDC68\u200D\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66\"}],\"version\":2},\"man-woman-girl-girl\":{\"id\":\"man-woman-girl-girl\",\"name\":\"Family: Man, Woman, Girl, Girl\",\"keywords\":[\"man\",\"woman-girl-girl\",\"family\",\"woman\",\"home\",\"parents\",\"people\",\"human\",\"children\"],\"skins\":[{\"unified\":\"1f468-200d-1f469-200d-1f467-200d-1f467\",\"native\":\"\uD83D\uDC68\u200D\uD83D\uDC69\u200D\uD83D\uDC67\u200D\uD83D\uDC67\"}],\"version\":2},\"man-man-boy\":{\"id\":\"man-man-boy\",\"name\":\"Family: Man, Man, Boy\",\"keywords\":[\"man\",\"man-boy\",\"family\",\"home\",\"parents\",\"people\",\"human\",\"children\"],\"skins\":[{\"unified\":\"1f468-200d-1f468-200d-1f466\",\"native\":\"\uD83D\uDC68\u200D\uD83D\uDC68\u200D\uD83D\uDC66\"}],\"version\":2},\"man-man-girl\":{\"id\":\"man-man-girl\",\"name\":\"Family: Man, Man, Girl\",\"keywords\":[\"man\",\"man-girl\",\"family\",\"home\",\"parents\",\"people\",\"human\",\"children\"],\"skins\":[{\"unified\":\"1f468-200d-1f468-200d-1f467\",\"native\":\"\uD83D\uDC68\u200D\uD83D\uDC68\u200D\uD83D\uDC67\"}],\"version\":2},\"man-man-girl-boy\":{\"id\":\"man-man-girl-boy\",\"name\":\"Family: Man, Man, Girl, Boy\",\"keywords\":[\"man\",\"man-girl-boy\",\"family\",\"girl\",\"home\",\"parents\",\"people\",\"human\",\"children\"],\"skins\":[{\"unified\":\"1f468-200d-1f468-200d-1f467-200d-1f466\",\"native\":\"\uD83D\uDC68\u200D\uD83D\uDC68\u200D\uD83D\uDC67\u200D\uD83D\uDC66\"}],\"version\":2},\"man-man-boy-boy\":{\"id\":\"man-man-boy-boy\",\"name\":\"Family: Man, Man, Boy, Boy\",\"keywords\":[\"man\",\"man-boy-boy\",\"family\",\"home\",\"parents\",\"people\",\"human\",\"children\"],\"skins\":[{\"unified\":\"1f468-200d-1f468-200d-1f466-200d-1f466\",\"native\":\"\uD83D\uDC68\u200D\uD83D\uDC68\u200D\uD83D\uDC66\u200D\uD83D\uDC66\"}],\"version\":2},\"man-man-girl-girl\":{\"id\":\"man-man-girl-girl\",\"name\":\"Family: Man, Man, Girl, Girl\",\"keywords\":[\"man\",\"man-girl-girl\",\"family\",\"home\",\"parents\",\"people\",\"human\",\"children\"],\"skins\":[{\"unified\":\"1f468-200d-1f468-200d-1f467-200d-1f467\",\"native\":\"\uD83D\uDC68\u200D\uD83D\uDC68\u200D\uD83D\uDC67\u200D\uD83D\uDC67\"}],\"version\":2},\"woman-woman-boy\":{\"id\":\"woman-woman-boy\",\"name\":\"Family: Woman, Woman, Boy\",\"keywords\":[\"woman\",\"woman-boy\",\"family\",\"home\",\"parents\",\"people\",\"human\",\"children\"],\"skins\":[{\"unified\":\"1f469-200d-1f469-200d-1f466\",\"native\":\"\uD83D\uDC69\u200D\uD83D\uDC69\u200D\uD83D\uDC66\"}],\"version\":2},\"woman-woman-girl\":{\"id\":\"woman-woman-girl\",\"name\":\"Family: Woman, Woman, Girl\",\"keywords\":[\"woman\",\"woman-girl\",\"family\",\"home\",\"parents\",\"people\",\"human\",\"children\"],\"skins\":[{\"unified\":\"1f469-200d-1f469-200d-1f467\",\"native\":\"\uD83D\uDC69\u200D\uD83D\uDC69\u200D\uD83D\uDC67\"}],\"version\":2},\"woman-woman-girl-boy\":{\"id\":\"woman-woman-girl-boy\",\"name\":\"Family: Woman, Woman, Girl, Boy\",\"keywords\":[\"woman\",\"woman-girl-boy\",\"family\",\"girl\",\"home\",\"parents\",\"people\",\"human\",\"children\"],\"skins\":[{\"unified\":\"1f469-200d-1f469-200d-1f467-200d-1f466\",\"native\":\"\uD83D\uDC69\u200D\uD83D\uDC69\u200D\uD83D\uDC67\u200D\uD83D\uDC66\"}],\"version\":2},\"woman-woman-boy-boy\":{\"id\":\"woman-woman-boy-boy\",\"name\":\"Family: Woman, Woman, Boy, Boy\",\"keywords\":[\"woman\",\"woman-boy-boy\",\"family\",\"home\",\"parents\",\"people\",\"human\",\"children\"],\"skins\":[{\"unified\":\"1f469-200d-1f469-200d-1f466-200d-1f466\",\"native\":\"\uD83D\uDC69\u200D\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66\"}],\"version\":2},\"woman-woman-girl-girl\":{\"id\":\"woman-woman-girl-girl\",\"name\":\"Family: Woman, Woman, Girl, Girl\",\"keywords\":[\"woman\",\"woman-girl-girl\",\"family\",\"home\",\"parents\",\"people\",\"human\",\"children\"],\"skins\":[{\"unified\":\"1f469-200d-1f469-200d-1f467-200d-1f467\",\"native\":\"\uD83D\uDC69\u200D\uD83D\uDC69\u200D\uD83D\uDC67\u200D\uD83D\uDC67\"}],\"version\":2},\"man-boy\":{\"id\":\"man-boy\",\"name\":\"Family: Man, Boy\",\"keywords\":[\"man\",\"family\",\"home\",\"parent\",\"people\",\"human\",\"child\"],\"skins\":[{\"unified\":\"1f468-200d-1f466\",\"native\":\"\uD83D\uDC68\u200D\uD83D\uDC66\"}],\"version\":4},\"man-boy-boy\":{\"id\":\"man-boy-boy\",\"name\":\"Family: Man, Boy, Boy\",\"keywords\":[\"man\",\"boy-boy\",\"family\",\"home\",\"parent\",\"people\",\"human\",\"children\"],\"skins\":[{\"unified\":\"1f468-200d-1f466-200d-1f466\",\"native\":\"\uD83D\uDC68\u200D\uD83D\uDC66\u200D\uD83D\uDC66\"}],\"version\":4},\"man-girl\":{\"id\":\"man-girl\",\"name\":\"Family: Man, Girl\",\"keywords\":[\"man\",\"family\",\"home\",\"parent\",\"people\",\"human\",\"child\"],\"skins\":[{\"unified\":\"1f468-200d-1f467\",\"native\":\"\uD83D\uDC68\u200D\uD83D\uDC67\"}],\"version\":4},\"man-girl-boy\":{\"id\":\"man-girl-boy\",\"name\":\"Family: Man, Girl, Boy\",\"keywords\":[\"man\",\"girl-boy\",\"family\",\"girl\",\"home\",\"parent\",\"people\",\"human\",\"children\"],\"skins\":[{\"unified\":\"1f468-200d-1f467-200d-1f466\",\"native\":\"\uD83D\uDC68\u200D\uD83D\uDC67\u200D\uD83D\uDC66\"}],\"version\":4},\"man-girl-girl\":{\"id\":\"man-girl-girl\",\"name\":\"Family: Man, Girl, Girl\",\"keywords\":[\"man\",\"girl-girl\",\"family\",\"home\",\"parent\",\"people\",\"human\",\"children\"],\"skins\":[{\"unified\":\"1f468-200d-1f467-200d-1f467\",\"native\":\"\uD83D\uDC68\u200D\uD83D\uDC67\u200D\uD83D\uDC67\"}],\"version\":4},\"woman-boy\":{\"id\":\"woman-boy\",\"name\":\"Family: Woman, Boy\",\"keywords\":[\"woman\",\"family\",\"home\",\"parent\",\"people\",\"human\",\"child\"],\"skins\":[{\"unified\":\"1f469-200d-1f466\",\"native\":\"\uD83D\uDC69\u200D\uD83D\uDC66\"}],\"version\":4},\"woman-boy-boy\":{\"id\":\"woman-boy-boy\",\"name\":\"Family: Woman, Boy, Boy\",\"keywords\":[\"woman\",\"boy-boy\",\"family\",\"home\",\"parent\",\"people\",\"human\",\"children\"],\"skins\":[{\"unified\":\"1f469-200d-1f466-200d-1f466\",\"native\":\"\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66\"}],\"version\":4},\"woman-girl\":{\"id\":\"woman-girl\",\"name\":\"Family: Woman, Girl\",\"keywords\":[\"woman\",\"family\",\"home\",\"parent\",\"people\",\"human\",\"child\"],\"skins\":[{\"unified\":\"1f469-200d-1f467\",\"native\":\"\uD83D\uDC69\u200D\uD83D\uDC67\"}],\"version\":4},\"woman-girl-boy\":{\"id\":\"woman-girl-boy\",\"name\":\"Family: Woman, Girl, Boy\",\"keywords\":[\"woman\",\"girl-boy\",\"family\",\"girl\",\"home\",\"parent\",\"people\",\"human\",\"children\"],\"skins\":[{\"unified\":\"1f469-200d-1f467-200d-1f466\",\"native\":\"\uD83D\uDC69\u200D\uD83D\uDC67\u200D\uD83D\uDC66\"}],\"version\":4},\"woman-girl-girl\":{\"id\":\"woman-girl-girl\",\"name\":\"Family: Woman, Girl, Girl\",\"keywords\":[\"woman\",\"girl-girl\",\"family\",\"home\",\"parent\",\"people\",\"human\",\"children\"],\"skins\":[{\"unified\":\"1f469-200d-1f467-200d-1f467\",\"native\":\"\uD83D\uDC69\u200D\uD83D\uDC67\u200D\uD83D\uDC67\"}],\"version\":4},\"speaking_head_in_silhouette\":{\"id\":\"speaking_head_in_silhouette\",\"name\":\"Speaking Head\",\"keywords\":[\"in\",\"silhouette\",\"user\",\"person\",\"human\",\"sing\",\"say\",\"talk\"],\"skins\":[{\"unified\":\"1f5e3-fe0f\",\"native\":\"\uD83D\uDDE3\uFE0F\"}],\"version\":1},\"bust_in_silhouette\":{\"id\":\"bust_in_silhouette\",\"name\":\"Bust in Silhouette\",\"keywords\":[\"user\",\"person\",\"human\"],\"skins\":[{\"unified\":\"1f464\",\"native\":\"\uD83D\uDC64\"}],\"version\":1},\"busts_in_silhouette\":{\"id\":\"busts_in_silhouette\",\"name\":\"Busts in Silhouette\",\"keywords\":[\"user\",\"person\",\"human\",\"group\",\"team\"],\"skins\":[{\"unified\":\"1f465\",\"native\":\"\uD83D\uDC65\"}],\"version\":1},\"people_hugging\":{\"id\":\"people_hugging\",\"name\":\"People Hugging\",\"keywords\":[\"care\"],\"skins\":[{\"unified\":\"1fac2\",\"native\":\"\uD83E\uDEC2\"}],\"version\":13},\"footprints\":{\"id\":\"footprints\",\"name\":\"Footprints\",\"keywords\":[\"feet\",\"tracking\",\"walking\",\"beach\"],\"skins\":[{\"unified\":\"1f463\",\"native\":\"\uD83D\uDC63\"}],\"version\":1},\"monkey_face\":{\"id\":\"monkey_face\",\"name\":\"Monkey Face\",\"emoticons\":[\":o)\"],\"keywords\":[\"animal\",\"nature\",\"circus\"],\"skins\":[{\"unified\":\"1f435\",\"native\":\"\uD83D\uDC35\"}],\"version\":1},\"monkey\":{\"id\":\"monkey\",\"name\":\"Monkey\",\"keywords\":[\"animal\",\"nature\",\"banana\",\"circus\"],\"skins\":[{\"unified\":\"1f412\",\"native\":\"\uD83D\uDC12\"}],\"version\":1},\"gorilla\":{\"id\":\"gorilla\",\"name\":\"Gorilla\",\"keywords\":[\"animal\",\"nature\",\"circus\"],\"skins\":[{\"unified\":\"1f98d\",\"native\":\"\uD83E\uDD8D\"}],\"version\":3},\"orangutan\":{\"id\":\"orangutan\",\"name\":\"Orangutan\",\"keywords\":[\"animal\"],\"skins\":[{\"unified\":\"1f9a7\",\"native\":\"\uD83E\uDDA7\"}],\"version\":12},\"dog\":{\"id\":\"dog\",\"name\":\"Dog Face\",\"keywords\":[\"animal\",\"friend\",\"nature\",\"woof\",\"puppy\",\"pet\",\"faithful\"],\"skins\":[{\"unified\":\"1f436\",\"native\":\"\uD83D\uDC36\"}],\"version\":1},\"dog2\":{\"id\":\"dog2\",\"name\":\"Dog\",\"keywords\":[\"dog2\",\"animal\",\"nature\",\"friend\",\"doge\",\"pet\",\"faithful\"],\"skins\":[{\"unified\":\"1f415\",\"native\":\"\uD83D\uDC15\"}],\"version\":1},\"guide_dog\":{\"id\":\"guide_dog\",\"name\":\"Guide Dog\",\"keywords\":[\"animal\",\"blind\"],\"skins\":[{\"unified\":\"1f9ae\",\"native\":\"\uD83E\uDDAE\"}],\"version\":12},\"service_dog\":{\"id\":\"service_dog\",\"name\":\"Service Dog\",\"keywords\":[\"blind\",\"animal\"],\"skins\":[{\"unified\":\"1f415-200d-1f9ba\",\"native\":\"\uD83D\uDC15\u200D\uD83E\uDDBA\"}],\"version\":12},\"poodle\":{\"id\":\"poodle\",\"name\":\"Poodle\",\"keywords\":[\"dog\",\"animal\",\"101\",\"nature\",\"pet\"],\"skins\":[{\"unified\":\"1f429\",\"native\":\"\uD83D\uDC29\"}],\"version\":1},\"wolf\":{\"id\":\"wolf\",\"name\":\"Wolf\",\"keywords\":[\"animal\",\"nature\",\"wild\"],\"skins\":[{\"unified\":\"1f43a\",\"native\":\"\uD83D\uDC3A\"}],\"version\":1},\"fox_face\":{\"id\":\"fox_face\",\"name\":\"Fox\",\"keywords\":[\"face\",\"animal\",\"nature\"],\"skins\":[{\"unified\":\"1f98a\",\"native\":\"\uD83E\uDD8A\"}],\"version\":3},\"raccoon\":{\"id\":\"raccoon\",\"name\":\"Raccoon\",\"keywords\":[\"animal\",\"nature\"],\"skins\":[{\"unified\":\"1f99d\",\"native\":\"\uD83E\uDD9D\"}],\"version\":11},\"cat\":{\"id\":\"cat\",\"name\":\"Cat Face\",\"keywords\":[\"animal\",\"meow\",\"nature\",\"pet\",\"kitten\"],\"skins\":[{\"unified\":\"1f431\",\"native\":\"\uD83D\uDC31\"}],\"version\":1},\"cat2\":{\"id\":\"cat2\",\"name\":\"Cat\",\"keywords\":[\"cat2\",\"animal\",\"meow\",\"pet\",\"cats\"],\"skins\":[{\"unified\":\"1f408\",\"native\":\"\uD83D\uDC08\"}],\"version\":1},\"black_cat\":{\"id\":\"black_cat\",\"name\":\"Black Cat\",\"keywords\":[\"superstition\",\"luck\"],\"skins\":[{\"unified\":\"1f408-200d-2b1b\",\"native\":\"\uD83D\uDC08\u200D\u2B1B\"}],\"version\":13},\"lion_face\":{\"id\":\"lion_face\",\"name\":\"Lion\",\"keywords\":[\"face\",\"animal\",\"nature\"],\"skins\":[{\"unified\":\"1f981\",\"native\":\"\uD83E\uDD81\"}],\"version\":1},\"tiger\":{\"id\":\"tiger\",\"name\":\"Tiger Face\",\"keywords\":[\"animal\",\"cat\",\"danger\",\"wild\",\"nature\",\"roar\"],\"skins\":[{\"unified\":\"1f42f\",\"native\":\"\uD83D\uDC2F\"}],\"version\":1},\"tiger2\":{\"id\":\"tiger2\",\"name\":\"Tiger\",\"keywords\":[\"tiger2\",\"animal\",\"nature\",\"roar\"],\"skins\":[{\"unified\":\"1f405\",\"native\":\"\uD83D\uDC05\"}],\"version\":1},\"leopard\":{\"id\":\"leopard\",\"name\":\"Leopard\",\"keywords\":[\"animal\",\"nature\"],\"skins\":[{\"unified\":\"1f406\",\"native\":\"\uD83D\uDC06\"}],\"version\":1},\"horse\":{\"id\":\"horse\",\"name\":\"Horse Face\",\"keywords\":[\"animal\",\"brown\",\"nature\"],\"skins\":[{\"unified\":\"1f434\",\"native\":\"\uD83D\uDC34\"}],\"version\":1},\"racehorse\":{\"id\":\"racehorse\",\"name\":\"Horse\",\"keywords\":[\"racehorse\",\"animal\",\"gamble\",\"luck\"],\"skins\":[{\"unified\":\"1f40e\",\"native\":\"\uD83D\uDC0E\"}],\"version\":1},\"unicorn_face\":{\"id\":\"unicorn_face\",\"name\":\"Unicorn\",\"keywords\":[\"face\",\"animal\",\"nature\",\"mystical\"],\"skins\":[{\"unified\":\"1f984\",\"native\":\"\uD83E\uDD84\"}],\"version\":1},\"zebra_face\":{\"id\":\"zebra_face\",\"name\":\"Zebra\",\"keywords\":[\"face\",\"animal\",\"nature\",\"stripes\",\"safari\"],\"skins\":[{\"unified\":\"1f993\",\"native\":\"\uD83E\uDD93\"}],\"version\":5},\"deer\":{\"id\":\"deer\",\"name\":\"Deer\",\"keywords\":[\"animal\",\"nature\",\"horns\",\"venison\"],\"skins\":[{\"unified\":\"1f98c\",\"native\":\"\uD83E\uDD8C\"}],\"version\":3},\"bison\":{\"id\":\"bison\",\"name\":\"Bison\",\"keywords\":[\"ox\"],\"skins\":[{\"unified\":\"1f9ac\",\"native\":\"\uD83E\uDDAC\"}],\"version\":13},\"cow\":{\"id\":\"cow\",\"name\":\"Cow Face\",\"keywords\":[\"beef\",\"ox\",\"animal\",\"nature\",\"moo\",\"milk\"],\"skins\":[{\"unified\":\"1f42e\",\"native\":\"\uD83D\uDC2E\"}],\"version\":1},\"ox\":{\"id\":\"ox\",\"name\":\"Ox\",\"keywords\":[\"animal\",\"cow\",\"beef\"],\"skins\":[{\"unified\":\"1f402\",\"native\":\"\uD83D\uDC02\"}],\"version\":1},\"water_buffalo\":{\"id\":\"water_buffalo\",\"name\":\"Water Buffalo\",\"keywords\":[\"animal\",\"nature\",\"ox\",\"cow\"],\"skins\":[{\"unified\":\"1f403\",\"native\":\"\uD83D\uDC03\"}],\"version\":1},\"cow2\":{\"id\":\"cow2\",\"name\":\"Cow\",\"keywords\":[\"cow2\",\"beef\",\"ox\",\"animal\",\"nature\",\"moo\",\"milk\"],\"skins\":[{\"unified\":\"1f404\",\"native\":\"\uD83D\uDC04\"}],\"version\":1},\"pig\":{\"id\":\"pig\",\"name\":\"Pig Face\",\"keywords\":[\"animal\",\"oink\",\"nature\"],\"skins\":[{\"unified\":\"1f437\",\"native\":\"\uD83D\uDC37\"}],\"version\":1},\"pig2\":{\"id\":\"pig2\",\"name\":\"Pig\",\"keywords\":[\"pig2\",\"animal\",\"nature\"],\"skins\":[{\"unified\":\"1f416\",\"native\":\"\uD83D\uDC16\"}],\"version\":1},\"boar\":{\"id\":\"boar\",\"name\":\"Boar\",\"keywords\":[\"animal\",\"nature\"],\"skins\":[{\"unified\":\"1f417\",\"native\":\"\uD83D\uDC17\"}],\"version\":1},\"pig_nose\":{\"id\":\"pig_nose\",\"name\":\"Pig Nose\",\"keywords\":[\"animal\",\"oink\"],\"skins\":[{\"unified\":\"1f43d\",\"native\":\"\uD83D\uDC3D\"}],\"version\":1},\"ram\":{\"id\":\"ram\",\"name\":\"Ram\",\"keywords\":[\"animal\",\"sheep\",\"nature\"],\"skins\":[{\"unified\":\"1f40f\",\"native\":\"\uD83D\uDC0F\"}],\"version\":1},\"sheep\":{\"id\":\"sheep\",\"name\":\"Ewe\",\"keywords\":[\"sheep\",\"animal\",\"nature\",\"wool\",\"shipit\"],\"skins\":[{\"unified\":\"1f411\",\"native\":\"\uD83D\uDC11\"}],\"version\":1},\"goat\":{\"id\":\"goat\",\"name\":\"Goat\",\"keywords\":[\"animal\",\"nature\"],\"skins\":[{\"unified\":\"1f410\",\"native\":\"\uD83D\uDC10\"}],\"version\":1},\"dromedary_camel\":{\"id\":\"dromedary_camel\",\"name\":\"Camel\",\"keywords\":[\"dromedary\",\"animal\",\"hot\",\"desert\",\"hump\"],\"skins\":[{\"unified\":\"1f42a\",\"native\":\"\uD83D\uDC2A\"}],\"version\":1},\"camel\":{\"id\":\"camel\",\"name\":\"Bactrian Camel\",\"keywords\":[\"two\",\"hump\",\"animal\",\"nature\",\"hot\",\"desert\"],\"skins\":[{\"unified\":\"1f42b\",\"native\":\"\uD83D\uDC2B\"}],\"version\":1},\"llama\":{\"id\":\"llama\",\"name\":\"Llama\",\"keywords\":[\"animal\",\"nature\",\"alpaca\"],\"skins\":[{\"unified\":\"1f999\",\"native\":\"\uD83E\uDD99\"}],\"version\":11},\"giraffe_face\":{\"id\":\"giraffe_face\",\"name\":\"Giraffe\",\"keywords\":[\"face\",\"animal\",\"nature\",\"spots\",\"safari\"],\"skins\":[{\"unified\":\"1f992\",\"native\":\"\uD83E\uDD92\"}],\"version\":5},\"elephant\":{\"id\":\"elephant\",\"name\":\"Elephant\",\"keywords\":[\"animal\",\"nature\",\"nose\",\"th\",\"circus\"],\"skins\":[{\"unified\":\"1f418\",\"native\":\"\uD83D\uDC18\"}],\"version\":1},\"mammoth\":{\"id\":\"mammoth\",\"name\":\"Mammoth\",\"keywords\":[\"elephant\",\"tusks\"],\"skins\":[{\"unified\":\"1f9a3\",\"native\":\"\uD83E\uDDA3\"}],\"version\":13},\"rhinoceros\":{\"id\":\"rhinoceros\",\"name\":\"Rhinoceros\",\"keywords\":[\"animal\",\"nature\",\"horn\"],\"skins\":[{\"unified\":\"1f98f\",\"native\":\"\uD83E\uDD8F\"}],\"version\":3},\"hippopotamus\":{\"id\":\"hippopotamus\",\"name\":\"Hippopotamus\",\"keywords\":[\"animal\",\"nature\"],\"skins\":[{\"unified\":\"1f99b\",\"native\":\"\uD83E\uDD9B\"}],\"version\":11},\"mouse\":{\"id\":\"mouse\",\"name\":\"Mouse Face\",\"keywords\":[\"animal\",\"nature\",\"cheese\",\"wedge\",\"rodent\"],\"skins\":[{\"unified\":\"1f42d\",\"native\":\"\uD83D\uDC2D\"}],\"version\":1},\"mouse2\":{\"id\":\"mouse2\",\"name\":\"Mouse\",\"keywords\":[\"mouse2\",\"animal\",\"nature\",\"rodent\"],\"skins\":[{\"unified\":\"1f401\",\"native\":\"\uD83D\uDC01\"}],\"version\":1},\"rat\":{\"id\":\"rat\",\"name\":\"Rat\",\"keywords\":[\"animal\",\"mouse\",\"rodent\"],\"skins\":[{\"unified\":\"1f400\",\"native\":\"\uD83D\uDC00\"}],\"version\":1},\"hamster\":{\"id\":\"hamster\",\"name\":\"Hamster\",\"keywords\":[\"animal\",\"nature\"],\"skins\":[{\"unified\":\"1f439\",\"native\":\"\uD83D\uDC39\"}],\"version\":1},\"rabbit\":{\"id\":\"rabbit\",\"name\":\"Rabbit Face\",\"keywords\":[\"animal\",\"nature\",\"pet\",\"spring\",\"magic\",\"bunny\"],\"skins\":[{\"unified\":\"1f430\",\"native\":\"\uD83D\uDC30\"}],\"version\":1},\"rabbit2\":{\"id\":\"rabbit2\",\"name\":\"Rabbit\",\"keywords\":[\"rabbit2\",\"animal\",\"nature\",\"pet\",\"magic\",\"spring\"],\"skins\":[{\"unified\":\"1f407\",\"native\":\"\uD83D\uDC07\"}],\"version\":1},\"chipmunk\":{\"id\":\"chipmunk\",\"name\":\"Chipmunk\",\"keywords\":[\"animal\",\"nature\",\"rodent\",\"squirrel\"],\"skins\":[{\"unified\":\"1f43f-fe0f\",\"native\":\"\uD83D\uDC3F\uFE0F\"}],\"version\":1},\"beaver\":{\"id\":\"beaver\",\"name\":\"Beaver\",\"keywords\":[\"animal\",\"rodent\"],\"skins\":[{\"unified\":\"1f9ab\",\"native\":\"\uD83E\uDDAB\"}],\"version\":13},\"hedgehog\":{\"id\":\"hedgehog\",\"name\":\"Hedgehog\",\"keywords\":[\"animal\",\"nature\",\"spiny\"],\"skins\":[{\"unified\":\"1f994\",\"native\":\"\uD83E\uDD94\"}],\"version\":5},\"bat\":{\"id\":\"bat\",\"name\":\"Bat\",\"keywords\":[\"animal\",\"nature\",\"blind\",\"vampire\"],\"skins\":[{\"unified\":\"1f987\",\"native\":\"\uD83E\uDD87\"}],\"version\":3},\"bear\":{\"id\":\"bear\",\"name\":\"Bear\",\"keywords\":[\"animal\",\"nature\",\"wild\"],\"skins\":[{\"unified\":\"1f43b\",\"native\":\"\uD83D\uDC3B\"}],\"version\":1},\"polar_bear\":{\"id\":\"polar_bear\",\"name\":\"Polar Bear\",\"keywords\":[\"animal\",\"arctic\"],\"skins\":[{\"unified\":\"1f43b-200d-2744-fe0f\",\"native\":\"\uD83D\uDC3B\u200D\u2744\uFE0F\"}],\"version\":13},\"koala\":{\"id\":\"koala\",\"name\":\"Koala\",\"keywords\":[\"animal\",\"nature\"],\"skins\":[{\"unified\":\"1f428\",\"native\":\"\uD83D\uDC28\"}],\"version\":1},\"panda_face\":{\"id\":\"panda_face\",\"name\":\"Panda\",\"keywords\":[\"face\",\"animal\",\"nature\"],\"skins\":[{\"unified\":\"1f43c\",\"native\":\"\uD83D\uDC3C\"}],\"version\":1},\"sloth\":{\"id\":\"sloth\",\"name\":\"Sloth\",\"keywords\":[\"animal\"],\"skins\":[{\"unified\":\"1f9a5\",\"native\":\"\uD83E\uDDA5\"}],\"version\":12},\"otter\":{\"id\":\"otter\",\"name\":\"Otter\",\"keywords\":[\"animal\"],\"skins\":[{\"unified\":\"1f9a6\",\"native\":\"\uD83E\uDDA6\"}],\"version\":12},\"skunk\":{\"id\":\"skunk\",\"name\":\"Skunk\",\"keywords\":[\"animal\"],\"skins\":[{\"unified\":\"1f9a8\",\"native\":\"\uD83E\uDDA8\"}],\"version\":12},\"kangaroo\":{\"id\":\"kangaroo\",\"name\":\"Kangaroo\",\"keywords\":[\"animal\",\"nature\",\"australia\",\"joey\",\"hop\",\"marsupial\"],\"skins\":[{\"unified\":\"1f998\",\"native\":\"\uD83E\uDD98\"}],\"version\":11},\"badger\":{\"id\":\"badger\",\"name\":\"Badger\",\"keywords\":[\"animal\",\"nature\",\"honey\"],\"skins\":[{\"unified\":\"1f9a1\",\"native\":\"\uD83E\uDDA1\"}],\"version\":11},\"feet\":{\"id\":\"feet\",\"name\":\"Paw Prints\",\"keywords\":[\"feet\",\"animal\",\"tracking\",\"footprints\",\"dog\",\"cat\",\"pet\"],\"skins\":[{\"unified\":\"1f43e\",\"native\":\"\uD83D\uDC3E\"}],\"version\":1},\"turkey\":{\"id\":\"turkey\",\"name\":\"Turkey\",\"keywords\":[\"animal\",\"bird\"],\"skins\":[{\"unified\":\"1f983\",\"native\":\"\uD83E\uDD83\"}],\"version\":1},\"chicken\":{\"id\":\"chicken\",\"name\":\"Chicken\",\"keywords\":[\"animal\",\"cluck\",\"nature\",\"bird\"],\"skins\":[{\"unified\":\"1f414\",\"native\":\"\uD83D\uDC14\"}],\"version\":1},\"rooster\":{\"id\":\"rooster\",\"name\":\"Rooster\",\"keywords\":[\"animal\",\"nature\",\"chicken\"],\"skins\":[{\"unified\":\"1f413\",\"native\":\"\uD83D\uDC13\"}],\"version\":1},\"hatching_chick\":{\"id\":\"hatching_chick\",\"name\":\"Hatching Chick\",\"keywords\":[\"animal\",\"chicken\",\"egg\",\"born\",\"baby\",\"bird\"],\"skins\":[{\"unified\":\"1f423\",\"native\":\"\uD83D\uDC23\"}],\"version\":1},\"baby_chick\":{\"id\":\"baby_chick\",\"name\":\"Baby Chick\",\"keywords\":[\"animal\",\"chicken\",\"bird\"],\"skins\":[{\"unified\":\"1f424\",\"native\":\"\uD83D\uDC24\"}],\"version\":1},\"hatched_chick\":{\"id\":\"hatched_chick\",\"name\":\"Front-Facing Baby Chick\",\"keywords\":[\"hatched\",\"front\",\"facing\",\"animal\",\"chicken\",\"bird\"],\"skins\":[{\"unified\":\"1f425\",\"native\":\"\uD83D\uDC25\"}],\"version\":1},\"bird\":{\"id\":\"bird\",\"name\":\"Bird\",\"keywords\":[\"animal\",\"nature\",\"fly\",\"tweet\",\"spring\"],\"skins\":[{\"unified\":\"1f426\",\"native\":\"\uD83D\uDC26\"}],\"version\":1},\"penguin\":{\"id\":\"penguin\",\"name\":\"Penguin\",\"keywords\":[\"animal\",\"nature\"],\"skins\":[{\"unified\":\"1f427\",\"native\":\"\uD83D\uDC27\"}],\"version\":1},\"dove_of_peace\":{\"id\":\"dove_of_peace\",\"name\":\"Dove\",\"keywords\":[\"of\",\"peace\",\"animal\",\"bird\"],\"skins\":[{\"unified\":\"1f54a-fe0f\",\"native\":\"\uD83D\uDD4A\uFE0F\"}],\"version\":1},\"eagle\":{\"id\":\"eagle\",\"name\":\"Eagle\",\"keywords\":[\"animal\",\"nature\",\"bird\"],\"skins\":[{\"unified\":\"1f985\",\"native\":\"\uD83E\uDD85\"}],\"version\":3},\"duck\":{\"id\":\"duck\",\"name\":\"Duck\",\"keywords\":[\"animal\",\"nature\",\"bird\",\"mallard\"],\"skins\":[{\"unified\":\"1f986\",\"native\":\"\uD83E\uDD86\"}],\"version\":3},\"swan\":{\"id\":\"swan\",\"name\":\"Swan\",\"keywords\":[\"animal\",\"nature\",\"bird\"],\"skins\":[{\"unified\":\"1f9a2\",\"native\":\"\uD83E\uDDA2\"}],\"version\":11},\"owl\":{\"id\":\"owl\",\"name\":\"Owl\",\"keywords\":[\"animal\",\"nature\",\"bird\",\"hoot\"],\"skins\":[{\"unified\":\"1f989\",\"native\":\"\uD83E\uDD89\"}],\"version\":3},\"dodo\":{\"id\":\"dodo\",\"name\":\"Dodo\",\"keywords\":[\"animal\",\"bird\"],\"skins\":[{\"unified\":\"1f9a4\",\"native\":\"\uD83E\uDDA4\"}],\"version\":13},\"feather\":{\"id\":\"feather\",\"name\":\"Feather\",\"keywords\":[\"bird\",\"fly\"],\"skins\":[{\"unified\":\"1fab6\",\"native\":\"\uD83E\uDEB6\"}],\"version\":13},\"flamingo\":{\"id\":\"flamingo\",\"name\":\"Flamingo\",\"keywords\":[\"animal\"],\"skins\":[{\"unified\":\"1f9a9\",\"native\":\"\uD83E\uDDA9\"}],\"version\":12},\"peacock\":{\"id\":\"peacock\",\"name\":\"Peacock\",\"keywords\":[\"animal\",\"nature\",\"peahen\",\"bird\"],\"skins\":[{\"unified\":\"1f99a\",\"native\":\"\uD83E\uDD9A\"}],\"version\":11},\"parrot\":{\"id\":\"parrot\",\"name\":\"Parrot\",\"keywords\":[\"animal\",\"nature\",\"bird\",\"pirate\",\"talk\"],\"skins\":[{\"unified\":\"1f99c\",\"native\":\"\uD83E\uDD9C\"}],\"version\":11},\"frog\":{\"id\":\"frog\",\"name\":\"Frog\",\"keywords\":[\"animal\",\"nature\",\"croak\",\"toad\"],\"skins\":[{\"unified\":\"1f438\",\"native\":\"\uD83D\uDC38\"}],\"version\":1},\"crocodile\":{\"id\":\"crocodile\",\"name\":\"Crocodile\",\"keywords\":[\"animal\",\"nature\",\"reptile\",\"lizard\",\"alligator\"],\"skins\":[{\"unified\":\"1f40a\",\"native\":\"\uD83D\uDC0A\"}],\"version\":1},\"turtle\":{\"id\":\"turtle\",\"name\":\"Turtle\",\"keywords\":[\"animal\",\"slow\",\"nature\",\"tortoise\"],\"skins\":[{\"unified\":\"1f422\",\"native\":\"\uD83D\uDC22\"}],\"version\":1},\"lizard\":{\"id\":\"lizard\",\"name\":\"Lizard\",\"keywords\":[\"animal\",\"nature\",\"reptile\"],\"skins\":[{\"unified\":\"1f98e\",\"native\":\"\uD83E\uDD8E\"}],\"version\":3},\"snake\":{\"id\":\"snake\",\"name\":\"Snake\",\"keywords\":[\"animal\",\"evil\",\"nature\",\"hiss\",\"python\"],\"skins\":[{\"unified\":\"1f40d\",\"native\":\"\uD83D\uDC0D\"}],\"version\":1},\"dragon_face\":{\"id\":\"dragon_face\",\"name\":\"Dragon Face\",\"keywords\":[\"animal\",\"myth\",\"nature\",\"chinese\",\"green\"],\"skins\":[{\"unified\":\"1f432\",\"native\":\"\uD83D\uDC32\"}],\"version\":1},\"dragon\":{\"id\":\"dragon\",\"name\":\"Dragon\",\"keywords\":[\"animal\",\"myth\",\"nature\",\"chinese\",\"green\"],\"skins\":[{\"unified\":\"1f409\",\"native\":\"\uD83D\uDC09\"}],\"version\":1},\"sauropod\":{\"id\":\"sauropod\",\"name\":\"Sauropod\",\"keywords\":[\"animal\",\"nature\",\"dinosaur\",\"brachiosaurus\",\"brontosaurus\",\"diplodocus\",\"extinct\"],\"skins\":[{\"unified\":\"1f995\",\"native\":\"\uD83E\uDD95\"}],\"version\":5},\"t-rex\":{\"id\":\"t-rex\",\"name\":\"T-Rex\",\"keywords\":[\"t\",\"rex\",\"animal\",\"nature\",\"dinosaur\",\"tyrannosaurus\",\"extinct\"],\"skins\":[{\"unified\":\"1f996\",\"native\":\"\uD83E\uDD96\"}],\"version\":5},\"whale\":{\"id\":\"whale\",\"name\":\"Spouting Whale\",\"keywords\":[\"animal\",\"nature\",\"sea\",\"ocean\"],\"skins\":[{\"unified\":\"1f433\",\"native\":\"\uD83D\uDC33\"}],\"version\":1},\"whale2\":{\"id\":\"whale2\",\"name\":\"Whale\",\"keywords\":[\"whale2\",\"animal\",\"nature\",\"sea\",\"ocean\"],\"skins\":[{\"unified\":\"1f40b\",\"native\":\"\uD83D\uDC0B\"}],\"version\":1},\"dolphin\":{\"id\":\"dolphin\",\"name\":\"Dolphin\",\"keywords\":[\"flipper\",\"animal\",\"nature\",\"fish\",\"sea\",\"ocean\",\"fins\",\"beach\"],\"skins\":[{\"unified\":\"1f42c\",\"native\":\"\uD83D\uDC2C\"}],\"version\":1},\"seal\":{\"id\":\"seal\",\"name\":\"Seal\",\"keywords\":[\"animal\",\"creature\",\"sea\"],\"skins\":[{\"unified\":\"1f9ad\",\"native\":\"\uD83E\uDDAD\"}],\"version\":13},\"fish\":{\"id\":\"fish\",\"name\":\"Fish\",\"keywords\":[\"animal\",\"food\",\"nature\"],\"skins\":[{\"unified\":\"1f41f\",\"native\":\"\uD83D\uDC1F\"}],\"version\":1},\"tropical_fish\":{\"id\":\"tropical_fish\",\"name\":\"Tropical Fish\",\"keywords\":[\"animal\",\"swim\",\"ocean\",\"beach\",\"nemo\"],\"skins\":[{\"unified\":\"1f420\",\"native\":\"\uD83D\uDC20\"}],\"version\":1},\"blowfish\":{\"id\":\"blowfish\",\"name\":\"Blowfish\",\"keywords\":[\"animal\",\"nature\",\"food\",\"sea\",\"ocean\"],\"skins\":[{\"unified\":\"1f421\",\"native\":\"\uD83D\uDC21\"}],\"version\":1},\"shark\":{\"id\":\"shark\",\"name\":\"Shark\",\"keywords\":[\"animal\",\"nature\",\"fish\",\"sea\",\"ocean\",\"jaws\",\"fins\",\"beach\"],\"skins\":[{\"unified\":\"1f988\",\"native\":\"\uD83E\uDD88\"}],\"version\":3},\"octopus\":{\"id\":\"octopus\",\"name\":\"Octopus\",\"keywords\":[\"animal\",\"creature\",\"ocean\",\"sea\",\"nature\",\"beach\"],\"skins\":[{\"unified\":\"1f419\",\"native\":\"\uD83D\uDC19\"}],\"version\":1},\"shell\":{\"id\":\"shell\",\"name\":\"Spiral Shell\",\"keywords\":[\"nature\",\"sea\",\"beach\"],\"skins\":[{\"unified\":\"1f41a\",\"native\":\"\uD83D\uDC1A\"}],\"version\":1},\"coral\":{\"id\":\"coral\",\"name\":\"Coral\",\"keywords\":[\"ocean\",\"sea\",\"reef\"],\"skins\":[{\"unified\":\"1fab8\",\"native\":\"\uD83E\uDEB8\"}],\"version\":14},\"snail\":{\"id\":\"snail\",\"name\":\"Snail\",\"keywords\":[\"slow\",\"animal\",\"shell\"],\"skins\":[{\"unified\":\"1f40c\",\"native\":\"\uD83D\uDC0C\"}],\"version\":1},\"butterfly\":{\"id\":\"butterfly\",\"name\":\"Butterfly\",\"keywords\":[\"animal\",\"insect\",\"nature\",\"caterpillar\"],\"skins\":[{\"unified\":\"1f98b\",\"native\":\"\uD83E\uDD8B\"}],\"version\":3},\"bug\":{\"id\":\"bug\",\"name\":\"Bug\",\"keywords\":[\"animal\",\"insect\",\"nature\",\"worm\"],\"skins\":[{\"unified\":\"1f41b\",\"native\":\"\uD83D\uDC1B\"}],\"version\":1},\"ant\":{\"id\":\"ant\",\"name\":\"Ant\",\"keywords\":[\"animal\",\"insect\",\"nature\",\"bug\"],\"skins\":[{\"unified\":\"1f41c\",\"native\":\"\uD83D\uDC1C\"}],\"version\":1},\"bee\":{\"id\":\"bee\",\"name\":\"Honeybee\",\"keywords\":[\"bee\",\"animal\",\"insect\",\"nature\",\"bug\",\"spring\",\"honey\"],\"skins\":[{\"unified\":\"1f41d\",\"native\":\"\uD83D\uDC1D\"}],\"version\":1},\"beetle\":{\"id\":\"beetle\",\"name\":\"Beetle\",\"keywords\":[\"insect\"],\"skins\":[{\"unified\":\"1fab2\",\"native\":\"\uD83E\uDEB2\"}],\"version\":13},\"ladybug\":{\"id\":\"ladybug\",\"name\":\"Lady Beetle\",\"keywords\":[\"ladybug\",\"animal\",\"insect\",\"nature\"],\"skins\":[{\"unified\":\"1f41e\",\"native\":\"\uD83D\uDC1E\"}],\"version\":1},\"cricket\":{\"id\":\"cricket\",\"name\":\"Cricket\",\"keywords\":[\"animal\",\"chirp\"],\"skins\":[{\"unified\":\"1f997\",\"native\":\"\uD83E\uDD97\"}],\"version\":5},\"cockroach\":{\"id\":\"cockroach\",\"name\":\"Cockroach\",\"keywords\":[\"insect\",\"pests\"],\"skins\":[{\"unified\":\"1fab3\",\"native\":\"\uD83E\uDEB3\"}],\"version\":13},\"spider\":{\"id\":\"spider\",\"name\":\"Spider\",\"keywords\":[\"animal\",\"arachnid\"],\"skins\":[{\"unified\":\"1f577-fe0f\",\"native\":\"\uD83D\uDD77\uFE0F\"}],\"version\":1},\"spider_web\":{\"id\":\"spider_web\",\"name\":\"Spider Web\",\"keywords\":[\"animal\",\"insect\",\"arachnid\",\"silk\"],\"skins\":[{\"unified\":\"1f578-fe0f\",\"native\":\"\uD83D\uDD78\uFE0F\"}],\"version\":1},\"scorpion\":{\"id\":\"scorpion\",\"name\":\"Scorpion\",\"keywords\":[\"animal\",\"arachnid\"],\"skins\":[{\"unified\":\"1f982\",\"native\":\"\uD83E\uDD82\"}],\"version\":1},\"mosquito\":{\"id\":\"mosquito\",\"name\":\"Mosquito\",\"keywords\":[\"animal\",\"nature\",\"insect\",\"malaria\"],\"skins\":[{\"unified\":\"1f99f\",\"native\":\"\uD83E\uDD9F\"}],\"version\":11},\"fly\":{\"id\":\"fly\",\"name\":\"Fly\",\"keywords\":[\"insect\"],\"skins\":[{\"unified\":\"1fab0\",\"native\":\"\uD83E\uDEB0\"}],\"version\":13},\"worm\":{\"id\":\"worm\",\"name\":\"Worm\",\"keywords\":[\"animal\"],\"skins\":[{\"unified\":\"1fab1\",\"native\":\"\uD83E\uDEB1\"}],\"version\":13},\"microbe\":{\"id\":\"microbe\",\"name\":\"Microbe\",\"keywords\":[\"amoeba\",\"bacteria\",\"germs\",\"virus\"],\"skins\":[{\"unified\":\"1f9a0\",\"native\":\"\uD83E\uDDA0\"}],\"version\":11},\"bouquet\":{\"id\":\"bouquet\",\"name\":\"Bouquet\",\"keywords\":[\"flowers\",\"nature\",\"spring\"],\"skins\":[{\"unified\":\"1f490\",\"native\":\"\uD83D\uDC90\"}],\"version\":1},\"cherry_blossom\":{\"id\":\"cherry_blossom\",\"name\":\"Cherry Blossom\",\"keywords\":[\"nature\",\"plant\",\"spring\",\"flower\"],\"skins\":[{\"unified\":\"1f338\",\"native\":\"\uD83C\uDF38\"}],\"version\":1},\"white_flower\":{\"id\":\"white_flower\",\"name\":\"White Flower\",\"keywords\":[\"japanese\",\"spring\"],\"skins\":[{\"unified\":\"1f4ae\",\"native\":\"\uD83D\uDCAE\"}],\"version\":1},\"lotus\":{\"id\":\"lotus\",\"name\":\"Lotus\",\"keywords\":[\"flower\",\"calm\",\"meditation\"],\"skins\":[{\"unified\":\"1fab7\",\"native\":\"\uD83E\uDEB7\"}],\"version\":14},\"rosette\":{\"id\":\"rosette\",\"name\":\"Rosette\",\"keywords\":[\"flower\",\"decoration\",\"military\"],\"skins\":[{\"unified\":\"1f3f5-fe0f\",\"native\":\"\uD83C\uDFF5\uFE0F\"}],\"version\":1},\"rose\":{\"id\":\"rose\",\"name\":\"Rose\",\"keywords\":[\"flowers\",\"valentines\",\"love\",\"spring\"],\"skins\":[{\"unified\":\"1f339\",\"native\":\"\uD83C\uDF39\"}],\"version\":1},\"wilted_flower\":{\"id\":\"wilted_flower\",\"name\":\"Wilted Flower\",\"keywords\":[\"plant\",\"nature\"],\"skins\":[{\"unified\":\"1f940\",\"native\":\"\uD83E\uDD40\"}],\"version\":3},\"hibiscus\":{\"id\":\"hibiscus\",\"name\":\"Hibiscus\",\"keywords\":[\"plant\",\"vegetable\",\"flowers\",\"beach\"],\"skins\":[{\"unified\":\"1f33a\",\"native\":\"\uD83C\uDF3A\"}],\"version\":1},\"sunflower\":{\"id\":\"sunflower\",\"name\":\"Sunflower\",\"keywords\":[\"nature\",\"plant\",\"fall\"],\"skins\":[{\"unified\":\"1f33b\",\"native\":\"\uD83C\uDF3B\"}],\"version\":1},\"blossom\":{\"id\":\"blossom\",\"name\":\"Blossom\",\"keywords\":[\"nature\",\"flowers\",\"yellow\"],\"skins\":[{\"unified\":\"1f33c\",\"native\":\"\uD83C\uDF3C\"}],\"version\":1},\"tulip\":{\"id\":\"tulip\",\"name\":\"Tulip\",\"keywords\":[\"flowers\",\"plant\",\"nature\",\"summer\",\"spring\"],\"skins\":[{\"unified\":\"1f337\",\"native\":\"\uD83C\uDF37\"}],\"version\":1},\"seedling\":{\"id\":\"seedling\",\"name\":\"Seedling\",\"keywords\":[\"plant\",\"nature\",\"grass\",\"lawn\",\"spring\"],\"skins\":[{\"unified\":\"1f331\",\"native\":\"\uD83C\uDF31\"}],\"version\":1},\"potted_plant\":{\"id\":\"potted_plant\",\"name\":\"Potted Plant\",\"keywords\":[\"greenery\",\"house\"],\"skins\":[{\"unified\":\"1fab4\",\"native\":\"\uD83E\uDEB4\"}],\"version\":13},\"evergreen_tree\":{\"id\":\"evergreen_tree\",\"name\":\"Evergreen Tree\",\"keywords\":[\"plant\",\"nature\"],\"skins\":[{\"unified\":\"1f332\",\"native\":\"\uD83C\uDF32\"}],\"version\":1},\"deciduous_tree\":{\"id\":\"deciduous_tree\",\"name\":\"Deciduous Tree\",\"keywords\":[\"plant\",\"nature\"],\"skins\":[{\"unified\":\"1f333\",\"native\":\"\uD83C\uDF33\"}],\"version\":1},\"palm_tree\":{\"id\":\"palm_tree\",\"name\":\"Palm Tree\",\"keywords\":[\"plant\",\"vegetable\",\"nature\",\"summer\",\"beach\",\"mojito\",\"tropical\"],\"skins\":[{\"unified\":\"1f334\",\"native\":\"\uD83C\uDF34\"}],\"version\":1},\"cactus\":{\"id\":\"cactus\",\"name\":\"Cactus\",\"keywords\":[\"vegetable\",\"plant\",\"nature\"],\"skins\":[{\"unified\":\"1f335\",\"native\":\"\uD83C\uDF35\"}],\"version\":1},\"ear_of_rice\":{\"id\":\"ear_of_rice\",\"name\":\"Ear of Rice\",\"keywords\":[\"sheaf\",\"nature\",\"plant\"],\"skins\":[{\"unified\":\"1f33e\",\"native\":\"\uD83C\uDF3E\"}],\"version\":1},\"herb\":{\"id\":\"herb\",\"name\":\"Herb\",\"keywords\":[\"vegetable\",\"plant\",\"medicine\",\"weed\",\"grass\",\"lawn\"],\"skins\":[{\"unified\":\"1f33f\",\"native\":\"\uD83C\uDF3F\"}],\"version\":1},\"shamrock\":{\"id\":\"shamrock\",\"name\":\"Shamrock\",\"keywords\":[\"vegetable\",\"plant\",\"nature\",\"irish\",\"clover\"],\"skins\":[{\"unified\":\"2618-fe0f\",\"native\":\"\u2618\uFE0F\"}],\"version\":1},\"four_leaf_clover\":{\"id\":\"four_leaf_clover\",\"name\":\"Four Leaf Clover\",\"keywords\":[\"vegetable\",\"plant\",\"nature\",\"lucky\",\"irish\"],\"skins\":[{\"unified\":\"1f340\",\"native\":\"\uD83C\uDF40\"}],\"version\":1},\"maple_leaf\":{\"id\":\"maple_leaf\",\"name\":\"Maple Leaf\",\"keywords\":[\"nature\",\"plant\",\"vegetable\",\"ca\",\"fall\"],\"skins\":[{\"unified\":\"1f341\",\"native\":\"\uD83C\uDF41\"}],\"version\":1},\"fallen_leaf\":{\"id\":\"fallen_leaf\",\"name\":\"Fallen Leaf\",\"keywords\":[\"nature\",\"plant\",\"vegetable\",\"leaves\"],\"skins\":[{\"unified\":\"1f342\",\"native\":\"\uD83C\uDF42\"}],\"version\":1},\"leaves\":{\"id\":\"leaves\",\"name\":\"Leaf Fluttering in Wind\",\"keywords\":[\"leaves\",\"nature\",\"plant\",\"tree\",\"vegetable\",\"grass\",\"lawn\",\"spring\"],\"skins\":[{\"unified\":\"1f343\",\"native\":\"\uD83C\uDF43\"}],\"version\":1},\"empty_nest\":{\"id\":\"empty_nest\",\"name\":\"Empty Nest\",\"keywords\":[\"bird\"],\"skins\":[{\"unified\":\"1fab9\",\"native\":\"\uD83E\uDEB9\"}],\"version\":14},\"nest_with_eggs\":{\"id\":\"nest_with_eggs\",\"name\":\"Nest with Eggs\",\"keywords\":[\"bird\"],\"skins\":[{\"unified\":\"1faba\",\"native\":\"\uD83E\uDEBA\"}],\"version\":14},\"grapes\":{\"id\":\"grapes\",\"name\":\"Grapes\",\"keywords\":[\"fruit\",\"food\",\"wine\"],\"skins\":[{\"unified\":\"1f347\",\"native\":\"\uD83C\uDF47\"}],\"version\":1},\"melon\":{\"id\":\"melon\",\"name\":\"Melon\",\"keywords\":[\"fruit\",\"nature\",\"food\"],\"skins\":[{\"unified\":\"1f348\",\"native\":\"\uD83C\uDF48\"}],\"version\":1},\"watermelon\":{\"id\":\"watermelon\",\"name\":\"Watermelon\",\"keywords\":[\"fruit\",\"food\",\"picnic\",\"summer\"],\"skins\":[{\"unified\":\"1f349\",\"native\":\"\uD83C\uDF49\"}],\"version\":1},\"tangerine\":{\"id\":\"tangerine\",\"name\":\"Tangerine\",\"keywords\":[\"food\",\"fruit\",\"nature\",\"orange\"],\"skins\":[{\"unified\":\"1f34a\",\"native\":\"\uD83C\uDF4A\"}],\"version\":1},\"lemon\":{\"id\":\"lemon\",\"name\":\"Lemon\",\"keywords\":[\"fruit\",\"nature\"],\"skins\":[{\"unified\":\"1f34b\",\"native\":\"\uD83C\uDF4B\"}],\"version\":1},\"banana\":{\"id\":\"banana\",\"name\":\"Banana\",\"keywords\":[\"fruit\",\"food\",\"monkey\"],\"skins\":[{\"unified\":\"1f34c\",\"native\":\"\uD83C\uDF4C\"}],\"version\":1},\"pineapple\":{\"id\":\"pineapple\",\"name\":\"Pineapple\",\"keywords\":[\"fruit\",\"nature\",\"food\"],\"skins\":[{\"unified\":\"1f34d\",\"native\":\"\uD83C\uDF4D\"}],\"version\":1},\"mango\":{\"id\":\"mango\",\"name\":\"Mango\",\"keywords\":[\"fruit\",\"food\",\"tropical\"],\"skins\":[{\"unified\":\"1f96d\",\"native\":\"\uD83E\uDD6D\"}],\"version\":11},\"apple\":{\"id\":\"apple\",\"name\":\"Red Apple\",\"keywords\":[\"fruit\",\"mac\",\"school\"],\"skins\":[{\"unified\":\"1f34e\",\"native\":\"\uD83C\uDF4E\"}],\"version\":1},\"green_apple\":{\"id\":\"green_apple\",\"name\":\"Green Apple\",\"keywords\":[\"fruit\",\"nature\"],\"skins\":[{\"unified\":\"1f34f\",\"native\":\"\uD83C\uDF4F\"}],\"version\":1},\"pear\":{\"id\":\"pear\",\"name\":\"Pear\",\"keywords\":[\"fruit\",\"nature\",\"food\"],\"skins\":[{\"unified\":\"1f350\",\"native\":\"\uD83C\uDF50\"}],\"version\":1},\"peach\":{\"id\":\"peach\",\"name\":\"Peach\",\"keywords\":[\"fruit\",\"nature\",\"food\"],\"skins\":[{\"unified\":\"1f351\",\"native\":\"\uD83C\uDF51\"}],\"version\":1},\"cherries\":{\"id\":\"cherries\",\"name\":\"Cherries\",\"keywords\":[\"food\",\"fruit\"],\"skins\":[{\"unified\":\"1f352\",\"native\":\"\uD83C\uDF52\"}],\"version\":1},\"strawberry\":{\"id\":\"strawberry\",\"name\":\"Strawberry\",\"keywords\":[\"fruit\",\"food\",\"nature\"],\"skins\":[{\"unified\":\"1f353\",\"native\":\"\uD83C\uDF53\"}],\"version\":1},\"blueberries\":{\"id\":\"blueberries\",\"name\":\"Blueberries\",\"keywords\":[\"fruit\"],\"skins\":[{\"unified\":\"1fad0\",\"native\":\"\uD83E\uDED0\"}],\"version\":13},\"kiwifruit\":{\"id\":\"kiwifruit\",\"name\":\"Kiwifruit\",\"keywords\":[\"kiwi\",\"fruit\",\"food\"],\"skins\":[{\"unified\":\"1f95d\",\"native\":\"\uD83E\uDD5D\"}],\"version\":3},\"tomato\":{\"id\":\"tomato\",\"name\":\"Tomato\",\"keywords\":[\"fruit\",\"vegetable\",\"nature\",\"food\"],\"skins\":[{\"unified\":\"1f345\",\"native\":\"\uD83C\uDF45\"}],\"version\":1},\"olive\":{\"id\":\"olive\",\"name\":\"Olive\",\"keywords\":[\"fruit\"],\"skins\":[{\"unified\":\"1fad2\",\"native\":\"\uD83E\uDED2\"}],\"version\":13},\"coconut\":{\"id\":\"coconut\",\"name\":\"Coconut\",\"keywords\":[\"fruit\",\"nature\",\"food\",\"palm\"],\"skins\":[{\"unified\":\"1f965\",\"native\":\"\uD83E\uDD65\"}],\"version\":5},\"avocado\":{\"id\":\"avocado\",\"name\":\"Avocado\",\"keywords\":[\"fruit\",\"food\"],\"skins\":[{\"unified\":\"1f951\",\"native\":\"\uD83E\uDD51\"}],\"version\":3},\"eggplant\":{\"id\":\"eggplant\",\"name\":\"Eggplant\",\"keywords\":[\"vegetable\",\"nature\",\"food\",\"aubergine\"],\"skins\":[{\"unified\":\"1f346\",\"native\":\"\uD83C\uDF46\"}],\"version\":1},\"potato\":{\"id\":\"potato\",\"name\":\"Potato\",\"keywords\":[\"food\",\"tuber\",\"vegatable\",\"starch\"],\"skins\":[{\"unified\":\"1f954\",\"native\":\"\uD83E\uDD54\"}],\"version\":3},\"carrot\":{\"id\":\"carrot\",\"name\":\"Carrot\",\"keywords\":[\"vegetable\",\"food\",\"orange\"],\"skins\":[{\"unified\":\"1f955\",\"native\":\"\uD83E\uDD55\"}],\"version\":3},\"corn\":{\"id\":\"corn\",\"name\":\"Ear of Corn\",\"keywords\":[\"food\",\"vegetable\",\"plant\"],\"skins\":[{\"unified\":\"1f33d\",\"native\":\"\uD83C\uDF3D\"}],\"version\":1},\"hot_pepper\":{\"id\":\"hot_pepper\",\"name\":\"Hot Pepper\",\"keywords\":[\"food\",\"spicy\",\"chilli\",\"chili\"],\"skins\":[{\"unified\":\"1f336-fe0f\",\"native\":\"\uD83C\uDF36\uFE0F\"}],\"version\":1},\"bell_pepper\":{\"id\":\"bell_pepper\",\"name\":\"Bell Pepper\",\"keywords\":[\"fruit\",\"plant\"],\"skins\":[{\"unified\":\"1fad1\",\"native\":\"\uD83E\uDED1\"}],\"version\":13},\"cucumber\":{\"id\":\"cucumber\",\"name\":\"Cucumber\",\"keywords\":[\"fruit\",\"food\",\"pickle\"],\"skins\":[{\"unified\":\"1f952\",\"native\":\"\uD83E\uDD52\"}],\"version\":3},\"leafy_green\":{\"id\":\"leafy_green\",\"name\":\"Leafy Green\",\"keywords\":[\"food\",\"vegetable\",\"plant\",\"bok\",\"choy\",\"cabbage\",\"kale\",\"lettuce\"],\"skins\":[{\"unified\":\"1f96c\",\"native\":\"\uD83E\uDD6C\"}],\"version\":11},\"broccoli\":{\"id\":\"broccoli\",\"name\":\"Broccoli\",\"keywords\":[\"fruit\",\"food\",\"vegetable\"],\"skins\":[{\"unified\":\"1f966\",\"native\":\"\uD83E\uDD66\"}],\"version\":5},\"garlic\":{\"id\":\"garlic\",\"name\":\"Garlic\",\"keywords\":[\"food\",\"spice\",\"cook\"],\"skins\":[{\"unified\":\"1f9c4\",\"native\":\"\uD83E\uDDC4\"}],\"version\":12},\"onion\":{\"id\":\"onion\",\"name\":\"Onion\",\"keywords\":[\"cook\",\"food\",\"spice\"],\"skins\":[{\"unified\":\"1f9c5\",\"native\":\"\uD83E\uDDC5\"}],\"version\":12},\"mushroom\":{\"id\":\"mushroom\",\"name\":\"Mushroom\",\"keywords\":[\"plant\",\"vegetable\"],\"skins\":[{\"unified\":\"1f344\",\"native\":\"\uD83C\uDF44\"}],\"version\":1},\"peanuts\":{\"id\":\"peanuts\",\"name\":\"Peanuts\",\"keywords\":[\"food\",\"nut\"],\"skins\":[{\"unified\":\"1f95c\",\"native\":\"\uD83E\uDD5C\"}],\"version\":3},\"beans\":{\"id\":\"beans\",\"name\":\"Beans\",\"keywords\":[\"food\"],\"skins\":[{\"unified\":\"1fad8\",\"native\":\"\uD83E\uDED8\"}],\"version\":14},\"chestnut\":{\"id\":\"chestnut\",\"name\":\"Chestnut\",\"keywords\":[\"food\",\"squirrel\"],\"skins\":[{\"unified\":\"1f330\",\"native\":\"\uD83C\uDF30\"}],\"version\":1},\"bread\":{\"id\":\"bread\",\"name\":\"Bread\",\"keywords\":[\"food\",\"wheat\",\"breakfast\",\"toast\"],\"skins\":[{\"unified\":\"1f35e\",\"native\":\"\uD83C\uDF5E\"}],\"version\":1},\"croissant\":{\"id\":\"croissant\",\"name\":\"Croissant\",\"keywords\":[\"food\",\"bread\",\"french\"],\"skins\":[{\"unified\":\"1f950\",\"native\":\"\uD83E\uDD50\"}],\"version\":3},\"baguette_bread\":{\"id\":\"baguette_bread\",\"name\":\"Baguette Bread\",\"keywords\":[\"food\",\"french\"],\"skins\":[{\"unified\":\"1f956\",\"native\":\"\uD83E\uDD56\"}],\"version\":3},\"flatbread\":{\"id\":\"flatbread\",\"name\":\"Flatbread\",\"keywords\":[\"flour\",\"food\"],\"skins\":[{\"unified\":\"1fad3\",\"native\":\"\uD83E\uDED3\"}],\"version\":13},\"pretzel\":{\"id\":\"pretzel\",\"name\":\"Pretzel\",\"keywords\":[\"food\",\"bread\",\"twisted\"],\"skins\":[{\"unified\":\"1f968\",\"native\":\"\uD83E\uDD68\"}],\"version\":5},\"bagel\":{\"id\":\"bagel\",\"name\":\"Bagel\",\"keywords\":[\"food\",\"bread\",\"bakery\",\"schmear\"],\"skins\":[{\"unified\":\"1f96f\",\"native\":\"\uD83E\uDD6F\"}],\"version\":11},\"pancakes\":{\"id\":\"pancakes\",\"name\":\"Pancakes\",\"keywords\":[\"food\",\"breakfast\",\"flapjacks\",\"hotcakes\"],\"skins\":[{\"unified\":\"1f95e\",\"native\":\"\uD83E\uDD5E\"}],\"version\":3},\"waffle\":{\"id\":\"waffle\",\"name\":\"Waffle\",\"keywords\":[\"food\",\"breakfast\"],\"skins\":[{\"unified\":\"1f9c7\",\"native\":\"\uD83E\uDDC7\"}],\"version\":12},\"cheese_wedge\":{\"id\":\"cheese_wedge\",\"name\":\"Cheese Wedge\",\"keywords\":[\"food\",\"chadder\"],\"skins\":[{\"unified\":\"1f9c0\",\"native\":\"\uD83E\uDDC0\"}],\"version\":1},\"meat_on_bone\":{\"id\":\"meat_on_bone\",\"name\":\"Meat on Bone\",\"keywords\":[\"good\",\"food\",\"drumstick\"],\"skins\":[{\"unified\":\"1f356\",\"native\":\"\uD83C\uDF56\"}],\"version\":1},\"poultry_leg\":{\"id\":\"poultry_leg\",\"name\":\"Poultry Leg\",\"keywords\":[\"food\",\"meat\",\"drumstick\",\"bird\",\"chicken\",\"turkey\"],\"skins\":[{\"unified\":\"1f357\",\"native\":\"\uD83C\uDF57\"}],\"version\":1},\"cut_of_meat\":{\"id\":\"cut_of_meat\",\"name\":\"Cut of Meat\",\"keywords\":[\"food\",\"cow\",\"chop\",\"lambchop\",\"porkchop\"],\"skins\":[{\"unified\":\"1f969\",\"native\":\"\uD83E\uDD69\"}],\"version\":5},\"bacon\":{\"id\":\"bacon\",\"name\":\"Bacon\",\"keywords\":[\"food\",\"breakfast\",\"pork\",\"pig\",\"meat\"],\"skins\":[{\"unified\":\"1f953\",\"native\":\"\uD83E\uDD53\"}],\"version\":3},\"hamburger\":{\"id\":\"hamburger\",\"name\":\"Hamburger\",\"keywords\":[\"meat\",\"fast\",\"food\",\"beef\",\"cheeseburger\",\"mcdonalds\",\"burger\",\"king\"],\"skins\":[{\"unified\":\"1f354\",\"native\":\"\uD83C\uDF54\"}],\"version\":1},\"fries\":{\"id\":\"fries\",\"name\":\"French Fries\",\"keywords\":[\"chips\",\"snack\",\"fast\",\"food\"],\"skins\":[{\"unified\":\"1f35f\",\"native\":\"\uD83C\uDF5F\"}],\"version\":1},\"pizza\":{\"id\":\"pizza\",\"name\":\"Pizza\",\"keywords\":[\"food\",\"party\"],\"skins\":[{\"unified\":\"1f355\",\"native\":\"\uD83C\uDF55\"}],\"version\":1},\"hotdog\":{\"id\":\"hotdog\",\"name\":\"Hot Dog\",\"keywords\":[\"hotdog\",\"food\",\"frankfurter\"],\"skins\":[{\"unified\":\"1f32d\",\"native\":\"\uD83C\uDF2D\"}],\"version\":1},\"sandwich\":{\"id\":\"sandwich\",\"name\":\"Sandwich\",\"keywords\":[\"food\",\"lunch\",\"bread\"],\"skins\":[{\"unified\":\"1f96a\",\"native\":\"\uD83E\uDD6A\"}],\"version\":5},\"taco\":{\"id\":\"taco\",\"name\":\"Taco\",\"keywords\":[\"food\",\"mexican\"],\"skins\":[{\"unified\":\"1f32e\",\"native\":\"\uD83C\uDF2E\"}],\"version\":1},\"burrito\":{\"id\":\"burrito\",\"name\":\"Burrito\",\"keywords\":[\"food\",\"mexican\"],\"skins\":[{\"unified\":\"1f32f\",\"native\":\"\uD83C\uDF2F\"}],\"version\":1},\"tamale\":{\"id\":\"tamale\",\"name\":\"Tamale\",\"keywords\":[\"food\",\"masa\"],\"skins\":[{\"unified\":\"1fad4\",\"native\":\"\uD83E\uDED4\"}],\"version\":13},\"stuffed_flatbread\":{\"id\":\"stuffed_flatbread\",\"name\":\"Stuffed Flatbread\",\"keywords\":[\"food\",\"gyro\"],\"skins\":[{\"unified\":\"1f959\",\"native\":\"\uD83E\uDD59\"}],\"version\":3},\"falafel\":{\"id\":\"falafel\",\"name\":\"Falafel\",\"keywords\":[\"food\"],\"skins\":[{\"unified\":\"1f9c6\",\"native\":\"\uD83E\uDDC6\"}],\"version\":12},\"egg\":{\"id\":\"egg\",\"name\":\"Egg\",\"keywords\":[\"food\",\"chicken\",\"breakfast\"],\"skins\":[{\"unified\":\"1f95a\",\"native\":\"\uD83E\uDD5A\"}],\"version\":3},\"fried_egg\":{\"id\":\"fried_egg\",\"name\":\"Cooking\",\"keywords\":[\"fried\",\"egg\",\"food\",\"breakfast\",\"kitchen\"],\"skins\":[{\"unified\":\"1f373\",\"native\":\"\uD83C\uDF73\"}],\"version\":1},\"shallow_pan_of_food\":{\"id\":\"shallow_pan_of_food\",\"name\":\"Shallow Pan of Food\",\"keywords\":[\"cooking\",\"casserole\",\"paella\"],\"skins\":[{\"unified\":\"1f958\",\"native\":\"\uD83E\uDD58\"}],\"version\":3},\"stew\":{\"id\":\"stew\",\"name\":\"Pot of Food\",\"keywords\":[\"stew\",\"meat\",\"soup\"],\"skins\":[{\"unified\":\"1f372\",\"native\":\"\uD83C\uDF72\"}],\"version\":1},\"fondue\":{\"id\":\"fondue\",\"name\":\"Fondue\",\"keywords\":[\"cheese\",\"pot\",\"food\"],\"skins\":[{\"unified\":\"1fad5\",\"native\":\"\uD83E\uDED5\"}],\"version\":13},\"bowl_with_spoon\":{\"id\":\"bowl_with_spoon\",\"name\":\"Bowl with Spoon\",\"keywords\":[\"food\",\"breakfast\",\"cereal\",\"oatmeal\",\"porridge\"],\"skins\":[{\"unified\":\"1f963\",\"native\":\"\uD83E\uDD63\"}],\"version\":5},\"green_salad\":{\"id\":\"green_salad\",\"name\":\"Green Salad\",\"keywords\":[\"food\",\"healthy\",\"lettuce\"],\"skins\":[{\"unified\":\"1f957\",\"native\":\"\uD83E\uDD57\"}],\"version\":3},\"popcorn\":{\"id\":\"popcorn\",\"name\":\"Popcorn\",\"keywords\":[\"food\",\"movie\",\"theater\",\"films\",\"snack\"],\"skins\":[{\"unified\":\"1f37f\",\"native\":\"\uD83C\uDF7F\"}],\"version\":1},\"butter\":{\"id\":\"butter\",\"name\":\"Butter\",\"keywords\":[\"food\",\"cook\"],\"skins\":[{\"unified\":\"1f9c8\",\"native\":\"\uD83E\uDDC8\"}],\"version\":12},\"salt\":{\"id\":\"salt\",\"name\":\"Salt\",\"keywords\":[\"condiment\",\"shaker\"],\"skins\":[{\"unified\":\"1f9c2\",\"native\":\"\uD83E\uDDC2\"}],\"version\":11},\"canned_food\":{\"id\":\"canned_food\",\"name\":\"Canned Food\",\"keywords\":[\"soup\"],\"skins\":[{\"unified\":\"1f96b\",\"native\":\"\uD83E\uDD6B\"}],\"version\":5},\"bento\":{\"id\":\"bento\",\"name\":\"Bento Box\",\"keywords\":[\"food\",\"japanese\"],\"skins\":[{\"unified\":\"1f371\",\"native\":\"\uD83C\uDF71\"}],\"version\":1},\"rice_cracker\":{\"id\":\"rice_cracker\",\"name\":\"Rice Cracker\",\"keywords\":[\"food\",\"japanese\"],\"skins\":[{\"unified\":\"1f358\",\"native\":\"\uD83C\uDF58\"}],\"version\":1},\"rice_ball\":{\"id\":\"rice_ball\",\"name\":\"Rice Ball\",\"keywords\":[\"food\",\"japanese\"],\"skins\":[{\"unified\":\"1f359\",\"native\":\"\uD83C\uDF59\"}],\"version\":1},\"rice\":{\"id\":\"rice\",\"name\":\"Cooked Rice\",\"keywords\":[\"food\",\"china\",\"asian\"],\"skins\":[{\"unified\":\"1f35a\",\"native\":\"\uD83C\uDF5A\"}],\"version\":1},\"curry\":{\"id\":\"curry\",\"name\":\"Curry Rice\",\"keywords\":[\"food\",\"spicy\",\"hot\",\"indian\"],\"skins\":[{\"unified\":\"1f35b\",\"native\":\"\uD83C\uDF5B\"}],\"version\":1},\"ramen\":{\"id\":\"ramen\",\"name\":\"Steaming Bowl\",\"keywords\":[\"ramen\",\"food\",\"japanese\",\"noodle\",\"chopsticks\"],\"skins\":[{\"unified\":\"1f35c\",\"native\":\"\uD83C\uDF5C\"}],\"version\":1},\"spaghetti\":{\"id\":\"spaghetti\",\"name\":\"Spaghetti\",\"keywords\":[\"food\",\"italian\",\"noodle\"],\"skins\":[{\"unified\":\"1f35d\",\"native\":\"\uD83C\uDF5D\"}],\"version\":1},\"sweet_potato\":{\"id\":\"sweet_potato\",\"name\":\"Roasted Sweet Potato\",\"keywords\":[\"food\",\"nature\"],\"skins\":[{\"unified\":\"1f360\",\"native\":\"\uD83C\uDF60\"}],\"version\":1},\"oden\":{\"id\":\"oden\",\"name\":\"Oden\",\"keywords\":[\"food\",\"japanese\"],\"skins\":[{\"unified\":\"1f362\",\"native\":\"\uD83C\uDF62\"}],\"version\":1},\"sushi\":{\"id\":\"sushi\",\"name\":\"Sushi\",\"keywords\":[\"food\",\"fish\",\"japanese\",\"rice\"],\"skins\":[{\"unified\":\"1f363\",\"native\":\"\uD83C\uDF63\"}],\"version\":1},\"fried_shrimp\":{\"id\":\"fried_shrimp\",\"name\":\"Fried Shrimp\",\"keywords\":[\"food\",\"animal\",\"appetizer\",\"summer\"],\"skins\":[{\"unified\":\"1f364\",\"native\":\"\uD83C\uDF64\"}],\"version\":1},\"fish_cake\":{\"id\":\"fish_cake\",\"name\":\"Fish Cake with Swirl\",\"keywords\":[\"food\",\"japan\",\"sea\",\"beach\",\"narutomaki\",\"pink\",\"kamaboko\",\"surimi\",\"ramen\"],\"skins\":[{\"unified\":\"1f365\",\"native\":\"\uD83C\uDF65\"}],\"version\":1},\"moon_cake\":{\"id\":\"moon_cake\",\"name\":\"Moon Cake\",\"keywords\":[\"food\",\"autumn\"],\"skins\":[{\"unified\":\"1f96e\",\"native\":\"\uD83E\uDD6E\"}],\"version\":11},\"dango\":{\"id\":\"dango\",\"name\":\"Dango\",\"keywords\":[\"food\",\"dessert\",\"sweet\",\"japanese\",\"barbecue\",\"meat\"],\"skins\":[{\"unified\":\"1f361\",\"native\":\"\uD83C\uDF61\"}],\"version\":1},\"dumpling\":{\"id\":\"dumpling\",\"name\":\"Dumpling\",\"keywords\":[\"food\",\"empanada\",\"pierogi\",\"potsticker\"],\"skins\":[{\"unified\":\"1f95f\",\"native\":\"\uD83E\uDD5F\"}],\"version\":5},\"fortune_cookie\":{\"id\":\"fortune_cookie\",\"name\":\"Fortune Cookie\",\"keywords\":[\"food\",\"prophecy\"],\"skins\":[{\"unified\":\"1f960\",\"native\":\"\uD83E\uDD60\"}],\"version\":5},\"takeout_box\":{\"id\":\"takeout_box\",\"name\":\"Takeout Box\",\"keywords\":[\"food\",\"leftovers\"],\"skins\":[{\"unified\":\"1f961\",\"native\":\"\uD83E\uDD61\"}],\"version\":5},\"crab\":{\"id\":\"crab\",\"name\":\"Crab\",\"keywords\":[\"animal\",\"crustacean\"],\"skins\":[{\"unified\":\"1f980\",\"native\":\"\uD83E\uDD80\"}],\"version\":1},\"lobster\":{\"id\":\"lobster\",\"name\":\"Lobster\",\"keywords\":[\"animal\",\"nature\",\"bisque\",\"claws\",\"seafood\"],\"skins\":[{\"unified\":\"1f99e\",\"native\":\"\uD83E\uDD9E\"}],\"version\":11},\"shrimp\":{\"id\":\"shrimp\",\"name\":\"Shrimp\",\"keywords\":[\"animal\",\"ocean\",\"nature\",\"seafood\"],\"skins\":[{\"unified\":\"1f990\",\"native\":\"\uD83E\uDD90\"}],\"version\":3},\"squid\":{\"id\":\"squid\",\"name\":\"Squid\",\"keywords\":[\"animal\",\"nature\",\"ocean\",\"sea\"],\"skins\":[{\"unified\":\"1f991\",\"native\":\"\uD83E\uDD91\"}],\"version\":3},\"oyster\":{\"id\":\"oyster\",\"name\":\"Oyster\",\"keywords\":[\"food\"],\"skins\":[{\"unified\":\"1f9aa\",\"native\":\"\uD83E\uDDAA\"}],\"version\":12},\"icecream\":{\"id\":\"icecream\",\"name\":\"Soft Ice Cream\",\"keywords\":[\"icecream\",\"food\",\"hot\",\"dessert\",\"summer\"],\"skins\":[{\"unified\":\"1f366\",\"native\":\"\uD83C\uDF66\"}],\"version\":1},\"shaved_ice\":{\"id\":\"shaved_ice\",\"name\":\"Shaved Ice\",\"keywords\":[\"hot\",\"dessert\",\"summer\"],\"skins\":[{\"unified\":\"1f367\",\"native\":\"\uD83C\uDF67\"}],\"version\":1},\"ice_cream\":{\"id\":\"ice_cream\",\"name\":\"Ice Cream\",\"keywords\":[\"food\",\"hot\",\"dessert\"],\"skins\":[{\"unified\":\"1f368\",\"native\":\"\uD83C\uDF68\"}],\"version\":1},\"doughnut\":{\"id\":\"doughnut\",\"name\":\"Doughnut\",\"keywords\":[\"food\",\"dessert\",\"snack\",\"sweet\",\"donut\"],\"skins\":[{\"unified\":\"1f369\",\"native\":\"\uD83C\uDF69\"}],\"version\":1},\"cookie\":{\"id\":\"cookie\",\"name\":\"Cookie\",\"keywords\":[\"food\",\"snack\",\"oreo\",\"chocolate\",\"sweet\",\"dessert\"],\"skins\":[{\"unified\":\"1f36a\",\"native\":\"\uD83C\uDF6A\"}],\"version\":1},\"birthday\":{\"id\":\"birthday\",\"name\":\"Birthday Cake\",\"keywords\":[\"food\",\"dessert\"],\"skins\":[{\"unified\":\"1f382\",\"native\":\"\uD83C\uDF82\"}],\"version\":1},\"cake\":{\"id\":\"cake\",\"name\":\"Shortcake\",\"keywords\":[\"cake\",\"food\",\"dessert\"],\"skins\":[{\"unified\":\"1f370\",\"native\":\"\uD83C\uDF70\"}],\"version\":1},\"cupcake\":{\"id\":\"cupcake\",\"name\":\"Cupcake\",\"keywords\":[\"food\",\"dessert\",\"bakery\",\"sweet\"],\"skins\":[{\"unified\":\"1f9c1\",\"native\":\"\uD83E\uDDC1\"}],\"version\":11},\"pie\":{\"id\":\"pie\",\"name\":\"Pie\",\"keywords\":[\"food\",\"dessert\",\"pastry\"],\"skins\":[{\"unified\":\"1f967\",\"native\":\"\uD83E\uDD67\"}],\"version\":5},\"chocolate_bar\":{\"id\":\"chocolate_bar\",\"name\":\"Chocolate Bar\",\"keywords\":[\"food\",\"snack\",\"dessert\",\"sweet\"],\"skins\":[{\"unified\":\"1f36b\",\"native\":\"\uD83C\uDF6B\"}],\"version\":1},\"candy\":{\"id\":\"candy\",\"name\":\"Candy\",\"keywords\":[\"snack\",\"dessert\",\"sweet\",\"lolly\"],\"skins\":[{\"unified\":\"1f36c\",\"native\":\"\uD83C\uDF6C\"}],\"version\":1},\"lollipop\":{\"id\":\"lollipop\",\"name\":\"Lollipop\",\"keywords\":[\"food\",\"snack\",\"candy\",\"sweet\"],\"skins\":[{\"unified\":\"1f36d\",\"native\":\"\uD83C\uDF6D\"}],\"version\":1},\"custard\":{\"id\":\"custard\",\"name\":\"Custard\",\"keywords\":[\"dessert\",\"food\"],\"skins\":[{\"unified\":\"1f36e\",\"native\":\"\uD83C\uDF6E\"}],\"version\":1},\"honey_pot\":{\"id\":\"honey_pot\",\"name\":\"Honey Pot\",\"keywords\":[\"bees\",\"sweet\",\"kitchen\"],\"skins\":[{\"unified\":\"1f36f\",\"native\":\"\uD83C\uDF6F\"}],\"version\":1},\"baby_bottle\":{\"id\":\"baby_bottle\",\"name\":\"Baby Bottle\",\"keywords\":[\"food\",\"container\",\"milk\"],\"skins\":[{\"unified\":\"1f37c\",\"native\":\"\uD83C\uDF7C\"}],\"version\":1},\"glass_of_milk\":{\"id\":\"glass_of_milk\",\"name\":\"Glass of Milk\",\"keywords\":[\"beverage\",\"drink\",\"cow\"],\"skins\":[{\"unified\":\"1f95b\",\"native\":\"\uD83E\uDD5B\"}],\"version\":3},\"coffee\":{\"id\":\"coffee\",\"name\":\"Hot Beverage\",\"keywords\":[\"coffee\",\"caffeine\",\"latte\",\"espresso\"],\"skins\":[{\"unified\":\"2615\",\"native\":\"\u2615\"}],\"version\":1},\"teapot\":{\"id\":\"teapot\",\"name\":\"Teapot\",\"keywords\":[\"drink\",\"hot\"],\"skins\":[{\"unified\":\"1fad6\",\"native\":\"\uD83E\uDED6\"}],\"version\":13},\"tea\":{\"id\":\"tea\",\"name\":\"Teacup Without Handle\",\"keywords\":[\"tea\",\"drink\",\"bowl\",\"breakfast\",\"green\",\"british\"],\"skins\":[{\"unified\":\"1f375\",\"native\":\"\uD83C\uDF75\"}],\"version\":1},\"sake\":{\"id\":\"sake\",\"name\":\"Sake\",\"keywords\":[\"wine\",\"drink\",\"drunk\",\"beverage\",\"japanese\",\"alcohol\",\"booze\"],\"skins\":[{\"unified\":\"1f376\",\"native\":\"\uD83C\uDF76\"}],\"version\":1},\"champagne\":{\"id\":\"champagne\",\"name\":\"Bottle with Popping Cork\",\"keywords\":[\"champagne\",\"drink\",\"wine\",\"celebration\"],\"skins\":[{\"unified\":\"1f37e\",\"native\":\"\uD83C\uDF7E\"}],\"version\":1},\"wine_glass\":{\"id\":\"wine_glass\",\"name\":\"Wine Glass\",\"keywords\":[\"drink\",\"beverage\",\"drunk\",\"alcohol\",\"booze\"],\"skins\":[{\"unified\":\"1f377\",\"native\":\"\uD83C\uDF77\"}],\"version\":1},\"cocktail\":{\"id\":\"cocktail\",\"name\":\"Cocktail Glass\",\"keywords\":[\"drink\",\"drunk\",\"alcohol\",\"beverage\",\"booze\",\"mojito\"],\"skins\":[{\"unified\":\"1f378\",\"native\":\"\uD83C\uDF78\"}],\"version\":1},\"tropical_drink\":{\"id\":\"tropical_drink\",\"name\":\"Tropical Drink\",\"keywords\":[\"beverage\",\"cocktail\",\"summer\",\"beach\",\"alcohol\",\"booze\",\"mojito\"],\"skins\":[{\"unified\":\"1f379\",\"native\":\"\uD83C\uDF79\"}],\"version\":1},\"beer\":{\"id\":\"beer\",\"name\":\"Beer Mug\",\"keywords\":[\"relax\",\"beverage\",\"drink\",\"drunk\",\"party\",\"pub\",\"summer\",\"alcohol\",\"booze\"],\"skins\":[{\"unified\":\"1f37a\",\"native\":\"\uD83C\uDF7A\"}],\"version\":1},\"beers\":{\"id\":\"beers\",\"name\":\"Clinking Beer Mugs\",\"keywords\":[\"beers\",\"relax\",\"beverage\",\"drink\",\"drunk\",\"party\",\"pub\",\"summer\",\"alcohol\",\"booze\"],\"skins\":[{\"unified\":\"1f37b\",\"native\":\"\uD83C\uDF7B\"}],\"version\":1},\"clinking_glasses\":{\"id\":\"clinking_glasses\",\"name\":\"Clinking Glasses\",\"keywords\":[\"beverage\",\"drink\",\"party\",\"alcohol\",\"celebrate\",\"cheers\",\"wine\",\"champagne\",\"toast\"],\"skins\":[{\"unified\":\"1f942\",\"native\":\"\uD83E\uDD42\"}],\"version\":3},\"tumbler_glass\":{\"id\":\"tumbler_glass\",\"name\":\"Tumbler Glass\",\"keywords\":[\"drink\",\"beverage\",\"drunk\",\"alcohol\",\"liquor\",\"booze\",\"bourbon\",\"scotch\",\"whisky\",\"shot\"],\"skins\":[{\"unified\":\"1f943\",\"native\":\"\uD83E\uDD43\"}],\"version\":3},\"pouring_liquid\":{\"id\":\"pouring_liquid\",\"name\":\"Pouring Liquid\",\"keywords\":[\"cup\",\"water\"],\"skins\":[{\"unified\":\"1fad7\",\"native\":\"\uD83E\uDED7\"}],\"version\":14},\"cup_with_straw\":{\"id\":\"cup_with_straw\",\"name\":\"Cup with Straw\",\"keywords\":[\"drink\",\"soda\"],\"skins\":[{\"unified\":\"1f964\",\"native\":\"\uD83E\uDD64\"}],\"version\":5},\"bubble_tea\":{\"id\":\"bubble_tea\",\"name\":\"Bubble Tea\",\"keywords\":[\"taiwan\",\"boba\",\"milk\",\"straw\"],\"skins\":[{\"unified\":\"1f9cb\",\"native\":\"\uD83E\uDDCB\"}],\"version\":13},\"beverage_box\":{\"id\":\"beverage_box\",\"name\":\"Beverage Box\",\"keywords\":[\"drink\"],\"skins\":[{\"unified\":\"1f9c3\",\"native\":\"\uD83E\uDDC3\"}],\"version\":12},\"mate_drink\":{\"id\":\"mate_drink\",\"name\":\"Mate\",\"keywords\":[\"drink\",\"tea\",\"beverage\"],\"skins\":[{\"unified\":\"1f9c9\",\"native\":\"\uD83E\uDDC9\"}],\"version\":12},\"ice_cube\":{\"id\":\"ice_cube\",\"name\":\"Ice\",\"keywords\":[\"cube\",\"water\",\"cold\"],\"skins\":[{\"unified\":\"1f9ca\",\"native\":\"\uD83E\uDDCA\"}],\"version\":12},\"chopsticks\":{\"id\":\"chopsticks\",\"name\":\"Chopsticks\",\"keywords\":[\"food\"],\"skins\":[{\"unified\":\"1f962\",\"native\":\"\uD83E\uDD62\"}],\"version\":5},\"knife_fork_plate\":{\"id\":\"knife_fork_plate\",\"name\":\"Fork and Knife with Plate\",\"keywords\":[\"food\",\"eat\",\"meal\",\"lunch\",\"dinner\",\"restaurant\"],\"skins\":[{\"unified\":\"1f37d-fe0f\",\"native\":\"\uD83C\uDF7D\uFE0F\"}],\"version\":1},\"fork_and_knife\":{\"id\":\"fork_and_knife\",\"name\":\"Fork and Knife\",\"keywords\":[\"cutlery\",\"kitchen\"],\"skins\":[{\"unified\":\"1f374\",\"native\":\"\uD83C\uDF74\"}],\"version\":1},\"spoon\":{\"id\":\"spoon\",\"name\":\"Spoon\",\"keywords\":[\"cutlery\",\"kitchen\",\"tableware\"],\"skins\":[{\"unified\":\"1f944\",\"native\":\"\uD83E\uDD44\"}],\"version\":3},\"hocho\":{\"id\":\"hocho\",\"name\":\"Hocho\",\"keywords\":[\"knife\",\"kitchen\",\"blade\",\"cutlery\",\"weapon\"],\"skins\":[{\"unified\":\"1f52a\",\"native\":\"\uD83D\uDD2A\"}],\"version\":1},\"jar\":{\"id\":\"jar\",\"name\":\"Jar\",\"keywords\":[\"container\",\"sauce\"],\"skins\":[{\"unified\":\"1fad9\",\"native\":\"\uD83E\uDED9\"}],\"version\":14},\"amphora\":{\"id\":\"amphora\",\"name\":\"Amphora\",\"keywords\":[\"vase\",\"jar\"],\"skins\":[{\"unified\":\"1f3fa\",\"native\":\"\uD83C\uDFFA\"}],\"version\":1},\"earth_africa\":{\"id\":\"earth_africa\",\"name\":\"Earth Globe Europe-Africa\",\"keywords\":[\"africa\",\"showing\",\"europe\",\"world\",\"international\"],\"skins\":[{\"unified\":\"1f30d\",\"native\":\"\uD83C\uDF0D\"}],\"version\":1},\"earth_americas\":{\"id\":\"earth_americas\",\"name\":\"Earth Globe Americas\",\"keywords\":[\"showing\",\"world\",\"USA\",\"international\"],\"skins\":[{\"unified\":\"1f30e\",\"native\":\"\uD83C\uDF0E\"}],\"version\":1},\"earth_asia\":{\"id\":\"earth_asia\",\"name\":\"Earth Globe Asia-Australia\",\"keywords\":[\"asia\",\"showing\",\"australia\",\"world\",\"east\",\"international\"],\"skins\":[{\"unified\":\"1f30f\",\"native\":\"\uD83C\uDF0F\"}],\"version\":1},\"globe_with_meridians\":{\"id\":\"globe_with_meridians\",\"name\":\"Globe with Meridians\",\"keywords\":[\"earth\",\"international\",\"world\",\"internet\",\"interweb\",\"i18n\"],\"skins\":[{\"unified\":\"1f310\",\"native\":\"\uD83C\uDF10\"}],\"version\":1},\"world_map\":{\"id\":\"world_map\",\"name\":\"World Map\",\"keywords\":[\"location\",\"direction\"],\"skins\":[{\"unified\":\"1f5fa-fe0f\",\"native\":\"\uD83D\uDDFA\uFE0F\"}],\"version\":1},\"japan\":{\"id\":\"japan\",\"name\":\"Map of Japan\",\"keywords\":[\"nation\",\"country\",\"japanese\",\"asia\"],\"skins\":[{\"unified\":\"1f5fe\",\"native\":\"\uD83D\uDDFE\"}],\"version\":1},\"compass\":{\"id\":\"compass\",\"name\":\"Compass\",\"keywords\":[\"magnetic\",\"navigation\",\"orienteering\"],\"skins\":[{\"unified\":\"1f9ed\",\"native\":\"\uD83E\uDDED\"}],\"version\":11},\"snow_capped_mountain\":{\"id\":\"snow_capped_mountain\",\"name\":\"Snow-Capped Mountain\",\"keywords\":[\"snow\",\"capped\",\"photo\",\"nature\",\"environment\",\"winter\",\"cold\"],\"skins\":[{\"unified\":\"1f3d4-fe0f\",\"native\":\"\uD83C\uDFD4\uFE0F\"}],\"version\":1},\"mountain\":{\"id\":\"mountain\",\"name\":\"Mountain\",\"keywords\":[\"photo\",\"nature\",\"environment\"],\"skins\":[{\"unified\":\"26f0-fe0f\",\"native\":\"\u26F0\uFE0F\"}],\"version\":1},\"volcano\":{\"id\":\"volcano\",\"name\":\"Volcano\",\"keywords\":[\"photo\",\"nature\",\"disaster\"],\"skins\":[{\"unified\":\"1f30b\",\"native\":\"\uD83C\uDF0B\"}],\"version\":1},\"mount_fuji\":{\"id\":\"mount_fuji\",\"name\":\"Mount Fuji\",\"keywords\":[\"photo\",\"mountain\",\"nature\",\"japanese\"],\"skins\":[{\"unified\":\"1f5fb\",\"native\":\"\uD83D\uDDFB\"}],\"version\":1},\"camping\":{\"id\":\"camping\",\"name\":\"Camping\",\"keywords\":[\"photo\",\"outdoors\",\"tent\"],\"skins\":[{\"unified\":\"1f3d5-fe0f\",\"native\":\"\uD83C\uDFD5\uFE0F\"}],\"version\":1},\"beach_with_umbrella\":{\"id\":\"beach_with_umbrella\",\"name\":\"Beach with Umbrella\",\"keywords\":[\"weather\",\"summer\",\"sunny\",\"sand\",\"mojito\"],\"skins\":[{\"unified\":\"1f3d6-fe0f\",\"native\":\"\uD83C\uDFD6\uFE0F\"}],\"version\":1},\"desert\":{\"id\":\"desert\",\"name\":\"Desert\",\"keywords\":[\"photo\",\"warm\",\"saharah\"],\"skins\":[{\"unified\":\"1f3dc-fe0f\",\"native\":\"\uD83C\uDFDC\uFE0F\"}],\"version\":1},\"desert_island\":{\"id\":\"desert_island\",\"name\":\"Desert Island\",\"keywords\":[\"photo\",\"tropical\",\"mojito\"],\"skins\":[{\"unified\":\"1f3dd-fe0f\",\"native\":\"\uD83C\uDFDD\uFE0F\"}],\"version\":1},\"national_park\":{\"id\":\"national_park\",\"name\":\"National Park\",\"keywords\":[\"photo\",\"environment\",\"nature\"],\"skins\":[{\"unified\":\"1f3de-fe0f\",\"native\":\"\uD83C\uDFDE\uFE0F\"}],\"version\":1},\"stadium\":{\"id\":\"stadium\",\"name\":\"Stadium\",\"keywords\":[\"photo\",\"place\",\"sports\",\"concert\",\"venue\"],\"skins\":[{\"unified\":\"1f3df-fe0f\",\"native\":\"\uD83C\uDFDF\uFE0F\"}],\"version\":1},\"classical_building\":{\"id\":\"classical_building\",\"name\":\"Classical Building\",\"keywords\":[\"art\",\"culture\",\"history\"],\"skins\":[{\"unified\":\"1f3db-fe0f\",\"native\":\"\uD83C\uDFDB\uFE0F\"}],\"version\":1},\"building_construction\":{\"id\":\"building_construction\",\"name\":\"Building Construction\",\"keywords\":[\"wip\",\"working\",\"progress\"],\"skins\":[{\"unified\":\"1f3d7-fe0f\",\"native\":\"\uD83C\uDFD7\uFE0F\"}],\"version\":1},\"bricks\":{\"id\":\"bricks\",\"name\":\"Brick\",\"keywords\":[\"bricks\"],\"skins\":[{\"unified\":\"1f9f1\",\"native\":\"\uD83E\uDDF1\"}],\"version\":11},\"rock\":{\"id\":\"rock\",\"name\":\"Rock\",\"keywords\":[\"stone\"],\"skins\":[{\"unified\":\"1faa8\",\"native\":\"\uD83E\uDEA8\"}],\"version\":13},\"wood\":{\"id\":\"wood\",\"name\":\"Wood\",\"keywords\":[\"nature\",\"timber\",\"trunk\"],\"skins\":[{\"unified\":\"1fab5\",\"native\":\"\uD83E\uDEB5\"}],\"version\":13},\"hut\":{\"id\":\"hut\",\"name\":\"Hut\",\"keywords\":[\"house\",\"structure\"],\"skins\":[{\"unified\":\"1f6d6\",\"native\":\"\uD83D\uDED6\"}],\"version\":13},\"house_buildings\":{\"id\":\"house_buildings\",\"name\":\"Houses\",\"keywords\":[\"house\",\"buildings\",\"photo\"],\"skins\":[{\"unified\":\"1f3d8-fe0f\",\"native\":\"\uD83C\uDFD8\uFE0F\"}],\"version\":1},\"derelict_house_building\":{\"id\":\"derelict_house_building\",\"name\":\"Derelict House\",\"keywords\":[\"building\",\"abandon\",\"evict\",\"broken\"],\"skins\":[{\"unified\":\"1f3da-fe0f\",\"native\":\"\uD83C\uDFDA\uFE0F\"}],\"version\":1},\"house\":{\"id\":\"house\",\"name\":\"House\",\"keywords\":[\"building\",\"home\"],\"skins\":[{\"unified\":\"1f3e0\",\"native\":\"\uD83C\uDFE0\"}],\"version\":1},\"house_with_garden\":{\"id\":\"house_with_garden\",\"name\":\"House with Garden\",\"keywords\":[\"home\",\"plant\",\"nature\"],\"skins\":[{\"unified\":\"1f3e1\",\"native\":\"\uD83C\uDFE1\"}],\"version\":1},\"office\":{\"id\":\"office\",\"name\":\"Office Building\",\"keywords\":[\"bureau\",\"work\"],\"skins\":[{\"unified\":\"1f3e2\",\"native\":\"\uD83C\uDFE2\"}],\"version\":1},\"post_office\":{\"id\":\"post_office\",\"name\":\"Japanese Post Office\",\"keywords\":[\"building\",\"envelope\",\"communication\"],\"skins\":[{\"unified\":\"1f3e3\",\"native\":\"\uD83C\uDFE3\"}],\"version\":1},\"european_post_office\":{\"id\":\"european_post_office\",\"name\":\"Post Office\",\"keywords\":[\"european\",\"building\",\"email\"],\"skins\":[{\"unified\":\"1f3e4\",\"native\":\"\uD83C\uDFE4\"}],\"version\":1},\"hospital\":{\"id\":\"hospital\",\"name\":\"Hospital\",\"keywords\":[\"building\",\"health\",\"surgery\",\"doctor\"],\"skins\":[{\"unified\":\"1f3e5\",\"native\":\"\uD83C\uDFE5\"}],\"version\":1},\"bank\":{\"id\":\"bank\",\"name\":\"Bank\",\"keywords\":[\"building\",\"money\",\"sales\",\"cash\",\"business\",\"enterprise\"],\"skins\":[{\"unified\":\"1f3e6\",\"native\":\"\uD83C\uDFE6\"}],\"version\":1},\"hotel\":{\"id\":\"hotel\",\"name\":\"Hotel\",\"keywords\":[\"building\",\"accomodation\",\"checkin\"],\"skins\":[{\"unified\":\"1f3e8\",\"native\":\"\uD83C\uDFE8\"}],\"version\":1},\"love_hotel\":{\"id\":\"love_hotel\",\"name\":\"Love Hotel\",\"keywords\":[\"like\",\"affection\",\"dating\"],\"skins\":[{\"unified\":\"1f3e9\",\"native\":\"\uD83C\uDFE9\"}],\"version\":1},\"convenience_store\":{\"id\":\"convenience_store\",\"name\":\"Convenience Store\",\"keywords\":[\"building\",\"shopping\",\"groceries\"],\"skins\":[{\"unified\":\"1f3ea\",\"native\":\"\uD83C\uDFEA\"}],\"version\":1},\"school\":{\"id\":\"school\",\"name\":\"School\",\"keywords\":[\"building\",\"student\",\"education\",\"learn\",\"teach\"],\"skins\":[{\"unified\":\"1f3eb\",\"native\":\"\uD83C\uDFEB\"}],\"version\":1},\"department_store\":{\"id\":\"department_store\",\"name\":\"Department Store\",\"keywords\":[\"building\",\"shopping\",\"mall\"],\"skins\":[{\"unified\":\"1f3ec\",\"native\":\"\uD83C\uDFEC\"}],\"version\":1},\"factory\":{\"id\":\"factory\",\"name\":\"Factory\",\"keywords\":[\"building\",\"industry\",\"pollution\",\"smoke\"],\"skins\":[{\"unified\":\"1f3ed\",\"native\":\"\uD83C\uDFED\"}],\"version\":1},\"japanese_castle\":{\"id\":\"japanese_castle\",\"name\":\"Japanese Castle\",\"keywords\":[\"photo\",\"building\"],\"skins\":[{\"unified\":\"1f3ef\",\"native\":\"\uD83C\uDFEF\"}],\"version\":1},\"european_castle\":{\"id\":\"european_castle\",\"name\":\"Castle\",\"keywords\":[\"european\",\"building\",\"royalty\",\"history\"],\"skins\":[{\"unified\":\"1f3f0\",\"native\":\"\uD83C\uDFF0\"}],\"version\":1},\"wedding\":{\"id\":\"wedding\",\"name\":\"Wedding\",\"keywords\":[\"love\",\"like\",\"affection\",\"couple\",\"marriage\",\"bride\",\"groom\"],\"skins\":[{\"unified\":\"1f492\",\"native\":\"\uD83D\uDC92\"}],\"version\":1},\"tokyo_tower\":{\"id\":\"tokyo_tower\",\"name\":\"Tokyo Tower\",\"keywords\":[\"photo\",\"japanese\"],\"skins\":[{\"unified\":\"1f5fc\",\"native\":\"\uD83D\uDDFC\"}],\"version\":1},\"statue_of_liberty\":{\"id\":\"statue_of_liberty\",\"name\":\"Statue of Liberty\",\"keywords\":[\"american\",\"newyork\"],\"skins\":[{\"unified\":\"1f5fd\",\"native\":\"\uD83D\uDDFD\"}],\"version\":1},\"church\":{\"id\":\"church\",\"name\":\"Church\",\"keywords\":[\"building\",\"religion\",\"christ\"],\"skins\":[{\"unified\":\"26ea\",\"native\":\"\u26EA\"}],\"version\":1},\"mosque\":{\"id\":\"mosque\",\"name\":\"Mosque\",\"keywords\":[\"islam\",\"worship\",\"minaret\"],\"skins\":[{\"unified\":\"1f54c\",\"native\":\"\uD83D\uDD4C\"}],\"version\":1},\"hindu_temple\":{\"id\":\"hindu_temple\",\"name\":\"Hindu Temple\",\"keywords\":[\"religion\"],\"skins\":[{\"unified\":\"1f6d5\",\"native\":\"\uD83D\uDED5\"}],\"version\":12},\"synagogue\":{\"id\":\"synagogue\",\"name\":\"Synagogue\",\"keywords\":[\"judaism\",\"worship\",\"temple\",\"jewish\"],\"skins\":[{\"unified\":\"1f54d\",\"native\":\"\uD83D\uDD4D\"}],\"version\":1},\"shinto_shrine\":{\"id\":\"shinto_shrine\",\"name\":\"Shinto Shrine\",\"keywords\":[\"temple\",\"japan\",\"kyoto\"],\"skins\":[{\"unified\":\"26e9-fe0f\",\"native\":\"\u26E9\uFE0F\"}],\"version\":1},\"kaaba\":{\"id\":\"kaaba\",\"name\":\"Kaaba\",\"keywords\":[\"mecca\",\"mosque\",\"islam\"],\"skins\":[{\"unified\":\"1f54b\",\"native\":\"\uD83D\uDD4B\"}],\"version\":1},\"fountain\":{\"id\":\"fountain\",\"name\":\"Fountain\",\"keywords\":[\"photo\",\"summer\",\"water\",\"fresh\"],\"skins\":[{\"unified\":\"26f2\",\"native\":\"\u26F2\"}],\"version\":1},\"tent\":{\"id\":\"tent\",\"name\":\"Tent\",\"keywords\":[\"photo\",\"camping\",\"outdoors\"],\"skins\":[{\"unified\":\"26fa\",\"native\":\"\u26FA\"}],\"version\":1},\"foggy\":{\"id\":\"foggy\",\"name\":\"Foggy\",\"keywords\":[\"photo\",\"mountain\"],\"skins\":[{\"unified\":\"1f301\",\"native\":\"\uD83C\uDF01\"}],\"version\":1},\"night_with_stars\":{\"id\":\"night_with_stars\",\"name\":\"Night with Stars\",\"keywords\":[\"evening\",\"city\",\"downtown\"],\"skins\":[{\"unified\":\"1f303\",\"native\":\"\uD83C\uDF03\"}],\"version\":1},\"cityscape\":{\"id\":\"cityscape\",\"name\":\"Cityscape\",\"keywords\":[\"photo\",\"night\",\"life\",\"urban\"],\"skins\":[{\"unified\":\"1f3d9-fe0f\",\"native\":\"\uD83C\uDFD9\uFE0F\"}],\"version\":1},\"sunrise_over_mountains\":{\"id\":\"sunrise_over_mountains\",\"name\":\"Sunrise over Mountains\",\"keywords\":[\"view\",\"vacation\",\"photo\"],\"skins\":[{\"unified\":\"1f304\",\"native\":\"\uD83C\uDF04\"}],\"version\":1},\"sunrise\":{\"id\":\"sunrise\",\"name\":\"Sunrise\",\"keywords\":[\"morning\",\"view\",\"vacation\",\"photo\"],\"skins\":[{\"unified\":\"1f305\",\"native\":\"\uD83C\uDF05\"}],\"version\":1},\"city_sunset\":{\"id\":\"city_sunset\",\"name\":\"Cityscape at Dusk\",\"keywords\":[\"city\",\"sunset\",\"photo\",\"evening\",\"sky\",\"buildings\"],\"skins\":[{\"unified\":\"1f306\",\"native\":\"\uD83C\uDF06\"}],\"version\":1},\"city_sunrise\":{\"id\":\"city_sunrise\",\"name\":\"Sunset\",\"keywords\":[\"city\",\"sunrise\",\"photo\",\"good\",\"morning\",\"dawn\"],\"skins\":[{\"unified\":\"1f307\",\"native\":\"\uD83C\uDF07\"}],\"version\":1},\"bridge_at_night\":{\"id\":\"bridge_at_night\",\"name\":\"Bridge at Night\",\"keywords\":[\"photo\",\"sanfrancisco\"],\"skins\":[{\"unified\":\"1f309\",\"native\":\"\uD83C\uDF09\"}],\"version\":1},\"hotsprings\":{\"id\":\"hotsprings\",\"name\":\"Hot Springs\",\"keywords\":[\"hotsprings\",\"bath\",\"warm\",\"relax\"],\"skins\":[{\"unified\":\"2668-fe0f\",\"native\":\"\u2668\uFE0F\"}],\"version\":1},\"carousel_horse\":{\"id\":\"carousel_horse\",\"name\":\"Carousel Horse\",\"keywords\":[\"photo\",\"carnival\"],\"skins\":[{\"unified\":\"1f3a0\",\"native\":\"\uD83C\uDFA0\"}],\"version\":1},\"playground_slide\":{\"id\":\"playground_slide\",\"name\":\"Playground Slide\",\"keywords\":[\"fun\",\"park\"],\"skins\":[{\"unified\":\"1f6dd\",\"native\":\"\uD83D\uDEDD\"}],\"version\":14},\"ferris_wheel\":{\"id\":\"ferris_wheel\",\"name\":\"Ferris Wheel\",\"keywords\":[\"photo\",\"carnival\",\"londoneye\"],\"skins\":[{\"unified\":\"1f3a1\",\"native\":\"\uD83C\uDFA1\"}],\"version\":1},\"roller_coaster\":{\"id\":\"roller_coaster\",\"name\":\"Roller Coaster\",\"keywords\":[\"carnival\",\"playground\",\"photo\",\"fun\"],\"skins\":[{\"unified\":\"1f3a2\",\"native\":\"\uD83C\uDFA2\"}],\"version\":1},\"barber\":{\"id\":\"barber\",\"name\":\"Barber Pole\",\"keywords\":[\"hair\",\"salon\",\"style\"],\"skins\":[{\"unified\":\"1f488\",\"native\":\"\uD83D\uDC88\"}],\"version\":1},\"circus_tent\":{\"id\":\"circus_tent\",\"name\":\"Circus Tent\",\"keywords\":[\"festival\",\"carnival\",\"party\"],\"skins\":[{\"unified\":\"1f3aa\",\"native\":\"\uD83C\uDFAA\"}],\"version\":1},\"steam_locomotive\":{\"id\":\"steam_locomotive\",\"name\":\"Locomotive\",\"keywords\":[\"steam\",\"transportation\",\"vehicle\",\"train\"],\"skins\":[{\"unified\":\"1f682\",\"native\":\"\uD83D\uDE82\"}],\"version\":1},\"railway_car\":{\"id\":\"railway_car\",\"name\":\"Railway Car\",\"keywords\":[\"transportation\",\"vehicle\"],\"skins\":[{\"unified\":\"1f683\",\"native\":\"\uD83D\uDE83\"}],\"version\":1},\"bullettrain_side\":{\"id\":\"bullettrain_side\",\"name\":\"High-Speed Train\",\"keywords\":[\"bullettrain\",\"side\",\"high\",\"speed\",\"transportation\",\"vehicle\"],\"skins\":[{\"unified\":\"1f684\",\"native\":\"\uD83D\uDE84\"}],\"version\":1},\"bullettrain_front\":{\"id\":\"bullettrain_front\",\"name\":\"Bullet Train\",\"keywords\":[\"bullettrain\",\"front\",\"transportation\",\"vehicle\",\"speed\",\"fast\",\"public\",\"travel\"],\"skins\":[{\"unified\":\"1f685\",\"native\":\"\uD83D\uDE85\"}],\"version\":1},\"train2\":{\"id\":\"train2\",\"name\":\"Train\",\"keywords\":[\"train2\",\"transportation\",\"vehicle\"],\"skins\":[{\"unified\":\"1f686\",\"native\":\"\uD83D\uDE86\"}],\"version\":1},\"metro\":{\"id\":\"metro\",\"name\":\"Metro\",\"keywords\":[\"transportation\",\"blue\",\"square\",\"mrt\",\"underground\",\"tube\"],\"skins\":[{\"unified\":\"1f687\",\"native\":\"\uD83D\uDE87\"}],\"version\":1},\"light_rail\":{\"id\":\"light_rail\",\"name\":\"Light Rail\",\"keywords\":[\"transportation\",\"vehicle\"],\"skins\":[{\"unified\":\"1f688\",\"native\":\"\uD83D\uDE88\"}],\"version\":1},\"station\":{\"id\":\"station\",\"name\":\"Station\",\"keywords\":[\"transportation\",\"vehicle\",\"public\"],\"skins\":[{\"unified\":\"1f689\",\"native\":\"\uD83D\uDE89\"}],\"version\":1},\"tram\":{\"id\":\"tram\",\"name\":\"Tram\",\"keywords\":[\"transportation\",\"vehicle\"],\"skins\":[{\"unified\":\"1f68a\",\"native\":\"\uD83D\uDE8A\"}],\"version\":1},\"monorail\":{\"id\":\"monorail\",\"name\":\"Monorail\",\"keywords\":[\"transportation\",\"vehicle\"],\"skins\":[{\"unified\":\"1f69d\",\"native\":\"\uD83D\uDE9D\"}],\"version\":1},\"mountain_railway\":{\"id\":\"mountain_railway\",\"name\":\"Mountain Railway\",\"keywords\":[\"transportation\",\"vehicle\"],\"skins\":[{\"unified\":\"1f69e\",\"native\":\"\uD83D\uDE9E\"}],\"version\":1},\"train\":{\"id\":\"train\",\"name\":\"Tram Car\",\"keywords\":[\"train\",\"transportation\",\"vehicle\",\"carriage\",\"public\",\"travel\"],\"skins\":[{\"unified\":\"1f68b\",\"native\":\"\uD83D\uDE8B\"}],\"version\":1},\"bus\":{\"id\":\"bus\",\"name\":\"Bus\",\"keywords\":[\"car\",\"vehicle\",\"transportation\"],\"skins\":[{\"unified\":\"1f68c\",\"native\":\"\uD83D\uDE8C\"}],\"version\":1},\"oncoming_bus\":{\"id\":\"oncoming_bus\",\"name\":\"Oncoming Bus\",\"keywords\":[\"vehicle\",\"transportation\"],\"skins\":[{\"unified\":\"1f68d\",\"native\":\"\uD83D\uDE8D\"}],\"version\":1},\"trolleybus\":{\"id\":\"trolleybus\",\"name\":\"Trolleybus\",\"keywords\":[\"bart\",\"transportation\",\"vehicle\"],\"skins\":[{\"unified\":\"1f68e\",\"native\":\"\uD83D\uDE8E\"}],\"version\":1},\"minibus\":{\"id\":\"minibus\",\"name\":\"Minibus\",\"keywords\":[\"vehicle\",\"car\",\"transportation\"],\"skins\":[{\"unified\":\"1f690\",\"native\":\"\uD83D\uDE90\"}],\"version\":1},\"ambulance\":{\"id\":\"ambulance\",\"name\":\"Ambulance\",\"keywords\":[\"health\",\"911\",\"hospital\"],\"skins\":[{\"unified\":\"1f691\",\"native\":\"\uD83D\uDE91\"}],\"version\":1},\"fire_engine\":{\"id\":\"fire_engine\",\"name\":\"Fire Engine\",\"keywords\":[\"transportation\",\"cars\",\"vehicle\"],\"skins\":[{\"unified\":\"1f692\",\"native\":\"\uD83D\uDE92\"}],\"version\":1},\"police_car\":{\"id\":\"police_car\",\"name\":\"Police Car\",\"keywords\":[\"vehicle\",\"cars\",\"transportation\",\"law\",\"legal\",\"enforcement\"],\"skins\":[{\"unified\":\"1f693\",\"native\":\"\uD83D\uDE93\"}],\"version\":1},\"oncoming_police_car\":{\"id\":\"oncoming_police_car\",\"name\":\"Oncoming Police Car\",\"keywords\":[\"vehicle\",\"law\",\"legal\",\"enforcement\",\"911\"],\"skins\":[{\"unified\":\"1f694\",\"native\":\"\uD83D\uDE94\"}],\"version\":1},\"taxi\":{\"id\":\"taxi\",\"name\":\"Taxi\",\"keywords\":[\"uber\",\"vehicle\",\"cars\",\"transportation\"],\"skins\":[{\"unified\":\"1f695\",\"native\":\"\uD83D\uDE95\"}],\"version\":1},\"oncoming_taxi\":{\"id\":\"oncoming_taxi\",\"name\":\"Oncoming Taxi\",\"keywords\":[\"vehicle\",\"cars\",\"uber\"],\"skins\":[{\"unified\":\"1f696\",\"native\":\"\uD83D\uDE96\"}],\"version\":1},\"car\":{\"id\":\"car\",\"name\":\"Automobile\",\"keywords\":[\"car\",\"red\",\"transportation\",\"vehicle\"],\"skins\":[{\"unified\":\"1f697\",\"native\":\"\uD83D\uDE97\"}],\"version\":1},\"oncoming_automobile\":{\"id\":\"oncoming_automobile\",\"name\":\"Oncoming Automobile\",\"keywords\":[\"car\",\"vehicle\",\"transportation\"],\"skins\":[{\"unified\":\"1f698\",\"native\":\"\uD83D\uDE98\"}],\"version\":1},\"blue_car\":{\"id\":\"blue_car\",\"name\":\"Recreational Vehicle\",\"keywords\":[\"blue\",\"car\",\"sport\",\"utility\",\"transportation\"],\"skins\":[{\"unified\":\"1f699\",\"native\":\"\uD83D\uDE99\"}],\"version\":1},\"pickup_truck\":{\"id\":\"pickup_truck\",\"name\":\"Pickup Truck\",\"keywords\":[\"car\",\"transportation\"],\"skins\":[{\"unified\":\"1f6fb\",\"native\":\"\uD83D\uDEFB\"}],\"version\":13},\"truck\":{\"id\":\"truck\",\"name\":\"Delivery Truck\",\"keywords\":[\"cars\",\"transportation\"],\"skins\":[{\"unified\":\"1f69a\",\"native\":\"\uD83D\uDE9A\"}],\"version\":1},\"articulated_lorry\":{\"id\":\"articulated_lorry\",\"name\":\"Articulated Lorry\",\"keywords\":[\"vehicle\",\"cars\",\"transportation\",\"express\"],\"skins\":[{\"unified\":\"1f69b\",\"native\":\"\uD83D\uDE9B\"}],\"version\":1},\"tractor\":{\"id\":\"tractor\",\"name\":\"Tractor\",\"keywords\":[\"vehicle\",\"car\",\"farming\",\"agriculture\"],\"skins\":[{\"unified\":\"1f69c\",\"native\":\"\uD83D\uDE9C\"}],\"version\":1},\"racing_car\":{\"id\":\"racing_car\",\"name\":\"Racing Car\",\"keywords\":[\"sports\",\"race\",\"fast\",\"formula\",\"f1\"],\"skins\":[{\"unified\":\"1f3ce-fe0f\",\"native\":\"\uD83C\uDFCE\uFE0F\"}],\"version\":1},\"racing_motorcycle\":{\"id\":\"racing_motorcycle\",\"name\":\"Motorcycle\",\"keywords\":[\"racing\",\"race\",\"sports\",\"fast\"],\"skins\":[{\"unified\":\"1f3cd-fe0f\",\"native\":\"\uD83C\uDFCD\uFE0F\"}],\"version\":1},\"motor_scooter\":{\"id\":\"motor_scooter\",\"name\":\"Motor Scooter\",\"keywords\":[\"vehicle\",\"vespa\",\"sasha\"],\"skins\":[{\"unified\":\"1f6f5\",\"native\":\"\uD83D\uDEF5\"}],\"version\":3},\"manual_wheelchair\":{\"id\":\"manual_wheelchair\",\"name\":\"Manual Wheelchair\",\"keywords\":[\"accessibility\"],\"skins\":[{\"unified\":\"1f9bd\",\"native\":\"\uD83E\uDDBD\"}],\"version\":12},\"motorized_wheelchair\":{\"id\":\"motorized_wheelchair\",\"name\":\"Motorized Wheelchair\",\"keywords\":[\"accessibility\"],\"skins\":[{\"unified\":\"1f9bc\",\"native\":\"\uD83E\uDDBC\"}],\"version\":12},\"auto_rickshaw\":{\"id\":\"auto_rickshaw\",\"name\":\"Auto Rickshaw\",\"keywords\":[\"move\",\"transportation\"],\"skins\":[{\"unified\":\"1f6fa\",\"native\":\"\uD83D\uDEFA\"}],\"version\":12},\"bike\":{\"id\":\"bike\",\"name\":\"Bicycle\",\"keywords\":[\"bike\",\"sports\",\"exercise\",\"hipster\"],\"skins\":[{\"unified\":\"1f6b2\",\"native\":\"\uD83D\uDEB2\"}],\"version\":1},\"scooter\":{\"id\":\"scooter\",\"name\":\"Scooter\",\"keywords\":[\"kick\",\"vehicle\",\"razor\"],\"skins\":[{\"unified\":\"1f6f4\",\"native\":\"\uD83D\uDEF4\"}],\"version\":3},\"skateboard\":{\"id\":\"skateboard\",\"name\":\"Skateboard\",\"keywords\":[\"board\"],\"skins\":[{\"unified\":\"1f6f9\",\"native\":\"\uD83D\uDEF9\"}],\"version\":11},\"roller_skate\":{\"id\":\"roller_skate\",\"name\":\"Roller Skate\",\"keywords\":[\"footwear\",\"sports\"],\"skins\":[{\"unified\":\"1f6fc\",\"native\":\"\uD83D\uDEFC\"}],\"version\":13},\"busstop\":{\"id\":\"busstop\",\"name\":\"Bus Stop\",\"keywords\":[\"busstop\",\"transportation\",\"wait\"],\"skins\":[{\"unified\":\"1f68f\",\"native\":\"\uD83D\uDE8F\"}],\"version\":1},\"motorway\":{\"id\":\"motorway\",\"name\":\"Motorway\",\"keywords\":[\"road\",\"cupertino\",\"interstate\",\"highway\"],\"skins\":[{\"unified\":\"1f6e3-fe0f\",\"native\":\"\uD83D\uDEE3\uFE0F\"}],\"version\":1},\"railway_track\":{\"id\":\"railway_track\",\"name\":\"Railway Track\",\"keywords\":[\"train\",\"transportation\"],\"skins\":[{\"unified\":\"1f6e4-fe0f\",\"native\":\"\uD83D\uDEE4\uFE0F\"}],\"version\":1},\"oil_drum\":{\"id\":\"oil_drum\",\"name\":\"Oil Drum\",\"keywords\":[\"barrell\"],\"skins\":[{\"unified\":\"1f6e2-fe0f\",\"native\":\"\uD83D\uDEE2\uFE0F\"}],\"version\":1},\"fuelpump\":{\"id\":\"fuelpump\",\"name\":\"Fuel Pump\",\"keywords\":[\"fuelpump\",\"gas\",\"station\",\"petroleum\"],\"skins\":[{\"unified\":\"26fd\",\"native\":\"\u26FD\"}],\"version\":1},\"wheel\":{\"id\":\"wheel\",\"name\":\"Wheel\",\"keywords\":[\"car\",\"transport\"],\"skins\":[{\"unified\":\"1f6de\",\"native\":\"\uD83D\uDEDE\"}],\"version\":14},\"rotating_light\":{\"id\":\"rotating_light\",\"name\":\"Police Car Light\",\"keywords\":[\"rotating\",\"ambulance\",\"911\",\"emergency\",\"alert\",\"error\",\"pinged\",\"law\",\"legal\"],\"skins\":[{\"unified\":\"1f6a8\",\"native\":\"\uD83D\uDEA8\"}],\"version\":1},\"traffic_light\":{\"id\":\"traffic_light\",\"name\":\"Horizontal Traffic Light\",\"keywords\":[\"transportation\",\"signal\"],\"skins\":[{\"unified\":\"1f6a5\",\"native\":\"\uD83D\uDEA5\"}],\"version\":1},\"vertical_traffic_light\":{\"id\":\"vertical_traffic_light\",\"name\":\"Vertical Traffic Light\",\"keywords\":[\"transportation\",\"driving\"],\"skins\":[{\"unified\":\"1f6a6\",\"native\":\"\uD83D\uDEA6\"}],\"version\":1},\"octagonal_sign\":{\"id\":\"octagonal_sign\",\"name\":\"Stop Sign\",\"keywords\":[\"octagonal\"],\"skins\":[{\"unified\":\"1f6d1\",\"native\":\"\uD83D\uDED1\"}],\"version\":3},\"construction\":{\"id\":\"construction\",\"name\":\"Construction\",\"keywords\":[\"wip\",\"progress\",\"caution\",\"warning\"],\"skins\":[{\"unified\":\"1f6a7\",\"native\":\"\uD83D\uDEA7\"}],\"version\":1},\"anchor\":{\"id\":\"anchor\",\"name\":\"Anchor\",\"keywords\":[\"ship\",\"ferry\",\"sea\",\"boat\"],\"skins\":[{\"unified\":\"2693\",\"native\":\"\u2693\"}],\"version\":1},\"ring_buoy\":{\"id\":\"ring_buoy\",\"name\":\"Ring Buoy\",\"keywords\":[\"life\",\"saver\",\"preserver\"],\"skins\":[{\"unified\":\"1f6df\",\"native\":\"\uD83D\uDEDF\"}],\"version\":14},\"boat\":{\"id\":\"boat\",\"name\":\"Sailboat\",\"keywords\":[\"boat\",\"ship\",\"summer\",\"transportation\",\"water\",\"sailing\"],\"skins\":[{\"unified\":\"26f5\",\"native\":\"\u26F5\"}],\"version\":1},\"canoe\":{\"id\":\"canoe\",\"name\":\"Canoe\",\"keywords\":[\"boat\",\"paddle\",\"water\",\"ship\"],\"skins\":[{\"unified\":\"1f6f6\",\"native\":\"\uD83D\uDEF6\"}],\"version\":3},\"speedboat\":{\"id\":\"speedboat\",\"name\":\"Speedboat\",\"keywords\":[\"ship\",\"transportation\",\"vehicle\",\"summer\"],\"skins\":[{\"unified\":\"1f6a4\",\"native\":\"\uD83D\uDEA4\"}],\"version\":1},\"passenger_ship\":{\"id\":\"passenger_ship\",\"name\":\"Passenger Ship\",\"keywords\":[\"yacht\",\"cruise\",\"ferry\"],\"skins\":[{\"unified\":\"1f6f3-fe0f\",\"native\":\"\uD83D\uDEF3\uFE0F\"}],\"version\":1},\"ferry\":{\"id\":\"ferry\",\"name\":\"Ferry\",\"keywords\":[\"boat\",\"ship\",\"yacht\"],\"skins\":[{\"unified\":\"26f4-fe0f\",\"native\":\"\u26F4\uFE0F\"}],\"version\":1},\"motor_boat\":{\"id\":\"motor_boat\",\"name\":\"Motor Boat\",\"keywords\":[\"ship\"],\"skins\":[{\"unified\":\"1f6e5-fe0f\",\"native\":\"\uD83D\uDEE5\uFE0F\"}],\"version\":1},\"ship\":{\"id\":\"ship\",\"name\":\"Ship\",\"keywords\":[\"transportation\",\"titanic\",\"deploy\"],\"skins\":[{\"unified\":\"1f6a2\",\"native\":\"\uD83D\uDEA2\"}],\"version\":1},\"airplane\":{\"id\":\"airplane\",\"name\":\"Airplane\",\"keywords\":[\"vehicle\",\"transportation\",\"flight\",\"fly\"],\"skins\":[{\"unified\":\"2708-fe0f\",\"native\":\"\u2708\uFE0F\"}],\"version\":1},\"small_airplane\":{\"id\":\"small_airplane\",\"name\":\"Small Airplane\",\"keywords\":[\"flight\",\"transportation\",\"fly\",\"vehicle\"],\"skins\":[{\"unified\":\"1f6e9-fe0f\",\"native\":\"\uD83D\uDEE9\uFE0F\"}],\"version\":1},\"airplane_departure\":{\"id\":\"airplane_departure\",\"name\":\"Airplane Departure\",\"keywords\":[\"airport\",\"flight\",\"landing\"],\"skins\":[{\"unified\":\"1f6eb\",\"native\":\"\uD83D\uDEEB\"}],\"version\":1},\"airplane_arriving\":{\"id\":\"airplane_arriving\",\"name\":\"Airplane Arrival\",\"keywords\":[\"arriving\",\"airport\",\"flight\",\"boarding\"],\"skins\":[{\"unified\":\"1f6ec\",\"native\":\"\uD83D\uDEEC\"}],\"version\":1},\"parachute\":{\"id\":\"parachute\",\"name\":\"Parachute\",\"keywords\":[\"fly\",\"glide\"],\"skins\":[{\"unified\":\"1fa82\",\"native\":\"\uD83E\uDE82\"}],\"version\":12},\"seat\":{\"id\":\"seat\",\"name\":\"Seat\",\"keywords\":[\"sit\",\"airplane\",\"transport\",\"bus\",\"flight\",\"fly\"],\"skins\":[{\"unified\":\"1f4ba\",\"native\":\"\uD83D\uDCBA\"}],\"version\":1},\"helicopter\":{\"id\":\"helicopter\",\"name\":\"Helicopter\",\"keywords\":[\"transportation\",\"vehicle\",\"fly\"],\"skins\":[{\"unified\":\"1f681\",\"native\":\"\uD83D\uDE81\"}],\"version\":1},\"suspension_railway\":{\"id\":\"suspension_railway\",\"name\":\"Suspension Railway\",\"keywords\":[\"vehicle\",\"transportation\"],\"skins\":[{\"unified\":\"1f69f\",\"native\":\"\uD83D\uDE9F\"}],\"version\":1},\"mountain_cableway\":{\"id\":\"mountain_cableway\",\"name\":\"Mountain Cableway\",\"keywords\":[\"transportation\",\"vehicle\",\"ski\"],\"skins\":[{\"unified\":\"1f6a0\",\"native\":\"\uD83D\uDEA0\"}],\"version\":1},\"aerial_tramway\":{\"id\":\"aerial_tramway\",\"name\":\"Aerial Tramway\",\"keywords\":[\"transportation\",\"vehicle\",\"ski\"],\"skins\":[{\"unified\":\"1f6a1\",\"native\":\"\uD83D\uDEA1\"}],\"version\":1},\"satellite\":{\"id\":\"satellite\",\"name\":\"Satellite\",\"keywords\":[\"communication\",\"gps\",\"orbit\",\"spaceflight\",\"NASA\",\"ISS\"],\"skins\":[{\"unified\":\"1f6f0-fe0f\",\"native\":\"\uD83D\uDEF0\uFE0F\"}],\"version\":1},\"rocket\":{\"id\":\"rocket\",\"name\":\"Rocket\",\"keywords\":[\"launch\",\"ship\",\"staffmode\",\"NASA\",\"outer\",\"space\",\"fly\"],\"skins\":[{\"unified\":\"1f680\",\"native\":\"\uD83D\uDE80\"}],\"version\":1},\"flying_saucer\":{\"id\":\"flying_saucer\",\"name\":\"Flying Saucer\",\"keywords\":[\"transportation\",\"vehicle\",\"ufo\"],\"skins\":[{\"unified\":\"1f6f8\",\"native\":\"\uD83D\uDEF8\"}],\"version\":5},\"bellhop_bell\":{\"id\":\"bellhop_bell\",\"name\":\"Bellhop Bell\",\"keywords\":[\"service\"],\"skins\":[{\"unified\":\"1f6ce-fe0f\",\"native\":\"\uD83D\uDECE\uFE0F\"}],\"version\":1},\"luggage\":{\"id\":\"luggage\",\"name\":\"Luggage\",\"keywords\":[\"packing\",\"travel\"],\"skins\":[{\"unified\":\"1f9f3\",\"native\":\"\uD83E\uDDF3\"}],\"version\":11},\"hourglass\":{\"id\":\"hourglass\",\"name\":\"Hourglass\",\"keywords\":[\"done\",\"time\",\"clock\",\"oldschool\",\"limit\",\"exam\",\"quiz\",\"test\"],\"skins\":[{\"unified\":\"231b\",\"native\":\"\u231B\"}],\"version\":1},\"hourglass_flowing_sand\":{\"id\":\"hourglass_flowing_sand\",\"name\":\"Hourglass Not Done\",\"keywords\":[\"flowing\",\"sand\",\"oldschool\",\"time\",\"countdown\"],\"skins\":[{\"unified\":\"23f3\",\"native\":\"\u23F3\"}],\"version\":1},\"watch\":{\"id\":\"watch\",\"name\":\"Watch\",\"keywords\":[\"time\",\"accessories\"],\"skins\":[{\"unified\":\"231a\",\"native\":\"\u231A\"}],\"version\":1},\"alarm_clock\":{\"id\":\"alarm_clock\",\"name\":\"Alarm Clock\",\"keywords\":[\"time\",\"wake\"],\"skins\":[{\"unified\":\"23f0\",\"native\":\"\u23F0\"}],\"version\":1},\"stopwatch\":{\"id\":\"stopwatch\",\"name\":\"Stopwatch\",\"keywords\":[\"time\",\"deadline\"],\"skins\":[{\"unified\":\"23f1-fe0f\",\"native\":\"\u23F1\uFE0F\"}],\"version\":1},\"timer_clock\":{\"id\":\"timer_clock\",\"name\":\"Timer Clock\",\"keywords\":[\"alarm\"],\"skins\":[{\"unified\":\"23f2-fe0f\",\"native\":\"\u23F2\uFE0F\"}],\"version\":1},\"mantelpiece_clock\":{\"id\":\"mantelpiece_clock\",\"name\":\"Mantelpiece Clock\",\"keywords\":[\"time\"],\"skins\":[{\"unified\":\"1f570-fe0f\",\"native\":\"\uD83D\uDD70\uFE0F\"}],\"version\":1},\"clock12\":{\"id\":\"clock12\",\"name\":\"Twelve O\u2019clock\",\"keywords\":[\"clock12\",\"o\",\"clock\",\"time\",\"noon\",\"midnight\",\"midday\",\"late\",\"early\",\"schedule\"],\"skins\":[{\"unified\":\"1f55b\",\"native\":\"\uD83D\uDD5B\"}],\"version\":1},\"clock1230\":{\"id\":\"clock1230\",\"name\":\"Twelve-Thirty\",\"keywords\":[\"clock1230\",\"twelve\",\"thirty\",\"time\",\"late\",\"early\",\"schedule\"],\"skins\":[{\"unified\":\"1f567\",\"native\":\"\uD83D\uDD67\"}],\"version\":1},\"clock1\":{\"id\":\"clock1\",\"name\":\"One O\u2019clock\",\"keywords\":[\"clock1\",\"o\",\"clock\",\"time\",\"late\",\"early\",\"schedule\"],\"skins\":[{\"unified\":\"1f550\",\"native\":\"\uD83D\uDD50\"}],\"version\":1},\"clock130\":{\"id\":\"clock130\",\"name\":\"One-Thirty\",\"keywords\":[\"clock130\",\"one\",\"thirty\",\"time\",\"late\",\"early\",\"schedule\"],\"skins\":[{\"unified\":\"1f55c\",\"native\":\"\uD83D\uDD5C\"}],\"version\":1},\"clock2\":{\"id\":\"clock2\",\"name\":\"Two O\u2019clock\",\"keywords\":[\"clock2\",\"o\",\"clock\",\"time\",\"late\",\"early\",\"schedule\"],\"skins\":[{\"unified\":\"1f551\",\"native\":\"\uD83D\uDD51\"}],\"version\":1},\"clock230\":{\"id\":\"clock230\",\"name\":\"Two-Thirty\",\"keywords\":[\"clock230\",\"two\",\"thirty\",\"time\",\"late\",\"early\",\"schedule\"],\"skins\":[{\"unified\":\"1f55d\",\"native\":\"\uD83D\uDD5D\"}],\"version\":1},\"clock3\":{\"id\":\"clock3\",\"name\":\"Three O\u2019clock\",\"keywords\":[\"clock3\",\"o\",\"clock\",\"time\",\"late\",\"early\",\"schedule\"],\"skins\":[{\"unified\":\"1f552\",\"native\":\"\uD83D\uDD52\"}],\"version\":1},\"clock330\":{\"id\":\"clock330\",\"name\":\"Three-Thirty\",\"keywords\":[\"clock330\",\"three\",\"thirty\",\"time\",\"late\",\"early\",\"schedule\"],\"skins\":[{\"unified\":\"1f55e\",\"native\":\"\uD83D\uDD5E\"}],\"version\":1},\"clock4\":{\"id\":\"clock4\",\"name\":\"Four O\u2019clock\",\"keywords\":[\"clock4\",\"o\",\"clock\",\"time\",\"late\",\"early\",\"schedule\"],\"skins\":[{\"unified\":\"1f553\",\"native\":\"\uD83D\uDD53\"}],\"version\":1},\"clock430\":{\"id\":\"clock430\",\"name\":\"Four-Thirty\",\"keywords\":[\"clock430\",\"four\",\"thirty\",\"time\",\"late\",\"early\",\"schedule\"],\"skins\":[{\"unified\":\"1f55f\",\"native\":\"\uD83D\uDD5F\"}],\"version\":1},\"clock5\":{\"id\":\"clock5\",\"name\":\"Five O\u2019clock\",\"keywords\":[\"clock5\",\"o\",\"clock\",\"time\",\"late\",\"early\",\"schedule\"],\"skins\":[{\"unified\":\"1f554\",\"native\":\"\uD83D\uDD54\"}],\"version\":1},\"clock530\":{\"id\":\"clock530\",\"name\":\"Five-Thirty\",\"keywords\":[\"clock530\",\"five\",\"thirty\",\"time\",\"late\",\"early\",\"schedule\"],\"skins\":[{\"unified\":\"1f560\",\"native\":\"\uD83D\uDD60\"}],\"version\":1},\"clock6\":{\"id\":\"clock6\",\"name\":\"Six O\u2019clock\",\"keywords\":[\"clock6\",\"o\",\"clock\",\"time\",\"late\",\"early\",\"schedule\",\"dawn\",\"dusk\"],\"skins\":[{\"unified\":\"1f555\",\"native\":\"\uD83D\uDD55\"}],\"version\":1},\"clock630\":{\"id\":\"clock630\",\"name\":\"Six-Thirty\",\"keywords\":[\"clock630\",\"six\",\"thirty\",\"time\",\"late\",\"early\",\"schedule\"],\"skins\":[{\"unified\":\"1f561\",\"native\":\"\uD83D\uDD61\"}],\"version\":1},\"clock7\":{\"id\":\"clock7\",\"name\":\"Seven O\u2019clock\",\"keywords\":[\"clock7\",\"o\",\"clock\",\"time\",\"late\",\"early\",\"schedule\"],\"skins\":[{\"unified\":\"1f556\",\"native\":\"\uD83D\uDD56\"}],\"version\":1},\"clock730\":{\"id\":\"clock730\",\"name\":\"Seven-Thirty\",\"keywords\":[\"clock730\",\"seven\",\"thirty\",\"time\",\"late\",\"early\",\"schedule\"],\"skins\":[{\"unified\":\"1f562\",\"native\":\"\uD83D\uDD62\"}],\"version\":1},\"clock8\":{\"id\":\"clock8\",\"name\":\"Eight O\u2019clock\",\"keywords\":[\"clock8\",\"o\",\"clock\",\"time\",\"late\",\"early\",\"schedule\"],\"skins\":[{\"unified\":\"1f557\",\"native\":\"\uD83D\uDD57\"}],\"version\":1},\"clock830\":{\"id\":\"clock830\",\"name\":\"Eight-Thirty\",\"keywords\":[\"clock830\",\"eight\",\"thirty\",\"time\",\"late\",\"early\",\"schedule\"],\"skins\":[{\"unified\":\"1f563\",\"native\":\"\uD83D\uDD63\"}],\"version\":1},\"clock9\":{\"id\":\"clock9\",\"name\":\"Nine O\u2019clock\",\"keywords\":[\"clock9\",\"o\",\"clock\",\"time\",\"late\",\"early\",\"schedule\"],\"skins\":[{\"unified\":\"1f558\",\"native\":\"\uD83D\uDD58\"}],\"version\":1},\"clock930\":{\"id\":\"clock930\",\"name\":\"Nine-Thirty\",\"keywords\":[\"clock930\",\"nine\",\"thirty\",\"time\",\"late\",\"early\",\"schedule\"],\"skins\":[{\"unified\":\"1f564\",\"native\":\"\uD83D\uDD64\"}],\"version\":1},\"clock10\":{\"id\":\"clock10\",\"name\":\"Ten O\u2019clock\",\"keywords\":[\"clock10\",\"o\",\"clock\",\"time\",\"late\",\"early\",\"schedule\"],\"skins\":[{\"unified\":\"1f559\",\"native\":\"\uD83D\uDD59\"}],\"version\":1},\"clock1030\":{\"id\":\"clock1030\",\"name\":\"Ten-Thirty\",\"keywords\":[\"clock1030\",\"ten\",\"thirty\",\"time\",\"late\",\"early\",\"schedule\"],\"skins\":[{\"unified\":\"1f565\",\"native\":\"\uD83D\uDD65\"}],\"version\":1},\"clock11\":{\"id\":\"clock11\",\"name\":\"Eleven O\u2019clock\",\"keywords\":[\"clock11\",\"o\",\"clock\",\"time\",\"late\",\"early\",\"schedule\"],\"skins\":[{\"unified\":\"1f55a\",\"native\":\"\uD83D\uDD5A\"}],\"version\":1},\"clock1130\":{\"id\":\"clock1130\",\"name\":\"Eleven-Thirty\",\"keywords\":[\"clock1130\",\"eleven\",\"thirty\",\"time\",\"late\",\"early\",\"schedule\"],\"skins\":[{\"unified\":\"1f566\",\"native\":\"\uD83D\uDD66\"}],\"version\":1},\"new_moon\":{\"id\":\"new_moon\",\"name\":\"New Moon\",\"keywords\":[\"nature\",\"twilight\",\"planet\",\"space\",\"night\",\"evening\",\"sleep\"],\"skins\":[{\"unified\":\"1f311\",\"native\":\"\uD83C\uDF11\"}],\"version\":1},\"waxing_crescent_moon\":{\"id\":\"waxing_crescent_moon\",\"name\":\"Waxing Crescent Moon\",\"keywords\":[\"nature\",\"twilight\",\"planet\",\"space\",\"night\",\"evening\",\"sleep\"],\"skins\":[{\"unified\":\"1f312\",\"native\":\"\uD83C\uDF12\"}],\"version\":1},\"first_quarter_moon\":{\"id\":\"first_quarter_moon\",\"name\":\"First Quarter Moon\",\"keywords\":[\"nature\",\"twilight\",\"planet\",\"space\",\"night\",\"evening\",\"sleep\"],\"skins\":[{\"unified\":\"1f313\",\"native\":\"\uD83C\uDF13\"}],\"version\":1},\"moon\":{\"id\":\"moon\",\"name\":\"Waxing Gibbous Moon\",\"keywords\":[\"nature\",\"night\",\"sky\",\"gray\",\"twilight\",\"planet\",\"space\",\"evening\",\"sleep\"],\"skins\":[{\"unified\":\"1f314\",\"native\":\"\uD83C\uDF14\"}],\"version\":1},\"full_moon\":{\"id\":\"full_moon\",\"name\":\"Full Moon\",\"keywords\":[\"nature\",\"yellow\",\"twilight\",\"planet\",\"space\",\"night\",\"evening\",\"sleep\"],\"skins\":[{\"unified\":\"1f315\",\"native\":\"\uD83C\uDF15\"}],\"version\":1},\"waning_gibbous_moon\":{\"id\":\"waning_gibbous_moon\",\"name\":\"Waning Gibbous Moon\",\"keywords\":[\"nature\",\"twilight\",\"planet\",\"space\",\"night\",\"evening\",\"sleep\",\"waxing\"],\"skins\":[{\"unified\":\"1f316\",\"native\":\"\uD83C\uDF16\"}],\"version\":1},\"last_quarter_moon\":{\"id\":\"last_quarter_moon\",\"name\":\"Last Quarter Moon\",\"keywords\":[\"nature\",\"twilight\",\"planet\",\"space\",\"night\",\"evening\",\"sleep\"],\"skins\":[{\"unified\":\"1f317\",\"native\":\"\uD83C\uDF17\"}],\"version\":1},\"waning_crescent_moon\":{\"id\":\"waning_crescent_moon\",\"name\":\"Waning Crescent Moon\",\"keywords\":[\"nature\",\"twilight\",\"planet\",\"space\",\"night\",\"evening\",\"sleep\"],\"skins\":[{\"unified\":\"1f318\",\"native\":\"\uD83C\uDF18\"}],\"version\":1},\"crescent_moon\":{\"id\":\"crescent_moon\",\"name\":\"Crescent Moon\",\"keywords\":[\"night\",\"sleep\",\"sky\",\"evening\",\"magic\"],\"skins\":[{\"unified\":\"1f319\",\"native\":\"\uD83C\uDF19\"}],\"version\":1},\"new_moon_with_face\":{\"id\":\"new_moon_with_face\",\"name\":\"New Moon Face\",\"keywords\":[\"with\",\"nature\",\"twilight\",\"planet\",\"space\",\"night\",\"evening\",\"sleep\"],\"skins\":[{\"unified\":\"1f31a\",\"native\":\"\uD83C\uDF1A\"}],\"version\":1},\"first_quarter_moon_with_face\":{\"id\":\"first_quarter_moon_with_face\",\"name\":\"First Quarter Moon Face\",\"keywords\":[\"with\",\"nature\",\"twilight\",\"planet\",\"space\",\"night\",\"evening\",\"sleep\"],\"skins\":[{\"unified\":\"1f31b\",\"native\":\"\uD83C\uDF1B\"}],\"version\":1},\"last_quarter_moon_with_face\":{\"id\":\"last_quarter_moon_with_face\",\"name\":\"Last Quarter Moon Face\",\"keywords\":[\"with\",\"nature\",\"twilight\",\"planet\",\"space\",\"night\",\"evening\",\"sleep\"],\"skins\":[{\"unified\":\"1f31c\",\"native\":\"\uD83C\uDF1C\"}],\"version\":1},\"thermometer\":{\"id\":\"thermometer\",\"name\":\"Thermometer\",\"keywords\":[\"weather\",\"temperature\",\"hot\",\"cold\"],\"skins\":[{\"unified\":\"1f321-fe0f\",\"native\":\"\uD83C\uDF21\uFE0F\"}],\"version\":1},\"sunny\":{\"id\":\"sunny\",\"name\":\"Sun\",\"keywords\":[\"sunny\",\"weather\",\"nature\",\"brightness\",\"summer\",\"beach\",\"spring\"],\"skins\":[{\"unified\":\"2600-fe0f\",\"native\":\"\u2600\uFE0F\"}],\"version\":1},\"full_moon_with_face\":{\"id\":\"full_moon_with_face\",\"name\":\"Full Moon Face\",\"keywords\":[\"with\",\"nature\",\"twilight\",\"planet\",\"space\",\"night\",\"evening\",\"sleep\"],\"skins\":[{\"unified\":\"1f31d\",\"native\":\"\uD83C\uDF1D\"}],\"version\":1},\"sun_with_face\":{\"id\":\"sun_with_face\",\"name\":\"Sun with Face\",\"keywords\":[\"nature\",\"morning\",\"sky\"],\"skins\":[{\"unified\":\"1f31e\",\"native\":\"\uD83C\uDF1E\"}],\"version\":1},\"ringed_planet\":{\"id\":\"ringed_planet\",\"name\":\"Ringed Planet\",\"keywords\":[\"outerspace\"],\"skins\":[{\"unified\":\"1fa90\",\"native\":\"\uD83E\uDE90\"}],\"version\":12},\"star\":{\"id\":\"star\",\"name\":\"Star\",\"keywords\":[\"night\",\"yellow\"],\"skins\":[{\"unified\":\"2b50\",\"native\":\"\u2B50\"}],\"version\":1},\"star2\":{\"id\":\"star2\",\"name\":\"Glowing Star\",\"keywords\":[\"star2\",\"night\",\"sparkle\",\"awesome\",\"good\",\"magic\"],\"skins\":[{\"unified\":\"1f31f\",\"native\":\"\uD83C\uDF1F\"}],\"version\":1},\"stars\":{\"id\":\"stars\",\"name\":\"Shooting Star\",\"keywords\":[\"stars\",\"night\",\"photo\"],\"skins\":[{\"unified\":\"1f320\",\"native\":\"\uD83C\uDF20\"}],\"version\":1},\"milky_way\":{\"id\":\"milky_way\",\"name\":\"Milky Way\",\"keywords\":[\"photo\",\"space\",\"stars\"],\"skins\":[{\"unified\":\"1f30c\",\"native\":\"\uD83C\uDF0C\"}],\"version\":1},\"cloud\":{\"id\":\"cloud\",\"name\":\"Cloud\",\"keywords\":[\"weather\",\"sky\"],\"skins\":[{\"unified\":\"2601-fe0f\",\"native\":\"\u2601\uFE0F\"}],\"version\":1},\"partly_sunny\":{\"id\":\"partly_sunny\",\"name\":\"Sun Behind Cloud\",\"keywords\":[\"partly\",\"sunny\",\"weather\",\"nature\",\"cloudy\",\"morning\",\"fall\",\"spring\"],\"skins\":[{\"unified\":\"26c5\",\"native\":\"\u26C5\"}],\"version\":1},\"thunder_cloud_and_rain\":{\"id\":\"thunder_cloud_and_rain\",\"name\":\"Cloud with Lightning and Rain\",\"keywords\":[\"thunder\",\"weather\"],\"skins\":[{\"unified\":\"26c8-fe0f\",\"native\":\"\u26C8\uFE0F\"}],\"version\":1},\"mostly_sunny\":{\"id\":\"mostly_sunny\",\"name\":\"Sun Behind Small Cloud\",\"keywords\":[\"mostly\",\"sunny\",\"weather\"],\"skins\":[{\"unified\":\"1f324-fe0f\",\"native\":\"\uD83C\uDF24\uFE0F\"}],\"version\":1},\"barely_sunny\":{\"id\":\"barely_sunny\",\"name\":\"Sun Behind Large Cloud\",\"keywords\":[\"barely\",\"sunny\",\"weather\"],\"skins\":[{\"unified\":\"1f325-fe0f\",\"native\":\"\uD83C\uDF25\uFE0F\"}],\"version\":1},\"partly_sunny_rain\":{\"id\":\"partly_sunny_rain\",\"name\":\"Sun Behind Rain Cloud\",\"keywords\":[\"partly\",\"sunny\",\"weather\"],\"skins\":[{\"unified\":\"1f326-fe0f\",\"native\":\"\uD83C\uDF26\uFE0F\"}],\"version\":1},\"rain_cloud\":{\"id\":\"rain_cloud\",\"name\":\"Cloud with Rain\",\"keywords\":[\"weather\"],\"skins\":[{\"unified\":\"1f327-fe0f\",\"native\":\"\uD83C\uDF27\uFE0F\"}],\"version\":1},\"snow_cloud\":{\"id\":\"snow_cloud\",\"name\":\"Cloud with Snow\",\"keywords\":[\"weather\"],\"skins\":[{\"unified\":\"1f328-fe0f\",\"native\":\"\uD83C\uDF28\uFE0F\"}],\"version\":1},\"lightning\":{\"id\":\"lightning\",\"name\":\"Cloud with Lightning\",\"keywords\":[\"weather\",\"thunder\"],\"skins\":[{\"unified\":\"1f329-fe0f\",\"native\":\"\uD83C\uDF29\uFE0F\"}],\"version\":1},\"tornado\":{\"id\":\"tornado\",\"name\":\"Tornado\",\"keywords\":[\"cloud\",\"weather\",\"cyclone\",\"twister\"],\"skins\":[{\"unified\":\"1f32a-fe0f\",\"native\":\"\uD83C\uDF2A\uFE0F\"}],\"version\":1},\"fog\":{\"id\":\"fog\",\"name\":\"Fog\",\"keywords\":[\"weather\"],\"skins\":[{\"unified\":\"1f32b-fe0f\",\"native\":\"\uD83C\uDF2B\uFE0F\"}],\"version\":1},\"wind_blowing_face\":{\"id\":\"wind_blowing_face\",\"name\":\"Wind Face\",\"keywords\":[\"blowing\",\"gust\",\"air\"],\"skins\":[{\"unified\":\"1f32c-fe0f\",\"native\":\"\uD83C\uDF2C\uFE0F\"}],\"version\":1},\"cyclone\":{\"id\":\"cyclone\",\"name\":\"Cyclone\",\"keywords\":[\"weather\",\"swirl\",\"blue\",\"cloud\",\"vortex\",\"spiral\",\"whirlpool\",\"spin\",\"tornado\",\"hurricane\",\"typhoon\"],\"skins\":[{\"unified\":\"1f300\",\"native\":\"\uD83C\uDF00\"}],\"version\":1},\"rainbow\":{\"id\":\"rainbow\",\"name\":\"Rainbow\",\"keywords\":[\"nature\",\"happy\",\"unicorn\",\"face\",\"photo\",\"sky\",\"spring\"],\"skins\":[{\"unified\":\"1f308\",\"native\":\"\uD83C\uDF08\"}],\"version\":1},\"closed_umbrella\":{\"id\":\"closed_umbrella\",\"name\":\"Closed Umbrella\",\"keywords\":[\"weather\",\"rain\",\"drizzle\"],\"skins\":[{\"unified\":\"1f302\",\"native\":\"\uD83C\uDF02\"}],\"version\":1},\"umbrella\":{\"id\":\"umbrella\",\"name\":\"Umbrella\",\"keywords\":[\"weather\",\"spring\"],\"skins\":[{\"unified\":\"2602-fe0f\",\"native\":\"\u2602\uFE0F\"}],\"version\":1},\"umbrella_with_rain_drops\":{\"id\":\"umbrella_with_rain_drops\",\"name\":\"Umbrella with Rain Drops\",\"keywords\":[\"rainy\",\"weather\",\"spring\"],\"skins\":[{\"unified\":\"2614\",\"native\":\"\u2614\"}],\"version\":1},\"umbrella_on_ground\":{\"id\":\"umbrella_on_ground\",\"name\":\"Umbrella on Ground\",\"keywords\":[\"weather\",\"summer\"],\"skins\":[{\"unified\":\"26f1-fe0f\",\"native\":\"\u26F1\uFE0F\"}],\"version\":1},\"zap\":{\"id\":\"zap\",\"name\":\"High Voltage\",\"keywords\":[\"zap\",\"thunder\",\"weather\",\"lightning\",\"bolt\",\"fast\"],\"skins\":[{\"unified\":\"26a1\",\"native\":\"\u26A1\"}],\"version\":1},\"snowflake\":{\"id\":\"snowflake\",\"name\":\"Snowflake\",\"keywords\":[\"winter\",\"season\",\"cold\",\"weather\",\"christmas\",\"xmas\"],\"skins\":[{\"unified\":\"2744-fe0f\",\"native\":\"\u2744\uFE0F\"}],\"version\":1},\"snowman\":{\"id\":\"snowman\",\"name\":\"Snowman\",\"keywords\":[\"winter\",\"season\",\"cold\",\"weather\",\"christmas\",\"xmas\",\"frozen\"],\"skins\":[{\"unified\":\"2603-fe0f\",\"native\":\"\u2603\uFE0F\"}],\"version\":1},\"snowman_without_snow\":{\"id\":\"snowman_without_snow\",\"name\":\"Snowman Without Snow\",\"keywords\":[\"winter\",\"season\",\"cold\",\"weather\",\"christmas\",\"xmas\",\"frozen\"],\"skins\":[{\"unified\":\"26c4\",\"native\":\"\u26C4\"}],\"version\":1},\"comet\":{\"id\":\"comet\",\"name\":\"Comet\",\"keywords\":[\"space\"],\"skins\":[{\"unified\":\"2604-fe0f\",\"native\":\"\u2604\uFE0F\"}],\"version\":1},\"fire\":{\"id\":\"fire\",\"name\":\"Fire\",\"keywords\":[\"hot\",\"cook\",\"flame\"],\"skins\":[{\"unified\":\"1f525\",\"native\":\"\uD83D\uDD25\"}],\"version\":1},\"droplet\":{\"id\":\"droplet\",\"name\":\"Droplet\",\"keywords\":[\"water\",\"drip\",\"faucet\",\"spring\"],\"skins\":[{\"unified\":\"1f4a7\",\"native\":\"\uD83D\uDCA7\"}],\"version\":1},\"ocean\":{\"id\":\"ocean\",\"name\":\"Water Wave\",\"keywords\":[\"ocean\",\"sea\",\"nature\",\"tsunami\",\"disaster\"],\"skins\":[{\"unified\":\"1f30a\",\"native\":\"\uD83C\uDF0A\"}],\"version\":1},\"jack_o_lantern\":{\"id\":\"jack_o_lantern\",\"name\":\"Jack-O-Lantern\",\"keywords\":[\"jack\",\"o\",\"lantern\",\"halloween\",\"light\",\"pumpkin\",\"creepy\",\"fall\"],\"skins\":[{\"unified\":\"1f383\",\"native\":\"\uD83C\uDF83\"}],\"version\":1},\"christmas_tree\":{\"id\":\"christmas_tree\",\"name\":\"Christmas Tree\",\"keywords\":[\"festival\",\"vacation\",\"december\",\"xmas\",\"celebration\"],\"skins\":[{\"unified\":\"1f384\",\"native\":\"\uD83C\uDF84\"}],\"version\":1},\"fireworks\":{\"id\":\"fireworks\",\"name\":\"Fireworks\",\"keywords\":[\"photo\",\"festival\",\"carnival\",\"congratulations\"],\"skins\":[{\"unified\":\"1f386\",\"native\":\"\uD83C\uDF86\"}],\"version\":1},\"sparkler\":{\"id\":\"sparkler\",\"name\":\"Sparkler\",\"keywords\":[\"stars\",\"night\",\"shine\"],\"skins\":[{\"unified\":\"1f387\",\"native\":\"\uD83C\uDF87\"}],\"version\":1},\"firecracker\":{\"id\":\"firecracker\",\"name\":\"Firecracker\",\"keywords\":[\"dynamite\",\"boom\",\"explode\",\"explosion\",\"explosive\"],\"skins\":[{\"unified\":\"1f9e8\",\"native\":\"\uD83E\uDDE8\"}],\"version\":11},\"sparkles\":{\"id\":\"sparkles\",\"name\":\"Sparkles\",\"keywords\":[\"stars\",\"shine\",\"shiny\",\"cool\",\"awesome\",\"good\",\"magic\"],\"skins\":[{\"unified\":\"2728\",\"native\":\"\u2728\"}],\"version\":1},\"balloon\":{\"id\":\"balloon\",\"name\":\"Balloon\",\"keywords\":[\"party\",\"celebration\",\"birthday\",\"circus\"],\"skins\":[{\"unified\":\"1f388\",\"native\":\"\uD83C\uDF88\"}],\"version\":1},\"tada\":{\"id\":\"tada\",\"name\":\"Party Popper\",\"keywords\":[\"tada\",\"congratulations\",\"birthday\",\"magic\",\"circus\",\"celebration\"],\"skins\":[{\"unified\":\"1f389\",\"native\":\"\uD83C\uDF89\"}],\"version\":1},\"confetti_ball\":{\"id\":\"confetti_ball\",\"name\":\"Confetti Ball\",\"keywords\":[\"festival\",\"party\",\"birthday\",\"circus\"],\"skins\":[{\"unified\":\"1f38a\",\"native\":\"\uD83C\uDF8A\"}],\"version\":1},\"tanabata_tree\":{\"id\":\"tanabata_tree\",\"name\":\"Tanabata Tree\",\"keywords\":[\"plant\",\"nature\",\"branch\",\"summer\"],\"skins\":[{\"unified\":\"1f38b\",\"native\":\"\uD83C\uDF8B\"}],\"version\":1},\"bamboo\":{\"id\":\"bamboo\",\"name\":\"Pine Decoration\",\"keywords\":[\"bamboo\",\"plant\",\"nature\",\"vegetable\",\"panda\"],\"skins\":[{\"unified\":\"1f38d\",\"native\":\"\uD83C\uDF8D\"}],\"version\":1},\"dolls\":{\"id\":\"dolls\",\"name\":\"Japanese Dolls\",\"keywords\":[\"toy\",\"kimono\"],\"skins\":[{\"unified\":\"1f38e\",\"native\":\"\uD83C\uDF8E\"}],\"version\":1},\"flags\":{\"id\":\"flags\",\"name\":\"Carp Streamer\",\"keywords\":[\"flags\",\"fish\",\"japanese\",\"koinobori\",\"banner\"],\"skins\":[{\"unified\":\"1f38f\",\"native\":\"\uD83C\uDF8F\"}],\"version\":1},\"wind_chime\":{\"id\":\"wind_chime\",\"name\":\"Wind Chime\",\"keywords\":[\"nature\",\"ding\",\"spring\",\"bell\"],\"skins\":[{\"unified\":\"1f390\",\"native\":\"\uD83C\uDF90\"}],\"version\":1},\"rice_scene\":{\"id\":\"rice_scene\",\"name\":\"Moon Viewing Ceremony\",\"keywords\":[\"rice\",\"scene\",\"photo\",\"japan\",\"asia\",\"tsukimi\"],\"skins\":[{\"unified\":\"1f391\",\"native\":\"\uD83C\uDF91\"}],\"version\":1},\"red_envelope\":{\"id\":\"red_envelope\",\"name\":\"Red Envelope\",\"keywords\":[\"gift\"],\"skins\":[{\"unified\":\"1f9e7\",\"native\":\"\uD83E\uDDE7\"}],\"version\":11},\"ribbon\":{\"id\":\"ribbon\",\"name\":\"Ribbon\",\"keywords\":[\"decoration\",\"pink\",\"girl\",\"bowtie\"],\"skins\":[{\"unified\":\"1f380\",\"native\":\"\uD83C\uDF80\"}],\"version\":1},\"gift\":{\"id\":\"gift\",\"name\":\"Wrapped Gift\",\"keywords\":[\"present\",\"birthday\",\"christmas\",\"xmas\"],\"skins\":[{\"unified\":\"1f381\",\"native\":\"\uD83C\uDF81\"}],\"version\":1},\"reminder_ribbon\":{\"id\":\"reminder_ribbon\",\"name\":\"Reminder Ribbon\",\"keywords\":[\"sports\",\"cause\",\"support\",\"awareness\"],\"skins\":[{\"unified\":\"1f397-fe0f\",\"native\":\"\uD83C\uDF97\uFE0F\"}],\"version\":1},\"admission_tickets\":{\"id\":\"admission_tickets\",\"name\":\"Admission Tickets\",\"keywords\":[\"sports\",\"concert\",\"entrance\"],\"skins\":[{\"unified\":\"1f39f-fe0f\",\"native\":\"\uD83C\uDF9F\uFE0F\"}],\"version\":1},\"ticket\":{\"id\":\"ticket\",\"name\":\"Ticket\",\"keywords\":[\"event\",\"concert\",\"pass\"],\"skins\":[{\"unified\":\"1f3ab\",\"native\":\"\uD83C\uDFAB\"}],\"version\":1},\"medal\":{\"id\":\"medal\",\"name\":\"Military Medal\",\"keywords\":[\"award\",\"winning\",\"army\"],\"skins\":[{\"unified\":\"1f396-fe0f\",\"native\":\"\uD83C\uDF96\uFE0F\"}],\"version\":1},\"trophy\":{\"id\":\"trophy\",\"name\":\"Trophy\",\"keywords\":[\"win\",\"award\",\"contest\",\"place\",\"ftw\",\"ceremony\"],\"skins\":[{\"unified\":\"1f3c6\",\"native\":\"\uD83C\uDFC6\"}],\"version\":1},\"sports_medal\":{\"id\":\"sports_medal\",\"name\":\"Sports Medal\",\"keywords\":[\"award\",\"winning\"],\"skins\":[{\"unified\":\"1f3c5\",\"native\":\"\uD83C\uDFC5\"}],\"version\":1},\"first_place_medal\":{\"id\":\"first_place_medal\",\"name\":\"1st Place Medal\",\"keywords\":[\"first\",\"award\",\"winning\"],\"skins\":[{\"unified\":\"1f947\",\"native\":\"\uD83E\uDD47\"}],\"version\":3},\"second_place_medal\":{\"id\":\"second_place_medal\",\"name\":\"2nd Place Medal\",\"keywords\":[\"second\",\"award\"],\"skins\":[{\"unified\":\"1f948\",\"native\":\"\uD83E\uDD48\"}],\"version\":3},\"third_place_medal\":{\"id\":\"third_place_medal\",\"name\":\"3rd Place Medal\",\"keywords\":[\"third\",\"award\"],\"skins\":[{\"unified\":\"1f949\",\"native\":\"\uD83E\uDD49\"}],\"version\":3},\"soccer\":{\"id\":\"soccer\",\"name\":\"Soccer Ball\",\"keywords\":[\"sports\",\"football\"],\"skins\":[{\"unified\":\"26bd\",\"native\":\"\u26BD\"}],\"version\":1},\"baseball\":{\"id\":\"baseball\",\"name\":\"Baseball\",\"keywords\":[\"sports\",\"balls\"],\"skins\":[{\"unified\":\"26be\",\"native\":\"\u26BE\"}],\"version\":1},\"softball\":{\"id\":\"softball\",\"name\":\"Softball\",\"keywords\":[\"sports\",\"balls\"],\"skins\":[{\"unified\":\"1f94e\",\"native\":\"\uD83E\uDD4E\"}],\"version\":11},\"basketball\":{\"id\":\"basketball\",\"name\":\"Basketball\",\"keywords\":[\"sports\",\"balls\",\"NBA\"],\"skins\":[{\"unified\":\"1f3c0\",\"native\":\"\uD83C\uDFC0\"}],\"version\":1},\"volleyball\":{\"id\":\"volleyball\",\"name\":\"Volleyball\",\"keywords\":[\"sports\",\"balls\"],\"skins\":[{\"unified\":\"1f3d0\",\"native\":\"\uD83C\uDFD0\"}],\"version\":1},\"football\":{\"id\":\"football\",\"name\":\"American Football\",\"keywords\":[\"sports\",\"balls\",\"NFL\"],\"skins\":[{\"unified\":\"1f3c8\",\"native\":\"\uD83C\uDFC8\"}],\"version\":1},\"rugby_football\":{\"id\":\"rugby_football\",\"name\":\"Rugby Football\",\"keywords\":[\"sports\",\"team\"],\"skins\":[{\"unified\":\"1f3c9\",\"native\":\"\uD83C\uDFC9\"}],\"version\":1},\"tennis\":{\"id\":\"tennis\",\"name\":\"Tennis\",\"keywords\":[\"sports\",\"balls\",\"green\"],\"skins\":[{\"unified\":\"1f3be\",\"native\":\"\uD83C\uDFBE\"}],\"version\":1},\"flying_disc\":{\"id\":\"flying_disc\",\"name\":\"Flying Disc\",\"keywords\":[\"sports\",\"frisbee\",\"ultimate\"],\"skins\":[{\"unified\":\"1f94f\",\"native\":\"\uD83E\uDD4F\"}],\"version\":11},\"bowling\":{\"id\":\"bowling\",\"name\":\"Bowling\",\"keywords\":[\"sports\",\"fun\",\"play\"],\"skins\":[{\"unified\":\"1f3b3\",\"native\":\"\uD83C\uDFB3\"}],\"version\":1},\"cricket_bat_and_ball\":{\"id\":\"cricket_bat_and_ball\",\"name\":\"Cricket Game\",\"keywords\":[\"bat\",\"and\",\"ball\",\"sports\"],\"skins\":[{\"unified\":\"1f3cf\",\"native\":\"\uD83C\uDFCF\"}],\"version\":1},\"field_hockey_stick_and_ball\":{\"id\":\"field_hockey_stick_and_ball\",\"name\":\"Field Hockey\",\"keywords\":[\"stick\",\"and\",\"ball\",\"sports\"],\"skins\":[{\"unified\":\"1f3d1\",\"native\":\"\uD83C\uDFD1\"}],\"version\":1},\"ice_hockey_stick_and_puck\":{\"id\":\"ice_hockey_stick_and_puck\",\"name\":\"Ice Hockey\",\"keywords\":[\"stick\",\"and\",\"puck\",\"sports\"],\"skins\":[{\"unified\":\"1f3d2\",\"native\":\"\uD83C\uDFD2\"}],\"version\":1},\"lacrosse\":{\"id\":\"lacrosse\",\"name\":\"Lacrosse\",\"keywords\":[\"sports\",\"ball\",\"stick\"],\"skins\":[{\"unified\":\"1f94d\",\"native\":\"\uD83E\uDD4D\"}],\"version\":11},\"table_tennis_paddle_and_ball\":{\"id\":\"table_tennis_paddle_and_ball\",\"name\":\"Ping Pong\",\"keywords\":[\"table\",\"tennis\",\"paddle\",\"and\",\"ball\",\"sports\",\"pingpong\"],\"skins\":[{\"unified\":\"1f3d3\",\"native\":\"\uD83C\uDFD3\"}],\"version\":1},\"badminton_racquet_and_shuttlecock\":{\"id\":\"badminton_racquet_and_shuttlecock\",\"name\":\"Badminton\",\"keywords\":[\"racquet\",\"and\",\"shuttlecock\",\"sports\"],\"skins\":[{\"unified\":\"1f3f8\",\"native\":\"\uD83C\uDFF8\"}],\"version\":1},\"boxing_glove\":{\"id\":\"boxing_glove\",\"name\":\"Boxing Glove\",\"keywords\":[\"sports\",\"fighting\"],\"skins\":[{\"unified\":\"1f94a\",\"native\":\"\uD83E\uDD4A\"}],\"version\":3},\"martial_arts_uniform\":{\"id\":\"martial_arts_uniform\",\"name\":\"Martial Arts Uniform\",\"keywords\":[\"judo\",\"karate\",\"taekwondo\"],\"skins\":[{\"unified\":\"1f94b\",\"native\":\"\uD83E\uDD4B\"}],\"version\":3},\"goal_net\":{\"id\":\"goal_net\",\"name\":\"Goal Net\",\"keywords\":[\"sports\"],\"skins\":[{\"unified\":\"1f945\",\"native\":\"\uD83E\uDD45\"}],\"version\":3},\"golf\":{\"id\":\"golf\",\"name\":\"Flag in Hole\",\"keywords\":[\"golf\",\"sports\",\"business\",\"summer\"],\"skins\":[{\"unified\":\"26f3\",\"native\":\"\u26F3\"}],\"version\":1},\"ice_skate\":{\"id\":\"ice_skate\",\"name\":\"Ice Skate\",\"keywords\":[\"sports\"],\"skins\":[{\"unified\":\"26f8-fe0f\",\"native\":\"\u26F8\uFE0F\"}],\"version\":1},\"fishing_pole_and_fish\":{\"id\":\"fishing_pole_and_fish\",\"name\":\"Fishing Pole\",\"keywords\":[\"and\",\"fish\",\"food\",\"hobby\",\"summer\"],\"skins\":[{\"unified\":\"1f3a3\",\"native\":\"\uD83C\uDFA3\"}],\"version\":1},\"diving_mask\":{\"id\":\"diving_mask\",\"name\":\"Diving Mask\",\"keywords\":[\"sport\",\"ocean\"],\"skins\":[{\"unified\":\"1f93f\",\"native\":\"\uD83E\uDD3F\"}],\"version\":12},\"running_shirt_with_sash\":{\"id\":\"running_shirt_with_sash\",\"name\":\"Running Shirt\",\"keywords\":[\"with\",\"sash\",\"play\",\"pageant\"],\"skins\":[{\"unified\":\"1f3bd\",\"native\":\"\uD83C\uDFBD\"}],\"version\":1},\"ski\":{\"id\":\"ski\",\"name\":\"Skis\",\"keywords\":[\"ski\",\"sports\",\"winter\",\"cold\",\"snow\"],\"skins\":[{\"unified\":\"1f3bf\",\"native\":\"\uD83C\uDFBF\"}],\"version\":1},\"sled\":{\"id\":\"sled\",\"name\":\"Sled\",\"keywords\":[\"sleigh\",\"luge\",\"toboggan\"],\"skins\":[{\"unified\":\"1f6f7\",\"native\":\"\uD83D\uDEF7\"}],\"version\":5},\"curling_stone\":{\"id\":\"curling_stone\",\"name\":\"Curling Stone\",\"keywords\":[\"sports\"],\"skins\":[{\"unified\":\"1f94c\",\"native\":\"\uD83E\uDD4C\"}],\"version\":5},\"dart\":{\"id\":\"dart\",\"name\":\"Bullseye\",\"keywords\":[\"dart\",\"direct\",\"hit\",\"game\",\"play\",\"bar\",\"target\"],\"skins\":[{\"unified\":\"1f3af\",\"native\":\"\uD83C\uDFAF\"}],\"version\":1},\"yo-yo\":{\"id\":\"yo-yo\",\"name\":\"Yo-Yo\",\"keywords\":[\"yo\",\"toy\"],\"skins\":[{\"unified\":\"1fa80\",\"native\":\"\uD83E\uDE80\"}],\"version\":12},\"kite\":{\"id\":\"kite\",\"name\":\"Kite\",\"keywords\":[\"wind\",\"fly\"],\"skins\":[{\"unified\":\"1fa81\",\"native\":\"\uD83E\uDE81\"}],\"version\":12},\"8ball\":{\"id\":\"8ball\",\"name\":\"Billiards\",\"keywords\":[\"8ball\",\"pool\",\"8\",\"ball\",\"hobby\",\"game\",\"luck\",\"magic\"],\"skins\":[{\"unified\":\"1f3b1\",\"native\":\"\uD83C\uDFB1\"}],\"version\":1},\"crystal_ball\":{\"id\":\"crystal_ball\",\"name\":\"Crystal Ball\",\"keywords\":[\"disco\",\"party\",\"magic\",\"circus\",\"fortune\",\"teller\"],\"skins\":[{\"unified\":\"1f52e\",\"native\":\"\uD83D\uDD2E\"}],\"version\":1},\"magic_wand\":{\"id\":\"magic_wand\",\"name\":\"Magic Wand\",\"keywords\":[\"supernature\",\"power\"],\"skins\":[{\"unified\":\"1fa84\",\"native\":\"\uD83E\uDE84\"}],\"version\":13},\"nazar_amulet\":{\"id\":\"nazar_amulet\",\"name\":\"Nazar Amulet\",\"keywords\":[\"bead\",\"charm\"],\"skins\":[{\"unified\":\"1f9ff\",\"native\":\"\uD83E\uDDFF\"}],\"version\":11},\"hamsa\":{\"id\":\"hamsa\",\"name\":\"Hamsa\",\"keywords\":[\"religion\",\"protection\"],\"skins\":[{\"unified\":\"1faac\",\"native\":\"\uD83E\uDEAC\"}],\"version\":14},\"video_game\":{\"id\":\"video_game\",\"name\":\"Video Game\",\"keywords\":[\"play\",\"console\",\"PS4\",\"controller\"],\"skins\":[{\"unified\":\"1f3ae\",\"native\":\"\uD83C\uDFAE\"}],\"version\":1},\"joystick\":{\"id\":\"joystick\",\"name\":\"Joystick\",\"keywords\":[\"game\",\"play\"],\"skins\":[{\"unified\":\"1f579-fe0f\",\"native\":\"\uD83D\uDD79\uFE0F\"}],\"version\":1},\"slot_machine\":{\"id\":\"slot_machine\",\"name\":\"Slot Machine\",\"keywords\":[\"bet\",\"gamble\",\"vegas\",\"fruit\",\"luck\",\"casino\"],\"skins\":[{\"unified\":\"1f3b0\",\"native\":\"\uD83C\uDFB0\"}],\"version\":1},\"game_die\":{\"id\":\"game_die\",\"name\":\"Game Die\",\"keywords\":[\"dice\",\"random\",\"tabletop\",\"play\",\"luck\"],\"skins\":[{\"unified\":\"1f3b2\",\"native\":\"\uD83C\uDFB2\"}],\"version\":1},\"jigsaw\":{\"id\":\"jigsaw\",\"name\":\"Puzzle Piece\",\"keywords\":[\"jigsaw\",\"interlocking\"],\"skins\":[{\"unified\":\"1f9e9\",\"native\":\"\uD83E\uDDE9\"}],\"version\":11},\"teddy_bear\":{\"id\":\"teddy_bear\",\"name\":\"Teddy Bear\",\"keywords\":[\"plush\",\"stuffed\"],\"skins\":[{\"unified\":\"1f9f8\",\"native\":\"\uD83E\uDDF8\"}],\"version\":11},\"pinata\":{\"id\":\"pinata\",\"name\":\"Pinata\",\"keywords\":[\"mexico\",\"candy\",\"celebration\"],\"skins\":[{\"unified\":\"1fa85\",\"native\":\"\uD83E\uDE85\"}],\"version\":13},\"mirror_ball\":{\"id\":\"mirror_ball\",\"name\":\"Mirror Ball\",\"keywords\":[\"disco\",\"dance\",\"party\"],\"skins\":[{\"unified\":\"1faa9\",\"native\":\"\uD83E\uDEA9\"}],\"version\":14},\"nesting_dolls\":{\"id\":\"nesting_dolls\",\"name\":\"Nesting Dolls\",\"keywords\":[\"matryoshka\",\"toy\"],\"skins\":[{\"unified\":\"1fa86\",\"native\":\"\uD83E\uDE86\"}],\"version\":13},\"spades\":{\"id\":\"spades\",\"name\":\"Spade Suit\",\"keywords\":[\"spades\",\"poker\",\"cards\",\"suits\",\"magic\"],\"skins\":[{\"unified\":\"2660-fe0f\",\"native\":\"\u2660\uFE0F\"}],\"version\":1},\"hearts\":{\"id\":\"hearts\",\"name\":\"Heart Suit\",\"keywords\":[\"hearts\",\"poker\",\"cards\",\"magic\",\"suits\"],\"skins\":[{\"unified\":\"2665-fe0f\",\"native\":\"\u2665\uFE0F\"}],\"version\":1},\"diamonds\":{\"id\":\"diamonds\",\"name\":\"Diamond Suit\",\"keywords\":[\"diamonds\",\"poker\",\"cards\",\"magic\",\"suits\"],\"skins\":[{\"unified\":\"2666-fe0f\",\"native\":\"\u2666\uFE0F\"}],\"version\":1},\"clubs\":{\"id\":\"clubs\",\"name\":\"Club Suit\",\"keywords\":[\"clubs\",\"poker\",\"cards\",\"magic\",\"suits\"],\"skins\":[{\"unified\":\"2663-fe0f\",\"native\":\"\u2663\uFE0F\"}],\"version\":1},\"chess_pawn\":{\"id\":\"chess_pawn\",\"name\":\"Chess Pawn\",\"keywords\":[\"expendable\"],\"skins\":[{\"unified\":\"265f-fe0f\",\"native\":\"\u265F\uFE0F\"}],\"version\":11},\"black_joker\":{\"id\":\"black_joker\",\"name\":\"Joker\",\"keywords\":[\"black\",\"poker\",\"cards\",\"game\",\"play\",\"magic\"],\"skins\":[{\"unified\":\"1f0cf\",\"native\":\"\uD83C\uDCCF\"}],\"version\":1},\"mahjong\":{\"id\":\"mahjong\",\"name\":\"Mahjong Red Dragon\",\"keywords\":[\"game\",\"play\",\"chinese\",\"kanji\"],\"skins\":[{\"unified\":\"1f004\",\"native\":\"\uD83C\uDC04\"}],\"version\":1},\"flower_playing_cards\":{\"id\":\"flower_playing_cards\",\"name\":\"Flower Playing Cards\",\"keywords\":[\"game\",\"sunset\",\"red\"],\"skins\":[{\"unified\":\"1f3b4\",\"native\":\"\uD83C\uDFB4\"}],\"version\":1},\"performing_arts\":{\"id\":\"performing_arts\",\"name\":\"Performing Arts\",\"keywords\":[\"acting\",\"theater\",\"drama\"],\"skins\":[{\"unified\":\"1f3ad\",\"native\":\"\uD83C\uDFAD\"}],\"version\":1},\"frame_with_picture\":{\"id\":\"frame_with_picture\",\"name\":\"Framed Picture\",\"keywords\":[\"frame\",\"with\",\"photography\"],\"skins\":[{\"unified\":\"1f5bc-fe0f\",\"native\":\"\uD83D\uDDBC\uFE0F\"}],\"version\":1},\"art\":{\"id\":\"art\",\"name\":\"Artist Palette\",\"keywords\":[\"art\",\"design\",\"paint\",\"draw\",\"colors\"],\"skins\":[{\"unified\":\"1f3a8\",\"native\":\"\uD83C\uDFA8\"}],\"version\":1},\"thread\":{\"id\":\"thread\",\"name\":\"Thread\",\"keywords\":[\"needle\",\"sewing\",\"spool\",\"string\"],\"skins\":[{\"unified\":\"1f9f5\",\"native\":\"\uD83E\uDDF5\"}],\"version\":11},\"sewing_needle\":{\"id\":\"sewing_needle\",\"name\":\"Sewing Needle\",\"keywords\":[\"stitches\"],\"skins\":[{\"unified\":\"1faa1\",\"native\":\"\uD83E\uDEA1\"}],\"version\":13},\"yarn\":{\"id\":\"yarn\",\"name\":\"Yarn\",\"keywords\":[\"ball\",\"crochet\",\"knit\"],\"skins\":[{\"unified\":\"1f9f6\",\"native\":\"\uD83E\uDDF6\"}],\"version\":11},\"knot\":{\"id\":\"knot\",\"name\":\"Knot\",\"keywords\":[\"rope\",\"scout\"],\"skins\":[{\"unified\":\"1faa2\",\"native\":\"\uD83E\uDEA2\"}],\"version\":13},\"eyeglasses\":{\"id\":\"eyeglasses\",\"name\":\"Glasses\",\"keywords\":[\"eyeglasses\",\"fashion\",\"accessories\",\"eyesight\",\"nerdy\",\"dork\",\"geek\"],\"skins\":[{\"unified\":\"1f453\",\"native\":\"\uD83D\uDC53\"}],\"version\":1},\"dark_sunglasses\":{\"id\":\"dark_sunglasses\",\"name\":\"Sunglasses\",\"keywords\":[\"dark\",\"face\",\"cool\",\"accessories\"],\"skins\":[{\"unified\":\"1f576-fe0f\",\"native\":\"\uD83D\uDD76\uFE0F\"}],\"version\":1},\"goggles\":{\"id\":\"goggles\",\"name\":\"Goggles\",\"keywords\":[\"eyes\",\"protection\",\"safety\"],\"skins\":[{\"unified\":\"1f97d\",\"native\":\"\uD83E\uDD7D\"}],\"version\":11},\"lab_coat\":{\"id\":\"lab_coat\",\"name\":\"Lab Coat\",\"keywords\":[\"doctor\",\"experiment\",\"scientist\",\"chemist\"],\"skins\":[{\"unified\":\"1f97c\",\"native\":\"\uD83E\uDD7C\"}],\"version\":11},\"safety_vest\":{\"id\":\"safety_vest\",\"name\":\"Safety Vest\",\"keywords\":[\"protection\"],\"skins\":[{\"unified\":\"1f9ba\",\"native\":\"\uD83E\uDDBA\"}],\"version\":12},\"necktie\":{\"id\":\"necktie\",\"name\":\"Necktie\",\"keywords\":[\"shirt\",\"suitup\",\"formal\",\"fashion\",\"cloth\",\"business\"],\"skins\":[{\"unified\":\"1f454\",\"native\":\"\uD83D\uDC54\"}],\"version\":1},\"shirt\":{\"id\":\"shirt\",\"name\":\"T-Shirt\",\"keywords\":[\"shirt\",\"tshirt\",\"t\",\"fashion\",\"cloth\",\"casual\",\"tee\"],\"skins\":[{\"unified\":\"1f455\",\"native\":\"\uD83D\uDC55\"}],\"version\":1},\"jeans\":{\"id\":\"jeans\",\"name\":\"Jeans\",\"keywords\":[\"fashion\",\"shopping\"],\"skins\":[{\"unified\":\"1f456\",\"native\":\"\uD83D\uDC56\"}],\"version\":1},\"scarf\":{\"id\":\"scarf\",\"name\":\"Scarf\",\"keywords\":[\"neck\",\"winter\",\"clothes\"],\"skins\":[{\"unified\":\"1f9e3\",\"native\":\"\uD83E\uDDE3\"}],\"version\":5},\"gloves\":{\"id\":\"gloves\",\"name\":\"Gloves\",\"keywords\":[\"hands\",\"winter\",\"clothes\"],\"skins\":[{\"unified\":\"1f9e4\",\"native\":\"\uD83E\uDDE4\"}],\"version\":5},\"coat\":{\"id\":\"coat\",\"name\":\"Coat\",\"keywords\":[\"jacket\"],\"skins\":[{\"unified\":\"1f9e5\",\"native\":\"\uD83E\uDDE5\"}],\"version\":5},\"socks\":{\"id\":\"socks\",\"name\":\"Socks\",\"keywords\":[\"stockings\",\"clothes\"],\"skins\":[{\"unified\":\"1f9e6\",\"native\":\"\uD83E\uDDE6\"}],\"version\":5},\"dress\":{\"id\":\"dress\",\"name\":\"Dress\",\"keywords\":[\"clothes\",\"fashion\",\"shopping\"],\"skins\":[{\"unified\":\"1f457\",\"native\":\"\uD83D\uDC57\"}],\"version\":1},\"kimono\":{\"id\":\"kimono\",\"name\":\"Kimono\",\"keywords\":[\"dress\",\"fashion\",\"women\",\"female\",\"japanese\"],\"skins\":[{\"unified\":\"1f458\",\"native\":\"\uD83D\uDC58\"}],\"version\":1},\"sari\":{\"id\":\"sari\",\"name\":\"Sari\",\"keywords\":[\"dress\"],\"skins\":[{\"unified\":\"1f97b\",\"native\":\"\uD83E\uDD7B\"}],\"version\":12},\"one-piece_swimsuit\":{\"id\":\"one-piece_swimsuit\",\"name\":\"One-Piece Swimsuit\",\"keywords\":[\"one\",\"piece\",\"fashion\"],\"skins\":[{\"unified\":\"1fa71\",\"native\":\"\uD83E\uDE71\"}],\"version\":12},\"briefs\":{\"id\":\"briefs\",\"name\":\"Briefs\",\"keywords\":[\"clothing\"],\"skins\":[{\"unified\":\"1fa72\",\"native\":\"\uD83E\uDE72\"}],\"version\":12},\"shorts\":{\"id\":\"shorts\",\"name\":\"Shorts\",\"keywords\":[\"clothing\"],\"skins\":[{\"unified\":\"1fa73\",\"native\":\"\uD83E\uDE73\"}],\"version\":12},\"bikini\":{\"id\":\"bikini\",\"name\":\"Bikini\",\"keywords\":[\"swimming\",\"female\",\"woman\",\"girl\",\"fashion\",\"beach\",\"summer\"],\"skins\":[{\"unified\":\"1f459\",\"native\":\"\uD83D\uDC59\"}],\"version\":1},\"womans_clothes\":{\"id\":\"womans_clothes\",\"name\":\"Womans Clothes\",\"keywords\":[\"woman\",\"s\",\"fashion\",\"shopping\",\"bags\",\"female\"],\"skins\":[{\"unified\":\"1f45a\",\"native\":\"\uD83D\uDC5A\"}],\"version\":1},\"purse\":{\"id\":\"purse\",\"name\":\"Purse\",\"keywords\":[\"fashion\",\"accessories\",\"money\",\"sales\",\"shopping\"],\"skins\":[{\"unified\":\"1f45b\",\"native\":\"\uD83D\uDC5B\"}],\"version\":1},\"handbag\":{\"id\":\"handbag\",\"name\":\"Handbag\",\"keywords\":[\"fashion\",\"accessory\",\"accessories\",\"shopping\"],\"skins\":[{\"unified\":\"1f45c\",\"native\":\"\uD83D\uDC5C\"}],\"version\":1},\"pouch\":{\"id\":\"pouch\",\"name\":\"Pouch\",\"keywords\":[\"clutch\",\"bag\",\"accessories\",\"shopping\"],\"skins\":[{\"unified\":\"1f45d\",\"native\":\"\uD83D\uDC5D\"}],\"version\":1},\"shopping_bags\":{\"id\":\"shopping_bags\",\"name\":\"Shopping Bags\",\"keywords\":[\"mall\",\"buy\",\"purchase\"],\"skins\":[{\"unified\":\"1f6cd-fe0f\",\"native\":\"\uD83D\uDECD\uFE0F\"}],\"version\":1},\"school_satchel\":{\"id\":\"school_satchel\",\"name\":\"Backpack\",\"keywords\":[\"school\",\"satchel\",\"student\",\"education\",\"bag\"],\"skins\":[{\"unified\":\"1f392\",\"native\":\"\uD83C\uDF92\"}],\"version\":1},\"thong_sandal\":{\"id\":\"thong_sandal\",\"name\":\"Thong Sandal\",\"keywords\":[\"footwear\",\"summer\"],\"skins\":[{\"unified\":\"1fa74\",\"native\":\"\uD83E\uDE74\"}],\"version\":13},\"mans_shoe\":{\"id\":\"mans_shoe\",\"name\":\"Mans Shoe\",\"keywords\":[\"man\",\"s\",\"fashion\",\"male\"],\"skins\":[{\"unified\":\"1f45e\",\"native\":\"\uD83D\uDC5E\"}],\"version\":1},\"athletic_shoe\":{\"id\":\"athletic_shoe\",\"name\":\"Running Shoe\",\"keywords\":[\"athletic\",\"shoes\",\"sports\",\"sneakers\"],\"skins\":[{\"unified\":\"1f45f\",\"native\":\"\uD83D\uDC5F\"}],\"version\":1},\"hiking_boot\":{\"id\":\"hiking_boot\",\"name\":\"Hiking Boot\",\"keywords\":[\"backpacking\",\"camping\"],\"skins\":[{\"unified\":\"1f97e\",\"native\":\"\uD83E\uDD7E\"}],\"version\":11},\"womans_flat_shoe\":{\"id\":\"womans_flat_shoe\",\"name\":\"Flat Shoe\",\"keywords\":[\"womans\",\"ballet\",\"slip\",\"on\",\"slipper\"],\"skins\":[{\"unified\":\"1f97f\",\"native\":\"\uD83E\uDD7F\"}],\"version\":11},\"high_heel\":{\"id\":\"high_heel\",\"name\":\"High-Heeled Shoe\",\"keywords\":[\"high\",\"heel\",\"heeled\",\"fashion\",\"shoes\",\"female\",\"pumps\",\"stiletto\"],\"skins\":[{\"unified\":\"1f460\",\"native\":\"\uD83D\uDC60\"}],\"version\":1},\"sandal\":{\"id\":\"sandal\",\"name\":\"Womans Sandal\",\"keywords\":[\"woman\",\"s\",\"shoes\",\"fashion\",\"flip\",\"flops\"],\"skins\":[{\"unified\":\"1f461\",\"native\":\"\uD83D\uDC61\"}],\"version\":1},\"ballet_shoes\":{\"id\":\"ballet_shoes\",\"name\":\"Ballet Shoes\",\"keywords\":[\"dance\"],\"skins\":[{\"unified\":\"1fa70\",\"native\":\"\uD83E\uDE70\"}],\"version\":12},\"boot\":{\"id\":\"boot\",\"name\":\"Womans Boots\",\"keywords\":[\"boot\",\"woman\",\"s\",\"shoes\",\"fashion\"],\"skins\":[{\"unified\":\"1f462\",\"native\":\"\uD83D\uDC62\"}],\"version\":1},\"crown\":{\"id\":\"crown\",\"name\":\"Crown\",\"keywords\":[\"king\",\"kod\",\"leader\",\"royalty\",\"lord\"],\"skins\":[{\"unified\":\"1f451\",\"native\":\"\uD83D\uDC51\"}],\"version\":1},\"womans_hat\":{\"id\":\"womans_hat\",\"name\":\"Womans Hat\",\"keywords\":[\"woman\",\"s\",\"fashion\",\"accessories\",\"female\",\"lady\",\"spring\"],\"skins\":[{\"unified\":\"1f452\",\"native\":\"\uD83D\uDC52\"}],\"version\":1},\"tophat\":{\"id\":\"tophat\",\"name\":\"Top Hat\",\"keywords\":[\"tophat\",\"magic\",\"gentleman\",\"classy\",\"circus\"],\"skins\":[{\"unified\":\"1f3a9\",\"native\":\"\uD83C\uDFA9\"}],\"version\":1},\"mortar_board\":{\"id\":\"mortar_board\",\"name\":\"Graduation Cap\",\"keywords\":[\"mortar\",\"board\",\"school\",\"college\",\"degree\",\"university\",\"hat\",\"legal\",\"learn\",\"education\"],\"skins\":[{\"unified\":\"1f393\",\"native\":\"\uD83C\uDF93\"}],\"version\":1},\"billed_cap\":{\"id\":\"billed_cap\",\"name\":\"Billed Cap\",\"keywords\":[\"baseball\"],\"skins\":[{\"unified\":\"1f9e2\",\"native\":\"\uD83E\uDDE2\"}],\"version\":5},\"military_helmet\":{\"id\":\"military_helmet\",\"name\":\"Military Helmet\",\"keywords\":[\"army\",\"protection\"],\"skins\":[{\"unified\":\"1fa96\",\"native\":\"\uD83E\uDE96\"}],\"version\":13},\"helmet_with_white_cross\":{\"id\":\"helmet_with_white_cross\",\"name\":\"Rescue Worker\u2019s Helmet\",\"keywords\":[\"with\",\"white\",\"cross\",\"worker\",\"s\",\"construction\",\"build\"],\"skins\":[{\"unified\":\"26d1-fe0f\",\"native\":\"\u26D1\uFE0F\"}],\"version\":1},\"prayer_beads\":{\"id\":\"prayer_beads\",\"name\":\"Prayer Beads\",\"keywords\":[\"dhikr\",\"religious\"],\"skins\":[{\"unified\":\"1f4ff\",\"native\":\"\uD83D\uDCFF\"}],\"version\":1},\"lipstick\":{\"id\":\"lipstick\",\"name\":\"Lipstick\",\"keywords\":[\"female\",\"girl\",\"fashion\",\"woman\"],\"skins\":[{\"unified\":\"1f484\",\"native\":\"\uD83D\uDC84\"}],\"version\":1},\"ring\":{\"id\":\"ring\",\"name\":\"Ring\",\"keywords\":[\"wedding\",\"propose\",\"marriage\",\"valentines\",\"diamond\",\"fashion\",\"jewelry\",\"gem\",\"engagement\"],\"skins\":[{\"unified\":\"1f48d\",\"native\":\"\uD83D\uDC8D\"}],\"version\":1},\"gem\":{\"id\":\"gem\",\"name\":\"Gem Stone\",\"keywords\":[\"blue\",\"ruby\",\"diamond\",\"jewelry\"],\"skins\":[{\"unified\":\"1f48e\",\"native\":\"\uD83D\uDC8E\"}],\"version\":1},\"mute\":{\"id\":\"mute\",\"name\":\"Muted Speaker\",\"keywords\":[\"mute\",\"sound\",\"volume\",\"silence\",\"quiet\"],\"skins\":[{\"unified\":\"1f507\",\"native\":\"\uD83D\uDD07\"}],\"version\":1},\"speaker\":{\"id\":\"speaker\",\"name\":\"Speaker\",\"keywords\":[\"low\",\"volume\",\"sound\",\"silence\",\"broadcast\"],\"skins\":[{\"unified\":\"1f508\",\"native\":\"\uD83D\uDD08\"}],\"version\":1},\"sound\":{\"id\":\"sound\",\"name\":\"Speaker Medium Volume\",\"keywords\":[\"sound\",\"broadcast\"],\"skins\":[{\"unified\":\"1f509\",\"native\":\"\uD83D\uDD09\"}],\"version\":1},\"loud_sound\":{\"id\":\"loud_sound\",\"name\":\"Speaker High Volume\",\"keywords\":[\"loud\",\"sound\",\"noise\",\"noisy\",\"broadcast\"],\"skins\":[{\"unified\":\"1f50a\",\"native\":\"\uD83D\uDD0A\"}],\"version\":1},\"loudspeaker\":{\"id\":\"loudspeaker\",\"name\":\"Loudspeaker\",\"keywords\":[\"volume\",\"sound\"],\"skins\":[{\"unified\":\"1f4e2\",\"native\":\"\uD83D\uDCE2\"}],\"version\":1},\"mega\":{\"id\":\"mega\",\"name\":\"Megaphone\",\"keywords\":[\"mega\",\"sound\",\"speaker\",\"volume\"],\"skins\":[{\"unified\":\"1f4e3\",\"native\":\"\uD83D\uDCE3\"}],\"version\":1},\"postal_horn\":{\"id\":\"postal_horn\",\"name\":\"Postal Horn\",\"keywords\":[\"instrument\",\"music\"],\"skins\":[{\"unified\":\"1f4ef\",\"native\":\"\uD83D\uDCEF\"}],\"version\":1},\"bell\":{\"id\":\"bell\",\"name\":\"Bell\",\"keywords\":[\"sound\",\"notification\",\"christmas\",\"xmas\",\"chime\"],\"skins\":[{\"unified\":\"1f514\",\"native\":\"\uD83D\uDD14\"}],\"version\":1},\"no_bell\":{\"id\":\"no_bell\",\"name\":\"Bell with Slash\",\"keywords\":[\"no\",\"sound\",\"volume\",\"mute\",\"quiet\",\"silent\"],\"skins\":[{\"unified\":\"1f515\",\"native\":\"\uD83D\uDD15\"}],\"version\":1},\"musical_score\":{\"id\":\"musical_score\",\"name\":\"Musical Score\",\"keywords\":[\"treble\",\"clef\",\"compose\"],\"skins\":[{\"unified\":\"1f3bc\",\"native\":\"\uD83C\uDFBC\"}],\"version\":1},\"musical_note\":{\"id\":\"musical_note\",\"name\":\"Musical Note\",\"keywords\":[\"score\",\"tone\",\"sound\"],\"skins\":[{\"unified\":\"1f3b5\",\"native\":\"\uD83C\uDFB5\"}],\"version\":1},\"notes\":{\"id\":\"notes\",\"name\":\"Musical Notes\",\"keywords\":[\"music\",\"score\"],\"skins\":[{\"unified\":\"1f3b6\",\"native\":\"\uD83C\uDFB6\"}],\"version\":1},\"studio_microphone\":{\"id\":\"studio_microphone\",\"name\":\"Studio Microphone\",\"keywords\":[\"sing\",\"recording\",\"artist\",\"talkshow\"],\"skins\":[{\"unified\":\"1f399-fe0f\",\"native\":\"\uD83C\uDF99\uFE0F\"}],\"version\":1},\"level_slider\":{\"id\":\"level_slider\",\"name\":\"Level Slider\",\"keywords\":[\"scale\"],\"skins\":[{\"unified\":\"1f39a-fe0f\",\"native\":\"\uD83C\uDF9A\uFE0F\"}],\"version\":1},\"control_knobs\":{\"id\":\"control_knobs\",\"name\":\"Control Knobs\",\"keywords\":[\"dial\"],\"skins\":[{\"unified\":\"1f39b-fe0f\",\"native\":\"\uD83C\uDF9B\uFE0F\"}],\"version\":1},\"microphone\":{\"id\":\"microphone\",\"name\":\"Microphone\",\"keywords\":[\"sound\",\"music\",\"PA\",\"sing\",\"talkshow\"],\"skins\":[{\"unified\":\"1f3a4\",\"native\":\"\uD83C\uDFA4\"}],\"version\":1},\"headphones\":{\"id\":\"headphones\",\"name\":\"Headphone\",\"keywords\":[\"headphones\",\"music\",\"score\",\"gadgets\"],\"skins\":[{\"unified\":\"1f3a7\",\"native\":\"\uD83C\uDFA7\"}],\"version\":1},\"radio\":{\"id\":\"radio\",\"name\":\"Radio\",\"keywords\":[\"communication\",\"music\",\"podcast\",\"program\"],\"skins\":[{\"unified\":\"1f4fb\",\"native\":\"\uD83D\uDCFB\"}],\"version\":1},\"saxophone\":{\"id\":\"saxophone\",\"name\":\"Saxophone\",\"keywords\":[\"music\",\"instrument\",\"jazz\",\"blues\"],\"skins\":[{\"unified\":\"1f3b7\",\"native\":\"\uD83C\uDFB7\"}],\"version\":1},\"accordion\":{\"id\":\"accordion\",\"name\":\"Accordion\",\"keywords\":[\"music\"],\"skins\":[{\"unified\":\"1fa97\",\"native\":\"\uD83E\uDE97\"}],\"version\":13},\"guitar\":{\"id\":\"guitar\",\"name\":\"Guitar\",\"keywords\":[\"music\",\"instrument\"],\"skins\":[{\"unified\":\"1f3b8\",\"native\":\"\uD83C\uDFB8\"}],\"version\":1},\"musical_keyboard\":{\"id\":\"musical_keyboard\",\"name\":\"Musical Keyboard\",\"keywords\":[\"piano\",\"instrument\",\"compose\"],\"skins\":[{\"unified\":\"1f3b9\",\"native\":\"\uD83C\uDFB9\"}],\"version\":1},\"trumpet\":{\"id\":\"trumpet\",\"name\":\"Trumpet\",\"keywords\":[\"music\",\"brass\"],\"skins\":[{\"unified\":\"1f3ba\",\"native\":\"\uD83C\uDFBA\"}],\"version\":1},\"violin\":{\"id\":\"violin\",\"name\":\"Violin\",\"keywords\":[\"music\",\"instrument\",\"orchestra\",\"symphony\"],\"skins\":[{\"unified\":\"1f3bb\",\"native\":\"\uD83C\uDFBB\"}],\"version\":1},\"banjo\":{\"id\":\"banjo\",\"name\":\"Banjo\",\"keywords\":[\"music\",\"instructment\"],\"skins\":[{\"unified\":\"1fa95\",\"native\":\"\uD83E\uDE95\"}],\"version\":12},\"drum_with_drumsticks\":{\"id\":\"drum_with_drumsticks\",\"name\":\"Drum\",\"keywords\":[\"with\",\"drumsticks\",\"music\",\"instrument\",\"snare\"],\"skins\":[{\"unified\":\"1f941\",\"native\":\"\uD83E\uDD41\"}],\"version\":3},\"long_drum\":{\"id\":\"long_drum\",\"name\":\"Long Drum\",\"keywords\":[\"music\"],\"skins\":[{\"unified\":\"1fa98\",\"native\":\"\uD83E\uDE98\"}],\"version\":13},\"iphone\":{\"id\":\"iphone\",\"name\":\"Mobile Phone\",\"keywords\":[\"iphone\",\"technology\",\"apple\",\"gadgets\",\"dial\"],\"skins\":[{\"unified\":\"1f4f1\",\"native\":\"\uD83D\uDCF1\"}],\"version\":1},\"calling\":{\"id\":\"calling\",\"name\":\"Mobile Phone with Arrow\",\"keywords\":[\"calling\",\"iphone\",\"incoming\"],\"skins\":[{\"unified\":\"1f4f2\",\"native\":\"\uD83D\uDCF2\"}],\"version\":1},\"phone\":{\"id\":\"phone\",\"name\":\"Telephone\",\"keywords\":[\"phone\",\"technology\",\"communication\",\"dial\"],\"skins\":[{\"unified\":\"260e-fe0f\",\"native\":\"\u260E\uFE0F\"}],\"version\":1},\"telephone_receiver\":{\"id\":\"telephone_receiver\",\"name\":\"Telephone Receiver\",\"keywords\":[\"technology\",\"communication\",\"dial\"],\"skins\":[{\"unified\":\"1f4de\",\"native\":\"\uD83D\uDCDE\"}],\"version\":1},\"pager\":{\"id\":\"pager\",\"name\":\"Pager\",\"keywords\":[\"bbcall\",\"oldschool\",\"90s\"],\"skins\":[{\"unified\":\"1f4df\",\"native\":\"\uD83D\uDCDF\"}],\"version\":1},\"fax\":{\"id\":\"fax\",\"name\":\"Fax Machine\",\"keywords\":[\"communication\",\"technology\"],\"skins\":[{\"unified\":\"1f4e0\",\"native\":\"\uD83D\uDCE0\"}],\"version\":1},\"battery\":{\"id\":\"battery\",\"name\":\"Battery\",\"keywords\":[\"power\",\"energy\",\"sustain\"],\"skins\":[{\"unified\":\"1f50b\",\"native\":\"\uD83D\uDD0B\"}],\"version\":1},\"low_battery\":{\"id\":\"low_battery\",\"name\":\"Low Battery\",\"keywords\":[\"drained\",\"dead\"],\"skins\":[{\"unified\":\"1faab\",\"native\":\"\uD83E\uDEAB\"}],\"version\":14},\"electric_plug\":{\"id\":\"electric_plug\",\"name\":\"Electric Plug\",\"keywords\":[\"charger\",\"power\"],\"skins\":[{\"unified\":\"1f50c\",\"native\":\"\uD83D\uDD0C\"}],\"version\":1},\"computer\":{\"id\":\"computer\",\"name\":\"Laptop\",\"keywords\":[\"computer\",\"technology\",\"screen\",\"display\",\"monitor\"],\"skins\":[{\"unified\":\"1f4bb\",\"native\":\"\uD83D\uDCBB\"}],\"version\":1},\"desktop_computer\":{\"id\":\"desktop_computer\",\"name\":\"Desktop Computer\",\"keywords\":[\"technology\",\"computing\",\"screen\"],\"skins\":[{\"unified\":\"1f5a5-fe0f\",\"native\":\"\uD83D\uDDA5\uFE0F\"}],\"version\":1},\"printer\":{\"id\":\"printer\",\"name\":\"Printer\",\"keywords\":[\"paper\",\"ink\"],\"skins\":[{\"unified\":\"1f5a8-fe0f\",\"native\":\"\uD83D\uDDA8\uFE0F\"}],\"version\":1},\"keyboard\":{\"id\":\"keyboard\",\"name\":\"Keyboard\",\"keywords\":[\"technology\",\"computer\",\"type\",\"input\",\"text\"],\"skins\":[{\"unified\":\"2328-fe0f\",\"native\":\"\u2328\uFE0F\"}],\"version\":1},\"three_button_mouse\":{\"id\":\"three_button_mouse\",\"name\":\"Computer Mouse\",\"keywords\":[\"three\",\"button\",\"click\"],\"skins\":[{\"unified\":\"1f5b1-fe0f\",\"native\":\"\uD83D\uDDB1\uFE0F\"}],\"version\":1},\"trackball\":{\"id\":\"trackball\",\"name\":\"Trackball\",\"keywords\":[\"technology\",\"trackpad\"],\"skins\":[{\"unified\":\"1f5b2-fe0f\",\"native\":\"\uD83D\uDDB2\uFE0F\"}],\"version\":1},\"minidisc\":{\"id\":\"minidisc\",\"name\":\"Minidisc\",\"keywords\":[\"computer\",\"disk\",\"technology\",\"record\",\"data\",\"90s\"],\"skins\":[{\"unified\":\"1f4bd\",\"native\":\"\uD83D\uDCBD\"}],\"version\":1},\"floppy_disk\":{\"id\":\"floppy_disk\",\"name\":\"Floppy Disk\",\"keywords\":[\"oldschool\",\"technology\",\"save\",\"90s\",\"80s\"],\"skins\":[{\"unified\":\"1f4be\",\"native\":\"\uD83D\uDCBE\"}],\"version\":1},\"cd\":{\"id\":\"cd\",\"name\":\"Optical Disc\",\"keywords\":[\"cd\",\"disk\",\"technology\",\"dvd\",\"90s\"],\"skins\":[{\"unified\":\"1f4bf\",\"native\":\"\uD83D\uDCBF\"}],\"version\":1},\"dvd\":{\"id\":\"dvd\",\"name\":\"Dvd\",\"keywords\":[\"cd\",\"disk\",\"disc\"],\"skins\":[{\"unified\":\"1f4c0\",\"native\":\"\uD83D\uDCC0\"}],\"version\":1},\"abacus\":{\"id\":\"abacus\",\"name\":\"Abacus\",\"keywords\":[\"calculation\"],\"skins\":[{\"unified\":\"1f9ee\",\"native\":\"\uD83E\uDDEE\"}],\"version\":11},\"movie_camera\":{\"id\":\"movie_camera\",\"name\":\"Movie Camera\",\"keywords\":[\"film\",\"record\"],\"skins\":[{\"unified\":\"1f3a5\",\"native\":\"\uD83C\uDFA5\"}],\"version\":1},\"film_frames\":{\"id\":\"film_frames\",\"name\":\"Film Frames\",\"keywords\":[\"movie\"],\"skins\":[{\"unified\":\"1f39e-fe0f\",\"native\":\"\uD83C\uDF9E\uFE0F\"}],\"version\":1},\"film_projector\":{\"id\":\"film_projector\",\"name\":\"Film Projector\",\"keywords\":[\"video\",\"tape\",\"record\",\"movie\"],\"skins\":[{\"unified\":\"1f4fd-fe0f\",\"native\":\"\uD83D\uDCFD\uFE0F\"}],\"version\":1},\"clapper\":{\"id\":\"clapper\",\"name\":\"Clapper Board\",\"keywords\":[\"movie\",\"film\",\"record\"],\"skins\":[{\"unified\":\"1f3ac\",\"native\":\"\uD83C\uDFAC\"}],\"version\":1},\"tv\":{\"id\":\"tv\",\"name\":\"Television\",\"keywords\":[\"tv\",\"technology\",\"program\",\"oldschool\",\"show\"],\"skins\":[{\"unified\":\"1f4fa\",\"native\":\"\uD83D\uDCFA\"}],\"version\":1},\"camera\":{\"id\":\"camera\",\"name\":\"Camera\",\"keywords\":[\"gadgets\",\"photography\"],\"skins\":[{\"unified\":\"1f4f7\",\"native\":\"\uD83D\uDCF7\"}],\"version\":1},\"camera_with_flash\":{\"id\":\"camera_with_flash\",\"name\":\"Camera with Flash\",\"keywords\":[\"photography\",\"gadgets\"],\"skins\":[{\"unified\":\"1f4f8\",\"native\":\"\uD83D\uDCF8\"}],\"version\":1},\"video_camera\":{\"id\":\"video_camera\",\"name\":\"Video Camera\",\"keywords\":[\"film\",\"record\"],\"skins\":[{\"unified\":\"1f4f9\",\"native\":\"\uD83D\uDCF9\"}],\"version\":1},\"vhs\":{\"id\":\"vhs\",\"name\":\"Videocassette\",\"keywords\":[\"vhs\",\"record\",\"video\",\"oldschool\",\"90s\",\"80s\"],\"skins\":[{\"unified\":\"1f4fc\",\"native\":\"\uD83D\uDCFC\"}],\"version\":1},\"mag\":{\"id\":\"mag\",\"name\":\"Magnifying Glass Tilted Left\",\"keywords\":[\"mag\",\"search\",\"zoom\",\"find\",\"detective\"],\"skins\":[{\"unified\":\"1f50d\",\"native\":\"\uD83D\uDD0D\"}],\"version\":1},\"mag_right\":{\"id\":\"mag_right\",\"name\":\"Magnifying Glass Tilted Right\",\"keywords\":[\"mag\",\"search\",\"zoom\",\"find\",\"detective\"],\"skins\":[{\"unified\":\"1f50e\",\"native\":\"\uD83D\uDD0E\"}],\"version\":1},\"candle\":{\"id\":\"candle\",\"name\":\"Candle\",\"keywords\":[\"fire\",\"wax\"],\"skins\":[{\"unified\":\"1f56f-fe0f\",\"native\":\"\uD83D\uDD6F\uFE0F\"}],\"version\":1},\"bulb\":{\"id\":\"bulb\",\"name\":\"Light Bulb\",\"keywords\":[\"electricity\",\"idea\"],\"skins\":[{\"unified\":\"1f4a1\",\"native\":\"\uD83D\uDCA1\"}],\"version\":1},\"flashlight\":{\"id\":\"flashlight\",\"name\":\"Flashlight\",\"keywords\":[\"dark\",\"camping\",\"sight\",\"night\"],\"skins\":[{\"unified\":\"1f526\",\"native\":\"\uD83D\uDD26\"}],\"version\":1},\"izakaya_lantern\":{\"id\":\"izakaya_lantern\",\"name\":\"Izakaya Lantern\",\"keywords\":[\"red\",\"paper\",\"light\",\"halloween\",\"spooky\"],\"skins\":[{\"unified\":\"1f3ee\",\"native\":\"\uD83C\uDFEE\"}],\"version\":1},\"diya_lamp\":{\"id\":\"diya_lamp\",\"name\":\"Diya Lamp\",\"keywords\":[\"lighting\"],\"skins\":[{\"unified\":\"1fa94\",\"native\":\"\uD83E\uDE94\"}],\"version\":12},\"notebook_with_decorative_cover\":{\"id\":\"notebook_with_decorative_cover\",\"name\":\"Notebook with Decorative Cover\",\"keywords\":[\"classroom\",\"notes\",\"record\",\"paper\",\"study\"],\"skins\":[{\"unified\":\"1f4d4\",\"native\":\"\uD83D\uDCD4\"}],\"version\":1},\"closed_book\":{\"id\":\"closed_book\",\"name\":\"Closed Book\",\"keywords\":[\"read\",\"library\",\"knowledge\",\"textbook\",\"learn\"],\"skins\":[{\"unified\":\"1f4d5\",\"native\":\"\uD83D\uDCD5\"}],\"version\":1},\"book\":{\"id\":\"book\",\"name\":\"Open Book\",\"keywords\":[\"read\",\"library\",\"knowledge\",\"literature\",\"learn\",\"study\"],\"skins\":[{\"unified\":\"1f4d6\",\"native\":\"\uD83D\uDCD6\"}],\"version\":1},\"green_book\":{\"id\":\"green_book\",\"name\":\"Green Book\",\"keywords\":[\"read\",\"library\",\"knowledge\",\"study\"],\"skins\":[{\"unified\":\"1f4d7\",\"native\":\"\uD83D\uDCD7\"}],\"version\":1},\"blue_book\":{\"id\":\"blue_book\",\"name\":\"Blue Book\",\"keywords\":[\"read\",\"library\",\"knowledge\",\"learn\",\"study\"],\"skins\":[{\"unified\":\"1f4d8\",\"native\":\"\uD83D\uDCD8\"}],\"version\":1},\"orange_book\":{\"id\":\"orange_book\",\"name\":\"Orange Book\",\"keywords\":[\"read\",\"library\",\"knowledge\",\"textbook\",\"study\"],\"skins\":[{\"unified\":\"1f4d9\",\"native\":\"\uD83D\uDCD9\"}],\"version\":1},\"books\":{\"id\":\"books\",\"name\":\"Books\",\"keywords\":[\"literature\",\"library\",\"study\"],\"skins\":[{\"unified\":\"1f4da\",\"native\":\"\uD83D\uDCDA\"}],\"version\":1},\"notebook\":{\"id\":\"notebook\",\"name\":\"Notebook\",\"keywords\":[\"stationery\",\"record\",\"notes\",\"paper\",\"study\"],\"skins\":[{\"unified\":\"1f4d3\",\"native\":\"\uD83D\uDCD3\"}],\"version\":1},\"ledger\":{\"id\":\"ledger\",\"name\":\"Ledger\",\"keywords\":[\"notes\",\"paper\"],\"skins\":[{\"unified\":\"1f4d2\",\"native\":\"\uD83D\uDCD2\"}],\"version\":1},\"page_with_curl\":{\"id\":\"page_with_curl\",\"name\":\"Page with Curl\",\"keywords\":[\"documents\",\"office\",\"paper\"],\"skins\":[{\"unified\":\"1f4c3\",\"native\":\"\uD83D\uDCC3\"}],\"version\":1},\"scroll\":{\"id\":\"scroll\",\"name\":\"Scroll\",\"keywords\":[\"documents\",\"ancient\",\"history\",\"paper\"],\"skins\":[{\"unified\":\"1f4dc\",\"native\":\"\uD83D\uDCDC\"}],\"version\":1},\"page_facing_up\":{\"id\":\"page_facing_up\",\"name\":\"Page Facing Up\",\"keywords\":[\"documents\",\"office\",\"paper\",\"information\"],\"skins\":[{\"unified\":\"1f4c4\",\"native\":\"\uD83D\uDCC4\"}],\"version\":1},\"newspaper\":{\"id\":\"newspaper\",\"name\":\"Newspaper\",\"keywords\":[\"press\",\"headline\"],\"skins\":[{\"unified\":\"1f4f0\",\"native\":\"\uD83D\uDCF0\"}],\"version\":1},\"rolled_up_newspaper\":{\"id\":\"rolled_up_newspaper\",\"name\":\"Rolled-Up Newspaper\",\"keywords\":[\"rolled\",\"up\",\"press\",\"headline\"],\"skins\":[{\"unified\":\"1f5de-fe0f\",\"native\":\"\uD83D\uDDDE\uFE0F\"}],\"version\":1},\"bookmark_tabs\":{\"id\":\"bookmark_tabs\",\"name\":\"Bookmark Tabs\",\"keywords\":[\"favorite\",\"save\",\"order\",\"tidy\"],\"skins\":[{\"unified\":\"1f4d1\",\"native\":\"\uD83D\uDCD1\"}],\"version\":1},\"bookmark\":{\"id\":\"bookmark\",\"name\":\"Bookmark\",\"keywords\":[\"favorite\",\"label\",\"save\"],\"skins\":[{\"unified\":\"1f516\",\"native\":\"\uD83D\uDD16\"}],\"version\":1},\"label\":{\"id\":\"label\",\"name\":\"Label\",\"keywords\":[\"sale\",\"tag\"],\"skins\":[{\"unified\":\"1f3f7-fe0f\",\"native\":\"\uD83C\uDFF7\uFE0F\"}],\"version\":1},\"moneybag\":{\"id\":\"moneybag\",\"name\":\"Money Bag\",\"keywords\":[\"moneybag\",\"dollar\",\"payment\",\"coins\",\"sale\"],\"skins\":[{\"unified\":\"1f4b0\",\"native\":\"\uD83D\uDCB0\"}],\"version\":1},\"coin\":{\"id\":\"coin\",\"name\":\"Coin\",\"keywords\":[\"money\",\"currency\"],\"skins\":[{\"unified\":\"1fa99\",\"native\":\"\uD83E\uDE99\"}],\"version\":13},\"yen\":{\"id\":\"yen\",\"name\":\"Yen Banknote\",\"keywords\":[\"money\",\"sales\",\"japanese\",\"dollar\",\"currency\"],\"skins\":[{\"unified\":\"1f4b4\",\"native\":\"\uD83D\uDCB4\"}],\"version\":1},\"dollar\":{\"id\":\"dollar\",\"name\":\"Dollar Banknote\",\"keywords\":[\"money\",\"sales\",\"bill\",\"currency\"],\"skins\":[{\"unified\":\"1f4b5\",\"native\":\"\uD83D\uDCB5\"}],\"version\":1},\"euro\":{\"id\":\"euro\",\"name\":\"Euro Banknote\",\"keywords\":[\"money\",\"sales\",\"dollar\",\"currency\"],\"skins\":[{\"unified\":\"1f4b6\",\"native\":\"\uD83D\uDCB6\"}],\"version\":1},\"pound\":{\"id\":\"pound\",\"name\":\"Pound Banknote\",\"keywords\":[\"british\",\"sterling\",\"money\",\"sales\",\"bills\",\"uk\",\"england\",\"currency\"],\"skins\":[{\"unified\":\"1f4b7\",\"native\":\"\uD83D\uDCB7\"}],\"version\":1},\"money_with_wings\":{\"id\":\"money_with_wings\",\"name\":\"Money with Wings\",\"keywords\":[\"dollar\",\"bills\",\"payment\",\"sale\"],\"skins\":[{\"unified\":\"1f4b8\",\"native\":\"\uD83D\uDCB8\"}],\"version\":1},\"credit_card\":{\"id\":\"credit_card\",\"name\":\"Credit Card\",\"keywords\":[\"money\",\"sales\",\"dollar\",\"bill\",\"payment\",\"shopping\"],\"skins\":[{\"unified\":\"1f4b3\",\"native\":\"\uD83D\uDCB3\"}],\"version\":1},\"receipt\":{\"id\":\"receipt\",\"name\":\"Receipt\",\"keywords\":[\"accounting\",\"expenses\"],\"skins\":[{\"unified\":\"1f9fe\",\"native\":\"\uD83E\uDDFE\"}],\"version\":11},\"chart\":{\"id\":\"chart\",\"name\":\"Chart Increasing with Yen\",\"keywords\":[\"green\",\"square\",\"graph\",\"presentation\",\"stats\"],\"skins\":[{\"unified\":\"1f4b9\",\"native\":\"\uD83D\uDCB9\"}],\"version\":1},\"email\":{\"id\":\"email\",\"name\":\"Envelope\",\"keywords\":[\"email\",\"letter\",\"postal\",\"inbox\",\"communication\"],\"skins\":[{\"unified\":\"2709-fe0f\",\"native\":\"\u2709\uFE0F\"}],\"version\":1},\"e-mail\":{\"id\":\"e-mail\",\"name\":\"E-Mail\",\"keywords\":[\"e\",\"mail\",\"communication\",\"inbox\"],\"skins\":[{\"unified\":\"1f4e7\",\"native\":\"\uD83D\uDCE7\"}],\"version\":1},\"incoming_envelope\":{\"id\":\"incoming_envelope\",\"name\":\"Incoming Envelope\",\"keywords\":[\"email\",\"inbox\"],\"skins\":[{\"unified\":\"1f4e8\",\"native\":\"\uD83D\uDCE8\"}],\"version\":1},\"envelope_with_arrow\":{\"id\":\"envelope_with_arrow\",\"name\":\"Envelope with Arrow\",\"keywords\":[\"email\",\"communication\"],\"skins\":[{\"unified\":\"1f4e9\",\"native\":\"\uD83D\uDCE9\"}],\"version\":1},\"outbox_tray\":{\"id\":\"outbox_tray\",\"name\":\"Outbox Tray\",\"keywords\":[\"inbox\",\"email\"],\"skins\":[{\"unified\":\"1f4e4\",\"native\":\"\uD83D\uDCE4\"}],\"version\":1},\"inbox_tray\":{\"id\":\"inbox_tray\",\"name\":\"Inbox Tray\",\"keywords\":[\"email\",\"documents\"],\"skins\":[{\"unified\":\"1f4e5\",\"native\":\"\uD83D\uDCE5\"}],\"version\":1},\"package\":{\"id\":\"package\",\"name\":\"Package\",\"keywords\":[\"mail\",\"gift\",\"cardboard\",\"box\",\"moving\"],\"skins\":[{\"unified\":\"1f4e6\",\"native\":\"\uD83D\uDCE6\"}],\"version\":1},\"mailbox\":{\"id\":\"mailbox\",\"name\":\"Closed Mailbox with Raised Flag\",\"keywords\":[\"email\",\"inbox\",\"communication\"],\"skins\":[{\"unified\":\"1f4eb\",\"native\":\"\uD83D\uDCEB\"}],\"version\":1},\"mailbox_closed\":{\"id\":\"mailbox_closed\",\"name\":\"Closed Mailbox with Lowered Flag\",\"keywords\":[\"email\",\"communication\",\"inbox\"],\"skins\":[{\"unified\":\"1f4ea\",\"native\":\"\uD83D\uDCEA\"}],\"version\":1},\"mailbox_with_mail\":{\"id\":\"mailbox_with_mail\",\"name\":\"Open Mailbox with Raised Flag\",\"keywords\":[\"mail\",\"email\",\"inbox\",\"communication\"],\"skins\":[{\"unified\":\"1f4ec\",\"native\":\"\uD83D\uDCEC\"}],\"version\":1},\"mailbox_with_no_mail\":{\"id\":\"mailbox_with_no_mail\",\"name\":\"Open Mailbox with Lowered Flag\",\"keywords\":[\"no\",\"mail\",\"email\",\"inbox\"],\"skins\":[{\"unified\":\"1f4ed\",\"native\":\"\uD83D\uDCED\"}],\"version\":1},\"postbox\":{\"id\":\"postbox\",\"name\":\"Postbox\",\"keywords\":[\"email\",\"letter\",\"envelope\"],\"skins\":[{\"unified\":\"1f4ee\",\"native\":\"\uD83D\uDCEE\"}],\"version\":1},\"ballot_box_with_ballot\":{\"id\":\"ballot_box_with_ballot\",\"name\":\"Ballot Box with Ballot\",\"keywords\":[\"election\",\"vote\"],\"skins\":[{\"unified\":\"1f5f3-fe0f\",\"native\":\"\uD83D\uDDF3\uFE0F\"}],\"version\":1},\"pencil2\":{\"id\":\"pencil2\",\"name\":\"Pencil\",\"keywords\":[\"pencil2\",\"stationery\",\"write\",\"paper\",\"writing\",\"school\",\"study\"],\"skins\":[{\"unified\":\"270f-fe0f\",\"native\":\"\u270F\uFE0F\"}],\"version\":1},\"black_nib\":{\"id\":\"black_nib\",\"name\":\"Black Nib\",\"keywords\":[\"pen\",\"stationery\",\"writing\",\"write\"],\"skins\":[{\"unified\":\"2712-fe0f\",\"native\":\"\u2712\uFE0F\"}],\"version\":1},\"lower_left_fountain_pen\":{\"id\":\"lower_left_fountain_pen\",\"name\":\"Fountain Pen\",\"keywords\":[\"lower\",\"left\",\"stationery\",\"writing\",\"write\"],\"skins\":[{\"unified\":\"1f58b-fe0f\",\"native\":\"\uD83D\uDD8B\uFE0F\"}],\"version\":1},\"lower_left_ballpoint_pen\":{\"id\":\"lower_left_ballpoint_pen\",\"name\":\"Pen\",\"keywords\":[\"lower\",\"left\",\"ballpoint\",\"stationery\",\"writing\",\"write\"],\"skins\":[{\"unified\":\"1f58a-fe0f\",\"native\":\"\uD83D\uDD8A\uFE0F\"}],\"version\":1},\"lower_left_paintbrush\":{\"id\":\"lower_left_paintbrush\",\"name\":\"Paintbrush\",\"keywords\":[\"lower\",\"left\",\"drawing\",\"creativity\",\"art\"],\"skins\":[{\"unified\":\"1f58c-fe0f\",\"native\":\"\uD83D\uDD8C\uFE0F\"}],\"version\":1},\"lower_left_crayon\":{\"id\":\"lower_left_crayon\",\"name\":\"Crayon\",\"keywords\":[\"lower\",\"left\",\"drawing\",\"creativity\"],\"skins\":[{\"unified\":\"1f58d-fe0f\",\"native\":\"\uD83D\uDD8D\uFE0F\"}],\"version\":1},\"memo\":{\"id\":\"memo\",\"name\":\"Memo\",\"keywords\":[\"pencil\",\"write\",\"documents\",\"stationery\",\"paper\",\"writing\",\"legal\",\"exam\",\"quiz\",\"test\",\"study\",\"compose\"],\"skins\":[{\"unified\":\"1f4dd\",\"native\":\"\uD83D\uDCDD\"}],\"version\":1},\"briefcase\":{\"id\":\"briefcase\",\"name\":\"Briefcase\",\"keywords\":[\"business\",\"documents\",\"work\",\"law\",\"legal\",\"job\",\"career\"],\"skins\":[{\"unified\":\"1f4bc\",\"native\":\"\uD83D\uDCBC\"}],\"version\":1},\"file_folder\":{\"id\":\"file_folder\",\"name\":\"File Folder\",\"keywords\":[\"documents\",\"business\",\"office\"],\"skins\":[{\"unified\":\"1f4c1\",\"native\":\"\uD83D\uDCC1\"}],\"version\":1},\"open_file_folder\":{\"id\":\"open_file_folder\",\"name\":\"Open File Folder\",\"keywords\":[\"documents\",\"load\"],\"skins\":[{\"unified\":\"1f4c2\",\"native\":\"\uD83D\uDCC2\"}],\"version\":1},\"card_index_dividers\":{\"id\":\"card_index_dividers\",\"name\":\"Card Index Dividers\",\"keywords\":[\"organizing\",\"business\",\"stationery\"],\"skins\":[{\"unified\":\"1f5c2-fe0f\",\"native\":\"\uD83D\uDDC2\uFE0F\"}],\"version\":1},\"date\":{\"id\":\"date\",\"name\":\"Calendar\",\"keywords\":[\"date\",\"schedule\"],\"skins\":[{\"unified\":\"1f4c5\",\"native\":\"\uD83D\uDCC5\"}],\"version\":1},\"calendar\":{\"id\":\"calendar\",\"name\":\"Tear-off Calendar\",\"keywords\":[\"tear\",\"off\",\"schedule\",\"date\",\"planning\"],\"skins\":[{\"unified\":\"1f4c6\",\"native\":\"\uD83D\uDCC6\"}],\"version\":1},\"spiral_note_pad\":{\"id\":\"spiral_note_pad\",\"name\":\"Spiral Notepad\",\"keywords\":[\"note\",\"pad\",\"memo\",\"stationery\"],\"skins\":[{\"unified\":\"1f5d2-fe0f\",\"native\":\"\uD83D\uDDD2\uFE0F\"}],\"version\":1},\"spiral_calendar_pad\":{\"id\":\"spiral_calendar_pad\",\"name\":\"Spiral Calendar\",\"keywords\":[\"pad\",\"date\",\"schedule\",\"planning\"],\"skins\":[{\"unified\":\"1f5d3-fe0f\",\"native\":\"\uD83D\uDDD3\uFE0F\"}],\"version\":1},\"card_index\":{\"id\":\"card_index\",\"name\":\"Card Index\",\"keywords\":[\"business\",\"stationery\"],\"skins\":[{\"unified\":\"1f4c7\",\"native\":\"\uD83D\uDCC7\"}],\"version\":1},\"chart_with_upwards_trend\":{\"id\":\"chart_with_upwards_trend\",\"name\":\"Chart Increasing\",\"keywords\":[\"with\",\"upwards\",\"trend\",\"graph\",\"presentation\",\"stats\",\"recovery\",\"business\",\"economics\",\"money\",\"sales\",\"good\",\"success\"],\"skins\":[{\"unified\":\"1f4c8\",\"native\":\"\uD83D\uDCC8\"}],\"version\":1},\"chart_with_downwards_trend\":{\"id\":\"chart_with_downwards_trend\",\"name\":\"Chart Decreasing\",\"keywords\":[\"with\",\"downwards\",\"trend\",\"graph\",\"presentation\",\"stats\",\"recession\",\"business\",\"economics\",\"money\",\"sales\",\"bad\",\"failure\"],\"skins\":[{\"unified\":\"1f4c9\",\"native\":\"\uD83D\uDCC9\"}],\"version\":1},\"bar_chart\":{\"id\":\"bar_chart\",\"name\":\"Bar Chart\",\"keywords\":[\"graph\",\"presentation\",\"stats\"],\"skins\":[{\"unified\":\"1f4ca\",\"native\":\"\uD83D\uDCCA\"}],\"version\":1},\"clipboard\":{\"id\":\"clipboard\",\"name\":\"Clipboard\",\"keywords\":[\"stationery\",\"documents\"],\"skins\":[{\"unified\":\"1f4cb\",\"native\":\"\uD83D\uDCCB\"}],\"version\":1},\"pushpin\":{\"id\":\"pushpin\",\"name\":\"Pushpin\",\"keywords\":[\"stationery\",\"mark\",\"here\"],\"skins\":[{\"unified\":\"1f4cc\",\"native\":\"\uD83D\uDCCC\"}],\"version\":1},\"round_pushpin\":{\"id\":\"round_pushpin\",\"name\":\"Round Pushpin\",\"keywords\":[\"stationery\",\"location\",\"map\",\"here\"],\"skins\":[{\"unified\":\"1f4cd\",\"native\":\"\uD83D\uDCCD\"}],\"version\":1},\"paperclip\":{\"id\":\"paperclip\",\"name\":\"Paperclip\",\"keywords\":[\"documents\",\"stationery\"],\"skins\":[{\"unified\":\"1f4ce\",\"native\":\"\uD83D\uDCCE\"}],\"version\":1},\"linked_paperclips\":{\"id\":\"linked_paperclips\",\"name\":\"Linked Paperclips\",\"keywords\":[\"documents\",\"stationery\"],\"skins\":[{\"unified\":\"1f587-fe0f\",\"native\":\"\uD83D\uDD87\uFE0F\"}],\"version\":1},\"straight_ruler\":{\"id\":\"straight_ruler\",\"name\":\"Straight Ruler\",\"keywords\":[\"stationery\",\"calculate\",\"length\",\"math\",\"school\",\"drawing\",\"architect\",\"sketch\"],\"skins\":[{\"unified\":\"1f4cf\",\"native\":\"\uD83D\uDCCF\"}],\"version\":1},\"triangular_ruler\":{\"id\":\"triangular_ruler\",\"name\":\"Triangular Ruler\",\"keywords\":[\"stationery\",\"math\",\"architect\",\"sketch\"],\"skins\":[{\"unified\":\"1f4d0\",\"native\":\"\uD83D\uDCD0\"}],\"version\":1},\"scissors\":{\"id\":\"scissors\",\"name\":\"Scissors\",\"keywords\":[\"stationery\",\"cut\"],\"skins\":[{\"unified\":\"2702-fe0f\",\"native\":\"\u2702\uFE0F\"}],\"version\":1},\"card_file_box\":{\"id\":\"card_file_box\",\"name\":\"Card File Box\",\"keywords\":[\"business\",\"stationery\"],\"skins\":[{\"unified\":\"1f5c3-fe0f\",\"native\":\"\uD83D\uDDC3\uFE0F\"}],\"version\":1},\"file_cabinet\":{\"id\":\"file_cabinet\",\"name\":\"File Cabinet\",\"keywords\":[\"filing\",\"organizing\"],\"skins\":[{\"unified\":\"1f5c4-fe0f\",\"native\":\"\uD83D\uDDC4\uFE0F\"}],\"version\":1},\"wastebasket\":{\"id\":\"wastebasket\",\"name\":\"Wastebasket\",\"keywords\":[\"bin\",\"trash\",\"rubbish\",\"garbage\",\"toss\"],\"skins\":[{\"unified\":\"1f5d1-fe0f\",\"native\":\"\uD83D\uDDD1\uFE0F\"}],\"version\":1},\"lock\":{\"id\":\"lock\",\"name\":\"Lock\",\"keywords\":[\"locked\",\"security\",\"password\",\"padlock\"],\"skins\":[{\"unified\":\"1f512\",\"native\":\"\uD83D\uDD12\"}],\"version\":1},\"unlock\":{\"id\":\"unlock\",\"name\":\"Unlocked\",\"keywords\":[\"unlock\",\"privacy\",\"security\"],\"skins\":[{\"unified\":\"1f513\",\"native\":\"\uD83D\uDD13\"}],\"version\":1},\"lock_with_ink_pen\":{\"id\":\"lock_with_ink_pen\",\"name\":\"Locked with Pen\",\"keywords\":[\"lock\",\"ink\",\"security\",\"secret\"],\"skins\":[{\"unified\":\"1f50f\",\"native\":\"\uD83D\uDD0F\"}],\"version\":1},\"closed_lock_with_key\":{\"id\":\"closed_lock_with_key\",\"name\":\"Locked with Key\",\"keywords\":[\"closed\",\"lock\",\"security\",\"privacy\"],\"skins\":[{\"unified\":\"1f510\",\"native\":\"\uD83D\uDD10\"}],\"version\":1},\"key\":{\"id\":\"key\",\"name\":\"Key\",\"keywords\":[\"lock\",\"door\",\"password\"],\"skins\":[{\"unified\":\"1f511\",\"native\":\"\uD83D\uDD11\"}],\"version\":1},\"old_key\":{\"id\":\"old_key\",\"name\":\"Old Key\",\"keywords\":[\"lock\",\"door\",\"password\"],\"skins\":[{\"unified\":\"1f5dd-fe0f\",\"native\":\"\uD83D\uDDDD\uFE0F\"}],\"version\":1},\"hammer\":{\"id\":\"hammer\",\"name\":\"Hammer\",\"keywords\":[\"tools\",\"build\",\"create\"],\"skins\":[{\"unified\":\"1f528\",\"native\":\"\uD83D\uDD28\"}],\"version\":1},\"axe\":{\"id\":\"axe\",\"name\":\"Axe\",\"keywords\":[\"tool\",\"chop\",\"cut\"],\"skins\":[{\"unified\":\"1fa93\",\"native\":\"\uD83E\uDE93\"}],\"version\":12},\"pick\":{\"id\":\"pick\",\"name\":\"Pick\",\"keywords\":[\"tools\",\"dig\"],\"skins\":[{\"unified\":\"26cf-fe0f\",\"native\":\"\u26CF\uFE0F\"}],\"version\":1},\"hammer_and_pick\":{\"id\":\"hammer_and_pick\",\"name\":\"Hammer and Pick\",\"keywords\":[\"tools\",\"build\",\"create\"],\"skins\":[{\"unified\":\"2692-fe0f\",\"native\":\"\u2692\uFE0F\"}],\"version\":1},\"hammer_and_wrench\":{\"id\":\"hammer_and_wrench\",\"name\":\"Hammer and Wrench\",\"keywords\":[\"tools\",\"build\",\"create\"],\"skins\":[{\"unified\":\"1f6e0-fe0f\",\"native\":\"\uD83D\uDEE0\uFE0F\"}],\"version\":1},\"dagger_knife\":{\"id\":\"dagger_knife\",\"name\":\"Dagger\",\"keywords\":[\"knife\",\"weapon\"],\"skins\":[{\"unified\":\"1f5e1-fe0f\",\"native\":\"\uD83D\uDDE1\uFE0F\"}],\"version\":1},\"crossed_swords\":{\"id\":\"crossed_swords\",\"name\":\"Crossed Swords\",\"keywords\":[\"weapon\"],\"skins\":[{\"unified\":\"2694-fe0f\",\"native\":\"\u2694\uFE0F\"}],\"version\":1},\"gun\":{\"id\":\"gun\",\"name\":\"Pistol\",\"keywords\":[\"gun\",\"violence\",\"weapon\",\"revolver\"],\"skins\":[{\"unified\":\"1f52b\",\"native\":\"\uD83D\uDD2B\"}],\"version\":1},\"boomerang\":{\"id\":\"boomerang\",\"name\":\"Boomerang\",\"keywords\":[\"weapon\"],\"skins\":[{\"unified\":\"1fa83\",\"native\":\"\uD83E\uDE83\"}],\"version\":13},\"bow_and_arrow\":{\"id\":\"bow_and_arrow\",\"name\":\"Bow and Arrow\",\"keywords\":[\"sports\"],\"skins\":[{\"unified\":\"1f3f9\",\"native\":\"\uD83C\uDFF9\"}],\"version\":1},\"shield\":{\"id\":\"shield\",\"name\":\"Shield\",\"keywords\":[\"protection\",\"security\"],\"skins\":[{\"unified\":\"1f6e1-fe0f\",\"native\":\"\uD83D\uDEE1\uFE0F\"}],\"version\":1},\"carpentry_saw\":{\"id\":\"carpentry_saw\",\"name\":\"Carpentry Saw\",\"keywords\":[\"cut\",\"chop\"],\"skins\":[{\"unified\":\"1fa9a\",\"native\":\"\uD83E\uDE9A\"}],\"version\":13},\"wrench\":{\"id\":\"wrench\",\"name\":\"Wrench\",\"keywords\":[\"tools\",\"diy\",\"ikea\",\"fix\",\"maintainer\"],\"skins\":[{\"unified\":\"1f527\",\"native\":\"\uD83D\uDD27\"}],\"version\":1},\"screwdriver\":{\"id\":\"screwdriver\",\"name\":\"Screwdriver\",\"keywords\":[\"tools\"],\"skins\":[{\"unified\":\"1fa9b\",\"native\":\"\uD83E\uDE9B\"}],\"version\":13},\"nut_and_bolt\":{\"id\":\"nut_and_bolt\",\"name\":\"Nut and Bolt\",\"keywords\":[\"handy\",\"tools\",\"fix\"],\"skins\":[{\"unified\":\"1f529\",\"native\":\"\uD83D\uDD29\"}],\"version\":1},\"gear\":{\"id\":\"gear\",\"name\":\"Gear\",\"keywords\":[\"cog\"],\"skins\":[{\"unified\":\"2699-fe0f\",\"native\":\"\u2699\uFE0F\"}],\"version\":1},\"compression\":{\"id\":\"compression\",\"name\":\"Clamp\",\"keywords\":[\"compression\",\"tool\"],\"skins\":[{\"unified\":\"1f5dc-fe0f\",\"native\":\"\uD83D\uDDDC\uFE0F\"}],\"version\":1},\"scales\":{\"id\":\"scales\",\"name\":\"Balance Scale\",\"keywords\":[\"scales\",\"law\",\"fairness\",\"weight\"],\"skins\":[{\"unified\":\"2696-fe0f\",\"native\":\"\u2696\uFE0F\"}],\"version\":1},\"probing_cane\":{\"id\":\"probing_cane\",\"name\":\"White Cane\",\"keywords\":[\"probing\",\"accessibility\"],\"skins\":[{\"unified\":\"1f9af\",\"native\":\"\uD83E\uDDAF\"}],\"version\":12},\"link\":{\"id\":\"link\",\"name\":\"Link\",\"keywords\":[\"rings\",\"url\"],\"skins\":[{\"unified\":\"1f517\",\"native\":\"\uD83D\uDD17\"}],\"version\":1},\"chains\":{\"id\":\"chains\",\"name\":\"Chains\",\"keywords\":[\"lock\",\"arrest\"],\"skins\":[{\"unified\":\"26d3-fe0f\",\"native\":\"\u26D3\uFE0F\"}],\"version\":1},\"hook\":{\"id\":\"hook\",\"name\":\"Hook\",\"keywords\":[\"tools\"],\"skins\":[{\"unified\":\"1fa9d\",\"native\":\"\uD83E\uDE9D\"}],\"version\":13},\"toolbox\":{\"id\":\"toolbox\",\"name\":\"Toolbox\",\"keywords\":[\"tools\",\"diy\",\"fix\",\"maintainer\",\"mechanic\"],\"skins\":[{\"unified\":\"1f9f0\",\"native\":\"\uD83E\uDDF0\"}],\"version\":11},\"magnet\":{\"id\":\"magnet\",\"name\":\"Magnet\",\"keywords\":[\"attraction\",\"magnetic\"],\"skins\":[{\"unified\":\"1f9f2\",\"native\":\"\uD83E\uDDF2\"}],\"version\":11},\"ladder\":{\"id\":\"ladder\",\"name\":\"Ladder\",\"keywords\":[\"tools\"],\"skins\":[{\"unified\":\"1fa9c\",\"native\":\"\uD83E\uDE9C\"}],\"version\":13},\"alembic\":{\"id\":\"alembic\",\"name\":\"Alembic\",\"keywords\":[\"distilling\",\"science\",\"experiment\",\"chemistry\"],\"skins\":[{\"unified\":\"2697-fe0f\",\"native\":\"\u2697\uFE0F\"}],\"version\":1},\"test_tube\":{\"id\":\"test_tube\",\"name\":\"Test Tube\",\"keywords\":[\"chemistry\",\"experiment\",\"lab\",\"science\"],\"skins\":[{\"unified\":\"1f9ea\",\"native\":\"\uD83E\uDDEA\"}],\"version\":11},\"petri_dish\":{\"id\":\"petri_dish\",\"name\":\"Petri Dish\",\"keywords\":[\"bacteria\",\"biology\",\"culture\",\"lab\"],\"skins\":[{\"unified\":\"1f9eb\",\"native\":\"\uD83E\uDDEB\"}],\"version\":11},\"dna\":{\"id\":\"dna\",\"name\":\"Dna\",\"keywords\":[\"biologist\",\"genetics\",\"life\"],\"skins\":[{\"unified\":\"1f9ec\",\"native\":\"\uD83E\uDDEC\"}],\"version\":11},\"microscope\":{\"id\":\"microscope\",\"name\":\"Microscope\",\"keywords\":[\"laboratory\",\"experiment\",\"zoomin\",\"science\",\"study\"],\"skins\":[{\"unified\":\"1f52c\",\"native\":\"\uD83D\uDD2C\"}],\"version\":1},\"telescope\":{\"id\":\"telescope\",\"name\":\"Telescope\",\"keywords\":[\"stars\",\"space\",\"zoom\",\"science\",\"astronomy\"],\"skins\":[{\"unified\":\"1f52d\",\"native\":\"\uD83D\uDD2D\"}],\"version\":1},\"satellite_antenna\":{\"id\":\"satellite_antenna\",\"name\":\"Satellite Antenna\",\"keywords\":[\"communication\",\"future\",\"radio\",\"space\"],\"skins\":[{\"unified\":\"1f4e1\",\"native\":\"\uD83D\uDCE1\"}],\"version\":1},\"syringe\":{\"id\":\"syringe\",\"name\":\"Syringe\",\"keywords\":[\"health\",\"hospital\",\"drugs\",\"blood\",\"medicine\",\"needle\",\"doctor\",\"nurse\"],\"skins\":[{\"unified\":\"1f489\",\"native\":\"\uD83D\uDC89\"}],\"version\":1},\"drop_of_blood\":{\"id\":\"drop_of_blood\",\"name\":\"Drop of Blood\",\"keywords\":[\"period\",\"hurt\",\"harm\",\"wound\"],\"skins\":[{\"unified\":\"1fa78\",\"native\":\"\uD83E\uDE78\"}],\"version\":12},\"pill\":{\"id\":\"pill\",\"name\":\"Pill\",\"keywords\":[\"health\",\"medicine\",\"doctor\",\"pharmacy\",\"drug\"],\"skins\":[{\"unified\":\"1f48a\",\"native\":\"\uD83D\uDC8A\"}],\"version\":1},\"adhesive_bandage\":{\"id\":\"adhesive_bandage\",\"name\":\"Adhesive Bandage\",\"keywords\":[\"heal\"],\"skins\":[{\"unified\":\"1fa79\",\"native\":\"\uD83E\uDE79\"}],\"version\":12},\"crutch\":{\"id\":\"crutch\",\"name\":\"Crutch\",\"keywords\":[\"accessibility\",\"assist\"],\"skins\":[{\"unified\":\"1fa7c\",\"native\":\"\uD83E\uDE7C\"}],\"version\":14},\"stethoscope\":{\"id\":\"stethoscope\",\"name\":\"Stethoscope\",\"keywords\":[\"health\"],\"skins\":[{\"unified\":\"1fa7a\",\"native\":\"\uD83E\uDE7A\"}],\"version\":12},\"x-ray\":{\"id\":\"x-ray\",\"name\":\"X-Ray\",\"keywords\":[\"x\",\"ray\",\"skeleton\",\"medicine\"],\"skins\":[{\"unified\":\"1fa7b\",\"native\":\"\uD83E\uDE7B\"}],\"version\":14},\"door\":{\"id\":\"door\",\"name\":\"Door\",\"keywords\":[\"house\",\"entry\",\"exit\"],\"skins\":[{\"unified\":\"1f6aa\",\"native\":\"\uD83D\uDEAA\"}],\"version\":1},\"elevator\":{\"id\":\"elevator\",\"name\":\"Elevator\",\"keywords\":[\"lift\"],\"skins\":[{\"unified\":\"1f6d7\",\"native\":\"\uD83D\uDED7\"}],\"version\":13},\"mirror\":{\"id\":\"mirror\",\"name\":\"Mirror\",\"keywords\":[\"reflection\"],\"skins\":[{\"unified\":\"1fa9e\",\"native\":\"\uD83E\uDE9E\"}],\"version\":13},\"window\":{\"id\":\"window\",\"name\":\"Window\",\"keywords\":[\"scenery\"],\"skins\":[{\"unified\":\"1fa9f\",\"native\":\"\uD83E\uDE9F\"}],\"version\":13},\"bed\":{\"id\":\"bed\",\"name\":\"Bed\",\"keywords\":[\"sleep\",\"rest\"],\"skins\":[{\"unified\":\"1f6cf-fe0f\",\"native\":\"\uD83D\uDECF\uFE0F\"}],\"version\":1},\"couch_and_lamp\":{\"id\":\"couch_and_lamp\",\"name\":\"Couch and Lamp\",\"keywords\":[\"read\",\"chill\"],\"skins\":[{\"unified\":\"1f6cb-fe0f\",\"native\":\"\uD83D\uDECB\uFE0F\"}],\"version\":1},\"chair\":{\"id\":\"chair\",\"name\":\"Chair\",\"keywords\":[\"sit\",\"furniture\"],\"skins\":[{\"unified\":\"1fa91\",\"native\":\"\uD83E\uDE91\"}],\"version\":12},\"toilet\":{\"id\":\"toilet\",\"name\":\"Toilet\",\"keywords\":[\"restroom\",\"wc\",\"washroom\",\"bathroom\",\"potty\"],\"skins\":[{\"unified\":\"1f6bd\",\"native\":\"\uD83D\uDEBD\"}],\"version\":1},\"plunger\":{\"id\":\"plunger\",\"name\":\"Plunger\",\"keywords\":[\"toilet\"],\"skins\":[{\"unified\":\"1faa0\",\"native\":\"\uD83E\uDEA0\"}],\"version\":13},\"shower\":{\"id\":\"shower\",\"name\":\"Shower\",\"keywords\":[\"clean\",\"water\",\"bathroom\"],\"skins\":[{\"unified\":\"1f6bf\",\"native\":\"\uD83D\uDEBF\"}],\"version\":1},\"bathtub\":{\"id\":\"bathtub\",\"name\":\"Bathtub\",\"keywords\":[\"clean\",\"shower\",\"bathroom\"],\"skins\":[{\"unified\":\"1f6c1\",\"native\":\"\uD83D\uDEC1\"}],\"version\":1},\"mouse_trap\":{\"id\":\"mouse_trap\",\"name\":\"Mouse Trap\",\"keywords\":[\"cheese\"],\"skins\":[{\"unified\":\"1faa4\",\"native\":\"\uD83E\uDEA4\"}],\"version\":13},\"razor\":{\"id\":\"razor\",\"name\":\"Razor\",\"keywords\":[\"cut\"],\"skins\":[{\"unified\":\"1fa92\",\"native\":\"\uD83E\uDE92\"}],\"version\":12},\"lotion_bottle\":{\"id\":\"lotion_bottle\",\"name\":\"Lotion Bottle\",\"keywords\":[\"moisturizer\",\"sunscreen\"],\"skins\":[{\"unified\":\"1f9f4\",\"native\":\"\uD83E\uDDF4\"}],\"version\":11},\"safety_pin\":{\"id\":\"safety_pin\",\"name\":\"Safety Pin\",\"keywords\":[\"diaper\"],\"skins\":[{\"unified\":\"1f9f7\",\"native\":\"\uD83E\uDDF7\"}],\"version\":11},\"broom\":{\"id\":\"broom\",\"name\":\"Broom\",\"keywords\":[\"cleaning\",\"sweeping\",\"witch\"],\"skins\":[{\"unified\":\"1f9f9\",\"native\":\"\uD83E\uDDF9\"}],\"version\":11},\"basket\":{\"id\":\"basket\",\"name\":\"Basket\",\"keywords\":[\"laundry\"],\"skins\":[{\"unified\":\"1f9fa\",\"native\":\"\uD83E\uDDFA\"}],\"version\":11},\"roll_of_paper\":{\"id\":\"roll_of_paper\",\"name\":\"Roll of Paper\",\"keywords\":[],\"skins\":[{\"unified\":\"1f9fb\",\"native\":\"\uD83E\uDDFB\"}],\"version\":11},\"bucket\":{\"id\":\"bucket\",\"name\":\"Bucket\",\"keywords\":[\"water\",\"container\"],\"skins\":[{\"unified\":\"1faa3\",\"native\":\"\uD83E\uDEA3\"}],\"version\":13},\"soap\":{\"id\":\"soap\",\"name\":\"Soap\",\"keywords\":[\"bar\",\"bathing\",\"cleaning\",\"lather\"],\"skins\":[{\"unified\":\"1f9fc\",\"native\":\"\uD83E\uDDFC\"}],\"version\":11},\"bubbles\":{\"id\":\"bubbles\",\"name\":\"Bubbles\",\"keywords\":[\"soap\",\"fun\",\"carbonation\",\"sparkling\"],\"skins\":[{\"unified\":\"1fae7\",\"native\":\"\uD83E\uDEE7\"}],\"version\":14},\"toothbrush\":{\"id\":\"toothbrush\",\"name\":\"Toothbrush\",\"keywords\":[\"hygiene\",\"dental\"],\"skins\":[{\"unified\":\"1faa5\",\"native\":\"\uD83E\uDEA5\"}],\"version\":13},\"sponge\":{\"id\":\"sponge\",\"name\":\"Sponge\",\"keywords\":[\"absorbing\",\"cleaning\",\"porous\"],\"skins\":[{\"unified\":\"1f9fd\",\"native\":\"\uD83E\uDDFD\"}],\"version\":11},\"fire_extinguisher\":{\"id\":\"fire_extinguisher\",\"name\":\"Fire Extinguisher\",\"keywords\":[\"quench\"],\"skins\":[{\"unified\":\"1f9ef\",\"native\":\"\uD83E\uDDEF\"}],\"version\":11},\"shopping_trolley\":{\"id\":\"shopping_trolley\",\"name\":\"Shopping Cart\",\"keywords\":[\"trolley\"],\"skins\":[{\"unified\":\"1f6d2\",\"native\":\"\uD83D\uDED2\"}],\"version\":3},\"smoking\":{\"id\":\"smoking\",\"name\":\"Cigarette\",\"keywords\":[\"smoking\",\"kills\",\"tobacco\",\"joint\",\"smoke\"],\"skins\":[{\"unified\":\"1f6ac\",\"native\":\"\uD83D\uDEAC\"}],\"version\":1},\"coffin\":{\"id\":\"coffin\",\"name\":\"Coffin\",\"keywords\":[\"vampire\",\"dead\",\"die\",\"death\",\"rip\",\"graveyard\",\"cemetery\",\"casket\",\"funeral\",\"box\"],\"skins\":[{\"unified\":\"26b0-fe0f\",\"native\":\"\u26B0\uFE0F\"}],\"version\":1},\"headstone\":{\"id\":\"headstone\",\"name\":\"Headstone\",\"keywords\":[\"death\",\"rip\",\"grave\"],\"skins\":[{\"unified\":\"1faa6\",\"native\":\"\uD83E\uDEA6\"}],\"version\":13},\"funeral_urn\":{\"id\":\"funeral_urn\",\"name\":\"Funeral Urn\",\"keywords\":[\"dead\",\"die\",\"death\",\"rip\",\"ashes\"],\"skins\":[{\"unified\":\"26b1-fe0f\",\"native\":\"\u26B1\uFE0F\"}],\"version\":1},\"moyai\":{\"id\":\"moyai\",\"name\":\"Moai\",\"keywords\":[\"moyai\",\"rock\",\"easter\",\"island\"],\"skins\":[{\"unified\":\"1f5ff\",\"native\":\"\uD83D\uDDFF\"}],\"version\":1},\"placard\":{\"id\":\"placard\",\"name\":\"Placard\",\"keywords\":[\"announcement\"],\"skins\":[{\"unified\":\"1faa7\",\"native\":\"\uD83E\uDEA7\"}],\"version\":13},\"identification_card\":{\"id\":\"identification_card\",\"name\":\"Identification Card\",\"keywords\":[\"document\"],\"skins\":[{\"unified\":\"1faaa\",\"native\":\"\uD83E\uDEAA\"}],\"version\":14},\"atm\":{\"id\":\"atm\",\"name\":\"Atm Sign\",\"keywords\":[\"money\",\"sales\",\"cash\",\"blue\",\"square\",\"payment\",\"bank\"],\"skins\":[{\"unified\":\"1f3e7\",\"native\":\"\uD83C\uDFE7\"}],\"version\":1},\"put_litter_in_its_place\":{\"id\":\"put_litter_in_its_place\",\"name\":\"Litter in Bin Sign\",\"keywords\":[\"put\",\"its\",\"place\",\"blue\",\"square\",\"human\",\"info\"],\"skins\":[{\"unified\":\"1f6ae\",\"native\":\"\uD83D\uDEAE\"}],\"version\":1},\"potable_water\":{\"id\":\"potable_water\",\"name\":\"Potable Water\",\"keywords\":[\"blue\",\"square\",\"liquid\",\"restroom\",\"cleaning\",\"faucet\"],\"skins\":[{\"unified\":\"1f6b0\",\"native\":\"\uD83D\uDEB0\"}],\"version\":1},\"wheelchair\":{\"id\":\"wheelchair\",\"name\":\"Wheelchair Symbol\",\"keywords\":[\"blue\",\"square\",\"disabled\",\"accessibility\"],\"skins\":[{\"unified\":\"267f\",\"native\":\"\u267F\"}],\"version\":1},\"mens\":{\"id\":\"mens\",\"name\":\"Men\u2019s Room\",\"keywords\":[\"mens\",\"men\",\"s\",\"toilet\",\"restroom\",\"wc\",\"blue\",\"square\",\"gender\",\"male\"],\"skins\":[{\"unified\":\"1f6b9\",\"native\":\"\uD83D\uDEB9\"}],\"version\":1},\"womens\":{\"id\":\"womens\",\"name\":\"Women\u2019s Room\",\"keywords\":[\"womens\",\"women\",\"s\",\"purple\",\"square\",\"woman\",\"female\",\"toilet\",\"loo\",\"restroom\",\"gender\"],\"skins\":[{\"unified\":\"1f6ba\",\"native\":\"\uD83D\uDEBA\"}],\"version\":1},\"restroom\":{\"id\":\"restroom\",\"name\":\"Restroom\",\"keywords\":[\"blue\",\"square\",\"toilet\",\"refresh\",\"wc\",\"gender\"],\"skins\":[{\"unified\":\"1f6bb\",\"native\":\"\uD83D\uDEBB\"}],\"version\":1},\"baby_symbol\":{\"id\":\"baby_symbol\",\"name\":\"Baby Symbol\",\"keywords\":[\"orange\",\"square\",\"child\"],\"skins\":[{\"unified\":\"1f6bc\",\"native\":\"\uD83D\uDEBC\"}],\"version\":1},\"wc\":{\"id\":\"wc\",\"name\":\"Water Closet\",\"keywords\":[\"wc\",\"toilet\",\"restroom\",\"blue\",\"square\"],\"skins\":[{\"unified\":\"1f6be\",\"native\":\"\uD83D\uDEBE\"}],\"version\":1},\"passport_control\":{\"id\":\"passport_control\",\"name\":\"Passport Control\",\"keywords\":[\"custom\",\"blue\",\"square\"],\"skins\":[{\"unified\":\"1f6c2\",\"native\":\"\uD83D\uDEC2\"}],\"version\":1},\"customs\":{\"id\":\"customs\",\"name\":\"Customs\",\"keywords\":[\"passport\",\"border\",\"blue\",\"square\"],\"skins\":[{\"unified\":\"1f6c3\",\"native\":\"\uD83D\uDEC3\"}],\"version\":1},\"baggage_claim\":{\"id\":\"baggage_claim\",\"name\":\"Baggage Claim\",\"keywords\":[\"blue\",\"square\",\"airport\",\"transport\"],\"skins\":[{\"unified\":\"1f6c4\",\"native\":\"\uD83D\uDEC4\"}],\"version\":1},\"left_luggage\":{\"id\":\"left_luggage\",\"name\":\"Left Luggage\",\"keywords\":[\"blue\",\"square\",\"travel\"],\"skins\":[{\"unified\":\"1f6c5\",\"native\":\"\uD83D\uDEC5\"}],\"version\":1},\"warning\":{\"id\":\"warning\",\"name\":\"Warning\",\"keywords\":[\"exclamation\",\"wip\",\"alert\",\"error\",\"problem\",\"issue\"],\"skins\":[{\"unified\":\"26a0-fe0f\",\"native\":\"\u26A0\uFE0F\"}],\"version\":1},\"children_crossing\":{\"id\":\"children_crossing\",\"name\":\"Children Crossing\",\"keywords\":[\"school\",\"warning\",\"danger\",\"sign\",\"driving\",\"yellow\",\"diamond\"],\"skins\":[{\"unified\":\"1f6b8\",\"native\":\"\uD83D\uDEB8\"}],\"version\":1},\"no_entry\":{\"id\":\"no_entry\",\"name\":\"No Entry\",\"keywords\":[\"limit\",\"security\",\"privacy\",\"bad\",\"denied\",\"stop\",\"circle\"],\"skins\":[{\"unified\":\"26d4\",\"native\":\"\u26D4\"}],\"version\":1},\"no_entry_sign\":{\"id\":\"no_entry_sign\",\"name\":\"Prohibited\",\"keywords\":[\"no\",\"entry\",\"sign\",\"forbid\",\"stop\",\"limit\",\"denied\",\"disallow\",\"circle\"],\"skins\":[{\"unified\":\"1f6ab\",\"native\":\"\uD83D\uDEAB\"}],\"version\":1},\"no_bicycles\":{\"id\":\"no_bicycles\",\"name\":\"No Bicycles\",\"keywords\":[\"cyclist\",\"prohibited\",\"circle\"],\"skins\":[{\"unified\":\"1f6b3\",\"native\":\"\uD83D\uDEB3\"}],\"version\":1},\"no_smoking\":{\"id\":\"no_smoking\",\"name\":\"No Smoking\",\"keywords\":[\"cigarette\",\"blue\",\"square\",\"smell\",\"smoke\"],\"skins\":[{\"unified\":\"1f6ad\",\"native\":\"\uD83D\uDEAD\"}],\"version\":1},\"do_not_litter\":{\"id\":\"do_not_litter\",\"name\":\"No Littering\",\"keywords\":[\"do\",\"not\",\"litter\",\"trash\",\"bin\",\"garbage\",\"circle\"],\"skins\":[{\"unified\":\"1f6af\",\"native\":\"\uD83D\uDEAF\"}],\"version\":1},\"non-potable_water\":{\"id\":\"non-potable_water\",\"name\":\"Non-Potable Water\",\"keywords\":[\"non\",\"potable\",\"drink\",\"faucet\",\"tap\",\"circle\"],\"skins\":[{\"unified\":\"1f6b1\",\"native\":\"\uD83D\uDEB1\"}],\"version\":1},\"no_pedestrians\":{\"id\":\"no_pedestrians\",\"name\":\"No Pedestrians\",\"keywords\":[\"rules\",\"crossing\",\"walking\",\"circle\"],\"skins\":[{\"unified\":\"1f6b7\",\"native\":\"\uD83D\uDEB7\"}],\"version\":1},\"no_mobile_phones\":{\"id\":\"no_mobile_phones\",\"name\":\"No Mobile Phones\",\"keywords\":[\"iphone\",\"mute\",\"circle\"],\"skins\":[{\"unified\":\"1f4f5\",\"native\":\"\uD83D\uDCF5\"}],\"version\":1},\"underage\":{\"id\":\"underage\",\"name\":\"No One Under Eighteen\",\"keywords\":[\"underage\",\"18\",\"drink\",\"pub\",\"night\",\"minor\",\"circle\"],\"skins\":[{\"unified\":\"1f51e\",\"native\":\"\uD83D\uDD1E\"}],\"version\":1},\"radioactive_sign\":{\"id\":\"radioactive_sign\",\"name\":\"Radioactive\",\"keywords\":[\"sign\",\"nuclear\",\"danger\"],\"skins\":[{\"unified\":\"2622-fe0f\",\"native\":\"\u2622\uFE0F\"}],\"version\":1},\"biohazard_sign\":{\"id\":\"biohazard_sign\",\"name\":\"Biohazard\",\"keywords\":[\"sign\",\"danger\"],\"skins\":[{\"unified\":\"2623-fe0f\",\"native\":\"\u2623\uFE0F\"}],\"version\":1},\"arrow_up\":{\"id\":\"arrow_up\",\"name\":\"Up Arrow\",\"keywords\":[\"blue\",\"square\",\"continue\",\"top\",\"direction\"],\"skins\":[{\"unified\":\"2b06-fe0f\",\"native\":\"\u2B06\uFE0F\"}],\"version\":1},\"arrow_upper_right\":{\"id\":\"arrow_upper_right\",\"name\":\"Up-Right Arrow\",\"keywords\":[\"upper\",\"right\",\"up\",\"blue\",\"square\",\"point\",\"direction\",\"diagonal\",\"northeast\"],\"skins\":[{\"unified\":\"2197-fe0f\",\"native\":\"\u2197\uFE0F\"}],\"version\":1},\"arrow_right\":{\"id\":\"arrow_right\",\"name\":\"Right Arrow\",\"keywords\":[\"blue\",\"square\",\"next\"],\"skins\":[{\"unified\":\"27a1-fe0f\",\"native\":\"\u27A1\uFE0F\"}],\"version\":1},\"arrow_lower_right\":{\"id\":\"arrow_lower_right\",\"name\":\"South East Arrow\",\"keywords\":[\"lower\",\"right\",\"down\",\"blue\",\"square\",\"direction\",\"diagonal\",\"southeast\"],\"skins\":[{\"unified\":\"2198-fe0f\",\"native\":\"\u2198\uFE0F\"}],\"version\":1},\"arrow_down\":{\"id\":\"arrow_down\",\"name\":\"Down Arrow\",\"keywords\":[\"blue\",\"square\",\"direction\",\"bottom\"],\"skins\":[{\"unified\":\"2b07-fe0f\",\"native\":\"\u2B07\uFE0F\"}],\"version\":1},\"arrow_lower_left\":{\"id\":\"arrow_lower_left\",\"name\":\"Down-Left Arrow\",\"keywords\":[\"lower\",\"left\",\"down\",\"blue\",\"square\",\"direction\",\"diagonal\",\"southwest\"],\"skins\":[{\"unified\":\"2199-fe0f\",\"native\":\"\u2199\uFE0F\"}],\"version\":1},\"arrow_left\":{\"id\":\"arrow_left\",\"name\":\"Left Arrow\",\"keywords\":[\"blue\",\"square\",\"previous\",\"back\"],\"skins\":[{\"unified\":\"2b05-fe0f\",\"native\":\"\u2B05\uFE0F\"}],\"version\":1},\"arrow_upper_left\":{\"id\":\"arrow_upper_left\",\"name\":\"Up-Left Arrow\",\"keywords\":[\"upper\",\"left\",\"up\",\"blue\",\"square\",\"point\",\"direction\",\"diagonal\",\"northwest\"],\"skins\":[{\"unified\":\"2196-fe0f\",\"native\":\"\u2196\uFE0F\"}],\"version\":1},\"arrow_up_down\":{\"id\":\"arrow_up_down\",\"name\":\"Up Down Arrow\",\"keywords\":[\"blue\",\"square\",\"direction\",\"way\",\"vertical\"],\"skins\":[{\"unified\":\"2195-fe0f\",\"native\":\"\u2195\uFE0F\"}],\"version\":1},\"left_right_arrow\":{\"id\":\"left_right_arrow\",\"name\":\"Left Right Arrow\",\"keywords\":[\"shape\",\"direction\",\"horizontal\",\"sideways\"],\"skins\":[{\"unified\":\"2194-fe0f\",\"native\":\"\u2194\uFE0F\"}],\"version\":1},\"leftwards_arrow_with_hook\":{\"id\":\"leftwards_arrow_with_hook\",\"name\":\"Right Arrow Curving Left\",\"keywords\":[\"leftwards\",\"with\",\"hook\",\"back\",\"return\",\"blue\",\"square\",\"undo\",\"enter\"],\"skins\":[{\"unified\":\"21a9-fe0f\",\"native\":\"\u21A9\uFE0F\"}],\"version\":1},\"arrow_right_hook\":{\"id\":\"arrow_right_hook\",\"name\":\"Left Arrow Curving Right\",\"keywords\":[\"hook\",\"blue\",\"square\",\"return\",\"rotate\",\"direction\"],\"skins\":[{\"unified\":\"21aa-fe0f\",\"native\":\"\u21AA\uFE0F\"}],\"version\":1},\"arrow_heading_up\":{\"id\":\"arrow_heading_up\",\"name\":\"Right Arrow Curving Up\",\"keywords\":[\"heading\",\"blue\",\"square\",\"direction\",\"top\"],\"skins\":[{\"unified\":\"2934-fe0f\",\"native\":\"\u2934\uFE0F\"}],\"version\":1},\"arrow_heading_down\":{\"id\":\"arrow_heading_down\",\"name\":\"Right Arrow Curving Down\",\"keywords\":[\"heading\",\"blue\",\"square\",\"direction\",\"bottom\"],\"skins\":[{\"unified\":\"2935-fe0f\",\"native\":\"\u2935\uFE0F\"}],\"version\":1},\"arrows_clockwise\":{\"id\":\"arrows_clockwise\",\"name\":\"Clockwise Vertical Arrows\",\"keywords\":[\"sync\",\"cycle\",\"round\",\"repeat\"],\"skins\":[{\"unified\":\"1f503\",\"native\":\"\uD83D\uDD03\"}],\"version\":1},\"arrows_counterclockwise\":{\"id\":\"arrows_counterclockwise\",\"name\":\"Counterclockwise Arrows Button\",\"keywords\":[\"blue\",\"square\",\"sync\",\"cycle\"],\"skins\":[{\"unified\":\"1f504\",\"native\":\"\uD83D\uDD04\"}],\"version\":1},\"back\":{\"id\":\"back\",\"name\":\"Back Arrow\",\"keywords\":[\"words\",\"return\"],\"skins\":[{\"unified\":\"1f519\",\"native\":\"\uD83D\uDD19\"}],\"version\":1},\"end\":{\"id\":\"end\",\"name\":\"End Arrow\",\"keywords\":[\"words\"],\"skins\":[{\"unified\":\"1f51a\",\"native\":\"\uD83D\uDD1A\"}],\"version\":1},\"on\":{\"id\":\"on\",\"name\":\"On! Arrow\",\"keywords\":[\"on\",\"words\"],\"skins\":[{\"unified\":\"1f51b\",\"native\":\"\uD83D\uDD1B\"}],\"version\":1},\"soon\":{\"id\":\"soon\",\"name\":\"Soon Arrow\",\"keywords\":[\"words\"],\"skins\":[{\"unified\":\"1f51c\",\"native\":\"\uD83D\uDD1C\"}],\"version\":1},\"top\":{\"id\":\"top\",\"name\":\"Top Arrow\",\"keywords\":[\"words\",\"blue\",\"square\"],\"skins\":[{\"unified\":\"1f51d\",\"native\":\"\uD83D\uDD1D\"}],\"version\":1},\"place_of_worship\":{\"id\":\"place_of_worship\",\"name\":\"Place of Worship\",\"keywords\":[\"religion\",\"church\",\"temple\",\"prayer\"],\"skins\":[{\"unified\":\"1f6d0\",\"native\":\"\uD83D\uDED0\"}],\"version\":1},\"atom_symbol\":{\"id\":\"atom_symbol\",\"name\":\"Atom Symbol\",\"keywords\":[\"science\",\"physics\",\"chemistry\"],\"skins\":[{\"unified\":\"269b-fe0f\",\"native\":\"\u269B\uFE0F\"}],\"version\":1},\"om_symbol\":{\"id\":\"om_symbol\",\"name\":\"Om\",\"keywords\":[\"symbol\",\"hinduism\",\"buddhism\",\"sikhism\",\"jainism\"],\"skins\":[{\"unified\":\"1f549-fe0f\",\"native\":\"\uD83D\uDD49\uFE0F\"}],\"version\":1},\"star_of_david\":{\"id\":\"star_of_david\",\"name\":\"Star of David\",\"keywords\":[\"judaism\"],\"skins\":[{\"unified\":\"2721-fe0f\",\"native\":\"\u2721\uFE0F\"}],\"version\":1},\"wheel_of_dharma\":{\"id\":\"wheel_of_dharma\",\"name\":\"Wheel of Dharma\",\"keywords\":[\"hinduism\",\"buddhism\",\"sikhism\",\"jainism\"],\"skins\":[{\"unified\":\"2638-fe0f\",\"native\":\"\u2638\uFE0F\"}],\"version\":1},\"yin_yang\":{\"id\":\"yin_yang\",\"name\":\"Yin Yang\",\"keywords\":[\"balance\"],\"skins\":[{\"unified\":\"262f-fe0f\",\"native\":\"\u262F\uFE0F\"}],\"version\":1},\"latin_cross\":{\"id\":\"latin_cross\",\"name\":\"Latin Cross\",\"keywords\":[\"christianity\"],\"skins\":[{\"unified\":\"271d-fe0f\",\"native\":\"\u271D\uFE0F\"}],\"version\":1},\"orthodox_cross\":{\"id\":\"orthodox_cross\",\"name\":\"Orthodox Cross\",\"keywords\":[\"suppedaneum\",\"religion\"],\"skins\":[{\"unified\":\"2626-fe0f\",\"native\":\"\u2626\uFE0F\"}],\"version\":1},\"star_and_crescent\":{\"id\":\"star_and_crescent\",\"name\":\"Star and Crescent\",\"keywords\":[\"islam\"],\"skins\":[{\"unified\":\"262a-fe0f\",\"native\":\"\u262A\uFE0F\"}],\"version\":1},\"peace_symbol\":{\"id\":\"peace_symbol\",\"name\":\"Peace Symbol\",\"keywords\":[\"hippie\"],\"skins\":[{\"unified\":\"262e-fe0f\",\"native\":\"\u262E\uFE0F\"}],\"version\":1},\"menorah_with_nine_branches\":{\"id\":\"menorah_with_nine_branches\",\"name\":\"Menorah\",\"keywords\":[\"with\",\"nine\",\"branches\",\"hanukkah\",\"candles\",\"jewish\"],\"skins\":[{\"unified\":\"1f54e\",\"native\":\"\uD83D\uDD4E\"}],\"version\":1},\"six_pointed_star\":{\"id\":\"six_pointed_star\",\"name\":\"Dotted Six-Pointed Star\",\"keywords\":[\"six\",\"pointed\",\"purple\",\"square\",\"religion\",\"jewish\",\"hexagram\"],\"skins\":[{\"unified\":\"1f52f\",\"native\":\"\uD83D\uDD2F\"}],\"version\":1},\"aries\":{\"id\":\"aries\",\"name\":\"Aries\",\"keywords\":[\"sign\",\"purple\",\"square\",\"zodiac\",\"astrology\"],\"skins\":[{\"unified\":\"2648\",\"native\":\"\u2648\"}],\"version\":1},\"taurus\":{\"id\":\"taurus\",\"name\":\"Taurus\",\"keywords\":[\"purple\",\"square\",\"sign\",\"zodiac\",\"astrology\"],\"skins\":[{\"unified\":\"2649\",\"native\":\"\u2649\"}],\"version\":1},\"gemini\":{\"id\":\"gemini\",\"name\":\"Gemini\",\"keywords\":[\"sign\",\"zodiac\",\"purple\",\"square\",\"astrology\"],\"skins\":[{\"unified\":\"264a\",\"native\":\"\u264A\"}],\"version\":1},\"cancer\":{\"id\":\"cancer\",\"name\":\"Cancer\",\"keywords\":[\"sign\",\"zodiac\",\"purple\",\"square\",\"astrology\"],\"skins\":[{\"unified\":\"264b\",\"native\":\"\u264B\"}],\"version\":1},\"leo\":{\"id\":\"leo\",\"name\":\"Leo\",\"keywords\":[\"sign\",\"purple\",\"square\",\"zodiac\",\"astrology\"],\"skins\":[{\"unified\":\"264c\",\"native\":\"\u264C\"}],\"version\":1},\"virgo\":{\"id\":\"virgo\",\"name\":\"Virgo\",\"keywords\":[\"sign\",\"zodiac\",\"purple\",\"square\",\"astrology\"],\"skins\":[{\"unified\":\"264d\",\"native\":\"\u264D\"}],\"version\":1},\"libra\":{\"id\":\"libra\",\"name\":\"Libra\",\"keywords\":[\"sign\",\"purple\",\"square\",\"zodiac\",\"astrology\"],\"skins\":[{\"unified\":\"264e\",\"native\":\"\u264E\"}],\"version\":1},\"scorpius\":{\"id\":\"scorpius\",\"name\":\"Scorpio\",\"keywords\":[\"scorpius\",\"sign\",\"zodiac\",\"purple\",\"square\",\"astrology\"],\"skins\":[{\"unified\":\"264f\",\"native\":\"\u264F\"}],\"version\":1},\"sagittarius\":{\"id\":\"sagittarius\",\"name\":\"Sagittarius\",\"keywords\":[\"sign\",\"zodiac\",\"purple\",\"square\",\"astrology\"],\"skins\":[{\"unified\":\"2650\",\"native\":\"\u2650\"}],\"version\":1},\"capricorn\":{\"id\":\"capricorn\",\"name\":\"Capricorn\",\"keywords\":[\"sign\",\"zodiac\",\"purple\",\"square\",\"astrology\"],\"skins\":[{\"unified\":\"2651\",\"native\":\"\u2651\"}],\"version\":1},\"aquarius\":{\"id\":\"aquarius\",\"name\":\"Aquarius\",\"keywords\":[\"sign\",\"purple\",\"square\",\"zodiac\",\"astrology\"],\"skins\":[{\"unified\":\"2652\",\"native\":\"\u2652\"}],\"version\":1},\"pisces\":{\"id\":\"pisces\",\"name\":\"Pisces\",\"keywords\":[\"purple\",\"square\",\"sign\",\"zodiac\",\"astrology\"],\"skins\":[{\"unified\":\"2653\",\"native\":\"\u2653\"}],\"version\":1},\"ophiuchus\":{\"id\":\"ophiuchus\",\"name\":\"Ophiuchus\",\"keywords\":[\"sign\",\"purple\",\"square\",\"constellation\",\"astrology\"],\"skins\":[{\"unified\":\"26ce\",\"native\":\"\u26CE\"}],\"version\":1},\"twisted_rightwards_arrows\":{\"id\":\"twisted_rightwards_arrows\",\"name\":\"Shuffle Tracks Button\",\"keywords\":[\"twisted\",\"rightwards\",\"arrows\",\"blue\",\"square\",\"music\",\"random\"],\"skins\":[{\"unified\":\"1f500\",\"native\":\"\uD83D\uDD00\"}],\"version\":1},\"repeat\":{\"id\":\"repeat\",\"name\":\"Repeat Button\",\"keywords\":[\"loop\",\"record\"],\"skins\":[{\"unified\":\"1f501\",\"native\":\"\uD83D\uDD01\"}],\"version\":1},\"repeat_one\":{\"id\":\"repeat_one\",\"name\":\"Repeat Single Button\",\"keywords\":[\"one\",\"blue\",\"square\",\"loop\"],\"skins\":[{\"unified\":\"1f502\",\"native\":\"\uD83D\uDD02\"}],\"version\":1},\"arrow_forward\":{\"id\":\"arrow_forward\",\"name\":\"Play Button\",\"keywords\":[\"arrow\",\"forward\",\"blue\",\"square\",\"right\",\"direction\"],\"skins\":[{\"unified\":\"25b6-fe0f\",\"native\":\"\u25B6\uFE0F\"}],\"version\":1},\"fast_forward\":{\"id\":\"fast_forward\",\"name\":\"Fast-Forward Button\",\"keywords\":[\"fast\",\"forward\",\"blue\",\"square\",\"play\",\"speed\",\"continue\"],\"skins\":[{\"unified\":\"23e9\",\"native\":\"\u23E9\"}],\"version\":1},\"black_right_pointing_double_triangle_with_vertical_bar\":{\"id\":\"black_right_pointing_double_triangle_with_vertical_bar\",\"name\":\"Next Track Button\",\"keywords\":[\"black\",\"right\",\"pointing\",\"double\",\"triangle\",\"with\",\"vertical\",\"bar\",\"forward\",\"blue\",\"square\"],\"skins\":[{\"unified\":\"23ed-fe0f\",\"native\":\"\u23ED\uFE0F\"}],\"version\":1},\"black_right_pointing_triangle_with_double_vertical_bar\":{\"id\":\"black_right_pointing_triangle_with_double_vertical_bar\",\"name\":\"Play or Pause Button\",\"keywords\":[\"black\",\"right\",\"pointing\",\"triangle\",\"with\",\"double\",\"vertical\",\"bar\",\"blue\",\"square\"],\"skins\":[{\"unified\":\"23ef-fe0f\",\"native\":\"\u23EF\uFE0F\"}],\"version\":1},\"arrow_backward\":{\"id\":\"arrow_backward\",\"name\":\"Reverse Button\",\"keywords\":[\"arrow\",\"backward\",\"blue\",\"square\",\"left\",\"direction\"],\"skins\":[{\"unified\":\"25c0-fe0f\",\"native\":\"\u25C0\uFE0F\"}],\"version\":1},\"rewind\":{\"id\":\"rewind\",\"name\":\"Fast Reverse Button\",\"keywords\":[\"rewind\",\"play\",\"blue\",\"square\"],\"skins\":[{\"unified\":\"23ea\",\"native\":\"\u23EA\"}],\"version\":1},\"black_left_pointing_double_triangle_with_vertical_bar\":{\"id\":\"black_left_pointing_double_triangle_with_vertical_bar\",\"name\":\"Last Track Button\",\"keywords\":[\"black\",\"left\",\"pointing\",\"double\",\"triangle\",\"with\",\"vertical\",\"bar\",\"backward\"],\"skins\":[{\"unified\":\"23ee-fe0f\",\"native\":\"\u23EE\uFE0F\"}],\"version\":1},\"arrow_up_small\":{\"id\":\"arrow_up_small\",\"name\":\"Upwards Button\",\"keywords\":[\"arrow\",\"up\",\"small\",\"blue\",\"square\",\"triangle\",\"direction\",\"point\",\"forward\",\"top\"],\"skins\":[{\"unified\":\"1f53c\",\"native\":\"\uD83D\uDD3C\"}],\"version\":1},\"arrow_double_up\":{\"id\":\"arrow_double_up\",\"name\":\"Fast Up Button\",\"keywords\":[\"arrow\",\"double\",\"blue\",\"square\",\"direction\",\"top\"],\"skins\":[{\"unified\":\"23eb\",\"native\":\"\u23EB\"}],\"version\":1},\"arrow_down_small\":{\"id\":\"arrow_down_small\",\"name\":\"Downwards Button\",\"keywords\":[\"arrow\",\"down\",\"small\",\"blue\",\"square\",\"direction\",\"bottom\"],\"skins\":[{\"unified\":\"1f53d\",\"native\":\"\uD83D\uDD3D\"}],\"version\":1},\"arrow_double_down\":{\"id\":\"arrow_double_down\",\"name\":\"Fast Down Button\",\"keywords\":[\"arrow\",\"double\",\"blue\",\"square\",\"direction\",\"bottom\"],\"skins\":[{\"unified\":\"23ec\",\"native\":\"\u23EC\"}],\"version\":1},\"double_vertical_bar\":{\"id\":\"double_vertical_bar\",\"name\":\"Pause Button\",\"keywords\":[\"double\",\"vertical\",\"bar\",\"blue\",\"square\"],\"skins\":[{\"unified\":\"23f8-fe0f\",\"native\":\"\u23F8\uFE0F\"}],\"version\":1},\"black_square_for_stop\":{\"id\":\"black_square_for_stop\",\"name\":\"Stop Button\",\"keywords\":[\"black\",\"square\",\"for\",\"blue\"],\"skins\":[{\"unified\":\"23f9-fe0f\",\"native\":\"\u23F9\uFE0F\"}],\"version\":1},\"black_circle_for_record\":{\"id\":\"black_circle_for_record\",\"name\":\"Record Button\",\"keywords\":[\"black\",\"circle\",\"for\",\"blue\",\"square\"],\"skins\":[{\"unified\":\"23fa-fe0f\",\"native\":\"\u23FA\uFE0F\"}],\"version\":1},\"eject\":{\"id\":\"eject\",\"name\":\"Eject Button\",\"keywords\":[\"blue\",\"square\"],\"skins\":[{\"unified\":\"23cf-fe0f\",\"native\":\"\u23CF\uFE0F\"}],\"version\":1},\"cinema\":{\"id\":\"cinema\",\"name\":\"Cinema\",\"keywords\":[\"blue\",\"square\",\"record\",\"film\",\"movie\",\"curtain\",\"stage\",\"theater\"],\"skins\":[{\"unified\":\"1f3a6\",\"native\":\"\uD83C\uDFA6\"}],\"version\":1},\"low_brightness\":{\"id\":\"low_brightness\",\"name\":\"Dim Button\",\"keywords\":[\"low\",\"brightness\",\"sun\",\"afternoon\",\"warm\",\"summer\"],\"skins\":[{\"unified\":\"1f505\",\"native\":\"\uD83D\uDD05\"}],\"version\":1},\"high_brightness\":{\"id\":\"high_brightness\",\"name\":\"Bright Button\",\"keywords\":[\"high\",\"brightness\",\"sun\",\"light\"],\"skins\":[{\"unified\":\"1f506\",\"native\":\"\uD83D\uDD06\"}],\"version\":1},\"signal_strength\":{\"id\":\"signal_strength\",\"name\":\"Antenna Bars\",\"keywords\":[\"signal\",\"strength\",\"blue\",\"square\",\"reception\",\"phone\",\"internet\",\"connection\",\"wifi\",\"bluetooth\"],\"skins\":[{\"unified\":\"1f4f6\",\"native\":\"\uD83D\uDCF6\"}],\"version\":1},\"vibration_mode\":{\"id\":\"vibration_mode\",\"name\":\"Vibration Mode\",\"keywords\":[\"orange\",\"square\",\"phone\"],\"skins\":[{\"unified\":\"1f4f3\",\"native\":\"\uD83D\uDCF3\"}],\"version\":1},\"mobile_phone_off\":{\"id\":\"mobile_phone_off\",\"name\":\"Mobile Phone off\",\"keywords\":[\"mute\",\"orange\",\"square\",\"silence\",\"quiet\"],\"skins\":[{\"unified\":\"1f4f4\",\"native\":\"\uD83D\uDCF4\"}],\"version\":1},\"female_sign\":{\"id\":\"female_sign\",\"name\":\"Female Sign\",\"keywords\":[\"woman\",\"women\",\"lady\",\"girl\"],\"skins\":[{\"unified\":\"2640-fe0f\",\"native\":\"\u2640\uFE0F\"}],\"version\":4},\"male_sign\":{\"id\":\"male_sign\",\"name\":\"Male Sign\",\"keywords\":[\"man\",\"boy\",\"men\"],\"skins\":[{\"unified\":\"2642-fe0f\",\"native\":\"\u2642\uFE0F\"}],\"version\":4},\"transgender_symbol\":{\"id\":\"transgender_symbol\",\"name\":\"Transgender Symbol\",\"keywords\":[\"lgbtq\"],\"skins\":[{\"unified\":\"26a7-fe0f\",\"native\":\"\u26A7\uFE0F\"}],\"version\":13},\"heavy_multiplication_x\":{\"id\":\"heavy_multiplication_x\",\"name\":\"Multiply\",\"keywords\":[\"heavy\",\"multiplication\",\"x\",\"sign\",\"math\",\"calculation\"],\"skins\":[{\"unified\":\"2716-fe0f\",\"native\":\"\u2716\uFE0F\"}],\"version\":1},\"heavy_plus_sign\":{\"id\":\"heavy_plus_sign\",\"name\":\"Plus\",\"keywords\":[\"heavy\",\"sign\",\"math\",\"calculation\",\"addition\",\"more\",\"increase\"],\"skins\":[{\"unified\":\"2795\",\"native\":\"\u2795\"}],\"version\":1},\"heavy_minus_sign\":{\"id\":\"heavy_minus_sign\",\"name\":\"Minus\",\"keywords\":[\"heavy\",\"sign\",\"math\",\"calculation\",\"subtract\",\"less\"],\"skins\":[{\"unified\":\"2796\",\"native\":\"\u2796\"}],\"version\":1},\"heavy_division_sign\":{\"id\":\"heavy_division_sign\",\"name\":\"Divide\",\"keywords\":[\"heavy\",\"division\",\"sign\",\"math\",\"calculation\"],\"skins\":[{\"unified\":\"2797\",\"native\":\"\u2797\"}],\"version\":1},\"heavy_equals_sign\":{\"id\":\"heavy_equals_sign\",\"name\":\"Heavy Equals Sign\",\"keywords\":[\"math\"],\"skins\":[{\"unified\":\"1f7f0\",\"native\":\"\uD83D\uDFF0\"}],\"version\":14},\"infinity\":{\"id\":\"infinity\",\"name\":\"Infinity\",\"keywords\":[\"forever\"],\"skins\":[{\"unified\":\"267e-fe0f\",\"native\":\"\u267E\uFE0F\"}],\"version\":11},\"bangbang\":{\"id\":\"bangbang\",\"name\":\"Double Exclamation Mark\",\"keywords\":[\"bangbang\",\"surprise\"],\"skins\":[{\"unified\":\"203c-fe0f\",\"native\":\"\u203C\uFE0F\"}],\"version\":1},\"interrobang\":{\"id\":\"interrobang\",\"name\":\"Exclamation Question Mark\",\"keywords\":[\"interrobang\",\"wat\",\"punctuation\",\"surprise\"],\"skins\":[{\"unified\":\"2049-fe0f\",\"native\":\"\u2049\uFE0F\"}],\"version\":1},\"question\":{\"id\":\"question\",\"name\":\"Red Question Mark\",\"keywords\":[\"doubt\",\"confused\"],\"skins\":[{\"unified\":\"2753\",\"native\":\"\u2753\"}],\"version\":1},\"grey_question\":{\"id\":\"grey_question\",\"name\":\"White Question Mark\",\"keywords\":[\"grey\",\"doubts\",\"gray\",\"huh\",\"confused\"],\"skins\":[{\"unified\":\"2754\",\"native\":\"\u2754\"}],\"version\":1},\"grey_exclamation\":{\"id\":\"grey_exclamation\",\"name\":\"White Exclamation Mark\",\"keywords\":[\"grey\",\"surprise\",\"punctuation\",\"gray\",\"wow\",\"warning\"],\"skins\":[{\"unified\":\"2755\",\"native\":\"\u2755\"}],\"version\":1},\"exclamation\":{\"id\":\"exclamation\",\"name\":\"Red Exclamation Mark\",\"keywords\":[\"heavy\",\"danger\",\"surprise\",\"punctuation\",\"wow\",\"warning\"],\"skins\":[{\"unified\":\"2757\",\"native\":\"\u2757\"}],\"version\":1},\"wavy_dash\":{\"id\":\"wavy_dash\",\"name\":\"Wavy Dash\",\"keywords\":[\"draw\",\"line\",\"moustache\",\"mustache\",\"squiggle\",\"scribble\"],\"skins\":[{\"unified\":\"3030-fe0f\",\"native\":\"\u3030\uFE0F\"}],\"version\":1},\"currency_exchange\":{\"id\":\"currency_exchange\",\"name\":\"Currency Exchange\",\"keywords\":[\"money\",\"sales\",\"dollar\",\"travel\"],\"skins\":[{\"unified\":\"1f4b1\",\"native\":\"\uD83D\uDCB1\"}],\"version\":1},\"heavy_dollar_sign\":{\"id\":\"heavy_dollar_sign\",\"name\":\"Heavy Dollar Sign\",\"keywords\":[\"money\",\"sales\",\"payment\",\"currency\",\"buck\"],\"skins\":[{\"unified\":\"1f4b2\",\"native\":\"\uD83D\uDCB2\"}],\"version\":1},\"medical_symbol\":{\"id\":\"medical_symbol\",\"name\":\"Medical Symbol\",\"keywords\":[\"staff\",\"of\",\"aesculapius\",\"health\",\"hospital\"],\"skins\":[{\"unified\":\"2695-fe0f\",\"native\":\"\u2695\uFE0F\"}],\"version\":4},\"recycle\":{\"id\":\"recycle\",\"name\":\"Recycling Symbol\",\"keywords\":[\"recycle\",\"arrow\",\"environment\",\"garbage\",\"trash\"],\"skins\":[{\"unified\":\"267b-fe0f\",\"native\":\"\u267B\uFE0F\"}],\"version\":1},\"fleur_de_lis\":{\"id\":\"fleur_de_lis\",\"name\":\"Fleur-De-Lis\",\"keywords\":[\"fleur\",\"de\",\"lis\",\"decorative\",\"scout\"],\"skins\":[{\"unified\":\"269c-fe0f\",\"native\":\"\u269C\uFE0F\"}],\"version\":1},\"trident\":{\"id\":\"trident\",\"name\":\"Trident Emblem\",\"keywords\":[\"weapon\",\"spear\"],\"skins\":[{\"unified\":\"1f531\",\"native\":\"\uD83D\uDD31\"}],\"version\":1},\"name_badge\":{\"id\":\"name_badge\",\"name\":\"Name Badge\",\"keywords\":[\"fire\",\"forbid\"],\"skins\":[{\"unified\":\"1f4db\",\"native\":\"\uD83D\uDCDB\"}],\"version\":1},\"beginner\":{\"id\":\"beginner\",\"name\":\"Japanese Symbol for Beginner\",\"keywords\":[\"badge\",\"shield\"],\"skins\":[{\"unified\":\"1f530\",\"native\":\"\uD83D\uDD30\"}],\"version\":1},\"o\":{\"id\":\"o\",\"name\":\"Hollow Red Circle\",\"keywords\":[\"o\",\"round\"],\"skins\":[{\"unified\":\"2b55\",\"native\":\"\u2B55\"}],\"version\":1},\"white_check_mark\":{\"id\":\"white_check_mark\",\"name\":\"Check Mark Button\",\"keywords\":[\"white\",\"green\",\"square\",\"ok\",\"agree\",\"vote\",\"election\",\"answer\",\"tick\"],\"skins\":[{\"unified\":\"2705\",\"native\":\"\u2705\"}],\"version\":1},\"ballot_box_with_check\":{\"id\":\"ballot_box_with_check\",\"name\":\"Check Box with Check\",\"keywords\":[\"ballot\",\"ok\",\"agree\",\"confirm\",\"black\",\"square\",\"vote\",\"election\",\"yes\",\"tick\"],\"skins\":[{\"unified\":\"2611-fe0f\",\"native\":\"\u2611\uFE0F\"}],\"version\":1},\"heavy_check_mark\":{\"id\":\"heavy_check_mark\",\"name\":\"Check Mark\",\"keywords\":[\"heavy\",\"ok\",\"nike\",\"answer\",\"yes\",\"tick\"],\"skins\":[{\"unified\":\"2714-fe0f\",\"native\":\"\u2714\uFE0F\"}],\"version\":1},\"x\":{\"id\":\"x\",\"name\":\"Cross Mark\",\"keywords\":[\"x\",\"no\",\"delete\",\"remove\",\"cancel\",\"red\"],\"skins\":[{\"unified\":\"274c\",\"native\":\"\u274C\"}],\"version\":1},\"negative_squared_cross_mark\":{\"id\":\"negative_squared_cross_mark\",\"name\":\"Cross Mark Button\",\"keywords\":[\"negative\",\"squared\",\"x\",\"green\",\"square\",\"no\",\"deny\"],\"skins\":[{\"unified\":\"274e\",\"native\":\"\u274E\"}],\"version\":1},\"curly_loop\":{\"id\":\"curly_loop\",\"name\":\"Curly Loop\",\"keywords\":[\"scribble\",\"draw\",\"shape\",\"squiggle\"],\"skins\":[{\"unified\":\"27b0\",\"native\":\"\u27B0\"}],\"version\":1},\"loop\":{\"id\":\"loop\",\"name\":\"Double Curly Loop\",\"keywords\":[\"tape\",\"cassette\"],\"skins\":[{\"unified\":\"27bf\",\"native\":\"\u27BF\"}],\"version\":1},\"part_alternation_mark\":{\"id\":\"part_alternation_mark\",\"name\":\"Part Alternation Mark\",\"keywords\":[\"graph\",\"presentation\",\"stats\",\"business\",\"economics\",\"bad\"],\"skins\":[{\"unified\":\"303d-fe0f\",\"native\":\"\u303D\uFE0F\"}],\"version\":1},\"eight_spoked_asterisk\":{\"id\":\"eight_spoked_asterisk\",\"name\":\"Eight Spoked Asterisk\",\"keywords\":[\"star\",\"sparkle\",\"green\",\"square\"],\"skins\":[{\"unified\":\"2733-fe0f\",\"native\":\"\u2733\uFE0F\"}],\"version\":1},\"eight_pointed_black_star\":{\"id\":\"eight_pointed_black_star\",\"name\":\"Eight-Pointed Star\",\"keywords\":[\"eight\",\"pointed\",\"black\",\"orange\",\"square\",\"shape\",\"polygon\"],\"skins\":[{\"unified\":\"2734-fe0f\",\"native\":\"\u2734\uFE0F\"}],\"version\":1},\"sparkle\":{\"id\":\"sparkle\",\"name\":\"Sparkle\",\"keywords\":[\"stars\",\"green\",\"square\",\"awesome\",\"good\",\"fireworks\"],\"skins\":[{\"unified\":\"2747-fe0f\",\"native\":\"\u2747\uFE0F\"}],\"version\":1},\"copyright\":{\"id\":\"copyright\",\"name\":\"Copyright\",\"keywords\":[\"ip\",\"license\",\"circle\",\"law\",\"legal\"],\"skins\":[{\"unified\":\"00a9-fe0f\",\"native\":\"\u00A9\uFE0F\"}],\"version\":1},\"registered\":{\"id\":\"registered\",\"name\":\"Registered\",\"keywords\":[\"alphabet\",\"circle\"],\"skins\":[{\"unified\":\"00ae-fe0f\",\"native\":\"\u00AE\uFE0F\"}],\"version\":1},\"tm\":{\"id\":\"tm\",\"name\":\"Trade Mark\",\"keywords\":[\"tm\",\"trademark\",\"brand\",\"law\",\"legal\"],\"skins\":[{\"unified\":\"2122-fe0f\",\"native\":\"\u2122\uFE0F\"}],\"version\":1},\"hash\":{\"id\":\"hash\",\"name\":\"Hash Key\",\"keywords\":[\"keycap\",\"\",\"symbol\",\"blue\",\"square\",\"twitter\"],\"skins\":[{\"unified\":\"0023-fe0f-20e3\",\"native\":\"#\uFE0F\u20E3\"}],\"version\":1},\"keycap_star\":{\"id\":\"keycap_star\",\"name\":\"Keycap: *\",\"keywords\":[\"keycap\",\"star\",\"\"],\"skins\":[{\"unified\":\"002a-fe0f-20e3\",\"native\":\"*\uFE0F\u20E3\"}],\"version\":2},\"zero\":{\"id\":\"zero\",\"name\":\"Keycap 0\",\"keywords\":[\"zero\",\"numbers\",\"blue\",\"square\",\"null\"],\"skins\":[{\"unified\":\"0030-fe0f-20e3\",\"native\":\"0\uFE0F\u20E3\"}],\"version\":1},\"one\":{\"id\":\"one\",\"name\":\"Keycap 1\",\"keywords\":[\"one\",\"blue\",\"square\",\"numbers\"],\"skins\":[{\"unified\":\"0031-fe0f-20e3\",\"native\":\"1\uFE0F\u20E3\"}],\"version\":1},\"two\":{\"id\":\"two\",\"name\":\"Keycap 2\",\"keywords\":[\"two\",\"numbers\",\"prime\",\"blue\",\"square\"],\"skins\":[{\"unified\":\"0032-fe0f-20e3\",\"native\":\"2\uFE0F\u20E3\"}],\"version\":1},\"three\":{\"id\":\"three\",\"name\":\"Keycap 3\",\"keywords\":[\"three\",\"numbers\",\"prime\",\"blue\",\"square\"],\"skins\":[{\"unified\":\"0033-fe0f-20e3\",\"native\":\"3\uFE0F\u20E3\"}],\"version\":1},\"four\":{\"id\":\"four\",\"name\":\"Keycap 4\",\"keywords\":[\"four\",\"numbers\",\"blue\",\"square\"],\"skins\":[{\"unified\":\"0034-fe0f-20e3\",\"native\":\"4\uFE0F\u20E3\"}],\"version\":1},\"five\":{\"id\":\"five\",\"name\":\"Keycap 5\",\"keywords\":[\"five\",\"numbers\",\"blue\",\"square\",\"prime\"],\"skins\":[{\"unified\":\"0035-fe0f-20e3\",\"native\":\"5\uFE0F\u20E3\"}],\"version\":1},\"six\":{\"id\":\"six\",\"name\":\"Keycap 6\",\"keywords\":[\"six\",\"numbers\",\"blue\",\"square\"],\"skins\":[{\"unified\":\"0036-fe0f-20e3\",\"native\":\"6\uFE0F\u20E3\"}],\"version\":1},\"seven\":{\"id\":\"seven\",\"name\":\"Keycap 7\",\"keywords\":[\"seven\",\"numbers\",\"blue\",\"square\",\"prime\"],\"skins\":[{\"unified\":\"0037-fe0f-20e3\",\"native\":\"7\uFE0F\u20E3\"}],\"version\":1},\"eight\":{\"id\":\"eight\",\"name\":\"Keycap 8\",\"keywords\":[\"eight\",\"blue\",\"square\",\"numbers\"],\"skins\":[{\"unified\":\"0038-fe0f-20e3\",\"native\":\"8\uFE0F\u20E3\"}],\"version\":1},\"nine\":{\"id\":\"nine\",\"name\":\"Keycap 9\",\"keywords\":[\"nine\",\"blue\",\"square\",\"numbers\"],\"skins\":[{\"unified\":\"0039-fe0f-20e3\",\"native\":\"9\uFE0F\u20E3\"}],\"version\":1},\"keycap_ten\":{\"id\":\"keycap_ten\",\"name\":\"Keycap 10\",\"keywords\":[\"ten\",\"numbers\",\"blue\",\"square\"],\"skins\":[{\"unified\":\"1f51f\",\"native\":\"\uD83D\uDD1F\"}],\"version\":1},\"capital_abcd\":{\"id\":\"capital_abcd\",\"name\":\"Input Latin Uppercase\",\"keywords\":[\"capital\",\"abcd\",\"alphabet\",\"words\",\"blue\",\"square\"],\"skins\":[{\"unified\":\"1f520\",\"native\":\"\uD83D\uDD20\"}],\"version\":1},\"abcd\":{\"id\":\"abcd\",\"name\":\"Input Latin Lowercase\",\"keywords\":[\"abcd\",\"blue\",\"square\",\"alphabet\"],\"skins\":[{\"unified\":\"1f521\",\"native\":\"\uD83D\uDD21\"}],\"version\":1},\"symbols\":{\"id\":\"symbols\",\"name\":\"Input Symbols\",\"keywords\":[\"blue\",\"square\",\"music\",\"note\",\"ampersand\",\"percent\",\"glyphs\",\"characters\"],\"skins\":[{\"unified\":\"1f523\",\"native\":\"\uD83D\uDD23\"}],\"version\":1},\"abc\":{\"id\":\"abc\",\"name\":\"Input Latin Letters\",\"keywords\":[\"abc\",\"blue\",\"square\",\"alphabet\"],\"skins\":[{\"unified\":\"1f524\",\"native\":\"\uD83D\uDD24\"}],\"version\":1},\"a\":{\"id\":\"a\",\"name\":\"A Button (blood Type)\",\"keywords\":[\"red\",\"square\",\"alphabet\",\"letter\"],\"skins\":[{\"unified\":\"1f170-fe0f\",\"native\":\"\uD83C\uDD70\uFE0F\"}],\"version\":1},\"ab\":{\"id\":\"ab\",\"name\":\"Negative Squared Ab\",\"keywords\":[\"button\",\"red\",\"square\",\"alphabet\"],\"skins\":[{\"unified\":\"1f18e\",\"native\":\"\uD83C\uDD8E\"}],\"version\":1},\"b\":{\"id\":\"b\",\"name\":\"B Button (blood Type)\",\"keywords\":[\"red\",\"square\",\"alphabet\",\"letter\"],\"skins\":[{\"unified\":\"1f171-fe0f\",\"native\":\"\uD83C\uDD71\uFE0F\"}],\"version\":1},\"cl\":{\"id\":\"cl\",\"name\":\"Cl Button\",\"keywords\":[\"alphabet\",\"words\",\"red\",\"square\"],\"skins\":[{\"unified\":\"1f191\",\"native\":\"\uD83C\uDD91\"}],\"version\":1},\"cool\":{\"id\":\"cool\",\"name\":\"Cool Button\",\"keywords\":[\"words\",\"blue\",\"square\"],\"skins\":[{\"unified\":\"1f192\",\"native\":\"\uD83C\uDD92\"}],\"version\":1},\"free\":{\"id\":\"free\",\"name\":\"Free Button\",\"keywords\":[\"blue\",\"square\",\"words\"],\"skins\":[{\"unified\":\"1f193\",\"native\":\"\uD83C\uDD93\"}],\"version\":1},\"information_source\":{\"id\":\"information_source\",\"name\":\"Information\",\"keywords\":[\"source\",\"blue\",\"square\",\"alphabet\",\"letter\"],\"skins\":[{\"unified\":\"2139-fe0f\",\"native\":\"\u2139\uFE0F\"}],\"version\":1},\"id\":{\"id\":\"id\",\"name\":\"Id Button\",\"keywords\":[\"purple\",\"square\",\"words\"],\"skins\":[{\"unified\":\"1f194\",\"native\":\"\uD83C\uDD94\"}],\"version\":1},\"m\":{\"id\":\"m\",\"name\":\"Circled M\",\"keywords\":[\"alphabet\",\"blue\",\"circle\",\"letter\"],\"skins\":[{\"unified\":\"24c2-fe0f\",\"native\":\"\u24C2\uFE0F\"}],\"version\":1},\"new\":{\"id\":\"new\",\"name\":\"New Button\",\"keywords\":[\"blue\",\"square\",\"words\",\"start\"],\"skins\":[{\"unified\":\"1f195\",\"native\":\"\uD83C\uDD95\"}],\"version\":1},\"ng\":{\"id\":\"ng\",\"name\":\"Ng Button\",\"keywords\":[\"blue\",\"square\",\"words\",\"shape\",\"icon\"],\"skins\":[{\"unified\":\"1f196\",\"native\":\"\uD83C\uDD96\"}],\"version\":1},\"o2\":{\"id\":\"o2\",\"name\":\"O Button (blood Type)\",\"keywords\":[\"o2\",\"alphabet\",\"red\",\"square\",\"letter\"],\"skins\":[{\"unified\":\"1f17e-fe0f\",\"native\":\"\uD83C\uDD7E\uFE0F\"}],\"version\":1},\"ok\":{\"id\":\"ok\",\"name\":\"Ok Button\",\"keywords\":[\"good\",\"agree\",\"yes\",\"blue\",\"square\"],\"skins\":[{\"unified\":\"1f197\",\"native\":\"\uD83C\uDD97\"}],\"version\":1},\"parking\":{\"id\":\"parking\",\"name\":\"P Button\",\"keywords\":[\"parking\",\"cars\",\"blue\",\"square\",\"alphabet\",\"letter\"],\"skins\":[{\"unified\":\"1f17f-fe0f\",\"native\":\"\uD83C\uDD7F\uFE0F\"}],\"version\":1},\"sos\":{\"id\":\"sos\",\"name\":\"Sos Button\",\"keywords\":[\"help\",\"red\",\"square\",\"words\",\"emergency\",\"911\"],\"skins\":[{\"unified\":\"1f198\",\"native\":\"\uD83C\uDD98\"}],\"version\":1},\"up\":{\"id\":\"up\",\"name\":\"Up! Button\",\"keywords\":[\"up\",\"blue\",\"square\",\"above\",\"high\"],\"skins\":[{\"unified\":\"1f199\",\"native\":\"\uD83C\uDD99\"}],\"version\":1},\"vs\":{\"id\":\"vs\",\"name\":\"Vs Button\",\"keywords\":[\"words\",\"orange\",\"square\"],\"skins\":[{\"unified\":\"1f19a\",\"native\":\"\uD83C\uDD9A\"}],\"version\":1},\"koko\":{\"id\":\"koko\",\"name\":\"Squared Katakana Koko\",\"keywords\":[\"japanese\",\"here\",\"button\",\"blue\",\"square\",\"destination\"],\"skins\":[{\"unified\":\"1f201\",\"native\":\"\uD83C\uDE01\"}],\"version\":1},\"sa\":{\"id\":\"sa\",\"name\":\"Squared Katakana Sa\",\"keywords\":[\"japanese\",\"service\",\"charge\",\"button\",\"blue\",\"square\"],\"skins\":[{\"unified\":\"1f202-fe0f\",\"native\":\"\uD83C\uDE02\uFE0F\"}],\"version\":1},\"u6708\":{\"id\":\"u6708\",\"name\":\"Japanese \u201Cmonthly Amount\u201D Button\",\"keywords\":[\"u6708\",\"monthly\",\"amount\",\"chinese\",\"month\",\"moon\",\"orange\",\"square\",\"kanji\"],\"skins\":[{\"unified\":\"1f237-fe0f\",\"native\":\"\uD83C\uDE37\uFE0F\"}],\"version\":1},\"u6709\":{\"id\":\"u6709\",\"name\":\"Squared Cjk Unified Ideograph-6709\",\"keywords\":[\"u6709\",\"japanese\",\"not\",\"free\",\"of\",\"charge\",\"button\",\"orange\",\"square\",\"chinese\",\"have\",\"kanji\"],\"skins\":[{\"unified\":\"1f236\",\"native\":\"\uD83C\uDE36\"}],\"version\":1},\"u6307\":{\"id\":\"u6307\",\"name\":\"Japanese \u201Creserved\u201D Button\",\"keywords\":[\"u6307\",\"reserved\",\"chinese\",\"point\",\"green\",\"square\",\"kanji\"],\"skins\":[{\"unified\":\"1f22f\",\"native\":\"\uD83C\uDE2F\"}],\"version\":1},\"ideograph_advantage\":{\"id\":\"ideograph_advantage\",\"name\":\"Japanese \u201Cbargain\u201D Button\",\"keywords\":[\"ideograph\",\"advantage\",\"bargain\",\"chinese\",\"kanji\",\"obtain\",\"get\",\"circle\"],\"skins\":[{\"unified\":\"1f250\",\"native\":\"\uD83C\uDE50\"}],\"version\":1},\"u5272\":{\"id\":\"u5272\",\"name\":\"Japanese \u201Cdiscount\u201D Button\",\"keywords\":[\"u5272\",\"discount\",\"cut\",\"divide\",\"chinese\",\"kanji\",\"pink\",\"square\"],\"skins\":[{\"unified\":\"1f239\",\"native\":\"\uD83C\uDE39\"}],\"version\":1},\"u7121\":{\"id\":\"u7121\",\"name\":\"Japanese \u201Cfree of Charge\u201D Button\",\"keywords\":[\"u7121\",\"free\",\"charge\",\"nothing\",\"chinese\",\"kanji\",\"orange\",\"square\"],\"skins\":[{\"unified\":\"1f21a\",\"native\":\"\uD83C\uDE1A\"}],\"version\":1},\"u7981\":{\"id\":\"u7981\",\"name\":\"Japanese \u201Cprohibited\u201D Button\",\"keywords\":[\"u7981\",\"prohibited\",\"kanji\",\"chinese\",\"forbidden\",\"limit\",\"restricted\",\"red\",\"square\"],\"skins\":[{\"unified\":\"1f232\",\"native\":\"\uD83C\uDE32\"}],\"version\":1},\"accept\":{\"id\":\"accept\",\"name\":\"Circled Ideograph Accept\",\"keywords\":[\"japanese\",\"acceptable\",\"button\",\"ok\",\"good\",\"chinese\",\"kanji\",\"agree\",\"yes\",\"orange\",\"circle\"],\"skins\":[{\"unified\":\"1f251\",\"native\":\"\uD83C\uDE51\"}],\"version\":1},\"u7533\":{\"id\":\"u7533\",\"name\":\"Japanese \u201Capplication\u201D Button\",\"keywords\":[\"u7533\",\"application\",\"chinese\",\"kanji\",\"orange\",\"square\"],\"skins\":[{\"unified\":\"1f238\",\"native\":\"\uD83C\uDE38\"}],\"version\":1},\"u5408\":{\"id\":\"u5408\",\"name\":\"Japanese \u201Cpassing Grade\u201D Button\",\"keywords\":[\"u5408\",\"passing\",\"grade\",\"chinese\",\"join\",\"kanji\",\"red\",\"square\"],\"skins\":[{\"unified\":\"1f234\",\"native\":\"\uD83C\uDE34\"}],\"version\":1},\"u7a7a\":{\"id\":\"u7a7a\",\"name\":\"Japanese \u201Cvacancy\u201D Button\",\"keywords\":[\"u7a7a\",\"vacancy\",\"kanji\",\"chinese\",\"empty\",\"sky\",\"blue\",\"square\"],\"skins\":[{\"unified\":\"1f233\",\"native\":\"\uD83C\uDE33\"}],\"version\":1},\"congratulations\":{\"id\":\"congratulations\",\"name\":\"Circled Ideograph Congratulation\",\"keywords\":[\"congratulations\",\"japanese\",\"button\",\"chinese\",\"kanji\",\"red\",\"circle\"],\"skins\":[{\"unified\":\"3297-fe0f\",\"native\":\"\u3297\uFE0F\"}],\"version\":1},\"secret\":{\"id\":\"secret\",\"name\":\"Circled Ideograph Secret\",\"keywords\":[\"japanese\",\"button\",\"privacy\",\"chinese\",\"sshh\",\"kanji\",\"red\",\"circle\"],\"skins\":[{\"unified\":\"3299-fe0f\",\"native\":\"\u3299\uFE0F\"}],\"version\":1},\"u55b6\":{\"id\":\"u55b6\",\"name\":\"Squared Cjk Unified Ideograph-55b6\",\"keywords\":[\"u55b6\",\"japanese\",\"open\",\"for\",\"business\",\"button\",\"opening\",\"hours\",\"orange\",\"square\"],\"skins\":[{\"unified\":\"1f23a\",\"native\":\"\uD83C\uDE3A\"}],\"version\":1},\"u6e80\":{\"id\":\"u6e80\",\"name\":\"Japanese \u201Cno Vacancy\u201D Button\",\"keywords\":[\"u6e80\",\"no\",\"vacancy\",\"full\",\"chinese\",\"red\",\"square\",\"kanji\"],\"skins\":[{\"unified\":\"1f235\",\"native\":\"\uD83C\uDE35\"}],\"version\":1},\"red_circle\":{\"id\":\"red_circle\",\"name\":\"Red Circle\",\"keywords\":[\"shape\",\"error\",\"danger\"],\"skins\":[{\"unified\":\"1f534\",\"native\":\"\uD83D\uDD34\"}],\"version\":1},\"large_orange_circle\":{\"id\":\"large_orange_circle\",\"name\":\"Orange Circle\",\"keywords\":[\"large\",\"round\"],\"skins\":[{\"unified\":\"1f7e0\",\"native\":\"\uD83D\uDFE0\"}],\"version\":12},\"large_yellow_circle\":{\"id\":\"large_yellow_circle\",\"name\":\"Yellow Circle\",\"keywords\":[\"large\",\"round\"],\"skins\":[{\"unified\":\"1f7e1\",\"native\":\"\uD83D\uDFE1\"}],\"version\":12},\"large_green_circle\":{\"id\":\"large_green_circle\",\"name\":\"Green Circle\",\"keywords\":[\"large\",\"round\"],\"skins\":[{\"unified\":\"1f7e2\",\"native\":\"\uD83D\uDFE2\"}],\"version\":12},\"large_blue_circle\":{\"id\":\"large_blue_circle\",\"name\":\"Blue Circle\",\"keywords\":[\"large\",\"shape\",\"icon\",\"button\"],\"skins\":[{\"unified\":\"1f535\",\"native\":\"\uD83D\uDD35\"}],\"version\":1},\"large_purple_circle\":{\"id\":\"large_purple_circle\",\"name\":\"Purple Circle\",\"keywords\":[\"large\",\"round\"],\"skins\":[{\"unified\":\"1f7e3\",\"native\":\"\uD83D\uDFE3\"}],\"version\":12},\"large_brown_circle\":{\"id\":\"large_brown_circle\",\"name\":\"Brown Circle\",\"keywords\":[\"large\",\"round\"],\"skins\":[{\"unified\":\"1f7e4\",\"native\":\"\uD83D\uDFE4\"}],\"version\":12},\"black_circle\":{\"id\":\"black_circle\",\"name\":\"Black Circle\",\"keywords\":[\"shape\",\"button\",\"round\"],\"skins\":[{\"unified\":\"26ab\",\"native\":\"\u26AB\"}],\"version\":1},\"white_circle\":{\"id\":\"white_circle\",\"name\":\"White Circle\",\"keywords\":[\"shape\",\"round\"],\"skins\":[{\"unified\":\"26aa\",\"native\":\"\u26AA\"}],\"version\":1},\"large_red_square\":{\"id\":\"large_red_square\",\"name\":\"Red Square\",\"keywords\":[\"large\"],\"skins\":[{\"unified\":\"1f7e5\",\"native\":\"\uD83D\uDFE5\"}],\"version\":12},\"large_orange_square\":{\"id\":\"large_orange_square\",\"name\":\"Orange Square\",\"keywords\":[\"large\"],\"skins\":[{\"unified\":\"1f7e7\",\"native\":\"\uD83D\uDFE7\"}],\"version\":12},\"large_yellow_square\":{\"id\":\"large_yellow_square\",\"name\":\"Yellow Square\",\"keywords\":[\"large\"],\"skins\":[{\"unified\":\"1f7e8\",\"native\":\"\uD83D\uDFE8\"}],\"version\":12},\"large_green_square\":{\"id\":\"large_green_square\",\"name\":\"Green Square\",\"keywords\":[\"large\"],\"skins\":[{\"unified\":\"1f7e9\",\"native\":\"\uD83D\uDFE9\"}],\"version\":12},\"large_blue_square\":{\"id\":\"large_blue_square\",\"name\":\"Blue Square\",\"keywords\":[\"large\"],\"skins\":[{\"unified\":\"1f7e6\",\"native\":\"\uD83D\uDFE6\"}],\"version\":12},\"large_purple_square\":{\"id\":\"large_purple_square\",\"name\":\"Purple Square\",\"keywords\":[\"large\"],\"skins\":[{\"unified\":\"1f7ea\",\"native\":\"\uD83D\uDFEA\"}],\"version\":12},\"large_brown_square\":{\"id\":\"large_brown_square\",\"name\":\"Brown Square\",\"keywords\":[\"large\"],\"skins\":[{\"unified\":\"1f7eb\",\"native\":\"\uD83D\uDFEB\"}],\"version\":12},\"black_large_square\":{\"id\":\"black_large_square\",\"name\":\"Black Large Square\",\"keywords\":[\"shape\",\"icon\",\"button\"],\"skins\":[{\"unified\":\"2b1b\",\"native\":\"\u2B1B\"}],\"version\":1},\"white_large_square\":{\"id\":\"white_large_square\",\"name\":\"White Large Square\",\"keywords\":[\"shape\",\"icon\",\"stone\",\"button\"],\"skins\":[{\"unified\":\"2b1c\",\"native\":\"\u2B1C\"}],\"version\":1},\"black_medium_square\":{\"id\":\"black_medium_square\",\"name\":\"Black Medium Square\",\"keywords\":[\"shape\",\"button\",\"icon\"],\"skins\":[{\"unified\":\"25fc-fe0f\",\"native\":\"\u25FC\uFE0F\"}],\"version\":1},\"white_medium_square\":{\"id\":\"white_medium_square\",\"name\":\"White Medium Square\",\"keywords\":[\"shape\",\"stone\",\"icon\"],\"skins\":[{\"unified\":\"25fb-fe0f\",\"native\":\"\u25FB\uFE0F\"}],\"version\":1},\"black_medium_small_square\":{\"id\":\"black_medium_small_square\",\"name\":\"Black Medium Small Square\",\"keywords\":[\"icon\",\"shape\",\"button\"],\"skins\":[{\"unified\":\"25fe\",\"native\":\"\u25FE\"}],\"version\":1},\"white_medium_small_square\":{\"id\":\"white_medium_small_square\",\"name\":\"White Medium Small Square\",\"keywords\":[\"shape\",\"stone\",\"icon\",\"button\"],\"skins\":[{\"unified\":\"25fd\",\"native\":\"\u25FD\"}],\"version\":1},\"black_small_square\":{\"id\":\"black_small_square\",\"name\":\"Black Small Square\",\"keywords\":[\"shape\",\"icon\"],\"skins\":[{\"unified\":\"25aa-fe0f\",\"native\":\"\u25AA\uFE0F\"}],\"version\":1},\"white_small_square\":{\"id\":\"white_small_square\",\"name\":\"White Small Square\",\"keywords\":[\"shape\",\"icon\"],\"skins\":[{\"unified\":\"25ab-fe0f\",\"native\":\"\u25AB\uFE0F\"}],\"version\":1},\"large_orange_diamond\":{\"id\":\"large_orange_diamond\",\"name\":\"Large Orange Diamond\",\"keywords\":[\"shape\",\"jewel\",\"gem\"],\"skins\":[{\"unified\":\"1f536\",\"native\":\"\uD83D\uDD36\"}],\"version\":1},\"large_blue_diamond\":{\"id\":\"large_blue_diamond\",\"name\":\"Large Blue Diamond\",\"keywords\":[\"shape\",\"jewel\",\"gem\"],\"skins\":[{\"unified\":\"1f537\",\"native\":\"\uD83D\uDD37\"}],\"version\":1},\"small_orange_diamond\":{\"id\":\"small_orange_diamond\",\"name\":\"Small Orange Diamond\",\"keywords\":[\"shape\",\"jewel\",\"gem\"],\"skins\":[{\"unified\":\"1f538\",\"native\":\"\uD83D\uDD38\"}],\"version\":1},\"small_blue_diamond\":{\"id\":\"small_blue_diamond\",\"name\":\"Small Blue Diamond\",\"keywords\":[\"shape\",\"jewel\",\"gem\"],\"skins\":[{\"unified\":\"1f539\",\"native\":\"\uD83D\uDD39\"}],\"version\":1},\"small_red_triangle\":{\"id\":\"small_red_triangle\",\"name\":\"Red Triangle Pointed Up\",\"keywords\":[\"small\",\"shape\",\"direction\",\"top\"],\"skins\":[{\"unified\":\"1f53a\",\"native\":\"\uD83D\uDD3A\"}],\"version\":1},\"small_red_triangle_down\":{\"id\":\"small_red_triangle_down\",\"name\":\"Red Triangle Pointed Down\",\"keywords\":[\"small\",\"shape\",\"direction\",\"bottom\"],\"skins\":[{\"unified\":\"1f53b\",\"native\":\"\uD83D\uDD3B\"}],\"version\":1},\"diamond_shape_with_a_dot_inside\":{\"id\":\"diamond_shape_with_a_dot_inside\",\"name\":\"Diamond with a Dot\",\"keywords\":[\"shape\",\"inside\",\"jewel\",\"blue\",\"gem\",\"crystal\",\"fancy\"],\"skins\":[{\"unified\":\"1f4a0\",\"native\":\"\uD83D\uDCA0\"}],\"version\":1},\"radio_button\":{\"id\":\"radio_button\",\"name\":\"Radio Button\",\"keywords\":[\"input\",\"old\",\"music\",\"circle\"],\"skins\":[{\"unified\":\"1f518\",\"native\":\"\uD83D\uDD18\"}],\"version\":1},\"white_square_button\":{\"id\":\"white_square_button\",\"name\":\"White Square Button\",\"keywords\":[\"shape\",\"input\"],\"skins\":[{\"unified\":\"1f533\",\"native\":\"\uD83D\uDD33\"}],\"version\":1},\"black_square_button\":{\"id\":\"black_square_button\",\"name\":\"Black Square Button\",\"keywords\":[\"shape\",\"input\",\"frame\"],\"skins\":[{\"unified\":\"1f532\",\"native\":\"\uD83D\uDD32\"}],\"version\":1},\"checkered_flag\":{\"id\":\"checkered_flag\",\"name\":\"Chequered Flag\",\"keywords\":[\"checkered\",\"contest\",\"finishline\",\"race\",\"gokart\"],\"skins\":[{\"unified\":\"1f3c1\",\"native\":\"\uD83C\uDFC1\"}],\"version\":1},\"triangular_flag_on_post\":{\"id\":\"triangular_flag_on_post\",\"name\":\"Triangular Flag\",\"keywords\":[\"on\",\"post\",\"mark\",\"milestone\",\"place\"],\"skins\":[{\"unified\":\"1f6a9\",\"native\":\"\uD83D\uDEA9\"}],\"version\":1},\"crossed_flags\":{\"id\":\"crossed_flags\",\"name\":\"Crossed Flags\",\"keywords\":[\"japanese\",\"nation\",\"country\",\"border\"],\"skins\":[{\"unified\":\"1f38c\",\"native\":\"\uD83C\uDF8C\"}],\"version\":1},\"waving_black_flag\":{\"id\":\"waving_black_flag\",\"name\":\"Black Flag\",\"keywords\":[\"waving\",\"pirate\"],\"skins\":[{\"unified\":\"1f3f4\",\"native\":\"\uD83C\uDFF4\"}],\"version\":1},\"waving_white_flag\":{\"id\":\"waving_white_flag\",\"name\":\"White Flag\",\"keywords\":[\"waving\",\"losing\",\"loser\",\"lost\",\"surrender\",\"give\",\"up\",\"fail\"],\"skins\":[{\"unified\":\"1f3f3-fe0f\",\"native\":\"\uD83C\uDFF3\uFE0F\"}],\"version\":1},\"rainbow-flag\":{\"id\":\"rainbow-flag\",\"name\":\"Rainbow Flag\",\"keywords\":[\"pride\",\"gay\",\"lgbt\",\"glbt\",\"queer\",\"homosexual\",\"lesbian\",\"bisexual\",\"transgender\"],\"skins\":[{\"unified\":\"1f3f3-fe0f-200d-1f308\",\"native\":\"\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08\"}],\"version\":4},\"transgender_flag\":{\"id\":\"transgender_flag\",\"name\":\"Transgender Flag\",\"keywords\":[\"lgbtq\"],\"skins\":[{\"unified\":\"1f3f3-fe0f-200d-26a7-fe0f\",\"native\":\"\uD83C\uDFF3\uFE0F\u200D\u26A7\uFE0F\"}],\"version\":13},\"pirate_flag\":{\"id\":\"pirate_flag\",\"name\":\"Pirate Flag\",\"keywords\":[\"skull\",\"crossbones\",\"banner\"],\"skins\":[{\"unified\":\"1f3f4-200d-2620-fe0f\",\"native\":\"\uD83C\uDFF4\u200D\u2620\uFE0F\"}],\"version\":11},\"flag-ac\":{\"id\":\"flag-ac\",\"name\":\"Ascension Island Flag\",\"keywords\":[\"ac\"],\"skins\":[{\"unified\":\"1f1e6-1f1e8\",\"native\":\"\uD83C\uDDE6\uD83C\uDDE8\"}],\"version\":2},\"flag-ad\":{\"id\":\"flag-ad\",\"name\":\"Andorra Flag\",\"keywords\":[\"ad\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1e6-1f1e9\",\"native\":\"\uD83C\uDDE6\uD83C\uDDE9\"}],\"version\":2},\"flag-ae\":{\"id\":\"flag-ae\",\"name\":\"United Arab Emirates Flag\",\"keywords\":[\"ae\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1e6-1f1ea\",\"native\":\"\uD83C\uDDE6\uD83C\uDDEA\"}],\"version\":2},\"flag-af\":{\"id\":\"flag-af\",\"name\":\"Afghanistan Flag\",\"keywords\":[\"af\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1e6-1f1eb\",\"native\":\"\uD83C\uDDE6\uD83C\uDDEB\"}],\"version\":2},\"flag-ag\":{\"id\":\"flag-ag\",\"name\":\"Antigua & Barbuda Flag\",\"keywords\":[\"ag\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1e6-1f1ec\",\"native\":\"\uD83C\uDDE6\uD83C\uDDEC\"}],\"version\":2},\"flag-ai\":{\"id\":\"flag-ai\",\"name\":\"Anguilla Flag\",\"keywords\":[\"ai\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1e6-1f1ee\",\"native\":\"\uD83C\uDDE6\uD83C\uDDEE\"}],\"version\":2},\"flag-al\":{\"id\":\"flag-al\",\"name\":\"Albania Flag\",\"keywords\":[\"al\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1e6-1f1f1\",\"native\":\"\uD83C\uDDE6\uD83C\uDDF1\"}],\"version\":2},\"flag-am\":{\"id\":\"flag-am\",\"name\":\"Armenia Flag\",\"keywords\":[\"am\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1e6-1f1f2\",\"native\":\"\uD83C\uDDE6\uD83C\uDDF2\"}],\"version\":2},\"flag-ao\":{\"id\":\"flag-ao\",\"name\":\"Angola Flag\",\"keywords\":[\"ao\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1e6-1f1f4\",\"native\":\"\uD83C\uDDE6\uD83C\uDDF4\"}],\"version\":2},\"flag-aq\":{\"id\":\"flag-aq\",\"name\":\"Antarctica Flag\",\"keywords\":[\"aq\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1e6-1f1f6\",\"native\":\"\uD83C\uDDE6\uD83C\uDDF6\"}],\"version\":2},\"flag-ar\":{\"id\":\"flag-ar\",\"name\":\"Argentina Flag\",\"keywords\":[\"ar\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1e6-1f1f7\",\"native\":\"\uD83C\uDDE6\uD83C\uDDF7\"}],\"version\":2},\"flag-as\":{\"id\":\"flag-as\",\"name\":\"American Samoa Flag\",\"keywords\":[\"as\",\"ws\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1e6-1f1f8\",\"native\":\"\uD83C\uDDE6\uD83C\uDDF8\"}],\"version\":2},\"flag-at\":{\"id\":\"flag-at\",\"name\":\"Austria Flag\",\"keywords\":[\"at\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1e6-1f1f9\",\"native\":\"\uD83C\uDDE6\uD83C\uDDF9\"}],\"version\":2},\"flag-au\":{\"id\":\"flag-au\",\"name\":\"Australia Flag\",\"keywords\":[\"au\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1e6-1f1fa\",\"native\":\"\uD83C\uDDE6\uD83C\uDDFA\"}],\"version\":2},\"flag-aw\":{\"id\":\"flag-aw\",\"name\":\"Aruba Flag\",\"keywords\":[\"aw\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1e6-1f1fc\",\"native\":\"\uD83C\uDDE6\uD83C\uDDFC\"}],\"version\":2},\"flag-ax\":{\"id\":\"flag-ax\",\"name\":\"\u00C5land Islands Flag\",\"keywords\":[\"ax\",\"aland\",\"Aland\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1e6-1f1fd\",\"native\":\"\uD83C\uDDE6\uD83C\uDDFD\"}],\"version\":2},\"flag-az\":{\"id\":\"flag-az\",\"name\":\"Azerbaijan Flag\",\"keywords\":[\"az\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1e6-1f1ff\",\"native\":\"\uD83C\uDDE6\uD83C\uDDFF\"}],\"version\":2},\"flag-ba\":{\"id\":\"flag-ba\",\"name\":\"Bosnia & Herzegovina Flag\",\"keywords\":[\"ba\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1e7-1f1e6\",\"native\":\"\uD83C\uDDE7\uD83C\uDDE6\"}],\"version\":2},\"flag-bb\":{\"id\":\"flag-bb\",\"name\":\"Barbados Flag\",\"keywords\":[\"bb\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1e7-1f1e7\",\"native\":\"\uD83C\uDDE7\uD83C\uDDE7\"}],\"version\":2},\"flag-bd\":{\"id\":\"flag-bd\",\"name\":\"Bangladesh Flag\",\"keywords\":[\"bd\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1e7-1f1e9\",\"native\":\"\uD83C\uDDE7\uD83C\uDDE9\"}],\"version\":2},\"flag-be\":{\"id\":\"flag-be\",\"name\":\"Belgium Flag\",\"keywords\":[\"be\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1e7-1f1ea\",\"native\":\"\uD83C\uDDE7\uD83C\uDDEA\"}],\"version\":2},\"flag-bf\":{\"id\":\"flag-bf\",\"name\":\"Burkina Faso Flag\",\"keywords\":[\"bf\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1e7-1f1eb\",\"native\":\"\uD83C\uDDE7\uD83C\uDDEB\"}],\"version\":2},\"flag-bg\":{\"id\":\"flag-bg\",\"name\":\"Bulgaria Flag\",\"keywords\":[\"bg\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1e7-1f1ec\",\"native\":\"\uD83C\uDDE7\uD83C\uDDEC\"}],\"version\":2},\"flag-bh\":{\"id\":\"flag-bh\",\"name\":\"Bahrain Flag\",\"keywords\":[\"bh\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1e7-1f1ed\",\"native\":\"\uD83C\uDDE7\uD83C\uDDED\"}],\"version\":2},\"flag-bi\":{\"id\":\"flag-bi\",\"name\":\"Burundi Flag\",\"keywords\":[\"bi\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1e7-1f1ee\",\"native\":\"\uD83C\uDDE7\uD83C\uDDEE\"}],\"version\":2},\"flag-bj\":{\"id\":\"flag-bj\",\"name\":\"Benin Flag\",\"keywords\":[\"bj\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1e7-1f1ef\",\"native\":\"\uD83C\uDDE7\uD83C\uDDEF\"}],\"version\":2},\"flag-bl\":{\"id\":\"flag-bl\",\"name\":\"St. Barth\u00E9lemy Flag\",\"keywords\":[\"bl\",\"st\",\"barthelemy\",\"saint\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1e7-1f1f1\",\"native\":\"\uD83C\uDDE7\uD83C\uDDF1\"}],\"version\":2},\"flag-bm\":{\"id\":\"flag-bm\",\"name\":\"Bermuda Flag\",\"keywords\":[\"bm\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1e7-1f1f2\",\"native\":\"\uD83C\uDDE7\uD83C\uDDF2\"}],\"version\":2},\"flag-bn\":{\"id\":\"flag-bn\",\"name\":\"Brunei Flag\",\"keywords\":[\"bn\",\"darussalam\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1e7-1f1f3\",\"native\":\"\uD83C\uDDE7\uD83C\uDDF3\"}],\"version\":2},\"flag-bo\":{\"id\":\"flag-bo\",\"name\":\"Bolivia Flag\",\"keywords\":[\"bo\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1e7-1f1f4\",\"native\":\"\uD83C\uDDE7\uD83C\uDDF4\"}],\"version\":2},\"flag-bq\":{\"id\":\"flag-bq\",\"name\":\"Caribbean Netherlands Flag\",\"keywords\":[\"bq\",\"bonaire\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1e7-1f1f6\",\"native\":\"\uD83C\uDDE7\uD83C\uDDF6\"}],\"version\":2},\"flag-br\":{\"id\":\"flag-br\",\"name\":\"Brazil Flag\",\"keywords\":[\"br\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1e7-1f1f7\",\"native\":\"\uD83C\uDDE7\uD83C\uDDF7\"}],\"version\":2},\"flag-bs\":{\"id\":\"flag-bs\",\"name\":\"Bahamas Flag\",\"keywords\":[\"bs\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1e7-1f1f8\",\"native\":\"\uD83C\uDDE7\uD83C\uDDF8\"}],\"version\":2},\"flag-bt\":{\"id\":\"flag-bt\",\"name\":\"Bhutan Flag\",\"keywords\":[\"bt\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1e7-1f1f9\",\"native\":\"\uD83C\uDDE7\uD83C\uDDF9\"}],\"version\":2},\"flag-bv\":{\"id\":\"flag-bv\",\"name\":\"Bouvet Island Flag\",\"keywords\":[\"bv\",\"norway\"],\"skins\":[{\"unified\":\"1f1e7-1f1fb\",\"native\":\"\uD83C\uDDE7\uD83C\uDDFB\"}],\"version\":2},\"flag-bw\":{\"id\":\"flag-bw\",\"name\":\"Botswana Flag\",\"keywords\":[\"bw\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1e7-1f1fc\",\"native\":\"\uD83C\uDDE7\uD83C\uDDFC\"}],\"version\":2},\"flag-by\":{\"id\":\"flag-by\",\"name\":\"Belarus Flag\",\"keywords\":[\"by\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1e7-1f1fe\",\"native\":\"\uD83C\uDDE7\uD83C\uDDFE\"}],\"version\":2},\"flag-bz\":{\"id\":\"flag-bz\",\"name\":\"Belize Flag\",\"keywords\":[\"bz\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1e7-1f1ff\",\"native\":\"\uD83C\uDDE7\uD83C\uDDFF\"}],\"version\":2},\"flag-ca\":{\"id\":\"flag-ca\",\"name\":\"Canada Flag\",\"keywords\":[\"ca\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1e8-1f1e6\",\"native\":\"\uD83C\uDDE8\uD83C\uDDE6\"}],\"version\":2},\"flag-cc\":{\"id\":\"flag-cc\",\"name\":\"Cocos (keeling) Islands Flag\",\"keywords\":[\"cc\",\"keeling\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1e8-1f1e8\",\"native\":\"\uD83C\uDDE8\uD83C\uDDE8\"}],\"version\":2},\"flag-cd\":{\"id\":\"flag-cd\",\"name\":\"Congo - Kinshasa Flag\",\"keywords\":[\"cd\",\"democratic\",\"republic\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1e8-1f1e9\",\"native\":\"\uD83C\uDDE8\uD83C\uDDE9\"}],\"version\":2},\"flag-cf\":{\"id\":\"flag-cf\",\"name\":\"Central African Republic Flag\",\"keywords\":[\"cf\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1e8-1f1eb\",\"native\":\"\uD83C\uDDE8\uD83C\uDDEB\"}],\"version\":2},\"flag-cg\":{\"id\":\"flag-cg\",\"name\":\"Congo - Brazzaville Flag\",\"keywords\":[\"cg\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1e8-1f1ec\",\"native\":\"\uD83C\uDDE8\uD83C\uDDEC\"}],\"version\":2},\"flag-ch\":{\"id\":\"flag-ch\",\"name\":\"Switzerland Flag\",\"keywords\":[\"ch\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1e8-1f1ed\",\"native\":\"\uD83C\uDDE8\uD83C\uDDED\"}],\"version\":2},\"flag-ci\":{\"id\":\"flag-ci\",\"name\":\"C\u00F4te D\u2019ivoire Flag\",\"keywords\":[\"ci\",\"cote\",\"d\",\"ivoire\",\"ivory\",\"coast\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1e8-1f1ee\",\"native\":\"\uD83C\uDDE8\uD83C\uDDEE\"}],\"version\":2},\"flag-ck\":{\"id\":\"flag-ck\",\"name\":\"Cook Islands Flag\",\"keywords\":[\"ck\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1e8-1f1f0\",\"native\":\"\uD83C\uDDE8\uD83C\uDDF0\"}],\"version\":2},\"flag-cl\":{\"id\":\"flag-cl\",\"name\":\"Chile Flag\",\"keywords\":[\"cl\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1e8-1f1f1\",\"native\":\"\uD83C\uDDE8\uD83C\uDDF1\"}],\"version\":2},\"flag-cm\":{\"id\":\"flag-cm\",\"name\":\"Cameroon Flag\",\"keywords\":[\"cm\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1e8-1f1f2\",\"native\":\"\uD83C\uDDE8\uD83C\uDDF2\"}],\"version\":2},\"cn\":{\"id\":\"cn\",\"name\":\"China Flag\",\"keywords\":[\"cn\",\"chinese\",\"prc\",\"country\",\"nation\",\"banner\"],\"skins\":[{\"unified\":\"1f1e8-1f1f3\",\"native\":\"\uD83C\uDDE8\uD83C\uDDF3\"}],\"version\":1},\"flag-co\":{\"id\":\"flag-co\",\"name\":\"Colombia Flag\",\"keywords\":[\"co\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1e8-1f1f4\",\"native\":\"\uD83C\uDDE8\uD83C\uDDF4\"}],\"version\":2},\"flag-cp\":{\"id\":\"flag-cp\",\"name\":\"Clipperton Island Flag\",\"keywords\":[\"cp\"],\"skins\":[{\"unified\":\"1f1e8-1f1f5\",\"native\":\"\uD83C\uDDE8\uD83C\uDDF5\"}],\"version\":2},\"flag-cr\":{\"id\":\"flag-cr\",\"name\":\"Costa Rica Flag\",\"keywords\":[\"cr\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1e8-1f1f7\",\"native\":\"\uD83C\uDDE8\uD83C\uDDF7\"}],\"version\":2},\"flag-cu\":{\"id\":\"flag-cu\",\"name\":\"Cuba Flag\",\"keywords\":[\"cu\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1e8-1f1fa\",\"native\":\"\uD83C\uDDE8\uD83C\uDDFA\"}],\"version\":2},\"flag-cv\":{\"id\":\"flag-cv\",\"name\":\"Cape Verde Flag\",\"keywords\":[\"cv\",\"cabo\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1e8-1f1fb\",\"native\":\"\uD83C\uDDE8\uD83C\uDDFB\"}],\"version\":2},\"flag-cw\":{\"id\":\"flag-cw\",\"name\":\"Cura\u00E7ao Flag\",\"keywords\":[\"cw\",\"curacao\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1e8-1f1fc\",\"native\":\"\uD83C\uDDE8\uD83C\uDDFC\"}],\"version\":2},\"flag-cx\":{\"id\":\"flag-cx\",\"name\":\"Christmas Island Flag\",\"keywords\":[\"cx\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1e8-1f1fd\",\"native\":\"\uD83C\uDDE8\uD83C\uDDFD\"}],\"version\":2},\"flag-cy\":{\"id\":\"flag-cy\",\"name\":\"Cyprus Flag\",\"keywords\":[\"cy\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1e8-1f1fe\",\"native\":\"\uD83C\uDDE8\uD83C\uDDFE\"}],\"version\":2},\"flag-cz\":{\"id\":\"flag-cz\",\"name\":\"Czechia Flag\",\"keywords\":[\"cz\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1e8-1f1ff\",\"native\":\"\uD83C\uDDE8\uD83C\uDDFF\"}],\"version\":2},\"de\":{\"id\":\"de\",\"name\":\"Germany Flag\",\"keywords\":[\"de\",\"german\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1e9-1f1ea\",\"native\":\"\uD83C\uDDE9\uD83C\uDDEA\"}],\"version\":1},\"flag-dg\":{\"id\":\"flag-dg\",\"name\":\"Diego Garcia Flag\",\"keywords\":[\"dg\"],\"skins\":[{\"unified\":\"1f1e9-1f1ec\",\"native\":\"\uD83C\uDDE9\uD83C\uDDEC\"}],\"version\":2},\"flag-dj\":{\"id\":\"flag-dj\",\"name\":\"Djibouti Flag\",\"keywords\":[\"dj\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1e9-1f1ef\",\"native\":\"\uD83C\uDDE9\uD83C\uDDEF\"}],\"version\":2},\"flag-dk\":{\"id\":\"flag-dk\",\"name\":\"Denmark Flag\",\"keywords\":[\"dk\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1e9-1f1f0\",\"native\":\"\uD83C\uDDE9\uD83C\uDDF0\"}],\"version\":2},\"flag-dm\":{\"id\":\"flag-dm\",\"name\":\"Dominica Flag\",\"keywords\":[\"dm\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1e9-1f1f2\",\"native\":\"\uD83C\uDDE9\uD83C\uDDF2\"}],\"version\":2},\"flag-do\":{\"id\":\"flag-do\",\"name\":\"Dominican Republic Flag\",\"keywords\":[\"do\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1e9-1f1f4\",\"native\":\"\uD83C\uDDE9\uD83C\uDDF4\"}],\"version\":2},\"flag-dz\":{\"id\":\"flag-dz\",\"name\":\"Algeria Flag\",\"keywords\":[\"dz\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1e9-1f1ff\",\"native\":\"\uD83C\uDDE9\uD83C\uDDFF\"}],\"version\":2},\"flag-ea\":{\"id\":\"flag-ea\",\"name\":\"Ceuta & Melilla Flag\",\"keywords\":[\"ea\"],\"skins\":[{\"unified\":\"1f1ea-1f1e6\",\"native\":\"\uD83C\uDDEA\uD83C\uDDE6\"}],\"version\":2},\"flag-ec\":{\"id\":\"flag-ec\",\"name\":\"Ecuador Flag\",\"keywords\":[\"ec\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1ea-1f1e8\",\"native\":\"\uD83C\uDDEA\uD83C\uDDE8\"}],\"version\":2},\"flag-ee\":{\"id\":\"flag-ee\",\"name\":\"Estonia Flag\",\"keywords\":[\"ee\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1ea-1f1ea\",\"native\":\"\uD83C\uDDEA\uD83C\uDDEA\"}],\"version\":2},\"flag-eg\":{\"id\":\"flag-eg\",\"name\":\"Egypt Flag\",\"keywords\":[\"eg\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1ea-1f1ec\",\"native\":\"\uD83C\uDDEA\uD83C\uDDEC\"}],\"version\":2},\"flag-eh\":{\"id\":\"flag-eh\",\"name\":\"Western Sahara Flag\",\"keywords\":[\"eh\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1ea-1f1ed\",\"native\":\"\uD83C\uDDEA\uD83C\uDDED\"}],\"version\":2},\"flag-er\":{\"id\":\"flag-er\",\"name\":\"Eritrea Flag\",\"keywords\":[\"er\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1ea-1f1f7\",\"native\":\"\uD83C\uDDEA\uD83C\uDDF7\"}],\"version\":2},\"es\":{\"id\":\"es\",\"name\":\"Spain Flag\",\"keywords\":[\"es\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1ea-1f1f8\",\"native\":\"\uD83C\uDDEA\uD83C\uDDF8\"}],\"version\":1},\"flag-et\":{\"id\":\"flag-et\",\"name\":\"Ethiopia Flag\",\"keywords\":[\"et\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1ea-1f1f9\",\"native\":\"\uD83C\uDDEA\uD83C\uDDF9\"}],\"version\":2},\"flag-eu\":{\"id\":\"flag-eu\",\"name\":\"European Union Flag\",\"keywords\":[\"eu\",\"banner\"],\"skins\":[{\"unified\":\"1f1ea-1f1fa\",\"native\":\"\uD83C\uDDEA\uD83C\uDDFA\"}],\"version\":2},\"flag-fi\":{\"id\":\"flag-fi\",\"name\":\"Finland Flag\",\"keywords\":[\"fi\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1eb-1f1ee\",\"native\":\"\uD83C\uDDEB\uD83C\uDDEE\"}],\"version\":2},\"flag-fj\":{\"id\":\"flag-fj\",\"name\":\"Fiji Flag\",\"keywords\":[\"fj\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1eb-1f1ef\",\"native\":\"\uD83C\uDDEB\uD83C\uDDEF\"}],\"version\":2},\"flag-fk\":{\"id\":\"flag-fk\",\"name\":\"Falkland Islands Flag\",\"keywords\":[\"fk\",\"malvinas\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1eb-1f1f0\",\"native\":\"\uD83C\uDDEB\uD83C\uDDF0\"}],\"version\":2},\"flag-fm\":{\"id\":\"flag-fm\",\"name\":\"Micronesia Flag\",\"keywords\":[\"fm\",\"federated\",\"states\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1eb-1f1f2\",\"native\":\"\uD83C\uDDEB\uD83C\uDDF2\"}],\"version\":2},\"flag-fo\":{\"id\":\"flag-fo\",\"name\":\"Faroe Islands Flag\",\"keywords\":[\"fo\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1eb-1f1f4\",\"native\":\"\uD83C\uDDEB\uD83C\uDDF4\"}],\"version\":2},\"fr\":{\"id\":\"fr\",\"name\":\"France Flag\",\"keywords\":[\"fr\",\"banner\",\"nation\",\"french\",\"country\"],\"skins\":[{\"unified\":\"1f1eb-1f1f7\",\"native\":\"\uD83C\uDDEB\uD83C\uDDF7\"}],\"version\":1},\"flag-ga\":{\"id\":\"flag-ga\",\"name\":\"Gabon Flag\",\"keywords\":[\"ga\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1ec-1f1e6\",\"native\":\"\uD83C\uDDEC\uD83C\uDDE6\"}],\"version\":2},\"gb\":{\"id\":\"gb\",\"name\":\"United Kingdom Flag\",\"keywords\":[\"gb\",\"uk\",\"great\",\"britain\",\"northern\",\"ireland\",\"nation\",\"country\",\"banner\",\"british\",\"UK\",\"english\",\"england\",\"union\",\"jack\"],\"skins\":[{\"unified\":\"1f1ec-1f1e7\",\"native\":\"\uD83C\uDDEC\uD83C\uDDE7\"}],\"version\":1},\"flag-gd\":{\"id\":\"flag-gd\",\"name\":\"Grenada Flag\",\"keywords\":[\"gd\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1ec-1f1e9\",\"native\":\"\uD83C\uDDEC\uD83C\uDDE9\"}],\"version\":2},\"flag-ge\":{\"id\":\"flag-ge\",\"name\":\"Georgia Flag\",\"keywords\":[\"ge\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1ec-1f1ea\",\"native\":\"\uD83C\uDDEC\uD83C\uDDEA\"}],\"version\":2},\"flag-gf\":{\"id\":\"flag-gf\",\"name\":\"French Guiana Flag\",\"keywords\":[\"gf\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1ec-1f1eb\",\"native\":\"\uD83C\uDDEC\uD83C\uDDEB\"}],\"version\":2},\"flag-gg\":{\"id\":\"flag-gg\",\"name\":\"Guernsey Flag\",\"keywords\":[\"gg\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1ec-1f1ec\",\"native\":\"\uD83C\uDDEC\uD83C\uDDEC\"}],\"version\":2},\"flag-gh\":{\"id\":\"flag-gh\",\"name\":\"Ghana Flag\",\"keywords\":[\"gh\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1ec-1f1ed\",\"native\":\"\uD83C\uDDEC\uD83C\uDDED\"}],\"version\":2},\"flag-gi\":{\"id\":\"flag-gi\",\"name\":\"Gibraltar Flag\",\"keywords\":[\"gi\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1ec-1f1ee\",\"native\":\"\uD83C\uDDEC\uD83C\uDDEE\"}],\"version\":2},\"flag-gl\":{\"id\":\"flag-gl\",\"name\":\"Greenland Flag\",\"keywords\":[\"gl\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1ec-1f1f1\",\"native\":\"\uD83C\uDDEC\uD83C\uDDF1\"}],\"version\":2},\"flag-gm\":{\"id\":\"flag-gm\",\"name\":\"Gambia Flag\",\"keywords\":[\"gm\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1ec-1f1f2\",\"native\":\"\uD83C\uDDEC\uD83C\uDDF2\"}],\"version\":2},\"flag-gn\":{\"id\":\"flag-gn\",\"name\":\"Guinea Flag\",\"keywords\":[\"gn\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1ec-1f1f3\",\"native\":\"\uD83C\uDDEC\uD83C\uDDF3\"}],\"version\":2},\"flag-gp\":{\"id\":\"flag-gp\",\"name\":\"Guadeloupe Flag\",\"keywords\":[\"gp\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1ec-1f1f5\",\"native\":\"\uD83C\uDDEC\uD83C\uDDF5\"}],\"version\":2},\"flag-gq\":{\"id\":\"flag-gq\",\"name\":\"Equatorial Guinea Flag\",\"keywords\":[\"gq\",\"gn\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1ec-1f1f6\",\"native\":\"\uD83C\uDDEC\uD83C\uDDF6\"}],\"version\":2},\"flag-gr\":{\"id\":\"flag-gr\",\"name\":\"Greece Flag\",\"keywords\":[\"gr\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1ec-1f1f7\",\"native\":\"\uD83C\uDDEC\uD83C\uDDF7\"}],\"version\":2},\"flag-gs\":{\"id\":\"flag-gs\",\"name\":\"South Georgia & South Sandwich Islands Flag\",\"keywords\":[\"gs\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1ec-1f1f8\",\"native\":\"\uD83C\uDDEC\uD83C\uDDF8\"}],\"version\":2},\"flag-gt\":{\"id\":\"flag-gt\",\"name\":\"Guatemala Flag\",\"keywords\":[\"gt\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1ec-1f1f9\",\"native\":\"\uD83C\uDDEC\uD83C\uDDF9\"}],\"version\":2},\"flag-gu\":{\"id\":\"flag-gu\",\"name\":\"Guam Flag\",\"keywords\":[\"gu\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1ec-1f1fa\",\"native\":\"\uD83C\uDDEC\uD83C\uDDFA\"}],\"version\":2},\"flag-gw\":{\"id\":\"flag-gw\",\"name\":\"Guinea-Bissau Flag\",\"keywords\":[\"gw\",\"guinea\",\"bissau\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1ec-1f1fc\",\"native\":\"\uD83C\uDDEC\uD83C\uDDFC\"}],\"version\":2},\"flag-gy\":{\"id\":\"flag-gy\",\"name\":\"Guyana Flag\",\"keywords\":[\"gy\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1ec-1f1fe\",\"native\":\"\uD83C\uDDEC\uD83C\uDDFE\"}],\"version\":2},\"flag-hk\":{\"id\":\"flag-hk\",\"name\":\"Hong Kong Sar China Flag\",\"keywords\":[\"hk\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1ed-1f1f0\",\"native\":\"\uD83C\uDDED\uD83C\uDDF0\"}],\"version\":2},\"flag-hm\":{\"id\":\"flag-hm\",\"name\":\"Heard & Mcdonald Islands Flag\",\"keywords\":[\"hm\"],\"skins\":[{\"unified\":\"1f1ed-1f1f2\",\"native\":\"\uD83C\uDDED\uD83C\uDDF2\"}],\"version\":2},\"flag-hn\":{\"id\":\"flag-hn\",\"name\":\"Honduras Flag\",\"keywords\":[\"hn\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1ed-1f1f3\",\"native\":\"\uD83C\uDDED\uD83C\uDDF3\"}],\"version\":2},\"flag-hr\":{\"id\":\"flag-hr\",\"name\":\"Croatia Flag\",\"keywords\":[\"hr\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1ed-1f1f7\",\"native\":\"\uD83C\uDDED\uD83C\uDDF7\"}],\"version\":2},\"flag-ht\":{\"id\":\"flag-ht\",\"name\":\"Haiti Flag\",\"keywords\":[\"ht\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1ed-1f1f9\",\"native\":\"\uD83C\uDDED\uD83C\uDDF9\"}],\"version\":2},\"flag-hu\":{\"id\":\"flag-hu\",\"name\":\"Hungary Flag\",\"keywords\":[\"hu\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1ed-1f1fa\",\"native\":\"\uD83C\uDDED\uD83C\uDDFA\"}],\"version\":2},\"flag-ic\":{\"id\":\"flag-ic\",\"name\":\"Canary Islands Flag\",\"keywords\":[\"ic\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1ee-1f1e8\",\"native\":\"\uD83C\uDDEE\uD83C\uDDE8\"}],\"version\":2},\"flag-id\":{\"id\":\"flag-id\",\"name\":\"Indonesia Flag\",\"keywords\":[\"id\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1ee-1f1e9\",\"native\":\"\uD83C\uDDEE\uD83C\uDDE9\"}],\"version\":2},\"flag-ie\":{\"id\":\"flag-ie\",\"name\":\"Ireland Flag\",\"keywords\":[\"ie\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1ee-1f1ea\",\"native\":\"\uD83C\uDDEE\uD83C\uDDEA\"}],\"version\":2},\"flag-il\":{\"id\":\"flag-il\",\"name\":\"Israel Flag\",\"keywords\":[\"il\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1ee-1f1f1\",\"native\":\"\uD83C\uDDEE\uD83C\uDDF1\"}],\"version\":2},\"flag-im\":{\"id\":\"flag-im\",\"name\":\"Isle of Man Flag\",\"keywords\":[\"im\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1ee-1f1f2\",\"native\":\"\uD83C\uDDEE\uD83C\uDDF2\"}],\"version\":2},\"flag-in\":{\"id\":\"flag-in\",\"name\":\"India Flag\",\"keywords\":[\"in\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1ee-1f1f3\",\"native\":\"\uD83C\uDDEE\uD83C\uDDF3\"}],\"version\":2},\"flag-io\":{\"id\":\"flag-io\",\"name\":\"British Indian Ocean Territory Flag\",\"keywords\":[\"io\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1ee-1f1f4\",\"native\":\"\uD83C\uDDEE\uD83C\uDDF4\"}],\"version\":2},\"flag-iq\":{\"id\":\"flag-iq\",\"name\":\"Iraq Flag\",\"keywords\":[\"iq\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1ee-1f1f6\",\"native\":\"\uD83C\uDDEE\uD83C\uDDF6\"}],\"version\":2},\"flag-ir\":{\"id\":\"flag-ir\",\"name\":\"Iran Flag\",\"keywords\":[\"ir\",\"islamic\",\"republic\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1ee-1f1f7\",\"native\":\"\uD83C\uDDEE\uD83C\uDDF7\"}],\"version\":2},\"flag-is\":{\"id\":\"flag-is\",\"name\":\"Iceland Flag\",\"keywords\":[\"is\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1ee-1f1f8\",\"native\":\"\uD83C\uDDEE\uD83C\uDDF8\"}],\"version\":2},\"it\":{\"id\":\"it\",\"name\":\"Italy Flag\",\"keywords\":[\"it\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1ee-1f1f9\",\"native\":\"\uD83C\uDDEE\uD83C\uDDF9\"}],\"version\":1},\"flag-je\":{\"id\":\"flag-je\",\"name\":\"Jersey Flag\",\"keywords\":[\"je\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1ef-1f1ea\",\"native\":\"\uD83C\uDDEF\uD83C\uDDEA\"}],\"version\":2},\"flag-jm\":{\"id\":\"flag-jm\",\"name\":\"Jamaica Flag\",\"keywords\":[\"jm\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1ef-1f1f2\",\"native\":\"\uD83C\uDDEF\uD83C\uDDF2\"}],\"version\":2},\"flag-jo\":{\"id\":\"flag-jo\",\"name\":\"Jordan Flag\",\"keywords\":[\"jo\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1ef-1f1f4\",\"native\":\"\uD83C\uDDEF\uD83C\uDDF4\"}],\"version\":2},\"jp\":{\"id\":\"jp\",\"name\":\"Japan Flag\",\"keywords\":[\"jp\",\"japanese\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1ef-1f1f5\",\"native\":\"\uD83C\uDDEF\uD83C\uDDF5\"}],\"version\":1},\"flag-ke\":{\"id\":\"flag-ke\",\"name\":\"Kenya Flag\",\"keywords\":[\"ke\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f0-1f1ea\",\"native\":\"\uD83C\uDDF0\uD83C\uDDEA\"}],\"version\":2},\"flag-kg\":{\"id\":\"flag-kg\",\"name\":\"Kyrgyzstan Flag\",\"keywords\":[\"kg\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f0-1f1ec\",\"native\":\"\uD83C\uDDF0\uD83C\uDDEC\"}],\"version\":2},\"flag-kh\":{\"id\":\"flag-kh\",\"name\":\"Cambodia Flag\",\"keywords\":[\"kh\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f0-1f1ed\",\"native\":\"\uD83C\uDDF0\uD83C\uDDED\"}],\"version\":2},\"flag-ki\":{\"id\":\"flag-ki\",\"name\":\"Kiribati Flag\",\"keywords\":[\"ki\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f0-1f1ee\",\"native\":\"\uD83C\uDDF0\uD83C\uDDEE\"}],\"version\":2},\"flag-km\":{\"id\":\"flag-km\",\"name\":\"Comoros Flag\",\"keywords\":[\"km\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f0-1f1f2\",\"native\":\"\uD83C\uDDF0\uD83C\uDDF2\"}],\"version\":2},\"flag-kn\":{\"id\":\"flag-kn\",\"name\":\"St. Kitts & Nevis Flag\",\"keywords\":[\"kn\",\"st\",\"saint\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f0-1f1f3\",\"native\":\"\uD83C\uDDF0\uD83C\uDDF3\"}],\"version\":2},\"flag-kp\":{\"id\":\"flag-kp\",\"name\":\"North Korea Flag\",\"keywords\":[\"kp\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f0-1f1f5\",\"native\":\"\uD83C\uDDF0\uD83C\uDDF5\"}],\"version\":2},\"kr\":{\"id\":\"kr\",\"name\":\"South Korea Flag\",\"keywords\":[\"kr\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f0-1f1f7\",\"native\":\"\uD83C\uDDF0\uD83C\uDDF7\"}],\"version\":1},\"flag-kw\":{\"id\":\"flag-kw\",\"name\":\"Kuwait Flag\",\"keywords\":[\"kw\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f0-1f1fc\",\"native\":\"\uD83C\uDDF0\uD83C\uDDFC\"}],\"version\":2},\"flag-ky\":{\"id\":\"flag-ky\",\"name\":\"Cayman Islands Flag\",\"keywords\":[\"ky\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f0-1f1fe\",\"native\":\"\uD83C\uDDF0\uD83C\uDDFE\"}],\"version\":2},\"flag-kz\":{\"id\":\"flag-kz\",\"name\":\"Kazakhstan Flag\",\"keywords\":[\"kz\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f0-1f1ff\",\"native\":\"\uD83C\uDDF0\uD83C\uDDFF\"}],\"version\":2},\"flag-la\":{\"id\":\"flag-la\",\"name\":\"Laos Flag\",\"keywords\":[\"la\",\"lao\",\"democratic\",\"republic\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f1-1f1e6\",\"native\":\"\uD83C\uDDF1\uD83C\uDDE6\"}],\"version\":2},\"flag-lb\":{\"id\":\"flag-lb\",\"name\":\"Lebanon Flag\",\"keywords\":[\"lb\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f1-1f1e7\",\"native\":\"\uD83C\uDDF1\uD83C\uDDE7\"}],\"version\":2},\"flag-lc\":{\"id\":\"flag-lc\",\"name\":\"St. Lucia Flag\",\"keywords\":[\"lc\",\"st\",\"saint\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f1-1f1e8\",\"native\":\"\uD83C\uDDF1\uD83C\uDDE8\"}],\"version\":2},\"flag-li\":{\"id\":\"flag-li\",\"name\":\"Liechtenstein Flag\",\"keywords\":[\"li\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f1-1f1ee\",\"native\":\"\uD83C\uDDF1\uD83C\uDDEE\"}],\"version\":2},\"flag-lk\":{\"id\":\"flag-lk\",\"name\":\"Sri Lanka Flag\",\"keywords\":[\"lk\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f1-1f1f0\",\"native\":\"\uD83C\uDDF1\uD83C\uDDF0\"}],\"version\":2},\"flag-lr\":{\"id\":\"flag-lr\",\"name\":\"Liberia Flag\",\"keywords\":[\"lr\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f1-1f1f7\",\"native\":\"\uD83C\uDDF1\uD83C\uDDF7\"}],\"version\":2},\"flag-ls\":{\"id\":\"flag-ls\",\"name\":\"Lesotho Flag\",\"keywords\":[\"ls\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f1-1f1f8\",\"native\":\"\uD83C\uDDF1\uD83C\uDDF8\"}],\"version\":2},\"flag-lt\":{\"id\":\"flag-lt\",\"name\":\"Lithuania Flag\",\"keywords\":[\"lt\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f1-1f1f9\",\"native\":\"\uD83C\uDDF1\uD83C\uDDF9\"}],\"version\":2},\"flag-lu\":{\"id\":\"flag-lu\",\"name\":\"Luxembourg Flag\",\"keywords\":[\"lu\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f1-1f1fa\",\"native\":\"\uD83C\uDDF1\uD83C\uDDFA\"}],\"version\":2},\"flag-lv\":{\"id\":\"flag-lv\",\"name\":\"Latvia Flag\",\"keywords\":[\"lv\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f1-1f1fb\",\"native\":\"\uD83C\uDDF1\uD83C\uDDFB\"}],\"version\":2},\"flag-ly\":{\"id\":\"flag-ly\",\"name\":\"Libya Flag\",\"keywords\":[\"ly\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f1-1f1fe\",\"native\":\"\uD83C\uDDF1\uD83C\uDDFE\"}],\"version\":2},\"flag-ma\":{\"id\":\"flag-ma\",\"name\":\"Morocco Flag\",\"keywords\":[\"ma\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f2-1f1e6\",\"native\":\"\uD83C\uDDF2\uD83C\uDDE6\"}],\"version\":2},\"flag-mc\":{\"id\":\"flag-mc\",\"name\":\"Monaco Flag\",\"keywords\":[\"mc\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f2-1f1e8\",\"native\":\"\uD83C\uDDF2\uD83C\uDDE8\"}],\"version\":2},\"flag-md\":{\"id\":\"flag-md\",\"name\":\"Moldova Flag\",\"keywords\":[\"md\",\"republic\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f2-1f1e9\",\"native\":\"\uD83C\uDDF2\uD83C\uDDE9\"}],\"version\":2},\"flag-me\":{\"id\":\"flag-me\",\"name\":\"Montenegro Flag\",\"keywords\":[\"me\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f2-1f1ea\",\"native\":\"\uD83C\uDDF2\uD83C\uDDEA\"}],\"version\":2},\"flag-mf\":{\"id\":\"flag-mf\",\"name\":\"St. Martin Flag\",\"keywords\":[\"mf\",\"st\"],\"skins\":[{\"unified\":\"1f1f2-1f1eb\",\"native\":\"\uD83C\uDDF2\uD83C\uDDEB\"}],\"version\":2},\"flag-mg\":{\"id\":\"flag-mg\",\"name\":\"Madagascar Flag\",\"keywords\":[\"mg\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f2-1f1ec\",\"native\":\"\uD83C\uDDF2\uD83C\uDDEC\"}],\"version\":2},\"flag-mh\":{\"id\":\"flag-mh\",\"name\":\"Marshall Islands Flag\",\"keywords\":[\"mh\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f2-1f1ed\",\"native\":\"\uD83C\uDDF2\uD83C\uDDED\"}],\"version\":2},\"flag-mk\":{\"id\":\"flag-mk\",\"name\":\"North Macedonia Flag\",\"keywords\":[\"mk\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f2-1f1f0\",\"native\":\"\uD83C\uDDF2\uD83C\uDDF0\"}],\"version\":2},\"flag-ml\":{\"id\":\"flag-ml\",\"name\":\"Mali Flag\",\"keywords\":[\"ml\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f2-1f1f1\",\"native\":\"\uD83C\uDDF2\uD83C\uDDF1\"}],\"version\":2},\"flag-mm\":{\"id\":\"flag-mm\",\"name\":\"Myanmar (burma) Flag\",\"keywords\":[\"mm\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f2-1f1f2\",\"native\":\"\uD83C\uDDF2\uD83C\uDDF2\"}],\"version\":2},\"flag-mn\":{\"id\":\"flag-mn\",\"name\":\"Mongolia Flag\",\"keywords\":[\"mn\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f2-1f1f3\",\"native\":\"\uD83C\uDDF2\uD83C\uDDF3\"}],\"version\":2},\"flag-mo\":{\"id\":\"flag-mo\",\"name\":\"Macao Sar China Flag\",\"keywords\":[\"mo\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f2-1f1f4\",\"native\":\"\uD83C\uDDF2\uD83C\uDDF4\"}],\"version\":2},\"flag-mp\":{\"id\":\"flag-mp\",\"name\":\"Northern Mariana Islands Flag\",\"keywords\":[\"mp\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f2-1f1f5\",\"native\":\"\uD83C\uDDF2\uD83C\uDDF5\"}],\"version\":2},\"flag-mq\":{\"id\":\"flag-mq\",\"name\":\"Martinique Flag\",\"keywords\":[\"mq\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f2-1f1f6\",\"native\":\"\uD83C\uDDF2\uD83C\uDDF6\"}],\"version\":2},\"flag-mr\":{\"id\":\"flag-mr\",\"name\":\"Mauritania Flag\",\"keywords\":[\"mr\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f2-1f1f7\",\"native\":\"\uD83C\uDDF2\uD83C\uDDF7\"}],\"version\":2},\"flag-ms\":{\"id\":\"flag-ms\",\"name\":\"Montserrat Flag\",\"keywords\":[\"ms\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f2-1f1f8\",\"native\":\"\uD83C\uDDF2\uD83C\uDDF8\"}],\"version\":2},\"flag-mt\":{\"id\":\"flag-mt\",\"name\":\"Malta Flag\",\"keywords\":[\"mt\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f2-1f1f9\",\"native\":\"\uD83C\uDDF2\uD83C\uDDF9\"}],\"version\":2},\"flag-mu\":{\"id\":\"flag-mu\",\"name\":\"Mauritius Flag\",\"keywords\":[\"mu\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f2-1f1fa\",\"native\":\"\uD83C\uDDF2\uD83C\uDDFA\"}],\"version\":2},\"flag-mv\":{\"id\":\"flag-mv\",\"name\":\"Maldives Flag\",\"keywords\":[\"mv\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f2-1f1fb\",\"native\":\"\uD83C\uDDF2\uD83C\uDDFB\"}],\"version\":2},\"flag-mw\":{\"id\":\"flag-mw\",\"name\":\"Malawi Flag\",\"keywords\":[\"mw\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f2-1f1fc\",\"native\":\"\uD83C\uDDF2\uD83C\uDDFC\"}],\"version\":2},\"flag-mx\":{\"id\":\"flag-mx\",\"name\":\"Mexico Flag\",\"keywords\":[\"mx\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f2-1f1fd\",\"native\":\"\uD83C\uDDF2\uD83C\uDDFD\"}],\"version\":2},\"flag-my\":{\"id\":\"flag-my\",\"name\":\"Malaysia Flag\",\"keywords\":[\"my\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f2-1f1fe\",\"native\":\"\uD83C\uDDF2\uD83C\uDDFE\"}],\"version\":2},\"flag-mz\":{\"id\":\"flag-mz\",\"name\":\"Mozambique Flag\",\"keywords\":[\"mz\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f2-1f1ff\",\"native\":\"\uD83C\uDDF2\uD83C\uDDFF\"}],\"version\":2},\"flag-na\":{\"id\":\"flag-na\",\"name\":\"Namibia Flag\",\"keywords\":[\"na\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f3-1f1e6\",\"native\":\"\uD83C\uDDF3\uD83C\uDDE6\"}],\"version\":2},\"flag-nc\":{\"id\":\"flag-nc\",\"name\":\"New Caledonia Flag\",\"keywords\":[\"nc\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f3-1f1e8\",\"native\":\"\uD83C\uDDF3\uD83C\uDDE8\"}],\"version\":2},\"flag-ne\":{\"id\":\"flag-ne\",\"name\":\"Niger Flag\",\"keywords\":[\"ne\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f3-1f1ea\",\"native\":\"\uD83C\uDDF3\uD83C\uDDEA\"}],\"version\":2},\"flag-nf\":{\"id\":\"flag-nf\",\"name\":\"Norfolk Island Flag\",\"keywords\":[\"nf\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f3-1f1eb\",\"native\":\"\uD83C\uDDF3\uD83C\uDDEB\"}],\"version\":2},\"flag-ng\":{\"id\":\"flag-ng\",\"name\":\"Nigeria Flag\",\"keywords\":[\"ng\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f3-1f1ec\",\"native\":\"\uD83C\uDDF3\uD83C\uDDEC\"}],\"version\":2},\"flag-ni\":{\"id\":\"flag-ni\",\"name\":\"Nicaragua Flag\",\"keywords\":[\"ni\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f3-1f1ee\",\"native\":\"\uD83C\uDDF3\uD83C\uDDEE\"}],\"version\":2},\"flag-nl\":{\"id\":\"flag-nl\",\"name\":\"Netherlands Flag\",\"keywords\":[\"nl\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f3-1f1f1\",\"native\":\"\uD83C\uDDF3\uD83C\uDDF1\"}],\"version\":2},\"flag-no\":{\"id\":\"flag-no\",\"name\":\"Norway Flag\",\"keywords\":[\"no\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f3-1f1f4\",\"native\":\"\uD83C\uDDF3\uD83C\uDDF4\"}],\"version\":2},\"flag-np\":{\"id\":\"flag-np\",\"name\":\"Nepal Flag\",\"keywords\":[\"np\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f3-1f1f5\",\"native\":\"\uD83C\uDDF3\uD83C\uDDF5\"}],\"version\":2},\"flag-nr\":{\"id\":\"flag-nr\",\"name\":\"Nauru Flag\",\"keywords\":[\"nr\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f3-1f1f7\",\"native\":\"\uD83C\uDDF3\uD83C\uDDF7\"}],\"version\":2},\"flag-nu\":{\"id\":\"flag-nu\",\"name\":\"Niue Flag\",\"keywords\":[\"nu\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f3-1f1fa\",\"native\":\"\uD83C\uDDF3\uD83C\uDDFA\"}],\"version\":2},\"flag-nz\":{\"id\":\"flag-nz\",\"name\":\"New Zealand Flag\",\"keywords\":[\"nz\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f3-1f1ff\",\"native\":\"\uD83C\uDDF3\uD83C\uDDFF\"}],\"version\":2},\"flag-om\":{\"id\":\"flag-om\",\"name\":\"Oman Flag\",\"keywords\":[\"om\",\"symbol\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f4-1f1f2\",\"native\":\"\uD83C\uDDF4\uD83C\uDDF2\"}],\"version\":2},\"flag-pa\":{\"id\":\"flag-pa\",\"name\":\"Panama Flag\",\"keywords\":[\"pa\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f5-1f1e6\",\"native\":\"\uD83C\uDDF5\uD83C\uDDE6\"}],\"version\":2},\"flag-pe\":{\"id\":\"flag-pe\",\"name\":\"Peru Flag\",\"keywords\":[\"pe\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f5-1f1ea\",\"native\":\"\uD83C\uDDF5\uD83C\uDDEA\"}],\"version\":2},\"flag-pf\":{\"id\":\"flag-pf\",\"name\":\"French Polynesia Flag\",\"keywords\":[\"pf\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f5-1f1eb\",\"native\":\"\uD83C\uDDF5\uD83C\uDDEB\"}],\"version\":2},\"flag-pg\":{\"id\":\"flag-pg\",\"name\":\"Papua New Guinea Flag\",\"keywords\":[\"pg\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f5-1f1ec\",\"native\":\"\uD83C\uDDF5\uD83C\uDDEC\"}],\"version\":2},\"flag-ph\":{\"id\":\"flag-ph\",\"name\":\"Philippines Flag\",\"keywords\":[\"ph\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f5-1f1ed\",\"native\":\"\uD83C\uDDF5\uD83C\uDDED\"}],\"version\":2},\"flag-pk\":{\"id\":\"flag-pk\",\"name\":\"Pakistan Flag\",\"keywords\":[\"pk\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f5-1f1f0\",\"native\":\"\uD83C\uDDF5\uD83C\uDDF0\"}],\"version\":2},\"flag-pl\":{\"id\":\"flag-pl\",\"name\":\"Poland Flag\",\"keywords\":[\"pl\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f5-1f1f1\",\"native\":\"\uD83C\uDDF5\uD83C\uDDF1\"}],\"version\":2},\"flag-pm\":{\"id\":\"flag-pm\",\"name\":\"St. Pierre & Miquelon Flag\",\"keywords\":[\"pm\",\"st\",\"saint\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f5-1f1f2\",\"native\":\"\uD83C\uDDF5\uD83C\uDDF2\"}],\"version\":2},\"flag-pn\":{\"id\":\"flag-pn\",\"name\":\"Pitcairn Islands Flag\",\"keywords\":[\"pn\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f5-1f1f3\",\"native\":\"\uD83C\uDDF5\uD83C\uDDF3\"}],\"version\":2},\"flag-pr\":{\"id\":\"flag-pr\",\"name\":\"Puerto Rico Flag\",\"keywords\":[\"pr\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f5-1f1f7\",\"native\":\"\uD83C\uDDF5\uD83C\uDDF7\"}],\"version\":2},\"flag-ps\":{\"id\":\"flag-ps\",\"name\":\"Palestinian Territories Flag\",\"keywords\":[\"ps\",\"palestine\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f5-1f1f8\",\"native\":\"\uD83C\uDDF5\uD83C\uDDF8\"}],\"version\":2},\"flag-pt\":{\"id\":\"flag-pt\",\"name\":\"Portugal Flag\",\"keywords\":[\"pt\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f5-1f1f9\",\"native\":\"\uD83C\uDDF5\uD83C\uDDF9\"}],\"version\":2},\"flag-pw\":{\"id\":\"flag-pw\",\"name\":\"Palau Flag\",\"keywords\":[\"pw\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f5-1f1fc\",\"native\":\"\uD83C\uDDF5\uD83C\uDDFC\"}],\"version\":2},\"flag-py\":{\"id\":\"flag-py\",\"name\":\"Paraguay Flag\",\"keywords\":[\"py\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f5-1f1fe\",\"native\":\"\uD83C\uDDF5\uD83C\uDDFE\"}],\"version\":2},\"flag-qa\":{\"id\":\"flag-qa\",\"name\":\"Qatar Flag\",\"keywords\":[\"qa\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f6-1f1e6\",\"native\":\"\uD83C\uDDF6\uD83C\uDDE6\"}],\"version\":2},\"flag-re\":{\"id\":\"flag-re\",\"name\":\"R\u00E9union Flag\",\"keywords\":[\"re\",\"reunion\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f7-1f1ea\",\"native\":\"\uD83C\uDDF7\uD83C\uDDEA\"}],\"version\":2},\"flag-ro\":{\"id\":\"flag-ro\",\"name\":\"Romania Flag\",\"keywords\":[\"ro\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f7-1f1f4\",\"native\":\"\uD83C\uDDF7\uD83C\uDDF4\"}],\"version\":2},\"flag-rs\":{\"id\":\"flag-rs\",\"name\":\"Serbia Flag\",\"keywords\":[\"rs\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f7-1f1f8\",\"native\":\"\uD83C\uDDF7\uD83C\uDDF8\"}],\"version\":2},\"ru\":{\"id\":\"ru\",\"name\":\"Russia Flag\",\"keywords\":[\"ru\",\"russian\",\"federation\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f7-1f1fa\",\"native\":\"\uD83C\uDDF7\uD83C\uDDFA\"}],\"version\":1},\"flag-rw\":{\"id\":\"flag-rw\",\"name\":\"Rwanda Flag\",\"keywords\":[\"rw\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f7-1f1fc\",\"native\":\"\uD83C\uDDF7\uD83C\uDDFC\"}],\"version\":2},\"flag-sa\":{\"id\":\"flag-sa\",\"name\":\"Saudi Arabia Flag\",\"keywords\":[\"sa\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f8-1f1e6\",\"native\":\"\uD83C\uDDF8\uD83C\uDDE6\"}],\"version\":2},\"flag-sb\":{\"id\":\"flag-sb\",\"name\":\"Solomon Islands Flag\",\"keywords\":[\"sb\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f8-1f1e7\",\"native\":\"\uD83C\uDDF8\uD83C\uDDE7\"}],\"version\":2},\"flag-sc\":{\"id\":\"flag-sc\",\"name\":\"Seychelles Flag\",\"keywords\":[\"sc\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f8-1f1e8\",\"native\":\"\uD83C\uDDF8\uD83C\uDDE8\"}],\"version\":2},\"flag-sd\":{\"id\":\"flag-sd\",\"name\":\"Sudan Flag\",\"keywords\":[\"sd\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f8-1f1e9\",\"native\":\"\uD83C\uDDF8\uD83C\uDDE9\"}],\"version\":2},\"flag-se\":{\"id\":\"flag-se\",\"name\":\"Sweden Flag\",\"keywords\":[\"se\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f8-1f1ea\",\"native\":\"\uD83C\uDDF8\uD83C\uDDEA\"}],\"version\":2},\"flag-sg\":{\"id\":\"flag-sg\",\"name\":\"Singapore Flag\",\"keywords\":[\"sg\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f8-1f1ec\",\"native\":\"\uD83C\uDDF8\uD83C\uDDEC\"}],\"version\":2},\"flag-sh\":{\"id\":\"flag-sh\",\"name\":\"St. Helena Flag\",\"keywords\":[\"sh\",\"st\",\"saint\",\"ascension\",\"tristan\",\"cunha\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f8-1f1ed\",\"native\":\"\uD83C\uDDF8\uD83C\uDDED\"}],\"version\":2},\"flag-si\":{\"id\":\"flag-si\",\"name\":\"Slovenia Flag\",\"keywords\":[\"si\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f8-1f1ee\",\"native\":\"\uD83C\uDDF8\uD83C\uDDEE\"}],\"version\":2},\"flag-sj\":{\"id\":\"flag-sj\",\"name\":\"Svalbard & Jan Mayen Flag\",\"keywords\":[\"sj\"],\"skins\":[{\"unified\":\"1f1f8-1f1ef\",\"native\":\"\uD83C\uDDF8\uD83C\uDDEF\"}],\"version\":2},\"flag-sk\":{\"id\":\"flag-sk\",\"name\":\"Slovakia Flag\",\"keywords\":[\"sk\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f8-1f1f0\",\"native\":\"\uD83C\uDDF8\uD83C\uDDF0\"}],\"version\":2},\"flag-sl\":{\"id\":\"flag-sl\",\"name\":\"Sierra Leone Flag\",\"keywords\":[\"sl\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f8-1f1f1\",\"native\":\"\uD83C\uDDF8\uD83C\uDDF1\"}],\"version\":2},\"flag-sm\":{\"id\":\"flag-sm\",\"name\":\"San Marino Flag\",\"keywords\":[\"sm\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f8-1f1f2\",\"native\":\"\uD83C\uDDF8\uD83C\uDDF2\"}],\"version\":2},\"flag-sn\":{\"id\":\"flag-sn\",\"name\":\"Senegal Flag\",\"keywords\":[\"sn\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f8-1f1f3\",\"native\":\"\uD83C\uDDF8\uD83C\uDDF3\"}],\"version\":2},\"flag-so\":{\"id\":\"flag-so\",\"name\":\"Somalia Flag\",\"keywords\":[\"so\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f8-1f1f4\",\"native\":\"\uD83C\uDDF8\uD83C\uDDF4\"}],\"version\":2},\"flag-sr\":{\"id\":\"flag-sr\",\"name\":\"Suriname Flag\",\"keywords\":[\"sr\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f8-1f1f7\",\"native\":\"\uD83C\uDDF8\uD83C\uDDF7\"}],\"version\":2},\"flag-ss\":{\"id\":\"flag-ss\",\"name\":\"South Sudan Flag\",\"keywords\":[\"ss\",\"sd\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f8-1f1f8\",\"native\":\"\uD83C\uDDF8\uD83C\uDDF8\"}],\"version\":2},\"flag-st\":{\"id\":\"flag-st\",\"name\":\"S\u00E3o Tom\u00E9 & Pr\u00EDncipe Flag\",\"keywords\":[\"st\",\"sao\",\"tome\",\"principe\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f8-1f1f9\",\"native\":\"\uD83C\uDDF8\uD83C\uDDF9\"}],\"version\":2},\"flag-sv\":{\"id\":\"flag-sv\",\"name\":\"El Salvador Flag\",\"keywords\":[\"sv\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f8-1f1fb\",\"native\":\"\uD83C\uDDF8\uD83C\uDDFB\"}],\"version\":2},\"flag-sx\":{\"id\":\"flag-sx\",\"name\":\"Sint Maarten Flag\",\"keywords\":[\"sx\",\"dutch\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f8-1f1fd\",\"native\":\"\uD83C\uDDF8\uD83C\uDDFD\"}],\"version\":2},\"flag-sy\":{\"id\":\"flag-sy\",\"name\":\"Syria Flag\",\"keywords\":[\"sy\",\"syrian\",\"arab\",\"republic\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f8-1f1fe\",\"native\":\"\uD83C\uDDF8\uD83C\uDDFE\"}],\"version\":2},\"flag-sz\":{\"id\":\"flag-sz\",\"name\":\"Eswatini Flag\",\"keywords\":[\"sz\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f8-1f1ff\",\"native\":\"\uD83C\uDDF8\uD83C\uDDFF\"}],\"version\":2},\"flag-ta\":{\"id\":\"flag-ta\",\"name\":\"Tristan Da Cunha Flag\",\"keywords\":[\"ta\"],\"skins\":[{\"unified\":\"1f1f9-1f1e6\",\"native\":\"\uD83C\uDDF9\uD83C\uDDE6\"}],\"version\":2},\"flag-tc\":{\"id\":\"flag-tc\",\"name\":\"Turks & Caicos Islands Flag\",\"keywords\":[\"tc\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f9-1f1e8\",\"native\":\"\uD83C\uDDF9\uD83C\uDDE8\"}],\"version\":2},\"flag-td\":{\"id\":\"flag-td\",\"name\":\"Chad Flag\",\"keywords\":[\"td\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f9-1f1e9\",\"native\":\"\uD83C\uDDF9\uD83C\uDDE9\"}],\"version\":2},\"flag-tf\":{\"id\":\"flag-tf\",\"name\":\"French Southern Territories Flag\",\"keywords\":[\"tf\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f9-1f1eb\",\"native\":\"\uD83C\uDDF9\uD83C\uDDEB\"}],\"version\":2},\"flag-tg\":{\"id\":\"flag-tg\",\"name\":\"Togo Flag\",\"keywords\":[\"tg\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f9-1f1ec\",\"native\":\"\uD83C\uDDF9\uD83C\uDDEC\"}],\"version\":2},\"flag-th\":{\"id\":\"flag-th\",\"name\":\"Thailand Flag\",\"keywords\":[\"th\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f9-1f1ed\",\"native\":\"\uD83C\uDDF9\uD83C\uDDED\"}],\"version\":2},\"flag-tj\":{\"id\":\"flag-tj\",\"name\":\"Tajikistan Flag\",\"keywords\":[\"tj\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f9-1f1ef\",\"native\":\"\uD83C\uDDF9\uD83C\uDDEF\"}],\"version\":2},\"flag-tk\":{\"id\":\"flag-tk\",\"name\":\"Tokelau Flag\",\"keywords\":[\"tk\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f9-1f1f0\",\"native\":\"\uD83C\uDDF9\uD83C\uDDF0\"}],\"version\":2},\"flag-tl\":{\"id\":\"flag-tl\",\"name\":\"Timor-Leste Flag\",\"keywords\":[\"tl\",\"timor\",\"leste\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f9-1f1f1\",\"native\":\"\uD83C\uDDF9\uD83C\uDDF1\"}],\"version\":2},\"flag-tm\":{\"id\":\"flag-tm\",\"name\":\"Turkmenistan Flag\",\"keywords\":[\"tm\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f9-1f1f2\",\"native\":\"\uD83C\uDDF9\uD83C\uDDF2\"}],\"version\":2},\"flag-tn\":{\"id\":\"flag-tn\",\"name\":\"Tunisia Flag\",\"keywords\":[\"tn\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f9-1f1f3\",\"native\":\"\uD83C\uDDF9\uD83C\uDDF3\"}],\"version\":2},\"flag-to\":{\"id\":\"flag-to\",\"name\":\"Tonga Flag\",\"keywords\":[\"to\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f9-1f1f4\",\"native\":\"\uD83C\uDDF9\uD83C\uDDF4\"}],\"version\":2},\"flag-tr\":{\"id\":\"flag-tr\",\"name\":\"Turkey Flag\",\"keywords\":[\"tr\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f9-1f1f7\",\"native\":\"\uD83C\uDDF9\uD83C\uDDF7\"}],\"version\":2},\"flag-tt\":{\"id\":\"flag-tt\",\"name\":\"Trinidad & Tobago Flag\",\"keywords\":[\"tt\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f9-1f1f9\",\"native\":\"\uD83C\uDDF9\uD83C\uDDF9\"}],\"version\":2},\"flag-tv\":{\"id\":\"flag-tv\",\"name\":\"Tuvalu Flag\",\"keywords\":[\"tv\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f9-1f1fb\",\"native\":\"\uD83C\uDDF9\uD83C\uDDFB\"}],\"version\":2},\"flag-tw\":{\"id\":\"flag-tw\",\"name\":\"Taiwan Flag\",\"keywords\":[\"tw\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f9-1f1fc\",\"native\":\"\uD83C\uDDF9\uD83C\uDDFC\"}],\"version\":2},\"flag-tz\":{\"id\":\"flag-tz\",\"name\":\"Tanzania Flag\",\"keywords\":[\"tz\",\"united\",\"republic\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1f9-1f1ff\",\"native\":\"\uD83C\uDDF9\uD83C\uDDFF\"}],\"version\":2},\"flag-ua\":{\"id\":\"flag-ua\",\"name\":\"Ukraine Flag\",\"keywords\":[\"ua\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1fa-1f1e6\",\"native\":\"\uD83C\uDDFA\uD83C\uDDE6\"}],\"version\":2},\"flag-ug\":{\"id\":\"flag-ug\",\"name\":\"Uganda Flag\",\"keywords\":[\"ug\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1fa-1f1ec\",\"native\":\"\uD83C\uDDFA\uD83C\uDDEC\"}],\"version\":2},\"flag-um\":{\"id\":\"flag-um\",\"name\":\"U.s. Outlying Islands Flag\",\"keywords\":[\"um\",\"u\",\"s\"],\"skins\":[{\"unified\":\"1f1fa-1f1f2\",\"native\":\"\uD83C\uDDFA\uD83C\uDDF2\"}],\"version\":2},\"flag-un\":{\"id\":\"flag-un\",\"name\":\"United Nations Flag\",\"keywords\":[\"un\",\"banner\"],\"skins\":[{\"unified\":\"1f1fa-1f1f3\",\"native\":\"\uD83C\uDDFA\uD83C\uDDF3\"}],\"version\":4},\"us\":{\"id\":\"us\",\"name\":\"United States Flag\",\"keywords\":[\"us\",\"america\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1fa-1f1f8\",\"native\":\"\uD83C\uDDFA\uD83C\uDDF8\"}],\"version\":1},\"flag-uy\":{\"id\":\"flag-uy\",\"name\":\"Uruguay Flag\",\"keywords\":[\"uy\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1fa-1f1fe\",\"native\":\"\uD83C\uDDFA\uD83C\uDDFE\"}],\"version\":2},\"flag-uz\":{\"id\":\"flag-uz\",\"name\":\"Uzbekistan Flag\",\"keywords\":[\"uz\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1fa-1f1ff\",\"native\":\"\uD83C\uDDFA\uD83C\uDDFF\"}],\"version\":2},\"flag-va\":{\"id\":\"flag-va\",\"name\":\"Vatican City Flag\",\"keywords\":[\"va\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1fb-1f1e6\",\"native\":\"\uD83C\uDDFB\uD83C\uDDE6\"}],\"version\":2},\"flag-vc\":{\"id\":\"flag-vc\",\"name\":\"St. Vincent & Grenadines Flag\",\"keywords\":[\"vc\",\"st\",\"saint\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1fb-1f1e8\",\"native\":\"\uD83C\uDDFB\uD83C\uDDE8\"}],\"version\":2},\"flag-ve\":{\"id\":\"flag-ve\",\"name\":\"Venezuela Flag\",\"keywords\":[\"ve\",\"bolivarian\",\"republic\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1fb-1f1ea\",\"native\":\"\uD83C\uDDFB\uD83C\uDDEA\"}],\"version\":2},\"flag-vg\":{\"id\":\"flag-vg\",\"name\":\"British Virgin Islands Flag\",\"keywords\":[\"vg\",\"bvi\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1fb-1f1ec\",\"native\":\"\uD83C\uDDFB\uD83C\uDDEC\"}],\"version\":2},\"flag-vi\":{\"id\":\"flag-vi\",\"name\":\"U.s. Virgin Islands Flag\",\"keywords\":[\"vi\",\"u\",\"s\",\"us\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1fb-1f1ee\",\"native\":\"\uD83C\uDDFB\uD83C\uDDEE\"}],\"version\":2},\"flag-vn\":{\"id\":\"flag-vn\",\"name\":\"Vietnam Flag\",\"keywords\":[\"vn\",\"viet\",\"nam\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1fb-1f1f3\",\"native\":\"\uD83C\uDDFB\uD83C\uDDF3\"}],\"version\":2},\"flag-vu\":{\"id\":\"flag-vu\",\"name\":\"Vanuatu Flag\",\"keywords\":[\"vu\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1fb-1f1fa\",\"native\":\"\uD83C\uDDFB\uD83C\uDDFA\"}],\"version\":2},\"flag-wf\":{\"id\":\"flag-wf\",\"name\":\"Wallis & Futuna Flag\",\"keywords\":[\"wf\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1fc-1f1eb\",\"native\":\"\uD83C\uDDFC\uD83C\uDDEB\"}],\"version\":2},\"flag-ws\":{\"id\":\"flag-ws\",\"name\":\"Samoa Flag\",\"keywords\":[\"ws\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1fc-1f1f8\",\"native\":\"\uD83C\uDDFC\uD83C\uDDF8\"}],\"version\":2},\"flag-xk\":{\"id\":\"flag-xk\",\"name\":\"Kosovo Flag\",\"keywords\":[\"xk\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1fd-1f1f0\",\"native\":\"\uD83C\uDDFD\uD83C\uDDF0\"}],\"version\":2},\"flag-ye\":{\"id\":\"flag-ye\",\"name\":\"Yemen Flag\",\"keywords\":[\"ye\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1fe-1f1ea\",\"native\":\"\uD83C\uDDFE\uD83C\uDDEA\"}],\"version\":2},\"flag-yt\":{\"id\":\"flag-yt\",\"name\":\"Mayotte Flag\",\"keywords\":[\"yt\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1fe-1f1f9\",\"native\":\"\uD83C\uDDFE\uD83C\uDDF9\"}],\"version\":2},\"flag-za\":{\"id\":\"flag-za\",\"name\":\"South Africa Flag\",\"keywords\":[\"za\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1ff-1f1e6\",\"native\":\"\uD83C\uDDFF\uD83C\uDDE6\"}],\"version\":2},\"flag-zm\":{\"id\":\"flag-zm\",\"name\":\"Zambia Flag\",\"keywords\":[\"zm\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1ff-1f1f2\",\"native\":\"\uD83C\uDDFF\uD83C\uDDF2\"}],\"version\":2},\"flag-zw\":{\"id\":\"flag-zw\",\"name\":\"Zimbabwe Flag\",\"keywords\":[\"zw\",\"nation\",\"country\",\"banner\"],\"skins\":[{\"unified\":\"1f1ff-1f1fc\",\"native\":\"\uD83C\uDDFF\uD83C\uDDFC\"}],\"version\":2},\"flag-england\":{\"id\":\"flag-england\",\"name\":\"England Flag\",\"keywords\":[\"english\"],\"skins\":[{\"unified\":\"1f3f4-e0067-e0062-e0065-e006e-e0067-e007f\",\"native\":\"\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67\uDB40\uDC7F\"}],\"version\":5},\"flag-scotland\":{\"id\":\"flag-scotland\",\"name\":\"Scotland Flag\",\"keywords\":[\"scottish\"],\"skins\":[{\"unified\":\"1f3f4-e0067-e0062-e0073-e0063-e0074-e007f\",\"native\":\"\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74\uDB40\uDC7F\"}],\"version\":5},\"flag-wales\":{\"id\":\"flag-wales\",\"name\":\"Wales Flag\",\"keywords\":[\"welsh\"],\"skins\":[{\"unified\":\"1f3f4-e0067-e0062-e0077-e006c-e0073-e007f\",\"native\":\"\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73\uDB40\uDC7F\"}],\"version\":5}},\"aliases\":{\"satisfied\":\"laughing\",\"grinning_face_with_star_eyes\":\"star-struck\",\"grinning_face_with_one_large_and_one_small_eye\":\"zany_face\",\"smiling_face_with_smiling_eyes_and_hand_covering_mouth\":\"face_with_hand_over_mouth\",\"face_with_finger_covering_closed_lips\":\"shushing_face\",\"face_with_one_eyebrow_raised\":\"face_with_raised_eyebrow\",\"face_with_open_mouth_vomiting\":\"face_vomiting\",\"shocked_face_with_exploding_head\":\"exploding_head\",\"serious_face_with_symbols_covering_mouth\":\"face_with_symbols_on_mouth\",\"poop\":\"hankey\",\"shit\":\"hankey\",\"collision\":\"boom\",\"raised_hand\":\"hand\",\"hand_with_index_and_middle_fingers_crossed\":\"crossed_fingers\",\"sign_of_the_horns\":\"the_horns\",\"reversed_hand_with_middle_finger_extended\":\"middle_finger\",\"thumbsup\":\"+1\",\"thumbsdown\":\"-1\",\"punch\":\"facepunch\",\"mother_christmas\":\"mrs_claus\",\"running\":\"runner\",\"man-with-bunny-ears-partying\":\"men-with-bunny-ears-partying\",\"woman-with-bunny-ears-partying\":\"women-with-bunny-ears-partying\",\"women_holding_hands\":\"two_women_holding_hands\",\"woman_and_man_holding_hands\":\"man_and_woman_holding_hands\",\"couple\":\"man_and_woman_holding_hands\",\"men_holding_hands\":\"two_men_holding_hands\",\"paw_prints\":\"feet\",\"flipper\":\"dolphin\",\"honeybee\":\"bee\",\"lady_beetle\":\"ladybug\",\"cooking\":\"fried_egg\",\"knife\":\"hocho\",\"red_car\":\"car\",\"sailboat\":\"boat\",\"waxing_gibbous_moon\":\"moon\",\"sun_small_cloud\":\"mostly_sunny\",\"sun_behind_cloud\":\"barely_sunny\",\"sun_behind_rain_cloud\":\"partly_sunny_rain\",\"lightning_cloud\":\"lightning\",\"tornado_cloud\":\"tornado\",\"tshirt\":\"shirt\",\"shoe\":\"mans_shoe\",\"telephone\":\"phone\",\"lantern\":\"izakaya_lantern\",\"open_book\":\"book\",\"envelope\":\"email\",\"pencil\":\"memo\",\"heavy_exclamation_mark\":\"exclamation\",\"staff_of_aesculapius\":\"medical_symbol\",\"flag-cn\":\"cn\",\"flag-de\":\"de\",\"flag-es\":\"es\",\"flag-fr\":\"fr\",\"uk\":\"gb\",\"flag-gb\":\"gb\",\"flag-it\":\"it\",\"flag-jp\":\"jp\",\"flag-kr\":\"kr\",\"flag-ru\":\"ru\",\"flag-us\":\"us\"},\"sheet\":{\"cols\":61,\"rows\":61}}", "import { CompletionContext, Completion } from '@codemirror/autocomplete';\nimport {init, SearchIndex} from 'emoji-mart'\nimport data from \"@emoji-mart/data\";\n\nexport async function initEmojiData() {\n    return await init({data});\n}\nexport function emojiSuggestions(keyword: string = \":\") {\n    return async (context: CompletionContext) => {\n        let regexp = new RegExp(keyword + \"(\\\\w+)?\");\n        let word = context.matchBefore(regexp);\n        if (!word) return null;\n        if (word && word.from == word.to && !context.explicit) {\n            return null;\n        }\n        if (word.text.length > 1 && word.text.startsWith(keyword)) word.text = word.text.substring(1)\n        const emojis = await SearchIndex.search(word.text);\n        return {\n            from: word?.from!,\n            options: emojis.map((emoji:any) => {\n                return {\n                    label: emoji.skins[0].shortcodes,\n                    detail: emoji.skins[0].shortcodes,\n                    apply: emoji.skins[0].shortcodes,\n                    displayLabel: emoji.skins[0].native,\n                };\n            }),\n            filter: true,\n        };\n    };\n}\n", "import {\n    ViewPlugin,\n    EditorView,\n    Decoration,\n    DecorationSet,\n    MatchDecorator,\n    WidgetType,\n    ViewUpdate,\n} from '@codemirror/view';\nimport { Extension, Range } from '@codemirror/state';\n\nconst pathStr = `<svg viewBox=\"0 0 1024 1024\" width=\"16\" height=\"16\" fill=\"#3E97FF\"><path d=\"M607.934444 417.856853c-6.179746-6.1777-12.766768-11.746532-19.554358-16.910135l-0.01228 0.011256c-6.986111-6.719028-16.47216-10.857279-26.930349-10.857279-21.464871 0-38.864146 17.400299-38.864146 38.864146 0 9.497305 3.411703 18.196431 9.071609 24.947182l-0.001023 0c0.001023 0.001023 0.00307 0.00307 0.005117 0.004093 2.718925 3.242857 5.953595 6.03853 9.585309 8.251941 3.664459 3.021823 7.261381 5.997598 10.624988 9.361205l3.203972 3.204995c40.279379 40.229237 28.254507 109.539812-12.024871 149.820214L371.157763 796.383956c-40.278355 40.229237-105.761766 40.229237-146.042167 0l-3.229554-3.231601c-40.281425-40.278355-40.281425-105.809861 0-145.991002l75.93546-75.909877c9.742898-7.733125 15.997346-19.668968 15.997346-33.072233 0-23.312962-18.898419-42.211381-42.211381-42.211381-8.797363 0-16.963347 2.693342-23.725354 7.297197-0.021489-0.045025-0.044002-0.088004-0.066515-0.134053l-0.809435 0.757247c-2.989077 2.148943-5.691629 4.669346-8.025791 7.510044l-78.913281 73.841775c-74.178443 74.229608-74.178443 195.632609 0 269.758863l3.203972 3.202948c74.178443 74.127278 195.529255 74.127278 269.707698 0l171.829484-171.880649c74.076112-74.17435 80.357166-191.184297 6.282077-265.311575L607.934444 417.856853z\"></path><path d=\"M855.61957 165.804257l-3.203972-3.203972c-74.17742-74.178443-195.528232-74.178443-269.706675 0L410.87944 334.479911c-74.178443 74.178443-78.263481 181.296089-4.085038 255.522628l3.152806 3.104711c3.368724 3.367701 6.865361 6.54302 10.434653 9.588379 2.583848 2.885723 5.618974 5.355985 8.992815 7.309476 0.025583 0.020466 0.052189 0.041956 0.077771 0.062422l0.011256-0.010233c5.377474 3.092431 11.608386 4.870938 18.257829 4.870938 20.263509 0 36.68962-16.428158 36.68962-36.68962 0-5.719258-1.309832-11.132548-3.645017-15.95846l0 0c-4.850471-10.891048-13.930267-17.521049-20.210297-23.802102l-3.15383-3.102664c-40.278355-40.278355-24.982998-98.79612 15.295358-139.074476l171.930791-171.830507c40.179095-40.280402 105.685018-40.280402 145.965419 0l3.206018 3.152806c40.279379 40.281425 40.279379 105.838513 0 146.06775l-75.686796 75.737962c-10.296507 7.628748-16.97358 19.865443-16.97358 33.662681 0 23.12365 18.745946 41.87062 41.87062 41.87062 8.048303 0 15.563464-2.275833 21.944801-6.211469 0.048095 0.081864 0.093121 0.157589 0.141216 0.240477l1.173732-1.083681c3.616364-2.421142 6.828522-5.393847 9.529027-8.792247l79.766718-73.603345C929.798013 361.334535 929.798013 239.981676 855.61957 165.804257z\"></path></svg>`;\nconst defaultRegexp = /\\b((?:https?|ftp):\\/\\/[^\\s/$.?#].[^\\s]*)\\b/gi;\nexport interface HyperLinkState {\n    at: number;\n    url: string;\n    anchor: HyperLinkExtensionOptions['anchor'];\n}\n\nclass HyperLinkIcon extends WidgetType {\n    private readonly state: HyperLinkState;\n    constructor(state: HyperLinkState) {\n        super();\n        this.state = state;\n    }\n    eq(other: HyperLinkIcon) {\n        return this.state.url === other.state.url && this.state.at === other.state.at;\n    }\n    toDOM() {\n        const wrapper = document.createElement('a');\n        wrapper.href = this.state.url;\n        wrapper.target = '_blank';\n        wrapper.innerHTML = pathStr;\n        wrapper.className = 'cm-hyper-link-icon';\n        wrapper.rel = 'nofollow';\n        const anchor = this.state.anchor && this.state.anchor(wrapper);\n        return anchor || wrapper;\n    }\n}\n\nfunction hyperLinkDecorations(view: EditorView, anchor?: HyperLinkExtensionOptions['anchor']) {\n    const widgets: Array<Range<Decoration>> = [];\n    const doc = view.state.doc;\n    let match;\n\n    while ((match = defaultRegexp.exec(doc.toString())) !== null) {\n        const from = match.index;\n        const to = from + match[0].length;\n        const widget = Decoration.widget({\n            widget: new HyperLinkIcon({\n                at: to,\n                url: match[0],\n                anchor,\n            }),\n            side: 1,\n        });\n        widgets.push(widget.range(to));\n    }\n\n    return Decoration.set(widgets);\n}\n\nconst linkDecorator = (\n    regexp?: RegExp,\n    matchData?: Record<string, string>,\n    matchFn?: (str: string, input: string, from: number, to: number) => string,\n    anchor?: HyperLinkExtensionOptions['anchor'],\n) =>\n    new MatchDecorator({\n        regexp: regexp || defaultRegexp,\n        decorate: (add, from, to, match, view) => {\n            const url = match[0];\n            let urlStr = matchFn && typeof matchFn === 'function' ? matchFn(url, match.input, from, to) : url;\n            if (matchData && matchData[url]) {\n                urlStr = matchData[url];\n            }\n            const start = to,\n                end = to;\n            const linkIcon = new HyperLinkIcon({ at: start, url: urlStr, anchor });\n            add(from, to, Decoration.mark({ class: 'cm-hyper-link-underline' }));\n            add(start, end, Decoration.widget({ widget: linkIcon, side: 1 }));\n        },\n    });\n\nexport type HyperLinkExtensionOptions = {\n    regexp?: RegExp;\n    match?: Record<string, string>;\n    handle?: (value: string, input: string, from: number, to: number) => string;\n    anchor?: (dom: HTMLAnchorElement) => HTMLAnchorElement;\n};\n\nexport function hyperLinkExtension({ regexp, match, handle, anchor }: HyperLinkExtensionOptions = {}) {\n    return ViewPlugin.fromClass(\n        class HyperLinkView {\n            decorator?: MatchDecorator;\n            decorations: DecorationSet;\n            constructor(view: EditorView) {\n                if (regexp) {\n                    this.decorator = linkDecorator(regexp, match, handle, anchor);\n                    this.decorations = this.decorator.createDeco(view);\n                } else {\n                    this.decorations = hyperLinkDecorations(view, anchor);\n                }\n            }\n            update(update: ViewUpdate) {\n                if (update.docChanged || update.viewportChanged) {\n                    if (regexp && this.decorator) {\n                        this.decorations = this.decorator.updateDeco(update, this.decorations);\n                    } else {\n                        this.decorations = hyperLinkDecorations(update.view, anchor);\n                    }\n                }\n            }\n        },\n        {\n            decorations: (v) => v.decorations,\n        },\n    );\n}\n\nexport const hyperLinkStyle = EditorView.baseTheme({\n    '.cm-hyper-link-icon': {\n        display: 'inline-block',\n        verticalAlign: 'middle',\n        marginLeft: '0.2ch',\n    },\n    '.cm-hyper-link-icon svg': {\n        display: 'block',\n    },\n    '.cm-hyper-link-underline': {\n        textDecoration: 'underline',\n    },\n});\n\nexport const hyperLink: Extension = [hyperLinkExtension(), hyperLinkStyle];", "import {Decoration, EditorView, keymap} from \"@codemirror/view\"\nimport {StateEffect, StateField, Text} from \"@codemirror/state\";\nimport {invertedEffects} from \"@codemirror/commands\";\n\nconst addHighlight = StateEffect.define({\n    map: mapRange\n});\nconst removeHighlight = StateEffect.define({\n    map: mapRange\n});\n\nfunction mapRange(range, change) {\n    let from = change.mapPos(range.from), to = change.mapPos(range.to);\n    return from < to ? {from, to} : undefined\n}\n\nfunction highlightSelection(view) {\n    view.dispatch({\n        effects: view.state.selection.ranges.filter(r => !r.empty)\n            .map(r => addHighlight.of(r))\n    });\n    return true\n}\n\nfunction unhighlightSelection(view) {\n    let highlighted = view.state.field(highlightedRanges);\n    let effects = [];\n    for (let sel of view.state.selection.ranges) {\n        highlighted.between(sel.from, sel.to, (rFrom, rTo) => {\n            let from = Math.max(sel.from, rFrom), to = Math.min(sel.to, rTo);\n            if (from < to) effects.push(removeHighlight.of({from, to}));\n        });\n    }\n    view.dispatch({effects});\n    return true\n}\n\nconst highlight = Decoration.mark({\n    attributes: {style: `background-color: rgba(255, 50, 0, 0.3)`}\n});\n\nconst highlightedRanges = StateField.define({\n    create() {\n        return Decoration.none\n    },\n    update(ranges, tr) {\n        ranges = ranges.map(tr.changes);\n        for (let e of tr.effects) {\n            if (e.is(addHighlight))\n                ranges = addRange(ranges, e.value);\n            else if (e.is(removeHighlight))\n                ranges = cutRange(ranges, e.value);\n        }\n        return ranges\n    },\n    provide: field => EditorView.decorations.from(field)\n});\n\n//!cutRange\n\nfunction cutRange(ranges, r) {\n    let leftover = [];\n    ranges.between(r.from, r.to, (from, to, deco) => {\n        if (from < r.from) leftover.push(deco.range(from, r.from));\n        if (to > r.to) leftover.push(deco.range(r.to, to));\n    });\n    return ranges.update({\n        filterFrom: r.from,\n        filterTo: r.to,\n        filter: () => false,\n        add: leftover\n    })\n}\n\nfunction addRange(ranges, r) {\n    ranges.between(r.from, r.to, (from, to) => {\n        if (from < r.from) r = {from, to: r.to};\n        if (to > r.to) r = {from: r.from, to};\n    });\n    return ranges.update({\n        filterFrom: r.from,\n        filterTo: r.to,\n        filter: () => false,\n        add: [highlight.range(r.from, r.to)]\n    })\n}\n\nconst invertHighlight = invertedEffects.of(tr => {\n    let found = [];\n    for (let e of tr.effects) {\n        if (e.is(addHighlight)) found.push(removeHighlight.of(e.value));\n        else if (e.is(removeHighlight)) found.push(addHighlight.of(e.value));\n    }\n    let ranges = tr.startState.field(highlightedRanges);\n    tr.changes.iterChangedRanges((chFrom, chTo) => {\n        ranges.between(chFrom, chTo, (rFrom, rTo) => {\n            if (rFrom >= chFrom || rTo <= chTo) {\n                let from = Math.max(chFrom, rFrom), to = Math.min(chTo, rTo);\n                if (from < to) found.push(addHighlight.of({from, to}));\n            }\n        });\n    });\n    return found\n});\nconst highlightKeymap = keymap.of([\n    {key: \"Mod-h\", run: highlightSelection},\n    {key: \"Shift-Mod-h\", run: unhighlightSelection}\n]);\n\nfunction rangeHighlighting() {\n    return [\n        highlightedRanges,\n        invertHighlight,\n        highlightKeymap\n    ]\n}\n\nexport {rangeHighlighting};", "import {EditorView, keymap, showPanel, Panel} from \"@codemirror/view\";\nimport {StateEffect, StateField, Transaction} from \"@codemirror/state\";\nimport { FilePondRails } from \"../../../javascript/commons/filepond-rails\";\nimport {FilePond} from \"filepond\";\n\nexport const toggleFilePanel = StateEffect.define<boolean>();\nexport const setDom = StateEffect.define<HTMLElement>();    // \u66F4\u65B0 inputName\nexport const filePanelState = StateField.define<{ visible: boolean, dom: HTMLElement }>({\n    create: () => ({ visible: false, dom: document.createElement(\"div\") }), // \u9ED8\u8BA4\u503C\n    update(value, tr) {\n        for (let effect of tr.effects) {\n            if (effect.is(toggleFilePanel)) {\n                value = { ...value, visible: effect.value }; // \u66F4\u65B0\u663E\u793A\u72B6\u6001\n            }\n            if (effect.is(setDom)) {\n                value = { ...value, dom: effect.value }; // \u66F4\u65B0 inputName\n            }\n        }\n        return value;\n    },\n    provide: f => showPanel.from(f, state => state.visible ? createFilePanel : null)\n});\n\nfunction initFilesPanel(targetDom: HTMLElement): FilePond {\n    const options = {\n        acceptedFileTypes: ['application/pdf'],\n        labelIdle:'<i class=\"ki-outline ki-document text-primary \"></i> Drag & Drop PDFs (Max. 5) or <span class=\"filepond--label-action\">Browse</span>',\n        maxFiles: 5,\n        maxFileSize: 5*1000*1000,\n    };\n    return FilePondRails.create(targetDom, options);\n}\n\nfunction createFilePanel(view: EditorView): Panel {\n    const { dom } = view.state.field(filePanelState);\n    const inputDom = dom.children[0] as HTMLElement;\n    if (inputDom && inputDom.dataset.directUploadUrl) { //\u901A\u8FC7 dataset \u5224\u65AD\u662F\u5426\u5DF2\u7ECF\u521D\u59CB\u5316\n        const filePond = initFilesPanel(inputDom);\n        filePond.on('addfile', (error, file) => {\n            if (error) {\n                console.log('File add failed', error);\n            } else {\n                const fileItem = dom.querySelector(\"#filepond--item-\" + file.id) as HTMLElement;\n                if (fileItem) {\n                    fileItem.setAttribute(\"draggable\", \"true\");\n                    fileItem.classList.add(\"draggable\");\n                    fileItem.addEventListener(\"dragstart\", (event) => {\n                        event = event as DragEvent;\n                        const fileUrl = \"/files/blobs/\" + file.serverId + \"/\"+ file.id + \".\" + file.fileExtension;\n                        let markdownString = \"[\"+file.filename+\"](\" + fileUrl +\")\";\n                        event.dataTransfer?.setData(\"text/plain\", markdownString);\n                    });\n                }\n\n            }\n        });\n    }\n    return { top: false, dom }\n}\n\nconst fileKeymap = [{\n    key: \"Alt-F\",\n    run(view: EditorView) {\n        const { visible, dom} = view.state.field(filePanelState);\n        view.dispatch({\n            effects: [\n                toggleFilePanel.of(!visible),\n                setDom.of(dom)\n            ]\n        });\n        return true\n    }\n}];\n\nconst fileTheme = EditorView.baseTheme({\n    \".cm-panels\": {\n        backgroundColor: \"#ffffff\",\n    },\n    \".cm-panels-top\": {\n        borderBottom: \"none\",\n    },\n    \".cm-file-panel\": {\n        borderBottom: \"1px dashed #F1F1F2\",\n    },\n    \".cm-file-panel .filepond--root\": {\n        marginBottom: \"0px\",\n    },\n    \".cm-file-panel .filepond--panel-root\": {\n        border: \"none\",\n        boxShadow: \"none\",\n    },\n});\n\nfunction filePanel(directUploadUrlValue:string) {\n    let dom = document.createElement(\"div\");\n    const inputDom = document.createElement(\"input\");\n    inputDom.type = \"file\";\n    inputDom.dataset.directUploadUrl = directUploadUrlValue;\n    dom.appendChild(inputDom);\n    dom.className = \"cm-file-panel p-1\";\n    return [\n        filePanelState.init(() => ({ visible: false, dom: dom })),\n        keymap.of(fileKeymap),\n        fileTheme\n    ]\n}\n\nexport { filePanel };", "import {EditorView, keymap, showPanel, Panel} from \"@codemirror/view\";\nimport {StateEffect, StateField } from \"@codemirror/state\";\nimport { FilePondRails } from \"../../../javascript/commons/filepond-rails\";\nimport {FilePond} from \"filepond\";\nexport const toggleImagePanel = StateEffect.define<boolean>();\nexport const setDom = StateEffect.define<HTMLElement>();     // \u66F4\u65B0 inputName\n\nexport const imagePanelState = StateField.define<{ visible: boolean, dom: HTMLElement }>({\n    create: () => (\n        {\n            visible: false,\n            dom: document.createElement(\"div\"),\n        }\n    ), // \u9ED8\u8BA4\u503C\n    update(value, tr) {\n        for (let effect of tr.effects) {\n            if (effect.is(toggleImagePanel)) {\n                value = {...value, visible: effect.value}; // \u66F4\u65B0\u663E\u793A\u72B6\u6001\n            }\n            if (effect.is(setDom)) {\n                value = {...value, dom: effect.value}; // \u66F4\u65B0 inputName\n            }\n        }\n        return value;\n    },\n    provide: f => showPanel.from(f, state => state.visible ? createImagePanel : null)\n});\n\nfunction initImagesPanel(targetDom: HTMLElement): FilePond {\n    const options = {\n        maxFileSize: 2*1000*1000,\n        maxFiles: 10,\n        // allowReorder: true,\n        dropOnElement: true,\n        labelIdle:'<i class=\"ki-outline ki-picture text-warning \"></i> Drag & Drop Images (Max. 10) or <span class=\"filepond--label-action\">Browse</span>',\n        allowImagePreview: true,\n        imagePreviewHeight: 100,\n    };\n    return FilePondRails.create(targetDom, options);\n}\n\nfunction createImagePanel(view: EditorView): Panel {\n    const { dom } = view.state.field(imagePanelState);\n    const inputDom = dom.children[0] as HTMLElement;\n    if (inputDom && inputDom.dataset.directUploadUrl) { //\u901A\u8FC7 dataset \u5224\u65AD\u662F\u5426\u5DF2\u7ECF\u521D\u59CB\u5316\n        const filePond = initImagesPanel(inputDom);\n        filePond.on('addfile', (error, file) => {\n            if (error) {\n                console.log('File add failed', error);\n            } else {\n                const fileItem = dom.querySelector(\"#filepond--item-\" + file.id) as HTMLElement;\n                if (fileItem) {\n                    fileItem.setAttribute(\"draggable\", \"true\");\n                    fileItem.classList.add(\"draggable\");\n                    fileItem.addEventListener(\"dragstart\", (event) => {\n                        event = event as DragEvent;\n                        const imageUrl = \"/files/blobs/\" + file.serverId + \"/\"+ file.id + \".\" + file.fileExtension;\n                        let markdownString = \"![](\" + imageUrl +\")\";\n                        event.dataTransfer?.setData(\"text/plain\", markdownString);\n                    });\n                }\n\n            }\n        });\n    }\n    return { top: false, dom }\n}\n\nconst imageKeymap = [{\n    key: \"Alt-I\",\n    run(view: EditorView) {\n        const {visible, dom} = view.state.field(imagePanelState);\n        view.dispatch({\n            effects: [\n                toggleImagePanel.of(!visible),\n                setDom.of(dom)\n            ]\n        });\n        return true\n    }\n}];\n\nconst imageTheme = EditorView.baseTheme({\n    \".cm-panels\": {\n        backgroundColor: \"#ffffff\",\n    },\n    \".cm-panels-top\": {\n        borderBottom: \"none\",\n    },\n    \".cm-image-panel\": {\n        borderBottom: \"1px dashed #F1F1F2\",\n    },\n    \".cm-image-panel .filepond--root\": {\n        marginBottom: \"0px\",\n    },\n    \".cm-image-panel .filepond--panel-root\": {\n        border: \"none\",\n        boxShadow: \"none\",\n    },\n});\n\nfunction imagePanel(directUploadUrlValue:string) {\n    let dom = document.createElement(\"div\");\n    const inputDom = document.createElement(\"input\");\n    inputDom.type = \"file\";\n    inputDom.dataset.directUploadUrl = directUploadUrlValue;\n    dom.appendChild(inputDom);\n    dom.className = \"cm-image-panel p-1\";\n    return [\n        imagePanelState.init(() => ({ visible: false, dom: dom })),\n        keymap.of(imageKeymap),\n        imageTheme\n    ]\n}\n\nexport { imagePanel };", "import {EditorView, keymap, showPanel, Panel} from \"@codemirror/view\";\nimport {StateEffect, StateField, Transaction} from \"@codemirror/state\";\nimport {Picker} from \"emoji-mart\";\n\ndeclare global {\n    interface Window {\n        KTThemeMode: {\n            getMode: () => string;\n        };\n    }\n}\n\nexport const toggleEmojiPanel = StateEffect.define<boolean>();\n\nexport const emojiPanelState = StateField.define<boolean>({\n    create: () => false,\n    update(value: boolean, tr: Transaction) {\n        for (let e of tr.effects) if (e.is(toggleEmojiPanel)) value = e.value;\n        return value\n    },\n    provide: f => showPanel.from(f, on => on ? createEmojiPanel : null)\n});\n\nfunction initEmojiPicker(targetDom: HTMLElement, view: EditorView) {\n    const theme = window.KTThemeMode.getMode();\n    const pickerOptions = {\n        parent: targetDom,\n        onEmojiSelect: (emoji:any) => {\n            const emojiText = emoji.shortcodes;\n            view.dispatch(view.state.replaceSelection(emojiText));\n        },\n        dynamicWidth: true,\n        previewPosition: \"none\",\n        searchPosition: \"none\",\n        navPosition: \"none\",\n        theme: theme,\n    }\n    return new Picker(pickerOptions);\n}\n\nfunction createEmojiPanel(view: EditorView): Panel {\n    let dom = document.createElement(\"div\");\n    dom.className = \"cm-emoji-panel\";\n    initEmojiPicker(dom, view);\n    return { top: false, dom }\n}\n\nconst emojiKeymap = [{\n    key: \"Alt-E\",\n    run(view: EditorView) {\n        view.dispatch({\n            effects: toggleEmojiPanel.of(!view.state.field(emojiPanelState))\n        });\n        return true\n    }\n}];\n\nconst emojiTheme = EditorView.baseTheme({\n    \".cm-panels\": {\n        backgroundColor: \"#ffffff\",\n    },\n    \".cm-panels-top\": {\n        borderBottom: \"none\",\n    },\n    \".cm-emoji-panel\": {\n        borderBottom: \"1px dashed #F1F1F2\",\n    },\n    \"em-emoji-picker\": {\n        width: \"100%\",\n        height: \"20vh\",\n        overflow: \"auto\",\n        borderRadius: \"0\",\n    },\n});\n\nfunction emojiPanel() {\n    return [emojiPanelState, keymap.of(emojiKeymap), emojiTheme]\n}\n\nexport { emojiPanel };", "import {ViewPlugin} from \"@codemirror/view\";\n\nfunction countWords(doc) {\n    let count = 0, iter = doc.iter();\n    while (!iter.next().done) {\n        let inWord = false;\n        for (let i = 0; i < iter.value.length; i++) {\n            // \u5339\u914D\u82F1\u6587\u7CFB\u5B57\u7B26\n            let engWord = /\\w/.test(iter.value[i]);\n            // \u5339\u914D\u4E2D\u6587\u3001\u65E5\u6587\u5B57\u7B26\n            let cnJpWord = /[\\u4e00-\\u9fa5\\u3040-\\u309f\\u30a0-\\u30ff]/.test(iter.value[i]);\n\n            if (engWord && !inWord) {\n                count++;\n                inWord = true;\n            } else if (!engWord && inWord) {\n                inWord = false;\n            } else if (cnJpWord) {\n                count++;\n            }\n        }\n    }\n    return `<span class=\"text-gray-400 fw-semibold fs-7\">Word count: ${count}</span>`;\n}\n\nexport function wordCounter(dom) {\n    return ViewPlugin.fromClass(class {\n        update(update) {\n            if (update.docChanged)\n                dom.innerHTML = countWords(update.state.doc);\n        }\n    });\n}", "import {SyntaxNode, Parser, Input, parseMixed, SyntaxNodeRef} from \"@lezer/common\"\nimport {Type, MarkdownExtension} from \"./markdown\"\n\nfunction leftOverSpace(node: SyntaxNode, from: number, to: number) {\n  let ranges = []\n  for (let n = node.firstChild, pos = from;; n = n.nextSibling) {\n    let nextPos = n ? n.from : to\n    if (nextPos > pos) ranges.push({from: pos, to: nextPos})\n    if (!n) break\n    pos = n.to\n  }\n  return ranges\n}\n\n/// Create a Markdown extension to enable nested parsing on code\n/// blocks and/or embedded HTML.\nexport function parseCode(config: {\n  /// When provided, this will be used to parse the content of code\n  /// blocks. `info` is the string after the opening ` ``` ` marker,\n  /// or the empty string if there is no such info or this is an\n  /// indented code block. If there is a parser available for the\n  /// code, it should return a function that can construct the\n  /// [parse](https://lezer.codemirror.net/docs/ref/#common.PartialParse).\n  codeParser?: (info: string) => null | Parser\n  /// The parser used to parse HTML tags (both block and inline).\n  htmlParser?: Parser,\n}): MarkdownExtension {\n  let {codeParser, htmlParser} = config\n  let wrap = parseMixed((node: SyntaxNodeRef, input: Input) => {\n    let id = node.type.id\n    if (codeParser && (id == Type.CodeBlock || id == Type.FencedCode)) {\n      let info = \"\"\n      if (id == Type.FencedCode) {\n        let infoNode = node.node.getChild(Type.CodeInfo)\n        if (infoNode) info = input.read(infoNode.from, infoNode.to)\n      }\n      let parser = codeParser(info)\n      if (parser)\n        return {parser, overlay: node => node.type.id == Type.CodeText}\n    } else if (htmlParser && (id == Type.HTMLBlock || id == Type.HTMLTag)) {\n      return {parser: htmlParser, overlay: leftOverSpace(node.node, node.from, node.to)}\n    }\n    return null\n  })\n  return {wrap}\n}\n", "import {InlineContext, BlockContext, MarkdownConfig,\n        LeafBlockParser, LeafBlock, Line, Element, space, Punctuation} from \"./markdown\"\nimport {tags as t} from \"@lezer/highlight\"\n\nconst StrikethroughDelim = {resolve: \"Strikethrough\", mark: \"StrikethroughMark\"}\n\n/// An extension that implements\n/// [GFM-style](https://github.github.com/gfm/#strikethrough-extension-)\n/// Strikethrough syntax using `~~` delimiters.\nexport const Strikethrough: MarkdownConfig = {\n  defineNodes: [{\n    name: \"Strikethrough\",\n    style: {\"Strikethrough/...\": t.strikethrough}\n  }, {\n    name: \"StrikethroughMark\",\n    style: t.processingInstruction\n  }],\n  parseInline: [{\n    name: \"Strikethrough\",\n    parse(cx, next, pos) {\n      if (next != 126 /* '~' */ || cx.char(pos + 1) != 126 || cx.char(pos + 2) == 126) return -1\n      let before = cx.slice(pos - 1, pos), after = cx.slice(pos + 2, pos + 3)\n      let sBefore = /\\s|^$/.test(before), sAfter = /\\s|^$/.test(after)\n      let pBefore = Punctuation.test(before), pAfter = Punctuation.test(after)\n      return cx.addDelimiter(StrikethroughDelim, pos, pos + 2,\n                             !sAfter && (!pAfter || sBefore || pBefore),\n                             !sBefore && (!pBefore || sAfter || pAfter))\n    },\n    after: \"Emphasis\"\n  }]\n}\n\nfunction parseRow(cx: BlockContext, line: string, startI = 0, elts?: Element[], offset = 0) {\n  let count = 0, first = true, cellStart = -1, cellEnd = -1, esc = false\n  let parseCell = () => {\n    elts!.push(cx.elt(\"TableCell\", offset + cellStart, offset + cellEnd,\n                     cx.parser.parseInline(line.slice(cellStart, cellEnd), offset + cellStart)))\n  }\n\n  for (let i = startI; i < line.length; i++) {\n    let next = line.charCodeAt(i)\n    if (next == 124 /* '|' */ && !esc) {\n      if (!first || cellStart > -1) count++\n      first = false\n      if (elts) {\n        if (cellStart > -1) parseCell()\n        elts.push(cx.elt(\"TableDelimiter\", i + offset, i + offset + 1))\n      }\n      cellStart = cellEnd = -1\n    } else if (esc || next != 32 && next != 9) {\n      if (cellStart < 0) cellStart = i\n      cellEnd = i + 1\n    }\n    esc = !esc && next == 92\n  }\n  if (cellStart > -1) {\n    count++\n    if (elts) parseCell()\n  }\n  return count\n}\n\nfunction hasPipe(str: string, start: number) {\n  for (let i = start; i < str.length; i++) {\n    let next = str.charCodeAt(i)\n    if (next == 124 /* '|' */) return true\n    if (next == 92 /* '\\\\' */) i++\n  }\n  return false\n}\n\nconst delimiterLine = /^\\|?(\\s*:?-+:?\\s*\\|)+(\\s*:?-+:?\\s*)?$/\n\nclass TableParser implements LeafBlockParser {\n  // Null means we haven't seen the second line yet, false means this\n  // isn't a table, and an array means this is a table and we've\n  // parsed the given rows so far.\n  rows: false | null | Element[] = null\n\n  nextLine(cx: BlockContext, line: Line, leaf: LeafBlock) {\n    if (this.rows == null) { // Second line\n      this.rows = false\n      let lineText\n      if ((line.next == 45 || line.next == 58 || line.next == 124 /* '-:|' */) &&\n          delimiterLine.test(lineText = line.text.slice(line.pos))) {\n        let firstRow: Element[] = [], firstCount = parseRow(cx, leaf.content, 0, firstRow, leaf.start)\n        if (firstCount == parseRow(cx, lineText, line.pos))\n          this.rows = [cx.elt(\"TableHeader\", leaf.start, leaf.start + leaf.content.length, firstRow),\n                       cx.elt(\"TableDelimiter\", cx.lineStart + line.pos, cx.lineStart + line.text.length)]\n      }\n    } else if (this.rows) { // Line after the second\n      let content: Element[] = []\n      parseRow(cx, line.text, line.pos, content, cx.lineStart)\n      this.rows.push(cx.elt(\"TableRow\", cx.lineStart + line.pos, cx.lineStart + line.text.length, content))\n    }\n    return false\n  }\n\n  finish(cx: BlockContext, leaf: LeafBlock) {\n    if (!this.rows) return false\n    cx.addLeafElement(leaf, cx.elt(\"Table\", leaf.start, leaf.start + leaf.content.length, this.rows as readonly Element[]))\n    return true\n  }\n}\n\n/// This extension provides\n/// [GFM-style](https://github.github.com/gfm/#tables-extension-)\n/// tables, using syntax like this:\n///\n/// ```\n/// | head 1 | head 2 |\n/// | ---    | ---    |\n/// | cell 1 | cell 2 |\n/// ```\nexport const Table: MarkdownConfig = {\n  defineNodes: [\n    {name: \"Table\", block: true},\n    {name: \"TableHeader\", style: {\"TableHeader/...\": t.heading}},\n    \"TableRow\",\n    {name: \"TableCell\", style: t.content},\n    {name: \"TableDelimiter\", style: t.processingInstruction},\n  ],\n  parseBlock: [{\n    name: \"Table\",\n    leaf(_, leaf) { return hasPipe(leaf.content, 0) ? new TableParser : null },\n    endLeaf(cx, line, leaf) {\n      if (leaf.parsers.some(p => p instanceof TableParser) || !hasPipe(line.text, line.basePos)) return false\n      let next = cx.scanLine(cx.absoluteLineEnd + 1).text\n      return delimiterLine.test(next) && parseRow(cx, line.text, line.basePos) == parseRow(cx, next, line.basePos)\n    },\n    before: \"SetextHeading\"\n  }]\n}\n\nclass TaskParser implements LeafBlockParser {\n  nextLine() { return false }\n\n  finish(cx: BlockContext, leaf: LeafBlock) {\n    cx.addLeafElement(leaf, cx.elt(\"Task\", leaf.start, leaf.start + leaf.content.length, [\n      cx.elt(\"TaskMarker\", leaf.start, leaf.start + 3),\n      ...cx.parser.parseInline(leaf.content.slice(3), leaf.start + 3)\n    ]))\n    return true\n  }\n}\n\n/// Extension providing\n/// [GFM-style](https://github.github.com/gfm/#task-list-items-extension-)\n/// task list items, where list items can be prefixed with `[ ]` or\n/// `[x]` to add a checkbox.\nexport const TaskList: MarkdownConfig = {\n  defineNodes: [\n    {name: \"Task\", block: true, style: t.list},\n    {name: \"TaskMarker\", style: t.atom}\n  ],\n  parseBlock: [{\n    name: \"TaskList\",\n    leaf(cx, leaf) {\n      return /^\\[[ xX]\\][ \\t]/.test(leaf.content) && cx.parentType().name == \"ListItem\" ? new TaskParser : null\n    },\n    after: \"SetextHeading\"\n  }]\n}\n\nconst autolinkRE = /(www\\.)|(https?:\\/\\/)|([\\w.+-]+@)|(mailto:|xmpp:)/gy\nconst urlRE = /[\\w-]+(\\.\\w+(\\.\\w+)*)(\\/[^\\s<]*)?/gy\nconst emailRE = /[\\w.+-]+@[\\w-]+(\\.[\\w.-]+)+/gy\nconst xmppResourceRE = /\\/[a-zA-Z\\d@.]+/gy\n\nfunction count(str: string, from: number, to: number, ch: string) {\n  let result = 0\n  for (let i = from; i < to; i++) if (str[i] == ch) result++\n  return result\n}\n\nfunction autolinkURLEnd(text: string, from: number) {\n  urlRE.lastIndex = from\n  let m = urlRE.exec(text)\n  if (!m) return -1\n  let end = from + m[0].length\n  for (;;) {\n    let last = text[end - 1], m\n    if (/[?!.,:*_~]/.test(last) ||\n        last == \")\" && count(text, from, end, \")\") > count(text, from, end, \"(\"))\n      end--\n    else if (last == \";\" && (m = /&(?:#\\d+|#x[a-f\\d]+|\\w+);$/.exec(text.slice(from, end))))\n      end = from + m.index\n    else\n      break\n  }\n  return end\n}\n\nfunction autolinkEmailEnd(text: string, from: number) {\n  emailRE.lastIndex = from\n  let m = emailRE.exec(text)\n  if (!m) return -1\n  let last = m[0][m[0].length - 1]\n  return last == \"_\" || last == \"-\" ? -1 : from + m[0].length - (last == \".\" ? 1 : 0)\n}\n\n/// Extension that implements autolinking for\n/// `www.`/`http://`/`https://`/`mailto:`/`xmpp:` URLs and email\n/// addresses.\nexport const Autolink: MarkdownConfig = {\n  parseInline: [{\n    name: \"Autolink\",\n    parse(cx, next, absPos) {\n      let pos = absPos - cx.offset\n      autolinkRE.lastIndex = pos\n      let m = autolinkRE.exec(cx.text), end = -1\n      if (!m) return -1\n      if (m[1] || m[2]) { // www., http://\n        end = autolinkURLEnd(cx.text, pos + m[0].length)\n      } else if (m[3]) { // email address\n        end = autolinkEmailEnd(cx.text, pos)\n      } else { // mailto:/xmpp:\n        end = autolinkEmailEnd(cx.text, pos + m[0].length)\n        if (end > -1 && m[0] == \"xmpp:\") {\n          xmppResourceRE.lastIndex = end\n          m = xmppResourceRE.exec(cx.text)\n          if (m) end = m.index + m[0].length\n        }\n      }\n      if (end < 0) return -1\n      cx.addElement(cx.elt(\"URL\", absPos, end + cx.offset))\n      return end + cx.offset\n    }\n  }]\n}\n\n/// Extension bundle containing [`Table`](#Table),\n/// [`TaskList`](#TaskList), [`Strikethrough`](#Strikethrough), and\n/// [`Autolink`](#Autolink).\nexport const GFM = [Table, TaskList, Strikethrough, Autolink]\n\nfunction parseSubSuper(ch: number, node: string, mark: string) {\n  return (cx: InlineContext, next: number, pos: number) => {\n    if (next != ch || cx.char(pos + 1) == ch) return -1\n    let elts = [cx.elt(mark, pos, pos + 1)]\n    for (let i = pos + 1; i < cx.end; i++) {\n      let next = cx.char(i)\n      if (next == ch)\n        return cx.addElement(cx.elt(node, pos, i + 1, elts.concat(cx.elt(mark, i, i + 1))))\n      if (next == 92 /* '\\\\' */)\n        elts.push(cx.elt(\"Escape\", i, i++ + 2))\n      if (space(next)) break\n    }\n    return -1\n  }\n}\n\n/// Extension providing\n/// [Pandoc-style](https://pandoc.org/MANUAL.html#superscripts-and-subscripts)\n/// superscript using `^` markers.\nexport const Superscript: MarkdownConfig = {\n  defineNodes: [\n    {name: \"Superscript\", style: t.special(t.content)},\n    {name: \"SuperscriptMark\", style: t.processingInstruction}\n  ],\n  parseInline: [{\n    name: \"Superscript\",\n    parse: parseSubSuper(94 /* '^' */, \"Superscript\", \"SuperscriptMark\")\n  }]\n}\n\n/// Extension providing\n/// [Pandoc-style](https://pandoc.org/MANUAL.html#superscripts-and-subscripts)\n/// subscript using `~` markers.\nexport const Subscript: MarkdownConfig = {\n  defineNodes: [\n    {name: \"Subscript\", style: t.special(t.content)},\n    {name: \"SubscriptMark\", style: t.processingInstruction}\n  ],\n  parseInline: [{\n    name: \"Subscript\",\n    parse: parseSubSuper(126 /* '~' */, \"Subscript\", \"SubscriptMark\")\n  }]\n}\n\n/// Extension that parses two colons with only letters, underscores,\n/// and numbers between them as `Emoji` nodes.\nexport const Emoji: MarkdownConfig = {\n  defineNodes: [{name: \"Emoji\", style: t.character}],\n  parseInline: [{\n    name: \"Emoji\",\n    parse(cx, next, pos) {\n      let match: RegExpMatchArray | null\n      if (next != 58 /* ':' */ || !(match = /^[a-zA-Z_0-9]+:/.exec(cx.slice(pos + 1, cx.end)))) return -1\n      return cx.addElement(cx.elt(\"Emoji\", pos, pos + 1 + match[0].length))\n    }\n  }]\n}\n", "export {parser, MarkdownParser, Line, Element, LeafBlock, BlockContext, InlineContext} from \"./markdown\"\nexport type {\n    MarkdownConfig, MarkdownExtension,\n    NodeSpec, InlineParser, BlockParser, LeafBlockParser, DelimiterType\n} from \"./markdown\"\nexport {parseCode} from \"./nest\"\nexport {Table, TaskList, Strikethrough, Autolink, GFM, Subscript, Superscript, Emoji} from \"./extension\"\n", "import { Parser, NodeProp, NodeSet, NodeType, DefaultBufferLength, Tree, IterMode } from '@lezer/common';\n\n/**\nA parse stack. These are used internally by the parser to track\nparsing progress. They also provide some properties and methods\nthat external code such as a tokenizer can use to get information\nabout the parse state.\n*/\nclass Stack {\n    /**\n    @internal\n    */\n    constructor(\n    /**\n    The parse that this stack is part of @internal\n    */\n    p, \n    /**\n    Holds state, input pos, buffer index triplets for all but the\n    top state @internal\n    */\n    stack, \n    /**\n    The current parse state @internal\n    */\n    state, \n    // The position at which the next reduce should take place. This\n    // can be less than `this.pos` when skipped expressions have been\n    // added to the stack (which should be moved outside of the next\n    // reduction)\n    /**\n    @internal\n    */\n    reducePos, \n    /**\n    The input position up to which this stack has parsed.\n    */\n    pos, \n    /**\n    The dynamic score of the stack, including dynamic precedence\n    and error-recovery penalties\n    @internal\n    */\n    score, \n    // The output buffer. Holds (type, start, end, size) quads\n    // representing nodes created by the parser, where `size` is\n    // amount of buffer array entries covered by this node.\n    /**\n    @internal\n    */\n    buffer, \n    // The base offset of the buffer. When stacks are split, the split\n    // instance shared the buffer history with its parent up to\n    // `bufferBase`, which is the absolute offset (including the\n    // offset of previous splits) into the buffer at which this stack\n    // starts writing.\n    /**\n    @internal\n    */\n    bufferBase, \n    /**\n    @internal\n    */\n    curContext, \n    /**\n    @internal\n    */\n    lookAhead = 0, \n    // A parent stack from which this was split off, if any. This is\n    // set up so that it always points to a stack that has some\n    // additional buffer content, never to a stack with an equal\n    // `bufferBase`.\n    /**\n    @internal\n    */\n    parent) {\n        this.p = p;\n        this.stack = stack;\n        this.state = state;\n        this.reducePos = reducePos;\n        this.pos = pos;\n        this.score = score;\n        this.buffer = buffer;\n        this.bufferBase = bufferBase;\n        this.curContext = curContext;\n        this.lookAhead = lookAhead;\n        this.parent = parent;\n    }\n    /**\n    @internal\n    */\n    toString() {\n        return `[${this.stack.filter((_, i) => i % 3 == 0).concat(this.state)}]@${this.pos}${this.score ? \"!\" + this.score : \"\"}`;\n    }\n    // Start an empty stack\n    /**\n    @internal\n    */\n    static start(p, state, pos = 0) {\n        let cx = p.parser.context;\n        return new Stack(p, [], state, pos, pos, 0, [], 0, cx ? new StackContext(cx, cx.start) : null, 0, null);\n    }\n    /**\n    The stack's current [context](#lr.ContextTracker) value, if\n    any. Its type will depend on the context tracker's type\n    parameter, or it will be `null` if there is no context\n    tracker.\n    */\n    get context() { return this.curContext ? this.curContext.context : null; }\n    // Push a state onto the stack, tracking its start position as well\n    // as the buffer base at that point.\n    /**\n    @internal\n    */\n    pushState(state, start) {\n        this.stack.push(this.state, start, this.bufferBase + this.buffer.length);\n        this.state = state;\n    }\n    // Apply a reduce action\n    /**\n    @internal\n    */\n    reduce(action) {\n        var _a;\n        let depth = action >> 19 /* Action.ReduceDepthShift */, type = action & 65535 /* Action.ValueMask */;\n        let { parser } = this.p;\n        let dPrec = parser.dynamicPrecedence(type);\n        if (dPrec)\n            this.score += dPrec;\n        if (depth == 0) {\n            this.pushState(parser.getGoto(this.state, type, true), this.reducePos);\n            // Zero-depth reductions are a special case\u2014they add stuff to\n            // the stack without popping anything off.\n            if (type < parser.minRepeatTerm)\n                this.storeNode(type, this.reducePos, this.reducePos, 4, true);\n            this.reduceContext(type, this.reducePos);\n            return;\n        }\n        // Find the base index into `this.stack`, content after which will\n        // be dropped. Note that with `StayFlag` reductions we need to\n        // consume two extra frames (the dummy parent node for the skipped\n        // expression and the state that we'll be staying in, which should\n        // be moved to `this.state`).\n        let base = this.stack.length - ((depth - 1) * 3) - (action & 262144 /* Action.StayFlag */ ? 6 : 0);\n        let start = base ? this.stack[base - 2] : this.p.ranges[0].from, size = this.reducePos - start;\n        // This is a kludge to try and detect overly deep left-associative\n        // trees, which will not increase the parse stack depth and thus\n        // won't be caught by the regular stack-depth limit check.\n        if (size >= 2000 /* Recover.MinBigReduction */ && !((_a = this.p.parser.nodeSet.types[type]) === null || _a === void 0 ? void 0 : _a.isAnonymous)) {\n            if (start == this.p.lastBigReductionStart) {\n                this.p.bigReductionCount++;\n                this.p.lastBigReductionSize = size;\n            }\n            else if (this.p.lastBigReductionSize < size) {\n                this.p.bigReductionCount = 1;\n                this.p.lastBigReductionStart = start;\n                this.p.lastBigReductionSize = size;\n            }\n        }\n        let bufferBase = base ? this.stack[base - 1] : 0, count = this.bufferBase + this.buffer.length - bufferBase;\n        // Store normal terms or `R -> R R` repeat reductions\n        if (type < parser.minRepeatTerm || (action & 131072 /* Action.RepeatFlag */)) {\n            let pos = parser.stateFlag(this.state, 1 /* StateFlag.Skipped */) ? this.pos : this.reducePos;\n            this.storeNode(type, start, pos, count + 4, true);\n        }\n        if (action & 262144 /* Action.StayFlag */) {\n            this.state = this.stack[base];\n        }\n        else {\n            let baseStateID = this.stack[base - 3];\n            this.state = parser.getGoto(baseStateID, type, true);\n        }\n        while (this.stack.length > base)\n            this.stack.pop();\n        this.reduceContext(type, start);\n    }\n    // Shift a value into the buffer\n    /**\n    @internal\n    */\n    storeNode(term, start, end, size = 4, isReduce = false) {\n        if (term == 0 /* Term.Err */ &&\n            (!this.stack.length || this.stack[this.stack.length - 1] < this.buffer.length + this.bufferBase)) {\n            // Try to omit/merge adjacent error nodes\n            let cur = this, top = this.buffer.length;\n            if (top == 0 && cur.parent) {\n                top = cur.bufferBase - cur.parent.bufferBase;\n                cur = cur.parent;\n            }\n            if (top > 0 && cur.buffer[top - 4] == 0 /* Term.Err */ && cur.buffer[top - 1] > -1) {\n                if (start == end)\n                    return;\n                if (cur.buffer[top - 2] >= start) {\n                    cur.buffer[top - 2] = end;\n                    return;\n                }\n            }\n        }\n        if (!isReduce || this.pos == end) { // Simple case, just append\n            this.buffer.push(term, start, end, size);\n        }\n        else { // There may be skipped nodes that have to be moved forward\n            let index = this.buffer.length;\n            if (index > 0 && this.buffer[index - 4] != 0 /* Term.Err */)\n                while (index > 0 && this.buffer[index - 2] > end) {\n                    // Move this record forward\n                    this.buffer[index] = this.buffer[index - 4];\n                    this.buffer[index + 1] = this.buffer[index - 3];\n                    this.buffer[index + 2] = this.buffer[index - 2];\n                    this.buffer[index + 3] = this.buffer[index - 1];\n                    index -= 4;\n                    if (size > 4)\n                        size -= 4;\n                }\n            this.buffer[index] = term;\n            this.buffer[index + 1] = start;\n            this.buffer[index + 2] = end;\n            this.buffer[index + 3] = size;\n        }\n    }\n    // Apply a shift action\n    /**\n    @internal\n    */\n    shift(action, type, start, end) {\n        if (action & 131072 /* Action.GotoFlag */) {\n            this.pushState(action & 65535 /* Action.ValueMask */, this.pos);\n        }\n        else if ((action & 262144 /* Action.StayFlag */) == 0) { // Regular shift\n            let nextState = action, { parser } = this.p;\n            if (end > this.pos || type <= parser.maxNode) {\n                this.pos = end;\n                if (!parser.stateFlag(nextState, 1 /* StateFlag.Skipped */))\n                    this.reducePos = end;\n            }\n            this.pushState(nextState, start);\n            this.shiftContext(type, start);\n            if (type <= parser.maxNode)\n                this.buffer.push(type, start, end, 4);\n        }\n        else { // Shift-and-stay, which means this is a skipped token\n            this.pos = end;\n            this.shiftContext(type, start);\n            if (type <= this.p.parser.maxNode)\n                this.buffer.push(type, start, end, 4);\n        }\n    }\n    // Apply an action\n    /**\n    @internal\n    */\n    apply(action, next, nextStart, nextEnd) {\n        if (action & 65536 /* Action.ReduceFlag */)\n            this.reduce(action);\n        else\n            this.shift(action, next, nextStart, nextEnd);\n    }\n    // Add a prebuilt (reused) node into the buffer.\n    /**\n    @internal\n    */\n    useNode(value, next) {\n        let index = this.p.reused.length - 1;\n        if (index < 0 || this.p.reused[index] != value) {\n            this.p.reused.push(value);\n            index++;\n        }\n        let start = this.pos;\n        this.reducePos = this.pos = start + value.length;\n        this.pushState(next, start);\n        this.buffer.push(index, start, this.reducePos, -1 /* size == -1 means this is a reused value */);\n        if (this.curContext)\n            this.updateContext(this.curContext.tracker.reuse(this.curContext.context, value, this, this.p.stream.reset(this.pos - value.length)));\n    }\n    // Split the stack. Due to the buffer sharing and the fact\n    // that `this.stack` tends to stay quite shallow, this isn't very\n    // expensive.\n    /**\n    @internal\n    */\n    split() {\n        let parent = this;\n        let off = parent.buffer.length;\n        // Because the top of the buffer (after this.pos) may be mutated\n        // to reorder reductions and skipped tokens, and shared buffers\n        // should be immutable, this copies any outstanding skipped tokens\n        // to the new buffer, and puts the base pointer before them.\n        while (off > 0 && parent.buffer[off - 2] > parent.reducePos)\n            off -= 4;\n        let buffer = parent.buffer.slice(off), base = parent.bufferBase + off;\n        // Make sure parent points to an actual parent with content, if there is such a parent.\n        while (parent && base == parent.bufferBase)\n            parent = parent.parent;\n        return new Stack(this.p, this.stack.slice(), this.state, this.reducePos, this.pos, this.score, buffer, base, this.curContext, this.lookAhead, parent);\n    }\n    // Try to recover from an error by 'deleting' (ignoring) one token.\n    /**\n    @internal\n    */\n    recoverByDelete(next, nextEnd) {\n        let isNode = next <= this.p.parser.maxNode;\n        if (isNode)\n            this.storeNode(next, this.pos, nextEnd, 4);\n        this.storeNode(0 /* Term.Err */, this.pos, nextEnd, isNode ? 8 : 4);\n        this.pos = this.reducePos = nextEnd;\n        this.score -= 190 /* Recover.Delete */;\n    }\n    /**\n    Check if the given term would be able to be shifted (optionally\n    after some reductions) on this stack. This can be useful for\n    external tokenizers that want to make sure they only provide a\n    given token when it applies.\n    */\n    canShift(term) {\n        for (let sim = new SimulatedStack(this);;) {\n            let action = this.p.parser.stateSlot(sim.state, 4 /* ParseState.DefaultReduce */) || this.p.parser.hasAction(sim.state, term);\n            if (action == 0)\n                return false;\n            if ((action & 65536 /* Action.ReduceFlag */) == 0)\n                return true;\n            sim.reduce(action);\n        }\n    }\n    // Apply up to Recover.MaxNext recovery actions that conceptually\n    // inserts some missing token or rule.\n    /**\n    @internal\n    */\n    recoverByInsert(next) {\n        if (this.stack.length >= 300 /* Recover.MaxInsertStackDepth */)\n            return [];\n        let nextStates = this.p.parser.nextStates(this.state);\n        if (nextStates.length > 4 /* Recover.MaxNext */ << 1 || this.stack.length >= 120 /* Recover.DampenInsertStackDepth */) {\n            let best = [];\n            for (let i = 0, s; i < nextStates.length; i += 2) {\n                if ((s = nextStates[i + 1]) != this.state && this.p.parser.hasAction(s, next))\n                    best.push(nextStates[i], s);\n            }\n            if (this.stack.length < 120 /* Recover.DampenInsertStackDepth */)\n                for (let i = 0; best.length < 4 /* Recover.MaxNext */ << 1 && i < nextStates.length; i += 2) {\n                    let s = nextStates[i + 1];\n                    if (!best.some((v, i) => (i & 1) && v == s))\n                        best.push(nextStates[i], s);\n                }\n            nextStates = best;\n        }\n        let result = [];\n        for (let i = 0; i < nextStates.length && result.length < 4 /* Recover.MaxNext */; i += 2) {\n            let s = nextStates[i + 1];\n            if (s == this.state)\n                continue;\n            let stack = this.split();\n            stack.pushState(s, this.pos);\n            stack.storeNode(0 /* Term.Err */, stack.pos, stack.pos, 4, true);\n            stack.shiftContext(nextStates[i], this.pos);\n            stack.reducePos = this.pos;\n            stack.score -= 200 /* Recover.Insert */;\n            result.push(stack);\n        }\n        return result;\n    }\n    // Force a reduce, if possible. Return false if that can't\n    // be done.\n    /**\n    @internal\n    */\n    forceReduce() {\n        let { parser } = this.p;\n        let reduce = parser.stateSlot(this.state, 5 /* ParseState.ForcedReduce */);\n        if ((reduce & 65536 /* Action.ReduceFlag */) == 0)\n            return false;\n        if (!parser.validAction(this.state, reduce)) {\n            let depth = reduce >> 19 /* Action.ReduceDepthShift */, term = reduce & 65535 /* Action.ValueMask */;\n            let target = this.stack.length - depth * 3;\n            if (target < 0 || parser.getGoto(this.stack[target], term, false) < 0) {\n                let backup = this.findForcedReduction();\n                if (backup == null)\n                    return false;\n                reduce = backup;\n            }\n            this.storeNode(0 /* Term.Err */, this.pos, this.pos, 4, true);\n            this.score -= 100 /* Recover.Reduce */;\n        }\n        this.reducePos = this.pos;\n        this.reduce(reduce);\n        return true;\n    }\n    /**\n    Try to scan through the automaton to find some kind of reduction\n    that can be applied. Used when the regular ForcedReduce field\n    isn't a valid action. @internal\n    */\n    findForcedReduction() {\n        let { parser } = this.p, seen = [];\n        let explore = (state, depth) => {\n            if (seen.includes(state))\n                return;\n            seen.push(state);\n            return parser.allActions(state, (action) => {\n                if (action & (262144 /* Action.StayFlag */ | 131072 /* Action.GotoFlag */)) ;\n                else if (action & 65536 /* Action.ReduceFlag */) {\n                    let rDepth = (action >> 19 /* Action.ReduceDepthShift */) - depth;\n                    if (rDepth > 1) {\n                        let term = action & 65535 /* Action.ValueMask */, target = this.stack.length - rDepth * 3;\n                        if (target >= 0 && parser.getGoto(this.stack[target], term, false) >= 0)\n                            return (rDepth << 19 /* Action.ReduceDepthShift */) | 65536 /* Action.ReduceFlag */ | term;\n                    }\n                }\n                else {\n                    let found = explore(action, depth + 1);\n                    if (found != null)\n                        return found;\n                }\n            });\n        };\n        return explore(this.state, 0);\n    }\n    /**\n    @internal\n    */\n    forceAll() {\n        while (!this.p.parser.stateFlag(this.state, 2 /* StateFlag.Accepting */)) {\n            if (!this.forceReduce()) {\n                this.storeNode(0 /* Term.Err */, this.pos, this.pos, 4, true);\n                break;\n            }\n        }\n        return this;\n    }\n    /**\n    Check whether this state has no further actions (assumed to be a direct descendant of the\n    top state, since any other states must be able to continue\n    somehow). @internal\n    */\n    get deadEnd() {\n        if (this.stack.length != 3)\n            return false;\n        let { parser } = this.p;\n        return parser.data[parser.stateSlot(this.state, 1 /* ParseState.Actions */)] == 65535 /* Seq.End */ &&\n            !parser.stateSlot(this.state, 4 /* ParseState.DefaultReduce */);\n    }\n    /**\n    Restart the stack (put it back in its start state). Only safe\n    when this.stack.length == 3 (state is directly below the top\n    state). @internal\n    */\n    restart() {\n        this.storeNode(0 /* Term.Err */, this.pos, this.pos, 4, true);\n        this.state = this.stack[0];\n        this.stack.length = 0;\n    }\n    /**\n    @internal\n    */\n    sameState(other) {\n        if (this.state != other.state || this.stack.length != other.stack.length)\n            return false;\n        for (let i = 0; i < this.stack.length; i += 3)\n            if (this.stack[i] != other.stack[i])\n                return false;\n        return true;\n    }\n    /**\n    Get the parser used by this stack.\n    */\n    get parser() { return this.p.parser; }\n    /**\n    Test whether a given dialect (by numeric ID, as exported from\n    the terms file) is enabled.\n    */\n    dialectEnabled(dialectID) { return this.p.parser.dialect.flags[dialectID]; }\n    shiftContext(term, start) {\n        if (this.curContext)\n            this.updateContext(this.curContext.tracker.shift(this.curContext.context, term, this, this.p.stream.reset(start)));\n    }\n    reduceContext(term, start) {\n        if (this.curContext)\n            this.updateContext(this.curContext.tracker.reduce(this.curContext.context, term, this, this.p.stream.reset(start)));\n    }\n    /**\n    @internal\n    */\n    emitContext() {\n        let last = this.buffer.length - 1;\n        if (last < 0 || this.buffer[last] != -3)\n            this.buffer.push(this.curContext.hash, this.pos, this.pos, -3);\n    }\n    /**\n    @internal\n    */\n    emitLookAhead() {\n        let last = this.buffer.length - 1;\n        if (last < 0 || this.buffer[last] != -4)\n            this.buffer.push(this.lookAhead, this.pos, this.pos, -4);\n    }\n    updateContext(context) {\n        if (context != this.curContext.context) {\n            let newCx = new StackContext(this.curContext.tracker, context);\n            if (newCx.hash != this.curContext.hash)\n                this.emitContext();\n            this.curContext = newCx;\n        }\n    }\n    /**\n    @internal\n    */\n    setLookAhead(lookAhead) {\n        if (lookAhead > this.lookAhead) {\n            this.emitLookAhead();\n            this.lookAhead = lookAhead;\n        }\n    }\n    /**\n    @internal\n    */\n    close() {\n        if (this.curContext && this.curContext.tracker.strict)\n            this.emitContext();\n        if (this.lookAhead > 0)\n            this.emitLookAhead();\n    }\n}\nclass StackContext {\n    constructor(tracker, context) {\n        this.tracker = tracker;\n        this.context = context;\n        this.hash = tracker.strict ? tracker.hash(context) : 0;\n    }\n}\n// Used to cheaply run some reductions to scan ahead without mutating\n// an entire stack\nclass SimulatedStack {\n    constructor(start) {\n        this.start = start;\n        this.state = start.state;\n        this.stack = start.stack;\n        this.base = this.stack.length;\n    }\n    reduce(action) {\n        let term = action & 65535 /* Action.ValueMask */, depth = action >> 19 /* Action.ReduceDepthShift */;\n        if (depth == 0) {\n            if (this.stack == this.start.stack)\n                this.stack = this.stack.slice();\n            this.stack.push(this.state, 0, 0);\n            this.base += 3;\n        }\n        else {\n            this.base -= (depth - 1) * 3;\n        }\n        let goto = this.start.p.parser.getGoto(this.stack[this.base - 3], term, true);\n        this.state = goto;\n    }\n}\n// This is given to `Tree.build` to build a buffer, and encapsulates\n// the parent-stack-walking necessary to read the nodes.\nclass StackBufferCursor {\n    constructor(stack, pos, index) {\n        this.stack = stack;\n        this.pos = pos;\n        this.index = index;\n        this.buffer = stack.buffer;\n        if (this.index == 0)\n            this.maybeNext();\n    }\n    static create(stack, pos = stack.bufferBase + stack.buffer.length) {\n        return new StackBufferCursor(stack, pos, pos - stack.bufferBase);\n    }\n    maybeNext() {\n        let next = this.stack.parent;\n        if (next != null) {\n            this.index = this.stack.bufferBase - next.bufferBase;\n            this.stack = next;\n            this.buffer = next.buffer;\n        }\n    }\n    get id() { return this.buffer[this.index - 4]; }\n    get start() { return this.buffer[this.index - 3]; }\n    get end() { return this.buffer[this.index - 2]; }\n    get size() { return this.buffer[this.index - 1]; }\n    next() {\n        this.index -= 4;\n        this.pos -= 4;\n        if (this.index == 0)\n            this.maybeNext();\n    }\n    fork() {\n        return new StackBufferCursor(this.stack, this.pos, this.index);\n    }\n}\n\n// See lezer-generator/src/encode.ts for comments about the encoding\n// used here\nfunction decodeArray(input, Type = Uint16Array) {\n    if (typeof input != \"string\")\n        return input;\n    let array = null;\n    for (let pos = 0, out = 0; pos < input.length;) {\n        let value = 0;\n        for (;;) {\n            let next = input.charCodeAt(pos++), stop = false;\n            if (next == 126 /* Encode.BigValCode */) {\n                value = 65535 /* Encode.BigVal */;\n                break;\n            }\n            if (next >= 92 /* Encode.Gap2 */)\n                next--;\n            if (next >= 34 /* Encode.Gap1 */)\n                next--;\n            let digit = next - 32 /* Encode.Start */;\n            if (digit >= 46 /* Encode.Base */) {\n                digit -= 46 /* Encode.Base */;\n                stop = true;\n            }\n            value += digit;\n            if (stop)\n                break;\n            value *= 46 /* Encode.Base */;\n        }\n        if (array)\n            array[out++] = value;\n        else\n            array = new Type(value);\n    }\n    return array;\n}\n\nclass CachedToken {\n    constructor() {\n        this.start = -1;\n        this.value = -1;\n        this.end = -1;\n        this.extended = -1;\n        this.lookAhead = 0;\n        this.mask = 0;\n        this.context = 0;\n    }\n}\nconst nullToken = new CachedToken;\n/**\n[Tokenizers](#lr.ExternalTokenizer) interact with the input\nthrough this interface. It presents the input as a stream of\ncharacters, tracking lookahead and hiding the complexity of\n[ranges](#common.Parser.parse^ranges) from tokenizer code.\n*/\nclass InputStream {\n    /**\n    @internal\n    */\n    constructor(\n    /**\n    @internal\n    */\n    input, \n    /**\n    @internal\n    */\n    ranges) {\n        this.input = input;\n        this.ranges = ranges;\n        /**\n        @internal\n        */\n        this.chunk = \"\";\n        /**\n        @internal\n        */\n        this.chunkOff = 0;\n        /**\n        Backup chunk\n        */\n        this.chunk2 = \"\";\n        this.chunk2Pos = 0;\n        /**\n        The character code of the next code unit in the input, or -1\n        when the stream is at the end of the input.\n        */\n        this.next = -1;\n        /**\n        @internal\n        */\n        this.token = nullToken;\n        this.rangeIndex = 0;\n        this.pos = this.chunkPos = ranges[0].from;\n        this.range = ranges[0];\n        this.end = ranges[ranges.length - 1].to;\n        this.readNext();\n    }\n    /**\n    @internal\n    */\n    resolveOffset(offset, assoc) {\n        let range = this.range, index = this.rangeIndex;\n        let pos = this.pos + offset;\n        while (pos < range.from) {\n            if (!index)\n                return null;\n            let next = this.ranges[--index];\n            pos -= range.from - next.to;\n            range = next;\n        }\n        while (assoc < 0 ? pos > range.to : pos >= range.to) {\n            if (index == this.ranges.length - 1)\n                return null;\n            let next = this.ranges[++index];\n            pos += next.from - range.to;\n            range = next;\n        }\n        return pos;\n    }\n    /**\n    @internal\n    */\n    clipPos(pos) {\n        if (pos >= this.range.from && pos < this.range.to)\n            return pos;\n        for (let range of this.ranges)\n            if (range.to > pos)\n                return Math.max(pos, range.from);\n        return this.end;\n    }\n    /**\n    Look at a code unit near the stream position. `.peek(0)` equals\n    `.next`, `.peek(-1)` gives you the previous character, and so\n    on.\n    \n    Note that looking around during tokenizing creates dependencies\n    on potentially far-away content, which may reduce the\n    effectiveness incremental parsing\u2014when looking forward\u2014or even\n    cause invalid reparses when looking backward more than 25 code\n    units, since the library does not track lookbehind.\n    */\n    peek(offset) {\n        let idx = this.chunkOff + offset, pos, result;\n        if (idx >= 0 && idx < this.chunk.length) {\n            pos = this.pos + offset;\n            result = this.chunk.charCodeAt(idx);\n        }\n        else {\n            let resolved = this.resolveOffset(offset, 1);\n            if (resolved == null)\n                return -1;\n            pos = resolved;\n            if (pos >= this.chunk2Pos && pos < this.chunk2Pos + this.chunk2.length) {\n                result = this.chunk2.charCodeAt(pos - this.chunk2Pos);\n            }\n            else {\n                let i = this.rangeIndex, range = this.range;\n                while (range.to <= pos)\n                    range = this.ranges[++i];\n                this.chunk2 = this.input.chunk(this.chunk2Pos = pos);\n                if (pos + this.chunk2.length > range.to)\n                    this.chunk2 = this.chunk2.slice(0, range.to - pos);\n                result = this.chunk2.charCodeAt(0);\n            }\n        }\n        if (pos >= this.token.lookAhead)\n            this.token.lookAhead = pos + 1;\n        return result;\n    }\n    /**\n    Accept a token. By default, the end of the token is set to the\n    current stream position, but you can pass an offset (relative to\n    the stream position) to change that.\n    */\n    acceptToken(token, endOffset = 0) {\n        let end = endOffset ? this.resolveOffset(endOffset, -1) : this.pos;\n        if (end == null || end < this.token.start)\n            throw new RangeError(\"Token end out of bounds\");\n        this.token.value = token;\n        this.token.end = end;\n    }\n    getChunk() {\n        if (this.pos >= this.chunk2Pos && this.pos < this.chunk2Pos + this.chunk2.length) {\n            let { chunk, chunkPos } = this;\n            this.chunk = this.chunk2;\n            this.chunkPos = this.chunk2Pos;\n            this.chunk2 = chunk;\n            this.chunk2Pos = chunkPos;\n            this.chunkOff = this.pos - this.chunkPos;\n        }\n        else {\n            this.chunk2 = this.chunk;\n            this.chunk2Pos = this.chunkPos;\n            let nextChunk = this.input.chunk(this.pos);\n            let end = this.pos + nextChunk.length;\n            this.chunk = end > this.range.to ? nextChunk.slice(0, this.range.to - this.pos) : nextChunk;\n            this.chunkPos = this.pos;\n            this.chunkOff = 0;\n        }\n    }\n    readNext() {\n        if (this.chunkOff >= this.chunk.length) {\n            this.getChunk();\n            if (this.chunkOff == this.chunk.length)\n                return this.next = -1;\n        }\n        return this.next = this.chunk.charCodeAt(this.chunkOff);\n    }\n    /**\n    Move the stream forward N (defaults to 1) code units. Returns\n    the new value of [`next`](#lr.InputStream.next).\n    */\n    advance(n = 1) {\n        this.chunkOff += n;\n        while (this.pos + n >= this.range.to) {\n            if (this.rangeIndex == this.ranges.length - 1)\n                return this.setDone();\n            n -= this.range.to - this.pos;\n            this.range = this.ranges[++this.rangeIndex];\n            this.pos = this.range.from;\n        }\n        this.pos += n;\n        if (this.pos >= this.token.lookAhead)\n            this.token.lookAhead = this.pos + 1;\n        return this.readNext();\n    }\n    setDone() {\n        this.pos = this.chunkPos = this.end;\n        this.range = this.ranges[this.rangeIndex = this.ranges.length - 1];\n        this.chunk = \"\";\n        return this.next = -1;\n    }\n    /**\n    @internal\n    */\n    reset(pos, token) {\n        if (token) {\n            this.token = token;\n            token.start = pos;\n            token.lookAhead = pos + 1;\n            token.value = token.extended = -1;\n        }\n        else {\n            this.token = nullToken;\n        }\n        if (this.pos != pos) {\n            this.pos = pos;\n            if (pos == this.end) {\n                this.setDone();\n                return this;\n            }\n            while (pos < this.range.from)\n                this.range = this.ranges[--this.rangeIndex];\n            while (pos >= this.range.to)\n                this.range = this.ranges[++this.rangeIndex];\n            if (pos >= this.chunkPos && pos < this.chunkPos + this.chunk.length) {\n                this.chunkOff = pos - this.chunkPos;\n            }\n            else {\n                this.chunk = \"\";\n                this.chunkOff = 0;\n            }\n            this.readNext();\n        }\n        return this;\n    }\n    /**\n    @internal\n    */\n    read(from, to) {\n        if (from >= this.chunkPos && to <= this.chunkPos + this.chunk.length)\n            return this.chunk.slice(from - this.chunkPos, to - this.chunkPos);\n        if (from >= this.chunk2Pos && to <= this.chunk2Pos + this.chunk2.length)\n            return this.chunk2.slice(from - this.chunk2Pos, to - this.chunk2Pos);\n        if (from >= this.range.from && to <= this.range.to)\n            return this.input.read(from, to);\n        let result = \"\";\n        for (let r of this.ranges) {\n            if (r.from >= to)\n                break;\n            if (r.to > from)\n                result += this.input.read(Math.max(r.from, from), Math.min(r.to, to));\n        }\n        return result;\n    }\n}\n/**\n@internal\n*/\nclass TokenGroup {\n    constructor(data, id) {\n        this.data = data;\n        this.id = id;\n    }\n    token(input, stack) {\n        let { parser } = stack.p;\n        readToken(this.data, input, stack, this.id, parser.data, parser.tokenPrecTable);\n    }\n}\nTokenGroup.prototype.contextual = TokenGroup.prototype.fallback = TokenGroup.prototype.extend = false;\n/**\n@hide\n*/\nclass LocalTokenGroup {\n    constructor(data, precTable, elseToken) {\n        this.precTable = precTable;\n        this.elseToken = elseToken;\n        this.data = typeof data == \"string\" ? decodeArray(data) : data;\n    }\n    token(input, stack) {\n        let start = input.pos, skipped = 0;\n        for (;;) {\n            let atEof = input.next < 0, nextPos = input.resolveOffset(1, 1);\n            readToken(this.data, input, stack, 0, this.data, this.precTable);\n            if (input.token.value > -1)\n                break;\n            if (this.elseToken == null)\n                return;\n            if (!atEof)\n                skipped++;\n            if (nextPos == null)\n                break;\n            input.reset(nextPos, input.token);\n        }\n        if (skipped) {\n            input.reset(start, input.token);\n            input.acceptToken(this.elseToken, skipped);\n        }\n    }\n}\nLocalTokenGroup.prototype.contextual = TokenGroup.prototype.fallback = TokenGroup.prototype.extend = false;\n/**\n`@external tokens` declarations in the grammar should resolve to\nan instance of this class.\n*/\nclass ExternalTokenizer {\n    /**\n    Create a tokenizer. The first argument is the function that,\n    given an input stream, scans for the types of tokens it\n    recognizes at the stream's position, and calls\n    [`acceptToken`](#lr.InputStream.acceptToken) when it finds\n    one.\n    */\n    constructor(\n    /**\n    @internal\n    */\n    token, options = {}) {\n        this.token = token;\n        this.contextual = !!options.contextual;\n        this.fallback = !!options.fallback;\n        this.extend = !!options.extend;\n    }\n}\n// Tokenizer data is stored a big uint16 array containing, for each\n// state:\n//\n//  - A group bitmask, indicating what token groups are reachable from\n//    this state, so that paths that can only lead to tokens not in\n//    any of the current groups can be cut off early.\n//\n//  - The position of the end of the state's sequence of accepting\n//    tokens\n//\n//  - The number of outgoing edges for the state\n//\n//  - The accepting tokens, as (token id, group mask) pairs\n//\n//  - The outgoing edges, as (start character, end character, state\n//    index) triples, with end character being exclusive\n//\n// This function interprets that data, running through a stream as\n// long as new states with the a matching group mask can be reached,\n// and updating `input.token` when it matches a token.\nfunction readToken(data, input, stack, group, precTable, precOffset) {\n    let state = 0, groupMask = 1 << group, { dialect } = stack.p.parser;\n    scan: for (;;) {\n        if ((groupMask & data[state]) == 0)\n            break;\n        let accEnd = data[state + 1];\n        // Check whether this state can lead to a token in the current group\n        // Accept tokens in this state, possibly overwriting\n        // lower-precedence / shorter tokens\n        for (let i = state + 3; i < accEnd; i += 2)\n            if ((data[i + 1] & groupMask) > 0) {\n                let term = data[i];\n                if (dialect.allows(term) &&\n                    (input.token.value == -1 || input.token.value == term ||\n                        overrides(term, input.token.value, precTable, precOffset))) {\n                    input.acceptToken(term);\n                    break;\n                }\n            }\n        let next = input.next, low = 0, high = data[state + 2];\n        // Special case for EOF\n        if (input.next < 0 && high > low && data[accEnd + high * 3 - 3] == 65535 /* Seq.End */) {\n            state = data[accEnd + high * 3 - 1];\n            continue scan;\n        }\n        // Do a binary search on the state's edges\n        for (; low < high;) {\n            let mid = (low + high) >> 1;\n            let index = accEnd + mid + (mid << 1);\n            let from = data[index], to = data[index + 1] || 0x10000;\n            if (next < from)\n                high = mid;\n            else if (next >= to)\n                low = mid + 1;\n            else {\n                state = data[index + 2];\n                input.advance();\n                continue scan;\n            }\n        }\n        break;\n    }\n}\nfunction findOffset(data, start, term) {\n    for (let i = start, next; (next = data[i]) != 65535 /* Seq.End */; i++)\n        if (next == term)\n            return i - start;\n    return -1;\n}\nfunction overrides(token, prev, tableData, tableOffset) {\n    let iPrev = findOffset(tableData, tableOffset, prev);\n    return iPrev < 0 || findOffset(tableData, tableOffset, token) < iPrev;\n}\n\n// Environment variable used to control console output\nconst verbose = typeof process != \"undefined\" && process.env && /\\bparse\\b/.test(process.env.LOG);\nlet stackIDs = null;\nfunction cutAt(tree, pos, side) {\n    let cursor = tree.cursor(IterMode.IncludeAnonymous);\n    cursor.moveTo(pos);\n    for (;;) {\n        if (!(side < 0 ? cursor.childBefore(pos) : cursor.childAfter(pos)))\n            for (;;) {\n                if ((side < 0 ? cursor.to < pos : cursor.from > pos) && !cursor.type.isError)\n                    return side < 0 ? Math.max(0, Math.min(cursor.to - 1, pos - 25 /* Safety.Margin */))\n                        : Math.min(tree.length, Math.max(cursor.from + 1, pos + 25 /* Safety.Margin */));\n                if (side < 0 ? cursor.prevSibling() : cursor.nextSibling())\n                    break;\n                if (!cursor.parent())\n                    return side < 0 ? 0 : tree.length;\n            }\n    }\n}\nclass FragmentCursor {\n    constructor(fragments, nodeSet) {\n        this.fragments = fragments;\n        this.nodeSet = nodeSet;\n        this.i = 0;\n        this.fragment = null;\n        this.safeFrom = -1;\n        this.safeTo = -1;\n        this.trees = [];\n        this.start = [];\n        this.index = [];\n        this.nextFragment();\n    }\n    nextFragment() {\n        let fr = this.fragment = this.i == this.fragments.length ? null : this.fragments[this.i++];\n        if (fr) {\n            this.safeFrom = fr.openStart ? cutAt(fr.tree, fr.from + fr.offset, 1) - fr.offset : fr.from;\n            this.safeTo = fr.openEnd ? cutAt(fr.tree, fr.to + fr.offset, -1) - fr.offset : fr.to;\n            while (this.trees.length) {\n                this.trees.pop();\n                this.start.pop();\n                this.index.pop();\n            }\n            this.trees.push(fr.tree);\n            this.start.push(-fr.offset);\n            this.index.push(0);\n            this.nextStart = this.safeFrom;\n        }\n        else {\n            this.nextStart = 1e9;\n        }\n    }\n    // `pos` must be >= any previously given `pos` for this cursor\n    nodeAt(pos) {\n        if (pos < this.nextStart)\n            return null;\n        while (this.fragment && this.safeTo <= pos)\n            this.nextFragment();\n        if (!this.fragment)\n            return null;\n        for (;;) {\n            let last = this.trees.length - 1;\n            if (last < 0) { // End of tree\n                this.nextFragment();\n                return null;\n            }\n            let top = this.trees[last], index = this.index[last];\n            if (index == top.children.length) {\n                this.trees.pop();\n                this.start.pop();\n                this.index.pop();\n                continue;\n            }\n            let next = top.children[index];\n            let start = this.start[last] + top.positions[index];\n            if (start > pos) {\n                this.nextStart = start;\n                return null;\n            }\n            if (next instanceof Tree) {\n                if (start == pos) {\n                    if (start < this.safeFrom)\n                        return null;\n                    let end = start + next.length;\n                    if (end <= this.safeTo) {\n                        let lookAhead = next.prop(NodeProp.lookAhead);\n                        if (!lookAhead || end + lookAhead < this.fragment.to)\n                            return next;\n                    }\n                }\n                this.index[last]++;\n                if (start + next.length >= Math.max(this.safeFrom, pos)) { // Enter this node\n                    this.trees.push(next);\n                    this.start.push(start);\n                    this.index.push(0);\n                }\n            }\n            else {\n                this.index[last]++;\n                this.nextStart = start + next.length;\n            }\n        }\n    }\n}\nclass TokenCache {\n    constructor(parser, stream) {\n        this.stream = stream;\n        this.tokens = [];\n        this.mainToken = null;\n        this.actions = [];\n        this.tokens = parser.tokenizers.map(_ => new CachedToken);\n    }\n    getActions(stack) {\n        let actionIndex = 0;\n        let main = null;\n        let { parser } = stack.p, { tokenizers } = parser;\n        let mask = parser.stateSlot(stack.state, 3 /* ParseState.TokenizerMask */);\n        let context = stack.curContext ? stack.curContext.hash : 0;\n        let lookAhead = 0;\n        for (let i = 0; i < tokenizers.length; i++) {\n            if (((1 << i) & mask) == 0)\n                continue;\n            let tokenizer = tokenizers[i], token = this.tokens[i];\n            if (main && !tokenizer.fallback)\n                continue;\n            if (tokenizer.contextual || token.start != stack.pos || token.mask != mask || token.context != context) {\n                this.updateCachedToken(token, tokenizer, stack);\n                token.mask = mask;\n                token.context = context;\n            }\n            if (token.lookAhead > token.end + 25 /* Safety.Margin */)\n                lookAhead = Math.max(token.lookAhead, lookAhead);\n            if (token.value != 0 /* Term.Err */) {\n                let startIndex = actionIndex;\n                if (token.extended > -1)\n                    actionIndex = this.addActions(stack, token.extended, token.end, actionIndex);\n                actionIndex = this.addActions(stack, token.value, token.end, actionIndex);\n                if (!tokenizer.extend) {\n                    main = token;\n                    if (actionIndex > startIndex)\n                        break;\n                }\n            }\n        }\n        while (this.actions.length > actionIndex)\n            this.actions.pop();\n        if (lookAhead)\n            stack.setLookAhead(lookAhead);\n        if (!main && stack.pos == this.stream.end) {\n            main = new CachedToken;\n            main.value = stack.p.parser.eofTerm;\n            main.start = main.end = stack.pos;\n            actionIndex = this.addActions(stack, main.value, main.end, actionIndex);\n        }\n        this.mainToken = main;\n        return this.actions;\n    }\n    getMainToken(stack) {\n        if (this.mainToken)\n            return this.mainToken;\n        let main = new CachedToken, { pos, p } = stack;\n        main.start = pos;\n        main.end = Math.min(pos + 1, p.stream.end);\n        main.value = pos == p.stream.end ? p.parser.eofTerm : 0 /* Term.Err */;\n        return main;\n    }\n    updateCachedToken(token, tokenizer, stack) {\n        let start = this.stream.clipPos(stack.pos);\n        tokenizer.token(this.stream.reset(start, token), stack);\n        if (token.value > -1) {\n            let { parser } = stack.p;\n            for (let i = 0; i < parser.specialized.length; i++)\n                if (parser.specialized[i] == token.value) {\n                    let result = parser.specializers[i](this.stream.read(token.start, token.end), stack);\n                    if (result >= 0 && stack.p.parser.dialect.allows(result >> 1)) {\n                        if ((result & 1) == 0 /* Specialize.Specialize */)\n                            token.value = result >> 1;\n                        else\n                            token.extended = result >> 1;\n                        break;\n                    }\n                }\n        }\n        else {\n            token.value = 0 /* Term.Err */;\n            token.end = this.stream.clipPos(start + 1);\n        }\n    }\n    putAction(action, token, end, index) {\n        // Don't add duplicate actions\n        for (let i = 0; i < index; i += 3)\n            if (this.actions[i] == action)\n                return index;\n        this.actions[index++] = action;\n        this.actions[index++] = token;\n        this.actions[index++] = end;\n        return index;\n    }\n    addActions(stack, token, end, index) {\n        let { state } = stack, { parser } = stack.p, { data } = parser;\n        for (let set = 0; set < 2; set++) {\n            for (let i = parser.stateSlot(state, set ? 2 /* ParseState.Skip */ : 1 /* ParseState.Actions */);; i += 3) {\n                if (data[i] == 65535 /* Seq.End */) {\n                    if (data[i + 1] == 1 /* Seq.Next */) {\n                        i = pair(data, i + 2);\n                    }\n                    else {\n                        if (index == 0 && data[i + 1] == 2 /* Seq.Other */)\n                            index = this.putAction(pair(data, i + 2), token, end, index);\n                        break;\n                    }\n                }\n                if (data[i] == token)\n                    index = this.putAction(pair(data, i + 1), token, end, index);\n            }\n        }\n        return index;\n    }\n}\nclass Parse {\n    constructor(parser, input, fragments, ranges) {\n        this.parser = parser;\n        this.input = input;\n        this.ranges = ranges;\n        this.recovering = 0;\n        this.nextStackID = 0x2654; // \u2654, \u2655, \u2656, \u2657, \u2658, \u2659, \u2660, \u2661, \u2662, \u2663, \u2664, \u2665, \u2666, \u2667\n        this.minStackPos = 0;\n        this.reused = [];\n        this.stoppedAt = null;\n        this.lastBigReductionStart = -1;\n        this.lastBigReductionSize = 0;\n        this.bigReductionCount = 0;\n        this.stream = new InputStream(input, ranges);\n        this.tokens = new TokenCache(parser, this.stream);\n        this.topTerm = parser.top[1];\n        let { from } = ranges[0];\n        this.stacks = [Stack.start(this, parser.top[0], from)];\n        this.fragments = fragments.length && this.stream.end - from > parser.bufferLength * 4\n            ? new FragmentCursor(fragments, parser.nodeSet) : null;\n    }\n    get parsedPos() {\n        return this.minStackPos;\n    }\n    // Move the parser forward. This will process all parse stacks at\n    // `this.pos` and try to advance them to a further position. If no\n    // stack for such a position is found, it'll start error-recovery.\n    //\n    // When the parse is finished, this will return a syntax tree. When\n    // not, it returns `null`.\n    advance() {\n        let stacks = this.stacks, pos = this.minStackPos;\n        // This will hold stacks beyond `pos`.\n        let newStacks = this.stacks = [];\n        let stopped, stoppedTokens;\n        // If a large amount of reductions happened with the same start\n        // position, force the stack out of that production in order to\n        // avoid creating a tree too deep to recurse through.\n        // (This is an ugly kludge, because unfortunately there is no\n        // straightforward, cheap way to check for this happening, due to\n        // the history of reductions only being available in an\n        // expensive-to-access format in the stack buffers.)\n        if (this.bigReductionCount > 300 /* Rec.MaxLeftAssociativeReductionCount */ && stacks.length == 1) {\n            let [s] = stacks;\n            while (s.forceReduce() && s.stack.length && s.stack[s.stack.length - 2] >= this.lastBigReductionStart) { }\n            this.bigReductionCount = this.lastBigReductionSize = 0;\n        }\n        // Keep advancing any stacks at `pos` until they either move\n        // forward or can't be advanced. Gather stacks that can't be\n        // advanced further in `stopped`.\n        for (let i = 0; i < stacks.length; i++) {\n            let stack = stacks[i];\n            for (;;) {\n                this.tokens.mainToken = null;\n                if (stack.pos > pos) {\n                    newStacks.push(stack);\n                }\n                else if (this.advanceStack(stack, newStacks, stacks)) {\n                    continue;\n                }\n                else {\n                    if (!stopped) {\n                        stopped = [];\n                        stoppedTokens = [];\n                    }\n                    stopped.push(stack);\n                    let tok = this.tokens.getMainToken(stack);\n                    stoppedTokens.push(tok.value, tok.end);\n                }\n                break;\n            }\n        }\n        if (!newStacks.length) {\n            let finished = stopped && findFinished(stopped);\n            if (finished) {\n                if (verbose)\n                    console.log(\"Finish with \" + this.stackID(finished));\n                return this.stackToTree(finished);\n            }\n            if (this.parser.strict) {\n                if (verbose && stopped)\n                    console.log(\"Stuck with token \" + (this.tokens.mainToken ? this.parser.getName(this.tokens.mainToken.value) : \"none\"));\n                throw new SyntaxError(\"No parse at \" + pos);\n            }\n            if (!this.recovering)\n                this.recovering = 5 /* Rec.Distance */;\n        }\n        if (this.recovering && stopped) {\n            let finished = this.stoppedAt != null && stopped[0].pos > this.stoppedAt ? stopped[0]\n                : this.runRecovery(stopped, stoppedTokens, newStacks);\n            if (finished) {\n                if (verbose)\n                    console.log(\"Force-finish \" + this.stackID(finished));\n                return this.stackToTree(finished.forceAll());\n            }\n        }\n        if (this.recovering) {\n            let maxRemaining = this.recovering == 1 ? 1 : this.recovering * 3 /* Rec.MaxRemainingPerStep */;\n            if (newStacks.length > maxRemaining) {\n                newStacks.sort((a, b) => b.score - a.score);\n                while (newStacks.length > maxRemaining)\n                    newStacks.pop();\n            }\n            if (newStacks.some(s => s.reducePos > pos))\n                this.recovering--;\n        }\n        else if (newStacks.length > 1) {\n            // Prune stacks that are in the same state, or that have been\n            // running without splitting for a while, to avoid getting stuck\n            // with multiple successful stacks running endlessly on.\n            outer: for (let i = 0; i < newStacks.length - 1; i++) {\n                let stack = newStacks[i];\n                for (let j = i + 1; j < newStacks.length; j++) {\n                    let other = newStacks[j];\n                    if (stack.sameState(other) ||\n                        stack.buffer.length > 500 /* Rec.MinBufferLengthPrune */ && other.buffer.length > 500 /* Rec.MinBufferLengthPrune */) {\n                        if (((stack.score - other.score) || (stack.buffer.length - other.buffer.length)) > 0) {\n                            newStacks.splice(j--, 1);\n                        }\n                        else {\n                            newStacks.splice(i--, 1);\n                            continue outer;\n                        }\n                    }\n                }\n            }\n            if (newStacks.length > 12 /* Rec.MaxStackCount */)\n                newStacks.splice(12 /* Rec.MaxStackCount */, newStacks.length - 12 /* Rec.MaxStackCount */);\n        }\n        this.minStackPos = newStacks[0].pos;\n        for (let i = 1; i < newStacks.length; i++)\n            if (newStacks[i].pos < this.minStackPos)\n                this.minStackPos = newStacks[i].pos;\n        return null;\n    }\n    stopAt(pos) {\n        if (this.stoppedAt != null && this.stoppedAt < pos)\n            throw new RangeError(\"Can't move stoppedAt forward\");\n        this.stoppedAt = pos;\n    }\n    // Returns an updated version of the given stack, or null if the\n    // stack can't advance normally. When `split` and `stacks` are\n    // given, stacks split off by ambiguous operations will be pushed to\n    // `split`, or added to `stacks` if they move `pos` forward.\n    advanceStack(stack, stacks, split) {\n        let start = stack.pos, { parser } = this;\n        let base = verbose ? this.stackID(stack) + \" -> \" : \"\";\n        if (this.stoppedAt != null && start > this.stoppedAt)\n            return stack.forceReduce() ? stack : null;\n        if (this.fragments) {\n            let strictCx = stack.curContext && stack.curContext.tracker.strict, cxHash = strictCx ? stack.curContext.hash : 0;\n            for (let cached = this.fragments.nodeAt(start); cached;) {\n                let match = this.parser.nodeSet.types[cached.type.id] == cached.type ? parser.getGoto(stack.state, cached.type.id) : -1;\n                if (match > -1 && cached.length && (!strictCx || (cached.prop(NodeProp.contextHash) || 0) == cxHash)) {\n                    stack.useNode(cached, match);\n                    if (verbose)\n                        console.log(base + this.stackID(stack) + ` (via reuse of ${parser.getName(cached.type.id)})`);\n                    return true;\n                }\n                if (!(cached instanceof Tree) || cached.children.length == 0 || cached.positions[0] > 0)\n                    break;\n                let inner = cached.children[0];\n                if (inner instanceof Tree && cached.positions[0] == 0)\n                    cached = inner;\n                else\n                    break;\n            }\n        }\n        let defaultReduce = parser.stateSlot(stack.state, 4 /* ParseState.DefaultReduce */);\n        if (defaultReduce > 0) {\n            stack.reduce(defaultReduce);\n            if (verbose)\n                console.log(base + this.stackID(stack) + ` (via always-reduce ${parser.getName(defaultReduce & 65535 /* Action.ValueMask */)})`);\n            return true;\n        }\n        if (stack.stack.length >= 8400 /* Rec.CutDepth */) {\n            while (stack.stack.length > 6000 /* Rec.CutTo */ && stack.forceReduce()) { }\n        }\n        let actions = this.tokens.getActions(stack);\n        for (let i = 0; i < actions.length;) {\n            let action = actions[i++], term = actions[i++], end = actions[i++];\n            let last = i == actions.length || !split;\n            let localStack = last ? stack : stack.split();\n            let main = this.tokens.mainToken;\n            localStack.apply(action, term, main ? main.start : localStack.pos, end);\n            if (verbose)\n                console.log(base + this.stackID(localStack) + ` (via ${(action & 65536 /* Action.ReduceFlag */) == 0 ? \"shift\"\n                    : `reduce of ${parser.getName(action & 65535 /* Action.ValueMask */)}`} for ${parser.getName(term)} @ ${start}${localStack == stack ? \"\" : \", split\"})`);\n            if (last)\n                return true;\n            else if (localStack.pos > start)\n                stacks.push(localStack);\n            else\n                split.push(localStack);\n        }\n        return false;\n    }\n    // Advance a given stack forward as far as it will go. Returns the\n    // (possibly updated) stack if it got stuck, or null if it moved\n    // forward and was given to `pushStackDedup`.\n    advanceFully(stack, newStacks) {\n        let pos = stack.pos;\n        for (;;) {\n            if (!this.advanceStack(stack, null, null))\n                return false;\n            if (stack.pos > pos) {\n                pushStackDedup(stack, newStacks);\n                return true;\n            }\n        }\n    }\n    runRecovery(stacks, tokens, newStacks) {\n        let finished = null, restarted = false;\n        for (let i = 0; i < stacks.length; i++) {\n            let stack = stacks[i], token = tokens[i << 1], tokenEnd = tokens[(i << 1) + 1];\n            let base = verbose ? this.stackID(stack) + \" -> \" : \"\";\n            if (stack.deadEnd) {\n                if (restarted)\n                    continue;\n                restarted = true;\n                stack.restart();\n                if (verbose)\n                    console.log(base + this.stackID(stack) + \" (restarted)\");\n                let done = this.advanceFully(stack, newStacks);\n                if (done)\n                    continue;\n            }\n            let force = stack.split(), forceBase = base;\n            for (let j = 0; force.forceReduce() && j < 10 /* Rec.ForceReduceLimit */; j++) {\n                if (verbose)\n                    console.log(forceBase + this.stackID(force) + \" (via force-reduce)\");\n                let done = this.advanceFully(force, newStacks);\n                if (done)\n                    break;\n                if (verbose)\n                    forceBase = this.stackID(force) + \" -> \";\n            }\n            for (let insert of stack.recoverByInsert(token)) {\n                if (verbose)\n                    console.log(base + this.stackID(insert) + \" (via recover-insert)\");\n                this.advanceFully(insert, newStacks);\n            }\n            if (this.stream.end > stack.pos) {\n                if (tokenEnd == stack.pos) {\n                    tokenEnd++;\n                    token = 0 /* Term.Err */;\n                }\n                stack.recoverByDelete(token, tokenEnd);\n                if (verbose)\n                    console.log(base + this.stackID(stack) + ` (via recover-delete ${this.parser.getName(token)})`);\n                pushStackDedup(stack, newStacks);\n            }\n            else if (!finished || finished.score < stack.score) {\n                finished = stack;\n            }\n        }\n        return finished;\n    }\n    // Convert the stack's buffer to a syntax tree.\n    stackToTree(stack) {\n        stack.close();\n        return Tree.build({ buffer: StackBufferCursor.create(stack),\n            nodeSet: this.parser.nodeSet,\n            topID: this.topTerm,\n            maxBufferLength: this.parser.bufferLength,\n            reused: this.reused,\n            start: this.ranges[0].from,\n            length: stack.pos - this.ranges[0].from,\n            minRepeatType: this.parser.minRepeatTerm });\n    }\n    stackID(stack) {\n        let id = (stackIDs || (stackIDs = new WeakMap)).get(stack);\n        if (!id)\n            stackIDs.set(stack, id = String.fromCodePoint(this.nextStackID++));\n        return id + stack;\n    }\n}\nfunction pushStackDedup(stack, newStacks) {\n    for (let i = 0; i < newStacks.length; i++) {\n        let other = newStacks[i];\n        if (other.pos == stack.pos && other.sameState(stack)) {\n            if (newStacks[i].score < stack.score)\n                newStacks[i] = stack;\n            return;\n        }\n    }\n    newStacks.push(stack);\n}\nclass Dialect {\n    constructor(source, flags, disabled) {\n        this.source = source;\n        this.flags = flags;\n        this.disabled = disabled;\n    }\n    allows(term) { return !this.disabled || this.disabled[term] == 0; }\n}\nconst id = x => x;\n/**\nContext trackers are used to track stateful context (such as\nindentation in the Python grammar, or parent elements in the XML\ngrammar) needed by external tokenizers. You declare them in a\ngrammar file as `@context exportName from \"module\"`.\n\nContext values should be immutable, and can be updated (replaced)\non shift or reduce actions.\n\nThe export used in a `@context` declaration should be of this\ntype.\n*/\nclass ContextTracker {\n    /**\n    Define a context tracker.\n    */\n    constructor(spec) {\n        this.start = spec.start;\n        this.shift = spec.shift || id;\n        this.reduce = spec.reduce || id;\n        this.reuse = spec.reuse || id;\n        this.hash = spec.hash || (() => 0);\n        this.strict = spec.strict !== false;\n    }\n}\n/**\nHolds the parse tables for a given grammar, as generated by\n`lezer-generator`, and provides [methods](#common.Parser) to parse\ncontent with.\n*/\nclass LRParser extends Parser {\n    /**\n    @internal\n    */\n    constructor(spec) {\n        super();\n        /**\n        @internal\n        */\n        this.wrappers = [];\n        if (spec.version != 14 /* File.Version */)\n            throw new RangeError(`Parser version (${spec.version}) doesn't match runtime version (${14 /* File.Version */})`);\n        let nodeNames = spec.nodeNames.split(\" \");\n        this.minRepeatTerm = nodeNames.length;\n        for (let i = 0; i < spec.repeatNodeCount; i++)\n            nodeNames.push(\"\");\n        let topTerms = Object.keys(spec.topRules).map(r => spec.topRules[r][1]);\n        let nodeProps = [];\n        for (let i = 0; i < nodeNames.length; i++)\n            nodeProps.push([]);\n        function setProp(nodeID, prop, value) {\n            nodeProps[nodeID].push([prop, prop.deserialize(String(value))]);\n        }\n        if (spec.nodeProps)\n            for (let propSpec of spec.nodeProps) {\n                let prop = propSpec[0];\n                if (typeof prop == \"string\")\n                    prop = NodeProp[prop];\n                for (let i = 1; i < propSpec.length;) {\n                    let next = propSpec[i++];\n                    if (next >= 0) {\n                        setProp(next, prop, propSpec[i++]);\n                    }\n                    else {\n                        let value = propSpec[i + -next];\n                        for (let j = -next; j > 0; j--)\n                            setProp(propSpec[i++], prop, value);\n                        i++;\n                    }\n                }\n            }\n        this.nodeSet = new NodeSet(nodeNames.map((name, i) => NodeType.define({\n            name: i >= this.minRepeatTerm ? undefined : name,\n            id: i,\n            props: nodeProps[i],\n            top: topTerms.indexOf(i) > -1,\n            error: i == 0,\n            skipped: spec.skippedNodes && spec.skippedNodes.indexOf(i) > -1\n        })));\n        if (spec.propSources)\n            this.nodeSet = this.nodeSet.extend(...spec.propSources);\n        this.strict = false;\n        this.bufferLength = DefaultBufferLength;\n        let tokenArray = decodeArray(spec.tokenData);\n        this.context = spec.context;\n        this.specializerSpecs = spec.specialized || [];\n        this.specialized = new Uint16Array(this.specializerSpecs.length);\n        for (let i = 0; i < this.specializerSpecs.length; i++)\n            this.specialized[i] = this.specializerSpecs[i].term;\n        this.specializers = this.specializerSpecs.map(getSpecializer);\n        this.states = decodeArray(spec.states, Uint32Array);\n        this.data = decodeArray(spec.stateData);\n        this.goto = decodeArray(spec.goto);\n        this.maxTerm = spec.maxTerm;\n        this.tokenizers = spec.tokenizers.map(value => typeof value == \"number\" ? new TokenGroup(tokenArray, value) : value);\n        this.topRules = spec.topRules;\n        this.dialects = spec.dialects || {};\n        this.dynamicPrecedences = spec.dynamicPrecedences || null;\n        this.tokenPrecTable = spec.tokenPrec;\n        this.termNames = spec.termNames || null;\n        this.maxNode = this.nodeSet.types.length - 1;\n        this.dialect = this.parseDialect();\n        this.top = this.topRules[Object.keys(this.topRules)[0]];\n    }\n    createParse(input, fragments, ranges) {\n        let parse = new Parse(this, input, fragments, ranges);\n        for (let w of this.wrappers)\n            parse = w(parse, input, fragments, ranges);\n        return parse;\n    }\n    /**\n    Get a goto table entry @internal\n    */\n    getGoto(state, term, loose = false) {\n        let table = this.goto;\n        if (term >= table[0])\n            return -1;\n        for (let pos = table[term + 1];;) {\n            let groupTag = table[pos++], last = groupTag & 1;\n            let target = table[pos++];\n            if (last && loose)\n                return target;\n            for (let end = pos + (groupTag >> 1); pos < end; pos++)\n                if (table[pos] == state)\n                    return target;\n            if (last)\n                return -1;\n        }\n    }\n    /**\n    Check if this state has an action for a given terminal @internal\n    */\n    hasAction(state, terminal) {\n        let data = this.data;\n        for (let set = 0; set < 2; set++) {\n            for (let i = this.stateSlot(state, set ? 2 /* ParseState.Skip */ : 1 /* ParseState.Actions */), next;; i += 3) {\n                if ((next = data[i]) == 65535 /* Seq.End */) {\n                    if (data[i + 1] == 1 /* Seq.Next */)\n                        next = data[i = pair(data, i + 2)];\n                    else if (data[i + 1] == 2 /* Seq.Other */)\n                        return pair(data, i + 2);\n                    else\n                        break;\n                }\n                if (next == terminal || next == 0 /* Term.Err */)\n                    return pair(data, i + 1);\n            }\n        }\n        return 0;\n    }\n    /**\n    @internal\n    */\n    stateSlot(state, slot) {\n        return this.states[(state * 6 /* ParseState.Size */) + slot];\n    }\n    /**\n    @internal\n    */\n    stateFlag(state, flag) {\n        return (this.stateSlot(state, 0 /* ParseState.Flags */) & flag) > 0;\n    }\n    /**\n    @internal\n    */\n    validAction(state, action) {\n        return !!this.allActions(state, a => a == action ? true : null);\n    }\n    /**\n    @internal\n    */\n    allActions(state, action) {\n        let deflt = this.stateSlot(state, 4 /* ParseState.DefaultReduce */);\n        let result = deflt ? action(deflt) : undefined;\n        for (let i = this.stateSlot(state, 1 /* ParseState.Actions */); result == null; i += 3) {\n            if (this.data[i] == 65535 /* Seq.End */) {\n                if (this.data[i + 1] == 1 /* Seq.Next */)\n                    i = pair(this.data, i + 2);\n                else\n                    break;\n            }\n            result = action(pair(this.data, i + 1));\n        }\n        return result;\n    }\n    /**\n    Get the states that can follow this one through shift actions or\n    goto jumps. @internal\n    */\n    nextStates(state) {\n        let result = [];\n        for (let i = this.stateSlot(state, 1 /* ParseState.Actions */);; i += 3) {\n            if (this.data[i] == 65535 /* Seq.End */) {\n                if (this.data[i + 1] == 1 /* Seq.Next */)\n                    i = pair(this.data, i + 2);\n                else\n                    break;\n            }\n            if ((this.data[i + 2] & (65536 /* Action.ReduceFlag */ >> 16)) == 0) {\n                let value = this.data[i + 1];\n                if (!result.some((v, i) => (i & 1) && v == value))\n                    result.push(this.data[i], value);\n            }\n        }\n        return result;\n    }\n    /**\n    Configure the parser. Returns a new parser instance that has the\n    given settings modified. Settings not provided in `config` are\n    kept from the original parser.\n    */\n    configure(config) {\n        // Hideous reflection-based kludge to make it easy to create a\n        // slightly modified copy of a parser.\n        let copy = Object.assign(Object.create(LRParser.prototype), this);\n        if (config.props)\n            copy.nodeSet = this.nodeSet.extend(...config.props);\n        if (config.top) {\n            let info = this.topRules[config.top];\n            if (!info)\n                throw new RangeError(`Invalid top rule name ${config.top}`);\n            copy.top = info;\n        }\n        if (config.tokenizers)\n            copy.tokenizers = this.tokenizers.map(t => {\n                let found = config.tokenizers.find(r => r.from == t);\n                return found ? found.to : t;\n            });\n        if (config.specializers) {\n            copy.specializers = this.specializers.slice();\n            copy.specializerSpecs = this.specializerSpecs.map((s, i) => {\n                let found = config.specializers.find(r => r.from == s.external);\n                if (!found)\n                    return s;\n                let spec = Object.assign(Object.assign({}, s), { external: found.to });\n                copy.specializers[i] = getSpecializer(spec);\n                return spec;\n            });\n        }\n        if (config.contextTracker)\n            copy.context = config.contextTracker;\n        if (config.dialect)\n            copy.dialect = this.parseDialect(config.dialect);\n        if (config.strict != null)\n            copy.strict = config.strict;\n        if (config.wrap)\n            copy.wrappers = copy.wrappers.concat(config.wrap);\n        if (config.bufferLength != null)\n            copy.bufferLength = config.bufferLength;\n        return copy;\n    }\n    /**\n    Tells you whether any [parse wrappers](#lr.ParserConfig.wrap)\n    are registered for this parser.\n    */\n    hasWrappers() {\n        return this.wrappers.length > 0;\n    }\n    /**\n    Returns the name associated with a given term. This will only\n    work for all terms when the parser was generated with the\n    `--names` option. By default, only the names of tagged terms are\n    stored.\n    */\n    getName(term) {\n        return this.termNames ? this.termNames[term] : String(term <= this.maxNode && this.nodeSet.types[term].name || term);\n    }\n    /**\n    The eof term id is always allocated directly after the node\n    types. @internal\n    */\n    get eofTerm() { return this.maxNode + 1; }\n    /**\n    The type of top node produced by the parser.\n    */\n    get topNode() { return this.nodeSet.types[this.top[1]]; }\n    /**\n    @internal\n    */\n    dynamicPrecedence(term) {\n        let prec = this.dynamicPrecedences;\n        return prec == null ? 0 : prec[term] || 0;\n    }\n    /**\n    @internal\n    */\n    parseDialect(dialect) {\n        let values = Object.keys(this.dialects), flags = values.map(() => false);\n        if (dialect)\n            for (let part of dialect.split(\" \")) {\n                let id = values.indexOf(part);\n                if (id >= 0)\n                    flags[id] = true;\n            }\n        let disabled = null;\n        for (let i = 0; i < values.length; i++)\n            if (!flags[i]) {\n                for (let j = this.dialects[values[i]], id; (id = this.data[j++]) != 65535 /* Seq.End */;)\n                    (disabled || (disabled = new Uint8Array(this.maxTerm + 1)))[id] = 1;\n            }\n        return new Dialect(dialect, flags, disabled);\n    }\n    /**\n    Used by the output of the parser generator. Not available to\n    user code. @hide\n    */\n    static deserialize(spec) {\n        return new LRParser(spec);\n    }\n}\nfunction pair(data, off) { return data[off] | (data[off + 1] << 16); }\nfunction findFinished(stacks) {\n    let best = null;\n    for (let stack of stacks) {\n        let stopped = stack.p.stoppedAt;\n        if ((stack.pos == stack.p.stream.end || stopped != null && stack.pos > stopped) &&\n            stack.p.parser.stateFlag(stack.state, 2 /* StateFlag.Accepting */) &&\n            (!best || best.score < stack.score))\n            best = stack;\n    }\n    return best;\n}\nfunction getSpecializer(spec) {\n    if (spec.external) {\n        let mask = spec.extend ? 1 /* Specialize.Extend */ : 0 /* Specialize.Specialize */;\n        return (value, stack) => (spec.external(value, stack) << 1) | mask;\n    }\n    return spec.get;\n}\n\nexport { ContextTracker, ExternalTokenizer, InputStream, LRParser, LocalTokenGroup, Stack };\n", "import { ContextTracker, ExternalTokenizer, LRParser } from '@lezer/lr';\nimport { styleTags, tags } from '@lezer/highlight';\nimport { parseMixed } from '@lezer/common';\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst scriptText = 54,\n  StartCloseScriptTag = 1,\n  styleText = 55,\n  StartCloseStyleTag = 2,\n  textareaText = 56,\n  StartCloseTextareaTag = 3,\n  EndTag = 4,\n  SelfClosingEndTag = 5,\n  StartTag = 6,\n  StartScriptTag = 7,\n  StartStyleTag = 8,\n  StartTextareaTag = 9,\n  StartSelfClosingTag = 10,\n  StartCloseTag = 11,\n  NoMatchStartCloseTag = 12,\n  MismatchedStartCloseTag = 13,\n  missingCloseTag = 57,\n  IncompleteCloseTag = 14,\n  commentContent$1 = 58,\n  Element = 20,\n  TagName = 22,\n  Attribute = 23,\n  AttributeName = 24,\n  AttributeValue = 26,\n  UnquotedAttributeValue = 27,\n  ScriptText = 28,\n  StyleText = 31,\n  TextareaText = 34,\n  OpenTag = 36,\n  CloseTag = 37,\n  Dialect_noMatch = 0,\n  Dialect_selfClosing = 1;\n\n/* Hand-written tokenizers for HTML. */\n\nconst selfClosers = {\n  area: true, base: true, br: true, col: true, command: true,\n  embed: true, frame: true, hr: true, img: true, input: true,\n  keygen: true, link: true, meta: true, param: true, source: true,\n  track: true, wbr: true, menuitem: true\n};\n\nconst implicitlyClosed = {\n  dd: true, li: true, optgroup: true, option: true, p: true,\n  rp: true, rt: true, tbody: true, td: true, tfoot: true,\n  th: true, tr: true\n};\n\nconst closeOnOpen = {\n  dd: {dd: true, dt: true},\n  dt: {dd: true, dt: true},\n  li: {li: true},\n  option: {option: true, optgroup: true},\n  optgroup: {optgroup: true},\n  p: {\n    address: true, article: true, aside: true, blockquote: true, dir: true,\n    div: true, dl: true, fieldset: true, footer: true, form: true,\n    h1: true, h2: true, h3: true, h4: true, h5: true, h6: true,\n    header: true, hgroup: true, hr: true, menu: true, nav: true, ol: true,\n    p: true, pre: true, section: true, table: true, ul: true\n  },\n  rp: {rp: true, rt: true},\n  rt: {rp: true, rt: true},\n  tbody: {tbody: true, tfoot: true},\n  td: {td: true, th: true},\n  tfoot: {tbody: true},\n  th: {td: true, th: true},\n  thead: {tbody: true, tfoot: true},\n  tr: {tr: true}\n};\n\nfunction nameChar(ch) {\n  return ch == 45 || ch == 46 || ch == 58 || ch >= 65 && ch <= 90 || ch == 95 || ch >= 97 && ch <= 122 || ch >= 161\n}\n\nfunction isSpace(ch) {\n  return ch == 9 || ch == 10 || ch == 13 || ch == 32\n}\n\nlet cachedName = null, cachedInput = null, cachedPos = 0;\nfunction tagNameAfter(input, offset) {\n  let pos = input.pos + offset;\n  if (cachedPos == pos && cachedInput == input) return cachedName\n  let next = input.peek(offset);\n  while (isSpace(next)) next = input.peek(++offset);\n  let name = \"\";\n  for (;;) {\n    if (!nameChar(next)) break\n    name += String.fromCharCode(next);\n    next = input.peek(++offset);\n  }\n  // Undefined to signal there's a <? or <!, null for just missing\n  cachedInput = input; cachedPos = pos;\n  return cachedName = name ? name.toLowerCase() : next == question || next == bang ? undefined : null\n}\n\nconst lessThan = 60, greaterThan = 62, slash = 47, question = 63, bang = 33, dash = 45;\n\nfunction ElementContext(name, parent) {\n  this.name = name;\n  this.parent = parent;\n  this.hash = parent ? parent.hash : 0;\n  for (let i = 0; i < name.length; i++) this.hash += (this.hash << 4) + name.charCodeAt(i) + (name.charCodeAt(i) << 8);\n}\n\nconst startTagTerms = [StartTag, StartSelfClosingTag, StartScriptTag, StartStyleTag, StartTextareaTag];\n\nconst elementContext = new ContextTracker({\n  start: null,\n  shift(context, term, stack, input) {\n    return startTagTerms.indexOf(term) > -1 ? new ElementContext(tagNameAfter(input, 1) || \"\", context) : context\n  },\n  reduce(context, term) {\n    return term == Element && context ? context.parent : context\n  },\n  reuse(context, node, stack, input) {\n    let type = node.type.id;\n    return type == StartTag || type == OpenTag\n      ? new ElementContext(tagNameAfter(input, 1) || \"\", context) : context\n  },\n  hash(context) { return context ? context.hash : 0 },\n  strict: false\n});\n\nconst tagStart = new ExternalTokenizer((input, stack) => {\n  if (input.next != lessThan) {\n    // End of file, close any open tags\n    if (input.next < 0 && stack.context) input.acceptToken(missingCloseTag);\n    return\n  }\n  input.advance();\n  let close = input.next == slash;\n  if (close) input.advance();\n  let name = tagNameAfter(input, 0);\n  if (name === undefined) return\n  if (!name) return input.acceptToken(close ? IncompleteCloseTag : StartTag)\n\n  let parent = stack.context ? stack.context.name : null;\n  if (close) {\n    if (name == parent) return input.acceptToken(StartCloseTag)\n    if (parent && implicitlyClosed[parent]) return input.acceptToken(missingCloseTag, -2)\n    if (stack.dialectEnabled(Dialect_noMatch)) return input.acceptToken(NoMatchStartCloseTag)\n    for (let cx = stack.context; cx; cx = cx.parent) if (cx.name == name) return\n    input.acceptToken(MismatchedStartCloseTag);\n  } else {\n    if (name == \"script\") return input.acceptToken(StartScriptTag)\n    if (name == \"style\") return input.acceptToken(StartStyleTag)\n    if (name == \"textarea\") return input.acceptToken(StartTextareaTag)\n    if (selfClosers.hasOwnProperty(name)) return input.acceptToken(StartSelfClosingTag)\n    if (parent && closeOnOpen[parent] && closeOnOpen[parent][name]) input.acceptToken(missingCloseTag, -1);\n    else input.acceptToken(StartTag);\n  }\n}, {contextual: true});\n\nconst commentContent = new ExternalTokenizer(input => {\n  for (let dashes = 0, i = 0;; i++) {\n    if (input.next < 0) {\n      if (i) input.acceptToken(commentContent$1);\n      break\n    }\n    if (input.next == dash) {\n      dashes++;\n    } else if (input.next == greaterThan && dashes >= 2) {\n      if (i > 3) input.acceptToken(commentContent$1, -2);\n      break\n    } else {\n      dashes = 0;\n    }\n    input.advance();\n  }\n});\n\nfunction inForeignElement(context) {\n  for (; context; context = context.parent)\n    if (context.name == \"svg\" || context.name == \"math\") return true\n  return false\n}\n\nconst endTag = new ExternalTokenizer((input, stack) => {\n  if (input.next == slash && input.peek(1) == greaterThan) {\n    let selfClosing = stack.dialectEnabled(Dialect_selfClosing) || inForeignElement(stack.context);\n    input.acceptToken(selfClosing ? SelfClosingEndTag : EndTag, 2);\n  } else if (input.next == greaterThan) {\n    input.acceptToken(EndTag, 1);\n  }\n});\n\nfunction contentTokenizer(tag, textToken, endToken) {\n  let lastState = 2 + tag.length;\n  return new ExternalTokenizer(input => {\n    // state means:\n    // - 0 nothing matched\n    // - 1 '<' matched\n    // - 2 '</' + possibly whitespace matched\n    // - 3-(1+tag.length) part of the tag matched\n    // - lastState whole tag + possibly whitespace matched\n    for (let state = 0, matchedLen = 0, i = 0;; i++) {\n      if (input.next < 0) {\n        if (i) input.acceptToken(textToken);\n        break\n      }\n      if (state == 0 && input.next == lessThan ||\n          state == 1 && input.next == slash ||\n          state >= 2 && state < lastState && input.next == tag.charCodeAt(state - 2)) {\n        state++;\n        matchedLen++;\n      } else if ((state == 2 || state == lastState) && isSpace(input.next)) {\n        matchedLen++;\n      } else if (state == lastState && input.next == greaterThan) {\n        if (i > matchedLen)\n          input.acceptToken(textToken, -matchedLen);\n        else\n          input.acceptToken(endToken, -(matchedLen - 2));\n        break\n      } else if ((input.next == 10 /* '\\n' */ || input.next == 13 /* '\\r' */) && i) {\n        input.acceptToken(textToken, 1);\n        break\n      } else {\n        state = matchedLen = 0;\n      }\n      input.advance();\n    }\n  })\n}\n\nconst scriptTokens = contentTokenizer(\"script\", scriptText, StartCloseScriptTag);\n\nconst styleTokens = contentTokenizer(\"style\", styleText, StartCloseStyleTag);\n\nconst textareaTokens = contentTokenizer(\"textarea\", textareaText, StartCloseTextareaTag);\n\nconst htmlHighlighting = styleTags({\n  \"Text RawText\": tags.content,\n  \"StartTag StartCloseTag SelfClosingEndTag EndTag\": tags.angleBracket,\n  TagName: tags.tagName,\n  \"MismatchedCloseTag/TagName\": [tags.tagName,  tags.invalid],\n  AttributeName: tags.attributeName,\n  \"AttributeValue UnquotedAttributeValue\": tags.attributeValue,\n  Is: tags.definitionOperator,\n  \"EntityReference CharacterReference\": tags.character,\n  Comment: tags.blockComment,\n  ProcessingInst: tags.processingInstruction,\n  DoctypeDecl: tags.documentMeta\n});\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst parser = LRParser.deserialize({\n  version: 14,\n  states: \",xOVO!rOOO!WQ#tO'#CqO!]Q#tO'#CzO!bQ#tO'#C}O!gQ#tO'#DQO!lQ#tO'#DSO!qOaO'#CpO!|ObO'#CpO#XOdO'#CpO$eO!rO'#CpOOO`'#Cp'#CpO$lO$fO'#DTO$tQ#tO'#DVO$yQ#tO'#DWOOO`'#Dk'#DkOOO`'#DY'#DYQVO!rOOO%OQ&rO,59]O%WQ&rO,59fO%`Q&rO,59iO%hQ&rO,59lO%sQ&rO,59nOOOa'#D^'#D^O%{OaO'#CxO&WOaO,59[OOOb'#D_'#D_O&`ObO'#C{O&kObO,59[OOOd'#D`'#D`O&sOdO'#DOO'OOdO,59[OOO`'#Da'#DaO'WO!rO,59[O'_Q#tO'#DROOO`,59[,59[OOOp'#Db'#DbO'dO$fO,59oOOO`,59o,59oO'lQ#|O,59qO'qQ#|O,59rOOO`-E7W-E7WO'vQ&rO'#CsOOQW'#DZ'#DZO(UQ&rO1G.wOOOa1G.w1G.wO(^Q&rO1G/QOOOb1G/Q1G/QO(fQ&rO1G/TOOOd1G/T1G/TO(nQ&rO1G/WOOO`1G/W1G/WOOO`1G/Y1G/YO(yQ&rO1G/YOOOa-E7[-E7[O)RQ#tO'#CyOOO`1G.v1G.vOOOb-E7]-E7]O)WQ#tO'#C|OOOd-E7^-E7^O)]Q#tO'#DPOOO`-E7_-E7_O)bQ#|O,59mOOOp-E7`-E7`OOO`1G/Z1G/ZOOO`1G/]1G/]OOO`1G/^1G/^O)gQ,UO,59_OOQW-E7X-E7XOOOa7+$c7+$cOOOb7+$l7+$lOOOd7+$o7+$oOOO`7+$r7+$rOOO`7+$t7+$tO)rQ#|O,59eO)wQ#|O,59hO)|Q#|O,59kOOO`1G/X1G/XO*RO7[O'#CvO*dOMhO'#CvOOQW1G.y1G.yOOO`1G/P1G/POOO`1G/S1G/SOOO`1G/V1G/VOOOO'#D['#D[O*uO7[O,59bOOQW,59b,59bOOOO'#D]'#D]O+WOMhO,59bOOOO-E7Y-E7YOOQW1G.|1G.|OOOO-E7Z-E7Z\",\n  stateData: \"+s~O!^OS~OUSOVPOWQOXROYTO[]O][O^^O`^Oa^Ob^Oc^Ox^O{_O!dZO~OfaO~OfbO~OfcO~OfdO~OfeO~O!WfOPlP!ZlP~O!XiOQoP!ZoP~O!YlORrP!ZrP~OUSOVPOWQOXROYTOZqO[]O][O^^O`^Oa^Ob^Oc^Ox^O!dZO~O!ZrO~P#dO![sO!euO~OfvO~OfwO~OS|OhyO~OS!OOhyO~OS!QOhyO~OS!SOT!TOhyO~OS!TOhyO~O!WfOPlX!ZlX~OP!WO!Z!XO~O!XiOQoX!ZoX~OQ!ZO!Z!XO~O!YlORrX!ZrX~OR!]O!Z!XO~O!Z!XO~P#dOf!_O~O![sO!e!aO~OS!bO~OS!cO~Oi!dOSgXhgXTgX~OS!fOhyO~OS!gOhyO~OS!hOhyO~OS!iOT!jOhyO~OS!jOhyO~Of!kO~Of!lO~Of!mO~OS!nO~Ok!qO!`!oO!b!pO~OS!rO~OS!sO~OS!tO~Oa!uOb!uOc!uO!`!wO!a!uO~Oa!xOb!xOc!xO!b!wO!c!xO~Oa!uOb!uOc!uO!`!{O!a!uO~Oa!xOb!xOc!xO!b!{O!c!xO~OT~bac!dx{!d~\",\n  goto: \"%p!`PPPPPPPPPPPPPPPPPPPP!a!gP!mPP!yP!|#P#S#Y#]#`#f#i#l#r#x!aP!a!aP$O$U$l$r$x%O%U%[%bPPPPPPPP%hX^OX`pXUOX`pezabcde{}!P!R!UR!q!dRhUR!XhXVOX`pRkVR!XkXWOX`pRnWR!XnXXOX`pQrXR!XpXYOX`pQ`ORx`Q{aQ}bQ!PcQ!RdQ!UeZ!e{}!P!R!UQ!v!oR!z!vQ!y!pR!|!yQgUR!VgQjVR!YjQmWR![mQpXR!^pQtZR!`tS_O`ToXp\",\n  nodeNames: \"\u26A0 StartCloseTag StartCloseTag StartCloseTag EndTag SelfClosingEndTag StartTag StartTag StartTag StartTag StartTag StartCloseTag StartCloseTag StartCloseTag IncompleteCloseTag Document Text EntityReference CharacterReference InvalidEntity Element OpenTag TagName Attribute AttributeName Is AttributeValue UnquotedAttributeValue ScriptText CloseTag OpenTag StyleText CloseTag OpenTag TextareaText CloseTag OpenTag CloseTag SelfClosingTag Comment ProcessingInst MismatchedCloseTag CloseTag DoctypeDecl\",\n  maxTerm: 67,\n  context: elementContext,\n  nodeProps: [\n    [\"closedBy\", -10,1,2,3,7,8,9,10,11,12,13,\"EndTag\",6,\"EndTag SelfClosingEndTag\",-4,21,30,33,36,\"CloseTag\"],\n    [\"openedBy\", 4,\"StartTag StartCloseTag\",5,\"StartTag\",-4,29,32,35,37,\"OpenTag\"],\n    [\"group\", -9,14,17,18,19,20,39,40,41,42,\"Entity\",16,\"Entity TextContent\",-3,28,31,34,\"TextContent Entity\"]\n  ],\n  propSources: [htmlHighlighting],\n  skippedNodes: [0],\n  repeatNodeCount: 9,\n  tokenData: \"!<p!aR!YOX$qXY,QYZ,QZ[$q[]&X]^,Q^p$qpq,Qqr-_rs3_sv-_vw3}wxHYx}-_}!OH{!O!P-_!P!Q$q!Q![-_![!]Mz!]!^-_!^!_!$S!_!`!;x!`!a&X!a!c-_!c!}Mz!}#R-_#R#SMz#S#T1k#T#oMz#o#s-_#s$f$q$f%W-_%W%oMz%o%p-_%p&aMz&a&b-_&b1pMz1p4U-_4U4dMz4d4e-_4e$ISMz$IS$I`-_$I`$IbMz$Ib$Kh-_$Kh%#tMz%#t&/x-_&/x&EtMz&Et&FV-_&FV;'SMz;'S;:j!#|;:j;=`3X<%l?&r-_?&r?AhMz?Ah?BY$q?BY?MnMz?MnO$q!Z$|c`PkW!a`!cpOX$qXZ&XZ[$q[^&X^p$qpq&Xqr$qrs&}sv$qvw+Pwx(tx!^$q!^!_*V!_!a&X!a#S$q#S#T&X#T;'S$q;'S;=`+z<%lO$q!R&bX`P!a`!cpOr&Xrs&}sv&Xwx(tx!^&X!^!_*V!_;'S&X;'S;=`*y<%lO&Xq'UV`P!cpOv&}wx'kx!^&}!^!_(V!_;'S&};'S;=`(n<%lO&}P'pT`POv'kw!^'k!_;'S'k;'S;=`(P<%lO'kP(SP;=`<%l'kp([S!cpOv(Vx;'S(V;'S;=`(h<%lO(Vp(kP;=`<%l(Vq(qP;=`<%l&}a({W`P!a`Or(trs'ksv(tw!^(t!^!_)e!_;'S(t;'S;=`*P<%lO(t`)jT!a`Or)esv)ew;'S)e;'S;=`)y<%lO)e`)|P;=`<%l)ea*SP;=`<%l(t!Q*^V!a`!cpOr*Vrs(Vsv*Vwx)ex;'S*V;'S;=`*s<%lO*V!Q*vP;=`<%l*V!R*|P;=`<%l&XW+UYkWOX+PZ[+P^p+Pqr+Psw+Px!^+P!a#S+P#T;'S+P;'S;=`+t<%lO+PW+wP;=`<%l+P!Z+}P;=`<%l$q!a,]``P!a`!cp!^^OX&XXY,QYZ,QZ]&X]^,Q^p&Xpq,Qqr&Xrs&}sv&Xwx(tx!^&X!^!_*V!_;'S&X;'S;=`*y<%lO&X!_-ljhS`PkW!a`!cpOX$qXZ&XZ[$q[^&X^p$qpq&Xqr-_rs&}sv-_vw/^wx(tx!P-_!P!Q$q!Q!^-_!^!_*V!_!a&X!a#S-_#S#T1k#T#s-_#s$f$q$f;'S-_;'S;=`3X<%l?Ah-_?Ah?BY$q?BY?Mn-_?MnO$q[/ebhSkWOX+PZ[+P^p+Pqr/^sw/^x!P/^!P!Q+P!Q!^/^!a#S/^#S#T0m#T#s/^#s$f+P$f;'S/^;'S;=`1e<%l?Ah/^?Ah?BY+P?BY?Mn/^?MnO+PS0rXhSqr0msw0mx!P0m!Q!^0m!a#s0m$f;'S0m;'S;=`1_<%l?Ah0m?BY?Mn0mS1bP;=`<%l0m[1hP;=`<%l/^!V1vchS`P!a`!cpOq&Xqr1krs&}sv1kvw0mwx(tx!P1k!P!Q&X!Q!^1k!^!_*V!_!a&X!a#s1k#s$f&X$f;'S1k;'S;=`3R<%l?Ah1k?Ah?BY&X?BY?Mn1k?MnO&X!V3UP;=`<%l1k!_3[P;=`<%l-_!Z3hV!`h`P!cpOv&}wx'kx!^&}!^!_(V!_;'S&};'S;=`(n<%lO&}!_4WihSkWc!ROX5uXZ7SZ[5u[^7S^p5uqr8trs7Sst>]tw8twx7Sx!P8t!P!Q5u!Q!]8t!]!^/^!^!a7S!a#S8t#S#T;{#T#s8t#s$f5u$f;'S8t;'S;=`>V<%l?Ah8t?Ah?BY5u?BY?Mn8t?MnO5u!Z5zbkWOX5uXZ7SZ[5u[^7S^p5uqr5urs7Sst+Ptw5uwx7Sx!]5u!]!^7w!^!a7S!a#S5u#S#T7S#T;'S5u;'S;=`8n<%lO5u!R7VVOp7Sqs7St!]7S!]!^7l!^;'S7S;'S;=`7q<%lO7S!R7qOa!R!R7tP;=`<%l7S!Z8OYkWa!ROX+PZ[+P^p+Pqr+Psw+Px!^+P!a#S+P#T;'S+P;'S;=`+t<%lO+P!Z8qP;=`<%l5u!_8{ihSkWOX5uXZ7SZ[5u[^7S^p5uqr8trs7Sst/^tw8twx7Sx!P8t!P!Q5u!Q!]8t!]!^:j!^!a7S!a#S8t#S#T;{#T#s8t#s$f5u$f;'S8t;'S;=`>V<%l?Ah8t?Ah?BY5u?BY?Mn8t?MnO5u!_:sbhSkWa!ROX+PZ[+P^p+Pqr/^sw/^x!P/^!P!Q+P!Q!^/^!a#S/^#S#T0m#T#s/^#s$f+P$f;'S/^;'S;=`1e<%l?Ah/^?Ah?BY+P?BY?Mn/^?MnO+P!V<QchSOp7Sqr;{rs7Sst0mtw;{wx7Sx!P;{!P!Q7S!Q!];{!]!^=]!^!a7S!a#s;{#s$f7S$f;'S;{;'S;=`>P<%l?Ah;{?Ah?BY7S?BY?Mn;{?MnO7S!V=dXhSa!Rqr0msw0mx!P0m!Q!^0m!a#s0m$f;'S0m;'S;=`1_<%l?Ah0m?BY?Mn0m!V>SP;=`<%l;{!_>YP;=`<%l8t!_>dhhSkWOX@OXZAYZ[@O[^AY^p@OqrBwrsAYswBwwxAYx!PBw!P!Q@O!Q!]Bw!]!^/^!^!aAY!a#SBw#S#TE{#T#sBw#s$f@O$f;'SBw;'S;=`HS<%l?AhBw?Ah?BY@O?BY?MnBw?MnO@O!Z@TakWOX@OXZAYZ[@O[^AY^p@Oqr@OrsAYsw@OwxAYx!]@O!]!^Az!^!aAY!a#S@O#S#TAY#T;'S@O;'S;=`Bq<%lO@O!RA]UOpAYq!]AY!]!^Ao!^;'SAY;'S;=`At<%lOAY!RAtOb!R!RAwP;=`<%lAY!ZBRYkWb!ROX+PZ[+P^p+Pqr+Psw+Px!^+P!a#S+P#T;'S+P;'S;=`+t<%lO+P!ZBtP;=`<%l@O!_COhhSkWOX@OXZAYZ[@O[^AY^p@OqrBwrsAYswBwwxAYx!PBw!P!Q@O!Q!]Bw!]!^Dj!^!aAY!a#SBw#S#TE{#T#sBw#s$f@O$f;'SBw;'S;=`HS<%l?AhBw?Ah?BY@O?BY?MnBw?MnO@O!_DsbhSkWb!ROX+PZ[+P^p+Pqr/^sw/^x!P/^!P!Q+P!Q!^/^!a#S/^#S#T0m#T#s/^#s$f+P$f;'S/^;'S;=`1e<%l?Ah/^?Ah?BY+P?BY?Mn/^?MnO+P!VFQbhSOpAYqrE{rsAYswE{wxAYx!PE{!P!QAY!Q!]E{!]!^GY!^!aAY!a#sE{#s$fAY$f;'SE{;'S;=`G|<%l?AhE{?Ah?BYAY?BY?MnE{?MnOAY!VGaXhSb!Rqr0msw0mx!P0m!Q!^0m!a#s0m$f;'S0m;'S;=`1_<%l?Ah0m?BY?Mn0m!VHPP;=`<%lE{!_HVP;=`<%lBw!ZHcW!bx`P!a`Or(trs'ksv(tw!^(t!^!_)e!_;'S(t;'S;=`*P<%lO(t!aIYlhS`PkW!a`!cpOX$qXZ&XZ[$q[^&X^p$qpq&Xqr-_rs&}sv-_vw/^wx(tx}-_}!OKQ!O!P-_!P!Q$q!Q!^-_!^!_*V!_!a&X!a#S-_#S#T1k#T#s-_#s$f$q$f;'S-_;'S;=`3X<%l?Ah-_?Ah?BY$q?BY?Mn-_?MnO$q!aK_khS`PkW!a`!cpOX$qXZ&XZ[$q[^&X^p$qpq&Xqr-_rs&}sv-_vw/^wx(tx!P-_!P!Q$q!Q!^-_!^!_*V!_!`&X!`!aMS!a#S-_#S#T1k#T#s-_#s$f$q$f;'S-_;'S;=`3X<%l?Ah-_?Ah?BY$q?BY?Mn-_?MnO$q!TM_X`P!a`!cp!eQOr&Xrs&}sv&Xwx(tx!^&X!^!_*V!_;'S&X;'S;=`*y<%lO&X!aNZ!ZhSfQ`PkW!a`!cpOX$qXZ&XZ[$q[^&X^p$qpq&Xqr-_rs&}sv-_vw/^wx(tx}-_}!OMz!O!PMz!P!Q$q!Q![Mz![!]Mz!]!^-_!^!_*V!_!a&X!a!c-_!c!}Mz!}#R-_#R#SMz#S#T1k#T#oMz#o#s-_#s$f$q$f$}-_$}%OMz%O%W-_%W%oMz%o%p-_%p&aMz&a&b-_&b1pMz1p4UMz4U4dMz4d4e-_4e$ISMz$IS$I`-_$I`$IbMz$Ib$Je-_$Je$JgMz$Jg$Kh-_$Kh%#tMz%#t&/x-_&/x&EtMz&Et&FV-_&FV;'SMz;'S;:j!#|;:j;=`3X<%l?&r-_?&r?AhMz?Ah?BY$q?BY?MnMz?MnO$q!a!$PP;=`<%lMz!R!$ZY!a`!cpOq*Vqr!$yrs(Vsv*Vwx)ex!a*V!a!b!4t!b;'S*V;'S;=`*s<%lO*V!R!%Q]!a`!cpOr*Vrs(Vsv*Vwx)ex}*V}!O!%y!O!f*V!f!g!']!g#W*V#W#X!0`#X;'S*V;'S;=`*s<%lO*V!R!&QX!a`!cpOr*Vrs(Vsv*Vwx)ex}*V}!O!&m!O;'S*V;'S;=`*s<%lO*V!R!&vV!a`!cp!dPOr*Vrs(Vsv*Vwx)ex;'S*V;'S;=`*s<%lO*V!R!'dX!a`!cpOr*Vrs(Vsv*Vwx)ex!q*V!q!r!(P!r;'S*V;'S;=`*s<%lO*V!R!(WX!a`!cpOr*Vrs(Vsv*Vwx)ex!e*V!e!f!(s!f;'S*V;'S;=`*s<%lO*V!R!(zX!a`!cpOr*Vrs(Vsv*Vwx)ex!v*V!v!w!)g!w;'S*V;'S;=`*s<%lO*V!R!)nX!a`!cpOr*Vrs(Vsv*Vwx)ex!{*V!{!|!*Z!|;'S*V;'S;=`*s<%lO*V!R!*bX!a`!cpOr*Vrs(Vsv*Vwx)ex!r*V!r!s!*}!s;'S*V;'S;=`*s<%lO*V!R!+UX!a`!cpOr*Vrs(Vsv*Vwx)ex!g*V!g!h!+q!h;'S*V;'S;=`*s<%lO*V!R!+xY!a`!cpOr!+qrs!,hsv!+qvw!-Swx!.[x!`!+q!`!a!/j!a;'S!+q;'S;=`!0Y<%lO!+qq!,mV!cpOv!,hvx!-Sx!`!,h!`!a!-q!a;'S!,h;'S;=`!.U<%lO!,hP!-VTO!`!-S!`!a!-f!a;'S!-S;'S;=`!-k<%lO!-SP!-kO{PP!-nP;=`<%l!-Sq!-xS!cp{POv(Vx;'S(V;'S;=`(h<%lO(Vq!.XP;=`<%l!,ha!.aX!a`Or!.[rs!-Ssv!.[vw!-Sw!`!.[!`!a!.|!a;'S!.[;'S;=`!/d<%lO!.[a!/TT!a`{POr)esv)ew;'S)e;'S;=`)y<%lO)ea!/gP;=`<%l!.[!R!/sV!a`!cp{POr*Vrs(Vsv*Vwx)ex;'S*V;'S;=`*s<%lO*V!R!0]P;=`<%l!+q!R!0gX!a`!cpOr*Vrs(Vsv*Vwx)ex#c*V#c#d!1S#d;'S*V;'S;=`*s<%lO*V!R!1ZX!a`!cpOr*Vrs(Vsv*Vwx)ex#V*V#V#W!1v#W;'S*V;'S;=`*s<%lO*V!R!1}X!a`!cpOr*Vrs(Vsv*Vwx)ex#h*V#h#i!2j#i;'S*V;'S;=`*s<%lO*V!R!2qX!a`!cpOr*Vrs(Vsv*Vwx)ex#m*V#m#n!3^#n;'S*V;'S;=`*s<%lO*V!R!3eX!a`!cpOr*Vrs(Vsv*Vwx)ex#d*V#d#e!4Q#e;'S*V;'S;=`*s<%lO*V!R!4XX!a`!cpOr*Vrs(Vsv*Vwx)ex#X*V#X#Y!+q#Y;'S*V;'S;=`*s<%lO*V!R!4{Y!a`!cpOr!4trs!5ksv!4tvw!6Vwx!8]x!a!4t!a!b!:]!b;'S!4t;'S;=`!;r<%lO!4tq!5pV!cpOv!5kvx!6Vx!a!5k!a!b!7W!b;'S!5k;'S;=`!8V<%lO!5kP!6YTO!a!6V!a!b!6i!b;'S!6V;'S;=`!7Q<%lO!6VP!6lTO!`!6V!`!a!6{!a;'S!6V;'S;=`!7Q<%lO!6VP!7QOxPP!7TP;=`<%l!6Vq!7]V!cpOv!5kvx!6Vx!`!5k!`!a!7r!a;'S!5k;'S;=`!8V<%lO!5kq!7yS!cpxPOv(Vx;'S(V;'S;=`(h<%lO(Vq!8YP;=`<%l!5ka!8bX!a`Or!8]rs!6Vsv!8]vw!6Vw!a!8]!a!b!8}!b;'S!8];'S;=`!:V<%lO!8]a!9SX!a`Or!8]rs!6Vsv!8]vw!6Vw!`!8]!`!a!9o!a;'S!8];'S;=`!:V<%lO!8]a!9vT!a`xPOr)esv)ew;'S)e;'S;=`)y<%lO)ea!:YP;=`<%l!8]!R!:dY!a`!cpOr!4trs!5ksv!4tvw!6Vwx!8]x!`!4t!`!a!;S!a;'S!4t;'S;=`!;r<%lO!4t!R!;]V!a`!cpxPOr*Vrs(Vsv*Vwx)ex;'S*V;'S;=`*s<%lO*V!R!;uP;=`<%l!4t!V!<TXiS`P!a`!cpOr&Xrs&}sv&Xwx(tx!^&X!^!_*V!_;'S&X;'S;=`*y<%lO&X\",\n  tokenizers: [scriptTokens, styleTokens, textareaTokens, endTag, tagStart, commentContent, 0, 1, 2, 3, 4, 5],\n  topRules: {\"Document\":[0,15]},\n  dialects: {noMatch: 0, selfClosing: 485},\n  tokenPrec: 487\n});\n\nfunction getAttrs(openTag, input) {\n  let attrs = Object.create(null);\n  for (let att of openTag.getChildren(Attribute)) {\n    let name = att.getChild(AttributeName), value = att.getChild(AttributeValue) || att.getChild(UnquotedAttributeValue);\n    if (name) attrs[input.read(name.from, name.to)] =\n      !value ? \"\" : value.type.id == AttributeValue ? input.read(value.from + 1, value.to - 1) : input.read(value.from, value.to);\n  }\n  return attrs\n}\n\nfunction findTagName(openTag, input) {\n  let tagNameNode = openTag.getChild(TagName);\n  return tagNameNode ? input.read(tagNameNode.from, tagNameNode.to) : \" \"\n}\n\nfunction maybeNest(node, input, tags) {\n  let attrs;\n  for (let tag of tags) {\n    if (!tag.attrs || tag.attrs(attrs || (attrs = getAttrs(node.node.parent.firstChild, input))))\n      return {parser: tag.parser}\n  }\n  return null\n}\n\n// tags?: {\n//   tag: string,\n//   attrs?: ({[attr: string]: string}) => boolean,\n//   parser: Parser\n// }[]\n// attributes?: {\n//   name: string,\n//   tagName?: string,\n//   parser: Parser\n// }[]\n \nfunction configureNesting(tags = [], attributes = []) {\n  let script = [], style = [], textarea = [], other = [];\n  for (let tag of tags) {\n    let array = tag.tag == \"script\" ? script : tag.tag == \"style\" ? style : tag.tag == \"textarea\" ? textarea : other;\n    array.push(tag);\n  }\n  let attrs = attributes.length ? Object.create(null) : null;\n  for (let attr of attributes) (attrs[attr.name] || (attrs[attr.name] = [])).push(attr);\n\n  return parseMixed((node, input) => {\n    let id = node.type.id;\n    if (id == ScriptText) return maybeNest(node, input, script)\n    if (id == StyleText) return maybeNest(node, input, style)\n    if (id == TextareaText) return maybeNest(node, input, textarea)\n\n    if (id == Element && other.length) {\n      let n = node.node, open = n.firstChild, tagName = open && findTagName(open, input), attrs;\n      if (tagName) for (let tag of other) {\n        if (tag.tag == tagName && (!tag.attrs || tag.attrs(attrs || (attrs = getAttrs(n, input))))) {\n          let close = n.lastChild;\n          return {parser: tag.parser, overlay: [{from: open.to, to: close.type.id == CloseTag ? close.from : n.to}]}\n        }\n      }\n    }\n\n    if (attrs && id == Attribute) {\n      let n = node.node, nameNode;\n      if (nameNode = n.firstChild) {\n        let matches = attrs[input.read(nameNode.from, nameNode.to)];\n        if (matches) for (let attr of matches) {\n          if (attr.tagName && attr.tagName != findTagName(n.parent, input)) continue\n          let value = n.lastChild;\n          if (value.type.id == AttributeValue) {\n            let from = value.from + 1;\n            let last = value.lastChild, to = value.to - (last && last.isError ? 0 : 1);\n            if (to > from) return {parser: attr.parser, overlay: [{from, to}]}\n          } else if (value.type.id == UnquotedAttributeValue) {\n            return {parser: attr.parser, overlay: [{from: value.from, to: value.to}]}\n          }\n        }\n      }\n    }\n    return null\n  })\n}\n\nexport { configureNesting, parser };\n", "import { ExternalTokenizer, LRParser, LocalTokenGroup } from '@lezer/lr';\nimport { styleTags, tags } from '@lezer/highlight';\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst descendantOp = 96,\n  Unit = 1,\n  callee = 97,\n  identifier = 98,\n  VariableName = 2;\n\n/* Hand-written tokenizers for CSS tokens that can't be\n   expressed by Lezer's built-in tokenizer. */\n\nconst space = [9, 10, 11, 12, 13, 32, 133, 160, 5760, 8192, 8193, 8194, 8195, 8196, 8197,\n               8198, 8199, 8200, 8201, 8202, 8232, 8233, 8239, 8287, 12288];\nconst colon = 58, parenL = 40, underscore = 95, bracketL = 91, dash = 45, period = 46,\n      hash = 35, percent = 37, ampersand = 38, backslash = 92, newline = 10;\n\nfunction isAlpha(ch) { return ch >= 65 && ch <= 90 || ch >= 97 && ch <= 122 || ch >= 161 }\n\nfunction isDigit(ch) { return ch >= 48 && ch <= 57 }\n\nconst identifiers = new ExternalTokenizer((input, stack) => {\n  for (let inside = false, dashes = 0, i = 0;; i++) {\n    let {next} = input;\n    if (isAlpha(next) || next == dash || next == underscore || (inside && isDigit(next))) {\n      if (!inside && (next != dash || i > 0)) inside = true;\n      if (dashes === i && next == dash) dashes++;\n      input.advance();\n    } else if (next == backslash && input.peek(1) != newline) {\n      input.advance();\n      if (input.next > -1) input.advance();\n      inside = true;\n    } else {\n      if (inside)\n        input.acceptToken(next == parenL ? callee : dashes == 2 && stack.canShift(VariableName) ? VariableName : identifier);\n      break\n    }\n  }\n});\n\nconst descendant = new ExternalTokenizer(input => {\n  if (space.includes(input.peek(-1))) {\n    let {next} = input;\n    if (isAlpha(next) || next == underscore || next == hash || next == period ||\n        next == bracketL || next == colon || next == dash || next == ampersand)\n      input.acceptToken(descendantOp);\n  }\n});\n\nconst unitToken = new ExternalTokenizer(input => {\n  if (!space.includes(input.peek(-1))) {\n    let {next} = input;\n    if (next == percent) { input.advance(); input.acceptToken(Unit); }\n    if (isAlpha(next)) {\n      do { input.advance(); } while (isAlpha(input.next))\n      input.acceptToken(Unit);\n    }\n  }\n});\n\nconst cssHighlighting = styleTags({\n  \"AtKeyword import charset namespace keyframes media supports\": tags.definitionKeyword,\n  \"from to selector\": tags.keyword,\n  NamespaceName: tags.namespace,\n  KeyframeName: tags.labelName,\n  KeyframeRangeName: tags.operatorKeyword,\n  TagName: tags.tagName,\n  ClassName: tags.className,\n  PseudoClassName: tags.constant(tags.className),\n  IdName: tags.labelName,\n  \"FeatureName PropertyName\": tags.propertyName,\n  AttributeName: tags.attributeName,\n  NumberLiteral: tags.number,\n  KeywordQuery: tags.keyword,\n  UnaryQueryOp: tags.operatorKeyword,\n  \"CallTag ValueName\": tags.atom,\n  VariableName: tags.variableName,\n  Callee: tags.operatorKeyword,\n  Unit: tags.unit,\n  \"UniversalSelector NestingSelector\": tags.definitionOperator,\n  MatchOp: tags.compareOperator,\n  \"ChildOp SiblingOp, LogicOp\": tags.logicOperator,\n  BinOp: tags.arithmeticOperator,\n  Important: tags.modifier,\n  Comment: tags.blockComment,\n  ColorLiteral: tags.color,\n  \"ParenthesizedContent StringLiteral\": tags.string,\n  \":\": tags.punctuation,\n  \"PseudoOp #\": tags.derefOperator,\n  \"; ,\": tags.separator,\n  \"( )\": tags.paren,\n  \"[ ]\": tags.squareBracket,\n  \"{ }\": tags.brace\n});\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst spec_callee = {__proto__:null,lang:32, \"nth-child\":32, \"nth-last-child\":32, \"nth-of-type\":32, \"nth-last-of-type\":32, dir:32, \"host-context\":32, url:60, \"url-prefix\":60, domain:60, regexp:60, selector:134};\nconst spec_AtKeyword = {__proto__:null,\"@import\":114, \"@media\":138, \"@charset\":142, \"@namespace\":146, \"@keyframes\":152, \"@supports\":164};\nconst spec_identifier = {__proto__:null,not:128, only:128};\nconst parser = LRParser.deserialize({\n  version: 14,\n  states: \"9bQYQ[OOO#_Q[OOP#fOWOOOOQP'#Cd'#CdOOQP'#Cc'#CcO#kQ[O'#CfO$_QXO'#CaO$fQ[O'#ChO$qQ[O'#DPO$vQ[O'#DTOOQP'#Ej'#EjO${QdO'#DeO%gQ[O'#DrO${QdO'#DtO%xQ[O'#DvO&TQ[O'#DyO&]Q[O'#EPO&kQ[O'#EROOQS'#Ei'#EiOOQS'#EU'#EUQYQ[OOO&rQXO'#CdO'gQWO'#DaO'lQWO'#EpO'wQ[O'#EpQOQWOOP(RO#tO'#C_POOO)C@X)C@XOOQP'#Cg'#CgOOQP,59Q,59QO#kQ[O,59QO(^Q[O'#EXO(xQWO,58{O)QQ[O,59SO$qQ[O,59kO$vQ[O,59oO(^Q[O,59sO(^Q[O,59uO(^Q[O,59vO)]Q[O'#D`OOQS,58{,58{OOQP'#Ck'#CkOOQO'#C}'#C}OOQP,59S,59SO)dQWO,59SO)iQWO,59SOOQP'#DR'#DROOQP,59k,59kOOQO'#DV'#DVO)nQ`O,59oOOQS'#Cp'#CpO${QdO'#CqO)vQvO'#CsO+TQtO,5:POOQO'#Cx'#CxO)iQWO'#CwO+iQWO'#CyOOQS'#Em'#EmOOQO'#Dh'#DhO+nQ[O'#DoO+|QWO'#EqO&]Q[O'#DmO,[QWO'#DpOOQO'#Er'#ErO({QWO,5:^O,aQpO,5:`OOQS'#Dx'#DxO,iQWO,5:bO,nQ[O,5:bOOQO'#D{'#D{O,vQWO,5:eO,{QWO,5:kO-TQWO,5:mOOQS-E8S-E8SO${QdO,59{O-]Q[O'#EZO-jQWO,5;[O-jQWO,5;[POOO'#ET'#ETP-uO#tO,58yPOOO,58y,58yOOQP1G.l1G.lO.lQXO,5:sOOQO-E8V-E8VOOQS1G.g1G.gOOQP1G.n1G.nO)dQWO1G.nO)iQWO1G.nOOQP1G/V1G/VO.yQ`O1G/ZO/dQXO1G/_O/zQXO1G/aO0bQXO1G/bO0xQWO,59zO0}Q[O'#DOO1UQdO'#CoOOQP1G/Z1G/ZO${QdO1G/ZO1]QpO,59]OOQS,59_,59_O${QdO,59aO1eQWO1G/kOOQS,59c,59cO1jQ!bO,59eO1rQWO'#DhO1}QWO,5:TO2SQWO,5:ZO&]Q[O,5:VO&]Q[O'#E[O2[QWO,5;]O2gQWO,5:XO(^Q[O,5:[OOQS1G/x1G/xOOQS1G/z1G/zOOQS1G/|1G/|O2xQWO1G/|O2}QdO'#D|OOQS1G0P1G0POOQS1G0V1G0VOOQS1G0X1G0XO3YQtO1G/gOOQO,5:u,5:uO3pQ[O,5:uOOQO-E8X-E8XO3}QWO1G0vPOOO-E8R-E8RPOOO1G.e1G.eOOQP7+$Y7+$YOOQP7+$u7+$uO${QdO7+$uOOQS1G/f1G/fO4YQXO'#EoO4aQWO,59jO4fQtO'#EVO5ZQdO'#ElO5eQWO,59ZO5jQpO7+$uOOQS1G.w1G.wOOQS1G.{1G.{OOQS7+%V7+%VO5rQWO1G/PO${QdO1G/oOOQO1G/u1G/uOOQO1G/q1G/qO5wQWO,5:vOOQO-E8Y-E8YO6VQXO1G/vOOQS7+%h7+%hO6^QYO'#CsOOQO'#EO'#EOO6iQ`O'#D}OOQO'#D}'#D}O6tQWO'#E]O6|QdO,5:hOOQS,5:h,5:hO7XQtO'#EYO${QdO'#EYO8VQdO7+%ROOQO7+%R7+%ROOQO1G0a1G0aO8jQpO<<HaO8rQWO,5;ZOOQP1G/U1G/UOOQS-E8T-E8TO${QdO'#EWO8zQWO,5;WOOQT1G.u1G.uOOQP<<Ha<<HaOOQS7+$k7+$kO9SQdO7+%ZOOQO7+%b7+%bOOQO,5:i,5:iO3QQdO'#E^O6tQWO,5:wOOQS,5:w,5:wOOQS-E8Z-E8ZOOQS1G0S1G0SO9ZQtO,5:tOOQS-E8W-E8WOOQO<<Hm<<HmOOQPAN={AN={O:XQdO,5:rOOQO-E8U-E8UOOQO<<Hu<<HuOOQO,5:x,5:xOOQO-E8[-E8[OOQS1G0c1G0c\",\n  stateData: \":k~O#WOS#XQQ~OUYOXYO]VO^VOtWOxXO!YaO!ZZO!g[O!i]O!k^O!n_O!t`O#URO#_TO~OQfOUYOXYO]VO^VOtWOxXO!YaO!ZZO!g[O!i]O!k^O!n_O!t`O#UeO#_TO~O#R#dP~P!ZO#XjO~O#UlO~O]qO^qOpoOtrOxsO|tO!PvO#SuO#_nO~O!RwO~P#pO`}O#TzO#UyO~O#U!OO~O#U!QO~OQ!ZOb!TOf!ZOh!ZOn!YO#T!WO#U!SO#b!UO~Ob!]O!b!_O!e!`O#U![O!R#eP~Oh!eOn!YO#U!dO~Oh!gO#U!gO~Ob!]O!b!_O!e!`O#U![O~O!W#eP~P%gO]WX]!UX^WXpWXtWXxWX|WX!PWX!RWX#SWX#_WX~O]!lO~O!W!mO#R#dX!Q#dX~O#R#dX!Q#dX~P!ZO#Y!pO#Z!pO#[!rO~OUYOXYO]VO^VOtWOxXO#URO#_TO~OpoO!RwO~O`!yO#TzO#UyO~O!Q#dP~P!ZOb#QO~Ob#RO~Ov#SOz#TO~OP#VObgXjgX!WgX!bgX!egX#UgXagXQgXfgXhgXngXpgX!VgX#RgX#TgX#bgXvgX!QgX~Ob!]Oj#WO!b!_O!e!`O#U![O!W#eP~Ob#ZO~Ob!]O!b!_O!e!`O#U#[O~Op#`O!`#_O!R#eX!W#eX~Ob#cO~Oj#WO!W#eO~O!W#fO~Oh#gOn!YO~O!R#hO~O!RwO!`#_O~O!RwO!W#kO~O!W!}X#R!}X!Q!}X~P!ZO!W!mO#R#da!Q#da~O#Y!pO#Z!pO#[#rO~O]qO^qOtrOxsO|tO!PvO#SuO#_nO~Op!{a!R!{aa!{a~P.QOv#tOz#uO~O]qO^qOtrOxsO#_nO~Op{i|{i!P{i!R{i#S{ia{i~P/ROp}i|}i!P}i!R}i#S}ia}i~P/ROp!Oi|!Oi!P!Oi!R!Oi#S!Oia!Oi~P/RO!Q#vO~Oa#cP~P(^Oa#`P~P${Oa#}Oj#WO~O!W$PO~Oh$QOo$QO~O]!^Xa![X!`![X~O]$RO~Oa$SO!`#_O~Op#`O!R#ea!W#ea~O!`#_Op!aa!R!aa!W!aaa!aa~O!W$XO~O!Q$`O#U$ZO#b$YO~Oj#WOp$bO!V$dO!W!Ti#R!Ti!Q!Ti~P${O!W!}a#R!}a!Q!}a~P!ZO!W!mO#R#di!Q#di~Oa#cX~P#pOa$hO~Oj#WOQ!yXa!yXb!yXf!yXh!yXn!yXp!yX#T!yX#U!yX#b!yX~Op$jOa#`X~P${Oa$lO~Oj#WOv$mO~Oa$nO~O!`#_Op#Oa!R#Oa!W#Oa~Oa$pO~P.QOP#VOpgX!RgX~O#b$YOp!qX!R!qX~Op$rO!RwO~O!Q$vO#U$ZO#b$YO~Oj#WOQ!|Xb!|Xf!|Xh!|Xn!|Xp!|X!V!|X!W!|X#R!|X#T!|X#U!|X#b!|X!Q!|X~Op$bO!V$yO!W!Tq#R!Tq!Q!Tq~P${Oj#WOv$zO~OpoOa#ca~Op$jOa#`a~Oa$}O~P${Oj#WOQ!|ab!|af!|ah!|an!|ap!|a!V!|a!W!|a#R!|a#T!|a#U!|a#b!|a!Q!|a~Oa!zap!za~P${O#Wo#X#bj!P#b~\",\n  goto: \"-Y#gPPP#hP#kP#t$TP#t$d#tPP$jPPP$p$y$yP%]P$yP$y%w&ZPPP&s&y#tP'PP#tP'VP#tP#t#tPPP']'r(PPP#kPP(W(W(b(WP(WP(W(WP#kP#kP#kP(e#kP(h(k(n(u#kP#kP(z)Q)a)o)u*P*V*a*g*mPPPPPPPPPP*s*|P+i+lP,b,e,k,tRkQ_bOPdhw!m#nkYOPdhotuvw!m#Q#c#nkSOPdhotuvw!m#Q#c#nQmTR!snQ{VR!wqQ!w}Q#Y!XR#s!yq!ZZ]!T!l#R#T#W#l#u#z$R$b$c$j$o${p!ZZ]!T!l#R#T#W#l#u#z$R$b$c$j$o${U$]#h$_$rR$q$[q!XZ]!T!l#R#T#W#l#u#z$R$b$c$j$o${p!ZZ]!T!l#R#T#W#l#u#z$R$b$c$j$o${Q!e^R#g!fQ|VR!xqQ!w|R#s!xQ!PWR!zrQ!RXR!{sQxUQ!vpQ#d!bQ#j!iQ#k!jQ$t$^R%Q$sSgPwQ!ohQ#m!mR$e#nZfPhw!m#na!a[`a!V!]!_#_#`R#]!]R!f^R!h_R#i!hS$^#h$_R%O$rV$[#h$_$rQ!qjR#q!qQdOShPwU!kdh#nR#n!mQ#z#RU$i#z$o${Q$o$RR${$jQ$k#zR$|$kQpUS!up$gR$g#wQ$c#lR$x$cQ!ngS#o!n#pR#p!oQ#a!^R$V#aQ$_#hR$u$_Q$s$^R%P$s_cOPdhw!m#n^UOPdhw!m#nQ!toQ!|tQ!}uQ#OvQ#w#QR$W#cR#{#RQ!VZQ!c]Q#U!TQ#l!l[#y#R#z$R$j$o${Q#|#TQ$O#WS$a#l$cQ$f#uR$w$bR#x#QQiPR#PwQ!b[Q!jaR#X!VU!^[a!VQ!i`Q#^!]Q#b!_Q$T#_R$U#`\",\n  nodeNames: \"\u26A0 Unit VariableName Comment StyleSheet RuleSet UniversalSelector TagSelector TagName NestingSelector ClassSelector ClassName PseudoClassSelector : :: PseudoClassName PseudoClassName ) ( ArgList ValueName ParenthesizedValue ColorLiteral NumberLiteral StringLiteral BinaryExpression BinOp CallExpression Callee CallLiteral CallTag ParenthesizedContent , PseudoClassName ArgList IdSelector # IdName ] AttributeSelector [ AttributeName MatchOp ChildSelector ChildOp DescendantSelector SiblingSelector SiblingOp } { Block Declaration PropertyName Important ; ImportStatement AtKeyword import KeywordQuery FeatureQuery FeatureName BinaryQuery LogicOp UnaryQuery UnaryQueryOp ParenthesizedQuery SelectorQuery selector MediaStatement media CharsetStatement charset NamespaceStatement namespace NamespaceName KeyframesStatement keyframes KeyframeName KeyframeList KeyframeSelector KeyframeRangeName SupportsStatement supports AtRule Styles\",\n  maxTerm: 114,\n  nodeProps: [\n    [\"openedBy\", 17,\"(\",48,\"{\"],\n    [\"closedBy\", 18,\")\",49,\"}\"]\n  ],\n  propSources: [cssHighlighting],\n  skippedNodes: [0,3,85],\n  repeatNodeCount: 10,\n  tokenData: \"J^~R!^OX$}X^%u^p$}pq%uqr)Xrs.Rst/utu6duv$}vw7^wx7oxy9^yz9oz{9t{|:_|}?Q}!O?c!O!P@Q!P!Q@i!Q![Ab![!]B]!]!^CX!^!_$}!_!`Cj!`!aC{!a!b$}!b!cDw!c!}$}!}#OFa#O#P$}#P#QFr#Q#R6d#R#T$}#T#UGT#U#c$}#c#dHf#d#o$}#o#pH{#p#q6d#q#rI^#r#sIo#s#y$}#y#z%u#z$f$}$f$g%u$g#BY$}#BY#BZ%u#BZ$IS$}$IS$I_%u$I_$I|$}$I|$JO%u$JO$JT$}$JT$JU%u$JU$KV$}$KV$KW%u$KW&FU$}&FU&FV%u&FV;'S$};'S;=`JW<%lO$}`%QSOy%^z;'S%^;'S;=`%o<%lO%^`%cSo`Oy%^z;'S%^;'S;=`%o<%lO%^`%rP;=`<%l%^~%zh#W~OX%^X^'f^p%^pq'fqy%^z#y%^#y#z'f#z$f%^$f$g'f$g#BY%^#BY#BZ'f#BZ$IS%^$IS$I_'f$I_$I|%^$I|$JO'f$JO$JT%^$JT$JU'f$JU$KV%^$KV$KW'f$KW&FU%^&FU&FV'f&FV;'S%^;'S;=`%o<%lO%^~'mh#W~o`OX%^X^'f^p%^pq'fqy%^z#y%^#y#z'f#z$f%^$f$g'f$g#BY%^#BY#BZ'f#BZ$IS%^$IS$I_'f$I_$I|%^$I|$JO'f$JO$JT%^$JT$JU'f$JU$KV%^$KV$KW'f$KW&FU%^&FU&FV'f&FV;'S%^;'S;=`%o<%lO%^l)[UOy%^z#]%^#]#^)n#^;'S%^;'S;=`%o<%lO%^l)sUo`Oy%^z#a%^#a#b*V#b;'S%^;'S;=`%o<%lO%^l*[Uo`Oy%^z#d%^#d#e*n#e;'S%^;'S;=`%o<%lO%^l*sUo`Oy%^z#c%^#c#d+V#d;'S%^;'S;=`%o<%lO%^l+[Uo`Oy%^z#f%^#f#g+n#g;'S%^;'S;=`%o<%lO%^l+sUo`Oy%^z#h%^#h#i,V#i;'S%^;'S;=`%o<%lO%^l,[Uo`Oy%^z#T%^#T#U,n#U;'S%^;'S;=`%o<%lO%^l,sUo`Oy%^z#b%^#b#c-V#c;'S%^;'S;=`%o<%lO%^l-[Uo`Oy%^z#h%^#h#i-n#i;'S%^;'S;=`%o<%lO%^l-uS!V[o`Oy%^z;'S%^;'S;=`%o<%lO%^~.UWOY.RZr.Rrs.ns#O.R#O#P.s#P;'S.R;'S;=`/o<%lO.R~.sOh~~.vRO;'S.R;'S;=`/P;=`O.R~/SXOY.RZr.Rrs.ns#O.R#O#P.s#P;'S.R;'S;=`/o;=`<%l.R<%lO.R~/rP;=`<%l.Rn/zYtQOy%^z!Q%^!Q![0j![!c%^!c!i0j!i#T%^#T#Z0j#Z;'S%^;'S;=`%o<%lO%^l0oYo`Oy%^z!Q%^!Q![1_![!c%^!c!i1_!i#T%^#T#Z1_#Z;'S%^;'S;=`%o<%lO%^l1dYo`Oy%^z!Q%^!Q![2S![!c%^!c!i2S!i#T%^#T#Z2S#Z;'S%^;'S;=`%o<%lO%^l2ZYf[o`Oy%^z!Q%^!Q![2y![!c%^!c!i2y!i#T%^#T#Z2y#Z;'S%^;'S;=`%o<%lO%^l3QYf[o`Oy%^z!Q%^!Q![3p![!c%^!c!i3p!i#T%^#T#Z3p#Z;'S%^;'S;=`%o<%lO%^l3uYo`Oy%^z!Q%^!Q![4e![!c%^!c!i4e!i#T%^#T#Z4e#Z;'S%^;'S;=`%o<%lO%^l4lYf[o`Oy%^z!Q%^!Q![5[![!c%^!c!i5[!i#T%^#T#Z5[#Z;'S%^;'S;=`%o<%lO%^l5aYo`Oy%^z!Q%^!Q![6P![!c%^!c!i6P!i#T%^#T#Z6P#Z;'S%^;'S;=`%o<%lO%^l6WSf[o`Oy%^z;'S%^;'S;=`%o<%lO%^d6gUOy%^z!_%^!_!`6y!`;'S%^;'S;=`%o<%lO%^d7QSzSo`Oy%^z;'S%^;'S;=`%o<%lO%^b7cSXQOy%^z;'S%^;'S;=`%o<%lO%^~7rWOY7oZw7owx.nx#O7o#O#P8[#P;'S7o;'S;=`9W<%lO7o~8_RO;'S7o;'S;=`8h;=`O7o~8kXOY7oZw7owx.nx#O7o#O#P8[#P;'S7o;'S;=`9W;=`<%l7o<%lO7o~9ZP;=`<%l7on9cSb^Oy%^z;'S%^;'S;=`%o<%lO%^~9tOa~n9{UUQjWOy%^z!_%^!_!`6y!`;'S%^;'S;=`%o<%lO%^n:fWjW!PQOy%^z!O%^!O!P;O!P!Q%^!Q![>T![;'S%^;'S;=`%o<%lO%^l;TUo`Oy%^z!Q%^!Q![;g![;'S%^;'S;=`%o<%lO%^l;nYo`#b[Oy%^z!Q%^!Q![;g![!g%^!g!h<^!h#X%^#X#Y<^#Y;'S%^;'S;=`%o<%lO%^l<cYo`Oy%^z{%^{|=R|}%^}!O=R!O!Q%^!Q![=j![;'S%^;'S;=`%o<%lO%^l=WUo`Oy%^z!Q%^!Q![=j![;'S%^;'S;=`%o<%lO%^l=qUo`#b[Oy%^z!Q%^!Q![=j![;'S%^;'S;=`%o<%lO%^l>[[o`#b[Oy%^z!O%^!O!P;g!P!Q%^!Q![>T![!g%^!g!h<^!h#X%^#X#Y<^#Y;'S%^;'S;=`%o<%lO%^n?VSp^Oy%^z;'S%^;'S;=`%o<%lO%^l?hWjWOy%^z!O%^!O!P;O!P!Q%^!Q![>T![;'S%^;'S;=`%o<%lO%^n@VU#_QOy%^z!Q%^!Q![;g![;'S%^;'S;=`%o<%lO%^~@nTjWOy%^z{@}{;'S%^;'S;=`%o<%lO%^~AUSo`#X~Oy%^z;'S%^;'S;=`%o<%lO%^lAg[#b[Oy%^z!O%^!O!P;g!P!Q%^!Q![>T![!g%^!g!h<^!h#X%^#X#Y<^#Y;'S%^;'S;=`%o<%lO%^bBbU]QOy%^z![%^![!]Bt!];'S%^;'S;=`%o<%lO%^bB{S^Qo`Oy%^z;'S%^;'S;=`%o<%lO%^nC^S!W^Oy%^z;'S%^;'S;=`%o<%lO%^dCoSzSOy%^z;'S%^;'S;=`%o<%lO%^bDQU|QOy%^z!`%^!`!aDd!a;'S%^;'S;=`%o<%lO%^bDkS|Qo`Oy%^z;'S%^;'S;=`%o<%lO%^bDzWOy%^z!c%^!c!}Ed!}#T%^#T#oEd#o;'S%^;'S;=`%o<%lO%^bEk[!YQo`Oy%^z}%^}!OEd!O!Q%^!Q![Ed![!c%^!c!}Ed!}#T%^#T#oEd#o;'S%^;'S;=`%o<%lO%^bFfSxQOy%^z;'S%^;'S;=`%o<%lO%^lFwSv[Oy%^z;'S%^;'S;=`%o<%lO%^bGWUOy%^z#b%^#b#cGj#c;'S%^;'S;=`%o<%lO%^bGoUo`Oy%^z#W%^#W#XHR#X;'S%^;'S;=`%o<%lO%^bHYS!`Qo`Oy%^z;'S%^;'S;=`%o<%lO%^bHiUOy%^z#f%^#f#gHR#g;'S%^;'S;=`%o<%lO%^fIQS!RUOy%^z;'S%^;'S;=`%o<%lO%^nIcS!Q^Oy%^z;'S%^;'S;=`%o<%lO%^fItU!PQOy%^z!_%^!_!`6y!`;'S%^;'S;=`%o<%lO%^`JZP;=`<%l$}\",\n  tokenizers: [descendant, unitToken, identifiers, 1, 2, 3, 4, new LocalTokenGroup(\"m~RRYZ[z{a~~g~aO#Z~~dP!P!Qg~lO#[~~\", 28, 102)],\n  topRules: {\"StyleSheet\":[0,4],\"Styles\":[1,84]},\n  specialized: [{term: 97, get: (value) => spec_callee[value] || -1},{term: 56, get: (value) => spec_AtKeyword[value] || -1},{term: 98, get: (value) => spec_identifier[value] || -1}],\n  tokenPrec: 1169\n});\n\nexport { parser };\n", "import { parser } from '@lezer/css';\nimport { syntaxTree, LRLanguage, indentNodeProp, continuedIndent, foldNodeProp, foldInside, LanguageSupport } from '@codemirror/language';\nimport { NodeWeakMap, IterMode } from '@lezer/common';\n\nlet _properties = null;\nfunction properties() {\n    if (!_properties && typeof document == \"object\" && document.body) {\n        let { style } = document.body, names = [], seen = new Set;\n        for (let prop in style)\n            if (prop != \"cssText\" && prop != \"cssFloat\") {\n                if (typeof style[prop] == \"string\") {\n                    if (/[A-Z]/.test(prop))\n                        prop = prop.replace(/[A-Z]/g, ch => \"-\" + ch.toLowerCase());\n                    if (!seen.has(prop)) {\n                        names.push(prop);\n                        seen.add(prop);\n                    }\n                }\n            }\n        _properties = names.sort().map(name => ({ type: \"property\", label: name }));\n    }\n    return _properties || [];\n}\nconst pseudoClasses = /*@__PURE__*/[\n    \"active\", \"after\", \"any-link\", \"autofill\", \"backdrop\", \"before\",\n    \"checked\", \"cue\", \"default\", \"defined\", \"disabled\", \"empty\",\n    \"enabled\", \"file-selector-button\", \"first\", \"first-child\",\n    \"first-letter\", \"first-line\", \"first-of-type\", \"focus\",\n    \"focus-visible\", \"focus-within\", \"fullscreen\", \"has\", \"host\",\n    \"host-context\", \"hover\", \"in-range\", \"indeterminate\", \"invalid\",\n    \"is\", \"lang\", \"last-child\", \"last-of-type\", \"left\", \"link\", \"marker\",\n    \"modal\", \"not\", \"nth-child\", \"nth-last-child\", \"nth-last-of-type\",\n    \"nth-of-type\", \"only-child\", \"only-of-type\", \"optional\", \"out-of-range\",\n    \"part\", \"placeholder\", \"placeholder-shown\", \"read-only\", \"read-write\",\n    \"required\", \"right\", \"root\", \"scope\", \"selection\", \"slotted\", \"target\",\n    \"target-text\", \"valid\", \"visited\", \"where\"\n].map(name => ({ type: \"class\", label: name }));\nconst values = /*@__PURE__*/[\n    \"above\", \"absolute\", \"activeborder\", \"additive\", \"activecaption\", \"after-white-space\",\n    \"ahead\", \"alias\", \"all\", \"all-scroll\", \"alphabetic\", \"alternate\", \"always\",\n    \"antialiased\", \"appworkspace\", \"asterisks\", \"attr\", \"auto\", \"auto-flow\", \"avoid\", \"avoid-column\",\n    \"avoid-page\", \"avoid-region\", \"axis-pan\", \"background\", \"backwards\", \"baseline\", \"below\",\n    \"bidi-override\", \"blink\", \"block\", \"block-axis\", \"bold\", \"bolder\", \"border\", \"border-box\",\n    \"both\", \"bottom\", \"break\", \"break-all\", \"break-word\", \"bullets\", \"button\", \"button-bevel\",\n    \"buttonface\", \"buttonhighlight\", \"buttonshadow\", \"buttontext\", \"calc\", \"capitalize\",\n    \"caps-lock-indicator\", \"caption\", \"captiontext\", \"caret\", \"cell\", \"center\", \"checkbox\", \"circle\",\n    \"cjk-decimal\", \"clear\", \"clip\", \"close-quote\", \"col-resize\", \"collapse\", \"color\", \"color-burn\",\n    \"color-dodge\", \"column\", \"column-reverse\", \"compact\", \"condensed\", \"contain\", \"content\",\n    \"contents\", \"content-box\", \"context-menu\", \"continuous\", \"copy\", \"counter\", \"counters\", \"cover\",\n    \"crop\", \"cross\", \"crosshair\", \"currentcolor\", \"cursive\", \"cyclic\", \"darken\", \"dashed\", \"decimal\",\n    \"decimal-leading-zero\", \"default\", \"default-button\", \"dense\", \"destination-atop\", \"destination-in\",\n    \"destination-out\", \"destination-over\", \"difference\", \"disc\", \"discard\", \"disclosure-closed\",\n    \"disclosure-open\", \"document\", \"dot-dash\", \"dot-dot-dash\", \"dotted\", \"double\", \"down\", \"e-resize\",\n    \"ease\", \"ease-in\", \"ease-in-out\", \"ease-out\", \"element\", \"ellipse\", \"ellipsis\", \"embed\", \"end\",\n    \"ethiopic-abegede-gez\", \"ethiopic-halehame-aa-er\", \"ethiopic-halehame-gez\", \"ew-resize\", \"exclusion\",\n    \"expanded\", \"extends\", \"extra-condensed\", \"extra-expanded\", \"fantasy\", \"fast\", \"fill\", \"fill-box\",\n    \"fixed\", \"flat\", \"flex\", \"flex-end\", \"flex-start\", \"footnotes\", \"forwards\", \"from\",\n    \"geometricPrecision\", \"graytext\", \"grid\", \"groove\", \"hand\", \"hard-light\", \"help\", \"hidden\", \"hide\",\n    \"higher\", \"highlight\", \"highlighttext\", \"horizontal\", \"hsl\", \"hsla\", \"hue\", \"icon\", \"ignore\",\n    \"inactiveborder\", \"inactivecaption\", \"inactivecaptiontext\", \"infinite\", \"infobackground\", \"infotext\",\n    \"inherit\", \"initial\", \"inline\", \"inline-axis\", \"inline-block\", \"inline-flex\", \"inline-grid\",\n    \"inline-table\", \"inset\", \"inside\", \"intrinsic\", \"invert\", \"italic\", \"justify\", \"keep-all\",\n    \"landscape\", \"large\", \"larger\", \"left\", \"level\", \"lighter\", \"lighten\", \"line-through\", \"linear\",\n    \"linear-gradient\", \"lines\", \"list-item\", \"listbox\", \"listitem\", \"local\", \"logical\", \"loud\", \"lower\",\n    \"lower-hexadecimal\", \"lower-latin\", \"lower-norwegian\", \"lowercase\", \"ltr\", \"luminosity\", \"manipulation\",\n    \"match\", \"matrix\", \"matrix3d\", \"medium\", \"menu\", \"menutext\", \"message-box\", \"middle\", \"min-intrinsic\",\n    \"mix\", \"monospace\", \"move\", \"multiple\", \"multiple_mask_images\", \"multiply\", \"n-resize\", \"narrower\",\n    \"ne-resize\", \"nesw-resize\", \"no-close-quote\", \"no-drop\", \"no-open-quote\", \"no-repeat\", \"none\",\n    \"normal\", \"not-allowed\", \"nowrap\", \"ns-resize\", \"numbers\", \"numeric\", \"nw-resize\", \"nwse-resize\",\n    \"oblique\", \"opacity\", \"open-quote\", \"optimizeLegibility\", \"optimizeSpeed\", \"outset\", \"outside\",\n    \"outside-shape\", \"overlay\", \"overline\", \"padding\", \"padding-box\", \"painted\", \"page\", \"paused\",\n    \"perspective\", \"pinch-zoom\", \"plus-darker\", \"plus-lighter\", \"pointer\", \"polygon\", \"portrait\",\n    \"pre\", \"pre-line\", \"pre-wrap\", \"preserve-3d\", \"progress\", \"push-button\", \"radial-gradient\", \"radio\",\n    \"read-only\", \"read-write\", \"read-write-plaintext-only\", \"rectangle\", \"region\", \"relative\", \"repeat\",\n    \"repeating-linear-gradient\", \"repeating-radial-gradient\", \"repeat-x\", \"repeat-y\", \"reset\", \"reverse\",\n    \"rgb\", \"rgba\", \"ridge\", \"right\", \"rotate\", \"rotate3d\", \"rotateX\", \"rotateY\", \"rotateZ\", \"round\",\n    \"row\", \"row-resize\", \"row-reverse\", \"rtl\", \"run-in\", \"running\", \"s-resize\", \"sans-serif\", \"saturation\",\n    \"scale\", \"scale3d\", \"scaleX\", \"scaleY\", \"scaleZ\", \"screen\", \"scroll\", \"scrollbar\", \"scroll-position\",\n    \"se-resize\", \"self-start\", \"self-end\", \"semi-condensed\", \"semi-expanded\", \"separate\", \"serif\", \"show\",\n    \"single\", \"skew\", \"skewX\", \"skewY\", \"skip-white-space\", \"slide\", \"slider-horizontal\",\n    \"slider-vertical\", \"sliderthumb-horizontal\", \"sliderthumb-vertical\", \"slow\", \"small\", \"small-caps\",\n    \"small-caption\", \"smaller\", \"soft-light\", \"solid\", \"source-atop\", \"source-in\", \"source-out\",\n    \"source-over\", \"space\", \"space-around\", \"space-between\", \"space-evenly\", \"spell-out\", \"square\", \"start\",\n    \"static\", \"status-bar\", \"stretch\", \"stroke\", \"stroke-box\", \"sub\", \"subpixel-antialiased\", \"svg_masks\",\n    \"super\", \"sw-resize\", \"symbolic\", \"symbols\", \"system-ui\", \"table\", \"table-caption\", \"table-cell\",\n    \"table-column\", \"table-column-group\", \"table-footer-group\", \"table-header-group\", \"table-row\",\n    \"table-row-group\", \"text\", \"text-bottom\", \"text-top\", \"textarea\", \"textfield\", \"thick\", \"thin\",\n    \"threeddarkshadow\", \"threedface\", \"threedhighlight\", \"threedlightshadow\", \"threedshadow\", \"to\", \"top\",\n    \"transform\", \"translate\", \"translate3d\", \"translateX\", \"translateY\", \"translateZ\", \"transparent\",\n    \"ultra-condensed\", \"ultra-expanded\", \"underline\", \"unidirectional-pan\", \"unset\", \"up\", \"upper-latin\",\n    \"uppercase\", \"url\", \"var\", \"vertical\", \"vertical-text\", \"view-box\", \"visible\", \"visibleFill\",\n    \"visiblePainted\", \"visibleStroke\", \"visual\", \"w-resize\", \"wait\", \"wave\", \"wider\", \"window\", \"windowframe\",\n    \"windowtext\", \"words\", \"wrap\", \"wrap-reverse\", \"x-large\", \"x-small\", \"xor\", \"xx-large\", \"xx-small\"\n].map(name => ({ type: \"keyword\", label: name })).concat(/*@__PURE__*/[\n    \"aliceblue\", \"antiquewhite\", \"aqua\", \"aquamarine\", \"azure\", \"beige\",\n    \"bisque\", \"black\", \"blanchedalmond\", \"blue\", \"blueviolet\", \"brown\",\n    \"burlywood\", \"cadetblue\", \"chartreuse\", \"chocolate\", \"coral\", \"cornflowerblue\",\n    \"cornsilk\", \"crimson\", \"cyan\", \"darkblue\", \"darkcyan\", \"darkgoldenrod\",\n    \"darkgray\", \"darkgreen\", \"darkkhaki\", \"darkmagenta\", \"darkolivegreen\",\n    \"darkorange\", \"darkorchid\", \"darkred\", \"darksalmon\", \"darkseagreen\",\n    \"darkslateblue\", \"darkslategray\", \"darkturquoise\", \"darkviolet\",\n    \"deeppink\", \"deepskyblue\", \"dimgray\", \"dodgerblue\", \"firebrick\",\n    \"floralwhite\", \"forestgreen\", \"fuchsia\", \"gainsboro\", \"ghostwhite\",\n    \"gold\", \"goldenrod\", \"gray\", \"grey\", \"green\", \"greenyellow\", \"honeydew\",\n    \"hotpink\", \"indianred\", \"indigo\", \"ivory\", \"khaki\", \"lavender\",\n    \"lavenderblush\", \"lawngreen\", \"lemonchiffon\", \"lightblue\", \"lightcoral\",\n    \"lightcyan\", \"lightgoldenrodyellow\", \"lightgray\", \"lightgreen\", \"lightpink\",\n    \"lightsalmon\", \"lightseagreen\", \"lightskyblue\", \"lightslategray\",\n    \"lightsteelblue\", \"lightyellow\", \"lime\", \"limegreen\", \"linen\", \"magenta\",\n    \"maroon\", \"mediumaquamarine\", \"mediumblue\", \"mediumorchid\", \"mediumpurple\",\n    \"mediumseagreen\", \"mediumslateblue\", \"mediumspringgreen\", \"mediumturquoise\",\n    \"mediumvioletred\", \"midnightblue\", \"mintcream\", \"mistyrose\", \"moccasin\",\n    \"navajowhite\", \"navy\", \"oldlace\", \"olive\", \"olivedrab\", \"orange\", \"orangered\",\n    \"orchid\", \"palegoldenrod\", \"palegreen\", \"paleturquoise\", \"palevioletred\",\n    \"papayawhip\", \"peachpuff\", \"peru\", \"pink\", \"plum\", \"powderblue\",\n    \"purple\", \"rebeccapurple\", \"red\", \"rosybrown\", \"royalblue\", \"saddlebrown\",\n    \"salmon\", \"sandybrown\", \"seagreen\", \"seashell\", \"sienna\", \"silver\", \"skyblue\",\n    \"slateblue\", \"slategray\", \"snow\", \"springgreen\", \"steelblue\", \"tan\",\n    \"teal\", \"thistle\", \"tomato\", \"turquoise\", \"violet\", \"wheat\", \"white\",\n    \"whitesmoke\", \"yellow\", \"yellowgreen\"\n].map(name => ({ type: \"constant\", label: name })));\nconst tags = /*@__PURE__*/[\n    \"a\", \"abbr\", \"address\", \"article\", \"aside\", \"b\", \"bdi\", \"bdo\", \"blockquote\", \"body\",\n    \"br\", \"button\", \"canvas\", \"caption\", \"cite\", \"code\", \"col\", \"colgroup\", \"dd\", \"del\",\n    \"details\", \"dfn\", \"dialog\", \"div\", \"dl\", \"dt\", \"em\", \"figcaption\", \"figure\", \"footer\",\n    \"form\", \"header\", \"hgroup\", \"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\", \"hr\", \"html\", \"i\", \"iframe\",\n    \"img\", \"input\", \"ins\", \"kbd\", \"label\", \"legend\", \"li\", \"main\", \"meter\", \"nav\", \"ol\", \"output\",\n    \"p\", \"pre\", \"ruby\", \"section\", \"select\", \"small\", \"source\", \"span\", \"strong\", \"sub\", \"summary\",\n    \"sup\", \"table\", \"tbody\", \"td\", \"template\", \"textarea\", \"tfoot\", \"th\", \"thead\", \"tr\", \"u\", \"ul\"\n].map(name => ({ type: \"type\", label: name }));\nconst identifier = /^(\\w[\\w-]*|-\\w[\\w-]*|)$/, variable = /^-(-[\\w-]*)?$/;\nfunction isVarArg(node, doc) {\n    var _a;\n    if (node.name == \"(\" || node.type.isError)\n        node = node.parent || node;\n    if (node.name != \"ArgList\")\n        return false;\n    let callee = (_a = node.parent) === null || _a === void 0 ? void 0 : _a.firstChild;\n    if ((callee === null || callee === void 0 ? void 0 : callee.name) != \"Callee\")\n        return false;\n    return doc.sliceString(callee.from, callee.to) == \"var\";\n}\nconst VariablesByNode = /*@__PURE__*/new NodeWeakMap();\nconst declSelector = [\"Declaration\"];\nfunction astTop(node) {\n    for (let cur = node;;) {\n        if (cur.type.isTop)\n            return cur;\n        if (!(cur = cur.parent))\n            return node;\n    }\n}\nfunction variableNames(doc, node, isVariable) {\n    if (node.to - node.from > 4096) {\n        let known = VariablesByNode.get(node);\n        if (known)\n            return known;\n        let result = [], seen = new Set, cursor = node.cursor(IterMode.IncludeAnonymous);\n        if (cursor.firstChild())\n            do {\n                for (let option of variableNames(doc, cursor.node, isVariable))\n                    if (!seen.has(option.label)) {\n                        seen.add(option.label);\n                        result.push(option);\n                    }\n            } while (cursor.nextSibling());\n        VariablesByNode.set(node, result);\n        return result;\n    }\n    else {\n        let result = [], seen = new Set;\n        node.cursor().iterate(node => {\n            var _a;\n            if (isVariable(node) && node.matchContext(declSelector) && ((_a = node.node.nextSibling) === null || _a === void 0 ? void 0 : _a.name) == \":\") {\n                let name = doc.sliceString(node.from, node.to);\n                if (!seen.has(name)) {\n                    seen.add(name);\n                    result.push({ label: name, type: \"variable\" });\n                }\n            }\n        });\n        return result;\n    }\n}\n/**\nCreate a completion source for a CSS dialect, providing a\npredicate for determining what kind of syntax node can act as a\ncompletable variable. This is used by language modes like Sass and\nLess to reuse this package's completion logic.\n*/\nconst defineCSSCompletionSource = (isVariable) => context => {\n    let { state, pos } = context, node = syntaxTree(state).resolveInner(pos, -1);\n    let isDash = node.type.isError && node.from == node.to - 1 && state.doc.sliceString(node.from, node.to) == \"-\";\n    if (node.name == \"PropertyName\" ||\n        (isDash || node.name == \"TagName\") && /^(Block|Styles)$/.test(node.resolve(node.to).name))\n        return { from: node.from, options: properties(), validFor: identifier };\n    if (node.name == \"ValueName\")\n        return { from: node.from, options: values, validFor: identifier };\n    if (node.name == \"PseudoClassName\")\n        return { from: node.from, options: pseudoClasses, validFor: identifier };\n    if (isVariable(node) || (context.explicit || isDash) && isVarArg(node, state.doc))\n        return { from: isVariable(node) || isDash ? node.from : pos,\n            options: variableNames(state.doc, astTop(node), isVariable),\n            validFor: variable };\n    if (node.name == \"TagName\") {\n        for (let { parent } = node; parent; parent = parent.parent)\n            if (parent.name == \"Block\")\n                return { from: node.from, options: properties(), validFor: identifier };\n        return { from: node.from, options: tags, validFor: identifier };\n    }\n    if (!context.explicit)\n        return null;\n    let above = node.resolve(pos), before = above.childBefore(pos);\n    if (before && before.name == \":\" && above.name == \"PseudoClassSelector\")\n        return { from: pos, options: pseudoClasses, validFor: identifier };\n    if (before && before.name == \":\" && above.name == \"Declaration\" || above.name == \"ArgList\")\n        return { from: pos, options: values, validFor: identifier };\n    if (above.name == \"Block\" || above.name == \"Styles\")\n        return { from: pos, options: properties(), validFor: identifier };\n    return null;\n};\n/**\nCSS property, variable, and value keyword completion source.\n*/\nconst cssCompletionSource = /*@__PURE__*/defineCSSCompletionSource(n => n.name == \"VariableName\");\n\n/**\nA language provider based on the [Lezer CSS\nparser](https://github.com/lezer-parser/css), extended with\nhighlighting and indentation information.\n*/\nconst cssLanguage = /*@__PURE__*/LRLanguage.define({\n    name: \"css\",\n    parser: /*@__PURE__*/parser.configure({\n        props: [\n            /*@__PURE__*/indentNodeProp.add({\n                Declaration: /*@__PURE__*/continuedIndent()\n            }),\n            /*@__PURE__*/foldNodeProp.add({\n                \"Block KeyframeList\": foldInside\n            })\n        ]\n    }),\n    languageData: {\n        commentTokens: { block: { open: \"/*\", close: \"*/\" } },\n        indentOnInput: /^\\s*\\}$/,\n        wordChars: \"-\"\n    }\n});\n/**\nLanguage support for CSS.\n*/\nfunction css() {\n    return new LanguageSupport(cssLanguage, cssLanguage.data.of({ autocomplete: cssCompletionSource }));\n}\n\nexport { css, cssCompletionSource, cssLanguage, defineCSSCompletionSource };\n", "import { ContextTracker, ExternalTokenizer, LRParser, LocalTokenGroup } from '@lezer/lr';\nimport { styleTags, tags } from '@lezer/highlight';\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst noSemi = 304,\n  incdec = 1,\n  incdecPrefix = 2,\n  insertSemi = 305,\n  spaces = 307,\n  newline = 308,\n  LineComment = 3,\n  BlockComment = 4;\n\n/* Hand-written tokenizers for JavaScript tokens that can't be\n   expressed by lezer's built-in tokenizer. */\n\nconst space = [9, 10, 11, 12, 13, 32, 133, 160, 5760, 8192, 8193, 8194, 8195, 8196, 8197, 8198, 8199, 8200,\n               8201, 8202, 8232, 8233, 8239, 8287, 12288];\n\nconst braceR = 125, semicolon = 59, slash = 47, star = 42, plus = 43, minus = 45;\n\nconst trackNewline = new ContextTracker({\n  start: false,\n  shift(context, term) {\n    return term == LineComment || term == BlockComment || term == spaces ? context : term == newline\n  },\n  strict: false\n});\n\nconst insertSemicolon = new ExternalTokenizer((input, stack) => {\n  let {next} = input;\n  if (next == braceR || next == -1 || stack.context)\n    input.acceptToken(insertSemi);\n}, {contextual: true, fallback: true});\n\nconst noSemicolon = new ExternalTokenizer((input, stack) => {\n  let {next} = input, after;\n  if (space.indexOf(next) > -1) return\n  if (next == slash && ((after = input.peek(1)) == slash || after == star)) return\n  if (next != braceR && next != semicolon && next != -1 && !stack.context)\n    input.acceptToken(noSemi);\n}, {contextual: true});\n\nconst incdecToken = new ExternalTokenizer((input, stack) => {\n  let {next} = input;\n  if (next == plus || next == minus) {\n    input.advance();\n    if (next == input.next) {\n      input.advance();\n      let mayPostfix = !stack.context && stack.canShift(incdec);\n      input.acceptToken(mayPostfix ? incdec : incdecPrefix);\n    }\n  }\n}, {contextual: true});\n\nconst jsHighlight = styleTags({\n  \"get set async static\": tags.modifier,\n  \"for while do if else switch try catch finally return throw break continue default case\": tags.controlKeyword,\n  \"in of await yield void typeof delete instanceof\": tags.operatorKeyword,\n  \"let var const using function class extends\": tags.definitionKeyword,\n  \"import export from\": tags.moduleKeyword,\n  \"with debugger as new\": tags.keyword,\n  TemplateString: tags.special(tags.string),\n  super: tags.atom,\n  BooleanLiteral: tags.bool,\n  this: tags.self,\n  null: tags.null,\n  Star: tags.modifier,\n  VariableName: tags.variableName,\n  \"CallExpression/VariableName TaggedTemplateExpression/VariableName\": tags.function(tags.variableName),\n  VariableDefinition: tags.definition(tags.variableName),\n  Label: tags.labelName,\n  PropertyName: tags.propertyName,\n  PrivatePropertyName: tags.special(tags.propertyName),\n  \"CallExpression/MemberExpression/PropertyName\": tags.function(tags.propertyName),\n  \"FunctionDeclaration/VariableDefinition\": tags.function(tags.definition(tags.variableName)),\n  \"ClassDeclaration/VariableDefinition\": tags.definition(tags.className),\n  PropertyDefinition: tags.definition(tags.propertyName),\n  PrivatePropertyDefinition: tags.definition(tags.special(tags.propertyName)),\n  UpdateOp: tags.updateOperator,\n  \"LineComment Hashbang\": tags.lineComment,\n  BlockComment: tags.blockComment,\n  Number: tags.number,\n  String: tags.string,\n  Escape: tags.escape,\n  ArithOp: tags.arithmeticOperator,\n  LogicOp: tags.logicOperator,\n  BitOp: tags.bitwiseOperator,\n  CompareOp: tags.compareOperator,\n  RegExp: tags.regexp,\n  Equals: tags.definitionOperator,\n  Arrow: tags.function(tags.punctuation),\n  \": Spread\": tags.punctuation,\n  \"( )\": tags.paren,\n  \"[ ]\": tags.squareBracket,\n  \"{ }\": tags.brace,\n  \"InterpolationStart InterpolationEnd\": tags.special(tags.brace),\n  \".\": tags.derefOperator,\n  \", ;\": tags.separator,\n  \"@\": tags.meta,\n\n  TypeName: tags.typeName,\n  TypeDefinition: tags.definition(tags.typeName),\n  \"type enum interface implements namespace module declare\": tags.definitionKeyword,\n  \"abstract global Privacy readonly override\": tags.modifier,\n  \"is keyof unique infer\": tags.operatorKeyword,\n\n  JSXAttributeValue: tags.attributeValue,\n  JSXText: tags.content,\n  \"JSXStartTag JSXStartCloseTag JSXSelfCloseEndTag JSXEndTag\": tags.angleBracket,\n  \"JSXIdentifier JSXNameSpacedName\": tags.tagName,\n  \"JSXAttribute/JSXIdentifier JSXAttribute/JSXNameSpacedName\": tags.attributeName,\n  \"JSXBuiltin/JSXIdentifier\": tags.standard(tags.tagName)\n});\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst spec_identifier = {__proto__:null,export:16, as:21, from:29, default:32, async:37, function:38, extends:48, this:52, true:60, false:60, null:72, void:76, typeof:80, super:98, new:132, delete:148, yield:157, await:161, class:166, public:223, private:223, protected:223, readonly:225, instanceof:244, satisfies:247, in:248, const:250, import:282, keyof:337, unique:341, infer:347, is:383, abstract:403, implements:405, type:407, let:410, var:412, using:415, interface:421, enum:425, namespace:431, module:433, declare:437, global:441, for:460, of:469, while:472, with:476, do:480, if:484, else:486, switch:490, case:496, try:502, catch:506, finally:510, return:514, throw:518, break:522, continue:526, debugger:530};\nconst spec_word = {__proto__:null,async:119, get:121, set:123, declare:183, public:185, private:185, protected:185, static:187, abstract:189, override:191, readonly:197, accessor:199, new:387};\nconst spec_LessThan = {__proto__:null,\"<\":139};\nconst parser = LRParser.deserialize({\n  version: 14,\n  states: \"$6zO%TQUOOO%[QUOOO'_QWOOP(lOSOOO*zQ(CjO'#CgO+ROpO'#ChO+aO!bO'#ChO+oO07`O'#D[O.QQUO'#DbO.bQUO'#DmO%[QUO'#DwO0fQUO'#EPOOQ(CY'#EX'#EXO1PQSO'#EUOOQO'#Ej'#EjOOQO'#Id'#IdO1XQSO'#GlO1dQSO'#EiO1iQSO'#EiO3kQ(CjO'#JeO6[Q(CjO'#JfO6xQSO'#FXO6}Q#tO'#FpOOQ(CY'#Fa'#FaO7YO&jO'#FaO7hQ,UO'#FwO9OQSO'#FvOOQ(CY'#Jf'#JfOOQ(CW'#Je'#JeO9TQSO'#GpOOQQ'#KQ'#KQO9`QSO'#IQO9eQ(C[O'#IROOQQ'#JR'#JROOQQ'#IV'#IVQ`QUOOO`QUOOO%[QUO'#DoO9mQUO'#D{O9tQUO'#D}O9ZQSO'#GlO9{Q,UO'#CmO:ZQSO'#EhO:fQSO'#EsO:kQ,UO'#F`O;YQSO'#GlOOQO'#KR'#KRO;_QSO'#KRO;mQSO'#GtO;mQSO'#GuO;mQSO'#GwO9ZQSO'#GzO<dQSO'#G}O={QSO'#CcO>]QSO'#HZO>eQSO'#HaO>eQSO'#HcO`QUO'#HeO>eQSO'#HgO>eQSO'#HjO>jQSO'#HpO>oQ(C]O'#HvO%[QUO'#HxO>zQ(C]O'#HzO?VQ(C]O'#H|O9eQ(C[O'#IOO?bQ(CjO'#CgO@dQWO'#DgQOQSOOO%[QUO'#D}O@zQSO'#EQO9{Q,UO'#EhOAVQSO'#EhOAbQ`O'#F`OOQQ'#Ce'#CeOOQ(CW'#Dl'#DlOOQ(CW'#Ji'#JiO%[QUO'#JiOOQO'#Jm'#JmOOQO'#Ia'#IaOBbQWO'#EaOOQ(CW'#E`'#E`OC^Q(C`O'#EaOChQWO'#ETOOQO'#Jl'#JlOC|QWO'#JmOEZQWO'#ETOChQWO'#EaPEhO?MpO'#C`POOO)CDp)CDpOOOO'#IW'#IWOEsOpO,59SOOQ(CY,59S,59SOOOO'#IX'#IXOFRO!bO,59SO%[QUO'#D^OOOO'#IZ'#IZOFaO07`O,59vOOQ(CY,59v,59vOFoQUO'#I[OGSQSO'#JgOIUQbO'#JgO+}QUO'#JgOI]QSO,59|OIsQSO'#EjOJQQSO'#JuOJ]QSO'#JtOJ]QSO'#JtOJeQSO,5;WOJjQSO'#JsOOQ(CY,5:X,5:XOJqQUO,5:XOLrQ(CjO,5:cOMcQSO,5:kOM|Q(C[O'#JrONTQSO'#JqO9TQSO'#JqONiQSO'#JqONqQSO,5;VONvQSO'#JqO!#OQbO'#JfOOQ(CY'#Cg'#CgO%[QUO'#EPO!#nQ`O,5:pOOQO'#Jn'#JnOOQO-E<b-E<bO9ZQSO,5=WO!$UQSO,5=WO!$ZQUO,5;TO!&^Q,UO'#EeO!'qQSO,5;TO!)ZQ,UO'#DqO!)bQUO'#DvO!)lQWO,5;^O!)tQWO,5;^O%[QUO,5;^OOQQ'#FP'#FPOOQQ'#FR'#FRO%[QUO,5;_O%[QUO,5;_O%[QUO,5;_O%[QUO,5;_O%[QUO,5;_O%[QUO,5;_O%[QUO,5;_O%[QUO,5;_O%[QUO,5;_O%[QUO,5;_O%[QUO,5;_OOQQ'#FV'#FVO!*SQUO,5;pOOQ(CY,5;u,5;uOOQ(CY,5;v,5;vO!,VQSO,5;vOOQ(CY,5;w,5;wO%[QUO'#IhO!,_Q(C[O,5<dO!&^Q,UO,5;_O!,|Q,UO,5;_O%[QUO,5;sO!-TQ#tO'#FfO!.QQ#tO'#JyO!-lQ#tO'#JyO!.XQ#tO'#JyOOQO'#Jy'#JyO!.mQ#tO,5<OOOOO,5<[,5<[O!/OQUO'#FrOOOO'#Ig'#IgO7YO&jO,5;{O!/VQ#tO'#FtOOQ(CY,5;{,5;{O!/vQ7[O'#CsOOQ(CY'#Cw'#CwO!0ZQSO'#CwO!0`O07`O'#C{O!0|Q,UO,5<aO!1TQSO,5<cO!2jQMhO'#GRO!2wQSO'#GSO!2|QSO'#GSO!3RQMhO'#GWO!4QQWO'#G[O!4sQ7[O'#J`OOQ(CY'#J`'#J`O!4}QSO'#J_O!5]QSO'#J^O!5eQSO'#CrOOQ(CY'#Cu'#CuOOQ(CY'#DP'#DPOOQ(CY'#DR'#DRO1SQSO'#DTO!'vQ,UO'#FyO!'vQ,UO'#F{O!5mQSO'#F}O!5rQSO'#GOO!2|QSO'#GUO!'vQ,UO'#GZO!5wQSO'#EkO!6fQSO,5<bOOQ(CW'#Cp'#CpO!6nQSO'#ElO!7hQWO'#EmOOQ(CW'#Js'#JsO!7oQ(C[O'#KSO9eQ(C[O,5=[O`QUO,5>lOOQQ'#JZ'#JZOOQQ,5>m,5>mOOQQ-E<T-E<TO!9qQ(CjO,5:ZO!<_Q(CjO,5:gO%[QUO,5:gO!>xQ(CjO,5:iOOQO,5@m,5@mO!?iQ,UO,5=WO!?wQ(C[O'#J[O9OQSO'#J[O!@YQ(C[O,59XO!@eQWO,59XO!@mQ,UO,59XO9{Q,UO,59XO!@xQSO,5;TO!AQQSO'#HYO!AfQSO'#KVO%[QUO,5;xO!7cQWO,5;zO!AnQSO,5=sO!AsQSO,5=sO!AxQSO,5=sO9eQ(C[O,5=sO;mQSO,5=cOOQO'#Cs'#CsO!BWQWO,5=`O!B`Q,UO,5=aO!BkQSO,5=cO!BpQ`O,5=fO!BxQSO'#KRO>jQSO'#HPO9ZQSO'#HRO!B}QSO'#HRO9{Q,UO'#HTO!CSQSO'#HTOOQQ,5=i,5=iO!CXQSO'#HUO!CjQSO'#CmO!CoQSO,58}O!CyQSO,58}O!FOQUO,58}OOQQ,58},58}O!F`Q(C[O,58}O%[QUO,58}O!HkQUO'#H]OOQQ'#H^'#H^OOQQ'#H_'#H_O`QUO,5=uO!IRQSO,5=uO`QUO,5={O`QUO,5=}O!IWQSO,5>PO`QUO,5>RO!I]QSO,5>UO!IbQUO,5>[OOQQ,5>b,5>bO%[QUO,5>bO9eQ(C[O,5>dOOQQ,5>f,5>fO!MlQSO,5>fOOQQ,5>h,5>hO!MlQSO,5>hOOQQ,5>j,5>jO!MqQWO'#DYO%[QUO'#JiO!N`QWO'#JiO!N}QWO'#DhO# `QWO'#DhO##qQUO'#DhO##xQSO'#JhO#$QQSO,5:RO#$VQSO'#EnO#$eQSO'#JvO#$mQSO,5;XO#$rQWO'#DhO#%PQWO'#ESOOQ(CY,5:l,5:lO%[QUO,5:lO#%WQSO,5:lO>jQSO,5;SO!@eQWO,5;SO!@mQ,UO,5;SO9{Q,UO,5;SO#%`QSO,5@TO#%eQ!LQO,5:pOOQO-E<_-E<_O#&kQ(C`O,5:{OChQWO,5:oO#&uQWO,5:oOChQWO,5:{O!@YQ(C[O,5:oOOQ(CW'#Ed'#EdOOQO,5:{,5:{O%[QUO,5:{O#'SQ(C[O,5:{O#'_Q(C[O,5:{O!@eQWO,5:oOOQO,5;R,5;RO#'mQ(C[O,5:{POOO'#IU'#IUP#(RO?MpO,58zPOOO,58z,58zOOOO-E<U-E<UOOQ(CY1G.n1G.nOOOO-E<V-E<VO#(^Q`O,59xOOOO-E<X-E<XOOQ(CY1G/b1G/bO#(cQbO,5>vO+}QUO,5>vOOQO,5>|,5>|O#(mQUO'#I[OOQO-E<Y-E<YO#(zQSO,5@RO#)SQbO,5@RO#)ZQSO,5@`OOQ(CY1G/h1G/hO%[QUO,5@aO#)cQSO'#IbOOQO-E<`-E<`O#)ZQSO,5@`OOQ(CW1G0r1G0rOOQ(CY1G/s1G/sOOQ(CY1G0V1G0VO%[QUO,5@^O#)wQ(C[O,5@^O#*YQ(C[O,5@^O#*aQSO,5@]O9TQSO,5@]O#*iQSO,5@]O#*wQSO'#IeO#*aQSO,5@]OOQ(CW1G0q1G0qO!)lQWO,5:rO!)wQWO,5:rOOQO,5:t,5:tO#+iQSO,5:tO#+qQ,UO1G2rO9ZQSO1G2rOOQ(CY1G0o1G0oO#,PQ(CjO1G0oO#-UQ(ChO,5;POOQ(CY'#GQ'#GQO#-rQ(CjO'#J`O!$ZQUO1G0oO#/zQ,UO'#JjO#0UQSO,5:]O#0ZQbO'#JkO%[QUO'#JkO#0eQSO,5:bOOQ(CY'#DY'#DYOOQ(CY1G0x1G0xO%[QUO1G0xOOQ(CY1G1b1G1bO#0jQSO1G0xO#3RQ(CjO1G0yO#3YQ(CjO1G0yO#5sQ(CjO1G0yO#5zQ(CjO1G0yO#8UQ(CjO1G0yO#8lQ(CjO1G0yO#;fQ(CjO1G0yO#;mQ(CjO1G0yO#>WQ(CjO1G0yO#>_Q(CjO1G0yO#@VQ(CjO1G0yO#CVQ$IUO'#CgO#ETQ$IUO1G1[O#E[Q$IUO'#JfO!,YQSO1G1bO#ElQ(CjO,5?SOOQ(CW-E<f-E<fO#F`Q(CjO1G0yOOQ(CY1G0y1G0yO#HkQ(CjO1G1_O#I_Q#tO,5<SO#IgQ#tO,5<TO#IoQ#tO'#FkO#JWQSO'#FjOOQO'#Jz'#JzOOQO'#If'#IfO#J]Q#tO1G1jOOQ(CY1G1j1G1jOOOO1G1u1G1uO#JnQ$IUO'#JeO#JxQSO,5<^O!*SQUO,5<^OOOO-E<e-E<eOOQ(CY1G1g1G1gO#J}QWO'#JyOOQ(CY,5<`,5<`O#KVQWO,5<`OOQ(CY,59c,59cO!&^Q,UO'#C}OOOO'#IY'#IYO#K[O07`O,59gOOQ(CY,59g,59gO%[QUO1G1{O!5rQSO'#IjO#KgQ,UO,5<tOOQ(CY,5<q,5<qOOQO'#Gg'#GgO!'vQ,UO,5=QOOQO'#Gi'#GiO!'vQ,UO,5=SO!&^Q,UO,5=UOOQO1G1}1G1}O#KnQ`O'#CpO#LRQ`O,5<mO#LYQSO'#J}O9ZQSO'#J}O#LhQSO,5<oO!'vQ,UO,5<nO#LmQSO'#GTO#LxQSO,5<nO#L}Q`O'#GQO#M[Q`O'#KOO#MfQSO'#KOO!&^Q,UO'#KOO#MkQSO,5<rO#MpQWO'#G]O!3{QWO'#G]O#NRQSO'#G_O#NWQSO'#GaO!2|QSO'#GdO#N]Q(C[O'#IlO#NhQWO,5<vOOQ(CY,5<v,5<vO#NoQWO'#G]O#N}QWO'#G^O$ VQWO'#G^OOQ(CY,5=V,5=VO!'vQ,UO,5?yO!'vQ,UO,5?yO$ [QSO'#ImO$ gQSO,5?xO$ oQSO,59^O$!`Q,UO,59oOOQ(CY,59o,59oO$#RQ,UO,5<eO$#tQ,UO,5<gO@[QSO,5<iOOQ(CY,5<j,5<jO$$OQSO,5<pO$$TQ,UO,5<uO$$eQSO'#JqO!$ZQUO1G1|O$$jQSO1G1|O9TQSO'#JtO9TQSO'#EnO%[QUO'#EnO9TQSO'#IoO$$oQ(C[O,5@nOOQQ1G2v1G2vOOQQ1G4W1G4WOOQ(CY1G/u1G/uO!,VQSO1G/uO$&tQ(CjO1G0ROOQQ1G2r1G2rO!&^Q,UO1G2rO%[QUO1G2rO$'eQSO1G2rO$'pQ,UO'#EeOOQ(CW,5?v,5?vO$'zQ(C[O,5?vOOQQ1G.s1G.sO!@YQ(C[O1G.sO!@eQWO1G.sO!@mQ,UO1G.sO$(]QSO1G0oO$(bQSO'#CgO$(mQSO'#KWO$(uQSO,5=tO$(zQSO'#KWO$)PQSO'#KWO$)_QSO'#IuO$)mQSO,5@qO$)uQbO1G1dOOQ(CY1G1f1G1fO9ZQSO1G3_O@[QSO1G3_O$)|QSO1G3_O$*RQSO1G3_OOQQ1G3_1G3_O!BkQSO1G2}O!&^Q,UO1G2zO$*WQSO1G2zOOQQ1G2{1G2{O!&^Q,UO1G2{O$*]QSO1G2{O$*eQWO'#GyOOQQ1G2}1G2}O!3{QWO'#IqO!BpQ`O1G3QOOQQ1G3Q1G3QOOQQ,5=k,5=kO$*mQ,UO,5=mO9ZQSO,5=mO#NWQSO,5=oO9OQSO,5=oO!@eQWO,5=oO!@mQ,UO,5=oO9{Q,UO,5=oO$*{QSO'#KUO$+WQSO,5=pOOQQ1G.i1G.iO$+]Q(C[O1G.iO@[QSO1G.iO$+hQSO1G.iO9eQ(C[O1G.iO$-mQbO,5@sO$-}QSO,5@sO9TQSO,5@sO$.YQUO,5=wO$.aQSO,5=wOOQQ1G3a1G3aO`QUO1G3aOOQQ1G3g1G3gOOQQ1G3i1G3iO>eQSO1G3kO$.fQUO1G3mO$2jQUO'#HlOOQQ1G3p1G3pO$2wQSO'#HrO>jQSO'#HtOOQQ1G3v1G3vO$3PQUO1G3vO9eQ(C[O1G3|OOQQ1G4O1G4OOOQ(CW'#GX'#GXO9eQ(C[O1G4QO9eQ(C[O1G4SO$7WQSO,5@TO!*SQUO,5;YO9TQSO,5;YO>jQSO,5:SO!*SQUO,5:SO!@eQWO,5:SO$7]Q$IUO,5:SOOQO,5;Y,5;YO$7gQWO'#I]O$7}QSO,5@SOOQ(CY1G/m1G/mO$8VQWO'#IcO$8aQSO,5@bOOQ(CW1G0s1G0sO# `QWO,5:SOOQO'#I`'#I`O$8iQWO,5:nOOQ(CY,5:n,5:nO#%ZQSO1G0WOOQ(CY1G0W1G0WO%[QUO1G0WOOQ(CY1G0n1G0nO>jQSO1G0nO!@eQWO1G0nO!@mQ,UO1G0nOOQ(CW1G5o1G5oO!@YQ(C[O1G0ZOOQO1G0g1G0gO%[QUO1G0gO$8pQ(C[O1G0gO$8{Q(C[O1G0gO!@eQWO1G0ZOChQWO1G0ZO$9ZQ(C[O1G0gOOQO1G0Z1G0ZO$9oQ(CjO1G0gPOOO-E<S-E<SPOOO1G.f1G.fOOOO1G/d1G/dO$9yQ`O,5<dO$:RQbO1G4bOOQO1G4h1G4hO%[QUO,5>vO$:]QSO1G5mO$:eQSO1G5zO$:mQbO1G5{O9TQSO,5>|O$:wQ(CjO1G5xO%[QUO1G5xO$;XQ(C[O1G5xO$;jQSO1G5wO$;jQSO1G5wO9TQSO1G5wO$;rQSO,5?PO9TQSO,5?POOQO,5?P,5?PO$<WQSO,5?PO$$eQSO,5?POOQO-E<c-E<cOOQO1G0^1G0^OOQO1G0`1G0`O!,YQSO1G0`OOQQ7+(^7+(^O!&^Q,UO7+(^O%[QUO7+(^O$<fQSO7+(^O$<qQ,UO7+(^O$=PQ(CjO,59oO$?XQ(CjO,5<eO$AdQ(CjO,5<gO$CoQ(CjO,5<uOOQ(CY7+&Z7+&ZO$FQQ(CjO7+&ZO$FtQ,UO'#I^O$GOQSO,5@UOOQ(CY1G/w1G/wO$GWQUO'#I_O$GeQSO,5@VO$GmQbO,5@VOOQ(CY1G/|1G/|O$GwQSO7+&dOOQ(CY7+&d7+&dO$G|Q$IUO,5:cO%[QUO7+&vO$HWQ$IUO,5:ZO$HeQ$IUO,5:gO$HoQ$IUO,5:iOOQ(CY7+&|7+&|OOQO1G1n1G1nOOQO1G1o1G1oO$HyQ#tO,5<VO!*SQUO,5<UOOQO-E<d-E<dOOQ(CY7+'U7+'UOOOO7+'a7+'aOOOO1G1x1G1xO$IUQSO1G1xOOQ(CY1G1z1G1zO$IZQ`O,59iOOOO-E<W-E<WOOQ(CY1G/R1G/RO$IbQ(CjO7+'gOOQ(CY,5?U,5?UO$JUQ`O,5?UOOQ(CY1G2`1G2`P!&^Q,UO'#IjPOQ(CY-E<h-E<hO$JtQ,UO1G2lO$KgQ,UO1G2nO$KqQ`O1G2pOOQ(CY1G2X1G2XO$KxQSO'#IiO$LWQSO,5@iO$LWQSO,5@iO$L`QSO,5@iO$LkQSO,5@iOOQO1G2Z1G2ZO$LyQ,UO1G2YO!'vQ,UO1G2YO$MZQMhO'#IkO$MkQSO,5@jO!&^Q,UO,5@jO$MsQ`O,5@jOOQ(CY1G2^1G2^OOQ(CW,5<w,5<wOOQ(CW,5<x,5<xO$$eQSO,5<xOCXQSO,5<xO!@eQWO,5<wOOQO'#G`'#G`O$M}QSO,5<yOOQ(CW,5<{,5<{O$$eQSO,5=OOOQO,5?W,5?WOOQO-E<j-E<jOOQ(CY1G2b1G2bO!3{QWO,5<wO$NVQSO,5<xO#NRQSO,5<yO!3{QWO,5<xO$NbQ,UO1G5eO$NlQ,UO1G5eOOQO,5?X,5?XOOQO-E<k-E<kOOQO1G.x1G.xO!7cQWO,59qO%[QUO,59qO$NyQSO1G2TO!'vQ,UO1G2[O% OQ(CjO7+'hOOQ(CY7+'h7+'hO!$ZQUO7+'hO% rQSO,5;YOOQ(CW,5?Z,5?ZOOQ(CW-E<m-E<mOOQ(CY7+%a7+%aO% wQ`O'#KPO#%ZQSO7+(^O%!RQbO7+(^O$<iQSO7+(^O%!YQ(ChO'#CgO%!mQ(ChO,5<|O%#_QSO,5<|OOQ(CW1G5b1G5bOOQQ7+$_7+$_O!@YQ(C[O7+$_O!@eQWO7+$_O!$ZQUO7+&ZO%#dQSO'#ItO%#{QSO,5@rOOQO1G3`1G3`O9ZQSO,5@rO%#{QSO,5@rO%$TQSO,5@rOOQO,5?a,5?aOOQO-E<s-E<sOOQ(CY7+'O7+'OO%$YQSO7+(yO9eQ(C[O7+(yO9ZQSO7+(yO@[QSO7+(yOOQQ7+(i7+(iO%$_Q(ChO7+(fO!&^Q,UO7+(fO%$iQ`O7+(gOOQQ7+(g7+(gO!&^Q,UO7+(gO%$pQSO'#KTO%${QSO,5=eOOQO,5?],5?]OOQO-E<o-E<oOOQQ7+(l7+(lO%&[QWO'#HSOOQQ1G3X1G3XO!&^Q,UO1G3XO%[QUO1G3XO%&cQSO1G3XO%&nQ,UO1G3XO9eQ(C[O1G3ZO#NWQSO1G3ZO9OQSO1G3ZO!@eQWO1G3ZO!@mQ,UO1G3ZO%&|QSO'#IsO%'bQSO,5@pO%'jQWO,5@pOOQ(CW1G3[1G3[OOQQ7+$T7+$TO@[QSO7+$TO9eQ(C[O7+$TO%'uQSO7+$TO%[QUO1G6_O%[QUO1G6`O%'zQ(C[O1G6_O%(UQUO1G3cO%(]QSO1G3cO%(bQUO1G3cOOQQ7+({7+({O9eQ(C[O7+)VO`QUO7+)XOOQQ'#KZ'#KZOOQQ'#Iv'#IvO%(iQUO,5>WOOQQ,5>W,5>WO%[QUO'#HmO%(vQSO'#HoOOQQ,5>^,5>^O9TQSO,5>^OOQQ,5>`,5>`OOQQ7+)b7+)bOOQQ7+)h7+)hOOQQ7+)l7+)lOOQQ7+)n7+)nO%({QWO1G5oO%)aQ$IUO1G0tO%)kQSO1G0tOOQO1G/n1G/nO%)vQ$IUO1G/nO>jQSO1G/nO!*SQUO'#DhOOQO,5>w,5>wOOQO-E<Z-E<ZOOQO,5>},5>}OOQO-E<a-E<aO!@eQWO1G/nOOQO-E<^-E<^OOQ(CY1G0Y1G0YOOQ(CY7+%r7+%rO#%ZQSO7+%rOOQ(CY7+&Y7+&YO>jQSO7+&YO!@eQWO7+&YOOQO7+%u7+%uO$9oQ(CjO7+&ROOQO7+&R7+&RO%[QUO7+&RO%*QQ(C[O7+&RO!@YQ(C[O7+%uO!@eQWO7+%uO%*]Q(C[O7+&RO%*kQ(CjO7++dO%[QUO7++dO%*{QSO7++cO%*{QSO7++cOOQO1G4k1G4kO9TQSO1G4kO%+TQSO1G4kOOQO7+%z7+%zO#%ZQSO<<KxO%!RQbO<<KxO%+cQSO<<KxOOQQ<<Kx<<KxO!&^Q,UO<<KxO%[QUO<<KxO%+kQSO<<KxO%+vQ(CjO1G2lO%.RQ(CjO1G2nO%0^Q(CjO1G2YO%2oQ,UO,5>xOOQO-E<[-E<[O%2yQbO,5>yO%[QUO,5>yOOQO-E<]-E<]O%3TQSO1G5qOOQ(CY<<JO<<JOO%3]Q$IUO1G0oO%5gQ$IUO1G0yO%5nQ$IUO1G0yO%7rQ$IUO1G0yO%7yQ$IUO1G0yO%9nQ$IUO1G0yO%:UQ$IUO1G0yO%<iQ$IUO1G0yO%<pQ$IUO1G0yO%>tQ$IUO1G0yO%>{Q$IUO1G0yO%@sQ$IUO1G0yO%AWQ(CjO<<JbO%B]Q$IUO1G0yO%DRQ$IUO'#J`O%FUQ$IUO1G1_O%FcQ$IUO1G0RO!*SQUO'#FmOOQO'#J{'#J{OOQO1G1q1G1qO%FmQSO1G1pO%FrQ$IUO,5?SOOOO7+'d7+'dOOOO1G/T1G/TOOQ(CY1G4p1G4pO!'vQ,UO7+([O%F|QSO,5?TO9ZQSO,5?TOOQO-E<g-E<gO%G[QSO1G6TO%G[QSO1G6TO%GdQSO1G6TO%GoQ,UO7+'tO%HPQ`O,5?VO%HZQSO,5?VO!&^Q,UO,5?VOOQO-E<i-E<iO%H`Q`O1G6UO%HjQSO1G6UOOQ(CW1G2d1G2dO$$eQSO1G2dOOQ(CW1G2c1G2cO%HrQSO1G2eO!&^Q,UO1G2eOOQ(CW1G2j1G2jO!@eQWO1G2cOCXQSO1G2dO%HwQSO1G2eO%IPQSO1G2dO!'vQ,UO7++POOQ(CY1G/]1G/]O%I[QSO1G/]OOQ(CY7+'o7+'oO%IaQ,UO7+'vO%IqQ(CjO<<KSOOQ(CY<<KS<<KSO%JeQSO1G0tO!&^Q,UO'#InO%JjQSO,5@kO!&^Q,UO1G2hOOQQ<<Gy<<GyO!@YQ(C[O<<GyO%JrQ(CjO<<IuOOQ(CY<<Iu<<IuOOQO,5?`,5?`O%KfQSO,5?`O%KkQSO,5?`OOQO-E<r-E<rO%KyQSO1G6^O%KyQSO1G6^O9ZQSO1G6^O@[QSO<<LeOOQQ<<Le<<LeO%LRQSO<<LeO9eQ(C[O<<LeOOQQ<<LQ<<LQO%$_Q(ChO<<LQOOQQ<<LR<<LRO%$iQ`O<<LRO%LWQWO'#IpO%LcQSO,5@oO!*SQUO,5@oOOQQ1G3P1G3PO%LkQUO'#JiOOQO'#Ir'#IrO9eQ(C[O'#IrO%LuQWO,5=nOOQQ,5=n,5=nO%L|QWO'#EaO%MbQSO7+(sO%MgQSO7+(sOOQQ7+(s7+(sO!&^Q,UO7+(sO%[QUO7+(sO%MoQSO7+(sOOQQ7+(u7+(uO9eQ(C[O7+(uO#NWQSO7+(uO9OQSO7+(uO!@eQWO7+(uO%MzQSO,5?_OOQO-E<q-E<qOOQO'#HV'#HVO%NVQSO1G6[O9eQ(C[O<<GoOOQQ<<Go<<GoO@[QSO<<GoO%N_QSO7++yO%NdQSO7++zO%[QUO7++yO%[QUO7++zOOQQ7+(}7+(}O%NiQSO7+(}O%NnQUO7+(}O%NuQSO7+(}OOQQ<<Lq<<LqOOQQ<<Ls<<LsOOQQ-E<t-E<tOOQQ1G3r1G3rO%NzQSO,5>XOOQQ,5>Z,5>ZO& PQSO1G3xO9TQSO7+&`O!*SQUO7+&`OOQO7+%Y7+%YO& UQ$IUO1G5{O>jQSO7+%YOOQ(CY<<I^<<I^OOQ(CY<<It<<ItO>jQSO<<ItOOQO<<Im<<ImO$9oQ(CjO<<ImO%[QUO<<ImOOQO<<Ia<<IaO!@YQ(C[O<<IaO& `Q(C[O<<ImO& kQ(CjO<= OO& {QSO<<N}OOQO7+*V7+*VO9TQSO7+*VOOQQANAdANAdO&!TQSOANAdO!&^Q,UOANAdO#%ZQSOANAdO%!RQbOANAdO%[QUOANAdO&!]Q(CjO7+'tO&$nQ(CjO7+'vO&'PQbO1G4eO&'ZQ$IUO7+&ZO&'hQ$IUO,59oO&)kQ$IUO,5<eO&+nQ$IUO,5<gO&-qQ$IUO,5<uO&/gQ$IUO7+'gO&/tQ$IUO7+'hO&0RQSO,5<XOOQO7+'[7+'[O&0WQ,UO<<KvOOQO1G4o1G4oO&0_QSO1G4oO&0jQSO1G4oO&0xQSO7++oO&0xQSO7++oO!&^Q,UO1G4qO&1QQ`O1G4qO&1[QSO7++pOOQ(CW7+(O7+(OO$$eQSO7+(PO&1dQ`O7+(POOQ(CW7+'}7+'}O$$eQSO7+(OO&1kQSO7+(PO!&^Q,UO7+(POCXQSO7+(OO&1pQ,UO<<NkOOQ(CY7+$w7+$wO&1zQ`O,5?YOOQO-E<l-E<lO&2UQ(ChO7+(SOOQQAN=eAN=eO9ZQSO1G4zOOQO1G4z1G4zO&2fQSO1G4zO&2kQSO7++xO&2kQSO7++xO9eQ(C[OANBPO@[QSOANBPOOQQANBPANBPOOQQANAlANAlOOQQANAmANAmO&2sQSO,5?[OOQO-E<n-E<nO&3OQ$IUO1G6ZO&5`QbO'#CgOOQO,5?^,5?^OOQO-E<p-E<pOOQQ1G3Y1G3YO%LkQUO,5<yOOQQ<<L_<<L_O!&^Q,UO<<L_O%MbQSO<<L_O&5jQSO<<L_O%[QUO<<L_OOQQ<<La<<LaO9eQ(C[O<<LaO#NWQSO<<LaO9OQSO<<LaO&5rQWO1G4yO&5}QSO7++vOOQQAN=ZAN=ZO9eQ(C[OAN=ZOOQQ<= e<= eOOQQ<= f<= fO&6VQSO<= eO&6[QSO<= fOOQQ<<Li<<LiO&6aQSO<<LiO&6fQUO<<LiOOQQ1G3s1G3sO>jQSO7+)dO&6mQSO<<IzO&6xQ$IUO<<IzOOQO<<Ht<<HtOOQ(CYAN?`AN?`OOQOAN?XAN?XO$9oQ(CjOAN?XOOQOAN>{AN>{O%[QUOAN?XOOQO<<Mq<<MqOOQQG27OG27OO!&^Q,UOG27OO#%ZQSOG27OO&7SQSOG27OO%!RQbOG27OO&7[Q$IUO<<JbO&7iQ$IUO1G2YO&9_Q$IUO1G2lO&;bQ$IUO1G2nO&=eQ$IUO<<KSO&=rQ$IUO<<IuOOQO1G1s1G1sO!'vQ,UOANAbOOQO7+*Z7+*ZO&>PQSO7+*ZO&>[QSO<= ZO&>dQ`O7+*]OOQ(CW<<Kk<<KkO$$eQSO<<KkOOQ(CW<<Kj<<KjO&>nQ`O<<KkO$$eQSO<<KjOOQO7+*f7+*fO9ZQSO7+*fO&>uQSO<= dOOQQG27kG27kO9eQ(C[OG27kO!*SQUO1G4vO&>}QSO7++uO%MbQSOANAyOOQQANAyANAyO!&^Q,UOANAyO&?VQSOANAyOOQQANA{ANA{O9eQ(C[OANA{O#NWQSOANA{OOQO'#HW'#HWOOQO7+*e7+*eOOQQG22uG22uOOQQANEPANEPOOQQANEQANEQOOQQANBTANBTO&?_QSOANBTOOQQ<<MO<<MOO!*SQUOAN?fOOQOG24sG24sO$9oQ(CjOG24sO#%ZQSOLD,jOOQQLD,jLD,jO!&^Q,UOLD,jO&?dQSOLD,jO&?lQ$IUO7+'tO&AbQ$IUO7+'vO&CWQ,UOG26|OOQO<<Mu<<MuOOQ(CWANAVANAVO$$eQSOANAVOOQ(CWANAUANAUOOQO<<NQ<<NQOOQQLD-VLD-VO&ChQ$IUO7+*bOOQQG27eG27eO%MbQSOG27eO!&^Q,UOG27eOOQQG27gG27gO9eQ(C[OG27gOOQQG27oG27oO&CrQ$IUOG25QOOQOLD*_LD*_OOQQ!$(!U!$(!UO#%ZQSO!$(!UO!&^Q,UO!$(!UO&C|Q(CjOG26|OOQ(CWG26qG26qOOQQLD-PLD-PO%MbQSOLD-POOQQLD-RLD-ROOQQ!)9Ep!)9EpO#%ZQSO!)9EpOOQQ!$(!k!$(!kOOQQ!.K;[!.K;[O&F_Q$IUOG26|O!*SQUO'#DwO1PQSO'#EUO&HTQbO'#JeO!*SQUO'#DoO&H[QUO'#D{O&HcQbO'#CgO&JyQbO'#CgO!*SQUO'#D}O&KZQUO,5;TO!*SQUO,5;_O!*SQUO,5;_O!*SQUO,5;_O!*SQUO,5;_O!*SQUO,5;_O!*SQUO,5;_O!*SQUO,5;_O!*SQUO,5;_O!*SQUO,5;_O!*SQUO,5;_O!*SQUO,5;_O!*SQUO'#IhO&M^QSO,5<dO&MfQ,UO,5;_O&NyQ,UO,5;_O!*SQUO,5;sO1SQSO'#DTO1SQSO'#DTO!&^Q,UO'#FyO&MfQ,UO'#FyO!&^Q,UO'#F{O&MfQ,UO'#F{O!&^Q,UO'#GZO&MfQ,UO'#GZO!*SQUO,5:gO!*SQUO,5@aO&KZQUO1G0oO' QQ$IUO'#CgO!*SQUO1G1{O!&^Q,UO,5=QO&MfQ,UO,5=QO!&^Q,UO,5=SO&MfQ,UO,5=SO!&^Q,UO,5<nO&MfQ,UO,5<nO&KZQUO1G1|O!*SQUO7+&vO!&^Q,UO1G2YO&MfQ,UO1G2YO!&^Q,UO1G2[O&MfQ,UO1G2[O&KZQUO7+'hO&KZQUO7+&ZO!&^Q,UOANAbO&MfQ,UOANAbO' [QSO'#EiO' aQSO'#EiO' iQSO'#FXO' nQSO'#EsO' sQSO'#JuO'!OQSO'#JsO'!ZQSO,5;TO'!`Q,UO,5<aO'!gQSO'#GSO'!lQSO'#GSO'!qQSO,5<bO'!yQSO,5;TO'#RQ$IUO1G1[O'#YQSO,5<nO'#_QSO,5<nO'#dQSO,5<pO'#iQSO,5<pO'#nQSO1G1|O'#sQSO1G0oO'#xQ,UO<<KvO'$PQ,UO<<KvO7hQ,UO'#FwO9OQSO'#FvOAVQSO'#EhO!*SQUO,5;pO!2|QSO'#GSO!2|QSO'#GSO!2|QSO'#GUO!2|QSO'#GUO!'vQ,UO7+([O!'vQ,UO7+([O$KqQ`O1G2pO$KqQ`O1G2pO!&^Q,UO,5=UO!&^Q,UO,5=U\",\n  stateData: \"'%Y~O'oOS'pOSROS'qRQ~OPYOQYOW!VO_qObzOcyOjkOlYOmkOnkOtkOvYOxYO}WO!RkO!SkO!YXO!duO!iZO!lYO!mYO!nYO!pvO!rwO!uxO!y]O#q!PO$R|O$VfO%a}O%c!QO%e!OO%f!OO%g!OO%j!RO%l!SO%o!TO%p!TO%r!UO&O!WO&U!XO&W!YO&Y!ZO&[![O&_!]O&e!^O&k!_O&m!`O&o!aO&q!bO&s!cO'vSO'xTO'{UO(TVO(c[O(piO~OUtO~P`OPYOQYOb!jOc!iOjkOlYOmkOnkOtkOvYOxYO}WO!RkO!SkO!Y!eO!duO!iZO!lYO!mYO!nYO!pvO!r!gO!u!hO$R!kO$VfO'v!dO'xTO'{UO(TVO(c[O(piO~O_!vOm!nO}!oO!]!xO!^!uO!_!uO!y9rO!}!pO#O!pO#P!wO#Q!pO#R!pO#U!yO#V!yO'w!lO'xTO'{UO(W!mO(c!sO~O'q!zO~OPZXYZX_ZXlZXzZX{ZX}ZX!WZX!fZX!gZX!iZX!mZX#YZX#edX#hZX#iZX#jZX#kZX#lZX#mZX#nZX#oZX#pZX#rZX#tZX#vZX#wZX#|ZX'mZX(TZX(dZX(kZX(lZX~O!b${X~P(qO]!|O'x#OO'y!|O'z#OO~O]#PO'z#OO'{#OO'|#PO~Or#RO!P#SO(U#SO(V#UO~OPYOQYOb!jOc!iOjkOlYOmkOnkOtkOvYOxYO}WO!RkO!SkO!Y!eO!duO!iZO!lYO!mYO!nYO!pvO!r!gO!u!hO$R!kO$VfO'v9vO'xTO'{UO(TVO(c[O(piO~O!V#YO!W#VO!T(ZP!T(hP~P+}O!X#bO~P`OPYOQYOb!jOc!iOlYOmkOnkOtkOvYOxYO}WO!RkO!SkO!Y!eO!duO!iZO!lYO!mYO!nYO!pvO!r!gO!u!hO$R!kO$VfO'xTO'{UO(TVO(c[O(piO~Oj#lO!V#hO!y]O#c#kO#d#hO'v9wO!h(eP~P.iO!i#nO'v#mO~O!u#rO!y]O%a#sO~O#e#tO~O!b#uO#e#tO~OP$]OY$dOl$QOz#yO{#zO}#{O!W$aO!f$SO!g#wO!i#xO!m$]O#h$OO#i$PO#j$PO#k$PO#l$RO#m$SO#n$SO#o$cO#p$SO#r$TO#t$VO#v$XO#w$YO(TVO(d$ZO(k#|O(l#}O~O_(XX'm(XX'k(XX!h(XX!T(XX!Y(XX%b(XX!b(XX~P1qO#Y$eO#|$eOP(YXY(YXl(YXz(YX{(YX}(YX!W(YX!f(YX!i(YX!m(YX#h(YX#i(YX#j(YX#k(YX#l(YX#m(YX#n(YX#o(YX#p(YX#r(YX#t(YX#v(YX#w(YX(T(YX(d(YX(k(YX(l(YX!Y(YX%b(YX~O_(YX!g(YX'm(YX'k(YX!T(YX!h(YXp(YX!b(YX~P4XO#Y$eO~O$X$gO$Z$fO$b$lO~O!Y$mO$VfO$e$nO$g$pO~Oj%SOl$tOm$sOn$sOt%TOv%UOx%VO}${O!Y$|O!d%[O!i$xO#d%]O$R%YO$n%WO$p%XO$s%ZO'v$rO'xTO'{UO(P%RO(T$uOe(QP~O!i%^O~O}%aO!Y%bO'v%`O~O!b%fO~O_%gO'm%gO~O'w!lO~P%[O%g%nO~P%[O!i%^O'v%`O'w!lO(P%RO~Oc%uO!i%^O'v%`O~O#p$SO~Oz%zO!Y%wO!i%yO%c%}O'v%`O'w!lO'xTO'{UO^(yP~O!u#rO~O%l&PO}(uX!Y(uX'v(uX~O'v&QO~O!r&VO#q!PO%c!QO%e!OO%f!OO%g!OO%j!RO%l!SO%o!TO%p!TO~Ob&[Oc&ZO!u&XO%a&YO%t&WO~P;rOb&_OcyO!Y&^O!r&VO!uxO!y]O#q!PO%a}O%e!OO%f!OO%g!OO%j!RO%l!SO%o!TO%p!TO%r!UO~O`&bO#Y&eO%c&`O'w!lO~P<wO!i&fO!r&jO~O!i#nO~O!YXO~O_%gO'l&rO'm%gO~O_%gO'l&uO'm%gO~O_%gO'l&wO'm%gO~O'kZX!TZXpZX!hZX&SZX!YZX%bZX!bZX~P(qO!]'UO!^&}O!_&}O'w!lO'xTO'{UO~Om&{O}&zO!V'OO(W&yO!X([P!X(jP~P@OOh'XO!Y'VO'v%`O~Oc'^O!i%^O'v%`O~Oz%zO!i%yO~Om!nO}!oO!y9rO!}!pO#O!pO#Q!pO#R!pO'w!lO'xTO'{UO(W!mO(c!sO~O!]'dO!^'cO!_'cO#P!pO#U'eO#V'eO~PAjO_%gO!b#uO!i%^O'm%gO(P%RO(d'gO~O!m'kO#Y'iO~PBxOm!nO}!oO'xTO'{UO(W!mO(c!sO~O!YXOm(aX}(aX!](aX!^(aX!_(aX!y(aX!}(aX#O(aX#P(aX#Q(aX#R(aX#U(aX#V(aX'w(aX'x(aX'{(aX(W(aX(c(aX~O!^'cO!_'cO'w!lO~PChO'r'oO's'oO't'qO~O]!|O'x'sO'y!|O'z'sO~O]#PO'z'sO'{'sO'|#PO~Or#RO!P#SO(U#SO(V'wO~O!V'yO!T'OX!T'UX!W'OX!W'UX~P+}O!W'{O!T(ZX~OP$]OY$dOl$QOz#yO{#zO}#{O!W'{O!f$SO!g#wO!i#xO!m$]O#h$OO#i$PO#j$PO#k$PO#l$RO#m$SO#n$SO#o$cO#p$SO#r$TO#t$VO#v$XO#w$YO(TVO(d$ZO(k#|O(l#}O~O!T(ZX~PG[O!T(QO~O!T(gX!W(gX!b(gX!h(gX(d(gX~O#Y(gX#e#^X!X(gX~PIbO#Y(RO!T(iX!W(iX~O!W(SO!T(hX~O!T(VO~O#Y$eO~PIbO!X(WO~P`Oz#yO{#zO}#{O!g#wO!i#xO(TVOP!kaY!kal!ka!W!ka!f!ka!m!ka#h!ka#i!ka#j!ka#k!ka#l!ka#m!ka#n!ka#o!ka#p!ka#r!ka#t!ka#v!ka#w!ka(d!ka(k!ka(l!ka~O_!ka'm!ka'k!ka!T!ka!h!kap!ka!Y!ka%b!ka!b!ka~PJxO!h(XO~O!b#uO#Y(YO(d'gO!W(fX_(fX'm(fX~O!h(fX~PMhO}%aO!Y%bO!y]O#c(_O#d(^O'v%`O~O!W(`O!h(eX~O!h(bO~O}%aO!Y%bO#d(^O'v%`O~OP(YXY(YXl(YXz(YX{(YX}(YX!W(YX!f(YX!g(YX!i(YX!m(YX#h(YX#i(YX#j(YX#k(YX#l(YX#m(YX#n(YX#o(YX#p(YX#r(YX#t(YX#v(YX#w(YX(T(YX(d(YX(k(YX(l(YX~O!b#uO!h(YX~P! UOz(cO{(dO!g#wO!i#xO!y!xa}!xa~O!u!xa%a!xa!Y!xa#c!xa#d!xa'v!xa~P!#YO!u(hO~OPYOQYOb!jOc!iOjkOlYOmkOnkOtkOvYOxYO}WO!RkO!SkO!YXO!duO!iZO!lYO!mYO!nYO!pvO!r!gO!u!hO$R!kO$VfO'v!dO'xTO'{UO(TVO(c[O(piO~Oj%SOl$tOm$sOn$sOt%TOv%UOx:[O}${O!Y$|O!d;fO!i$xO#d:bO$R%YO$n:^O$p:`O$s%ZO'v(lO'xTO'{UO(P%RO(T$uO~O#e(nO~Oj%SOl$tOm$sOn$sOt%TOv%UOx%VO}${O!Y$|O!d%[O!i$xO#d%]O$R%YO$n%WO$p%XO$s%ZO'v(lO'xTO'{UO(P%RO(T$uO~Oe(^P~P!'vO!V(rO!h(_P~P%[O(W(tO(c[O~O}(vO!i#xO(W(tO(c[O~OP9qOQ9qOb;bOc!iOjkOl9qOmkOnkOtkOv9qOx9qO}WO!RkO!SkO!Y!eO!d9tO!iZO!l9qO!m9qO!n9qO!p9uO!r9xO!u!hO$R!kO$VfO'v)UO'xTO'{UO(TVO(c[O(p;`O~O{)XO!i#xO~O!W$aO_$la'm$la'k$la!h$la!T$la!Y$la%b$la!b$la~O#q)]O~P!&^Oz)`O!b)_O!Y$YX$U$YX$X$YX$Z$YX$b$YX~O!b)_O!Y(mX$U(mX$X(mX$Z(mX$b(mX~Oz)`O~P!-lOz)`O!Y(mX$U(mX$X(mX$Z(mX$b(mX~O!Y)bO$U)fO$X)aO$Z)aO$b)gO~O!V)jO~P!*SO$X$gO$Z$fO$b)nO~Oh$tXz$tX}$tX!g$tX(k$tX(l$tX~OegXe$tXhgX!WgX#YgX~P!/bOm)pO~Or)qO(U)rO(V)tO~Oh)}Oz)vO})wO(k)yO(l){O~Oe)uO~P!0kOe*OO~Oj%SOl$tOm$sOn$sOt%TOv%UOx:[O}${O!Y$|O!d;fO!i$xO#d:bO$R%YO$n:^O$p:`O$s%ZO'xTO'{UO(P%RO(T$uO~O!V*SO'v*PO!h(qP~P!1YO#e*UO~O!i*VO~O!V*[O'v*XO!T(rP~P!1YOl*hO}*`O!]*fO!^*_O!_*_O!i*VO#U*gO%X*bO'w!lO(W!mO~O!X*eO~P!3`O!g#wOh(SXz(SX}(SX(k(SX(l(SX!W(SX#Y(SX~Oe(SX#z(SX~P!4XOh*kO#Y*jOe(RX!W(RX~O!W*lOe(QX~O'v&QOe(QP~O!i*sO~O'v(lO~Oj*wO}%aO!V#hO!Y%bO!y]O#c#kO#d#hO'v%`O!h(eP~O!b#uO#e*xO~O}%aO!V*zO!W(SO!Y%bO'v%`O!T(hP~Om'RO}*|O!V*{O'xTO'{UO(W(tO~O!X(jP~P!7SO!W*}O_(vX'm(vX~OP$]OY$dOl$QOz#yO{#zO}#{O!f$SO!g#wO!i#xO!m$]O#h$OO#i$PO#j$PO#k$PO#l$RO#m$SO#n$SO#o$cO#p$SO#r$TO#t$VO#v$XO#w$YO(TVO(d$ZO(k#|O(l#}O~O_!ca!W!ca'm!ca'k!ca!T!ca!h!cap!ca!Y!ca%b!ca!b!ca~P!7zOz#yO{#zO}#{O!g#wO!i#xO(TVOP!oaY!oal!oa!W!oa!f!oa!m!oa#h!oa#i!oa#j!oa#k!oa#l!oa#m!oa#n!oa#o!oa#p!oa#r!oa#t!oa#v!oa#w!oa(d!oa(k!oa(l!oa~O_!oa'm!oa'k!oa!T!oa!h!oap!oa!Y!oa%b!oa!b!oa~P!:eOz#yO{#zO}#{O!g#wO!i#xO(TVOP!qaY!qal!qa!W!qa!f!qa!m!qa#h!qa#i!qa#j!qa#k!qa#l!qa#m!qa#n!qa#o!qa#p!qa#r!qa#t!qa#v!qa#w!qa(d!qa(k!qa(l!qa~O_!qa'm!qa'k!qa!T!qa!h!qap!qa!Y!qa%b!qa!b!qa~P!=OOh+WO!Y'VO%b+VO(P%RO~O!b+YO_(OX!Y(OX'm(OX!W(OX~O_%gO!YXO'm%gO~O!i%^O(P%RO~O!i%^O'v%`O(P%RO~O!b#uO#e(nO~O`+eO%c+fO'v+bO'xTO'{UO!X(zP~O!W+gO^(yX~OY+kO~O^+lO~O!Y%wO'v%`O'w!lO^(yP~O#Y+qO(P%RO~Oh+tO!Y$|O(P%RO~O!Y+vO~Oz+xO!YXO~O%g%nO~O!u+}O~Oc,SO~O`,TO'v#mO'xTO'{UO!X(xP~Oc%uO~O%c!QO'v&QO~P<wOY,YO^,XO~OPYOQYObzOcyOjkOlYOmkOnkOtkOvYOxYO}WO!RkO!SkO!duO!iZO!lYO!mYO!nYO!pvO!uxO!y]O$VfO%a}O'xTO'{UO(TVO(c[O(piO~O!Y!eO!r!gO$R!kO'v!dO~P!DRO^,XO_%gO'm%gO~OPYOQYOb!jOc!iOjkOlYOmkOnkOtkOvYOxYO}WO!RkO!SkO!Y!eO!duO!iZO!lYO!mYO!nYO!pvO!u!hO$R!kO$VfO'v!dO'xTO'{UO(TVO(c[O(piO~O_,_O!rwO#q!OO%e!OO%f!OO%g!OO~P!FkO!i&fO~O&U,eO~O!Y,gO~O&g,iO&i,jOP&daQ&daW&da_&dab&dac&daj&dal&dam&dan&dat&dav&dax&da}&da!R&da!S&da!Y&da!d&da!i&da!l&da!m&da!n&da!p&da!r&da!u&da!y&da#q&da$R&da$V&da%a&da%c&da%e&da%f&da%g&da%j&da%l&da%o&da%p&da%r&da&O&da&U&da&W&da&Y&da&[&da&_&da&e&da&k&da&m&da&o&da&q&da&s&da'k&da'v&da'x&da'{&da(T&da(c&da(p&da!X&da&]&da`&da&b&da~O'v,oO~O!W|X!W!`X!X|X!X!`X!b|X!b!`X!i!`X#Y|X(P!`X~O!b,tO#Y,sO!W#bX!W(]X!X#bX!X(]X!b(]X!i(]X(P(]X~O!b,vO!i%^O(P%RO!W![X!X![X~Om!nO}!oO'xTO'{UO(W!mO~OP9qOQ9qOb;bOc!iOjkOl9qOmkOnkOtkOv9qOx9qO}WO!RkO!SkO!Y!eO!d9tO!iZO!l9qO!m9qO!n9qO!p9uO!r9xO!u!hO$R!kO$VfO'xTO'{UO(TVO(c[O(p;`O~O'v:gO~P# qO!W,zO!X([X~O!X,|O~O!b,tO#Y,sO!W#bX!X#bX~O!W,}O!X(jX~O!X-PO~O!^-QO!_-QO'w!lO~P# `O!X-TO~P'_Oh-WO!Y'VO~O!T-]O~Om!xa!]!xa!^!xa!_!xa!}!xa#O!xa#P!xa#Q!xa#R!xa#U!xa#V!xa'w!xa'x!xa'{!xa(W!xa(c!xa~P!#YO!m-bO#Y-`O~PBxO!^-dO!_-dO'w!lO~PChO_%gO#Y-`O'm%gO~O_%gO!b#uO#Y-`O'm%gO~O_%gO!b#uO!m-bO#Y-`O'm%gO(d'gO~O'r'oO's'oO't-iO~Op-jO~O!T'Oa!W'Oa~P!7zO!V-nO!T'OX!W'OX~P%[O!W'{O!T(Za~O!T(Za~PG[O!W(SO!T(ha~O}%aO!V-rO!Y%bO'v%`O!T'UX!W'UX~O#Y-tO!W(fa!h(fa_(fa'm(fa~O!b#uO~P#)wO!W(`O!h(ea~O}%aO!Y%bO#d-xO'v%`O~Oj-}O}%aO!V-zO!Y%bO!y]O#c-|O#d-zO'v%`O!W'XX!h'XX~O{.RO!i#xO~Oh.UO!Y'VO%b.TO(P%RO~O_#]i!W#]i'm#]i'k#]i!T#]i!h#]ip#]i!Y#]i%b#]i!b#]i~P!7zOh;lOz)vO})wO(k)yO(l){O~O#e#Xa_#Xa#Y#Xa'm#Xa!W#Xa!h#Xa!Y#Xa!T#Xa~P#,sO#e(SXP(SXY(SX_(SXl(SX{(SX!f(SX!i(SX!m(SX#h(SX#i(SX#j(SX#k(SX#l(SX#m(SX#n(SX#o(SX#p(SX#r(SX#t(SX#v(SX#w(SX'm(SX(T(SX(d(SX!h(SX!T(SX'k(SXp(SX!Y(SX%b(SX!b(SX~P!4XO!W._Oe(^X~P!0kOe.aO~O!W.bO!h(_X~P!7zO!h.eO~O!T.gO~OP$]Oz#yO{#zO}#{O!g#wO!i#xO!m$]O(TVOY#gi_#gil#gi!W#gi!f#gi#i#gi#j#gi#k#gi#l#gi#m#gi#n#gi#o#gi#p#gi#r#gi#t#gi#v#gi#w#gi'm#gi(d#gi(k#gi(l#gi'k#gi!T#gi!h#gip#gi!Y#gi%b#gi!b#gi~O#h#gi~P#0oO#h$OO~P#0oOP$]Oz#yO{#zO}#{O!g#wO!i#xO!m$]O#h$OO#i$PO#j$PO#k$PO(TVOY#gi_#gi!W#gi!f#gi#l#gi#m#gi#n#gi#o#gi#p#gi#r#gi#t#gi#v#gi#w#gi'm#gi(d#gi(k#gi(l#gi'k#gi!T#gi!h#gip#gi!Y#gi%b#gi!b#gi~Ol#gi~P#3aOl$QO~P#3aOP$]Ol$QOz#yO{#zO}#{O!g#wO!i#xO!m$]O#h$OO#i$PO#j$PO#k$PO#l$RO(TVO_#gi!W#gi#r#gi#t#gi#v#gi#w#gi'm#gi(d#gi(k#gi(l#gi'k#gi!T#gi!h#gip#gi!Y#gi%b#gi!b#gi~OY#gi!f#gi#m#gi#n#gi#o#gi#p#gi~P#6ROY$dO!f$SO#m$SO#n$SO#o$cO#p$SO~P#6ROP$]OY$dOl$QOz#yO{#zO}#{O!f$SO!g#wO!i#xO!m$]O#h$OO#i$PO#j$PO#k$PO#l$RO#m$SO#n$SO#o$cO#p$SO#r$TO(TVO_#gi!W#gi#t#gi#v#gi#w#gi'm#gi(d#gi(l#gi'k#gi!T#gi!h#gip#gi!Y#gi%b#gi!b#gi~O(k#gi~P#9SO(k#|O~P#9SOP$]OY$dOl$QOz#yO{#zO}#{O!f$SO!g#wO!i#xO!m$]O#h$OO#i$PO#j$PO#k$PO#l$RO#m$SO#n$SO#o$cO#p$SO#r$TO#t$VO(TVO(k#|O_#gi!W#gi#v#gi#w#gi'm#gi(d#gi'k#gi!T#gi!h#gip#gi!Y#gi%b#gi!b#gi~O(l#gi~P#;tO(l#}O~P#;tOP$]OY$dOl$QOz#yO{#zO}#{O!f$SO!g#wO!i#xO!m$]O#h$OO#i$PO#j$PO#k$PO#l$RO#m$SO#n$SO#o$cO#p$SO#r$TO#t$VO#v$XO(TVO(k#|O(l#}O~O_#gi!W#gi#w#gi'm#gi(d#gi'k#gi!T#gi!h#gip#gi!Y#gi%b#gi!b#gi~P#>fOPZXYZXlZXzZX{ZX}ZX!fZX!gZX!iZX!mZX#YZX#edX#hZX#iZX#jZX#kZX#lZX#mZX#nZX#oZX#pZX#rZX#tZX#vZX#wZX#|ZX(TZX(dZX(kZX(lZX!WZX!XZX~O#zZX~P#APOP$]OY:YOl9|Oz#yO{#zO}#{O!f:OO!g#wO!i#xO!m$]O#h9zO#i9{O#j9{O#k9{O#l9}O#m:OO#n:OO#o:XO#p:OO#r:PO#t:RO#v:TO#w:UO(TVO(d$ZO(k#|O(l#}O~O#z.iO~P#C^O#Y:ZO#|:ZO#z(YX!X(YX~P! UO_'[a!W'[a'm'[a'k'[a!h'[a!T'[ap'[a!Y'[a%b'[a!b'[a~P!7zOP#giY#gi_#gil#gi{#gi!W#gi!f#gi!g#gi!i#gi!m#gi#h#gi#i#gi#j#gi#k#gi#l#gi#m#gi#n#gi#o#gi#p#gi#r#gi#t#gi#v#gi#w#gi'm#gi(T#gi(d#gi'k#gi!T#gi!h#gip#gi!Y#gi%b#gi!b#gi~P#,sO_#{i!W#{i'm#{i'k#{i!T#{i!h#{ip#{i!Y#{i%b#{i!b#{i~P!7zO$X.nO$Z.nO~O$X.oO$Z.oO~O!b)_O#Y.pO!Y$_X$U$_X$X$_X$Z$_X$b$_X~O!V.qO~O!Y)bO$U.sO$X)aO$Z)aO$b.tO~O!W:VO!X(XX~P#C^O!X.uO~O!b)_O$b(mX~O$b.wO~Or)qO(U)rO(V.zO~O!T/OO~P!&^O!WdX!bdX!hdX!h$tX(ddX~P!/bO!h/UO~P#,sO!W/VO!b#uO(d'gO!h(qX~O!h/[O~O!V*SO'v%`O!h(qP~O#e/^O~O!T$tX!W$tX!b${X~P!/bO!W/_O!T(rX~P#,sO!b/aO~O!T/cO~Ol/gO!b#uO!i%^O(P%RO(d'gO~O'v/iO~O!b+YO~O_%gO!W/mO'm%gO~O!X/oO~P!3`O!^/pO!_/pO'w!lO(W!mO~O}/rO(W!mO~O#U/sO~O'v&QOe'aX!W'aX~O!W*lOe(Qa~Oe/xO~Oz/yO{/yO}/zOhwa(kwa(lwa!Wwa#Ywa~Oewa#zwa~P$ tOz)vO})wOh$ma(k$ma(l$ma!W$ma#Y$ma~Oe$ma#z$ma~P$!jOz)vO})wOh$oa(k$oa(l$oa!W$oa#Y$oa~Oe$oa#z$oa~P$#]O#e/|O~Oe$}a!W$}a#Y$}a#z$}a~P!0kO!b#uO~O#e0PO~O!W*}O_(va'm(va~Oz#yO{#zO}#{O!g#wO!i#xO(TVOP!oiY!oil!oi!W!oi!f!oi!m!oi#h!oi#i!oi#j!oi#k!oi#l!oi#m!oi#n!oi#o!oi#p!oi#r!oi#t!oi#v!oi#w!oi(d!oi(k!oi(l!oi~O_!oi'm!oi'k!oi!T!oi!h!oip!oi!Y!oi%b!oi!b!oi~P$$zOh.UO!Y'VO%b.TO~Oj0ZO'v0YO~P!1]O!b+YO_(Oa!Y(Oa'm(Oa!W(Oa~O#e0aO~OYZX!WdX!XdX~O!W0bO!X(zX~O!X0dO~OY0eO~O`0gO'v+bO'xTO'{UO~O!Y%wO'v%`O^'iX!W'iX~O!W+gO^(ya~O!h0jO~P!7zOY0mO~O^0nO~O#Y0qO~Oh0tO!Y$|O~O(W(tO!X(wP~Oh0}O!Y0zO%b0|O(P%RO~OY1XO!W1VO!X(xX~O!X1YO~O^1[O_%gO'm%gO~O'v#mO'xTO'{UO~O#Y$eO#|$eOP(YXY(YXl(YXz(YX{(YX}(YX!W(YX!f(YX!i(YX!m(YX#h(YX#i(YX#j(YX#k(YX#l(YX#m(YX#n(YX#o(YX#r(YX#t(YX#v(YX#w(YX(T(YX(d(YX(k(YX(l(YX~O#p1_O&S1`O_(YX!g(YX~P$+sO#Y$eO#p1_O&S1`O~O_1bO~P%[O_1dO~O&]1gOP&ZiQ&ZiW&Zi_&Zib&Zic&Zij&Zil&Zim&Zin&Zit&Ziv&Zix&Zi}&Zi!R&Zi!S&Zi!Y&Zi!d&Zi!i&Zi!l&Zi!m&Zi!n&Zi!p&Zi!r&Zi!u&Zi!y&Zi#q&Zi$R&Zi$V&Zi%a&Zi%c&Zi%e&Zi%f&Zi%g&Zi%j&Zi%l&Zi%o&Zi%p&Zi%r&Zi&O&Zi&U&Zi&W&Zi&Y&Zi&[&Zi&_&Zi&e&Zi&k&Zi&m&Zi&o&Zi&q&Zi&s&Zi'k&Zi'v&Zi'x&Zi'{&Zi(T&Zi(c&Zi(p&Zi!X&Zi`&Zi&b&Zi~O`1mO!X1kO&b1lO~P`O!YXO!i1oO~O&i,jOP&diQ&diW&di_&dib&dic&dij&dil&dim&din&dit&div&dix&di}&di!R&di!S&di!Y&di!d&di!i&di!l&di!m&di!n&di!p&di!r&di!u&di!y&di#q&di$R&di$V&di%a&di%c&di%e&di%f&di%g&di%j&di%l&di%o&di%p&di%r&di&O&di&U&di&W&di&Y&di&[&di&_&di&e&di&k&di&m&di&o&di&q&di&s&di'k&di'v&di'x&di'{&di(T&di(c&di(p&di!X&di&]&di`&di&b&di~O!T1uO~O!W![a!X![a~P#C^Om!nO}!oO!V1{O(W!mO!W'PX!X'PX~P@OO!W,zO!X([a~O!W'VX!X'VX~P!7SO!W,}O!X(ja~O!X2SO~P'_O_%gO#Y2]O'm%gO~O_%gO!b#uO#Y2]O'm%gO~O_%gO!b#uO!m2aO#Y2]O'm%gO(d'gO~O_%gO'm%gO~P!7zO!W$aOp$la~O!T'Oi!W'Oi~P!7zO!W'{O!T(Zi~O!W(SO!T(hi~O!T(ii!W(ii~P!7zO!W(fi!h(fi_(fi'm(fi~P!7zO#Y2cO!W(fi!h(fi_(fi'm(fi~O!W(`O!h(ei~O}%aO!Y%bO!y]O#c2hO#d2gO'v%`O~O}%aO!Y%bO#d2gO'v%`O~Oh2oO!Y'VO%b2nO~Oh2oO!Y'VO%b2nO(P%RO~O#ewaPwaYwa_walwa!fwa!gwa!iwa!mwa#hwa#iwa#jwa#kwa#lwa#mwa#nwa#owa#pwa#rwa#twa#vwa#wwa'mwa(Twa(dwa!hwa!Twa'kwapwa!Ywa%bwa!bwa~P$ tO#e$maP$maY$ma_$mal$ma{$ma!f$ma!g$ma!i$ma!m$ma#h$ma#i$ma#j$ma#k$ma#l$ma#m$ma#n$ma#o$ma#p$ma#r$ma#t$ma#v$ma#w$ma'm$ma(T$ma(d$ma!h$ma!T$ma'k$map$ma!Y$ma%b$ma!b$ma~P$!jO#e$oaP$oaY$oa_$oal$oa{$oa!f$oa!g$oa!i$oa!m$oa#h$oa#i$oa#j$oa#k$oa#l$oa#m$oa#n$oa#o$oa#p$oa#r$oa#t$oa#v$oa#w$oa'm$oa(T$oa(d$oa!h$oa!T$oa'k$oap$oa!Y$oa%b$oa!b$oa~P$#]O#e$}aP$}aY$}a_$}al$}a{$}a!W$}a!f$}a!g$}a!i$}a!m$}a#h$}a#i$}a#j$}a#k$}a#l$}a#m$}a#n$}a#o$}a#p$}a#r$}a#t$}a#v$}a#w$}a'm$}a(T$}a(d$}a!h$}a!T$}a'k$}a#Y$}ap$}a!Y$}a%b$}a!b$}a~P#,sO_#]q!W#]q'm#]q'k#]q!T#]q!h#]qp#]q!Y#]q%b#]q!b#]q~P!7zOe'QX!W'QX~P!'vO!W._Oe(^a~O!V2wO!W'RX!h'RX~P%[O!W.bO!h(_a~O!W.bO!h(_a~P!7zO!T2zO~O#z!ka!X!ka~PJxO#z!ca!W!ca!X!ca~P#C^O#z!oa!X!oa~P!:eO#z!qa!X!qa~P!=OO!Y3^O$VfO$`3_O~O!X3cO~Op3dO~P#,sO_$iq!W$iq'm$iq'k$iq!T$iq!h$iqp$iq!Y$iq%b$iq!b$iq~P!7zO!T3eO~P#,sOz)vO})wO(l){Oh%Yi(k%Yi!W%Yi#Y%Yi~Oe%Yi#z%Yi~P$J]Oz)vO})wOh%[i(k%[i(l%[i!W%[i#Y%[i~Oe%[i#z%[i~P$KOO(d$ZO~P#,sO!V3hO'v%`O!W']X!h']X~O!W/VO!h(qa~O!W/VO!b#uO!h(qa~O!W/VO!b#uO(d'gO!h(qa~Oe$vi!W$vi#Y$vi#z$vi~P!0kO!V3pO'v*XO!T'_X!W'_X~P!1YO!W/_O!T(ra~O!W/_O!T(ra~P#,sO!b#uO#p3xO~Ol3{O!b#uO(d'gO~Oe(Ri!W(Ri~P!0kO#Y4OOe(Ri!W(Ri~P!0kO!h4RO~O_$jq!W$jq'm$jq'k$jq!T$jq!h$jqp$jq!Y$jq%b$jq!b$jq~P!7zO!T4VO~O!W4WO!Y(sX~P#,sO!g#wO~P4XO_$tX!Y$tX%VZX'm$tX!W$tX~P!/bO%V4YO_iXhiXziX}iX!YiX'miX(kiX(liX!WiX~O%V4YO~O`4`O%c4aO'v+bO'xTO'{UO!W'hX!X'hX~O!W0bO!X(za~OY4eO~O^4fO~O_%gO'm%gO~P#,sO!Y$|O~P#,sO!W4nO#Y4pO!X(wX~O!X4qO~Om!nO}4rO!]!xO!^!uO!_!uO!y9rO!}!pO#O!pO#P!pO#Q!pO#R!pO#U4wO#V!yO'w!lO'xTO'{UO(W!mO(c!sO~O!X4vO~P%%QOh4|O!Y0zO%b4{O~Oh4|O!Y0zO%b4{O(P%RO~O`5TO'v#mO'xTO'{UO!W'gX!X'gX~O!W1VO!X(xa~O'xTO'{UO(W5VO~O^5ZO~O#p5^O&S5_O~PMhO!h5`O~P%[O_5bO~O_5bO~P%[O`1mO!X5gO&b1lO~P`O!b5iO~O!b5kO!W(]i!X(]i!b(]i!i(]i(P(]i~O!W#bi!X#bi~P#C^O#Y5lO!W#bi!X#bi~O!W![i!X![i~P#C^O_%gO#Y5uO'm%gO~O_%gO!b#uO#Y5uO'm%gO~O!W(fq!h(fq_(fq'm(fq~P!7zO!W(`O!h(eq~O}%aO!Y%bO#d5|O'v%`O~O!Y'VO%b6PO~Oh6SO!Y'VO%b6PO~O#e%YiP%YiY%Yi_%Yil%Yi{%Yi!f%Yi!g%Yi!i%Yi!m%Yi#h%Yi#i%Yi#j%Yi#k%Yi#l%Yi#m%Yi#n%Yi#o%Yi#p%Yi#r%Yi#t%Yi#v%Yi#w%Yi'm%Yi(T%Yi(d%Yi!h%Yi!T%Yi'k%Yip%Yi!Y%Yi%b%Yi!b%Yi~P$J]O#e%[iP%[iY%[i_%[il%[i{%[i!f%[i!g%[i!i%[i!m%[i#h%[i#i%[i#j%[i#k%[i#l%[i#m%[i#n%[i#o%[i#p%[i#r%[i#t%[i#v%[i#w%[i'm%[i(T%[i(d%[i!h%[i!T%[i'k%[ip%[i!Y%[i%b%[i!b%[i~P$KOO#e$viP$viY$vi_$vil$vi{$vi!W$vi!f$vi!g$vi!i$vi!m$vi#h$vi#i$vi#j$vi#k$vi#l$vi#m$vi#n$vi#o$vi#p$vi#r$vi#t$vi#v$vi#w$vi'm$vi(T$vi(d$vi!h$vi!T$vi'k$vi#Y$vip$vi!Y$vi%b$vi!b$vi~P#,sOe'Qa!W'Qa~P!0kO!W'Ra!h'Ra~P!7zO!W.bO!h(_i~O#z#]i!W#]i!X#]i~P#C^OP$]Oz#yO{#zO}#{O!g#wO!i#xO!m$]O(TVOY#gil#gi!f#gi#i#gi#j#gi#k#gi#l#gi#m#gi#n#gi#o#gi#p#gi#r#gi#t#gi#v#gi#w#gi#z#gi(d#gi(k#gi(l#gi!W#gi!X#gi~O#h#gi~P%3jO#h9zO~P%3jOP$]Oz#yO{#zO}#{O!g#wO!i#xO!m$]O#h9zO#i9{O#j9{O#k9{O(TVOY#gi!f#gi#l#gi#m#gi#n#gi#o#gi#p#gi#r#gi#t#gi#v#gi#w#gi#z#gi(d#gi(k#gi(l#gi!W#gi!X#gi~Ol#gi~P%5uOl9|O~P%5uOP$]Ol9|Oz#yO{#zO}#{O!g#wO!i#xO!m$]O#h9zO#i9{O#j9{O#k9{O#l9}O(TVO#r#gi#t#gi#v#gi#w#gi#z#gi(d#gi(k#gi(l#gi!W#gi!X#gi~OY#gi!f#gi#m#gi#n#gi#o#gi#p#gi~P%8QOY:YO!f:OO#m:OO#n:OO#o:XO#p:OO~P%8QOP$]OY:YOl9|Oz#yO{#zO}#{O!f:OO!g#wO!i#xO!m$]O#h9zO#i9{O#j9{O#k9{O#l9}O#m:OO#n:OO#o:XO#p:OO#r:PO(TVO#t#gi#v#gi#w#gi#z#gi(d#gi(l#gi!W#gi!X#gi~O(k#gi~P%:lO(k#|O~P%:lOP$]OY:YOl9|Oz#yO{#zO}#{O!f:OO!g#wO!i#xO!m$]O#h9zO#i9{O#j9{O#k9{O#l9}O#m:OO#n:OO#o:XO#p:OO#r:PO#t:RO(TVO(k#|O#v#gi#w#gi#z#gi(d#gi!W#gi!X#gi~O(l#gi~P%<wO(l#}O~P%<wOP$]OY:YOl9|Oz#yO{#zO}#{O!f:OO!g#wO!i#xO!m$]O#h9zO#i9{O#j9{O#k9{O#l9}O#m:OO#n:OO#o:XO#p:OO#r:PO#t:RO#v:TO(TVO(k#|O(l#}O~O#w#gi#z#gi(d#gi!W#gi!X#gi~P%?SO_#xy!W#xy'm#xy'k#xy!T#xy!h#xyp#xy!Y#xy%b#xy!b#xy~P!7zOh;mOz)vO})wO(k)yO(l){O~OP#giY#gil#gi{#gi!f#gi!g#gi!i#gi!m#gi#h#gi#i#gi#j#gi#k#gi#l#gi#m#gi#n#gi#o#gi#p#gi#r#gi#t#gi#v#gi#w#gi#z#gi(T#gi(d#gi!W#gi!X#gi~P%AzO!g#wOP(SXY(SXh(SXl(SXz(SX{(SX}(SX!f(SX!i(SX!m(SX#h(SX#i(SX#j(SX#k(SX#l(SX#m(SX#n(SX#o(SX#p(SX#r(SX#t(SX#v(SX#w(SX#z(SX(T(SX(d(SX(k(SX(l(SX!W(SX!X(SX~O#z#{i!W#{i!X#{i~P#C^O#z!oi!X!oi~P$$zO!X6`O~O!W'[a!X'[a~P#C^O!b#uO(d'gO!W']a!h']a~O!W/VO!h(qi~O!W/VO!b#uO!h(qi~Oe$vq!W$vq#Y$vq#z$vq~P!0kO!T'_a!W'_a~P#,sO!b6gO~O!W/_O!T(ri~P#,sO!W/_O!T(ri~O!T6kO~O!b#uO#p6pO~Ol6qO!b#uO(d'gO~O!T6sO~Oe$xq!W$xq#Y$xq#z$xq~P!0kO_$jy!W$jy'm$jy'k$jy!T$jy!h$jyp$jy!Y$jy%b$jy!b$jy~P!7zO!b5kO~O!W4WO!Y(sa~O_#]y!W#]y'm#]y'k#]y!T#]y!h#]yp#]y!Y#]y%b#]y!b#]y~P!7zOY6xO~O`6zO'v+bO'xTO'{UO~O!W0bO!X(zi~O^7OO~O(W(tO!W'dX!X'dX~O!W4nO!X(wa~OjkO'v7VO~P.iO!X7YO~P%%QOm!nO}7ZO'xTO'{UO(W!mO(c!sO~O!Y0zO~O!Y0zO%b7]O~Oh7`O!Y0zO%b7]O~OY7eO!W'ga!X'ga~O!W1VO!X(xi~O!h7iO~O!h7jO~O!h7mO~O!h7mO~P%[O_7oO~O!b7pO~O!h7qO~O!W(ii!X(ii~P#C^O_%gO#Y7yO'm%gO~O!W(fy!h(fy_(fy'm(fy~P!7zO!W(`O!h(ey~O!Y'VO%b7|O~O#e$vqP$vqY$vq_$vql$vq{$vq!W$vq!f$vq!g$vq!i$vq!m$vq#h$vq#i$vq#j$vq#k$vq#l$vq#m$vq#n$vq#o$vq#p$vq#r$vq#t$vq#v$vq#w$vq'm$vq(T$vq(d$vq!h$vq!T$vq'k$vq#Y$vqp$vq!Y$vq%b$vq!b$vq~P#,sO#e$xqP$xqY$xq_$xql$xq{$xq!W$xq!f$xq!g$xq!i$xq!m$xq#h$xq#i$xq#j$xq#k$xq#l$xq#m$xq#n$xq#o$xq#p$xq#r$xq#t$xq#v$xq#w$xq'm$xq(T$xq(d$xq!h$xq!T$xq'k$xq#Y$xqp$xq!Y$xq%b$xq!b$xq~P#,sO!W'Ri!h'Ri~P!7zO#z#]q!W#]q!X#]q~P#C^Oz/yO{/yO}/zOPwaYwahwalwa!fwa!gwa!iwa!mwa#hwa#iwa#jwa#kwa#lwa#mwa#nwa#owa#pwa#rwa#twa#vwa#wwa#zwa(Twa(dwa(kwa(lwa!Wwa!Xwa~Oz)vO})wOP$maY$mah$mal$ma{$ma!f$ma!g$ma!i$ma!m$ma#h$ma#i$ma#j$ma#k$ma#l$ma#m$ma#n$ma#o$ma#p$ma#r$ma#t$ma#v$ma#w$ma#z$ma(T$ma(d$ma(k$ma(l$ma!W$ma!X$ma~Oz)vO})wOP$oaY$oah$oal$oa{$oa!f$oa!g$oa!i$oa!m$oa#h$oa#i$oa#j$oa#k$oa#l$oa#m$oa#n$oa#o$oa#p$oa#r$oa#t$oa#v$oa#w$oa#z$oa(T$oa(d$oa(k$oa(l$oa!W$oa!X$oa~OP$}aY$}al$}a{$}a!f$}a!g$}a!i$}a!m$}a#h$}a#i$}a#j$}a#k$}a#l$}a#m$}a#n$}a#o$}a#p$}a#r$}a#t$}a#v$}a#w$}a#z$}a(T$}a(d$}a!W$}a!X$}a~P%AzO#z$iq!W$iq!X$iq~P#C^O#z$jq!W$jq!X$jq~P#C^O!X8WO~O#z8XO~P!0kO!b#uO!W']i!h']i~O!b#uO(d'gO!W']i!h']i~O!W/VO!h(qq~O!T'_i!W'_i~P#,sO!W/_O!T(rq~O!T8_O~P#,sO!T8_O~Oe(Ry!W(Ry~P!0kO!W'ba!Y'ba~P#,sO_%Uq!Y%Uq'm%Uq!W%Uq~P#,sOY8dO~O!W0bO!X(zq~O#Y8hO!W'da!X'da~O!W4nO!X(wi~P#C^OPZXYZXlZXzZX{ZX}ZX!TZX!WZX!fZX!gZX!iZX!mZX#YZX#edX#hZX#iZX#jZX#kZX#lZX#mZX#nZX#oZX#pZX#rZX#tZX#vZX#wZX#|ZX(TZX(dZX(kZX(lZX~O!b%SX#p%SX~P&3YO!Y0zO%b8lO~O'xTO'{UO(W8qO~O!W1VO!X(xq~O!h8tO~O!h8uO~O!h8vO~O!h8vO~P%[O#Y8yO!W#by!X#by~O!W#by!X#by~P#C^O!Y'VO%b9OO~O#z#xy!W#xy!X#xy~P#C^OP$viY$vil$vi{$vi!f$vi!g$vi!i$vi!m$vi#h$vi#i$vi#j$vi#k$vi#l$vi#m$vi#n$vi#o$vi#p$vi#r$vi#t$vi#v$vi#w$vi#z$vi(T$vi(d$vi!W$vi!X$vi~P%AzOz)vO})wO(l){OP%YiY%Yih%Yil%Yi{%Yi!f%Yi!g%Yi!i%Yi!m%Yi#h%Yi#i%Yi#j%Yi#k%Yi#l%Yi#m%Yi#n%Yi#o%Yi#p%Yi#r%Yi#t%Yi#v%Yi#w%Yi#z%Yi(T%Yi(d%Yi(k%Yi!W%Yi!X%Yi~Oz)vO})wOP%[iY%[ih%[il%[i{%[i!f%[i!g%[i!i%[i!m%[i#h%[i#i%[i#j%[i#k%[i#l%[i#m%[i#n%[i#o%[i#p%[i#r%[i#t%[i#v%[i#w%[i#z%[i(T%[i(d%[i(k%[i(l%[i!W%[i!X%[i~O#z$jy!W$jy!X$jy~P#C^O#z#]y!W#]y!X#]y~P#C^O!b#uO!W']q!h']q~O!W/VO!h(qy~O!T'_q!W'_q~P#,sO!T9VO~P#,sO!W0bO!X(zy~O!W4nO!X(wq~O!Y0zO%b9^O~O!h9aO~O!Y'VO%b9fO~OP$vqY$vql$vq{$vq!f$vq!g$vq!i$vq!m$vq#h$vq#i$vq#j$vq#k$vq#l$vq#m$vq#n$vq#o$vq#p$vq#r$vq#t$vq#v$vq#w$vq#z$vq(T$vq(d$vq!W$vq!X$vq~P%AzOP$xqY$xql$xq{$xq!f$xq!g$xq!i$xq!m$xq#h$xq#i$xq#j$xq#k$xq#l$xq#m$xq#n$xq#o$xq#p$xq#r$xq#t$xq#v$xq#w$xq#z$xq(T$xq(d$xq!W$xq!X$xq~P%AzOe%^!Z!W%^!Z#Y%^!Z#z%^!Z~P!0kO!W'dq!X'dq~P#C^O!W#b!Z!X#b!Z~P#C^O#e%^!ZP%^!ZY%^!Z_%^!Zl%^!Z{%^!Z!W%^!Z!f%^!Z!g%^!Z!i%^!Z!m%^!Z#h%^!Z#i%^!Z#j%^!Z#k%^!Z#l%^!Z#m%^!Z#n%^!Z#o%^!Z#p%^!Z#r%^!Z#t%^!Z#v%^!Z#w%^!Z'm%^!Z(T%^!Z(d%^!Z!h%^!Z!T%^!Z'k%^!Z#Y%^!Zp%^!Z!Y%^!Z%b%^!Z!b%^!Z~P#,sOP%^!ZY%^!Zl%^!Z{%^!Z!f%^!Z!g%^!Z!i%^!Z!m%^!Z#h%^!Z#i%^!Z#j%^!Z#k%^!Z#l%^!Z#m%^!Z#n%^!Z#o%^!Z#p%^!Z#r%^!Z#t%^!Z#v%^!Z#w%^!Z#z%^!Z(T%^!Z(d%^!Z!W%^!Z!X%^!Z~P%AzOp(XX~P1qO'w!lO~P!*SO!TdX!WdX#YdX~P&3YOPZXYZXlZXzZX{ZX}ZX!WZX!WdX!fZX!gZX!iZX!mZX#YZX#YdX#edX#hZX#iZX#jZX#kZX#lZX#mZX#nZX#oZX#pZX#rZX#tZX#vZX#wZX#|ZX(TZX(dZX(kZX(lZX~O!bdX!hZX!hdX(ddX~P&HpOP9qOQ9qOb;bOc!iOjkOl9qOmkOnkOtkOv9qOx9qO}WO!RkO!SkO!YXO!d9tO!iZO!l9qO!m9qO!n9qO!p9uO!r9xO!u!hO$R!kO$VfO'v)UO'xTO'{UO(TVO(c[O(p;`O~O!W:VO!X$la~Oj%SOl$tOm$sOn$sOt%TOv%UOx:]O}${O!Y$|O!d;gO!i$xO#d:cO$R%YO$n:_O$p:aO$s%ZO'v(lO'xTO'{UO(P%RO(T$uO~O#q)]O~P&MfO!XZX!XdX~P&HpO#e9yO~O!b#uO#e9yO~O#Y:ZO~O#p:OO~O#Y:eO!W(iX!X(iX~O#Y:ZO!W(gX!X(gX~O#e:fO~Oe:hO~P!0kO#e:mO~O#e:nO~O!b#uO#e:oO~O!b#uO#e:fO~O#z:pO~P#C^O#e:qO~O#e:rO~O#e:sO~O#e:tO~O#e:uO~O#e:vO~O#z:wO~P!0kO#z:xO~P!0kO$V~!g!}#O#Q#R#U#c#d#o(p$n$p$s%V%a%b%c%j%l%o%p%r%t~'qR$V(p#i!S'o'w#jm#h#klz'p(W'p'v$X$Z$X~\",\n  goto: \"$'X)OPPPP)PPP)SP)eP*t.xPPPP5`PP5vP;r>yP?^P?^PPP?^PAOP?^P?^P?^PASPPAXPArPFjPPPFnPPPPFnIoPPPIuJpPFnPMOPPPP! ^FnPPPFnPFnP!#lFnP!'Q!(S!(]P!)P!)T!)PPPPPP!,`!(SPP!,|!-vP!0jFnFn!0o!3y!8`!8`!<UPPP!<]FnPPPPPPPPPPP!?jP!@{PPFn!BYPFnPFnFnFnFnPFn!ClPP!FtP!IxP!I|!JW!J[!J[P!FqP!J`!J`P!MdP!MhFnFn!Mn#!q?^P?^P?^?^P##|?^?^#%x?^#(X?^#)}?^?^#*l#,j#,j#,n#,v#,j#-OP#,jP?^#-h?^#.q?^?^5`PPP#/}PPP#0h#0hP#0hP#1O#0hPP#1UP#0{P#0{#1i#0{#2T#2Z5])S#2^)SP#2e#2e#2eP)SP)SP)SP)SPP)SP#2k#2nP#2n)SP#2rP#2uP)SP)SP)SP)SP)SP)S)SPP#2{#3R#3^#3d#3j#3p#3v#4U#4[#4b#4l#4r#4|#5]#5c#6T#6g#6m#6s#7R#7h#8y#9X#9_#9e#9k#9q#9{#:R#:X#:c#:u#:{PPPPPPPPPP#;RPPPPPPP#;v#>}P#@^#@e#@mPPPP#D{#Gr#NZ#N^#Na$ Y$ ]$ `$ g$ oPP$ u$ y$!q$#p$#t$$YPP$$^$$d$$hP$$k$$o$$r$%h$&P$&h$&l$&o$&r$&x$&{$'P$'TR!{RoqOXst!Z#c%f&i&k&l&n,b,g1g1jY!uQ'V-S0z4uQ%lvQ%tyQ%{|Q&a!VS&}!e,zQ']!iS'c!r!xS*_$|*dQ+`%uQ+m%}Q,R&ZQ-Q'UQ-['^Q-d'dQ/p*fQ1U,SR:d9u%OdOPWXYZstuvw!Z!`!g!o#R#V#Y#c#n#t#x#{$O$P$Q$R$S$T$U$V$W$X$Y$a$e%f%l%y&b&e&i&k&l&n&r&z'X'i'y'{(R(Y(n(r(v)u*x*|,_,b,g-W-`-n-t.b.i/z0P0a0}1_1`1b1d1g1j1l2]2c2w4r4|5^5_5b5u7Z7`7o7yS#p]9r!r)W$[$m'O)j,s,v.q1{3^4p5l8h8y9q9t9u9x9y9z9{9|9}:O:P:Q:R:S:T:U:V:Z:d:e:f:h:o:p:u:v;cQ*o%VQ+e%wQ,T&^Q,[&fQ.X:[Q0W+WQ0[+YQ0g+fQ1^,YQ2k.UQ4`0bQ5T1VQ6R2oQ6X:]Q6z4aR8P6S&|kOPWXYZstuvw!Z!`!g!o#R#V#Y#c#n#t#x#{$O$P$Q$R$S$T$U$V$W$X$Y$[$a$e$m%f%l%y&b&e&f&i&k&l&n&r&z'O'X'i'y'{(R(Y(n(r(v)j)u*x*|+W,_,b,g,s,v-W-`-n-t.U.b.i.q/z0P0a0}1_1`1b1d1g1j1l1{2]2c2o2w3^4p4r4|5^5_5b5l5u6S7Z7`7o7y8h8y9q9t9u9x9y9z9{9|9}:O:P:Q:R:S:T:U:V:Z:d:e:f:h:o:p:u:v;ct!nQ!r!u!x!y&}'U'V'c'd'e,z-Q-S-d0z4u4w$^$si#u#w$c$d$x${%W%X%])q)w)z)|)}*U*[*j*k+V+Y+q+t.T._/P/^/_/a/|0q0t0|2n3f3p3x4O4W4Y4{6P6g6p7]7|8X8l9O9^9f:X:Y:^:_:`:a:b:c:i:j:k:l:m:n:q:r:s:t:w:x;`;h;i;l;mQ&O|Q&{!eS'R%b,}Q+e%wQ,T&^Q/{*sQ0g+fQ0l+lQ1],XQ1^,YQ4`0bQ4i0nQ5T1VQ5W1XQ5X1[Q6z4aQ6}4fQ7h5ZQ8g7OR8r7ernOXst!V!Z#c%f&`&i&k&l&n,b,g1g1jR,V&b&v^OPXYstuvwz!Z!`!g!j!o#R#c#n#t#x#{$O$P$Q$R$S$T$U$V$W$X$Y$[$a$e$m%f%l%y&b&e&f&i&k&l&n&r&z'X'i'{(R(Y(n(r(v)j)u*x*|+W,_,b,g,s,v-W-`-n-t.U.b.i.q/z0P0a0}1_1`1b1d1g1j1l1{2]2c2o2w3^4p4r4|5^5_5b5l5u6S7Z7`7o7y8h8y9q9t9u9x9y9z9{9|9}:O:P:Q:R:S:T:U:V:Z:d:e:f:h:o:p:u:v;b;c[#[WZ#V#Y'O'y!S%cm#g#h#k%^%a(S(^(_(`*z*{*},^,t-r-x-y-z-|1o2g2h5k5|Q%oxQ%syS%x|%}Q&U!TQ'Y!hQ'[!iQ(g#rS*R$x*VS+_%t%uQ+c%wQ+|&XQ,Q&ZS-Z']'^Q.W(hQ/Z*SQ0`+`Q0f+fQ0h+gQ0k+kQ1P+}S1T,R,SQ2X-[Q3g/VQ4_0bQ4c0eQ4h0mQ5S1UQ6d3hQ6y4aQ6|4eQ8c6xR9X8dv$zi#w%W%X%])z)|*U*j*k._/^/|3f4O8X;`;h;i!S%qy!i!t%s%t%u&|'[']'^'b'l*^+_+`,w-Z-[-c/h0`2Q2X2`3zQ+X%oQ+r&RQ+u&SQ,P&ZQ.V(gQ1O+|U1S,Q,R,SQ2p.WQ4}1PS5R1T1UQ7d5S#O;d#u$c$d$x${)q)w)}*[+V+Y+q+t.T/P/_/a0q0t0|2n3p3x4W4Y4{6P6g6p7]7|8l9O9^9f:^:`:b:i:k:m:q:s:w;l;mg;e:X:Y:_:a:c:j:l:n:r:t:xW%Pi%R*l;`S&R!Q&`Q&S!RQ&T!SR+p&P$_%Oi#u#w$c$d$x${%W%X%])q)w)z)|)}*U*[*j*k+V+Y+q+t.T._/P/^/_/a/|0q0t0|2n3f3p3x4O4W4Y4{6P6g6p7]7|8X8l9O9^9f:X:Y:^:_:`:a:b:c:i:j:k:l:m:n:q:r:s:t:w:x;`;h;i;l;mT)r$u)sV*p%V:[:]U'R!e%b,}S(u#y#zQ+j%zS.P(c(dQ0u+vQ4P/yR7S4n&|kOPWXYZstuvw!Z!`!g!o#R#V#Y#c#n#t#x#{$O$P$Q$R$S$T$U$V$W$X$Y$[$a$e$m%f%l%y&b&e&f&i&k&l&n&r&z'O'X'i'y'{(R(Y(n(r(v)j)u*x*|+W,_,b,g,s,v-W-`-n-t.U.b.i.q/z0P0a0}1_1`1b1d1g1j1l1{2]2c2o2w3^4p4r4|5^5_5b5l5u6S7Z7`7o7y8h8y9q9t9u9x9y9z9{9|9}:O:P:Q:R:S:T:U:V:Z:d:e:f:h:o:p:u:v;c$i$`c#X#d%j%k%m'x(O(j(q(y(z({(|(})O)P)Q)R)S)T)V)Y)^)h+T+i,x-g-l-q-s.^.d.h.j.k.l.{/}1v1y2Z2b2v2{2|2}3O3P3Q3R3S3T3U3V3W3X3[3]3b4T4]5n5t5y6V6W6]6^7U7s7w8Q8U8V8{9Z9b9s;VT#SV#T&}kOPWXYZstuvw!Z!`!g!o#R#V#Y#c#n#t#x#{$O$P$Q$R$S$T$U$V$W$X$Y$[$a$e$m%f%l%y&b&e&f&i&k&l&n&r&z'O'X'i'y'{(R(Y(n(r(v)j)u*x*|+W,_,b,g,s,v-W-`-n-t.U.b.i.q/z0P0a0}1_1`1b1d1g1j1l1{2]2c2o2w3^4p4r4|5^5_5b5l5u6S7Z7`7o7y8h8y9q9t9u9x9y9z9{9|9}:O:P:Q:R:S:T:U:V:Z:d:e:f:h:o:p:u:v;cQ'P!eR1|,zv!nQ!e!r!u!x!y&}'U'V'c'd'e,z-Q-S-d0z4u4wS*^$|*dS/h*_*fQ/q*gQ0w+xQ3z/pR3}/snqOXst!Z#c%f&i&k&l&n,b,g1g1jQ&p!^Q'm!wS(i#t9yQ+]%rQ+z&UQ+{&WQ-X'ZQ-f'fS.](n:fS0O*x:oQ0^+^Q0y+yQ1n,iQ1p,jQ1x,uQ2V-YQ2Y-^S4U0P:uQ4Z0_S4^0a:vQ5m1zQ5q2WQ5v2_Q6w4[Q7t5oQ7u5rQ7x5wR8x7q$d$_c#X#d%k%m'x(O(j(q(y(z({(|(})O)P)Q)R)S)T)V)Y)^)h+T+i,x-g-l-q-s.^.d.h.k.l.{/}1v1y2Z2b2v2{2|2}3O3P3Q3R3S3T3U3V3W3X3[3]3b4T4]5n5t5y6V6W6]6^7U7s7w8Q8U8V8{9Z9b9s;VS(f#o'`U*i$}(m3ZS+S%j.jQ2l0WQ6O2kQ8O6RR9P8P$d$^c#X#d%k%m'x(O(j(q(y(z({(|(})O)P)Q)R)S)T)V)Y)^)h+T+i,x-g-l-q-s.^.d.h.k.l.{/}1v1y2Z2b2v2{2|2}3O3P3Q3R3S3T3U3V3W3X3[3]3b4T4]5n5t5y6V6W6]6^7U7s7w8Q8U8V8{9Z9b9s;VS(e#o'`S(w#z$_S+R%j.jS.Q(d(fQ.m)XQ0T+SR2i.R&|kOPWXYZstuvw!Z!`!g!o#R#V#Y#c#n#t#x#{$O$P$Q$R$S$T$U$V$W$X$Y$[$a$e$m%f%l%y&b&e&f&i&k&l&n&r&z'O'X'i'y'{(R(Y(n(r(v)j)u*x*|+W,_,b,g,s,v-W-`-n-t.U.b.i.q/z0P0a0}1_1`1b1d1g1j1l1{2]2c2o2w3^4p4r4|5^5_5b5l5u6S7Z7`7o7y8h8y9q9t9u9x9y9z9{9|9}:O:P:Q:R:S:T:U:V:Z:d:e:f:h:o:p:u:v;cS#p]9rQ&k!XQ&l!YQ&n![Q&o!]R1f,eQ'W!hQ+U%oQ-V'YS.S(g+XQ2T-UW2m.V.W0V0XQ5p2UU5}2j2l2pS7{6O6QS8}7}8OS9d8|9PQ9l9eR9o9mU!vQ'V-ST4s0z4u!Q_OXZ`st!V!Z#c#g%^%f&`&b&i&k&l&n(`,b,g-y1g1j]!pQ!r'V-S0z4uT#p]9r%Y{OPWXYZstuvw!Z!`!g!o#R#V#Y#c#n#t#x#{$O$P$Q$R$S$T$U$V$W$X$Y$a$e%f%l%y&b&e&f&i&k&l&n&r&z'X'i'y'{(R(Y(n(r(v)u*x*|+W,_,b,g-W-`-n-t.U.b.i/z0P0a0}1_1`1b1d1g1j1l2]2c2o2w4r4|5^5_5b5u6S7Z7`7o7yS(u#y#zS.P(c(d!s:|$[$m'O)j,s,v.q1{3^4p5l8h8y9q9t9u9x9y9z9{9|9}:O:P:Q:R:S:T:U:V:Z:d:e:f:h:o:p:u:v;cY!tQ'V-S0z4uQ'b!rS'l!u!xS'n!y4wS-c'c'dQ-e'eR2`-dQ'k!tS([#f1aS-b'b'nQ/Y*RQ/f*^Q2a-eQ3l/ZS3u/g/qQ6c3gS6n3{3}Q8Z6dR8b6qQ#vbQ'j!tS(Z#f1aS(]#l*wQ*y%_Q+Z%pQ+a%vU-a'b'k'nQ-u([Q/X*RQ/e*^Q/k*aQ0]+[Q1Q,OS2^-b-eQ2f-}S3k/Y/ZS3t/f/qQ3w/jQ3y/lQ5P1RQ5x2aQ6b3gQ6f3lS6j3u3}Q6o3|Q7b5QS8Y6c6dQ8^6kQ8`6nQ8o7cQ9T8ZQ9U8_Q9W8bQ9`8pQ9h9VQ;P:zQ;[;TR;];UV!vQ'V-S%YaOPWXYZstuvw!Z!`!g!o#R#V#Y#c#n#t#x#{$O$P$Q$R$S$T$U$V$W$X$Y$a$e%f%l%y&b&e&f&i&k&l&n&r&z'X'i'y'{(R(Y(n(r(v)u*x*|+W,_,b,g-W-`-n-t.U.b.i/z0P0a0}1_1`1b1d1g1j1l2]2c2o2w4r4|5^5_5b5u6S7Z7`7o7yS#vz!j!r:y$[$m'O)j,s,v.q1{3^4p5l8h8y9q9t9u9x9y9z9{9|9}:O:P:Q:R:S:T:U:V:Z:d:e:f:h:o:p:u:v;cR;P;b%YbOPWXYZstuvw!Z!`!g!o#R#V#Y#c#n#t#x#{$O$P$Q$R$S$T$U$V$W$X$Y$a$e%f%l%y&b&e&f&i&k&l&n&r&z'X'i'y'{(R(Y(n(r(v)u*x*|+W,_,b,g-W-`-n-t.U.b.i/z0P0a0}1_1`1b1d1g1j1l2]2c2o2w4r4|5^5_5b5u6S7Z7`7o7yQ%_j!S%py!i!t%s%t%u&|'[']'^'b'l*^+_+`,w-Z-[-c/h0`2Q2X2`3zS%vz!jQ+[%qQ,O&ZW1R,P,Q,R,SU5Q1S1T1US7c5R5SQ8p7d!r:z$[$m'O)j,s,v.q1{3^4p5l8h8y9q9t9u9x9y9z9{9|9}:O:P:Q:R:S:T:U:V:Z:d:e:f:h:o:p:u:v;cQ;T;aR;U;b$|eOPXYstuvw!Z!`!g!o#R#c#n#t#x#{$O$P$Q$R$S$T$U$V$W$X$Y$a$e%f%l%y&b&e&i&k&l&n&r&z'X'i'{(R(Y(n(r(v)u*x*|+W,_,b,g-W-`-n-t.U.b.i/z0P0a0}1_1`1b1d1g1j1l2]2c2o2w4r4|5^5_5b5u6S7Z7`7o7yY#aWZ#V#Y'y!S%cm#g#h#k%^%a(S(^(_(`*z*{*},^,t-r-x-y-z-|1o2g2h5k5|Q,]&f!p:{$[$m)j,s,v.q1{3^4p5l8h8y9q9t9u9x9y9z9{9|9}:O:P:Q:R:S:T:U:V:Z:d:e:f:h:o:p:u:v;cR;O'OS'S!e%bR2O,}%OdOPWXYZstuvw!Z!`!g!o#R#V#Y#c#n#t#x#{$O$P$Q$R$S$T$U$V$W$X$Y$a$e%f%l%y&b&e&i&k&l&n&r&z'X'i'y'{(R(Y(n(r(v)u*x*|,_,b,g-W-`-n-t.b.i/z0P0a0}1_1`1b1d1g1j1l2]2c2w4r4|5^5_5b5u7Z7`7o7y!r)W$[$m'O)j,s,v.q1{3^4p5l8h8y9q9t9u9x9y9z9{9|9}:O:P:Q:R:S:T:U:V:Z:d:e:f:h:o:p:u:v;cQ,[&fQ0W+WQ2k.UQ6R2oR8P6S!f$Uc#X%j'x(O(j(q)Q)R)S)T)Y)^+i-g-l-q-s.^.d.{/}2Z2b2v3X4T4]5t5y6V7w8{9s!T:Q)V)h,x.j1v1y2{3T3U3V3W3[3b5n6W6]6^7U7s8Q8U8V9Z9b;V!b$Wc#X%j'x(O(j(q)S)T)Y)^+i-g-l-q-s.^.d.{/}2Z2b2v3X4T4]5t5y6V7w8{9s!P:S)V)h,x.j1v1y2{3V3W3[3b5n6W6]6^7U7s8Q8U8V9Z9b;V!^$[c#X%j'x(O(j(q)Y)^+i-g-l-q-s.^.d.{/}2Z2b2v3X4T4]5t5y6V7w8{9sQ3f/Tz;c)V)h,x.j1v1y2{3[3b5n6W6]6^7U7s8Q8U8V9Z9b;VQ;h;jR;i;k&|kOPWXYZstuvw!Z!`!g!o#R#V#Y#c#n#t#x#{$O$P$Q$R$S$T$U$V$W$X$Y$[$a$e$m%f%l%y&b&e&f&i&k&l&n&r&z'O'X'i'y'{(R(Y(n(r(v)j)u*x*|+W,_,b,g,s,v-W-`-n-t.U.b.i.q/z0P0a0}1_1`1b1d1g1j1l1{2]2c2o2w3^4p4r4|5^5_5b5l5u6S7Z7`7o7y8h8y9q9t9u9x9y9z9{9|9}:O:P:Q:R:S:T:U:V:Z:d:e:f:h:o:p:u:v;cS$nh$oR3_.p'TgOPWXYZhstuvw!Z!`!g!o#R#V#Y#c#n#t#x#{$O$P$Q$R$S$T$U$V$W$X$Y$[$a$e$m$o%f%l%y&b&e&f&i&k&l&n&r&z'O'X'i'y'{(R(Y(n(r(v)j)u*x*|+W,_,b,g,s,v-W-`-n-t.U.b.i.p.q/z0P0a0}1_1`1b1d1g1j1l1{2]2c2o2w3^4p4r4|5^5_5b5l5u6S7Z7`7o7y8h8y9q9t9u9x9y9z9{9|9}:O:P:Q:R:S:T:U:V:Z:d:e:f:h:o:p:u:v;cT$jf$pQ$hfS)a$k)eR)m$pT$if$pT)c$k)e'ThOPWXYZhstuvw!Z!`!g!o#R#V#Y#c#n#t#x#{$O$P$Q$R$S$T$U$V$W$X$Y$[$a$e$m$o%f%l%y&b&e&f&i&k&l&n&r&z'O'X'i'y'{(R(Y(n(r(v)j)u*x*|+W,_,b,g,s,v-W-`-n-t.U.b.i.p.q/z0P0a0}1_1`1b1d1g1j1l1{2]2c2o2w3^4p4r4|5^5_5b5l5u6S7Z7`7o7y8h8y9q9t9u9x9y9z9{9|9}:O:P:Q:R:S:T:U:V:Z:d:e:f:h:o:p:u:v;cT$nh$oQ$qhR)l$o%YjOPWXYZstuvw!Z!`!g!o#R#V#Y#c#n#t#x#{$O$P$Q$R$S$T$U$V$W$X$Y$a$e%f%l%y&b&e&f&i&k&l&n&r&z'X'i'y'{(R(Y(n(r(v)u*x*|+W,_,b,g-W-`-n-t.U.b.i/z0P0a0}1_1`1b1d1g1j1l2]2c2o2w4r4|5^5_5b5u6S7Z7`7o7y!s;a$[$m'O)j,s,v.q1{3^4p5l8h8y9q9t9u9x9y9z9{9|9}:O:P:Q:R:S:T:U:V:Z:d:e:f:h:o:p:u:v;c#clOPXZst!Z!`!o#R#c#n#{$m%f&b&e&f&i&k&l&n&r&z'X(v)j*|+W,_,b,g-W.U.q/z0}1_1`1b1d1g1j1l2o3^4r4|5^5_5b6S7Z7`7ov$}i#w%W%X%])z)|*U*j*k._/^/|3f4O8X;`;h;i#O(m#u$c$d$x${)q)w)}*[+V+Y+q+t.T/P/_/a0q0t0|2n3p3x4W4Y4{6P6g6p7]7|8l9O9^9f:^:`:b:i:k:m:q:s:w;l;mQ*t%ZQ.|)vg3Z:X:Y:_:a:c:j:l:n:r:t:xv$yi#w%W%X%])z)|*U*j*k._/^/|3f4O8X;`;h;iQ*W$zS*a$|*dQ*u%[Q/l*b#O;R#u$c$d$x${)q)w)}*[+V+Y+q+t.T/P/_/a0q0t0|2n3p3x4W4Y4{6P6g6p7]7|8l9O9^9f:^:`:b:i:k:m:q:s:w;l;mf;S:X:Y:_:a:c:j:l:n:r:t:xQ;W;dQ;X;eQ;Y;fR;Z;gv$}i#w%W%X%])z)|*U*j*k._/^/|3f4O8X;`;h;i#O(m#u$c$d$x${)q)w)}*[+V+Y+q+t.T/P/_/a0q0t0|2n3p3x4W4Y4{6P6g6p7]7|8l9O9^9f:^:`:b:i:k:m:q:s:w;l;mg3Z:X:Y:_:a:c:j:l:n:r:t:xnoOXst!Z#c%f&i&k&l&n,b,g1g1jQ*Z${Q,p&uQ,q&wR3o/_$^%Oi#u#w$c$d$x${%W%X%])q)w)z)|)}*U*[*j*k+V+Y+q+t.T._/P/^/_/a/|0q0t0|2n3f3p3x4O4W4Y4{6P6g6p7]7|8X8l9O9^9f:X:Y:^:_:`:a:b:c:i:j:k:l:m:n:q:r:s:t:w:x;`;h;i;l;mQ+s&SQ0s+uQ4l0rR7R4mT*c$|*dS*c$|*dT4t0z4uS/j*`4rT3|/r7ZQ+Z%pQ/k*aQ0]+[Q1Q,OQ5P1RQ7b5QQ8o7cR9`8pn)z$v(o*v/]/t/u2t3m4S6a6r9S;Q;^;_!Y:i(k)[*Q*Y.[.x.}/T/b0U0p0r2s3n3r4k4m6T6U6h6l6t6v8]8a9g;j;k]:j3Y6[8R9Q9R9pp)|$v(o*v/R/]/t/u2t3m4S6a6r9S;Q;^;_![:k(k)[*Q*Y.[.x.}/T/b0U0p0r2q2s3n3r4k4m6T6U6h6l6t6v8]8a9g;j;k_:l3Y6[8R8S9Q9R9prnOXst!V!Z#c%f&`&i&k&l&n,b,g1g1jQ&]!UR,_&frnOXst!V!Z#c%f&`&i&k&l&n,b,g1g1jR&]!UQ+w&TR0o+psnOXst!V!Z#c%f&`&i&k&l&n,b,g1g1jQ0{+|S4z1O1PU7[4x4y4}S8k7^7_S9[8j8mQ9i9]R9n9jQ&d!VR,W&`R5W1XS%x|%}R0h+gQ&i!WR,b&jR,h&oT1h,g1jR,l&pQ,k&pR1q,lQ'p!zR-h'pSsOtQ#cXT%is#cQ!}TR'r!}Q#QUR't#QQ)s$uR.y)sQ#TVR'v#TQ#WWU'|#W'}-oQ'}#XR-o(OQ,{'PR1},{Q.`(oR2u.`Q.c(qS2x.c2yR2y.dQ-S'VR2R-SY!rQ'V-S0z4uR'a!rS#^W%aU(T#^(U-pQ(U#_R-p(PQ-O'SR2P-Ot`OXst!V!Z#c%f&`&b&i&k&l&n,b,g1g1jS#gZ%^U#q`#g-yR-y(`Q(a#iQ-v(]W.O(a-v2d5zQ2d-wR5z2eQ)e$kR.r)eQ$ohR)k$oQ$bcU)Z$b-k:WQ-k9sR:W)hQ/W*RW3i/W3j6e8[U3j/X/Y/ZS6e3k3lR8[6f#o)x$v(k(o)[*Q*Y*q*r*v.Y.Z.[.x.}/R/S/T/]/b/t/u0U0p0r2q2r2s2t3Y3m3n3r4S4k4m6T6U6Y6Z6[6a6h6l6r6t6v8R8S8T8]8a9Q9R9S9g9p;Q;^;_;j;kQ/`*YU3q/`3s6iQ3s/bR6i3rQ*d$|R/n*dQ*m%QR/w*mQ4X0UR6u4XQ+O%dR0S+OQ4o0uS7T4o8iR8i7UQ+y&UR0x+yQ4u0zR7X4uQ1W,TS5U1W7fR7f5WQ0c+cW4b0c4d6{8eQ4d0fQ6{4cR8e6|Q+h%xR0i+hQ1j,gR5f1jYrOXst#cQ&m!ZQ+Q%fQ,a&iQ,c&kQ,d&lQ,f&nQ1e,bS1h,g1jR5e1gQ%hpQ&q!_Q&t!aQ&v!bQ&x!cQ'h!tQ+P%eQ+]%rQ+o&OQ,V&dQ,n&sW-_'b'j'k'nQ-f'fQ/m*cQ0^+^S1Z,W,ZQ1r,mQ1s,pQ1t,qQ2Y-^W2[-a-b-e-gQ4Z0_Q4g0lQ4j0pQ5O1QQ5Y1]Q5d1fU5s2Z2^2aQ5v2_Q6w4[Q7P4iQ7Q4kQ7W4tQ7a5PQ7g5XS7v5t5xQ7x5wQ8f6}Q8n7bQ8s7hQ8z7wQ9Y8gQ9_8oQ9c8{R9k9`Q%ryQ'Z!iQ'f!tU+^%s%t%uQ,u&|U-Y'[']'^S-^'b'lQ/d*^S0_+_+`Q1z,wS2W-Z-[Q2_-cQ3v/hQ4[0`Q5o2QQ5r2XQ5w2`R6m3zS$wi;`R*n%RU%Qi%R;`R/v*lQ$viS(k#u+YQ(o#wS)[$c$dQ*Q$xQ*Y${Q*q%WQ*r%XQ*v%]Q.Y:^Q.Z:`Q.[:bQ.x)qS.})w/PQ/R)zQ/S)|Q/T)}Q/]*UQ/b*[Q/t*jQ/u*kh0U+V.T0|2n4{6P7]7|8l9O9^9fQ0p+qQ0r+tQ2q:iQ2r:kQ2s:mQ2t._S3Y:X:YQ3m/^Q3n/_Q3r/aQ4S/|Q4k0qQ4m0tQ6T:qQ6U:sQ6Y:_Q6Z:aQ6[:cQ6a3fQ6h3pQ6l3xQ6r4OQ6t4WQ6v4YQ8R:nQ8S:jQ8T:lQ8]6gQ8a6pQ9Q:rQ9R:tQ9S8XQ9g:wQ9p:xQ;Q;`Q;^;hQ;_;iQ;j;lR;k;mnpOXst!Z#c%f&i&k&l&n,b,g1g1jQ!fPS#eZ#nQ&s!`U'_!o4r7ZQ'u#RQ(x#{Q)i$mS,Z&b&eQ,`&fQ,m&rQ,r&zQ-U'XQ.f(vQ.v)jQ0Q*|Q0X+WQ1c,_Q2U-WQ2l.UQ3a.qQ4Q/zQ4y0}Q5[1_Q5]1`Q5a1bQ5c1dQ5h1lQ6O2oQ6_3^Q7_4|Q7k5^Q7l5_Q7n5bQ8O6SQ8m7`R8w7o#WcOPXZst!Z!`!o#c#n#{%f&b&e&f&i&k&l&n&r&z'X(v*|+W,_,b,g-W.U/z0}1_1`1b1d1g1j1l2o4r4|5^5_5b6S7Z7`7oQ#XWQ#dYQ%juQ%kvS%mw!gS'x#V'{Q(O#YQ(j#tQ(q#xQ(y$OQ(z$PQ({$QQ(|$RQ(}$SQ)O$TQ)P$UQ)Q$VQ)R$WQ)S$XQ)T$YQ)V$[Q)Y$aQ)^$eW)h$m)j.q3^Q+T%lQ+i%yS,x'O1{Q-g'iS-l'y-nQ-q(RQ-s(YQ.^(nQ.d(rQ.h9qQ.j9tQ.k9uQ.l9xQ.{)uQ/}*xQ1v,sQ1y,vQ2Z-`Q2b-tQ2v.bQ2{9yQ2|9zQ2}9{Q3O9|Q3P9}Q3Q:OQ3R:PQ3S:QQ3T:RQ3U:SQ3V:TQ3W:UQ3X.iQ3[:ZQ3]:dQ3b:VQ4T0PQ4]0aQ5n:eQ5t2]Q5y2cQ6V2wQ6W:fQ6]:hQ6^:oQ7U4pQ7s5lQ7w5uQ8Q:pQ8U:uQ8V:vQ8{7yQ9Z8hQ9b8yQ9s#RR;V;cR#ZWR'Q!eY!tQ'V-S0z4uS&|!e,zQ'b!rS'l!u!xS'n!y4wS,w&}'US-c'c'dQ-e'eQ2Q-QR2`-dR(p#wR(s#xQ!fQT-R'V-S]!qQ!r'V-S0z4uQ#o]R'`9rT#jZ%^S#iZ%^S%dm,^U(]#g#h#kS-w(^(_Q-{(`Q0R*}Q2e-xU2f-y-z-|S5{2g2hR7z5|`#]W#V#Y%a'y(S*z-rr#fZm#g#h#k%^(^(_(`*}-x-y-z-|2g2h5|Q1a,^Q1w,tQ5j1oQ7r5kT:}'O*{T#`W%aS#_W%aS'z#V(SS(P#Y*zS,y'O*{T-m'y-rT'T!e%bQ$kfR)o$pT)d$k)eR3`.pT*T$x*VR*]${Q0V+VQ2j.TQ4x0|Q6Q2nQ7^4{Q7}6PQ8j7]Q8|7|Q9]8lQ9e9OQ9j9^R9m9fnqOXst!Z#c%f&i&k&l&n,b,g1g1jQ&c!VR,V&`tmOXst!U!V!Z#c%f&`&i&k&l&n,b,g1g1jR,^&fT%em,^R0v+vR,U&^Q%||R+n%}R+d%wT&g!W&jT&h!W&jT1i,g1j\",\n  nodeNames: \"\u26A0 ArithOp ArithOp LineComment BlockComment Script Hashbang ExportDeclaration export Star as VariableName String Escape from ; default FunctionDeclaration async function VariableDefinition > TypeParamList TypeDefinition extends ThisType this LiteralType ArithOp Number BooleanLiteral TemplateType InterpolationEnd Interpolation InterpolationStart NullType null VoidType void TypeofType typeof MemberExpression . ?. PropertyName [ TemplateString Escape Interpolation super RegExp ] ArrayExpression Spread , } { ObjectExpression Property async get set PropertyDefinition Block : NewExpression new TypeArgList CompareOp < ) ( ArgList UnaryExpression delete LogicOp BitOp YieldExpression yield AwaitExpression await ParenthesizedExpression ClassExpression class ClassBody MethodDeclaration Decorator @ MemberExpression PrivatePropertyName CallExpression declare Privacy static abstract override PrivatePropertyDefinition PropertyDeclaration readonly accessor Optional TypeAnnotation Equals StaticBlock FunctionExpression ArrowFunction ParamList ParamList ArrayPattern ObjectPattern PatternProperty Privacy readonly Arrow MemberExpression BinaryExpression ArithOp ArithOp ArithOp ArithOp BitOp CompareOp instanceof satisfies in const CompareOp BitOp BitOp BitOp LogicOp LogicOp ConditionalExpression LogicOp LogicOp AssignmentExpression UpdateOp PostfixExpression CallExpression TaggedTemplateExpression DynamicImport import ImportMeta JSXElement JSXSelfCloseEndTag JSXStartTag JSXSelfClosingTag JSXIdentifier JSXBuiltin JSXIdentifier JSXNamespacedName JSXMemberExpression JSXSpreadAttribute JSXAttribute JSXAttributeValue JSXEscape JSXEndTag JSXOpenTag JSXFragmentTag JSXText JSXEscape JSXStartCloseTag JSXCloseTag PrefixCast ArrowFunction TypeParamList SequenceExpression KeyofType keyof UniqueType unique ImportType InferredType infer TypeName ParenthesizedType FunctionSignature ParamList NewSignature IndexedType TupleType Label ArrayType ReadonlyType ObjectType MethodType PropertyType IndexSignature PropertyDefinition CallSignature TypePredicate is NewSignature new UnionType LogicOp IntersectionType LogicOp ConditionalType ParameterizedType ClassDeclaration abstract implements type VariableDeclaration let var using TypeAliasDeclaration InterfaceDeclaration interface EnumDeclaration enum EnumBody NamespaceDeclaration namespace module AmbientDeclaration declare GlobalDeclaration global ClassDeclaration ClassBody AmbientFunctionDeclaration ExportGroup VariableName VariableName ImportDeclaration ImportGroup ForStatement for ForSpec ForInSpec ForOfSpec of WhileStatement while WithStatement with DoStatement do IfStatement if else SwitchStatement switch SwitchBody CaseLabel case DefaultLabel TryStatement try CatchClause catch FinallyClause finally ReturnStatement return ThrowStatement throw BreakStatement break ContinueStatement continue DebuggerStatement debugger LabeledStatement ExpressionStatement SingleExpression SingleClassItem\",\n  maxTerm: 367,\n  context: trackNewline,\n  nodeProps: [\n    [\"group\", -26,7,15,17,63,200,204,208,209,211,214,217,227,229,235,237,239,241,244,250,256,258,260,262,264,266,267,\"Statement\",-32,11,12,26,29,30,36,46,49,50,52,57,65,73,77,79,81,82,104,105,114,115,132,135,137,138,139,140,142,143,163,164,166,\"Expression\",-23,25,27,31,35,37,39,167,169,171,172,174,175,176,178,179,180,182,183,184,194,196,198,199,\"Type\",-3,85,97,103,\"ClassItem\"],\n    [\"openedBy\", 32,\"InterpolationStart\",51,\"[\",55,\"{\",70,\"(\",144,\"JSXStartTag\",156,\"JSXStartTag JSXStartCloseTag\"],\n    [\"closedBy\", 34,\"InterpolationEnd\",45,\"]\",56,\"}\",71,\")\",145,\"JSXSelfCloseEndTag JSXEndTag\",161,\"JSXEndTag\"]\n  ],\n  propSources: [jsHighlight],\n  skippedNodes: [0,3,4,270],\n  repeatNodeCount: 33,\n  tokenData: \"$Fl(CSR!bOX%ZXY+gYZ-yZ[+g[]%Z]^.c^p%Zpq+gqr/mrs3cst:_tuEruvJSvwLkwx! Yxy!'iyz!(sz{!)}{|!,q|}!.O}!O!,q!O!P!/Y!P!Q!9j!Q!R#8g!R![#:v![!]#Gv!]!^#IS!^!_#J^!_!`#Nu!`!a$#a!a!b$(n!b!c$,m!c!}Er!}#O$-w#O#P$/R#P#Q$4j#Q#R$5t#R#SEr#S#T$7R#T#o$8]#o#p$<m#p#q$=c#q#r$>s#r#s$@P#s$f%Z$f$g+g$g#BYEr#BY#BZ$AZ#BZ$ISEr$IS$I_$AZ$I_$I|Er$I|$I}$Df$I}$JO$Df$JO$JTEr$JT$JU$AZ$JU$KVEr$KV$KW$AZ$KW&FUEr&FU&FV$AZ&FV;'SEr;'S;=`I|<%l?HTEr?HT?HU$AZ?HUOEr(n%d_$e&j'yp'|!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z&j&hT$e&jO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c&j&zP;=`<%l&c'|'U]$e&j'|!bOY&}YZ&cZw&}wx&cx!^&}!^!_'}!_#O&}#O#P&c#P#o&}#o#p'}#p;'S&};'S;=`(l<%lO&}!b(SU'|!bOY'}Zw'}x#O'}#P;'S'};'S;=`(f<%lO'}!b(iP;=`<%l'}'|(oP;=`<%l&}'[(y]$e&j'ypOY(rYZ&cZr(rrs&cs!^(r!^!_)r!_#O(r#O#P&c#P#o(r#o#p)r#p;'S(r;'S;=`*a<%lO(rp)wU'ypOY)rZr)rs#O)r#P;'S)r;'S;=`*Z<%lO)rp*^P;=`<%l)r'[*dP;=`<%l(r#S*nX'yp'|!bOY*gZr*grs'}sw*gwx)rx#O*g#P;'S*g;'S;=`+Z<%lO*g#S+^P;=`<%l*g(n+dP;=`<%l%Z(CS+rq$e&j'yp'|!b'o(;dOX%ZXY+gYZ&cZ[+g[p%Zpq+gqr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p$f%Z$f$g+g$g#BY%Z#BY#BZ+g#BZ$IS%Z$IS$I_+g$I_$JT%Z$JT$JU+g$JU$KV%Z$KV$KW+g$KW&FU%Z&FU&FV+g&FV;'S%Z;'S;=`+a<%l?HT%Z?HT?HU+g?HUO%Z(CS.ST'z#S$e&j'p(;dO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c(CS.n_$e&j'yp'|!b'p(;dOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z%#`/x`$e&j!m$Ip'yp'|!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`0z!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z%#S1V`#r$Id$e&j'yp'|!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`2X!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z%#S2d_#r$Id$e&j'yp'|!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z$2b3l_'x$(n$e&j'|!bOY4kYZ5qZr4krs7nsw4kwx5qx!^4k!^!_8p!_#O4k#O#P5q#P#o4k#o#p8p#p;'S4k;'S;=`:X<%lO4k*r4r_$e&j'|!bOY4kYZ5qZr4krs7nsw4kwx5qx!^4k!^!_8p!_#O4k#O#P5q#P#o4k#o#p8p#p;'S4k;'S;=`:X<%lO4k)`5vX$e&jOr5qrs6cs!^5q!^!_6y!_#o5q#o#p6y#p;'S5q;'S;=`7h<%lO5q)`6jT$`#t$e&jO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c#t6|TOr6yrs7]s;'S6y;'S;=`7b<%lO6y#t7bO$`#t#t7eP;=`<%l6y)`7kP;=`<%l5q*r7w]$`#t$e&j'|!bOY&}YZ&cZw&}wx&cx!^&}!^!_'}!_#O&}#O#P&c#P#o&}#o#p'}#p;'S&};'S;=`(l<%lO&}%W8uZ'|!bOY8pYZ6yZr8prs9hsw8pwx6yx#O8p#O#P6y#P;'S8p;'S;=`:R<%lO8p%W9oU$`#t'|!bOY'}Zw'}x#O'}#P;'S'};'S;=`(f<%lO'}%W:UP;=`<%l8p*r:[P;=`<%l4k#%|:hh$e&j'yp'|!bOY%ZYZ&cZq%Zqr<Srs&}st%ZtuCruw%Zwx(rx!^%Z!^!_*g!_!c%Z!c!}Cr!}#O%Z#O#P&c#P#R%Z#R#SCr#S#T%Z#T#oCr#o#p*g#p$g%Z$g;'SCr;'S;=`El<%lOCr(r<__US$e&j'yp'|!bOY<SYZ&cZr<Srs=^sw<Swx@nx!^<S!^!_Bm!_#O<S#O#P>`#P#o<S#o#pBm#p;'S<S;'S;=`Cl<%lO<S(Q=g]US$e&j'|!bOY=^YZ&cZw=^wx>`x!^=^!^!_?q!_#O=^#O#P>`#P#o=^#o#p?q#p;'S=^;'S;=`@h<%lO=^&n>gXUS$e&jOY>`YZ&cZ!^>`!^!_?S!_#o>`#o#p?S#p;'S>`;'S;=`?k<%lO>`S?XSUSOY?SZ;'S?S;'S;=`?e<%lO?SS?hP;=`<%l?S&n?nP;=`<%l>`!f?xWUS'|!bOY?qZw?qwx?Sx#O?q#O#P?S#P;'S?q;'S;=`@b<%lO?q!f@eP;=`<%l?q(Q@kP;=`<%l=^'`@w]US$e&j'ypOY@nYZ&cZr@nrs>`s!^@n!^!_Ap!_#O@n#O#P>`#P#o@n#o#pAp#p;'S@n;'S;=`Bg<%lO@ntAwWUS'ypOYApZrAprs?Ss#OAp#O#P?S#P;'SAp;'S;=`Ba<%lOAptBdP;=`<%lAp'`BjP;=`<%l@n#WBvYUS'yp'|!bOYBmZrBmrs?qswBmwxApx#OBm#O#P?S#P;'SBm;'S;=`Cf<%lOBm#WCiP;=`<%lBm(rCoP;=`<%l<S#%|C}i$e&j(c!L^'yp'|!bOY%ZYZ&cZr%Zrs&}st%ZtuCruw%Zwx(rx!Q%Z!Q![Cr![!^%Z!^!_*g!_!c%Z!c!}Cr!}#O%Z#O#P&c#P#R%Z#R#SCr#S#T%Z#T#oCr#o#p*g#p$g%Z$g;'SCr;'S;=`El<%lOCr#%|EoP;=`<%lCr(CSFRk$e&j'yp'|!b(W!LY'v&;d$X#tOY%ZYZ&cZr%Zrs&}st%ZtuEruw%Zwx(rx}%Z}!OGv!O!Q%Z!Q![Er![!^%Z!^!_*g!_!c%Z!c!}Er!}#O%Z#O#P&c#P#R%Z#R#SEr#S#T%Z#T#oEr#o#p*g#p$g%Z$g;'SEr;'S;=`I|<%lOEr+dHRk$e&j'yp'|!b$X#tOY%ZYZ&cZr%Zrs&}st%ZtuGvuw%Zwx(rx}%Z}!OGv!O!Q%Z!Q![Gv![!^%Z!^!_*g!_!c%Z!c!}Gv!}#O%Z#O#P&c#P#R%Z#R#SGv#S#T%Z#T#oGv#o#p*g#p$g%Z$g;'SGv;'S;=`Iv<%lOGv+dIyP;=`<%lGv(CSJPP;=`<%lEr%#SJ_`$e&j'yp'|!b#j$IdOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z%#SKl_$e&j#|$Id'yp'|!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z%DfLva(l%<v$e&j'yp'|!bOY%ZYZ&cZr%Zrs&}sv%ZvwM{wx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z%#SNW`$e&j#v$Id'yp'|!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z$2b! c_'{$)`$e&j'ypOY!!bYZ!#hZr!!brs!#hsw!!bwx!$xx!^!!b!^!_!%z!_#O!!b#O#P!#h#P#o!!b#o#p!%z#p;'S!!b;'S;=`!'c<%lO!!b*Q!!i_$e&j'ypOY!!bYZ!#hZr!!brs!#hsw!!bwx!$xx!^!!b!^!_!%z!_#O!!b#O#P!#h#P#o!!b#o#p!%z#p;'S!!b;'S;=`!'c<%lO!!b)`!#mX$e&jOw!#hwx6cx!^!#h!^!_!$Y!_#o!#h#o#p!$Y#p;'S!#h;'S;=`!$r<%lO!#h#t!$]TOw!$Ywx7]x;'S!$Y;'S;=`!$l<%lO!$Y#t!$oP;=`<%l!$Y)`!$uP;=`<%l!#h*Q!%R]$`#t$e&j'ypOY(rYZ&cZr(rrs&cs!^(r!^!_)r!_#O(r#O#P&c#P#o(r#o#p)r#p;'S(r;'S;=`*a<%lO(r$f!&PZ'ypOY!%zYZ!$YZr!%zrs!$Ysw!%zwx!&rx#O!%z#O#P!$Y#P;'S!%z;'S;=`!']<%lO!%z$f!&yU$`#t'ypOY)rZr)rs#O)r#P;'S)r;'S;=`*Z<%lO)r$f!'`P;=`<%l!%z*Q!'fP;=`<%l!!b(*Q!'t_!i(!b$e&j'yp'|!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z!'l!)O_!hM|$e&j'yp'|!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'+h!*[b$e&j'yp'|!b'w#)d#k$IdOY%ZYZ&cZr%Zrs&}sw%Zwx(rxz%Zz{!+d{!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z%#S!+o`$e&j'yp'|!b#h$IdOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z&-O!,|`$e&j'yp'|!bl&%`OY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z&C[!.Z_!W&;l$e&j'yp'|!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(CS!/ec$e&j'yp'|!bz'<nOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!O%Z!O!P!0p!P!Q%Z!Q![!3Y![!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z!'d!0ya$e&j'yp'|!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!O%Z!O!P!2O!P!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z!'d!2Z_!VMt$e&j'yp'|!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z$/l!3eg$e&j'yp'|!bm$'|OY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![!3Y![!^%Z!^!_*g!_!g%Z!g!h!4|!h#O%Z#O#P&c#P#R%Z#R#S!3Y#S#X%Z#X#Y!4|#Y#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z$/l!5Vg$e&j'yp'|!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx{%Z{|!6n|}%Z}!O!6n!O!Q%Z!Q![!8S![!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S!8S#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z$/l!6wc$e&j'yp'|!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![!8S![!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S!8S#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z$/l!8_c$e&j'yp'|!bm$'|OY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![!8S![!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S!8S#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(CS!9uf$e&j'yp'|!b#i$IdOY!;ZYZ&cZr!;Zrs!<nsw!;Zwx!Kpxz!;Zz{#,f{!P!;Z!P!Q#-{!Q!^!;Z!^!_#'Z!_!`#5k!`!a#7Q!a!}!;Z!}#O#*}#O#P!Dj#P#o!;Z#o#p#'Z#p;'S!;Z;'S;=`#,`<%lO!;Z(r!;fb$e&j'yp'|!b!SSOY!;ZYZ&cZr!;Zrs!<nsw!;Zwx!Kpx!P!;Z!P!Q#%Z!Q!^!;Z!^!_#'Z!_!}!;Z!}#O#*}#O#P!Dj#P#o!;Z#o#p#'Z#p;'S!;Z;'S;=`#,`<%lO!;Z(Q!<w`$e&j'|!b!SSOY!<nYZ&cZw!<nwx!=yx!P!<n!P!Q!Eb!Q!^!<n!^!_!GY!_!}!<n!}#O!Ja#O#P!Dj#P#o!<n#o#p!GY#p;'S!<n;'S;=`!Kj<%lO!<n&n!>Q^$e&j!SSOY!=yYZ&cZ!P!=y!P!Q!>|!Q!^!=y!^!_!@Y!_!}!=y!}#O!Bw#O#P!Dj#P#o!=y#o#p!@Y#p;'S!=y;'S;=`!E[<%lO!=y&n!?Ta$e&j!SSO!^&c!_#Z&c#Z#[!>|#[#]&c#]#^!>|#^#a&c#a#b!>|#b#g&c#g#h!>|#h#i&c#i#j!>|#j#m&c#m#n!>|#n#o&c#p;'S&c;'S;=`&w<%lO&cS!@_X!SSOY!@YZ!P!@Y!P!Q!@z!Q!}!@Y!}#O!Ac#O#P!Bb#P;'S!@Y;'S;=`!Bq<%lO!@YS!APU!SS#Z#[!@z#]#^!@z#a#b!@z#g#h!@z#i#j!@z#m#n!@zS!AfVOY!AcZ#O!Ac#O#P!A{#P#Q!@Y#Q;'S!Ac;'S;=`!B[<%lO!AcS!BOSOY!AcZ;'S!Ac;'S;=`!B[<%lO!AcS!B_P;=`<%l!AcS!BeSOY!@YZ;'S!@Y;'S;=`!Bq<%lO!@YS!BtP;=`<%l!@Y&n!B|[$e&jOY!BwYZ&cZ!^!Bw!^!_!Ac!_#O!Bw#O#P!Cr#P#Q!=y#Q#o!Bw#o#p!Ac#p;'S!Bw;'S;=`!Dd<%lO!Bw&n!CwX$e&jOY!BwYZ&cZ!^!Bw!^!_!Ac!_#o!Bw#o#p!Ac#p;'S!Bw;'S;=`!Dd<%lO!Bw&n!DgP;=`<%l!Bw&n!DoX$e&jOY!=yYZ&cZ!^!=y!^!_!@Y!_#o!=y#o#p!@Y#p;'S!=y;'S;=`!E[<%lO!=y&n!E_P;=`<%l!=y(Q!Eki$e&j'|!b!SSOY&}YZ&cZw&}wx&cx!^&}!^!_'}!_#O&}#O#P&c#P#Z&}#Z#[!Eb#[#]&}#]#^!Eb#^#a&}#a#b!Eb#b#g&}#g#h!Eb#h#i&}#i#j!Eb#j#m&}#m#n!Eb#n#o&}#o#p'}#p;'S&};'S;=`(l<%lO&}!f!GaZ'|!b!SSOY!GYZw!GYwx!@Yx!P!GY!P!Q!HS!Q!}!GY!}#O!Ic#O#P!Bb#P;'S!GY;'S;=`!JZ<%lO!GY!f!HZb'|!b!SSOY'}Zw'}x#O'}#P#Z'}#Z#[!HS#[#]'}#]#^!HS#^#a'}#a#b!HS#b#g'}#g#h!HS#h#i'}#i#j!HS#j#m'}#m#n!HS#n;'S'};'S;=`(f<%lO'}!f!IhX'|!bOY!IcZw!Icwx!Acx#O!Ic#O#P!A{#P#Q!GY#Q;'S!Ic;'S;=`!JT<%lO!Ic!f!JWP;=`<%l!Ic!f!J^P;=`<%l!GY(Q!Jh^$e&j'|!bOY!JaYZ&cZw!Jawx!Bwx!^!Ja!^!_!Ic!_#O!Ja#O#P!Cr#P#Q!<n#Q#o!Ja#o#p!Ic#p;'S!Ja;'S;=`!Kd<%lO!Ja(Q!KgP;=`<%l!Ja(Q!KmP;=`<%l!<n'`!Ky`$e&j'yp!SSOY!KpYZ&cZr!Kprs!=ys!P!Kp!P!Q!L{!Q!^!Kp!^!_!Ns!_!}!Kp!}#O##z#O#P!Dj#P#o!Kp#o#p!Ns#p;'S!Kp;'S;=`#%T<%lO!Kp'`!MUi$e&j'yp!SSOY(rYZ&cZr(rrs&cs!^(r!^!_)r!_#O(r#O#P&c#P#Z(r#Z#[!L{#[#](r#]#^!L{#^#a(r#a#b!L{#b#g(r#g#h!L{#h#i(r#i#j!L{#j#m(r#m#n!L{#n#o(r#o#p)r#p;'S(r;'S;=`*a<%lO(rt!NzZ'yp!SSOY!NsZr!Nsrs!@Ys!P!Ns!P!Q# m!Q!}!Ns!}#O#!|#O#P!Bb#P;'S!Ns;'S;=`##t<%lO!Nst# tb'yp!SSOY)rZr)rs#O)r#P#Z)r#Z#[# m#[#])r#]#^# m#^#a)r#a#b# m#b#g)r#g#h# m#h#i)r#i#j# m#j#m)r#m#n# m#n;'S)r;'S;=`*Z<%lO)rt##RX'ypOY#!|Zr#!|rs!Acs#O#!|#O#P!A{#P#Q!Ns#Q;'S#!|;'S;=`##n<%lO#!|t##qP;=`<%l#!|t##wP;=`<%l!Ns'`#$R^$e&j'ypOY##zYZ&cZr##zrs!Bws!^##z!^!_#!|!_#O##z#O#P!Cr#P#Q!Kp#Q#o##z#o#p#!|#p;'S##z;'S;=`#$}<%lO##z'`#%QP;=`<%l##z'`#%WP;=`<%l!Kp(r#%fk$e&j'yp'|!b!SSOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#Z%Z#Z#[#%Z#[#]%Z#]#^#%Z#^#a%Z#a#b#%Z#b#g%Z#g#h#%Z#h#i%Z#i#j#%Z#j#m%Z#m#n#%Z#n#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z#W#'d]'yp'|!b!SSOY#'ZZr#'Zrs!GYsw#'Zwx!Nsx!P#'Z!P!Q#(]!Q!}#'Z!}#O#)w#O#P!Bb#P;'S#'Z;'S;=`#*w<%lO#'Z#W#(fe'yp'|!b!SSOY*gZr*grs'}sw*gwx)rx#O*g#P#Z*g#Z#[#(]#[#]*g#]#^#(]#^#a*g#a#b#(]#b#g*g#g#h#(]#h#i*g#i#j#(]#j#m*g#m#n#(]#n;'S*g;'S;=`+Z<%lO*g#W#*OZ'yp'|!bOY#)wZr#)wrs!Icsw#)wwx#!|x#O#)w#O#P!A{#P#Q#'Z#Q;'S#)w;'S;=`#*q<%lO#)w#W#*tP;=`<%l#)w#W#*zP;=`<%l#'Z(r#+W`$e&j'yp'|!bOY#*}YZ&cZr#*}rs!Jasw#*}wx##zx!^#*}!^!_#)w!_#O#*}#O#P!Cr#P#Q!;Z#Q#o#*}#o#p#)w#p;'S#*};'S;=`#,Y<%lO#*}(r#,]P;=`<%l#*}(r#,cP;=`<%l!;Z(CS#,sb$e&j'yp'|!b'q(;d!SSOY!;ZYZ&cZr!;Zrs!<nsw!;Zwx!Kpx!P!;Z!P!Q#%Z!Q!^!;Z!^!_#'Z!_!}!;Z!}#O#*}#O#P!Dj#P#o!;Z#o#p#'Z#p;'S!;Z;'S;=`#,`<%lO!;Z(CS#.W_$e&j'yp'|!bR(;dOY#-{YZ&cZr#-{rs#/Vsw#-{wx#2gx!^#-{!^!_#4f!_#O#-{#O#P#0X#P#o#-{#o#p#4f#p;'S#-{;'S;=`#5e<%lO#-{(Bb#/`]$e&j'|!bR(;dOY#/VYZ&cZw#/Vwx#0Xx!^#/V!^!_#1j!_#O#/V#O#P#0X#P#o#/V#o#p#1j#p;'S#/V;'S;=`#2a<%lO#/V(AO#0`X$e&jR(;dOY#0XYZ&cZ!^#0X!^!_#0{!_#o#0X#o#p#0{#p;'S#0X;'S;=`#1d<%lO#0X(;d#1QSR(;dOY#0{Z;'S#0{;'S;=`#1^<%lO#0{(;d#1aP;=`<%l#0{(AO#1gP;=`<%l#0X(<v#1qW'|!bR(;dOY#1jZw#1jwx#0{x#O#1j#O#P#0{#P;'S#1j;'S;=`#2Z<%lO#1j(<v#2^P;=`<%l#1j(Bb#2dP;=`<%l#/V(Ap#2p]$e&j'ypR(;dOY#2gYZ&cZr#2grs#0Xs!^#2g!^!_#3i!_#O#2g#O#P#0X#P#o#2g#o#p#3i#p;'S#2g;'S;=`#4`<%lO#2g(<U#3pW'ypR(;dOY#3iZr#3irs#0{s#O#3i#O#P#0{#P;'S#3i;'S;=`#4Y<%lO#3i(<U#4]P;=`<%l#3i(Ap#4cP;=`<%l#2g(=h#4oY'yp'|!bR(;dOY#4fZr#4frs#1jsw#4fwx#3ix#O#4f#O#P#0{#P;'S#4f;'S;=`#5_<%lO#4f(=h#5bP;=`<%l#4f(CS#5hP;=`<%l#-{%#W#5xb$e&j#|$Id'yp'|!b!SSOY!;ZYZ&cZr!;Zrs!<nsw!;Zwx!Kpx!P!;Z!P!Q#%Z!Q!^!;Z!^!_#'Z!_!}!;Z!}#O#*}#O#P!Dj#P#o!;Z#o#p#'Z#p;'S!;Z;'S;=`#,`<%lO!;Z+h#7_b$U#t$e&j'yp'|!b!SSOY!;ZYZ&cZr!;Zrs!<nsw!;Zwx!Kpx!P!;Z!P!Q#%Z!Q!^!;Z!^!_#'Z!_!}!;Z!}#O#*}#O#P!Dj#P#o!;Z#o#p#'Z#p;'S!;Z;'S;=`#,`<%lO!;Z$/l#8rp$e&j'yp'|!bm$'|OY%ZYZ&cZr%Zrs&}sw%Zwx(rx!O%Z!O!P!3Y!P!Q%Z!Q![#:v![!^%Z!^!_*g!_!g%Z!g!h!4|!h#O%Z#O#P&c#P#R%Z#R#S#:v#S#U%Z#U#V#>Q#V#X%Z#X#Y!4|#Y#b%Z#b#c#<v#c#d#AY#d#l%Z#l#m#D[#m#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z$/l#;Rk$e&j'yp'|!bm$'|OY%ZYZ&cZr%Zrs&}sw%Zwx(rx!O%Z!O!P!3Y!P!Q%Z!Q![#:v![!^%Z!^!_*g!_!g%Z!g!h!4|!h#O%Z#O#P&c#P#R%Z#R#S#:v#S#X%Z#X#Y!4|#Y#b%Z#b#c#<v#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z$/l#=R_$e&j'yp'|!bm$'|OY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z$/l#>Zd$e&j'yp'|!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!R#?i!R!S#?i!S!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#?i#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z$/l#?tf$e&j'yp'|!bm$'|OY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!R#?i!R!S#?i!S!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#?i#S#b%Z#b#c#<v#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z$/l#Acc$e&j'yp'|!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!Y#Bn!Y!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#Bn#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z$/l#Bye$e&j'yp'|!bm$'|OY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!Y#Bn!Y!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#Bn#S#b%Z#b#c#<v#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z$/l#Deg$e&j'yp'|!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![#E|![!^%Z!^!_*g!_!c%Z!c!i#E|!i#O%Z#O#P&c#P#R%Z#R#S#E|#S#T%Z#T#Z#E|#Z#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z$/l#FXi$e&j'yp'|!bm$'|OY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![#E|![!^%Z!^!_*g!_!c%Z!c!i#E|!i#O%Z#O#P&c#P#R%Z#R#S#E|#S#T%Z#T#Z#E|#Z#b%Z#b#c#<v#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z%Gh#HT_!b$b$e&j#z%<f'yp'|!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z)[#I___l$e&j'yp'|!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(CS#Jm^(P!*v!f'.r'yp'|!b$V)d(pSOY*gZr*grs'}sw*gwx)rx!P*g!P!Q#Ki!Q!^*g!^!_#L_!_!`#NP!`#O*g#P;'S*g;'S;=`+Z<%lO*g(n#KrX$g&j'yp'|!bOY*gZr*grs'}sw*gwx)rx#O*g#P;'S*g;'S;=`+Z<%lO*g$Kh#LhZ#l$Id'yp'|!bOY*gZr*grs'}sw*gwx)rx!_*g!_!`#MZ!`#O*g#P;'S*g;'S;=`+Z<%lO*g$Kh#MdX#|$Id'yp'|!bOY*gZr*grs'}sw*gwx)rx#O*g#P;'S*g;'S;=`+Z<%lO*g$Kh#NYX#m$Id'yp'|!bOY*gZr*grs'}sw*gwx)rx#O*g#P;'S*g;'S;=`+Z<%lO*g%Gh$ Qa#Y%?x$e&j'yp'|!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`0z!`!a$!V!a#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z%#W$!b_#e$Ih$e&j'yp'|!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z%Gh$#paeBf#m$Id$b#|$e&j'yp'|!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`$$u!`!a$&P!a#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z%#S$%Q_#m$Id$e&j'yp'|!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z%#S$&[a#l$Id$e&j'yp'|!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`!a$'a!a#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z%#S$'l`#l$Id$e&j'yp'|!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'+h$(yc(d$Ip$e&j'yp'|!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!O%Z!O!P$*U!P!^%Z!^!_*g!_!a%Z!a!b$+`!b#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'+`$*a_{'#p$e&j'yp'|!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z%#S$+k`$e&j#w$Id'yp'|!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z#&^$,x_!y!Ln$e&j'yp'|!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(@^$.S_}(8n$e&j'yp'|!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(n$/WZ$e&jO!^$/y!^!_$0a!_#i$/y#i#j$0f#j#l$/y#l#m$2X#m#o$/y#o#p$0a#p;'S$/y;'S;=`$4d<%lO$/y(n$0QT]#S$e&jO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c#S$0fO]#S(n$0k[$e&jO!Q&c!Q![$1a![!^&c!_!c&c!c!i$1a!i#T&c#T#Z$1a#Z#o&c#o#p$3w#p;'S&c;'S;=`&w<%lO&c(n$1fZ$e&jO!Q&c!Q![$2X![!^&c!_!c&c!c!i$2X!i#T&c#T#Z$2X#Z#o&c#p;'S&c;'S;=`&w<%lO&c(n$2^Z$e&jO!Q&c!Q![$3P![!^&c!_!c&c!c!i$3P!i#T&c#T#Z$3P#Z#o&c#p;'S&c;'S;=`&w<%lO&c(n$3UZ$e&jO!Q&c!Q![$/y![!^&c!_!c&c!c!i$/y!i#T&c#T#Z$/y#Z#o&c#p;'S&c;'S;=`&w<%lO&c#S$3zR!Q![$4T!c!i$4T#T#Z$4T#S$4WS!Q![$4T!c!i$4T#T#Z$4T#q#r$0a(n$4gP;=`<%l$/y!2r$4u_!T!+S$e&j'yp'|!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z%#S$6P`#t$Id$e&j'yp'|!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z&,v$7^_$e&j'yp'|!b(T&%WOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(CS$8lk$e&j'yp'|!b(W!LY'v&;d$Z#tOY%ZYZ&cZr%Zrs&}st%Ztu$8]uw%Zwx(rx}%Z}!O$:a!O!Q%Z!Q![$8]![!^%Z!^!_*g!_!c%Z!c!}$8]!}#O%Z#O#P&c#P#R%Z#R#S$8]#S#T%Z#T#o$8]#o#p*g#p$g%Z$g;'S$8];'S;=`$<g<%lO$8]+d$:lk$e&j'yp'|!b$Z#tOY%ZYZ&cZr%Zrs&}st%Ztu$:auw%Zwx(rx}%Z}!O$:a!O!Q%Z!Q![$:a![!^%Z!^!_*g!_!c%Z!c!}$:a!}#O%Z#O#P&c#P#R%Z#R#S$:a#S#T%Z#T#o$:a#o#p*g#p$g%Z$g;'S$:a;'S;=`$<a<%lO$:a+d$<dP;=`<%l$:a(CS$<jP;=`<%l$8]!5p$<vX!Y!3l'yp'|!bOY*gZr*grs'}sw*gwx)rx#O*g#P;'S*g;'S;=`+Z<%lO*g%Df$=na(k%<v$e&j'yp'|!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p#q$+`#q;'S%Z;'S;=`+a<%lO%Z%#`$?Q_!X$I`p`$e&j'yp'|!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(r$@[_!nS$e&j'yp'|!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(CS$Al|$e&j'yp'|!b'o(;d(W!LY'v&;d$X#tOX%ZXY+gYZ&cZ[+g[p%Zpq+gqr%Zrs&}st%ZtuEruw%Zwx(rx}%Z}!OGv!O!Q%Z!Q![Er![!^%Z!^!_*g!_!c%Z!c!}Er!}#O%Z#O#P&c#P#R%Z#R#SEr#S#T%Z#T#oEr#o#p*g#p$f%Z$f$g+g$g#BYEr#BY#BZ$AZ#BZ$ISEr$IS$I_$AZ$I_$JTEr$JT$JU$AZ$JU$KVEr$KV$KW$AZ$KW&FUEr&FU&FV$AZ&FV;'SEr;'S;=`I|<%l?HTEr?HT?HU$AZ?HUOEr(CS$Dwk$e&j'yp'|!b'p(;d(W!LY'v&;d$X#tOY%ZYZ&cZr%Zrs&}st%ZtuEruw%Zwx(rx}%Z}!OGv!O!Q%Z!Q![Er![!^%Z!^!_*g!_!c%Z!c!}Er!}#O%Z#O#P&c#P#R%Z#R#SEr#S#T%Z#T#oEr#o#p*g#p$g%Z$g;'SEr;'S;=`I|<%lOEr\",\n  tokenizers: [noSemicolon, incdecToken, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, insertSemicolon, new LocalTokenGroup(\"$S~RRtu[#O#Pg#S#T#|~_P#o#pb~gOr~~jVO#i!P#i#j!U#j#l!P#l#m!q#m;'S!P;'S;=`#v<%lO!P~!UO!P~~!XS!Q![!e!c!i!e#T#Z!e#o#p#Z~!hR!Q![!q!c!i!q#T#Z!q~!tR!Q![!}!c!i!}#T#Z!}~#QR!Q![!P!c!i!P#T#Z!P~#^R!Q![#g!c!i#g#T#Z#g~#jS!Q![#g!c!i#g#T#Z#g#q#r!P~#yP;=`<%l!P~$RO(V~~\", 141, 328), new LocalTokenGroup(\"j~RQYZXz{^~^O's~~aP!P!Qd~iO't~~\", 25, 310)],\n  topRules: {\"Script\":[0,5],\"SingleExpression\":[1,268],\"SingleClassItem\":[2,269]},\n  dialects: {jsx: 12842, ts: 12844},\n  dynamicPrecedences: {\"67\":1,\"77\":1,\"79\":1,\"164\":1,\"192\":1},\n  specialized: [{term: 314, get: (value) => spec_identifier[value] || -1},{term: 330, get: (value) => spec_word[value] || -1},{term: 68, get: (value) => spec_LessThan[value] || -1}],\n  tokenPrec: 12868\n});\n\nexport { parser };\n", "import { parser } from '@lezer/javascript';\nimport { syntaxTree, LRLanguage, indentNodeProp, continuedIndent, flatIndent, delimitedIndent, foldNodeProp, foldInside, defineLanguageFacet, sublanguageProp, LanguageSupport } from '@codemirror/language';\nimport { EditorSelection } from '@codemirror/state';\nimport { EditorView } from '@codemirror/view';\nimport { snippetCompletion, ifNotIn, completeFromList } from '@codemirror/autocomplete';\nimport { NodeWeakMap, IterMode } from '@lezer/common';\n\n/**\nA collection of JavaScript-related\n[snippets](https://codemirror.net/6/docs/ref/#autocomplete.snippet).\n*/\nconst snippets = [\n    /*@__PURE__*/snippetCompletion(\"function ${name}(${params}) {\\n\\t${}\\n}\", {\n        label: \"function\",\n        detail: \"definition\",\n        type: \"keyword\"\n    }),\n    /*@__PURE__*/snippetCompletion(\"for (let ${index} = 0; ${index} < ${bound}; ${index}++) {\\n\\t${}\\n}\", {\n        label: \"for\",\n        detail: \"loop\",\n        type: \"keyword\"\n    }),\n    /*@__PURE__*/snippetCompletion(\"for (let ${name} of ${collection}) {\\n\\t${}\\n}\", {\n        label: \"for\",\n        detail: \"of loop\",\n        type: \"keyword\"\n    }),\n    /*@__PURE__*/snippetCompletion(\"do {\\n\\t${}\\n} while (${})\", {\n        label: \"do\",\n        detail: \"loop\",\n        type: \"keyword\"\n    }),\n    /*@__PURE__*/snippetCompletion(\"while (${}) {\\n\\t${}\\n}\", {\n        label: \"while\",\n        detail: \"loop\",\n        type: \"keyword\"\n    }),\n    /*@__PURE__*/snippetCompletion(\"try {\\n\\t${}\\n} catch (${error}) {\\n\\t${}\\n}\", {\n        label: \"try\",\n        detail: \"/ catch block\",\n        type: \"keyword\"\n    }),\n    /*@__PURE__*/snippetCompletion(\"if (${}) {\\n\\t${}\\n}\", {\n        label: \"if\",\n        detail: \"block\",\n        type: \"keyword\"\n    }),\n    /*@__PURE__*/snippetCompletion(\"if (${}) {\\n\\t${}\\n} else {\\n\\t${}\\n}\", {\n        label: \"if\",\n        detail: \"/ else block\",\n        type: \"keyword\"\n    }),\n    /*@__PURE__*/snippetCompletion(\"class ${name} {\\n\\tconstructor(${params}) {\\n\\t\\t${}\\n\\t}\\n}\", {\n        label: \"class\",\n        detail: \"definition\",\n        type: \"keyword\"\n    }),\n    /*@__PURE__*/snippetCompletion(\"import {${names}} from \\\"${module}\\\"\\n${}\", {\n        label: \"import\",\n        detail: \"named\",\n        type: \"keyword\"\n    }),\n    /*@__PURE__*/snippetCompletion(\"import ${name} from \\\"${module}\\\"\\n${}\", {\n        label: \"import\",\n        detail: \"default\",\n        type: \"keyword\"\n    })\n];\n/**\nA collection of snippet completions for TypeScript. Includes the\nJavaScript [snippets](https://codemirror.net/6/docs/ref/#lang-javascript.snippets).\n*/\nconst typescriptSnippets = /*@__PURE__*/snippets.concat([\n    /*@__PURE__*/snippetCompletion(\"interface ${name} {\\n\\t${}\\n}\", {\n        label: \"interface\",\n        detail: \"definition\",\n        type: \"keyword\"\n    }),\n    /*@__PURE__*/snippetCompletion(\"type ${name} = ${type}\", {\n        label: \"type\",\n        detail: \"definition\",\n        type: \"keyword\"\n    }),\n    /*@__PURE__*/snippetCompletion(\"enum ${name} {\\n\\t${}\\n}\", {\n        label: \"enum\",\n        detail: \"definition\",\n        type: \"keyword\"\n    })\n]);\n\nconst cache = /*@__PURE__*/new NodeWeakMap();\nconst ScopeNodes = /*@__PURE__*/new Set([\n    \"Script\", \"Block\",\n    \"FunctionExpression\", \"FunctionDeclaration\", \"ArrowFunction\", \"MethodDeclaration\",\n    \"ForStatement\"\n]);\nfunction defID(type) {\n    return (node, def) => {\n        let id = node.node.getChild(\"VariableDefinition\");\n        if (id)\n            def(id, type);\n        return true;\n    };\n}\nconst functionContext = [\"FunctionDeclaration\"];\nconst gatherCompletions = {\n    FunctionDeclaration: /*@__PURE__*/defID(\"function\"),\n    ClassDeclaration: /*@__PURE__*/defID(\"class\"),\n    ClassExpression: () => true,\n    EnumDeclaration: /*@__PURE__*/defID(\"constant\"),\n    TypeAliasDeclaration: /*@__PURE__*/defID(\"type\"),\n    NamespaceDeclaration: /*@__PURE__*/defID(\"namespace\"),\n    VariableDefinition(node, def) { if (!node.matchContext(functionContext))\n        def(node, \"variable\"); },\n    TypeDefinition(node, def) { def(node, \"type\"); },\n    __proto__: null\n};\nfunction getScope(doc, node) {\n    let cached = cache.get(node);\n    if (cached)\n        return cached;\n    let completions = [], top = true;\n    function def(node, type) {\n        let name = doc.sliceString(node.from, node.to);\n        completions.push({ label: name, type });\n    }\n    node.cursor(IterMode.IncludeAnonymous).iterate(node => {\n        if (top) {\n            top = false;\n        }\n        else if (node.name) {\n            let gather = gatherCompletions[node.name];\n            if (gather && gather(node, def) || ScopeNodes.has(node.name))\n                return false;\n        }\n        else if (node.to - node.from > 8192) {\n            // Allow caching for bigger internal nodes\n            for (let c of getScope(doc, node.node))\n                completions.push(c);\n            return false;\n        }\n    });\n    cache.set(node, completions);\n    return completions;\n}\nconst Identifier = /^[\\w$\\xa1-\\uffff][\\w$\\d\\xa1-\\uffff]*$/;\nconst dontComplete = [\n    \"TemplateString\", \"String\", \"RegExp\",\n    \"LineComment\", \"BlockComment\",\n    \"VariableDefinition\", \"TypeDefinition\", \"Label\",\n    \"PropertyDefinition\", \"PropertyName\",\n    \"PrivatePropertyDefinition\", \"PrivatePropertyName\",\n    \".\", \"?.\"\n];\n/**\nCompletion source that looks up locally defined names in\nJavaScript code.\n*/\nfunction localCompletionSource(context) {\n    let inner = syntaxTree(context.state).resolveInner(context.pos, -1);\n    if (dontComplete.indexOf(inner.name) > -1)\n        return null;\n    let isWord = inner.name == \"VariableName\" ||\n        inner.to - inner.from < 20 && Identifier.test(context.state.sliceDoc(inner.from, inner.to));\n    if (!isWord && !context.explicit)\n        return null;\n    let options = [];\n    for (let pos = inner; pos; pos = pos.parent) {\n        if (ScopeNodes.has(pos.name))\n            options = options.concat(getScope(context.state.doc, pos));\n    }\n    return {\n        options,\n        from: isWord ? inner.from : context.pos,\n        validFor: Identifier\n    };\n}\nfunction pathFor(read, member, name) {\n    var _a;\n    let path = [];\n    for (;;) {\n        let obj = member.firstChild, prop;\n        if ((obj === null || obj === void 0 ? void 0 : obj.name) == \"VariableName\") {\n            path.push(read(obj));\n            return { path: path.reverse(), name };\n        }\n        else if ((obj === null || obj === void 0 ? void 0 : obj.name) == \"MemberExpression\" && ((_a = (prop = obj.lastChild)) === null || _a === void 0 ? void 0 : _a.name) == \"PropertyName\") {\n            path.push(read(prop));\n            member = obj;\n        }\n        else {\n            return null;\n        }\n    }\n}\n/**\nHelper function for defining JavaScript completion sources. It\nreturns the completable name and object path for a completion\ncontext, or null if no name/property completion should happen at\nthat position. For example, when completing after `a.b.c` it will\nreturn `{path: [\"a\", \"b\"], name: \"c\"}`. When completing after `x`\nit will return `{path: [], name: \"x\"}`. When not in a property or\nname, it will return null if `context.explicit` is false, and\n`{path: [], name: \"\"}` otherwise.\n*/\nfunction completionPath(context) {\n    let read = (node) => context.state.doc.sliceString(node.from, node.to);\n    let inner = syntaxTree(context.state).resolveInner(context.pos, -1);\n    if (inner.name == \"PropertyName\") {\n        return pathFor(read, inner.parent, read(inner));\n    }\n    else if ((inner.name == \".\" || inner.name == \"?.\") && inner.parent.name == \"MemberExpression\") {\n        return pathFor(read, inner.parent, \"\");\n    }\n    else if (dontComplete.indexOf(inner.name) > -1) {\n        return null;\n    }\n    else if (inner.name == \"VariableName\" || inner.to - inner.from < 20 && Identifier.test(read(inner))) {\n        return { path: [], name: read(inner) };\n    }\n    else if (inner.name == \"MemberExpression\") {\n        return pathFor(read, inner, \"\");\n    }\n    else {\n        return context.explicit ? { path: [], name: \"\" } : null;\n    }\n}\nfunction enumeratePropertyCompletions(obj, top) {\n    let options = [], seen = new Set;\n    for (let depth = 0;; depth++) {\n        for (let name of (Object.getOwnPropertyNames || Object.keys)(obj)) {\n            if (!/^[a-zA-Z_$\\xaa-\\uffdc][\\w$\\xaa-\\uffdc]*$/.test(name) || seen.has(name))\n                continue;\n            seen.add(name);\n            let value;\n            try {\n                value = obj[name];\n            }\n            catch (_) {\n                continue;\n            }\n            options.push({\n                label: name,\n                type: typeof value == \"function\" ? (/^[A-Z]/.test(name) ? \"class\" : top ? \"function\" : \"method\")\n                    : top ? \"variable\" : \"property\",\n                boost: -depth\n            });\n        }\n        let next = Object.getPrototypeOf(obj);\n        if (!next)\n            return options;\n        obj = next;\n    }\n}\n/**\nDefines a [completion source](https://codemirror.net/6/docs/ref/#autocomplete.CompletionSource) that\ncompletes from the given scope object (for example `globalThis`).\nWill enter properties of the object when completing properties on\na directly-named path.\n*/\nfunction scopeCompletionSource(scope) {\n    let cache = new Map;\n    return (context) => {\n        let path = completionPath(context);\n        if (!path)\n            return null;\n        let target = scope;\n        for (let step of path.path) {\n            target = target[step];\n            if (!target)\n                return null;\n        }\n        let options = cache.get(target);\n        if (!options)\n            cache.set(target, options = enumeratePropertyCompletions(target, !path.path.length));\n        return {\n            from: context.pos - path.name.length,\n            options,\n            validFor: Identifier\n        };\n    };\n}\n\n/**\nA language provider based on the [Lezer JavaScript\nparser](https://github.com/lezer-parser/javascript), extended with\nhighlighting and indentation information.\n*/\nconst javascriptLanguage = /*@__PURE__*/LRLanguage.define({\n    name: \"javascript\",\n    parser: /*@__PURE__*/parser.configure({\n        props: [\n            /*@__PURE__*/indentNodeProp.add({\n                IfStatement: /*@__PURE__*/continuedIndent({ except: /^\\s*({|else\\b)/ }),\n                TryStatement: /*@__PURE__*/continuedIndent({ except: /^\\s*({|catch\\b|finally\\b)/ }),\n                LabeledStatement: flatIndent,\n                SwitchBody: context => {\n                    let after = context.textAfter, closed = /^\\s*\\}/.test(after), isCase = /^\\s*(case|default)\\b/.test(after);\n                    return context.baseIndent + (closed ? 0 : isCase ? 1 : 2) * context.unit;\n                },\n                Block: /*@__PURE__*/delimitedIndent({ closing: \"}\" }),\n                ArrowFunction: cx => cx.baseIndent + cx.unit,\n                \"TemplateString BlockComment\": () => null,\n                \"Statement Property\": /*@__PURE__*/continuedIndent({ except: /^{/ }),\n                JSXElement(context) {\n                    let closed = /^\\s*<\\//.test(context.textAfter);\n                    return context.lineIndent(context.node.from) + (closed ? 0 : context.unit);\n                },\n                JSXEscape(context) {\n                    let closed = /\\s*\\}/.test(context.textAfter);\n                    return context.lineIndent(context.node.from) + (closed ? 0 : context.unit);\n                },\n                \"JSXOpenTag JSXSelfClosingTag\"(context) {\n                    return context.column(context.node.from) + context.unit;\n                }\n            }),\n            /*@__PURE__*/foldNodeProp.add({\n                \"Block ClassBody SwitchBody EnumBody ObjectExpression ArrayExpression ObjectType\": foldInside,\n                BlockComment(tree) { return { from: tree.from + 2, to: tree.to - 2 }; }\n            })\n        ]\n    }),\n    languageData: {\n        closeBrackets: { brackets: [\"(\", \"[\", \"{\", \"'\", '\"', \"`\"] },\n        commentTokens: { line: \"//\", block: { open: \"/*\", close: \"*/\" } },\n        indentOnInput: /^\\s*(?:case |default:|\\{|\\}|<\\/)$/,\n        wordChars: \"$\"\n    }\n});\nconst jsxSublanguage = {\n    test: node => /^JSX/.test(node.name),\n    facet: /*@__PURE__*/defineLanguageFacet({ commentTokens: { block: { open: \"{/*\", close: \"*/}\" } } })\n};\n/**\nA language provider for TypeScript.\n*/\nconst typescriptLanguage = /*@__PURE__*/javascriptLanguage.configure({ dialect: \"ts\" }, \"typescript\");\n/**\nLanguage provider for JSX.\n*/\nconst jsxLanguage = /*@__PURE__*/javascriptLanguage.configure({\n    dialect: \"jsx\",\n    props: [/*@__PURE__*/sublanguageProp.add(n => n.isTop ? [jsxSublanguage] : undefined)]\n});\n/**\nLanguage provider for JSX + TypeScript.\n*/\nconst tsxLanguage = /*@__PURE__*/javascriptLanguage.configure({\n    dialect: \"jsx ts\",\n    props: [/*@__PURE__*/sublanguageProp.add(n => n.isTop ? [jsxSublanguage] : undefined)]\n}, \"typescript\");\nlet kwCompletion = (name) => ({ label: name, type: \"keyword\" });\nconst keywords = /*@__PURE__*/\"break case const continue default delete export extends false finally in instanceof let new return static super switch this throw true typeof var yield\".split(\" \").map(kwCompletion);\nconst typescriptKeywords = /*@__PURE__*/keywords.concat(/*@__PURE__*/[\"declare\", \"implements\", \"private\", \"protected\", \"public\"].map(kwCompletion));\n/**\nJavaScript support. Includes [snippet](https://codemirror.net/6/docs/ref/#lang-javascript.snippets)\ncompletion.\n*/\nfunction javascript(config = {}) {\n    let lang = config.jsx ? (config.typescript ? tsxLanguage : jsxLanguage)\n        : config.typescript ? typescriptLanguage : javascriptLanguage;\n    let completions = config.typescript ? typescriptSnippets.concat(typescriptKeywords) : snippets.concat(keywords);\n    return new LanguageSupport(lang, [\n        javascriptLanguage.data.of({\n            autocomplete: ifNotIn(dontComplete, completeFromList(completions))\n        }),\n        javascriptLanguage.data.of({\n            autocomplete: localCompletionSource\n        }),\n        config.jsx ? autoCloseTags : [],\n    ]);\n}\nfunction findOpenTag(node) {\n    for (;;) {\n        if (node.name == \"JSXOpenTag\" || node.name == \"JSXSelfClosingTag\" || node.name == \"JSXFragmentTag\")\n            return node;\n        if (node.name == \"JSXEscape\" || !node.parent)\n            return null;\n        node = node.parent;\n    }\n}\nfunction elementName(doc, tree, max = doc.length) {\n    for (let ch = tree === null || tree === void 0 ? void 0 : tree.firstChild; ch; ch = ch.nextSibling) {\n        if (ch.name == \"JSXIdentifier\" || ch.name == \"JSXBuiltin\" || ch.name == \"JSXNamespacedName\" ||\n            ch.name == \"JSXMemberExpression\")\n            return doc.sliceString(ch.from, Math.min(ch.to, max));\n    }\n    return \"\";\n}\nconst android = typeof navigator == \"object\" && /*@__PURE__*//Android\\b/.test(navigator.userAgent);\n/**\nExtension that will automatically insert JSX close tags when a `>` or\n`/` is typed.\n*/\nconst autoCloseTags = /*@__PURE__*/EditorView.inputHandler.of((view, from, to, text, defaultInsert) => {\n    if ((android ? view.composing : view.compositionStarted) || view.state.readOnly ||\n        from != to || (text != \">\" && text != \"/\") ||\n        !javascriptLanguage.isActiveAt(view.state, from, -1))\n        return false;\n    let base = defaultInsert(), { state } = base;\n    let closeTags = state.changeByRange(range => {\n        var _a;\n        let { head } = range, around = syntaxTree(state).resolveInner(head - 1, -1), name;\n        if (around.name == \"JSXStartTag\")\n            around = around.parent;\n        if (state.doc.sliceString(head - 1, head) != text || around.name == \"JSXAttributeValue\" && around.to > head) ;\n        else if (text == \">\" && around.name == \"JSXFragmentTag\") {\n            return { range, changes: { from: head, insert: `</>` } };\n        }\n        else if (text == \"/\" && around.name == \"JSXStartCloseTag\") {\n            let empty = around.parent, base = empty.parent;\n            if (base && empty.from == head - 2 &&\n                ((name = elementName(state.doc, base.firstChild, head)) || ((_a = base.firstChild) === null || _a === void 0 ? void 0 : _a.name) == \"JSXFragmentTag\")) {\n                let insert = `${name}>`;\n                return { range: EditorSelection.cursor(head + insert.length, -1), changes: { from: head, insert } };\n            }\n        }\n        else if (text == \">\") {\n            let openTag = findOpenTag(around);\n            if (openTag &&\n                !/^\\/?>|^<\\//.test(state.doc.sliceString(head, head + 2)) &&\n                (name = elementName(state.doc, openTag, head)))\n                return { range, changes: { from: head, insert: `</${name}>` } };\n        }\n        return { range };\n    });\n    if (closeTags.changes.empty)\n        return false;\n    view.dispatch([\n        base,\n        state.update(closeTags, { userEvent: \"input.complete\", scrollIntoView: true })\n    ]);\n    return true;\n});\n\n/**\nConnects an [ESLint](https://eslint.org/) linter to CodeMirror's\n[lint](https://codemirror.net/6/docs/ref/#lint) integration. `eslint` should be an instance of the\n[`Linter`](https://eslint.org/docs/developer-guide/nodejs-api#linter)\nclass, and `config` an optional ESLint configuration. The return\nvalue of this function can be passed to [`linter`](https://codemirror.net/6/docs/ref/#lint.linter)\nto create a JavaScript linting extension.\n\nNote that ESLint targets node, and is tricky to run in the\nbrowser. The\n[eslint-linter-browserify](https://github.com/UziTech/eslint-linter-browserify)\npackage may help with that (see\n[example](https://github.com/UziTech/eslint-linter-browserify/blob/master/example/script.js)).\n*/\nfunction esLint(eslint, config) {\n    if (!config) {\n        config = {\n            parserOptions: { ecmaVersion: 2019, sourceType: \"module\" },\n            env: { browser: true, node: true, es6: true, es2015: true, es2017: true, es2020: true },\n            rules: {}\n        };\n        eslint.getRules().forEach((desc, name) => {\n            if (desc.meta.docs.recommended)\n                config.rules[name] = 2;\n        });\n    }\n    return (view) => {\n        let { state } = view, found = [];\n        for (let { from, to } of javascriptLanguage.findRegions(state)) {\n            let fromLine = state.doc.lineAt(from), offset = { line: fromLine.number - 1, col: from - fromLine.from, pos: from };\n            for (let d of eslint.verify(state.sliceDoc(from, to), config))\n                found.push(translateDiagnostic(d, state.doc, offset));\n        }\n        return found;\n    };\n}\nfunction mapPos(line, col, doc, offset) {\n    return doc.line(line + offset.line).from + col + (line == 1 ? offset.col - 1 : -1);\n}\nfunction translateDiagnostic(input, doc, offset) {\n    let start = mapPos(input.line, input.column, doc, offset);\n    let result = {\n        from: start,\n        to: input.endLine != null && input.endColumn != 1 ? mapPos(input.endLine, input.endColumn, doc, offset) : start,\n        message: input.message,\n        source: input.ruleId ? \"eslint:\" + input.ruleId : \"eslint\",\n        severity: input.severity == 1 ? \"warning\" : \"error\",\n    };\n    if (input.fix) {\n        let { range, text } = input.fix, from = range[0] + offset.pos - start, to = range[1] + offset.pos - start;\n        result.actions = [{\n                name: \"fix\",\n                apply(view, start) {\n                    view.dispatch({ changes: { from: start + from, to: start + to, insert: text }, scrollIntoView: true });\n                }\n            }];\n    }\n    return result;\n}\n\nexport { autoCloseTags, completionPath, esLint, javascript, javascriptLanguage, jsxLanguage, localCompletionSource, scopeCompletionSource, snippets, tsxLanguage, typescriptLanguage, typescriptSnippets };\n", "import { parser, configureNesting } from '@lezer/html';\nimport { cssLanguage, css } from '@codemirror/lang-css';\nimport { javascriptLanguage, typescriptLanguage, jsxLanguage, tsxLanguage, javascript } from '@codemirror/lang-javascript';\nimport { EditorView } from '@codemirror/view';\nimport { EditorSelection } from '@codemirror/state';\nimport { syntaxTree, LRLanguage, indentNodeProp, foldNodeProp, bracketMatchingHandle, LanguageSupport } from '@codemirror/language';\n\nconst Targets = [\"_blank\", \"_self\", \"_top\", \"_parent\"];\nconst Charsets = [\"ascii\", \"utf-8\", \"utf-16\", \"latin1\", \"latin1\"];\nconst Methods = [\"get\", \"post\", \"put\", \"delete\"];\nconst Encs = [\"application/x-www-form-urlencoded\", \"multipart/form-data\", \"text/plain\"];\nconst Bool = [\"true\", \"false\"];\nconst S = {}; // Empty tag spec\nconst Tags = {\n    a: {\n        attrs: {\n            href: null, ping: null, type: null,\n            media: null,\n            target: Targets,\n            hreflang: null\n        }\n    },\n    abbr: S,\n    address: S,\n    area: {\n        attrs: {\n            alt: null, coords: null, href: null, target: null, ping: null,\n            media: null, hreflang: null, type: null,\n            shape: [\"default\", \"rect\", \"circle\", \"poly\"]\n        }\n    },\n    article: S,\n    aside: S,\n    audio: {\n        attrs: {\n            src: null, mediagroup: null,\n            crossorigin: [\"anonymous\", \"use-credentials\"],\n            preload: [\"none\", \"metadata\", \"auto\"],\n            autoplay: [\"autoplay\"],\n            loop: [\"loop\"],\n            controls: [\"controls\"]\n        }\n    },\n    b: S,\n    base: { attrs: { href: null, target: Targets } },\n    bdi: S,\n    bdo: S,\n    blockquote: { attrs: { cite: null } },\n    body: S,\n    br: S,\n    button: {\n        attrs: {\n            form: null, formaction: null, name: null, value: null,\n            autofocus: [\"autofocus\"],\n            disabled: [\"autofocus\"],\n            formenctype: Encs,\n            formmethod: Methods,\n            formnovalidate: [\"novalidate\"],\n            formtarget: Targets,\n            type: [\"submit\", \"reset\", \"button\"]\n        }\n    },\n    canvas: { attrs: { width: null, height: null } },\n    caption: S,\n    center: S,\n    cite: S,\n    code: S,\n    col: { attrs: { span: null } },\n    colgroup: { attrs: { span: null } },\n    command: {\n        attrs: {\n            type: [\"command\", \"checkbox\", \"radio\"],\n            label: null, icon: null, radiogroup: null, command: null, title: null,\n            disabled: [\"disabled\"],\n            checked: [\"checked\"]\n        }\n    },\n    data: { attrs: { value: null } },\n    datagrid: { attrs: { disabled: [\"disabled\"], multiple: [\"multiple\"] } },\n    datalist: { attrs: { data: null } },\n    dd: S,\n    del: { attrs: { cite: null, datetime: null } },\n    details: { attrs: { open: [\"open\"] } },\n    dfn: S,\n    div: S,\n    dl: S,\n    dt: S,\n    em: S,\n    embed: { attrs: { src: null, type: null, width: null, height: null } },\n    eventsource: { attrs: { src: null } },\n    fieldset: { attrs: { disabled: [\"disabled\"], form: null, name: null } },\n    figcaption: S,\n    figure: S,\n    footer: S,\n    form: {\n        attrs: {\n            action: null, name: null,\n            \"accept-charset\": Charsets,\n            autocomplete: [\"on\", \"off\"],\n            enctype: Encs,\n            method: Methods,\n            novalidate: [\"novalidate\"],\n            target: Targets\n        }\n    },\n    h1: S, h2: S, h3: S, h4: S, h5: S, h6: S,\n    head: {\n        children: [\"title\", \"base\", \"link\", \"style\", \"meta\", \"script\", \"noscript\", \"command\"]\n    },\n    header: S,\n    hgroup: S,\n    hr: S,\n    html: {\n        attrs: { manifest: null }\n    },\n    i: S,\n    iframe: {\n        attrs: {\n            src: null, srcdoc: null, name: null, width: null, height: null,\n            sandbox: [\"allow-top-navigation\", \"allow-same-origin\", \"allow-forms\", \"allow-scripts\"],\n            seamless: [\"seamless\"]\n        }\n    },\n    img: {\n        attrs: {\n            alt: null, src: null, ismap: null, usemap: null, width: null, height: null,\n            crossorigin: [\"anonymous\", \"use-credentials\"]\n        }\n    },\n    input: {\n        attrs: {\n            alt: null, dirname: null, form: null, formaction: null,\n            height: null, list: null, max: null, maxlength: null, min: null,\n            name: null, pattern: null, placeholder: null, size: null, src: null,\n            step: null, value: null, width: null,\n            accept: [\"audio/*\", \"video/*\", \"image/*\"],\n            autocomplete: [\"on\", \"off\"],\n            autofocus: [\"autofocus\"],\n            checked: [\"checked\"],\n            disabled: [\"disabled\"],\n            formenctype: Encs,\n            formmethod: Methods,\n            formnovalidate: [\"novalidate\"],\n            formtarget: Targets,\n            multiple: [\"multiple\"],\n            readonly: [\"readonly\"],\n            required: [\"required\"],\n            type: [\"hidden\", \"text\", \"search\", \"tel\", \"url\", \"email\", \"password\", \"datetime\", \"date\", \"month\",\n                \"week\", \"time\", \"datetime-local\", \"number\", \"range\", \"color\", \"checkbox\", \"radio\",\n                \"file\", \"submit\", \"image\", \"reset\", \"button\"]\n        }\n    },\n    ins: { attrs: { cite: null, datetime: null } },\n    kbd: S,\n    keygen: {\n        attrs: {\n            challenge: null, form: null, name: null,\n            autofocus: [\"autofocus\"],\n            disabled: [\"disabled\"],\n            keytype: [\"RSA\"]\n        }\n    },\n    label: { attrs: { for: null, form: null } },\n    legend: S,\n    li: { attrs: { value: null } },\n    link: {\n        attrs: {\n            href: null, type: null,\n            hreflang: null,\n            media: null,\n            sizes: [\"all\", \"16x16\", \"16x16 32x32\", \"16x16 32x32 64x64\"]\n        }\n    },\n    map: { attrs: { name: null } },\n    mark: S,\n    menu: { attrs: { label: null, type: [\"list\", \"context\", \"toolbar\"] } },\n    meta: {\n        attrs: {\n            content: null,\n            charset: Charsets,\n            name: [\"viewport\", \"application-name\", \"author\", \"description\", \"generator\", \"keywords\"],\n            \"http-equiv\": [\"content-language\", \"content-type\", \"default-style\", \"refresh\"]\n        }\n    },\n    meter: { attrs: { value: null, min: null, low: null, high: null, max: null, optimum: null } },\n    nav: S,\n    noscript: S,\n    object: {\n        attrs: {\n            data: null, type: null, name: null, usemap: null, form: null, width: null, height: null,\n            typemustmatch: [\"typemustmatch\"]\n        }\n    },\n    ol: { attrs: { reversed: [\"reversed\"], start: null, type: [\"1\", \"a\", \"A\", \"i\", \"I\"] },\n        children: [\"li\", \"script\", \"template\", \"ul\", \"ol\"] },\n    optgroup: { attrs: { disabled: [\"disabled\"], label: null } },\n    option: { attrs: { disabled: [\"disabled\"], label: null, selected: [\"selected\"], value: null } },\n    output: { attrs: { for: null, form: null, name: null } },\n    p: S,\n    param: { attrs: { name: null, value: null } },\n    pre: S,\n    progress: { attrs: { value: null, max: null } },\n    q: { attrs: { cite: null } },\n    rp: S,\n    rt: S,\n    ruby: S,\n    samp: S,\n    script: {\n        attrs: {\n            type: [\"text/javascript\"],\n            src: null,\n            async: [\"async\"],\n            defer: [\"defer\"],\n            charset: Charsets\n        }\n    },\n    section: S,\n    select: {\n        attrs: {\n            form: null, name: null, size: null,\n            autofocus: [\"autofocus\"],\n            disabled: [\"disabled\"],\n            multiple: [\"multiple\"]\n        }\n    },\n    slot: { attrs: { name: null } },\n    small: S,\n    source: { attrs: { src: null, type: null, media: null } },\n    span: S,\n    strong: S,\n    style: {\n        attrs: {\n            type: [\"text/css\"],\n            media: null,\n            scoped: null\n        }\n    },\n    sub: S,\n    summary: S,\n    sup: S,\n    table: S,\n    tbody: S,\n    td: { attrs: { colspan: null, rowspan: null, headers: null } },\n    template: S,\n    textarea: {\n        attrs: {\n            dirname: null, form: null, maxlength: null, name: null, placeholder: null,\n            rows: null, cols: null,\n            autofocus: [\"autofocus\"],\n            disabled: [\"disabled\"],\n            readonly: [\"readonly\"],\n            required: [\"required\"],\n            wrap: [\"soft\", \"hard\"]\n        }\n    },\n    tfoot: S,\n    th: { attrs: { colspan: null, rowspan: null, headers: null, scope: [\"row\", \"col\", \"rowgroup\", \"colgroup\"] } },\n    thead: S,\n    time: { attrs: { datetime: null } },\n    title: S,\n    tr: S,\n    track: {\n        attrs: {\n            src: null, label: null, default: null,\n            kind: [\"subtitles\", \"captions\", \"descriptions\", \"chapters\", \"metadata\"],\n            srclang: null\n        }\n    },\n    ul: { children: [\"li\", \"script\", \"template\", \"ul\", \"ol\"] },\n    var: S,\n    video: {\n        attrs: {\n            src: null, poster: null, width: null, height: null,\n            crossorigin: [\"anonymous\", \"use-credentials\"],\n            preload: [\"auto\", \"metadata\", \"none\"],\n            autoplay: [\"autoplay\"],\n            mediagroup: [\"movie\"],\n            muted: [\"muted\"],\n            controls: [\"controls\"]\n        }\n    },\n    wbr: S\n};\nconst GlobalAttrs = {\n    accesskey: null,\n    class: null,\n    contenteditable: Bool,\n    contextmenu: null,\n    dir: [\"ltr\", \"rtl\", \"auto\"],\n    draggable: [\"true\", \"false\", \"auto\"],\n    dropzone: [\"copy\", \"move\", \"link\", \"string:\", \"file:\"],\n    hidden: [\"hidden\"],\n    id: null,\n    inert: [\"inert\"],\n    itemid: null,\n    itemprop: null,\n    itemref: null,\n    itemscope: [\"itemscope\"],\n    itemtype: null,\n    lang: [\"ar\", \"bn\", \"de\", \"en-GB\", \"en-US\", \"es\", \"fr\", \"hi\", \"id\", \"ja\", \"pa\", \"pt\", \"ru\", \"tr\", \"zh\"],\n    spellcheck: Bool,\n    autocorrect: Bool,\n    autocapitalize: Bool,\n    style: null,\n    tabindex: null,\n    title: null,\n    translate: [\"yes\", \"no\"],\n    rel: [\"stylesheet\", \"alternate\", \"author\", \"bookmark\", \"help\", \"license\", \"next\", \"nofollow\", \"noreferrer\", \"prefetch\", \"prev\", \"search\", \"tag\"],\n    role: /*@__PURE__*/\"alert application article banner button cell checkbox complementary contentinfo dialog document feed figure form grid gridcell heading img list listbox listitem main navigation region row rowgroup search switch tab table tabpanel textbox timer\".split(\" \"),\n    \"aria-activedescendant\": null,\n    \"aria-atomic\": Bool,\n    \"aria-autocomplete\": [\"inline\", \"list\", \"both\", \"none\"],\n    \"aria-busy\": Bool,\n    \"aria-checked\": [\"true\", \"false\", \"mixed\", \"undefined\"],\n    \"aria-controls\": null,\n    \"aria-describedby\": null,\n    \"aria-disabled\": Bool,\n    \"aria-dropeffect\": null,\n    \"aria-expanded\": [\"true\", \"false\", \"undefined\"],\n    \"aria-flowto\": null,\n    \"aria-grabbed\": [\"true\", \"false\", \"undefined\"],\n    \"aria-haspopup\": Bool,\n    \"aria-hidden\": Bool,\n    \"aria-invalid\": [\"true\", \"false\", \"grammar\", \"spelling\"],\n    \"aria-label\": null,\n    \"aria-labelledby\": null,\n    \"aria-level\": null,\n    \"aria-live\": [\"off\", \"polite\", \"assertive\"],\n    \"aria-multiline\": Bool,\n    \"aria-multiselectable\": Bool,\n    \"aria-owns\": null,\n    \"aria-posinset\": null,\n    \"aria-pressed\": [\"true\", \"false\", \"mixed\", \"undefined\"],\n    \"aria-readonly\": Bool,\n    \"aria-relevant\": null,\n    \"aria-required\": Bool,\n    \"aria-selected\": [\"true\", \"false\", \"undefined\"],\n    \"aria-setsize\": null,\n    \"aria-sort\": [\"ascending\", \"descending\", \"none\", \"other\"],\n    \"aria-valuemax\": null,\n    \"aria-valuemin\": null,\n    \"aria-valuenow\": null,\n    \"aria-valuetext\": null\n};\nconst eventAttributes = /*@__PURE__*/(\"beforeunload copy cut dragstart dragover dragleave dragenter dragend \" +\n    \"drag paste focus blur change click load mousedown mouseenter mouseleave \" +\n    \"mouseup keydown keyup resize scroll unload\").split(\" \").map(n => \"on\" + n);\nfor (let a of eventAttributes)\n    GlobalAttrs[a] = null;\nclass Schema {\n    constructor(extraTags, extraAttrs) {\n        this.tags = Object.assign(Object.assign({}, Tags), extraTags);\n        this.globalAttrs = Object.assign(Object.assign({}, GlobalAttrs), extraAttrs);\n        this.allTags = Object.keys(this.tags);\n        this.globalAttrNames = Object.keys(this.globalAttrs);\n    }\n}\nSchema.default = /*@__PURE__*/new Schema;\nfunction elementName(doc, tree, max = doc.length) {\n    if (!tree)\n        return \"\";\n    let tag = tree.firstChild;\n    let name = tag && tag.getChild(\"TagName\");\n    return name ? doc.sliceString(name.from, Math.min(name.to, max)) : \"\";\n}\nfunction findParentElement(tree, skip = false) {\n    for (; tree; tree = tree.parent)\n        if (tree.name == \"Element\") {\n            if (skip)\n                skip = false;\n            else\n                return tree;\n        }\n    return null;\n}\nfunction allowedChildren(doc, tree, schema) {\n    let parentInfo = schema.tags[elementName(doc, findParentElement(tree))];\n    return (parentInfo === null || parentInfo === void 0 ? void 0 : parentInfo.children) || schema.allTags;\n}\nfunction openTags(doc, tree) {\n    let open = [];\n    for (let parent = findParentElement(tree); parent && !parent.type.isTop; parent = findParentElement(parent.parent)) {\n        let tagName = elementName(doc, parent);\n        if (tagName && parent.lastChild.name == \"CloseTag\")\n            break;\n        if (tagName && open.indexOf(tagName) < 0 && (tree.name == \"EndTag\" || tree.from >= parent.firstChild.to))\n            open.push(tagName);\n    }\n    return open;\n}\nconst identifier = /^[:\\-\\.\\w\\u00b7-\\uffff]*$/;\nfunction completeTag(state, schema, tree, from, to) {\n    let end = /\\s*>/.test(state.sliceDoc(to, to + 5)) ? \"\" : \">\";\n    let parent = findParentElement(tree, true);\n    return { from, to,\n        options: allowedChildren(state.doc, parent, schema).map(tagName => ({ label: tagName, type: \"type\" })).concat(openTags(state.doc, tree).map((tag, i) => ({ label: \"/\" + tag, apply: \"/\" + tag + end,\n            type: \"type\", boost: 99 - i }))),\n        validFor: /^\\/?[:\\-\\.\\w\\u00b7-\\uffff]*$/ };\n}\nfunction completeCloseTag(state, tree, from, to) {\n    let end = /\\s*>/.test(state.sliceDoc(to, to + 5)) ? \"\" : \">\";\n    return { from, to,\n        options: openTags(state.doc, tree).map((tag, i) => ({ label: tag, apply: tag + end, type: \"type\", boost: 99 - i })),\n        validFor: identifier };\n}\nfunction completeStartTag(state, schema, tree, pos) {\n    let options = [], level = 0;\n    for (let tagName of allowedChildren(state.doc, tree, schema))\n        options.push({ label: \"<\" + tagName, type: \"type\" });\n    for (let open of openTags(state.doc, tree))\n        options.push({ label: \"</\" + open + \">\", type: \"type\", boost: 99 - level++ });\n    return { from: pos, to: pos, options, validFor: /^<\\/?[:\\-\\.\\w\\u00b7-\\uffff]*$/ };\n}\nfunction completeAttrName(state, schema, tree, from, to) {\n    let elt = findParentElement(tree), info = elt ? schema.tags[elementName(state.doc, elt)] : null;\n    let localAttrs = info && info.attrs ? Object.keys(info.attrs) : [];\n    let names = info && info.globalAttrs === false ? localAttrs\n        : localAttrs.length ? localAttrs.concat(schema.globalAttrNames) : schema.globalAttrNames;\n    return { from, to,\n        options: names.map(attrName => ({ label: attrName, type: \"property\" })),\n        validFor: identifier };\n}\nfunction completeAttrValue(state, schema, tree, from, to) {\n    var _a;\n    let nameNode = (_a = tree.parent) === null || _a === void 0 ? void 0 : _a.getChild(\"AttributeName\");\n    let options = [], token = undefined;\n    if (nameNode) {\n        let attrName = state.sliceDoc(nameNode.from, nameNode.to);\n        let attrs = schema.globalAttrs[attrName];\n        if (!attrs) {\n            let elt = findParentElement(tree), info = elt ? schema.tags[elementName(state.doc, elt)] : null;\n            attrs = (info === null || info === void 0 ? void 0 : info.attrs) && info.attrs[attrName];\n        }\n        if (attrs) {\n            let base = state.sliceDoc(from, to).toLowerCase(), quoteStart = '\"', quoteEnd = '\"';\n            if (/^['\"]/.test(base)) {\n                token = base[0] == '\"' ? /^[^\"]*$/ : /^[^']*$/;\n                quoteStart = \"\";\n                quoteEnd = state.sliceDoc(to, to + 1) == base[0] ? \"\" : base[0];\n                base = base.slice(1);\n                from++;\n            }\n            else {\n                token = /^[^\\s<>='\"]*$/;\n            }\n            for (let value of attrs)\n                options.push({ label: value, apply: quoteStart + value + quoteEnd, type: \"constant\" });\n        }\n    }\n    return { from, to, options, validFor: token };\n}\nfunction htmlCompletionFor(schema, context) {\n    let { state, pos } = context, tree = syntaxTree(state).resolveInner(pos, -1), around = tree.resolve(pos);\n    for (let scan = pos, before; around == tree && (before = tree.childBefore(scan));) {\n        let last = before.lastChild;\n        if (!last || !last.type.isError || last.from < last.to)\n            break;\n        around = tree = before;\n        scan = last.from;\n    }\n    if (tree.name == \"TagName\") {\n        return tree.parent && /CloseTag$/.test(tree.parent.name) ? completeCloseTag(state, tree, tree.from, pos)\n            : completeTag(state, schema, tree, tree.from, pos);\n    }\n    else if (tree.name == \"StartTag\") {\n        return completeTag(state, schema, tree, pos, pos);\n    }\n    else if (tree.name == \"StartCloseTag\" || tree.name == \"IncompleteCloseTag\") {\n        return completeCloseTag(state, tree, pos, pos);\n    }\n    else if (context.explicit && (tree.name == \"OpenTag\" || tree.name == \"SelfClosingTag\") || tree.name == \"AttributeName\") {\n        return completeAttrName(state, schema, tree, tree.name == \"AttributeName\" ? tree.from : pos, pos);\n    }\n    else if (tree.name == \"Is\" || tree.name == \"AttributeValue\" || tree.name == \"UnquotedAttributeValue\") {\n        return completeAttrValue(state, schema, tree, tree.name == \"Is\" ? pos : tree.from, pos);\n    }\n    else if (context.explicit && (around.name == \"Element\" || around.name == \"Text\" || around.name == \"Document\")) {\n        return completeStartTag(state, schema, tree, pos);\n    }\n    else {\n        return null;\n    }\n}\n/**\nHTML tag completion. Opens and closes tags and attributes in a\ncontext-aware way.\n*/\nfunction htmlCompletionSource(context) {\n    return htmlCompletionFor(Schema.default, context);\n}\n/**\nCreate a completion source for HTML extended with additional tags\nor attributes.\n*/\nfunction htmlCompletionSourceWith(config) {\n    let { extraTags, extraGlobalAttributes: extraAttrs } = config;\n    let schema = extraAttrs || extraTags ? new Schema(extraTags, extraAttrs) : Schema.default;\n    return (context) => htmlCompletionFor(schema, context);\n}\n\nconst jsonParser = /*@__PURE__*/javascriptLanguage.parser.configure({ top: \"SingleExpression\" });\nconst defaultNesting = [\n    { tag: \"script\",\n        attrs: attrs => attrs.type == \"text/typescript\" || attrs.lang == \"ts\",\n        parser: typescriptLanguage.parser },\n    { tag: \"script\",\n        attrs: attrs => attrs.type == \"text/babel\" || attrs.type == \"text/jsx\",\n        parser: jsxLanguage.parser },\n    { tag: \"script\",\n        attrs: attrs => attrs.type == \"text/typescript-jsx\",\n        parser: tsxLanguage.parser },\n    { tag: \"script\",\n        attrs: attrs => attrs.type == \"importmap\" || attrs.type == \"speculationrules\",\n        parser: jsonParser },\n    { tag: \"script\",\n        attrs(attrs) {\n            return !attrs.type || /^(?:text|application)\\/(?:x-)?(?:java|ecma)script$|^module$|^$/i.test(attrs.type);\n        },\n        parser: javascriptLanguage.parser },\n    { tag: \"style\",\n        attrs(attrs) {\n            return (!attrs.lang || attrs.lang == \"css\") && (!attrs.type || /^(text\\/)?(x-)?(stylesheet|css)$/i.test(attrs.type));\n        },\n        parser: cssLanguage.parser }\n];\nconst defaultAttrs = /*@__PURE__*/[\n    { name: \"style\",\n        parser: /*@__PURE__*/cssLanguage.parser.configure({ top: \"Styles\" }) }\n].concat(/*@__PURE__*/eventAttributes.map(name => ({ name, parser: javascriptLanguage.parser })));\n/**\nA language provider based on the [Lezer HTML\nparser](https://github.com/lezer-parser/html), extended with the\nJavaScript and CSS parsers to parse the content of `<script>` and\n`<style>` tags.\n*/\nconst htmlPlain = /*@__PURE__*/LRLanguage.define({\n    name: \"html\",\n    parser: /*@__PURE__*/parser.configure({\n        props: [\n            /*@__PURE__*/indentNodeProp.add({\n                Element(context) {\n                    let after = /^(\\s*)(<\\/)?/.exec(context.textAfter);\n                    if (context.node.to <= context.pos + after[0].length)\n                        return context.continue();\n                    return context.lineIndent(context.node.from) + (after[2] ? 0 : context.unit);\n                },\n                \"OpenTag CloseTag SelfClosingTag\"(context) {\n                    return context.column(context.node.from) + context.unit;\n                },\n                Document(context) {\n                    if (context.pos + /\\s*/.exec(context.textAfter)[0].length < context.node.to)\n                        return context.continue();\n                    let endElt = null, close;\n                    for (let cur = context.node;;) {\n                        let last = cur.lastChild;\n                        if (!last || last.name != \"Element\" || last.to != cur.to)\n                            break;\n                        endElt = cur = last;\n                    }\n                    if (endElt && !((close = endElt.lastChild) && (close.name == \"CloseTag\" || close.name == \"SelfClosingTag\")))\n                        return context.lineIndent(endElt.from) + context.unit;\n                    return null;\n                }\n            }),\n            /*@__PURE__*/foldNodeProp.add({\n                Element(node) {\n                    let first = node.firstChild, last = node.lastChild;\n                    if (!first || first.name != \"OpenTag\")\n                        return null;\n                    return { from: first.to, to: last.name == \"CloseTag\" ? last.from : node.to };\n                }\n            }),\n            /*@__PURE__*/bracketMatchingHandle.add({\n                \"OpenTag CloseTag\": node => node.getChild(\"TagName\")\n            })\n        ]\n    }),\n    languageData: {\n        commentTokens: { block: { open: \"<!--\", close: \"-->\" } },\n        indentOnInput: /^\\s*<\\/\\w+\\W$/,\n        wordChars: \"-._\"\n    }\n});\n/**\nA language provider based on the [Lezer HTML\nparser](https://github.com/lezer-parser/html), extended with the\nJavaScript and CSS parsers to parse the content of `<script>` and\n`<style>` tags.\n*/\nconst htmlLanguage = /*@__PURE__*/htmlPlain.configure({\n    wrap: /*@__PURE__*/configureNesting(defaultNesting, defaultAttrs)\n});\n/**\nLanguage support for HTML, including\n[`htmlCompletion`](https://codemirror.net/6/docs/ref/#lang-html.htmlCompletion) and JavaScript and\nCSS support extensions.\n*/\nfunction html(config = {}) {\n    let dialect = \"\", wrap;\n    if (config.matchClosingTags === false)\n        dialect = \"noMatch\";\n    if (config.selfClosingTags === true)\n        dialect = (dialect ? dialect + \" \" : \"\") + \"selfClosing\";\n    if (config.nestedLanguages && config.nestedLanguages.length ||\n        config.nestedAttributes && config.nestedAttributes.length)\n        wrap = configureNesting((config.nestedLanguages || []).concat(defaultNesting), (config.nestedAttributes || []).concat(defaultAttrs));\n    let lang = wrap ? htmlPlain.configure({ wrap, dialect }) : dialect ? htmlLanguage.configure({ dialect }) : htmlLanguage;\n    return new LanguageSupport(lang, [\n        htmlLanguage.data.of({ autocomplete: htmlCompletionSourceWith(config) }),\n        config.autoCloseTags !== false ? autoCloseTags : [],\n        javascript().support,\n        css().support\n    ]);\n}\nconst selfClosers = /*@__PURE__*/new Set(/*@__PURE__*/\"area base br col command embed frame hr img input keygen link meta param source track wbr menuitem\".split(\" \"));\n/**\nExtension that will automatically insert close tags when a `>` or\n`/` is typed.\n*/\nconst autoCloseTags = /*@__PURE__*/EditorView.inputHandler.of((view, from, to, text, insertTransaction) => {\n    if (view.composing || view.state.readOnly || from != to || (text != \">\" && text != \"/\") ||\n        !htmlLanguage.isActiveAt(view.state, from, -1))\n        return false;\n    let base = insertTransaction(), { state } = base;\n    let closeTags = state.changeByRange(range => {\n        var _a, _b, _c;\n        let didType = state.doc.sliceString(range.from - 1, range.to) == text;\n        let { head } = range, around = syntaxTree(state).resolveInner(head - 1, -1), name;\n        if (around.name == \"TagName\" || around.name == \"StartTag\")\n            around = around.parent;\n        if (didType && text == \">\" && around.name == \"OpenTag\") {\n            if (((_b = (_a = around.parent) === null || _a === void 0 ? void 0 : _a.lastChild) === null || _b === void 0 ? void 0 : _b.name) != \"CloseTag\" &&\n                (name = elementName(state.doc, around.parent, head)) &&\n                !selfClosers.has(name)) {\n                let to = head + (state.doc.sliceString(head, head + 1) === \">\" ? 1 : 0);\n                let insert = `</${name}>`;\n                return { range, changes: { from: head, to, insert } };\n            }\n        }\n        else if (didType && text == \"/\" && around.name == \"IncompleteCloseTag\") {\n            let base = around.parent;\n            if (around.from == head - 2 && ((_c = base.lastChild) === null || _c === void 0 ? void 0 : _c.name) != \"CloseTag\" &&\n                (name = elementName(state.doc, base, head)) && !selfClosers.has(name)) {\n                let to = head + (state.doc.sliceString(head, head + 1) === \">\" ? 1 : 0);\n                let insert = `${name}>`;\n                return {\n                    range: EditorSelection.cursor(head + insert.length, -1),\n                    changes: { from: head, to, insert }\n                };\n            }\n        }\n        return { range };\n    });\n    if (closeTags.changes.empty)\n        return false;\n    view.dispatch([\n        base,\n        state.update(closeTags, {\n            userEvent: \"input.complete\",\n            scrollIntoView: true\n        })\n    ]);\n    return true;\n});\n\nexport { autoCloseTags, html, htmlCompletionSource, htmlCompletionSourceWith, htmlLanguage, htmlPlain };\n", "import {Language, defineLanguageFacet, languageDataProp, foldNodeProp, indentNodeProp, foldService,\n        syntaxTree, LanguageDescription, ParseContext} from \"@codemirror/language\"\nimport {parser as baseParser, MarkdownParser, GFM, Subscript, Superscript, Emoji} from \"../lezer-parser-markdown\"\nimport {SyntaxNode, NodeType, NodeProp} from \"@lezer/common\"\n\nconst data = defineLanguageFacet({commentTokens: {block: {open: \"<!--\", close: \"-->\"}}})\n\nconst headingProp = new NodeProp<number>()\n\nconst commonmark = baseParser.configure({\n  props: [\n    foldNodeProp.add(type => {\n      return !type.is(\"Block\") || type.is(\"Document\") || isHeading(type) != null ? undefined\n        : (tree, state) => ({from: state.doc.lineAt(tree.from).to, to: tree.to})\n    }),\n    headingProp.add(isHeading),\n    indentNodeProp.add({\n      Document: () => null\n    }),\n    languageDataProp.add({\n      Document: data\n    })\n  ]\n})\n\nfunction isHeading(type: NodeType) {\n  let match = /^(?:ATX|Setext)Heading(\\d)$/.exec(type.name)\n  return match ? +match[1] : undefined\n}\n\nfunction findSectionEnd(headerNode: SyntaxNode, level: number) {\n  let last = headerNode\n  for (;;) {\n    let next = last.nextSibling, heading\n    if (!next || (heading = isHeading(next.type)) != null && heading <= level) break\n    last = next\n  }\n  return last.to\n}\n\nconst headerIndent = foldService.of((state, start, end) => {\n  for (let node: SyntaxNode | null = syntaxTree(state).resolveInner(end, -1); node; node = node.parent) {\n    if (node.from < start) break\n    let heading = node.type.prop(headingProp)\n    if (heading == null) continue\n    let upto = findSectionEnd(node, heading)\n    if (upto > end) return {from: end, to: upto}\n  }\n  return null\n})\n\nexport function mkLang(parser: MarkdownParser) {\n  return new Language(data, parser, [headerIndent], \"markdown\")\n}\n\n/// Language support for strict CommonMark.\nexport const commonmarkLanguage = mkLang(commonmark)\n\nconst extended = commonmark.configure([GFM, Subscript, Superscript, Emoji, {\n  props: [\n    foldNodeProp.add({\n      Table: (tree, state) => ({from: state.doc.lineAt(tree.from).to, to: tree.to})\n    })\n  ]\n}])\n\n/// Language support for [GFM](https://github.github.com/gfm/) plus\n/// subscript, superscript, and emoji syntax.\nexport const markdownLanguage = mkLang(extended)\n\nexport function getCodeParser(\n  languages: readonly LanguageDescription[] | ((info: string) => Language | LanguageDescription | null) | undefined,\n  defaultLanguage?: Language\n) {\n  return (info: string) => {\n    if (info && languages) {\n      let found = null\n      // Strip anything after whitespace\n      info = /\\S*/.exec(info)![0]\n      if (typeof languages == \"function\") found = languages(info)\n      else found = LanguageDescription.matchLanguageName(languages, info, true)\n      if (found instanceof LanguageDescription)\n        return found.support ? found.support.language.parser : ParseContext.getSkippingParser(found.load())\n      else if (found)\n        return found.parser\n    }\n    return defaultLanguage ? defaultLanguage.parser : null\n  }\n}\n", "import {StateCommand, Text, EditorState, EditorSelection, ChangeSpec, countColumn} from \"@codemirror/state\"\nimport {syntaxTree, indentUnit} from \"@codemirror/language\"\nimport {SyntaxNode, Tree} from \"@lezer/common\"\nimport {markdownLanguage} from \"./markdown\"\n\nclass Context {\n  constructor(\n    readonly node: SyntaxNode,\n    readonly from: number,\n    readonly to: number,\n    readonly spaceBefore: string,\n    readonly spaceAfter: string,\n    readonly type: string,\n    readonly item: SyntaxNode | null\n  ) {}\n\n  blank(maxWidth: number | null, trailing = true) {\n    let result = this.spaceBefore + (this.node.name == \"Blockquote\" ? \">\" : \"\")\n    if (maxWidth != null) {\n      while (result.length < maxWidth) result += \" \"\n      return result\n    } else {\n      for (let i = this.to - this.from - result.length - this.spaceAfter.length; i > 0; i--) result += \" \"\n      return result + (trailing ? this.spaceAfter : \"\")\n    }\n  }\n\n  marker(doc: Text, add: number) {\n    let number = this.node.name == \"OrderedList\" ? String((+itemNumber(this.item!, doc)[2] + add)) : \"\"\n    return this.spaceBefore + number + this.type + this.spaceAfter\n  }\n}\n\nfunction getContext(node: SyntaxNode, doc: Text) {\n  let nodes = []\n  for (let cur: SyntaxNode | null = node; cur && cur.name != \"Document\"; cur = cur.parent) {\n    if (cur.name == \"ListItem\" || cur.name == \"Blockquote\" || cur.name == \"FencedCode\")\n      nodes.push(cur)\n  }\n  let context = []\n  for (let i = nodes.length - 1; i >= 0; i--) {\n    let node = nodes[i], match\n    let line = doc.lineAt(node.from), startPos = node.from - line.from\n    if (node.name == \"FencedCode\") {\n      context.push(new Context(node, startPos, startPos, \"\", \"\", \"\", null))\n    } else if (node.name == \"Blockquote\" && (match = /^ *>( ?)/.exec(line.text.slice(startPos)))) {\n      context.push(new Context(node, startPos, startPos + match[0].length, \"\", match[1], \">\", null))\n    } else if (node.name == \"ListItem\" && node.parent!.name == \"OrderedList\" &&\n               (match = /^( *)\\d+([.)])( *)/.exec(line.text.slice(startPos)))) {\n      let after = match[3], len = match[0].length\n      if (after.length >= 4) { after = after.slice(0, after.length - 4); len -= 4 }\n      context.push(new Context(node.parent!, startPos, startPos + len, match[1], after, match[2], node))\n    } else if (node.name == \"ListItem\" && node.parent!.name == \"BulletList\" &&\n               (match = /^( *)([-+*])( {1,4}\\[[ xX]\\])?( +)/.exec(line.text.slice(startPos)))) {\n      let after = match[4], len = match[0].length\n      if (after.length > 4) { after = after.slice(0, after.length - 4); len -= 4 }\n      let type = match[2]\n      if (match[3]) type += match[3].replace(/[xX]/, ' ')\n      context.push(new Context(node.parent!, startPos, startPos + len, match[1], after, type, node))\n    }\n  }\n  return context\n}\n\nfunction itemNumber(item: SyntaxNode, doc: Text) {\n  return /^(\\s*)(\\d+)(?=[.)])/.exec(doc.sliceString(item.from, item.from + 10))!\n}\n\nfunction renumberList(after: SyntaxNode, doc: Text, changes: ChangeSpec[], offset = 0) {\n  for (let prev = -1, node = after;;) {\n    if (node.name == \"ListItem\") {\n      let m = itemNumber(node, doc)\n      let number = +m[2]\n      if (prev >= 0) {\n        if (number != prev + 1) return\n        changes.push({from: node.from + m[1].length, to: node.from + m[0].length, insert: String(prev + 2 + offset)})\n      }\n      prev = number\n    }\n    let next = node.nextSibling\n    if (!next) break\n    node = next\n  }\n}\n\nfunction normalizeIndent(content: string, state: EditorState) {\n  let blank = /^[ \\t]*/.exec(content)![0].length\n  if (!blank || state.facet(indentUnit) != \"\\t\") return content\n  let col = countColumn(content, 4, blank)\n  let space = \"\"\n  for (let i = col; i > 0;) {\n    if (i >= 4) { space += \"\\t\"; i -= 4 }\n    else { space += \" \"; i-- }\n  }\n  return space + content.slice(blank)\n}\n\n/// This command, when invoked in Markdown context with cursor\n/// selection(s), will create a new line with the markup for\n/// blockquotes and lists that were active on the old line. If the\n/// cursor was directly after the end of the markup for the old line,\n/// trailing whitespace and list markers are removed from that line.\n///\n/// The command does nothing in non-Markdown context, so it should\n/// not be used as the only binding for Enter (even in a Markdown\n/// document, HTML and code regions might use a different language).\nexport const insertNewlineContinueMarkup: StateCommand = ({state, dispatch}) => {\n  let tree = syntaxTree(state), {doc} = state\n  let dont = null, changes = state.changeByRange(range => {\n    if (!range.empty || !markdownLanguage.isActiveAt(state, range.from)) return dont = {range}\n    let pos = range.from, line = doc.lineAt(pos)\n    let context = getContext(tree.resolveInner(pos, -1), doc)\n    while (context.length && context[context.length - 1].from > pos - line.from) context.pop()\n    if (!context.length) return dont = {range}\n    let inner = context[context.length - 1]\n    if (inner.to - inner.spaceAfter.length > pos - line.from) return dont = {range}\n\n    let emptyLine = pos >= (inner.to - inner.spaceAfter.length) && !/\\S/.test(line.text.slice(inner.to))\n    // Empty line in list\n    if (inner.item && emptyLine) {\n      // First list item or blank line before: delete a level of markup\n      if (inner.node.firstChild!.to >= pos ||\n          line.from > 0 && !/[^\\s>]/.test(doc.lineAt(line.from - 1).text)) {\n        let next = context.length > 1 ? context[context.length - 2] : null\n        let delTo, insert = \"\"\n        if (next && next.item) { // Re-add marker for the list at the next level\n          delTo = line.from + next.from\n          insert = next.marker(doc, 1)\n        } else {\n          delTo = line.from + (next ? next.to : 0)\n        }\n        let changes: ChangeSpec[] = [{from: delTo, to: pos, insert}]\n        if (inner.node.name == \"OrderedList\") renumberList(inner.item!, doc, changes, -2)\n        if (next && next.node.name == \"OrderedList\") renumberList(next.item!, doc, changes)\n        return {range: EditorSelection.cursor(delTo + insert.length), changes}\n      } else { // Move this line down\n        let insert = \"\"\n        for (let i = 0, e = context.length - 2; i <= e; i++) {\n          insert += context[i].blank(i < e ? countColumn(line.text, 4, context[i + 1].from) - insert.length : null, i < e)\n        }\n        insert = normalizeIndent(insert, state)\n        return {range: EditorSelection.cursor(pos + insert.length + 1),\n                changes: {from: line.from, insert: insert + state.lineBreak}}\n      }\n    }\n\n    if (inner.node.name == \"Blockquote\" && emptyLine && line.from) {\n      let prevLine = doc.lineAt(line.from - 1), quoted = />\\s*$/.exec(prevLine.text)\n      // Two aligned empty quoted lines in a row\n      if (quoted && quoted.index == inner.from) {\n        let changes = state.changes([{from: prevLine.from + quoted.index, to: prevLine.to},\n                                     {from: line.from + inner.from, to: line.to}])\n        return {range: range.map(changes), changes}\n      }\n    }\n\n    let changes: ChangeSpec[] = []\n    if (inner.node.name == \"OrderedList\") renumberList(inner.item!, doc, changes)\n    let continued = inner.item && inner.item.from < line.from\n    let insert = \"\"\n    // If not dedented\n    if (!continued || /^[\\s\\d.)\\-+*>]*/.exec(line.text)![0].length >= inner.to) {\n      for (let i = 0, e = context.length - 1; i <= e; i++) {\n        insert += i == e && !continued ? context[i].marker(doc, 1)\n          : context[i].blank(i < e ? countColumn(line.text, 4, context[i + 1].from) - insert.length : null)\n      }\n    }\n    let from = pos\n    while (from > line.from && /\\s/.test(line.text.charAt(from - line.from - 1))) from--\n    insert = normalizeIndent(insert, state)\n    changes.push({from, to: pos, insert: state.lineBreak + insert})\n    return {range: EditorSelection.cursor(from + insert.length + 1), changes}\n  })\n  if (dont) return false\n  dispatch(state.update(changes, {scrollIntoView: true, userEvent: \"input\"}))\n  return true\n}\n\nfunction isMark(node: SyntaxNode) {\n  return node.name == \"QuoteMark\" || node.name == \"ListMark\"\n}\n\nfunction contextNodeForDelete(tree: Tree, pos: number) {\n  let node = tree.resolveInner(pos, -1), scan = pos\n  if (isMark(node)) {\n    scan = node.from\n    node = node.parent!\n  }\n  for (let prev; prev = node.childBefore(scan);) {\n    if (isMark(prev)) {\n      scan = prev.from\n    } else if (prev.name == \"OrderedList\" || prev.name == \"BulletList\") {\n      node = prev.lastChild!\n      scan = node.to\n    } else {\n      break\n    }\n  }\n  return node\n}\n\n/// This command will, when invoked in a Markdown context with the\n/// cursor directly after list or blockquote markup, delete one level\n/// of markup. When the markup is for a list, it will be replaced by\n/// spaces on the first invocation (a further invocation will delete\n/// the spaces), to make it easy to continue a list.\n///\n/// When not after Markdown block markup, this command will return\n/// false, so it is intended to be bound alongside other deletion\n/// commands, with a higher precedence than the more generic commands.\nexport const deleteMarkupBackward: StateCommand = ({state, dispatch}) => {\n  let tree = syntaxTree(state)\n  let dont = null, changes = state.changeByRange(range => {\n    let pos = range.from, {doc} = state\n    if (range.empty && markdownLanguage.isActiveAt(state, range.from)) {\n      let line = doc.lineAt(pos)\n      let context = getContext(contextNodeForDelete(tree, pos), doc)\n      if (context.length) {\n        let inner = context[context.length - 1]\n        let spaceEnd = inner.to - inner.spaceAfter.length + (inner.spaceAfter ? 1 : 0)\n        // Delete extra trailing space after markup\n        if (pos - line.from > spaceEnd && !/\\S/.test(line.text.slice(spaceEnd, pos - line.from)))\n          return {range: EditorSelection.cursor(line.from + spaceEnd),\n                  changes: {from: line.from + spaceEnd, to: pos}}\n        if (pos - line.from == spaceEnd &&\n            // Only apply this if we're on the line that has the\n            // construct's syntax, or there's only indentation in the\n            // target range\n            (!inner.item || line.from <= inner.item.from || !/\\S/.test(line.text.slice(0, inner.to)))) {\n          let start = line.from + inner.from\n          // Replace a list item marker with blank space\n          if (inner.item && inner.node.from < inner.item.from && /\\S/.test(line.text.slice(inner.from, inner.to))) {\n            let insert = inner.blank(countColumn(line.text, 4, inner.to) - countColumn(line.text, 4, inner.from))\n            if (start == line.from) insert = normalizeIndent(insert, state)\n            return {range: EditorSelection.cursor(start + insert.length),\n                    changes: {from: start, to: line.from + inner.to, insert}}\n          }\n          // Delete one level of indentation\n          if (start < pos)\n            return {range: EditorSelection.cursor(start), changes: {from: start, to: pos}}\n        }\n      }\n    }\n    return dont = {range}\n  })\n  if (dont) return false\n  dispatch(state.update(changes, {scrollIntoView: true, userEvent: \"delete\"}))\n  return true\n}\n", "import {Prec, EditorState} from \"@codemirror/state\"\nimport {KeyBinding, keymap} from \"@codemirror/view\"\nimport {Language, LanguageSupport, LanguageDescription, syntaxTree} from \"@codemirror/language\"\nimport {Completion, CompletionContext} from \"@codemirror/autocomplete\"\nimport {MarkdownExtension, MarkdownParser, parseCode} from \"../lezer-parser-markdown\"\nimport {html, htmlCompletionSource} from \"@codemirror/lang-html\"\nimport {commonmarkLanguage, markdownLanguage, mkLang, getCodeParser} from \"./markdown\"\nimport {insertNewlineContinueMarkup, deleteMarkupBackward} from \"./commands\"\nexport {commonmarkLanguage, markdownLanguage, insertNewlineContinueMarkup, deleteMarkupBackward}\n\n/// A small keymap with Markdown-specific bindings. Binds Enter to\n/// [`insertNewlineContinueMarkup`](#lang-markdown.insertNewlineContinueMarkup)\n/// and Backspace to\n/// [`deleteMarkupBackward`](#lang-markdown.deleteMarkupBackward).\nexport const markdownKeymap: readonly KeyBinding[] = [\n  {key: \"Enter\", run: insertNewlineContinueMarkup},\n  {key: \"Backspace\", run: deleteMarkupBackward}\n]\n\nconst htmlNoMatch = html({matchClosingTags: false})\n\n/// Markdown language support.\nexport function markdown(config: {\n  /// When given, this language will be used by default to parse code\n  /// blocks.\n  defaultCodeLanguage?: Language | LanguageSupport,\n  /// A source of language support for highlighting fenced code\n  /// blocks. When it is an array, the parser will use\n  /// [`LanguageDescription.matchLanguageName`](#language.LanguageDescription^matchLanguageName)\n  /// with the fenced code info to find a matching language. When it\n  /// is a function, will be called with the info string and may\n  /// return a language or `LanguageDescription` object.\n  codeLanguages?: readonly LanguageDescription[] | ((info: string) => Language | LanguageDescription | null),\n  /// Set this to false to disable installation of the Markdown\n  /// [keymap](#lang-markdown.markdownKeymap).\n  addKeymap?: boolean,\n  /// Markdown parser\n  /// [extensions](https://github.com/lezer-parser/markdown#user-content-markdownextension)\n  /// to add to the parser.\n  extensions?: MarkdownExtension,\n  /// The base language to use. Defaults to\n  /// [`commonmarkLanguage`](#lang-markdown.commonmarkLanguage).\n  base?: Language,\n  /// By default, the extension installs an autocompletion source that\n  /// completes HTML tags when a `<` is typed. Set this to false to\n  /// disable this.\n  completeHTMLTags?: boolean\n} = {}) {\n  let {codeLanguages,\n       defaultCodeLanguage,\n       addKeymap = true,\n       base: {parser} = commonmarkLanguage,\n       completeHTMLTags = true} = config\n  if (!(parser instanceof MarkdownParser)) throw new RangeError(\"Base parser provided to `markdown` should be a Markdown parser\")\n  let extensions = config.extensions ? [config.extensions] : []\n  let support = [htmlNoMatch.support], defaultCode\n  if (defaultCodeLanguage instanceof LanguageSupport) {\n    support.push(defaultCodeLanguage.support)\n    defaultCode = defaultCodeLanguage.language\n  } else if (defaultCodeLanguage) {\n    defaultCode = defaultCodeLanguage\n  }\n  let codeParser = codeLanguages || defaultCode ? getCodeParser(codeLanguages, defaultCode) : undefined\n  extensions.push(parseCode({codeParser, htmlParser: htmlNoMatch.language.parser}))\n  if (addKeymap) support.push(Prec.high(keymap.of(markdownKeymap)))\n  let lang = mkLang(parser.configure(extensions))\n  if (completeHTMLTags) support.push(lang.data.of({autocomplete: htmlTagCompletion}))\n  return new LanguageSupport(lang, support)\n}\n\nfunction htmlTagCompletion(context: CompletionContext) {\n  let {state, pos} = context, m = /<[:\\-\\.\\w\\u00b7-\\uffff]*$/.exec(state.sliceDoc(pos - 25, pos))\n  if (!m) return null\n  let tree = syntaxTree(state).resolveInner(pos, -1)\n  while (tree && !tree.type.isTop) {\n    if (tree.name == \"CodeBlock\" || tree.name == \"FencedCode\" || tree.name == \"ProcessingInstructionBlock\" ||\n        tree.name == \"CommentBlock\" || tree.name == \"Link\" || tree.name == \"Image\") return null\n    tree = tree.parent!\n  }\n\n  return {\n    from: pos - m[0].length, to: pos,\n    options: htmlTagCompletions(),\n    validFor: /^<[:\\-\\.\\w\\u00b7-\\uffff]*$/\n  }\n}\n\nlet _tagCompletions: readonly Completion[] | null = null\nfunction htmlTagCompletions() {\n  if (_tagCompletions) return _tagCompletions\n  let result = htmlCompletionSource(new CompletionContext(EditorState.create({extensions: htmlNoMatch}), 0, true))\n  return _tagCompletions = result ? result.options : []\n}\n", "/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').ConstructRecord} ConstructRecord\n * @typedef {import('micromark-util-types').Event} Event\n * @typedef {import('micromark-util-types').Extension} Extension\n * @typedef {import('micromark-util-types').Previous} Previous\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {\n  asciiAlpha,\n  asciiAlphanumeric,\n  asciiControl,\n  markdownLineEndingOrSpace,\n  unicodePunctuation,\n  unicodeWhitespace\n} from 'micromark-util-character'\nconst wwwPrefix = {\n  tokenize: tokenizeWwwPrefix,\n  partial: true\n}\nconst domain = {\n  tokenize: tokenizeDomain,\n  partial: true\n}\nconst path = {\n  tokenize: tokenizePath,\n  partial: true\n}\nconst trail = {\n  tokenize: tokenizeTrail,\n  partial: true\n}\nconst emailDomainDotTrail = {\n  tokenize: tokenizeEmailDomainDotTrail,\n  partial: true\n}\nconst wwwAutolink = {\n  tokenize: tokenizeWwwAutolink,\n  previous: previousWww\n}\nconst protocolAutolink = {\n  tokenize: tokenizeProtocolAutolink,\n  previous: previousProtocol\n}\nconst emailAutolink = {\n  tokenize: tokenizeEmailAutolink,\n  previous: previousEmail\n}\n\n/** @type {ConstructRecord} */\nconst text = {}\n\n/**\n * Create an extension for `micromark` to support GitHub autolink literal\n * syntax.\n *\n * @returns {Extension}\n *   Extension for `micromark` that can be passed in `extensions` to enable GFM\n *   autolink literal syntax.\n */\nexport function gfmAutolinkLiteral() {\n  return {\n    text\n  }\n}\n\n/** @type {Code} */\nlet code = 48\n\n// Add alphanumerics.\nwhile (code < 123) {\n  text[code] = emailAutolink\n  code++\n  if (code === 58) code = 65\n  else if (code === 91) code = 97\n}\ntext[43] = emailAutolink\ntext[45] = emailAutolink\ntext[46] = emailAutolink\ntext[95] = emailAutolink\ntext[72] = [emailAutolink, protocolAutolink]\ntext[104] = [emailAutolink, protocolAutolink]\ntext[87] = [emailAutolink, wwwAutolink]\ntext[119] = [emailAutolink, wwwAutolink]\n\n// To do: perform email autolink literals on events, afterwards.\n// That\u2019s where `markdown-rs` and `cmark-gfm` perform it.\n// It should look for `@`, then for atext backwards, and then for a label\n// forwards.\n// To do: `mailto:`, `xmpp:` protocol as prefix.\n\n/**\n * Email autolink literal.\n *\n * ```markdown\n * > | a contact@example.org b\n *       ^^^^^^^^^^^^^^^^^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeEmailAutolink(effects, ok, nok) {\n  const self = this\n  /** @type {boolean | undefined} */\n  let dot\n  /** @type {boolean} */\n  let data\n  return start\n\n  /**\n   * Start of email autolink literal.\n   *\n   * ```markdown\n   * > | a contact@example.org b\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    if (\n      !gfmAtext(code) ||\n      !previousEmail.call(self, self.previous) ||\n      previousUnbalanced(self.events)\n    ) {\n      return nok(code)\n    }\n    effects.enter('literalAutolink')\n    effects.enter('literalAutolinkEmail')\n    return atext(code)\n  }\n\n  /**\n   * In email atext.\n   *\n   * ```markdown\n   * > | a contact@example.org b\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function atext(code) {\n    if (gfmAtext(code)) {\n      effects.consume(code)\n      return atext\n    }\n    if (code === 64) {\n      effects.consume(code)\n      return emailDomain\n    }\n    return nok(code)\n  }\n\n  /**\n   * In email domain.\n   *\n   * The reference code is a bit overly complex as it handles the `@`, of which\n   * there may be just one.\n   * Source: <https://github.com/github/cmark-gfm/blob/ef1cfcb/extensions/autolink.c#L318>\n   *\n   * ```markdown\n   * > | a contact@example.org b\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function emailDomain(code) {\n    // Dot followed by alphanumerical (not `-` or `_`).\n    if (code === 46) {\n      return effects.check(\n        emailDomainDotTrail,\n        emailDomainAfter,\n        emailDomainDot\n      )(code)\n    }\n\n    // Alphanumerical, `-`, and `_`.\n    if (code === 45 || code === 95 || asciiAlphanumeric(code)) {\n      data = true\n      effects.consume(code)\n      return emailDomain\n    }\n\n    // To do: `/` if xmpp.\n\n    // Note: normally we\u2019d truncate trailing punctuation from the link.\n    // However, email autolink literals cannot contain any of those markers,\n    // except for `.`, but that can only occur if it isn\u2019t trailing.\n    // So we can ignore truncating!\n    return emailDomainAfter(code)\n  }\n\n  /**\n   * In email domain, on dot that is not a trail.\n   *\n   * ```markdown\n   * > | a contact@example.org b\n   *                      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function emailDomainDot(code) {\n    effects.consume(code)\n    dot = true\n    return emailDomain\n  }\n\n  /**\n   * After email domain.\n   *\n   * ```markdown\n   * > | a contact@example.org b\n   *                          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function emailDomainAfter(code) {\n    // Domain must not be empty, must include a dot, and must end in alphabetical.\n    // Source: <https://github.com/github/cmark-gfm/blob/ef1cfcb/extensions/autolink.c#L332>.\n    if (data && dot && asciiAlpha(self.previous)) {\n      effects.exit('literalAutolinkEmail')\n      effects.exit('literalAutolink')\n      return ok(code)\n    }\n    return nok(code)\n  }\n}\n\n/**\n * `www` autolink literal.\n *\n * ```markdown\n * > | a www.example.org b\n *       ^^^^^^^^^^^^^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeWwwAutolink(effects, ok, nok) {\n  const self = this\n  return wwwStart\n\n  /**\n   * Start of www autolink literal.\n   *\n   * ```markdown\n   * > | www.example.com/a?b#c\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function wwwStart(code) {\n    if (\n      (code !== 87 && code !== 119) ||\n      !previousWww.call(self, self.previous) ||\n      previousUnbalanced(self.events)\n    ) {\n      return nok(code)\n    }\n    effects.enter('literalAutolink')\n    effects.enter('literalAutolinkWww')\n    // Note: we *check*, so we can discard the `www.` we parsed.\n    // If it worked, we consider it as a part of the domain.\n    return effects.check(\n      wwwPrefix,\n      effects.attempt(domain, effects.attempt(path, wwwAfter), nok),\n      nok\n    )(code)\n  }\n\n  /**\n   * After a www autolink literal.\n   *\n   * ```markdown\n   * > | www.example.com/a?b#c\n   *                          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function wwwAfter(code) {\n    effects.exit('literalAutolinkWww')\n    effects.exit('literalAutolink')\n    return ok(code)\n  }\n}\n\n/**\n * Protocol autolink literal.\n *\n * ```markdown\n * > | a https://example.org b\n *       ^^^^^^^^^^^^^^^^^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeProtocolAutolink(effects, ok, nok) {\n  const self = this\n  let buffer = ''\n  let seen = false\n  return protocolStart\n\n  /**\n   * Start of protocol autolink literal.\n   *\n   * ```markdown\n   * > | https://example.com/a?b#c\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function protocolStart(code) {\n    if (\n      (code === 72 || code === 104) &&\n      previousProtocol.call(self, self.previous) &&\n      !previousUnbalanced(self.events)\n    ) {\n      effects.enter('literalAutolink')\n      effects.enter('literalAutolinkHttp')\n      buffer += String.fromCodePoint(code)\n      effects.consume(code)\n      return protocolPrefixInside\n    }\n    return nok(code)\n  }\n\n  /**\n   * In protocol.\n   *\n   * ```markdown\n   * > | https://example.com/a?b#c\n   *     ^^^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function protocolPrefixInside(code) {\n    // `5` is size of `https`\n    if (asciiAlpha(code) && buffer.length < 5) {\n      // @ts-expect-error: definitely number.\n      buffer += String.fromCodePoint(code)\n      effects.consume(code)\n      return protocolPrefixInside\n    }\n    if (code === 58) {\n      const protocol = buffer.toLowerCase()\n      if (protocol === 'http' || protocol === 'https') {\n        effects.consume(code)\n        return protocolSlashesInside\n      }\n    }\n    return nok(code)\n  }\n\n  /**\n   * In slashes.\n   *\n   * ```markdown\n   * > | https://example.com/a?b#c\n   *           ^^\n   * ```\n   *\n   * @type {State}\n   */\n  function protocolSlashesInside(code) {\n    if (code === 47) {\n      effects.consume(code)\n      if (seen) {\n        return afterProtocol\n      }\n      seen = true\n      return protocolSlashesInside\n    }\n    return nok(code)\n  }\n\n  /**\n   * After protocol, before domain.\n   *\n   * ```markdown\n   * > | https://example.com/a?b#c\n   *             ^\n   * ```\n   *\n   * @type {State}\n   */\n  function afterProtocol(code) {\n    // To do: this is different from `markdown-rs`:\n    // https://github.com/wooorm/markdown-rs/blob/b3a921c761309ae00a51fe348d8a43adbc54b518/src/construct/gfm_autolink_literal.rs#L172-L182\n    return code === null ||\n      asciiControl(code) ||\n      markdownLineEndingOrSpace(code) ||\n      unicodeWhitespace(code) ||\n      unicodePunctuation(code)\n      ? nok(code)\n      : effects.attempt(domain, effects.attempt(path, protocolAfter), nok)(code)\n  }\n\n  /**\n   * After a protocol autolink literal.\n   *\n   * ```markdown\n   * > | https://example.com/a?b#c\n   *                              ^\n   * ```\n   *\n   * @type {State}\n   */\n  function protocolAfter(code) {\n    effects.exit('literalAutolinkHttp')\n    effects.exit('literalAutolink')\n    return ok(code)\n  }\n}\n\n/**\n * `www` prefix.\n *\n * ```markdown\n * > | a www.example.org b\n *       ^^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeWwwPrefix(effects, ok, nok) {\n  let size = 0\n  return wwwPrefixInside\n\n  /**\n   * In www prefix.\n   *\n   * ```markdown\n   * > | www.example.com\n   *     ^^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function wwwPrefixInside(code) {\n    if ((code === 87 || code === 119) && size < 3) {\n      size++\n      effects.consume(code)\n      return wwwPrefixInside\n    }\n    if (code === 46 && size === 3) {\n      effects.consume(code)\n      return wwwPrefixAfter\n    }\n    return nok(code)\n  }\n\n  /**\n   * After www prefix.\n   *\n   * ```markdown\n   * > | www.example.com\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function wwwPrefixAfter(code) {\n    // If there is *anything*, we can link.\n    return code === null ? nok(code) : ok(code)\n  }\n}\n\n/**\n * Domain.\n *\n * ```markdown\n * > | a https://example.org b\n *               ^^^^^^^^^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeDomain(effects, ok, nok) {\n  /** @type {boolean | undefined} */\n  let underscoreInLastSegment\n  /** @type {boolean | undefined} */\n  let underscoreInLastLastSegment\n  /** @type {boolean | undefined} */\n  let seen\n  return domainInside\n\n  /**\n   * In domain.\n   *\n   * ```markdown\n   * > | https://example.com/a\n   *             ^^^^^^^^^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function domainInside(code) {\n    // Check whether this marker, which is a trailing punctuation\n    // marker, optionally followed by more trailing markers, and then\n    // followed by an end.\n    if (code === 46 || code === 95) {\n      return effects.check(trail, domainAfter, domainAtPunctuation)(code)\n    }\n\n    // GH documents that only alphanumerics (other than `-`, `.`, and `_`) can\n    // occur, which sounds like ASCII only, but they also support `www.\u9EDE\u770B.com`,\n    // so that\u2019s Unicode.\n    // Instead of some new production for Unicode alphanumerics, markdown\n    // already has that for Unicode punctuation and whitespace, so use those.\n    // Source: <https://github.com/github/cmark-gfm/blob/ef1cfcb/extensions/autolink.c#L12>.\n    if (\n      code === null ||\n      markdownLineEndingOrSpace(code) ||\n      unicodeWhitespace(code) ||\n      (code !== 45 && unicodePunctuation(code))\n    ) {\n      return domainAfter(code)\n    }\n    seen = true\n    effects.consume(code)\n    return domainInside\n  }\n\n  /**\n   * In domain, at potential trailing punctuation, that was not trailing.\n   *\n   * ```markdown\n   * > | https://example.com\n   *                    ^\n   * ```\n   *\n   * @type {State}\n   */\n  function domainAtPunctuation(code) {\n    // There is an underscore in the last segment of the domain\n    if (code === 95) {\n      underscoreInLastSegment = true\n    }\n    // Otherwise, it\u2019s a `.`: save the last segment underscore in the\n    // penultimate segment slot.\n    else {\n      underscoreInLastLastSegment = underscoreInLastSegment\n      underscoreInLastSegment = undefined\n    }\n    effects.consume(code)\n    return domainInside\n  }\n\n  /**\n   * After domain.\n   *\n   * ```markdown\n   * > | https://example.com/a\n   *                        ^\n   * ```\n   *\n   * @type {State} */\n  function domainAfter(code) {\n    // Note: that\u2019s GH says a dot is needed, but it\u2019s not true:\n    // <https://github.com/github/cmark-gfm/issues/279>\n    if (underscoreInLastLastSegment || underscoreInLastSegment || !seen) {\n      return nok(code)\n    }\n    return ok(code)\n  }\n}\n\n/**\n * Path.\n *\n * ```markdown\n * > | a https://example.org/stuff b\n *                          ^^^^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizePath(effects, ok) {\n  let sizeOpen = 0\n  let sizeClose = 0\n  return pathInside\n\n  /**\n   * In path.\n   *\n   * ```markdown\n   * > | https://example.com/a\n   *                        ^^\n   * ```\n   *\n   * @type {State}\n   */\n  function pathInside(code) {\n    if (code === 40) {\n      sizeOpen++\n      effects.consume(code)\n      return pathInside\n    }\n\n    // To do: `markdown-rs` also needs this.\n    // If this is a paren, and there are less closings than openings,\n    // we don\u2019t check for a trail.\n    if (code === 41 && sizeClose < sizeOpen) {\n      return pathAtPunctuation(code)\n    }\n\n    // Check whether this trailing punctuation marker is optionally\n    // followed by more trailing markers, and then followed\n    // by an end.\n    if (\n      code === 33 ||\n      code === 34 ||\n      code === 38 ||\n      code === 39 ||\n      code === 41 ||\n      code === 42 ||\n      code === 44 ||\n      code === 46 ||\n      code === 58 ||\n      code === 59 ||\n      code === 60 ||\n      code === 63 ||\n      code === 93 ||\n      code === 95 ||\n      code === 126\n    ) {\n      return effects.check(trail, ok, pathAtPunctuation)(code)\n    }\n    if (\n      code === null ||\n      markdownLineEndingOrSpace(code) ||\n      unicodeWhitespace(code)\n    ) {\n      return ok(code)\n    }\n    effects.consume(code)\n    return pathInside\n  }\n\n  /**\n   * In path, at potential trailing punctuation, that was not trailing.\n   *\n   * ```markdown\n   * > | https://example.com/a\"b\n   *                          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function pathAtPunctuation(code) {\n    // Count closing parens.\n    if (code === 41) {\n      sizeClose++\n    }\n    effects.consume(code)\n    return pathInside\n  }\n}\n\n/**\n * Trail.\n *\n * This calls `ok` if this *is* the trail, followed by an end, which means\n * the entire trail is not part of the link.\n * It calls `nok` if this *is* part of the link.\n *\n * ```markdown\n * > | https://example.com\").\n *                        ^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeTrail(effects, ok, nok) {\n  return trail\n\n  /**\n   * In trail of domain or path.\n   *\n   * ```markdown\n   * > | https://example.com\").\n   *                        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function trail(code) {\n    // Regular trailing punctuation.\n    if (\n      code === 33 ||\n      code === 34 ||\n      code === 39 ||\n      code === 41 ||\n      code === 42 ||\n      code === 44 ||\n      code === 46 ||\n      code === 58 ||\n      code === 59 ||\n      code === 63 ||\n      code === 95 ||\n      code === 126\n    ) {\n      effects.consume(code)\n      return trail\n    }\n\n    // `&` followed by one or more alphabeticals and then a `;`, is\n    // as a whole considered as trailing punctuation.\n    // In all other cases, it is considered as continuation of the URL.\n    if (code === 38) {\n      effects.consume(code)\n      return trailCharRefStart\n    }\n\n    // Needed because we allow literals after `[`, as we fix:\n    // <https://github.com/github/cmark-gfm/issues/278>.\n    // Check that it is not followed by `(` or `[`.\n    if (code === 93) {\n      effects.consume(code)\n      return trailBracketAfter\n    }\n    if (\n      // `<` is an end.\n      code === 60 ||\n      // So is whitespace.\n      code === null ||\n      markdownLineEndingOrSpace(code) ||\n      unicodeWhitespace(code)\n    ) {\n      return ok(code)\n    }\n    return nok(code)\n  }\n\n  /**\n   * In trail, after `]`.\n   *\n   * > \uD83D\uDC49 **Note**: this deviates from `cmark-gfm` to fix a bug.\n   * > See end of <https://github.com/github/cmark-gfm/issues/278> for more.\n   *\n   * ```markdown\n   * > | https://example.com](\n   *                         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function trailBracketAfter(code) {\n    // Whitespace or something that could start a resource or reference is the end.\n    // Switch back to trail otherwise.\n    if (\n      code === null ||\n      code === 40 ||\n      code === 91 ||\n      markdownLineEndingOrSpace(code) ||\n      unicodeWhitespace(code)\n    ) {\n      return ok(code)\n    }\n    return trail(code)\n  }\n\n  /**\n   * In character-reference like trail, after `&`.\n   *\n   * ```markdown\n   * > | https://example.com&amp;).\n   *                         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function trailCharRefStart(code) {\n    // When non-alpha, it\u2019s not a trail.\n    return asciiAlpha(code) ? trailCharRefInside(code) : nok(code)\n  }\n\n  /**\n   * In character-reference like trail.\n   *\n   * ```markdown\n   * > | https://example.com&amp;).\n   *                         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function trailCharRefInside(code) {\n    // Switch back to trail if this is well-formed.\n    if (code === 59) {\n      effects.consume(code)\n      return trail\n    }\n    if (asciiAlpha(code)) {\n      effects.consume(code)\n      return trailCharRefInside\n    }\n\n    // It\u2019s not a trail.\n    return nok(code)\n  }\n}\n\n/**\n * Dot in email domain trail.\n *\n * This calls `ok` if this *is* the trail, followed by an end, which means\n * the trail is not part of the link.\n * It calls `nok` if this *is* part of the link.\n *\n * ```markdown\n * > | contact@example.org.\n *                        ^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeEmailDomainDotTrail(effects, ok, nok) {\n  return start\n\n  /**\n   * Dot.\n   *\n   * ```markdown\n   * > | contact@example.org.\n   *                    ^   ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    // Must be dot.\n    effects.consume(code)\n    return after\n  }\n\n  /**\n   * After dot.\n   *\n   * ```markdown\n   * > | contact@example.org.\n   *                     ^   ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    // Not a trail if alphanumeric.\n    return asciiAlphanumeric(code) ? nok(code) : ok(code)\n  }\n}\n\n/**\n * See:\n * <https://github.com/github/cmark-gfm/blob/ef1cfcb/extensions/autolink.c#L156>.\n *\n * @type {Previous}\n */\nfunction previousWww(code) {\n  return (\n    code === null ||\n    code === 40 ||\n    code === 42 ||\n    code === 95 ||\n    code === 91 ||\n    code === 93 ||\n    code === 126 ||\n    markdownLineEndingOrSpace(code)\n  )\n}\n\n/**\n * See:\n * <https://github.com/github/cmark-gfm/blob/ef1cfcb/extensions/autolink.c#L214>.\n *\n * @type {Previous}\n */\nfunction previousProtocol(code) {\n  return !asciiAlpha(code)\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Previous}\n */\nfunction previousEmail(code) {\n  // Do not allow a slash \u201Cinside\u201D atext.\n  // The reference code is a bit weird, but that\u2019s what it results in.\n  // Source: <https://github.com/github/cmark-gfm/blob/ef1cfcb/extensions/autolink.c#L307>.\n  // Other than slash, every preceding character is allowed.\n  return !(code === 47 || gfmAtext(code))\n}\n\n/**\n * @param {Code} code\n * @returns {boolean}\n */\nfunction gfmAtext(code) {\n  return (\n    code === 43 ||\n    code === 45 ||\n    code === 46 ||\n    code === 95 ||\n    asciiAlphanumeric(code)\n  )\n}\n\n/**\n * @param {Array<Event>} events\n * @returns {boolean}\n */\nfunction previousUnbalanced(events) {\n  let index = events.length\n  let result = false\n  while (index--) {\n    const token = events[index][1]\n    if (\n      (token.type === 'labelLink' || token.type === 'labelImage') &&\n      !token._balanced\n    ) {\n      result = true\n      break\n    }\n\n    // If we\u2019ve seen this token, and it was marked as not having any unbalanced\n    // bracket before it, we can exit.\n    if (token._gfmAutolinkLiteralWalkedInto) {\n      result = false\n      break\n    }\n  }\n  if (events.length > 0 && !result) {\n    // Mark the last token as \u201Cwalked into\u201D w/o finding\n    // anything.\n    events[events.length - 1][1]._gfmAutolinkLiteralWalkedInto = true\n  }\n  return result\n}\n", "/**\n * @typedef {import('micromark-util-types').CompileContext} CompileContext\n * @typedef {import('micromark-util-types').Handle} Handle\n * @typedef {import('micromark-util-types').HtmlExtension} HtmlExtension\n * @typedef {import('micromark-util-types').Token} Token\n */\n\nimport {sanitizeUri} from 'micromark-util-sanitize-uri'\n\n/**\n * Create an HTML extension for `micromark` to support GitHub autolink literal\n * when serializing to HTML.\n *\n * @returns {HtmlExtension}\n *   Extension for `micromark` that can be passed in `htmlExtensions` to\n *   support GitHub autolink literal when serializing to HTML.\n */\nexport function gfmAutolinkLiteralHtml() {\n  return {\n    exit: {\n      literalAutolinkEmail,\n      literalAutolinkHttp,\n      literalAutolinkWww\n    }\n  }\n}\n\n/**\n * @this {CompileContext}\n * @type {Handle}\n */\nfunction literalAutolinkWww(token) {\n  anchorFromToken.call(this, token, 'http://')\n}\n\n/**\n * @this {CompileContext}\n * @type {Handle}\n */\nfunction literalAutolinkEmail(token) {\n  anchorFromToken.call(this, token, 'mailto:')\n}\n\n/**\n * @this {CompileContext}\n * @type {Handle}\n */\nfunction literalAutolinkHttp(token) {\n  anchorFromToken.call(this, token)\n}\n\n/**\n * @this CompileContext\n * @param {Token} token\n * @param {string | null | undefined} [protocol]\n * @returns {undefined}\n */\nfunction anchorFromToken(token, protocol) {\n  const url = this.sliceSerialize(token)\n  this.tag('<a href=\"' + sanitizeUri((protocol || '') + url) + '\">')\n  this.raw(this.encode(url))\n  this.tag('</a>')\n}\n", "export {gfmAutolinkLiteral} from './lib/syntax.js'\nexport {gfmAutolinkLiteralHtml} from './lib/html.js'\n", "/**\n * @typedef {import('micromark-util-types').Event} Event\n * @typedef {import('micromark-util-types').Exiter} Exiter\n * @typedef {import('micromark-util-types').Extension} Extension\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {blankLine} from 'micromark-core-commonmark'\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEndingOrSpace} from 'micromark-util-character'\nimport {normalizeIdentifier} from 'micromark-util-normalize-identifier'\nconst indent = {\n  tokenize: tokenizeIndent,\n  partial: true\n}\n\n// To do: micromark should support a `_hiddenGfmFootnoteSupport`, which only\n// affects label start (image).\n// That will let us drop `tokenizePotentialGfmFootnote*`.\n// It currently has a `_hiddenFootnoteSupport`, which affects that and more.\n// That can be removed when `micromark-extension-footnote` is archived.\n\n/**\n * Create an extension for `micromark` to enable GFM footnote syntax.\n *\n * @returns {Extension}\n *   Extension for `micromark` that can be passed in `extensions` to\n *   enable GFM footnote syntax.\n */\nexport function gfmFootnote() {\n  /** @type {Extension} */\n  return {\n    document: {\n      [91]: {\n        tokenize: tokenizeDefinitionStart,\n        continuation: {\n          tokenize: tokenizeDefinitionContinuation\n        },\n        exit: gfmFootnoteDefinitionEnd\n      }\n    },\n    text: {\n      [91]: {\n        tokenize: tokenizeGfmFootnoteCall\n      },\n      [93]: {\n        add: 'after',\n        tokenize: tokenizePotentialGfmFootnoteCall,\n        resolveTo: resolveToPotentialGfmFootnoteCall\n      }\n    }\n  }\n}\n\n// To do: remove after micromark update.\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizePotentialGfmFootnoteCall(effects, ok, nok) {\n  const self = this\n  let index = self.events.length\n  const defined = self.parser.gfmFootnotes || (self.parser.gfmFootnotes = [])\n  /** @type {Token} */\n  let labelStart\n\n  // Find an opening.\n  while (index--) {\n    const token = self.events[index][1]\n    if (token.type === 'labelImage') {\n      labelStart = token\n      break\n    }\n\n    // Exit if we\u2019ve walked far enough.\n    if (\n      token.type === 'gfmFootnoteCall' ||\n      token.type === 'labelLink' ||\n      token.type === 'label' ||\n      token.type === 'image' ||\n      token.type === 'link'\n    ) {\n      break\n    }\n  }\n  return start\n\n  /**\n   * @type {State}\n   */\n  function start(code) {\n    if (!labelStart || !labelStart._balanced) {\n      return nok(code)\n    }\n    const id = normalizeIdentifier(\n      self.sliceSerialize({\n        start: labelStart.end,\n        end: self.now()\n      })\n    )\n    if (id.codePointAt(0) !== 94 || !defined.includes(id.slice(1))) {\n      return nok(code)\n    }\n    effects.enter('gfmFootnoteCallLabelMarker')\n    effects.consume(code)\n    effects.exit('gfmFootnoteCallLabelMarker')\n    return ok(code)\n  }\n}\n\n// To do: remove after micromark update.\n/** @type {Resolver} */\nfunction resolveToPotentialGfmFootnoteCall(events, context) {\n  let index = events.length\n  /** @type {Token | undefined} */\n  let labelStart\n\n  // Find an opening.\n  while (index--) {\n    if (\n      events[index][1].type === 'labelImage' &&\n      events[index][0] === 'enter'\n    ) {\n      labelStart = events[index][1]\n      break\n    }\n  }\n  // Change the `labelImageMarker` to a `data`.\n  events[index + 1][1].type = 'data'\n  events[index + 3][1].type = 'gfmFootnoteCallLabelMarker'\n\n  // The whole (without `!`):\n  /** @type {Token} */\n  const call = {\n    type: 'gfmFootnoteCall',\n    start: Object.assign({}, events[index + 3][1].start),\n    end: Object.assign({}, events[events.length - 1][1].end)\n  }\n  // The `^` marker\n  /** @type {Token} */\n  const marker = {\n    type: 'gfmFootnoteCallMarker',\n    start: Object.assign({}, events[index + 3][1].end),\n    end: Object.assign({}, events[index + 3][1].end)\n  }\n  // Increment the end 1 character.\n  marker.end.column++\n  marker.end.offset++\n  marker.end._bufferIndex++\n  /** @type {Token} */\n  const string = {\n    type: 'gfmFootnoteCallString',\n    start: Object.assign({}, marker.end),\n    end: Object.assign({}, events[events.length - 1][1].start)\n  }\n  /** @type {Token} */\n  const chunk = {\n    type: 'chunkString',\n    contentType: 'string',\n    start: Object.assign({}, string.start),\n    end: Object.assign({}, string.end)\n  }\n\n  /** @type {Array<Event>} */\n  const replacement = [\n    // Take the `labelImageMarker` (now `data`, the `!`)\n    events[index + 1],\n    events[index + 2],\n    ['enter', call, context],\n    // The `[`\n    events[index + 3],\n    events[index + 4],\n    // The `^`.\n    ['enter', marker, context],\n    ['exit', marker, context],\n    // Everything in between.\n    ['enter', string, context],\n    ['enter', chunk, context],\n    ['exit', chunk, context],\n    ['exit', string, context],\n    // The ending (`]`, properly parsed and labelled).\n    events[events.length - 2],\n    events[events.length - 1],\n    ['exit', call, context]\n  ]\n  events.splice(index, events.length - index + 1, ...replacement)\n  return events\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeGfmFootnoteCall(effects, ok, nok) {\n  const self = this\n  const defined = self.parser.gfmFootnotes || (self.parser.gfmFootnotes = [])\n  let size = 0\n  /** @type {boolean} */\n  let data\n\n  // Note: the implementation of `markdown-rs` is different, because it houses\n  // core *and* extensions in one project.\n  // Therefore, it can include footnote logic inside `label-end`.\n  // We can\u2019t do that, but luckily, we can parse footnotes in a simpler way than\n  // needed for labels.\n  return start\n\n  /**\n   * Start of footnote label.\n   *\n   * ```markdown\n   * > | a [^b] c\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter('gfmFootnoteCall')\n    effects.enter('gfmFootnoteCallLabelMarker')\n    effects.consume(code)\n    effects.exit('gfmFootnoteCallLabelMarker')\n    return callStart\n  }\n\n  /**\n   * After `[`, at `^`.\n   *\n   * ```markdown\n   * > | a [^b] c\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function callStart(code) {\n    if (code !== 94) return nok(code)\n    effects.enter('gfmFootnoteCallMarker')\n    effects.consume(code)\n    effects.exit('gfmFootnoteCallMarker')\n    effects.enter('gfmFootnoteCallString')\n    effects.enter('chunkString').contentType = 'string'\n    return callData\n  }\n\n  /**\n   * In label.\n   *\n   * ```markdown\n   * > | a [^b] c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function callData(code) {\n    if (\n      // Too long.\n      size > 999 ||\n      // Closing brace with nothing.\n      (code === 93 && !data) ||\n      // Space or tab is not supported by GFM for some reason.\n      // `\\n` and `[` not being supported makes sense.\n      code === null ||\n      code === 91 ||\n      markdownLineEndingOrSpace(code)\n    ) {\n      return nok(code)\n    }\n    if (code === 93) {\n      effects.exit('chunkString')\n      const token = effects.exit('gfmFootnoteCallString')\n      if (!defined.includes(normalizeIdentifier(self.sliceSerialize(token)))) {\n        return nok(code)\n      }\n      effects.enter('gfmFootnoteCallLabelMarker')\n      effects.consume(code)\n      effects.exit('gfmFootnoteCallLabelMarker')\n      effects.exit('gfmFootnoteCall')\n      return ok\n    }\n    if (!markdownLineEndingOrSpace(code)) {\n      data = true\n    }\n    size++\n    effects.consume(code)\n    return code === 92 ? callEscape : callData\n  }\n\n  /**\n   * On character after escape.\n   *\n   * ```markdown\n   * > | a [^b\\c] d\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function callEscape(code) {\n    if (code === 91 || code === 92 || code === 93) {\n      effects.consume(code)\n      size++\n      return callData\n    }\n    return callData(code)\n  }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeDefinitionStart(effects, ok, nok) {\n  const self = this\n  const defined = self.parser.gfmFootnotes || (self.parser.gfmFootnotes = [])\n  /** @type {string} */\n  let identifier\n  let size = 0\n  /** @type {boolean | undefined} */\n  let data\n  return start\n\n  /**\n   * Start of GFM footnote definition.\n   *\n   * ```markdown\n   * > | [^a]: b\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter('gfmFootnoteDefinition')._container = true\n    effects.enter('gfmFootnoteDefinitionLabel')\n    effects.enter('gfmFootnoteDefinitionLabelMarker')\n    effects.consume(code)\n    effects.exit('gfmFootnoteDefinitionLabelMarker')\n    return labelAtMarker\n  }\n\n  /**\n   * In label, at caret.\n   *\n   * ```markdown\n   * > | [^a]: b\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function labelAtMarker(code) {\n    if (code === 94) {\n      effects.enter('gfmFootnoteDefinitionMarker')\n      effects.consume(code)\n      effects.exit('gfmFootnoteDefinitionMarker')\n      effects.enter('gfmFootnoteDefinitionLabelString')\n      effects.enter('chunkString').contentType = 'string'\n      return labelInside\n    }\n    return nok(code)\n  }\n\n  /**\n   * In label.\n   *\n   * > \uD83D\uDC49 **Note**: `cmark-gfm` prevents whitespace from occurring in footnote\n   * > definition labels.\n   *\n   * ```markdown\n   * > | [^a]: b\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function labelInside(code) {\n    if (\n      // Too long.\n      size > 999 ||\n      // Closing brace with nothing.\n      (code === 93 && !data) ||\n      // Space or tab is not supported by GFM for some reason.\n      // `\\n` and `[` not being supported makes sense.\n      code === null ||\n      code === 91 ||\n      markdownLineEndingOrSpace(code)\n    ) {\n      return nok(code)\n    }\n    if (code === 93) {\n      effects.exit('chunkString')\n      const token = effects.exit('gfmFootnoteDefinitionLabelString')\n      identifier = normalizeIdentifier(self.sliceSerialize(token))\n      effects.enter('gfmFootnoteDefinitionLabelMarker')\n      effects.consume(code)\n      effects.exit('gfmFootnoteDefinitionLabelMarker')\n      effects.exit('gfmFootnoteDefinitionLabel')\n      return labelAfter\n    }\n    if (!markdownLineEndingOrSpace(code)) {\n      data = true\n    }\n    size++\n    effects.consume(code)\n    return code === 92 ? labelEscape : labelInside\n  }\n\n  /**\n   * After `\\`, at a special character.\n   *\n   * > \uD83D\uDC49 **Note**: `cmark-gfm` currently does not support escaped brackets:\n   * > <https://github.com/github/cmark-gfm/issues/240>\n   *\n   * ```markdown\n   * > | [^a\\*b]: c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function labelEscape(code) {\n    if (code === 91 || code === 92 || code === 93) {\n      effects.consume(code)\n      size++\n      return labelInside\n    }\n    return labelInside(code)\n  }\n\n  /**\n   * After definition label.\n   *\n   * ```markdown\n   * > | [^a]: b\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function labelAfter(code) {\n    if (code === 58) {\n      effects.enter('definitionMarker')\n      effects.consume(code)\n      effects.exit('definitionMarker')\n      if (!defined.includes(identifier)) {\n        defined.push(identifier)\n      }\n\n      // Any whitespace after the marker is eaten, forming indented code\n      // is not possible.\n      // No space is also fine, just like a block quote marker.\n      return factorySpace(\n        effects,\n        whitespaceAfter,\n        'gfmFootnoteDefinitionWhitespace'\n      )\n    }\n    return nok(code)\n  }\n\n  /**\n   * After definition prefix.\n   *\n   * ```markdown\n   * > | [^a]: b\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function whitespaceAfter(code) {\n    // `markdown-rs` has a wrapping token for the prefix that is closed here.\n    return ok(code)\n  }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeDefinitionContinuation(effects, ok, nok) {\n  /// Start of footnote definition continuation.\n  ///\n  /// ```markdown\n  ///   | [^a]: b\n  /// > |     c\n  ///     ^\n  /// ```\n  //\n  // Either a blank line, which is okay, or an indented thing.\n  return effects.check(blankLine, ok, effects.attempt(indent, ok, nok))\n}\n\n/** @type {Exiter} */\nfunction gfmFootnoteDefinitionEnd(effects) {\n  effects.exit('gfmFootnoteDefinition')\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeIndent(effects, ok, nok) {\n  const self = this\n  return factorySpace(\n    effects,\n    afterPrefix,\n    'gfmFootnoteDefinitionIndent',\n    4 + 1\n  )\n\n  /**\n   * @type {State}\n   */\n  function afterPrefix(code) {\n    const tail = self.events[self.events.length - 1]\n    return tail &&\n      tail[1].type === 'gfmFootnoteDefinitionIndent' &&\n      tail[2].sliceSerialize(tail[1], true).length === 4\n      ? ok(code)\n      : nok(code)\n  }\n}\n", "/**\n * @typedef {import('micromark-util-types').HtmlExtension} HtmlExtension\n */\n\n/**\n * @callback BackLabelTemplate\n *   Generate a back label dynamically.\n *\n *   For the following markdown:\n *\n *   ```markdown\n *   Alpha[^micromark], bravo[^micromark], and charlie[^remark].\n *\n *   [^remark]: things about remark\n *   [^micromark]: things about micromark\n *   ```\n *\n *   This function will be called with:\n *\n *   * `0` and `0` for the backreference from `things about micromark` to\n *      `alpha`, as it is the first used definition, and the first call to it\n *   * `0` and `1` for the backreference from `things about micromark` to\n *      `bravo`, as it is the first used definition, and the second call to it\n *   * `1` and `0` for the backreference from `things about remark` to\n *      `charlie`, as it is the second used definition\n * @param {number} referenceIndex\n *   Index of the definition in the order that they are first referenced,\n *   0-indexed.\n * @param {number} rereferenceIndex\n *   Index of calls to the same definition, 0-indexed.\n * @returns {string}\n *   Back label to use when linking back from definitions to their reference.\n */\n\n/**\n * @typedef Options\n *   Configuration.\n * @property {string | null | undefined} [clobberPrefix='user-content-']\n *   Prefix to use before the `id` attribute on footnotes to prevent them from\n *   *clobbering* (default: `'user-content-'`).\n *\n *   Pass `''` for trusted markdown and when you are careful with\n *   polyfilling.\n *   You could pass a different prefix.\n *\n *   DOM clobbering is this:\n *\n *   ```html\n *   <p id=\"x\"></p>\n *   <script>alert(x) // `x` now refers to the `p#x` DOM element</script>\n *   ```\n *\n *   The above example shows that elements are made available by browsers, by\n *   their ID, on the `window` object.\n *   This is a security risk because you might be expecting some other variable\n *   at that place.\n *   It can also break polyfills.\n *   Using a prefix solves these problems.\n * @property {string | null | undefined} [label='Footnotes']\n *   Textual label to use for the footnotes section (default: `'Footnotes'`).\n *\n *   Change it when the markdown is not in English.\n *\n *   This label is typically hidden visually (assuming a `sr-only` CSS class\n *   is defined that does that) and so affects screen readers only.\n *   If you do have such a class, but want to show this section to everyone,\n *   pass different attributes with the `labelAttributes` option.\n * @property {string | null | undefined} [labelAttributes='class=\"sr-only\"']\n *   Attributes to use on the footnote label (default: `'class=\"sr-only\"'`).\n *\n *   Change it to show the label and add other attributes.\n *\n *   This label is typically hidden visually (assuming an `sr-only` CSS class\n *   is defined that does that) and so affects screen readers only.\n *   If you do have such a class, but want to show this section to everyone,\n *   pass an empty string.\n *   You can also add different attributes.\n *\n *   > \uD83D\uDC49 **Note**: `id=\"footnote-label\"` is always added, because footnote\n *   > calls use it with `aria-describedby` to provide an accessible label.\n * @property {string | null | undefined} [labelTagName='h2']\n *   HTML tag name to use for the footnote label element (default: `'h2'`).\n *\n *   Change it to match your document structure.\n *\n *   This label is typically hidden visually (assuming a `sr-only` CSS class\n *   is defined that does that) and so affects screen readers only.\n *   If you do have such a class, but want to show this section to everyone,\n *   pass different attributes with the `labelAttributes` option.\n * @property {BackLabelTemplate | string | null | undefined} [backLabel]\n *   Textual label to describe the backreference back to references (default:\n *   `defaultBackLabel`).\n *\n *   The default value is:\n *\n *   ```js\n *   function defaultBackLabel(referenceIndex, rereferenceIndex) {\n *    return (\n *      'Back to reference ' +\n *      (referenceIndex + 1) +\n *      (rereferenceIndex > 1 ? '-' + rereferenceIndex : '')\n *    )\n *  }\n *   ```\n *\n *   Change it when the markdown is not in English.\n *\n *   This label is used in the `aria-label` attribute on each backreference\n *   (the `\u21A9` links).\n *   It affects users of assistive technology.\n */\n\nimport {normalizeIdentifier} from 'micromark-util-normalize-identifier'\nimport {sanitizeUri} from 'micromark-util-sanitize-uri'\nconst own = {}.hasOwnProperty\n\n/** @type {Options} */\nconst emptyOptions = {}\n\n/**\n * Generate the default label that GitHub uses on backreferences.\n *\n * @param {number} referenceIndex\n *   Index of the definition in the order that they are first referenced,\n *   0-indexed.\n * @param {number} rereferenceIndex\n *   Index of calls to the same definition, 0-indexed.\n * @returns {string}\n *   Default label.\n */\nexport function defaultBackLabel(referenceIndex, rereferenceIndex) {\n  return (\n    'Back to reference ' +\n    (referenceIndex + 1) +\n    (rereferenceIndex > 1 ? '-' + rereferenceIndex : '')\n  )\n}\n\n/**\n * Create an extension for `micromark` to support GFM footnotes when\n * serializing to HTML.\n *\n * @param {Options | null | undefined} [options={}]\n *   Configuration (optional).\n * @returns {HtmlExtension}\n *   Extension for `micromark` that can be passed in `htmlExtensions` to\n *   support GFM footnotes when serializing to HTML.\n */\nexport function gfmFootnoteHtml(options) {\n  const config = options || emptyOptions\n  const label = config.label || 'Footnotes'\n  const labelTagName = config.labelTagName || 'h2'\n  const labelAttributes =\n    config.labelAttributes === null || config.labelAttributes === undefined\n      ? 'class=\"sr-only\"'\n      : config.labelAttributes\n  const backLabel = config.backLabel || defaultBackLabel\n  const clobberPrefix =\n    config.clobberPrefix === null || config.clobberPrefix === undefined\n      ? 'user-content-'\n      : config.clobberPrefix\n  return {\n    enter: {\n      gfmFootnoteDefinition() {\n        const stack = this.getData('tightStack')\n        stack.push(false)\n      },\n      gfmFootnoteDefinitionLabelString() {\n        this.buffer()\n      },\n      gfmFootnoteCallString() {\n        this.buffer()\n      }\n    },\n    exit: {\n      gfmFootnoteDefinition() {\n        let definitions = this.getData('gfmFootnoteDefinitions')\n        const footnoteStack = this.getData('gfmFootnoteDefinitionStack')\n        const tightStack = this.getData('tightStack')\n        const current = footnoteStack.pop()\n        const value = this.resume()\n        if (!definitions) {\n          this.setData('gfmFootnoteDefinitions', (definitions = {}))\n        }\n        if (!own.call(definitions, current)) definitions[current] = value\n        tightStack.pop()\n        this.setData('slurpOneLineEnding', true)\n        // \u201CHack\u201D to prevent a line ending from showing up if we\u2019re in a definition in\n        // an empty list item.\n        this.setData('lastWasTag')\n      },\n      gfmFootnoteDefinitionLabelString(token) {\n        let footnoteStack = this.getData('gfmFootnoteDefinitionStack')\n        if (!footnoteStack) {\n          this.setData('gfmFootnoteDefinitionStack', (footnoteStack = []))\n        }\n        footnoteStack.push(normalizeIdentifier(this.sliceSerialize(token)))\n        this.resume() // Drop the label.\n        this.buffer() // Get ready for a value.\n      },\n\n      gfmFootnoteCallString(token) {\n        let calls = this.getData('gfmFootnoteCallOrder')\n        let counts = this.getData('gfmFootnoteCallCounts')\n        const id = normalizeIdentifier(this.sliceSerialize(token))\n        /** @type {number} */\n        let counter\n        this.resume()\n        if (!calls) this.setData('gfmFootnoteCallOrder', (calls = []))\n        if (!counts) this.setData('gfmFootnoteCallCounts', (counts = {}))\n        const index = calls.indexOf(id)\n        const safeId = sanitizeUri(id.toLowerCase())\n        if (index === -1) {\n          calls.push(id)\n          counts[id] = 1\n          counter = calls.length\n        } else {\n          counts[id]++\n          counter = index + 1\n        }\n        const reuseCounter = counts[id]\n        this.tag(\n          '<sup><a href=\"#' +\n            clobberPrefix +\n            'fn-' +\n            safeId +\n            '\" id=\"' +\n            clobberPrefix +\n            'fnref-' +\n            safeId +\n            (reuseCounter > 1 ? '-' + reuseCounter : '') +\n            '\" data-footnote-ref=\"\" aria-describedby=\"footnote-label\">' +\n            String(counter) +\n            '</a></sup>'\n        )\n      },\n      null() {\n        const calls = this.getData('gfmFootnoteCallOrder') || []\n        const counts = this.getData('gfmFootnoteCallCounts') || {}\n        const definitions = this.getData('gfmFootnoteDefinitions') || {}\n        let index = -1\n        if (calls.length > 0) {\n          this.lineEndingIfNeeded()\n          this.tag(\n            '<section data-footnotes=\"\" class=\"footnotes\"><' +\n              labelTagName +\n              ' id=\"footnote-label\"' +\n              (labelAttributes ? ' ' + labelAttributes : '') +\n              '>'\n          )\n          this.raw(this.encode(label))\n          this.tag('</' + labelTagName + '>')\n          this.lineEndingIfNeeded()\n          this.tag('<ol>')\n        }\n        while (++index < calls.length) {\n          // Called definitions are always defined.\n          const id = calls[index]\n          const safeId = sanitizeUri(id.toLowerCase())\n          let referenceIndex = 0\n          /** @type {Array<string>} */\n          const references = []\n          while (++referenceIndex <= counts[id]) {\n            references.push(\n              '<a href=\"#' +\n                clobberPrefix +\n                'fnref-' +\n                safeId +\n                (referenceIndex > 1 ? '-' + referenceIndex : '') +\n                '\" data-footnote-backref=\"\" aria-label=\"' +\n                this.encode(\n                  typeof backLabel === 'string'\n                    ? backLabel\n                    : backLabel(index, referenceIndex)\n                ) +\n                '\" class=\"data-footnote-backref\">\u21A9' +\n                (referenceIndex > 1\n                  ? '<sup>' + referenceIndex + '</sup>'\n                  : '') +\n                '</a>'\n            )\n          }\n          const reference = references.join(' ')\n          let injected = false\n          this.lineEndingIfNeeded()\n          this.tag('<li id=\"' + clobberPrefix + 'fn-' + safeId + '\">')\n          this.lineEndingIfNeeded()\n          this.tag(\n            definitions[id].replace(/<\\/p>(?:\\r?\\n|\\r)?$/, function ($0) {\n              injected = true\n              return ' ' + reference + $0\n            })\n          )\n          if (!injected) {\n            this.lineEndingIfNeeded()\n            this.tag(reference)\n          }\n          this.lineEndingIfNeeded()\n          this.tag('</li>')\n        }\n        if (calls.length > 0) {\n          this.lineEndingIfNeeded()\n          this.tag('</ol>')\n          this.lineEndingIfNeeded()\n          this.tag('</section>')\n        }\n      }\n    }\n  }\n}\n", "// Note: types are exported from `dev/index.d.ts`.\nexport {gfmFootnote} from './lib/syntax.js'\nexport {gfmFootnoteHtml, defaultBackLabel} from './lib/html.js'\n", "/**\n * @typedef {import('micromark-util-types').HtmlExtension} HtmlExtension\n */\n\n/**\n * Create an HTML extension for `micromark` to support GFM strikethrough when\n * serializing to HTML.\n *\n * @returns {HtmlExtension}\n *   Extension for `micromark` that can be passed in `htmlExtensions`, to\n *   support GFM strikethrough when serializing to HTML.\n */\nexport function gfmStrikethroughHtml() {\n  return {\n    enter: {\n      strikethrough() {\n        this.tag('<del>')\n      }\n    },\n    exit: {\n      strikethrough() {\n        this.tag('</del>')\n      }\n    }\n  }\n}\n", "/**\n * @typedef {import('micromark-util-types').Event} Event\n * @typedef {import('micromark-util-types').Extension} Extension\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n *\n * @typedef Options\n *   Configuration (optional).\n * @property {boolean | null | undefined} [singleTilde=true]\n *   Whether to support strikethrough with a single tilde (default: `true`).\n *\n *   Single tildes work on github.com, but are technically prohibited by the\n *   GFM spec.\n */\n\nimport {splice} from 'micromark-util-chunked'\nimport {classifyCharacter} from 'micromark-util-classify-character'\nimport {resolveAll} from 'micromark-util-resolve-all'\n/**\n * Create an extension for `micromark` to enable GFM strikethrough syntax.\n *\n * @param {Options | null | undefined} [options={}]\n *   Configuration.\n * @returns {Extension}\n *   Extension for `micromark` that can be passed in `extensions`, to\n *   enable GFM strikethrough syntax.\n */\nexport function gfmStrikethrough(options) {\n  const options_ = options || {}\n  let single = options_.singleTilde\n  const tokenizer = {\n    tokenize: tokenizeStrikethrough,\n    resolveAll: resolveAllStrikethrough\n  }\n  if (single === null || single === undefined) {\n    single = true\n  }\n  return {\n    text: {\n      [126]: tokenizer\n    },\n    insideSpan: {\n      null: [tokenizer]\n    },\n    attentionMarkers: {\n      null: [126]\n    }\n  }\n\n  /**\n   * Take events and resolve strikethrough.\n   *\n   * @type {Resolver}\n   */\n  function resolveAllStrikethrough(events, context) {\n    let index = -1\n\n    // Walk through all events.\n    while (++index < events.length) {\n      // Find a token that can close.\n      if (\n        events[index][0] === 'enter' &&\n        events[index][1].type === 'strikethroughSequenceTemporary' &&\n        events[index][1]._close\n      ) {\n        let open = index\n\n        // Now walk back to find an opener.\n        while (open--) {\n          // Find a token that can open the closer.\n          if (\n            events[open][0] === 'exit' &&\n            events[open][1].type === 'strikethroughSequenceTemporary' &&\n            events[open][1]._open &&\n            // If the sizes are the same:\n            events[index][1].end.offset - events[index][1].start.offset ===\n              events[open][1].end.offset - events[open][1].start.offset\n          ) {\n            events[index][1].type = 'strikethroughSequence'\n            events[open][1].type = 'strikethroughSequence'\n\n            /** @type {Token} */\n            const strikethrough = {\n              type: 'strikethrough',\n              start: Object.assign({}, events[open][1].start),\n              end: Object.assign({}, events[index][1].end)\n            }\n\n            /** @type {Token} */\n            const text = {\n              type: 'strikethroughText',\n              start: Object.assign({}, events[open][1].end),\n              end: Object.assign({}, events[index][1].start)\n            }\n\n            // Opening.\n            /** @type {Array<Event>} */\n            const nextEvents = [\n              ['enter', strikethrough, context],\n              ['enter', events[open][1], context],\n              ['exit', events[open][1], context],\n              ['enter', text, context]\n            ]\n            const insideSpan = context.parser.constructs.insideSpan.null\n            if (insideSpan) {\n              // Between.\n              splice(\n                nextEvents,\n                nextEvents.length,\n                0,\n                resolveAll(insideSpan, events.slice(open + 1, index), context)\n              )\n            }\n\n            // Closing.\n            splice(nextEvents, nextEvents.length, 0, [\n              ['exit', text, context],\n              ['enter', events[index][1], context],\n              ['exit', events[index][1], context],\n              ['exit', strikethrough, context]\n            ])\n            splice(events, open - 1, index - open + 3, nextEvents)\n            index = open + nextEvents.length - 2\n            break\n          }\n        }\n      }\n    }\n    index = -1\n    while (++index < events.length) {\n      if (events[index][1].type === 'strikethroughSequenceTemporary') {\n        events[index][1].type = 'data'\n      }\n    }\n    return events\n  }\n\n  /**\n   * @this {TokenizeContext}\n   * @type {Tokenizer}\n   */\n  function tokenizeStrikethrough(effects, ok, nok) {\n    const previous = this.previous\n    const events = this.events\n    let size = 0\n    return start\n\n    /** @type {State} */\n    function start(code) {\n      if (\n        previous === 126 &&\n        events[events.length - 1][1].type !== 'characterEscape'\n      ) {\n        return nok(code)\n      }\n      effects.enter('strikethroughSequenceTemporary')\n      return more(code)\n    }\n\n    /** @type {State} */\n    function more(code) {\n      const before = classifyCharacter(previous)\n      if (code === 126) {\n        // If this is the third marker, exit.\n        if (size > 1) return nok(code)\n        effects.consume(code)\n        size++\n        return more\n      }\n      if (size < 2 && !single) return nok(code)\n      const token = effects.exit('strikethroughSequenceTemporary')\n      const after = classifyCharacter(code)\n      token._open = !after || (after === 2 && Boolean(before))\n      token._close = !before || (before === 2 && Boolean(after))\n      return ok(code)\n    }\n  }\n}\n", "// Note: more types exposed from `index.d.ts`.\nexport {gfmStrikethroughHtml} from './lib/html.js'\nexport {gfmStrikethrough} from './lib/syntax.js'\n", "/**\n * @typedef {import('micromark-util-types').HtmlExtension} HtmlExtension\n */\n\n/**\n * @typedef {import('./infer.js').Align} Align\n */\n\nconst alignment = {\n  none: '',\n  left: ' align=\"left\"',\n  right: ' align=\"right\"',\n  center: ' align=\"center\"'\n}\n\n// To do: micromark@5: use `infer` here, when all events are exposed.\n\n/**\n * Create an HTML extension for `micromark` to support GitHub tables when\n * serializing to HTML.\n *\n * @returns {HtmlExtension}\n *   Extension for `micromark` that can be passed in `htmlExtensions` to\n *   support GitHub tables when serializing to HTML.\n */\nexport function gfmTableHtml() {\n  return {\n    enter: {\n      table(token) {\n        const tableAlign = token._align\n        this.lineEndingIfNeeded()\n        this.tag('<table>')\n        this.setData('tableAlign', tableAlign)\n      },\n      tableBody() {\n        this.tag('<tbody>')\n      },\n      tableData() {\n        const tableAlign = this.getData('tableAlign')\n        const tableColumn = this.getData('tableColumn')\n        const align = alignment[tableAlign[tableColumn]]\n        if (align === undefined) {\n          // Capture results to ignore them.\n          this.buffer()\n        } else {\n          this.lineEndingIfNeeded()\n          this.tag('<td' + align + '>')\n        }\n      },\n      tableHead() {\n        this.lineEndingIfNeeded()\n        this.tag('<thead>')\n      },\n      tableHeader() {\n        const tableAlign = this.getData('tableAlign')\n        const tableColumn = this.getData('tableColumn')\n        const align = alignment[tableAlign[tableColumn]]\n        this.lineEndingIfNeeded()\n        this.tag('<th' + align + '>')\n      },\n      tableRow() {\n        this.setData('tableColumn', 0)\n        this.lineEndingIfNeeded()\n        this.tag('<tr>')\n      }\n    },\n    exit: {\n      // Overwrite the default code text data handler to unescape escaped pipes when\n      // they are in tables.\n      codeTextData(token) {\n        let value = this.sliceSerialize(token)\n        if (this.getData('tableAlign')) {\n          value = value.replace(/\\\\([\\\\|])/g, replace)\n        }\n        this.raw(this.encode(value))\n      },\n      table() {\n        this.setData('tableAlign')\n        // Note: we don\u2019t set `slurpAllLineEndings` anymore, in delimiter rows,\n        // but we do need to reset it to match a funky newline GH generates for\n        // list items combined with tables.\n        this.setData('slurpAllLineEndings')\n        this.lineEndingIfNeeded()\n        this.tag('</table>')\n      },\n      tableBody() {\n        this.lineEndingIfNeeded()\n        this.tag('</tbody>')\n      },\n      tableData() {\n        const tableAlign = this.getData('tableAlign')\n        const tableColumn = this.getData('tableColumn')\n        if (tableColumn in tableAlign) {\n          this.tag('</td>')\n          this.setData('tableColumn', tableColumn + 1)\n        } else {\n          // Stop capturing.\n          this.resume()\n        }\n      },\n      tableHead() {\n        this.lineEndingIfNeeded()\n        this.tag('</thead>')\n      },\n      tableHeader() {\n        const tableColumn = this.getData('tableColumn')\n        this.tag('</th>')\n        this.setData('tableColumn', tableColumn + 1)\n      },\n      tableRow() {\n        const tableAlign = this.getData('tableAlign')\n        let tableColumn = this.getData('tableColumn')\n        while (tableColumn < tableAlign.length) {\n          this.lineEndingIfNeeded()\n          this.tag('<td' + alignment[tableAlign[tableColumn]] + '></td>')\n          tableColumn++\n        }\n        this.setData('tableColumn', tableColumn)\n        this.lineEndingIfNeeded()\n        this.tag('</tr>')\n      }\n    }\n  }\n}\n\n/**\n * @param {string} $0\n * @param {string} $1\n * @returns {string}\n */\nfunction replace($0, $1) {\n  // Pipes work, backslashes don\u2019t (but can\u2019t escape pipes).\n  return $1 === '|' ? $1 : $0\n}\n", "/**\n * @typedef {import('micromark-util-types').Event} Event\n */\n\n// Port of `edit_map.rs` from `markdown-rs`.\n// This should move to `markdown-js` later.\n\n// Deal with several changes in events, batching them together.\n//\n// Preferably, changes should be kept to a minimum.\n// Sometimes, it\u2019s needed to change the list of events, because parsing can be\n// messy, and it helps to expose a cleaner interface of events to the compiler\n// and other users.\n// It can also help to merge many adjacent similar events.\n// And, in other cases, it\u2019s needed to parse subcontent: pass some events\n// through another tokenizer and inject the result.\n\n/**\n * @typedef {[number, number, Array<Event>]} Change\n * @typedef {[number, number, number]} Jump\n */\n\n/**\n * Tracks a bunch of edits.\n */\nexport class EditMap {\n  /**\n   * Create a new edit map.\n   */\n  constructor() {\n    /**\n     * Record of changes.\n     *\n     * @type {Array<Change>}\n     */\n    this.map = []\n  }\n\n  /**\n   * Create an edit: a remove and/or add at a certain place.\n   *\n   * @param {number} index\n   * @param {number} remove\n   * @param {Array<Event>} add\n   * @returns {undefined}\n   */\n  add(index, remove, add) {\n    addImpl(this, index, remove, add)\n  }\n\n  // To do: add this when moving to `micromark`.\n  // /**\n  //  * Create an edit: but insert `add` before existing additions.\n  //  *\n  //  * @param {number} index\n  //  * @param {number} remove\n  //  * @param {Array<Event>} add\n  //  * @returns {undefined}\n  //  */\n  // addBefore(index, remove, add) {\n  //   addImpl(this, index, remove, add, true)\n  // }\n\n  /**\n   * Done, change the events.\n   *\n   * @param {Array<Event>} events\n   * @returns {undefined}\n   */\n  consume(events) {\n    this.map.sort(function (a, b) {\n      return a[0] - b[0]\n    })\n\n    /* c8 ignore next 3 -- `resolve` is never called without tables, so without edits. */\n    if (this.map.length === 0) {\n      return\n    }\n\n    // To do: if links are added in events, like they are in `markdown-rs`,\n    // this is needed.\n    // // Calculate jumps: where items in the current list move to.\n    // /** @type {Array<Jump>} */\n    // const jumps = []\n    // let index = 0\n    // let addAcc = 0\n    // let removeAcc = 0\n    // while (index < this.map.length) {\n    //   const [at, remove, add] = this.map[index]\n    //   removeAcc += remove\n    //   addAcc += add.length\n    //   jumps.push([at, removeAcc, addAcc])\n    //   index += 1\n    // }\n    //\n    // . shiftLinks(events, jumps)\n\n    let index = this.map.length\n    /** @type {Array<Array<Event>>} */\n    const vecs = []\n    while (index > 0) {\n      index -= 1\n      vecs.push(\n        events.slice(this.map[index][0] + this.map[index][1]),\n        this.map[index][2]\n      )\n\n      // Truncate rest.\n      events.length = this.map[index][0]\n    }\n    vecs.push([...events])\n    events.length = 0\n    let slice = vecs.pop()\n    while (slice) {\n      events.push(...slice)\n      slice = vecs.pop()\n    }\n\n    // Truncate everything.\n    this.map.length = 0\n  }\n}\n\n/**\n * Create an edit.\n *\n * @param {EditMap} editMap\n * @param {number} at\n * @param {number} remove\n * @param {Array<Event>} add\n * @returns {undefined}\n */\nfunction addImpl(editMap, at, remove, add) {\n  let index = 0\n\n  /* c8 ignore next 3 -- `resolve` is never called without tables, so without edits. */\n  if (remove === 0 && add.length === 0) {\n    return\n  }\n  while (index < editMap.map.length) {\n    if (editMap.map[index][0] === at) {\n      editMap.map[index][1] += remove\n\n      // To do: before not used by tables, use when moving to micromark.\n      // if (before) {\n      //   add.push(...editMap.map[index][2])\n      //   editMap.map[index][2] = add\n      // } else {\n      editMap.map[index][2].push(...add)\n      // }\n\n      return\n    }\n    index += 1\n  }\n  editMap.map.push([at, remove, add])\n}\n\n// /**\n//  * Shift `previous` and `next` links according to `jumps`.\n//  *\n//  * This fixes links in case there are events removed or added between them.\n//  *\n//  * @param {Array<Event>} events\n//  * @param {Array<Jump>} jumps\n//  */\n// function shiftLinks(events, jumps) {\n//   let jumpIndex = 0\n//   let index = 0\n//   let add = 0\n//   let rm = 0\n\n//   while (index < events.length) {\n//     const rmCurr = rm\n\n//     while (jumpIndex < jumps.length && jumps[jumpIndex][0] <= index) {\n//       add = jumps[jumpIndex][2]\n//       rm = jumps[jumpIndex][1]\n//       jumpIndex += 1\n//     }\n\n//     // Ignore items that will be removed.\n//     if (rm > rmCurr) {\n//       index += rm - rmCurr\n//     } else {\n//       // ?\n//       // if let Some(link) = &events[index].link {\n//       //     if let Some(next) = link.next {\n//       //         events[next].link.as_mut().unwrap().previous = Some(index + add - rm);\n//       //         while jumpIndex < jumps.len() && jumps[jumpIndex].0 <= next {\n//       //             add = jumps[jumpIndex].2;\n//       //             rm = jumps[jumpIndex].1;\n//       //             jumpIndex += 1;\n//       //         }\n//       //         events[index].link.as_mut().unwrap().next = Some(next + add - rm);\n//       //         index = next;\n//       //         continue;\n//       //     }\n//       // }\n//       index += 1\n//     }\n//   }\n// }\n", "/**\n * @typedef {import('micromark-util-types').Event} Event\n */\n\n/**\n * @typedef {'center' | 'left' | 'none' | 'right'} Align\n */\n\n/**\n * Figure out the alignment of a GFM table.\n *\n * @param {Readonly<Array<Event>>} events\n *   List of events.\n * @param {number} index\n *   Table enter event.\n * @returns {Array<Align>}\n *   List of aligns.\n */\nexport function gfmTableAlign(events, index) {\n  let inDelimiterRow = false\n  /** @type {Array<Align>} */\n  const align = []\n  while (index < events.length) {\n    const event = events[index]\n    if (inDelimiterRow) {\n      if (event[0] === 'enter') {\n        // Start of alignment value: set a new column.\n        // To do: `markdown-rs` uses `tableDelimiterCellValue`.\n        if (event[1].type === 'tableContent') {\n          align.push(\n            events[index + 1][1].type === 'tableDelimiterMarker'\n              ? 'left'\n              : 'none'\n          )\n        }\n      }\n      // Exits:\n      // End of alignment value: change the column.\n      // To do: `markdown-rs` uses `tableDelimiterCellValue`.\n      else if (event[1].type === 'tableContent') {\n        if (events[index - 1][1].type === 'tableDelimiterMarker') {\n          const alignIndex = align.length - 1\n          align[alignIndex] = align[alignIndex] === 'left' ? 'center' : 'right'\n        }\n      }\n      // Done!\n      else if (event[1].type === 'tableDelimiterRow') {\n        break\n      }\n    } else if (event[0] === 'enter' && event[1].type === 'tableDelimiterRow') {\n      inDelimiterRow = true\n    }\n    index += 1\n  }\n  return align\n}\n", "/**\n * @typedef {import('micromark-util-types').Event} Event\n * @typedef {import('micromark-util-types').Extension} Extension\n * @typedef {import('micromark-util-types').Point} Point\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\n/**\n * @typedef {[number, number, number, number]} Range\n *   Cell info.\n *\n * @typedef {0 | 1 | 2 | 3} RowKind\n *   Where we are: `1` for head row, `2` for delimiter row, `3` for body row.\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {\n  markdownLineEnding,\n  markdownLineEndingOrSpace,\n  markdownSpace\n} from 'micromark-util-character'\nimport {EditMap} from './edit-map.js'\nimport {gfmTableAlign} from './infer.js'\n\n/**\n * Create an HTML extension for `micromark` to support GitHub tables syntax.\n *\n * @returns {Extension}\n *   Extension for `micromark` that can be passed in `extensions` to enable GFM\n *   table syntax.\n */\nexport function gfmTable() {\n  return {\n    flow: {\n      null: {\n        tokenize: tokenizeTable,\n        resolveAll: resolveTable\n      }\n    }\n  }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeTable(effects, ok, nok) {\n  const self = this\n  let size = 0\n  let sizeB = 0\n  /** @type {boolean | undefined} */\n  let seen\n  return start\n\n  /**\n   * Start of a GFM table.\n   *\n   * If there is a valid table row or table head before, then we try to parse\n   * another row.\n   * Otherwise, we try to parse a head.\n   *\n   * ```markdown\n   * > | | a |\n   *     ^\n   *   | | - |\n   * > | | b |\n   *     ^\n   * ```\n   * @type {State}\n   */\n  function start(code) {\n    let index = self.events.length - 1\n    while (index > -1) {\n      const type = self.events[index][1].type\n      if (\n        type === 'lineEnding' ||\n        // Note: markdown-rs uses `whitespace` instead of `linePrefix`\n        type === 'linePrefix'\n      )\n        index--\n      else break\n    }\n    const tail = index > -1 ? self.events[index][1].type : null\n    const next =\n      tail === 'tableHead' || tail === 'tableRow' ? bodyRowStart : headRowBefore\n\n    // Don\u2019t allow lazy body rows.\n    if (next === bodyRowStart && self.parser.lazy[self.now().line]) {\n      return nok(code)\n    }\n    return next(code)\n  }\n\n  /**\n   * Before table head row.\n   *\n   * ```markdown\n   * > | | a |\n   *     ^\n   *   | | - |\n   *   | | b |\n   * ```\n   *\n   * @type {State}\n   */\n  function headRowBefore(code) {\n    effects.enter('tableHead')\n    effects.enter('tableRow')\n    return headRowStart(code)\n  }\n\n  /**\n   * Before table head row, after whitespace.\n   *\n   * ```markdown\n   * > | | a |\n   *     ^\n   *   | | - |\n   *   | | b |\n   * ```\n   *\n   * @type {State}\n   */\n  function headRowStart(code) {\n    if (code === 124) {\n      return headRowBreak(code)\n    }\n\n    // To do: micromark-js should let us parse our own whitespace in extensions,\n    // like `markdown-rs`:\n    //\n    // ```js\n    // // 4+ spaces.\n    // if (markdownSpace(code)) {\n    //   return nok(code)\n    // }\n    // ```\n\n    seen = true\n    // Count the first character, that isn\u2019t a pipe, double.\n    sizeB += 1\n    return headRowBreak(code)\n  }\n\n  /**\n   * At break in table head row.\n   *\n   * ```markdown\n   * > | | a |\n   *     ^\n   *       ^\n   *         ^\n   *   | | - |\n   *   | | b |\n   * ```\n   *\n   * @type {State}\n   */\n  function headRowBreak(code) {\n    if (code === null) {\n      // Note: in `markdown-rs`, we need to reset, in `micromark-js` we don\u2018t.\n      return nok(code)\n    }\n    if (markdownLineEnding(code)) {\n      // If anything other than one pipe (ignoring whitespace) was used, it\u2019s fine.\n      if (sizeB > 1) {\n        sizeB = 0\n        // To do: check if this works.\n        // Feel free to interrupt:\n        self.interrupt = true\n        effects.exit('tableRow')\n        effects.enter('lineEnding')\n        effects.consume(code)\n        effects.exit('lineEnding')\n        return headDelimiterStart\n      }\n\n      // Note: in `markdown-rs`, we need to reset, in `micromark-js` we don\u2018t.\n      return nok(code)\n    }\n    if (markdownSpace(code)) {\n      // To do: check if this is fine.\n      // effects.attempt(State::Next(StateName::GfmTableHeadRowBreak), State::Nok)\n      // State::Retry(space_or_tab(tokenizer))\n      return factorySpace(effects, headRowBreak, 'whitespace')(code)\n    }\n    sizeB += 1\n    if (seen) {\n      seen = false\n      // Header cell count.\n      size += 1\n    }\n    if (code === 124) {\n      effects.enter('tableCellDivider')\n      effects.consume(code)\n      effects.exit('tableCellDivider')\n      // Whether a delimiter was seen.\n      seen = true\n      return headRowBreak\n    }\n\n    // Anything else is cell data.\n    effects.enter('data')\n    return headRowData(code)\n  }\n\n  /**\n   * In table head row data.\n   *\n   * ```markdown\n   * > | | a |\n   *       ^\n   *   | | - |\n   *   | | b |\n   * ```\n   *\n   * @type {State}\n   */\n  function headRowData(code) {\n    if (code === null || code === 124 || markdownLineEndingOrSpace(code)) {\n      effects.exit('data')\n      return headRowBreak(code)\n    }\n    effects.consume(code)\n    return code === 92 ? headRowEscape : headRowData\n  }\n\n  /**\n   * In table head row escape.\n   *\n   * ```markdown\n   * > | | a\\-b |\n   *         ^\n   *   | | ---- |\n   *   | | c    |\n   * ```\n   *\n   * @type {State}\n   */\n  function headRowEscape(code) {\n    if (code === 92 || code === 124) {\n      effects.consume(code)\n      return headRowData\n    }\n    return headRowData(code)\n  }\n\n  /**\n   * Before delimiter row.\n   *\n   * ```markdown\n   *   | | a |\n   * > | | - |\n   *     ^\n   *   | | b |\n   * ```\n   *\n   * @type {State}\n   */\n  function headDelimiterStart(code) {\n    // Reset `interrupt`.\n    self.interrupt = false\n\n    // Note: in `markdown-rs`, we need to handle piercing here too.\n    if (self.parser.lazy[self.now().line]) {\n      return nok(code)\n    }\n    effects.enter('tableDelimiterRow')\n    // Track if we\u2019ve seen a `:` or `|`.\n    seen = false\n    if (markdownSpace(code)) {\n      return factorySpace(\n        effects,\n        headDelimiterBefore,\n        'linePrefix',\n        self.parser.constructs.disable.null.includes('codeIndented')\n          ? undefined\n          : 4\n      )(code)\n    }\n    return headDelimiterBefore(code)\n  }\n\n  /**\n   * Before delimiter row, after optional whitespace.\n   *\n   * Reused when a `|` is found later, to parse another cell.\n   *\n   * ```markdown\n   *   | | a |\n   * > | | - |\n   *     ^\n   *   | | b |\n   * ```\n   *\n   * @type {State}\n   */\n  function headDelimiterBefore(code) {\n    if (code === 45 || code === 58) {\n      return headDelimiterValueBefore(code)\n    }\n    if (code === 124) {\n      seen = true\n      // If we start with a pipe, we open a cell marker.\n      effects.enter('tableCellDivider')\n      effects.consume(code)\n      effects.exit('tableCellDivider')\n      return headDelimiterCellBefore\n    }\n\n    // More whitespace / empty row not allowed at start.\n    return headDelimiterNok(code)\n  }\n\n  /**\n   * After `|`, before delimiter cell.\n   *\n   * ```markdown\n   *   | | a |\n   * > | | - |\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function headDelimiterCellBefore(code) {\n    if (markdownSpace(code)) {\n      return factorySpace(effects, headDelimiterValueBefore, 'whitespace')(code)\n    }\n    return headDelimiterValueBefore(code)\n  }\n\n  /**\n   * Before delimiter cell value.\n   *\n   * ```markdown\n   *   | | a |\n   * > | | - |\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function headDelimiterValueBefore(code) {\n    // Align: left.\n    if (code === 58) {\n      sizeB += 1\n      seen = true\n      effects.enter('tableDelimiterMarker')\n      effects.consume(code)\n      effects.exit('tableDelimiterMarker')\n      return headDelimiterLeftAlignmentAfter\n    }\n\n    // Align: none.\n    if (code === 45) {\n      sizeB += 1\n      // To do: seems weird that this *isn\u2019t* left aligned, but that state is used?\n      return headDelimiterLeftAlignmentAfter(code)\n    }\n    if (code === null || markdownLineEnding(code)) {\n      return headDelimiterCellAfter(code)\n    }\n    return headDelimiterNok(code)\n  }\n\n  /**\n   * After delimiter cell left alignment marker.\n   *\n   * ```markdown\n   *   | | a  |\n   * > | | :- |\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function headDelimiterLeftAlignmentAfter(code) {\n    if (code === 45) {\n      effects.enter('tableDelimiterFiller')\n      return headDelimiterFiller(code)\n    }\n\n    // Anything else is not ok after the left-align colon.\n    return headDelimiterNok(code)\n  }\n\n  /**\n   * In delimiter cell filler.\n   *\n   * ```markdown\n   *   | | a |\n   * > | | - |\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function headDelimiterFiller(code) {\n    if (code === 45) {\n      effects.consume(code)\n      return headDelimiterFiller\n    }\n\n    // Align is `center` if it was `left`, `right` otherwise.\n    if (code === 58) {\n      seen = true\n      effects.exit('tableDelimiterFiller')\n      effects.enter('tableDelimiterMarker')\n      effects.consume(code)\n      effects.exit('tableDelimiterMarker')\n      return headDelimiterRightAlignmentAfter\n    }\n    effects.exit('tableDelimiterFiller')\n    return headDelimiterRightAlignmentAfter(code)\n  }\n\n  /**\n   * After delimiter cell right alignment marker.\n   *\n   * ```markdown\n   *   | |  a |\n   * > | | -: |\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function headDelimiterRightAlignmentAfter(code) {\n    if (markdownSpace(code)) {\n      return factorySpace(effects, headDelimiterCellAfter, 'whitespace')(code)\n    }\n    return headDelimiterCellAfter(code)\n  }\n\n  /**\n   * After delimiter cell.\n   *\n   * ```markdown\n   *   | |  a |\n   * > | | -: |\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function headDelimiterCellAfter(code) {\n    if (code === 124) {\n      return headDelimiterBefore(code)\n    }\n    if (code === null || markdownLineEnding(code)) {\n      // Exit when:\n      // * there was no `:` or `|` at all (it\u2019s a thematic break or setext\n      //   underline instead)\n      // * the header cell count is not the delimiter cell count\n      if (!seen || size !== sizeB) {\n        return headDelimiterNok(code)\n      }\n\n      // Note: in markdown-rs`, a reset is needed here.\n      effects.exit('tableDelimiterRow')\n      effects.exit('tableHead')\n      // To do: in `markdown-rs`, resolvers need to be registered manually.\n      // effects.register_resolver(ResolveName::GfmTable)\n      return ok(code)\n    }\n    return headDelimiterNok(code)\n  }\n\n  /**\n   * In delimiter row, at a disallowed byte.\n   *\n   * ```markdown\n   *   | | a |\n   * > | | x |\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function headDelimiterNok(code) {\n    // Note: in `markdown-rs`, we need to reset, in `micromark-js` we don\u2018t.\n    return nok(code)\n  }\n\n  /**\n   * Before table body row.\n   *\n   * ```markdown\n   *   | | a |\n   *   | | - |\n   * > | | b |\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function bodyRowStart(code) {\n    // Note: in `markdown-rs` we need to manually take care of a prefix,\n    // but in `micromark-js` that is done for us, so if we\u2019re here, we\u2019re\n    // never at whitespace.\n    effects.enter('tableRow')\n    return bodyRowBreak(code)\n  }\n\n  /**\n   * At break in table body row.\n   *\n   * ```markdown\n   *   | | a |\n   *   | | - |\n   * > | | b |\n   *     ^\n   *       ^\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function bodyRowBreak(code) {\n    if (code === 124) {\n      effects.enter('tableCellDivider')\n      effects.consume(code)\n      effects.exit('tableCellDivider')\n      return bodyRowBreak\n    }\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit('tableRow')\n      return ok(code)\n    }\n    if (markdownSpace(code)) {\n      return factorySpace(effects, bodyRowBreak, 'whitespace')(code)\n    }\n\n    // Anything else is cell content.\n    effects.enter('data')\n    return bodyRowData(code)\n  }\n\n  /**\n   * In table body row data.\n   *\n   * ```markdown\n   *   | | a |\n   *   | | - |\n   * > | | b |\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function bodyRowData(code) {\n    if (code === null || code === 124 || markdownLineEndingOrSpace(code)) {\n      effects.exit('data')\n      return bodyRowBreak(code)\n    }\n    effects.consume(code)\n    return code === 92 ? bodyRowEscape : bodyRowData\n  }\n\n  /**\n   * In table body row escape.\n   *\n   * ```markdown\n   *   | | a    |\n   *   | | ---- |\n   * > | | b\\-c |\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function bodyRowEscape(code) {\n    if (code === 92 || code === 124) {\n      effects.consume(code)\n      return bodyRowData\n    }\n    return bodyRowData(code)\n  }\n}\n\n/** @type {Resolver} */\n\nfunction resolveTable(events, context) {\n  let index = -1\n  let inFirstCellAwaitingPipe = true\n  /** @type {RowKind} */\n  let rowKind = 0\n  /** @type {Range} */\n  let lastCell = [0, 0, 0, 0]\n  /** @type {Range} */\n  let cell = [0, 0, 0, 0]\n  let afterHeadAwaitingFirstBodyRow = false\n  let lastTableEnd = 0\n  /** @type {Token | undefined} */\n  let currentTable\n  /** @type {Token | undefined} */\n  let currentBody\n  /** @type {Token | undefined} */\n  let currentCell\n  const map = new EditMap()\n  while (++index < events.length) {\n    const event = events[index]\n    const token = event[1]\n    if (event[0] === 'enter') {\n      // Start of head.\n      if (token.type === 'tableHead') {\n        afterHeadAwaitingFirstBodyRow = false\n\n        // Inject previous (body end and) table end.\n        if (lastTableEnd !== 0) {\n          flushTableEnd(map, context, lastTableEnd, currentTable, currentBody)\n          currentBody = undefined\n          lastTableEnd = 0\n        }\n\n        // Inject table start.\n        currentTable = {\n          type: 'table',\n          start: Object.assign({}, token.start),\n          // Note: correct end is set later.\n          end: Object.assign({}, token.end)\n        }\n        map.add(index, 0, [['enter', currentTable, context]])\n      } else if (\n        token.type === 'tableRow' ||\n        token.type === 'tableDelimiterRow'\n      ) {\n        inFirstCellAwaitingPipe = true\n        currentCell = undefined\n        lastCell = [0, 0, 0, 0]\n        cell = [0, index + 1, 0, 0]\n\n        // Inject table body start.\n        if (afterHeadAwaitingFirstBodyRow) {\n          afterHeadAwaitingFirstBodyRow = false\n          currentBody = {\n            type: 'tableBody',\n            start: Object.assign({}, token.start),\n            // Note: correct end is set later.\n            end: Object.assign({}, token.end)\n          }\n          map.add(index, 0, [['enter', currentBody, context]])\n        }\n        rowKind = token.type === 'tableDelimiterRow' ? 2 : currentBody ? 3 : 1\n      }\n      // Cell data.\n      else if (\n        rowKind &&\n        (token.type === 'data' ||\n          token.type === 'tableDelimiterMarker' ||\n          token.type === 'tableDelimiterFiller')\n      ) {\n        inFirstCellAwaitingPipe = false\n\n        // First value in cell.\n        if (cell[2] === 0) {\n          if (lastCell[1] !== 0) {\n            cell[0] = cell[1]\n            currentCell = flushCell(\n              map,\n              context,\n              lastCell,\n              rowKind,\n              undefined,\n              currentCell\n            )\n            lastCell = [0, 0, 0, 0]\n          }\n          cell[2] = index\n        }\n      } else if (token.type === 'tableCellDivider') {\n        if (inFirstCellAwaitingPipe) {\n          inFirstCellAwaitingPipe = false\n        } else {\n          if (lastCell[1] !== 0) {\n            cell[0] = cell[1]\n            currentCell = flushCell(\n              map,\n              context,\n              lastCell,\n              rowKind,\n              undefined,\n              currentCell\n            )\n          }\n          lastCell = cell\n          cell = [lastCell[1], index, 0, 0]\n        }\n      }\n    }\n    // Exit events.\n    else if (token.type === 'tableHead') {\n      afterHeadAwaitingFirstBodyRow = true\n      lastTableEnd = index\n    } else if (\n      token.type === 'tableRow' ||\n      token.type === 'tableDelimiterRow'\n    ) {\n      lastTableEnd = index\n      if (lastCell[1] !== 0) {\n        cell[0] = cell[1]\n        currentCell = flushCell(\n          map,\n          context,\n          lastCell,\n          rowKind,\n          index,\n          currentCell\n        )\n      } else if (cell[1] !== 0) {\n        currentCell = flushCell(map, context, cell, rowKind, index, currentCell)\n      }\n      rowKind = 0\n    } else if (\n      rowKind &&\n      (token.type === 'data' ||\n        token.type === 'tableDelimiterMarker' ||\n        token.type === 'tableDelimiterFiller')\n    ) {\n      cell[3] = index\n    }\n  }\n  if (lastTableEnd !== 0) {\n    flushTableEnd(map, context, lastTableEnd, currentTable, currentBody)\n  }\n  map.consume(context.events)\n\n  // To do: move this into `html`, when events are exposed there.\n  // That\u2019s what `markdown-rs` does.\n  // That needs updates to `mdast-util-gfm-table`.\n  index = -1\n  while (++index < context.events.length) {\n    const event = context.events[index]\n    if (event[0] === 'enter' && event[1].type === 'table') {\n      event[1]._align = gfmTableAlign(context.events, index)\n    }\n  }\n  return events\n}\n\n/**\n * Generate a cell.\n *\n * @param {EditMap} map\n * @param {Readonly<TokenizeContext>} context\n * @param {Readonly<Range>} range\n * @param {RowKind} rowKind\n * @param {number | undefined} rowEnd\n * @param {Token | undefined} previousCell\n * @returns {Token | undefined}\n */\n// eslint-disable-next-line max-params\nfunction flushCell(map, context, range, rowKind, rowEnd, previousCell) {\n  // `markdown-rs` uses:\n  // rowKind === 2 ? 'tableDelimiterCell' : 'tableCell'\n  const groupName =\n    rowKind === 1\n      ? 'tableHeader'\n      : rowKind === 2\n      ? 'tableDelimiter'\n      : 'tableData'\n  // `markdown-rs` uses:\n  // rowKind === 2 ? 'tableDelimiterCellValue' : 'tableCellText'\n  const valueName = 'tableContent'\n\n  // Insert an exit for the previous cell, if there is one.\n  //\n  // ```markdown\n  // > | | aa | bb | cc |\n  //          ^-- exit\n  //           ^^^^-- this cell\n  // ```\n  if (range[0] !== 0) {\n    previousCell.end = Object.assign({}, getPoint(context.events, range[0]))\n    map.add(range[0], 0, [['exit', previousCell, context]])\n  }\n\n  // Insert enter of this cell.\n  //\n  // ```markdown\n  // > | | aa | bb | cc |\n  //           ^-- enter\n  //           ^^^^-- this cell\n  // ```\n  const now = getPoint(context.events, range[1])\n  previousCell = {\n    type: groupName,\n    start: Object.assign({}, now),\n    // Note: correct end is set later.\n    end: Object.assign({}, now)\n  }\n  map.add(range[1], 0, [['enter', previousCell, context]])\n\n  // Insert text start at first data start and end at last data end, and\n  // remove events between.\n  //\n  // ```markdown\n  // > | | aa | bb | cc |\n  //            ^-- enter\n  //             ^-- exit\n  //           ^^^^-- this cell\n  // ```\n  if (range[2] !== 0) {\n    const relatedStart = getPoint(context.events, range[2])\n    const relatedEnd = getPoint(context.events, range[3])\n    /** @type {Token} */\n    const valueToken = {\n      type: valueName,\n      start: Object.assign({}, relatedStart),\n      end: Object.assign({}, relatedEnd)\n    }\n    map.add(range[2], 0, [['enter', valueToken, context]])\n    if (rowKind !== 2) {\n      // Fix positional info on remaining events\n      const start = context.events[range[2]]\n      const end = context.events[range[3]]\n      start[1].end = Object.assign({}, end[1].end)\n      start[1].type = 'chunkText'\n      start[1].contentType = 'text'\n\n      // Remove if needed.\n      if (range[3] > range[2] + 1) {\n        const a = range[2] + 1\n        const b = range[3] - range[2] - 1\n        map.add(a, b, [])\n      }\n    }\n    map.add(range[3] + 1, 0, [['exit', valueToken, context]])\n  }\n\n  // Insert an exit for the last cell, if at the row end.\n  //\n  // ```markdown\n  // > | | aa | bb | cc |\n  //                    ^-- exit\n  //               ^^^^^^-- this cell (the last one contains two \u201Cbetween\u201D parts)\n  // ```\n  if (rowEnd !== undefined) {\n    previousCell.end = Object.assign({}, getPoint(context.events, rowEnd))\n    map.add(rowEnd, 0, [['exit', previousCell, context]])\n    previousCell = undefined\n  }\n  return previousCell\n}\n\n/**\n * Generate table end (and table body end).\n *\n * @param {Readonly<EditMap>} map\n * @param {Readonly<TokenizeContext>} context\n * @param {number} index\n * @param {Token} table\n * @param {Token | undefined} tableBody\n */\n// eslint-disable-next-line max-params\nfunction flushTableEnd(map, context, index, table, tableBody) {\n  /** @type {Array<Event>} */\n  const exits = []\n  const related = getPoint(context.events, index)\n  if (tableBody) {\n    tableBody.end = Object.assign({}, related)\n    exits.push(['exit', tableBody, context])\n  }\n  table.end = Object.assign({}, related)\n  exits.push(['exit', table, context])\n  map.add(index + 1, 0, exits)\n}\n\n/**\n * @param {Readonly<Array<Event>>} events\n * @param {number} index\n * @returns {Readonly<Point>}\n */\nfunction getPoint(events, index) {\n  const event = events[index]\n  const side = event[0] === 'enter' ? 'start' : 'end'\n  return event[1][side]\n}\n", "export {gfmTableHtml} from './lib/html.js'\nexport {gfmTable} from './lib/syntax.js'\n", "/**\n * @typedef {import('micromark-util-types').CompileContext} CompileContext\n * @typedef {import('micromark-util-types').HtmlExtension} HtmlExtension\n * @typedef {import('micromark-util-types').Token} Token\n */\n\n// An opening or closing tag start, followed by a case-insensitive specific tag name,\n// followed by HTML whitespace, a greater than, or a slash.\nconst reFlow =\n  /<(\\/?)(iframe|noembed|noframes|plaintext|script|style|title|textarea|xmp)(?=[\\t\\n\\f\\r />])/gi\n\n// As HTML (text) parses tags separately (and very strictly), we don\u2019t need to be\n// global.\nconst reText = new RegExp('^' + reFlow.source, 'i')\n\n/**\n * Create an HTML extension for `micromark` to support GitHubs weird and\n * useless tagfilter when serializing to HTML.\n *\n * @returns {HtmlExtension}\n *   Extension for `micromark` that can be passed in `htmlExtensions` to support\n *   GitHubs weird and useless tagfilter when serializing to HTML.\n */\nexport function gfmTagfilterHtml() {\n  return {\n    exit: {\n      htmlFlowData(token) {\n        exitHtmlData.call(this, token, reFlow)\n      },\n      htmlTextData(token) {\n        exitHtmlData.call(this, token, reText)\n      }\n    }\n  }\n}\n\n/**\n * @this {CompileContext}\n * @param {Token} token\n * @param {RegExp} filter\n * @returns {undefined}\n */\nfunction exitHtmlData(token, filter) {\n  let value = this.sliceSerialize(token)\n\n  if (this.options.allowDangerousHtml) {\n    value = value.replace(filter, '&lt;$1$2')\n  }\n\n  this.raw(this.encode(value))\n}\n", "export {gfmTagfilterHtml} from './lib/index.js'\n", "/**\n * @typedef {import('micromark-util-types').HtmlExtension} HtmlExtension\n */\n\n/**\n * Create an HTML extension for `micromark` to support GFM task list items when\n * serializing to HTML.\n *\n * @returns {HtmlExtension}\n *   Extension for `micromark` that can be passed in `htmlExtensions` to\n *   support GFM task list items when serializing to HTML.\n */\nexport function gfmTaskListItemHtml() {\n  return {\n    enter: {\n      taskListCheck() {\n        this.tag('<input type=\"checkbox\" disabled=\"\" ')\n      }\n    },\n    exit: {\n      taskListCheck() {\n        this.tag('/>')\n      },\n      taskListCheckValueChecked() {\n        this.tag('checked=\"\" ')\n      }\n    }\n  }\n}\n", "/**\n * @typedef {import('micromark-util-types').Extension} Extension\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {\n  markdownLineEnding,\n  markdownLineEndingOrSpace,\n  markdownSpace\n} from 'micromark-util-character'\nconst tasklistCheck = {\n  tokenize: tokenizeTasklistCheck\n}\n\n/**\n * Create an HTML extension for `micromark` to support GFM task list items\n * syntax.\n *\n * @returns {Extension}\n *   Extension for `micromark` that can be passed in `htmlExtensions` to\n *   support GFM task list items when serializing to HTML.\n */\nexport function gfmTaskListItem() {\n  return {\n    text: {\n      [91]: tasklistCheck\n    }\n  }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeTasklistCheck(effects, ok, nok) {\n  const self = this\n  return open\n\n  /**\n   * At start of task list item check.\n   *\n   * ```markdown\n   * > | * [x] y.\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function open(code) {\n    if (\n      // Exit if there\u2019s stuff before.\n      self.previous !== null ||\n      // Exit if not in the first content that is the first child of a list\n      // item.\n      !self._gfmTasklistFirstContentOfListItem\n    ) {\n      return nok(code)\n    }\n    effects.enter('taskListCheck')\n    effects.enter('taskListCheckMarker')\n    effects.consume(code)\n    effects.exit('taskListCheckMarker')\n    return inside\n  }\n\n  /**\n   * In task list item check.\n   *\n   * ```markdown\n   * > | * [x] y.\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function inside(code) {\n    // Currently we match how GH works in files.\n    // To match how GH works in comments, use `markdownSpace` (`[\\t ]`) instead\n    // of `markdownLineEndingOrSpace` (`[\\t\\n\\r ]`).\n    if (markdownLineEndingOrSpace(code)) {\n      effects.enter('taskListCheckValueUnchecked')\n      effects.consume(code)\n      effects.exit('taskListCheckValueUnchecked')\n      return close\n    }\n    if (code === 88 || code === 120) {\n      effects.enter('taskListCheckValueChecked')\n      effects.consume(code)\n      effects.exit('taskListCheckValueChecked')\n      return close\n    }\n    return nok(code)\n  }\n\n  /**\n   * At close of task list item check.\n   *\n   * ```markdown\n   * > | * [x] y.\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function close(code) {\n    if (code === 93) {\n      effects.enter('taskListCheckMarker')\n      effects.consume(code)\n      effects.exit('taskListCheckMarker')\n      effects.exit('taskListCheck')\n      return after\n    }\n    return nok(code)\n  }\n\n  /**\n   * @type {State}\n   */\n  function after(code) {\n    // EOL in paragraph means there must be something else after it.\n    if (markdownLineEnding(code)) {\n      return ok(code)\n    }\n\n    // Space or tab?\n    // Check what comes after.\n    if (markdownSpace(code)) {\n      return effects.check(\n        {\n          tokenize: spaceThenNonSpace\n        },\n        ok,\n        nok\n      )(code)\n    }\n\n    // EOF, or non-whitespace, both wrong.\n    return nok(code)\n  }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction spaceThenNonSpace(effects, ok, nok) {\n  return factorySpace(effects, after, 'whitespace')\n\n  /**\n   * After whitespace, after task list item check.\n   *\n   * ```markdown\n   * > | * [x] y.\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    // EOF means there was nothing, so bad.\n    // EOL means there\u2019s content after it, so good.\n    // Impossible to have more spaces.\n    // Anything else is good.\n    return code === null ? nok(code) : ok(code)\n  }\n}\n", "export {gfmTaskListItemHtml} from './lib/html.js'\nexport {gfmTaskListItem} from './lib/syntax.js'\n", "/**\n * @typedef {import('micromark-extension-gfm-footnote').HtmlOptions} HtmlOptions\n * @typedef {import('micromark-extension-gfm-strikethrough').Options} Options\n * @typedef {import('micromark-util-types').Extension} Extension\n * @typedef {import('micromark-util-types').HtmlExtension} HtmlExtension\n */\n\nimport {\n  combineExtensions,\n  combineHtmlExtensions\n} from 'micromark-util-combine-extensions'\nimport {\n  gfmAutolinkLiteral,\n  gfmAutolinkLiteralHtml\n} from 'micromark-extension-gfm-autolink-literal'\nimport {gfmFootnote, gfmFootnoteHtml} from 'micromark-extension-gfm-footnote'\nimport {\n  gfmStrikethrough,\n  gfmStrikethroughHtml\n} from 'micromark-extension-gfm-strikethrough'\nimport {gfmTable, gfmTableHtml} from 'micromark-extension-gfm-table'\nimport {gfmTagfilterHtml} from 'micromark-extension-gfm-tagfilter'\nimport {\n  gfmTaskListItem,\n  gfmTaskListItemHtml\n} from 'micromark-extension-gfm-task-list-item'\n\n/**\n * Create an extension for `micromark` to enable GFM syntax.\n *\n * @param {Options | null | undefined} [options]\n *   Configuration (optional).\n *\n *   Passed to `micromark-extens-gfm-strikethrough`.\n * @returns {Extension}\n *   Extension for `micromark` that can be passed in `extensions` to enable GFM\n *   syntax.\n */\nexport function gfm(options) {\n  return combineExtensions([\n    gfmAutolinkLiteral(),\n    gfmFootnote(),\n    gfmStrikethrough(options),\n    gfmTable(),\n    gfmTaskListItem()\n  ])\n}\n\n/**\n * Create an extension for `micromark` to support GFM when serializing to HTML.\n *\n * @param {HtmlOptions | null | undefined} [options]\n *   Configuration (optional).\n *\n *   Passed to `micromark-extens-gfm-footnote`.\n * @returns {HtmlExtension}\n *   Extension for `micromark` that can be passed in `htmlExtensions` to\n *   support GFM when serializing to HTML.\n */\nexport function gfmHtml(options) {\n  return combineHtmlExtensions([\n    gfmAutolinkLiteralHtml(),\n    gfmFootnoteHtml(options),\n    gfmStrikethroughHtml(),\n    gfmTableHtml(),\n    gfmTagfilterHtml(),\n    gfmTaskListItemHtml()\n  ])\n}\n", "import {EditorView, keymap, Panel, showPanel, ViewUpdate} from \"@codemirror/view\";\nimport {StateEffect, StateField} from \"@codemirror/state\";\nimport {micromark} from 'micromark';\nimport {gfm, gfmHtml} from 'micromark-extension-gfm';\nexport const toggleMarkdownPreview = StateEffect.define<boolean>();\nexport const markdownPreviewState = StateField.define({\n    create: () => false,\n    update(value, tr) {\n        for (let e of tr.effects) if (e.is(toggleMarkdownPreview)) value = e.value;\n        return value;\n    },\n    provide: f => showPanel.from(f, on => on ? createMarkdownPreviewPanel : null)\n});\n\nfunction createMarkdownPreviewPanel(view: EditorView) {\n    return new MarkdownPreviewPanel(view);\n}\n\nclass MarkdownPreviewPanel implements Panel {\n    dom: HTMLElement;\n    articleDom: HTMLElement;\n    editorView: EditorView;\n    fullScreen: boolean = false;\n    fullButton: HTMLElement;\n    constructor(view: EditorView) {\n        this.editorView = view;\n        this.dom = document.createElement(\"div\");\n        this.dom.className = \"cm-markdown-preview-panel cm-scroller\";\n\n        this.articleDom = document.createElement(\"article\");\n        this.articleDom.className = \"markdown-body p-1\";\n\n        this.dom.appendChild(this.articleDom);\n        this.renderHtml();\n\n\n        // \u9884\u89C8\u9762\u677F\u7684\u9AD8\u5EA6\u8BBE\u7F6E\u4E3A\u7F16\u8F91\u5668\u9AD8\u5EA6\u7684\u4E00\u534A\n        const previewHeight = this.editorView.dom.getBoundingClientRect().height / 2;\n        this.dom.style.height = previewHeight+\"px\";\n\n        this.fullButton = document.createElement(\"div\");\n        this.fullButton.innerHTML = \"<i class=\\\"ki-outline ki-arrow-two-diagonals text-primary fs-2\\\"></i>\";\n        this.fullButton.className = \"btn btn-sm btn-icon btn-active-color-primary full-markdown-preview\";\n        this.fullButton.onclick = () => {\n            this.fullScreen = !this.fullScreen;\n            if (this.fullScreen){\n                this.dom.style.height = this.editorView.dom.getBoundingClientRect().height +\"px\";\n                this.dom.style.overflowY = \"auto\";\n            } else {\n                const previewHeight = this.editorView.dom.getBoundingClientRect().height / 2;\n                this.dom.style.height = previewHeight+\"px\";\n                this.dom.style.overflowY = \"hidden\";\n            }\n            this.toggleFullButton();\n            this.renderHtml();\n        };\n        this.dom.appendChild(this.fullButton);\n\n        // \u521B\u5EFA\u5173\u95ED\u6309\u94AE\n        let closeButton = document.createElement(\"div\");\n        closeButton.innerHTML = \"<i class=\\\"ki-outline ki-cross-square text-primary fs-2\\\"></i>\";\n        closeButton.className = \"btn btn-sm btn-icon btn-active-color-primary close-markdown-preview\";\n        closeButton.onclick = () => {\n            // \u5F53\u70B9\u51FB\u5173\u95ED\u6309\u94AE\u65F6\uFF0C\u9690\u85CF Markdown \u9884\u89C8\u9762\u677F\n            this.editorView.dispatch({\n                effects: toggleMarkdownPreview.of(false)\n            });\n        };\n        this.dom.appendChild(closeButton);  // \u5C06\u5173\u95ED\u6309\u94AE\u6DFB\u52A0\u5230\u9762\u677F DOM \u4E2D\n    }\n\n    mount() {\n        // \u7ED1\u5B9A\u81EA\u5B9A\u4E49\u4E8B\u4EF6\u7684\u76D1\u542C\u5668\n        this.editorView.focus();\n        document.addEventListener('editorScroll', this.onEditorScroll);\n        this.toggleFullButtonVisibility();\n    }\n\n    destroy() {\n        // \u79FB\u9664\u81EA\u5B9A\u4E49\u4E8B\u4EF6\u7684\u76D1\u542C\u5668\n        this.editorView.focus();\n        document.removeEventListener('editorScroll', this.onEditorScroll);\n    }\n\n    update(update: ViewUpdate): void {\n        const view = update.view;\n        this.editorView = view;\n        if (update.docChanged || update.viewportChanged) {\n            if (!this.fullScreen) {\n                // \u9884\u89C8\u9762\u677F\u7684\u9AD8\u5EA6\u8BBE\u7F6E\u4E3A\u7F16\u8F91\u5668\u9AD8\u5EA6\u7684\u4E00\u534A\n                const previewHeight = this.editorView.dom.getBoundingClientRect().height / 2;\n                this.dom.style.height = previewHeight+\"px\";\n                this.renderHtml();\n            }\n\n            // \u68C0\u6D4B\u80FD\u4E0D\u80FD\u521B\u5EFA\u5168\u5C4F\u6309\u94AE\n            this.toggleFullButtonVisibility();\n        }\n    }\n\n    get top(): boolean {\n        return false;\n    }\n\n    toggleFullButton() {\n        if (this.fullScreen) {\n            this.fullButton.innerHTML = \"<i class=\\\"ki-outline ki-double-down text-primary fs-2\\\"></i>\";\n        } else {\n            this.fullButton.innerHTML = \"<i class=\\\"ki-outline ki-arrow-two-diagonals text-primary fs-2\\\"></i>\";\n        }\n    }\n\n    toggleFullButtonVisibility() {\n        if (this.editorView.dom.getBoundingClientRect().height <= 250) {\n            this.fullButton.style.display = \"none\";\n        } else {\n            this.fullButton.style.display = \"inline-flex\";\n        }\n    }\n\n    onEditorScroll = (event :Event)  => {\n        if (!this.fullScreen) this.renderHtml();\n    }\n\n    lastTopHeight = 0; // \u521D\u59CB\u8BBE\u7F6E\u4E3A0\n    renderHtml(): void {\n        // \u4F7F\u7528 requestAnimationFrame \u6765\u7B49\u5F85\u66F4\u65B0\u8FC7\u7A0B\u5B8C\u6210\n        requestAnimationFrame(() => {\n            if (this.fullScreen) {\n                // \u4F7F\u7528marked\u5F02\u6B65\u8F6C\u6362Markdown\u4E3AHTML\n                const text = this.editorView.state.doc.toString();\n                const html = renderMarkdown(text);\n                this.articleDom.innerHTML = html;\n            } else {\n                const rect = this.editorView.dom.getBoundingClientRect();\n                // \u9884\u89C8\u533A\u57DF\n                const previewRect = this.dom.getBoundingClientRect();\n\n                // \u8BA1\u7B97\u7F16\u8F91\u5668\u9876\u90E8\u548C\u5E95\u90E8\u76F8\u5BF9\u4E8E\u6587\u6863\u9876\u90E8\u7684\u9AD8\u5EA6\n                const topHeight = rect.top - this.editorView.documentTop;\n                const bottomHeight = previewRect.top - this.editorView.documentTop;\n\n                // \u5224\u65AD\u6EDA\u52A8\u65B9\u5411\n                const currentTopHeight = topHeight;\n                const scrollDirection = currentTopHeight > this.lastTopHeight ? 'down' : 'up';\n                this.lastTopHeight = currentTopHeight; // \u66F4\u65B0\u6700\u540E\u6EDA\u52A8\u4F4D\u7F6E\u4E3A\u5F53\u524D\u4F4D\u7F6E\n\n\n                // \u83B7\u53D6\u9876\u90E8\u548C\u5E95\u90E8\u53EF\u89C1\u884C\u7684\u4FE1\u606F\n                const topBlockInfo = this.editorView.lineBlockAtHeight(topHeight);\n                const bottomBlockInfo = this.editorView.lineBlockAtHeight(bottomHeight);\n\n                let start = topBlockInfo.from;\n                let end = bottomBlockInfo.to;\n\n                let startLine = this.editorView.state.doc.lineAt(start);\n                console.log(`startLine: ${startLine.number}`);\n\n                // \u622A\u53D6\u53EF\u89C1\u90E8\u5206\u7684\u6587\u672C\n                const text = this.editorView.state.doc.sliceString(start, end);\n\n                // \u4F7F\u7528marked\u5F02\u6B65\u8F6C\u6362Markdown\u4E3AHTML\n                const html = renderMarkdown(text);\n                this.articleDom.innerHTML = html;\n            }\n        });\n    }\n}\n\nconst renderMarkdown = (markdown: string) => {\n    return micromark(markdown, {\n        extensions: [gfm()],\n        htmlExtensions: [gfmHtml()]\n    });\n}\n\n\nconst markdownPreviewKeymap = [\n    {\n        key: \"Alt-p\",\n        run(view: EditorView) {\n            view.dispatch({\n                effects: toggleMarkdownPreview.of(!view.state.field(markdownPreviewState))\n            });\n            return true;\n        },\n    },\n    {\n        key: \"Escape\",\n        run(view: EditorView) {\n            view.dispatch({\n                effects: toggleMarkdownPreview.of(false)\n            });\n            return true;\n        }, scope: \"editor preview-panel\"\n\n    },\n];\n\nconst markdownPreviewTheme = EditorView.baseTheme({\n    \".cm-markdown-preview-panel\": {\n        position: \"relative\",\n        overflowY: \"hidden\",\n    },\n    \".close-markdown-preview\": {\n        position: \"absolute\",\n        top: \"2px\",\n        right: \"2px\",\n        cursor: \"pointer\",\n        backgroundColor: \"#FFFFFFE5\",\n    },\n    \".full-markdown-preview\": {\n        position: \"absolute\",\n        top: \"2px\",\n        right: \"35px\",\n        cursor: \"pointer\",\n        backgroundColor: \"#FFFFFFE5\",\n    },\n\n    \"&light .cm-markdown-preview-panel\": { backgroundColor: \"#ffffff\" },\n    \"&dark .cm-markdown-preview-panel\": { backgroundColor: \"#1e1e2d\" },\n});\n\nfunction markdownPreviewPanel() {\n    return [\n        markdownPreviewState,\n        keymap.of(markdownPreviewKeymap),\n        markdownPreviewTheme,\n        EditorView.domEventHandlers({\n            scroll(event, view) {\n                document.dispatchEvent(new CustomEvent('editorScroll'));\n                return false;\n            },\n        }),\n    ];\n}\n\nexport { markdownPreviewPanel };\n", "import { ViewPlugin, WidgetType, Decoration, DecorationSet, EditorView, ViewUpdate } from '@codemirror/view';\nimport {Extension, Line, Range} from '@codemirror/state';\nimport EditorSelectionHelper from \"../codemirror-helper\";\n\n// Markdown \u5305\u88C5\u51FD\u6570\nfunction insertMarkdown(view: EditorView, line: Line ,wrapper: string) {\n    view.dispatch({\n        changes: [\n            { from: line.from, insert: wrapper }\n        ]\n    });\n}\n\n\nclass FloatMenuWidget extends WidgetType {\n    view: EditorView;\n    line: Line;\n\n    constructor(view: EditorView, line:Line) {\n        super();\n        this.view = view;\n        this.line = line;\n    }\n\n    toDOM() {\n        // \u521B\u5EFA\u5C0F\u90E8\u4EF6\u7684\u5BB9\u5668\n        const menuContainer = document.createElement('div');\n        menuContainer.className = 'cm-float-menu';\n\n        //\u521B\u5EFA\u83DC\u5355\u5BB9\u5668\n        const menu = document.createElement('div');\n        menu.className = 'cm-menus';\n        menuContainer.appendChild(menu);\n\n        // \u521B\u5EFA\u83DC\u5355\u9879\n        const bold = document.createElement('span');\n        bold.className = 'cm-menu-item';\n        bold.textContent = 'Bold';\n        bold.onclick = () => {\n            // \u6267\u884C Markdown \u52A0\u7C97\u547D\u4EE4\n            // \u6CE8\u610F\uFF1A\u8FD9\u91CC\u9700\u8981\u5B9E\u73B0\u5177\u4F53\u7684 Markdown \u5305\u88C5\u903B\u8F91\n            insertMarkdown(this.view, this.line, \"*Bold*\");\n        };\n\n\n        const italic = document.createElement('span');\n        italic.className = 'cm-menu-item';\n        italic.textContent = 'Italic';\n        italic.onclick = () => {\n            insertMarkdown(this.view, this.line, \"_Italic_\");\n        };\n\n        // \u5C06\u83DC\u5355\u9879\u6DFB\u52A0\u5230\u5BB9\u5668\n        menu.appendChild(bold);\n        menu.appendChild(italic);\n\n        return menuContainer;\n    }\n}\n\nfunction floatMenuDecorations(view: EditorView) {\n    const ranges: Array<Range<Decoration>> = [];\n\n    // \u83B7\u53D6\u5149\u6807\u6240\u5728\u7684\u884C\n    const { from, to, anchor } = view.state.selection.main;\n    const line = view.state.doc.lineAt(from);\n    const isMulti = EditorSelectionHelper.isMultiLineSelection(view.state);\n    const isEmptyLine = line.text.length === 0;\n    const isEmptyDoc = view.state.doc.length === 0;\n\n\n    if ( !isEmptyLine || isMulti || (isEmptyDoc && !view.hasFocus) ) return Decoration.none;\n\n    // \u521B\u5EFA\u4E00\u4E2A\u5C0F\u90E8\u4EF6\u5E76\u653E\u7F6E\u5728\u5149\u6807\u6240\u5728\u884C\u7684\u5F00\u59CB\u4F4D\u7F6E\n    const widget = Decoration.widget({\n        widget: new FloatMenuWidget(view, line),\n        side: 100, // \u8BBE\u7F6E\u4E00\u4E2A\u6B63\u503C\uFF0C\u786E\u4FDD\u5C0F\u90E8\u4EF6\u5728\u5149\u6807\u4E4B\u540E\u7ED8\u5236\n        block: false\n    });\n    ranges.push(widget.range(line.from));\n\n    return Decoration.set(ranges, true);  // \u7B2C\u4E8C\u4E2A\u53C2\u6570\u8868\u793A\u8FD9\u4E9B\u88C5\u9970\u662F\u552F\u4E00\u7684\n}\n\nconst floatMenuWidgetPlugin = ViewPlugin.fromClass(\n    class {\n        decorations: DecorationSet;\n\n        constructor(view: EditorView) {\n            this.decorations = floatMenuDecorations(view);\n        }\n\n        update(update: ViewUpdate) {\n            if (update.selectionSet || update.docChanged) {\n                this.decorations = floatMenuDecorations(update.view);\n            }\n        }\n    },\n    {\n        decorations: v => v.decorations\n    }\n);\n\nexport const floatMenuStyle = EditorView.baseTheme({\n    '.cm-float-menu': {\n        position: 'absolute', // \u5C0F\u90E8\u4EF6\u4E3A\u7EDD\u5BF9\u5B9A\u4F4D\n        display: 'inline-block', // \u5C0F\u90E8\u4EF6\u4E3A\u884C\u5185\u5143\u7D20\n    },\n    '.cm-menus': {\n        paddingLeft: '4rem', // \u4E3A\u83DC\u5355\u9879\u6DFB\u52A0\u4E00\u4E9B\u5DE6\u8FB9\u8DDD\n    },\n    '.cm-menu-item': {\n        marginLeft: '0.5rem', // \u4E3A\u83DC\u5355\u9879\u6DFB\u52A0\u4E00\u4E9B\u95F4\u8DDD\n        cursor: 'pointer', // \u9F20\u6807\u60AC\u505C\u65F6\u663E\u793A\u6307\u9488\n        color: 'rgba(0,0,0,0.3)', // \u8BBE\u7F6E\u83DC\u5355\u9879\u7684\u989C\u8272\n    }\n});\n\nexport const floatMenuWidget: Extension = [floatMenuWidgetPlugin, floatMenuStyle];\n", "import {\n    BlockInfo, crosshairCursor,\n    drawSelection,\n    dropCursor,\n    EditorView, highlightActiveLine,\n    highlightActiveLineGutter,\n    highlightSpecialChars, keymap, lineNumbers, placeholder, rectangularSelection, ViewUpdate\n} from \"@codemirror/view\";\nimport {Compartment, EditorSelection, EditorState, SelectionRange} from \"@codemirror/state\";\nimport {lightTheme} from \"./codemirror-themes/light-theme\"\nimport {oneDarkTheme} from \"./codemirror-themes/dark-theme\"\nimport {defaultKeymap, history, historyKeymap, indentWithTab} from \"@codemirror/commands\";\nimport {\n    bracketMatching,\n    defaultHighlightStyle,\n    foldKeymap,\n    indentOnInput,\n    syntaxHighlighting\n} from \"@codemirror/language\";\n\nimport { dropFoldGutter } from \"./codemirror-drop-fold-gutter\";\nimport { markdownGutter } from \"./codemirror-markdow-gutter\";\nimport {autocompletion, closeBrackets, closeBracketsKeymap, completionKeymap} from \"@codemirror/autocomplete\";\nimport {highlightSelectionMatches, searchKeymap} from \"@codemirror/search\";\n\nimport * as prettier from 'prettier/standalone'\nimport pluginMarkdown from 'prettier/plugins/markdown'\nimport {placeholdersPlugin} from \"./codemirror-suggestions/mention_node\";\nimport {emojiPlaceholdersPlugin} from \"./codemirror-suggestions/emoji_node\";\nimport {mentionSuggestions} from \"./codemirror-suggestions/mention\";\nimport {emojiSuggestions} from \"./codemirror-suggestions/emojis\";\nimport {hyperLink} from \"./codemirror-hyper-link\";\nimport {rangeHighlighting} from \"./codemirror-cmd/range-highlighting\";\nimport { filePanel, filePanelState, toggleFilePanel } from \"./codemirror-panels/file-panel\";\nimport { imagePanel, imagePanelState, toggleImagePanel } from \"./codemirror-panels/image-panel\";\nimport { emojiPanel, toggleEmojiPanel, emojiPanelState } from \"./codemirror-panels/emoji-panel\";\nimport {wordCounter} from \"./codemirror-cmd/count-words\";\nimport {markdown, markdownLanguage} from \"./codemirror-lang-markdown\";\nimport {markdownPreviewPanel, markdownPreviewState, toggleMarkdownPreview} from \"./codemirror-preview-panel\";\nimport { selectionTooltipAction } from \"./codemirror-tooltips-action\";\nimport { floatMenuWidget } from \"./codemirror-floatmenu-widget\";\nimport {languages} from \"@codemirror/language-data\";\nimport { treeView } from \"./codemirror-tree-view\";\n\nexport const isBlank = (str: string | undefined | null): boolean => {\n    if (str === undefined) {\n        return true\n    }\n    if (str == null) {\n        return true\n    }\n    if (str == '') {\n        return true\n    }\n    if (str == ' ') {\n        return true\n    }\n    if (str.length == 0) {\n        return true\n    }\n    return false\n}\n\nexport let codemirrorTheme = new Compartment;\n\nexport class CodemirrorWrapper {\n    /**\n     * editor\n     */\n    private readonly _editor: EditorView\n\n    constructor(editor: EditorView) {\n        this._editor = editor\n    }\n\n    /**\n     * \u83B7\u53D6\u7F16\u8F91\u5668\uFF0C\u4E0D\u5EFA\u8BAE\u76F4\u63A5\u4F7F\u7528\u8BE5\u5BF9\u8C61\uFF0C\u800C\u662F\u5BF9\u4F7F\u7528\u5230\u7684\u65B9\u6CD5\u8FDB\u884C\u5C01\u88C5\n     */\n    get eidtor(): EditorView {\n        return this._editor\n    }\n\n    /**\u2122\u2122\n     * \u521B\u5EFA EditorState\n     *\n     * @param updateCallback \u7F16\u8F91\u5668\u5185\u5BB9\u53D8\u52A8\u65F6\u7684\u56DE\u8C03\n     * @param saveCallback \u4FDD\u5B58\u5185\u5BB9\u65F6\u7684\u56DE\u8C03\n     * @param uploadFileCallback \u62D6\u62FD\u4E0A\u4F20\u6587\u4EF6\u540E\u7684\u4F1A\u8C03\n     * @param doc \u521D\u59CB\u5316\u7684\u5185\u5BB9\n     * @returns\n     */\n    static newState = (\n        directUploadUrlValue: string,\n        mentionUsers: [],\n        countWordsPanelTarget: any,\n        placeholderString: string,\n        doc?: string,\n        updateCallback?: any,\n        uploadFileCallback?: any,): EditorState => {\n\n\n        const gairdaoBasicSetup = /*@__PURE__*/(() => [\n            // lineNumbers(),\n            highlightActiveLineGutter(),\n            highlightSpecialChars(),\n            history(),\n            markdownGutter(),\n            dropFoldGutter(),\n            drawSelection(),\n            dropCursor(),\n            EditorState.allowMultipleSelections.of(true),\n            indentOnInput(),\n            syntaxHighlighting(defaultHighlightStyle, { fallback: true }),\n            bracketMatching(),\n            closeBrackets(),\n            rectangularSelection(),\n            crosshairCursor(),\n            highlightActiveLine(),\n            highlightSelectionMatches(),\n            EditorView.lineWrapping,\n            codemirrorTheme.of(lightTheme),\n            keymap.of([\n                ...closeBracketsKeymap,\n                ...defaultKeymap,\n                ...searchKeymap,\n                ...historyKeymap,\n                ...foldKeymap,\n                ...completionKeymap,\n                indentWithTab,\n            ])\n        ])();\n        return EditorState.create({\n            doc: doc,\n            extensions: [\n                gairdaoBasicSetup,\n                placeholdersPlugin,\n                emojiPlaceholdersPlugin,\n                markdownPreviewPanel(),\n                selectionTooltipAction(),\n                floatMenuWidget,\n                autocompletion({\n                    override: [\n                        mentionSuggestions(mentionUsers, '@'),\n                        emojiSuggestions(),\n                    ],\n                    icons: false,\n                    defaultKeymap: true\n                }),\n                hyperLink,\n                rangeHighlighting(),\n                // treeView,\n                filePanel(directUploadUrlValue),\n                imagePanel(directUploadUrlValue),\n                emojiPanel(),\n\n                // images(),\n                wordCounter(countWordsPanelTarget),\n                placeholder(placeholderString),\n                markdown({\n                    base: markdownLanguage,\n                    addKeymap: true,\n                    completeHTMLTags: true,\n                    // codeLanguages: languages\n                }),\n\n                EditorView.updateListener.of((viewUpdate: ViewUpdate) => {\n                    if (viewUpdate.docChanged) {\n                        if (updateCallback) {\n                            updateCallback(viewUpdate);\n                        } else {\n                            console.warn('updateCallback is not defined');\n                        }\n                    }\n                }),\n                EditorView.domEventHandlers({\n                    drop(event: DragEvent, view: EditorView) {\n                        if (uploadFileCallback) {\n                            uploadFileCallback(event);\n                        } else {\n                            console.warn('uploadFileCallback is not defined');\n                        }\n                        return false;\n                    },\n                    paste(event: ClipboardEvent) {\n                        if (uploadFileCallback) {\n                            uploadFileCallback(event);\n                        } else {\n                            console.warn('uploadFileCallback is not defined');\n                        }\n                        return false;\n                    }\n                })\n            ]\n        })\n    }\n    /**\n     *\n     * @param state\n     * @param parent\n     * @returns\n     */\n    static newEditor = (state: EditorState, parent: Element | DocumentFragment): EditorView => {\n        return new EditorView({\n            state: state,\n            parent: parent,\n        })\n    }\n    /**\n     * \u8BBE\u7F6E\u53D8\u6210\n     * @param state\n     */\n    setState = (state: EditorState) => {\n        this._editor.setState(state)\n    }\n\n    //#region ============================================================ codemirror \u65B9\u6CD5\u5C01\u88C5 ============================================================\n    /**\n     * \u83B7\u53D6\u6307\u5B9A\u8303\u56F4\u7684\u5185\u5BB9\n     * @param editor\n     * @param from \u5F00\u59CB\u4F4D\u7F6E\n     * @param to \u7ED3\u675F\u4F4D\u7F6E\n     * @returns \u8303\u56F4\u5185\u7684\u5185\u5BB9\n     */\n    static sliceDoc = (editor: EditorView, from?: number, to?: number): string => {\n        return editor.state.sliceDoc(from, to)\n    }\n    /**\n     * \u83B7\u53D6\u6587\u6863\u5185\u5BB9\n     * @param editor\n     * @returns \u5185\u5BB9\n     */\n    static getDocString = (editor: EditorView): string => {\n        return editor.state.doc.toString()\n    }\n    /**\n     * \u83B7\u53D6\u6587\u6863\u957F\u5EA6\n     * @param editor\n     * @returns \u957F\u5EA6\n     */\n    static getDocLength = (editor: EditorView): number => {\n        return editor.state.doc.length\n    }\n    /**\n     * \u83B7\u53D6\u5F53\u524D\u9009\u4E2D\u5185\u5BB9, \u5E76\u8FD4\u56DE\u9009\u4E2D\u7684\u6587\u672C\u5185\u5BB9, \u53EF\u4EE5\u9009\u4E2D\u591A\u4E2A\u4E0D\u540C\u7684\u6BB5\u843D, \u591A\u4E2A\u6BB5\u843D\u4E4B\u95F4\u4F1A\u4EE5 \\n \u6362\u884C\n     * @param editor\n     * @returns \u6587\u672C\u5185\u5BB9, \u591A\u4E2A\u9009\u4E2D\u4E4B\u95F4\u4F1A\u6362\u884C\n     */\n    static getSelectionRangesText = (editor: EditorView): string => {\n        let ranges = editor.state.selection.ranges\n        let text = ''\n        if (ranges.length > 0) {\n            for (let i = 0; i < ranges.length; i++) {\n                let range = ranges[i]\n                if (range != undefined) {\n                    let rangeText = editor.state.sliceDoc(range.from, range.to)\n                    if (isBlank(rangeText)) {\n                        continue\n                    }\n                    if (i != 0) {\n                        text += '\\n'\n                    }\n                    text += rangeText\n                }\n            }\n        }\n        return text\n    }\n    /**\n     * \u83B7\u53D6\u9009\u4E2D\u7684\u5185\u5BB9\n     * @param editor\n     * @returns \u5B58\u5728\u591A\u4E2A\u9009\u4E2D\u6240\u4EE5\u8FD4\u56DE\u6570\u7EC4\n     */\n    static getSelectionRangesArr = (editor: EditorView): readonly SelectionRange[] => {\n    return editor.state.selection.ranges\n}\n/**\n * \u5728\u6307\u5B9A\u4F4D\u7F6E(istFrom -> istTo)\u63D2\u5165 content, \u6216\u5C06\u5185\u5BB9\u66FF\u6362\u4E3A content, \u968F\u540E\u9009\u4E2D (selectFrom -> selectTo)\n * istFrom \u4E0E istTo \u76F8\u540C\u5373\u4E3A\u63D2\u5165\uFF0C\u4E0D\u540C\u5373\u4E3A\u66FF\u6362\n * \u5982\u679C\u8981\u5C06\u5149\u6807\u79FB\u52A8\u5230\u67D0\u5904, selectFrom \u4E0E selectTo \u76F8\u540C\u5373\u53EF\n *\n * @param istFrom \u63D2\u5165\u7684\u5F00\u59CB\u4F4D\u7F6E\n * @param istTo \u63D2\u5165\u7684\u7ED3\u675F\u4F4D\u7F6E\n * @param content \u63D2\u5165\u7684\u5185\u5BB9\n * @param selectFrom \u63D2\u5165\u5185\u5BB9\u540E, \u5C06\u5149\u6807\u79FB\u52A8\u5230\u7684\u5F00\u59CB\u4F4D\u7F6E\n * @param selectTo \u63D2\u5165\u5185\u5BB9\u540E, \u5C06\u5149\u6807\u79FB\u52A8\u5230\u7684\u7ED3\u675F\u4F4D\u7F6E\n */\nstatic insert = (editor: EditorView, istFrom: number, istTo: number, content: string, selectFrom: number, selectTo: number) => {\n    let changeByRange = {\n        /* \u521B\u5EFA\u53D8\u66F4\u7684\u5185\u5BB9, \u53EF\u4EE5\u662F\u4E2A\u6570\u7EC4, \u8BF4\u660E\u540C\u65F6\u4FEE\u6539\u591A\u4E2A\u90E8\u5206 */\n        changes: [{ from: istFrom, to: istTo, insert: content }],\n        /* \u4FEE\u6539\u4E4B\u540E\u5149\u6807\u79FB\u52A8\u5230\u7684\u4F4D\u7F6E */\n        range: EditorSelection.range(selectFrom, selectTo)\n    }\n    editor.dispatch(changeByRange)\n}\nsliceDoc = (from?: number, to?: number): string => {\n    return this._editor.state.sliceDoc(from, to)\n}\ngetDocString = (): string => {\n    return CodemirrorWrapper.getDocString(this._editor)\n}\ngetDocLength = (): number => {\n    return CodemirrorWrapper.getDocLength(this._editor)\n}\ngetSelectionRangesText = (): string => {\n    return CodemirrorWrapper.getSelectionRangesText(this._editor)\n}\ngetSelectionRangesArr = (): readonly SelectionRange[] => {\n    return CodemirrorWrapper.getSelectionRangesArr(this._editor)\n}\ngetDocumentTop = (): number => {\n    return this._editor.documentTop\n}\ngetElementAtHeight = (height: number): BlockInfo => {\n    return this._editor.elementAtHeight(height)\n}\ngetLineBlockAtHeight = (height: number): BlockInfo => {\n    return this._editor.lineBlockAtHeight(height)\n}\ninsert = (istFrom: number, istTo: number, content: string, selectFrom: number, selectTo: number) => {\n    CodemirrorWrapper.insert(this._editor, istFrom, istTo, content, selectFrom, selectTo)\n}\n//#endregion\n//#region ============================================================ \u81EA\u5B9A\u4E49\u547D\u4EE4 ============================================================\n/**\n * \u884C\u5185\u683C\u5F0F\u7684\u66FF\u6362\u547D\u4EE4, \u7528\u4E8E\u524D\u540E\u7F00\u76F8\u540C\u7684\u683C\u5F0F, \u5982 `**` / `~~` \u7B49\n *\n * @param editor \u7F16\u8F91\u5668\n * @param range \u8303\u56F4\n * @param target \u6DFB\u52A0\u7684\u524D\u540E\u7F00\u5B57\u7B26, \u5982\u52A0\u7C97\u662F **, \u884C\u5185\u4EE3\u7801\u5757\u662F `\n */\nstatic replaceInlineCommand = (editor: EditorView, range: SelectionRange, target: string): any => {\n    let len = target.length\n\n    const prefixFrom: number = range.from - len\n    const prefixTo: number = range.from\n    const prefix = this.sliceDoc(editor, prefixFrom, prefixTo)\n\n    const suffixFrom: number = range.to\n    const suffixTo: number = range.to + len\n    const suffix = this.sliceDoc(editor, suffixFrom, suffixTo)\n    // \u5224\u65AD\u662F\u53D6\u6D88\u8FD8\u662F\u6DFB\u52A0, \u5982\u679C\u88AB\u9009\u4E2D\u7684\u6587\u672C\u524D\u540E\u5DF2\u7ECF\u662F target \u5B57\u7B26, \u5219\u5220\u9664\u524D\u540E\u5B57\u7B26\n    if (prefix == target && suffix == target) {\n        return {\n            changes: [\n                { from: prefixFrom, to: prefixTo, insert: '' },\n                { from: suffixFrom, to: suffixTo, insert: '' }\n            ],\n            range: EditorSelection.range(prefixFrom, suffixFrom - len)\n        }\n    } else {\n        return {\n            changes: [\n                { from: range.from, insert: target },\n                { from: range.to, insert: target }\n            ],\n            range: EditorSelection.range(range.from + len, range.to + len)\n        }\n    }\n}\n/**\n * \u884C\u5185\u683C\u5F0F\u7684\u66FF\u6362\u547D\u4EE4, \u7528\u4E8E\u524D\u540E\u7F00\u4E0D\u540C\u7684\u683C\u5F0F, \u5982 `<sup></sup>`\u7B49\n *\n * @param editor \u7F16\u8F91\u5668\n * @param range  \u8303\u56F4\n * @param prefixTarget \u524D\u7F00\n * @param suffixTarget \u540E\u7F00\n * @returns\n */\nstatic replaceDifInlineCommand = (editor: EditorView, range: SelectionRange, prefixTarget: string, suffixTarget: string): any => {\n    let prefixLen = prefixTarget.length\n    let suffixLen = suffixTarget.length\n\n    const prefixFrom: number = range.from - prefixLen\n    const prefixTo: number = range.from\n    const prefix = this.sliceDoc(editor, prefixFrom, prefixTo)\n\n    const suffixFrom: number = range.to\n    const suffixTo: number = range.to + suffixLen\n    const suffix = this.sliceDoc(editor, suffixFrom, suffixTo)\n\n    // \u5224\u65AD\u662F\u53D6\u6D88\u8FD8\u662F\u6DFB\u52A0, \u5982\u679C\u88AB\u9009\u4E2D\u7684\u6587\u672C\u524D\u540E\u5DF2\u7ECF\u662F target \u5B57\u7B26, \u5219\u5220\u9664\u524D\u540E\u5B57\u7B26\n    if (prefix == prefixTarget && suffix == suffixTarget) {\n        return {\n            changes: [\n                { from: prefixFrom, to: prefixTo, insert: '' },\n                { from: suffixFrom, to: suffixTo, insert: '' }\n            ],\n            range: EditorSelection.range(prefixFrom, range.to - prefixLen)\n        }\n    } else {\n        return {\n            changes: [\n                { from: range.from, insert: prefixTarget },\n                { from: range.to, insert: suffixTarget }\n            ],\n            range: EditorSelection.range(range.from + prefixLen, range.to + prefixLen)\n        }\n    }\n}\n/**\n * \u5C06\u9009\u4E2D\u5185\u5BB9\u66FF\u6362\u4E3A content, \u5982\u679C\u6CA1\u6709\u9009\u4E2D, \u5219\u5728\u5149\u6807\u4F4D\u7F6E\u63D2\u5165\n * @param editor \u7F16\u8F91\u5668\n * @param content \u63D2\u5165\u7684\u5185\u5BB9\n */\nstatic insertBlockCommand = (editor: EditorView, content: string) => {\n    editor.dispatch(editor.state.replaceSelection(content))\n}\n\n/** \u9009\u4E2D\u884C\u53D8\u6210\u6807\u9898 */\nprivate static commandHeading = (editor: EditorView) => {\n// \u83B7\u53D6\u9009\u4E2D\u7684\u8303\u56F4\n    let { from, to } = editor.state.selection.main;\n\n// \u83B7\u53D6\u884C\u7684\u5F00\u59CB\u548C\u7ED3\u675F\n    let start = editor.state.doc.lineAt(from).from;\n    let end = editor.state.doc.lineAt(to).to;\n\n// \u83B7\u53D6\u884C\u7684\u5F00\u59CB\u90E8\u5206\n    let lineStart = editor.state.doc.sliceString(start, start + 3);\n\n// \u521B\u5EFA\u4E00\u4E2A Transaction \u5BF9\u8C61\n    let tr;\n    if (lineStart === '## ') {\n// \u5982\u679C\u884C\u7684\u5F00\u59CB\u5DF2\u7ECF\u662F '## '\uFF0C\u5C06\u5176\u5220\u9664\n        tr = editor.state.update({\n            changes: { from: start, to: start + 3 },\n            selection: { anchor: end - 3, head: end - 3 }\n        });\n    } else {\n// \u5982\u679C\u884C\u7684\u5F00\u59CB\u4E0D\u662F '## '\uFF0C\u6DFB\u52A0 '## '\n        tr = editor.state.update({\n            changes: { from: start, to: start, insert: '## ' },\n            selection: { anchor: end + 3, head: end + 3 }\n        });\n    }\n\n// \u5E94\u7528 Transaction \u5BF9\u8C61\n    editor.dispatch(tr);\n    editor.focus();\n};\n\n/** \u9009\u4E2D\u5185\u5BB9\u52A0\u7C97 */\nprivate static commandBold = (editor: EditorView) => {\n    editor.dispatch(editor.state.changeByRange((range: SelectionRange) => this.replaceInlineCommand(editor, range, '**')))\n}\n\n/** \u6807\u8BB0\u9009\u62E9\u5185\u5BB9 */\nprivate static commandHighlighter = (editor: EditorView) => {\n    editor.dispatch(editor.state.changeByRange((range: SelectionRange) => this.replaceInlineCommand(editor, range, '`')))\n}\n\n/** \u9009\u4E2D\u5185\u5BB9\u659C\u4F53 */\nprivate static commandItalic = (editor: EditorView) => {\n    editor.dispatch(editor.state.changeByRange((range: SelectionRange) => this.replaceInlineCommand(editor, range, '*')))\n}\n/** \u9009\u4E2D\u5185\u5BB9\u589E\u52A0\u5220\u9664\u7EBF */\nprivate static commandStrike = (editor: EditorView) => {\n    editor.dispatch(editor.state.changeByRange((range: SelectionRange) => this.replaceInlineCommand(editor, range, '~~')))\n}\n/** \u9009\u62E9\u5185\u5BB9\u8BBE\u7F6E\u4E3A\u884C\u5185\u4EE3\u7801\u5757 */\nprivate static commandCode = (editor: EditorView) => {\n    editor.dispatch(editor.state.changeByRange((range: SelectionRange) => this.replaceInlineCommand(editor, range, '`')))\n}\n/** \u9009\u62E9\u5185\u5BB9\u8BBE\u7F6E\u4E3A\u4E0A\u6807 */\nprivate static commandSup = (editor: EditorView) => {\n    editor.dispatch(editor.state.changeByRange((range: SelectionRange) => this.replaceDifInlineCommand(editor, range, '<sup>', '</sup>')))\n}\n/** \u9009\u62E9\u5185\u5BB9\u8BBE\u7F6E\u4E3A\u4E0B\u6807 */\nprivate static commandSub = (editor: EditorView) => {\n    editor.dispatch(editor.state.changeByRange((range: SelectionRange) => this.replaceDifInlineCommand(editor, range, '<sub>', '</sub>')))\n}\n/** \u5728\u5F53\u524D\u4F4D\u7F6E\u589E\u52A0\u8868\u683C */\nprivate static commandTable = (editor: EditorView) => {\n    this.insertBlockCommand(editor, `\\n|||\\n|---|---|\\n|||\\n`)\n}\n\n/** \u5728\u5F53\u524D\u4F4D\u7F6E\u589E\u52A0\u5355\u9009\u6846 */\nprivate static commandCheckBox = (editor: EditorView) => {\n    this.insertBlockCommand(editor, `\\n- [ ] \\n`)\n}\n/** \u5728\u5F53\u524D\u4F4D\u7F6E\u589E\u52A0\u5206\u5272\u7EBF */\nprivate static commandSeparator = (editor: EditorView) => {\n    this.insertBlockCommand(editor, `\\n---\\n`)\n}\n/** \u5728\u5F53\u524D\u4F4D\u7F6E\u589E\u52A0\u5F15\u7528 */\nprivate static commandQuote = (editor: EditorView) => {\n    this.insertBlockCommand(editor, `\\n>\\n>\\n`)\n}\n/** \u5728\u5F53\u524D\u4F4D\u7F6E\u589E\u52A0\u65E0\u5E8F\u5217\u8868 */\nprivate static commandUnordered = (editor: EditorView) => {\n    this.insertBlockCommand(editor, `\\n- `)\n    editor.focus()\n}\n/** \u5728\u5F53\u524D\u4F4D\u7F6E\u589E\u52A0\u6709\u5E8F\u5217\u8868 */\nprivate static commandOrdered = (editor: EditorView) => {\n    this.insertBlockCommand(editor, `\\n1. `)\n    editor.focus()\n}\n/** \u5728\u5F53\u524D\u4F4D\u7F6E\u589E\u52A0\u56FE\u7247 */\nprivate static commandImg = (editor: EditorView) => {\n    this.insertBlockCommand(editor, `\\n![]()\\n`)\n}\n/** \u5728\u5F53\u524D\u4F4D\u7F6E\u589E\u52A0\u94FE\u63A5 */\nprivate static commandLink = (editor: EditorView) => {\n    this.insertBlockCommand(editor, `\\n[]()\\n`)\n}\n/** \u683C\u5F0F\u5316\u5185\u5BB9, \u4F7F\u7528 prettier */\nprivate static commandFormatMarkdown = (editor: EditorView) => {\n    prettier.format(CodemirrorWrapper.getDocString(editor), { semi: false, parser: 'markdown', plugins: [pluginMarkdown] }).then((formatContent) => {\n        let maxLen = CodemirrorWrapper.getDocLength(editor)\n        CodemirrorWrapper.insert(editor, 0, maxLen, formatContent, 0, 0)\n    })\n}\n/** \u9884\u89C8 */\nprivate static commandPreviewPanel = (editor: EditorView) => {\n    editor.dispatch({\n        effects: toggleMarkdownPreview.of(!editor.state.field(markdownPreviewState))\n    })\n};\n/** \u56FE\u7247\u4E0A\u4F20 */\nprivate static commandImagesPanel = (editor: EditorView) => {\n    const currentState = editor.state.field(imagePanelState);\n    editor.dispatch({\n        effects: [\n            toggleImagePanel.of(!currentState.visible)\n        ]\n    })\n};\n\n/** \u6587\u4EF6\u4E0A\u4F20 */\nprivate static commandFilesPanel = (editor: EditorView) => {\n    const currentState = editor.state.field(filePanelState);\n    editor.dispatch({\n        effects: [\n            toggleFilePanel.of(!currentState.visible)\n        ]\n    })\n};\n\n/** Emoji */\nprivate static commandEmojisPanel = (editor: EditorView) => {\n    editor.dispatch({\n        effects: toggleEmojiPanel.of(!editor.state.field(emojiPanelState))\n    })\n};\n\n\n\nprivate static switchCodeMirrorThemeMode = (editor: EditorView, isDark: boolean) => {\n    if (isDark) {\n        editor.dispatch({\n            effects: codemirrorTheme.reconfigure(oneDarkTheme)\n        })\n    } else {\n        editor.dispatch({\n            effects: codemirrorTheme.reconfigure(lightTheme)\n        })\n    }\n}\n\n// \u5B9E\u4F8B\u8C03\u7528\ninsertBlockCommand = (content: string) => {\n    CodemirrorWrapper.insertBlockCommand(this._editor, content)\n}\n\ncommandHeading = () => {\n    CodemirrorWrapper.commandHeading(this._editor)\n}\ncommandBold = () => {\n    CodemirrorWrapper.commandBold(this._editor)\n}\ncommandItalic = () => {\n    CodemirrorWrapper.commandItalic(this._editor)\n}\ncommandStrike = () => {\n    CodemirrorWrapper.commandStrike(this._editor)\n}\ncommandCode = () => {\n    CodemirrorWrapper.commandCode(this._editor)\n}\ncommandSup = () => {\n    CodemirrorWrapper.commandSup(this._editor)\n}\ncommandSub = () => {\n    CodemirrorWrapper.commandSub(this._editor)\n}\ncommandTable = () => {\n    CodemirrorWrapper.commandTable(this._editor)\n}\ncommandCheckBox = () => {\n    CodemirrorWrapper.commandCheckBox(this._editor)\n}\ncommandSeparator = () => {\n    CodemirrorWrapper.commandSeparator(this._editor)\n}\ncommandQuote = () => {\n    CodemirrorWrapper.commandQuote(this._editor)\n}\n\ncommandUnordered = () => {\n    CodemirrorWrapper.commandUnordered(this._editor)\n}\ncommandOrdered = () => {\n    CodemirrorWrapper.commandOrdered(this._editor)\n}\ncommandImg = () => {\n    CodemirrorWrapper.commandImg(this._editor)\n}\ncommandLink = () => {\n    CodemirrorWrapper.commandLink(this._editor)\n}\ncommandFormatMarkdown = async () => {\n    CodemirrorWrapper.commandFormatMarkdown(this._editor)\n}\n\nswitchCodeMirrorThemeMode = (isDark: boolean) => {\n    CodemirrorWrapper.switchCodeMirrorThemeMode(this._editor, isDark)\n}\n\ncommandHighlighter = () => {\n    CodemirrorWrapper.commandHighlighter(this._editor)\n}\n\ncommandPreviewPanel = () => {\n    CodemirrorWrapper.commandPreviewPanel(this._editor)\n}\n\ncommandFilesPanel = () => {\n    CodemirrorWrapper.commandFilesPanel(this._editor)\n}\n\ncommandImagesPanel = () => {\n    CodemirrorWrapper.commandImagesPanel(this._editor)\n}\n\ncommandEmojisPanel = () => {\n    CodemirrorWrapper.commandEmojisPanel(this._editor)\n}\n\ndestroy = () => {\n    this._editor.destroy()\n}\n//#endregion\n}", "export class FetchResponse {\n  constructor (response) {\n    this.response = response\n  }\n\n  get statusCode () {\n    return this.response.status\n  }\n\n  get redirected () {\n    return this.response.redirected\n  }\n\n  get ok () {\n    return this.response.ok\n  }\n\n  get unauthenticated () {\n    return this.statusCode === 401\n  }\n\n  get unprocessableEntity () {\n    return this.statusCode === 422\n  }\n\n  get authenticationURL () {\n    return this.response.headers.get('WWW-Authenticate')\n  }\n\n  get contentType () {\n    const contentType = this.response.headers.get('Content-Type') || ''\n\n    return contentType.replace(/;.*$/, '')\n  }\n\n  get headers () {\n    return this.response.headers\n  }\n\n  get html () {\n    if (this.contentType.match(/^(application|text)\\/(html|xhtml\\+xml)$/)) {\n      return this.text\n    }\n\n    return Promise.reject(new Error(`Expected an HTML response but got \"${this.contentType}\" instead`))\n  }\n\n  get json () {\n    if (this.contentType.match(/^application\\/.*json$/)) {\n      return this.responseJson || (this.responseJson = this.response.json())\n    }\n\n    return Promise.reject(new Error(`Expected a JSON response but got \"${this.contentType}\" instead`))\n  }\n\n  get text () {\n    return this.responseText || (this.responseText = this.response.text())\n  }\n\n  get isTurboStream () {\n    return this.contentType.match(/^text\\/vnd\\.turbo-stream\\.html/)\n  }\n\n  async renderTurboStream () {\n    if (this.isTurboStream) {\n      if (window.Turbo) {\n        await window.Turbo.renderStreamMessage(await this.text)\n      } else {\n        console.warn('You must set `window.Turbo = Turbo` to automatically process Turbo Stream events with request.js')\n      }\n    } else {\n      return Promise.reject(new Error(`Expected a Turbo Stream response but got \"${this.contentType}\" instead`))\n    }\n  }\n}\n", "export class RequestInterceptor {\n  static register (interceptor) {\n    this.interceptor = interceptor\n  }\n\n  static get () {\n    return this.interceptor\n  }\n\n  static reset () {\n    this.interceptor = undefined\n  }\n}\n", "export function getCookie (name) {\n  const cookies = document.cookie ? document.cookie.split('; ') : []\n  const prefix = `${encodeURIComponent(name)}=`\n  const cookie = cookies.find(cookie => cookie.startsWith(prefix))\n\n  if (cookie) {\n    const value = cookie.split('=').slice(1).join('=')\n\n    if (value) {\n      return decodeURIComponent(value)\n    }\n  }\n}\n\nexport function compact (object) {\n  const result = {}\n\n  for (const key in object) {\n    const value = object[key]\n    if (value !== undefined) {\n      result[key] = value\n    }\n  }\n\n  return result\n}\n\nexport function metaContent (name) {\n  const element = document.head.querySelector(`meta[name=\"${name}\"]`)\n  return element && element.content\n}\n\nexport function stringEntriesFromFormData (formData) {\n  return [...formData].reduce((entries, [name, value]) => {\n    return entries.concat(typeof value === 'string' ? [[name, value]] : [])\n  }, [])\n}\n\nexport function mergeEntries (searchParams, entries) {\n  for (const [name, value] of entries) {\n    if (value instanceof window.File) continue\n\n    if (searchParams.has(name) && !name.includes('[]')) {\n      searchParams.delete(name)\n      searchParams.set(name, value)\n    } else {\n      searchParams.append(name, value)\n    }\n  }\n}\n", "import { FetchResponse } from './fetch_response'\nimport { RequestInterceptor } from './request_interceptor'\nimport { getCookie, compact, metaContent, stringEntriesFromFormData, mergeEntries } from './lib/utils'\n\nexport class FetchRequest {\n  constructor (method, url, options = {}) {\n    this.method = method\n    this.options = options\n    this.originalUrl = url.toString()\n  }\n\n  async perform () {\n    try {\n      const requestInterceptor = RequestInterceptor.get()\n      if (requestInterceptor) {\n        await requestInterceptor(this)\n      }\n    } catch (error) {\n      console.error(error)\n    }\n\n    const response = new FetchResponse(await window.fetch(this.url, this.fetchOptions))\n\n    if (response.unauthenticated && response.authenticationURL) {\n      return Promise.reject(window.location.href = response.authenticationURL)\n    }\n\n    const responseStatusIsTurboStreamable = response.ok || response.unprocessableEntity\n\n    if (responseStatusIsTurboStreamable && response.isTurboStream) {\n      await response.renderTurboStream()\n    }\n\n    return response\n  }\n\n  addHeader (key, value) {\n    const headers = this.additionalHeaders\n    headers[key] = value\n    this.options.headers = headers\n  }\n\n  sameHostname () {\n    if (!this.originalUrl.startsWith('http:')) {\n      return true\n    }\n\n    try {\n      return new URL(this.originalUrl).hostname === window.location.hostname\n    } catch (_) {\n      return true\n    }\n  }\n\n  get fetchOptions () {\n    return {\n      method: this.method.toUpperCase(),\n      headers: this.headers,\n      body: this.formattedBody,\n      signal: this.signal,\n      credentials: this.credentials,\n      redirect: this.redirect\n    }\n  }\n\n  get headers () {\n    const baseHeaders = {\n      'X-Requested-With': 'XMLHttpRequest',\n      'Content-Type': this.contentType,\n      Accept: this.accept\n    }\n\n    if (this.sameHostname()) {\n      baseHeaders['X-CSRF-Token'] = this.csrfToken\n    }\n\n    return compact(\n      Object.assign(baseHeaders, this.additionalHeaders)\n    )\n  }\n\n  get csrfToken () {\n    return getCookie(metaContent('csrf-param')) || metaContent('csrf-token')\n  }\n\n  get contentType () {\n    if (this.options.contentType) {\n      return this.options.contentType\n    } else if (this.body == null || this.body instanceof window.FormData) {\n      return undefined\n    } else if (this.body instanceof window.File) {\n      return this.body.type\n    }\n\n    return 'application/json'\n  }\n\n  get accept () {\n    switch (this.responseKind) {\n      case 'html':\n        return 'text/html, application/xhtml+xml'\n      case 'turbo-stream':\n        return 'text/vnd.turbo-stream.html, text/html, application/xhtml+xml'\n      case 'json':\n        return 'application/json, application/vnd.api+json'\n      default:\n        return '*/*'\n    }\n  }\n\n  get body () {\n    return this.options.body\n  }\n\n  get query () {\n    const originalQuery = (this.originalUrl.split('?')[1] || '').split('#')[0]\n    const params = new URLSearchParams(originalQuery)\n\n    let requestQuery = this.options.query\n    if (requestQuery instanceof window.FormData) {\n      requestQuery = stringEntriesFromFormData(requestQuery)\n    } else if (requestQuery instanceof window.URLSearchParams) {\n      requestQuery = requestQuery.entries()\n    } else {\n      requestQuery = Object.entries(requestQuery || {})\n    }\n\n    mergeEntries(params, requestQuery)\n\n    const query = params.toString()\n    return (query.length > 0 ? `?${query}` : '')\n  }\n\n  get url () {\n    return (this.originalUrl.split('?')[0]).split('#')[0] + this.query\n  }\n\n  get responseKind () {\n    return this.options.responseKind || 'html'\n  }\n\n  get signal () {\n    return this.options.signal\n  }\n\n  get redirect () {\n    return this.options.redirect || 'follow'\n  }\n\n  get credentials () {\n    return this.options.credentials || 'same-origin'\n  }\n\n  get additionalHeaders () {\n    return this.options.headers || {}\n  }\n\n  get formattedBody () {\n    const bodyIsAString = Object.prototype.toString.call(this.body) === '[object String]'\n    const contentTypeIsJson = this.headers['Content-Type'] === 'application/json'\n\n    if (contentTypeIsJson && !bodyIsAString) {\n      return JSON.stringify(this.body)\n    }\n\n    return this.body\n  }\n}\n", "import { FetchRequest } from './fetch_request'\n\nasync function get (url, options) {\n  const request = new FetchRequest('get', url, options)\n  return request.perform()\n}\n\nasync function post (url, options) {\n  const request = new FetchRequest('post', url, options)\n  return request.perform()\n}\n\nasync function put (url, options) {\n  const request = new FetchRequest('put', url, options)\n  return request.perform()\n}\n\nasync function patch (url, options) {\n  const request = new FetchRequest('patch', url, options)\n  return request.perform()\n}\n\nasync function destroy (url, options) {\n  const request = new FetchRequest('delete', url, options)\n  return request.perform()\n}\n\nexport { get, post, put, patch, destroy }\n", "import { FetchRequest } from './fetch_request'\nimport { FetchResponse } from './fetch_response'\nimport { RequestInterceptor } from './request_interceptor'\nimport { get, post, put, patch, destroy } from './verbs'\n\nexport { FetchRequest, FetchResponse, RequestInterceptor, get, post, put, patch, destroy }\n", "/**\n * Tagify (v 4.17.9) - tags input component\n * By undefined\n * https://github.com/yairEO/tagify\n * Permission is hereby granted, free of charge, to any person obtaining a copy\r\n * of this software and associated documentation files (the \"Software\"), to deal\r\n * in the Software without restriction, including without limitation the rights\r\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n * copies of the Software, and to permit persons to whom the Software is\r\n * furnished to do so, subject to the following conditions:\r\n * \r\n * The above copyright notice and this permission notice shall be included in\r\n * all copies or substantial portions of the Software.\r\n * \r\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n * THE SOFTWARE.\r\n * \r\n * THE SOFTWARE IS NOT PERMISSIBLE TO BE SOLD.\n */\n\n!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).Tagify=e()}(this,(function(){\"use strict\";function t(t,e){var i=Object.keys(t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(t);e&&(s=s.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),i.push.apply(i,s)}return i}function e(e){for(var s=1;s<arguments.length;s++){var a=null!=arguments[s]?arguments[s]:{};s%2?t(Object(a),!0).forEach((function(t){i(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):t(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function i(t,e,i){return(e=function(t){var e=function(t,e){if(\"object\"!=typeof t||null===t)return t;var i=t[Symbol.toPrimitive];if(void 0!==i){var s=i.call(t,e||\"default\");if(\"object\"!=typeof s)return s;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return(\"string\"===e?String:Number)(t)}(t,\"string\");return\"symbol\"==typeof e?e:String(e)}(e))in t?Object.defineProperty(t,e,{value:i,enumerable:!0,configurable:!0,writable:!0}):t[e]=i,t}var s=\"\u200B\";const a=(t,e,i,s)=>(t=\"\"+t,e=\"\"+e,s&&(t=t.trim(),e=e.trim()),i?t==e:t.toLowerCase()==e.toLowerCase()),n=(t,e)=>t&&Array.isArray(t)&&t.map((t=>o(t,e)));function o(t,e){var i,s={};for(i in t)e.indexOf(i)<0&&(s[i]=t[i]);return s}function r(t){var e=document.createElement(\"div\");return t.replace(/\\&#?[0-9a-z]+;/gi,(function(t){return e.innerHTML=t,e.innerText}))}function l(t){return(new DOMParser).parseFromString(t.trim(),\"text/html\").body.firstElementChild}function d(t,e){for(e=e||\"previous\";t=t[e+\"Sibling\"];)if(3==t.nodeType)return t}function h(t){return\"string\"==typeof t?t.replace(/&/g,\"&amp;\").replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\").replace(/\"/g,\"&quot;\").replace(/`|'/g,\"&#039;\"):t}function g(t){var e=Object.prototype.toString.call(t).split(\" \")[1].slice(0,-1);return t===Object(t)&&\"Array\"!=e&&\"Function\"!=e&&\"RegExp\"!=e&&\"HTMLUnknownElement\"!=e}function p(t,e,i){function s(t,e){for(var i in e)if(e.hasOwnProperty(i)){if(g(e[i])){g(t[i])?s(t[i],e[i]):t[i]=Object.assign({},e[i]);continue}if(Array.isArray(e[i])){t[i]=Object.assign([],e[i]);continue}t[i]=e[i]}}return t instanceof Object||(t={}),s(t,e),i&&s(t,i),t}function c(){const t=[],e={};for(let i of arguments)for(let s of i)g(s)?e[s.value]||(t.push(s),e[s.value]=1):t.includes(s)||t.push(s);return t}function u(t){return String.prototype.normalize?\"string\"==typeof t?t.normalize(\"NFD\").replace(/[\\u0300-\\u036f]/g,\"\"):void 0:t}var m=()=>/(?=.*chrome)(?=.*android)/i.test(navigator.userAgent);function v(){return([1e7]+-1e3+-4e3+-8e3+-1e11).replace(/[018]/g,(t=>(t^crypto.getRandomValues(new Uint8Array(1))[0]&15>>t/4).toString(16)))}function f(t){return t&&t.classList&&t.classList.contains(this.settings.classNames.tag)}function T(t,e){var i=window.getSelection();return e=e||i.getRangeAt(0),\"string\"==typeof t&&(t=document.createTextNode(t)),e&&(e.deleteContents(),e.insertNode(t)),t}function w(t,e,i){return t?(e&&(t.__tagifyTagData=i?e:p({},t.__tagifyTagData||{},e)),t.__tagifyTagData):(console.warn(\"tag element doesn't exist\",t,e),e)}function b(t){if(t&&t.parentNode){var e=t,i=window.getSelection(),s=i.getRangeAt(0);i.rangeCount&&(s.setStartAfter(e),s.collapse(!0),i.removeAllRanges(),i.addRange(s))}}function y(t,e){t.forEach((t=>{if(w(t.previousSibling)||!t.previousSibling){var i=document.createTextNode(s);t.before(i),e&&b(i)}}))}var x={delimiters:\",\",pattern:null,tagTextProp:\"value\",maxTags:1/0,callbacks:{},addTagOnBlur:!0,onChangeAfterBlur:!0,duplicates:!1,whitelist:[],blacklist:[],enforceWhitelist:!1,userInput:!0,keepInvalidTags:!1,createInvalidTags:!0,mixTagsAllowedAfter:/,|\\.|\\:|\\s/,mixTagsInterpolator:[\"[[\",\"]]\"],backspace:!0,skipInvalid:!1,pasteAsTags:!0,editTags:{clicks:2,keepInvalid:!0},transformTag:()=>{},trim:!0,a11y:{focusableTags:!1},mixMode:{insertAfterTag:\"\u00A0\"},autoComplete:{enabled:!0,rightKey:!1},classNames:{namespace:\"tagify\",mixMode:\"tagify--mix\",selectMode:\"tagify--select\",input:\"tagify__input\",focus:\"tagify--focus\",tagNoAnimation:\"tagify--noAnim\",tagInvalid:\"tagify--invalid\",tagNotAllowed:\"tagify--notAllowed\",scopeLoading:\"tagify--loading\",hasMaxTags:\"tagify--hasMaxTags\",hasNoTags:\"tagify--noTags\",empty:\"tagify--empty\",inputInvalid:\"tagify__input--invalid\",dropdown:\"tagify__dropdown\",dropdownWrapper:\"tagify__dropdown__wrapper\",dropdownHeader:\"tagify__dropdown__header\",dropdownFooter:\"tagify__dropdown__footer\",dropdownItem:\"tagify__dropdown__item\",dropdownItemActive:\"tagify__dropdown__item--active\",dropdownItemHidden:\"tagify__dropdown__item--hidden\",dropdownInital:\"tagify__dropdown--initial\",tag:\"tagify__tag\",tagText:\"tagify__tag-text\",tagX:\"tagify__tag__removeBtn\",tagLoading:\"tagify__tag--loading\",tagEditing:\"tagify__tag--editable\",tagFlash:\"tagify__tag--flash\",tagHide:\"tagify__tag--hide\"},dropdown:{classname:\"\",enabled:2,maxItems:10,searchKeys:[\"value\",\"searchBy\"],fuzzySearch:!0,caseSensitive:!1,accentedSearch:!0,includeSelectedTags:!1,highlightFirst:!1,closeOnSelect:!0,clearOnSelect:!0,position:\"all\",appendTarget:null},hooks:{beforeRemoveTag:()=>Promise.resolve(),beforePaste:()=>Promise.resolve(),suggestionClick:()=>Promise.resolve()}};function O(){this.dropdown={};for(let t in this._dropdown)this.dropdown[t]=\"function\"==typeof this._dropdown[t]?this._dropdown[t].bind(this):this._dropdown[t];this.dropdown.refs()}var D={refs(){this.DOM.dropdown=this.parseTemplate(\"dropdown\",[this.settings]),this.DOM.dropdown.content=this.DOM.dropdown.querySelector(\"[data-selector='tagify-suggestions-wrapper']\")},getHeaderRef(){return this.DOM.dropdown.querySelector(\"[data-selector='tagify-suggestions-header']\")},getFooterRef(){return this.DOM.dropdown.querySelector(\"[data-selector='tagify-suggestions-footer']\")},getAllSuggestionsRefs(){return[...this.DOM.dropdown.content.querySelectorAll(this.settings.classNames.dropdownItemSelector)]},show(t){var e,i,s,n=this.settings,o=\"mix\"==n.mode&&!n.enforceWhitelist,r=!n.whitelist||!n.whitelist.length,l=\"manual\"==n.dropdown.position;if(t=void 0===t?this.state.inputText:t,!(r&&!o&&!n.templates.dropdownItemNoMatch||!1===n.dropdown.enable||this.state.isLoading||this.settings.readonly)){if(clearTimeout(this.dropdownHide__bindEventsTimeout),this.suggestedListItems=this.dropdown.filterListItems(t),t&&!this.suggestedListItems.length&&(this.trigger(\"dropdown:noMatch\",t),n.templates.dropdownItemNoMatch&&(s=n.templates.dropdownItemNoMatch.call(this,{value:t}))),!s){if(this.suggestedListItems.length)t&&o&&!this.state.editing.scope&&!a(this.suggestedListItems[0].value,t)&&this.suggestedListItems.unshift({value:t});else{if(!t||!o||this.state.editing.scope)return this.input.autocomplete.suggest.call(this),void this.dropdown.hide();this.suggestedListItems=[{value:t}]}i=\"\"+(g(e=this.suggestedListItems[0])?e.value:e),n.autoComplete&&i&&0==i.indexOf(t)&&this.input.autocomplete.suggest.call(this,e)}this.dropdown.fill(s),n.dropdown.highlightFirst&&this.dropdown.highlightOption(this.DOM.dropdown.content.querySelector(n.classNames.dropdownItemSelector)),this.state.dropdown.visible||setTimeout(this.dropdown.events.binding.bind(this)),this.state.dropdown.visible=t||!0,this.state.dropdown.query=t,this.setStateSelection(),l||setTimeout((()=>{this.dropdown.position(),this.dropdown.render()})),setTimeout((()=>{this.trigger(\"dropdown:show\",this.DOM.dropdown)}))}},hide(t){var e=this.DOM,i=e.scope,s=e.dropdown,a=\"manual\"==this.settings.dropdown.position&&!t;if(s&&document.body.contains(s)&&!a)return window.removeEventListener(\"resize\",this.dropdown.position),this.dropdown.events.binding.call(this,!1),i.setAttribute(\"aria-expanded\",!1),s.parentNode.removeChild(s),setTimeout((()=>{this.state.dropdown.visible=!1}),100),this.state.dropdown.query=this.state.ddItemData=this.state.ddItemElm=this.state.selection=null,this.state.tag&&this.state.tag.value.length&&(this.state.flaggedTags[this.state.tag.baseOffset]=this.state.tag),this.trigger(\"dropdown:hide\",s),this},toggle(t){this.dropdown[this.state.dropdown.visible&&!t?\"hide\":\"show\"]()},render(){var t,e,i,s=(t=this.DOM.dropdown,(i=t.cloneNode(!0)).style.cssText=\"position:fixed; top:-9999px; opacity:0\",document.body.appendChild(i),e=i.clientHeight,i.parentNode.removeChild(i),e),a=this.settings;return\"number\"==typeof a.dropdown.enabled&&a.dropdown.enabled>=0?(this.DOM.scope.setAttribute(\"aria-expanded\",!0),document.body.contains(this.DOM.dropdown)||(this.DOM.dropdown.classList.add(a.classNames.dropdownInital),this.dropdown.position(s),a.dropdown.appendTarget.appendChild(this.DOM.dropdown),setTimeout((()=>this.DOM.dropdown.classList.remove(a.classNames.dropdownInital)))),this):this},fill(t){t=\"string\"==typeof t?t:this.dropdown.createListHTML(t||this.suggestedListItems);var e,i=this.settings.templates.dropdownContent.call(this,t);this.DOM.dropdown.content.innerHTML=(e=i)?e.replace(/\\>[\\r\\n ]+\\</g,\"><\").split(/>\\s+</).join(\"><\").trim():\"\"},fillHeaderFooter(){var t=this.dropdown.filterListItems(this.state.dropdown.query),e=this.parseTemplate(\"dropdownHeader\",[t]),i=this.parseTemplate(\"dropdownFooter\",[t]),s=this.dropdown.getHeaderRef(),a=this.dropdown.getFooterRef();e&&s?.parentNode.replaceChild(e,s),i&&a?.parentNode.replaceChild(i,a)},refilter(t){t=t||this.state.dropdown.query||\"\",this.suggestedListItems=this.dropdown.filterListItems(t),this.dropdown.fill(),this.suggestedListItems.length||this.dropdown.hide(),this.trigger(\"dropdown:updated\",this.DOM.dropdown)},position(t){var e=this.settings.dropdown;if(\"manual\"!=e.position){var i,s,a,n,o,r,l=this.DOM.dropdown,d=e.placeAbove,h=e.appendTarget===document.body,g=h?window.pageYOffset:e.appendTarget.scrollTop,p=document.fullscreenElement||document.webkitFullscreenElement||document.documentElement,c=p.clientHeight,u=Math.max(p.clientWidth||0,window.innerWidth||0)>480?e.position:\"all\",m=this.DOM[\"input\"==u?\"input\":\"scope\"];if(t=t||l.clientHeight,this.state.dropdown.visible){if(\"text\"==u?(a=(i=function(){const t=document.getSelection();if(t.rangeCount){const e=t.getRangeAt(0),i=e.startContainer,s=e.startOffset;let a,n;if(s>0)return n=document.createRange(),n.setStart(i,s-1),n.setEnd(i,s),a=n.getBoundingClientRect(),{left:a.right,top:a.top,bottom:a.bottom};if(i.getBoundingClientRect)return i.getBoundingClientRect()}return{left:-9999,top:-9999}}()).bottom,s=i.top,n=i.left,o=\"auto\"):(r=function(t){for(var e=0,i=0;t&&t!=p;)e+=t.offsetLeft||0,i+=t.offsetTop||0,t=t.parentNode;return{left:e,top:i}}(e.appendTarget),s=(i=m.getBoundingClientRect()).top-r.top,a=i.bottom-1-r.top,n=i.left-r.left,o=i.width+\"px\"),!h){let t=function(){for(var t=0,i=e.appendTarget.parentNode;i;)t+=i.scrollTop||0,i=i.parentNode;return t}();s+=t,a+=t}s=Math.floor(s),a=Math.ceil(a),d=void 0===d?c-i.bottom<t:d,l.style.cssText=\"left:\"+(n+window.pageXOffset)+\"px; width:\"+o+\";\"+(d?\"top: \"+(s+g)+\"px\":\"top: \"+(a+g)+\"px\"),l.setAttribute(\"placement\",d?\"top\":\"bottom\"),l.setAttribute(\"position\",u)}}},events:{binding(){let t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];var e=this.dropdown.events.callbacks,i=this.listeners.dropdown=this.listeners.dropdown||{position:this.dropdown.position.bind(this,null),onKeyDown:e.onKeyDown.bind(this),onMouseOver:e.onMouseOver.bind(this),onMouseLeave:e.onMouseLeave.bind(this),onClick:e.onClick.bind(this),onScroll:e.onScroll.bind(this)},s=t?\"addEventListener\":\"removeEventListener\";\"manual\"!=this.settings.dropdown.position&&(document[s](\"scroll\",i.position,!0),window[s](\"resize\",i.position),window[s](\"keydown\",i.onKeyDown)),this.DOM.dropdown[s](\"mouseover\",i.onMouseOver),this.DOM.dropdown[s](\"mouseleave\",i.onMouseLeave),this.DOM.dropdown[s](\"mousedown\",i.onClick),this.DOM.dropdown.content[s](\"scroll\",i.onScroll)},callbacks:{onKeyDown(t){if(this.state.hasFocus&&!this.state.composing){var e=this.DOM.dropdown.querySelector(this.settings.classNames.dropdownItemActiveSelector),i=this.dropdown.getSuggestionDataByNode(e);switch(t.key){case\"ArrowDown\":case\"ArrowUp\":case\"Down\":case\"Up\":t.preventDefault();var s=this.dropdown.getAllSuggestionsRefs(),a=\"ArrowUp\"==t.key||\"Up\"==t.key;e&&(e=this.dropdown.getNextOrPrevOption(e,!a)),e&&e.matches(this.settings.classNames.dropdownItemSelector)||(e=s[a?s.length-1:0]),this.dropdown.highlightOption(e,!0);break;case\"Escape\":case\"Esc\":this.dropdown.hide();break;case\"ArrowRight\":if(this.state.actions.ArrowLeft)return;case\"Tab\":if(\"mix\"!=this.settings.mode&&e&&!this.settings.autoComplete.rightKey&&!this.state.editing){t.preventDefault();var n=this.dropdown.getMappedValue(i);return this.input.autocomplete.set.call(this,n),!1}return!0;case\"Enter\":t.preventDefault(),this.settings.hooks.suggestionClick(t,{tagify:this,tagData:i,suggestionElm:e}).then((()=>{if(e)return this.dropdown.selectOption(e),e=this.dropdown.getNextOrPrevOption(e,!a),void this.dropdown.highlightOption(e);this.dropdown.hide(),\"mix\"!=this.settings.mode&&this.addTags(this.state.inputText.trim(),!0)})).catch((t=>t));break;case\"Backspace\":{if(\"mix\"==this.settings.mode||this.state.editing.scope)return;const t=this.input.raw.call(this);\"\"!=t&&8203!=t.charCodeAt(0)||(!0===this.settings.backspace?this.removeTags():\"edit\"==this.settings.backspace&&setTimeout(this.editTag.bind(this),0))}}}},onMouseOver(t){var e=t.target.closest(this.settings.classNames.dropdownItemSelector);e&&this.dropdown.highlightOption(e)},onMouseLeave(t){this.dropdown.highlightOption()},onClick(t){if(0==t.button&&t.target!=this.DOM.dropdown&&t.target!=this.DOM.dropdown.content){var e=t.target.closest(this.settings.classNames.dropdownItemSelector),i=this.dropdown.getSuggestionDataByNode(e);this.state.actions.selectOption=!0,setTimeout((()=>this.state.actions.selectOption=!1),50),this.settings.hooks.suggestionClick(t,{tagify:this,tagData:i,suggestionElm:e}).then((()=>{e?this.dropdown.selectOption(e,t):this.dropdown.hide()})).catch((t=>console.warn(t)))}},onScroll(t){var e=t.target,i=e.scrollTop/(e.scrollHeight-e.parentNode.clientHeight)*100;this.trigger(\"dropdown:scroll\",{percentage:Math.round(i)})}}},getSuggestionDataByNode(t){var e=t&&t.getAttribute(\"value\");return this.suggestedListItems.find((t=>t.value==e))||null},getNextOrPrevOption(t){let e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];var i=this.dropdown.getAllSuggestionsRefs(),s=i.findIndex((e=>e===t));return e?i[s+1]:i[s-1]},highlightOption(t,e){var i,s=this.settings.classNames.dropdownItemActive;if(this.state.ddItemElm&&(this.state.ddItemElm.classList.remove(s),this.state.ddItemElm.removeAttribute(\"aria-selected\")),!t)return this.state.ddItemData=null,this.state.ddItemElm=null,void this.input.autocomplete.suggest.call(this);i=this.dropdown.getSuggestionDataByNode(t),this.state.ddItemData=i,this.state.ddItemElm=t,t.classList.add(s),t.setAttribute(\"aria-selected\",!0),e&&(t.parentNode.scrollTop=t.clientHeight+t.offsetTop-t.parentNode.clientHeight),this.settings.autoComplete&&(this.input.autocomplete.suggest.call(this,i),this.dropdown.position())},selectOption(t,e){var i=this.settings.dropdown,s=i.clearOnSelect,a=i.closeOnSelect;if(!t)return this.addTags(this.state.inputText,!0),void(a&&this.dropdown.hide());e=e||{};var n=t.getAttribute(\"value\"),o=\"noMatch\"==n,r=this.suggestedListItems.find((t=>(t.value??t)==n));this.trigger(\"dropdown:select\",{data:r,elm:t,event:e}),n&&(r||o)?(this.state.editing?this.onEditTagDone(null,p({__isValid:!0},this.normalizeTags([r])[0])):this[\"mix\"==this.settings.mode?\"addMixTags\":\"addTags\"]([r||this.input.raw.call(this)],s),this.DOM.input.parentNode&&(setTimeout((()=>{this.DOM.input.focus(),this.toggleFocusClass(!0)})),a&&setTimeout(this.dropdown.hide.bind(this)),t.addEventListener(\"transitionend\",(()=>{this.dropdown.fillHeaderFooter(),setTimeout((()=>t.remove()),100)}),{once:!0}),t.classList.add(this.settings.classNames.dropdownItemHidden))):a&&setTimeout(this.dropdown.hide.bind(this))},selectAll(t){this.suggestedListItems.length=0,this.dropdown.hide(),this.dropdown.filterListItems(\"\");var e=this.dropdown.filterListItems(\"\");return t||(e=this.state.dropdown.suggestions),this.addTags(e,!0),this},filterListItems(t,e){var i,s,a,n,o,r=this.settings,l=r.dropdown,d=(e=e||{},[]),h=[],p=r.whitelist,c=l.maxItems>=0?l.maxItems:1/0,m=l.searchKeys,v=0;if(!(t=\"select\"==r.mode&&this.value.length&&this.value[0][r.tagTextProp]==t?\"\":t)||!m.length)return d=l.includeSelectedTags?p:p.filter((t=>!this.isTagDuplicate(g(t)?t.value:t))),this.state.dropdown.suggestions=d,d.slice(0,c);function f(t,e){return e.toLowerCase().split(\" \").every((e=>t.includes(e.toLowerCase())))}for(o=l.caseSensitive?\"\"+t:(\"\"+t).toLowerCase();v<p.length;v++){let t,r;i=p[v]instanceof Object?p[v]:{value:p[v]};let c=!Object.keys(i).some((t=>m.includes(t)))?[\"value\"]:m;l.fuzzySearch&&!e.exact?(a=c.reduce(((t,e)=>t+\" \"+(i[e]||\"\")),\"\").toLowerCase().trim(),l.accentedSearch&&(a=u(a),o=u(o)),t=0==a.indexOf(o),r=a===o,s=f(a,o)):(t=!0,s=c.some((t=>{var s=\"\"+(i[t]||\"\");return l.accentedSearch&&(s=u(s),o=u(o)),l.caseSensitive||(s=s.toLowerCase()),r=s===o,e.exact?s===o:0==s.indexOf(o)}))),n=!l.includeSelectedTags&&this.isTagDuplicate(g(i)?i.value:i),s&&!n&&(r&&t?h.push(i):\"startsWith\"==l.sortby&&t?d.unshift(i):d.push(i))}return this.state.dropdown.suggestions=h.concat(d),\"function\"==typeof l.sortby?l.sortby(h.concat(d),o):h.concat(d).slice(0,c)},getMappedValue(t){var e=this.settings.dropdown.mapValueTo;return e?\"function\"==typeof e?e(t):t[e]||t.value:t.value},createListHTML(t){return p([],t).map(((t,i)=>{\"string\"!=typeof t&&\"number\"!=typeof t||(t={value:t});var s=this.dropdown.getMappedValue(t);return s=\"string\"==typeof s?h(s):s,this.settings.templates.dropdownItem.apply(this,[e(e({},t),{},{mappedValue:s}),this])})).join(\"\")}};const M=\"@yaireo/tagify/\";var I,N={empty:\"empty\",exceed:\"number of tags exceeded\",pattern:\"pattern mismatch\",duplicate:\"already exists\",notAllowed:\"not allowed\"},S={wrapper:(t,e)=>`<tags class=\"${e.classNames.namespace} ${e.mode?`${e.classNames[e.mode+\"Mode\"]}`:\"\"} ${t.className}\"\\n                    ${e.readonly?\"readonly\":\"\"}\\n                    ${e.disabled?\"disabled\":\"\"}\\n                    ${e.required?\"required\":\"\"}\\n                    ${\"select\"===e.mode?\"spellcheck='false'\":\"\"}\\n                    tabIndex=\"-1\">\\n            <span ${!e.readonly&&e.userInput?\"contenteditable\":\"\"} tabIndex=\"0\" data-placeholder=\"${e.placeholder||\"&#8203;\"}\" aria-placeholder=\"${e.placeholder||\"\"}\"\\n                class=\"${e.classNames.input}\"\\n                role=\"textbox\"\\n                aria-autocomplete=\"both\"\\n                aria-multiline=\"${\"mix\"==e.mode}\"></span>\\n                &#8203;\\n        </tags>`,tag(t,e){let i=e.settings;return`<tag title=\"${t.title||t.value}\"\\n                    contenteditable='false'\\n                    spellcheck='false'\\n                    tabIndex=\"${i.a11y.focusableTags?0:-1}\"\\n                    class=\"${i.classNames.tag} ${t.class||\"\"}\"\\n                    ${this.getAttributes(t)}>\\n            <x title='' class=\"${i.classNames.tagX}\" role='button' aria-label='remove tag'></x>\\n            <div>\\n                <span class=\"${i.classNames.tagText}\">${t[i.tagTextProp]||t.value}</span>\\n            </div>\\n        </tag>`},dropdown(t){var e=t.dropdown,i=\"manual\"==e.position,s=`${t.classNames.dropdown}`;return`<div class=\"${i?\"\":s} ${e.classname}\" role=\"listbox\" aria-labelledby=\"dropdown\">\\n                    <div data-selector='tagify-suggestions-wrapper' class=\"${t.classNames.dropdownWrapper}\"></div>\\n                </div>`},dropdownContent(t){var e=this.settings,i=this.state.dropdown.suggestions;return`\\n            ${e.templates.dropdownHeader.call(this,i)}\\n            ${t}\\n            ${e.templates.dropdownFooter.call(this,i)}\\n        `},dropdownItem(t){return`<div ${this.getAttributes(t)}\\n                    class='${this.settings.classNames.dropdownItem} ${t.class?t.class:\"\"}'\\n                    tabindex=\"0\"\\n                    role=\"option\">${t.mappedValue||t.value}</div>`},dropdownHeader(t){return`<header data-selector='tagify-suggestions-header' class=\"${this.settings.classNames.dropdownHeader}\"></header>`},dropdownFooter(t){var e=t.length-this.settings.dropdown.maxItems;return e>0?`<footer data-selector='tagify-suggestions-footer' class=\"${this.settings.classNames.dropdownFooter}\">\\n                ${e} more items. Refine your search.\\n            </footer>`:\"\"},dropdownItemNoMatch:null};var E={customBinding(){this.customEventsList.forEach((t=>{this.on(t,this.settings.callbacks[t])}))},binding(){let t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];var e,i=this.events.callbacks,s=t?\"addEventListener\":\"removeEventListener\";if(!this.state.mainEvents||!t){for(var a in this.state.mainEvents=t,t&&!this.listeners.main&&(this.events.bindGlobal.call(this),this.settings.isJQueryPlugin&&jQuery(this.DOM.originalInput).on(\"tagify.removeAllTags\",this.removeAllTags.bind(this))),e=this.listeners.main=this.listeners.main||{focus:[\"input\",i.onFocusBlur.bind(this)],keydown:[\"input\",i.onKeydown.bind(this)],click:[\"scope\",i.onClickScope.bind(this)],dblclick:[\"scope\",i.onDoubleClickScope.bind(this)],paste:[\"input\",i.onPaste.bind(this)],drop:[\"input\",i.onDrop.bind(this)],compositionstart:[\"input\",i.onCompositionStart.bind(this)],compositionend:[\"input\",i.onCompositionEnd.bind(this)]})this.DOM[e[a][0]][s](a,e[a][1]);clearInterval(this.listeners.main.originalInputValueObserverInterval),this.listeners.main.originalInputValueObserverInterval=setInterval(i.observeOriginalInputValue.bind(this),500);var n=this.listeners.main.inputMutationObserver||new MutationObserver(i.onInputDOMChange.bind(this));n.disconnect(),\"mix\"==this.settings.mode&&n.observe(this.DOM.input,{childList:!0})}},bindGlobal(t){var e,i=this.events.callbacks,s=t?\"removeEventListener\":\"addEventListener\";if(this.listeners&&(t||!this.listeners.global))for(e of(this.listeners.global=this.listeners.global||[{type:this.isIE?\"keydown\":\"input\",target:this.DOM.input,cb:i[this.isIE?\"onInputIE\":\"onInput\"].bind(this)},{type:\"keydown\",target:window,cb:i.onWindowKeyDown.bind(this)},{type:\"blur\",target:this.DOM.input,cb:i.onFocusBlur.bind(this)},{type:\"click\",target:document,cb:i.onClickAnywhere.bind(this)}],this.listeners.global))e.target[s](e.type,e.cb)},unbindGlobal(){this.events.bindGlobal.call(this,!0)},callbacks:{onFocusBlur(t){var e=this.settings,i=t.target?this.trim(t.target.textContent):\"\",s=this.value?.[0]?.[e.tagTextProp],a=t.type,n=e.dropdown.enabled>=0,o={relatedTarget:t.relatedTarget},r=this.state.actions.selectOption&&(n||!e.dropdown.closeOnSelect),l=this.state.actions.addNew&&n,d=t.relatedTarget&&f.call(this,t.relatedTarget)&&this.DOM.scope.contains(t.relatedTarget);if(\"blur\"==a){if(t.relatedTarget===this.DOM.scope)return this.dropdown.hide(),void this.DOM.input.focus();this.postUpdate(),e.onChangeAfterBlur&&this.triggerChangeEvent()}if(!r&&!l)if(this.state.hasFocus=\"focus\"==a&&+new Date,this.toggleFocusClass(this.state.hasFocus),\"mix\"!=e.mode){if(\"focus\"==a)return this.trigger(\"focus\",o),void(0!==e.dropdown.enabled&&e.userInput||this.dropdown.show(this.value.length?\"\":void 0));\"blur\"==a&&(this.trigger(\"blur\",o),this.loading(!1),\"select\"==e.mode&&(d&&(this.removeTags(),i=\"\"),s===i&&(i=\"\")),i&&!this.state.actions.selectOption&&e.addTagOnBlur&&this.addTags(i,!0)),this.DOM.input.removeAttribute(\"style\"),this.dropdown.hide()}else\"focus\"==a?this.trigger(\"focus\",o):\"blur\"==t.type&&(this.trigger(\"blur\",o),this.loading(!1),this.dropdown.hide(),this.state.dropdown.visible=void 0,this.setStateSelection())},onCompositionStart(t){this.state.composing=!0},onCompositionEnd(t){this.state.composing=!1},onWindowKeyDown(t){var e,i=document.activeElement,s=f.call(this,i)&&this.DOM.scope.contains(document.activeElement),a=s&&i.hasAttribute(\"readonly\");if(s&&!a)switch(e=i.nextElementSibling,t.key){case\"Backspace\":this.settings.readonly||(this.removeTags(i),(e||this.DOM.input).focus());break;case\"Enter\":setTimeout(this.editTag.bind(this),0,i)}},onKeydown(t){var e=this.settings;if(!this.state.composing&&e.userInput){\"select\"==e.mode&&e.enforceWhitelist&&this.value.length&&\"Tab\"!=t.key&&t.preventDefault();var i=this.trim(t.target.textContent);if(this.trigger(\"keydown\",{event:t}),\"mix\"==e.mode){switch(t.key){case\"Left\":case\"ArrowLeft\":this.state.actions.ArrowLeft=!0;break;case\"Delete\":case\"Backspace\":if(this.state.editing)return;var s=document.getSelection(),a=\"Delete\"==t.key&&s.anchorOffset==(s.anchorNode.length||0),n=s.anchorNode.previousSibling,o=1==s.anchorNode.nodeType||!s.anchorOffset&&n&&1==n.nodeType&&s.anchorNode.previousSibling;r(this.DOM.input.innerHTML);var l,h,g,p=this.getTagElms(),c=1===s.anchorNode.length&&s.anchorNode.nodeValue==String.fromCharCode(8203);if(\"edit\"==e.backspace&&o)return l=1==s.anchorNode.nodeType?null:s.anchorNode.previousElementSibling,setTimeout(this.editTag.bind(this),0,l),void t.preventDefault();if(m()&&o instanceof Element)return g=d(o),o.hasAttribute(\"readonly\")||o.remove(),this.DOM.input.focus(),void setTimeout((()=>{b(g),this.DOM.input.click()}));if(\"BR\"==s.anchorNode.nodeName)return;if((a||o)&&1==s.anchorNode.nodeType?h=0==s.anchorOffset?a?p[0]:null:p[Math.min(p.length,s.anchorOffset)-1]:a?h=s.anchorNode.nextElementSibling:o instanceof Element&&(h=o),3==s.anchorNode.nodeType&&!s.anchorNode.nodeValue&&s.anchorNode.previousElementSibling&&t.preventDefault(),(o||a)&&!e.backspace)return void t.preventDefault();if(\"Range\"!=s.type&&!s.anchorOffset&&s.anchorNode==this.DOM.input&&\"Delete\"!=t.key)return void t.preventDefault();if(\"Range\"!=s.type&&h&&h.hasAttribute(\"readonly\"))return void b(d(h));\"Delete\"==t.key&&c&&w(s.anchorNode.nextSibling)&&this.removeTags(s.anchorNode.nextSibling),clearTimeout(I),I=setTimeout((()=>{var t=document.getSelection();r(this.DOM.input.innerHTML),!a&&t.anchorNode.previousSibling,this.value=[].map.call(p,((t,e)=>{var i=w(t);if(t.parentNode||i.readonly)return i;this.trigger(\"remove\",{tag:t,index:e,data:i})})).filter((t=>t))}),20)}return!0}switch(t.key){case\"Backspace\":\"select\"==e.mode&&e.enforceWhitelist&&this.value.length?this.removeTags():this.state.dropdown.visible&&\"manual\"!=e.dropdown.position||\"\"!=t.target.textContent&&8203!=i.charCodeAt(0)||(!0===e.backspace?this.removeTags():\"edit\"==e.backspace&&setTimeout(this.editTag.bind(this),0));break;case\"Esc\":case\"Escape\":if(this.state.dropdown.visible)return;t.target.blur();break;case\"Down\":case\"ArrowDown\":this.state.dropdown.visible||this.dropdown.show();break;case\"ArrowRight\":{let t=this.state.inputSuggestion||this.state.ddItemData;if(t&&e.autoComplete.rightKey)return void this.addTags([t],!0);break}case\"Tab\":{let s=\"select\"==e.mode;if(!i||s)return!0;t.preventDefault()}case\"Enter\":if(this.state.dropdown.visible&&\"manual\"!=e.dropdown.position)return;t.preventDefault(),setTimeout((()=>{this.state.dropdown.visible||this.state.actions.selectOption||this.addTags(i,!0)}))}}},onInput(t){this.postUpdate();var e=this.settings;if(\"mix\"==e.mode)return this.events.callbacks.onMixTagsInput.call(this,t);var i=this.input.normalize.call(this),s=i.length>=e.dropdown.enabled,a={value:i,inputElm:this.DOM.input},n=this.validateTag({value:i});\"select\"==e.mode&&this.toggleScopeValidation(n),a.isValid=n,this.state.inputText!=i&&(this.input.set.call(this,i,!1),-1!=i.search(e.delimiters)?this.addTags(i)&&this.input.set.call(this):e.dropdown.enabled>=0&&this.dropdown[s?\"show\":\"hide\"](i),this.trigger(\"input\",a))},onMixTagsInput(t){var e,i,s,a,n,o,r,l,d=this.settings,h=this.value.length,g=this.getTagElms(),c=document.createDocumentFragment(),u=window.getSelection().getRangeAt(0),v=[].map.call(g,(t=>w(t).value));if(\"deleteContentBackward\"==t.inputType&&m()&&this.events.callbacks.onKeydown.call(this,{target:t.target,key:\"Backspace\"}),y(this.getTagElms()),this.value.slice().forEach((t=>{t.readonly&&!v.includes(t.value)&&c.appendChild(this.createTagElem(t))})),c.childNodes.length&&(u.insertNode(c),this.setRangeAtStartEnd(!1,c.lastChild)),g.length!=h)return this.value=[].map.call(this.getTagElms(),(t=>w(t))),void this.update({withoutChangeEvent:!0});if(this.hasMaxTags())return!0;if(window.getSelection&&(o=window.getSelection()).rangeCount>0&&3==o.anchorNode.nodeType){if((u=o.getRangeAt(0).cloneRange()).collapse(!0),u.setStart(o.focusNode,0),s=(e=u.toString().slice(0,u.endOffset)).split(d.pattern).length-1,(i=e.match(d.pattern))&&(a=e.slice(e.lastIndexOf(i[i.length-1]))),a){if(this.state.actions.ArrowLeft=!1,this.state.tag={prefix:a.match(d.pattern)[0],value:a.replace(d.pattern,\"\")},this.state.tag.baseOffset=o.baseOffset-this.state.tag.value.length,l=this.state.tag.value.match(d.delimiters))return this.state.tag.value=this.state.tag.value.replace(d.delimiters,\"\"),this.state.tag.delimiters=l[0],this.addTags(this.state.tag.value,d.dropdown.clearOnSelect),void this.dropdown.hide();n=this.state.tag.value.length>=d.dropdown.enabled;try{r=(r=this.state.flaggedTags[this.state.tag.baseOffset]).prefix==this.state.tag.prefix&&r.value[0]==this.state.tag.value[0],this.state.flaggedTags[this.state.tag.baseOffset]&&!this.state.tag.value&&delete this.state.flaggedTags[this.state.tag.baseOffset]}catch(t){}(r||s<this.state.mixMode.matchedPatternCount)&&(n=!1)}else this.state.flaggedTags={};this.state.mixMode.matchedPatternCount=s}setTimeout((()=>{this.update({withoutChangeEvent:!0}),this.trigger(\"input\",p({},this.state.tag,{textContent:this.DOM.input.textContent})),this.state.tag&&this.dropdown[n?\"show\":\"hide\"](this.state.tag.value)}),10)},onInputIE(t){var e=this;setTimeout((function(){e.events.callbacks.onInput.call(e,t)}))},observeOriginalInputValue(){this.DOM.originalInput.parentNode||this.destroy(),this.DOM.originalInput.value!=this.DOM.originalInput.tagifyValue&&this.loadOriginalValues()},onClickAnywhere(t){t.target==this.DOM.scope||this.DOM.scope.contains(t.target)||(this.toggleFocusClass(!1),this.state.hasFocus=!1)},onClickScope(t){var e=this.settings,i=t.target.closest(\".\"+e.classNames.tag),s=+new Date-this.state.hasFocus;if(t.target!=this.DOM.scope){if(!t.target.classList.contains(e.classNames.tagX))return i?(this.trigger(\"click\",{tag:i,index:this.getNodeIndex(i),data:w(i),event:t}),void(1!==e.editTags&&1!==e.editTags.clicks||this.events.callbacks.onDoubleClickScope.call(this,t))):void(t.target==this.DOM.input&&(\"mix\"==e.mode&&this.fixFirefoxLastTagNoCaret(),s>500)?this.state.dropdown.visible?this.dropdown.hide():0===e.dropdown.enabled&&\"mix\"!=e.mode&&this.dropdown.show(this.value.length?\"\":void 0):\"select\"!=e.mode||0!==e.dropdown.enabled||this.state.dropdown.visible||this.dropdown.show());this.removeTags(t.target.parentNode)}else this.DOM.input.focus()},onPaste(t){t.preventDefault();var e,i,s=this.settings;if(\"select\"==s.mode&&s.enforceWhitelist||!s.userInput)return!1;s.readonly||(e=t.clipboardData||window.clipboardData,i=e.getData(\"Text\"),s.hooks.beforePaste(t,{tagify:this,pastedText:i,clipboardData:e}).then((e=>{void 0===e&&(e=i),e&&(this.injectAtCaret(e,window.getSelection().getRangeAt(0)),\"mix\"==this.settings.mode?this.events.callbacks.onMixTagsInput.call(this,t):this.settings.pasteAsTags?this.addTags(this.state.inputText+e,!0):this.state.inputText=e)})).catch((t=>t)))},onDrop(t){t.preventDefault()},onEditTagInput(t,e){var i=t.closest(\".\"+this.settings.classNames.tag),s=this.getNodeIndex(i),a=w(i),n=this.input.normalize.call(this,t),o={[this.settings.tagTextProp]:n,__tagId:a.__tagId},r=this.validateTag(o);this.editTagChangeDetected(p(a,o))||!0!==t.originalIsValid||(r=!0),i.classList.toggle(this.settings.classNames.tagInvalid,!0!==r),a.__isValid=r,i.title=!0===r?a.title||a.value:r,n.length>=this.settings.dropdown.enabled&&(this.state.editing&&(this.state.editing.value=n),this.dropdown.show(n)),this.trigger(\"edit:input\",{tag:i,index:s,data:p({},this.value[s],{newValue:n}),event:e})},onEditTagPaste(t,e){var i=(e.clipboardData||window.clipboardData).getData(\"Text\");e.preventDefault();var s=T(i);this.setRangeAtStartEnd(!1,s)},onEditTagFocus(t){this.state.editing={scope:t,input:t.querySelector(\"[contenteditable]\")}},onEditTagBlur(t){if(this.state.hasFocus||this.toggleFocusClass(),this.DOM.scope.contains(t)){var e,i,s=this.settings,a=t.closest(\".\"+s.classNames.tag),n=w(a),o=this.input.normalize.call(this,t),r={[s.tagTextProp]:o,__tagId:n.__tagId},l=n.__originalData,d=this.editTagChangeDetected(p(n,r)),h=this.validateTag(r);if(o)if(d){if(e=this.hasMaxTags(),i=p({},l,{[s.tagTextProp]:this.trim(o),__isValid:h}),s.transformTag.call(this,i,l),!0!==(h=(!e||!0===l.__isValid)&&this.validateTag(i))){if(this.trigger(\"invalid\",{data:i,tag:a,message:h}),s.editTags.keepInvalid)return;s.keepInvalidTags?i.__isValid=h:i=l}else s.keepInvalidTags&&(delete i.title,delete i[\"aria-invalid\"],delete i.class);this.onEditTagDone(a,i)}else this.onEditTagDone(a,l);else this.onEditTagDone(a)}},onEditTagkeydown(t,e){if(!this.state.composing)switch(this.trigger(\"edit:keydown\",{event:t}),t.key){case\"Esc\":case\"Escape\":e.parentNode.replaceChild(e.__tagifyTagData.__originalHTML,e),this.state.editing=!1;case\"Enter\":case\"Tab\":t.preventDefault(),t.target.blur()}},onDoubleClickScope(t){var e,i,s=t.target.closest(\".\"+this.settings.classNames.tag),a=w(s),n=this.settings;s&&n.userInput&&!1!==a.editable&&(e=s.classList.contains(this.settings.classNames.tagEditing),i=s.hasAttribute(\"readonly\"),\"select\"==n.mode||n.readonly||e||i||!this.settings.editTags||this.editTag(s),this.toggleFocusClass(!0),this.trigger(\"dblclick\",{tag:s,index:this.getNodeIndex(s),data:w(s)}))},onInputDOMChange(t){t.forEach((t=>{t.addedNodes.forEach((t=>{if(\"<div><br></div>\"==t.outerHTML)t.replaceWith(document.createElement(\"br\"));else if(1==t.nodeType&&t.querySelector(this.settings.classNames.tagSelector)){let e=document.createTextNode(\"\");3==t.childNodes[0].nodeType&&\"BR\"!=t.previousSibling.nodeName&&(e=document.createTextNode(\"\\n\")),t.replaceWith(e,...[...t.childNodes].slice(0,-1)),b(e)}else if(f.call(this,t))if(3!=t.previousSibling?.nodeType||t.previousSibling.textContent||t.previousSibling.remove(),t.previousSibling&&\"BR\"==t.previousSibling.nodeName){t.previousSibling.replaceWith(\"\\n\"+s);let e=t.nextSibling,i=\"\";for(;e;)i+=e.textContent,e=e.nextSibling;i.trim()&&b(t.previousSibling)}else t.previousSibling&&!w(t.previousSibling)||t.before(s)})),t.removedNodes.forEach((t=>{t&&\"BR\"==t.nodeName&&f.call(this,e)&&(this.removeTags(e),this.fixFirefoxLastTagNoCaret())}))}));var e=this.DOM.input.lastChild;e&&\"\"==e.nodeValue&&e.remove(),e&&\"BR\"==e.nodeName||this.DOM.input.appendChild(document.createElement(\"br\"))}}};function _(t,e){if(!t){console.warn(\"Tagify:\",\"input element not found\",t);const e=new Proxy(this,{get:()=>()=>e});return e}if(t.__tagify)return console.warn(\"Tagify: \",\"input element is already Tagified - Same instance is returned.\",t),t.__tagify;var i;p(this,function(t){var e=document.createTextNode(\"\");function i(t,i,s){s&&i.split(/\\s+/g).forEach((i=>e[t+\"EventListener\"].call(e,i,s)))}return{off(t,e){return i(\"remove\",t,e),this},on(t,e){return e&&\"function\"==typeof e&&i(\"add\",t,e),this},trigger(i,s,a){var n;if(a=a||{cloneData:!0},i)if(t.settings.isJQueryPlugin)\"remove\"==i&&(i=\"removeTag\"),jQuery(t.DOM.originalInput).triggerHandler(i,[s]);else{try{var o=\"object\"==typeof s?s:{value:s};if((o=a.cloneData?p({},o):o).tagify=this,s.event&&(o.event=this.cloneEvent(s.event)),s instanceof Object)for(var r in s)s[r]instanceof HTMLElement&&(o[r]=s[r]);n=new CustomEvent(i,{detail:o})}catch(t){console.warn(t)}e.dispatchEvent(n)}}}}(this)),this.isFirefox=/firefox|fxios/i.test(navigator.userAgent)&&!/seamonkey/i.test(navigator.userAgent),this.isIE=window.document.documentMode,e=e||{},this.getPersistedData=(i=e.id,t=>{let e,s=\"/\"+t;if(1==localStorage.getItem(M+i+\"/v\",1))try{e=JSON.parse(localStorage[M+i+s])}catch(t){}return e}),this.setPersistedData=(t=>t?(localStorage.setItem(M+t+\"/v\",1),(e,i)=>{let s=\"/\"+i,a=JSON.stringify(e);e&&i&&(localStorage.setItem(M+t+s,a),dispatchEvent(new Event(\"storage\")))}):()=>{})(e.id),this.clearPersistedData=(t=>e=>{const i=M+\"/\"+t+\"/\";if(e)localStorage.removeItem(i+e);else for(let t in localStorage)t.includes(i)&&localStorage.removeItem(t)})(e.id),this.applySettings(t,e),this.state={inputText:\"\",editing:!1,composing:!1,actions:{},mixMode:{},dropdown:{},flaggedTags:{}},this.value=[],this.listeners={},this.DOM={},this.build(t),O.call(this),this.getCSSVars(),this.loadOriginalValues(),this.events.customBinding.call(this),this.events.binding.call(this),t.autofocus&&this.DOM.input.focus(),t.__tagify=this}return _.prototype={_dropdown:D,getSetTagData:w,helpers:{sameStr:a,removeCollectionProp:n,omit:o,isObject:g,parseHTML:l,escapeHTML:h,extend:p,concatWithoutDups:c,getUID:v,isNodeTag:f},customEventsList:[\"change\",\"add\",\"remove\",\"invalid\",\"input\",\"click\",\"keydown\",\"focus\",\"blur\",\"edit:input\",\"edit:beforeUpdate\",\"edit:updated\",\"edit:start\",\"edit:keydown\",\"dropdown:show\",\"dropdown:hide\",\"dropdown:select\",\"dropdown:updated\",\"dropdown:noMatch\",\"dropdown:scroll\"],dataProps:[\"__isValid\",\"__removed\",\"__originalData\",\"__originalHTML\",\"__tagId\"],trim(t){return this.settings.trim&&t&&\"string\"==typeof t?t.trim():t},parseHTML:l,templates:S,parseTemplate(t,e){return l((t=this.settings.templates[t]||t).apply(this,e))},set whitelist(t){const e=t&&Array.isArray(t);this.settings.whitelist=e?t:[],this.setPersistedData(e?t:[],\"whitelist\")},get whitelist(){return this.settings.whitelist},generateClassSelectors(t){for(let e in t){let i=e;Object.defineProperty(t,i+\"Selector\",{get(){return\".\"+this[i].split(\" \")[0]}})}},applySettings(t,i){x.templates=this.templates;var s=p({},x,\"mix\"==i.mode?{dropdown:{position:\"text\"}}:{}),a=this.settings=p({},s,i);if(a.disabled=t.hasAttribute(\"disabled\"),a.readonly=a.readonly||t.hasAttribute(\"readonly\"),a.placeholder=h(t.getAttribute(\"placeholder\")||a.placeholder||\"\"),a.required=t.hasAttribute(\"required\"),this.generateClassSelectors(a.classNames),void 0===a.dropdown.includeSelectedTags&&(a.dropdown.includeSelectedTags=a.duplicates),this.isIE&&(a.autoComplete=!1),[\"whitelist\",\"blacklist\"].forEach((e=>{var i=t.getAttribute(\"data-\"+e);i&&(i=i.split(a.delimiters))instanceof Array&&(a[e]=i)})),\"autoComplete\"in i&&!g(i.autoComplete)&&(a.autoComplete=x.autoComplete,a.autoComplete.enabled=i.autoComplete),\"mix\"==a.mode&&(a.pattern=a.pattern||/@/,a.autoComplete.rightKey=!0,a.delimiters=i.delimiters||null,a.tagTextProp&&!a.dropdown.searchKeys.includes(a.tagTextProp)&&a.dropdown.searchKeys.push(a.tagTextProp)),t.pattern)try{a.pattern=new RegExp(t.pattern)}catch(t){}if(a.delimiters){a._delimiters=a.delimiters;try{a.delimiters=new RegExp(this.settings.delimiters,\"g\")}catch(t){}}a.disabled&&(a.userInput=!1),this.TEXTS=e(e({},N),a.texts||{}),(\"select\"!=a.mode||i.dropdown?.enabled)&&a.userInput||(a.dropdown.enabled=0),a.dropdown.appendTarget=i.dropdown?.appendTarget||document.body;let n=this.getPersistedData(\"whitelist\");Array.isArray(n)&&(this.whitelist=Array.isArray(a.whitelist)?c(a.whitelist,n):n)},getAttributes(t){var e,i=this.getCustomAttributes(t),s=\"\";for(e in i)s+=\" \"+e+(void 0!==t[e]?`=\"${i[e]}\"`:\"\");return s},getCustomAttributes(t){if(!g(t))return\"\";var e,i={};for(e in t)\"__\"!=e.slice(0,2)&&\"class\"!=e&&t.hasOwnProperty(e)&&void 0!==t[e]&&(i[e]=h(t[e]));return i},setStateSelection(){var t=window.getSelection(),e={anchorOffset:t.anchorOffset,anchorNode:t.anchorNode,range:t.getRangeAt&&t.rangeCount&&t.getRangeAt(0)};return this.state.selection=e,e},getCSSVars(){var t=getComputedStyle(this.DOM.scope,null);var e;this.CSSVars={tagHideTransition:(t=>{let e=t.value;return\"s\"==t.unit?1e3*e:e})(function(t){if(!t)return{};var e=(t=t.trim().split(\" \")[0]).split(/\\d+/g).filter((t=>t)).pop().trim();return{value:+t.split(e).filter((t=>t))[0].trim(),unit:e}}((e=\"tag-hide-transition\",t.getPropertyValue(\"--\"+e))))}},build(t){var e=this.DOM;this.settings.mixMode.integrated?(e.originalInput=null,e.scope=t,e.input=t):(e.originalInput=t,e.originalInput_tabIndex=t.tabIndex,e.scope=this.parseTemplate(\"wrapper\",[t,this.settings]),e.input=e.scope.querySelector(this.settings.classNames.inputSelector),t.parentNode.insertBefore(e.scope,t),t.tabIndex=-1)},destroy(){this.events.unbindGlobal.call(this),this.DOM.scope.parentNode.removeChild(this.DOM.scope),this.DOM.originalInput.tabIndex=this.DOM.originalInput_tabIndex,delete this.DOM.originalInput.__tagify,this.dropdown.hide(!0),clearTimeout(this.dropdownHide__bindEventsTimeout),clearInterval(this.listeners.main.originalInputValueObserverInterval)},loadOriginalValues(t){var e,i=this.settings;if(this.state.blockChangeEvent=!0,void 0===t){const e=this.getPersistedData(\"value\");t=e&&!this.DOM.originalInput.value?e:i.mixMode.integrated?this.DOM.input.textContent:this.DOM.originalInput.value}if(this.removeAllTags(),t)if(\"mix\"==i.mode)this.parseMixTags(t),(e=this.DOM.input.lastChild)&&\"BR\"==e.tagName||this.DOM.input.insertAdjacentHTML(\"beforeend\",\"<br>\");else{try{JSON.parse(t)instanceof Array&&(t=JSON.parse(t))}catch(t){}this.addTags(t,!0).forEach((t=>t&&t.classList.add(i.classNames.tagNoAnimation)))}else this.postUpdate();this.state.lastOriginalValueReported=i.mixMode.integrated?\"\":this.DOM.originalInput.value},cloneEvent(t){var e={};for(var i in t)\"path\"!=i&&(e[i]=t[i]);return e},loading(t){return this.state.isLoading=t,this.DOM.scope.classList[t?\"add\":\"remove\"](this.settings.classNames.scopeLoading),this},tagLoading(t,e){return t&&t.classList[e?\"add\":\"remove\"](this.settings.classNames.tagLoading),this},toggleClass(t,e){\"string\"==typeof t&&this.DOM.scope.classList.toggle(t,e)},toggleScopeValidation(t){var e=!0===t||void 0===t;!this.settings.required&&t&&t===this.TEXTS.empty&&(e=!0),this.toggleClass(this.settings.classNames.tagInvalid,!e),this.DOM.scope.title=e?\"\":t},toggleFocusClass(t){this.toggleClass(this.settings.classNames.focus,!!t)},triggerChangeEvent:function(){if(!this.settings.mixMode.integrated){var t=this.DOM.originalInput,e=this.state.lastOriginalValueReported!==t.value,i=new CustomEvent(\"change\",{bubbles:!0});e&&(this.state.lastOriginalValueReported=t.value,i.simulated=!0,t._valueTracker&&t._valueTracker.setValue(Math.random()),t.dispatchEvent(i),this.trigger(\"change\",this.state.lastOriginalValueReported),t.value=this.state.lastOriginalValueReported)}},events:E,fixFirefoxLastTagNoCaret(){},setRangeAtStartEnd(t,e){if(e){t=\"number\"==typeof t?t:!!t,e=e.lastChild||e;var i=document.getSelection();if(i.focusNode instanceof Element&&!this.DOM.input.contains(i.focusNode))return!0;try{i.rangeCount>=1&&[\"Start\",\"End\"].forEach((s=>i.getRangeAt(0)[\"set\"+s](e,t||e.length)))}catch(t){}}},insertAfterTag(t,e){if(e=e||this.settings.mixMode.insertAfterTag,t&&t.parentNode&&e)return e=\"string\"==typeof e?document.createTextNode(e):e,t.parentNode.insertBefore(e,t.nextSibling),e},editTagChangeDetected(t){var e=t.__originalData;for(var i in e)if(!this.dataProps.includes(i)&&t[i]!=e[i])return!0;return!1},getTagTextNode(t){return t.querySelector(this.settings.classNames.tagTextSelector)},setTagTextNode(t,e){this.getTagTextNode(t).innerHTML=h(e)},editTag(t,e){t=t||this.getLastTag(),e=e||{},this.dropdown.hide();var i=this.settings,s=this.getTagTextNode(t),a=this.getNodeIndex(t),n=w(t),o=this.events.callbacks,r=this,l=!0;if(s){if(!(n instanceof Object&&\"editable\"in n)||n.editable)return n=w(t,{__originalData:p({},n),__originalHTML:t.cloneNode(!0)}),w(n.__originalHTML,n.__originalData),s.setAttribute(\"contenteditable\",!0),t.classList.add(i.classNames.tagEditing),s.addEventListener(\"focus\",o.onEditTagFocus.bind(this,t)),s.addEventListener(\"blur\",(function(){setTimeout((()=>o.onEditTagBlur.call(r,r.getTagTextNode(t))))})),s.addEventListener(\"input\",o.onEditTagInput.bind(this,s)),s.addEventListener(\"paste\",o.onEditTagPaste.bind(this,s)),s.addEventListener(\"keydown\",(e=>o.onEditTagkeydown.call(this,e,t))),s.addEventListener(\"compositionstart\",o.onCompositionStart.bind(this)),s.addEventListener(\"compositionend\",o.onCompositionEnd.bind(this)),e.skipValidation||(l=this.editTagToggleValidity(t)),s.originalIsValid=l,this.trigger(\"edit:start\",{tag:t,index:a,data:n,isValid:l}),s.focus(),this.setRangeAtStartEnd(!1,s),this}else console.warn(\"Cannot find element in Tag template: .\",i.classNames.tagTextSelector)},editTagToggleValidity(t,e){var i;if(e=e||w(t))return(i=!(\"__isValid\"in e)||!0===e.__isValid)||this.removeTagsFromValue(t),this.update(),t.classList.toggle(this.settings.classNames.tagNotAllowed,!i),e.__isValid=i,e.__isValid;console.warn(\"tag has no data: \",t,e)},onEditTagDone(t,e){e=e||{};var i={tag:t=t||this.state.editing.scope,index:this.getNodeIndex(t),previousData:w(t),data:e};this.trigger(\"edit:beforeUpdate\",i,{cloneData:!1}),this.state.editing=!1,delete e.__originalData,delete e.__originalHTML,t&&e[this.settings.tagTextProp]?(t=this.replaceTag(t,e),this.editTagToggleValidity(t,e),this.settings.a11y.focusableTags?t.focus():b(t)):t&&this.removeTags(t),this.trigger(\"edit:updated\",i),this.dropdown.hide(),this.settings.keepInvalidTags&&this.reCheckInvalidTags()},replaceTag(t,e){e&&e.value||(e=t.__tagifyTagData),e.__isValid&&1!=e.__isValid&&p(e,this.getInvalidTagAttrs(e,e.__isValid));var i=this.createTagElem(e);return t.parentNode.replaceChild(i,t),this.updateValueByDOMTags(),i},updateValueByDOMTags(){this.value.length=0,[].forEach.call(this.getTagElms(),(t=>{t.classList.contains(this.settings.classNames.tagNotAllowed.split(\" \")[0])||this.value.push(w(t))})),this.update()},injectAtCaret(t,e){return!(e=e||this.state.selection?.range)&&t?(this.appendMixTags(t),this):(T(t,e),this.setRangeAtStartEnd(!1,t),this.updateValueByDOMTags(),this.update(),this)},input:{set(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"\",e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];var i=this.settings.dropdown.closeOnSelect;this.state.inputText=t,e&&(this.DOM.input.innerHTML=h(\"\"+t)),!t&&i&&this.dropdown.hide.bind(this),this.input.autocomplete.suggest.call(this),this.input.validate.call(this)},raw(){return this.DOM.input.textContent},validate(){var t=!this.state.inputText||!0===this.validateTag({value:this.state.inputText});return this.DOM.input.classList.toggle(this.settings.classNames.inputInvalid,!t),t},normalize(t){var e=t||this.DOM.input,i=[];e.childNodes.forEach((t=>3==t.nodeType&&i.push(t.nodeValue))),i=i.join(\"\\n\");try{i=i.replace(/(?:\\r\\n|\\r|\\n)/g,this.settings.delimiters.source.charAt(0))}catch(t){}return i=i.replace(/\\s/g,\" \"),this.trim(i)},autocomplete:{suggest(t){if(this.settings.autoComplete.enabled){\"string\"==typeof(t=t||{value:\"\"})&&(t={value:t});var e=this.dropdown.getMappedValue(t);if(\"number\"!=typeof e){var i=e.substr(0,this.state.inputText.length).toLowerCase(),s=e.substring(this.state.inputText.length);e&&this.state.inputText&&i==this.state.inputText.toLowerCase()?(this.DOM.input.setAttribute(\"data-suggest\",s),this.state.inputSuggestion=t):(this.DOM.input.removeAttribute(\"data-suggest\"),delete this.state.inputSuggestion)}}},set(t){var e=this.DOM.input.getAttribute(\"data-suggest\"),i=t||(e?this.state.inputText+e:null);return!!i&&(\"mix\"==this.settings.mode?this.replaceTextWithNode(document.createTextNode(this.state.tag.prefix+i)):(this.input.set.call(this,i),this.setRangeAtStartEnd(!1,this.DOM.input)),this.input.autocomplete.suggest.call(this),this.dropdown.hide(),!0)}}},getTagIdx(t){return this.value.findIndex((e=>e.__tagId==(t||{}).__tagId))},getNodeIndex(t){var e=0;if(t)for(;t=t.previousElementSibling;)e++;return e},getTagElms(){for(var t=arguments.length,e=new Array(t),i=0;i<t;i++)e[i]=arguments[i];var s=\".\"+[...this.settings.classNames.tag.split(\" \"),...e].join(\".\");return[].slice.call(this.DOM.scope.querySelectorAll(s))},getLastTag(){var t=this.DOM.scope.querySelectorAll(`${this.settings.classNames.tagSelector}:not(.${this.settings.classNames.tagHide}):not([readonly])`);return t[t.length-1]},isTagDuplicate(t,e,i){var s=0;if(\"select\"==this.settings.mode)return!1;for(let n of this.value){a(this.trim(\"\"+t),n.value,e)&&i!=n.__tagId&&s++}return s},getTagIndexByValue(t){var e=[],i=this.settings.dropdown.caseSensitive;return this.getTagElms().forEach(((s,n)=>{s.__tagifyTagData&&a(this.trim(s.__tagifyTagData.value),t,i)&&e.push(n)})),e},getTagElmByValue(t){var e=this.getTagIndexByValue(t)[0];return this.getTagElms()[e]},flashTag(t){t&&(t.classList.add(this.settings.classNames.tagFlash),setTimeout((()=>{t.classList.remove(this.settings.classNames.tagFlash)}),100))},isTagBlacklisted(t){return t=this.trim(t.toLowerCase()),this.settings.blacklist.filter((e=>(\"\"+e).toLowerCase()==t)).length},isTagWhitelisted(t){return!!this.getWhitelistItem(t)},getWhitelistItem(t,e,i){e=e||\"value\";var s,n=this.settings;return(i=i||n.whitelist).some((i=>{var o=\"string\"==typeof i?i:i[e]||i.value;if(a(o,t,n.dropdown.caseSensitive,n.trim))return s=\"string\"==typeof i?{value:i}:i,!0})),s||\"value\"!=e||\"value\"==n.tagTextProp||(s=this.getWhitelistItem(t,n.tagTextProp,i)),s},validateTag(t){var e=this.settings,i=\"value\"in t?\"value\":e.tagTextProp,s=this.trim(t[i]+\"\");return(t[i]+\"\").trim()?\"mix\"!=e.mode&&e.pattern&&e.pattern instanceof RegExp&&!e.pattern.test(s)?this.TEXTS.pattern:!e.duplicates&&this.isTagDuplicate(s,e.dropdown.caseSensitive,t.__tagId)?this.TEXTS.duplicate:this.isTagBlacklisted(s)||e.enforceWhitelist&&!this.isTagWhitelisted(s)?this.TEXTS.notAllowed:!e.validate||e.validate(t):this.TEXTS.empty},getInvalidTagAttrs(t,e){return{\"aria-invalid\":!0,class:`${t.class||\"\"} ${this.settings.classNames.tagNotAllowed}`.trim(),title:e}},hasMaxTags(){return this.value.length>=this.settings.maxTags&&this.TEXTS.exceed},setReadonly(t,e){var i=this.settings;document.activeElement.blur(),i[e||\"readonly\"]=t,this.DOM.scope[(t?\"set\":\"remove\")+\"Attribute\"](e||\"readonly\",!0),this.settings.userInput=!0,this.setContentEditable(!t)},setContentEditable(t){this.settings.userInput&&(this.DOM.input.contentEditable=t,this.DOM.input.tabIndex=t?0:-1)},setDisabled(t){this.setReadonly(t,\"disabled\")},normalizeTags(t){var e=this.settings,i=e.whitelist,s=e.delimiters,a=e.mode,n=e.tagTextProp,o=[],r=!!i&&i[0]instanceof Object,l=Array.isArray(t),d=l&&t[0].value,h=t=>(t+\"\").split(s).filter((t=>t)).map((t=>({[n]:this.trim(t),value:this.trim(t)})));if(\"number\"==typeof t&&(t=t.toString()),\"string\"==typeof t){if(!t.trim())return[];t=h(t)}else l&&(t=[].concat(...t.map((t=>null!=t.value?t:h(t)))));return r&&!d&&(t.forEach((t=>{var e=o.map((t=>t.value)),i=this.dropdown.filterListItems.call(this,t[n],{exact:!0});this.settings.duplicates||(i=i.filter((t=>!e.includes(t.value))));var s=i.length>1?this.getWhitelistItem(t[n],n,i):i[0];s&&s instanceof Object?o.push(s):\"mix\"!=a&&(null==t.value&&(t.value=t[n]),o.push(t))})),o.length&&(t=o)),t},parseMixTags(t){var e=this.settings,i=e.mixTagsInterpolator,s=e.duplicates,a=e.transformTag,n=e.enforceWhitelist,o=e.maxTags,r=e.tagTextProp,l=[];t=t.split(i[0]).map(((t,e)=>{var d,h,g,p=t.split(i[1]),c=p[0],u=l.length==o;try{if(c==+c)throw Error;h=JSON.parse(c)}catch(t){h=this.normalizeTags(c)[0]||{value:c}}if(a.call(this,h),u||!(p.length>1)||n&&!this.isTagWhitelisted(h.value)||!s&&this.isTagDuplicate(h.value)){if(t)return e?i[0]+t:t}else h[d=h[r]?r:\"value\"]=this.trim(h[d]),g=this.createTagElem(h),l.push(h),g.classList.add(this.settings.classNames.tagNoAnimation),p[0]=g.outerHTML,this.value.push(h);return p.join(\"\")})).join(\"\"),this.DOM.input.innerHTML=t,this.DOM.input.appendChild(document.createTextNode(\"\")),this.DOM.input.normalize();var d=this.getTagElms();return d.forEach(((t,e)=>w(t,l[e]))),this.update({withoutChangeEvent:!0}),y(d,this.state.hasFocus),t},replaceTextWithNode(t,e){if(this.state.tag||e){e=e||this.state.tag.prefix+this.state.tag.value;var i,s,a=this.state.selection||window.getSelection(),n=a.anchorNode,o=this.state.tag.delimiters?this.state.tag.delimiters.length:0;return n.splitText(a.anchorOffset-o),-1==(i=n.nodeValue.lastIndexOf(e))?!0:(s=n.splitText(i),t&&n.parentNode.replaceChild(t,s),!0)}},selectTag(t,e){var i=this.settings;if(!i.enforceWhitelist||this.isTagWhitelisted(e.value)){this.input.set.call(this,e[i.tagTextProp]||e.value,!0),this.state.actions.selectOption&&setTimeout((()=>this.setRangeAtStartEnd(!1,this.DOM.input)));var s=this.getLastTag();return s?this.replaceTag(s,e):this.appendTag(t),this.value[0]=e,this.update(),this.trigger(\"add\",{tag:t,data:e}),[t]}},addEmptyTag(t){var e=p({value:\"\"},t||{}),i=this.createTagElem(e);w(i,e),this.appendTag(i),this.editTag(i,{skipValidation:!0})},addTags(t,e,i){var s=[],a=this.settings,n=[],o=document.createDocumentFragment();if(i=i||a.skipInvalid,!t||0==t.length)return s;switch(t=this.normalizeTags(t),a.mode){case\"mix\":return this.addMixTags(t);case\"select\":e=!1,this.removeAllTags()}return this.DOM.input.removeAttribute(\"style\"),t.forEach((t=>{var e,r={},l=Object.assign({},t,{value:t.value+\"\"});if(t=Object.assign({},l),a.transformTag.call(this,t),t.__isValid=this.hasMaxTags()||this.validateTag(t),!0!==t.__isValid){if(i)return;if(p(r,this.getInvalidTagAttrs(t,t.__isValid),{__preInvalidData:l}),t.__isValid==this.TEXTS.duplicate&&this.flashTag(this.getTagElmByValue(t.value)),!a.createInvalidTags)return void n.push(t.value)}if(\"readonly\"in t&&(t.readonly?r[\"aria-readonly\"]=!0:delete t.readonly),e=this.createTagElem(t,r),s.push(e),\"select\"==a.mode)return this.selectTag(e,t);o.appendChild(e),t.__isValid&&!0===t.__isValid?(this.value.push(t),this.trigger(\"add\",{tag:e,index:this.value.length-1,data:t})):(this.trigger(\"invalid\",{data:t,index:this.value.length,tag:e,message:t.__isValid}),a.keepInvalidTags||setTimeout((()=>this.removeTags(e,!0)),1e3)),this.dropdown.position()})),this.appendTag(o),this.update(),t.length&&e&&(this.input.set.call(this,a.createInvalidTags?\"\":n.join(a._delimiters)),this.setRangeAtStartEnd(!1,this.DOM.input)),a.dropdown.enabled&&this.dropdown.refilter(),s},addMixTags(t){if((t=this.normalizeTags(t))[0].prefix||this.state.tag)return this.prefixedTextToTag(t[0]);var e=document.createDocumentFragment();return t.forEach((t=>{var i=this.createTagElem(t);e.appendChild(i)})),this.appendMixTags(e),e},appendMixTags(t){var e=!!this.state.selection;e?this.injectAtCaret(t):(this.DOM.input.focus(),(e=this.setStateSelection()).range.setStart(this.DOM.input,e.range.endOffset),e.range.setEnd(this.DOM.input,e.range.endOffset),this.DOM.input.appendChild(t),this.updateValueByDOMTags(),this.update())},prefixedTextToTag(t){var e,i=this.settings,s=this.state.tag.delimiters;if(i.transformTag.call(this,t),t.prefix=t.prefix||this.state.tag?this.state.tag.prefix:(i.pattern.source||i.pattern)[0],e=this.createTagElem(t),this.replaceTextWithNode(e)||this.DOM.input.appendChild(e),setTimeout((()=>e.classList.add(this.settings.classNames.tagNoAnimation)),300),this.value.push(t),this.update(),!s){var a=this.insertAfterTag(e)||e;setTimeout(b,0,a)}return this.state.tag=null,this.trigger(\"add\",p({},{tag:e},{data:t})),e},appendTag(t){var e=this.DOM,i=e.input;e.scope.insertBefore(t,i)},createTagElem(t,i){t.__tagId=v();var s,a=p({},t,e({value:h(t.value+\"\")},i));return function(t){for(var e,i=document.createNodeIterator(t,NodeFilter.SHOW_TEXT,null,!1);e=i.nextNode();)e.textContent.trim()||e.parentNode.removeChild(e)}(s=this.parseTemplate(\"tag\",[a,this])),w(s,t),s},reCheckInvalidTags(){var t=this.settings;this.getTagElms(t.classNames.tagNotAllowed).forEach(((e,i)=>{var s=w(e),a=this.hasMaxTags(),n=this.validateTag(s),o=!0===n&&!a;if(\"select\"==t.mode&&this.toggleScopeValidation(n),o)return s=s.__preInvalidData?s.__preInvalidData:{value:s.value},this.replaceTag(e,s);e.title=a||n}))},removeTags(t,e,i){var s,a=this.settings;if(t=t&&t instanceof HTMLElement?[t]:t instanceof Array?t:t?[t]:[this.getLastTag()],s=t.reduce(((t,e)=>{e&&\"string\"==typeof e&&(e=this.getTagElmByValue(e));var i=w(e);return e&&i&&!i.readonly&&t.push({node:e,idx:this.getTagIdx(i),data:w(e,{__removed:!0})}),t}),[]),i=\"number\"==typeof i?i:this.CSSVars.tagHideTransition,\"select\"==a.mode&&(i=0,this.input.set.call(this)),1==s.length&&\"select\"!=a.mode&&s[0].node.classList.contains(a.classNames.tagNotAllowed)&&(e=!0),s.length)return a.hooks.beforeRemoveTag(s,{tagify:this}).then((()=>{function t(t){t.node.parentNode&&(t.node.parentNode.removeChild(t.node),e?a.keepInvalidTags&&this.trigger(\"remove\",{tag:t.node,index:t.idx}):(this.trigger(\"remove\",{tag:t.node,index:t.idx,data:t.data}),this.dropdown.refilter(),this.dropdown.position(),this.DOM.input.normalize(),a.keepInvalidTags&&this.reCheckInvalidTags()))}i&&i>10&&1==s.length?function(e){e.node.style.width=parseFloat(window.getComputedStyle(e.node).width)+\"px\",document.body.clientTop,e.node.classList.add(a.classNames.tagHide),setTimeout(t.bind(this),i,e)}.call(this,s[0]):s.forEach(t.bind(this)),e||(this.removeTagsFromValue(s.map((t=>t.node))),this.update(),\"select\"==a.mode&&this.setContentEditable(!0))})).catch((t=>{}))},removeTagsFromDOM(){[].slice.call(this.getTagElms()).forEach((t=>t.parentNode.removeChild(t)))},removeTagsFromValue(t){(t=Array.isArray(t)?t:[t]).forEach((t=>{var e=w(t),i=this.getTagIdx(e);i>-1&&this.value.splice(i,1)}))},removeAllTags(t){t=t||{},this.value=[],\"mix\"==this.settings.mode?this.DOM.input.innerHTML=\"\":this.removeTagsFromDOM(),this.dropdown.refilter(),this.dropdown.position(),this.state.dropdown.visible&&setTimeout((()=>{this.DOM.input.focus()})),\"select\"==this.settings.mode&&(this.input.set.call(this),this.setContentEditable(!0)),this.update(t)},postUpdate(){this.state.blockChangeEvent=!1;var t=this.settings,e=t.classNames,i=\"mix\"==t.mode?t.mixMode.integrated?this.DOM.input.textContent:this.DOM.originalInput.value.trim():this.value.length+this.input.raw.call(this).length;this.toggleClass(e.hasMaxTags,this.value.length>=t.maxTags),this.toggleClass(e.hasNoTags,!this.value.length),this.toggleClass(e.empty,!i),\"select\"==t.mode&&this.toggleScopeValidation(this.value?.[0]?.__isValid)},setOriginalInputValue(t){var e=this.DOM.originalInput;this.settings.mixMode.integrated||(e.value=t,e.tagifyValue=e.value,this.setPersistedData(t,\"value\"))},update(t){clearTimeout(this.debouncedUpdateTimeout),this.debouncedUpdateTimeout=setTimeout(function(){var e=this.getInputValue();this.setOriginalInputValue(e),this.settings.onChangeAfterBlur&&(t||{}).withoutChangeEvent||this.state.blockChangeEvent||this.triggerChangeEvent();this.postUpdate()}.bind(this),100)},getInputValue(){var t=this.getCleanValue();return\"mix\"==this.settings.mode?this.getMixedTagsAsString(t):t.length?this.settings.originalInputValueFormat?this.settings.originalInputValueFormat(t):JSON.stringify(t):\"\"},getCleanValue(t){return n(t||this.value,this.dataProps)},getMixedTagsAsString(){var t=\"\",e=this,i=this.settings,s=i.originalInputValueFormat||JSON.stringify,a=i.mixTagsInterpolator;return function i(n){n.childNodes.forEach((n=>{if(1==n.nodeType){const r=w(n);if(\"BR\"==n.tagName&&(t+=\"\\r\\n\"),r&&f.call(e,n)){if(r.__removed)return;t+=a[0]+s(o(r,e.dataProps))+a[1]}else n.getAttribute(\"style\")||[\"B\",\"I\",\"U\"].includes(n.tagName)?t+=n.textContent:\"DIV\"!=n.tagName&&\"P\"!=n.tagName||(t+=\"\\r\\n\",i(n))}else t+=n.textContent}))}(this.DOM.input),t}},_.prototype.removeTag=_.prototype.removeTags,_}));\n", "/* Do NOT modify this file; see /src.ts/_admin/update-version.ts */\n\n/**\n *  The current version of Ethers.\n */\nexport const version: string = \"6.11.1\";\n", "/**\n *  Property helper functions.\n *\n *  @_subsection api/utils:Properties  [about-properties]\n */\n\nfunction checkType(value: any, type: string, name: string): void {\n    const types = type.split(\"|\").map(t => t.trim());\n    for (let i = 0; i < types.length; i++) {\n        switch (type) {\n            case \"any\":\n                return;\n            case \"bigint\":\n            case \"boolean\":\n            case \"number\":\n            case \"string\":\n                if (typeof(value) === type) { return; }\n        }\n    }\n\n    const error: any = new Error(`invalid value for type ${ type }`);\n    error.code = \"INVALID_ARGUMENT\";\n    error.argument = `value.${ name }`;\n    error.value = value;\n\n    throw error;\n}\n\n/**\n *  Resolves to a new object that is a copy of %%value%%, but with all\n *  values resolved.\n */\nexport async function resolveProperties<T>(value: { [ P in keyof T ]: T[P] | Promise<T[P]>}): Promise<T> {\n    const keys = Object.keys(value);\n    const results = await Promise.all(keys.map((k) => Promise.resolve(value[<keyof T>k])));\n    return results.reduce((accum: any, v, index) => {\n        accum[keys[index]] = v;\n        return accum;\n    }, <{ [ P in keyof T]: T[P] }>{ });\n}\n\n/**\n *  Assigns the %%values%% to %%target%% as read-only values.\n *\n *  It %%types%% is specified, the values are checked.\n */\nexport function defineProperties<T>(\n target: T,\n values: { [ K in keyof T ]?: T[K] },\n types?: { [ K in keyof T ]?: string }): void {\n\n    for (let key in values) {\n        let value = values[key];\n\n        const type = (types ? types[key]: null);\n        if (type) { checkType(value, type, key); }\n\n        Object.defineProperty(target, key, { enumerable: true, value, writable: false });\n    }\n}\n", "/**\n *  All errors in ethers include properties to ensure they are both\n *  human-readable (i.e. ``.message``) and machine-readable (i.e. ``.code``).\n *\n *  The [[isError]] function can be used to check the error ``code`` and\n *  provide a type guard for the properties present on that error interface.\n *\n *  @_section: api/utils/errors:Errors  [about-errors]\n */\n\nimport { version } from \"../_version.js\";\n\nimport { defineProperties } from \"./properties.js\";\n\nimport type {\n    TransactionRequest, TransactionReceipt, TransactionResponse\n} from \"../providers/index.js\";\n\nimport type { FetchRequest, FetchResponse } from \"./fetch.js\";\n\n/**\n *  An error may contain additional properties, but those must not\n *  conflict with any implicit properties.\n */\nexport type ErrorInfo<T> = Omit<T, \"code\" | \"name\" | \"message\" | \"shortMessage\"> & { shortMessage?: string };\n\n\nfunction stringify(value: any): any {\n    if (value == null) { return \"null\"; }\n\n    if (Array.isArray(value)) {\n        return \"[ \" + (value.map(stringify)).join(\", \") + \" ]\";\n    }\n\n    if (value instanceof Uint8Array) {\n        const HEX = \"0123456789abcdef\";\n        let result = \"0x\";\n        for (let i = 0; i < value.length; i++) {\n            result += HEX[value[i] >> 4];\n            result += HEX[value[i] & 0xf];\n        }\n        return result;\n    }\n\n    if (typeof(value) === \"object\" && typeof(value.toJSON) === \"function\") {\n        return stringify(value.toJSON());\n    }\n\n    switch (typeof(value)) {\n        case \"boolean\": case \"symbol\":\n            return value.toString();\n        case \"bigint\":\n            return BigInt(value).toString();\n        case \"number\":\n            return (value).toString();\n        case \"string\":\n            return JSON.stringify(value);\n        case \"object\": {\n            const keys = Object.keys(value);\n            keys.sort();\n            return \"{ \" + keys.map((k) => `${ stringify(k) }: ${ stringify(value[k]) }`).join(\", \") + \" }\";\n        }\n    }\n\n    return `[ COULD NOT SERIALIZE ]`;\n}\n\n/**\n *  All errors emitted by ethers have an **ErrorCode** to help\n *  identify and coalesce errors to simplify programmatic analysis.\n *\n *  Each **ErrorCode** is the %%code%% proerty of a coresponding\n *  [[EthersError]].\n *\n *  **Generic Errors**\n *\n *  **``\"UNKNOWN_ERROR\"``** - see [[UnknownError]]\n *\n *  **``\"NOT_IMPLEMENTED\"``** - see [[NotImplementedError]]\n *\n *  **``\"UNSUPPORTED_OPERATION\"``** - see [[UnsupportedOperationError]]\n *\n *  **``\"NETWORK_ERROR\"``** - see [[NetworkError]]\n *\n *  **``\"SERVER_ERROR\"``** - see [[ServerError]]\n *\n *  **``\"TIMEOUT\"``** - see [[TimeoutError]]\n *\n *  **``\"BAD_DATA\"``** - see [[BadDataError]]\n *\n *  **``\"CANCELLED\"``** - see [[CancelledError]]\n *\n *  **Operational Errors**\n *\n *  **``\"BUFFER_OVERRUN\"``** - see [[BufferOverrunError]]\n *\n *  **``\"NUMERIC_FAULT\"``** - see [[NumericFaultError]]\n *\n *  **Argument Errors**\n *\n *  **``\"INVALID_ARGUMENT\"``** - see [[InvalidArgumentError]]\n *\n *  **``\"MISSING_ARGUMENT\"``** - see [[MissingArgumentError]]\n *\n *  **``\"UNEXPECTED_ARGUMENT\"``** - see [[UnexpectedArgumentError]]\n *\n *  **``\"VALUE_MISMATCH\"``** - //unused//\n *\n *  **Blockchain Errors**\n *\n *  **``\"CALL_EXCEPTION\"``** - see [[CallExceptionError]]\n *\n *  **``\"INSUFFICIENT_FUNDS\"``** - see [[InsufficientFundsError]]\n *\n *  **``\"NONCE_EXPIRED\"``** - see [[NonceExpiredError]]\n *\n *  **``\"REPLACEMENT_UNDERPRICED\"``** - see [[ReplacementUnderpricedError]]\n *\n *  **``\"TRANSACTION_REPLACED\"``** - see [[TransactionReplacedError]]\n *\n *  **``\"UNCONFIGURED_NAME\"``** - see [[UnconfiguredNameError]]\n *\n *  **``\"OFFCHAIN_FAULT\"``** - see [[OffchainFaultError]]\n *\n *  **User Interaction Errors**\n *\n *  **``\"ACTION_REJECTED\"``** - see [[ActionRejectedError]]\n */\nexport type ErrorCode =\n\n    // Generic Errors\n    \"UNKNOWN_ERROR\" | \"NOT_IMPLEMENTED\" | \"UNSUPPORTED_OPERATION\" |\n    \"NETWORK_ERROR\" | \"SERVER_ERROR\" | \"TIMEOUT\" | \"BAD_DATA\" |\n    \"CANCELLED\" |\n\n    // Operational Errors\n    \"BUFFER_OVERRUN\" |  \"NUMERIC_FAULT\" |\n\n    // Argument Errors\n    \"INVALID_ARGUMENT\" | \"MISSING_ARGUMENT\" | \"UNEXPECTED_ARGUMENT\" |\n    \"VALUE_MISMATCH\" |\n\n    // Blockchain Errors\n    \"CALL_EXCEPTION\" | \"INSUFFICIENT_FUNDS\" | \"NONCE_EXPIRED\" |\n    \"REPLACEMENT_UNDERPRICED\" | \"TRANSACTION_REPLACED\" |\n    \"UNCONFIGURED_NAME\" | \"OFFCHAIN_FAULT\" |\n\n    // User Interaction\n    \"ACTION_REJECTED\"\n;\n\n/**\n *  All errors in Ethers include properties to assist in\n *  machine-readable errors.\n */\nexport interface EthersError<T extends ErrorCode = ErrorCode> extends Error {\n    /**\n     *  The string error code.\n     */\n    code: ErrorCode;\n\n    /**\n     *  A short message describing the error, with minimal additional\n     *  details.\n     */\n    shortMessage: string;\n\n    /**\n     *  Additional info regarding the error that may be useful.\n     *\n     *  This is generally helpful mostly for human-based debugging.\n     */\n    info?: Record<string, any>;\n\n    /**\n     *  Any related error.\n     */\n    error?: Error;\n}\n\n// Generic Errors\n\n/**\n *  This Error is a catch-all for when there is no way for Ethers to\n *  know what the underlying problem is.\n */\nexport interface UnknownError extends EthersError<\"UNKNOWN_ERROR\"> {\n    [ key: string ]: any;\n}\n\n/**\n *  This Error is mostly used as a stub for functionality that is\n *  intended for the future, but is currently not implemented.\n */\nexport interface NotImplementedError extends EthersError<\"NOT_IMPLEMENTED\"> {\n    /**\n     *  The attempted operation.\n     */\n    operation: string;\n}\n\n/**\n *  This Error indicates that the attempted operation is not supported.\n *\n *  This could range from a specific JSON-RPC end-point not supporting\n *  a feature to a specific configuration of an object prohibiting the\n *  operation.\n *\n *  For example, a [[Wallet]] with no connected [[Provider]] is unable\n *  to send a transaction.\n */\nexport interface UnsupportedOperationError extends EthersError<\"UNSUPPORTED_OPERATION\"> {\n    /**\n     *  The attempted operation.\n     */\n    operation: string;\n}\n\n/**\n *  This Error indicates a problem connecting to a network.\n */\nexport interface NetworkError extends EthersError<\"NETWORK_ERROR\"> {\n    /**\n     *  The network event.\n     */\n    event: string;\n}\n\n/**\n *  This Error indicates there was a problem fetching a resource from\n *  a server.\n */\nexport interface ServerError extends EthersError<\"SERVER_ERROR\"> {\n    /**\n     *  The requested resource.\n     */\n    request: FetchRequest | string;\n\n    /**\n     *  The response received from the server, if available.\n     */\n    response?: FetchResponse;\n}\n\n/**\n *  This Error indicates that the timeout duration has expired and\n *  that the operation has been implicitly cancelled.\n *\n *  The side-effect of the operation may still occur, as this\n *  generally means a request has been sent and there has simply\n *  been no response to indicate whether it was processed or not.\n */\nexport interface TimeoutError extends EthersError<\"TIMEOUT\"> {\n    /**\n     *  The attempted operation.\n     */\n    operation: string;\n\n    /**\n     *  The reason.\n     */\n    reason: string;\n\n    /**\n     *  The resource request, if available.\n     */\n    request?: FetchRequest;\n}\n\n/**\n *  This Error indicates that a provided set of data cannot\n *  be correctly interpreted.\n */\nexport interface BadDataError extends EthersError<\"BAD_DATA\"> {\n    /**\n     *  The data.\n     */\n    value: any;\n}\n\n/**\n *  This Error indicates that the operation was cancelled by a\n *  programmatic call, for example to ``cancel()``.\n */\nexport interface CancelledError extends EthersError<\"CANCELLED\"> {\n}\n\n\n// Operational Errors\n\n/**\n *  This Error indicates an attempt was made to read outside the bounds\n *  of protected data.\n *\n *  Most operations in Ethers are protected by bounds checks, to mitigate\n *  exploits when parsing data.\n */\nexport interface BufferOverrunError extends EthersError<\"BUFFER_OVERRUN\"> {\n    /**\n     *  The buffer that was overrun.\n     */\n    buffer: Uint8Array;\n\n    /**\n     *  The length of the buffer.\n     */\n    length: number;\n\n    /**\n     *  The offset that was requested.\n     */\n    offset: number;\n}\n\n/**\n *  This Error indicates an operation which would result in incorrect\n *  arithmetic output has occurred.\n *\n *  For example, trying to divide by zero or using a ``uint8`` to store\n *  a negative value.\n */\nexport interface NumericFaultError extends EthersError<\"NUMERIC_FAULT\"> {\n    /**\n     *  The attempted operation.\n     */\n    operation: string;\n\n    /**\n     *  The fault reported.\n     */\n    fault: string;\n\n    /**\n     *  The value the operation was attempted against.\n     */\n    value: any;\n}\n\n\n// Argument Errors\n\n/**\n *  This Error indicates an incorrect type or value was passed to\n *  a function or method.\n */\nexport interface InvalidArgumentError extends EthersError<\"INVALID_ARGUMENT\"> {\n    /**\n     *  The name of the argument.\n     */\n    argument: string;\n\n    /**\n     *  The value that was provided.\n     */\n    value: any;\n\n    info?: Record<string, any>\n}\n\n/**\n *  This Error indicates there were too few arguments were provided.\n */\nexport interface MissingArgumentError extends EthersError<\"MISSING_ARGUMENT\"> {\n    /**\n     *  The number of arguments received.\n     */\n    count: number;\n\n    /**\n     *  The number of arguments expected.\n     */\n    expectedCount: number;\n}\n\n/**\n *  This Error indicates too many arguments were provided.\n */\nexport interface UnexpectedArgumentError extends EthersError<\"UNEXPECTED_ARGUMENT\"> {\n    /**\n     *  The number of arguments received.\n     */\n    count: number;\n\n    /**\n     *  The number of arguments expected.\n     */\n    expectedCount: number;\n}\n\n\n// Blockchain Errors\n\n/**\n *  The action that resulted in the call exception.\n */\nexport type CallExceptionAction = \"call\" | \"estimateGas\" | \"getTransactionResult\" | \"sendTransaction\" | \"unknown\";\n\n/**\n *  The related transaction that caused the error.\n */\nexport type CallExceptionTransaction = {\n    to: null | string;\n    from?: string;\n    data: string;\n};\n\n/**\n *  This **Error** indicates a transaction reverted.\n */\nexport interface CallExceptionError extends EthersError<\"CALL_EXCEPTION\"> {\n\n    /**\n     *  The action being performed when the revert was encountered.\n     */\n    action: CallExceptionAction;\n\n    /**\n     *  The revert data returned.\n     */\n    data: null | string;\n\n    /**\n     *  A human-readable representation of data, if possible.\n     */\n    reason: null | string;\n\n    /**\n     *  The transaction that triggered the exception.\n     */\n    transaction: CallExceptionTransaction,\n\n    /**\n     *  The contract invocation details, if available.\n     */\n    invocation: null | {\n        method: string;\n        signature: string;\n        args: Array<any>;\n    }\n\n    /**\n     *  The built-in or custom revert error, if available\n     */\n    revert: null | {\n        signature: string;\n        name: string;\n        args: Array<any>;\n    }\n\n    /**\n     *  If the error occurred in a transaction that was mined\n     *  (with a status of ``0``), this is the receipt.\n     */\n    receipt?: TransactionReceipt;   // @TODO: in v7, make this `null | TransactionReceipt`\n}\n\n\n/**\n *  The sending account has insufficient funds to cover the\n *  entire transaction cost.\n */\nexport interface InsufficientFundsError extends EthersError<\"INSUFFICIENT_FUNDS\"> {\n    /**\n     *  The transaction.\n     */\n    transaction: TransactionRequest;\n}\n\n/**\n *  The sending account has already used this nonce in a\n *  transaction that has been included.\n */\nexport interface NonceExpiredError extends EthersError<\"NONCE_EXPIRED\"> {\n    /**\n     *  The transaction.\n     */\n    transaction: TransactionRequest;\n}\n\n/**\n *  A CCIP-read exception, which cannot be recovered from or\n *  be further processed.\n */\nexport interface OffchainFaultError extends EthersError<\"OFFCHAIN_FAULT\"> {\n    /**\n     *  The transaction.\n     */\n    transaction?: TransactionRequest;\n\n    /**\n     *  The reason the CCIP-read failed.\n     */\n    reason: string;\n}\n\n/**\n *  An attempt was made to replace a transaction, but with an\n *  insufficient additional fee to afford evicting the old\n *  transaction from the memory pool.\n */\nexport interface ReplacementUnderpricedError extends EthersError<\"REPLACEMENT_UNDERPRICED\"> {\n    /**\n     *  The transaction.\n     */\n    transaction: TransactionRequest;\n}\n\n/**\n *  A pending transaction was replaced by another.\n */\nexport interface TransactionReplacedError extends EthersError<\"TRANSACTION_REPLACED\"> {\n    /**\n     *  If the transaction was cancelled, such that the original\n     *  effects of the transaction cannot be assured.\n     */\n    cancelled: boolean;\n\n    /**\n     *  The reason the transaction was replaced.\n     */\n    reason: \"repriced\" | \"cancelled\" | \"replaced\";\n\n    /**\n     *  The hash of the replaced transaction.\n     */\n    hash: string;\n\n    /**\n     *  The transaction that replaced the transaction.\n     */\n    replacement: TransactionResponse;\n\n    /**\n     *  The receipt of the transaction that replace the transaction.\n     */\n    receipt: TransactionReceipt;\n}\n\n/**\n *  This Error indicates an ENS name was used, but the name has not\n *  been configured.\n *\n *  This could indicate an ENS name is unowned or that the current\n *  address being pointed to is the [[ZeroAddress]].\n */\nexport interface UnconfiguredNameError extends EthersError<\"UNCONFIGURED_NAME\"> {\n    /**\n     *  The ENS name that was requested\n     */\n    value: string;\n}\n\n/**\n *  This Error indicates a request was rejected by the user.\n *\n *  In most clients (such as MetaMask), when an operation requires user\n *  authorization (such as ``signer.sendTransaction``), the client\n *  presents a dialog box to the user. If the user denies the request\n *  this error is thrown.\n */\nexport interface ActionRejectedError extends EthersError<\"ACTION_REJECTED\"> {\n    /**\n     *  The requested action.\n     */\n    action: \"requestAccess\" | \"sendTransaction\" | \"signMessage\" | \"signTransaction\" | \"signTypedData\" | \"unknown\",\n\n    /**\n     *  The reason the action was rejected.\n     *\n     *  If there is already a pending request, some clients may indicate\n     *  there is already a ``\"pending\"`` action. This prevents an app\n     *  from spamming the user.\n     */\n    reason: \"expired\" | \"rejected\" | \"pending\"\n}\n\n// Coding; converts an ErrorCode its Typed Error\n\n/**\n *  A conditional type that transforms the [[ErrorCode]] T into\n *  its EthersError type.\n *\n *  @flatworm-skip-docs\n */\nexport type CodedEthersError<T> =\n    T extends \"UNKNOWN_ERROR\" ? UnknownError:\n    T extends \"NOT_IMPLEMENTED\" ? NotImplementedError:\n    T extends \"UNSUPPORTED_OPERATION\" ? UnsupportedOperationError:\n    T extends \"NETWORK_ERROR\" ? NetworkError:\n    T extends \"SERVER_ERROR\" ? ServerError:\n    T extends \"TIMEOUT\" ? TimeoutError:\n    T extends \"BAD_DATA\" ? BadDataError:\n    T extends \"CANCELLED\" ? CancelledError:\n\n    T extends \"BUFFER_OVERRUN\" ? BufferOverrunError:\n    T extends \"NUMERIC_FAULT\" ? NumericFaultError:\n\n    T extends \"INVALID_ARGUMENT\" ? InvalidArgumentError:\n    T extends \"MISSING_ARGUMENT\" ? MissingArgumentError:\n    T extends \"UNEXPECTED_ARGUMENT\" ? UnexpectedArgumentError:\n\n    T extends \"CALL_EXCEPTION\" ? CallExceptionError:\n    T extends \"INSUFFICIENT_FUNDS\" ? InsufficientFundsError:\n    T extends \"NONCE_EXPIRED\" ? NonceExpiredError:\n    T extends \"OFFCHAIN_FAULT\" ? OffchainFaultError:\n    T extends \"REPLACEMENT_UNDERPRICED\" ? ReplacementUnderpricedError:\n    T extends \"TRANSACTION_REPLACED\" ? TransactionReplacedError:\n    T extends \"UNCONFIGURED_NAME\" ? UnconfiguredNameError:\n\n    T extends \"ACTION_REJECTED\" ? ActionRejectedError:\n\n    never;\n\n\n\n/**\n *  Returns true if the %%error%% matches an error thrown by ethers\n *  that matches the error %%code%%.\n *\n *  In TypeScript environments, this can be used to check that %%error%%\n *  matches an EthersError type, which means the expected properties will\n *  be set.\n *\n *  @See [ErrorCodes](api:ErrorCode)\n *  @example\n *    try {\n *      // code....\n *    } catch (e) {\n *      if (isError(e, \"CALL_EXCEPTION\")) {\n *          // The Type Guard has validated this object\n *          console.log(e.data);\n *      }\n *    }\n */\nexport function isError<K extends ErrorCode, T extends CodedEthersError<K>>(error: any, code: K): error is T {\n    return (error && (<EthersError>error).code === code);\n}\n\n/**\n *  Returns true if %%error%% is a [[CallExceptionError].\n */\nexport function isCallException(error: any): error is CallExceptionError {\n    return isError(error, \"CALL_EXCEPTION\");\n}\n\n/**\n *  Returns a new Error configured to the format ethers emits errors, with\n *  the %%message%%, [[api:ErrorCode]] %%code%% and additional properties\n *  for the corresponding EthersError.\n *\n *  Each error in ethers includes the version of ethers, a\n *  machine-readable [[ErrorCode]], and depending on %%code%%, additional\n *  required properties. The error message will also include the %%message%%,\n *  ethers version, %%code%% and all additional properties, serialized.\n */\nexport function makeError<K extends ErrorCode, T extends CodedEthersError<K>>(message: string, code: K, info?: ErrorInfo<T>): T {\n    let shortMessage = message;\n\n    {\n        const details: Array<string> = [];\n        if (info) {\n            if (\"message\" in info || \"code\" in info || \"name\" in info) {\n                throw new Error(`value will overwrite populated values: ${ stringify(info) }`);\n            }\n            for (const key in info) {\n                if (key === \"shortMessage\") { continue; }\n                const value = <any>(info[<keyof ErrorInfo<T>>key]);\n//                try {\n                    details.push(key + \"=\" + stringify(value));\n//                } catch (error: any) {\n//                console.log(\"MMM\", error.message);\n//                    details.push(key + \"=[could not serialize object]\");\n//                }\n            }\n        }\n        details.push(`code=${ code }`);\n        details.push(`version=${ version }`);\n\n        if (details.length) {\n            message += \" (\" + details.join(\", \") + \")\";\n        }\n    }\n\n    let error;\n    switch (code) {\n        case \"INVALID_ARGUMENT\":\n            error = new TypeError(message);\n            break;\n        case \"NUMERIC_FAULT\":\n        case \"BUFFER_OVERRUN\":\n            error = new RangeError(message);\n            break;\n        default:\n            error = new Error(message);\n    }\n\n    defineProperties<EthersError>(<EthersError>error, { code });\n\n    if (info) { Object.assign(error, info); }\n\n    if ((<any>error).shortMessage == null) {\n        defineProperties<EthersError>(<EthersError>error, { shortMessage });\n    }\n\n    return <T>error;\n}\n\n/**\n *  Throws an EthersError with %%message%%, %%code%% and additional error\n *  %%info%% when %%check%% is falsish..\n *\n *  @see [[api:makeError]]\n */\nexport function assert<K extends ErrorCode, T extends CodedEthersError<K>>(check: unknown, message: string, code: K, info?: ErrorInfo<T>): asserts check {\n    if (!check) { throw makeError(message, code, info); }\n}\n\n\n/**\n *  A simple helper to simply ensuring provided arguments match expected\n *  constraints, throwing if not.\n *\n *  In TypeScript environments, the %%check%% has been asserted true, so\n *  any further code does not need additional compile-time checks.\n */\nexport function assertArgument(check: unknown, message: string, name: string, value: unknown): asserts check {\n    assert(check, message, \"INVALID_ARGUMENT\", { argument: name, value: value });\n}\n\nexport function assertArgumentCount(count: number, expectedCount: number, message?: string): void {\n    if (message == null) { message = \"\"; }\n    if (message) { message = \": \" + message; }\n\n    assert(count >= expectedCount, \"missing arguemnt\" + message, \"MISSING_ARGUMENT\", {\n        count: count,\n        expectedCount: expectedCount\n    });\n\n    assert(count <= expectedCount, \"too many arguments\" + message, \"UNEXPECTED_ARGUMENT\", {\n        count: count,\n        expectedCount: expectedCount\n    });\n}\n\nconst _normalizeForms = [\"NFD\", \"NFC\", \"NFKD\", \"NFKC\"].reduce((accum, form) => {\n    try {\n        // General test for normalize\n        /* c8 ignore start */\n        if (\"test\".normalize(form) !== \"test\") { throw new Error(\"bad\"); };\n        /* c8 ignore stop */\n\n        if (form === \"NFD\") {\n            const check = String.fromCharCode(0xe9).normalize(\"NFD\");\n            const expected = String.fromCharCode(0x65, 0x0301)\n            /* c8 ignore start */\n            if (check !== expected) { throw new Error(\"broken\") }\n            /* c8 ignore stop */\n        }\n\n        accum.push(form);\n    } catch(error) { }\n\n    return accum;\n}, <Array<string>>[]);\n\n/**\n *  Throws if the normalization %%form%% is not supported.\n */\nexport function assertNormalize(form: string): void {\n    assert(_normalizeForms.indexOf(form) >= 0, \"platform missing String.prototype.normalize\", \"UNSUPPORTED_OPERATION\", {\n        operation: \"String.prototype.normalize\", info: { form }\n    });\n}\n\n/**\n *  Many classes use file-scoped values to guard the constructor,\n *  making it effectively private. This facilitates that pattern\n *  by ensuring the %%givenGaurd%% matches the file-scoped %%guard%%,\n *  throwing if not, indicating the %%className%% if provided.\n */\nexport function assertPrivate(givenGuard: any, guard: any, className?: string): void {\n    if (className == null) { className = \"\"; }\n    if (givenGuard !== guard) {\n        let method = className, operation = \"new\";\n        if (className) {\n            method += \".\";\n            operation += \" \" + className;\n        }\n        assert(false, `private constructor; use ${ method }from* methods`, \"UNSUPPORTED_OPERATION\", {\n            operation\n        });\n    }\n}\n", "/**\n *  Some data helpers.\n *\n *\n *  @_subsection api/utils:Data Helpers  [about-data]\n */\nimport { assert, assertArgument } from \"./errors.js\";\n\n/**\n *  A [[HexString]] whose length is even, which ensures it is a valid\n *  representation of binary data.\n */\nexport type DataHexString = string;\n\n/**\n *  A string which is prefixed with ``0x`` and followed by any number\n *  of case-agnostic hexadecimal characters.\n *\n *  It must match the regular expression ``/0x[0-9A-Fa-f]*\\/``.\n */\nexport type HexString = string;\n\n/**\n *  An object that can be used to represent binary data.\n */\nexport type BytesLike = DataHexString | Uint8Array;\n\nfunction _getBytes(value: BytesLike, name?: string, copy?: boolean): Uint8Array {\n    if (value instanceof Uint8Array) {\n        if (copy) { return new Uint8Array(value); }\n        return value;\n    }\n\n    if (typeof(value) === \"string\" && value.match(/^0x([0-9a-f][0-9a-f])*$/i)) {\n        const result = new Uint8Array((value.length - 2) / 2);\n        let offset = 2;\n        for (let i = 0; i < result.length; i++) {\n            result[i] = parseInt(value.substring(offset, offset + 2), 16);\n            offset += 2;\n        }\n        return result;\n    }\n\n    assertArgument(false, \"invalid BytesLike value\", name || \"value\", value);\n}\n\n/**\n *  Get a typed Uint8Array for %%value%%. If already a Uint8Array\n *  the original %%value%% is returned; if a copy is required use\n *  [[getBytesCopy]].\n *\n *  @see: getBytesCopy\n */\nexport function getBytes(value: BytesLike, name?: string): Uint8Array {\n    return _getBytes(value, name, false);\n}\n\n/**\n *  Get a typed Uint8Array for %%value%%, creating a copy if necessary\n *  to prevent any modifications of the returned value from being\n *  reflected elsewhere.\n *\n *  @see: getBytes\n */\nexport function getBytesCopy(value: BytesLike, name?: string): Uint8Array {\n    return _getBytes(value, name, true);\n}\n\n\n/**\n *  Returns true if %%value%% is a valid [[HexString]].\n *\n *  If %%length%% is ``true`` or a //number//, it also checks that\n *  %%value%% is a valid [[DataHexString]] of %%length%% (if a //number//)\n *  bytes of data (e.g. ``0x1234`` is 2 bytes).\n */\nexport function isHexString(value: any, length?: number | boolean): value is `0x${ string }` {\n    if (typeof(value) !== \"string\" || !value.match(/^0x[0-9A-Fa-f]*$/)) {\n        return false\n    }\n\n    if (typeof(length) === \"number\" && value.length !== 2 + 2 * length) { return false; }\n    if (length === true && (value.length % 2) !== 0) { return false; }\n\n    return true;\n}\n\n/**\n *  Returns true if %%value%% is a valid representation of arbitrary\n *  data (i.e. a valid [[DataHexString]] or a Uint8Array).\n */\nexport function isBytesLike(value: any): value is BytesLike {\n    return (isHexString(value, true) || (value instanceof Uint8Array));\n}\n\nconst HexCharacters: string = \"0123456789abcdef\";\n\n/**\n *  Returns a [[DataHexString]] representation of %%data%%.\n */\nexport function hexlify(data: BytesLike): string {\n    const bytes = getBytes(data);\n\n    let result = \"0x\";\n    for (let i = 0; i < bytes.length; i++) {\n        const v = bytes[i];\n        result += HexCharacters[(v & 0xf0) >> 4] + HexCharacters[v & 0x0f];\n    }\n    return result;\n}\n\n/**\n *  Returns a [[DataHexString]] by concatenating all values\n *  within %%data%%.\n */\nexport function concat(datas: ReadonlyArray<BytesLike>): string {\n    return \"0x\" + datas.map((d) => hexlify(d).substring(2)).join(\"\");\n}\n\n/**\n *  Returns the length of %%data%%, in bytes.\n */\nexport function dataLength(data: BytesLike): number {\n    if (isHexString(data, true)) { return (data.length - 2) / 2; }\n    return getBytes(data).length;\n}\n\n/**\n *  Returns a [[DataHexString]] by slicing %%data%% from the %%start%%\n *  offset to the %%end%% offset.\n *\n *  By default %%start%% is 0 and %%end%% is the length of %%data%%.\n */\nexport function dataSlice(data: BytesLike, start?: number, end?: number): string {\n    const bytes = getBytes(data);\n    if (end != null && end > bytes.length) {\n        assert(false, \"cannot slice beyond data bounds\", \"BUFFER_OVERRUN\", {\n            buffer: bytes, length: bytes.length, offset: end\n        });\n    }\n    return hexlify(bytes.slice((start == null) ? 0: start, (end == null) ? bytes.length: end));\n}\n\n/**\n *  Return the [[DataHexString]] result by stripping all **leading**\n ** zero bytes from %%data%%.\n */\nexport function stripZerosLeft(data: BytesLike): string {\n    let bytes = hexlify(data).substring(2);\n    while (bytes.startsWith(\"00\")) { bytes = bytes.substring(2); }\n    return \"0x\" + bytes;\n}\n\nfunction zeroPad(data: BytesLike, length: number, left: boolean): string {\n    const bytes = getBytes(data);\n    assert(length >= bytes.length, \"padding exceeds data length\", \"BUFFER_OVERRUN\", {\n        buffer: new Uint8Array(bytes),\n        length: length,\n        offset: length + 1\n    });\n\n    const result = new Uint8Array(length);\n    result.fill(0);\n    if (left) {\n        result.set(bytes, length - bytes.length);\n    } else {\n        result.set(bytes, 0);\n    }\n\n    return hexlify(result);\n}\n\n/**\n *  Return the [[DataHexString]] of %%data%% padded on the **left**\n *  to %%length%% bytes.\n *\n *  If %%data%% already exceeds %%length%%, a [[BufferOverrunError]] is\n *  thrown.\n *\n *  This pads data the same as **values** are in Solidity\n *  (e.g. ``uint128``).\n */\nexport function zeroPadValue(data: BytesLike, length: number): string {\n    return zeroPad(data, length, true);\n}\n\n/**\n *  Return the [[DataHexString]] of %%data%% padded on the **right**\n *  to %%length%% bytes.\n *\n *  If %%data%% already exceeds %%length%%, a [[BufferOverrunError]] is\n *  thrown.\n *\n *  This pads data the same as **bytes** are in Solidity\n *  (e.g. ``bytes16``).\n */\nexport function zeroPadBytes(data: BytesLike, length: number): string {\n    return zeroPad(data, length, false);\n}\n", "/**\n *  Some mathematic operations.\n *\n *  @_subsection: api/utils:Math Helpers  [about-maths]\n */\nimport { hexlify, isBytesLike } from \"./data.js\";\nimport { assert, assertArgument } from \"./errors.js\";\n\nimport type { BytesLike } from \"./data.js\";\n\n/**\n *  Any type that can be used where a numeric value is needed.\n */\nexport type Numeric = number | bigint;\n\n/**\n *  Any type that can be used where a big number is needed.\n */\nexport type BigNumberish = string | Numeric;\n\n\nconst BN_0 = BigInt(0);\nconst BN_1 = BigInt(1);\n\n//const BN_Max256 = (BN_1 << BigInt(256)) - BN_1;\n\n\n// IEEE 754 support 53-bits of mantissa\nconst maxValue = 0x1fffffffffffff;\n\n/**\n *  Convert %%value%% from a twos-compliment representation of %%width%%\n *  bits to its value.\n *\n *  If the highest bit is ``1``, the result will be negative.\n */\nexport function fromTwos(_value: BigNumberish, _width: Numeric): bigint {\n    const value = getUint(_value, \"value\");\n    const width = BigInt(getNumber(_width, \"width\"));\n\n    assert((value >> width) === BN_0, \"overflow\", \"NUMERIC_FAULT\", {\n        operation: \"fromTwos\", fault: \"overflow\", value: _value\n    });\n\n    // Top bit set; treat as a negative value\n    if (value >> (width - BN_1)) {\n        const mask = (BN_1 << width) - BN_1;\n        return -(((~value) & mask) + BN_1);\n    }\n\n    return value;\n}\n\n/**\n *  Convert %%value%% to a twos-compliment representation of\n *  %%width%% bits.\n *\n *  The result will always be positive.\n */\nexport function toTwos(_value: BigNumberish, _width: Numeric): bigint {\n    let value = getBigInt(_value, \"value\");\n    const width = BigInt(getNumber(_width, \"width\"));\n\n    const limit = (BN_1 << (width - BN_1));\n\n    if (value < BN_0) {\n        value = -value;\n        assert(value <= limit, \"too low\", \"NUMERIC_FAULT\", {\n            operation: \"toTwos\", fault: \"overflow\", value: _value\n        });\n        const mask = (BN_1 << width) - BN_1;\n        return ((~value) & mask) + BN_1;\n    } else {\n        assert(value < limit, \"too high\", \"NUMERIC_FAULT\", {\n            operation: \"toTwos\", fault: \"overflow\", value: _value\n        });\n    }\n\n    return value;\n}\n\n/**\n *  Mask %%value%% with a bitmask of %%bits%% ones.\n */\nexport function mask(_value: BigNumberish, _bits: Numeric): bigint {\n    const value = getUint(_value, \"value\");\n    const bits = BigInt(getNumber(_bits, \"bits\"));\n    return value & ((BN_1 << bits) - BN_1);\n}\n\n/**\n *  Gets a BigInt from %%value%%. If it is an invalid value for\n *  a BigInt, then an ArgumentError will be thrown for %%name%%.\n */\nexport function getBigInt(value: BigNumberish, name?: string): bigint {\n    switch (typeof(value)) {\n        case \"bigint\": return value;\n        case \"number\":\n            assertArgument(Number.isInteger(value), \"underflow\", name || \"value\", value);\n            assertArgument(value >= -maxValue && value <= maxValue, \"overflow\", name || \"value\", value);\n            return BigInt(value);\n        case \"string\":\n            try {\n                if (value === \"\") { throw new Error(\"empty string\"); }\n                if (value[0] === \"-\" && value[1] !== \"-\") {\n                    return -BigInt(value.substring(1));\n                }\n                return BigInt(value);\n            } catch(e: any) {\n                assertArgument(false, `invalid BigNumberish string: ${ e.message }`, name || \"value\", value);\n            }\n    }\n    assertArgument(false, \"invalid BigNumberish value\", name || \"value\", value);\n}\n\n/**\n *  Returns %%value%% as a bigint, validating it is valid as a bigint\n *  value and that it is positive.\n */\nexport function getUint(value: BigNumberish, name?: string): bigint {\n    const result = getBigInt(value, name);\n    assert(result >= BN_0, \"unsigned value cannot be negative\", \"NUMERIC_FAULT\", {\n        fault: \"overflow\", operation: \"getUint\", value\n    });\n    return result;\n}\n\nconst Nibbles = \"0123456789abcdef\";\n\n/*\n * Converts %%value%% to a BigInt. If %%value%% is a Uint8Array, it\n * is treated as Big Endian data.\n */\nexport function toBigInt(value: BigNumberish | Uint8Array): bigint {\n    if (value instanceof Uint8Array) {\n        let result = \"0x0\";\n        for (const v of value) {\n            result += Nibbles[v >> 4];\n            result += Nibbles[v & 0x0f];\n        }\n        return BigInt(result);\n    }\n\n    return getBigInt(value);\n}\n\n/**\n *  Gets a //number// from %%value%%. If it is an invalid value for\n *  a //number//, then an ArgumentError will be thrown for %%name%%.\n */\nexport function getNumber(value: BigNumberish, name?: string): number {\n    switch (typeof(value)) {\n        case \"bigint\":\n            assertArgument(value >= -maxValue && value <= maxValue, \"overflow\", name || \"value\", value);\n            return Number(value);\n        case \"number\":\n            assertArgument(Number.isInteger(value), \"underflow\", name || \"value\", value);\n            assertArgument(value >= -maxValue && value <= maxValue, \"overflow\", name || \"value\", value);\n            return value;\n        case \"string\":\n            try {\n                if (value === \"\") { throw new Error(\"empty string\"); }\n                return getNumber(BigInt(value), name);\n            } catch(e: any) {\n                assertArgument(false, `invalid numeric string: ${ e.message }`, name || \"value\", value);\n            }\n    }\n    assertArgument(false, \"invalid numeric value\", name || \"value\", value);\n}\n\n\n/**\n *  Converts %%value%% to a number. If %%value%% is a Uint8Array, it\n *  is treated as Big Endian data. Throws if the value is not safe.\n */\nexport function toNumber(value: BigNumberish | Uint8Array): number {\n    return getNumber(toBigInt(value));\n}\n\n/**\n *  Converts %%value%% to a Big Endian hexstring, optionally padded to\n *  %%width%% bytes.\n */\nexport function toBeHex(_value: BigNumberish, _width?: Numeric): string {\n    const value = getUint(_value, \"value\");\n\n    let result = value.toString(16);\n\n    if (_width == null) {\n        // Ensure the value is of even length\n        if (result.length % 2) { result = \"0\" + result; }\n    } else {\n        const width = getNumber(_width, \"width\");\n        assert(width * 2 >= result.length, `value exceeds width (${ width } bytes)`, \"NUMERIC_FAULT\", {\n            operation: \"toBeHex\",\n            fault: \"overflow\",\n            value: _value\n        });\n\n        // Pad the value to the required width\n        while (result.length < (width * 2)) { result = \"0\" + result; }\n\n    }\n\n    return \"0x\" + result;\n}\n\n/**\n *  Converts %%value%% to a Big Endian Uint8Array.\n */\nexport function toBeArray(_value: BigNumberish): Uint8Array {\n    const value = getUint(_value, \"value\");\n\n    if (value === BN_0) { return new Uint8Array([ ]); }\n\n    let hex = value.toString(16);\n    if (hex.length % 2) { hex = \"0\" + hex; }\n\n    const result = new Uint8Array(hex.length / 2);\n    for (let i = 0; i < result.length; i++) {\n        const offset = i * 2;\n        result[i] = parseInt(hex.substring(offset, offset + 2), 16);\n    }\n\n    return result;\n}\n\n/**\n *  Returns a [[HexString]] for %%value%% safe to use as a //Quantity//.\n *\n *  A //Quantity// does not have and leading 0 values unless the value is\n *  the literal value `0x0`. This is most commonly used for JSSON-RPC\n *  numeric values.\n */\nexport function toQuantity(value: BytesLike | BigNumberish): string {\n    let result = hexlify(isBytesLike(value) ? value: toBeArray(value)).substring(2);\n    while (result.startsWith(\"0\")) { result = result.substring(1); }\n    if (result === \"\") { result = \"0\"; }\n    return \"0x\" + result;\n}\n", "/**\n *  The [Base58 Encoding](link-base58) scheme allows a **numeric** value\n *  to be encoded as a compact string using a radix of 58 using only\n *  alpha-numeric characters. Confusingly similar characters are omitted\n *  (i.e. ``\"l0O\"``).\n *\n *  Note that Base58 encodes a **numeric** value, not arbitrary bytes,\n *  since any zero-bytes on the left would get removed. To mitigate this\n *  issue most schemes that use Base58 choose specific high-order values\n *  to ensure non-zero prefixes.\n *\n *  @_subsection: api/utils:Base58 Encoding [about-base58]\n */\n\nimport { getBytes } from \"./data.js\";\nimport { assertArgument } from \"./errors.js\";\nimport { toBigInt } from \"./maths.js\";\n\nimport type { BytesLike } from \"./index.js\";\n\n\nconst Alphabet = \"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz\";\nlet Lookup: null | Record<string, bigint> = null;\n\nfunction getAlpha(letter: string): bigint {\n    if (Lookup == null) {\n        Lookup = { };\n        for (let i = 0; i < Alphabet.length; i++) {\n            Lookup[Alphabet[i]] = BigInt(i);\n        }\n    }\n    const result = Lookup[letter];\n    assertArgument(result != null, `invalid base58 value`, \"letter\", letter);\n    return result;\n}\n\n\nconst BN_0 = BigInt(0);\nconst BN_58 = BigInt(58);\n\n/**\n *  Encode %%value%% as a Base58-encoded string.\n */\nexport function encodeBase58(_value: BytesLike): string {\n    const bytes = getBytes(_value);\n\n    let value = toBigInt(bytes);\n    let result = \"\";\n    while (value) {\n        result = Alphabet[Number(value % BN_58)] + result;\n        value /= BN_58;\n    }\n\n    // Account for leading padding zeros\n    for (let i = 0; i < bytes.length; i++) {\n        if (bytes[i]) { break; }\n        result = Alphabet[0] + result;\n    }\n\n    return result;\n}\n\n/**\n *  Decode the Base58-encoded %%value%%.\n */\nexport function decodeBase58(value: string): bigint {\n    let result = BN_0;\n    for (let i = 0; i < value.length; i++) {\n        result *= BN_58;\n        result += getAlpha(value[i]);\n    }\n    return result;\n}\n", "\n// utils/base64-browser\n\nimport { getBytes } from \"./data.js\";\n\nimport type { BytesLike } from \"./data.js\";\n\n\nexport function decodeBase64(textData: string): Uint8Array {\n    textData = atob(textData);\n    const data = new Uint8Array(textData.length);\n    for (let i = 0; i < textData.length; i++) {\n        data[i] = textData.charCodeAt(i);\n    }\n    return getBytes(data);\n}\n\nexport function encodeBase64(_data: BytesLike): string {\n    const data = getBytes(_data);\n    let textData = \"\";\n    for (let i = 0; i < data.length; i++) {\n        textData += String.fromCharCode(data[i]);\n    }\n    return btoa(textData);\n}\n", "/**\n *  Events allow for applications to use the observer pattern, which\n *  allows subscribing and publishing events, outside the normal\n *  execution paths.\n *\n *  @_section api/utils/events:Events  [about-events]\n */\nimport { defineProperties } from \"./properties.js\";\n\n/**\n *  A callback function called when a an event is triggered.\n */\nexport type Listener = (...args: Array<any>) => void;\n\n/**\n *  An **EventEmitterable** behaves similar to an EventEmitter\n *  except provides async access to its methods.\n *\n *  An EventEmitter implements the observer pattern.\n */\nexport interface EventEmitterable<T> {\n    /**\n     *  Registers a %%listener%% that is called whenever the\n     *  %%event%% occurs until unregistered.\n     */\n    on(event: T, listener: Listener): Promise<this>;\n\n    /**\n     *  Registers a %%listener%% that is called the next time\n     *  %%event%% occurs.\n     */\n    once(event: T, listener: Listener): Promise<this>;\n\n    /**\n     *  Triggers each listener for %%event%% with the %%args%%.\n     */\n    emit(event: T, ...args: Array<any>): Promise<boolean>;\n\n    /**\n     *  Resolves to the number of listeners for %%event%%.\n     */\n    listenerCount(event?: T): Promise<number>;\n\n    /**\n     *  Resolves to the listeners for %%event%%.\n     */\n    listeners(event?: T): Promise<Array<Listener>>;\n\n    /**\n     *  Unregister the %%listener%% for %%event%%. If %%listener%%\n     *  is unspecified, all listeners are unregistered.\n     */\n    off(event: T, listener?: Listener): Promise<this>;\n\n    /**\n     *  Unregister all listeners for %%event%%.\n     */\n    removeAllListeners(event?: T): Promise<this>;\n\n    /**\n     *  Alias for [[on]].\n     */\n    addListener(event: T, listener: Listener): Promise<this>;\n\n    /**\n     *  Alias for [[off]].\n     */\n    removeListener(event: T, listener: Listener): Promise<this>;\n}\n\n/**\n *  When an [[EventEmitterable]] triggers a [[Listener]], the\n *  callback always ahas one additional argument passed, which is\n *  an **EventPayload**.\n */\nexport class EventPayload<T> {\n    /**\n     *  The event filter.\n     */\n    readonly filter!: T;\n\n    /**\n     *  The **EventEmitterable**.\n     */\n    readonly emitter!: EventEmitterable<T>;\n\n    readonly #listener: null | Listener;\n\n    /**\n     *  Create a new **EventPayload** for %%emitter%% with\n     *  the %%listener%% and for %%filter%%.\n     */\n    constructor(emitter: EventEmitterable<T>, listener: null | Listener, filter: T) {\n        this.#listener = listener;\n        defineProperties<EventPayload<any>>(this, { emitter, filter });\n    }\n\n    /**\n     *  Unregister the triggered listener for future events.\n     */\n    async removeListener(): Promise<void> {\n        if (this.#listener == null) { return; }\n        await this.emitter.off(this.filter, this.#listener);\n    }\n}\n", "/**\n *  Using strings in Ethereum (or any security-basd system) requires\n *  additional care. These utilities attempt to mitigate some of the\n *  safety issues as well as provide the ability to recover and analyse\n *  strings.\n *\n *  @_subsection api/utils:Strings and UTF-8  [about-strings]\n */\nimport { getBytes } from \"./data.js\";\nimport { assertArgument, assertNormalize } from \"./errors.js\";\n\nimport type { BytesLike } from \"./index.js\";\n\n\n///////////////////////////////\n\n/**\n *  The stanard normalization forms.\n */\nexport type UnicodeNormalizationForm = \"NFC\" | \"NFD\" | \"NFKC\" | \"NFKD\";\n\n/**\n *  When using the UTF-8 error API the following errors can be intercepted\n *  and processed as the %%reason%% passed to the [[Utf8ErrorFunc]].\n *\n *  **``\"UNEXPECTED_CONTINUE\"``** - a continuation byte was present where there\n *  was nothing to continue.\n *\n *  **``\"BAD_PREFIX\"``** - an invalid (non-continuation) byte to start a\n *  UTF-8 codepoint was found.\n *\n *  **``\"OVERRUN\"``** - the string is too short to process the expected\n *  codepoint length.\n *\n *  **``\"MISSING_CONTINUE\"``** - a missing continuation byte was expected but\n *  not found. The %%offset%% indicates the index the continuation byte\n *  was expected at.\n *\n *  **``\"OUT_OF_RANGE\"``** - the computed code point is outside the range\n *  for UTF-8. The %%badCodepoint%% indicates the computed codepoint, which was\n *  outside the valid UTF-8 range.\n *\n *  **``\"UTF16_SURROGATE\"``** - the UTF-8 strings contained a UTF-16 surrogate\n *  pair. The %%badCodepoint%% is the computed codepoint, which was inside the\n *  UTF-16 surrogate range.\n *\n *  **``\"OVERLONG\"``** - the string is an overlong representation. The\n *  %%badCodepoint%% indicates the computed codepoint, which has already\n *  been bounds checked.\n *\n *\n *  @returns string\n */\nexport type Utf8ErrorReason = \"UNEXPECTED_CONTINUE\" | \"BAD_PREFIX\" | \"OVERRUN\" |\n    \"MISSING_CONTINUE\" | \"OUT_OF_RANGE\" | \"UTF16_SURROGATE\" | \"OVERLONG\";\n\n\n/**\n *  A callback that can be used with [[toUtf8String]] to analysis or\n *  recovery from invalid UTF-8 data.\n *\n *  Parsing UTF-8 data is done through a simple Finite-State Machine (FSM)\n *  which calls the ``Utf8ErrorFunc`` if a fault is detected.\n *\n *  The %%reason%% indicates where in the FSM execution the fault\n *  occurred and the %%offset%% indicates where the input failed.\n *\n *  The %%bytes%% represents the raw UTF-8 data that was provided and\n *  %%output%% is the current array of UTF-8 code-points, which may\n *  be updated by the ``Utf8ErrorFunc``.\n *\n *  The value of the %%badCodepoint%% depends on the %%reason%%. See\n *  [[Utf8ErrorReason]] for details.\n *\n *  The function should return the number of bytes that should be skipped\n *  when control resumes to the FSM.\n */\nexport type Utf8ErrorFunc = (reason: Utf8ErrorReason, offset: number, bytes: Uint8Array, output: Array<number>, badCodepoint?: number) => number;\n\n\nfunction errorFunc(reason: Utf8ErrorReason, offset: number, bytes: Uint8Array, output: Array<number>, badCodepoint?: number): number {\n    assertArgument(false, `invalid codepoint at offset ${ offset }; ${ reason }`, \"bytes\", bytes);\n}\n\nfunction ignoreFunc(reason: Utf8ErrorReason, offset: number, bytes: Uint8Array, output: Array<number>, badCodepoint?: number): number {\n\n    // If there is an invalid prefix (including stray continuation), skip any additional continuation bytes\n    if (reason === \"BAD_PREFIX\" || reason === \"UNEXPECTED_CONTINUE\") {\n        let i = 0;\n        for (let o = offset + 1; o < bytes.length; o++) {\n            if (bytes[o] >> 6 !== 0x02) { break; }\n            i++;\n        }\n        return i;\n    }\n\n    // This byte runs us past the end of the string, so just jump to the end\n    // (but the first byte was read already read and therefore skipped)\n    if (reason === \"OVERRUN\") {\n        return bytes.length - offset - 1;\n    }\n\n    // Nothing to skip\n    return 0;\n}\n\nfunction replaceFunc(reason: Utf8ErrorReason, offset: number, bytes: Uint8Array, output: Array<number>, badCodepoint?: number): number {\n\n    // Overlong representations are otherwise \"valid\" code points; just non-deistingtished\n    if (reason === \"OVERLONG\") {\n        assertArgument(typeof(badCodepoint) === \"number\", \"invalid bad code point for replacement\", \"badCodepoint\", badCodepoint);\n        output.push(badCodepoint);\n        return 0;\n    }\n\n    // Put the replacement character into the output\n    output.push(0xfffd);\n\n    // Otherwise, process as if ignoring errors\n    return ignoreFunc(reason, offset, bytes, output, badCodepoint);\n}\n\n/**\n *  A handful of popular, built-in UTF-8 error handling strategies.\n *\n *  **``\"error\"``** - throws on ANY illegal UTF-8 sequence or\n *  non-canonical (overlong) codepoints (this is the default)\n *\n *  **``\"ignore\"``** - silently drops any illegal UTF-8 sequence\n *  and accepts non-canonical (overlong) codepoints\n *\n *  **``\"replace\"``** - replace any illegal UTF-8 sequence with the\n *  UTF-8 replacement character (i.e. ``\"\\\\ufffd\"``) and accepts\n *  non-canonical (overlong) codepoints\n *\n *  @returns: Record<\"error\" | \"ignore\" | \"replace\", Utf8ErrorFunc>\n */\nexport const Utf8ErrorFuncs: Readonly<Record<\"error\" | \"ignore\" | \"replace\", Utf8ErrorFunc>> = Object.freeze({\n    error: errorFunc,\n    ignore: ignoreFunc,\n    replace: replaceFunc\n});\n\n// http://stackoverflow.com/questions/13356493/decode-utf-8-with-javascript#13691499\nfunction getUtf8CodePoints(_bytes: BytesLike, onError?: Utf8ErrorFunc): Array<number> {\n    if (onError == null) { onError = Utf8ErrorFuncs.error; }\n\n    const bytes = getBytes(_bytes, \"bytes\");\n\n    const result: Array<number> = [];\n    let i = 0;\n\n    // Invalid bytes are ignored\n    while(i < bytes.length) {\n\n        const c = bytes[i++];\n\n        // 0xxx xxxx\n        if (c >> 7 === 0) {\n            result.push(c);\n            continue;\n        }\n\n        // Multibyte; how many bytes left for this character?\n        let extraLength: null | number = null;\n        let overlongMask: null | number = null;\n\n        // 110x xxxx 10xx xxxx\n        if ((c & 0xe0) === 0xc0) {\n            extraLength = 1;\n            overlongMask = 0x7f;\n\n        // 1110 xxxx 10xx xxxx 10xx xxxx\n        } else if ((c & 0xf0) === 0xe0) {\n            extraLength = 2;\n            overlongMask = 0x7ff;\n\n        // 1111 0xxx 10xx xxxx 10xx xxxx 10xx xxxx\n        } else if ((c & 0xf8) === 0xf0) {\n            extraLength = 3;\n            overlongMask = 0xffff;\n\n        } else {\n            if ((c & 0xc0) === 0x80) {\n                i += onError(\"UNEXPECTED_CONTINUE\", i - 1, bytes, result);\n            } else {\n                i += onError(\"BAD_PREFIX\", i - 1, bytes, result);\n            }\n            continue;\n        }\n\n        // Do we have enough bytes in our data?\n        if (i - 1 + extraLength >= bytes.length) {\n            i += onError(\"OVERRUN\", i - 1, bytes, result);\n            continue;\n        }\n\n        // Remove the length prefix from the char\n        let res: null | number = c & ((1 << (8 - extraLength - 1)) - 1);\n\n        for (let j = 0; j < extraLength; j++) {\n            let nextChar = bytes[i];\n\n            // Invalid continuation byte\n            if ((nextChar & 0xc0) != 0x80) {\n                i += onError(\"MISSING_CONTINUE\", i, bytes, result);\n                res = null;\n                break;\n            };\n\n            res = (res << 6) | (nextChar & 0x3f);\n            i++;\n        }\n\n        // See above loop for invalid continuation byte\n        if (res === null) { continue; }\n\n        // Maximum code point\n        if (res > 0x10ffff) {\n            i += onError(\"OUT_OF_RANGE\", i - 1 - extraLength, bytes, result, res);\n            continue;\n        }\n\n        // Reserved for UTF-16 surrogate halves\n        if (res >= 0xd800 && res <= 0xdfff) {\n            i += onError(\"UTF16_SURROGATE\", i - 1 - extraLength, bytes, result, res);\n            continue;\n        }\n\n        // Check for overlong sequences (more bytes than needed)\n        if (res <= overlongMask) {\n            i += onError(\"OVERLONG\", i - 1 - extraLength, bytes, result, res);\n            continue;\n        }\n\n        result.push(res);\n    }\n\n    return result;\n}\n\n// http://stackoverflow.com/questions/18729405/how-to-convert-utf8-string-to-byte-array\n\n/**\n *  Returns the UTF-8 byte representation of %%str%%.\n *\n *  If %%form%% is specified, the string is normalized.\n */\nexport function toUtf8Bytes(str: string, form?: UnicodeNormalizationForm): Uint8Array {\n    assertArgument(typeof(str) === \"string\", \"invalid string value\", \"str\", str);\n\n    if (form != null) {\n        assertNormalize(form);\n        str = str.normalize(form);\n    }\n\n    let result: Array<number> = [];\n    for (let i = 0; i < str.length; i++) {\n        const c = str.charCodeAt(i);\n\n        if (c < 0x80) {\n            result.push(c);\n\n        } else if (c < 0x800) {\n            result.push((c >> 6) | 0xc0);\n            result.push((c & 0x3f) | 0x80);\n\n        } else if ((c & 0xfc00) == 0xd800) {\n            i++;\n            const c2 = str.charCodeAt(i);\n\n            assertArgument(i < str.length && ((c2 & 0xfc00) === 0xdc00),\n                \"invalid surrogate pair\", \"str\", str);\n\n            // Surrogate Pair\n            const pair = 0x10000 + ((c & 0x03ff) << 10) + (c2 & 0x03ff);\n            result.push((pair >> 18) | 0xf0);\n            result.push(((pair >> 12) & 0x3f) | 0x80);\n            result.push(((pair >> 6) & 0x3f) | 0x80);\n            result.push((pair & 0x3f) | 0x80);\n\n        } else {\n            result.push((c >> 12) | 0xe0);\n            result.push(((c >> 6) & 0x3f) | 0x80);\n            result.push((c & 0x3f) | 0x80);\n        }\n    }\n\n    return new Uint8Array(result);\n};\n\n//export \nfunction _toUtf8String(codePoints: Array<number>): string {\n    return codePoints.map((codePoint) => {\n        if (codePoint <= 0xffff) {\n            return String.fromCharCode(codePoint);\n        }\n        codePoint -= 0x10000;\n        return String.fromCharCode(\n            (((codePoint >> 10) & 0x3ff) + 0xd800),\n            ((codePoint & 0x3ff) + 0xdc00)\n        );\n    }).join(\"\");\n}\n\n/**\n *  Returns the string represented by the UTF-8 data %%bytes%%.\n *\n *  When %%onError%% function is specified, it is called on UTF-8\n *  errors allowing recovery using the [[Utf8ErrorFunc]] API.\n *  (default: [error](Utf8ErrorFuncs))\n */\nexport function toUtf8String(bytes: BytesLike, onError?: Utf8ErrorFunc): string {\n    return _toUtf8String(getUtf8CodePoints(bytes, onError));\n}\n\n/**\n *  Returns the UTF-8 code-points for %%str%%.\n *\n *  If %%form%% is specified, the string is normalized.\n */\nexport function toUtf8CodePoints(str: string, form?: UnicodeNormalizationForm): Array<number> {\n    return getUtf8CodePoints(toUtf8Bytes(str, form));\n}\n\n", "import { assert } from \"./errors.js\";\n\nimport type {\n    FetchGetUrlFunc, FetchRequest, FetchCancelSignal, GetUrlResponse\n} from \"./fetch.js\";\n\n\ndeclare global {\n    class Headers {\n        constructor(values: Array<[ string, string ]>);\n        forEach(func: (v: string, k: string) => void): void;\n    }\n\n    class Response {\n        status: number;\n        statusText: string;\n        headers: Headers;\n        arrayBuffer(): Promise<ArrayBuffer>;\n    }\n\n    type FetchInit = {\n        method?: string,\n        headers?: Headers,\n        body?: Uint8Array\n    };\n\n    function fetch(url: string, init: FetchInit): Promise<Response>;\n}\n\n// @TODO: timeout is completely ignored; start a Promise.any with a reject?\n\nexport function createGetUrl(options?: Record<string, any>): FetchGetUrlFunc {\n\n    async function getUrl(req: FetchRequest, _signal?: FetchCancelSignal): Promise<GetUrlResponse> {\n        const protocol = req.url.split(\":\")[0].toLowerCase();\n\n        assert(protocol === \"http\" || protocol === \"https\", `unsupported protocol ${ protocol }`, \"UNSUPPORTED_OPERATION\", {\n            info: { protocol },\n            operation: \"request\"\n        });\n\n        assert(protocol === \"https\" || !req.credentials || req.allowInsecureAuthentication, \"insecure authorized connections unsupported\", \"UNSUPPORTED_OPERATION\", {\n            operation: \"request\"\n        });\n\n        let signal: undefined | AbortSignal = undefined;\n        if (_signal) {\n            const controller = new AbortController();\n            signal = controller.signal;\n            _signal.addListener(() => { controller.abort(); });\n        }\n\n        const init = {\n            method: req.method,\n            headers: new Headers(Array.from(req)),\n            body: req.body || undefined,\n            signal\n        };\n\n        const resp = await fetch(req.url, init);\n\n        const headers: Record<string, string> = { };\n        resp.headers.forEach((value, key) => {\n            headers[key.toLowerCase()] = value;\n        });\n\n        const respBody = await resp.arrayBuffer();\n        const body = (respBody == null) ? null: new Uint8Array(respBody);\n\n        return {\n            statusCode: resp.status,\n            statusMessage: resp.statusText,\n            headers, body\n        };\n    }\n\n    return getUrl;\n}\n\n// @TODO: remove in v7; provided for backwards compat\nconst defaultGetUrl: FetchGetUrlFunc = createGetUrl({ });\n\nexport async function getUrl(req: FetchRequest, _signal?: FetchCancelSignal): Promise<GetUrlResponse> {\n    return defaultGetUrl(req, _signal);\n}\n\n", "/**\n *  Fetching content from the web is environment-specific, so Ethers\n *  provides an abstraction that each environment can implement to provide\n *  this service.\n *\n *  On [Node.js](link-node), the ``http`` and ``https`` libs are used to\n *  create a request object, register event listeners and process data\n *  and populate the [[FetchResponse]].\n *\n *  In a browser, the [DOM fetch](link-js-fetch) is used, and the resulting\n *  ``Promise`` is waited on to retrieve the payload.\n *\n *  The [[FetchRequest]] is responsible for handling many common situations,\n *  such as redirects, server throttling, authentication, etc.\n *\n *  It also handles common gateways, such as IPFS and data URIs.\n *\n *  @_section api/utils/fetching:Fetching Web Content  [about-fetch]\n */\nimport { decodeBase64, encodeBase64 } from \"./base64.js\";\nimport { hexlify } from \"./data.js\";\nimport { assert, assertArgument } from \"./errors.js\";\nimport { defineProperties } from \"./properties.js\";\nimport { toUtf8Bytes, toUtf8String } from \"./utf8.js\";\n\nimport { createGetUrl } from \"./geturl.js\";\n\n/**\n *  An environment's implementation of ``getUrl`` must return this type.\n */\nexport type GetUrlResponse = {\n    statusCode: number,\n    statusMessage: string,\n    headers: Record<string, string>,\n    body: null | Uint8Array\n};\n\n/**\n *  This can be used to control how throttling is handled in\n *  [[FetchRequest-setThrottleParams]].\n */\nexport type FetchThrottleParams = {\n    maxAttempts?: number;\n    slotInterval?: number;\n};\n\n/**\n *  Called before any network request, allowing updated headers (e.g. Bearer tokens), etc.\n */\nexport type FetchPreflightFunc = (req: FetchRequest) => Promise<FetchRequest>;\n\n/**\n *  Called on the response, allowing client-based throttling logic or post-processing.\n */\nexport type FetchProcessFunc = (req: FetchRequest, resp: FetchResponse) => Promise<FetchResponse>;\n\n/**\n *  Called prior to each retry; return true to retry, false to abort.\n */\nexport type FetchRetryFunc = (req: FetchRequest, resp: FetchResponse, attempt: number) => Promise<boolean>;\n\n/**\n *  Called on Gateway URLs.\n */\nexport type FetchGatewayFunc = (url: string, signal?: FetchCancelSignal) => Promise<FetchRequest | FetchResponse>;\n\n/**\n *  Used to perform a fetch; use this to override the underlying network\n *  fetch layer. In NodeJS, the default uses the \"http\" and \"https\" libraries\n *  and in the browser ``fetch`` is used. If you wish to use Axios, this is\n *  how you would register it.\n */\nexport type FetchGetUrlFunc = (req: FetchRequest, signal?: FetchCancelSignal) => Promise<GetUrlResponse>;\n\n\nconst MAX_ATTEMPTS = 12;\nconst SLOT_INTERVAL = 250;\n\n// The global FetchGetUrlFunc implementation.\nlet defaultGetUrlFunc: FetchGetUrlFunc = createGetUrl();\n\nconst reData = new RegExp(\"^data:([^;:]*)?(;base64)?,(.*)$\", \"i\");\nconst reIpfs = new RegExp(\"^ipfs:/\\/(ipfs/)?(.*)$\", \"i\");\n\n// If locked, new Gateways cannot be added\nlet locked = false;\n\n// https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URLs\nasync function dataGatewayFunc(url: string, signal?: FetchCancelSignal): Promise<FetchResponse> {\n    try {\n        const match = url.match(reData);\n        if (!match) { throw new Error(\"invalid data\"); }\n        return new FetchResponse(200, \"OK\", {\n            \"content-type\": (match[1] || \"text/plain\"),\n        }, (match[2] ? decodeBase64(match[3]): unpercent(match[3])));\n    } catch (error) {\n        return new FetchResponse(599, \"BAD REQUEST (invalid data: URI)\", { }, null, new FetchRequest(url));\n    }\n}\n\n/**\n *  Returns a [[FetchGatewayFunc]] for fetching content from a standard\n *  IPFS gateway hosted at %%baseUrl%%.\n */\nfunction getIpfsGatewayFunc(baseUrl: string): FetchGatewayFunc {\n    async function gatewayIpfs(url: string, signal?: FetchCancelSignal): Promise<FetchRequest | FetchResponse> {\n        try {\n            const match = url.match(reIpfs);\n            if (!match) { throw new Error(\"invalid link\"); }\n            return new FetchRequest(`${ baseUrl }${ match[2] }`);\n        } catch (error) {\n            return new FetchResponse(599, \"BAD REQUEST (invalid IPFS URI)\", { }, null, new FetchRequest(url));\n        }\n    }\n\n    return gatewayIpfs;\n}\n\nconst Gateways: Record<string, FetchGatewayFunc> = {\n    \"data\": dataGatewayFunc,\n    \"ipfs\": getIpfsGatewayFunc(\"https:/\\/gateway.ipfs.io/ipfs/\")\n};\n\nconst fetchSignals: WeakMap<FetchRequest, () => void> = new WeakMap();\n\n/**\n *  @_ignore\n */\nexport class FetchCancelSignal {\n    #listeners: Array<() => void>;\n    #cancelled: boolean;\n\n    constructor(request: FetchRequest) {\n        this.#listeners = [ ];\n        this.#cancelled = false;\n\n        fetchSignals.set(request, () => {\n            if (this.#cancelled) { return; }\n            this.#cancelled = true;\n\n            for (const listener of this.#listeners) {\n                setTimeout(() => { listener(); }, 0);\n            }\n            this.#listeners = [ ];\n        });\n    }\n\n    addListener(listener: () => void): void {\n        assert(!this.#cancelled, \"singal already cancelled\", \"UNSUPPORTED_OPERATION\", {\n            operation: \"fetchCancelSignal.addCancelListener\"\n        });\n        this.#listeners.push(listener);\n    }\n\n    get cancelled(): boolean { return this.#cancelled; }\n\n    checkSignal(): void {\n        assert(!this.cancelled, \"cancelled\", \"CANCELLED\", { });\n    }\n}\n\n// Check the signal, throwing if it is cancelled\nfunction checkSignal(signal?: FetchCancelSignal): FetchCancelSignal {\n    if (signal == null) { throw new Error(\"missing signal; should not happen\"); }\n    signal.checkSignal();\n    return signal;\n}\n\n/**\n *  Represents a request for a resource using a URI.\n *\n *  By default, the supported schemes are ``HTTP``, ``HTTPS``, ``data:``,\n *  and ``IPFS:``.\n *\n *  Additional schemes can be added globally using [[registerGateway]].\n *\n *  @example:\n *    req = new FetchRequest(\"https://www.ricmoo.com\")\n *    resp = await req.send()\n *    resp.body.length\n *    //_result:\n */\nexport class FetchRequest implements Iterable<[ key: string, value: string ]> {\n    #allowInsecure: boolean;\n    #gzip: boolean;\n    #headers: Record<string, string>;\n    #method: string;\n    #timeout: number;\n    #url: string;\n\n    #body?: Uint8Array;\n    #bodyType?: string;\n    #creds?: string;\n\n    // Hooks\n    #preflight?: null | FetchPreflightFunc;\n    #process?: null | FetchProcessFunc;\n    #retry?: null | FetchRetryFunc;\n\n    #signal?: FetchCancelSignal;\n\n    #throttle: Required<FetchThrottleParams>;\n\n    #getUrlFunc: null | FetchGetUrlFunc;\n\n    /**\n     *  The fetch URL to request.\n     */\n    get url(): string { return this.#url; }\n    set url(url: string) {\n        this.#url = String(url);\n    }\n\n    /**\n     *  The fetch body, if any, to send as the request body. //(default: null)//\n     *\n     *  When setting a body, the intrinsic ``Content-Type`` is automatically\n     *  set and will be used if **not overridden** by setting a custom\n     *  header.\n     *\n     *  If %%body%% is null, the body is cleared (along with the\n     *  intrinsic ``Content-Type``).\n     *\n     *  If %%body%% is a string, the intrinsic ``Content-Type`` is set to\n     *  ``text/plain``.\n     *\n     *  If %%body%% is a Uint8Array, the intrinsic ``Content-Type`` is set to\n     *  ``application/octet-stream``.\n     *\n     *  If %%body%% is any other object, the intrinsic ``Content-Type`` is\n     *  set to ``application/json``.\n     */\n    get body(): null | Uint8Array {\n        if (this.#body == null) { return null; }\n        return new Uint8Array(this.#body);\n    }\n    set body(body: null | string | Readonly<object> | Readonly<Uint8Array>) {\n        if (body == null) {\n            this.#body = undefined;\n            this.#bodyType = undefined;\n        } else if (typeof(body) === \"string\") {\n            this.#body = toUtf8Bytes(body);\n            this.#bodyType = \"text/plain\";\n        } else if (body instanceof Uint8Array) {\n            this.#body = body;\n            this.#bodyType = \"application/octet-stream\";\n        } else if (typeof(body) === \"object\") {\n            this.#body = toUtf8Bytes(JSON.stringify(body));\n            this.#bodyType = \"application/json\";\n        } else {\n            throw new Error(\"invalid body\");\n        }\n    }\n\n    /**\n     *  Returns true if the request has a body.\n     */\n    hasBody(): this is (FetchRequest & { body: Uint8Array }) {\n        return (this.#body != null);\n    }\n\n    /**\n     *  The HTTP method to use when requesting the URI. If no method\n     *  has been explicitly set, then ``GET`` is used if the body is\n     *  null and ``POST`` otherwise.\n     */\n    get method(): string {\n        if (this.#method) { return this.#method; }\n        if (this.hasBody()) { return \"POST\"; }\n        return \"GET\";\n    }\n    set method(method: null | string) {\n        if (method == null) { method = \"\"; }\n        this.#method = String(method).toUpperCase();\n    }\n\n    /**\n     *  The headers that will be used when requesting the URI. All\n     *  keys are lower-case.\n     *\n     *  This object is a copy, so any changes will **NOT** be reflected\n     *  in the ``FetchRequest``.\n     *\n     *  To set a header entry, use the ``setHeader`` method.\n     */\n    get headers(): Record<string, string> {\n        const headers = Object.assign({ }, this.#headers);\n\n        if (this.#creds) {\n            headers[\"authorization\"] = `Basic ${ encodeBase64(toUtf8Bytes(this.#creds)) }`;\n        };\n\n        if (this.allowGzip) {\n            headers[\"accept-encoding\"] = \"gzip\";\n        }\n\n        if (headers[\"content-type\"] == null && this.#bodyType) {\n            headers[\"content-type\"] = this.#bodyType;\n        }\n        if (this.body) { headers[\"content-length\"] = String(this.body.length); }\n\n        return headers;\n    }\n\n    /**\n     *  Get the header for %%key%%, ignoring case.\n     */\n    getHeader(key: string): string {\n        return this.headers[key.toLowerCase()];\n    }\n\n    /**\n     *  Set the header for %%key%% to %%value%%. All values are coerced\n     *  to a string.\n     */\n    setHeader(key: string, value: string | number): void {\n        this.#headers[String(key).toLowerCase()] = String(value);\n    }\n\n    /**\n     *  Clear all headers, resetting all intrinsic headers.\n     */\n    clearHeaders(): void {\n        this.#headers = { };\n    }\n\n    [Symbol.iterator](): Iterator<[ key: string, value: string ]> {\n        const headers = this.headers;\n        const keys = Object.keys(headers);\n        let index = 0;\n        return {\n            next: () => {\n                if (index < keys.length) {\n                    const key = keys[index++];\n                    return {\n                        value: [ key, headers[key] ], done: false\n                    }\n                }\n                return { value: undefined, done: true };\n            }\n        };\n    }\n\n    /**\n     *  The value that will be sent for the ``Authorization`` header.\n     *\n     *  To set the credentials, use the ``setCredentials`` method.\n     */\n    get credentials(): null | string {\n        return this.#creds || null;\n    }\n\n    /**\n     *  Sets an ``Authorization`` for %%username%% with %%password%%.\n     */\n    setCredentials(username: string, password: string): void {\n        assertArgument(!username.match(/:/), \"invalid basic authentication username\", \"username\", \"[REDACTED]\");\n        this.#creds = `${ username }:${ password }`;\n    }\n\n    /**\n     *  Enable and request gzip-encoded responses. The response will\n     *  automatically be decompressed. //(default: true)//\n     */\n    get allowGzip(): boolean {\n        return this.#gzip;\n    }\n    set allowGzip(value: boolean) {\n        this.#gzip = !!value;\n    }\n\n    /**\n     *  Allow ``Authentication`` credentials to be sent over insecure\n     *  channels. //(default: false)//\n     */\n    get allowInsecureAuthentication(): boolean {\n        return !!this.#allowInsecure;\n    }\n    set allowInsecureAuthentication(value: boolean) {\n        this.#allowInsecure = !!value;\n    }\n\n    /**\n     *  The timeout (in milliseconds) to wait for a complete response.\n     *  //(default: 5 minutes)//\n     */\n    get timeout(): number { return this.#timeout; }\n    set timeout(timeout: number) {\n        assertArgument(timeout >= 0, \"timeout must be non-zero\", \"timeout\", timeout);\n        this.#timeout = timeout;\n    }\n\n    /**\n     *  This function is called prior to each request, for example\n     *  during a redirection or retry in case of server throttling.\n     *\n     *  This offers an opportunity to populate headers or update\n     *  content before sending a request.\n     */\n    get preflightFunc(): null | FetchPreflightFunc {\n        return this.#preflight || null;\n    }\n    set preflightFunc(preflight: null | FetchPreflightFunc) {\n        this.#preflight = preflight;\n    }\n\n    /**\n     *  This function is called after each response, offering an\n     *  opportunity to provide client-level throttling or updating\n     *  response data.\n     *\n     *  Any error thrown in this causes the ``send()`` to throw.\n     *\n     *  To schedule a retry attempt (assuming the maximum retry limit\n     *  has not been reached), use [[response.throwThrottleError]].\n     */\n    get processFunc(): null | FetchProcessFunc {\n        return this.#process || null;\n    }\n    set processFunc(process: null | FetchProcessFunc) {\n        this.#process = process;\n    }\n\n    /**\n     *  This function is called on each retry attempt.\n     */\n    get retryFunc(): null | FetchRetryFunc {\n        return this.#retry || null;\n    }\n    set retryFunc(retry: null | FetchRetryFunc) {\n        this.#retry = retry;\n    }\n\n    /**\n     *  This function is called to fetch content from HTTP and\n     *  HTTPS URLs and is platform specific (e.g. nodejs vs\n     *  browsers).\n     *\n     *  This is by default the currently registered global getUrl\n     *  function, which can be changed using [[registerGetUrl]].\n     *  If this has been set, setting is to ``null`` will cause\n     *  this FetchRequest (and any future clones) to revert back to\n     *  using the currently registered global getUrl function.\n     *\n     *  Setting this is generally not necessary, but may be useful\n     *  for developers that wish to intercept requests or to\n     *  configurege a proxy or other agent.\n     */\n    get getUrlFunc(): FetchGetUrlFunc {\n        return this.#getUrlFunc || defaultGetUrlFunc;\n    }\n    set getUrlFunc(value: null | FetchGetUrlFunc) {\n        this.#getUrlFunc = value;\n    }\n\n    /**\n     *  Create a new FetchRequest instance with default values.\n     *\n     *  Once created, each property may be set before issuing a\n     *  ``.send()`` to make the request.\n     */\n    constructor(url: string) {\n        this.#url = String(url);\n\n        this.#allowInsecure = false;\n        this.#gzip = true;\n        this.#headers = { };\n        this.#method = \"\";\n        this.#timeout = 300000;\n\n        this.#throttle = {\n            slotInterval: SLOT_INTERVAL,\n            maxAttempts: MAX_ATTEMPTS\n        };\n\n        this.#getUrlFunc = null;\n    }\n\n    toString(): string {\n        return `<FetchRequest method=${ JSON.stringify(this.method) } url=${ JSON.stringify(this.url) } headers=${ JSON.stringify(this.headers) } body=${ this.#body ? hexlify(this.#body): \"null\" }>`;\n    }\n\n    /**\n     *  Update the throttle parameters used to determine maximum\n     *  attempts and exponential-backoff properties.\n     */\n    setThrottleParams(params: FetchThrottleParams): void {\n        if (params.slotInterval != null) {\n            this.#throttle.slotInterval = params.slotInterval;\n        }\n        if (params.maxAttempts != null) {\n            this.#throttle.maxAttempts = params.maxAttempts;\n        }\n    }\n\n    async #send(attempt: number, expires: number, delay: number, _request: FetchRequest, _response: FetchResponse): Promise<FetchResponse> {\n        if (attempt >= this.#throttle.maxAttempts) {\n            return _response.makeServerError(\"exceeded maximum retry limit\");\n        }\n\n        assert(getTime() <= expires, \"timeout\", \"TIMEOUT\", {\n            operation: \"request.send\", reason: \"timeout\", request: _request\n        });\n\n        if (delay > 0) { await wait(delay); }\n\n        let req = this.clone();\n        const scheme = (req.url.split(\":\")[0] || \"\").toLowerCase();\n\n        // Process any Gateways\n        if (scheme in Gateways) {\n            const result = await Gateways[scheme](req.url, checkSignal(_request.#signal));\n            if (result instanceof FetchResponse) {\n                let response = result;\n\n                if (this.processFunc) {\n                    checkSignal(_request.#signal);\n                    try {\n                        response = await this.processFunc(req, response);\n                    } catch (error: any) {\n\n                        // Something went wrong during processing; throw a 5xx server error\n                        if (error.throttle == null || typeof(error.stall) !== \"number\") {\n                            response.makeServerError(\"error in post-processing function\", error).assertOk();\n                        }\n\n                        // Ignore throttling\n                    }\n                }\n\n                return response;\n            }\n            req = result;\n        }\n\n        // We have a preflight function; update the request\n        if (this.preflightFunc) { req = await this.preflightFunc(req); }\n\n        const resp = await this.getUrlFunc(req, checkSignal(_request.#signal));\n        let response = new FetchResponse(resp.statusCode, resp.statusMessage, resp.headers, resp.body, _request);\n\n        if (response.statusCode === 301 || response.statusCode === 302) {\n\n            // Redirect\n            try {\n                const location = response.headers.location || \"\";\n                return req.redirect(location).#send(attempt + 1, expires, 0, _request, response);\n            } catch (error) { }\n\n            // Things won't get any better on another attempt; abort\n            return response;\n\n        } else if (response.statusCode === 429) {\n\n            // Throttle\n            if (this.retryFunc == null || (await this.retryFunc(req, response, attempt))) {\n                const retryAfter = response.headers[\"retry-after\"];\n                let delay = this.#throttle.slotInterval * Math.trunc(Math.random() * Math.pow(2, attempt));\n                if (typeof(retryAfter) === \"string\" && retryAfter.match(/^[1-9][0-9]*$/)) {\n                    delay = parseInt(retryAfter);\n                }\n                return req.clone().#send(attempt + 1, expires, delay, _request, response);\n            }\n        }\n\n        if (this.processFunc) {\n            checkSignal(_request.#signal);\n            try {\n                response = await this.processFunc(req, response);\n            } catch (error: any) {\n\n                // Something went wrong during processing; throw a 5xx server error\n                if (error.throttle == null || typeof(error.stall) !== \"number\") {\n                    response.makeServerError(\"error in post-processing function\", error).assertOk();\n                }\n\n                // Throttle\n                let delay = this.#throttle.slotInterval * Math.trunc(Math.random() * Math.pow(2, attempt));;\n                if (error.stall >= 0) { delay = error.stall; }\n\n                return req.clone().#send(attempt + 1, expires, delay, _request, response);\n            }\n        }\n\n        return response;\n    }\n\n    /**\n     *  Resolves to the response by sending the request.\n     */\n    send(): Promise<FetchResponse> {\n        assert(this.#signal == null, \"request already sent\", \"UNSUPPORTED_OPERATION\", { operation: \"fetchRequest.send\" });\n        this.#signal = new FetchCancelSignal(this);\n        return this.#send(0, getTime() + this.timeout, 0, this, new FetchResponse(0, \"\", { }, null, this));\n    }\n\n    /**\n     *  Cancels the inflight response, causing a ``CANCELLED``\n     *  error to be rejected from the [[send]].\n     */\n    cancel(): void {\n        assert(this.#signal != null, \"request has not been sent\", \"UNSUPPORTED_OPERATION\", { operation: \"fetchRequest.cancel\" });\n        const signal = fetchSignals.get(this);\n        if (!signal) { throw new Error(\"missing signal; should not happen\"); }\n        signal();\n    }\n\n    /**\n     *  Returns a new [[FetchRequest]] that represents the redirection\n     *  to %%location%%.\n     */\n    redirect(location: string): FetchRequest {\n        // Redirection; for now we only support absolute locations\n        const current = this.url.split(\":\")[0].toLowerCase();\n        const target = location.split(\":\")[0].toLowerCase();\n\n        // Don't allow redirecting:\n        // - non-GET requests\n        // - downgrading the security (e.g. https => http)\n        // - to non-HTTP (or non-HTTPS) protocols [this could be relaxed?]\n        assert(this.method === \"GET\" && (current !== \"https\" || target !== \"http\") && location.match(/^https?:/), `unsupported redirect`, \"UNSUPPORTED_OPERATION\", {\n            operation: `redirect(${ this.method } ${ JSON.stringify(this.url) } => ${ JSON.stringify(location) })`\n        });\n\n        // Create a copy of this request, with a new URL\n        const req = new FetchRequest(location);\n        req.method = \"GET\";\n        req.allowGzip = this.allowGzip;\n        req.timeout = this.timeout;\n        req.#headers = Object.assign({ }, this.#headers);\n        if (this.#body) { req.#body = new Uint8Array(this.#body); }\n        req.#bodyType = this.#bodyType;\n\n        // Do not forward credentials unless on the same domain; only absolute\n        //req.allowInsecure = false;\n        // paths are currently supported; may want a way to specify to forward?\n        //setStore(req.#props, \"creds\", getStore(this.#pros, \"creds\"));\n\n        return req;\n    }\n\n    /**\n     *  Create a new copy of this request.\n     */\n    clone(): FetchRequest {\n        const clone = new FetchRequest(this.url);\n\n        // Preserve \"default method\" (i.e. null)\n        clone.#method = this.#method;\n\n        // Preserve \"default body\" with type, copying the Uint8Array is present\n        if (this.#body) { clone.#body = this.#body; }\n        clone.#bodyType = this.#bodyType;\n\n        // Preserve \"default headers\"\n        clone.#headers = Object.assign({ }, this.#headers);\n\n        // Credentials is readonly, so we copy internally\n        clone.#creds = this.#creds;\n\n        if (this.allowGzip) { clone.allowGzip = true; }\n\n        clone.timeout = this.timeout;\n        if (this.allowInsecureAuthentication) { clone.allowInsecureAuthentication = true; }\n\n        clone.#preflight = this.#preflight;\n        clone.#process = this.#process;\n        clone.#retry = this.#retry;\n\n        clone.#getUrlFunc = this.#getUrlFunc;\n\n        return clone;\n    }\n\n    /**\n     *  Locks all static configuration for gateways and FetchGetUrlFunc\n     *  registration.\n     */\n    static lockConfig(): void {\n        locked = true;\n    }\n\n    /**\n     *  Get the current Gateway function for %%scheme%%.\n     */\n    static getGateway(scheme: string): null | FetchGatewayFunc {\n        return Gateways[scheme.toLowerCase()] || null;\n    }\n\n    /**\n     *  Use the %%func%% when fetching URIs using %%scheme%%.\n     *\n     *  This method affects all requests globally.\n     *\n     *  If [[lockConfig]] has been called, no change is made and this\n     *  throws.\n     */\n    static registerGateway(scheme: string, func: FetchGatewayFunc): void {\n        scheme = scheme.toLowerCase();\n        if (scheme === \"http\" || scheme === \"https\") {\n            throw new Error(`cannot intercept ${ scheme }; use registerGetUrl`);\n        }\n        if (locked) { throw new Error(\"gateways locked\"); }\n        Gateways[scheme] = func;\n    }\n\n    /**\n     *  Use %%getUrl%% when fetching URIs over HTTP and HTTPS requests.\n     *\n     *  This method affects all requests globally.\n     *\n     *  If [[lockConfig]] has been called, no change is made and this\n     *  throws.\n     */\n    static registerGetUrl(getUrl: FetchGetUrlFunc): void {\n        if (locked) { throw new Error(\"gateways locked\"); }\n        defaultGetUrlFunc = getUrl;\n    }\n\n    /**\n     *  Creates a getUrl function that fetches content from HTTP and\n     *  HTTPS URLs.\n     *\n     *  The available %%options%% are dependent on the platform\n     *  implementation of the default getUrl function.\n     *\n     *  This is not generally something that is needed, but is useful\n     *  when trying to customize simple behaviour when fetching HTTP\n     *  content.\n     */\n    static createGetUrlFunc(options?: Record<string, any>): FetchGetUrlFunc {\n        return createGetUrl(options);\n    }\n\n    /**\n     *  Creates a function that can \"fetch\" data URIs.\n     *\n     *  Note that this is automatically done internally to support\n     *  data URIs, so it is not necessary to register it.\n     *\n     *  This is not generally something that is needed, but may\n     *  be useful in a wrapper to perfom custom data URI functionality.\n     */\n    static createDataGateway(): FetchGatewayFunc {\n        return dataGatewayFunc;\n    }\n\n    /**\n     *  Creates a function that will fetch IPFS (unvalidated) from\n     *  a custom gateway baseUrl.\n     *\n     *  The default IPFS gateway used internally is\n     *  ``\"https:/\\/gateway.ipfs.io/ipfs/\"``.\n     */\n    static createIpfsGatewayFunc(baseUrl: string): FetchGatewayFunc {\n        return getIpfsGatewayFunc(baseUrl);\n    }\n}\n\n\ninterface ThrottleError extends Error {\n    stall: number;\n    throttle: true;\n};\n\n/**\n *  The response for a FetchRequest.\n */\nexport class FetchResponse implements Iterable<[ key: string, value: string ]> {\n    #statusCode: number;\n    #statusMessage: string;\n    #headers: Record<string, string>;\n    #body: null | Readonly<Uint8Array>;\n    #request: null | FetchRequest;\n\n    #error: { error?: Error, message: string };\n\n    toString(): string {\n        return `<FetchResponse status=${ this.statusCode } body=${ this.#body ? hexlify(this.#body): \"null\" }>`;\n    }\n\n    /**\n     *  The response status code.\n     */\n    get statusCode(): number { return this.#statusCode; }\n\n    /**\n     *  The response status message.\n     */\n    get statusMessage(): string { return this.#statusMessage; }\n\n    /**\n     *  The response headers. All keys are lower-case.\n     */\n    get headers(): Record<string, string> { return Object.assign({ }, this.#headers); }\n\n    /**\n     *  The response body, or ``null`` if there was no body.\n     */\n    get body(): null | Readonly<Uint8Array> {\n        return (this.#body == null) ? null: new Uint8Array(this.#body);\n    }\n\n    /**\n     *  The response body as a UTF-8 encoded string, or the empty\n     *  string (i.e. ``\"\"``) if there was no body.\n     *\n     *  An error is thrown if the body is invalid UTF-8 data.\n     */\n    get bodyText(): string {\n        try {\n            return (this.#body == null) ? \"\": toUtf8String(this.#body);\n        } catch (error) {\n            assert(false, \"response body is not valid UTF-8 data\", \"UNSUPPORTED_OPERATION\", {\n                operation: \"bodyText\", info: { response: this }\n            });\n        }\n    }\n\n    /**\n     *  The response body, decoded as JSON.\n     *\n     *  An error is thrown if the body is invalid JSON-encoded data\n     *  or if there was no body.\n     */\n    get bodyJson(): any {\n        try {\n            return JSON.parse(this.bodyText);\n        } catch (error) {\n            assert(false, \"response body is not valid JSON\", \"UNSUPPORTED_OPERATION\", {\n                operation: \"bodyJson\", info: { response: this }\n            });\n        }\n    }\n\n    [Symbol.iterator](): Iterator<[ key: string, value: string ]> {\n        const headers = this.headers;\n        const keys = Object.keys(headers);\n        let index = 0;\n        return {\n            next: () => {\n                if (index < keys.length) {\n                    const key = keys[index++];\n                    return {\n                        value: [ key, headers[key] ], done: false\n                    }\n                }\n                return { value: undefined, done: true };\n            }\n        };\n    }\n\n    constructor(statusCode: number, statusMessage: string, headers: Readonly<Record<string, string>>, body: null | Uint8Array, request?: FetchRequest) {\n        this.#statusCode = statusCode;\n        this.#statusMessage = statusMessage;\n        this.#headers = Object.keys(headers).reduce((accum, k) => {\n            accum[k.toLowerCase()] = String(headers[k]);\n            return accum;\n        }, <Record<string, string>>{ });\n        this.#body = ((body == null) ? null: new Uint8Array(body));\n        this.#request = (request || null);\n\n        this.#error = { message: \"\" };\n    }\n\n    /**\n     *  Return a Response with matching headers and body, but with\n     *  an error status code (i.e. 599) and %%message%% with an\n     *  optional %%error%%.\n     */\n    makeServerError(message?: string, error?: Error): FetchResponse {\n        let statusMessage: string;\n        if (!message) {\n            message = `${ this.statusCode } ${ this.statusMessage }`;\n            statusMessage = `CLIENT ESCALATED SERVER ERROR (${ message })`;\n        } else {\n            statusMessage = `CLIENT ESCALATED SERVER ERROR (${ this.statusCode } ${ this.statusMessage }; ${ message })`;\n        }\n        const response = new FetchResponse(599, statusMessage, this.headers,\n            this.body, this.#request || undefined);\n        response.#error = { message, error };\n        return response;\n    }\n\n    /**\n     *  If called within a [request.processFunc](FetchRequest-processFunc)\n     *  call, causes the request to retry as if throttled for %%stall%%\n     *  milliseconds.\n     */\n    throwThrottleError(message?: string, stall?: number): never {\n        if (stall == null) {\n            stall = -1;\n        } else {\n            assertArgument(Number.isInteger(stall) && stall >= 0, \"invalid stall timeout\", \"stall\", stall);\n        }\n\n        const error = new Error(message || \"throttling requests\");\n\n        defineProperties(<ThrottleError>error, { stall, throttle: true });\n\n        throw error;\n    }\n\n    /**\n     *  Get the header value for %%key%%, ignoring case.\n     */\n    getHeader(key: string): string {\n        return this.headers[key.toLowerCase()];\n    }\n\n    /**\n     *  Returns true if the response has a body.\n     */\n    hasBody(): this is (FetchResponse & { body: Uint8Array }) {\n        return (this.#body != null);\n    }\n\n    /**\n     *  The request made for this response.\n     */\n    get request(): null | FetchRequest { return this.#request; }\n\n    /**\n     *  Returns true if this response was a success statusCode.\n     */\n    ok(): boolean {\n        return (this.#error.message === \"\" && this.statusCode >= 200 && this.statusCode < 300);\n    }\n\n    /**\n     *  Throws a ``SERVER_ERROR`` if this response is not ok.\n     */\n    assertOk(): void {\n        if (this.ok()) { return; }\n        let { message, error } = this.#error;\n        if (message === \"\") {\n            message = `server response ${ this.statusCode } ${ this.statusMessage }`;\n        }\n\n        let requestUrl: null | string = null;\n        if (this.request) { requestUrl = this.request.url; }\n\n        let responseBody: null | string = null;\n        try {\n            if (this.#body) { responseBody = toUtf8String(this.#body); }\n        } catch (e) { }\n\n        assert(false, message, \"SERVER_ERROR\", {\n            request: (this.request || \"unknown request\"), response: this, error,\n            info: {\n                requestUrl, responseBody,\n                responseStatus: `${ this.statusCode } ${ this.statusMessage }` }\n        });\n    }\n}\n\n\nfunction getTime(): number { return (new Date()).getTime(); }\n\nfunction unpercent(value: string): Uint8Array {\n    return toUtf8Bytes(value.replace(/%([0-9a-f][0-9a-f])/gi, (all, code) => {\n        return String.fromCharCode(parseInt(code, 16));\n    }));\n}\n\nfunction wait(delay: number): Promise<void> {\n    return new Promise((resolve) => setTimeout(resolve, delay));\n}\n", "/**\n *  The **FixedNumber** class permits using values with decimal places,\n *  using fixed-pont math.\n *\n *  Fixed-point math is still based on integers under-the-hood, but uses an\n *  internal offset to store fractional components below, and each operation\n *  corrects for this after each operation.\n *\n *  @_section: api/utils/fixed-point-math:Fixed-Point Maths  [about-fixed-point-math]\n */\nimport { getBytes } from \"./data.js\";\nimport { assert, assertArgument, assertPrivate } from \"./errors.js\";\nimport {\n    getBigInt, getNumber, fromTwos, mask, toBigInt\n} from \"./maths.js\";\nimport { defineProperties } from \"./properties.js\";\n\nimport type { BigNumberish, BytesLike, Numeric } from \"./index.js\";\n\nconst BN_N1 = BigInt(-1);\nconst BN_0 = BigInt(0);\nconst BN_1 = BigInt(1);\nconst BN_5 = BigInt(5);\n\nconst _guard = { };\n\n\n// Constant to pull zeros from for multipliers\nlet Zeros = \"0000\";\nwhile (Zeros.length < 80) { Zeros += Zeros; }\n\n// Returns a string \"1\" followed by decimal \"0\"s\nfunction getTens(decimals: number): bigint {\n    let result = Zeros;\n    while (result.length < decimals) { result += result; }\n    return BigInt(\"1\" + result.substring(0, decimals));\n}\n\n\n\n    /*\n     *  Returns a new FixedFormat for %%value%%.\n     *\n     *  If %%value%% is specified as a ``number``, the bit-width is\n     *  128 bits and %%value%% is used for the ``decimals``.\n     *\n     *  A string %%value%% may begin with ``fixed`` or ``ufixed``\n     *  for signed and unsigned respectfully. If no other properties\n     *  are specified, the bit-width is 128-bits with 18 decimals.\n     *\n     *  To specify the bit-width and demicals, append them separated\n     *  by an ``\"x\"`` to the %%value%%.\n     *\n     *  For example, ``ufixed128x18`` describes an unsigned, 128-bit\n     *  wide format with 18 decimals.\n     *\n     *  If %%value%% is an other object, its properties for ``signed``,\n     *  ``width`` and ``decimals`` are checked.\n     */\n\n/**\n *  A description of a fixed-point arithmetic field.\n *\n *  When specifying the fixed format, the values override the default of\n *  a ``fixed128x18``, which implies a signed 128-bit value with 18\n *  decimals of precision.\n *\n *  The alias ``fixed`` and ``ufixed`` can be used for ``fixed128x18`` and\n *  ``ufixed128x18`` respectively.\n *\n *  When a fixed format string begins with a ``u``, it indicates the field\n *  is unsigned, so any negative values will overflow. The first number\n *  indicates the bit-width and the second number indicates the decimal\n *  precision.\n *\n *  When a ``number`` is used for a fixed format, it indicates the number\n *  of decimal places, and the default width and signed-ness will be used.\n *\n *  The bit-width must be byte aligned and the decimals can be at most 80.\n */\nexport type FixedFormat = number | string | {\n    signed?: boolean,\n    width?: number,\n    decimals?: number\n};\n\nfunction checkValue(val: bigint, format: _FixedFormat, safeOp?: string): bigint {\n    const width = BigInt(format.width);\n    if (format.signed) {\n        const limit = (BN_1 << (width - BN_1));\n        assert(safeOp == null || (val >= -limit  && val < limit), \"overflow\", \"NUMERIC_FAULT\", {\n            operation: <string>safeOp, fault: \"overflow\", value: val\n        });\n\n        if (val > BN_0) {\n            val = fromTwos(mask(val, width), width);\n        } else {\n            val = -fromTwos(mask(-val, width), width);\n        }\n\n    } else {\n        const limit = (BN_1 << width);\n        assert(safeOp == null || (val >= 0 && val < limit), \"overflow\", \"NUMERIC_FAULT\", {\n            operation: <string>safeOp, fault: \"overflow\", value: val\n        });\n        val = (((val % limit) + limit) % limit) & (limit - BN_1);\n    }\n\n    return val;\n}\n\ntype _FixedFormat = { signed: boolean, width: number, decimals: number, name: string }\n\nfunction getFormat(value?: FixedFormat): _FixedFormat {\n    if (typeof(value) === \"number\") { value = `fixed128x${value}` }\n\n    let signed = true;\n    let width = 128;\n    let decimals = 18;\n\n    if (typeof(value) === \"string\") {\n        // Parse the format string\n        if (value === \"fixed\") {\n            // defaults...\n        } else if (value === \"ufixed\") {\n            signed = false;\n        } else {\n            const match = value.match(/^(u?)fixed([0-9]+)x([0-9]+)$/);\n            assertArgument(match, \"invalid fixed format\", \"format\", value);\n            signed = (match[1] !== \"u\");\n            width = parseInt(match[2]);\n            decimals = parseInt(match[3]);\n        }\n    } else if (value) {\n        // Extract the values from the object\n        const v: any = value;\n        const check = (key: string, type: string, defaultValue: any): any => {\n            if (v[key] == null) { return defaultValue; }\n            assertArgument(typeof(v[key]) === type,\n                \"invalid fixed format (\" + key + \" not \" + type +\")\", \"format.\" + key, v[key]);\n            return v[key];\n        }\n        signed = check(\"signed\", \"boolean\", signed);\n        width = check(\"width\", \"number\", width);\n        decimals = check(\"decimals\", \"number\", decimals);\n    }\n\n    assertArgument((width % 8) === 0, \"invalid FixedNumber width (not byte aligned)\", \"format.width\", width);\n    assertArgument(decimals <= 80, \"invalid FixedNumber decimals (too large)\", \"format.decimals\", decimals);\n\n    const name = (signed ? \"\": \"u\") + \"fixed\" + String(width) + \"x\" + String(decimals);\n\n    return { signed, width, decimals, name };\n}\n\nfunction toString(val: bigint, decimals: number) {\n    let negative = \"\";\n    if (val < BN_0) {\n        negative = \"-\";\n        val *= BN_N1;\n    }\n\n    let str = val.toString();\n\n    // No decimal point for whole values\n    if (decimals === 0) { return (negative + str); }\n\n    // Pad out to the whole component (including a whole digit)\n    while (str.length <= decimals) { str = Zeros + str; }\n\n    // Insert the decimal point\n    const index = str.length - decimals;\n    str = str.substring(0, index) + \".\" + str.substring(index);\n\n    // Trim the whole component (leaving at least one 0)\n    while (str[0] === \"0\" && str[1] !== \".\") {\n        str = str.substring(1);\n    }\n\n    // Trim the decimal component (leaving at least one 0)\n    while (str[str.length - 1] === \"0\" && str[str.length - 2] !== \".\") {\n        str = str.substring(0, str.length - 1);\n    }\n\n    return (negative + str);\n}\n\n\n/**\n *  A FixedNumber represents a value over its [[FixedFormat]]\n *  arithmetic field.\n *\n *  A FixedNumber can be used to perform math, losslessly, on\n *  values which have decmial places.\n *\n *  A FixedNumber has a fixed bit-width to store values in, and stores all\n *  values internally by multiplying the value by 10 raised to the power of\n *  %%decimals%%.\n *\n *  If operations are performed that cause a value to grow too high (close to\n *  positive infinity) or too low (close to negative infinity), the value\n *  is said to //overflow//.\n *\n *  For example, an 8-bit signed value, with 0 decimals may only be within\n *  the range ``-128`` to ``127``; so ``-128 - 1`` will overflow and become\n *  ``127``. Likewise, ``127 + 1`` will overflow and become ``-127``.\n *\n *  Many operation have a normal and //unsafe// variant. The normal variant\n *  will throw a [[NumericFaultError]] on any overflow, while the //unsafe//\n *  variant will silently allow overflow, corrupting its value value.\n *\n *  If operations are performed that cause a value to become too small\n *  (close to zero), the value loses precison and is said to //underflow//.\n *\n *  For example, an value with 1 decimal place may store a number as small\n *  as ``0.1``, but the value of ``0.1 / 2`` is ``0.05``, which cannot fit\n *  into 1 decimal place, so underflow occurs which means precision is lost\n *  and the value becomes ``0``.\n *\n *  Some operations have a normal and //signalling// variant. The normal\n *  variant will silently ignore underflow, while the //signalling// variant\n *  will thow a [[NumericFaultError]] on underflow.\n */\nexport class FixedNumber {\n\n    /**\n     *  The specific fixed-point arithmetic field for this value.\n     */\n    readonly format!: string;\n\n    readonly #format: _FixedFormat;\n\n    // The actual value (accounting for decimals)\n    #val: bigint;\n\n    // A base-10 value to multiple values by to maintain the magnitude\n    readonly #tens: bigint;\n\n    /**\n     *  This is a property so console.log shows a human-meaningful value.\n     *\n     *  @private\n     */\n    readonly _value!: string;\n\n    // Use this when changing this file to get some typing info,\n    // but then switch to any to mask the internal type\n    //constructor(guard: any, value: bigint, format: _FixedFormat) {\n\n    /**\n     *  @private\n     */\n    constructor(guard: any, value: bigint, format: any) {\n        assertPrivate(guard, _guard, \"FixedNumber\");\n\n        this.#val = value;\n\n        this.#format = format;\n\n        const _value = toString(value, format.decimals);\n\n        defineProperties<FixedNumber>(this, { format: format.name, _value });\n\n        this.#tens = getTens(format.decimals);\n    }\n\n    /**\n     *  If true, negative values are permitted, otherwise only\n     *  positive values and zero are allowed.\n     */\n    get signed(): boolean { return this.#format.signed; }\n\n    /**\n     *  The number of bits available to store the value.\n     */\n    get width(): number { return this.#format.width; }\n\n    /**\n     *  The number of decimal places in the fixed-point arithment field.\n     */\n    get decimals(): number { return this.#format.decimals; }\n\n    /**\n     *  The value as an integer, based on the smallest unit the\n     *  [[decimals]] allow.\n     */\n    get value(): bigint { return this.#val; }\n\n    #checkFormat(other: FixedNumber): void {\n        assertArgument(this.format === other.format,\n            \"incompatible format; use fixedNumber.toFormat\", \"other\", other);\n    }\n\n    #checkValue(val: bigint, safeOp?: string): FixedNumber {\n/*\n        const width = BigInt(this.width);\n        if (this.signed) {\n            const limit = (BN_1 << (width - BN_1));\n            assert(safeOp == null || (val >= -limit  && val < limit), \"overflow\", \"NUMERIC_FAULT\", {\n                operation: <string>safeOp, fault: \"overflow\", value: val\n            });\n\n            if (val > BN_0) {\n                val = fromTwos(mask(val, width), width);\n            } else {\n                val = -fromTwos(mask(-val, width), width);\n            }\n\n        } else {\n            const masked = mask(val, width);\n            assert(safeOp == null || (val >= 0 && val === masked), \"overflow\", \"NUMERIC_FAULT\", {\n                operation: <string>safeOp, fault: \"overflow\", value: val\n            });\n            val = masked;\n        }\n*/\n        val = checkValue(val, this.#format, safeOp);\n        return new FixedNumber(_guard, val, this.#format);\n    }\n\n    #add(o: FixedNumber, safeOp?: string): FixedNumber {\n        this.#checkFormat(o);\n        return this.#checkValue(this.#val + o.#val, safeOp);\n    }\n\n    /**\n     *  Returns a new [[FixedNumber]] with the result of %%this%% added\n     *  to %%other%%, ignoring overflow.\n     */\n    addUnsafe(other: FixedNumber): FixedNumber { return this.#add(other); }\n\n    /**\n     *  Returns a new [[FixedNumber]] with the result of %%this%% added\n     *  to %%other%%. A [[NumericFaultError]] is thrown if overflow\n     *  occurs.\n     */\n    add(other: FixedNumber): FixedNumber { return this.#add(other, \"add\"); }\n\n    #sub(o: FixedNumber, safeOp?: string): FixedNumber {\n        this.#checkFormat(o);\n        return this.#checkValue(this.#val - o.#val, safeOp);\n    }\n\n    /**\n     *  Returns a new [[FixedNumber]] with the result of %%other%% subtracted\n     *  from %%this%%, ignoring overflow.\n     */\n    subUnsafe(other: FixedNumber): FixedNumber { return this.#sub(other); }\n\n    /**\n     *  Returns a new [[FixedNumber]] with the result of %%other%% subtracted\n     *  from %%this%%. A [[NumericFaultError]] is thrown if overflow\n     *  occurs.\n     */\n    sub(other: FixedNumber): FixedNumber { return this.#sub(other, \"sub\"); }\n\n    #mul(o: FixedNumber, safeOp?: string): FixedNumber {\n        this.#checkFormat(o);\n        return this.#checkValue((this.#val * o.#val) / this.#tens, safeOp);\n    }\n\n    /**\n     *  Returns a new [[FixedNumber]] with the result of %%this%% multiplied\n     *  by %%other%%, ignoring overflow and underflow (precision loss).\n     */\n    mulUnsafe(other: FixedNumber): FixedNumber { return this.#mul(other); }\n\n    /**\n     *  Returns a new [[FixedNumber]] with the result of %%this%% multiplied\n     *  by %%other%%. A [[NumericFaultError]] is thrown if overflow\n     *  occurs.\n     */\n    mul(other: FixedNumber): FixedNumber { return this.#mul(other, \"mul\"); }\n\n    /**\n     *  Returns a new [[FixedNumber]] with the result of %%this%% multiplied\n     *  by %%other%%. A [[NumericFaultError]] is thrown if overflow\n     *  occurs or if underflow (precision loss) occurs.\n     */\n    mulSignal(other: FixedNumber): FixedNumber {\n        this.#checkFormat(other);\n        const value = this.#val * other.#val;\n        assert((value % this.#tens) === BN_0, \"precision lost during signalling mul\", \"NUMERIC_FAULT\", {\n            operation: \"mulSignal\", fault: \"underflow\", value: this\n        });\n        return this.#checkValue(value / this.#tens, \"mulSignal\");\n    }\n\n    #div(o: FixedNumber, safeOp?: string): FixedNumber {\n        assert(o.#val !== BN_0, \"division by zero\", \"NUMERIC_FAULT\", {\n            operation: \"div\", fault: \"divide-by-zero\", value: this\n        });\n        this.#checkFormat(o);\n        return this.#checkValue((this.#val * this.#tens) / o.#val, safeOp);\n    }\n\n    /**\n     *  Returns a new [[FixedNumber]] with the result of %%this%% divided\n     *  by %%other%%, ignoring underflow (precision loss). A\n     *  [[NumericFaultError]] is thrown if overflow occurs.\n     */\n    divUnsafe(other: FixedNumber): FixedNumber { return this.#div(other); }\n\n    /**\n     *  Returns a new [[FixedNumber]] with the result of %%this%% divided\n     *  by %%other%%, ignoring underflow (precision loss). A\n     *  [[NumericFaultError]] is thrown if overflow occurs.\n     */\n    div(other: FixedNumber): FixedNumber { return this.#div(other, \"div\"); }\n\n\n    /**\n     *  Returns a new [[FixedNumber]] with the result of %%this%% divided\n     *  by %%other%%. A [[NumericFaultError]] is thrown if underflow\n     *  (precision loss) occurs.\n     */\n    divSignal(other: FixedNumber): FixedNumber {\n        assert(other.#val !== BN_0, \"division by zero\", \"NUMERIC_FAULT\", {\n            operation: \"div\", fault: \"divide-by-zero\", value: this\n        });\n        this.#checkFormat(other);\n        const value = (this.#val * this.#tens);\n        assert((value % other.#val) === BN_0, \"precision lost during signalling div\", \"NUMERIC_FAULT\", {\n            operation: \"divSignal\", fault: \"underflow\", value: this\n        });\n        return this.#checkValue(value / other.#val, \"divSignal\");\n    }\n\n    /**\n     *  Returns a comparison result between %%this%% and %%other%%.\n     *\n     *  This is suitable for use in sorting, where ``-1`` implies %%this%%\n     *  is smaller, ``1`` implies %%this%% is larger and ``0`` implies\n     *  both are equal.\n     */\n     cmp(other: FixedNumber): number {\n         let a = this.value, b = other.value;\n\n         // Coerce a and b to the same magnitude\n         const delta = this.decimals - other.decimals;\n         if (delta > 0) {\n             b *= getTens(delta);\n         } else if (delta < 0) {\n             a *= getTens(-delta);\n         }\n\n         // Comnpare\n         if (a < b) { return -1; }\n         if (a > b) { return 1; }\n         return 0;\n     }\n\n    /**\n     *  Returns true if %%other%% is equal to %%this%%.\n     */\n     eq(other: FixedNumber): boolean { return this.cmp(other) === 0; }\n\n    /**\n     *  Returns true if %%other%% is less than to %%this%%.\n     */\n     lt(other: FixedNumber): boolean { return this.cmp(other) < 0; }\n\n    /**\n     *  Returns true if %%other%% is less than or equal to %%this%%.\n     */\n     lte(other: FixedNumber): boolean { return this.cmp(other) <= 0; }\n\n    /**\n     *  Returns true if %%other%% is greater than to %%this%%.\n     */\n     gt(other: FixedNumber): boolean { return this.cmp(other) > 0; }\n\n    /**\n     *  Returns true if %%other%% is greater than or equal to %%this%%.\n     */\n     gte(other: FixedNumber): boolean { return this.cmp(other) >= 0; }\n\n    /**\n     *  Returns a new [[FixedNumber]] which is the largest **integer**\n     *  that is less than or equal to %%this%%.\n     *\n     *  The decimal component of the result will always be ``0``.\n     */\n    floor(): FixedNumber {\n        let val = this.#val;\n        if (this.#val < BN_0) { val -= this.#tens - BN_1; }\n        val = (this.#val / this.#tens) * this.#tens;\n        return this.#checkValue(val, \"floor\");\n    }\n\n    /**\n     *  Returns a new [[FixedNumber]] which is the smallest **integer**\n     *  that is greater than or equal to %%this%%.\n     *\n     *  The decimal component of the result will always be ``0``.\n     */\n    ceiling(): FixedNumber {\n        let val = this.#val;\n        if (this.#val > BN_0) { val += this.#tens - BN_1; }\n        val = (this.#val / this.#tens) * this.#tens;\n        return this.#checkValue(val, \"ceiling\");\n    }\n\n    /**\n     *  Returns a new [[FixedNumber]] with the decimal component\n     *  rounded up on ties at %%decimals%% places.\n     */\n    round(decimals?: number): FixedNumber {\n        if (decimals == null) { decimals = 0; }\n\n        // Not enough precision to not already be rounded\n        if (decimals >= this.decimals) { return this; }\n\n        const delta = this.decimals - decimals;\n        const bump = BN_5 * getTens(delta - 1);\n\n        let value = this.value + bump;\n        const tens = getTens(delta);\n        value = (value / tens) * tens;\n\n        checkValue(value, this.#format, \"round\");\n\n        return new FixedNumber(_guard, value, this.#format);\n    }\n\n    /**\n     *  Returns true if %%this%% is equal to ``0``.\n     */\n    isZero(): boolean { return (this.#val === BN_0); }\n\n    /**\n     *  Returns true if %%this%% is less than ``0``.\n     */\n    isNegative(): boolean { return (this.#val < BN_0); }\n\n    /**\n     *  Returns the string representation of %%this%%.\n     */\n    toString(): string { return this._value; }\n\n    /**\n     *  Returns a float approximation.\n     *\n     *  Due to IEEE 754 precission (or lack thereof), this function\n     *  can only return an approximation and most values will contain\n     *  rounding errors.\n     */\n    toUnsafeFloat(): number { return parseFloat(this.toString()); }\n\n    /**\n     *  Return a new [[FixedNumber]] with the same value but has had\n     *  its field set to %%format%%.\n     *\n     *  This will throw if the value cannot fit into %%format%%.\n     */\n    toFormat(format: FixedFormat): FixedNumber {\n        return FixedNumber.fromString(this.toString(), format);\n    }\n\n    /**\n     *  Creates a new [[FixedNumber]] for %%value%% divided by\n     *  %%decimal%% places with %%format%%.\n     *\n     *  This will throw a [[NumericFaultError]] if %%value%% (once adjusted\n     *  for %%decimals%%) cannot fit in %%format%%, either due to overflow\n     *  or underflow (precision loss).\n     */\n    static fromValue(_value: BigNumberish, _decimals?: Numeric, _format?: FixedFormat): FixedNumber {\n        const decimals = (_decimals == null) ? 0: getNumber(_decimals);\n        const format = getFormat(_format);\n\n        let value = getBigInt(_value, \"value\");\n        const delta = decimals - format.decimals;\n        if (delta > 0) {\n            const tens = getTens(delta);\n            assert((value % tens) === BN_0, \"value loses precision for format\", \"NUMERIC_FAULT\", {\n                operation: \"fromValue\", fault: \"underflow\", value: _value\n            });\n            value /= tens;\n        } else if (delta < 0) {\n            value *= getTens(-delta);\n        }\n\n        checkValue(value, format, \"fromValue\");\n\n        return new FixedNumber(_guard, value, format);\n    }\n\n    /**\n     *  Creates a new [[FixedNumber]] for %%value%% with %%format%%.\n     *\n     *  This will throw a [[NumericFaultError]] if %%value%% cannot fit\n     *  in %%format%%, either due to overflow or underflow (precision loss).\n     */\n    static fromString(_value: string, _format?: FixedFormat): FixedNumber {\n        const match = _value.match(/^(-?)([0-9]*)\\.?([0-9]*)$/);\n        assertArgument(match && (match[2].length + match[3].length) > 0, \"invalid FixedNumber string value\", \"value\", _value);\n\n        const format = getFormat(_format);\n\n        let whole = (match[2] || \"0\"), decimal = (match[3] || \"\");\n\n        // Pad out the decimals\n        while (decimal.length < format.decimals) { decimal += Zeros; }\n\n        // Check precision is safe\n        assert(decimal.substring(format.decimals).match(/^0*$/), \"too many decimals for format\", \"NUMERIC_FAULT\", {\n            operation: \"fromString\", fault: \"underflow\", value: _value\n        });\n\n        // Remove extra padding\n        decimal = decimal.substring(0, format.decimals);\n\n        const value = BigInt(match[1] + whole + decimal)\n\n        checkValue(value, format, \"fromString\");\n\n        return new FixedNumber(_guard, value, format);\n    }\n\n    /**\n     *  Creates a new [[FixedNumber]] with the big-endian representation\n     *  %%value%% with %%format%%.\n     *\n     *  This will throw a [[NumericFaultError]] if %%value%% cannot fit\n     *  in %%format%% due to overflow.\n     */\n    static fromBytes(_value: BytesLike, _format?: FixedFormat): FixedNumber {\n        let value = toBigInt(getBytes(_value, \"value\"));\n        const format = getFormat(_format);\n\n        if (format.signed) { value = fromTwos(value, format.width); }\n\n        checkValue(value, format, \"fromBytes\");\n\n        return new FixedNumber(_guard, value, format);\n    }\n}\n\n//const f1 = FixedNumber.fromString(\"12.56\", \"fixed16x2\");\n//const f2 = FixedNumber.fromString(\"0.3\", \"fixed16x2\");\n//console.log(f1.divSignal(f2));\n//const BUMP = FixedNumber.from(\"0.5\");\n", "//See: https://github.com/ethereum/wiki/wiki/RLP\n\nimport { hexlify } from \"./data.js\";\nimport { assert, assertArgument } from \"./errors.js\";\nimport { getBytes } from \"./data.js\";\n\nimport type { BytesLike, RlpStructuredData } from \"./index.js\";\n\n\nfunction hexlifyByte(value: number): string {\n    let result = value.toString(16);\n    while (result.length < 2) { result = \"0\" + result; }\n    return \"0x\" + result;\n}\n\nfunction unarrayifyInteger(data: Uint8Array, offset: number, length: number): number {\n    let result = 0;\n    for (let i = 0; i < length; i++) {\n        result = (result * 256) + data[offset + i];\n    }\n    return result;\n}\n\ntype Decoded = {\n    result: any;\n    consumed: number;\n};\n\nfunction _decodeChildren(data: Uint8Array, offset: number, childOffset: number, length: number): Decoded {\n    const result: Array<any> = [];\n\n    while (childOffset < offset + 1 + length) {\n        const decoded = _decode(data, childOffset);\n\n        result.push(decoded.result);\n\n        childOffset += decoded.consumed;\n        assert(childOffset <= offset + 1 + length, \"child data too short\", \"BUFFER_OVERRUN\", {\n            buffer: data, length, offset\n        });\n    }\n\n    return {consumed: (1 + length), result: result};\n}\n\n// returns { consumed: number, result: Object }\nfunction _decode(data: Uint8Array, offset: number): { consumed: number, result: any } {\n    assert(data.length !== 0, \"data too short\", \"BUFFER_OVERRUN\", {\n        buffer: data, length: 0, offset: 1\n    });\n\n    const checkOffset = (offset: number) => {\n        assert(offset <= data.length, \"data short segment too short\", \"BUFFER_OVERRUN\", {\n            buffer: data, length: data.length, offset\n        });\n    };\n\n    // Array with extra length prefix\n    if (data[offset] >= 0xf8) {\n        const lengthLength = data[offset] - 0xf7;\n        checkOffset(offset + 1 + lengthLength);\n\n        const length = unarrayifyInteger(data, offset + 1, lengthLength);\n        checkOffset(offset + 1 + lengthLength + length);\n\n        return _decodeChildren(data, offset, offset + 1 + lengthLength, lengthLength + length);\n\n    } else if (data[offset] >= 0xc0) {\n        const length = data[offset] - 0xc0;\n        checkOffset(offset + 1 + length);\n\n        return _decodeChildren(data, offset, offset + 1, length);\n\n    } else if (data[offset] >= 0xb8) {\n        const lengthLength = data[offset] - 0xb7;\n        checkOffset(offset + 1 + lengthLength);\n\n        const length = unarrayifyInteger(data, offset + 1, lengthLength);\n        checkOffset(offset + 1 + lengthLength + length);\n\n        const result = hexlify(data.slice(offset + 1 + lengthLength, offset + 1 + lengthLength + length));\n        return { consumed: (1 + lengthLength + length), result: result }\n\n    } else if (data[offset] >= 0x80) {\n        const length = data[offset] - 0x80;\n        checkOffset(offset + 1 + length);\n\n        const result = hexlify(data.slice(offset + 1, offset + 1 + length));\n        return { consumed: (1 + length), result: result }\n    }\n\n    return { consumed: 1, result: hexlifyByte(data[offset]) };\n}\n\n/**\n *  Decodes %%data%% into the structured data it represents.\n */\nexport function decodeRlp(_data: BytesLike): RlpStructuredData {\n    const data = getBytes(_data, \"data\");\n    const decoded = _decode(data, 0);\n    assertArgument(decoded.consumed === data.length, \"unexpected junk after rlp payload\", \"data\", _data);\n    return decoded.result;\n}\n\n", "//See: https://github.com/ethereum/wiki/wiki/RLP\n\nimport { getBytes } from \"./data.js\";\n\nimport type { RlpStructuredDataish } from \"./rlp.js\";\n\n\nfunction arrayifyInteger(value: number): Array<number> {\n    const result: Array<number> = [];\n    while (value) {\n        result.unshift(value & 0xff);\n        value >>= 8;\n    }\n    return result;\n}\n\nfunction _encode(object: Array<any> | string | Uint8Array): Array<number> {\n    if (Array.isArray(object)) {\n        let payload: Array<number> = [];\n        object.forEach(function(child) {\n            payload = payload.concat(_encode(child));\n        });\n\n        if (payload.length <= 55) {\n            payload.unshift(0xc0 + payload.length)\n            return payload;\n        }\n\n        const length = arrayifyInteger(payload.length);\n        length.unshift(0xf7 + length.length);\n\n        return length.concat(payload);\n\n    }\n\n    const data: Array<number> = Array.prototype.slice.call(getBytes(object, \"object\"));\n\n    if (data.length === 1 && data[0] <= 0x7f) {\n        return data;\n\n    } else if (data.length <= 55) {\n        data.unshift(0x80 + data.length);\n        return data;\n    }\n\n    const length = arrayifyInteger(data.length);\n    length.unshift(0xb7 + length.length);\n\n    return length.concat(data);\n}\n\nconst nibbles = \"0123456789abcdef\";\n\n/**\n *  Encodes %%object%% as an RLP-encoded [[DataHexString]].\n */\nexport function encodeRlp(object: RlpStructuredDataish): string {\n    let result = \"0x\";\n    for (const v of _encode(object)) {\n        result += nibbles[v >> 4];\n        result += nibbles[v & 0xf];\n    }\n    return result;\n}\n", "/**\n *  Most interactions with Ethereum requires integer values, which use\n *  the smallest magnitude unit.\n *\n *  For example, imagine dealing with dollars and cents. Since dollars\n *  are divisible, non-integer values are possible, such as ``$10.77``.\n *  By using the smallest indivisible unit (i.e. cents), the value can\n *  be kept as the integer ``1077``.\n *\n *  When receiving decimal input from the user (as a decimal string),\n *  the value should be converted to an integer and when showing a user\n *  a value, the integer value should be converted to a decimal string.\n *\n *  This creates a clear distinction, between values to be used by code\n *  (integers) and values used for display logic to users (decimals).\n *\n *  The native unit in Ethereum, //ether// is divisible to 18 decimal places,\n *  where each individual unit is called a //wei//.\n *\n *  @_subsection api/utils:Unit Conversion  [about-units]\n */\nimport { assertArgument } from \"./errors.js\";\nimport { FixedNumber } from \"./fixednumber.js\";\nimport { getNumber } from \"./maths.js\";\n\nimport type { BigNumberish, Numeric } from \"../utils/index.js\";\n\n\nconst names = [\n    \"wei\",\n    \"kwei\",\n    \"mwei\",\n    \"gwei\",\n    \"szabo\",\n    \"finney\",\n    \"ether\",\n];\n\n/**\n *  Converts %%value%% into a //decimal string//, assuming %%unit%% decimal\n *  places. The %%unit%% may be the number of decimal places or the name of\n *  a unit (e.g. ``\"gwei\"`` for 9 decimal places).\n *\n */\nexport function formatUnits(value: BigNumberish, unit?: string | Numeric): string {\n    let decimals = 18;\n    if (typeof(unit) === \"string\") {\n        const index = names.indexOf(unit);\n        assertArgument(index >= 0, \"invalid unit\", \"unit\", unit);\n        decimals = 3 * index;\n    } else if (unit != null) {\n        decimals = getNumber(unit, \"unit\");\n    }\n\n    return FixedNumber.fromValue(value, decimals, { decimals, width: 512 }).toString();\n}\n\n/**\n *  Converts the //decimal string// %%value%% to a BigInt, assuming\n *  %%unit%% decimal places. The %%unit%% may the number of decimal places\n *  or the name of a unit (e.g. ``\"gwei\"`` for 9 decimal places).\n */\nexport function parseUnits(value: string, unit?: string | Numeric): bigint {\n    assertArgument(typeof(value) === \"string\", \"value must be a string\", \"value\", value);\n\n    let decimals = 18;\n    if (typeof(unit) === \"string\") {\n        const index = names.indexOf(unit);\n        assertArgument(index >= 0, \"invalid unit\", \"unit\", unit);\n        decimals = 3 * index;\n    } else if (unit != null) {\n        decimals = getNumber(unit, \"unit\");\n    }\n\n    return FixedNumber.fromString(value, { decimals, width: 512 }).value;\n}\n\n/**\n *  Converts %%value%% into a //decimal string// using 18 decimal places.\n */\nexport function formatEther(wei: BigNumberish): string {\n    return formatUnits(wei, 18);\n}\n\n/**\n *  Converts the //decimal string// %%ether%% to a BigInt, using 18\n *  decimal places.\n */\nexport function parseEther(ether: string): bigint {\n    return parseUnits(ether, 18);\n}\n", "/**\n *  Explain UUID and link to RFC here.\n *\n *  @_subsection: api/utils:UUID  [about-uuid]\n */\nimport { getBytes, hexlify } from \"./data.js\";\n\nimport type { BytesLike } from \"./index.js\";\n\n/**\n *  Returns the version 4 [[link-uuid]] for the %%randomBytes%%.\n *\n *  @see: https://www.ietf.org/rfc/rfc4122.txt (Section 4.4)\n */\nexport function uuidV4(randomBytes: BytesLike): string {\n    const bytes = getBytes(randomBytes, \"randomBytes\");\n\n    // Section: 4.1.3:\n    // - time_hi_and_version[12:16] = 0b0100\n    bytes[6] = (bytes[6] & 0x0f) | 0x40;\n\n    // Section 4.4\n    // - clock_seq_hi_and_reserved[6] = 0b0\n    // - clock_seq_hi_and_reserved[7] = 0b1\n    bytes[8] = (bytes[8] & 0x3f) | 0x80;\n\n    const value = hexlify(bytes);\n\n    return [\n       value.substring(2, 10),\n       value.substring(10, 14),\n       value.substring(14, 18),\n       value.substring(18, 22),\n       value.substring(22, 34),\n    ].join(\"-\");\n}\n", "/**\n *  There are many simple utilities required to interact with\n *  Ethereum and to simplify the library, without increasing\n *  the library dependencies for simple functions.\n *\n *  @_section api/utils:Utilities  [about-utils]\n */\n\nexport { decodeBase58, encodeBase58 } from \"./base58.js\";\n\nexport { decodeBase64, encodeBase64 } from \"./base64.js\";\n\nexport {\n    getBytes, getBytesCopy, isHexString, isBytesLike, hexlify, concat, dataLength, dataSlice,\n    stripZerosLeft, zeroPadValue, zeroPadBytes\n} from \"./data.js\";\n\nexport {\n    isCallException, isError,\n    assert, assertArgument, assertArgumentCount, assertPrivate, assertNormalize, makeError\n} from \"./errors.js\"\n\nexport { EventPayload } from \"./events.js\";\n\nexport {\n    FetchRequest, FetchResponse, FetchCancelSignal,\n} from \"./fetch.js\";\n\nexport { FixedNumber } from \"./fixednumber.js\"\n\nexport {\n    fromTwos, toTwos, mask,\n    getBigInt, getNumber, getUint, toBigInt, toNumber, toBeHex, toBeArray, toQuantity\n} from \"./maths.js\";\n\nexport { resolveProperties, defineProperties} from \"./properties.js\";\n\nexport { decodeRlp } from \"./rlp-decode.js\";\nexport { encodeRlp } from \"./rlp-encode.js\";\n\nexport { formatEther, parseEther, formatUnits, parseUnits } from \"./units.js\";\n\nexport {\n    toUtf8Bytes,\n    toUtf8CodePoints,\n    toUtf8String,\n\n    Utf8ErrorFuncs,\n} from \"./utf8.js\";\n\nexport { uuidV4 } from \"./uuid.js\";\n\n/////////////////////////////\n// Types\n\nexport type { BytesLike } from \"./data.js\";\n\nexport type {\n\n    //ErrorFetchRequestWithBody, ErrorFetchRequest,\n    //ErrorFetchResponseWithBody, ErrorFetchResponse,\n\n    ErrorCode,\n\n    EthersError, UnknownError, NotImplementedError, UnsupportedOperationError, NetworkError,\n    ServerError, TimeoutError, BadDataError, CancelledError, BufferOverrunError,\n    NumericFaultError, InvalidArgumentError, MissingArgumentError, UnexpectedArgumentError,\n    CallExceptionError, InsufficientFundsError, NonceExpiredError, OffchainFaultError,\n    ReplacementUnderpricedError, TransactionReplacedError, UnconfiguredNameError,\n    ActionRejectedError,\n\n    CallExceptionAction, CallExceptionTransaction,\n\n    CodedEthersError\n} from \"./errors.js\"\n\nexport type { EventEmitterable, Listener } from \"./events.js\";\n\nexport type {\n    GetUrlResponse,\n    FetchPreflightFunc, FetchProcessFunc, FetchRetryFunc,\n    FetchGatewayFunc, FetchGetUrlFunc\n} from \"./fetch.js\";\n\nexport type { FixedFormat } from \"./fixednumber.js\"\n\nexport type { BigNumberish, Numeric } from \"./maths.js\";\n\nexport type { RlpStructuredData, RlpStructuredDataish } from \"./rlp.js\";\n\nexport type {\n    Utf8ErrorFunc,\n    UnicodeNormalizationForm,\n    Utf8ErrorReason\n} from \"./utf8.js\";\n", "\nimport {\n    defineProperties, concat, getBytesCopy, getNumber, hexlify,\n    toBeArray, toBigInt, toNumber,\n    assert, assertArgument\n} from \"../../utils/index.js\";\n\nimport type { BigNumberish, BytesLike } from \"../../utils/index.js\";\n\n/**\n * @_ignore:\n */\nexport const WordSize: number = 32;\nconst Padding = new Uint8Array(WordSize);\n\n// Properties used to immediate pass through to the underlying object\n// - `then` is used to detect if an object is a Promise for await\nconst passProperties = [ \"then\" ];\n\nconst _guard = { };\n\nfunction throwError(name: string, error: Error): never {\n    const wrapped = new Error(`deferred error during ABI decoding triggered accessing ${ name }`);\n    (<any>wrapped).error = error;\n    throw wrapped;\n}\n\n/**\n *  A [[Result]] is a sub-class of Array, which allows accessing any\n *  of its values either positionally by its index or, if keys are\n *  provided by its name.\n *\n *  @_docloc: api/abi\n */\nexport class Result extends Array<any> {\n    readonly #names: ReadonlyArray<null | string>;\n\n    [ K: string | number ]: any\n\n    /**\n     *  @private\n     */\n    constructor(...args: Array<any>) {\n        // To properly sub-class Array so the other built-in\n        // functions work, the constructor has to behave fairly\n        // well. So, in the event we are created via fromItems()\n        // we build the read-only Result object we want, but on\n        // any other input, we use the default constructor\n\n        // constructor(guard: any, items: Array<any>, keys?: Array<null | string>);\n        const guard = args[0];\n        let items: Array<any> = args[1];\n        let names: Array<null | string> = (args[2] || [ ]).slice();\n\n        let wrap = true;\n        if (guard !== _guard) {\n            items = args;\n            names = [ ];\n            wrap = false;\n        }\n\n        // Can't just pass in ...items since an array of length 1\n        // is a special case in the super.\n        super(items.length);\n        items.forEach((item, index) => { this[index] = item; });\n\n        // Find all unique keys\n        const nameCounts = names.reduce((accum, name) => {\n            if (typeof(name) === \"string\") {\n                accum.set(name, (accum.get(name) || 0) + 1);\n            }\n            return accum;\n        }, <Map<string, number>>(new Map()));\n\n        // Remove any key thats not unique\n        this.#names = Object.freeze(items.map((item, index) => {\n            const name = names[index];\n            if (name != null && nameCounts.get(name) === 1) {\n                return name;\n            }\n            return null;\n        }));\n\n        if (!wrap) { return; }\n\n        // A wrapped Result is immutable\n        Object.freeze(this);\n\n        // Proxy indices and names so we can trap deferred errors\n        return new Proxy(this, {\n            get: (target, prop, receiver) => {\n                if (typeof(prop) === \"string\") {\n\n                    // Index accessor\n                    if (prop.match(/^[0-9]+$/)) {\n                        const index = getNumber(prop, \"%index\");\n                        if (index < 0 || index >= this.length) {\n                            throw new RangeError(\"out of result range\");\n                        }\n\n                        const item = target[index];\n                        if (item instanceof Error) {\n                            throwError(`index ${ index }`, item);\n                        }\n                        return item;\n                    }\n\n                    // Pass important checks (like `then` for Promise) through\n                    if (passProperties.indexOf(prop) >= 0) {\n                        return Reflect.get(target, prop, receiver);\n                    }\n\n                    const value = target[prop];\n                    if (value instanceof Function) {\n                        // Make sure functions work with private variables\n                        // See: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy#no_private_property_forwarding\n                        return function(this: any, ...args: Array<any>) {\n                            return value.apply((this === receiver) ? target: this, args);\n                        };\n\n                    } else if (!(prop in target)) {\n                        // Possible name accessor\n                        return target.getValue.apply((this === receiver) ? target: this, [ prop ]);\n                    }\n                }\n\n                return Reflect.get(target, prop, receiver);\n            }\n        });\n    }\n\n    /**\n     *  Returns the Result as a normal Array.\n     *\n     *  This will throw if there are any outstanding deferred\n     *  errors.\n     */\n    toArray(): Array<any> {\n        const result: Array<any> = [ ];\n        this.forEach((item, index) => {\n            if (item instanceof Error) { throwError(`index ${ index }`, item); }\n            result.push(item);\n        });\n        return result;\n    }\n\n    /**\n     *  Returns the Result as an Object with each name-value pair.\n     *\n     *  This will throw if any value is unnamed, or if there are\n     *  any outstanding deferred errors.\n     */\n    toObject(): Record<string, any> {\n        return this.#names.reduce((accum, name, index) => {\n            assert(name != null, \"value at index ${ index } unnamed\", \"UNSUPPORTED_OPERATION\", {\n                operation: \"toObject()\"\n            });\n\n            // Add values for names that don't conflict\n            if (!(name in accum)) {\n                accum[name] = this.getValue(name);\n            }\n\n            return accum;\n        }, <Record<string, any>>{});\n    }\n\n    /**\n     *  @_ignore\n     */\n    slice(start?: number | undefined, end?: number | undefined): Result {\n        if (start == null) { start = 0; }\n        if (start < 0) {\n            start += this.length;\n            if (start < 0) { start = 0; }\n        }\n\n        if (end == null) { end = this.length; }\n        if (end < 0) {\n            end += this.length;\n            if (end < 0) { end = 0; }\n        }\n        if (end > this.length) { end = this.length; }\n\n        const result: Array<any> = [ ], names: Array<null | string> = [ ];\n        for (let i = start; i < end; i++) {\n            result.push(this[i]);\n            names.push(this.#names[i]);\n        }\n\n        return new Result(_guard, result, names);\n    }\n\n    /**\n     *  @_ignore\n     */\n    filter(callback: (el: any, index: number, array: Result) => boolean, thisArg?: any): Result {\n        const result: Array<any> = [ ], names: Array<null | string> = [ ];\n        for (let i = 0; i < this.length; i++) {\n            const item = this[i];\n            if (item instanceof Error) {\n                throwError(`index ${ i }`, item);\n            }\n\n            if (callback.call(thisArg, item, i, this)) {\n                result.push(item);\n                names.push(this.#names[i]);\n            }\n        }\n\n        return new Result(_guard, result, names);\n    }\n\n    /**\n     *  @_ignore\n     */\n    map<T extends any = any>(callback: (el: any, index: number, array: Result) => T, thisArg?: any): Array<T> {\n        const result: Array<T> = [ ];\n        for (let i = 0; i < this.length; i++) {\n            const item = this[i];\n            if (item instanceof Error) {\n                throwError(`index ${ i }`, item);\n            }\n\n            result.push(callback.call(thisArg, item, i, this));\n        }\n\n        return result;\n    }\n\n\n    /**\n     *  Returns the value for %%name%%.\n     *\n     *  Since it is possible to have a key whose name conflicts with\n     *  a method on a [[Result]] or its superclass Array, or any\n     *  JavaScript keyword, this ensures all named values are still\n     *  accessible by name.\n     */\n    getValue(name: string): any {\n        const index = this.#names.indexOf(name);\n        if (index === -1) { return undefined; }\n\n        const value = this[index];\n\n        if (value instanceof Error) {\n            throwError(`property ${ JSON.stringify(name) }`, (<any>value).error);\n        }\n\n        return value;\n    }\n\n    /**\n     *  Creates a new [[Result]] for %%items%% with each entry\n     *  also accessible by its corresponding name in %%keys%%.\n     */\n    static fromItems(items: Array<any>, keys?: Array<null | string>): Result {\n        return new Result(_guard, items, keys);\n    }\n}\n\n/**\n *  Returns all errors found in a [[Result]].\n *\n *  Since certain errors encountered when creating a [[Result]] do\n *  not impact the ability to continue parsing data, they are\n *  deferred until they are actually accessed. Hence a faulty string\n *  in an Event that is never used does not impact the program flow.\n *\n *  However, sometimes it may be useful to access, identify or\n *  validate correctness of a [[Result]].\n *\n *  @_docloc api/abi\n */\nexport function checkResultErrors(result: Result): Array<{ path: Array<string | number>, error: Error }> {\n    // Find the first error (if any)\n    const errors: Array<{ path: Array<string | number>, error: Error }> = [ ];\n\n    const checkErrors = function(path: Array<string | number>, object: any): void {\n        if (!Array.isArray(object)) { return; }\n        for (let key in object) {\n            const childPath = path.slice();\n            childPath.push(key);\n\n            try {\n                 checkErrors(childPath, object[key]);\n            } catch (error: any) {\n                errors.push({ path: childPath, error: error });\n            }\n        }\n    }\n    checkErrors([ ], result);\n\n    return errors;\n\n}\n\nfunction getValue(value: BigNumberish): Uint8Array {\n    let bytes = toBeArray(value);\n\n    assert (bytes.length <= WordSize, \"value out-of-bounds\",\n        \"BUFFER_OVERRUN\", { buffer: bytes, length: WordSize, offset: bytes.length });\n\n    if (bytes.length !== WordSize) {\n        bytes = getBytesCopy(concat([ Padding.slice(bytes.length % WordSize), bytes ]));\n    }\n\n    return bytes;\n}\n\n/**\n *  @_ignore\n */\nexport abstract class Coder {\n\n    // The coder name:\n    //   - address, uint256, tuple, array, etc.\n    readonly name!: string;\n\n    // The fully expanded type, including composite types:\n    //   - address, uint256, tuple(address,bytes), uint256[3][4][],  etc.\n    readonly type!: string;\n\n    // The localName bound in the signature, in this example it is \"baz\":\n    //   - tuple(address foo, uint bar) baz\n    readonly localName!: string;\n\n    // Whether this type is dynamic:\n    //  - Dynamic: bytes, string, address[], tuple(boolean[]), etc.\n    //  - Not Dynamic: address, uint256, boolean[3], tuple(address, uint8)\n    readonly dynamic!: boolean;\n\n    constructor(name: string, type: string, localName: string, dynamic: boolean) {\n        defineProperties<Coder>(this, { name, type, localName, dynamic }, {\n            name: \"string\", type: \"string\", localName: \"string\", dynamic: \"boolean\"\n        });\n    }\n\n    _throwError(message: string, value: any): never {\n        assertArgument(false, message, this.localName, value);\n    }\n\n    abstract encode(writer: Writer, value: any): number;\n    abstract decode(reader: Reader): any;\n\n    abstract defaultValue(): any;\n}\n\n/**\n *  @_ignore\n */\nexport class Writer {\n    // An array of WordSize lengthed objects to concatenation\n    #data: Array<Uint8Array>;\n    #dataLength: number;\n\n    constructor() {\n        this.#data = [ ];\n        this.#dataLength = 0;\n    }\n\n    get data(): string {\n        return concat(this.#data);\n    }\n    get length(): number { return this.#dataLength; }\n\n    #writeData(data: Uint8Array): number {\n        this.#data.push(data);\n        this.#dataLength += data.length;\n        return data.length;\n    }\n\n    appendWriter(writer: Writer): number {\n        return this.#writeData(getBytesCopy(writer.data));\n    }\n\n    // Arrayish item; pad on the right to *nearest* WordSize\n    writeBytes(value: BytesLike): number {\n        let bytes = getBytesCopy(value);\n        const paddingOffset = bytes.length % WordSize;\n        if (paddingOffset) {\n            bytes = getBytesCopy(concat([ bytes, Padding.slice(paddingOffset) ]))\n        }\n        return this.#writeData(bytes);\n    }\n\n    // Numeric item; pad on the left *to* WordSize\n    writeValue(value: BigNumberish): number {\n        return this.#writeData(getValue(value));\n    }\n\n    // Inserts a numeric place-holder, returning a callback that can\n    // be used to asjust the value later\n    writeUpdatableValue(): (value: BigNumberish) => void {\n        const offset = this.#data.length;\n        this.#data.push(Padding);\n        this.#dataLength += WordSize;\n        return (value: BigNumberish) => {\n            this.#data[offset] = getValue(value);\n        };\n    }\n}\n\n/**\n *  @_ignore\n */\nexport class Reader {\n    // Allows incomplete unpadded data to be read; otherwise an error\n    // is raised if attempting to overrun the buffer. This is required\n    // to deal with an old Solidity bug, in which event data for\n    // external (not public thoguh) was tightly packed.\n    readonly allowLoose!: boolean;\n\n    readonly #data: Uint8Array;\n    #offset: number;\n\n    #bytesRead: number;\n    #parent: null | Reader;\n    #maxInflation: number;\n\n    constructor(data: BytesLike, allowLoose?: boolean, maxInflation?: number) {\n        defineProperties<Reader>(this, { allowLoose: !!allowLoose });\n\n        this.#data = getBytesCopy(data);\n        this.#bytesRead = 0;\n        this.#parent = null;\n        this.#maxInflation = (maxInflation != null) ? maxInflation: 1024;\n\n        this.#offset = 0;\n    }\n\n    get data(): string { return hexlify(this.#data); }\n    get dataLength(): number { return this.#data.length; }\n    get consumed(): number { return this.#offset; }\n    get bytes(): Uint8Array { return new Uint8Array(this.#data); }\n\n    #incrementBytesRead(count: number): void {\n        if (this.#parent) { return this.#parent.#incrementBytesRead(count); }\n\n        this.#bytesRead += count;\n\n        // Check for excessive inflation (see: #4537)\n        assert(this.#maxInflation < 1 || this.#bytesRead <= this.#maxInflation * this.dataLength, `compressed ABI data exceeds inflation ratio of ${ this.#maxInflation } ( see: https:/\\/github.com/ethers-io/ethers.js/issues/4537 )`,  \"BUFFER_OVERRUN\", {\n            buffer: getBytesCopy(this.#data), offset: this.#offset,\n            length: count, info: {\n                bytesRead: this.#bytesRead,\n                dataLength: this.dataLength\n            }\n        });\n    }\n\n    #peekBytes(offset: number, length: number, loose?: boolean): Uint8Array {\n        let alignedLength = Math.ceil(length / WordSize) * WordSize;\n        if (this.#offset + alignedLength > this.#data.length) {\n            if (this.allowLoose && loose && this.#offset + length <= this.#data.length) {\n                alignedLength = length;\n            } else {\n                assert(false, \"data out-of-bounds\", \"BUFFER_OVERRUN\", {\n                    buffer: getBytesCopy(this.#data),\n                    length: this.#data.length,\n                    offset: this.#offset + alignedLength\n                });\n            }\n        }\n        return this.#data.slice(this.#offset, this.#offset + alignedLength)\n    }\n\n    // Create a sub-reader with the same underlying data, but offset\n    subReader(offset: number): Reader {\n        const reader = new Reader(this.#data.slice(this.#offset + offset), this.allowLoose, this.#maxInflation);\n        reader.#parent = this;\n        return reader;\n    }\n\n    // Read bytes\n    readBytes(length: number, loose?: boolean): Uint8Array {\n        let bytes = this.#peekBytes(0, length, !!loose);\n        this.#incrementBytesRead(length);\n        this.#offset += bytes.length;\n        // @TODO: Make sure the length..end bytes are all 0?\n        return bytes.slice(0, length);\n    }\n\n    // Read a numeric values\n    readValue(): bigint {\n        return toBigInt(this.readBytes(WordSize));\n    }\n\n    readIndex(): number {\n        return toNumber(this.readBytes(WordSize));\n    }\n}\n", "function number(n: number) {\n  if (!Number.isSafeInteger(n) || n < 0) throw new Error(`Wrong positive integer: ${n}`);\n}\n\nfunction bool(b: boolean) {\n  if (typeof b !== 'boolean') throw new Error(`Expected boolean, not ${b}`);\n}\n\nfunction bytes(b: Uint8Array | undefined, ...lengths: number[]) {\n  if (!(b instanceof Uint8Array)) throw new Error('Expected Uint8Array');\n  if (lengths.length > 0 && !lengths.includes(b.length))\n    throw new Error(`Expected Uint8Array of length ${lengths}, not of length=${b.length}`);\n}\n\ntype Hash = {\n  (data: Uint8Array): Uint8Array;\n  blockLen: number;\n  outputLen: number;\n  create: any;\n};\nfunction hash(hash: Hash) {\n  if (typeof hash !== 'function' || typeof hash.create !== 'function')\n    throw new Error('Hash should be wrapped by utils.wrapConstructor');\n  number(hash.outputLen);\n  number(hash.blockLen);\n}\n\nfunction exists(instance: any, checkFinished = true) {\n  if (instance.destroyed) throw new Error('Hash instance has been destroyed');\n  if (checkFinished && instance.finished) throw new Error('Hash#digest() has already been called');\n}\nfunction output(out: any, instance: any) {\n  bytes(out);\n  const min = instance.outputLen;\n  if (out.length < min) {\n    throw new Error(`digestInto() expects output buffer of length at least ${min}`);\n  }\n}\n\nexport { number, bool, bytes, hash, exists, output };\n\nconst assert = { number, bool, bytes, hash, exists, output };\nexport default assert;\n", "// We use WebCrypto aka globalThis.crypto, which exists in browsers and node.js 16+.\n// See utils.ts for details.\ndeclare const globalThis: Record<string, any> | undefined;\nexport const crypto =\n  typeof globalThis === 'object' && 'crypto' in globalThis ? globalThis.crypto : undefined;\n", "/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n\n// We use WebCrypto aka globalThis.crypto, which exists in browsers and node.js 16+.\n// node.js versions earlier than v19 don't declare it in global scope.\n// For node.js, package.json#exports field mapping rewrites import\n// from `crypto` to `cryptoNode`, which imports native module.\n// Makes the utils un-importable in browsers without a bundler.\n// Once node.js 18 is deprecated, we can just drop the import.\nimport { crypto } from '@noble/hashes/crypto';\n\n// prettier-ignore\nexport type TypedArray = Int8Array | Uint8ClampedArray | Uint8Array |\n  Uint16Array | Int16Array | Uint32Array | Int32Array;\n\nconst u8a = (a: any): a is Uint8Array => a instanceof Uint8Array;\n// Cast array to different type\nexport const u8 = (arr: TypedArray) => new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\nexport const u32 = (arr: TypedArray) =>\n  new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n\n// Cast array to view\nexport const createView = (arr: TypedArray) =>\n  new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n\n// The rotate right (circular right shift) operation for uint32\nexport const rotr = (word: number, shift: number) => (word << (32 - shift)) | (word >>> shift);\n\n// big-endian hardware is rare. Just in case someone still decides to run hashes:\n// early-throw an error because we don't support BE yet.\nexport const isLE = new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44;\nif (!isLE) throw new Error('Non little-endian hardware is not supported');\n\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) =>\n  i.toString(16).padStart(2, '0')\n);\n/**\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes: Uint8Array): string {\n  if (!u8a(bytes)) throw new Error('Uint8Array expected');\n  // pre-caching improves the speed 6x\n  let hex = '';\n  for (let i = 0; i < bytes.length; i++) {\n    hex += hexes[bytes[i]];\n  }\n  return hex;\n}\n\n/**\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nexport function hexToBytes(hex: string): Uint8Array {\n  if (typeof hex !== 'string') throw new Error('hex string expected, got ' + typeof hex);\n  const len = hex.length;\n  if (len % 2) throw new Error('padded hex string expected, got unpadded hex of length ' + len);\n  const array = new Uint8Array(len / 2);\n  for (let i = 0; i < array.length; i++) {\n    const j = i * 2;\n    const hexByte = hex.slice(j, j + 2);\n    const byte = Number.parseInt(hexByte, 16);\n    if (Number.isNaN(byte) || byte < 0) throw new Error('Invalid byte sequence');\n    array[i] = byte;\n  }\n  return array;\n}\n\n// There is no setImmediate in browser and setTimeout is slow.\n// call of async fn will return Promise, which will be fullfiled only on\n// next scheduler queue processing step and this is exactly what we need.\nexport const nextTick = async () => {};\n\n// Returns control to thread each 'tick' ms to avoid blocking\nexport async function asyncLoop(iters: number, tick: number, cb: (i: number) => void) {\n  let ts = Date.now();\n  for (let i = 0; i < iters; i++) {\n    cb(i);\n    // Date.now() is not monotonic, so in case if clock goes backwards we return return control too\n    const diff = Date.now() - ts;\n    if (diff >= 0 && diff < tick) continue;\n    await nextTick();\n    ts += diff;\n  }\n}\n\n// Global symbols in both browsers and Node.js since v11\n// See https://github.com/microsoft/TypeScript/issues/31535\ndeclare const TextEncoder: any;\n\n/**\n * @example utf8ToBytes('abc') // new Uint8Array([97, 98, 99])\n */\nexport function utf8ToBytes(str: string): Uint8Array {\n  if (typeof str !== 'string') throw new Error(`utf8ToBytes expected string, got ${typeof str}`);\n  return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n\nexport type Input = Uint8Array | string;\n/**\n * Normalizes (non-hex) string or Uint8Array to Uint8Array.\n * Warning: when Uint8Array is passed, it would NOT get copied.\n * Keep in mind for future mutable operations.\n */\nexport function toBytes(data: Input): Uint8Array {\n  if (typeof data === 'string') data = utf8ToBytes(data);\n  if (!u8a(data)) throw new Error(`expected Uint8Array, got ${typeof data}`);\n  return data;\n}\n\n/**\n * Copies several Uint8Arrays into one.\n */\nexport function concatBytes(...arrays: Uint8Array[]): Uint8Array {\n  const r = new Uint8Array(arrays.reduce((sum, a) => sum + a.length, 0));\n  let pad = 0; // walk through each item, ensure they have proper type\n  arrays.forEach((a) => {\n    if (!u8a(a)) throw new Error('Uint8Array expected');\n    r.set(a, pad);\n    pad += a.length;\n  });\n  return r;\n}\n\n// For runtime check if class implements interface\nexport abstract class Hash<T extends Hash<T>> {\n  abstract blockLen: number; // Bytes per block\n  abstract outputLen: number; // Bytes in output\n  abstract update(buf: Input): this;\n  // Writes digest into buf\n  abstract digestInto(buf: Uint8Array): void;\n  abstract digest(): Uint8Array;\n  /**\n   * Resets internal state. Makes Hash instance unusable.\n   * Reset is impossible for keyed hashes if key is consumed into state. If digest is not consumed\n   * by user, they will need to manually call `destroy()` when zeroing is necessary.\n   */\n  abstract destroy(): void;\n  /**\n   * Clones hash instance. Unsafe: doesn't check whether `to` is valid. Can be used as `clone()`\n   * when no options are passed.\n   * Reasons to use `_cloneInto` instead of clone: 1) performance 2) reuse instance => all internal\n   * buffers are overwritten => causes buffer overwrite which is used for digest in some cases.\n   * There are no guarantees for clean-up because it's impossible in JS.\n   */\n  abstract _cloneInto(to?: T): T;\n  // Safe version that clones internal state\n  clone(): T {\n    return this._cloneInto();\n  }\n}\n\n/**\n * XOF: streaming API to read digest in chunks.\n * Same as 'squeeze' in keccak/k12 and 'seek' in blake3, but more generic name.\n * When hash used in XOF mode it is up to user to call '.destroy' afterwards, since we cannot\n * destroy state, next call can require more bytes.\n */\nexport type HashXOF<T extends Hash<T>> = Hash<T> & {\n  xof(bytes: number): Uint8Array; // Read 'bytes' bytes from digest stream\n  xofInto(buf: Uint8Array): Uint8Array; // read buf.length bytes from digest stream into buf\n};\n\nconst toStr = {}.toString;\ntype EmptyObj = {};\nexport function checkOpts<T1 extends EmptyObj, T2 extends EmptyObj>(\n  defaults: T1,\n  opts?: T2\n): T1 & T2 {\n  if (opts !== undefined && toStr.call(opts) !== '[object Object]')\n    throw new Error('Options should be object or undefined');\n  const merged = Object.assign(defaults, opts);\n  return merged as T1 & T2;\n}\n\nexport type CHash = ReturnType<typeof wrapConstructor>;\n\nexport function wrapConstructor<T extends Hash<T>>(hashCons: () => Hash<T>) {\n  const hashC = (msg: Input): Uint8Array => hashCons().update(toBytes(msg)).digest();\n  const tmp = hashCons();\n  hashC.outputLen = tmp.outputLen;\n  hashC.blockLen = tmp.blockLen;\n  hashC.create = () => hashCons();\n  return hashC;\n}\n\nexport function wrapConstructorWithOpts<H extends Hash<H>, T extends Object>(\n  hashCons: (opts?: T) => Hash<H>\n) {\n  const hashC = (msg: Input, opts?: T): Uint8Array => hashCons(opts).update(toBytes(msg)).digest();\n  const tmp = hashCons({} as T);\n  hashC.outputLen = tmp.outputLen;\n  hashC.blockLen = tmp.blockLen;\n  hashC.create = (opts: T) => hashCons(opts);\n  return hashC;\n}\n\nexport function wrapXOFConstructorWithOpts<H extends HashXOF<H>, T extends Object>(\n  hashCons: (opts?: T) => HashXOF<H>\n) {\n  const hashC = (msg: Input, opts?: T): Uint8Array => hashCons(opts).update(toBytes(msg)).digest();\n  const tmp = hashCons({} as T);\n  hashC.outputLen = tmp.outputLen;\n  hashC.blockLen = tmp.blockLen;\n  hashC.create = (opts: T) => hashCons(opts);\n  return hashC;\n}\n\n/**\n * Secure PRNG. Uses `crypto.getRandomValues`, which defers to OS.\n */\nexport function randomBytes(bytesLength = 32): Uint8Array {\n  if (crypto && typeof crypto.getRandomValues === 'function') {\n    return crypto.getRandomValues(new Uint8Array(bytesLength));\n  }\n  throw new Error('crypto.getRandomValues must be defined');\n}\n", "import { hash as assertHash, bytes as assertBytes, exists as assertExists } from './_assert.js';\nimport { Hash, CHash, Input, toBytes } from './utils.js';\n// HMAC (RFC 2104)\nexport class HMAC<T extends Hash<T>> extends Hash<HMAC<T>> {\n  oHash: T;\n  iHash: T;\n  blockLen: number;\n  outputLen: number;\n  private finished = false;\n  private destroyed = false;\n\n  constructor(hash: CHash, _key: Input) {\n    super();\n    assertHash(hash);\n    const key = toBytes(_key);\n    this.iHash = hash.create() as T;\n    if (typeof this.iHash.update !== 'function')\n      throw new Error('Expected instance of class which extends utils.Hash');\n    this.blockLen = this.iHash.blockLen;\n    this.outputLen = this.iHash.outputLen;\n    const blockLen = this.blockLen;\n    const pad = new Uint8Array(blockLen);\n    // blockLen can be bigger than outputLen\n    pad.set(key.length > blockLen ? hash.create().update(key).digest() : key);\n    for (let i = 0; i < pad.length; i++) pad[i] ^= 0x36;\n    this.iHash.update(pad);\n    // By doing update (processing of first block) of outer hash here we can re-use it between multiple calls via clone\n    this.oHash = hash.create() as T;\n    // Undo internal XOR && apply outer XOR\n    for (let i = 0; i < pad.length; i++) pad[i] ^= 0x36 ^ 0x5c;\n    this.oHash.update(pad);\n    pad.fill(0);\n  }\n  update(buf: Input) {\n    assertExists(this);\n    this.iHash.update(buf);\n    return this;\n  }\n  digestInto(out: Uint8Array) {\n    assertExists(this);\n    assertBytes(out, this.outputLen);\n    this.finished = true;\n    this.iHash.digestInto(out);\n    this.oHash.update(out);\n    this.oHash.digestInto(out);\n    this.destroy();\n  }\n  digest() {\n    const out = new Uint8Array(this.oHash.outputLen);\n    this.digestInto(out);\n    return out;\n  }\n  _cloneInto(to?: HMAC<T>): HMAC<T> {\n    // Create new instance without calling constructor since key already in state and we don't know it.\n    to ||= Object.create(Object.getPrototypeOf(this), {});\n    const { oHash, iHash, finished, destroyed, blockLen, outputLen } = this;\n    to = to as this;\n    to.finished = finished;\n    to.destroyed = destroyed;\n    to.blockLen = blockLen;\n    to.outputLen = outputLen;\n    to.oHash = oHash._cloneInto(to.oHash);\n    to.iHash = iHash._cloneInto(to.iHash);\n    return to;\n  }\n  destroy() {\n    this.destroyed = true;\n    this.oHash.destroy();\n    this.iHash.destroy();\n  }\n}\n\n/**\n * HMAC: RFC2104 message authentication code.\n * @param hash - function that would be used e.g. sha256\n * @param key - message key\n * @param message - message data\n */\nexport const hmac = (hash: CHash, key: Input, message: Input): Uint8Array =>\n  new HMAC<any>(hash, key).update(message).digest();\nhmac.create = (hash: CHash, key: Input) => new HMAC<any>(hash, key);\n", "import { hash as assertHash, number as assertNumber } from './_assert.js';\nimport { hmac } from './hmac.js';\nimport { Hash, CHash, Input, createView, toBytes, checkOpts, asyncLoop } from './utils.js';\n\n// PBKDF (RFC 2898)\nexport type Pbkdf2Opt = {\n  c: number; // Iterations\n  dkLen?: number; // Desired key length in bytes (Intended output length in octets of the derived key\n  asyncTick?: number; // Maximum time in ms for which async function can block execution\n};\n// Common prologue and epilogue for sync/async functions\nfunction pbkdf2Init(hash: CHash, _password: Input, _salt: Input, _opts: Pbkdf2Opt) {\n  assertHash(hash);\n  const opts = checkOpts({ dkLen: 32, asyncTick: 10 }, _opts);\n  const { c, dkLen, asyncTick } = opts;\n  assertNumber(c);\n  assertNumber(dkLen);\n  assertNumber(asyncTick);\n  if (c < 1) throw new Error('PBKDF2: iterations (c) should be >= 1');\n  const password = toBytes(_password);\n  const salt = toBytes(_salt);\n  // DK = PBKDF2(PRF, Password, Salt, c, dkLen);\n  const DK = new Uint8Array(dkLen);\n  // U1 = PRF(Password, Salt + INT_32_BE(i))\n  const PRF = hmac.create(hash, password);\n  const PRFSalt = PRF._cloneInto().update(salt);\n  return { c, dkLen, asyncTick, DK, PRF, PRFSalt };\n}\n\nfunction pbkdf2Output<T extends Hash<T>>(\n  PRF: Hash<T>,\n  PRFSalt: Hash<T>,\n  DK: Uint8Array,\n  prfW: Hash<T>,\n  u: Uint8Array\n) {\n  PRF.destroy();\n  PRFSalt.destroy();\n  if (prfW) prfW.destroy();\n  u.fill(0);\n  return DK;\n}\n\n/**\n * PBKDF2-HMAC: RFC 2898 key derivation function\n * @param hash - hash function that would be used e.g. sha256\n * @param password - password from which a derived key is generated\n * @param salt - cryptographic salt\n * @param opts - {c, dkLen} where c is work factor and dkLen is output message size\n */\nexport function pbkdf2(hash: CHash, password: Input, salt: Input, opts: Pbkdf2Opt) {\n  const { c, dkLen, DK, PRF, PRFSalt } = pbkdf2Init(hash, password, salt, opts);\n  let prfW: any; // Working copy\n  const arr = new Uint8Array(4);\n  const view = createView(arr);\n  const u = new Uint8Array(PRF.outputLen);\n  // DK = T1 + T2 + \u22EF + Tdklen/hlen\n  for (let ti = 1, pos = 0; pos < dkLen; ti++, pos += PRF.outputLen) {\n    // Ti = F(Password, Salt, c, i)\n    const Ti = DK.subarray(pos, pos + PRF.outputLen);\n    view.setInt32(0, ti, false);\n    // F(Password, Salt, c, i) = U1 ^ U2 ^ \u22EF ^ Uc\n    // U1 = PRF(Password, Salt + INT_32_BE(i))\n    (prfW = PRFSalt._cloneInto(prfW)).update(arr).digestInto(u);\n    Ti.set(u.subarray(0, Ti.length));\n    for (let ui = 1; ui < c; ui++) {\n      // Uc = PRF(Password, Uc\u22121)\n      PRF._cloneInto(prfW).update(u).digestInto(u);\n      for (let i = 0; i < Ti.length; i++) Ti[i] ^= u[i];\n    }\n  }\n  return pbkdf2Output(PRF, PRFSalt, DK, prfW, u);\n}\n\nexport async function pbkdf2Async(hash: CHash, password: Input, salt: Input, opts: Pbkdf2Opt) {\n  const { c, dkLen, asyncTick, DK, PRF, PRFSalt } = pbkdf2Init(hash, password, salt, opts);\n  let prfW: any; // Working copy\n  const arr = new Uint8Array(4);\n  const view = createView(arr);\n  const u = new Uint8Array(PRF.outputLen);\n  // DK = T1 + T2 + \u22EF + Tdklen/hlen\n  for (let ti = 1, pos = 0; pos < dkLen; ti++, pos += PRF.outputLen) {\n    // Ti = F(Password, Salt, c, i)\n    const Ti = DK.subarray(pos, pos + PRF.outputLen);\n    view.setInt32(0, ti, false);\n    // F(Password, Salt, c, i) = U1 ^ U2 ^ \u22EF ^ Uc\n    // U1 = PRF(Password, Salt + INT_32_BE(i))\n    (prfW = PRFSalt._cloneInto(prfW)).update(arr).digestInto(u);\n    Ti.set(u.subarray(0, Ti.length));\n    await asyncLoop(c - 1, asyncTick, () => {\n      // Uc = PRF(Password, Uc\u22121)\n      PRF._cloneInto(prfW).update(u).digestInto(u);\n      for (let i = 0; i < Ti.length; i++) Ti[i] ^= u[i];\n    });\n  }\n  return pbkdf2Output(PRF, PRFSalt, DK, prfW, u);\n}\n", "import { exists, output } from './_assert.js';\nimport { Hash, createView, Input, toBytes } from './utils.js';\n\n// Polyfill for Safari 14\nfunction setBigUint64(view: DataView, byteOffset: number, value: bigint, isLE: boolean): void {\n  if (typeof view.setBigUint64 === 'function') return view.setBigUint64(byteOffset, value, isLE);\n  const _32n = BigInt(32);\n  const _u32_max = BigInt(0xffffffff);\n  const wh = Number((value >> _32n) & _u32_max);\n  const wl = Number(value & _u32_max);\n  const h = isLE ? 4 : 0;\n  const l = isLE ? 0 : 4;\n  view.setUint32(byteOffset + h, wh, isLE);\n  view.setUint32(byteOffset + l, wl, isLE);\n}\n\n// Base SHA2 class (RFC 6234)\nexport abstract class SHA2<T extends SHA2<T>> extends Hash<T> {\n  protected abstract process(buf: DataView, offset: number): void;\n  protected abstract get(): number[];\n  protected abstract set(...args: number[]): void;\n  abstract destroy(): void;\n  protected abstract roundClean(): void;\n  // For partial updates less than block size\n  protected buffer: Uint8Array;\n  protected view: DataView;\n  protected finished = false;\n  protected length = 0;\n  protected pos = 0;\n  protected destroyed = false;\n\n  constructor(\n    readonly blockLen: number,\n    public outputLen: number,\n    readonly padOffset: number,\n    readonly isLE: boolean\n  ) {\n    super();\n    this.buffer = new Uint8Array(blockLen);\n    this.view = createView(this.buffer);\n  }\n  update(data: Input): this {\n    exists(this);\n    const { view, buffer, blockLen } = this;\n    data = toBytes(data);\n    const len = data.length;\n    for (let pos = 0; pos < len; ) {\n      const take = Math.min(blockLen - this.pos, len - pos);\n      // Fast path: we have at least one block in input, cast it to view and process\n      if (take === blockLen) {\n        const dataView = createView(data);\n        for (; blockLen <= len - pos; pos += blockLen) this.process(dataView, pos);\n        continue;\n      }\n      buffer.set(data.subarray(pos, pos + take), this.pos);\n      this.pos += take;\n      pos += take;\n      if (this.pos === blockLen) {\n        this.process(view, 0);\n        this.pos = 0;\n      }\n    }\n    this.length += data.length;\n    this.roundClean();\n    return this;\n  }\n  digestInto(out: Uint8Array) {\n    exists(this);\n    output(out, this);\n    this.finished = true;\n    // Padding\n    // We can avoid allocation of buffer for padding completely if it\n    // was previously not allocated here. But it won't change performance.\n    const { buffer, view, blockLen, isLE } = this;\n    let { pos } = this;\n    // append the bit '1' to the message\n    buffer[pos++] = 0b10000000;\n    this.buffer.subarray(pos).fill(0);\n    // we have less than padOffset left in buffer, so we cannot put length in current block, need process it and pad again\n    if (this.padOffset > blockLen - pos) {\n      this.process(view, 0);\n      pos = 0;\n    }\n    // Pad until full block byte with zeros\n    for (let i = pos; i < blockLen; i++) buffer[i] = 0;\n    // Note: sha512 requires length to be 128bit integer, but length in JS will overflow before that\n    // You need to write around 2 exabytes (u64_max / 8 / (1024**6)) for this to happen.\n    // So we just write lowest 64 bits of that value.\n    setBigUint64(view, blockLen - 8, BigInt(this.length * 8), isLE);\n    this.process(view, 0);\n    const oview = createView(out);\n    const len = this.outputLen;\n    // NOTE: we do division by 4 later, which should be fused in single op with modulo by JIT\n    if (len % 4) throw new Error('_sha2: outputLen should be aligned to 32bit');\n    const outLen = len / 4;\n    const state = this.get();\n    if (outLen > state.length) throw new Error('_sha2: outputLen bigger than state');\n    for (let i = 0; i < outLen; i++) oview.setUint32(4 * i, state[i], isLE);\n  }\n  digest() {\n    const { buffer, outputLen } = this;\n    this.digestInto(buffer);\n    const res = buffer.slice(0, outputLen);\n    this.destroy();\n    return res;\n  }\n  _cloneInto(to?: T): T {\n    to ||= new (this.constructor as any)() as T;\n    to.set(...this.get());\n    const { blockLen, buffer, length, finished, destroyed, pos } = this;\n    to.length = length;\n    to.pos = pos;\n    to.finished = finished;\n    to.destroyed = destroyed;\n    if (length % blockLen) to.buffer.set(buffer);\n    return to;\n  }\n}\n", "import { SHA2 } from './_sha2.js';\nimport { rotr, wrapConstructor } from './utils.js';\n\n// SHA2-256 need to try 2^128 hashes to execute birthday attack.\n// BTC network is doing 2^67 hashes/sec as per early 2023.\n\n// Choice: a ? b : c\nconst Chi = (a: number, b: number, c: number) => (a & b) ^ (~a & c);\n// Majority function, true if any two inpust is true\nconst Maj = (a: number, b: number, c: number) => (a & b) ^ (a & c) ^ (b & c);\n\n// Round constants:\n// first 32 bits of the fractional parts of the cube roots of the first 64 primes 2..311)\n// prettier-ignore\nconst SHA256_K = /* @__PURE__ */new Uint32Array([\n  0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n  0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n  0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n  0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n  0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n  0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n  0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n  0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n]);\n\n// Initial state (first 32 bits of the fractional parts of the square roots of the first 8 primes 2..19):\n// prettier-ignore\nconst IV = /* @__PURE__ */new Uint32Array([\n  0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n]);\n\n// Temporary buffer, not used to store anything between runs\n// Named this way because it matches specification.\nconst SHA256_W = /* @__PURE__ */ new Uint32Array(64);\nclass SHA256 extends SHA2<SHA256> {\n  // We cannot use array here since array allows indexing by variable\n  // which means optimizer/compiler cannot use registers.\n  A = IV[0] | 0;\n  B = IV[1] | 0;\n  C = IV[2] | 0;\n  D = IV[3] | 0;\n  E = IV[4] | 0;\n  F = IV[5] | 0;\n  G = IV[6] | 0;\n  H = IV[7] | 0;\n\n  constructor() {\n    super(64, 32, 8, false);\n  }\n  protected get(): [number, number, number, number, number, number, number, number] {\n    const { A, B, C, D, E, F, G, H } = this;\n    return [A, B, C, D, E, F, G, H];\n  }\n  // prettier-ignore\n  protected set(\n    A: number, B: number, C: number, D: number, E: number, F: number, G: number, H: number\n  ) {\n    this.A = A | 0;\n    this.B = B | 0;\n    this.C = C | 0;\n    this.D = D | 0;\n    this.E = E | 0;\n    this.F = F | 0;\n    this.G = G | 0;\n    this.H = H | 0;\n  }\n  protected process(view: DataView, offset: number): void {\n    // Extend the first 16 words into the remaining 48 words w[16..63] of the message schedule array\n    for (let i = 0; i < 16; i++, offset += 4) SHA256_W[i] = view.getUint32(offset, false);\n    for (let i = 16; i < 64; i++) {\n      const W15 = SHA256_W[i - 15];\n      const W2 = SHA256_W[i - 2];\n      const s0 = rotr(W15, 7) ^ rotr(W15, 18) ^ (W15 >>> 3);\n      const s1 = rotr(W2, 17) ^ rotr(W2, 19) ^ (W2 >>> 10);\n      SHA256_W[i] = (s1 + SHA256_W[i - 7] + s0 + SHA256_W[i - 16]) | 0;\n    }\n    // Compression function main loop, 64 rounds\n    let { A, B, C, D, E, F, G, H } = this;\n    for (let i = 0; i < 64; i++) {\n      const sigma1 = rotr(E, 6) ^ rotr(E, 11) ^ rotr(E, 25);\n      const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n      const sigma0 = rotr(A, 2) ^ rotr(A, 13) ^ rotr(A, 22);\n      const T2 = (sigma0 + Maj(A, B, C)) | 0;\n      H = G;\n      G = F;\n      F = E;\n      E = (D + T1) | 0;\n      D = C;\n      C = B;\n      B = A;\n      A = (T1 + T2) | 0;\n    }\n    // Add the compressed chunk to the current hash value\n    A = (A + this.A) | 0;\n    B = (B + this.B) | 0;\n    C = (C + this.C) | 0;\n    D = (D + this.D) | 0;\n    E = (E + this.E) | 0;\n    F = (F + this.F) | 0;\n    G = (G + this.G) | 0;\n    H = (H + this.H) | 0;\n    this.set(A, B, C, D, E, F, G, H);\n  }\n  protected roundClean() {\n    SHA256_W.fill(0);\n  }\n  destroy() {\n    this.set(0, 0, 0, 0, 0, 0, 0, 0);\n    this.buffer.fill(0);\n  }\n}\n// Constants from https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf\nclass SHA224 extends SHA256 {\n  A = 0xc1059ed8 | 0;\n  B = 0x367cd507 | 0;\n  C = 0x3070dd17 | 0;\n  D = 0xf70e5939 | 0;\n  E = 0xffc00b31 | 0;\n  F = 0x68581511 | 0;\n  G = 0x64f98fa7 | 0;\n  H = 0xbefa4fa4 | 0;\n  constructor() {\n    super();\n    this.outputLen = 28;\n  }\n}\n\n/**\n * SHA2-256 hash function\n * @param message - data that would be hashed\n */\nexport const sha256 = /* @__PURE__ */ wrapConstructor(() => new SHA256());\nexport const sha224 = /* @__PURE__ */ wrapConstructor(() => new SHA224());\n", "const U32_MASK64 = /* @__PURE__ */ BigInt(2 ** 32 - 1);\nconst _32n = /* @__PURE__ */ BigInt(32);\n\n// We are not using BigUint64Array, because they are extremely slow as per 2022\nfunction fromBig(n: bigint, le = false) {\n  if (le) return { h: Number(n & U32_MASK64), l: Number((n >> _32n) & U32_MASK64) };\n  return { h: Number((n >> _32n) & U32_MASK64) | 0, l: Number(n & U32_MASK64) | 0 };\n}\n\nfunction split(lst: bigint[], le = false) {\n  let Ah = new Uint32Array(lst.length);\n  let Al = new Uint32Array(lst.length);\n  for (let i = 0; i < lst.length; i++) {\n    const { h, l } = fromBig(lst[i], le);\n    [Ah[i], Al[i]] = [h, l];\n  }\n  return [Ah, Al];\n}\n\nconst toBig = (h: number, l: number) => (BigInt(h >>> 0) << _32n) | BigInt(l >>> 0);\n// for Shift in [0, 32)\nconst shrSH = (h: number, _l: number, s: number) => h >>> s;\nconst shrSL = (h: number, l: number, s: number) => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in [1, 32)\nconst rotrSH = (h: number, l: number, s: number) => (h >>> s) | (l << (32 - s));\nconst rotrSL = (h: number, l: number, s: number) => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotrBH = (h: number, l: number, s: number) => (h << (64 - s)) | (l >>> (s - 32));\nconst rotrBL = (h: number, l: number, s: number) => (h >>> (s - 32)) | (l << (64 - s));\n// Right rotate for shift===32 (just swaps l&h)\nconst rotr32H = (_h: number, l: number) => l;\nconst rotr32L = (h: number, _l: number) => h;\n// Left rotate for Shift in [1, 32)\nconst rotlSH = (h: number, l: number, s: number) => (h << s) | (l >>> (32 - s));\nconst rotlSL = (h: number, l: number, s: number) => (l << s) | (h >>> (32 - s));\n// Left rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotlBH = (h: number, l: number, s: number) => (l << (s - 32)) | (h >>> (64 - s));\nconst rotlBL = (h: number, l: number, s: number) => (h << (s - 32)) | (l >>> (64 - s));\n\n// JS uses 32-bit signed integers for bitwise operations which means we cannot\n// simple take carry out of low bit sum by shift, we need to use division.\nfunction add(Ah: number, Al: number, Bh: number, Bl: number) {\n  const l = (Al >>> 0) + (Bl >>> 0);\n  return { h: (Ah + Bh + ((l / 2 ** 32) | 0)) | 0, l: l | 0 };\n}\n// Addition with more than 2 elements\nconst add3L = (Al: number, Bl: number, Cl: number) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0);\nconst add3H = (low: number, Ah: number, Bh: number, Ch: number) =>\n  (Ah + Bh + Ch + ((low / 2 ** 32) | 0)) | 0;\nconst add4L = (Al: number, Bl: number, Cl: number, Dl: number) =>\n  (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0);\nconst add4H = (low: number, Ah: number, Bh: number, Ch: number, Dh: number) =>\n  (Ah + Bh + Ch + Dh + ((low / 2 ** 32) | 0)) | 0;\nconst add5L = (Al: number, Bl: number, Cl: number, Dl: number, El: number) =>\n  (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0) + (El >>> 0);\nconst add5H = (low: number, Ah: number, Bh: number, Ch: number, Dh: number, Eh: number) =>\n  (Ah + Bh + Ch + Dh + Eh + ((low / 2 ** 32) | 0)) | 0;\n\n// prettier-ignore\nexport {\n  fromBig, split, toBig,\n  shrSH, shrSL,\n  rotrSH, rotrSL, rotrBH, rotrBL,\n  rotr32H, rotr32L,\n  rotlSH, rotlSL, rotlBH, rotlBL,\n  add, add3L, add3H, add4L, add4H, add5H, add5L,\n};\n// prettier-ignore\nconst u64 = {\n  fromBig, split, toBig,\n  shrSH, shrSL,\n  rotrSH, rotrSL, rotrBH, rotrBL,\n  rotr32H, rotr32L,\n  rotlSH, rotlSL, rotlBH, rotlBL,\n  add, add3L, add3H, add4L, add4H, add5H, add5L,\n};\nexport default u64;\n", "import { SHA2 } from './_sha2.js';\nimport u64 from './_u64.js';\nimport { wrapConstructor } from './utils.js';\n\n// Round contants (first 32 bits of the fractional parts of the cube roots of the first 80 primes 2..409):\n// prettier-ignore\nconst [SHA512_Kh, SHA512_Kl] = /* @__PURE__ */ (() => u64.split([\n  '0x428a2f98d728ae22', '0x7137449123ef65cd', '0xb5c0fbcfec4d3b2f', '0xe9b5dba58189dbbc',\n  '0x3956c25bf348b538', '0x59f111f1b605d019', '0x923f82a4af194f9b', '0xab1c5ed5da6d8118',\n  '0xd807aa98a3030242', '0x12835b0145706fbe', '0x243185be4ee4b28c', '0x550c7dc3d5ffb4e2',\n  '0x72be5d74f27b896f', '0x80deb1fe3b1696b1', '0x9bdc06a725c71235', '0xc19bf174cf692694',\n  '0xe49b69c19ef14ad2', '0xefbe4786384f25e3', '0x0fc19dc68b8cd5b5', '0x240ca1cc77ac9c65',\n  '0x2de92c6f592b0275', '0x4a7484aa6ea6e483', '0x5cb0a9dcbd41fbd4', '0x76f988da831153b5',\n  '0x983e5152ee66dfab', '0xa831c66d2db43210', '0xb00327c898fb213f', '0xbf597fc7beef0ee4',\n  '0xc6e00bf33da88fc2', '0xd5a79147930aa725', '0x06ca6351e003826f', '0x142929670a0e6e70',\n  '0x27b70a8546d22ffc', '0x2e1b21385c26c926', '0x4d2c6dfc5ac42aed', '0x53380d139d95b3df',\n  '0x650a73548baf63de', '0x766a0abb3c77b2a8', '0x81c2c92e47edaee6', '0x92722c851482353b',\n  '0xa2bfe8a14cf10364', '0xa81a664bbc423001', '0xc24b8b70d0f89791', '0xc76c51a30654be30',\n  '0xd192e819d6ef5218', '0xd69906245565a910', '0xf40e35855771202a', '0x106aa07032bbd1b8',\n  '0x19a4c116b8d2d0c8', '0x1e376c085141ab53', '0x2748774cdf8eeb99', '0x34b0bcb5e19b48a8',\n  '0x391c0cb3c5c95a63', '0x4ed8aa4ae3418acb', '0x5b9cca4f7763e373', '0x682e6ff3d6b2b8a3',\n  '0x748f82ee5defb2fc', '0x78a5636f43172f60', '0x84c87814a1f0ab72', '0x8cc702081a6439ec',\n  '0x90befffa23631e28', '0xa4506cebde82bde9', '0xbef9a3f7b2c67915', '0xc67178f2e372532b',\n  '0xca273eceea26619c', '0xd186b8c721c0c207', '0xeada7dd6cde0eb1e', '0xf57d4f7fee6ed178',\n  '0x06f067aa72176fba', '0x0a637dc5a2c898a6', '0x113f9804bef90dae', '0x1b710b35131c471b',\n  '0x28db77f523047d84', '0x32caab7b40c72493', '0x3c9ebe0a15c9bebc', '0x431d67c49c100d4c',\n  '0x4cc5d4becb3e42b6', '0x597f299cfc657e2a', '0x5fcb6fab3ad6faec', '0x6c44198c4a475817'\n].map(n => BigInt(n))))();\n\n// Temporary buffer, not used to store anything between runs\nconst SHA512_W_H = /* @__PURE__ */ new Uint32Array(80);\nconst SHA512_W_L = /* @__PURE__ */ new Uint32Array(80);\nexport class SHA512 extends SHA2<SHA512> {\n  // We cannot use array here since array allows indexing by variable which means optimizer/compiler cannot use registers.\n  // Also looks cleaner and easier to verify with spec.\n  // Initial state (first 32 bits of the fractional parts of the square roots of the first 8 primes 2..19):\n  // h -- high 32 bits, l -- low 32 bits\n  Ah = 0x6a09e667 | 0;\n  Al = 0xf3bcc908 | 0;\n  Bh = 0xbb67ae85 | 0;\n  Bl = 0x84caa73b | 0;\n  Ch = 0x3c6ef372 | 0;\n  Cl = 0xfe94f82b | 0;\n  Dh = 0xa54ff53a | 0;\n  Dl = 0x5f1d36f1 | 0;\n  Eh = 0x510e527f | 0;\n  El = 0xade682d1 | 0;\n  Fh = 0x9b05688c | 0;\n  Fl = 0x2b3e6c1f | 0;\n  Gh = 0x1f83d9ab | 0;\n  Gl = 0xfb41bd6b | 0;\n  Hh = 0x5be0cd19 | 0;\n  Hl = 0x137e2179 | 0;\n\n  constructor() {\n    super(128, 64, 16, false);\n  }\n  // prettier-ignore\n  protected get(): [\n    number, number, number, number, number, number, number, number,\n    number, number, number, number, number, number, number, number\n  ] {\n    const { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n    return [Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl];\n  }\n  // prettier-ignore\n  protected set(\n    Ah: number, Al: number, Bh: number, Bl: number, Ch: number, Cl: number, Dh: number, Dl: number,\n    Eh: number, El: number, Fh: number, Fl: number, Gh: number, Gl: number, Hh: number, Hl: number\n  ) {\n    this.Ah = Ah | 0;\n    this.Al = Al | 0;\n    this.Bh = Bh | 0;\n    this.Bl = Bl | 0;\n    this.Ch = Ch | 0;\n    this.Cl = Cl | 0;\n    this.Dh = Dh | 0;\n    this.Dl = Dl | 0;\n    this.Eh = Eh | 0;\n    this.El = El | 0;\n    this.Fh = Fh | 0;\n    this.Fl = Fl | 0;\n    this.Gh = Gh | 0;\n    this.Gl = Gl | 0;\n    this.Hh = Hh | 0;\n    this.Hl = Hl | 0;\n  }\n  protected process(view: DataView, offset: number) {\n    // Extend the first 16 words into the remaining 64 words w[16..79] of the message schedule array\n    for (let i = 0; i < 16; i++, offset += 4) {\n      SHA512_W_H[i] = view.getUint32(offset);\n      SHA512_W_L[i] = view.getUint32((offset += 4));\n    }\n    for (let i = 16; i < 80; i++) {\n      // s0 := (w[i-15] rightrotate 1) xor (w[i-15] rightrotate 8) xor (w[i-15] rightshift 7)\n      const W15h = SHA512_W_H[i - 15] | 0;\n      const W15l = SHA512_W_L[i - 15] | 0;\n      const s0h = u64.rotrSH(W15h, W15l, 1) ^ u64.rotrSH(W15h, W15l, 8) ^ u64.shrSH(W15h, W15l, 7);\n      const s0l = u64.rotrSL(W15h, W15l, 1) ^ u64.rotrSL(W15h, W15l, 8) ^ u64.shrSL(W15h, W15l, 7);\n      // s1 := (w[i-2] rightrotate 19) xor (w[i-2] rightrotate 61) xor (w[i-2] rightshift 6)\n      const W2h = SHA512_W_H[i - 2] | 0;\n      const W2l = SHA512_W_L[i - 2] | 0;\n      const s1h = u64.rotrSH(W2h, W2l, 19) ^ u64.rotrBH(W2h, W2l, 61) ^ u64.shrSH(W2h, W2l, 6);\n      const s1l = u64.rotrSL(W2h, W2l, 19) ^ u64.rotrBL(W2h, W2l, 61) ^ u64.shrSL(W2h, W2l, 6);\n      // SHA256_W[i] = s0 + s1 + SHA256_W[i - 7] + SHA256_W[i - 16];\n      const SUMl = u64.add4L(s0l, s1l, SHA512_W_L[i - 7], SHA512_W_L[i - 16]);\n      const SUMh = u64.add4H(SUMl, s0h, s1h, SHA512_W_H[i - 7], SHA512_W_H[i - 16]);\n      SHA512_W_H[i] = SUMh | 0;\n      SHA512_W_L[i] = SUMl | 0;\n    }\n    let { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n    // Compression function main loop, 80 rounds\n    for (let i = 0; i < 80; i++) {\n      // S1 := (e rightrotate 14) xor (e rightrotate 18) xor (e rightrotate 41)\n      const sigma1h = u64.rotrSH(Eh, El, 14) ^ u64.rotrSH(Eh, El, 18) ^ u64.rotrBH(Eh, El, 41);\n      const sigma1l = u64.rotrSL(Eh, El, 14) ^ u64.rotrSL(Eh, El, 18) ^ u64.rotrBL(Eh, El, 41);\n      //const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n      const CHIh = (Eh & Fh) ^ (~Eh & Gh);\n      const CHIl = (El & Fl) ^ (~El & Gl);\n      // T1 = H + sigma1 + Chi(E, F, G) + SHA512_K[i] + SHA512_W[i]\n      // prettier-ignore\n      const T1ll = u64.add5L(Hl, sigma1l, CHIl, SHA512_Kl[i], SHA512_W_L[i]);\n      const T1h = u64.add5H(T1ll, Hh, sigma1h, CHIh, SHA512_Kh[i], SHA512_W_H[i]);\n      const T1l = T1ll | 0;\n      // S0 := (a rightrotate 28) xor (a rightrotate 34) xor (a rightrotate 39)\n      const sigma0h = u64.rotrSH(Ah, Al, 28) ^ u64.rotrBH(Ah, Al, 34) ^ u64.rotrBH(Ah, Al, 39);\n      const sigma0l = u64.rotrSL(Ah, Al, 28) ^ u64.rotrBL(Ah, Al, 34) ^ u64.rotrBL(Ah, Al, 39);\n      const MAJh = (Ah & Bh) ^ (Ah & Ch) ^ (Bh & Ch);\n      const MAJl = (Al & Bl) ^ (Al & Cl) ^ (Bl & Cl);\n      Hh = Gh | 0;\n      Hl = Gl | 0;\n      Gh = Fh | 0;\n      Gl = Fl | 0;\n      Fh = Eh | 0;\n      Fl = El | 0;\n      ({ h: Eh, l: El } = u64.add(Dh | 0, Dl | 0, T1h | 0, T1l | 0));\n      Dh = Ch | 0;\n      Dl = Cl | 0;\n      Ch = Bh | 0;\n      Cl = Bl | 0;\n      Bh = Ah | 0;\n      Bl = Al | 0;\n      const All = u64.add3L(T1l, sigma0l, MAJl);\n      Ah = u64.add3H(All, T1h, sigma0h, MAJh);\n      Al = All | 0;\n    }\n    // Add the compressed chunk to the current hash value\n    ({ h: Ah, l: Al } = u64.add(this.Ah | 0, this.Al | 0, Ah | 0, Al | 0));\n    ({ h: Bh, l: Bl } = u64.add(this.Bh | 0, this.Bl | 0, Bh | 0, Bl | 0));\n    ({ h: Ch, l: Cl } = u64.add(this.Ch | 0, this.Cl | 0, Ch | 0, Cl | 0));\n    ({ h: Dh, l: Dl } = u64.add(this.Dh | 0, this.Dl | 0, Dh | 0, Dl | 0));\n    ({ h: Eh, l: El } = u64.add(this.Eh | 0, this.El | 0, Eh | 0, El | 0));\n    ({ h: Fh, l: Fl } = u64.add(this.Fh | 0, this.Fl | 0, Fh | 0, Fl | 0));\n    ({ h: Gh, l: Gl } = u64.add(this.Gh | 0, this.Gl | 0, Gh | 0, Gl | 0));\n    ({ h: Hh, l: Hl } = u64.add(this.Hh | 0, this.Hl | 0, Hh | 0, Hl | 0));\n    this.set(Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl);\n  }\n  protected roundClean() {\n    SHA512_W_H.fill(0);\n    SHA512_W_L.fill(0);\n  }\n  destroy() {\n    this.buffer.fill(0);\n    this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);\n  }\n}\n\nclass SHA512_224 extends SHA512 {\n  // h -- high 32 bits, l -- low 32 bits\n  Ah = 0x8c3d37c8 | 0;\n  Al = 0x19544da2 | 0;\n  Bh = 0x73e19966 | 0;\n  Bl = 0x89dcd4d6 | 0;\n  Ch = 0x1dfab7ae | 0;\n  Cl = 0x32ff9c82 | 0;\n  Dh = 0x679dd514 | 0;\n  Dl = 0x582f9fcf | 0;\n  Eh = 0x0f6d2b69 | 0;\n  El = 0x7bd44da8 | 0;\n  Fh = 0x77e36f73 | 0;\n  Fl = 0x04c48942 | 0;\n  Gh = 0x3f9d85a8 | 0;\n  Gl = 0x6a1d36c8 | 0;\n  Hh = 0x1112e6ad | 0;\n  Hl = 0x91d692a1 | 0;\n\n  constructor() {\n    super();\n    this.outputLen = 28;\n  }\n}\n\nclass SHA512_256 extends SHA512 {\n  // h -- high 32 bits, l -- low 32 bits\n  Ah = 0x22312194 | 0;\n  Al = 0xfc2bf72c | 0;\n  Bh = 0x9f555fa3 | 0;\n  Bl = 0xc84c64c2 | 0;\n  Ch = 0x2393b86b | 0;\n  Cl = 0x6f53b151 | 0;\n  Dh = 0x96387719 | 0;\n  Dl = 0x5940eabd | 0;\n  Eh = 0x96283ee2 | 0;\n  El = 0xa88effe3 | 0;\n  Fh = 0xbe5e1e25 | 0;\n  Fl = 0x53863992 | 0;\n  Gh = 0x2b0199fc | 0;\n  Gl = 0x2c85b8aa | 0;\n  Hh = 0x0eb72ddc | 0;\n  Hl = 0x81c52ca2 | 0;\n\n  constructor() {\n    super();\n    this.outputLen = 32;\n  }\n}\n\nclass SHA384 extends SHA512 {\n  // h -- high 32 bits, l -- low 32 bits\n  Ah = 0xcbbb9d5d | 0;\n  Al = 0xc1059ed8 | 0;\n  Bh = 0x629a292a | 0;\n  Bl = 0x367cd507 | 0;\n  Ch = 0x9159015a | 0;\n  Cl = 0x3070dd17 | 0;\n  Dh = 0x152fecd8 | 0;\n  Dl = 0xf70e5939 | 0;\n  Eh = 0x67332667 | 0;\n  El = 0xffc00b31 | 0;\n  Fh = 0x8eb44a87 | 0;\n  Fl = 0x68581511 | 0;\n  Gh = 0xdb0c2e0d | 0;\n  Gl = 0x64f98fa7 | 0;\n  Hh = 0x47b5481d | 0;\n  Hl = 0xbefa4fa4 | 0;\n\n  constructor() {\n    super();\n    this.outputLen = 48;\n  }\n}\n\nexport const sha512 = /* @__PURE__ */ wrapConstructor(() => new SHA512());\nexport const sha512_224 = /* @__PURE__ */ wrapConstructor(() => new SHA512_224());\nexport const sha512_256 = /* @__PURE__ */ wrapConstructor(() => new SHA512_256());\nexport const sha384 = /* @__PURE__ */ wrapConstructor(() => new SHA384());\n", "/* Browser Crypto Shims */\n\nimport { hmac } from \"@noble/hashes/hmac\";\nimport { pbkdf2 } from \"@noble/hashes/pbkdf2\";\nimport { sha256 } from \"@noble/hashes/sha256\";\nimport { sha512 } from \"@noble/hashes/sha512\";\n\nimport { assert, assertArgument } from \"../utils/index.js\";\n\n\ndeclare global {\n    interface Window { }\n\n    const window: Window;\n    const self: Window;\n}\n\n\nfunction getGlobal(): any {\n  if (typeof self !== 'undefined') { return self; }\n  if (typeof window !== 'undefined') { return window; }\n  if (typeof global !== 'undefined') { return global; }\n  throw new Error('unable to locate global object');\n};\n\nconst anyGlobal = getGlobal();\nconst crypto: any = anyGlobal.crypto || anyGlobal.msCrypto;\n\n\nexport interface CryptoHasher {\n    update(data: Uint8Array): CryptoHasher;\n    digest(): Uint8Array;\n}\n\nexport function createHash(algo: string): CryptoHasher {\n    switch (algo) {\n        case \"sha256\": return sha256.create();\n        case \"sha512\": return sha512.create();\n    }\n    assertArgument(false, \"invalid hashing algorithm name\", \"algorithm\", algo);\n}\n\nexport function createHmac(_algo: string, key: Uint8Array): CryptoHasher {\n    const algo = ({ sha256, sha512 }[_algo]);\n    assertArgument(algo != null, \"invalid hmac algorithm\", \"algorithm\", _algo);\n    return hmac.create(algo, key);\n}\n\nexport function pbkdf2Sync(password: Uint8Array, salt: Uint8Array, iterations: number, keylen: number, _algo: \"sha256\" | \"sha512\"): Uint8Array {\n    const algo = ({ sha256, sha512 }[_algo]);\n    assertArgument(algo != null, \"invalid pbkdf2 algorithm\", \"algorithm\", _algo);\n    return pbkdf2(algo, password, salt, { c: iterations, dkLen: keylen });\n}\n\nexport function randomBytes(length: number): Uint8Array {\n    assert(crypto != null, \"platform does not support secure random numbers\", \"UNSUPPORTED_OPERATION\", {\n        operation: \"randomBytes\" });\n\n    assertArgument(Number.isInteger(length) && length > 0 && length <= 1024, \"invalid length\", \"length\", length);\n\n    const result = new Uint8Array(length);\n    crypto.getRandomValues(result);\n    return result;\n}\n", "/**\n *  An **HMAC** enables verification that a given key was used\n *  to authenticate a payload.\n *\n *  See: [[link-wiki-hmac]]\n *\n *  @_subsection: api/crypto:HMAC  [about-hmac]\n */\nimport { createHmac } from \"./crypto.js\";\nimport { getBytes, hexlify } from \"../utils/index.js\";\n\nimport type { BytesLike } from \"../utils/index.js\";\n\n\nlet locked = false;\n\nconst _computeHmac = function(algorithm: \"sha256\" | \"sha512\", key: Uint8Array, data: Uint8Array): BytesLike {\n    return createHmac(algorithm, key).update(data).digest();\n}\n\nlet __computeHmac = _computeHmac;\n\n/**\n *  Return the HMAC for %%data%% using the %%key%% key with the underlying\n *  %%algo%% used for compression.\n *\n *  @example:\n *    key = id(\"some-secret\")\n *\n *    // Compute the HMAC\n *    computeHmac(\"sha256\", key, \"0x1337\")\n *    //_result:\n *\n *    // To compute the HMAC of UTF-8 data, the data must be\n *    // converted to UTF-8 bytes\n *    computeHmac(\"sha256\", key, toUtf8Bytes(\"Hello World\"))\n *    //_result:\n *\n */\nexport function computeHmac(algorithm: \"sha256\" | \"sha512\", _key: BytesLike, _data: BytesLike): string {\n    const key = getBytes(_key, \"key\");\n    const data = getBytes(_data, \"data\");\n    return hexlify(__computeHmac(algorithm, key, data));\n}\ncomputeHmac._ = _computeHmac;\ncomputeHmac.lock =  function() { locked = true; }\ncomputeHmac.register = function(func: (algorithm: \"sha256\" | \"sha512\", key: Uint8Array, data: Uint8Array) => BytesLike) {\n    if (locked) { throw new Error(\"computeHmac is locked\"); }\n    __computeHmac = func;\n}\nObject.freeze(computeHmac);\n", "import { bytes, exists, number, output } from './_assert.js';\nimport { rotlBH, rotlBL, rotlSH, rotlSL, split } from './_u64.js';\nimport {\n  Hash,\n  u32,\n  Input,\n  toBytes,\n  wrapConstructor,\n  wrapXOFConstructorWithOpts,\n  HashXOF,\n} from './utils.js';\n\n// SHA3 (keccak) is based on a new design: basically, the internal state is bigger than output size.\n// It's called a sponge function.\n\n// Various per round constants calculations\nconst [SHA3_PI, SHA3_ROTL, _SHA3_IOTA]: [number[], number[], bigint[]] = [[], [], []];\nconst _0n = /* @__PURE__ */ BigInt(0);\nconst _1n = /* @__PURE__ */ BigInt(1);\nconst _2n = /* @__PURE__ */ BigInt(2);\nconst _7n = /* @__PURE__ */ BigInt(7);\nconst _256n = /* @__PURE__ */ BigInt(256);\nconst _0x71n = /* @__PURE__ */ BigInt(0x71);\nfor (let round = 0, R = _1n, x = 1, y = 0; round < 24; round++) {\n  // Pi\n  [x, y] = [y, (2 * x + 3 * y) % 5];\n  SHA3_PI.push(2 * (5 * y + x));\n  // Rotational\n  SHA3_ROTL.push((((round + 1) * (round + 2)) / 2) % 64);\n  // Iota\n  let t = _0n;\n  for (let j = 0; j < 7; j++) {\n    R = ((R << _1n) ^ ((R >> _7n) * _0x71n)) % _256n;\n    if (R & _2n) t ^= _1n << ((_1n << /* @__PURE__ */ BigInt(j)) - _1n);\n  }\n  _SHA3_IOTA.push(t);\n}\nconst [SHA3_IOTA_H, SHA3_IOTA_L] = /* @__PURE__ */ split(_SHA3_IOTA, true);\n\n// Left rotation (without 0, 32, 64)\nconst rotlH = (h: number, l: number, s: number) => (s > 32 ? rotlBH(h, l, s) : rotlSH(h, l, s));\nconst rotlL = (h: number, l: number, s: number) => (s > 32 ? rotlBL(h, l, s) : rotlSL(h, l, s));\n\n// Same as keccakf1600, but allows to skip some rounds\nexport function keccakP(s: Uint32Array, rounds: number = 24) {\n  const B = new Uint32Array(5 * 2);\n  // NOTE: all indices are x2 since we store state as u32 instead of u64 (bigints to slow in js)\n  for (let round = 24 - rounds; round < 24; round++) {\n    // Theta \u03B8\n    for (let x = 0; x < 10; x++) B[x] = s[x] ^ s[x + 10] ^ s[x + 20] ^ s[x + 30] ^ s[x + 40];\n    for (let x = 0; x < 10; x += 2) {\n      const idx1 = (x + 8) % 10;\n      const idx0 = (x + 2) % 10;\n      const B0 = B[idx0];\n      const B1 = B[idx0 + 1];\n      const Th = rotlH(B0, B1, 1) ^ B[idx1];\n      const Tl = rotlL(B0, B1, 1) ^ B[idx1 + 1];\n      for (let y = 0; y < 50; y += 10) {\n        s[x + y] ^= Th;\n        s[x + y + 1] ^= Tl;\n      }\n    }\n    // Rho (\u03C1) and Pi (\u03C0)\n    let curH = s[2];\n    let curL = s[3];\n    for (let t = 0; t < 24; t++) {\n      const shift = SHA3_ROTL[t];\n      const Th = rotlH(curH, curL, shift);\n      const Tl = rotlL(curH, curL, shift);\n      const PI = SHA3_PI[t];\n      curH = s[PI];\n      curL = s[PI + 1];\n      s[PI] = Th;\n      s[PI + 1] = Tl;\n    }\n    // Chi (\u03C7)\n    for (let y = 0; y < 50; y += 10) {\n      for (let x = 0; x < 10; x++) B[x] = s[y + x];\n      for (let x = 0; x < 10; x++) s[y + x] ^= ~B[(x + 2) % 10] & B[(x + 4) % 10];\n    }\n    // Iota (\u03B9)\n    s[0] ^= SHA3_IOTA_H[round];\n    s[1] ^= SHA3_IOTA_L[round];\n  }\n  B.fill(0);\n}\n\nexport class Keccak extends Hash<Keccak> implements HashXOF<Keccak> {\n  protected state: Uint8Array;\n  protected pos = 0;\n  protected posOut = 0;\n  protected finished = false;\n  protected state32: Uint32Array;\n  protected destroyed = false;\n  // NOTE: we accept arguments in bytes instead of bits here.\n  constructor(\n    public blockLen: number,\n    public suffix: number,\n    public outputLen: number,\n    protected enableXOF = false,\n    protected rounds: number = 24\n  ) {\n    super();\n    // Can be passed from user as dkLen\n    number(outputLen);\n    // 1600 = 5x5 matrix of 64bit.  1600 bits === 200 bytes\n    if (0 >= this.blockLen || this.blockLen >= 200)\n      throw new Error('Sha3 supports only keccak-f1600 function');\n    this.state = new Uint8Array(200);\n    this.state32 = u32(this.state);\n  }\n  protected keccak() {\n    keccakP(this.state32, this.rounds);\n    this.posOut = 0;\n    this.pos = 0;\n  }\n  update(data: Input) {\n    exists(this);\n    const { blockLen, state } = this;\n    data = toBytes(data);\n    const len = data.length;\n    for (let pos = 0; pos < len; ) {\n      const take = Math.min(blockLen - this.pos, len - pos);\n      for (let i = 0; i < take; i++) state[this.pos++] ^= data[pos++];\n      if (this.pos === blockLen) this.keccak();\n    }\n    return this;\n  }\n  protected finish() {\n    if (this.finished) return;\n    this.finished = true;\n    const { state, suffix, pos, blockLen } = this;\n    // Do the padding\n    state[pos] ^= suffix;\n    if ((suffix & 0x80) !== 0 && pos === blockLen - 1) this.keccak();\n    state[blockLen - 1] ^= 0x80;\n    this.keccak();\n  }\n  protected writeInto(out: Uint8Array): Uint8Array {\n    exists(this, false);\n    bytes(out);\n    this.finish();\n    const bufferOut = this.state;\n    const { blockLen } = this;\n    for (let pos = 0, len = out.length; pos < len; ) {\n      if (this.posOut >= blockLen) this.keccak();\n      const take = Math.min(blockLen - this.posOut, len - pos);\n      out.set(bufferOut.subarray(this.posOut, this.posOut + take), pos);\n      this.posOut += take;\n      pos += take;\n    }\n    return out;\n  }\n  xofInto(out: Uint8Array): Uint8Array {\n    // Sha3/Keccak usage with XOF is probably mistake, only SHAKE instances can do XOF\n    if (!this.enableXOF) throw new Error('XOF is not possible for this instance');\n    return this.writeInto(out);\n  }\n  xof(bytes: number): Uint8Array {\n    number(bytes);\n    return this.xofInto(new Uint8Array(bytes));\n  }\n  digestInto(out: Uint8Array) {\n    output(out, this);\n    if (this.finished) throw new Error('digest() was already called');\n    this.writeInto(out);\n    this.destroy();\n    return out;\n  }\n  digest() {\n    return this.digestInto(new Uint8Array(this.outputLen));\n  }\n  destroy() {\n    this.destroyed = true;\n    this.state.fill(0);\n  }\n  _cloneInto(to?: Keccak): Keccak {\n    const { blockLen, suffix, outputLen, rounds, enableXOF } = this;\n    to ||= new Keccak(blockLen, suffix, outputLen, enableXOF, rounds);\n    to.state32.set(this.state32);\n    to.pos = this.pos;\n    to.posOut = this.posOut;\n    to.finished = this.finished;\n    to.rounds = rounds;\n    // Suffix can change in cSHAKE\n    to.suffix = suffix;\n    to.outputLen = outputLen;\n    to.enableXOF = enableXOF;\n    to.destroyed = this.destroyed;\n    return to;\n  }\n}\n\nconst gen = (suffix: number, blockLen: number, outputLen: number) =>\n  wrapConstructor(() => new Keccak(blockLen, suffix, outputLen));\n\nexport const sha3_224 = /* @__PURE__ */ gen(0x06, 144, 224 / 8);\n/**\n * SHA3-256 hash function\n * @param message - that would be hashed\n */\nexport const sha3_256 = /* @__PURE__ */ gen(0x06, 136, 256 / 8);\nexport const sha3_384 = /* @__PURE__ */ gen(0x06, 104, 384 / 8);\nexport const sha3_512 = /* @__PURE__ */ gen(0x06, 72, 512 / 8);\nexport const keccak_224 = /* @__PURE__ */ gen(0x01, 144, 224 / 8);\n/**\n * keccak-256 hash function. Different from SHA3-256.\n * @param message - that would be hashed\n */\nexport const keccak_256 = /* @__PURE__ */ gen(0x01, 136, 256 / 8);\nexport const keccak_384 = /* @__PURE__ */ gen(0x01, 104, 384 / 8);\nexport const keccak_512 = /* @__PURE__ */ gen(0x01, 72, 512 / 8);\n\nexport type ShakeOpts = { dkLen?: number };\n\nconst genShake = (suffix: number, blockLen: number, outputLen: number) =>\n  wrapXOFConstructorWithOpts<HashXOF<Keccak>, ShakeOpts>(\n    (opts: ShakeOpts = {}) =>\n      new Keccak(blockLen, suffix, opts.dkLen === undefined ? outputLen : opts.dkLen, true)\n  );\n\nexport const shake128 = /* @__PURE__ */ genShake(0x1f, 168, 128 / 8);\nexport const shake256 = /* @__PURE__ */ genShake(0x1f, 136, 256 / 8);\n", "/**\n *  Cryptographic hashing functions\n *\n *  @_subsection: api/crypto:Hash Functions [about-crypto-hashing]\n */\n\nimport { keccak_256 } from \"@noble/hashes/sha3\";\n\nimport { getBytes, hexlify } from \"../utils/index.js\";\n\nimport type { BytesLike } from \"../utils/index.js\";\n\n\nlet locked = false;\n\nconst _keccak256 = function(data: Uint8Array): Uint8Array {\n    return keccak_256(data);\n}\n\nlet __keccak256: (data: Uint8Array) => BytesLike = _keccak256;\n\n/**\n *  Compute the cryptographic KECCAK256 hash of %%data%%.\n *\n *  The %%data%% **must** be a data representation, to compute the\n *  hash of UTF-8 data use the [[id]] function.\n *\n *  @returns DataHexstring\n *  @example:\n *    keccak256(\"0x\")\n *    //_result:\n *\n *    keccak256(\"0x1337\")\n *    //_result:\n *\n *    keccak256(new Uint8Array([ 0x13, 0x37 ]))\n *    //_result:\n *\n *    // Strings are assumed to be DataHexString, otherwise it will\n *    // throw. To hash UTF-8 data, see the note above.\n *    keccak256(\"Hello World\")\n *    //_error:\n */\nexport function keccak256(_data: BytesLike): string {\n    const data = getBytes(_data, \"data\");\n    return hexlify(__keccak256(data));\n}\nkeccak256._ = _keccak256;\nkeccak256.lock = function(): void { locked = true; }\nkeccak256.register = function(func: (data: Uint8Array) => BytesLike) {\n    if (locked) { throw new TypeError(\"keccak256 is locked\"); }\n    __keccak256 = func;\n}\nObject.freeze(keccak256);\n", "import { SHA2 } from './_sha2.js';\nimport { wrapConstructor } from './utils.js';\n\n// https://homes.esat.kuleuven.be/~bosselae/ripemd160.html\n// https://homes.esat.kuleuven.be/~bosselae/ripemd160/pdf/AB-9601/AB-9601.pdf\nconst Rho = /* @__PURE__ */ new Uint8Array([7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8]);\nconst Id = /* @__PURE__ */ Uint8Array.from({ length: 16 }, (_, i) => i);\nconst Pi = /* @__PURE__ */ Id.map((i) => (9 * i + 5) % 16);\nlet idxL = [Id];\nlet idxR = [Pi];\nfor (let i = 0; i < 4; i++) for (let j of [idxL, idxR]) j.push(j[i].map((k) => Rho[k]));\n\nconst shifts = /* @__PURE__ */ [\n  [11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8],\n  [12, 13, 11, 15, 6, 9, 9, 7, 12, 15, 11, 13, 7, 8, 7, 7],\n  [13, 15, 14, 11, 7, 7, 6, 8, 13, 14, 13, 12, 5, 5, 6, 9],\n  [14, 11, 12, 14, 8, 6, 5, 5, 15, 12, 15, 14, 9, 9, 8, 6],\n  [15, 12, 13, 13, 9, 5, 8, 6, 14, 11, 12, 11, 8, 6, 5, 5],\n].map((i) => new Uint8Array(i));\nconst shiftsL = /* @__PURE__ */ idxL.map((idx, i) => idx.map((j) => shifts[i][j]));\nconst shiftsR = /* @__PURE__ */ idxR.map((idx, i) => idx.map((j) => shifts[i][j]));\nconst Kl = /* @__PURE__ */ new Uint32Array([\n  0x00000000, 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xa953fd4e,\n]);\nconst Kr = /* @__PURE__ */ new Uint32Array([\n  0x50a28be6, 0x5c4dd124, 0x6d703ef3, 0x7a6d76e9, 0x00000000,\n]);\n// The rotate left (circular left shift) operation for uint32\nconst rotl = (word: number, shift: number) => (word << shift) | (word >>> (32 - shift));\n// It's called f() in spec.\nfunction f(group: number, x: number, y: number, z: number): number {\n  if (group === 0) return x ^ y ^ z;\n  else if (group === 1) return (x & y) | (~x & z);\n  else if (group === 2) return (x | ~y) ^ z;\n  else if (group === 3) return (x & z) | (y & ~z);\n  else return x ^ (y | ~z);\n}\n// Temporary buffer, not used to store anything between runs\nconst BUF = /* @__PURE__ */ new Uint32Array(16);\nexport class RIPEMD160 extends SHA2<RIPEMD160> {\n  private h0 = 0x67452301 | 0;\n  private h1 = 0xefcdab89 | 0;\n  private h2 = 0x98badcfe | 0;\n  private h3 = 0x10325476 | 0;\n  private h4 = 0xc3d2e1f0 | 0;\n\n  constructor() {\n    super(64, 20, 8, true);\n  }\n  protected get(): [number, number, number, number, number] {\n    const { h0, h1, h2, h3, h4 } = this;\n    return [h0, h1, h2, h3, h4];\n  }\n  protected set(h0: number, h1: number, h2: number, h3: number, h4: number) {\n    this.h0 = h0 | 0;\n    this.h1 = h1 | 0;\n    this.h2 = h2 | 0;\n    this.h3 = h3 | 0;\n    this.h4 = h4 | 0;\n  }\n  protected process(view: DataView, offset: number): void {\n    for (let i = 0; i < 16; i++, offset += 4) BUF[i] = view.getUint32(offset, true);\n    // prettier-ignore\n    let al = this.h0 | 0, ar = al,\n        bl = this.h1 | 0, br = bl,\n        cl = this.h2 | 0, cr = cl,\n        dl = this.h3 | 0, dr = dl,\n        el = this.h4 | 0, er = el;\n\n    // Instead of iterating 0 to 80, we split it into 5 groups\n    // And use the groups in constants, functions, etc. Much simpler\n    for (let group = 0; group < 5; group++) {\n      const rGroup = 4 - group;\n      const hbl = Kl[group], hbr = Kr[group]; // prettier-ignore\n      const rl = idxL[group], rr = idxR[group]; // prettier-ignore\n      const sl = shiftsL[group], sr = shiftsR[group]; // prettier-ignore\n      for (let i = 0; i < 16; i++) {\n        const tl = (rotl(al + f(group, bl, cl, dl) + BUF[rl[i]] + hbl, sl[i]) + el) | 0;\n        al = el, el = dl, dl = rotl(cl, 10) | 0, cl = bl, bl = tl; // prettier-ignore\n      }\n      // 2 loops are 10% faster\n      for (let i = 0; i < 16; i++) {\n        const tr = (rotl(ar + f(rGroup, br, cr, dr) + BUF[rr[i]] + hbr, sr[i]) + er) | 0;\n        ar = er, er = dr, dr = rotl(cr, 10) | 0, cr = br, br = tr; // prettier-ignore\n      }\n    }\n    // Add the compressed chunk to the current hash value\n    this.set(\n      (this.h1 + cl + dr) | 0,\n      (this.h2 + dl + er) | 0,\n      (this.h3 + el + ar) | 0,\n      (this.h4 + al + br) | 0,\n      (this.h0 + bl + cr) | 0\n    );\n  }\n  protected roundClean() {\n    BUF.fill(0);\n  }\n  destroy() {\n    this.destroyed = true;\n    this.buffer.fill(0);\n    this.set(0, 0, 0, 0, 0);\n  }\n}\n\n/**\n * RIPEMD-160 - a hash function from 1990s.\n * @param message - msg that would be hashed\n */\nexport const ripemd160 = /* @__PURE__ */ wrapConstructor(() => new RIPEMD160());\n", "import { ripemd160 as noble_ripemd160 } from \"@noble/hashes/ripemd160\";\n\nimport { getBytes,  hexlify } from \"../utils/index.js\";\n\nimport type { BytesLike } from \"../utils/index.js\";\n\n\nlet locked = false;\n\nconst _ripemd160 = function(data: Uint8Array): Uint8Array {\n    return noble_ripemd160(data);\n}\n\nlet __ripemd160: (data: Uint8Array) => BytesLike = _ripemd160;\n\n/**\n *  Compute the cryptographic RIPEMD-160 hash of %%data%%.\n *\n *  @_docloc: api/crypto:Hash Functions\n *  @returns DataHexstring\n *\n *  @example:\n *    ripemd160(\"0x\")\n *    //_result:\n *\n *    ripemd160(\"0x1337\")\n *    //_result:\n *\n *    ripemd160(new Uint8Array([ 0x13, 0x37 ]))\n *    //_result:\n *\n */\nexport function ripemd160(_data: BytesLike): string {\n    const data = getBytes(_data, \"data\");\n    return hexlify(__ripemd160(data));\n}\nripemd160._ = _ripemd160;\nripemd160.lock = function(): void { locked = true; }\nripemd160.register = function(func: (data: Uint8Array) => BytesLike) {\n    if (locked) { throw new TypeError(\"ripemd160 is locked\"); }\n    __ripemd160 = func;\n}\nObject.freeze(ripemd160);\n", "/**\n *  A **Password-Based Key-Derivation Function** is designed to create\n *  a sequence of bytes suitible as a **key** from a human-rememberable\n *  password.\n *\n *  @_subsection: api/crypto:Passwords  [about-pbkdf]\n */\n\nimport { pbkdf2Sync } from \"./crypto.js\";\n\nimport { getBytes, hexlify } from \"../utils/index.js\";\n\nimport type { BytesLike } from \"../utils/index.js\";\n\n\nlet locked = false;\n\nconst _pbkdf2 = function(password: Uint8Array, salt: Uint8Array, iterations: number, keylen: number, algo: \"sha256\" | \"sha512\"): BytesLike {\n    return pbkdf2Sync(password, salt, iterations, keylen, algo);\n}\n\nlet __pbkdf2 = _pbkdf2;\n\n/**\n *  Return the [[link-pbkdf2]] for %%keylen%% bytes for %%password%% using\n *  the %%salt%% and using %%iterations%% of %%algo%%.\n *\n *  This PBKDF is outdated and should not be used in new projects, but is\n *  required to decrypt older files.\n *\n *  @example:\n *    // The password must be converted to bytes, and it is generally\n *    // best practices to ensure the string has been normalized. Many\n *    // formats explicitly indicate the normalization form to use.\n *    password = \"hello\"\n *    passwordBytes = toUtf8Bytes(password, \"NFKC\")\n *\n *    salt = id(\"some-salt\")\n *\n *    // Compute the PBKDF2\n *    pbkdf2(passwordBytes, salt, 1024, 16, \"sha256\")\n *    //_result:\n */\nexport function pbkdf2(_password: BytesLike, _salt: BytesLike, iterations: number, keylen: number, algo: \"sha256\" | \"sha512\"): string {\n    const password = getBytes(_password, \"password\");\n    const salt = getBytes(_salt, \"salt\");\n    return hexlify(__pbkdf2(password, salt, iterations, keylen, algo));\n}\npbkdf2._ = _pbkdf2;\npbkdf2.lock = function(): void { locked = true; }\npbkdf2.register = function(func: (password: Uint8Array, salt: Uint8Array, iterations: number, keylen: number, algo: \"sha256\" | \"sha512\") => BytesLike) {\n    if (locked) { throw new Error(\"pbkdf2 is locked\"); }\n    __pbkdf2 = func;\n}\nObject.freeze(pbkdf2);\n", "/**\n *  A **Cryptographically Secure Random Value** is one that has been\n *  generated with additional care take to prevent side-channels\n *  from allowing others to detect it and prevent others from through\n *  coincidence generate the same values.\n *\n *  @_subsection: api/crypto:Random Values  [about-crypto-random]\n */\nimport { randomBytes as crypto_random } from \"./crypto.js\";\n\nlet locked = false;\n\nconst _randomBytes = function(length: number): Uint8Array {\n    return new Uint8Array(crypto_random(length));\n}\n\nlet __randomBytes = _randomBytes;\n\n/**\n *  Return %%length%% bytes of cryptographically secure random data.\n *\n *  @example:\n *    randomBytes(8)\n *    //_result:\n */\nexport function randomBytes(length: number): Uint8Array {\n    return __randomBytes(length);\n}\n\nrandomBytes._ = _randomBytes;\nrandomBytes.lock = function(): void { locked = true; }\nrandomBytes.register = function(func: (length: number) => Uint8Array) {\n    if (locked) { throw new Error(\"randomBytes is locked\"); }\n    __randomBytes = func;\n}\nObject.freeze(randomBytes);\n", "import { number as assertNumber } from './_assert.js';\nimport { sha256 } from './sha256.js';\nimport { pbkdf2 } from './pbkdf2.js';\nimport { asyncLoop, checkOpts, Input, u32 } from './utils.js';\n\n// RFC 7914 Scrypt KDF\n\n// Left rotate for uint32\nconst rotl = (a: number, b: number) => (a << b) | (a >>> (32 - b));\n\n// The main Scrypt loop: uses Salsa extensively.\n// Six versions of the function were tried, this is the fastest one.\n// prettier-ignore\nfunction XorAndSalsa(\n  prev: Uint32Array,\n  pi: number,\n  input: Uint32Array,\n  ii: number,\n  out: Uint32Array,\n  oi: number\n) {\n  // Based on https://cr.yp.to/salsa20.html\n  // Xor blocks\n  let y00 = prev[pi++] ^ input[ii++], y01 = prev[pi++] ^ input[ii++];\n  let y02 = prev[pi++] ^ input[ii++], y03 = prev[pi++] ^ input[ii++];\n  let y04 = prev[pi++] ^ input[ii++], y05 = prev[pi++] ^ input[ii++];\n  let y06 = prev[pi++] ^ input[ii++], y07 = prev[pi++] ^ input[ii++];\n  let y08 = prev[pi++] ^ input[ii++], y09 = prev[pi++] ^ input[ii++];\n  let y10 = prev[pi++] ^ input[ii++], y11 = prev[pi++] ^ input[ii++];\n  let y12 = prev[pi++] ^ input[ii++], y13 = prev[pi++] ^ input[ii++];\n  let y14 = prev[pi++] ^ input[ii++], y15 = prev[pi++] ^ input[ii++];\n  // Save state to temporary variables (salsa)\n  let x00 = y00, x01 = y01, x02 = y02, x03 = y03,\n      x04 = y04, x05 = y05, x06 = y06, x07 = y07,\n      x08 = y08, x09 = y09, x10 = y10, x11 = y11,\n      x12 = y12, x13 = y13, x14 = y14, x15 = y15;\n  // Main loop (salsa)\n  for (let i = 0; i < 8; i += 2) {\n    x04 ^= rotl(x00 + x12 | 0,  7); x08 ^= rotl(x04 + x00 | 0,  9);\n    x12 ^= rotl(x08 + x04 | 0, 13); x00 ^= rotl(x12 + x08 | 0, 18);\n    x09 ^= rotl(x05 + x01 | 0,  7); x13 ^= rotl(x09 + x05 | 0,  9);\n    x01 ^= rotl(x13 + x09 | 0, 13); x05 ^= rotl(x01 + x13 | 0, 18);\n    x14 ^= rotl(x10 + x06 | 0,  7); x02 ^= rotl(x14 + x10 | 0,  9);\n    x06 ^= rotl(x02 + x14 | 0, 13); x10 ^= rotl(x06 + x02 | 0, 18);\n    x03 ^= rotl(x15 + x11 | 0,  7); x07 ^= rotl(x03 + x15 | 0,  9);\n    x11 ^= rotl(x07 + x03 | 0, 13); x15 ^= rotl(x11 + x07 | 0, 18);\n    x01 ^= rotl(x00 + x03 | 0,  7); x02 ^= rotl(x01 + x00 | 0,  9);\n    x03 ^= rotl(x02 + x01 | 0, 13); x00 ^= rotl(x03 + x02 | 0, 18);\n    x06 ^= rotl(x05 + x04 | 0,  7); x07 ^= rotl(x06 + x05 | 0,  9);\n    x04 ^= rotl(x07 + x06 | 0, 13); x05 ^= rotl(x04 + x07 | 0, 18);\n    x11 ^= rotl(x10 + x09 | 0,  7); x08 ^= rotl(x11 + x10 | 0,  9);\n    x09 ^= rotl(x08 + x11 | 0, 13); x10 ^= rotl(x09 + x08 | 0, 18);\n    x12 ^= rotl(x15 + x14 | 0,  7); x13 ^= rotl(x12 + x15 | 0,  9);\n    x14 ^= rotl(x13 + x12 | 0, 13); x15 ^= rotl(x14 + x13 | 0, 18);\n  }\n  // Write output (salsa)\n  out[oi++] = (y00 + x00) | 0; out[oi++] = (y01 + x01) | 0;\n  out[oi++] = (y02 + x02) | 0; out[oi++] = (y03 + x03) | 0;\n  out[oi++] = (y04 + x04) | 0; out[oi++] = (y05 + x05) | 0;\n  out[oi++] = (y06 + x06) | 0; out[oi++] = (y07 + x07) | 0;\n  out[oi++] = (y08 + x08) | 0; out[oi++] = (y09 + x09) | 0;\n  out[oi++] = (y10 + x10) | 0; out[oi++] = (y11 + x11) | 0;\n  out[oi++] = (y12 + x12) | 0; out[oi++] = (y13 + x13) | 0;\n  out[oi++] = (y14 + x14) | 0; out[oi++] = (y15 + x15) | 0;\n}\n\nfunction BlockMix(input: Uint32Array, ii: number, out: Uint32Array, oi: number, r: number) {\n  // The block B is r 128-byte chunks (which is equivalent of 2r 64-byte chunks)\n  let head = oi + 0;\n  let tail = oi + 16 * r;\n  for (let i = 0; i < 16; i++) out[tail + i] = input[ii + (2 * r - 1) * 16 + i]; // X \u2190 B[2r\u22121]\n  for (let i = 0; i < r; i++, head += 16, ii += 16) {\n    // We write odd & even Yi at same time. Even: 0bXXXXX0 Odd:  0bXXXXX1\n    XorAndSalsa(out, tail, input, ii, out, head); // head[i] = Salsa(blockIn[2*i] ^ tail[i-1])\n    if (i > 0) tail += 16; // First iteration overwrites tmp value in tail\n    XorAndSalsa(out, head, input, (ii += 16), out, tail); // tail[i] = Salsa(blockIn[2*i+1] ^ head[i])\n  }\n}\n\nexport type ScryptOpts = {\n  N: number; // cost factor\n  r: number; // block size\n  p: number; // parallelization\n  dkLen?: number; // key length\n  asyncTick?: number; // block execution max time\n  maxmem?: number;\n  onProgress?: (progress: number) => void;\n};\n\n// Common prologue and epilogue for sync/async functions\nfunction scryptInit(password: Input, salt: Input, _opts?: ScryptOpts) {\n  // Maxmem - 1GB+1KB by default\n  const opts = checkOpts(\n    {\n      dkLen: 32,\n      asyncTick: 10,\n      maxmem: 1024 ** 3 + 1024,\n    },\n    _opts\n  );\n  const { N, r, p, dkLen, asyncTick, maxmem, onProgress } = opts;\n  assertNumber(N);\n  assertNumber(r);\n  assertNumber(p);\n  assertNumber(dkLen);\n  assertNumber(asyncTick);\n  assertNumber(maxmem);\n  if (onProgress !== undefined && typeof onProgress !== 'function')\n    throw new Error('progressCb should be function');\n  const blockSize = 128 * r;\n  const blockSize32 = blockSize / 4;\n  if (N <= 1 || (N & (N - 1)) !== 0 || N >= 2 ** (blockSize / 8) || N > 2 ** 32) {\n    // NOTE: we limit N to be less than 2**32 because of 32 bit variant of Integrify function\n    // There is no JS engines that allows alocate more than 4GB per single Uint8Array for now, but can change in future.\n    throw new Error(\n      'Scrypt: N must be larger than 1, a power of 2, less than 2^(128 * r / 8) and less than 2^32'\n    );\n  }\n  if (p < 0 || p > ((2 ** 32 - 1) * 32) / blockSize) {\n    throw new Error(\n      'Scrypt: p must be a positive integer less than or equal to ((2^32 - 1) * 32) / (128 * r)'\n    );\n  }\n  if (dkLen < 0 || dkLen > (2 ** 32 - 1) * 32) {\n    throw new Error(\n      'Scrypt: dkLen should be positive integer less than or equal to (2^32 - 1) * 32'\n    );\n  }\n  const memUsed = blockSize * (N + p);\n  if (memUsed > maxmem) {\n    throw new Error(\n      `Scrypt: parameters too large, ${memUsed} (128 * r * (N + p)) > ${maxmem} (maxmem)`\n    );\n  }\n  // [B0...Bp\u22121] \u2190 PBKDF2HMAC-SHA256(Passphrase, Salt, 1, blockSize*ParallelizationFactor)\n  // Since it has only one iteration there is no reason to use async variant\n  const B = pbkdf2(sha256, password, salt, { c: 1, dkLen: blockSize * p });\n  const B32 = u32(B);\n  // Re-used between parallel iterations. Array(iterations) of B\n  const V = u32(new Uint8Array(blockSize * N));\n  const tmp = u32(new Uint8Array(blockSize));\n  let blockMixCb = () => {};\n  if (onProgress) {\n    const totalBlockMix = 2 * N * p;\n    // Invoke callback if progress changes from 10.01 to 10.02\n    // Allows to draw smooth progress bar on up to 8K screen\n    const callbackPer = Math.max(Math.floor(totalBlockMix / 10000), 1);\n    let blockMixCnt = 0;\n    blockMixCb = () => {\n      blockMixCnt++;\n      if (onProgress && (!(blockMixCnt % callbackPer) || blockMixCnt === totalBlockMix))\n        onProgress(blockMixCnt / totalBlockMix);\n    };\n  }\n  return { N, r, p, dkLen, blockSize32, V, B32, B, tmp, blockMixCb, asyncTick };\n}\n\nfunction scryptOutput(\n  password: Input,\n  dkLen: number,\n  B: Uint8Array,\n  V: Uint32Array,\n  tmp: Uint32Array\n) {\n  const res = pbkdf2(sha256, password, B, { c: 1, dkLen });\n  B.fill(0);\n  V.fill(0);\n  tmp.fill(0);\n  return res;\n}\n\n/**\n * Scrypt KDF from RFC 7914.\n * @param password - pass\n * @param salt - salt\n * @param opts - parameters\n * - `N` is cpu/mem work factor (power of 2 e.g. 2**18)\n * - `r` is block size (8 is common), fine-tunes sequential memory read size and performance\n * - `p` is parallelization factor (1 is common)\n * - `dkLen` is output key length in bytes e.g. 32.\n * - `asyncTick` - (default: 10) max time in ms for which async function can block execution\n * - `maxmem` - (default: `1024 ** 3 + 1024` aka 1GB+1KB). A limit that the app could use for scrypt\n * - `onProgress` - callback function that would be executed for progress report\n * @returns Derived key\n */\nexport function scrypt(password: Input, salt: Input, opts: ScryptOpts) {\n  const { N, r, p, dkLen, blockSize32, V, B32, B, tmp, blockMixCb } = scryptInit(\n    password,\n    salt,\n    opts\n  );\n  for (let pi = 0; pi < p; pi++) {\n    const Pi = blockSize32 * pi;\n    for (let i = 0; i < blockSize32; i++) V[i] = B32[Pi + i]; // V[0] = B[i]\n    for (let i = 0, pos = 0; i < N - 1; i++) {\n      BlockMix(V, pos, V, (pos += blockSize32), r); // V[i] = BlockMix(V[i-1]);\n      blockMixCb();\n    }\n    BlockMix(V, (N - 1) * blockSize32, B32, Pi, r); // Process last element\n    blockMixCb();\n    for (let i = 0; i < N; i++) {\n      // First u32 of the last 64-byte block (u32 is LE)\n      const j = B32[Pi + blockSize32 - 16] % N; // j = Integrify(X) % iterations\n      for (let k = 0; k < blockSize32; k++) tmp[k] = B32[Pi + k] ^ V[j * blockSize32 + k]; // tmp = B ^ V[j]\n      BlockMix(tmp, 0, B32, Pi, r); // B = BlockMix(B ^ V[j])\n      blockMixCb();\n    }\n  }\n  return scryptOutput(password, dkLen, B, V, tmp);\n}\n\n/**\n * Scrypt KDF from RFC 7914.\n */\nexport async function scryptAsync(password: Input, salt: Input, opts: ScryptOpts) {\n  const { N, r, p, dkLen, blockSize32, V, B32, B, tmp, blockMixCb, asyncTick } = scryptInit(\n    password,\n    salt,\n    opts\n  );\n  for (let pi = 0; pi < p; pi++) {\n    const Pi = blockSize32 * pi;\n    for (let i = 0; i < blockSize32; i++) V[i] = B32[Pi + i]; // V[0] = B[i]\n    let pos = 0;\n    await asyncLoop(N - 1, asyncTick, () => {\n      BlockMix(V, pos, V, (pos += blockSize32), r); // V[i] = BlockMix(V[i-1]);\n      blockMixCb();\n    });\n    BlockMix(V, (N - 1) * blockSize32, B32, Pi, r); // Process last element\n    blockMixCb();\n    await asyncLoop(N, asyncTick, () => {\n      // First u32 of the last 64-byte block (u32 is LE)\n      const j = B32[Pi + blockSize32 - 16] % N; // j = Integrify(X) % iterations\n      for (let k = 0; k < blockSize32; k++) tmp[k] = B32[Pi + k] ^ V[j * blockSize32 + k]; // tmp = B ^ V[j]\n      BlockMix(tmp, 0, B32, Pi, r); // B = BlockMix(B ^ V[j])\n      blockMixCb();\n    });\n  }\n  return scryptOutput(password, dkLen, B, V, tmp);\n}\n", "import { scrypt as _nobleSync, scryptAsync as _nobleAsync } from \"@noble/hashes/scrypt\";\n\nimport { getBytes, hexlify as H } from \"../utils/index.js\";\n\nimport type { BytesLike } from \"../utils/index.js\";\n\n/**\n *  A callback during long-running operations to update any\n *  UI or provide programatic access to the progress.\n *\n *  The %%percent%% is a value between ``0`` and ``1``.\n *\n *  @_docloc: api/crypto:Passwords\n */\nexport type ProgressCallback = (percent: number) => void;\n\n\nlet lockedSync = false, lockedAsync = false;\n\nconst _scryptAsync = async function(passwd: Uint8Array, salt: Uint8Array, N: number, r: number, p: number, dkLen: number, onProgress?: ProgressCallback) {\n    return await _nobleAsync(passwd, salt, { N, r, p, dkLen, onProgress });\n}\nconst _scryptSync = function(passwd: Uint8Array, salt: Uint8Array, N: number, r: number, p: number, dkLen: number) {\n    return _nobleSync(passwd, salt, { N, r, p, dkLen });\n}\n\nlet __scryptAsync: (passwd: Uint8Array, salt: Uint8Array, N: number, r: number, p: number, dkLen: number, onProgress?: ProgressCallback) => Promise<BytesLike> = _scryptAsync;\nlet __scryptSync: (passwd: Uint8Array, salt: Uint8Array, N: number, r: number, p: number, dkLen: number) => BytesLike = _scryptSync\n\n\n/**\n *  The [[link-wiki-scrypt]] uses a memory and cpu hard method of\n *  derivation to increase the resource cost to brute-force a password\n *  for a given key.\n *\n *  This means this algorithm is intentionally slow, and can be tuned to\n *  become slower. As computation and memory speed improve over time,\n *  increasing the difficulty maintains the cost of an attacker.\n *\n *  For example, if a target time of 5 seconds is used, a legitimate user\n *  which knows their password requires only 5 seconds to unlock their\n *  account. A 6 character password has 68 billion possibilities, which\n *  would require an attacker to invest over 10,000 years of CPU time. This\n *  is of course a crude example (as password generally aren't random),\n *  but demonstrates to value of imposing large costs to decryption.\n *\n *  For this reason, if building a UI which involved decrypting or\n *  encrypting datsa using scrypt, it is recommended to use a\n *  [[ProgressCallback]] (as event short periods can seem lik an eternity\n *  if the UI freezes). Including the phrase //\"decrypting\"// in the UI\n *  can also help, assuring the user their waiting is for a good reason.\n *\n *  @_docloc: api/crypto:Passwords\n *\n *  @example:\n *    // The password must be converted to bytes, and it is generally\n *    // best practices to ensure the string has been normalized. Many\n *    // formats explicitly indicate the normalization form to use.\n *    password = \"hello\"\n *    passwordBytes = toUtf8Bytes(password, \"NFKC\")\n *\n *    salt = id(\"some-salt\")\n *\n *    // Compute the scrypt\n *    scrypt(passwordBytes, salt, 1024, 8, 1, 16)\n *    //_result:\n */\nexport async function scrypt(_passwd: BytesLike, _salt: BytesLike, N: number, r: number, p: number, dkLen: number, progress?: ProgressCallback): Promise<string> {\n    const passwd = getBytes(_passwd, \"passwd\");\n    const salt = getBytes(_salt, \"salt\");\n    return H(await __scryptAsync(passwd, salt, N, r, p, dkLen, progress));\n}\nscrypt._ = _scryptAsync;\nscrypt.lock = function(): void { lockedAsync = true; }\nscrypt.register = function(func: (passwd: Uint8Array, salt: Uint8Array, N: number, r: number, p: number, dkLen: number, progress?: ProgressCallback) => Promise<BytesLike>) {\n    if (lockedAsync) { throw new Error(\"scrypt is locked\"); }\n    __scryptAsync = func;\n}\nObject.freeze(scrypt);\n\n/**\n *  Provides a synchronous variant of [[scrypt]].\n *\n *  This will completely lock up and freeze the UI in a browser and will\n *  prevent any event loop from progressing. For this reason, it is\n *  preferred to use the [async variant](scrypt).\n *\n *  @_docloc: api/crypto:Passwords\n *\n *  @example:\n *    // The password must be converted to bytes, and it is generally\n *    // best practices to ensure the string has been normalized. Many\n *    // formats explicitly indicate the normalization form to use.\n *    password = \"hello\"\n *    passwordBytes = toUtf8Bytes(password, \"NFKC\")\n *\n *    salt = id(\"some-salt\")\n *\n *    // Compute the scrypt\n *    scryptSync(passwordBytes, salt, 1024, 8, 1, 16)\n *    //_result:\n */\nexport function scryptSync(_passwd: BytesLike, _salt: BytesLike, N: number, r: number, p: number, dkLen: number): string {\n    const passwd = getBytes(_passwd, \"passwd\");\n    const salt = getBytes(_salt, \"salt\");\n    return H(__scryptSync(passwd, salt, N, r, p, dkLen));\n}\nscryptSync._ = _scryptSync;\nscryptSync.lock = function(): void { lockedSync = true; }\nscryptSync.register = function(func: (passwd: Uint8Array, salt: Uint8Array, N: number, r: number, p: number, dkLen: number) => BytesLike) {\n    if (lockedSync) { throw new Error(\"scryptSync is locked\"); }\n    __scryptSync = func;\n}\nObject.freeze(scryptSync);\n", "import { createHash } from \"./crypto.js\";\n\nimport { getBytes, hexlify } from \"../utils/index.js\";\n\nimport type { BytesLike } from \"../utils/index.js\";\n\n\nconst _sha256 = function(data: Uint8Array): Uint8Array {\n    return createHash(\"sha256\").update(data).digest();\n}\n\nconst _sha512 = function(data: Uint8Array): Uint8Array {\n    return createHash(\"sha512\").update(data).digest();\n}\n\nlet __sha256: (data: Uint8Array) => BytesLike = _sha256;\nlet __sha512: (data: Uint8Array) => BytesLike = _sha512;\n\nlet locked256 = false, locked512 = false;\n\n\n/**\n *  Compute the cryptographic SHA2-256 hash of %%data%%.\n *\n *  @_docloc: api/crypto:Hash Functions\n *  @returns DataHexstring\n *\n *  @example:\n *    sha256(\"0x\")\n *    //_result:\n *\n *    sha256(\"0x1337\")\n *    //_result:\n *\n *    sha256(new Uint8Array([ 0x13, 0x37 ]))\n *    //_result:\n *\n */\nexport function sha256(_data: BytesLike): string {\n    const data = getBytes(_data, \"data\");\n    return hexlify(__sha256(data));\n}\nsha256._ = _sha256;\nsha256.lock = function(): void { locked256 = true; }\nsha256.register = function(func: (data: Uint8Array) => BytesLike): void {\n    if (locked256) { throw new Error(\"sha256 is locked\"); }\n    __sha256 = func;\n}\nObject.freeze(sha256);\n\n\n/**\n *  Compute the cryptographic SHA2-512 hash of %%data%%.\n *\n *  @_docloc: api/crypto:Hash Functions\n *  @returns DataHexstring\n *\n *  @example:\n *    sha512(\"0x\")\n *    //_result:\n *\n *    sha512(\"0x1337\")\n *    //_result:\n *\n *    sha512(new Uint8Array([ 0x13, 0x37 ]))\n *    //_result:\n */\nexport function sha512(_data: BytesLike): string {\n    const data = getBytes(_data, \"data\");\n    return hexlify(__sha512(data));\n}\nsha512._ = _sha512;\nsha512.lock = function(): void { locked512 = true; }\nsha512.register = function(func: (data: Uint8Array) => BytesLike): void {\n    if (locked512) { throw new Error(\"sha512 is locked\"); }\n    __sha512 = func;\n}\nObject.freeze(sha256);\n", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// 100 lines of code in the file are duplicated from noble-hashes (utils).\n// This is OK: `abstract` directory does not use noble-hashes.\n// User may opt-in into using different hashing library. This way, noble-hashes\n// won't be included into their bundle.\nconst _0n = BigInt(0);\nconst _1n = BigInt(1);\nconst _2n = BigInt(2);\nconst u8a = (a: any): a is Uint8Array => a instanceof Uint8Array;\nexport type Hex = Uint8Array | string; // hex strings are accepted for simplicity\nexport type PrivKey = Hex | bigint; // bigints are accepted to ease learning curve\nexport type CHash = {\n  (message: Uint8Array | string): Uint8Array;\n  blockLen: number;\n  outputLen: number;\n  create(opts?: { dkLen?: number }): any; // For shake\n};\nexport type FHash = (message: Uint8Array | string) => Uint8Array;\n\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) =>\n  i.toString(16).padStart(2, '0')\n);\n/**\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes: Uint8Array): string {\n  if (!u8a(bytes)) throw new Error('Uint8Array expected');\n  // pre-caching improves the speed 6x\n  let hex = '';\n  for (let i = 0; i < bytes.length; i++) {\n    hex += hexes[bytes[i]];\n  }\n  return hex;\n}\n\nexport function numberToHexUnpadded(num: number | bigint): string {\n  const hex = num.toString(16);\n  return hex.length & 1 ? `0${hex}` : hex;\n}\n\nexport function hexToNumber(hex: string): bigint {\n  if (typeof hex !== 'string') throw new Error('hex string expected, got ' + typeof hex);\n  // Big Endian\n  return BigInt(hex === '' ? '0' : `0x${hex}`);\n}\n\n/**\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nexport function hexToBytes(hex: string): Uint8Array {\n  if (typeof hex !== 'string') throw new Error('hex string expected, got ' + typeof hex);\n  const len = hex.length;\n  if (len % 2) throw new Error('padded hex string expected, got unpadded hex of length ' + len);\n  const array = new Uint8Array(len / 2);\n  for (let i = 0; i < array.length; i++) {\n    const j = i * 2;\n    const hexByte = hex.slice(j, j + 2);\n    const byte = Number.parseInt(hexByte, 16);\n    if (Number.isNaN(byte) || byte < 0) throw new Error('Invalid byte sequence');\n    array[i] = byte;\n  }\n  return array;\n}\n\n// BE: Big Endian, LE: Little Endian\nexport function bytesToNumberBE(bytes: Uint8Array): bigint {\n  return hexToNumber(bytesToHex(bytes));\n}\nexport function bytesToNumberLE(bytes: Uint8Array): bigint {\n  if (!u8a(bytes)) throw new Error('Uint8Array expected');\n  return hexToNumber(bytesToHex(Uint8Array.from(bytes).reverse()));\n}\n\nexport function numberToBytesBE(n: number | bigint, len: number): Uint8Array {\n  return hexToBytes(n.toString(16).padStart(len * 2, '0'));\n}\nexport function numberToBytesLE(n: number | bigint, len: number): Uint8Array {\n  return numberToBytesBE(n, len).reverse();\n}\n// Unpadded, rarely used\nexport function numberToVarBytesBE(n: number | bigint): Uint8Array {\n  return hexToBytes(numberToHexUnpadded(n));\n}\n\n/**\n * Takes hex string or Uint8Array, converts to Uint8Array.\n * Validates output length.\n * Will throw error for other types.\n * @param title descriptive title for an error e.g. 'private key'\n * @param hex hex string or Uint8Array\n * @param expectedLength optional, will compare to result array's length\n * @returns\n */\nexport function ensureBytes(title: string, hex: Hex, expectedLength?: number): Uint8Array {\n  let res: Uint8Array;\n  if (typeof hex === 'string') {\n    try {\n      res = hexToBytes(hex);\n    } catch (e) {\n      throw new Error(`${title} must be valid hex string, got \"${hex}\". Cause: ${e}`);\n    }\n  } else if (u8a(hex)) {\n    // Uint8Array.from() instead of hash.slice() because node.js Buffer\n    // is instance of Uint8Array, and its slice() creates **mutable** copy\n    res = Uint8Array.from(hex);\n  } else {\n    throw new Error(`${title} must be hex string or Uint8Array`);\n  }\n  const len = res.length;\n  if (typeof expectedLength === 'number' && len !== expectedLength)\n    throw new Error(`${title} expected ${expectedLength} bytes, got ${len}`);\n  return res;\n}\n\n/**\n * Copies several Uint8Arrays into one.\n */\nexport function concatBytes(...arrays: Uint8Array[]): Uint8Array {\n  const r = new Uint8Array(arrays.reduce((sum, a) => sum + a.length, 0));\n  let pad = 0; // walk through each item, ensure they have proper type\n  arrays.forEach((a) => {\n    if (!u8a(a)) throw new Error('Uint8Array expected');\n    r.set(a, pad);\n    pad += a.length;\n  });\n  return r;\n}\n\nexport function equalBytes(b1: Uint8Array, b2: Uint8Array) {\n  // We don't care about timing attacks here\n  if (b1.length !== b2.length) return false;\n  for (let i = 0; i < b1.length; i++) if (b1[i] !== b2[i]) return false;\n  return true;\n}\n\n// Global symbols in both browsers and Node.js since v11\n// See https://github.com/microsoft/TypeScript/issues/31535\ndeclare const TextEncoder: any;\n\n/**\n * @example utf8ToBytes('abc') // new Uint8Array([97, 98, 99])\n */\nexport function utf8ToBytes(str: string): Uint8Array {\n  if (typeof str !== 'string') throw new Error(`utf8ToBytes expected string, got ${typeof str}`);\n  return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n\n// Bit operations\n\n/**\n * Calculates amount of bits in a bigint.\n * Same as `n.toString(2).length`\n */\nexport function bitLen(n: bigint) {\n  let len;\n  for (len = 0; n > _0n; n >>= _1n, len += 1);\n  return len;\n}\n\n/**\n * Gets single bit at position.\n * NOTE: first bit position is 0 (same as arrays)\n * Same as `!!+Array.from(n.toString(2)).reverse()[pos]`\n */\nexport function bitGet(n: bigint, pos: number) {\n  return (n >> BigInt(pos)) & _1n;\n}\n\n/**\n * Sets single bit at position.\n */\nexport const bitSet = (n: bigint, pos: number, value: boolean) => {\n  return n | ((value ? _1n : _0n) << BigInt(pos));\n};\n\n/**\n * Calculate mask for N bits. Not using ** operator with bigints because of old engines.\n * Same as BigInt(`0b${Array(i).fill('1').join('')}`)\n */\nexport const bitMask = (n: number) => (_2n << BigInt(n - 1)) - _1n;\n\n// DRBG\n\nconst u8n = (data?: any) => new Uint8Array(data); // creates Uint8Array\nconst u8fr = (arr: any) => Uint8Array.from(arr); // another shortcut\ntype Pred<T> = (v: Uint8Array) => T | undefined;\n/**\n * Minimal HMAC-DRBG from NIST 800-90 for RFC6979 sigs.\n * @returns function that will call DRBG until 2nd arg returns something meaningful\n * @example\n *   const drbg = createHmacDRBG<Key>(32, 32, hmac);\n *   drbg(seed, bytesToKey); // bytesToKey must return Key or undefined\n */\nexport function createHmacDrbg<T>(\n  hashLen: number,\n  qByteLen: number,\n  hmacFn: (key: Uint8Array, ...messages: Uint8Array[]) => Uint8Array\n): (seed: Uint8Array, predicate: Pred<T>) => T {\n  if (typeof hashLen !== 'number' || hashLen < 2) throw new Error('hashLen must be a number');\n  if (typeof qByteLen !== 'number' || qByteLen < 2) throw new Error('qByteLen must be a number');\n  if (typeof hmacFn !== 'function') throw new Error('hmacFn must be a function');\n  // Step B, Step C: set hashLen to 8*ceil(hlen/8)\n  let v = u8n(hashLen); // Minimal non-full-spec HMAC-DRBG from NIST 800-90 for RFC6979 sigs.\n  let k = u8n(hashLen); // Steps B and C of RFC6979 3.2: set hashLen, in our case always same\n  let i = 0; // Iterations counter, will throw when over 1000\n  const reset = () => {\n    v.fill(1);\n    k.fill(0);\n    i = 0;\n  };\n  const h = (...b: Uint8Array[]) => hmacFn(k, v, ...b); // hmac(k)(v, ...values)\n  const reseed = (seed = u8n()) => {\n    // HMAC-DRBG reseed() function. Steps D-G\n    k = h(u8fr([0x00]), seed); // k = hmac(k || v || 0x00 || seed)\n    v = h(); // v = hmac(k || v)\n    if (seed.length === 0) return;\n    k = h(u8fr([0x01]), seed); // k = hmac(k || v || 0x01 || seed)\n    v = h(); // v = hmac(k || v)\n  };\n  const gen = () => {\n    // HMAC-DRBG generate() function\n    if (i++ >= 1000) throw new Error('drbg: tried 1000 values');\n    let len = 0;\n    const out: Uint8Array[] = [];\n    while (len < qByteLen) {\n      v = h();\n      const sl = v.slice();\n      out.push(sl);\n      len += v.length;\n    }\n    return concatBytes(...out);\n  };\n  const genUntil = (seed: Uint8Array, pred: Pred<T>): T => {\n    reset();\n    reseed(seed); // Steps D-G\n    let res: T | undefined = undefined; // Step H: grind until k is in [1..n-1]\n    while (!(res = pred(gen()))) reseed();\n    reset();\n    return res;\n  };\n  return genUntil;\n}\n\n// Validating curves and fields\n\nconst validatorFns = {\n  bigint: (val: any) => typeof val === 'bigint',\n  function: (val: any) => typeof val === 'function',\n  boolean: (val: any) => typeof val === 'boolean',\n  string: (val: any) => typeof val === 'string',\n  stringOrUint8Array: (val: any) => typeof val === 'string' || val instanceof Uint8Array,\n  isSafeInteger: (val: any) => Number.isSafeInteger(val),\n  array: (val: any) => Array.isArray(val),\n  field: (val: any, object: any) => (object as any).Fp.isValid(val),\n  hash: (val: any) => typeof val === 'function' && Number.isSafeInteger(val.outputLen),\n} as const;\ntype Validator = keyof typeof validatorFns;\ntype ValMap<T extends Record<string, any>> = { [K in keyof T]?: Validator };\n// type Record<K extends string | number | symbol, T> = { [P in K]: T; }\n\nexport function validateObject<T extends Record<string, any>>(\n  object: T,\n  validators: ValMap<T>,\n  optValidators: ValMap<T> = {}\n) {\n  const checkField = (fieldName: keyof T, type: Validator, isOptional: boolean) => {\n    const checkVal = validatorFns[type];\n    if (typeof checkVal !== 'function')\n      throw new Error(`Invalid validator \"${type}\", expected function`);\n\n    const val = object[fieldName as keyof typeof object];\n    if (isOptional && val === undefined) return;\n    if (!checkVal(val, object)) {\n      throw new Error(\n        `Invalid param ${String(fieldName)}=${val} (${typeof val}), expected ${type}`\n      );\n    }\n  };\n  for (const [fieldName, type] of Object.entries(validators)) checkField(fieldName, type!, false);\n  for (const [fieldName, type] of Object.entries(optValidators)) checkField(fieldName, type!, true);\n  return object;\n}\n// validate type tests\n// const o: { a: number; b: number; c: number } = { a: 1, b: 5, c: 6 };\n// const z0 = validateObject(o, { a: 'isSafeInteger' }, { c: 'bigint' }); // Ok!\n// // Should fail type-check\n// const z1 = validateObject(o, { a: 'tmp' }, { c: 'zz' });\n// const z2 = validateObject(o, { a: 'isSafeInteger' }, { c: 'zz' });\n// const z3 = validateObject(o, { test: 'boolean', z: 'bug' });\n// const z4 = validateObject(o, { a: 'boolean', z: 'bug' });\n", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// Utilities for modular arithmetics and finite fields\nimport {\n  bitMask,\n  numberToBytesBE,\n  numberToBytesLE,\n  bytesToNumberBE,\n  bytesToNumberLE,\n  ensureBytes,\n  validateObject,\n} from './utils.js';\n// prettier-ignore\nconst _0n = BigInt(0), _1n = BigInt(1), _2n = BigInt(2), _3n = BigInt(3);\n// prettier-ignore\nconst _4n = BigInt(4), _5n = BigInt(5), _8n = BigInt(8);\n// prettier-ignore\nconst _9n = BigInt(9), _16n = BigInt(16);\n\n// Calculates a modulo b\nexport function mod(a: bigint, b: bigint): bigint {\n  const result = a % b;\n  return result >= _0n ? result : b + result;\n}\n/**\n * Efficiently raise num to power and do modular division.\n * Unsafe in some contexts: uses ladder, so can expose bigint bits.\n * @example\n * pow(2n, 6n, 11n) // 64n % 11n == 9n\n */\n// TODO: use field version && remove\nexport function pow(num: bigint, power: bigint, modulo: bigint): bigint {\n  if (modulo <= _0n || power < _0n) throw new Error('Expected power/modulo > 0');\n  if (modulo === _1n) return _0n;\n  let res = _1n;\n  while (power > _0n) {\n    if (power & _1n) res = (res * num) % modulo;\n    num = (num * num) % modulo;\n    power >>= _1n;\n  }\n  return res;\n}\n\n// Does x ^ (2 ^ power) mod p. pow2(30, 4) == 30 ^ (2 ^ 4)\nexport function pow2(x: bigint, power: bigint, modulo: bigint): bigint {\n  let res = x;\n  while (power-- > _0n) {\n    res *= res;\n    res %= modulo;\n  }\n  return res;\n}\n\n// Inverses number over modulo\nexport function invert(number: bigint, modulo: bigint): bigint {\n  if (number === _0n || modulo <= _0n) {\n    throw new Error(`invert: expected positive integers, got n=${number} mod=${modulo}`);\n  }\n  // Euclidean GCD https://brilliant.org/wiki/extended-euclidean-algorithm/\n  // Fermat's little theorem \"CT-like\" version inv(n) = n^(m-2) mod m is 30x slower.\n  let a = mod(number, modulo);\n  let b = modulo;\n  // prettier-ignore\n  let x = _0n, y = _1n, u = _1n, v = _0n;\n  while (a !== _0n) {\n    // JIT applies optimization if those two lines follow each other\n    const q = b / a;\n    const r = b % a;\n    const m = x - u * q;\n    const n = y - v * q;\n    // prettier-ignore\n    b = a, a = r, x = u, y = v, u = m, v = n;\n  }\n  const gcd = b;\n  if (gcd !== _1n) throw new Error('invert: does not exist');\n  return mod(x, modulo);\n}\n\n/**\n * Tonelli-Shanks square root search algorithm.\n * 1. https://eprint.iacr.org/2012/685.pdf (page 12)\n * 2. Square Roots from 1; 24, 51, 10 to Dan Shanks\n * Will start an infinite loop if field order P is not prime.\n * @param P field order\n * @returns function that takes field Fp (created from P) and number n\n */\nexport function tonelliShanks(P: bigint) {\n  // Legendre constant: used to calculate Legendre symbol (a | p),\n  // which denotes the value of a^((p-1)/2) (mod p).\n  // (a | p) \u2261 1    if a is a square (mod p)\n  // (a | p) \u2261 -1   if a is not a square (mod p)\n  // (a | p) \u2261 0    if a \u2261 0 (mod p)\n  const legendreC = (P - _1n) / _2n;\n\n  let Q: bigint, S: number, Z: bigint;\n  // Step 1: By factoring out powers of 2 from p - 1,\n  // find q and s such that p - 1 = q*(2^s) with q odd\n  for (Q = P - _1n, S = 0; Q % _2n === _0n; Q /= _2n, S++);\n\n  // Step 2: Select a non-square z such that (z | p) \u2261 -1 and set c \u2261 zq\n  for (Z = _2n; Z < P && pow(Z, legendreC, P) !== P - _1n; Z++);\n\n  // Fast-path\n  if (S === 1) {\n    const p1div4 = (P + _1n) / _4n;\n    return function tonelliFast<T>(Fp: IField<T>, n: T) {\n      const root = Fp.pow(n, p1div4);\n      if (!Fp.eql(Fp.sqr(root), n)) throw new Error('Cannot find square root');\n      return root;\n    };\n  }\n\n  // Slow-path\n  const Q1div2 = (Q + _1n) / _2n;\n  return function tonelliSlow<T>(Fp: IField<T>, n: T): T {\n    // Step 0: Check that n is indeed a square: (n | p) should not be \u2261 -1\n    if (Fp.pow(n, legendreC) === Fp.neg(Fp.ONE)) throw new Error('Cannot find square root');\n    let r = S;\n    // TODO: will fail at Fp2/etc\n    let g = Fp.pow(Fp.mul(Fp.ONE, Z), Q); // will update both x and b\n    let x = Fp.pow(n, Q1div2); // first guess at the square root\n    let b = Fp.pow(n, Q); // first guess at the fudge factor\n\n    while (!Fp.eql(b, Fp.ONE)) {\n      if (Fp.eql(b, Fp.ZERO)) return Fp.ZERO; // https://en.wikipedia.org/wiki/Tonelli%E2%80%93Shanks_algorithm (4. If t = 0, return r = 0)\n      // Find m such b^(2^m)==1\n      let m = 1;\n      for (let t2 = Fp.sqr(b); m < r; m++) {\n        if (Fp.eql(t2, Fp.ONE)) break;\n        t2 = Fp.sqr(t2); // t2 *= t2\n      }\n      // NOTE: r-m-1 can be bigger than 32, need to convert to bigint before shift, otherwise there will be overflow\n      const ge = Fp.pow(g, _1n << BigInt(r - m - 1)); // ge = 2^(r-m-1)\n      g = Fp.sqr(ge); // g = ge * ge\n      x = Fp.mul(x, ge); // x *= ge\n      b = Fp.mul(b, g); // b *= g\n      r = m;\n    }\n    return x;\n  };\n}\n\nexport function FpSqrt(P: bigint) {\n  // NOTE: different algorithms can give different roots, it is up to user to decide which one they want.\n  // For example there is FpSqrtOdd/FpSqrtEven to choice root based on oddness (used for hash-to-curve).\n\n  // P \u2261 3 (mod 4)\n  // \u221An = n^((P+1)/4)\n  if (P % _4n === _3n) {\n    // Not all roots possible!\n    // const ORDER =\n    //   0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaabn;\n    // const NUM = 72057594037927816n;\n    const p1div4 = (P + _1n) / _4n;\n    return function sqrt3mod4<T>(Fp: IField<T>, n: T) {\n      const root = Fp.pow(n, p1div4);\n      // Throw if root**2 != n\n      if (!Fp.eql(Fp.sqr(root), n)) throw new Error('Cannot find square root');\n      return root;\n    };\n  }\n\n  // Atkin algorithm for q \u2261 5 (mod 8), https://eprint.iacr.org/2012/685.pdf (page 10)\n  if (P % _8n === _5n) {\n    const c1 = (P - _5n) / _8n;\n    return function sqrt5mod8<T>(Fp: IField<T>, n: T) {\n      const n2 = Fp.mul(n, _2n);\n      const v = Fp.pow(n2, c1);\n      const nv = Fp.mul(n, v);\n      const i = Fp.mul(Fp.mul(nv, _2n), v);\n      const root = Fp.mul(nv, Fp.sub(i, Fp.ONE));\n      if (!Fp.eql(Fp.sqr(root), n)) throw new Error('Cannot find square root');\n      return root;\n    };\n  }\n\n  // P \u2261 9 (mod 16)\n  if (P % _16n === _9n) {\n    // NOTE: tonelli is too slow for bls-Fp2 calculations even on start\n    // Means we cannot use sqrt for constants at all!\n    //\n    // const c1 = Fp.sqrt(Fp.negate(Fp.ONE)); //  1. c1 = sqrt(-1) in F, i.e., (c1^2) == -1 in F\n    // const c2 = Fp.sqrt(c1);                //  2. c2 = sqrt(c1) in F, i.e., (c2^2) == c1 in F\n    // const c3 = Fp.sqrt(Fp.negate(c1));     //  3. c3 = sqrt(-c1) in F, i.e., (c3^2) == -c1 in F\n    // const c4 = (P + _7n) / _16n;           //  4. c4 = (q + 7) / 16        # Integer arithmetic\n    // sqrt = (x) => {\n    //   let tv1 = Fp.pow(x, c4);             //  1. tv1 = x^c4\n    //   let tv2 = Fp.mul(c1, tv1);           //  2. tv2 = c1 * tv1\n    //   const tv3 = Fp.mul(c2, tv1);         //  3. tv3 = c2 * tv1\n    //   let tv4 = Fp.mul(c3, tv1);           //  4. tv4 = c3 * tv1\n    //   const e1 = Fp.equals(Fp.square(tv2), x); //  5.  e1 = (tv2^2) == x\n    //   const e2 = Fp.equals(Fp.square(tv3), x); //  6.  e2 = (tv3^2) == x\n    //   tv1 = Fp.cmov(tv1, tv2, e1); //  7. tv1 = CMOV(tv1, tv2, e1)  # Select tv2 if (tv2^2) == x\n    //   tv2 = Fp.cmov(tv4, tv3, e2); //  8. tv2 = CMOV(tv4, tv3, e2)  # Select tv3 if (tv3^2) == x\n    //   const e3 = Fp.equals(Fp.square(tv2), x); //  9.  e3 = (tv2^2) == x\n    //   return Fp.cmov(tv1, tv2, e3); //  10.  z = CMOV(tv1, tv2, e3)  # Select the sqrt from tv1 and tv2\n    // }\n  }\n\n  // Other cases: Tonelli-Shanks algorithm\n  return tonelliShanks(P);\n}\n\n// Little-endian check for first LE bit (last BE bit);\nexport const isNegativeLE = (num: bigint, modulo: bigint) => (mod(num, modulo) & _1n) === _1n;\n\n// Field is not always over prime: for example, Fp2 has ORDER(q)=p^m\nexport interface IField<T> {\n  ORDER: bigint;\n  BYTES: number;\n  BITS: number;\n  MASK: bigint;\n  ZERO: T;\n  ONE: T;\n  // 1-arg\n  create: (num: T) => T;\n  isValid: (num: T) => boolean;\n  is0: (num: T) => boolean;\n  neg(num: T): T;\n  inv(num: T): T;\n  sqrt(num: T): T;\n  sqr(num: T): T;\n  // 2-args\n  eql(lhs: T, rhs: T): boolean;\n  add(lhs: T, rhs: T): T;\n  sub(lhs: T, rhs: T): T;\n  mul(lhs: T, rhs: T | bigint): T;\n  pow(lhs: T, power: bigint): T;\n  div(lhs: T, rhs: T | bigint): T;\n  // N for NonNormalized (for now)\n  addN(lhs: T, rhs: T): T;\n  subN(lhs: T, rhs: T): T;\n  mulN(lhs: T, rhs: T | bigint): T;\n  sqrN(num: T): T;\n\n  // Optional\n  // Should be same as sgn0 function in\n  // [RFC9380](https://www.rfc-editor.org/rfc/rfc9380#section-4.1).\n  // NOTE: sgn0 is 'negative in LE', which is same as odd. And negative in LE is kinda strange definition anyway.\n  isOdd?(num: T): boolean; // Odd instead of even since we have it for Fp2\n  // legendre?(num: T): T;\n  pow(lhs: T, power: bigint): T;\n  invertBatch: (lst: T[]) => T[];\n  toBytes(num: T): Uint8Array;\n  fromBytes(bytes: Uint8Array): T;\n  // If c is False, CMOV returns a, otherwise it returns b.\n  cmov(a: T, b: T, c: boolean): T;\n}\n// prettier-ignore\nconst FIELD_FIELDS = [\n  'create', 'isValid', 'is0', 'neg', 'inv', 'sqrt', 'sqr',\n  'eql', 'add', 'sub', 'mul', 'pow', 'div',\n  'addN', 'subN', 'mulN', 'sqrN'\n] as const;\nexport function validateField<T>(field: IField<T>) {\n  const initial = {\n    ORDER: 'bigint',\n    MASK: 'bigint',\n    BYTES: 'isSafeInteger',\n    BITS: 'isSafeInteger',\n  } as Record<string, string>;\n  const opts = FIELD_FIELDS.reduce((map, val: string) => {\n    map[val] = 'function';\n    return map;\n  }, initial);\n  return validateObject(field, opts);\n}\n\n// Generic field functions\n\n/**\n * Same as `pow` but for Fp: non-constant-time.\n * Unsafe in some contexts: uses ladder, so can expose bigint bits.\n */\nexport function FpPow<T>(f: IField<T>, num: T, power: bigint): T {\n  // Should have same speed as pow for bigints\n  // TODO: benchmark!\n  if (power < _0n) throw new Error('Expected power > 0');\n  if (power === _0n) return f.ONE;\n  if (power === _1n) return num;\n  let p = f.ONE;\n  let d = num;\n  while (power > _0n) {\n    if (power & _1n) p = f.mul(p, d);\n    d = f.sqr(d);\n    power >>= _1n;\n  }\n  return p;\n}\n\n/**\n * Efficiently invert an array of Field elements.\n * `inv(0)` will return `undefined` here: make sure to throw an error.\n */\nexport function FpInvertBatch<T>(f: IField<T>, nums: T[]): T[] {\n  const tmp = new Array(nums.length);\n  // Walk from first to last, multiply them by each other MOD p\n  const lastMultiplied = nums.reduce((acc, num, i) => {\n    if (f.is0(num)) return acc;\n    tmp[i] = acc;\n    return f.mul(acc, num);\n  }, f.ONE);\n  // Invert last element\n  const inverted = f.inv(lastMultiplied);\n  // Walk from last to first, multiply them by inverted each other MOD p\n  nums.reduceRight((acc, num, i) => {\n    if (f.is0(num)) return acc;\n    tmp[i] = f.mul(acc, tmp[i]);\n    return f.mul(acc, num);\n  }, inverted);\n  return tmp;\n}\n\nexport function FpDiv<T>(f: IField<T>, lhs: T, rhs: T | bigint): T {\n  return f.mul(lhs, typeof rhs === 'bigint' ? invert(rhs, f.ORDER) : f.inv(rhs));\n}\n\n// This function returns True whenever the value x is a square in the field F.\nexport function FpIsSquare<T>(f: IField<T>) {\n  const legendreConst = (f.ORDER - _1n) / _2n; // Integer arithmetic\n  return (x: T): boolean => {\n    const p = f.pow(x, legendreConst);\n    return f.eql(p, f.ZERO) || f.eql(p, f.ONE);\n  };\n}\n\n// CURVE.n lengths\nexport function nLength(n: bigint, nBitLength?: number) {\n  // Bit size, byte size of CURVE.n\n  const _nBitLength = nBitLength !== undefined ? nBitLength : n.toString(2).length;\n  const nByteLength = Math.ceil(_nBitLength / 8);\n  return { nBitLength: _nBitLength, nByteLength };\n}\n\ntype FpField = IField<bigint> & Required<Pick<IField<bigint>, 'isOdd'>>;\n/**\n * Initializes a finite field over prime. **Non-primes are not supported.**\n * Do not init in loop: slow. Very fragile: always run a benchmark on a change.\n * Major performance optimizations:\n * * a) denormalized operations like mulN instead of mul\n * * b) same object shape: never add or remove keys\n * * c) Object.freeze\n * @param ORDER prime positive bigint\n * @param bitLen how many bits the field consumes\n * @param isLE (def: false) if encoding / decoding should be in little-endian\n * @param redef optional faster redefinitions of sqrt and other methods\n */\nexport function Field(\n  ORDER: bigint,\n  bitLen?: number,\n  isLE = false,\n  redef: Partial<IField<bigint>> = {}\n): Readonly<FpField> {\n  if (ORDER <= _0n) throw new Error(`Expected Field ORDER > 0, got ${ORDER}`);\n  const { nBitLength: BITS, nByteLength: BYTES } = nLength(ORDER, bitLen);\n  if (BYTES > 2048) throw new Error('Field lengths over 2048 bytes are not supported');\n  const sqrtP = FpSqrt(ORDER);\n  const f: Readonly<FpField> = Object.freeze({\n    ORDER,\n    BITS,\n    BYTES,\n    MASK: bitMask(BITS),\n    ZERO: _0n,\n    ONE: _1n,\n    create: (num) => mod(num, ORDER),\n    isValid: (num) => {\n      if (typeof num !== 'bigint')\n        throw new Error(`Invalid field element: expected bigint, got ${typeof num}`);\n      return _0n <= num && num < ORDER; // 0 is valid element, but it's not invertible\n    },\n    is0: (num) => num === _0n,\n    isOdd: (num) => (num & _1n) === _1n,\n    neg: (num) => mod(-num, ORDER),\n    eql: (lhs, rhs) => lhs === rhs,\n\n    sqr: (num) => mod(num * num, ORDER),\n    add: (lhs, rhs) => mod(lhs + rhs, ORDER),\n    sub: (lhs, rhs) => mod(lhs - rhs, ORDER),\n    mul: (lhs, rhs) => mod(lhs * rhs, ORDER),\n    pow: (num, power) => FpPow(f, num, power),\n    div: (lhs, rhs) => mod(lhs * invert(rhs, ORDER), ORDER),\n\n    // Same as above, but doesn't normalize\n    sqrN: (num) => num * num,\n    addN: (lhs, rhs) => lhs + rhs,\n    subN: (lhs, rhs) => lhs - rhs,\n    mulN: (lhs, rhs) => lhs * rhs,\n\n    inv: (num) => invert(num, ORDER),\n    sqrt: redef.sqrt || ((n) => sqrtP(f, n)),\n    invertBatch: (lst) => FpInvertBatch(f, lst),\n    // TODO: do we really need constant cmov?\n    // We don't have const-time bigints anyway, so probably will be not very useful\n    cmov: (a, b, c) => (c ? b : a),\n    toBytes: (num) => (isLE ? numberToBytesLE(num, BYTES) : numberToBytesBE(num, BYTES)),\n    fromBytes: (bytes) => {\n      if (bytes.length !== BYTES)\n        throw new Error(`Fp.fromBytes: expected ${BYTES}, got ${bytes.length}`);\n      return isLE ? bytesToNumberLE(bytes) : bytesToNumberBE(bytes);\n    },\n  } as FpField);\n  return Object.freeze(f);\n}\n\nexport function FpSqrtOdd<T>(Fp: IField<T>, elm: T) {\n  if (!Fp.isOdd) throw new Error(`Field doesn't have isOdd`);\n  const root = Fp.sqrt(elm);\n  return Fp.isOdd(root) ? root : Fp.neg(root);\n}\n\nexport function FpSqrtEven<T>(Fp: IField<T>, elm: T) {\n  if (!Fp.isOdd) throw new Error(`Field doesn't have isOdd`);\n  const root = Fp.sqrt(elm);\n  return Fp.isOdd(root) ? Fp.neg(root) : root;\n}\n\n/**\n * \"Constant-time\" private key generation utility.\n * Same as mapKeyToField, but accepts less bytes (40 instead of 48 for 32-byte field).\n * Which makes it slightly more biased, less secure.\n * @deprecated use mapKeyToField instead\n */\nexport function hashToPrivateScalar(\n  hash: string | Uint8Array,\n  groupOrder: bigint,\n  isLE = false\n): bigint {\n  hash = ensureBytes('privateHash', hash);\n  const hashLen = hash.length;\n  const minLen = nLength(groupOrder).nByteLength + 8;\n  if (minLen < 24 || hashLen < minLen || hashLen > 1024)\n    throw new Error(`hashToPrivateScalar: expected ${minLen}-1024 bytes of input, got ${hashLen}`);\n  const num = isLE ? bytesToNumberLE(hash) : bytesToNumberBE(hash);\n  return mod(num, groupOrder - _1n) + _1n;\n}\n\n/**\n * Returns total number of bytes consumed by the field element.\n * For example, 32 bytes for usual 256-bit weierstrass curve.\n * @param fieldOrder number of field elements, usually CURVE.n\n * @returns byte length of field\n */\nexport function getFieldBytesLength(fieldOrder: bigint): number {\n  if (typeof fieldOrder !== 'bigint') throw new Error('field order must be bigint');\n  const bitLength = fieldOrder.toString(2).length;\n  return Math.ceil(bitLength / 8);\n}\n\n/**\n * Returns minimal amount of bytes that can be safely reduced\n * by field order.\n * Should be 2^-128 for 128-bit curve such as P256.\n * @param fieldOrder number of field elements, usually CURVE.n\n * @returns byte length of target hash\n */\nexport function getMinHashLength(fieldOrder: bigint): number {\n  const length = getFieldBytesLength(fieldOrder);\n  return length + Math.ceil(length / 2);\n}\n\n/**\n * \"Constant-time\" private key generation utility.\n * Can take (n + n/2) or more bytes of uniform input e.g. from CSPRNG or KDF\n * and convert them into private scalar, with the modulo bias being negligible.\n * Needs at least 48 bytes of input for 32-byte private key.\n * https://research.kudelskisecurity.com/2020/07/28/the-definitive-guide-to-modulo-bias-and-how-to-avoid-it/\n * FIPS 186-5, A.2 https://csrc.nist.gov/publications/detail/fips/186/5/final\n * RFC 9380, https://www.rfc-editor.org/rfc/rfc9380#section-5\n * @param hash hash output from SHA3 or a similar function\n * @param groupOrder size of subgroup - (e.g. secp256k1.CURVE.n)\n * @param isLE interpret hash bytes as LE num\n * @returns valid private scalar\n */\nexport function mapHashToField(key: Uint8Array, fieldOrder: bigint, isLE = false): Uint8Array {\n  const len = key.length;\n  const fieldLen = getFieldBytesLength(fieldOrder);\n  const minLen = getMinHashLength(fieldOrder);\n  // No small numbers: need to understand bias story. No huge numbers: easier to detect JS timings.\n  if (len < 16 || len < minLen || len > 1024)\n    throw new Error(`expected ${minLen}-1024 bytes of input, got ${len}`);\n  const num = isLE ? bytesToNumberBE(key) : bytesToNumberLE(key);\n  // `mod(x, 11)` can sometimes produce 0. `mod(x, 10) + 1` is the same, but no 0\n  const reduced = mod(num, fieldOrder - _1n) + _1n;\n  return isLE ? numberToBytesLE(reduced, fieldLen) : numberToBytesBE(reduced, fieldLen);\n}\n", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// Abelian group utilities\nimport { IField, validateField, nLength } from './modular.js';\nimport { validateObject } from './utils.js';\nconst _0n = BigInt(0);\nconst _1n = BigInt(1);\n\nexport type AffinePoint<T> = {\n  x: T;\n  y: T;\n} & { z?: never; t?: never };\n\nexport interface Group<T extends Group<T>> {\n  double(): T;\n  negate(): T;\n  add(other: T): T;\n  subtract(other: T): T;\n  equals(other: T): boolean;\n  multiply(scalar: bigint): T;\n}\n\nexport type GroupConstructor<T> = {\n  BASE: T;\n  ZERO: T;\n};\nexport type Mapper<T> = (i: T[]) => T[];\n\n// Elliptic curve multiplication of Point by scalar. Fragile.\n// Scalars should always be less than curve order: this should be checked inside of a curve itself.\n// Creates precomputation tables for fast multiplication:\n// - private scalar is split by fixed size windows of W bits\n// - every window point is collected from window's table & added to accumulator\n// - since windows are different, same point inside tables won't be accessed more than once per calc\n// - each multiplication is 'Math.ceil(CURVE_ORDER / \uD835\uDC4A) + 1' point additions (fixed for any scalar)\n// - +1 window is neccessary for wNAF\n// - wNAF reduces table size: 2x less memory + 2x faster generation, but 10% slower multiplication\n// TODO: Research returning 2d JS array of windows, instead of a single window. This would allow\n// windows to be in different memory locations\nexport function wNAF<T extends Group<T>>(c: GroupConstructor<T>, bits: number) {\n  const constTimeNegate = (condition: boolean, item: T): T => {\n    const neg = item.negate();\n    return condition ? neg : item;\n  };\n  const opts = (W: number) => {\n    const windows = Math.ceil(bits / W) + 1; // +1, because\n    const windowSize = 2 ** (W - 1); // -1 because we skip zero\n    return { windows, windowSize };\n  };\n  return {\n    constTimeNegate,\n    // non-const time multiplication ladder\n    unsafeLadder(elm: T, n: bigint) {\n      let p = c.ZERO;\n      let d: T = elm;\n      while (n > _0n) {\n        if (n & _1n) p = p.add(d);\n        d = d.double();\n        n >>= _1n;\n      }\n      return p;\n    },\n\n    /**\n     * Creates a wNAF precomputation window. Used for caching.\n     * Default window size is set by `utils.precompute()` and is equal to 8.\n     * Number of precomputed points depends on the curve size:\n     * 2^(\uD835\uDC4A\u22121) * (Math.ceil(\uD835\uDC5B / \uD835\uDC4A) + 1), where:\n     * - \uD835\uDC4A is the window size\n     * - \uD835\uDC5B is the bitlength of the curve order.\n     * For a 256-bit curve and window size 8, the number of precomputed points is 128 * 33 = 4224.\n     * @returns precomputed point tables flattened to a single array\n     */\n    precomputeWindow(elm: T, W: number): Group<T>[] {\n      const { windows, windowSize } = opts(W);\n      const points: T[] = [];\n      let p: T = elm;\n      let base = p;\n      for (let window = 0; window < windows; window++) {\n        base = p;\n        points.push(base);\n        // =1, because we skip zero\n        for (let i = 1; i < windowSize; i++) {\n          base = base.add(p);\n          points.push(base);\n        }\n        p = base.double();\n      }\n      return points;\n    },\n\n    /**\n     * Implements ec multiplication using precomputed tables and w-ary non-adjacent form.\n     * @param W window size\n     * @param precomputes precomputed tables\n     * @param n scalar (we don't check here, but should be less than curve order)\n     * @returns real and fake (for const-time) points\n     */\n    wNAF(W: number, precomputes: T[], n: bigint): { p: T; f: T } {\n      // TODO: maybe check that scalar is less than group order? wNAF behavious is undefined otherwise\n      // But need to carefully remove other checks before wNAF. ORDER == bits here\n      const { windows, windowSize } = opts(W);\n\n      let p = c.ZERO;\n      let f = c.BASE;\n\n      const mask = BigInt(2 ** W - 1); // Create mask with W ones: 0b1111 for W=4 etc.\n      const maxNumber = 2 ** W;\n      const shiftBy = BigInt(W);\n\n      for (let window = 0; window < windows; window++) {\n        const offset = window * windowSize;\n        // Extract W bits.\n        let wbits = Number(n & mask);\n\n        // Shift number by W bits.\n        n >>= shiftBy;\n\n        // If the bits are bigger than max size, we'll split those.\n        // +224 => 256 - 32\n        if (wbits > windowSize) {\n          wbits -= maxNumber;\n          n += _1n;\n        }\n\n        // This code was first written with assumption that 'f' and 'p' will never be infinity point:\n        // since each addition is multiplied by 2 ** W, it cannot cancel each other. However,\n        // there is negate now: it is possible that negated element from low value\n        // would be the same as high element, which will create carry into next window.\n        // It's not obvious how this can fail, but still worth investigating later.\n\n        // Check if we're onto Zero point.\n        // Add random point inside current window to f.\n        const offset1 = offset;\n        const offset2 = offset + Math.abs(wbits) - 1; // -1 because we skip zero\n        const cond1 = window % 2 !== 0;\n        const cond2 = wbits < 0;\n        if (wbits === 0) {\n          // The most important part for const-time getPublicKey\n          f = f.add(constTimeNegate(cond1, precomputes[offset1]));\n        } else {\n          p = p.add(constTimeNegate(cond2, precomputes[offset2]));\n        }\n      }\n      // JIT-compiler should not eliminate f here, since it will later be used in normalizeZ()\n      // Even if the variable is still unused, there are some checks which will\n      // throw an exception, so compiler needs to prove they won't happen, which is hard.\n      // At this point there is a way to F be infinity-point even if p is not,\n      // which makes it less const-time: around 1 bigint multiply.\n      return { p, f };\n    },\n\n    wNAFCached(P: T, precomputesMap: Map<T, T[]>, n: bigint, transform: Mapper<T>): { p: T; f: T } {\n      // @ts-ignore\n      const W: number = P._WINDOW_SIZE || 1;\n      // Calculate precomputes on a first run, reuse them after\n      let comp = precomputesMap.get(P);\n      if (!comp) {\n        comp = this.precomputeWindow(P, W) as T[];\n        if (W !== 1) {\n          precomputesMap.set(P, transform(comp));\n        }\n      }\n      return this.wNAF(W, comp, n);\n    },\n  };\n}\n\n// Generic BasicCurve interface: works even for polynomial fields (BLS): P, n, h would be ok.\n// Though generator can be different (Fp2 / Fp6 for BLS).\nexport type BasicCurve<T> = {\n  Fp: IField<T>; // Field over which we'll do calculations (Fp)\n  n: bigint; // Curve order, total count of valid points in the field\n  nBitLength?: number; // bit length of curve order\n  nByteLength?: number; // byte length of curve order\n  h: bigint; // cofactor. we can assign default=1, but users will just ignore it w/o validation\n  hEff?: bigint; // Number to multiply to clear cofactor\n  Gx: T; // base point X coordinate\n  Gy: T; // base point Y coordinate\n  allowInfinityPoint?: boolean; // bls12-381 requires it. ZERO point is valid, but invalid pubkey\n};\n\nexport function validateBasic<FP, T>(curve: BasicCurve<FP> & T) {\n  validateField(curve.Fp);\n  validateObject(\n    curve,\n    {\n      n: 'bigint',\n      h: 'bigint',\n      Gx: 'field',\n      Gy: 'field',\n    },\n    {\n      nBitLength: 'isSafeInteger',\n      nByteLength: 'isSafeInteger',\n    }\n  );\n  // Set defaults\n  return Object.freeze({\n    ...nLength(curve.n, curve.nBitLength),\n    ...curve,\n    ...{ p: curve.Fp.ORDER },\n  } as const);\n}\n", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// Short Weierstrass curve. The formula is: y\u00B2 = x\u00B3 + ax + b\nimport * as mod from './modular.js';\nimport * as ut from './utils.js';\nimport { CHash, Hex, PrivKey, ensureBytes } from './utils.js';\nimport { Group, GroupConstructor, wNAF, BasicCurve, validateBasic, AffinePoint } from './curve.js';\n\nexport type { AffinePoint };\ntype HmacFnSync = (key: Uint8Array, ...messages: Uint8Array[]) => Uint8Array;\ntype EndomorphismOpts = {\n  beta: bigint;\n  splitScalar: (k: bigint) => { k1neg: boolean; k1: bigint; k2neg: boolean; k2: bigint };\n};\nexport type BasicWCurve<T> = BasicCurve<T> & {\n  // Params: a, b\n  a: T;\n  b: T;\n\n  // Optional params\n  allowedPrivateKeyLengths?: readonly number[]; // for P521\n  wrapPrivateKey?: boolean; // bls12-381 requires mod(n) instead of rejecting keys >= n\n  endo?: EndomorphismOpts; // Endomorphism options for Koblitz curves\n  // When a cofactor != 1, there can be an effective methods to:\n  // 1. Determine whether a point is torsion-free\n  isTorsionFree?: (c: ProjConstructor<T>, point: ProjPointType<T>) => boolean;\n  // 2. Clear torsion component\n  clearCofactor?: (c: ProjConstructor<T>, point: ProjPointType<T>) => ProjPointType<T>;\n};\n\ntype Entropy = Hex | true;\nexport type SignOpts = { lowS?: boolean; extraEntropy?: Entropy; prehash?: boolean };\nexport type VerOpts = { lowS?: boolean; prehash?: boolean };\n\n/**\n * ### Design rationale for types\n *\n * * Interaction between classes from different curves should fail:\n *   `k256.Point.BASE.add(p256.Point.BASE)`\n * * For this purpose we want to use `instanceof` operator, which is fast and works during runtime\n * * Different calls of `curve()` would return different classes -\n *   `curve(params) !== curve(params)`: if somebody decided to monkey-patch their curve,\n *   it won't affect others\n *\n * TypeScript can't infer types for classes created inside a function. Classes is one instance of nominative types in TypeScript and interfaces only check for shape, so it's hard to create unique type for every function call.\n *\n * We can use generic types via some param, like curve opts, but that would:\n *     1. Enable interaction between `curve(params)` and `curve(params)` (curves of same params)\n *     which is hard to debug.\n *     2. Params can be generic and we can't enforce them to be constant value:\n *     if somebody creates curve from non-constant params,\n *     it would be allowed to interact with other curves with non-constant params\n *\n * TODO: https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-7.html#unique-symbol\n */\n\n// Instance for 3d XYZ points\nexport interface ProjPointType<T> extends Group<ProjPointType<T>> {\n  readonly px: T;\n  readonly py: T;\n  readonly pz: T;\n  get x(): T;\n  get y(): T;\n  multiply(scalar: bigint): ProjPointType<T>;\n  toAffine(iz?: T): AffinePoint<T>;\n  isTorsionFree(): boolean;\n  clearCofactor(): ProjPointType<T>;\n  assertValidity(): void;\n  hasEvenY(): boolean;\n  toRawBytes(isCompressed?: boolean): Uint8Array;\n  toHex(isCompressed?: boolean): string;\n\n  multiplyUnsafe(scalar: bigint): ProjPointType<T>;\n  multiplyAndAddUnsafe(Q: ProjPointType<T>, a: bigint, b: bigint): ProjPointType<T> | undefined;\n  _setWindowSize(windowSize: number): void;\n}\n// Static methods for 3d XYZ points\nexport interface ProjConstructor<T> extends GroupConstructor<ProjPointType<T>> {\n  new (x: T, y: T, z: T): ProjPointType<T>;\n  fromAffine(p: AffinePoint<T>): ProjPointType<T>;\n  fromHex(hex: Hex): ProjPointType<T>;\n  fromPrivateKey(privateKey: PrivKey): ProjPointType<T>;\n  normalizeZ(points: ProjPointType<T>[]): ProjPointType<T>[];\n}\n\nexport type CurvePointsType<T> = BasicWCurve<T> & {\n  // Bytes\n  fromBytes?: (bytes: Uint8Array) => AffinePoint<T>;\n  toBytes?: (c: ProjConstructor<T>, point: ProjPointType<T>, isCompressed: boolean) => Uint8Array;\n};\n\nfunction validatePointOpts<T>(curve: CurvePointsType<T>) {\n  const opts = validateBasic(curve);\n  ut.validateObject(\n    opts,\n    {\n      a: 'field',\n      b: 'field',\n    },\n    {\n      allowedPrivateKeyLengths: 'array',\n      wrapPrivateKey: 'boolean',\n      isTorsionFree: 'function',\n      clearCofactor: 'function',\n      allowInfinityPoint: 'boolean',\n      fromBytes: 'function',\n      toBytes: 'function',\n    }\n  );\n  const { endo, Fp, a } = opts;\n  if (endo) {\n    if (!Fp.eql(a, Fp.ZERO)) {\n      throw new Error('Endomorphism can only be defined for Koblitz curves that have a=0');\n    }\n    if (\n      typeof endo !== 'object' ||\n      typeof endo.beta !== 'bigint' ||\n      typeof endo.splitScalar !== 'function'\n    ) {\n      throw new Error('Expected endomorphism with beta: bigint and splitScalar: function');\n    }\n  }\n  return Object.freeze({ ...opts } as const);\n}\n\nexport type CurvePointsRes<T> = {\n  ProjectivePoint: ProjConstructor<T>;\n  normPrivateKeyToScalar: (key: PrivKey) => bigint;\n  weierstrassEquation: (x: T) => T;\n  isWithinCurveOrder: (num: bigint) => boolean;\n};\n\n// ASN.1 DER encoding utilities\nconst { bytesToNumberBE: b2n, hexToBytes: h2b } = ut;\nexport const DER = {\n  // asn.1 DER encoding utils\n  Err: class DERErr extends Error {\n    constructor(m = '') {\n      super(m);\n    }\n  },\n  _parseInt(data: Uint8Array): { d: bigint; l: Uint8Array } {\n    const { Err: E } = DER;\n    if (data.length < 2 || data[0] !== 0x02) throw new E('Invalid signature integer tag');\n    const len = data[1];\n    const res = data.subarray(2, len + 2);\n    if (!len || res.length !== len) throw new E('Invalid signature integer: wrong length');\n    // https://crypto.stackexchange.com/a/57734 Leftmost bit of first byte is 'negative' flag,\n    // since we always use positive integers here. It must always be empty:\n    // - add zero byte if exists\n    // - if next byte doesn't have a flag, leading zero is not allowed (minimal encoding)\n    if (res[0] & 0b10000000) throw new E('Invalid signature integer: negative');\n    if (res[0] === 0x00 && !(res[1] & 0b10000000))\n      throw new E('Invalid signature integer: unnecessary leading zero');\n    return { d: b2n(res), l: data.subarray(len + 2) }; // d is data, l is left\n  },\n  toSig(hex: string | Uint8Array): { r: bigint; s: bigint } {\n    // parse DER signature\n    const { Err: E } = DER;\n    const data = typeof hex === 'string' ? h2b(hex) : hex;\n    if (!(data instanceof Uint8Array)) throw new Error('ui8a expected');\n    let l = data.length;\n    if (l < 2 || data[0] != 0x30) throw new E('Invalid signature tag');\n    if (data[1] !== l - 2) throw new E('Invalid signature: incorrect length');\n    const { d: r, l: sBytes } = DER._parseInt(data.subarray(2));\n    const { d: s, l: rBytesLeft } = DER._parseInt(sBytes);\n    if (rBytesLeft.length) throw new E('Invalid signature: left bytes after parsing');\n    return { r, s };\n  },\n  hexFromSig(sig: { r: bigint; s: bigint }): string {\n    // Add leading zero if first byte has negative bit enabled. More details in '_parseInt'\n    const slice = (s: string): string => (Number.parseInt(s[0], 16) & 0b1000 ? '00' + s : s);\n    const h = (num: number | bigint) => {\n      const hex = num.toString(16);\n      return hex.length & 1 ? `0${hex}` : hex;\n    };\n    const s = slice(h(sig.s));\n    const r = slice(h(sig.r));\n    const shl = s.length / 2;\n    const rhl = r.length / 2;\n    const sl = h(shl);\n    const rl = h(rhl);\n    return `30${h(rhl + shl + 4)}02${rl}${r}02${sl}${s}`;\n  },\n};\n\n// Be friendly to bad ECMAScript parsers by not using bigint literals\n// prettier-ignore\nconst _0n = BigInt(0), _1n = BigInt(1), _2n = BigInt(2), _3n = BigInt(3), _4n = BigInt(4);\n\nexport function weierstrassPoints<T>(opts: CurvePointsType<T>) {\n  const CURVE = validatePointOpts(opts);\n  const { Fp } = CURVE; // All curves has same field / group length as for now, but they can differ\n\n  const toBytes =\n    CURVE.toBytes ||\n    ((_c: ProjConstructor<T>, point: ProjPointType<T>, _isCompressed: boolean) => {\n      const a = point.toAffine();\n      return ut.concatBytes(Uint8Array.from([0x04]), Fp.toBytes(a.x), Fp.toBytes(a.y));\n    });\n  const fromBytes =\n    CURVE.fromBytes ||\n    ((bytes: Uint8Array) => {\n      // const head = bytes[0];\n      const tail = bytes.subarray(1);\n      // if (head !== 0x04) throw new Error('Only non-compressed encoding is supported');\n      const x = Fp.fromBytes(tail.subarray(0, Fp.BYTES));\n      const y = Fp.fromBytes(tail.subarray(Fp.BYTES, 2 * Fp.BYTES));\n      return { x, y };\n    });\n\n  /**\n   * y\u00B2 = x\u00B3 + ax + b: Short weierstrass curve formula\n   * @returns y\u00B2\n   */\n  function weierstrassEquation(x: T): T {\n    const { a, b } = CURVE;\n    const x2 = Fp.sqr(x); // x * x\n    const x3 = Fp.mul(x2, x); // x2 * x\n    return Fp.add(Fp.add(x3, Fp.mul(x, a)), b); // x3 + a * x + b\n  }\n  // Validate whether the passed curve params are valid.\n  // We check if curve equation works for generator point.\n  // `assertValidity()` won't work: `isTorsionFree()` is not available at this point in bls12-381.\n  // ProjectivePoint class has not been initialized yet.\n  if (!Fp.eql(Fp.sqr(CURVE.Gy), weierstrassEquation(CURVE.Gx)))\n    throw new Error('bad generator point: equation left != right');\n\n  // Valid group elements reside in range 1..n-1\n  function isWithinCurveOrder(num: bigint): boolean {\n    return typeof num === 'bigint' && _0n < num && num < CURVE.n;\n  }\n  function assertGE(num: bigint) {\n    if (!isWithinCurveOrder(num)) throw new Error('Expected valid bigint: 0 < bigint < curve.n');\n  }\n  // Validates if priv key is valid and converts it to bigint.\n  // Supports options allowedPrivateKeyLengths and wrapPrivateKey.\n  function normPrivateKeyToScalar(key: PrivKey): bigint {\n    const { allowedPrivateKeyLengths: lengths, nByteLength, wrapPrivateKey, n } = CURVE;\n    if (lengths && typeof key !== 'bigint') {\n      if (key instanceof Uint8Array) key = ut.bytesToHex(key);\n      // Normalize to hex string, pad. E.g. P521 would norm 130-132 char hex to 132-char bytes\n      if (typeof key !== 'string' || !lengths.includes(key.length)) throw new Error('Invalid key');\n      key = key.padStart(nByteLength * 2, '0');\n    }\n    let num: bigint;\n    try {\n      num =\n        typeof key === 'bigint'\n          ? key\n          : ut.bytesToNumberBE(ensureBytes('private key', key, nByteLength));\n    } catch (error) {\n      throw new Error(`private key must be ${nByteLength} bytes, hex or bigint, not ${typeof key}`);\n    }\n    if (wrapPrivateKey) num = mod.mod(num, n); // disabled by default, enabled for BLS\n    assertGE(num); // num in range [1..N-1]\n    return num;\n  }\n\n  const pointPrecomputes = new Map<Point, Point[]>();\n  function assertPrjPoint(other: unknown) {\n    if (!(other instanceof Point)) throw new Error('ProjectivePoint expected');\n  }\n  /**\n   * Projective Point works in 3d / projective (homogeneous) coordinates: (x, y, z) \u220B (x=x/z, y=y/z)\n   * Default Point works in 2d / affine coordinates: (x, y)\n   * We're doing calculations in projective, because its operations don't require costly inversion.\n   */\n  class Point implements ProjPointType<T> {\n    static readonly BASE = new Point(CURVE.Gx, CURVE.Gy, Fp.ONE);\n    static readonly ZERO = new Point(Fp.ZERO, Fp.ONE, Fp.ZERO);\n\n    constructor(readonly px: T, readonly py: T, readonly pz: T) {\n      if (px == null || !Fp.isValid(px)) throw new Error('x required');\n      if (py == null || !Fp.isValid(py)) throw new Error('y required');\n      if (pz == null || !Fp.isValid(pz)) throw new Error('z required');\n    }\n\n    // Does not validate if the point is on-curve.\n    // Use fromHex instead, or call assertValidity() later.\n    static fromAffine(p: AffinePoint<T>): Point {\n      const { x, y } = p || {};\n      if (!p || !Fp.isValid(x) || !Fp.isValid(y)) throw new Error('invalid affine point');\n      if (p instanceof Point) throw new Error('projective point not allowed');\n      const is0 = (i: T) => Fp.eql(i, Fp.ZERO);\n      // fromAffine(x:0, y:0) would produce (x:0, y:0, z:1), but we need (x:0, y:1, z:0)\n      if (is0(x) && is0(y)) return Point.ZERO;\n      return new Point(x, y, Fp.ONE);\n    }\n\n    get x(): T {\n      return this.toAffine().x;\n    }\n    get y(): T {\n      return this.toAffine().y;\n    }\n\n    /**\n     * Takes a bunch of Projective Points but executes only one\n     * inversion on all of them. Inversion is very slow operation,\n     * so this improves performance massively.\n     * Optimization: converts a list of projective points to a list of identical points with Z=1.\n     */\n    static normalizeZ(points: Point[]): Point[] {\n      const toInv = Fp.invertBatch(points.map((p) => p.pz));\n      return points.map((p, i) => p.toAffine(toInv[i])).map(Point.fromAffine);\n    }\n\n    /**\n     * Converts hash string or Uint8Array to Point.\n     * @param hex short/long ECDSA hex\n     */\n    static fromHex(hex: Hex): Point {\n      const P = Point.fromAffine(fromBytes(ensureBytes('pointHex', hex)));\n      P.assertValidity();\n      return P;\n    }\n\n    // Multiplies generator point by privateKey.\n    static fromPrivateKey(privateKey: PrivKey) {\n      return Point.BASE.multiply(normPrivateKeyToScalar(privateKey));\n    }\n\n    // We calculate precomputes for elliptic curve point multiplication\n    // using windowed method. This specifies window size and\n    // stores precomputed values. Usually only base point would be precomputed.\n    _WINDOW_SIZE?: number;\n\n    // \"Private method\", don't use it directly\n    _setWindowSize(windowSize: number) {\n      this._WINDOW_SIZE = windowSize;\n      pointPrecomputes.delete(this);\n    }\n\n    // A point on curve is valid if it conforms to equation.\n    assertValidity(): void {\n      if (this.is0()) {\n        // (0, 1, 0) aka ZERO is invalid in most contexts.\n        // In BLS, ZERO can be serialized, so we allow it.\n        // (0, 0, 0) is wrong representation of ZERO and is always invalid.\n        if (CURVE.allowInfinityPoint && !Fp.is0(this.py)) return;\n        throw new Error('bad point: ZERO');\n      }\n      // Some 3rd-party test vectors require different wording between here & `fromCompressedHex`\n      const { x, y } = this.toAffine();\n      // Check if x, y are valid field elements\n      if (!Fp.isValid(x) || !Fp.isValid(y)) throw new Error('bad point: x or y not FE');\n      const left = Fp.sqr(y); // y\u00B2\n      const right = weierstrassEquation(x); // x\u00B3 + ax + b\n      if (!Fp.eql(left, right)) throw new Error('bad point: equation left != right');\n      if (!this.isTorsionFree()) throw new Error('bad point: not in prime-order subgroup');\n    }\n    hasEvenY(): boolean {\n      const { y } = this.toAffine();\n      if (Fp.isOdd) return !Fp.isOdd(y);\n      throw new Error(\"Field doesn't support isOdd\");\n    }\n\n    /**\n     * Compare one point to another.\n     */\n    equals(other: Point): boolean {\n      assertPrjPoint(other);\n      const { px: X1, py: Y1, pz: Z1 } = this;\n      const { px: X2, py: Y2, pz: Z2 } = other;\n      const U1 = Fp.eql(Fp.mul(X1, Z2), Fp.mul(X2, Z1));\n      const U2 = Fp.eql(Fp.mul(Y1, Z2), Fp.mul(Y2, Z1));\n      return U1 && U2;\n    }\n\n    /**\n     * Flips point to one corresponding to (x, -y) in Affine coordinates.\n     */\n    negate(): Point {\n      return new Point(this.px, Fp.neg(this.py), this.pz);\n    }\n\n    // Renes-Costello-Batina exception-free doubling formula.\n    // There is 30% faster Jacobian formula, but it is not complete.\n    // https://eprint.iacr.org/2015/1060, algorithm 3\n    // Cost: 8M + 3S + 3*a + 2*b3 + 15add.\n    double() {\n      const { a, b } = CURVE;\n      const b3 = Fp.mul(b, _3n);\n      const { px: X1, py: Y1, pz: Z1 } = this;\n      let X3 = Fp.ZERO, Y3 = Fp.ZERO, Z3 = Fp.ZERO; // prettier-ignore\n      let t0 = Fp.mul(X1, X1); // step 1\n      let t1 = Fp.mul(Y1, Y1);\n      let t2 = Fp.mul(Z1, Z1);\n      let t3 = Fp.mul(X1, Y1);\n      t3 = Fp.add(t3, t3); // step 5\n      Z3 = Fp.mul(X1, Z1);\n      Z3 = Fp.add(Z3, Z3);\n      X3 = Fp.mul(a, Z3);\n      Y3 = Fp.mul(b3, t2);\n      Y3 = Fp.add(X3, Y3); // step 10\n      X3 = Fp.sub(t1, Y3);\n      Y3 = Fp.add(t1, Y3);\n      Y3 = Fp.mul(X3, Y3);\n      X3 = Fp.mul(t3, X3);\n      Z3 = Fp.mul(b3, Z3); // step 15\n      t2 = Fp.mul(a, t2);\n      t3 = Fp.sub(t0, t2);\n      t3 = Fp.mul(a, t3);\n      t3 = Fp.add(t3, Z3);\n      Z3 = Fp.add(t0, t0); // step 20\n      t0 = Fp.add(Z3, t0);\n      t0 = Fp.add(t0, t2);\n      t0 = Fp.mul(t0, t3);\n      Y3 = Fp.add(Y3, t0);\n      t2 = Fp.mul(Y1, Z1); // step 25\n      t2 = Fp.add(t2, t2);\n      t0 = Fp.mul(t2, t3);\n      X3 = Fp.sub(X3, t0);\n      Z3 = Fp.mul(t2, t1);\n      Z3 = Fp.add(Z3, Z3); // step 30\n      Z3 = Fp.add(Z3, Z3);\n      return new Point(X3, Y3, Z3);\n    }\n\n    // Renes-Costello-Batina exception-free addition formula.\n    // There is 30% faster Jacobian formula, but it is not complete.\n    // https://eprint.iacr.org/2015/1060, algorithm 1\n    // Cost: 12M + 0S + 3*a + 3*b3 + 23add.\n    add(other: Point): Point {\n      assertPrjPoint(other);\n      const { px: X1, py: Y1, pz: Z1 } = this;\n      const { px: X2, py: Y2, pz: Z2 } = other;\n      let X3 = Fp.ZERO, Y3 = Fp.ZERO, Z3 = Fp.ZERO; // prettier-ignore\n      const a = CURVE.a;\n      const b3 = Fp.mul(CURVE.b, _3n);\n      let t0 = Fp.mul(X1, X2); // step 1\n      let t1 = Fp.mul(Y1, Y2);\n      let t2 = Fp.mul(Z1, Z2);\n      let t3 = Fp.add(X1, Y1);\n      let t4 = Fp.add(X2, Y2); // step 5\n      t3 = Fp.mul(t3, t4);\n      t4 = Fp.add(t0, t1);\n      t3 = Fp.sub(t3, t4);\n      t4 = Fp.add(X1, Z1);\n      let t5 = Fp.add(X2, Z2); // step 10\n      t4 = Fp.mul(t4, t5);\n      t5 = Fp.add(t0, t2);\n      t4 = Fp.sub(t4, t5);\n      t5 = Fp.add(Y1, Z1);\n      X3 = Fp.add(Y2, Z2); // step 15\n      t5 = Fp.mul(t5, X3);\n      X3 = Fp.add(t1, t2);\n      t5 = Fp.sub(t5, X3);\n      Z3 = Fp.mul(a, t4);\n      X3 = Fp.mul(b3, t2); // step 20\n      Z3 = Fp.add(X3, Z3);\n      X3 = Fp.sub(t1, Z3);\n      Z3 = Fp.add(t1, Z3);\n      Y3 = Fp.mul(X3, Z3);\n      t1 = Fp.add(t0, t0); // step 25\n      t1 = Fp.add(t1, t0);\n      t2 = Fp.mul(a, t2);\n      t4 = Fp.mul(b3, t4);\n      t1 = Fp.add(t1, t2);\n      t2 = Fp.sub(t0, t2); // step 30\n      t2 = Fp.mul(a, t2);\n      t4 = Fp.add(t4, t2);\n      t0 = Fp.mul(t1, t4);\n      Y3 = Fp.add(Y3, t0);\n      t0 = Fp.mul(t5, t4); // step 35\n      X3 = Fp.mul(t3, X3);\n      X3 = Fp.sub(X3, t0);\n      t0 = Fp.mul(t3, t1);\n      Z3 = Fp.mul(t5, Z3);\n      Z3 = Fp.add(Z3, t0); // step 40\n      return new Point(X3, Y3, Z3);\n    }\n\n    subtract(other: Point) {\n      return this.add(other.negate());\n    }\n\n    private is0() {\n      return this.equals(Point.ZERO);\n    }\n    private wNAF(n: bigint): { p: Point; f: Point } {\n      return wnaf.wNAFCached(this, pointPrecomputes, n, (comp: Point[]) => {\n        const toInv = Fp.invertBatch(comp.map((p) => p.pz));\n        return comp.map((p, i) => p.toAffine(toInv[i])).map(Point.fromAffine);\n      });\n    }\n\n    /**\n     * Non-constant-time multiplication. Uses double-and-add algorithm.\n     * It's faster, but should only be used when you don't care about\n     * an exposed private key e.g. sig verification, which works over *public* keys.\n     */\n    multiplyUnsafe(n: bigint): Point {\n      const I = Point.ZERO;\n      if (n === _0n) return I;\n      assertGE(n); // Will throw on 0\n      if (n === _1n) return this;\n      const { endo } = CURVE;\n      if (!endo) return wnaf.unsafeLadder(this, n);\n\n      // Apply endomorphism\n      let { k1neg, k1, k2neg, k2 } = endo.splitScalar(n);\n      let k1p = I;\n      let k2p = I;\n      let d: Point = this;\n      while (k1 > _0n || k2 > _0n) {\n        if (k1 & _1n) k1p = k1p.add(d);\n        if (k2 & _1n) k2p = k2p.add(d);\n        d = d.double();\n        k1 >>= _1n;\n        k2 >>= _1n;\n      }\n      if (k1neg) k1p = k1p.negate();\n      if (k2neg) k2p = k2p.negate();\n      k2p = new Point(Fp.mul(k2p.px, endo.beta), k2p.py, k2p.pz);\n      return k1p.add(k2p);\n    }\n\n    /**\n     * Constant time multiplication.\n     * Uses wNAF method. Windowed method may be 10% faster,\n     * but takes 2x longer to generate and consumes 2x memory.\n     * Uses precomputes when available.\n     * Uses endomorphism for Koblitz curves.\n     * @param scalar by which the point would be multiplied\n     * @returns New point\n     */\n    multiply(scalar: bigint): Point {\n      assertGE(scalar);\n      let n = scalar;\n      let point: Point, fake: Point; // Fake point is used to const-time mult\n      const { endo } = CURVE;\n      if (endo) {\n        const { k1neg, k1, k2neg, k2 } = endo.splitScalar(n);\n        let { p: k1p, f: f1p } = this.wNAF(k1);\n        let { p: k2p, f: f2p } = this.wNAF(k2);\n        k1p = wnaf.constTimeNegate(k1neg, k1p);\n        k2p = wnaf.constTimeNegate(k2neg, k2p);\n        k2p = new Point(Fp.mul(k2p.px, endo.beta), k2p.py, k2p.pz);\n        point = k1p.add(k2p);\n        fake = f1p.add(f2p);\n      } else {\n        const { p, f } = this.wNAF(n);\n        point = p;\n        fake = f;\n      }\n      // Normalize `z` for both points, but return only real one\n      return Point.normalizeZ([point, fake])[0];\n    }\n\n    /**\n     * Efficiently calculate `aP + bQ`. Unsafe, can expose private key, if used incorrectly.\n     * Not using Strauss-Shamir trick: precomputation tables are faster.\n     * The trick could be useful if both P and Q are not G (not in our case).\n     * @returns non-zero affine point\n     */\n    multiplyAndAddUnsafe(Q: Point, a: bigint, b: bigint): Point | undefined {\n      const G = Point.BASE; // No Strauss-Shamir trick: we have 10% faster G precomputes\n      const mul = (\n        P: Point,\n        a: bigint // Select faster multiply() method\n      ) => (a === _0n || a === _1n || !P.equals(G) ? P.multiplyUnsafe(a) : P.multiply(a));\n      const sum = mul(this, a).add(mul(Q, b));\n      return sum.is0() ? undefined : sum;\n    }\n\n    // Converts Projective point to affine (x, y) coordinates.\n    // Can accept precomputed Z^-1 - for example, from invertBatch.\n    // (x, y, z) \u220B (x=x/z, y=y/z)\n    toAffine(iz?: T): AffinePoint<T> {\n      const { px: x, py: y, pz: z } = this;\n      const is0 = this.is0();\n      // If invZ was 0, we return zero point. However we still want to execute\n      // all operations, so we replace invZ with a random number, 1.\n      if (iz == null) iz = is0 ? Fp.ONE : Fp.inv(z);\n      const ax = Fp.mul(x, iz);\n      const ay = Fp.mul(y, iz);\n      const zz = Fp.mul(z, iz);\n      if (is0) return { x: Fp.ZERO, y: Fp.ZERO };\n      if (!Fp.eql(zz, Fp.ONE)) throw new Error('invZ was invalid');\n      return { x: ax, y: ay };\n    }\n    isTorsionFree(): boolean {\n      const { h: cofactor, isTorsionFree } = CURVE;\n      if (cofactor === _1n) return true; // No subgroups, always torsion-free\n      if (isTorsionFree) return isTorsionFree(Point, this);\n      throw new Error('isTorsionFree() has not been declared for the elliptic curve');\n    }\n    clearCofactor(): Point {\n      const { h: cofactor, clearCofactor } = CURVE;\n      if (cofactor === _1n) return this; // Fast-path\n      if (clearCofactor) return clearCofactor(Point, this) as Point;\n      return this.multiplyUnsafe(CURVE.h);\n    }\n\n    toRawBytes(isCompressed = true): Uint8Array {\n      this.assertValidity();\n      return toBytes(Point, this, isCompressed);\n    }\n\n    toHex(isCompressed = true): string {\n      return ut.bytesToHex(this.toRawBytes(isCompressed));\n    }\n  }\n  const _bits = CURVE.nBitLength;\n  const wnaf = wNAF(Point, CURVE.endo ? Math.ceil(_bits / 2) : _bits);\n  // Validate if generator point is on curve\n  return {\n    CURVE,\n    ProjectivePoint: Point as ProjConstructor<T>,\n    normPrivateKeyToScalar,\n    weierstrassEquation,\n    isWithinCurveOrder,\n  };\n}\n\n// Instance\nexport interface SignatureType {\n  readonly r: bigint;\n  readonly s: bigint;\n  readonly recovery?: number;\n  assertValidity(): void;\n  addRecoveryBit(recovery: number): RecoveredSignatureType;\n  hasHighS(): boolean;\n  normalizeS(): SignatureType;\n  recoverPublicKey(msgHash: Hex): ProjPointType<bigint>;\n  toCompactRawBytes(): Uint8Array;\n  toCompactHex(): string;\n  // DER-encoded\n  toDERRawBytes(isCompressed?: boolean): Uint8Array;\n  toDERHex(isCompressed?: boolean): string;\n}\nexport type RecoveredSignatureType = SignatureType & {\n  readonly recovery: number;\n};\n// Static methods\nexport type SignatureConstructor = {\n  new (r: bigint, s: bigint): SignatureType;\n  fromCompact(hex: Hex): SignatureType;\n  fromDER(hex: Hex): SignatureType;\n};\ntype SignatureLike = { r: bigint; s: bigint };\n\nexport type PubKey = Hex | ProjPointType<bigint>;\n\nexport type CurveType = BasicWCurve<bigint> & {\n  hash: CHash; // CHash not FHash because we need outputLen for DRBG\n  hmac: HmacFnSync;\n  randomBytes: (bytesLength?: number) => Uint8Array;\n  lowS?: boolean;\n  bits2int?: (bytes: Uint8Array) => bigint;\n  bits2int_modN?: (bytes: Uint8Array) => bigint;\n};\n\nfunction validateOpts(curve: CurveType) {\n  const opts = validateBasic(curve);\n  ut.validateObject(\n    opts,\n    {\n      hash: 'hash',\n      hmac: 'function',\n      randomBytes: 'function',\n    },\n    {\n      bits2int: 'function',\n      bits2int_modN: 'function',\n      lowS: 'boolean',\n    }\n  );\n  return Object.freeze({ lowS: true, ...opts } as const);\n}\n\nexport type CurveFn = {\n  CURVE: ReturnType<typeof validateOpts>;\n  getPublicKey: (privateKey: PrivKey, isCompressed?: boolean) => Uint8Array;\n  getSharedSecret: (privateA: PrivKey, publicB: Hex, isCompressed?: boolean) => Uint8Array;\n  sign: (msgHash: Hex, privKey: PrivKey, opts?: SignOpts) => RecoveredSignatureType;\n  verify: (signature: Hex | SignatureLike, msgHash: Hex, publicKey: Hex, opts?: VerOpts) => boolean;\n  ProjectivePoint: ProjConstructor<bigint>;\n  Signature: SignatureConstructor;\n  utils: {\n    normPrivateKeyToScalar: (key: PrivKey) => bigint;\n    isValidPrivateKey(privateKey: PrivKey): boolean;\n    randomPrivateKey: () => Uint8Array;\n    precompute: (windowSize?: number, point?: ProjPointType<bigint>) => ProjPointType<bigint>;\n  };\n};\n\nexport function weierstrass(curveDef: CurveType): CurveFn {\n  const CURVE = validateOpts(curveDef) as ReturnType<typeof validateOpts>;\n  const { Fp, n: CURVE_ORDER } = CURVE;\n  const compressedLen = Fp.BYTES + 1; // e.g. 33 for 32\n  const uncompressedLen = 2 * Fp.BYTES + 1; // e.g. 65 for 32\n\n  function isValidFieldElement(num: bigint): boolean {\n    return _0n < num && num < Fp.ORDER; // 0 is banned since it's not invertible FE\n  }\n  function modN(a: bigint) {\n    return mod.mod(a, CURVE_ORDER);\n  }\n  function invN(a: bigint) {\n    return mod.invert(a, CURVE_ORDER);\n  }\n\n  const {\n    ProjectivePoint: Point,\n    normPrivateKeyToScalar,\n    weierstrassEquation,\n    isWithinCurveOrder,\n  } = weierstrassPoints({\n    ...CURVE,\n    toBytes(_c, point, isCompressed: boolean): Uint8Array {\n      const a = point.toAffine();\n      const x = Fp.toBytes(a.x);\n      const cat = ut.concatBytes;\n      if (isCompressed) {\n        return cat(Uint8Array.from([point.hasEvenY() ? 0x02 : 0x03]), x);\n      } else {\n        return cat(Uint8Array.from([0x04]), x, Fp.toBytes(a.y));\n      }\n    },\n    fromBytes(bytes: Uint8Array) {\n      const len = bytes.length;\n      const head = bytes[0];\n      const tail = bytes.subarray(1);\n      // this.assertValidity() is done inside of fromHex\n      if (len === compressedLen && (head === 0x02 || head === 0x03)) {\n        const x = ut.bytesToNumberBE(tail);\n        if (!isValidFieldElement(x)) throw new Error('Point is not on curve');\n        const y2 = weierstrassEquation(x); // y\u00B2 = x\u00B3 + ax + b\n        let y = Fp.sqrt(y2); // y = y\u00B2 ^ (p+1)/4\n        const isYOdd = (y & _1n) === _1n;\n        // ECDSA\n        const isHeadOdd = (head & 1) === 1;\n        if (isHeadOdd !== isYOdd) y = Fp.neg(y);\n        return { x, y };\n      } else if (len === uncompressedLen && head === 0x04) {\n        const x = Fp.fromBytes(tail.subarray(0, Fp.BYTES));\n        const y = Fp.fromBytes(tail.subarray(Fp.BYTES, 2 * Fp.BYTES));\n        return { x, y };\n      } else {\n        throw new Error(\n          `Point of length ${len} was invalid. Expected ${compressedLen} compressed bytes or ${uncompressedLen} uncompressed bytes`\n        );\n      }\n    },\n  });\n  const numToNByteStr = (num: bigint): string =>\n    ut.bytesToHex(ut.numberToBytesBE(num, CURVE.nByteLength));\n\n  function isBiggerThanHalfOrder(number: bigint) {\n    const HALF = CURVE_ORDER >> _1n;\n    return number > HALF;\n  }\n\n  function normalizeS(s: bigint) {\n    return isBiggerThanHalfOrder(s) ? modN(-s) : s;\n  }\n  // slice bytes num\n  const slcNum = (b: Uint8Array, from: number, to: number) => ut.bytesToNumberBE(b.slice(from, to));\n\n  /**\n   * ECDSA signature with its (r, s) properties. Supports DER & compact representations.\n   */\n  class Signature implements SignatureType {\n    constructor(readonly r: bigint, readonly s: bigint, readonly recovery?: number) {\n      this.assertValidity();\n    }\n\n    // pair (bytes of r, bytes of s)\n    static fromCompact(hex: Hex) {\n      const l = CURVE.nByteLength;\n      hex = ensureBytes('compactSignature', hex, l * 2);\n      return new Signature(slcNum(hex, 0, l), slcNum(hex, l, 2 * l));\n    }\n\n    // DER encoded ECDSA signature\n    // https://bitcoin.stackexchange.com/questions/57644/what-are-the-parts-of-a-bitcoin-transaction-input-script\n    static fromDER(hex: Hex) {\n      const { r, s } = DER.toSig(ensureBytes('DER', hex));\n      return new Signature(r, s);\n    }\n\n    assertValidity(): void {\n      // can use assertGE here\n      if (!isWithinCurveOrder(this.r)) throw new Error('r must be 0 < r < CURVE.n');\n      if (!isWithinCurveOrder(this.s)) throw new Error('s must be 0 < s < CURVE.n');\n    }\n\n    addRecoveryBit(recovery: number): RecoveredSignature {\n      return new Signature(this.r, this.s, recovery) as RecoveredSignature;\n    }\n\n    recoverPublicKey(msgHash: Hex): typeof Point.BASE {\n      const { r, s, recovery: rec } = this;\n      const h = bits2int_modN(ensureBytes('msgHash', msgHash)); // Truncate hash\n      if (rec == null || ![0, 1, 2, 3].includes(rec)) throw new Error('recovery id invalid');\n      const radj = rec === 2 || rec === 3 ? r + CURVE.n : r;\n      if (radj >= Fp.ORDER) throw new Error('recovery id 2 or 3 invalid');\n      const prefix = (rec & 1) === 0 ? '02' : '03';\n      const R = Point.fromHex(prefix + numToNByteStr(radj));\n      const ir = invN(radj); // r^-1\n      const u1 = modN(-h * ir); // -hr^-1\n      const u2 = modN(s * ir); // sr^-1\n      const Q = Point.BASE.multiplyAndAddUnsafe(R, u1, u2); // (sr^-1)R-(hr^-1)G = -(hr^-1)G + (sr^-1)\n      if (!Q) throw new Error('point at infinify'); // unsafe is fine: no priv data leaked\n      Q.assertValidity();\n      return Q;\n    }\n\n    // Signatures should be low-s, to prevent malleability.\n    hasHighS(): boolean {\n      return isBiggerThanHalfOrder(this.s);\n    }\n\n    normalizeS() {\n      return this.hasHighS() ? new Signature(this.r, modN(-this.s), this.recovery) : this;\n    }\n\n    // DER-encoded\n    toDERRawBytes() {\n      return ut.hexToBytes(this.toDERHex());\n    }\n    toDERHex() {\n      return DER.hexFromSig({ r: this.r, s: this.s });\n    }\n\n    // padded bytes of r, then padded bytes of s\n    toCompactRawBytes() {\n      return ut.hexToBytes(this.toCompactHex());\n    }\n    toCompactHex() {\n      return numToNByteStr(this.r) + numToNByteStr(this.s);\n    }\n  }\n  type RecoveredSignature = Signature & { recovery: number };\n\n  const utils = {\n    isValidPrivateKey(privateKey: PrivKey) {\n      try {\n        normPrivateKeyToScalar(privateKey);\n        return true;\n      } catch (error) {\n        return false;\n      }\n    },\n    normPrivateKeyToScalar: normPrivateKeyToScalar,\n\n    /**\n     * Produces cryptographically secure private key from random of size\n     * (groupLen + ceil(groupLen / 2)) with modulo bias being negligible.\n     */\n    randomPrivateKey: (): Uint8Array => {\n      const length = mod.getMinHashLength(CURVE.n);\n      return mod.mapHashToField(CURVE.randomBytes(length), CURVE.n);\n    },\n\n    /**\n     * Creates precompute table for an arbitrary EC point. Makes point \"cached\".\n     * Allows to massively speed-up `point.multiply(scalar)`.\n     * @returns cached point\n     * @example\n     * const fast = utils.precompute(8, ProjectivePoint.fromHex(someonesPubKey));\n     * fast.multiply(privKey); // much faster ECDH now\n     */\n    precompute(windowSize = 8, point = Point.BASE): typeof Point.BASE {\n      point._setWindowSize(windowSize);\n      point.multiply(BigInt(3)); // 3 is arbitrary, just need any number here\n      return point;\n    },\n  };\n\n  /**\n   * Computes public key for a private key. Checks for validity of the private key.\n   * @param privateKey private key\n   * @param isCompressed whether to return compact (default), or full key\n   * @returns Public key, full when isCompressed=false; short when isCompressed=true\n   */\n  function getPublicKey(privateKey: PrivKey, isCompressed = true): Uint8Array {\n    return Point.fromPrivateKey(privateKey).toRawBytes(isCompressed);\n  }\n\n  /**\n   * Quick and dirty check for item being public key. Does not validate hex, or being on-curve.\n   */\n  function isProbPub(item: PrivKey | PubKey): boolean {\n    const arr = item instanceof Uint8Array;\n    const str = typeof item === 'string';\n    const len = (arr || str) && (item as Hex).length;\n    if (arr) return len === compressedLen || len === uncompressedLen;\n    if (str) return len === 2 * compressedLen || len === 2 * uncompressedLen;\n    if (item instanceof Point) return true;\n    return false;\n  }\n\n  /**\n   * ECDH (Elliptic Curve Diffie Hellman).\n   * Computes shared public key from private key and public key.\n   * Checks: 1) private key validity 2) shared key is on-curve.\n   * Does NOT hash the result.\n   * @param privateA private key\n   * @param publicB different public key\n   * @param isCompressed whether to return compact (default), or full key\n   * @returns shared public key\n   */\n  function getSharedSecret(privateA: PrivKey, publicB: Hex, isCompressed = true): Uint8Array {\n    if (isProbPub(privateA)) throw new Error('first arg must be private key');\n    if (!isProbPub(publicB)) throw new Error('second arg must be public key');\n    const b = Point.fromHex(publicB); // check for being on-curve\n    return b.multiply(normPrivateKeyToScalar(privateA)).toRawBytes(isCompressed);\n  }\n\n  // RFC6979: ensure ECDSA msg is X bytes and < N. RFC suggests optional truncating via bits2octets.\n  // FIPS 186-4 4.6 suggests the leftmost min(nBitLen, outLen) bits, which matches bits2int.\n  // bits2int can produce res>N, we can do mod(res, N) since the bitLen is the same.\n  // int2octets can't be used; pads small msgs with 0: unacceptatble for trunc as per RFC vectors\n  const bits2int =\n    CURVE.bits2int ||\n    function (bytes: Uint8Array): bigint {\n      // For curves with nBitLength % 8 !== 0: bits2octets(bits2octets(m)) !== bits2octets(m)\n      // for some cases, since bytes.length * 8 is not actual bitLength.\n      const num = ut.bytesToNumberBE(bytes); // check for == u8 done here\n      const delta = bytes.length * 8 - CURVE.nBitLength; // truncate to nBitLength leftmost bits\n      return delta > 0 ? num >> BigInt(delta) : num;\n    };\n  const bits2int_modN =\n    CURVE.bits2int_modN ||\n    function (bytes: Uint8Array): bigint {\n      return modN(bits2int(bytes)); // can't use bytesToNumberBE here\n    };\n  // NOTE: pads output with zero as per spec\n  const ORDER_MASK = ut.bitMask(CURVE.nBitLength);\n  /**\n   * Converts to bytes. Checks if num in `[0..ORDER_MASK-1]` e.g.: `[0..2^256-1]`.\n   */\n  function int2octets(num: bigint): Uint8Array {\n    if (typeof num !== 'bigint') throw new Error('bigint expected');\n    if (!(_0n <= num && num < ORDER_MASK))\n      throw new Error(`bigint expected < 2^${CURVE.nBitLength}`);\n    // works with order, can have different size than numToField!\n    return ut.numberToBytesBE(num, CURVE.nByteLength);\n  }\n\n  // Steps A, D of RFC6979 3.2\n  // Creates RFC6979 seed; converts msg/privKey to numbers.\n  // Used only in sign, not in verify.\n  // NOTE: we cannot assume here that msgHash has same amount of bytes as curve order, this will be wrong at least for P521.\n  // Also it can be bigger for P224 + SHA256\n  function prepSig(msgHash: Hex, privateKey: PrivKey, opts = defaultSigOpts) {\n    if (['recovered', 'canonical'].some((k) => k in opts))\n      throw new Error('sign() legacy options not supported');\n    const { hash, randomBytes } = CURVE;\n    let { lowS, prehash, extraEntropy: ent } = opts; // generates low-s sigs by default\n    if (lowS == null) lowS = true; // RFC6979 3.2: we skip step A, because we already provide hash\n    msgHash = ensureBytes('msgHash', msgHash);\n    if (prehash) msgHash = ensureBytes('prehashed msgHash', hash(msgHash));\n\n    // We can't later call bits2octets, since nested bits2int is broken for curves\n    // with nBitLength % 8 !== 0. Because of that, we unwrap it here as int2octets call.\n    // const bits2octets = (bits) => int2octets(bits2int_modN(bits))\n    const h1int = bits2int_modN(msgHash);\n    const d = normPrivateKeyToScalar(privateKey); // validate private key, convert to bigint\n    const seedArgs = [int2octets(d), int2octets(h1int)];\n    // extraEntropy. RFC6979 3.6: additional k' (optional).\n    if (ent != null) {\n      // K = HMAC_K(V || 0x00 || int2octets(x) || bits2octets(h1) || k')\n      const e = ent === true ? randomBytes(Fp.BYTES) : ent; // generate random bytes OR pass as-is\n      seedArgs.push(ensureBytes('extraEntropy', e)); // check for being bytes\n    }\n    const seed = ut.concatBytes(...seedArgs); // Step D of RFC6979 3.2\n    const m = h1int; // NOTE: no need to call bits2int second time here, it is inside truncateHash!\n    // Converts signature params into point w r/s, checks result for validity.\n    function k2sig(kBytes: Uint8Array): RecoveredSignature | undefined {\n      // RFC 6979 Section 3.2, step 3: k = bits2int(T)\n      const k = bits2int(kBytes); // Cannot use fields methods, since it is group element\n      if (!isWithinCurveOrder(k)) return; // Important: all mod() calls here must be done over N\n      const ik = invN(k); // k^-1 mod n\n      const q = Point.BASE.multiply(k).toAffine(); // q = Gk\n      const r = modN(q.x); // r = q.x mod n\n      if (r === _0n) return;\n      // Can use scalar blinding b^-1(bm + bdr) where b \u2208 [1,q\u22121] according to\n      // https://tches.iacr.org/index.php/TCHES/article/view/7337/6509. We've decided against it:\n      // a) dependency on CSPRNG b) 15% slowdown c) doesn't really help since bigints are not CT\n      const s = modN(ik * modN(m + r * d)); // Not using blinding here\n      if (s === _0n) return;\n      let recovery = (q.x === r ? 0 : 2) | Number(q.y & _1n); // recovery bit (2 or 3, when q.x > n)\n      let normS = s;\n      if (lowS && isBiggerThanHalfOrder(s)) {\n        normS = normalizeS(s); // if lowS was passed, ensure s is always\n        recovery ^= 1; // // in the bottom half of N\n      }\n      return new Signature(r, normS, recovery) as RecoveredSignature; // use normS, not s\n    }\n    return { seed, k2sig };\n  }\n  const defaultSigOpts: SignOpts = { lowS: CURVE.lowS, prehash: false };\n  const defaultVerOpts: VerOpts = { lowS: CURVE.lowS, prehash: false };\n\n  /**\n   * Signs message hash with a private key.\n   * ```\n   * sign(m, d, k) where\n   *   (x, y) = G \u00D7 k\n   *   r = x mod n\n   *   s = (m + dr)/k mod n\n   * ```\n   * @param msgHash NOT message. msg needs to be hashed to `msgHash`, or use `prehash`.\n   * @param privKey private key\n   * @param opts lowS for non-malleable sigs. extraEntropy for mixing randomness into k. prehash will hash first arg.\n   * @returns signature with recovery param\n   */\n  function sign(msgHash: Hex, privKey: PrivKey, opts = defaultSigOpts): RecoveredSignature {\n    const { seed, k2sig } = prepSig(msgHash, privKey, opts); // Steps A, D of RFC6979 3.2.\n    const C = CURVE;\n    const drbg = ut.createHmacDrbg<RecoveredSignature>(C.hash.outputLen, C.nByteLength, C.hmac);\n    return drbg(seed, k2sig); // Steps B, C, D, E, F, G\n  }\n\n  // Enable precomputes. Slows down first publicKey computation by 20ms.\n  Point.BASE._setWindowSize(8);\n  // utils.precompute(8, ProjectivePoint.BASE)\n\n  /**\n   * Verifies a signature against message hash and public key.\n   * Rejects lowS signatures by default: to override,\n   * specify option `{lowS: false}`. Implements section 4.1.4 from https://www.secg.org/sec1-v2.pdf:\n   *\n   * ```\n   * verify(r, s, h, P) where\n   *   U1 = hs^-1 mod n\n   *   U2 = rs^-1 mod n\n   *   R = U1\u22C5G - U2\u22C5P\n   *   mod(R.x, n) == r\n   * ```\n   */\n  function verify(\n    signature: Hex | SignatureLike,\n    msgHash: Hex,\n    publicKey: Hex,\n    opts = defaultVerOpts\n  ): boolean {\n    const sg = signature;\n    msgHash = ensureBytes('msgHash', msgHash);\n    publicKey = ensureBytes('publicKey', publicKey);\n    if ('strict' in opts) throw new Error('options.strict was renamed to lowS');\n    const { lowS, prehash } = opts;\n\n    let _sig: Signature | undefined = undefined;\n    let P: ProjPointType<bigint>;\n    try {\n      if (typeof sg === 'string' || sg instanceof Uint8Array) {\n        // Signature can be represented in 2 ways: compact (2*nByteLength) & DER (variable-length).\n        // Since DER can also be 2*nByteLength bytes, we check for it first.\n        try {\n          _sig = Signature.fromDER(sg);\n        } catch (derError) {\n          if (!(derError instanceof DER.Err)) throw derError;\n          _sig = Signature.fromCompact(sg);\n        }\n      } else if (typeof sg === 'object' && typeof sg.r === 'bigint' && typeof sg.s === 'bigint') {\n        const { r, s } = sg;\n        _sig = new Signature(r, s);\n      } else {\n        throw new Error('PARSE');\n      }\n      P = Point.fromHex(publicKey);\n    } catch (error) {\n      if ((error as Error).message === 'PARSE')\n        throw new Error(`signature must be Signature instance, Uint8Array or hex string`);\n      return false;\n    }\n    if (lowS && _sig.hasHighS()) return false;\n    if (prehash) msgHash = CURVE.hash(msgHash);\n    const { r, s } = _sig;\n    const h = bits2int_modN(msgHash); // Cannot use fields methods, since it is group element\n    const is = invN(s); // s^-1\n    const u1 = modN(h * is); // u1 = hs^-1 mod n\n    const u2 = modN(r * is); // u2 = rs^-1 mod n\n    const R = Point.BASE.multiplyAndAddUnsafe(P, u1, u2)?.toAffine(); // R = u1\u22C5G + u2\u22C5P\n    if (!R) return false;\n    const v = modN(R.x);\n    return v === r;\n  }\n  return {\n    CURVE,\n    getPublicKey,\n    getSharedSecret,\n    sign,\n    verify,\n    ProjectivePoint: Point,\n    Signature,\n    utils,\n  };\n}\n\n/**\n * Implementation of the Shallue and van de Woestijne method for any weierstrass curve.\n * TODO: check if there is a way to merge this with uvRatio in Edwards; move to modular.\n * b = True and y = sqrt(u / v) if (u / v) is square in F, and\n * b = False and y = sqrt(Z * (u / v)) otherwise.\n * @param Fp\n * @param Z\n * @returns\n */\nexport function SWUFpSqrtRatio<T>(Fp: mod.IField<T>, Z: T) {\n  // Generic implementation\n  const q = Fp.ORDER;\n  let l = _0n;\n  for (let o = q - _1n; o % _2n === _0n; o /= _2n) l += _1n;\n  const c1 = l; // 1. c1, the largest integer such that 2^c1 divides q - 1.\n  // We need 2n ** c1 and 2n ** (c1-1). We can't use **; but we can use <<.\n  // 2n ** c1 == 2n << (c1-1)\n  const _2n_pow_c1_1 = _2n << (c1 - _1n - _1n);\n  const _2n_pow_c1 = _2n_pow_c1_1 * _2n;\n  const c2 = (q - _1n) / _2n_pow_c1; // 2. c2 = (q - 1) / (2^c1)  # Integer arithmetic\n  const c3 = (c2 - _1n) / _2n; // 3. c3 = (c2 - 1) / 2            # Integer arithmetic\n  const c4 = _2n_pow_c1 - _1n; // 4. c4 = 2^c1 - 1                # Integer arithmetic\n  const c5 = _2n_pow_c1_1; // 5. c5 = 2^(c1 - 1)                  # Integer arithmetic\n  const c6 = Fp.pow(Z, c2); // 6. c6 = Z^c2\n  const c7 = Fp.pow(Z, (c2 + _1n) / _2n); // 7. c7 = Z^((c2 + 1) / 2)\n  let sqrtRatio = (u: T, v: T): { isValid: boolean; value: T } => {\n    let tv1 = c6; // 1. tv1 = c6\n    let tv2 = Fp.pow(v, c4); // 2. tv2 = v^c4\n    let tv3 = Fp.sqr(tv2); // 3. tv3 = tv2^2\n    tv3 = Fp.mul(tv3, v); // 4. tv3 = tv3 * v\n    let tv5 = Fp.mul(u, tv3); // 5. tv5 = u * tv3\n    tv5 = Fp.pow(tv5, c3); // 6. tv5 = tv5^c3\n    tv5 = Fp.mul(tv5, tv2); // 7. tv5 = tv5 * tv2\n    tv2 = Fp.mul(tv5, v); // 8. tv2 = tv5 * v\n    tv3 = Fp.mul(tv5, u); // 9. tv3 = tv5 * u\n    let tv4 = Fp.mul(tv3, tv2); // 10. tv4 = tv3 * tv2\n    tv5 = Fp.pow(tv4, c5); // 11. tv5 = tv4^c5\n    let isQR = Fp.eql(tv5, Fp.ONE); // 12. isQR = tv5 == 1\n    tv2 = Fp.mul(tv3, c7); // 13. tv2 = tv3 * c7\n    tv5 = Fp.mul(tv4, tv1); // 14. tv5 = tv4 * tv1\n    tv3 = Fp.cmov(tv2, tv3, isQR); // 15. tv3 = CMOV(tv2, tv3, isQR)\n    tv4 = Fp.cmov(tv5, tv4, isQR); // 16. tv4 = CMOV(tv5, tv4, isQR)\n    // 17. for i in (c1, c1 - 1, ..., 2):\n    for (let i = c1; i > _1n; i--) {\n      let tv5 = i - _2n; // 18.    tv5 = i - 2\n      tv5 = _2n << (tv5 - _1n); // 19.    tv5 = 2^tv5\n      let tvv5 = Fp.pow(tv4, tv5); // 20.    tv5 = tv4^tv5\n      const e1 = Fp.eql(tvv5, Fp.ONE); // 21.    e1 = tv5 == 1\n      tv2 = Fp.mul(tv3, tv1); // 22.    tv2 = tv3 * tv1\n      tv1 = Fp.mul(tv1, tv1); // 23.    tv1 = tv1 * tv1\n      tvv5 = Fp.mul(tv4, tv1); // 24.    tv5 = tv4 * tv1\n      tv3 = Fp.cmov(tv2, tv3, e1); // 25.    tv3 = CMOV(tv2, tv3, e1)\n      tv4 = Fp.cmov(tvv5, tv4, e1); // 26.    tv4 = CMOV(tv5, tv4, e1)\n    }\n    return { isValid: isQR, value: tv3 };\n  };\n  if (Fp.ORDER % _4n === _3n) {\n    // sqrt_ratio_3mod4(u, v)\n    const c1 = (Fp.ORDER - _3n) / _4n; // 1. c1 = (q - 3) / 4     # Integer arithmetic\n    const c2 = Fp.sqrt(Fp.neg(Z)); // 2. c2 = sqrt(-Z)\n    sqrtRatio = (u: T, v: T) => {\n      let tv1 = Fp.sqr(v); // 1. tv1 = v^2\n      const tv2 = Fp.mul(u, v); // 2. tv2 = u * v\n      tv1 = Fp.mul(tv1, tv2); // 3. tv1 = tv1 * tv2\n      let y1 = Fp.pow(tv1, c1); // 4. y1 = tv1^c1\n      y1 = Fp.mul(y1, tv2); // 5. y1 = y1 * tv2\n      const y2 = Fp.mul(y1, c2); // 6. y2 = y1 * c2\n      const tv3 = Fp.mul(Fp.sqr(y1), v); // 7. tv3 = y1^2; 8. tv3 = tv3 * v\n      const isQR = Fp.eql(tv3, u); // 9. isQR = tv3 == u\n      let y = Fp.cmov(y2, y1, isQR); // 10. y = CMOV(y2, y1, isQR)\n      return { isValid: isQR, value: y }; // 11. return (isQR, y) isQR ? y : y*c2\n    };\n  }\n  // No curves uses that\n  // if (Fp.ORDER % _8n === _5n) // sqrt_ratio_5mod8\n  return sqrtRatio;\n}\n/**\n * Simplified Shallue-van de Woestijne-Ulas Method\n * https://www.rfc-editor.org/rfc/rfc9380#section-6.6.2\n */\nexport function mapToCurveSimpleSWU<T>(\n  Fp: mod.IField<T>,\n  opts: {\n    A: T;\n    B: T;\n    Z: T;\n  }\n) {\n  mod.validateField(Fp);\n  if (!Fp.isValid(opts.A) || !Fp.isValid(opts.B) || !Fp.isValid(opts.Z))\n    throw new Error('mapToCurveSimpleSWU: invalid opts');\n  const sqrtRatio = SWUFpSqrtRatio(Fp, opts.Z);\n  if (!Fp.isOdd) throw new Error('Fp.isOdd is not implemented!');\n  // Input: u, an element of F.\n  // Output: (x, y), a point on E.\n  return (u: T): { x: T; y: T } => {\n    // prettier-ignore\n    let tv1, tv2, tv3, tv4, tv5, tv6, x, y;\n    tv1 = Fp.sqr(u); // 1.  tv1 = u^2\n    tv1 = Fp.mul(tv1, opts.Z); // 2.  tv1 = Z * tv1\n    tv2 = Fp.sqr(tv1); // 3.  tv2 = tv1^2\n    tv2 = Fp.add(tv2, tv1); // 4.  tv2 = tv2 + tv1\n    tv3 = Fp.add(tv2, Fp.ONE); // 5.  tv3 = tv2 + 1\n    tv3 = Fp.mul(tv3, opts.B); // 6.  tv3 = B * tv3\n    tv4 = Fp.cmov(opts.Z, Fp.neg(tv2), !Fp.eql(tv2, Fp.ZERO)); // 7.  tv4 = CMOV(Z, -tv2, tv2 != 0)\n    tv4 = Fp.mul(tv4, opts.A); // 8.  tv4 = A * tv4\n    tv2 = Fp.sqr(tv3); // 9.  tv2 = tv3^2\n    tv6 = Fp.sqr(tv4); // 10. tv6 = tv4^2\n    tv5 = Fp.mul(tv6, opts.A); // 11. tv5 = A * tv6\n    tv2 = Fp.add(tv2, tv5); // 12. tv2 = tv2 + tv5\n    tv2 = Fp.mul(tv2, tv3); // 13. tv2 = tv2 * tv3\n    tv6 = Fp.mul(tv6, tv4); // 14. tv6 = tv6 * tv4\n    tv5 = Fp.mul(tv6, opts.B); // 15. tv5 = B * tv6\n    tv2 = Fp.add(tv2, tv5); // 16. tv2 = tv2 + tv5\n    x = Fp.mul(tv1, tv3); // 17.   x = tv1 * tv3\n    const { isValid, value } = sqrtRatio(tv2, tv6); // 18. (is_gx1_square, y1) = sqrt_ratio(tv2, tv6)\n    y = Fp.mul(tv1, u); // 19.   y = tv1 * u  -> Z * u^3 * y1\n    y = Fp.mul(y, value); // 20.   y = y * y1\n    x = Fp.cmov(x, tv3, isValid); // 21.   x = CMOV(x, tv3, is_gx1_square)\n    y = Fp.cmov(y, value, isValid); // 22.   y = CMOV(y, y1, is_gx1_square)\n    const e1 = Fp.isOdd!(u) === Fp.isOdd!(y); // 23.  e1 = sgn0(u) == sgn0(y)\n    y = Fp.cmov(Fp.neg(y), y, e1); // 24.   y = CMOV(-y, y, e1)\n    x = Fp.div(x, tv4); // 25.   x = x / tv4\n    return { x, y };\n  };\n}\n", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { hmac } from '@noble/hashes/hmac';\nimport { concatBytes, randomBytes } from '@noble/hashes/utils';\nimport { weierstrass, CurveType } from './abstract/weierstrass.js';\nimport { CHash } from './abstract/utils.js';\n\n// connects noble-curves to noble-hashes\nexport function getHash(hash: CHash) {\n  return {\n    hash,\n    hmac: (key: Uint8Array, ...msgs: Uint8Array[]) => hmac(hash, key, concatBytes(...msgs)),\n    randomBytes,\n  };\n}\n// Same API as @noble/hashes, with ability to create curve with custom hash\ntype CurveDef = Readonly<Omit<CurveType, 'hash' | 'hmac' | 'randomBytes'>>;\nexport function createCurve(curveDef: CurveDef, defHash: CHash) {\n  const create = (hash: CHash) => weierstrass({ ...curveDef, ...getHash(hash) });\n  return Object.freeze({ ...create(defHash), create });\n}\n", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { sha256 } from '@noble/hashes/sha256';\nimport { randomBytes } from '@noble/hashes/utils';\nimport { Field, mod, pow2 } from './abstract/modular.js';\nimport { ProjPointType as PointType, mapToCurveSimpleSWU } from './abstract/weierstrass.js';\nimport type { Hex, PrivKey } from './abstract/utils.js';\nimport { bytesToNumberBE, concatBytes, ensureBytes, numberToBytesBE } from './abstract/utils.js';\nimport { createHasher, isogenyMap } from './abstract/hash-to-curve.js';\nimport { createCurve } from './_shortw_utils.js';\n\nconst secp256k1P = BigInt('0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f');\nconst secp256k1N = BigInt('0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141');\nconst _1n = BigInt(1);\nconst _2n = BigInt(2);\nconst divNearest = (a: bigint, b: bigint) => (a + b / _2n) / b;\n\n/**\n * \u221An = n^((p+1)/4) for fields p = 3 mod 4. We unwrap the loop and multiply bit-by-bit.\n * (P+1n/4n).toString(2) would produce bits [223x 1, 0, 22x 1, 4x 0, 11, 00]\n */\nfunction sqrtMod(y: bigint): bigint {\n  const P = secp256k1P;\n  // prettier-ignore\n  const _3n = BigInt(3), _6n = BigInt(6), _11n = BigInt(11), _22n = BigInt(22);\n  // prettier-ignore\n  const _23n = BigInt(23), _44n = BigInt(44), _88n = BigInt(88);\n  const b2 = (y * y * y) % P; // x^3, 11\n  const b3 = (b2 * b2 * y) % P; // x^7\n  const b6 = (pow2(b3, _3n, P) * b3) % P;\n  const b9 = (pow2(b6, _3n, P) * b3) % P;\n  const b11 = (pow2(b9, _2n, P) * b2) % P;\n  const b22 = (pow2(b11, _11n, P) * b11) % P;\n  const b44 = (pow2(b22, _22n, P) * b22) % P;\n  const b88 = (pow2(b44, _44n, P) * b44) % P;\n  const b176 = (pow2(b88, _88n, P) * b88) % P;\n  const b220 = (pow2(b176, _44n, P) * b44) % P;\n  const b223 = (pow2(b220, _3n, P) * b3) % P;\n  const t1 = (pow2(b223, _23n, P) * b22) % P;\n  const t2 = (pow2(t1, _6n, P) * b2) % P;\n  const root = pow2(t2, _2n, P);\n  if (!Fp.eql(Fp.sqr(root), y)) throw new Error('Cannot find square root');\n  return root;\n}\n\nconst Fp = Field(secp256k1P, undefined, undefined, { sqrt: sqrtMod });\n\nexport const secp256k1 = createCurve(\n  {\n    a: BigInt(0), // equation params: a, b\n    b: BigInt(7), // Seem to be rigid: bitcointalk.org/index.php?topic=289795.msg3183975#msg3183975\n    Fp, // Field's prime: 2n**256n - 2n**32n - 2n**9n - 2n**8n - 2n**7n - 2n**6n - 2n**4n - 1n\n    n: secp256k1N, // Curve order, total count of valid points in the field\n    // Base point (x, y) aka generator point\n    Gx: BigInt('55066263022277343669578718895168534326250603453777594175500187360389116729240'),\n    Gy: BigInt('32670510020758816978083085130507043184471273380659243275938904335757337482424'),\n    h: BigInt(1), // Cofactor\n    lowS: true, // Allow only low-S signatures by default in sign() and verify()\n    /**\n     * secp256k1 belongs to Koblitz curves: it has efficiently computable endomorphism.\n     * Endomorphism uses 2x less RAM, speeds up precomputation by 2x and ECDH / key recovery by 20%.\n     * For precomputed wNAF it trades off 1/2 init time & 1/3 ram for 20% perf hit.\n     * Explanation: https://gist.github.com/paulmillr/eb670806793e84df628a7c434a873066\n     */\n    endo: {\n      beta: BigInt('0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee'),\n      splitScalar: (k: bigint) => {\n        const n = secp256k1N;\n        const a1 = BigInt('0x3086d221a7d46bcde86c90e49284eb15');\n        const b1 = -_1n * BigInt('0xe4437ed6010e88286f547fa90abfe4c3');\n        const a2 = BigInt('0x114ca50f7a8e2f3f657c1108d9d44cfd8');\n        const b2 = a1;\n        const POW_2_128 = BigInt('0x100000000000000000000000000000000'); // (2n**128n).toString(16)\n\n        const c1 = divNearest(b2 * k, n);\n        const c2 = divNearest(-b1 * k, n);\n        let k1 = mod(k - c1 * a1 - c2 * a2, n);\n        let k2 = mod(-c1 * b1 - c2 * b2, n);\n        const k1neg = k1 > POW_2_128;\n        const k2neg = k2 > POW_2_128;\n        if (k1neg) k1 = n - k1;\n        if (k2neg) k2 = n - k2;\n        if (k1 > POW_2_128 || k2 > POW_2_128) {\n          throw new Error('splitScalar: Endomorphism failed, k=' + k);\n        }\n        return { k1neg, k1, k2neg, k2 };\n      },\n    },\n  },\n  sha256\n);\n\n// Schnorr signatures are superior to ECDSA from above. Below is Schnorr-specific BIP0340 code.\n// https://github.com/bitcoin/bips/blob/master/bip-0340.mediawiki\nconst _0n = BigInt(0);\nconst fe = (x: bigint) => typeof x === 'bigint' && _0n < x && x < secp256k1P;\nconst ge = (x: bigint) => typeof x === 'bigint' && _0n < x && x < secp256k1N;\n/** An object mapping tags to their tagged hash prefix of [SHA256(tag) | SHA256(tag)] */\nconst TAGGED_HASH_PREFIXES: { [tag: string]: Uint8Array } = {};\nfunction taggedHash(tag: string, ...messages: Uint8Array[]): Uint8Array {\n  let tagP = TAGGED_HASH_PREFIXES[tag];\n  if (tagP === undefined) {\n    const tagH = sha256(Uint8Array.from(tag, (c) => c.charCodeAt(0)));\n    tagP = concatBytes(tagH, tagH);\n    TAGGED_HASH_PREFIXES[tag] = tagP;\n  }\n  return sha256(concatBytes(tagP, ...messages));\n}\n\n// ECDSA compact points are 33-byte. Schnorr is 32: we strip first byte 0x02 or 0x03\nconst pointToBytes = (point: PointType<bigint>) => point.toRawBytes(true).slice(1);\nconst numTo32b = (n: bigint) => numberToBytesBE(n, 32);\nconst modP = (x: bigint) => mod(x, secp256k1P);\nconst modN = (x: bigint) => mod(x, secp256k1N);\nconst Point = secp256k1.ProjectivePoint;\nconst GmulAdd = (Q: PointType<bigint>, a: bigint, b: bigint) =>\n  Point.BASE.multiplyAndAddUnsafe(Q, a, b);\n\n// Calculate point, scalar and bytes\nfunction schnorrGetExtPubKey(priv: PrivKey) {\n  let d_ = secp256k1.utils.normPrivateKeyToScalar(priv); // same method executed in fromPrivateKey\n  let p = Point.fromPrivateKey(d_); // P = d'\u22C5G; 0 < d' < n check is done inside\n  const scalar = p.hasEvenY() ? d_ : modN(-d_);\n  return { scalar: scalar, bytes: pointToBytes(p) };\n}\n/**\n * lift_x from BIP340. Convert 32-byte x coordinate to elliptic curve point.\n * @returns valid point checked for being on-curve\n */\nfunction lift_x(x: bigint): PointType<bigint> {\n  if (!fe(x)) throw new Error('bad x: need 0 < x < p'); // Fail if x \u2265 p.\n  const xx = modP(x * x);\n  const c = modP(xx * x + BigInt(7)); // Let c = x\u00B3 + 7 mod p.\n  let y = sqrtMod(c); // Let y = c^(p+1)/4 mod p.\n  if (y % _2n !== _0n) y = modP(-y); // Return the unique point P such that x(P) = x and\n  const p = new Point(x, y, _1n); // y(P) = y if y mod 2 = 0 or y(P) = p-y otherwise.\n  p.assertValidity();\n  return p;\n}\n/**\n * Create tagged hash, convert it to bigint, reduce modulo-n.\n */\nfunction challenge(...args: Uint8Array[]): bigint {\n  return modN(bytesToNumberBE(taggedHash('BIP0340/challenge', ...args)));\n}\n\n/**\n * Schnorr public key is just `x` coordinate of Point as per BIP340.\n */\nfunction schnorrGetPublicKey(privateKey: Hex): Uint8Array {\n  return schnorrGetExtPubKey(privateKey).bytes; // d'=int(sk). Fail if d'=0 or d'\u2265n. Ret bytes(d'\u22C5G)\n}\n\n/**\n * Creates Schnorr signature as per BIP340. Verifies itself before returning anything.\n * auxRand is optional and is not the sole source of k generation: bad CSPRNG won't be dangerous.\n */\nfunction schnorrSign(\n  message: Hex,\n  privateKey: PrivKey,\n  auxRand: Hex = randomBytes(32)\n): Uint8Array {\n  const m = ensureBytes('message', message);\n  const { bytes: px, scalar: d } = schnorrGetExtPubKey(privateKey); // checks for isWithinCurveOrder\n  const a = ensureBytes('auxRand', auxRand, 32); // Auxiliary random data a: a 32-byte array\n  const t = numTo32b(d ^ bytesToNumberBE(taggedHash('BIP0340/aux', a))); // Let t be the byte-wise xor of bytes(d) and hash/aux(a)\n  const rand = taggedHash('BIP0340/nonce', t, px, m); // Let rand = hash/nonce(t || bytes(P) || m)\n  const k_ = modN(bytesToNumberBE(rand)); // Let k' = int(rand) mod n\n  if (k_ === _0n) throw new Error('sign failed: k is zero'); // Fail if k' = 0.\n  const { bytes: rx, scalar: k } = schnorrGetExtPubKey(k_); // Let R = k'\u22C5G.\n  const e = challenge(rx, px, m); // Let e = int(hash/challenge(bytes(R) || bytes(P) || m)) mod n.\n  const sig = new Uint8Array(64); // Let sig = bytes(R) || bytes((k + ed) mod n).\n  sig.set(rx, 0);\n  sig.set(numTo32b(modN(k + e * d)), 32);\n  // If Verify(bytes(P), m, sig) (see below) returns failure, abort\n  if (!schnorrVerify(sig, m, px)) throw new Error('sign: Invalid signature produced');\n  return sig;\n}\n\n/**\n * Verifies Schnorr signature.\n * Will swallow errors & return false except for initial type validation of arguments.\n */\nfunction schnorrVerify(signature: Hex, message: Hex, publicKey: Hex): boolean {\n  const sig = ensureBytes('signature', signature, 64);\n  const m = ensureBytes('message', message);\n  const pub = ensureBytes('publicKey', publicKey, 32);\n  try {\n    const P = lift_x(bytesToNumberBE(pub)); // P = lift_x(int(pk)); fail if that fails\n    const r = bytesToNumberBE(sig.subarray(0, 32)); // Let r = int(sig[0:32]); fail if r \u2265 p.\n    if (!fe(r)) return false;\n    const s = bytesToNumberBE(sig.subarray(32, 64)); // Let s = int(sig[32:64]); fail if s \u2265 n.\n    if (!ge(s)) return false;\n    const e = challenge(numTo32b(r), pointToBytes(P), m); // int(challenge(bytes(r)||bytes(P)||m))%n\n    const R = GmulAdd(P, s, modN(-e)); // R = s\u22C5G - e\u22C5P\n    if (!R || !R.hasEvenY() || R.toAffine().x !== r) return false; // -eP == (n-e)P\n    return true; // Fail if is_infinite(R) / not has_even_y(R) / x(R) \u2260 r.\n  } catch (error) {\n    return false;\n  }\n}\n\nexport const schnorr = /* @__PURE__ */ (() => ({\n  getPublicKey: schnorrGetPublicKey,\n  sign: schnorrSign,\n  verify: schnorrVerify,\n  utils: {\n    randomPrivateKey: secp256k1.utils.randomPrivateKey,\n    lift_x,\n    pointToBytes,\n    numberToBytesBE,\n    bytesToNumberBE,\n    taggedHash,\n    mod,\n  },\n}))();\n\nconst isoMap = /* @__PURE__ */ (() =>\n  isogenyMap(\n    Fp,\n    [\n      // xNum\n      [\n        '0x8e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38daaaaa8c7',\n        '0x7d3d4c80bc321d5b9f315cea7fd44c5d595d2fc0bf63b92dfff1044f17c6581',\n        '0x534c328d23f234e6e2a413deca25caece4506144037c40314ecbd0b53d9dd262',\n        '0x8e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38daaaaa88c',\n      ],\n      // xDen\n      [\n        '0xd35771193d94918a9ca34ccbb7b640dd86cd409542f8487d9fe6b745781eb49b',\n        '0xedadc6f64383dc1df7c4b2d51b54225406d36b641f5e41bbc52a56612a8c6d14',\n        '0x0000000000000000000000000000000000000000000000000000000000000001', // LAST 1\n      ],\n      // yNum\n      [\n        '0x4bda12f684bda12f684bda12f684bda12f684bda12f684bda12f684b8e38e23c',\n        '0xc75e0c32d5cb7c0fa9d0a54b12a0a6d5647ab046d686da6fdffc90fc201d71a3',\n        '0x29a6194691f91a73715209ef6512e576722830a201be2018a765e85a9ecee931',\n        '0x2f684bda12f684bda12f684bda12f684bda12f684bda12f684bda12f38e38d84',\n      ],\n      // yDen\n      [\n        '0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffff93b',\n        '0x7a06534bb8bdb49fd5e9e6632722c2989467c1bfc8e8d978dfb425d2685c2573',\n        '0x6484aa716545ca2cf3a70c3fa8fe337e0a3d21162f0d6299a7bf8192bfd2a76f',\n        '0x0000000000000000000000000000000000000000000000000000000000000001', // LAST 1\n      ],\n    ].map((i) => i.map((j) => BigInt(j))) as [bigint[], bigint[], bigint[], bigint[]]\n  ))();\nconst mapSWU = /* @__PURE__ */ (() =>\n  mapToCurveSimpleSWU(Fp, {\n    A: BigInt('0x3f8731abdd661adca08a5558f0f5d272e953d363cb6f0e5d405447c01a444533'),\n    B: BigInt('1771'),\n    Z: Fp.create(BigInt('-11')),\n  }))();\nconst htf = /* @__PURE__ */ (() =>\n  createHasher(\n    secp256k1.ProjectivePoint,\n    (scalars: bigint[]) => {\n      const { x, y } = mapSWU(Fp.create(scalars[0]));\n      return isoMap(x, y);\n    },\n    {\n      DST: 'secp256k1_XMD:SHA-256_SSWU_RO_',\n      encodeDST: 'secp256k1_XMD:SHA-256_SSWU_NU_',\n      p: Fp.ORDER,\n      m: 1,\n      k: 128,\n      expand: 'xmd',\n      hash: sha256,\n    }\n  ))();\nexport const hashToCurve = /* @__PURE__ */ (() => htf.hashToCurve)();\nexport const encodeToCurve = /* @__PURE__ */ (() => htf.encodeToCurve)();\n", "\n/**\n *  A constant for the zero address.\n *\n *  (**i.e.** ``\"0x0000000000000000000000000000000000000000\"``)\n */\nexport const ZeroAddress: string = \"0x0000000000000000000000000000000000000000\";\n\n", "/**\n *  A constant for the zero hash.\n *\n *  (**i.e.** ``\"0x0000000000000000000000000000000000000000000000000000000000000000\"``)\n */\nexport const ZeroHash: string = \"0x0000000000000000000000000000000000000000000000000000000000000000\";\n\n", "\n/**\n *  A constant for the order N for the secp256k1 curve.\n *\n *  (**i.e.** ``0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141n``)\n */\nexport const N: bigint = BigInt(\"0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141\");\n\n/**\n *  A constant for the number of wei in a single ether.\n *\n *  (**i.e.** ``1000000000000000000n``)\n */\nexport const WeiPerEther: bigint = BigInt(\"1000000000000000000\");\n\n/**\n *  A constant for the maximum value for a ``uint256``.\n *\n *  (**i.e.** ``0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffn``)\n */\nexport const MaxUint256: bigint = BigInt(\"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\");\n\n/**\n *  A constant for the minimum value for an ``int256``.\n *\n *  (**i.e.** ``-8000000000000000000000000000000000000000000000000000000000000000n``)\n */\nexport const MinInt256: bigint = BigInt(\"0x8000000000000000000000000000000000000000000000000000000000000000\") * BigInt(-1);\n\n/**\n *  A constant for the maximum value for an ``int256``.\n *\n *  (**i.e.** ``0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffn``)\n */\nexport const MaxInt256: bigint = BigInt(\"0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\");\n", "// NFKC (composed)             // (decomposed)\n\n/**\n *  A constant for the ether symbol (normalized using NFKC).\n *\n *  (**i.e.** ``\"\\\\u039e\"``)\n */\nexport const EtherSymbol: string = \"\\u039e\";  // \"\\uD835\\uDF63\";\n\n\n/**\n *  A constant for the [[link-eip-191]] personal message prefix.\n *\n *  (**i.e.** ``\"\\\\x19Ethereum Signed Message:\\\\n\"``)\n */\nexport const MessagePrefix: string = \"\\x19Ethereum Signed Message:\\n\";\n", "/**\n *  Some common constants useful for Ethereum.\n *\n *  @_section: api/constants: Constants  [about-constants]\n */\n\nexport { ZeroAddress } from \"./addresses.js\";\nexport { ZeroHash } from \"./hashes.js\";\nexport {\n    N,\n    WeiPerEther,\n    MaxUint256,\n    MinInt256,\n    MaxInt256\n} from \"./numbers.js\";\nexport { EtherSymbol, MessagePrefix } from \"./strings.js\";\n", "\nimport { ZeroHash } from \"../constants/index.js\";\nimport {\n    concat, dataLength, getBigInt, getBytes, getNumber, hexlify,\n    toBeArray, isHexString, zeroPadValue,\n    assertArgument, assertPrivate\n} from \"../utils/index.js\";\n\nimport type {\n    BigNumberish, BytesLike, Numeric\n} from \"../utils/index.js\";\n\n\n// Constants\nconst BN_0 = BigInt(0);\nconst BN_1 = BigInt(1);\nconst BN_2 = BigInt(2);\nconst BN_27 = BigInt(27);\nconst BN_28 = BigInt(28);\nconst BN_35 = BigInt(35);\n\n\nconst _guard = { };\n\n// @TODO: Allow Uint8Array\n\n/**\n *  A SignatureLike\n *\n *  @_docloc: api/crypto:Signing\n */\nexport type SignatureLike = Signature | string | {\n    r: string;\n    s: string;\n    v: BigNumberish;\n    yParity?: 0 | 1;\n    yParityAndS?: string;\n} | {\n    r: string;\n    yParityAndS: string;\n    yParity?: 0 | 1;\n    s?: string;\n    v?: number;\n} | {\n    r: string;\n    s: string;\n    yParity: 0 | 1;\n    v?: BigNumberish;\n    yParityAndS?: string;\n};\n\nfunction toUint256(value: BigNumberish): string {\n    return zeroPadValue(toBeArray(value), 32);\n}\n\n/**\n *  A Signature  @TODO\n *\n *\n *  @_docloc: api/crypto:Signing\n */\nexport class Signature {\n    #r: string;\n    #s: string;\n    #v: 27 | 28;\n    #networkV: null | bigint;\n\n    /**\n     *  The ``r`` value for a signautre.\n     *\n     *  This represents the ``x`` coordinate of a \"reference\" or\n     *  challenge point, from which the ``y`` can be computed.\n     */\n    get r(): string { return this.#r; }\n    set r(value: BytesLike) {\n        assertArgument(dataLength(value) === 32, \"invalid r\", \"value\", value);\n        this.#r = hexlify(value);\n    }\n\n    /**\n     *  The ``s`` value for a signature.\n     */\n    get s(): string { return this.#s; }\n    set s(_value: BytesLike) {\n        assertArgument(dataLength(_value) === 32, \"invalid s\", \"value\", _value);\n        const value = hexlify(_value);\n        assertArgument(parseInt(value.substring(0, 3)) < 8, \"non-canonical s\", \"value\", value);\n        this.#s = value;\n    }\n\n    /**\n     *  The ``v`` value for a signature.\n     *\n     *  Since a given ``x`` value for ``r`` has two possible values for\n     *  its correspondin ``y``, the ``v`` indicates which of the two ``y``\n     *  values to use.\n     *\n     *  It is normalized to the values ``27`` or ``28`` for legacy\n     *  purposes.\n     */\n    get v(): 27 | 28 { return this.#v; }\n    set v(value: BigNumberish) {\n        const v = getNumber(value, \"value\");\n        assertArgument(v === 27 || v === 28, \"invalid v\", \"v\", value);\n        this.#v = v;\n    }\n\n    /**\n     *  The EIP-155 ``v`` for legacy transactions. For non-legacy\n     *  transactions, this value is ``null``.\n     */\n    get networkV(): null | bigint { return this.#networkV; }\n\n    /**\n     *  The chain ID for EIP-155 legacy transactions. For non-legacy\n     *  transactions, this value is ``null``.\n     */\n    get legacyChainId(): null | bigint {\n        const v = this.networkV;\n        if (v == null) { return null; }\n        return Signature.getChainId(v);\n    }\n\n    /**\n     *  The ``yParity`` for the signature.\n     *\n     *  See ``v`` for more details on how this value is used.\n     */\n    get yParity(): 0 | 1 {\n        return (this.v === 27) ? 0: 1;\n    }\n\n    /**\n     *  The [[link-eip-2098]] compact representation of the ``yParity``\n     *  and ``s`` compacted into a single ``bytes32``.\n     */\n    get yParityAndS(): string {\n        // The EIP-2098 compact representation\n        const yParityAndS = getBytes(this.s);\n        if (this.yParity) { yParityAndS[0] |= 0x80; }\n        return hexlify(yParityAndS);\n    }\n\n    /**\n     *  The [[link-eip-2098]] compact representation.\n     */\n    get compactSerialized(): string {\n        return concat([ this.r, this.yParityAndS ]);\n    }\n\n    /**\n     *  The serialized representation.\n     */\n    get serialized(): string {\n        return concat([ this.r, this.s, (this.yParity ? \"0x1c\": \"0x1b\") ]);\n    }\n\n    /**\n     *  @private\n     */\n    constructor(guard: any, r: string, s: string, v: 27 | 28) {\n        assertPrivate(guard, _guard, \"Signature\");\n        this.#r = r;\n        this.#s = s;\n        this.#v = v;\n        this.#networkV = null;\n    }\n\n    [Symbol.for('nodejs.util.inspect.custom')](): string {\n        return `Signature { r: \"${ this.r }\", s: \"${ this.s }\", yParity: ${ this.yParity }, networkV: ${ this.networkV } }`;\n    }\n\n    /**\n     *  Returns a new identical [[Signature]].\n     */\n    clone(): Signature {\n        const clone = new Signature(_guard, this.r, this.s, this.v);\n        if (this.networkV) { clone.#networkV = this.networkV; }\n        return clone;\n    }\n\n    /**\n     *  Returns a representation that is compatible with ``JSON.stringify``.\n     */\n    toJSON(): any {\n        const networkV = this.networkV;\n        return {\n            _type: \"signature\",\n            networkV: ((networkV != null) ? networkV.toString(): null),\n            r: this.r, s: this.s, v: this.v,\n        };\n    }\n\n    /**\n     *  Compute the chain ID from the ``v`` in a legacy EIP-155 transactions.\n     *\n     *  @example:\n     *    Signature.getChainId(45)\n     *    //_result:\n     *\n     *    Signature.getChainId(46)\n     *    //_result:\n     */\n    static getChainId(v: BigNumberish): bigint {\n        const bv = getBigInt(v, \"v\");\n\n        // The v is not an EIP-155 v, so it is the unspecified chain ID\n        if ((bv == BN_27) || (bv == BN_28)) { return BN_0; }\n\n        // Bad value for an EIP-155 v\n        assertArgument(bv >= BN_35, \"invalid EIP-155 v\", \"v\", v);\n\n        return (bv - BN_35) / BN_2;\n    }\n\n    /**\n     *  Compute the ``v`` for a chain ID for a legacy EIP-155 transactions.\n     *\n     *  Legacy transactions which use [[link-eip-155]] hijack the ``v``\n     *  property to include the chain ID.\n     *\n     *  @example:\n     *    Signature.getChainIdV(5, 27)\n     *    //_result:\n     *\n     *    Signature.getChainIdV(5, 28)\n     *    //_result:\n     *\n     */\n    static getChainIdV(chainId: BigNumberish, v: 27 | 28): bigint {\n        return (getBigInt(chainId) * BN_2) + BigInt(35 + v - 27);\n    }\n\n    /**\n     *  Compute the normalized legacy transaction ``v`` from a ``yParirty``,\n     *  a legacy transaction ``v`` or a legacy [[link-eip-155]] transaction.\n     *\n     *  @example:\n     *    // The values 0 and 1 imply v is actually yParity\n     *    Signature.getNormalizedV(0)\n     *    //_result:\n     *\n     *    // Legacy non-EIP-1559 transaction (i.e. 27 or 28)\n     *    Signature.getNormalizedV(27)\n     *    //_result:\n     *\n     *    // Legacy EIP-155 transaction (i.e. >= 35)\n     *    Signature.getNormalizedV(46)\n     *    //_result:\n     *\n     *    // Invalid values throw\n     *    Signature.getNormalizedV(5)\n     *    //_error:\n     */\n    static getNormalizedV(v: BigNumberish): 27 | 28 {\n        const bv = getBigInt(v);\n\n        if (bv === BN_0 || bv === BN_27) { return 27; }\n        if (bv === BN_1 || bv === BN_28) { return 28; }\n\n        assertArgument(bv >= BN_35, \"invalid v\", \"v\", v);\n\n        // Otherwise, EIP-155 v means odd is 27 and even is 28\n        return (bv & BN_1) ? 27: 28;\n    }\n\n    /**\n     *  Creates a new [[Signature]].\n     *\n     *  If no %%sig%% is provided, a new [[Signature]] is created\n     *  with default values.\n     *\n     *  If %%sig%% is a string, it is parsed.\n     */\n    static from(sig?: SignatureLike): Signature {\n        function assertError(check: unknown, message: string): asserts check {\n            assertArgument(check, message, \"signature\", sig);\n        };\n\n        if (sig == null) {\n            return new Signature(_guard, ZeroHash, ZeroHash, 27);\n        }\n\n        if (typeof(sig) === \"string\") {\n            const bytes = getBytes(sig, \"signature\");\n            if (bytes.length === 64) {\n                const r = hexlify(bytes.slice(0, 32));\n                const s = bytes.slice(32, 64);\n                const v = (s[0] & 0x80) ? 28: 27;\n                s[0] &= 0x7f;\n                return new Signature(_guard, r, hexlify(s), v);\n            }\n\n            if (bytes.length === 65) {\n                const r = hexlify(bytes.slice(0, 32));\n                const s = bytes.slice(32, 64);\n                assertError((s[0] & 0x80) === 0, \"non-canonical s\");\n                const v = Signature.getNormalizedV(bytes[64]);\n                return new Signature(_guard, r, hexlify(s), v);\n            }\n\n            assertError(false, \"invalid raw signature length\");\n        }\n\n        if (sig instanceof Signature) { return sig.clone(); }\n\n        // Get r\n        const _r = sig.r;\n        assertError(_r != null, \"missing r\");\n        const r = toUint256(_r);\n\n        // Get s; by any means necessary (we check consistency below)\n        const s = (function(s?: string, yParityAndS?: string) {\n            if (s != null) { return toUint256(s); }\n\n            if (yParityAndS != null) {\n                assertError(isHexString(yParityAndS, 32), \"invalid yParityAndS\");\n                const bytes = getBytes(yParityAndS);\n                bytes[0] &= 0x7f;\n                return hexlify(bytes);\n            }\n\n            assertError(false, \"missing s\");\n        })(sig.s, sig.yParityAndS);\n        assertError((getBytes(s)[0] & 0x80) == 0, \"non-canonical s\");\n\n        // Get v; by any means necessary (we check consistency below)\n        const { networkV, v } = (function(_v?: BigNumberish, yParityAndS?: string, yParity?: Numeric): { networkV?: bigint, v: 27 | 28 } {\n            if (_v != null) {\n                const v = getBigInt(_v);\n                return {\n                    networkV: ((v >= BN_35) ? v: undefined),\n                    v: Signature.getNormalizedV(v)\n                };\n            }\n\n            if (yParityAndS != null) {\n                assertError(isHexString(yParityAndS, 32), \"invalid yParityAndS\");\n                return { v: ((getBytes(yParityAndS)[0] & 0x80) ? 28: 27) };\n            }\n\n            if (yParity != null) {\n                switch (getNumber(yParity, \"sig.yParity\")) {\n                    case 0: return { v: 27 };\n                    case 1: return { v: 28 };\n                }\n                assertError(false, \"invalid yParity\");\n            }\n\n            assertError(false, \"missing v\");\n        })(sig.v, sig.yParityAndS, sig.yParity);\n\n        const result = new Signature(_guard, r, s, v);\n        if (networkV) { result.#networkV =  networkV; }\n\n        // If multiple of v, yParity, yParityAndS we given, check they match\n        assertError(sig.yParity == null || getNumber(sig.yParity, \"sig.yParity\") === result.yParity, \"yParity mismatch\");\n        assertError(sig.yParityAndS == null || sig.yParityAndS === result.yParityAndS, \"yParityAndS mismatch\");\n\n        return result;\n    }\n}\n\n", "/**\n *  Add details about signing here.\n *\n *  @_subsection: api/crypto:Signing  [about-signing]\n */\n\nimport { secp256k1 } from \"@noble/curves/secp256k1\";\n\nimport {\n    concat, dataLength, getBytes, getBytesCopy, hexlify, toBeHex,\n    assertArgument\n} from \"../utils/index.js\";\n\nimport { Signature } from \"./signature.js\";\n\nimport type { BytesLike } from \"../utils/index.js\";\n\nimport type { SignatureLike } from \"./index.js\";\n\n\n/**\n *  A **SigningKey** provides high-level access to the elliptic curve\n *  cryptography (ECC) operations and key management.\n */\nexport class SigningKey {\n    #privateKey: string;\n\n    /**\n     *  Creates a new **SigningKey** for %%privateKey%%.\n     */\n    constructor(privateKey: BytesLike) {\n        assertArgument(dataLength(privateKey) === 32, \"invalid private key\", \"privateKey\", \"[REDACTED]\");\n        this.#privateKey = hexlify(privateKey);\n    }\n\n    /**\n     *  The private key.\n     */\n    get privateKey(): string { return this.#privateKey; }\n\n    /**\n     *  The uncompressed public key.\n     *\n     * This will always begin with the prefix ``0x04`` and be 132\n     * characters long (the ``0x`` prefix and 130 hexadecimal nibbles).\n     */\n    get publicKey(): string { return SigningKey.computePublicKey(this.#privateKey); }\n\n    /**\n     *  The compressed public key.\n     *\n     *  This will always begin with either the prefix ``0x02`` or ``0x03``\n     *  and be 68 characters long (the ``0x`` prefix and 33 hexadecimal\n     *  nibbles)\n     */\n    get compressedPublicKey(): string { return SigningKey.computePublicKey(this.#privateKey, true); }\n\n    /**\n     *  Return the signature of the signed %%digest%%.\n     */\n    sign(digest: BytesLike): Signature {\n        assertArgument(dataLength(digest) === 32, \"invalid digest length\", \"digest\", digest);\n\n        const sig = secp256k1.sign(getBytesCopy(digest), getBytesCopy(this.#privateKey), {\n            lowS: true\n        });\n\n        return Signature.from({\n            r: toBeHex(sig.r, 32),\n            s: toBeHex(sig.s, 32),\n            v: (sig.recovery ? 0x1c: 0x1b)\n        });\n    }\n\n    /**\n     *  Returns the [[link-wiki-ecdh]] shared secret between this\n     *  private key and the %%other%% key.\n     *\n     *  The %%other%% key may be any type of key, a raw public key,\n     *  a compressed/uncompressed pubic key or aprivate key.\n     *\n     *  Best practice is usually to use a cryptographic hash on the\n     *  returned value before using it as a symetric secret.\n     *\n     *  @example:\n     *    sign1 = new SigningKey(id(\"some-secret-1\"))\n     *    sign2 = new SigningKey(id(\"some-secret-2\"))\n     *\n     *    // Notice that privA.computeSharedSecret(pubB)...\n     *    sign1.computeSharedSecret(sign2.publicKey)\n     *    //_result:\n     *\n     *    // ...is equal to privB.computeSharedSecret(pubA).\n     *    sign2.computeSharedSecret(sign1.publicKey)\n     *    //_result:\n     */\n    computeSharedSecret(other: BytesLike): string {\n        const pubKey = SigningKey.computePublicKey(other);\n        return hexlify(secp256k1.getSharedSecret(getBytesCopy(this.#privateKey), getBytes(pubKey), false));\n    }\n\n    /**\n     *  Compute the public key for %%key%%, optionally %%compressed%%.\n     *\n     *  The %%key%% may be any type of key, a raw public key, a\n     *  compressed/uncompressed public key or private key.\n     *\n     *  @example:\n     *    sign = new SigningKey(id(\"some-secret\"));\n     *\n     *    // Compute the uncompressed public key for a private key\n     *    SigningKey.computePublicKey(sign.privateKey)\n     *    //_result:\n     *\n     *    // Compute the compressed public key for a private key\n     *    SigningKey.computePublicKey(sign.privateKey, true)\n     *    //_result:\n     *\n     *    // Compute the uncompressed public key\n     *    SigningKey.computePublicKey(sign.publicKey, false);\n     *    //_result:\n     *\n     *    // Compute the Compressed a public key\n     *    SigningKey.computePublicKey(sign.publicKey, true);\n     *    //_result:\n     */\n    static computePublicKey(key: BytesLike, compressed?: boolean): string {\n        let bytes = getBytes(key, \"key\");\n\n        // private key\n        if (bytes.length === 32) {\n            const pubKey = secp256k1.getPublicKey(bytes, !!compressed);\n            return hexlify(pubKey);\n        }\n\n        // raw public key; use uncompressed key with 0x04 prefix\n        if (bytes.length === 64) {\n            const pub = new Uint8Array(65);\n            pub[0] = 0x04;\n            pub.set(bytes, 1);\n            bytes = pub;\n        }\n\n        const point = secp256k1.ProjectivePoint.fromHex(bytes);\n        return hexlify(point.toRawBytes(compressed));\n    }\n\n    /**\n     *  Returns the public key for the private key which produced the\n     *  %%signature%% for the given %%digest%%.\n     *\n     *  @example:\n     *    key = new SigningKey(id(\"some-secret\"))\n     *    digest = id(\"hello world\")\n     *    sig = key.sign(digest)\n     *\n     *    // Notice the signer public key...\n     *    key.publicKey\n     *    //_result:\n     *\n     *    // ...is equal to the recovered public key\n     *    SigningKey.recoverPublicKey(digest, sig)\n     *    //_result:\n     *\n     */\n    static recoverPublicKey(digest: BytesLike, signature: SignatureLike): string {\n        assertArgument(dataLength(digest) === 32, \"invalid digest length\", \"digest\", digest);\n\n        const sig = Signature.from(signature);\n\n        let secpSig = secp256k1.Signature.fromCompact(getBytesCopy(concat([ sig.r, sig.s ])));\n        secpSig = secpSig.addRecoveryBit(sig.yParity);\n\n        const pubKey = secpSig.recoverPublicKey(getBytesCopy(digest));\n        assertArgument(pubKey != null, \"invalid signautre for digest\", \"signature\", signature);\n\n        return \"0x\" + pubKey.toHex(false);\n    }\n\n    /**\n     *  Returns the point resulting from adding the ellipic curve points\n     *  %%p0%% and %%p1%%.\n     *\n     *  This is not a common function most developers should require, but\n     *  can be useful for certain privacy-specific techniques.\n     *\n     *  For example, it is used by [[HDNodeWallet]] to compute child\n     *  addresses from parent public keys and chain codes.\n     */\n    static addPoints(p0: BytesLike, p1: BytesLike, compressed?: boolean): string {\n        const pub0 = secp256k1.ProjectivePoint.fromHex(SigningKey.computePublicKey(p0).substring(2));\n        const pub1 = secp256k1.ProjectivePoint.fromHex(SigningKey.computePublicKey(p1).substring(2));\n        return \"0x\" + pub0.add(pub1).toHex(!!compressed)\n    }\n}\n\n", "/**\n *  A fundamental building block of Ethereum is the underlying\n *  cryptographic primitives.\n *\n *  @_section: api/crypto:Cryptographic Functions   [about-crypto]\n */\n\nnull\n\n// We import all these so we can export lock()\nimport { computeHmac } from \"./hmac.js\";\nimport { keccak256 } from \"./keccak.js\";\nimport { ripemd160 } from \"./ripemd160.js\";\nimport { pbkdf2 } from \"./pbkdf2.js\";\nimport { randomBytes } from \"./random.js\";\nimport { scrypt, scryptSync } from \"./scrypt.js\";\nimport { sha256, sha512 } from \"./sha2.js\";\n\nexport {\n    computeHmac,\n\n    randomBytes,\n\n    keccak256,\n    ripemd160,\n    sha256, sha512,\n\n    pbkdf2,\n    scrypt, scryptSync\n};\n\nexport { SigningKey } from \"./signing-key.js\";\nexport { Signature } from \"./signature.js\";\n\n/**\n *  Once called, prevents any future change to the underlying cryptographic\n *  primitives using the ``.register`` feature for hooks.\n */\nfunction lock(): void {\n    computeHmac.lock();\n    keccak256.lock();\n    pbkdf2.lock();\n    randomBytes.lock();\n    ripemd160.lock();\n    scrypt.lock();\n    scryptSync.lock();\n    sha256.lock();\n    sha512.lock();\n    randomBytes.lock();\n}\n\nexport { lock };\n\n/////////////////////////////\n// Types\n\nexport type { ProgressCallback } from \"./scrypt.js\";\n\nexport type { SignatureLike } from \"./signature.js\";\n", "import { keccak256 } from \"../crypto/index.js\";\nimport { getBytes, assertArgument } from \"../utils/index.js\";\n\n\nconst BN_0 = BigInt(0);\nconst BN_36 = BigInt(36);\n\nfunction getChecksumAddress(address: string): string {\n//    if (!isHexString(address, 20)) {\n//        logger.throwArgumentError(\"invalid address\", \"address\", address);\n//    }\n\n    address = address.toLowerCase();\n\n    const chars = address.substring(2).split(\"\");\n\n    const expanded = new Uint8Array(40);\n    for (let i = 0; i < 40; i++) {\n        expanded[i] = chars[i].charCodeAt(0);\n    }\n\n    const hashed = getBytes(keccak256(expanded));\n\n    for (let i = 0; i < 40; i += 2) {\n        if ((hashed[i >> 1] >> 4) >= 8) {\n            chars[i] = chars[i].toUpperCase();\n        }\n        if ((hashed[i >> 1] & 0x0f) >= 8) {\n            chars[i + 1] = chars[i + 1].toUpperCase();\n        }\n    }\n\n    return \"0x\" + chars.join(\"\");\n}\n\n// See: https://en.wikipedia.org/wiki/International_Bank_Account_Number\n\n// Create lookup table\nconst ibanLookup: { [character: string]: string } = { };\nfor (let i = 0; i < 10; i++) { ibanLookup[String(i)] = String(i); }\nfor (let i = 0; i < 26; i++) { ibanLookup[String.fromCharCode(65 + i)] = String(10 + i); }\n\n// How many decimal digits can we process? (for 64-bit float, this is 15)\n// i.e. Math.floor(Math.log10(Number.MAX_SAFE_INTEGER));\nconst safeDigits = 15;\n\nfunction ibanChecksum(address: string): string {\n    address = address.toUpperCase();\n    address = address.substring(4) + address.substring(0, 2) + \"00\";\n\n    let expanded = address.split(\"\").map((c) => { return ibanLookup[c]; }).join(\"\");\n\n    // Javascript can handle integers safely up to 15 (decimal) digits\n    while (expanded.length >= safeDigits){\n        let block = expanded.substring(0, safeDigits);\n        expanded = parseInt(block, 10) % 97 + expanded.substring(block.length);\n    }\n\n    let checksum = String(98 - (parseInt(expanded, 10) % 97));\n    while (checksum.length < 2) { checksum = \"0\" + checksum; }\n\n    return checksum;\n};\n\nconst Base36 = (function() {;\n    const result: Record<string, bigint> = { };\n    for (let i = 0; i < 36; i++) {\n        const key = \"0123456789abcdefghijklmnopqrstuvwxyz\"[i];\n        result[key] = BigInt(i);\n    }\n    return result;\n})();\n\nfunction fromBase36(value: string): bigint {\n    value = value.toLowerCase();\n\n    let result = BN_0;\n    for (let i = 0; i < value.length; i++) {\n        result = result * BN_36 + Base36[value[i]];\n    }\n    return result;\n}\n\n/**\n *  Returns a normalized and checksumed address for %%address%%.\n *  This accepts non-checksum addresses, checksum addresses and\n *  [[getIcapAddress]] formats.\n *\n *  The checksum in Ethereum uses the capitalization (upper-case\n *  vs lower-case) of the characters within an address to encode\n *  its checksum, which offers, on average, a checksum of 15-bits.\n *\n *  If %%address%% contains both upper-case and lower-case, it is\n *  assumed to already be a checksum address and its checksum is\n *  validated, and if the address fails its expected checksum an\n *  error is thrown.\n *\n *  If you wish the checksum of %%address%% to be ignore, it should\n *  be converted to lower-case (i.e. ``.toLowercase()``) before\n *  being passed in. This should be a very rare situation though,\n *  that you wish to bypass the safegaurds in place to protect\n *  against an address that has been incorrectly copied from another\n *  source.\n *\n *  @example:\n *    // Adds the checksum (via upper-casing specific letters)\n *    getAddress(\"0x8ba1f109551bd432803012645ac136ddd64dba72\")\n *    //_result:\n *\n *    // Converts ICAP address and adds checksum\n *    getAddress(\"XE65GB6LDNXYOFTX0NSV3FUWKOWIXAMJK36\");\n *    //_result:\n *\n *    // Throws an error if an address contains mixed case,\n *    // but the checksum fails\n *    getAddress(\"0x8Ba1f109551bD432803012645Ac136ddd64DBA72\")\n *    //_error:\n */\nexport function getAddress(address: string): string {\n\n    assertArgument(typeof(address) === \"string\", \"invalid address\", \"address\", address);\n\n    if (address.match(/^(0x)?[0-9a-fA-F]{40}$/)) {\n\n        // Missing the 0x prefix\n        if (!address.startsWith(\"0x\")) { address = \"0x\" + address; }\n\n        const result = getChecksumAddress(address);\n\n        // It is a checksummed address with a bad checksum\n        assertArgument(!address.match(/([A-F].*[a-f])|([a-f].*[A-F])/) || result === address,\n            \"bad address checksum\", \"address\", address);\n\n        return result;\n    }\n\n    // Maybe ICAP? (we only support direct mode)\n    if (address.match(/^XE[0-9]{2}[0-9A-Za-z]{30,31}$/)) {\n        // It is an ICAP address with a bad checksum\n        assertArgument(address.substring(2, 4) === ibanChecksum(address), \"bad icap checksum\", \"address\", address);\n\n        let result = fromBase36(address.substring(4)).toString(16);\n        while (result.length < 40) { result = \"0\" + result; }\n        return  getChecksumAddress(\"0x\" + result);\n    }\n\n    assertArgument(false, \"invalid address\", \"address\", address);\n}\n\n/**\n *  The [ICAP Address format](link-icap) format is an early checksum\n *  format which attempts to be compatible with the banking\n *  industry [IBAN format](link-wiki-iban) for bank accounts.\n *\n *  It is no longer common or a recommended format.\n *\n *  @example:\n *    getIcapAddress(\"0x8ba1f109551bd432803012645ac136ddd64dba72\");\n *    //_result:\n *\n *    getIcapAddress(\"XE65GB6LDNXYOFTX0NSV3FUWKOWIXAMJK36\");\n *    //_result:\n *\n *    // Throws an error if the ICAP checksum is wrong\n *    getIcapAddress(\"XE65GB6LDNXYOFTX0NSV3FUWKOWIXAMJK37\");\n *    //_error:\n */\nexport function getIcapAddress(address: string): string {\n    //let base36 = _base16To36(getAddress(address).substring(2)).toUpperCase();\n    let base36 = BigInt(getAddress(address)).toString(36).toUpperCase();\n    while (base36.length < 30) { base36 = \"0\" + base36; }\n    return \"XE\" + ibanChecksum(\"XE00\" + base36) + base36;\n}\n", "import { keccak256 } from \"../crypto/index.js\";\nimport {\n    concat, dataSlice, getBigInt, getBytes, encodeRlp, assertArgument\n} from \"../utils/index.js\";\n\nimport { getAddress } from \"./address.js\";\n\nimport type { BigNumberish, BytesLike } from \"../utils/index.js\";\n\n\n// http://ethereum.stackexchange.com/questions/760/how-is-the-address-of-an-ethereum-contract-computed\n\n/**\n *  Returns the address that would result from a ``CREATE`` for %%tx%%.\n *\n *  This can be used to compute the address a contract will be\n *  deployed to by an EOA when sending a deployment transaction (i.e.\n *  when the ``to`` address is ``null``).\n *\n *  This can also be used to compute the address a contract will be\n *  deployed to by a contract, by using the contract's address as the\n *  ``to`` and the contract's nonce.\n *\n *  @example\n *    from = \"0x8ba1f109551bD432803012645Ac136ddd64DBA72\";\n *    nonce = 5;\n *\n *    getCreateAddress({ from, nonce });\n *    //_result:\n */\nexport function getCreateAddress(tx: { from: string, nonce: BigNumberish }): string {\n    const from = getAddress(tx.from);\n    const nonce = getBigInt(tx.nonce, \"tx.nonce\");\n\n    let nonceHex = nonce.toString(16);\n    if (nonceHex === \"0\") {\n        nonceHex = \"0x\";\n    } else if (nonceHex.length % 2) {\n        nonceHex = \"0x0\" + nonceHex;\n    } else {\n        nonceHex = \"0x\" + nonceHex;\n    }\n\n    return getAddress(dataSlice(keccak256(encodeRlp([ from, nonceHex ])), 12));\n}\n\n/**\n *  Returns the address that would result from a ``CREATE2`` operation\n *  with the given %%from%%, %%salt%% and %%initCodeHash%%.\n *\n *  To compute the %%initCodeHash%% from a contract's init code, use\n *  the [[keccak256]] function.\n *\n *  For a quick overview and example of ``CREATE2``, see [[link-ricmoo-wisps]].\n *\n *  @example\n *    // The address of the contract\n *    from = \"0x8ba1f109551bD432803012645Ac136ddd64DBA72\"\n *\n *    // The salt\n *    salt = id(\"HelloWorld\")\n *\n *    // The hash of the initCode\n *    initCode = \"0x6394198df16000526103ff60206004601c335afa6040516060f3\";\n *    initCodeHash = keccak256(initCode)\n *\n *    getCreate2Address(from, salt, initCodeHash)\n *    //_result:\n */\nexport function getCreate2Address(_from: string, _salt: BytesLike, _initCodeHash: BytesLike): string {\n    const from = getAddress(_from);\n    const salt = getBytes(_salt, \"salt\");\n    const initCodeHash = getBytes(_initCodeHash, \"initCodeHash\");\n\n    assertArgument(salt.length === 32, \"salt must be 32 bytes\", \"salt\", _salt);\n\n    assertArgument(initCodeHash.length === 32, \"initCodeHash must be 32 bytes\", \"initCodeHash\", _initCodeHash);\n\n    return getAddress(dataSlice(keccak256(concat([ \"0xff\", from, salt, initCodeHash ])), 12))\n}\n", "import { assert, assertArgument } from \"../utils/index.js\";\n\nimport { getAddress } from \"./address.js\";\n\nimport type { Addressable, AddressLike, NameResolver } from \"./index.js\";\n\n\n/**\n *  Returns true if %%value%% is an object which implements the\n *  [[Addressable]] interface.\n *\n *  @example:\n *    // Wallets and AbstractSigner sub-classes\n *    isAddressable(Wallet.createRandom())\n *    //_result:\n *\n *    // Contracts\n *    contract = new Contract(\"dai.tokens.ethers.eth\", [ ], provider)\n *    isAddressable(contract)\n *    //_result:\n */\nexport function isAddressable(value: any): value is Addressable {\n    return (value && typeof(value.getAddress) === \"function\");\n}\n\n/**\n *  Returns true if %%value%% is a valid address.\n *\n *  @example:\n *    // Valid address\n *    isAddress(\"0x8ba1f109551bD432803012645Ac136ddd64DBA72\")\n *    //_result:\n *\n *    // Valid ICAP address\n *    isAddress(\"XE65GB6LDNXYOFTX0NSV3FUWKOWIXAMJK36\")\n *    //_result:\n *\n *    // Invalid checksum\n *    isAddress(\"0x8Ba1f109551bD432803012645Ac136ddd64DBa72\")\n *    //_result:\n *\n *    // Invalid ICAP checksum\n *    isAddress(\"0x8Ba1f109551bD432803012645Ac136ddd64DBA72\")\n *    //_result:\n *\n *    // Not an address (an ENS name requires a provided and an\n *    // asynchronous API to access)\n *    isAddress(\"ricmoo.eth\")\n *    //_result:\n */\nexport function isAddress(value: any): value is string {\n    try {\n        getAddress(value);\n        return true;\n    } catch (error) { }\n    return false;\n}\n\nasync function checkAddress(target: any, promise: Promise<null | string>): Promise<string> {\n    const result = await promise;\n    if (result == null || result === \"0x0000000000000000000000000000000000000000\") {\n        assert(typeof(target) !== \"string\", \"unconfigured name\", \"UNCONFIGURED_NAME\", { value: target });\n        assertArgument(false, \"invalid AddressLike value; did not resolve to a value address\", \"target\", target);\n    }\n    return getAddress(result);\n}\n\n/**\n *  Resolves to an address for the %%target%%, which may be any\n *  supported address type, an [[Addressable]] or a Promise which\n *  resolves to an address.\n *\n *  If an ENS name is provided, but that name has not been correctly\n *  configured a [[UnconfiguredNameError]] is thrown.\n *\n *  @example:\n *    addr = \"0x6B175474E89094C44Da98b954EedeAC495271d0F\"\n *\n *    // Addresses are return synchronously\n *    resolveAddress(addr, provider)\n *    //_result:\n *\n *    // Address promises are resolved asynchronously\n *    resolveAddress(Promise.resolve(addr))\n *    //_result:\n *\n *    // ENS names are resolved asynchronously\n *    resolveAddress(\"dai.tokens.ethers.eth\", provider)\n *    //_result:\n *\n *    // Addressable objects are resolved asynchronously\n *    contract = new Contract(addr, [ ])\n *    resolveAddress(contract, provider)\n *    //_result:\n *\n *    // Unconfigured ENS names reject\n *    resolveAddress(\"nothing-here.ricmoo.eth\", provider)\n *    //_error:\n *\n *    // ENS names require a NameResolver object passed in\n *    // (notice the provider was omitted)\n *    resolveAddress(\"nothing-here.ricmoo.eth\")\n *    //_error:\n */\nexport function resolveAddress(target: AddressLike, resolver?: null | NameResolver): string | Promise<string> {\n\n    if (typeof(target) === \"string\") {\n        if (target.match(/^0x[0-9a-f]{40}$/i)) { return getAddress(target); }\n\n        assert(resolver != null, \"ENS resolution requires a provider\",\n            \"UNSUPPORTED_OPERATION\", { operation: \"resolveName\" });\n\n        return checkAddress(target, resolver.resolveName(target));\n\n    } else if (isAddressable(target)) {\n        return checkAddress(target, target.getAddress());\n\n    } else if (target && typeof(target.then) === \"function\") {\n        return checkAddress(target, target);\n    }\n\n    assertArgument(false, \"unsupported addressable value\", \"target\", target);\n}\n", "/**\n *  Addresses are a fundamental part of interacting with Ethereum. They\n *  represent the gloabal identity of Externally Owned Accounts (accounts\n *  backed by a private key) and contracts.\n *\n *  The Ethereum Naming Service (ENS) provides an interconnected ecosystem\n *  of contracts, standards and libraries which enable looking up an\n *  address for an ENS name.\n *\n *  These functions help convert between various formats, validate\n *  addresses and safely resolve ENS names.\n *\n *  @_section: api/address:Addresses  [about-addresses]\n */\n\nnull;\n\n/**\n *  An interface for objects which have an address, and can\n *  resolve it asyncronously.\n *\n *  This allows objects such as [[Signer]] or [[Contract]] to\n *  be used most places an address can be, for example getting\n *  the [balance](Provider-getBalance).\n */\nexport interface Addressable {\n    /**\n     *  Get the object address.\n     */\n    getAddress(): Promise<string>;\n}\n\n/**\n *  Anything that can be used to return or resolve an address.\n */\nexport type AddressLike = string | Promise<string> | Addressable;\n\n/**\n *  An interface for any object which can resolve an ENS name.\n */\nexport interface NameResolver {\n    /**\n     *  Resolve to the address for the ENS %%name%%.\n     *\n     *  Resolves to ``null`` if the name is unconfigued. Use\n     *  [[resolveAddress]] (passing this object as %%resolver%%) to\n     *  throw for names that are unconfigured.\n     */\n    resolveName(name: string): Promise<null | string>;\n}\n\nexport { getAddress, getIcapAddress } from \"./address.js\";\n\nexport { getCreateAddress, getCreate2Address } from \"./contract-address.js\";\n\n\nexport { isAddressable, isAddress, resolveAddress } from \"./checks.js\";\n", "/**\n *  A Typed object allows a value to have its type explicitly\n *  specified.\n *\n *  For example, in Solidity, the value ``45`` could represent a\n *  ``uint8`` or a ``uint256``. The value ``0x1234`` could represent\n *  a ``bytes2`` or ``bytes``.\n *\n *  Since JavaScript has no meaningful way to explicitly inform any\n *  APIs which what the type is, this allows transparent interoperation\n *  with Soldity.\n *\n *  @_subsection: api/abi:Typed Values\n */\n\nimport { assertPrivate, defineProperties } from \"../utils/index.js\";\n\nimport type { Addressable } from \"../address/index.js\";\nimport type { BigNumberish, BytesLike } from \"../utils/index.js\";\n\nimport type { Result } from \"./coders/abstract-coder.js\";\n\nconst _gaurd = { };\n\nfunction n(value: BigNumberish, width: number): Typed {\n    let signed = false;\n    if (width < 0) {\n        signed = true;\n        width *= -1;\n    }\n\n    // @TODO: Check range is valid for value\n    return new Typed(_gaurd, `${ signed ? \"\": \"u\" }int${ width }`, value, { signed, width });\n}\n\nfunction b(value: BytesLike, size?: number): Typed {\n    // @TODO: Check range is valid for value\n    return new Typed(_gaurd, `bytes${ (size) ? size: \"\" }`, value, { size });\n}\n\n// @TODO: Remove this in v7, it was replaced by TypedBigInt\n/**\n *  @_ignore:\n */\nexport interface TypedNumber extends Typed {\n    value: number;\n    defaultValue(): number;\n    minValue(): number;\n    maxValue(): number;\n}\n\n/**\n *  A **Typed** that represents a numeric value.\n */\nexport interface TypedBigInt extends Typed {\n    /**\n     *  The value.\n     */\n    value: bigint;\n\n    /**\n     *  The default value for all numeric types is ``0``.\n     */\n    defaultValue(): bigint;\n\n    /**\n     *  The minimum value for this type, accounting for bit-width and signed-ness.\n     */\n    minValue(): bigint;\n\n    /**\n     *  The minimum value for this type, accounting for bit-width.\n     */\n    maxValue(): bigint;\n}\n\n/**\n *  A **Typed** that represents a binary sequence of data as bytes.\n */\nexport interface TypedData extends Typed {\n    /**\n     *  The value.\n     */\n    value: string;\n\n    /**\n     *  The default value for this type.\n     */\n    defaultValue(): string;\n}\n\n/**\n *  A **Typed** that represents a UTF-8 sequence of bytes.\n */\nexport interface TypedString extends Typed {\n    /**\n     *  The value.\n     */\n    value: string;\n\n    /**\n     *  The default value for the string type is the empty string (i.e. ``\"\"``).\n     */\n    defaultValue(): string;\n}\n\nconst _typedSymbol = Symbol.for(\"_ethers_typed\");\n\n/**\n *  The **Typed** class to wrap values providing explicit type information.\n */\nexport class Typed {\n\n    /**\n     *  The type, as a Solidity-compatible type.\n     */\n    readonly type!: string;\n\n    /**\n     *  The actual value.\n     */\n    readonly value!: any;\n\n    readonly #options: any;\n\n    /**\n     *  @_ignore:\n     */\n    readonly _typedSymbol!: Symbol;\n\n    /**\n     *  @_ignore:\n     */\n    constructor(gaurd: any, type: string, value: any, options?: any) {\n        if (options == null) { options = null; }\n        assertPrivate(_gaurd, gaurd, \"Typed\");\n        defineProperties<Typed>(this, { _typedSymbol, type, value });\n        this.#options = options;\n\n        // Check the value is valid\n        this.format();\n    }\n\n    /**\n     *  Format the type as a Human-Readable type.\n     */\n    format(): string {\n        if (this.type === \"array\") {\n            throw new Error(\"\");\n        } else if (this.type === \"dynamicArray\") {\n            throw new Error(\"\");\n        } else if (this.type === \"tuple\") {\n            return `tuple(${ this.value.map((v: Typed) => v.format()).join(\",\") })`\n        }\n\n        return this.type;\n    }\n\n    /**\n     *  The default value returned by this type.\n     */\n    defaultValue(): string | number | bigint | Result {\n        return 0;\n    }\n\n    /**\n     *  The minimum value for numeric types.\n     */\n    minValue(): string | number | bigint {\n        return 0;\n    }\n\n    /**\n     *  The maximum value for numeric types.\n     */\n    maxValue(): string | number | bigint {\n        return 0;\n    }\n\n    /**\n     *  Returns ``true`` and provides a type guard is this is a [[TypedBigInt]].\n     */\n    isBigInt(): this is TypedBigInt {\n        return !!(this.type.match(/^u?int[0-9]+$/));\n    }\n\n    /**\n     *  Returns ``true`` and provides a type guard is this is a [[TypedData]].\n     */\n    isData(): this is TypedData {\n        return this.type.startsWith(\"bytes\");\n    }\n\n    /**\n     *  Returns ``true`` and provides a type guard is this is a [[TypedString]].\n     */\n    isString(): this is TypedString {\n        return (this.type === \"string\");\n    }\n\n    /**\n     *  Returns the tuple name, if this is a tuple. Throws otherwise.\n     */\n    get tupleName(): null | string {\n        if (this.type !== \"tuple\") { throw TypeError(\"not a tuple\"); }\n        return this.#options;\n    }\n\n    // Returns the length of this type as an array\n    // - `null` indicates the length is unforced, it could be dynamic\n    // - `-1` indicates the length is dynamic\n    // - any other value indicates it is a static array and is its length\n\n    /**\n     *  Returns the length of the array type or ``-1`` if it is dynamic.\n     *\n     *  Throws if the type is not an array.\n     */\n    get arrayLength(): null | number {\n        if (this.type !== \"array\") { throw TypeError(\"not an array\"); }\n        if (this.#options === true) { return -1; }\n        if (this.#options === false) { return (<Array<any>>(this.value)).length; }\n        return null;\n    }\n\n    /**\n     *  Returns a new **Typed** of %%type%% with the %%value%%.\n     */\n    static from(type: string, value: any): Typed {\n        return new Typed(_gaurd, type, value);\n    }\n\n    /**\n     *  Return a new ``uint8`` type for %%v%%.\n     */\n    static uint8(v: BigNumberish): Typed { return n(v, 8); }\n\n    /**\n     *  Return a new ``uint16`` type for %%v%%.\n     */\n    static uint16(v: BigNumberish): Typed { return n(v, 16); }\n\n    /**\n     *  Return a new ``uint24`` type for %%v%%.\n     */\n    static uint24(v: BigNumberish): Typed { return n(v, 24); }\n\n    /**\n     *  Return a new ``uint32`` type for %%v%%.\n     */\n    static uint32(v: BigNumberish): Typed { return n(v, 32); }\n\n    /**\n     *  Return a new ``uint40`` type for %%v%%.\n     */\n    static uint40(v: BigNumberish): Typed { return n(v, 40); }\n\n    /**\n     *  Return a new ``uint48`` type for %%v%%.\n     */\n    static uint48(v: BigNumberish): Typed { return n(v, 48); }\n\n    /**\n     *  Return a new ``uint56`` type for %%v%%.\n     */\n    static uint56(v: BigNumberish): Typed { return n(v, 56); }\n\n    /**\n     *  Return a new ``uint64`` type for %%v%%.\n     */\n    static uint64(v: BigNumberish): Typed { return n(v, 64); }\n\n    /**\n     *  Return a new ``uint72`` type for %%v%%.\n     */\n    static uint72(v: BigNumberish): Typed { return n(v, 72); }\n\n    /**\n     *  Return a new ``uint80`` type for %%v%%.\n     */\n    static uint80(v: BigNumberish): Typed { return n(v, 80); }\n\n    /**\n     *  Return a new ``uint88`` type for %%v%%.\n     */\n    static uint88(v: BigNumberish): Typed { return n(v, 88); }\n\n    /**\n     *  Return a new ``uint96`` type for %%v%%.\n     */\n    static uint96(v: BigNumberish): Typed { return n(v, 96); }\n\n    /**\n     *  Return a new ``uint104`` type for %%v%%.\n     */\n    static uint104(v: BigNumberish): Typed { return n(v, 104); }\n\n    /**\n     *  Return a new ``uint112`` type for %%v%%.\n     */\n    static uint112(v: BigNumberish): Typed { return n(v, 112); }\n\n    /**\n     *  Return a new ``uint120`` type for %%v%%.\n     */\n    static uint120(v: BigNumberish): Typed { return n(v, 120); }\n\n    /**\n     *  Return a new ``uint128`` type for %%v%%.\n     */\n    static uint128(v: BigNumberish): Typed { return n(v, 128); }\n\n    /**\n     *  Return a new ``uint136`` type for %%v%%.\n     */\n    static uint136(v: BigNumberish): Typed { return n(v, 136); }\n\n    /**\n     *  Return a new ``uint144`` type for %%v%%.\n     */\n    static uint144(v: BigNumberish): Typed { return n(v, 144); }\n\n    /**\n     *  Return a new ``uint152`` type for %%v%%.\n     */\n    static uint152(v: BigNumberish): Typed { return n(v, 152); }\n\n    /**\n     *  Return a new ``uint160`` type for %%v%%.\n     */\n    static uint160(v: BigNumberish): Typed { return n(v, 160); }\n\n    /**\n     *  Return a new ``uint168`` type for %%v%%.\n     */\n    static uint168(v: BigNumberish): Typed { return n(v, 168); }\n\n    /**\n     *  Return a new ``uint176`` type for %%v%%.\n     */\n    static uint176(v: BigNumberish): Typed { return n(v, 176); }\n\n    /**\n     *  Return a new ``uint184`` type for %%v%%.\n     */\n    static uint184(v: BigNumberish): Typed { return n(v, 184); }\n\n    /**\n     *  Return a new ``uint192`` type for %%v%%.\n     */\n    static uint192(v: BigNumberish): Typed { return n(v, 192); }\n\n    /**\n     *  Return a new ``uint200`` type for %%v%%.\n     */\n    static uint200(v: BigNumberish): Typed { return n(v, 200); }\n\n    /**\n     *  Return a new ``uint208`` type for %%v%%.\n     */\n    static uint208(v: BigNumberish): Typed { return n(v, 208); }\n\n    /**\n     *  Return a new ``uint216`` type for %%v%%.\n     */\n    static uint216(v: BigNumberish): Typed { return n(v, 216); }\n\n    /**\n     *  Return a new ``uint224`` type for %%v%%.\n     */\n    static uint224(v: BigNumberish): Typed { return n(v, 224); }\n\n    /**\n     *  Return a new ``uint232`` type for %%v%%.\n     */\n    static uint232(v: BigNumberish): Typed { return n(v, 232); }\n\n    /**\n     *  Return a new ``uint240`` type for %%v%%.\n     */\n    static uint240(v: BigNumberish): Typed { return n(v, 240); }\n\n    /**\n     *  Return a new ``uint248`` type for %%v%%.\n     */\n    static uint248(v: BigNumberish): Typed { return n(v, 248); }\n\n    /**\n     *  Return a new ``uint256`` type for %%v%%.\n     */\n    static uint256(v: BigNumberish): Typed { return n(v, 256); }\n\n    /**\n     *  Return a new ``uint256`` type for %%v%%.\n     */\n    static uint(v: BigNumberish): Typed { return n(v, 256); }\n\n    /**\n     *  Return a new ``int8`` type for %%v%%.\n     */\n    static int8(v: BigNumberish): Typed { return n(v, -8); }\n\n    /**\n     *  Return a new ``int16`` type for %%v%%.\n     */\n    static int16(v: BigNumberish): Typed { return n(v, -16); }\n\n    /**\n     *  Return a new ``int24`` type for %%v%%.\n     */\n    static int24(v: BigNumberish): Typed { return n(v, -24); }\n\n    /**\n     *  Return a new ``int32`` type for %%v%%.\n     */\n    static int32(v: BigNumberish): Typed { return n(v, -32); }\n\n    /**\n     *  Return a new ``int40`` type for %%v%%.\n     */\n    static int40(v: BigNumberish): Typed { return n(v, -40); }\n\n    /**\n     *  Return a new ``int48`` type for %%v%%.\n     */\n    static int48(v: BigNumberish): Typed { return n(v, -48); }\n\n    /**\n     *  Return a new ``int56`` type for %%v%%.\n     */\n    static int56(v: BigNumberish): Typed { return n(v, -56); }\n\n    /**\n     *  Return a new ``int64`` type for %%v%%.\n     */\n    static int64(v: BigNumberish): Typed { return n(v, -64); }\n\n    /**\n     *  Return a new ``int72`` type for %%v%%.\n     */\n    static int72(v: BigNumberish): Typed { return n(v, -72); }\n\n    /**\n     *  Return a new ``int80`` type for %%v%%.\n     */\n    static int80(v: BigNumberish): Typed { return n(v, -80); }\n\n    /**\n     *  Return a new ``int88`` type for %%v%%.\n     */\n    static int88(v: BigNumberish): Typed { return n(v, -88); }\n\n    /**\n     *  Return a new ``int96`` type for %%v%%.\n     */\n    static int96(v: BigNumberish): Typed { return n(v, -96); }\n\n    /**\n     *  Return a new ``int104`` type for %%v%%.\n     */\n    static int104(v: BigNumberish): Typed { return n(v, -104); }\n\n    /**\n     *  Return a new ``int112`` type for %%v%%.\n     */\n    static int112(v: BigNumberish): Typed { return n(v, -112); }\n\n    /**\n     *  Return a new ``int120`` type for %%v%%.\n     */\n    static int120(v: BigNumberish): Typed { return n(v, -120); }\n\n    /**\n     *  Return a new ``int128`` type for %%v%%.\n     */\n    static int128(v: BigNumberish): Typed { return n(v, -128); }\n\n    /**\n     *  Return a new ``int136`` type for %%v%%.\n     */\n    static int136(v: BigNumberish): Typed { return n(v, -136); }\n\n    /**\n     *  Return a new ``int144`` type for %%v%%.\n     */\n    static int144(v: BigNumberish): Typed { return n(v, -144); }\n\n    /**\n     *  Return a new ``int52`` type for %%v%%.\n     */\n    static int152(v: BigNumberish): Typed { return n(v, -152); }\n\n    /**\n     *  Return a new ``int160`` type for %%v%%.\n     */\n    static int160(v: BigNumberish): Typed { return n(v, -160); }\n\n    /**\n     *  Return a new ``int168`` type for %%v%%.\n     */\n    static int168(v: BigNumberish): Typed { return n(v, -168); }\n\n    /**\n     *  Return a new ``int176`` type for %%v%%.\n     */\n    static int176(v: BigNumberish): Typed { return n(v, -176); }\n\n    /**\n     *  Return a new ``int184`` type for %%v%%.\n     */\n    static int184(v: BigNumberish): Typed { return n(v, -184); }\n\n    /**\n     *  Return a new ``int92`` type for %%v%%.\n     */\n    static int192(v: BigNumberish): Typed { return n(v, -192); }\n\n    /**\n     *  Return a new ``int200`` type for %%v%%.\n     */\n    static int200(v: BigNumberish): Typed { return n(v, -200); }\n\n    /**\n     *  Return a new ``int208`` type for %%v%%.\n     */\n    static int208(v: BigNumberish): Typed { return n(v, -208); }\n\n    /**\n     *  Return a new ``int216`` type for %%v%%.\n     */\n    static int216(v: BigNumberish): Typed { return n(v, -216); }\n\n    /**\n     *  Return a new ``int224`` type for %%v%%.\n     */\n    static int224(v: BigNumberish): Typed { return n(v, -224); }\n\n    /**\n     *  Return a new ``int232`` type for %%v%%.\n     */\n    static int232(v: BigNumberish): Typed { return n(v, -232); }\n\n    /**\n     *  Return a new ``int240`` type for %%v%%.\n     */\n    static int240(v: BigNumberish): Typed { return n(v, -240); }\n\n    /**\n     *  Return a new ``int248`` type for %%v%%.\n     */\n    static int248(v: BigNumberish): Typed { return n(v, -248); }\n\n    /**\n     *  Return a new ``int256`` type for %%v%%.\n     */\n    static int256(v: BigNumberish): Typed { return n(v, -256); }\n\n    /**\n     *  Return a new ``int256`` type for %%v%%.\n     */\n    static int(v: BigNumberish): Typed { return n(v, -256); }\n\n    /**\n     *  Return a new ``bytes1`` type for %%v%%.\n     */\n    static bytes1(v: BytesLike): Typed { return b(v, 1); }\n\n    /**\n     *  Return a new ``bytes2`` type for %%v%%.\n     */\n    static bytes2(v: BytesLike): Typed { return b(v, 2); }\n\n    /**\n     *  Return a new ``bytes3`` type for %%v%%.\n     */\n    static bytes3(v: BytesLike): Typed { return b(v, 3); }\n\n    /**\n     *  Return a new ``bytes4`` type for %%v%%.\n     */\n    static bytes4(v: BytesLike): Typed { return b(v, 4); }\n\n    /**\n     *  Return a new ``bytes5`` type for %%v%%.\n     */\n    static bytes5(v: BytesLike): Typed { return b(v, 5); }\n\n    /**\n     *  Return a new ``bytes6`` type for %%v%%.\n     */\n    static bytes6(v: BytesLike): Typed { return b(v, 6); }\n\n    /**\n     *  Return a new ``bytes7`` type for %%v%%.\n     */\n    static bytes7(v: BytesLike): Typed { return b(v, 7); }\n\n    /**\n     *  Return a new ``bytes8`` type for %%v%%.\n     */\n    static bytes8(v: BytesLike): Typed { return b(v, 8); }\n\n    /**\n     *  Return a new ``bytes9`` type for %%v%%.\n     */\n    static bytes9(v: BytesLike): Typed { return b(v, 9); }\n\n    /**\n     *  Return a new ``bytes10`` type for %%v%%.\n     */\n    static bytes10(v: BytesLike): Typed { return b(v, 10); }\n\n    /**\n     *  Return a new ``bytes11`` type for %%v%%.\n     */\n    static bytes11(v: BytesLike): Typed { return b(v, 11); }\n\n    /**\n     *  Return a new ``bytes12`` type for %%v%%.\n     */\n    static bytes12(v: BytesLike): Typed { return b(v, 12); }\n\n    /**\n     *  Return a new ``bytes13`` type for %%v%%.\n     */\n    static bytes13(v: BytesLike): Typed { return b(v, 13); }\n\n    /**\n     *  Return a new ``bytes14`` type for %%v%%.\n     */\n    static bytes14(v: BytesLike): Typed { return b(v, 14); }\n\n    /**\n     *  Return a new ``bytes15`` type for %%v%%.\n     */\n    static bytes15(v: BytesLike): Typed { return b(v, 15); }\n\n    /**\n     *  Return a new ``bytes16`` type for %%v%%.\n     */\n    static bytes16(v: BytesLike): Typed { return b(v, 16); }\n\n    /**\n     *  Return a new ``bytes17`` type for %%v%%.\n     */\n    static bytes17(v: BytesLike): Typed { return b(v, 17); }\n\n    /**\n     *  Return a new ``bytes18`` type for %%v%%.\n     */\n    static bytes18(v: BytesLike): Typed { return b(v, 18); }\n\n    /**\n     *  Return a new ``bytes19`` type for %%v%%.\n     */\n    static bytes19(v: BytesLike): Typed { return b(v, 19); }\n\n    /**\n     *  Return a new ``bytes20`` type for %%v%%.\n     */\n    static bytes20(v: BytesLike): Typed { return b(v, 20); }\n\n    /**\n     *  Return a new ``bytes21`` type for %%v%%.\n     */\n    static bytes21(v: BytesLike): Typed { return b(v, 21); }\n\n    /**\n     *  Return a new ``bytes22`` type for %%v%%.\n     */\n    static bytes22(v: BytesLike): Typed { return b(v, 22); }\n\n    /**\n     *  Return a new ``bytes23`` type for %%v%%.\n     */\n    static bytes23(v: BytesLike): Typed { return b(v, 23); }\n\n    /**\n     *  Return a new ``bytes24`` type for %%v%%.\n     */\n    static bytes24(v: BytesLike): Typed { return b(v, 24); }\n\n    /**\n     *  Return a new ``bytes25`` type for %%v%%.\n     */\n    static bytes25(v: BytesLike): Typed { return b(v, 25); }\n\n    /**\n     *  Return a new ``bytes26`` type for %%v%%.\n     */\n    static bytes26(v: BytesLike): Typed { return b(v, 26); }\n\n    /**\n     *  Return a new ``bytes27`` type for %%v%%.\n     */\n    static bytes27(v: BytesLike): Typed { return b(v, 27); }\n\n    /**\n     *  Return a new ``bytes28`` type for %%v%%.\n     */\n    static bytes28(v: BytesLike): Typed { return b(v, 28); }\n\n    /**\n     *  Return a new ``bytes29`` type for %%v%%.\n     */\n    static bytes29(v: BytesLike): Typed { return b(v, 29); }\n\n    /**\n     *  Return a new ``bytes30`` type for %%v%%.\n     */\n    static bytes30(v: BytesLike): Typed { return b(v, 30); }\n\n    /**\n     *  Return a new ``bytes31`` type for %%v%%.\n     */\n    static bytes31(v: BytesLike): Typed { return b(v, 31); }\n\n    /**\n     *  Return a new ``bytes32`` type for %%v%%.\n     */\n    static bytes32(v: BytesLike): Typed { return b(v, 32); }\n\n\n    /**\n     *  Return a new ``address`` type for %%v%%.\n     */\n    static address(v: string | Addressable): Typed { return new Typed(_gaurd, \"address\", v); }\n\n    /**\n     *  Return a new ``bool`` type for %%v%%.\n     */\n    static bool(v: any): Typed { return new Typed(_gaurd, \"bool\", !!v); }\n\n    /**\n     *  Return a new ``bytes`` type for %%v%%.\n     */\n    static bytes(v: BytesLike): Typed { return new Typed(_gaurd, \"bytes\", v); }\n\n    /**\n     *  Return a new ``string`` type for %%v%%.\n     */\n    static string(v: string): Typed { return new Typed(_gaurd, \"string\", v); }\n\n\n    /**\n     *  Return a new ``array`` type for %%v%%, allowing %%dynamic%% length.\n     */\n    static array(v: Array<any | Typed>, dynamic?: null | boolean): Typed {\n        throw new Error(\"not implemented yet\");\n        return new Typed(_gaurd, \"array\", v, dynamic);\n    }\n\n\n    /**\n     *  Return a new ``tuple`` type for %%v%%, with the optional %%name%%.\n     */\n    static tuple(v: Array<any | Typed> | Record<string, any | Typed>, name?: string): Typed {\n        throw new Error(\"not implemented yet\");\n        return new Typed(_gaurd, \"tuple\", v, name);\n    }\n\n\n    /**\n     *  Return a new ``uint8`` type for %%v%%.\n     */\n    static overrides(v: Record<string, any>): Typed {\n        return new Typed(_gaurd, \"overrides\", Object.assign({ }, v));\n    }\n\n    /**\n     *  Returns true only if %%value%% is a [[Typed]] instance.\n     */\n    static isTyped(value: any): value is Typed {\n        return (value\n            && typeof(value) === \"object\"\n            && \"_typedSymbol\" in value\n            && value._typedSymbol === _typedSymbol);\n    }\n\n    /**\n     *  If the value is a [[Typed]] instance, validates the underlying value\n     *  and returns it, otherwise returns value directly.\n     *\n     *  This is useful for functions that with to accept either a [[Typed]]\n     *  object or values.\n     */\n    static dereference<T>(value: Typed | T, type: string): T {\n        if (Typed.isTyped(value)) {\n            if (value.type !== type) {\n                throw new Error(`invalid type: expecetd ${ type }, got ${ value.type }`);\n            }\n            return value.value;\n        }\n        return value;\n    }\n}\n", "import { getAddress } from \"../../address/index.js\";\nimport { toBeHex } from \"../../utils/maths.js\";\n\nimport { Typed } from \"../typed.js\";\nimport { Coder } from \"./abstract-coder.js\";\n\nimport type { Reader, Writer } from \"./abstract-coder.js\";\n\n\n/**\n *  @_ignore\n */\nexport class AddressCoder extends Coder {\n\n    constructor(localName: string) {\n        super(\"address\", \"address\", localName, false);\n    }\n\n    defaultValue(): string {\n        return \"0x0000000000000000000000000000000000000000\";\n    }\n\n    encode(writer: Writer, _value: string | Typed): number {\n        let value = Typed.dereference(_value, \"string\");\n        try {\n            value = getAddress(value);\n        } catch (error: any) {\n            return this._throwError(error.message, _value);\n        }\n        return writer.writeValue(value);\n    }\n\n    decode(reader: Reader): any {\n        return getAddress(toBeHex(reader.readValue(), 20));\n    }\n}\n", "import { Coder } from \"./abstract-coder.js\";\n\nimport type { Reader, Writer } from \"./abstract-coder.js\";\n\n/**\n *  Clones the functionality of an existing Coder, but without a localName\n *\n *  @_ignore\n */\nexport class AnonymousCoder extends Coder {\n    private coder: Coder;\n\n    constructor(coder: Coder) {\n        super(coder.name, coder.type, \"_\", coder.dynamic);\n        this.coder = coder;\n    }\n\n    defaultValue(): any {\n        return this.coder.defaultValue();\n    }\n\n    encode(writer: Writer, value: any): number {\n        return this.coder.encode(writer, value);\n    }\n\n    decode(reader: Reader): any {\n        return this.coder.decode(reader);\n    }\n}\n", "import {\n    defineProperties, isError, assert, assertArgument, assertArgumentCount\n} from \"../../utils/index.js\";\n\nimport { Typed } from \"../typed.js\";\n\nimport { Coder, Result, WordSize, Writer } from \"./abstract-coder.js\";\nimport { AnonymousCoder } from \"./anonymous.js\";\n\nimport type { Reader } from \"./abstract-coder.js\";\n\n/**\n *  @_ignore\n */\nexport function pack(writer: Writer, coders: ReadonlyArray<Coder>, values: Array<any> | { [ name: string ]: any }): number {\n    let arrayValues: Array<any> = [ ];\n\n    if (Array.isArray(values)) {\n       arrayValues = values;\n\n    } else if (values && typeof(values) === \"object\") {\n        let unique: { [ name: string ]: boolean } = { };\n\n        arrayValues = coders.map((coder) => {\n            const name = coder.localName;\n            assert(name, \"cannot encode object for signature with missing names\",\n                \"INVALID_ARGUMENT\", { argument: \"values\", info: { coder }, value: values });\n\n            assert(!unique[name], \"cannot encode object for signature with duplicate names\",\n                \"INVALID_ARGUMENT\", { argument: \"values\", info: { coder }, value: values });\n\n            unique[name] = true;\n\n            return values[name];\n        });\n\n    } else {\n        assertArgument(false, \"invalid tuple value\", \"tuple\", values);\n    }\n\n    assertArgument(coders.length === arrayValues.length, \"types/value length mismatch\", \"tuple\", values);\n\n    let staticWriter = new Writer();\n    let dynamicWriter = new Writer();\n\n    let updateFuncs: Array<(baseOffset: number) => void> = [];\n    coders.forEach((coder, index) => {\n        let value = arrayValues[index];\n\n        if (coder.dynamic) {\n            // Get current dynamic offset (for the future pointer)\n            let dynamicOffset = dynamicWriter.length;\n\n            // Encode the dynamic value into the dynamicWriter\n            coder.encode(dynamicWriter, value);\n\n            // Prepare to populate the correct offset once we are done\n            let updateFunc = staticWriter.writeUpdatableValue();\n            updateFuncs.push((baseOffset: number) => {\n                updateFunc(baseOffset + dynamicOffset);\n            });\n\n        } else {\n            coder.encode(staticWriter, value);\n        }\n    });\n\n    // Backfill all the dynamic offsets, now that we know the static length\n    updateFuncs.forEach((func) => { func(staticWriter.length); });\n\n    let length = writer.appendWriter(staticWriter);\n    length += writer.appendWriter(dynamicWriter);\n    return length;\n}\n\n/**\n *  @_ignore\n */\nexport function unpack(reader: Reader, coders: ReadonlyArray<Coder>): Result {\n    let values: Array<any> = [];\n    let keys: Array<null | string> = [ ];\n\n    // A reader anchored to this base\n    let baseReader = reader.subReader(0);\n\n    coders.forEach((coder) => {\n        let value: any = null;\n\n        if (coder.dynamic) {\n            let offset = reader.readIndex();\n            let offsetReader = baseReader.subReader(offset);\n            try {\n                value = coder.decode(offsetReader);\n            } catch (error: any) {\n                // Cannot recover from this\n                if (isError(error, \"BUFFER_OVERRUN\")) {\n                    throw error;\n                }\n\n                value = error;\n                value.baseType = coder.name;\n                value.name = coder.localName;\n                value.type = coder.type;\n            }\n\n        } else {\n            try {\n                value = coder.decode(reader);\n            } catch (error: any) {\n                // Cannot recover from this\n                if (isError(error, \"BUFFER_OVERRUN\")) {\n                    throw error;\n                }\n\n                value = error;\n                value.baseType = coder.name;\n                value.name = coder.localName;\n                value.type = coder.type;\n            }\n        }\n\n        if (value == undefined) {\n            throw new Error(\"investigate\");\n        }\n\n        values.push(value);\n        keys.push(coder.localName || null);\n    });\n\n    return Result.fromItems(values, keys);\n}\n\n/**\n *  @_ignore\n */\nexport class ArrayCoder extends Coder {\n    readonly coder!: Coder;\n    readonly length!: number;\n\n    constructor(coder: Coder, length: number, localName: string) {\n        const type = (coder.type + \"[\" + (length >= 0 ? length: \"\") + \"]\");\n        const dynamic = (length === -1 || coder.dynamic);\n        super(\"array\", type, localName, dynamic);\n        defineProperties<ArrayCoder>(this, { coder, length });\n    }\n\n    defaultValue(): Array<any> {\n        // Verifies the child coder is valid (even if the array is dynamic or 0-length)\n        const defaultChild = this.coder.defaultValue();\n\n        const result: Array<any> = [];\n        for (let i = 0; i < this.length; i++) {\n            result.push(defaultChild);\n        }\n        return result;\n    }\n\n    encode(writer: Writer, _value: Array<any> | Typed): number {\n        const value = Typed.dereference(_value, \"array\");\n\n        if(!Array.isArray(value)) {\n            this._throwError(\"expected array value\", value);\n        }\n\n        let count = this.length;\n\n        if (count === -1) {\n            count = value.length;\n            writer.writeValue(value.length);\n        }\n\n        assertArgumentCount(value.length, count, \"coder array\" + (this.localName? (\" \"+ this.localName): \"\"));\n\n        let coders: Array<Coder> = [ ];\n        for (let i = 0; i < value.length; i++) { coders.push(this.coder); }\n\n        return pack(writer, coders, value);\n    }\n\n    decode(reader: Reader): any {\n        let count = this.length;\n        if (count === -1) {\n            count = reader.readIndex();\n\n            // Check that there is *roughly* enough data to ensure\n            // stray random data is not being read as a length. Each\n            // slot requires at least 32 bytes for their value (or 32\n            // bytes as a link to the data). This could use a much\n            // tighter bound, but we are erroring on the side of safety.\n            assert(count * WordSize <= reader.dataLength, \"insufficient data length\",\n                \"BUFFER_OVERRUN\", { buffer: reader.bytes, offset: count * WordSize, length: reader.dataLength });\n        }\n        let coders: Array<Coder> = [];\n        for (let i = 0; i < count; i++) { coders.push(new AnonymousCoder(this.coder)); }\n\n        return unpack(reader, coders);\n    }\n}\n\n", "import { Typed } from \"../typed.js\";\nimport { Coder } from \"./abstract-coder.js\";\n\nimport type { Reader, Writer } from \"./abstract-coder.js\";\n\n/**\n *  @_ignore\n */\nexport class BooleanCoder extends Coder {\n\n    constructor(localName: string) {\n        super(\"bool\", \"bool\", localName, false);\n    }\n\n    defaultValue(): boolean {\n        return false;\n    }\n\n    encode(writer: Writer, _value: boolean | Typed): number {\n        const value = Typed.dereference(_value, \"bool\");\n        return writer.writeValue(value ? 1: 0);\n    }\n\n    decode(reader: Reader): any {\n        return !!reader.readValue();\n    }\n}\n", "import { getBytesCopy, hexlify } from \"../../utils/index.js\";\n\nimport { Coder } from \"./abstract-coder.js\";\n\nimport type { Reader, Writer } from \"./abstract-coder.js\";\n\n\n/**\n *  @_ignore\n */\nexport class DynamicBytesCoder extends Coder {\n    constructor(type: string, localName: string) {\n       super(type, type, localName, true);\n    }\n\n    defaultValue(): string {\n        return \"0x\";\n    }\n\n    encode(writer: Writer, value: any): number {\n        value = getBytesCopy(value);\n        let length = writer.writeValue(value.length);\n        length += writer.writeBytes(value);\n        return length;\n    }\n\n    decode(reader: Reader): any {\n        return reader.readBytes(reader.readIndex(), true);\n    }\n}\n\n/**\n *  @_ignore\n */\nexport class BytesCoder extends DynamicBytesCoder {\n    constructor(localName: string) {\n        super(\"bytes\", localName);\n    }\n\n    decode(reader: Reader): any {\n        return hexlify(super.decode(reader));\n    }\n}\n", "\nimport { defineProperties, getBytesCopy, hexlify } from \"../../utils/index.js\";\n\nimport { Typed } from \"../typed.js\";\nimport { Coder } from \"./abstract-coder.js\";\n\nimport type { BytesLike } from \"../../utils/index.js\";\n\nimport type { Reader, Writer } from \"./abstract-coder.js\";\n\n\n/**\n *  @_ignore\n */\nexport class FixedBytesCoder extends Coder {\n    readonly size!: number;\n\n    constructor(size: number, localName: string) {\n        let name = \"bytes\" + String(size);\n        super(name, name, localName, false);\n        defineProperties<FixedBytesCoder>(this, { size }, { size: \"number\" });\n    }\n\n    defaultValue(): string {\n        return (\"0x0000000000000000000000000000000000000000000000000000000000000000\").substring(0, 2 + this.size * 2);\n    }\n\n    encode(writer: Writer, _value: BytesLike | Typed): number {\n        let data = getBytesCopy(Typed.dereference(_value, this.type));\n        if (data.length !== this.size) { this._throwError(\"incorrect data length\", _value); }\n        return writer.writeBytes(data);\n    }\n\n    decode(reader: Reader): any {\n        return hexlify(reader.readBytes(this.size));\n    }\n}\n", "import { Coder } from \"./abstract-coder.js\";\nimport type { Reader, Writer } from \"./abstract-coder.js\";\n\nconst Empty = new Uint8Array([ ]);\n\n/**\n *  @_ignore\n */\nexport class NullCoder extends Coder {\n\n    constructor(localName: string) {\n        super(\"null\", \"\", localName, false);\n    }\n\n    defaultValue(): null {\n        return null;\n    }\n\n    encode(writer: Writer, value: any): number {\n        if (value != null) { this._throwError(\"not null\", value); }\n        return writer.writeBytes(Empty);\n    }\n\n    decode(reader: Reader): any {\n        reader.readBytes(0);\n        return null;\n    }\n}\n", "import {\n    defineProperties, fromTwos, getBigInt, mask, toTwos\n} from \"../../utils/index.js\";\n\nimport { Typed } from \"../typed.js\";\nimport { Coder, WordSize } from \"./abstract-coder.js\";\n\nimport type { BigNumberish } from \"../../utils/index.js\";\n\nimport type { Reader, Writer } from \"./abstract-coder.js\";\n\n\nconst BN_0 = BigInt(0);\nconst BN_1 = BigInt(1);\nconst BN_MAX_UINT256 = BigInt(\"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\");\n\n/**\n *  @_ignore\n */\nexport class NumberCoder extends Coder {\n    readonly size!: number;\n    readonly signed!: boolean;\n\n    constructor(size: number, signed: boolean, localName: string) {\n        const name = ((signed ? \"int\": \"uint\") + (size * 8));\n        super(name, name, localName, false);\n\n        defineProperties<NumberCoder>(this, { size, signed }, { size: \"number\", signed: \"boolean\" });\n    }\n\n    defaultValue(): number {\n        return 0;\n    }\n\n    encode(writer: Writer, _value: BigNumberish | Typed): number {\n        let value = getBigInt(Typed.dereference(_value, this.type));\n\n        // Check bounds are safe for encoding\n        let maxUintValue = mask(BN_MAX_UINT256, WordSize * 8);\n        if (this.signed) {\n            let bounds = mask(maxUintValue, (this.size * 8) - 1);\n            if (value > bounds || value < -(bounds + BN_1)) {\n                this._throwError(\"value out-of-bounds\", _value);\n            }\n            value = toTwos(value, 8 * WordSize);\n        } else if (value < BN_0 || value > mask(maxUintValue, this.size * 8)) {\n            this._throwError(\"value out-of-bounds\", _value);\n        }\n\n        return writer.writeValue(value);\n    }\n\n    decode(reader: Reader): any {\n        let value = mask(reader.readValue(), this.size * 8);\n\n        if (this.signed) {\n            value = fromTwos(value, this.size * 8);\n        }\n\n        return value;\n    }\n}\n\n", "import { toUtf8Bytes, toUtf8String } from \"../../utils/utf8.js\";\n\nimport { Typed } from \"../typed.js\";\nimport { DynamicBytesCoder } from \"./bytes.js\";\n\nimport type { Reader, Writer } from \"./abstract-coder.js\";\n\n\n/**\n *  @_ignore\n */\nexport class StringCoder extends DynamicBytesCoder {\n\n    constructor(localName: string) {\n        super(\"string\", localName);\n    }\n\n    defaultValue(): string {\n        return \"\";\n    }\n\n    encode(writer: Writer, _value: string | Typed): number {\n        return super.encode(writer, toUtf8Bytes(Typed.dereference(_value, \"string\")));\n    }\n\n    decode(reader: Reader): any {\n        return toUtf8String(super.decode(reader));\n    }\n}\n", "import { defineProperties } from \"../../utils/properties.js\";\n\nimport { Typed } from \"../typed.js\";\nimport { Coder } from \"./abstract-coder.js\";\n\nimport { pack, unpack } from \"./array.js\";\n\nimport type { Reader, Writer } from \"./abstract-coder.js\";\n\n/**\n *  @_ignore\n */\nexport class TupleCoder extends Coder {\n    readonly coders!: ReadonlyArray<Coder>;\n\n    constructor(coders: Array<Coder>, localName: string) {\n        let dynamic = false;\n        const types: Array<string> = [];\n        coders.forEach((coder) => {\n            if (coder.dynamic) { dynamic = true; }\n            types.push(coder.type);\n        });\n        const type = (\"tuple(\" + types.join(\",\") + \")\");\n\n        super(\"tuple\", type, localName, dynamic);\n        defineProperties<TupleCoder>(this, { coders: Object.freeze(coders.slice()) });\n    }\n\n    defaultValue(): any {\n        const values: any = [ ];\n        this.coders.forEach((coder) => {\n            values.push(coder.defaultValue());\n        });\n\n        // We only output named properties for uniquely named coders\n        const uniqueNames = this.coders.reduce((accum, coder) => {\n            const name = coder.localName;\n            if (name) {\n                if (!accum[name]) { accum[name] = 0; }\n                accum[name]++;\n            }\n            return accum;\n        }, <{ [ name: string ]: number }>{ });\n\n        // Add named values\n        this.coders.forEach((coder: Coder, index: number) => {\n            let name = coder.localName;\n            if (!name || uniqueNames[name] !== 1) { return; }\n\n            if (name === \"length\") { name = \"_length\"; }\n\n            if (values[name] != null) { return; }\n\n            values[name] = values[index];\n        });\n\n        return Object.freeze(values);\n    }\n\n    encode(writer: Writer, _value: Array<any> | { [ name: string ]: any } | Typed): number {\n        const value = Typed.dereference(_value, \"tuple\");\n        return pack(writer, this.coders, value);\n    }\n\n    decode(reader: Reader): any {\n        return unpack(reader, this.coders);\n    }\n}\n\n", "import { keccak256 } from \"../crypto/index.js\";\nimport { toUtf8Bytes } from \"../utils/index.js\";\n\n/**\n *  A simple hashing function which operates on UTF-8 strings to\n *  compute an 32-byte identifier.\n *\n *  This simply computes the [UTF-8 bytes](toUtf8Bytes) and computes\n *  the [[keccak256]].\n *\n *  @example:\n *    id(\"hello world\")\n *    //_result:\n */\nexport function id(value: string): string {\n    return keccak256(toUtf8Bytes(value));\n}\n", "// created 2023-09-25T01:01:55.148Z\n// compressed base64-encoded blob for include-ens data\n// source: https://github.com/adraffy/ens-normalize.js/blob/main/src/make.js\n// see: https://github.com/adraffy/ens-normalize.js#security\n// SHA-256: 0565ed049b9cf1614bb9e11ba7d8ac6a6fb96c893253d890f7e2b2884b9ded32\nvar COMPRESSED$1 = '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';\nconst FENCED = new Map([[8217,\"apostrophe\"],[8260,\"fraction slash\"],[12539,\"middle dot\"]]);\nconst NSM_MAX = 4;\n\nfunction decode_arithmetic(bytes) {\r\n\tlet pos = 0;\r\n\tfunction u16() { return (bytes[pos++] << 8) | bytes[pos++]; }\r\n\t\r\n\t// decode the frequency table\r\n\tlet symbol_count = u16();\r\n\tlet total = 1;\r\n\tlet acc = [0, 1]; // first symbol has frequency 1\r\n\tfor (let i = 1; i < symbol_count; i++) {\r\n\t\tacc.push(total += u16());\r\n\t}\r\n\r\n\t// skip the sized-payload that the last 3 symbols index into\r\n\tlet skip = u16();\r\n\tlet pos_payload = pos;\r\n\tpos += skip;\r\n\r\n\tlet read_width = 0;\r\n\tlet read_buffer = 0; \r\n\tfunction read_bit() {\r\n\t\tif (read_width == 0) {\r\n\t\t\t// this will read beyond end of buffer\r\n\t\t\t// but (undefined|0) => zero pad\r\n\t\t\tread_buffer = (read_buffer << 8) | bytes[pos++];\r\n\t\t\tread_width = 8;\r\n\t\t}\r\n\t\treturn (read_buffer >> --read_width) & 1;\r\n\t}\r\n\r\n\tconst N = 31;\r\n\tconst FULL = 2**N;\r\n\tconst HALF = FULL >>> 1;\r\n\tconst QRTR = HALF >> 1;\r\n\tconst MASK = FULL - 1;\r\n\r\n\t// fill register\r\n\tlet register = 0;\r\n\tfor (let i = 0; i < N; i++) register = (register << 1) | read_bit();\r\n\r\n\tlet symbols = [];\r\n\tlet low = 0;\r\n\tlet range = FULL; // treat like a float\r\n\twhile (true) {\r\n\t\tlet value = Math.floor((((register - low + 1) * total) - 1) / range);\r\n\t\tlet start = 0;\r\n\t\tlet end = symbol_count;\r\n\t\twhile (end - start > 1) { // binary search\r\n\t\t\tlet mid = (start + end) >>> 1;\r\n\t\t\tif (value < acc[mid]) {\r\n\t\t\t\tend = mid;\r\n\t\t\t} else {\r\n\t\t\t\tstart = mid;\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (start == 0) break; // first symbol is end mark\r\n\t\tsymbols.push(start);\r\n\t\tlet a = low + Math.floor(range * acc[start]   / total);\r\n\t\tlet b = low + Math.floor(range * acc[start+1] / total) - 1;\r\n\t\twhile (((a ^ b) & HALF) == 0) {\r\n\t\t\tregister = (register << 1) & MASK | read_bit();\r\n\t\t\ta = (a << 1) & MASK;\r\n\t\t\tb = (b << 1) & MASK | 1;\r\n\t\t}\r\n\t\twhile (a & ~b & QRTR) {\r\n\t\t\tregister = (register & HALF) | ((register << 1) & (MASK >>> 1)) | read_bit();\r\n\t\t\ta = (a << 1) ^ HALF;\r\n\t\t\tb = ((b ^ HALF) << 1) | HALF | 1;\r\n\t\t}\r\n\t\tlow = a;\r\n\t\trange = 1 + b - a;\r\n\t}\r\n\tlet offset = symbol_count - 4;\r\n\treturn symbols.map(x => { // index into payload\r\n\t\tswitch (x - offset) {\r\n\t\t\tcase 3: return offset + 0x10100 + ((bytes[pos_payload++] << 16) | (bytes[pos_payload++] << 8) | bytes[pos_payload++]);\r\n\t\t\tcase 2: return offset + 0x100 + ((bytes[pos_payload++] << 8) | bytes[pos_payload++]);\r\n\t\t\tcase 1: return offset + bytes[pos_payload++];\r\n\t\t\tdefault: return x - 1;\r\n\t\t}\r\n\t});\r\n}\t\r\n\r\n// returns an iterator which returns the next symbol\r\nfunction read_payload(v) {\r\n\tlet pos = 0;\r\n\treturn () => v[pos++];\r\n}\r\nfunction read_compressed_payload(s) {\r\n\treturn read_payload(decode_arithmetic(unsafe_atob(s)));\r\n}\r\n\r\n// unsafe in the sense:\r\n// expected well-formed Base64 w/o padding \r\n// 20220922: added for https://github.com/adraffy/ens-normalize.js/issues/4\r\nfunction unsafe_atob(s) {\r\n\tlet lookup = [];\r\n\t[...'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'].forEach((c, i) => lookup[c.charCodeAt(0)] = i);\r\n\tlet n = s.length;\r\n\tlet ret = new Uint8Array((6 * n) >> 3);\r\n\tfor (let i = 0, pos = 0, width = 0, carry = 0; i < n; i++) {\r\n\t\tcarry = (carry << 6) | lookup[s.charCodeAt(i)];\r\n\t\twidth += 6;\r\n\t\tif (width >= 8) {\r\n\t\t\tret[pos++] = (carry >> (width -= 8));\r\n\t\t}\r\n\t}\r\n\treturn ret;\r\n}\r\n\r\n// eg. [0,1,2,3...] => [0,-1,1,-2,...]\r\nfunction signed(i) { \r\n\treturn (i & 1) ? (~i >> 1) : (i >> 1);\r\n}\r\n\r\nfunction read_deltas(n, next) {\r\n\tlet v = Array(n);\r\n\tfor (let i = 0, x = 0; i < n; i++) v[i] = x += signed(next());\r\n\treturn v;\r\n}\r\n\r\n// [123][5] => [0 3] [1 1] [0 0]\r\nfunction read_sorted(next, prev = 0) {\r\n\tlet ret = [];\r\n\twhile (true) {\r\n\t\tlet x = next();\r\n\t\tlet n = next();\r\n\t\tif (!n) break;\r\n\t\tprev += x;\r\n\t\tfor (let i = 0; i < n; i++) {\r\n\t\t\tret.push(prev + i);\r\n\t\t}\r\n\t\tprev += n + 1;\r\n\t}\r\n\treturn ret;\r\n}\r\n\r\nfunction read_sorted_arrays(next) {\r\n\treturn read_array_while(() => { \r\n\t\tlet v = read_sorted(next);\r\n\t\tif (v.length) return v;\r\n\t});\r\n}\r\n\r\n// returns map of x => ys\r\nfunction read_mapped(next) {\r\n\tlet ret = [];\r\n\twhile (true) {\r\n\t\tlet w = next();\r\n\t\tif (w == 0) break;\r\n\t\tret.push(read_linear_table(w, next));\r\n\t}\r\n\twhile (true) {\r\n\t\tlet w = next() - 1;\r\n\t\tif (w < 0) break;\r\n\t\tret.push(read_replacement_table(w, next));\r\n\t}\r\n\treturn ret.flat();\r\n}\r\n\r\n// read until next is falsy\r\n// return array of read values\r\nfunction read_array_while(next) {\r\n\tlet v = [];\r\n\twhile (true) {\r\n\t\tlet x = next(v.length);\r\n\t\tif (!x) break;\r\n\t\tv.push(x);\r\n\t}\r\n\treturn v;\r\n}\r\n\r\n// read w columns of length n\r\n// return as n rows of length w\r\nfunction read_transposed(n, w, next) {\r\n\tlet m = Array(n).fill().map(() => []);\r\n\tfor (let i = 0; i < w; i++) {\r\n\t\tread_deltas(n, next).forEach((x, j) => m[j].push(x));\r\n\t}\r\n\treturn m;\r\n}\r\n \r\n// returns [[x, ys], [x+dx, ys+dy], [x+2*dx, ys+2*dy], ...]\r\n// where dx/dy = steps, n = run size, w = length of y\r\nfunction read_linear_table(w, next) {\r\n\tlet dx = 1 + next();\r\n\tlet dy = next();\r\n\tlet vN = read_array_while(next);\r\n\tlet m = read_transposed(vN.length, 1+w, next);\r\n\treturn m.flatMap((v, i) => {\r\n\t\tlet [x, ...ys] = v;\r\n\t\treturn Array(vN[i]).fill().map((_, j) => {\r\n\t\t\tlet j_dy = j * dy;\r\n\t\t\treturn [x + j * dx, ys.map(y => y + j_dy)];\r\n\t\t});\r\n\t});\r\n}\r\n\r\n// return [[x, ys...], ...]\r\n// where w = length of y\r\nfunction read_replacement_table(w, next) { \r\n\tlet n = 1 + next();\r\n\tlet m = read_transposed(n, 1+w, next);\r\n\treturn m.map(v => [v[0], v.slice(1)]);\r\n}\r\n\r\n\r\nfunction read_trie(next) {\r\n\tlet ret = [];\r\n\tlet sorted = read_sorted(next); \r\n\texpand(decode([]), []);\r\n\treturn ret; // not sorted\r\n\tfunction decode(Q) { // characters that lead into this node\r\n\t\tlet S = next(); // state: valid, save, check\r\n\t\tlet B = read_array_while(() => { // buckets leading to new nodes\r\n\t\t\tlet cps = read_sorted(next).map(i => sorted[i]);\r\n\t\t\tif (cps.length) return decode(cps);\r\n\t\t});\r\n\t\treturn {S, B, Q};\r\n\t}\r\n\tfunction expand({S, B}, cps, saved) {\r\n\t\tif (S & 4 && saved === cps[cps.length-1]) return;\r\n\t\tif (S & 2) saved = cps[cps.length-1];\r\n\t\tif (S & 1) ret.push(cps); \r\n\t\tfor (let br of B) {\r\n\t\t\tfor (let cp of br.Q) {\r\n\t\t\t\texpand(br, [...cps, cp], saved);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\n\nfunction hex_cp(cp) {\r\n\treturn cp.toString(16).toUpperCase().padStart(2, '0');\r\n}\r\n\r\nfunction quote_cp(cp) {\r\n\treturn `{${hex_cp(cp)}}`; // raffy convention: like \"\\u{X}\" w/o the \"\\u\"\r\n}\r\n\r\n/*\r\nexport function explode_cp(s) {\r\n\treturn [...s].map(c => c.codePointAt(0));\r\n}\r\n*/\r\nfunction explode_cp(s) { // this is about 2x faster\r\n\tlet cps = [];\r\n\tfor (let pos = 0, len = s.length; pos < len; ) {\r\n\t\tlet cp = s.codePointAt(pos);\r\n\t\tpos += cp < 0x10000 ? 1 : 2;\r\n\t\tcps.push(cp);\r\n\t}\r\n\treturn cps;\r\n}\r\n\r\nfunction str_from_cps(cps) {\r\n\tconst chunk = 4096;\r\n\tlet len = cps.length;\r\n\tif (len < chunk) return String.fromCodePoint(...cps);\r\n\tlet buf = [];\r\n\tfor (let i = 0; i < len; ) {\r\n\t\tbuf.push(String.fromCodePoint(...cps.slice(i, i += chunk)));\r\n\t}\r\n\treturn buf.join('');\r\n}\r\n\r\nfunction compare_arrays(a, b) {\r\n\tlet n = a.length;\r\n\tlet c = n - b.length;\r\n\tfor (let i = 0; c == 0 && i < n; i++) c = a[i] - b[i];\r\n\treturn c;\r\n}\n\n// created 2023-09-25T01:01:55.148Z\n// compressed base64-encoded blob for include-nf data\n// source: https://github.com/adraffy/ens-normalize.js/blob/main/src/make.js\n// see: https://github.com/adraffy/ens-normalize.js#security\n// SHA-256: a974b6f8541fc29d919bc85118af0a44015851fab5343f8679cb31be2bdb209e\nvar COMPRESSED = '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';\n\n// https://unicode.org/reports/tr15/\r\n// for reference implementation\r\n// see: /derive/nf.js\r\n\r\n\r\n// algorithmic hangul\r\n// https://www.unicode.org/versions/Unicode15.0.0/ch03.pdf (page 144)\r\nconst S0 = 0xAC00;\r\nconst L0 = 0x1100;\r\nconst V0 = 0x1161;\r\nconst T0 = 0x11A7;\r\nconst L_COUNT = 19;\r\nconst V_COUNT = 21;\r\nconst T_COUNT = 28;\r\nconst N_COUNT = V_COUNT * T_COUNT;\r\nconst S_COUNT = L_COUNT * N_COUNT;\r\nconst S1 = S0 + S_COUNT;\r\nconst L1 = L0 + L_COUNT;\r\nconst V1 = V0 + V_COUNT;\r\nconst T1 = T0 + T_COUNT;\r\n\r\nfunction unpack_cc(packed) {\r\n\treturn (packed >> 24) & 0xFF;\r\n}\r\nfunction unpack_cp(packed) {\r\n\treturn packed & 0xFFFFFF;\r\n}\r\n\r\nlet SHIFTED_RANK, EXCLUSIONS, DECOMP, RECOMP;\r\n\r\nfunction init$1() {\r\n\t//console.time('nf');\r\n\tlet r = read_compressed_payload(COMPRESSED);\r\n\tSHIFTED_RANK = new Map(read_sorted_arrays(r).flatMap((v, i) => v.map(x => [x, (i+1) << 24]))); // pre-shifted\r\n\tEXCLUSIONS = new Set(read_sorted(r));\r\n\tDECOMP = new Map();\r\n\tRECOMP = new Map();\r\n\tfor (let [cp, cps] of read_mapped(r)) {\r\n\t\tif (!EXCLUSIONS.has(cp) && cps.length == 2) {\r\n\t\t\tlet [a, b] = cps;\r\n\t\t\tlet bucket = RECOMP.get(a);\r\n\t\t\tif (!bucket) {\r\n\t\t\t\tbucket = new Map();\r\n\t\t\t\tRECOMP.set(a, bucket);\r\n\t\t\t}\r\n\t\t\tbucket.set(b, cp);\r\n\t\t}\r\n\t\tDECOMP.set(cp, cps.reverse()); // stored reversed\r\n\t}\r\n\t//console.timeEnd('nf');\r\n\t// 20230905: 11ms\r\n}\r\n\r\nfunction is_hangul(cp) {\r\n\treturn cp >= S0 && cp < S1;\r\n}\r\n\r\nfunction compose_pair(a, b) {\r\n\tif (a >= L0 && a < L1 && b >= V0 && b < V1) {\r\n\t\treturn S0 + (a - L0) * N_COUNT + (b - V0) * T_COUNT;\r\n\t} else if (is_hangul(a) && b > T0 && b < T1 && (a - S0) % T_COUNT == 0) {\r\n\t\treturn a + (b - T0);\r\n\t} else {\r\n\t\tlet recomp = RECOMP.get(a);\r\n\t\tif (recomp) {\r\n\t\t\trecomp = recomp.get(b);\r\n\t\t\tif (recomp) {\r\n\t\t\t\treturn recomp;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn -1;\r\n\t}\r\n}\r\n\r\nfunction decomposed(cps) {\r\n\tif (!SHIFTED_RANK) init$1();\r\n\tlet ret = [];\r\n\tlet buf = [];\r\n\tlet check_order = false;\r\n\tfunction add(cp) {\r\n\t\tlet cc = SHIFTED_RANK.get(cp);\r\n\t\tif (cc) {\r\n\t\t\tcheck_order = true;\r\n\t\t\tcp |= cc;\r\n\t\t}\r\n\t\tret.push(cp);\r\n\t}\r\n\tfor (let cp of cps) {\r\n\t\twhile (true) {\r\n\t\t\tif (cp < 0x80) {\r\n\t\t\t\tret.push(cp);\r\n\t\t\t} else if (is_hangul(cp)) {\r\n\t\t\t\tlet s_index = cp - S0;\r\n\t\t\t\tlet l_index = s_index / N_COUNT | 0;\r\n\t\t\t\tlet v_index = (s_index % N_COUNT) / T_COUNT | 0;\r\n\t\t\t\tlet t_index = s_index % T_COUNT;\r\n\t\t\t\tadd(L0 + l_index);\r\n\t\t\t\tadd(V0 + v_index);\r\n\t\t\t\tif (t_index > 0) add(T0 + t_index);\r\n\t\t\t} else {\r\n\t\t\t\tlet mapped = DECOMP.get(cp);\r\n\t\t\t\tif (mapped) {\r\n\t\t\t\t\tbuf.push(...mapped);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tadd(cp);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (!buf.length) break;\r\n\t\t\tcp = buf.pop();\r\n\t\t}\r\n\t}\r\n\tif (check_order && ret.length > 1) {\r\n\t\tlet prev_cc = unpack_cc(ret[0]);\r\n\t\tfor (let i = 1; i < ret.length; i++) {\r\n\t\t\tlet cc = unpack_cc(ret[i]);\r\n\t\t\tif (cc == 0 || prev_cc <= cc) {\r\n\t\t\t\tprev_cc = cc;\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\t\t\tlet j = i-1;\r\n\t\t\twhile (true) {\r\n\t\t\t\tlet tmp = ret[j+1];\r\n\t\t\t\tret[j+1] = ret[j];\r\n\t\t\t\tret[j] = tmp;\r\n\t\t\t\tif (!j) break;\r\n\t\t\t\tprev_cc = unpack_cc(ret[--j]);\r\n\t\t\t\tif (prev_cc <= cc) break;\r\n\t\t\t}\r\n\t\t\tprev_cc = unpack_cc(ret[i]);\r\n\t\t}\r\n\t}\r\n\treturn ret;\r\n}\r\n\r\nfunction composed_from_decomposed(v) {\r\n\tlet ret = [];\r\n\tlet stack = [];\r\n\tlet prev_cp = -1;\r\n\tlet prev_cc = 0;\r\n\tfor (let packed of v) {\r\n\t\tlet cc = unpack_cc(packed);\r\n\t\tlet cp = unpack_cp(packed);\r\n\t\tif (prev_cp == -1) {\r\n\t\t\tif (cc == 0) {\r\n\t\t\t\tprev_cp = cp;\r\n\t\t\t} else {\r\n\t\t\t\tret.push(cp);\r\n\t\t\t}\r\n\t\t} else if (prev_cc > 0 && prev_cc >= cc) {\r\n\t\t\tif (cc == 0) {\r\n\t\t\t\tret.push(prev_cp, ...stack);\r\n\t\t\t\tstack.length = 0;\r\n\t\t\t\tprev_cp = cp;\r\n\t\t\t} else {\r\n\t\t\t\tstack.push(cp);\r\n\t\t\t}\r\n\t\t\tprev_cc = cc;\r\n\t\t} else {\r\n\t\t\tlet composed = compose_pair(prev_cp, cp);\r\n\t\t\tif (composed >= 0) {\r\n\t\t\t\tprev_cp = composed;\r\n\t\t\t} else if (prev_cc == 0 && cc == 0) {\r\n\t\t\t\tret.push(prev_cp);\r\n\t\t\t\tprev_cp = cp;\r\n\t\t\t} else {\r\n\t\t\t\tstack.push(cp);\r\n\t\t\t\tprev_cc = cc;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\tif (prev_cp >= 0) {\r\n\t\tret.push(prev_cp, ...stack);\t\r\n\t}\r\n\treturn ret;\r\n}\r\n\r\n// note: cps can be iterable\r\nfunction nfd(cps) {\r\n\treturn decomposed(cps).map(unpack_cp);\r\n}\r\nfunction nfc(cps) {\r\n\treturn composed_from_decomposed(decomposed(cps));\r\n}\n\nconst HYPHEN = 0x2D;\r\nconst STOP = 0x2E;\r\nconst STOP_CH = '.';\r\nconst FE0F = 0xFE0F;\r\nconst UNIQUE_PH = 1;\r\n\r\n// 20230913: replace [...v] with Array_from(v) to avoid large spreads\r\nconst Array_from = x => Array.from(x); // Array.from.bind(Array);\r\n\r\nfunction group_has_cp(g, cp) {\r\n\t// 20230913: keep primary and secondary distinct instead of creating valid union\r\n\treturn g.P.has(cp) || g.Q.has(cp);\r\n}\r\n\r\nclass Emoji extends Array {\r\n\tget is_emoji() { return true; } // free tagging system\r\n}\r\n\r\nlet MAPPED, IGNORED, CM, NSM, ESCAPE, NFC_CHECK, GROUPS, WHOLE_VALID, WHOLE_MAP, VALID, EMOJI_LIST, EMOJI_ROOT;\r\n\r\nfunction init() {\r\n\tif (MAPPED) return;\r\n\t\r\n\tlet r = read_compressed_payload(COMPRESSED$1);\r\n\tconst read_sorted_array = () => read_sorted(r);\r\n\tconst read_sorted_set = () => new Set(read_sorted_array());\r\n\tconst set_add_many = (set, v) => v.forEach(x => set.add(x));\r\n\r\n\tMAPPED = new Map(read_mapped(r)); \r\n\tIGNORED = read_sorted_set(); // ignored characters are not valid, so just read raw codepoints\r\n\r\n\t/*\r\n\t// direct include from payload is smaller than the decompression code\r\n\tconst FENCED = new Map(read_array_while(() => {\r\n\t\tlet cp = r();\r\n\t\tif (cp) return [cp, read_str(r())];\r\n\t}));\r\n\t*/\r\n\t// 20230217: we still need all CM for proper error formatting\r\n\t// but norm only needs NSM subset that are potentially-valid\r\n\tCM = read_sorted_array();\r\n\tNSM = new Set(read_sorted_array().map(i => CM[i]));\r\n\tCM = new Set(CM);\r\n\t\r\n\tESCAPE = read_sorted_set(); // characters that should not be printed\r\n\tNFC_CHECK = read_sorted_set(); // only needed to illustrate ens_tokenize() transformations\r\n\r\n\tlet chunks = read_sorted_arrays(r);\r\n\tlet unrestricted = r();\r\n\t//const read_chunked = () => new Set(read_sorted_array().flatMap(i => chunks[i]).concat(read_sorted_array()));\r\n\tconst read_chunked = () => {\r\n\t\t// 20230921: build set in parts, 2x faster\r\n\t\tlet set = new Set();\r\n\t\tread_sorted_array().forEach(i => set_add_many(set, chunks[i]));\r\n\t\tset_add_many(set, read_sorted_array());\r\n\t\treturn set; \r\n\t};\r\n\tGROUPS = read_array_while(i => {\r\n\t\t// minifier property mangling seems unsafe\r\n\t\t// so these are manually renamed to single chars\r\n\t\tlet N = read_array_while(r).map(x => x+0x60);\r\n\t\tif (N.length) {\r\n\t\t\tlet R = i >= unrestricted; // unrestricted then restricted\r\n\t\t\tN[0] -= 32; // capitalize\r\n\t\t\tN = str_from_cps(N);\r\n\t\t\tif (R) N=`Restricted[${N}]`;\r\n\t\t\tlet P = read_chunked(); // primary\r\n\t\t\tlet Q = read_chunked(); // secondary\r\n\t\t\tlet M = !r(); // not-whitelisted, check for NSM\r\n\t\t\t// *** this code currently isn't needed ***\r\n\t\t\t/*\r\n\t\t\tlet V = [...P, ...Q].sort((a, b) => a-b); // derive: sorted valid\r\n\t\t\tlet M = r()-1; // number of combining mark\r\n\t\t\tif (M < 0) { // whitelisted\r\n\t\t\t\tM = new Map(read_array_while(() => {\r\n\t\t\t\t\tlet i = r();\r\n\t\t\t\t\tif (i) return [V[i-1], read_array_while(() => {\r\n\t\t\t\t\t\tlet v = read_array_while(r);\r\n\t\t\t\t\t\tif (v.length) return v.map(x => x-1);\r\n\t\t\t\t\t})];\r\n\t\t\t\t}));\r\n\t\t\t}*/\r\n\t\t\treturn {N, P, Q, M, R};\r\n\t\t}\r\n\t});\r\n\r\n\t// decode compressed wholes\r\n\tWHOLE_VALID = read_sorted_set();\r\n\tWHOLE_MAP = new Map();\r\n\tlet wholes = read_sorted_array().concat(Array_from(WHOLE_VALID)).sort((a, b) => a-b); // must be sorted\r\n\twholes.forEach((cp, i) => {\r\n\t\tlet d = r(); \r\n\t\tlet w = wholes[i] = d ? wholes[i-d] : {V: [], M: new Map()};\r\n\t\tw.V.push(cp); // add to member set\r\n\t\tif (!WHOLE_VALID.has(cp)) {\r\n\t\t\tWHOLE_MAP.set(cp, w);  // register with whole map\r\n\t\t}\r\n\t});\r\n\r\n\t// compute confusable-extent complements\r\n\t// usage: WHOLE_MAP.get(cp).M.get(cp) = complement set\r\n\tfor (let {V, M} of new Set(WHOLE_MAP.values())) {\r\n\t\t// connect all groups that have each whole character\r\n\t\tlet recs = [];\r\n\t\tfor (let cp of V) {\r\n\t\t\tlet gs = GROUPS.filter(g => group_has_cp(g, cp));\r\n\t\t\tlet rec = recs.find(({G}) => gs.some(g => G.has(g)));\r\n\t\t\tif (!rec) {\r\n\t\t\t\trec = {G: new Set(), V: []};\r\n\t\t\t\trecs.push(rec);\r\n\t\t\t}\r\n\t\t\trec.V.push(cp);\r\n\t\t\tset_add_many(rec.G, gs);\r\n\t\t}\r\n\t\t// per character cache groups which are not a member of the extent\r\n\t\tlet union = recs.flatMap(x => Array_from(x.G)); // all of the groups used by this whole\r\n\t\tfor (let {G, V} of recs) {\r\n\t\t\tlet complement = new Set(union.filter(g => !G.has(g))); // groups not covered by the extent\r\n\t\t\tfor (let cp of V) {\r\n\t\t\t\tM.set(cp, complement); // this is the same reference\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t// compute valid set\r\n\t// 20230924: VALID was union but can be re-used\r\n\tVALID = new Set(); // exists in 1+ groups\r\n\tlet multi = new Set(); // exists in 2+ groups\r\n\tconst add_to_union = cp => VALID.has(cp) ? multi.add(cp) : VALID.add(cp);\r\n\tfor (let g of GROUPS) {\r\n\t\tfor (let cp of g.P) add_to_union(cp);\r\n\t\tfor (let cp of g.Q) add_to_union(cp);\r\n\t}\r\n\t// dual purpose WHOLE_MAP: return placeholder if unique non-confusable\r\n\tfor (let cp of VALID) {\r\n\t\tif (!WHOLE_MAP.has(cp) && !multi.has(cp)) {\r\n\t\t\tWHOLE_MAP.set(cp, UNIQUE_PH);\r\n\t\t}\r\n\t}\r\n\t// add all decomposed parts\r\n\t// see derive: \"Valid is Closed (via Brute-force)\"\r\n\tset_add_many(VALID, nfd(VALID));\r\n\t\r\n\t// decode emoji\r\n\t// 20230719: emoji are now fully-expanded to avoid quirk logic \r\n\tEMOJI_LIST = read_trie(r).map(v => Emoji.from(v)).sort(compare_arrays);\r\n\tEMOJI_ROOT = new Map(); // this has approx 7K nodes (2+ per emoji)\r\n\tfor (let cps of EMOJI_LIST) {\r\n\t\t// 20230719: change to *slightly* stricter algorithm which disallows \r\n\t\t// insertion of misplaced FE0F in emoji sequences (matching ENSIP-15)\r\n\t\t// example: beautified [A B] (eg. flag emoji) \r\n\t\t//  before: allow: [A FE0F B], error: [A FE0F FE0F B] \r\n\t\t//   after: error: both\r\n\t\t// note: this code now matches ENSNormalize.{cs,java} logic\r\n\t\tlet prev = [EMOJI_ROOT];\r\n\t\tfor (let cp of cps) {\r\n\t\t\tlet next = prev.map(node => {\r\n\t\t\t\tlet child = node.get(cp);\r\n\t\t\t\tif (!child) {\r\n\t\t\t\t\t// should this be object? \r\n\t\t\t\t\t// (most have 1-2 items, few have many)\r\n\t\t\t\t\t// 20230719: no, v8 default map is 4?\r\n\t\t\t\t\tchild = new Map();\r\n\t\t\t\t\tnode.set(cp, child);\r\n\t\t\t\t}\r\n\t\t\t\treturn child;\r\n\t\t\t});\r\n\t\t\tif (cp === FE0F) {\r\n\t\t\t\tprev.push(...next); // less than 20 elements\r\n\t\t\t} else {\r\n\t\t\t\tprev = next;\r\n\t\t\t}\r\n\t\t}\r\n\t\tfor (let x of prev) {\r\n\t\t\tx.V = cps;\r\n\t\t}\r\n\t}\r\n}\r\n\r\n// if escaped: {HEX}\r\n//       else: \"x\" {HEX}\r\nfunction quoted_cp(cp) {\r\n\treturn (should_escape(cp) ? '' : `${bidi_qq(safe_str_from_cps([cp]))} `) + quote_cp(cp);\r\n}\r\n\r\n// 20230211: some messages can be mixed-directional and result in spillover\r\n// use 200E after a quoted string to force the remainder of a string from \r\n// acquring the direction of the quote\r\n// https://www.w3.org/International/questions/qa-bidi-unicode-controls#exceptions\r\nfunction bidi_qq(s) {\r\n\treturn `\"${s}\"\\u200E`; // strong LTR\r\n}\r\n\r\nfunction check_label_extension(cps) {\r\n\tif (cps.length >= 4 && cps[2] == HYPHEN && cps[3] == HYPHEN) {\r\n\t\tthrow new Error(`invalid label extension: \"${str_from_cps(cps.slice(0, 4))}\"`); // this can only be ascii so cant be bidi\r\n\t}\r\n}\r\nfunction check_leading_underscore(cps) {\r\n\tconst UNDERSCORE = 0x5F;\r\n\tfor (let i = cps.lastIndexOf(UNDERSCORE); i > 0; ) {\r\n\t\tif (cps[--i] !== UNDERSCORE) {\r\n\t\t\tthrow new Error('underscore allowed only at start');\r\n\t\t}\r\n\t}\r\n}\r\n// check that a fenced cp is not leading, trailing, or touching another fenced cp\r\nfunction check_fenced(cps) {\r\n\tlet cp = cps[0];\r\n\tlet prev = FENCED.get(cp);\r\n\tif (prev) throw error_placement(`leading ${prev}`);\r\n\tlet n = cps.length;\r\n\tlet last = -1; // prevents trailing from throwing\r\n\tfor (let i = 1; i < n; i++) {\r\n\t\tcp = cps[i];\r\n\t\tlet match = FENCED.get(cp);\r\n\t\tif (match) {\r\n\t\t\t// since cps[0] isn't fenced, cps[1] cannot throw\r\n\t\t\tif (last == i) throw error_placement(`${prev} + ${match}`);\r\n\t\t\tlast = i + 1;\r\n\t\t\tprev = match;\r\n\t\t}\r\n\t}\r\n\tif (last == n) throw error_placement(`trailing ${prev}`);\r\n}\r\n\r\n// create a safe to print string \r\n// invisibles are escaped\r\n// leading cm uses placeholder\r\n// if cps exceed max, middle truncate with ellipsis\r\n// quoter(cp) => string, eg. 3000 => \"{3000}\"\r\n// note: in html, you'd call this function then replace [<>&] with entities\r\nfunction safe_str_from_cps(cps, max = Infinity, quoter = quote_cp) {\r\n\t//if (Number.isInteger(cps)) cps = [cps];\r\n\t//if (!Array.isArray(cps)) throw new TypeError(`expected codepoints`);\r\n\tlet buf = [];\r\n\tif (is_combining_mark(cps[0])) buf.push('\u25CC');\r\n\tif (cps.length > max) {\r\n\t\tmax >>= 1;\r\n\t\tcps = [...cps.slice(0, max), 0x2026, ...cps.slice(-max)];\r\n\t}\r\n\tlet prev = 0;\r\n\tlet n = cps.length;\r\n\tfor (let i = 0; i < n; i++) {\r\n\t\tlet cp = cps[i];\r\n\t\tif (should_escape(cp)) {\r\n\t\t\tbuf.push(str_from_cps(cps.slice(prev, i)));\r\n\t\t\tbuf.push(quoter(cp));\r\n\t\t\tprev = i + 1;\r\n\t\t}\r\n\t}\r\n\tbuf.push(str_from_cps(cps.slice(prev, n)));\r\n\treturn buf.join('');\r\n}\r\n\r\n// note: set(s) cannot be exposed because they can be modified\r\n// note: Object.freeze() doesn't work\r\nfunction is_combining_mark(cp) {\r\n\tinit();\r\n\treturn CM.has(cp);\r\n}\r\nfunction should_escape(cp) {\r\n\tinit();\r\n\treturn ESCAPE.has(cp);\r\n}\r\n\r\n// return all supported emoji as fully-qualified emoji \r\n// ordered by length then lexicographic \r\nfunction ens_emoji() {\r\n\tinit();\r\n\treturn EMOJI_LIST.map(x => x.slice()); // emoji are exposed so copy\r\n}\r\n\r\nfunction ens_normalize_fragment(frag, decompose) {\r\n\tinit();\r\n\tlet nf = decompose ? nfd : nfc;\r\n\treturn frag.split(STOP_CH).map(label => str_from_cps(tokens_from_str(explode_cp(label), nf, filter_fe0f).flat())).join(STOP_CH);\r\n}\r\n\r\nfunction ens_normalize(name) {\r\n\treturn flatten(split(name, nfc, filter_fe0f));\r\n}\r\n\r\nfunction ens_beautify(name) {\r\n\tlet labels = split(name, nfc, x => x); // emoji not exposed\r\n\tfor (let {type, output, error} of labels) {\r\n\t\tif (error) break; // flatten will throw\r\n\r\n\t\t// replace leading/trailing hyphen\r\n\t\t// 20230121: consider beautifing all or leading/trailing hyphen to unicode variant\r\n\t\t// not exactly the same in every font, but very similar: \"-\" vs \"\u2010\"\r\n\t\t/*\r\n\t\tconst UNICODE_HYPHEN = 0x2010;\r\n\t\t// maybe this should replace all for visual consistancy?\r\n\t\t// `node tools/reg-count.js regex ^-\\{2,\\}` => 592\r\n\t\t//for (let i = 0; i < output.length; i++) if (output[i] == 0x2D) output[i] = 0x2010;\r\n\t\tif (output[0] == HYPHEN) output[0] = UNICODE_HYPHEN;\r\n\t\tlet end = output.length-1;\r\n\t\tif (output[end] == HYPHEN) output[end] = UNICODE_HYPHEN;\r\n\t\t*/\r\n\t\t// 20230123: WHATWG URL uses \"CheckHyphens\" false\r\n\t\t// https://url.spec.whatwg.org/#idna\r\n\r\n\t\t// update ethereum symbol\r\n\t\t// \u03BE => \u039E if not greek\r\n\t\tif (type !== 'Greek') array_replace(output, 0x3BE, 0x39E);\r\n\r\n\t\t// 20221213: fixes bidi subdomain issue, but breaks invariant (200E is disallowed)\r\n\t\t// could be fixed with special case for: 2D (.) + 200E (LTR)\r\n\t\t// https://discuss.ens.domains/t/bidi-label-ordering-spoof/15824\r\n\t\t//output.splice(0, 0, 0x200E);\r\n\t}\r\n\treturn flatten(labels);\r\n}\r\n\r\nfunction array_replace(v, a, b) {\r\n\tlet prev = 0;\r\n\twhile (true) {\r\n\t\tlet next = v.indexOf(a, prev);\r\n\t\tif (next < 0) break;\r\n\t\tv[next] = b; \r\n\t\tprev = next + 1;\r\n\t}\r\n}\r\n\r\nfunction ens_split(name, preserve_emoji) {\r\n\treturn split(name, nfc, preserve_emoji ? x => x.slice() : filter_fe0f); // emoji are exposed so copy\r\n}\r\n\r\nfunction split(name, nf, ef) {\r\n\tif (!name) return []; // 20230719: empty name allowance\r\n\tinit();\r\n\tlet offset = 0;\r\n\t// https://unicode.org/reports/tr46/#Validity_Criteria\r\n\t// 4.) \"The label must not contain a U+002E ( . ) FULL STOP.\"\r\n\treturn name.split(STOP_CH).map(label => {\r\n\t\tlet input = explode_cp(label);\r\n\t\tlet info = {\r\n\t\t\tinput,\r\n\t\t\toffset, // codepoint, not substring!\r\n\t\t};\r\n\t\toffset += input.length + 1; // + stop\r\n\t\ttry {\r\n\t\t\t// 1.) \"The label must be in Unicode Normalization Form NFC\"\r\n\t\t\tlet tokens = info.tokens = tokens_from_str(input, nf, ef);\r\n\t\t\tlet token_count = tokens.length;\r\n\t\t\tlet type;\r\n\t\t\tif (!token_count) { // the label was effectively empty (could of had ignored characters)\r\n\t\t\t\t//norm = [];\r\n\t\t\t\t//type = 'None'; // use this instead of next match, \"ASCII\"\r\n\t\t\t\t// 20230120: change to strict\r\n\t\t\t\t// https://discuss.ens.domains/t/ens-name-normalization-2nd/14564/59\r\n\t\t\t\tthrow new Error(`empty label`);\r\n\t\t\t} \r\n\t\t\tlet norm = info.output = tokens.flat();\r\n\t\t\tcheck_leading_underscore(norm);\r\n\t\t\tlet emoji = info.emoji = token_count > 1 || tokens[0].is_emoji; // same as: tokens.some(x => x.is_emoji);\r\n\t\t\tif (!emoji && norm.every(cp => cp < 0x80)) { // special case for ascii\r\n\t\t\t\t// 20230123: matches matches WHATWG, see note 3.3\r\n\t\t\t\tcheck_label_extension(norm); // only needed for ascii\r\n\t\t\t\t// cant have fenced\r\n\t\t\t\t// cant have cm\r\n\t\t\t\t// cant have wholes\r\n\t\t\t\t// see derive: \"Fastpath ASCII\"\r\n\t\t\t\ttype = 'ASCII';\r\n\t\t\t} else {\r\n\t\t\t\tlet chars = tokens.flatMap(x => x.is_emoji ? [] : x); // all of the nfc tokens concat together\r\n\t\t\t\tif (!chars.length) { // theres no text, just emoji\r\n\t\t\t\t\ttype = 'Emoji';\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// 5.) \"The label must not begin with a combining mark, that is: General_Category=Mark.\"\r\n\t\t\t\t\tif (CM.has(norm[0])) throw error_placement('leading combining mark');\r\n\t\t\t\t\tfor (let i = 1; i < token_count; i++) { // we've already checked the first token\r\n\t\t\t\t\t\tlet cps = tokens[i];\r\n\t\t\t\t\t\tif (!cps.is_emoji && CM.has(cps[0])) { // every text token has emoji neighbors, eg. EtEEEtEt...\r\n\t\t\t\t\t\t\t// bidi_qq() not needed since emoji is LTR and cps is a CM\r\n\t\t\t\t\t\t\tthrow error_placement(`emoji + combining mark: \"${str_from_cps(tokens[i-1])} + ${safe_str_from_cps([cps[0]])}\"`); \r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tcheck_fenced(norm);\r\n\t\t\t\t\tlet unique = Array_from(new Set(chars));\r\n\t\t\t\t\tlet [g] = determine_group(unique); // take the first match\r\n\t\t\t\t\t// see derive: \"Matching Groups have Same CM Style\"\r\n\t\t\t\t\t// alternative: could form a hybrid type: Latin/Japanese/...\t\r\n\t\t\t\t\tcheck_group(g, chars); // need text in order\r\n\t\t\t\t\tcheck_whole(g, unique); // only need unique text (order would be required for multiple-char confusables)\r\n\t\t\t\t\ttype = g.N;\r\n\t\t\t\t\t// 20230121: consider exposing restricted flag\r\n\t\t\t\t\t// it's simpler to just check for 'Restricted'\r\n\t\t\t\t\t// or even better: type.endsWith(']')\r\n\t\t\t\t\t//if (g.R) info.restricted = true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tinfo.type = type;\r\n\t\t} catch (err) {\r\n\t\t\tinfo.error = err; // use full error object\r\n\t\t}\r\n\t\treturn info;\r\n\t});\r\n}\r\n\r\nfunction check_whole(group, unique) {\r\n\tlet maker;\r\n\tlet shared = [];\r\n\tfor (let cp of unique) {\r\n\t\tlet whole = WHOLE_MAP.get(cp);\r\n\t\tif (whole === UNIQUE_PH) return; // unique, non-confusable\r\n\t\tif (whole) {\r\n\t\t\tlet set = whole.M.get(cp); // groups which have a character that look-like this character\r\n\t\t\tmaker = maker ? maker.filter(g => set.has(g)) : Array_from(set);\r\n\t\t\tif (!maker.length) return; // confusable intersection is empty\r\n\t\t} else {\r\n\t\t\tshared.push(cp); \r\n\t\t}\r\n\t}\r\n\tif (maker) {\r\n\t\t// we have 1+ confusable\r\n\t\t// check if any of the remaining groups\r\n\t\t// contain the shared characters too\r\n\t\tfor (let g of maker) {\r\n\t\t\tif (shared.every(cp => group_has_cp(g, cp))) {\r\n\t\t\t\tthrow new Error(`whole-script confusable: ${group.N}/${g.N}`);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\n// assumption: unique.size > 0\r\n// returns list of matching groups\r\nfunction determine_group(unique) {\r\n\tlet groups = GROUPS;\r\n\tfor (let cp of unique) {\r\n\t\t// note: we need to dodge CM that are whitelisted\r\n\t\t// but that code isn't currently necessary\r\n\t\tlet gs = groups.filter(g => group_has_cp(g, cp));\r\n\t\tif (!gs.length) {\r\n\t\t\tif (!GROUPS.some(g => group_has_cp(g, cp))) { \r\n\t\t\t\t// the character was composed of valid parts\r\n\t\t\t\t// but it's NFC form is invalid\r\n\t\t\t\t// 20230716: change to more exact statement, see: ENSNormalize.{cs,java}\r\n\t\t\t\t// note: this doesn't have to be a composition\r\n\t\t\t\t// 20230720: change to full check\r\n\t\t\t\tthrow error_disallowed(cp); // this should be rare\r\n\t\t\t} else {\r\n\t\t\t\t// there is no group that contains all these characters\r\n\t\t\t\t// throw using the highest priority group that matched\r\n\t\t\t\t// https://www.unicode.org/reports/tr39/#mixed_script_confusables\r\n\t\t\t\tthrow error_group_member(groups[0], cp);\r\n\t\t\t}\r\n\t\t}\r\n\t\tgroups = gs;\r\n\t\tif (gs.length == 1) break; // there is only one group left\r\n\t}\r\n\t// there are at least 1 group(s) with all of these characters\r\n\treturn groups;\r\n}\r\n\r\n// throw on first error\r\nfunction flatten(split) {\r\n\treturn split.map(({input, error, output}) => {\r\n\t\tif (error) {\r\n\t\t\t// don't print label again if just a single label\r\n\t\t\tlet msg = error.message;\r\n\t\t\t// bidi_qq() only necessary if msg is digits\r\n\t\t\tthrow new Error(split.length == 1 ? msg : `Invalid label ${bidi_qq(safe_str_from_cps(input, 63))}: ${msg}`); \r\n\t\t}\r\n\t\treturn str_from_cps(output);\r\n\t}).join(STOP_CH);\r\n}\r\n\r\nfunction error_disallowed(cp) {\r\n\t// TODO: add cp to error?\r\n\treturn new Error(`disallowed character: ${quoted_cp(cp)}`); \r\n}\r\nfunction error_group_member(g, cp) {\r\n\tlet quoted = quoted_cp(cp);\r\n\tlet gg = GROUPS.find(g => g.P.has(cp)); // only check primary\r\n\tif (gg) {\r\n\t\tquoted = `${gg.N} ${quoted}`;\r\n\t}\r\n\treturn new Error(`illegal mixture: ${g.N} + ${quoted}`);\r\n}\r\nfunction error_placement(where) {\r\n\treturn new Error(`illegal placement: ${where}`);\r\n}\r\n\r\n// assumption: cps.length > 0\r\n// assumption: cps[0] isn't a CM\r\n// assumption: the previous character isn't an emoji\r\nfunction check_group(g, cps) {\r\n\tfor (let cp of cps) {\r\n\t\tif (!group_has_cp(g, cp)) {\r\n\t\t\t// for whitelisted scripts, this will throw illegal mixture on invalid cm, eg. \"e{300}{300}\"\r\n\t\t\t// at the moment, it's unnecessary to introduce an extra error type\r\n\t\t\t// until there exists a whitelisted multi-character\r\n\t\t\t//   eg. if (M < 0 && is_combining_mark(cp)) { ... }\r\n\t\t\t// there are 3 cases:\r\n\t\t\t//   1. illegal cm for wrong group => mixture error\r\n\t\t\t//   2. illegal cm for same group => cm error\r\n\t\t\t//       requires set of whitelist cm per group: \r\n\t\t\t//        eg. new Set([...g.P, ...g.Q].flatMap(nfc).filter(cp => CM.has(cp)))\r\n\t\t\t//   3. wrong group => mixture error\r\n\t\t\tthrow error_group_member(g, cp);\r\n\t\t}\r\n\t}\r\n\t//if (M >= 0) { // we have a known fixed cm count\r\n\tif (g.M) { // we need to check for NSM\r\n\t\tlet decomposed = nfd(cps);\r\n\t\tfor (let i = 1, e = decomposed.length; i < e; i++) { // see: assumption\r\n\t\t\t// 20230210: bugfix: using cps instead of decomposed h/t Carbon225\r\n\t\t\t/*\r\n\t\t\tif (CM.has(decomposed[i])) {\r\n\t\t\t\tlet j = i + 1;\r\n\t\t\t\twhile (j < e && CM.has(decomposed[j])) j++;\r\n\t\t\t\tif (j - i > M) {\r\n\t\t\t\t\tthrow new Error(`too many combining marks: ${g.N} ${bidi_qq(str_from_cps(decomposed.slice(i-1, j)))} (${j-i}/${M})`);\r\n\t\t\t\t}\r\n\t\t\t\ti = j;\r\n\t\t\t}\r\n\t\t\t*/\r\n\t\t\t// 20230217: switch to NSM counting\r\n\t\t\t// https://www.unicode.org/reports/tr39/#Optional_Detection\r\n\t\t\tif (NSM.has(decomposed[i])) {\r\n\t\t\t\tlet j = i + 1;\r\n\t\t\t\tfor (let cp; j < e && NSM.has(cp = decomposed[j]); j++) {\r\n\t\t\t\t\t// a. Forbid sequences of the same nonspacing mark.\r\n\t\t\t\t\tfor (let k = i; k < j; k++) { // O(n^2) but n < 100\r\n\t\t\t\t\t\tif (decomposed[k] == cp) {\r\n\t\t\t\t\t\t\tthrow new Error(`duplicate non-spacing marks: ${quoted_cp(cp)}`);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t// parse to end so we have full nsm count\r\n\t\t\t\t// b. Forbid sequences of more than 4 nonspacing marks (gc=Mn or gc=Me).\r\n\t\t\t\tif (j - i > NSM_MAX) {\r\n\t\t\t\t\t// note: this slice starts with a base char or spacing-mark cm\r\n\t\t\t\t\tthrow new Error(`excessive non-spacing marks: ${bidi_qq(safe_str_from_cps(decomposed.slice(i-1, j)))} (${j-i}/${NSM_MAX})`);\r\n\t\t\t\t}\r\n\t\t\t\ti = j;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t// *** this code currently isn't needed ***\r\n\t/*\r\n\tlet cm_whitelist = M instanceof Map;\r\n\tfor (let i = 0, e = cps.length; i < e; ) {\r\n\t\tlet cp = cps[i++];\r\n\t\tlet seqs = cm_whitelist && M.get(cp);\r\n\t\tif (seqs) { \r\n\t\t\t// list of codepoints that can follow\r\n\t\t\t// if this exists, this will always be 1+\r\n\t\t\tlet j = i;\r\n\t\t\twhile (j < e && CM.has(cps[j])) j++;\r\n\t\t\tlet cms = cps.slice(i, j);\r\n\t\t\tlet match = seqs.find(seq => !compare_arrays(seq, cms));\r\n\t\t\tif (!match) throw new Error(`disallowed combining mark sequence: \"${safe_str_from_cps([cp, ...cms])}\"`);\r\n\t\t\ti = j;\r\n\t\t} else if (!V.has(cp)) {\r\n\t\t\t// https://www.unicode.org/reports/tr39/#mixed_script_confusables\r\n\t\t\tlet quoted = quoted_cp(cp);\r\n\t\t\tfor (let cp of cps) {\r\n\t\t\t\tlet u = UNIQUE.get(cp);\r\n\t\t\t\tif (u && u !== g) {\r\n\t\t\t\t\t// if both scripts are restricted this error is confusing\r\n\t\t\t\t\t// because we don't differentiate RestrictedA from RestrictedB \r\n\t\t\t\t\tif (!u.R) quoted = `${quoted} is ${u.N}`;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tthrow new Error(`disallowed ${g.N} character: ${quoted}`);\r\n\t\t\t//throw new Error(`disallowed character: ${quoted} (expected ${g.N})`);\r\n\t\t\t//throw new Error(`${g.N} does not allow: ${quoted}`);\r\n\t\t}\r\n\t}\r\n\tif (!cm_whitelist) {\r\n\t\tlet decomposed = nfd(cps);\r\n\t\tfor (let i = 1, e = decomposed.length; i < e; i++) { // we know it can't be cm leading\r\n\t\t\tif (CM.has(decomposed[i])) {\r\n\t\t\t\tlet j = i + 1;\r\n\t\t\t\twhile (j < e && CM.has(decomposed[j])) j++;\r\n\t\t\t\tif (j - i > M) {\r\n\t\t\t\t\tthrow new Error(`too many combining marks: \"${str_from_cps(decomposed.slice(i-1, j))}\" (${j-i}/${M})`);\r\n\t\t\t\t}\r\n\t\t\t\ti = j;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t*/\r\n}\r\n\r\n// given a list of codepoints\r\n// returns a list of lists, where emoji are a fully-qualified (as Array subclass)\r\n// eg. explode_cp(\"abc\uD83D\uDCA9d\") => [[61, 62, 63], Emoji[1F4A9, FE0F], [64]]\r\n// 20230818: rename for 'process' name collision h/t Javarome\r\n// https://github.com/adraffy/ens-normalize.js/issues/23\r\nfunction tokens_from_str(input, nf, ef) {\r\n\tlet ret = [];\r\n\tlet chars = [];\r\n\tinput = input.slice().reverse(); // flip so we can pop\r\n\twhile (input.length) {\r\n\t\tlet emoji = consume_emoji_reversed(input);\r\n\t\tif (emoji) {\r\n\t\t\tif (chars.length) {\r\n\t\t\t\tret.push(nf(chars));\r\n\t\t\t\tchars = [];\r\n\t\t\t}\r\n\t\t\tret.push(ef(emoji));\r\n\t\t} else {\r\n\t\t\tlet cp = input.pop();\r\n\t\t\tif (VALID.has(cp)) {\r\n\t\t\t\tchars.push(cp);\r\n\t\t\t} else {\r\n\t\t\t\tlet cps = MAPPED.get(cp);\r\n\t\t\t\tif (cps) {\r\n\t\t\t\t\tchars.push(...cps); // less than 10 elements\r\n\t\t\t\t} else if (!IGNORED.has(cp)) {\r\n\t\t\t\t\t// 20230912: unicode 15.1 changed the order of processing such that\r\n\t\t\t\t\t// disallowed parts are only rejected after NFC\r\n\t\t\t\t\t// https://unicode.org/reports/tr46/#Validity_Criteria\r\n\t\t\t\t\t// this doesn't impact normalization as of today\r\n\t\t\t\t\t// technically, this error can be removed as the group logic will apply similar logic\r\n\t\t\t\t\t// however the error type might be less clear\r\n\t\t\t\t\tthrow error_disallowed(cp);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\tif (chars.length) {\r\n\t\tret.push(nf(chars));\r\n\t}\r\n\treturn ret;\r\n}\r\n\r\nfunction filter_fe0f(cps) {\r\n\treturn cps.filter(cp => cp != FE0F);\r\n}\r\n\r\n// given array of codepoints\r\n// returns the longest valid emoji sequence (or undefined if no match)\r\n// *MUTATES* the supplied array\r\n// disallows interleaved ignored characters\r\n// fills (optional) eaten array with matched codepoints\r\nfunction consume_emoji_reversed(cps, eaten) {\r\n\tlet node = EMOJI_ROOT;\r\n\tlet emoji;\r\n\tlet pos = cps.length;\r\n\twhile (pos) {\r\n\t\tnode = node.get(cps[--pos]);\r\n\t\tif (!node) break;\r\n\t\tlet {V} = node;\r\n\t\tif (V) { // this is a valid emoji (so far)\r\n\t\t\temoji = V;\r\n\t\t\tif (eaten) eaten.push(...cps.slice(pos).reverse()); // (optional) copy input, used for ens_tokenize()\r\n\t\t\tcps.length = pos; // truncate\r\n\t\t}\r\n\t}\r\n\treturn emoji;\r\n}\r\n\r\n// ************************************************************\r\n// tokenizer \r\n\r\nconst TY_VALID = 'valid';\r\nconst TY_MAPPED = 'mapped';\r\nconst TY_IGNORED = 'ignored';\r\nconst TY_DISALLOWED = 'disallowed';\r\nconst TY_EMOJI = 'emoji';\r\nconst TY_NFC = 'nfc';\r\nconst TY_STOP = 'stop';\r\n\r\nfunction ens_tokenize(name, {\r\n\tnf = true, // collapse unnormalized runs into a single token\r\n} = {}) {\r\n\tinit();\r\n\tlet input = explode_cp(name).reverse();\r\n\tlet eaten = [];\r\n\tlet tokens = [];\r\n\twhile (input.length) {\r\n\t\tlet emoji = consume_emoji_reversed(input, eaten);\r\n\t\tif (emoji) {\r\n\t\t\ttokens.push({\r\n\t\t\t\ttype: TY_EMOJI,\r\n\t\t\t\temoji: emoji.slice(), // copy emoji\r\n\t\t\t\tinput: eaten,\r\n\t\t\t\tcps: filter_fe0f(emoji)\r\n\t\t\t});\r\n\t\t\teaten = []; // reset buffer\r\n\t\t} else {\r\n\t\t\tlet cp = input.pop();\r\n\t\t\tif (cp == STOP) {\r\n\t\t\t\ttokens.push({type: TY_STOP, cp});\r\n\t\t\t} else if (VALID.has(cp)) {\r\n\t\t\t\ttokens.push({type: TY_VALID, cps: [cp]});\r\n\t\t\t} else if (IGNORED.has(cp)) {\r\n\t\t\t\ttokens.push({type: TY_IGNORED, cp});\r\n\t\t\t} else {\r\n\t\t\t\tlet cps = MAPPED.get(cp);\r\n\t\t\t\tif (cps) {\r\n\t\t\t\t\ttokens.push({type: TY_MAPPED, cp, cps: cps.slice()});\r\n\t\t\t\t} else {\r\n\t\t\t\t\ttokens.push({type: TY_DISALLOWED, cp});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\tif (nf) {\r\n\t\tfor (let i = 0, start = -1; i < tokens.length; i++) {\r\n\t\t\tlet token = tokens[i];\r\n\t\t\tif (is_valid_or_mapped(token.type)) {\r\n\t\t\t\tif (requires_check(token.cps)) { // normalization might be needed\r\n\t\t\t\t\tlet end = i + 1;\r\n\t\t\t\t\tfor (let pos = end; pos < tokens.length; pos++) { // find adjacent text\r\n\t\t\t\t\t\tlet {type, cps} = tokens[pos];\r\n\t\t\t\t\t\tif (is_valid_or_mapped(type)) {\r\n\t\t\t\t\t\t\tif (!requires_check(cps)) break;\r\n\t\t\t\t\t\t\tend = pos + 1;\r\n\t\t\t\t\t\t} else if (type !== TY_IGNORED) { // || type !== TY_DISALLOWED) { \r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (start < 0) start = i;\r\n\t\t\t\t\tlet slice = tokens.slice(start, end);\r\n\t\t\t\t\tlet cps0 = slice.flatMap(x => is_valid_or_mapped(x.type) ? x.cps : []); // strip junk tokens\r\n\t\t\t\t\tlet cps = nfc(cps0);\r\n\t\t\t\t\tif (compare_arrays(cps, cps0)) { // bundle into an nfc token\r\n\t\t\t\t\t\ttokens.splice(start, end - start, {\r\n\t\t\t\t\t\t\ttype: TY_NFC, \r\n\t\t\t\t\t\t\tinput: cps0, // there are 3 states: tokens0 ==(process)=> input ==(nfc)=> tokens/cps\r\n\t\t\t\t\t\t\tcps, \r\n\t\t\t\t\t\t\ttokens0: collapse_valid_tokens(slice),\r\n\t\t\t\t\t\t\ttokens: ens_tokenize(str_from_cps(cps), {nf: false})\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\ti = start;\r\n\t\t\t\t\t} else { \r\n\t\t\t\t\t\ti = end - 1; // skip to end of slice\r\n\t\t\t\t\t}\r\n\t\t\t\t\tstart = -1; // reset\r\n\t\t\t\t} else {\r\n\t\t\t\t\tstart = i; // remember last\r\n\t\t\t\t}\r\n\t\t\t} else if (token.type !== TY_IGNORED) { // 20221024: is this correct?\r\n\t\t\t\tstart = -1; // reset\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\treturn collapse_valid_tokens(tokens);\r\n}\r\n\r\nfunction is_valid_or_mapped(type) {\r\n\treturn type == TY_VALID || type == TY_MAPPED;\r\n}\r\n\r\nfunction requires_check(cps) {\r\n\treturn cps.some(cp => NFC_CHECK.has(cp));\r\n}\r\n\r\nfunction collapse_valid_tokens(tokens) {\r\n\tfor (let i = 0; i < tokens.length; i++) {\r\n\t\tif (tokens[i].type == TY_VALID) {\r\n\t\t\tlet j = i + 1;\r\n\t\t\twhile (j < tokens.length && tokens[j].type == TY_VALID) j++;\r\n\t\t\ttokens.splice(i, j - i, {type: TY_VALID, cps: tokens.slice(i, j).flatMap(x => x.cps)});\r\n\t\t}\r\n\t}\r\n\treturn tokens;\r\n}\n\nexport { ens_beautify, ens_emoji, ens_normalize, ens_normalize_fragment, ens_split, ens_tokenize, is_combining_mark, nfc, nfd, safe_str_from_cps, should_escape };\n", "\nimport { keccak256 } from \"../crypto/index.js\";\nimport {\n    concat, hexlify, assertArgument, toUtf8Bytes\n} from \"../utils/index.js\";\n\n\nimport { ens_normalize } from \"@adraffy/ens-normalize\";\n\nconst Zeros = new Uint8Array(32);\nZeros.fill(0);\n\nfunction checkComponent(comp: Uint8Array): Uint8Array {\n    assertArgument(comp.length !== 0, \"invalid ENS name; empty component\", \"comp\", comp)\n    return comp;\n}\n\nfunction ensNameSplit(name: string): Array<Uint8Array> {\n    const bytes = toUtf8Bytes(ensNormalize(name));\n    const comps: Array<Uint8Array> = [ ];\n\n    if (name.length === 0) { return comps; }\n\n    let last = 0;\n    for (let i = 0; i < bytes.length; i++) {\n        const d = bytes[i];\n\n        // A separator (i.e. \".\"); copy this component\n        if (d === 0x2e) {\n            comps.push(checkComponent(bytes.slice(last, i)));\n            last = i + 1;\n        }\n    }\n\n    // There was a stray separator at the end of the name\n    assertArgument(last < bytes.length, \"invalid ENS name; empty component\", \"name\", name);\n\n    comps.push(checkComponent(bytes.slice(last)));\n    return comps;\n}\n\n/**\n *  Returns the ENS %%name%% normalized.\n */\nexport function ensNormalize(name: string): string {\n    try {\n        if (name.length === 0) { throw new Error(\"empty label\"); }\n        return ens_normalize(name);\n    } catch (error: any) {\n        assertArgument(false, `invalid ENS name (${ error.message })`, \"name\", name);\n    }\n}\n\n/**\n *  Returns ``true`` if %%name%% is a valid ENS name.\n */\nexport function isValidName(name: string): name is string {\n    try {\n        return (ensNameSplit(name).length !== 0);\n    } catch (error) { }\n    return false;\n}\n\n/**\n *  Returns the [[link-namehash]] for %%name%%.\n */\nexport function namehash(name: string): string {\n    assertArgument(typeof(name) === \"string\", \"invalid ENS name; not a string\", \"name\", name);\n\n    assertArgument(name.length, `invalid ENS name (empty label)`, \"name\", name);\n\n    let result: string | Uint8Array = Zeros;\n\n    const comps = ensNameSplit(name);\n    while (comps.length) {\n        result = keccak256(concat([ result, keccak256(<Uint8Array>(comps.pop()))] ));\n    }\n\n    return hexlify(result);\n}\n\n/**\n *  Returns the DNS encoded %%name%%.\n *\n *  This is used for various parts of ENS name resolution, such\n *  as the wildcard resolution.\n */\nexport function dnsEncode(name: string, _maxLength?: number): string {\n    const length = (_maxLength != null) ? _maxLength: 63;\n\n    assertArgument(length <= 255, \"DNS encoded label cannot exceed 255\", \"length\", length);\n\n    return hexlify(concat(ensNameSplit(name).map((comp) => {\n        assertArgument(comp.length <= length, `label ${ JSON.stringify(name) } exceeds ${ length } bytes`, \"name\", name);\n\n        const bytes = new Uint8Array(comp.length + 1);\n        bytes.set(comp, 1);\n        bytes[0] = bytes.length - 1;\n        return bytes;\n    }))) + \"00\";\n}\n", "import { getAddress } from \"../address/index.js\";\nimport { assertArgument, isHexString } from \"../utils/index.js\";\n\nimport type { AccessList, AccessListish } from \"./index.js\";\n\n\nfunction accessSetify(addr: string, storageKeys: Array<string>): { address: string,storageKeys: Array<string> } {\n    return {\n        address: getAddress(addr),\n        storageKeys: storageKeys.map((storageKey, index) => {\n            assertArgument(isHexString(storageKey, 32), \"invalid slot\", `storageKeys[${ index }]`, storageKey);\n            return storageKey.toLowerCase();\n        })\n    };\n}\n\n/**\n *  Returns a [[AccessList]] from any ethers-supported access-list structure.\n */\nexport function accessListify(value: AccessListish): AccessList {\n    if (Array.isArray(value)) {\n        return (<Array<[ string, Array<string>] | { address: string, storageKeys: Array<string>}>>value).map((set, index) => {\n            if (Array.isArray(set)) {\n                assertArgument(set.length === 2, \"invalid slot set\", `value[${ index }]`, set);\n                return accessSetify(set[0], set[1])\n            }\n            assertArgument(set != null && typeof(set) === \"object\", \"invalid address-slot set\", \"value\", value);\n            return accessSetify(set.address, set.storageKeys);\n        });\n    }\n\n    assertArgument(value != null && typeof(value) === \"object\", \"invalid access list\", \"value\", value);\n\n    const result: Array<{ address: string, storageKeys: Array<string> }> = Object.keys(value).map((addr) => {\n        const storageKeys: Record<string, true> = value[addr].reduce((accum, storageKey) => {\n            accum[storageKey] = true;\n            return accum;\n        }, <Record<string, true>>{ });\n        return accessSetify(addr, Object.keys(storageKeys).sort())\n    });\n    result.sort((a, b) => (a.address.localeCompare(b.address)));\n    return result;\n}\n", "import { getAddress } from \"../address/index.js\";\nimport { keccak256, SigningKey } from \"../crypto/index.js\";\n\nimport type { SignatureLike } from \"../crypto/index.js\";\nimport type { BytesLike } from \"../utils/index.js\";\n\n/**\n *  Returns the address for the %%key%%.\n *\n *  The key may be any standard form of public key or a private key.\n */\nexport function computeAddress(key: string | SigningKey): string {\n    let pubkey: string;\n    if (typeof(key) === \"string\") {\n        pubkey = SigningKey.computePublicKey(key, false);\n    } else {\n        pubkey = key.publicKey;\n    }\n    return getAddress(keccak256(\"0x\" + pubkey.substring(4)).substring(26));\n}\n\n/**\n *  Returns the recovered address for the private key that was\n *  used to sign %%digest%% that resulted in %%signature%%.\n */\nexport function recoverAddress(digest: BytesLike, signature: SignatureLike): string {\n    return computeAddress(SigningKey.recoverPublicKey(digest, signature));\n}\n", "\nimport { getAddress } from \"../address/index.js\";\nimport { ZeroAddress } from \"../constants/addresses.js\";\nimport { keccak256, Signature, SigningKey } from \"../crypto/index.js\";\nimport {\n    concat, decodeRlp, encodeRlp, getBytes, getBigInt, getNumber, hexlify,\n    assert, assertArgument, isHexString, toBeArray, zeroPadValue\n} from \"../utils/index.js\";\n\nimport { accessListify } from \"./accesslist.js\";\nimport { recoverAddress } from \"./address.js\";\n\nimport type { BigNumberish, BytesLike } from \"../utils/index.js\";\nimport type { SignatureLike } from \"../crypto/index.js\";\n\nimport type { AccessList, AccessListish } from \"./index.js\";\n\n\nconst BN_0 = BigInt(0);\nconst BN_2 = BigInt(2);\nconst BN_27 = BigInt(27)\nconst BN_28 = BigInt(28)\nconst BN_35 = BigInt(35);\nconst BN_MAX_UINT = BigInt(\"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\");\n\n\n/**\n *  A **TransactionLike** is an object which is appropriate as a loose\n *  input for many operations which will populate missing properties of\n *  a transaction.\n */\nexport interface TransactionLike<A = string> {\n    /**\n     *  The type.\n     */\n    type?: null | number;\n\n    /**\n     *  The recipient address or ``null`` for an ``init`` transaction.\n     */\n    to?: null | A;\n\n    /**\n     *  The sender.\n     */\n    from?: null | A;\n\n    /**\n     *  The nonce.\n     */\n    nonce?: null | number;\n\n    /**\n     *  The maximum amount of gas that can be used.\n     */\n    gasLimit?: null | BigNumberish;\n\n    /**\n     *  The gas price for legacy and berlin transactions.\n     */\n    gasPrice?: null | BigNumberish;\n\n    /**\n     *  The maximum priority fee per gas for london transactions.\n     */\n    maxPriorityFeePerGas?: null | BigNumberish;\n\n    /**\n     *  The maximum total fee per gas for london transactions.\n     */\n    maxFeePerGas?: null | BigNumberish;\n\n    /**\n     *  The data.\n     */\n    data?: null | string;\n\n    /**\n     *  The value (in wei) to send.\n     */\n    value?: null | BigNumberish;\n\n    /**\n     *  The chain ID the transaction is valid on.\n     */\n    chainId?: null | BigNumberish;\n\n    /**\n     *  The transaction hash.\n     */\n    hash?: null | string;\n\n    /**\n     *  The signature provided by the sender.\n     */\n    signature?: null | SignatureLike;\n\n    /**\n     *  The access list for berlin and london transactions.\n     */\n    accessList?: null | AccessListish;\n\n    /**\n     *  The maximum fee per blob gas (see [[link-eip-4844]]).\n     */\n    maxFeePerBlobGas?: null | BigNumberish;\n\n    /**\n     *  The versioned hashes (see [[link-eip-4844]]).\n     */\n    blobVersionedHashes?: null | Array<string>;\n}\n\nfunction handleAddress(value: string): null | string {\n    if (value === \"0x\") { return null; }\n    return getAddress(value);\n}\n\nfunction handleAccessList(value: any, param: string): AccessList {\n    try {\n        return accessListify(value);\n    } catch (error: any) {\n        assertArgument(false, error.message, param, value);\n    }\n}\n\nfunction handleNumber(_value: string, param: string): number {\n    if (_value === \"0x\") { return 0; }\n    return getNumber(_value, param);\n}\n\nfunction handleUint(_value: string, param: string): bigint {\n    if (_value === \"0x\") { return BN_0; }\n    const value = getBigInt(_value, param);\n    assertArgument(value <= BN_MAX_UINT, \"value exceeds uint size\", param, value);\n    return value;\n}\n\nfunction formatNumber(_value: BigNumberish, name: string): Uint8Array {\n    const value = getBigInt(_value, \"value\");\n    const result = toBeArray(value);\n    assertArgument(result.length <= 32, `value too large`, `tx.${ name }`, value);\n    return result;\n}\n\nfunction formatAccessList(value: AccessListish): Array<[ string, Array<string> ]> {\n    return accessListify(value).map((set) => [ set.address, set.storageKeys ]);\n}\n\nfunction formatHashes(value: Array<string>, param: string): Array<string> {\n    assertArgument(Array.isArray(value), `invalid ${ param }`, \"value\", value);\n    for (let i = 0; i < value.length; i++) {\n        assertArgument(isHexString(value[i], 32), \"invalid ${ param } hash\", `value[${ i }]`, value[i]);\n    }\n    return value;\n}\n\nfunction _parseLegacy(data: Uint8Array): TransactionLike {\n    const fields: any = decodeRlp(data);\n\n    assertArgument(Array.isArray(fields) && (fields.length === 9 || fields.length === 6),\n        \"invalid field count for legacy transaction\", \"data\", data);\n\n    const tx: TransactionLike = {\n        type:     0,\n        nonce:    handleNumber(fields[0], \"nonce\"),\n        gasPrice: handleUint(fields[1], \"gasPrice\"),\n        gasLimit: handleUint(fields[2], \"gasLimit\"),\n        to:       handleAddress(fields[3]),\n        value:    handleUint(fields[4], \"value\"),\n        data:     hexlify(fields[5]),\n        chainId:  BN_0\n    };\n\n    // Legacy unsigned transaction\n    if (fields.length === 6) { return tx; }\n\n    const v = handleUint(fields[6], \"v\");\n    const r = handleUint(fields[7], \"r\");\n    const s = handleUint(fields[8], \"s\");\n\n    if (r === BN_0 && s === BN_0) {\n        // EIP-155 unsigned transaction\n        tx.chainId = v;\n\n    } else {\n\n        // Compute the EIP-155 chain ID (or 0 for legacy)\n        let chainId = (v - BN_35) / BN_2;\n        if (chainId < BN_0) { chainId = BN_0; }\n        tx.chainId = chainId\n\n        // Signed Legacy Transaction\n        assertArgument(chainId !== BN_0 || (v === BN_27 || v === BN_28), \"non-canonical legacy v\", \"v\", fields[6]);\n\n        tx.signature = Signature.from({\n            r: zeroPadValue(fields[7], 32),\n            s: zeroPadValue(fields[8], 32),\n            v\n        });\n\n        tx.hash = keccak256(data);\n    }\n\n    return tx;\n}\n\nfunction _serializeLegacy(tx: Transaction, sig?: Signature): string {\n    const fields: Array<any> = [\n        formatNumber(tx.nonce, \"nonce\"),\n        formatNumber(tx.gasPrice || 0, \"gasPrice\"),\n        formatNumber(tx.gasLimit, \"gasLimit\"),\n        (tx.to || \"0x\"),\n        formatNumber(tx.value, \"value\"),\n        tx.data,\n    ];\n\n    let chainId = BN_0;\n    if (tx.chainId != BN_0) {\n        // A chainId was provided; if non-zero we'll use EIP-155\n        chainId = getBigInt(tx.chainId, \"tx.chainId\");\n\n        // We have a chainId in the tx and an EIP-155 v in the signature,\n        // make sure they agree with each other\n        assertArgument(!sig || sig.networkV == null || sig.legacyChainId === chainId,\n             \"tx.chainId/sig.v mismatch\", \"sig\", sig);\n\n    } else if (tx.signature) {\n        // No explicit chainId, but EIP-155 have a derived implicit chainId\n        const legacy = tx.signature.legacyChainId;\n        if (legacy != null) { chainId = legacy; }\n    }\n\n    // Requesting an unsigned transaction\n    if (!sig) {\n        // We have an EIP-155 transaction (chainId was specified and non-zero)\n        if (chainId !== BN_0) {\n            fields.push(toBeArray(chainId));\n            fields.push(\"0x\");\n            fields.push(\"0x\");\n        }\n\n        return encodeRlp(fields);\n    }\n\n    // @TODO: We should probably check that tx.signature, chainId, and sig\n    //        match but that logic could break existing code, so schedule\n    //        this for the next major bump.\n\n    // Compute the EIP-155 v\n    let v = BigInt(27 + sig.yParity);\n    if (chainId !== BN_0) {\n        v = Signature.getChainIdV(chainId, sig.v);\n    } else if (BigInt(sig.v) !== v) {\n        assertArgument(false, \"tx.chainId/sig.v mismatch\", \"sig\", sig);\n    }\n\n    // Add the signature\n    fields.push(toBeArray(v));\n    fields.push(toBeArray(sig.r));\n    fields.push(toBeArray(sig.s));\n\n    return encodeRlp(fields);\n}\n\nfunction _parseEipSignature(tx: TransactionLike, fields: Array<string>): void {\n    let yParity: number;\n    try {\n        yParity = handleNumber(fields[0], \"yParity\");\n        if (yParity !== 0 && yParity !== 1) { throw new Error(\"bad yParity\"); }\n    } catch (error) {\n        assertArgument(false, \"invalid yParity\", \"yParity\", fields[0]);\n    }\n\n    const r = zeroPadValue(fields[1], 32);\n    const s = zeroPadValue(fields[2], 32);\n\n    const signature = Signature.from({ r, s, yParity });\n    tx.signature = signature;\n}\n\nfunction _parseEip1559(data: Uint8Array): TransactionLike {\n    const fields: any = decodeRlp(getBytes(data).slice(1));\n\n    assertArgument(Array.isArray(fields) && (fields.length === 9 || fields.length === 12),\n        \"invalid field count for transaction type: 2\", \"data\", hexlify(data));\n\n    const tx: TransactionLike = {\n        type:                  2,\n        chainId:               handleUint(fields[0], \"chainId\"),\n        nonce:                 handleNumber(fields[1], \"nonce\"),\n        maxPriorityFeePerGas:  handleUint(fields[2], \"maxPriorityFeePerGas\"),\n        maxFeePerGas:          handleUint(fields[3], \"maxFeePerGas\"),\n        gasPrice:              null,\n        gasLimit:              handleUint(fields[4], \"gasLimit\"),\n        to:                    handleAddress(fields[5]),\n        value:                 handleUint(fields[6], \"value\"),\n        data:                  hexlify(fields[7]),\n        accessList:            handleAccessList(fields[8], \"accessList\"),\n    };\n\n    // Unsigned EIP-1559 Transaction\n    if (fields.length === 9) { return tx; }\n\n    tx.hash = keccak256(data);\n\n    _parseEipSignature(tx, fields.slice(9));\n\n    return tx;\n}\n\nfunction _serializeEip1559(tx: Transaction, sig?: Signature): string {\n    const fields: Array<any> = [\n        formatNumber(tx.chainId, \"chainId\"),\n        formatNumber(tx.nonce, \"nonce\"),\n        formatNumber(tx.maxPriorityFeePerGas || 0, \"maxPriorityFeePerGas\"),\n        formatNumber(tx.maxFeePerGas || 0, \"maxFeePerGas\"),\n        formatNumber(tx.gasLimit, \"gasLimit\"),\n        (tx.to || \"0x\"),\n        formatNumber(tx.value, \"value\"),\n        tx.data,\n        formatAccessList(tx.accessList || [ ])\n    ];\n\n    if (sig) {\n        fields.push(formatNumber(sig.yParity, \"yParity\"));\n        fields.push(toBeArray(sig.r));\n        fields.push(toBeArray(sig.s));\n    }\n\n    return concat([ \"0x02\", encodeRlp(fields)]);\n}\n\nfunction _parseEip2930(data: Uint8Array): TransactionLike {\n    const fields: any = decodeRlp(getBytes(data).slice(1));\n\n    assertArgument(Array.isArray(fields) && (fields.length === 8 || fields.length === 11),\n        \"invalid field count for transaction type: 1\", \"data\", hexlify(data));\n\n    const tx: TransactionLike = {\n        type:       1,\n        chainId:    handleUint(fields[0], \"chainId\"),\n        nonce:      handleNumber(fields[1], \"nonce\"),\n        gasPrice:   handleUint(fields[2], \"gasPrice\"),\n        gasLimit:   handleUint(fields[3], \"gasLimit\"),\n        to:         handleAddress(fields[4]),\n        value:      handleUint(fields[5], \"value\"),\n        data:       hexlify(fields[6]),\n        accessList: handleAccessList(fields[7], \"accessList\")\n    };\n\n    // Unsigned EIP-2930 Transaction\n    if (fields.length === 8) { return tx; }\n\n    tx.hash = keccak256(data);\n\n    _parseEipSignature(tx, fields.slice(8));\n\n    return tx;\n}\n\nfunction _serializeEip2930(tx: Transaction, sig?: Signature): string {\n    const fields: any = [\n        formatNumber(tx.chainId, \"chainId\"),\n        formatNumber(tx.nonce, \"nonce\"),\n        formatNumber(tx.gasPrice || 0, \"gasPrice\"),\n        formatNumber(tx.gasLimit, \"gasLimit\"),\n        (tx.to || \"0x\"),\n        formatNumber(tx.value, \"value\"),\n        tx.data,\n        formatAccessList(tx.accessList || [ ])\n    ];\n\n    if (sig) {\n        fields.push(formatNumber(sig.yParity, \"recoveryParam\"));\n        fields.push(toBeArray(sig.r));\n        fields.push(toBeArray(sig.s));\n    }\n\n    return concat([ \"0x01\", encodeRlp(fields)]);\n}\n\nfunction _parseEip4844(data: Uint8Array): TransactionLike {\n    const fields: any = decodeRlp(getBytes(data).slice(1));\n\n    assertArgument(Array.isArray(fields) && (fields.length === 11 || fields.length === 14),\n        \"invalid field count for transaction type: 3\", \"data\", hexlify(data));\n\n    const tx: TransactionLike = {\n        type:                  3,\n        chainId:               handleUint(fields[0], \"chainId\"),\n        nonce:                 handleNumber(fields[1], \"nonce\"),\n        maxPriorityFeePerGas:  handleUint(fields[2], \"maxPriorityFeePerGas\"),\n        maxFeePerGas:          handleUint(fields[3], \"maxFeePerGas\"),\n        gasPrice:              null,\n        gasLimit:              handleUint(fields[4], \"gasLimit\"),\n        to:                    handleAddress(fields[5]),\n        value:                 handleUint(fields[6], \"value\"),\n        data:                  hexlify(fields[7]),\n        accessList:            handleAccessList(fields[8], \"accessList\"),\n        maxFeePerBlobGas:      handleUint(fields[9], \"maxFeePerBlobGas\"),\n        blobVersionedHashes:   fields[10]\n    };\n\n    assertArgument(tx.to != null, \"invalid address for transaction type: 3\", \"data\", data);\n\n    assertArgument(Array.isArray(tx.blobVersionedHashes), \"invalid blobVersionedHashes: must be an array\", \"data\", data);\n    for (let i = 0; i < tx.blobVersionedHashes.length; i++) {\n        assertArgument(isHexString(tx.blobVersionedHashes[i], 32), `invalid blobVersionedHash at index ${ i }: must be length 32`, \"data\", data);\n    }\n\n    // Unsigned EIP-4844 Transaction\n    if (fields.length === 11) { return tx; }\n\n    tx.hash = keccak256(data);\n\n    _parseEipSignature(tx, fields.slice(11));\n\n    return tx;\n}\n\nfunction _serializeEip4844(tx: Transaction, sig?: Signature): string {\n    const fields: Array<any> = [\n        formatNumber(tx.chainId, \"chainId\"),\n        formatNumber(tx.nonce, \"nonce\"),\n        formatNumber(tx.maxPriorityFeePerGas || 0, \"maxPriorityFeePerGas\"),\n        formatNumber(tx.maxFeePerGas || 0, \"maxFeePerGas\"),\n        formatNumber(tx.gasLimit, \"gasLimit\"),\n        (tx.to || ZeroAddress),\n        formatNumber(tx.value, \"value\"),\n        tx.data,\n        formatAccessList(tx.accessList || [ ]),\n        formatNumber(tx.maxFeePerBlobGas || 0, \"maxFeePerBlobGas\"),\n        formatHashes(tx.blobVersionedHashes || [ ], \"blobVersionedHashes\")\n    ];\n\n    if (sig) {\n        fields.push(formatNumber(sig.yParity, \"yParity\"));\n        fields.push(toBeArray(sig.r));\n        fields.push(toBeArray(sig.s));\n    }\n\n    return concat([ \"0x03\", encodeRlp(fields)]);\n}\n\n/**\n *  A **Transaction** describes an operation to be executed on\n *  Ethereum by an Externally Owned Account (EOA). It includes\n *  who (the [[to]] address), what (the [[data]]) and how much (the\n *  [[value]] in ether) the operation should entail.\n *\n *  @example:\n *    tx = new Transaction()\n *    //_result:\n *\n *    tx.data = \"0x1234\";\n *    //_result:\n */\nexport class Transaction implements TransactionLike<string> {\n    #type: null | number;\n    #to: null | string;\n    #data: string;\n    #nonce: number;\n    #gasLimit: bigint;\n    #gasPrice: null | bigint;\n    #maxPriorityFeePerGas: null | bigint;\n    #maxFeePerGas: null | bigint;\n    #value: bigint;\n    #chainId: bigint;\n    #sig: null | Signature;\n    #accessList: null | AccessList;\n    #maxFeePerBlobGas: null | bigint;\n    #blobVersionedHashes: null | Array<string>;\n\n    /**\n     *  The transaction type.\n     *\n     *  If null, the type will be automatically inferred based on\n     *  explicit properties.\n     */\n    get type(): null | number { return this.#type; }\n    set type(value: null | number | string) {\n        switch (value) {\n            case null:\n                this.#type = null;\n                break;\n            case 0: case \"legacy\":\n                this.#type = 0;\n                break;\n            case 1: case \"berlin\": case \"eip-2930\":\n                this.#type = 1;\n                break;\n            case 2: case \"london\": case \"eip-1559\":\n                this.#type = 2;\n                break;\n            case 3: case \"cancun\": case \"eip-4844\":\n                this.#type = 3;\n                break;\n            default:\n                assertArgument(false, \"unsupported transaction type\", \"type\", value);\n        }\n    }\n\n    /**\n     *  The name of the transaction type.\n     */\n    get typeName(): null | string {\n        switch (this.type) {\n            case 0: return \"legacy\";\n            case 1: return \"eip-2930\";\n            case 2: return \"eip-1559\";\n            case 3: return \"eip-4844\";\n        }\n\n        return null;\n    }\n\n    /**\n     *  The ``to`` address for the transaction or ``null`` if the\n     *  transaction is an ``init`` transaction.\n     */\n    get to(): null | string {\n        const value = this.#to;\n        if (value == null && this.type === 3) { return ZeroAddress; }\n        return value;\n    }\n    set to(value: null | string) {\n        this.#to = (value == null) ? null: getAddress(value);\n    }\n\n    /**\n     *  The transaction nonce.\n     */\n    get nonce(): number { return this.#nonce; }\n    set nonce(value: BigNumberish) { this.#nonce = getNumber(value, \"value\"); }\n\n    /**\n     *  The gas limit.\n     */\n    get gasLimit(): bigint { return this.#gasLimit; }\n    set gasLimit(value: BigNumberish) { this.#gasLimit = getBigInt(value); }\n\n    /**\n     *  The gas price.\n     *\n     *  On legacy networks this defines the fee that will be paid. On\n     *  EIP-1559 networks, this should be ``null``.\n     */\n    get gasPrice(): null | bigint {\n        const value = this.#gasPrice;\n        if (value == null && (this.type === 0 || this.type === 1)) { return BN_0; }\n        return value;\n    }\n    set gasPrice(value: null | BigNumberish) {\n        this.#gasPrice = (value == null) ? null: getBigInt(value, \"gasPrice\");\n    }\n\n    /**\n     *  The maximum priority fee per unit of gas to pay. On legacy\n     *  networks this should be ``null``.\n     */\n    get maxPriorityFeePerGas(): null | bigint {\n        const value = this.#maxPriorityFeePerGas;\n        if (value == null) {\n            if (this.type === 2 || this.type === 3) { return BN_0; }\n            return null;\n        }\n        return value;\n    }\n    set maxPriorityFeePerGas(value: null | BigNumberish) {\n        this.#maxPriorityFeePerGas = (value == null) ? null: getBigInt(value, \"maxPriorityFeePerGas\");\n    }\n\n    /**\n     *  The maximum total fee per unit of gas to pay. On legacy\n     *  networks this should be ``null``.\n     */\n    get maxFeePerGas(): null | bigint {\n        const value = this.#maxFeePerGas;\n        if (value == null) {\n            if (this.type === 2 || this.type === 3) { return BN_0; }\n            return null;\n        }\n        return value;\n    }\n    set maxFeePerGas(value: null | BigNumberish) {\n        this.#maxFeePerGas = (value == null) ? null: getBigInt(value, \"maxFeePerGas\");\n    }\n\n    /**\n     *  The transaction data. For ``init`` transactions this is the\n     *  deployment code.\n     */\n    get data(): string { return this.#data; }\n    set data(value: BytesLike) { this.#data = hexlify(value); }\n\n    /**\n     *  The amount of ether (in wei) to send in this transactions.\n     */\n    get value(): bigint { return this.#value; }\n    set value(value: BigNumberish) {\n        this.#value = getBigInt(value, \"value\");\n    }\n\n    /**\n     *  The chain ID this transaction is valid on.\n     */\n    get chainId(): bigint { return this.#chainId; }\n    set chainId(value: BigNumberish) { this.#chainId = getBigInt(value); }\n\n    /**\n     *  If signed, the signature for this transaction.\n     */\n    get signature(): null | Signature { return this.#sig || null; }\n    set signature(value: null | SignatureLike) {\n        this.#sig = (value == null) ? null: Signature.from(value);\n    }\n\n    /**\n     *  The access list.\n     *\n     *  An access list permits discounted (but pre-paid) access to\n     *  bytecode and state variable access within contract execution.\n     */\n    get accessList(): null | AccessList {\n        const value = this.#accessList || null;\n        if (value == null) {\n            if (this.type === 1 || this.type === 2 || this.type === 3) {\n                // @TODO: in v7, this should assign the value or become\n                // a live object itself, otherwise mutation is inconsistent\n                return [ ];\n            }\n            return null;\n        }\n        return value;\n    }\n    set accessList(value: null | AccessListish) {\n        this.#accessList = (value == null) ? null: accessListify(value);\n    }\n\n    /**\n     *  The max fee per blob gas for Cancun transactions.\n     */\n    get maxFeePerBlobGas(): null | bigint {\n        const value = this.#maxFeePerBlobGas;\n        if (value == null && this.type === 3) { return BN_0; }\n        return value;\n    }\n    set maxFeePerBlobGas(value: null | BigNumberish) {\n        this.#maxFeePerBlobGas = (value == null) ? null: getBigInt(value, \"maxFeePerBlobGas\");\n    }\n\n    /**\n     *  The BLOB versioned hashes for Cancun transactions.\n     */\n    get blobVersionedHashes(): null | Array<string> {\n        // @TODO: Mutation is inconsistent; if unset, the returned value\n        // cannot mutate the object, if set it can\n        let value = this.#blobVersionedHashes;\n        if (value == null && this.type === 3) { return [ ]; }\n        return value;\n    }\n    set blobVersionedHashes(value: null | Array<string>) {\n        if (value != null) {\n            assertArgument(Array.isArray(value), \"blobVersionedHashes must be an Array\", \"value\", value);\n            value = value.slice();\n            for (let i = 0; i < value.length; i++) {\n                assertArgument(isHexString(value[i], 32), \"invalid blobVersionedHash\", `value[${ i }]`, value[i]);\n            }\n        }\n        this.#blobVersionedHashes = value;\n    }\n\n    /**\n     *  Creates a new Transaction with default values.\n     */\n    constructor() {\n        this.#type = null;\n        this.#to = null;\n        this.#nonce = 0;\n        this.#gasLimit = BN_0;\n        this.#gasPrice = null;\n        this.#maxPriorityFeePerGas = null;\n        this.#maxFeePerGas = null;\n        this.#data = \"0x\";\n        this.#value = BN_0;\n        this.#chainId = BN_0;\n        this.#sig = null;\n        this.#accessList = null;\n        this.#maxFeePerBlobGas = null;\n        this.#blobVersionedHashes = null;\n    }\n\n    /**\n     *  The transaction hash, if signed. Otherwise, ``null``.\n     */\n    get hash(): null | string {\n        if (this.signature == null) { return null; }\n        return keccak256(this.serialized);\n    }\n\n    /**\n     *  The pre-image hash of this transaction.\n     *\n     *  This is the digest that a [[Signer]] must sign to authorize\n     *  this transaction.\n     */\n    get unsignedHash(): string {\n        return keccak256(this.unsignedSerialized);\n    }\n\n    /**\n     *  The sending address, if signed. Otherwise, ``null``.\n     */\n    get from(): null | string {\n        if (this.signature == null) { return null; }\n        return recoverAddress(this.unsignedHash, this.signature);\n    }\n\n    /**\n     *  The public key of the sender, if signed. Otherwise, ``null``.\n     */\n    get fromPublicKey(): null | string {\n        if (this.signature == null) { return null; }\n        return SigningKey.recoverPublicKey(this.unsignedHash, this.signature);\n    }\n\n    /**\n     *  Returns true if signed.\n     *\n     *  This provides a Type Guard that properties requiring a signed\n     *  transaction are non-null.\n     */\n    isSigned(): this is (Transaction & { type: number, typeName: string, from: string, signature: Signature }) {\n        return this.signature != null;\n    }\n\n    /**\n     *  The serialized transaction.\n     *\n     *  This throws if the transaction is unsigned. For the pre-image,\n     *  use [[unsignedSerialized]].\n     */\n    get serialized(): string {\n        assert(this.signature != null, \"cannot serialize unsigned transaction; maybe you meant .unsignedSerialized\", \"UNSUPPORTED_OPERATION\", { operation: \".serialized\"});\n\n        switch (this.inferType()) {\n            case 0:\n                return _serializeLegacy(this, this.signature);\n            case 1:\n                return _serializeEip2930(this, this.signature);\n            case 2:\n                return _serializeEip1559(this, this.signature);\n            case 3:\n                return _serializeEip4844(this, this.signature);\n        }\n\n        assert(false, \"unsupported transaction type\", \"UNSUPPORTED_OPERATION\", { operation: \".serialized\" });\n    }\n\n    /**\n     *  The transaction pre-image.\n     *\n     *  The hash of this is the digest which needs to be signed to\n     *  authorize this transaction.\n     */\n    get unsignedSerialized(): string {\n        switch (this.inferType()) {\n            case 0:\n                return _serializeLegacy(this);\n            case 1:\n                return _serializeEip2930(this);\n            case 2:\n                return _serializeEip1559(this);\n            case 3:\n                return _serializeEip4844(this);\n        }\n\n        assert(false, \"unsupported transaction type\", \"UNSUPPORTED_OPERATION\", { operation: \".unsignedSerialized\" });\n    }\n\n    /**\n     *  Return the most \"likely\" type; currently the highest\n     *  supported transaction type.\n     */\n    inferType(): number {\n        const types = this.inferTypes();\n\n        // Prefer London (EIP-1559) over Cancun (BLOb)\n        if (types.indexOf(2) >= 0) { return 2; }\n\n        // Return the highest inferred type\n        return <number>(types.pop());\n    }\n\n    /**\n     *  Validates the explicit properties and returns a list of compatible\n     *  transaction types.\n     */\n    inferTypes(): Array<number> {\n\n        // Checks that there are no conflicting properties set\n        const hasGasPrice = this.gasPrice != null;\n        const hasFee = (this.maxFeePerGas != null || this.maxPriorityFeePerGas != null);\n        const hasAccessList = (this.accessList != null);\n        const hasBlob = (this.#maxFeePerBlobGas != null || this.#blobVersionedHashes);\n\n        //if (hasGasPrice && hasFee) {\n        //    throw new Error(\"transaction cannot have gasPrice and maxFeePerGas\");\n        //}\n\n        if (this.maxFeePerGas != null && this.maxPriorityFeePerGas != null) {\n            assert(this.maxFeePerGas >= this.maxPriorityFeePerGas, \"priorityFee cannot be more than maxFee\", \"BAD_DATA\", { value: this });\n        }\n\n        //if (this.type === 2 && hasGasPrice) {\n        //    throw new Error(\"eip-1559 transaction cannot have gasPrice\");\n        //}\n\n        assert(!hasFee || (this.type !== 0 && this.type !== 1), \"transaction type cannot have maxFeePerGas or maxPriorityFeePerGas\", \"BAD_DATA\", { value: this });\n        assert(this.type !== 0 || !hasAccessList, \"legacy transaction cannot have accessList\", \"BAD_DATA\", { value: this })\n\n        const types: Array<number> = [ ];\n\n        // Explicit type\n        if (this.type != null) {\n            types.push(this.type);\n\n        } else {\n            if (hasFee) {\n                types.push(2);\n            } else if (hasGasPrice) {\n                types.push(1);\n                if (!hasAccessList) { types.push(0); }\n            } else if (hasAccessList) {\n                types.push(1);\n                types.push(2);\n            } else if (hasBlob && this.to) {\n                types.push(3);\n            } else {\n                types.push(0);\n                types.push(1);\n                types.push(2);\n                types.push(3);\n            }\n        }\n\n        types.sort();\n\n        return types;\n    }\n\n    /**\n     *  Returns true if this transaction is a legacy transaction (i.e.\n     *  ``type === 0``).\n     *\n     *  This provides a Type Guard that the related properties are\n     *  non-null.\n     */\n    isLegacy(): this is (Transaction & { type: 0, gasPrice: bigint }) {\n        return (this.type === 0);\n    }\n\n    /**\n     *  Returns true if this transaction is berlin hardform transaction (i.e.\n     *  ``type === 1``).\n     *\n     *  This provides a Type Guard that the related properties are\n     *  non-null.\n     */\n    isBerlin(): this is (Transaction & { type: 1, gasPrice: bigint, accessList: AccessList }) {\n        return (this.type === 1);\n    }\n\n    /**\n     *  Returns true if this transaction is london hardform transaction (i.e.\n     *  ``type === 2``).\n     *\n     *  This provides a Type Guard that the related properties are\n     *  non-null.\n     */\n    isLondon(): this is (Transaction & { type: 2, accessList: AccessList, maxFeePerGas: bigint, maxPriorityFeePerGas: bigint }) {\n        return (this.type === 2);\n    }\n\n    /**\n     *  Returns true if this transaction is an [[link-eip-4844]] BLOB\n     *  transaction.\n     *\n     *  This provides a Type Guard that the related properties are\n     *  non-null.\n     */\n    isCancun(): this is (Transaction & { type: 3, to: string, accessList: AccessList, maxFeePerGas: bigint, maxPriorityFeePerGas: bigint, maxFeePerBlobGas: bigint, blobVersionedHashes: Array<string> }) {\n        return (this.type === 3);\n    }\n\n    /**\n     *  Create a copy of this transaciton.\n     */\n    clone(): Transaction {\n        return Transaction.from(this);\n    }\n\n    /**\n     *  Return a JSON-friendly object.\n     */\n    toJSON(): any {\n        const s = (v: null | bigint) => {\n            if (v == null) { return null; }\n            return v.toString();\n        };\n\n        return {\n            type: this.type,\n            to: this.to,\n//            from: this.from,\n            data: this.data,\n            nonce: this.nonce,\n            gasLimit: s(this.gasLimit),\n            gasPrice: s(this.gasPrice),\n            maxPriorityFeePerGas: s(this.maxPriorityFeePerGas),\n            maxFeePerGas: s(this.maxFeePerGas),\n            value: s(this.value),\n            chainId: s(this.chainId),\n            sig: this.signature ? this.signature.toJSON(): null,\n            accessList: this.accessList\n        };\n    }\n\n    /**\n     *  Create a **Transaction** from a serialized transaction or a\n     *  Transaction-like object.\n     */\n    static from(tx?: string | TransactionLike<string>): Transaction {\n        if (tx == null) { return new Transaction(); }\n\n        if (typeof(tx) === \"string\") {\n            const payload = getBytes(tx);\n\n            if (payload[0] >= 0x7f) { // @TODO: > vs >= ??\n                return Transaction.from(_parseLegacy(payload));\n            }\n\n            switch(payload[0]) {\n                case 1: return Transaction.from(_parseEip2930(payload));\n                case 2: return Transaction.from(_parseEip1559(payload));\n                case 3: return Transaction.from(_parseEip4844(payload));\n            }\n            assert(false, \"unsupported transaction type\", \"UNSUPPORTED_OPERATION\", { operation: \"from\" });\n        }\n\n        const result = new Transaction();\n        if (tx.type != null) { result.type = tx.type; }\n        if (tx.to != null) { result.to = tx.to; }\n        if (tx.nonce != null) { result.nonce = tx.nonce; }\n        if (tx.gasLimit != null) { result.gasLimit = tx.gasLimit; }\n        if (tx.gasPrice != null) { result.gasPrice = tx.gasPrice; }\n        if (tx.maxPriorityFeePerGas != null) { result.maxPriorityFeePerGas = tx.maxPriorityFeePerGas; }\n        if (tx.maxFeePerGas != null) { result.maxFeePerGas = tx.maxFeePerGas; }\n        if (tx.maxFeePerBlobGas != null) { result.maxFeePerBlobGas = tx.maxFeePerBlobGas; }\n        if (tx.data != null) { result.data = tx.data; }\n        if (tx.value != null) { result.value = tx.value; }\n        if (tx.chainId != null) { result.chainId = tx.chainId; }\n        if (tx.signature != null) { result.signature = Signature.from(tx.signature); }\n        if (tx.accessList != null) { result.accessList = tx.accessList; }\n        if (tx.blobVersionedHashes != null) { result.blobVersionedHashes = tx.blobVersionedHashes; }\n\n        if (tx.hash != null) {\n            assertArgument(result.isSigned(), \"unsigned transaction cannot define hash\", \"tx\", tx);\n            assertArgument(result.hash === tx.hash, \"hash mismatch\", \"tx\", tx);\n        }\n\n        if (tx.from != null) {\n            assertArgument(result.isSigned(), \"unsigned transaction cannot define from\", \"tx\", tx);\n            assertArgument(result.from.toLowerCase() === (tx.from || \"\").toLowerCase(), \"from mismatch\", \"tx\", tx);\n        }\n\n        return result;\n    }\n}\n", "/**\n *  Each state-changing operation on Ethereum requires a transaction.\n *\n *  @_section api/transaction:Transactions  [about-transactions]\n */\n\nnull;\n\n/**\n *  A single [[AccessList]] entry of storage keys (slots) for an address.\n */\nexport type AccessListEntry = { address: string, storageKeys: Array<string> };\n\n/**\n *  An ordered collection of [[AccessList]] entries.\n */\nexport type AccessList = Array<AccessListEntry>;\n\n/**\n *  Any ethers-supported access list structure.\n */\nexport type AccessListish = AccessList |\n                            Array<[ string, Array<string> ]> |\n                            Record<string, Array<string>>;\n\n\nexport { accessListify } from \"./accesslist.js\";\nexport { computeAddress, recoverAddress } from \"./address.js\";\nexport { Transaction } from \"./transaction.js\";\n\nexport type { TransactionLike } from \"./transaction.js\";\n", "import { keccak256 } from \"../crypto/index.js\";\nimport { MessagePrefix } from \"../constants/index.js\";\nimport { recoverAddress } from \"../transaction/index.js\";\nimport { concat, toUtf8Bytes } from \"../utils/index.js\";\n\nimport type { SignatureLike } from \"../crypto/index.js\";\n/**\n *  Computes the [[link-eip-191]] personal-sign message digest to sign.\n *\n *  This prefixes the message with [[MessagePrefix]] and the decimal length\n *  of %%message%% and computes the [[keccak256]] digest.\n *\n *  If %%message%% is a string, it is converted to its UTF-8 bytes\n *  first. To compute the digest of a [[DataHexString]], it must be converted\n *  to [bytes](getBytes).\n *\n *  @example:\n *    hashMessage(\"Hello World\")\n *    //_result:\n *\n *    // Hashes the SIX (6) string characters, i.e.\n *    // [ \"0\", \"x\", \"4\", \"2\", \"4\", \"3\" ]\n *    hashMessage(\"0x4243\")\n *    //_result:\n *\n *    // Hashes the TWO (2) bytes [ 0x42, 0x43 ]...\n *    hashMessage(getBytes(\"0x4243\"))\n *    //_result:\n *\n *    // ...which is equal to using data\n *    hashMessage(new Uint8Array([ 0x42, 0x43 ]))\n *    //_result:\n *\n */\nexport function hashMessage(message: Uint8Array | string): string {\n    if (typeof(message) === \"string\") { message = toUtf8Bytes(message); }\n    return keccak256(concat([\n        toUtf8Bytes(MessagePrefix),\n        toUtf8Bytes(String(message.length)),\n        message\n    ]));\n}\n\n/**\n *  Return the address of the private key that produced\n *  the signature %%sig%% during signing for %%message%%.\n */\nexport function verifyMessage(message: Uint8Array | string, sig: SignatureLike): string {\n    const digest = hashMessage(message);\n    return recoverAddress(digest, sig);\n}\n", "import { getAddress } from \"../address/index.js\";\nimport {\n    keccak256 as _keccak256, sha256 as _sha256\n} from \"../crypto/index.js\";\nimport {\n    concat, dataLength, getBytes, hexlify, toBeArray, toTwos, toUtf8Bytes, zeroPadBytes, zeroPadValue,\n    assertArgument\n} from \"../utils/index.js\";\n\n\nconst regexBytes = new RegExp(\"^bytes([0-9]+)$\");\nconst regexNumber = new RegExp(\"^(u?int)([0-9]*)$\");\nconst regexArray = new RegExp(\"^(.*)\\\\[([0-9]*)\\\\]$\");\n\n\nfunction _pack(type: string, value: any, isArray?: boolean): Uint8Array {\n    switch(type) {\n        case \"address\":\n            if (isArray) { return getBytes(zeroPadValue(value, 32)); }\n            return getBytes(getAddress(value));\n        case \"string\":\n            return toUtf8Bytes(value);\n        case \"bytes\":\n            return getBytes(value);\n        case \"bool\":\n            value = (!!value ? \"0x01\": \"0x00\");\n            if (isArray) { return getBytes(zeroPadValue(value, 32)); }\n            return getBytes(value);\n    }\n\n    let match =  type.match(regexNumber);\n    if (match) {\n        let signed = (match[1] === \"int\");\n        let size = parseInt(match[2] || \"256\")\n\n        assertArgument((!match[2] || match[2] === String(size)) && (size % 8 === 0) && size !== 0 && size <= 256, \"invalid number type\", \"type\", type);\n\n        if (isArray) { size = 256; }\n\n        if (signed) { value = toTwos(value, size); }\n\n        return getBytes(zeroPadValue(toBeArray(value), size / 8));\n    }\n\n    match = type.match(regexBytes);\n    if (match) {\n        const size = parseInt(match[1]);\n\n        assertArgument(String(size) === match[1] && size !== 0 && size <= 32, \"invalid bytes type\", \"type\", type);\n        assertArgument(dataLength(value) === size, `invalid value for ${ type }`, \"value\", value);\n\n        if (isArray) { return getBytes(zeroPadBytes(value, 32)); }\n        return value;\n    }\n\n    match = type.match(regexArray);\n    if (match && Array.isArray(value)) {\n        const baseType = match[1];\n        const count = parseInt(match[2] || String(value.length));\n        assertArgument(count === value.length, `invalid array length for ${ type }`, \"value\", value);\n\n        const result: Array<Uint8Array> = [];\n        value.forEach(function(value) {\n            result.push(_pack(baseType, value, true));\n        });\n        return getBytes(concat(result));\n    }\n\n    assertArgument(false, \"invalid type\", \"type\", type)\n}\n\n// @TODO: Array Enum\n\n/**\n *   Computes the [[link-solc-packed]] representation of %%values%%\n *   respectively to their %%types%%.\n *\n *   @example:\n *       addr = \"0x8ba1f109551bd432803012645ac136ddd64dba72\"\n *       solidityPacked([ \"address\", \"uint\" ], [ addr, 45 ]);\n *       //_result:\n */\nexport function solidityPacked(types: ReadonlyArray<string>, values: ReadonlyArray<any>): string {\n    assertArgument(types.length === values.length, \"wrong number of values; expected ${ types.length }\", \"values\", values);\n\n    const tight: Array<Uint8Array> = [];\n    types.forEach(function(type, index) {\n        tight.push(_pack(type, values[index]));\n    });\n    return hexlify(concat(tight));\n}\n\n/**\n *   Computes the [[link-solc-packed]] [[keccak256]] hash of %%values%%\n *   respectively to their %%types%%.\n *\n *   @example:\n *       addr = \"0x8ba1f109551bd432803012645ac136ddd64dba72\"\n *       solidityPackedKeccak256([ \"address\", \"uint\" ], [ addr, 45 ]);\n *       //_result:\n */\nexport function solidityPackedKeccak256(types: ReadonlyArray<string>, values: ReadonlyArray<any>): string {\n    return _keccak256(solidityPacked(types, values));\n}\n\n/**\n *   Computes the [[link-solc-packed]] [[sha256]] hash of %%values%%\n *   respectively to their %%types%%.\n *\n *   @example:\n *       addr = \"0x8ba1f109551bd432803012645ac136ddd64dba72\"\n *       solidityPackedSha256([ \"address\", \"uint\" ], [ addr, 45 ]);\n *       //_result:\n */\nexport function solidityPackedSha256(types: ReadonlyArray<string>, values: ReadonlyArray<any>): string {\n    return _sha256(solidityPacked(types, values));\n}\n", "//import { TypedDataDomain, TypedDataField } from \"@ethersproject/providerabstract-signer\";\nimport { getAddress } from \"../address/index.js\";\nimport { keccak256 } from \"../crypto/index.js\";\nimport { recoverAddress } from \"../transaction/index.js\";\nimport {\n    concat, defineProperties, getBigInt, getBytes, hexlify, isHexString, mask, toBeHex, toQuantity, toTwos, zeroPadValue,\n    assertArgument\n} from \"../utils/index.js\";\n\nimport { id } from \"./id.js\";\n\nimport type { SignatureLike } from \"../crypto/index.js\";\nimport type { BigNumberish, BytesLike } from \"../utils/index.js\";\n\n\nconst padding = new Uint8Array(32);\npadding.fill(0);\n\nconst BN__1 = BigInt(-1);\nconst BN_0 = BigInt(0);\nconst BN_1 = BigInt(1);\nconst BN_MAX_UINT256 = BigInt(\"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\");\n\n// @TODO: in v7, verifyingContract should be an AddressLike and use resolveAddress\n\n/**\n *  The domain for an [[link-eip-712]] payload.\n */\nexport interface TypedDataDomain {\n    /**\n     *  The human-readable name of the signing domain.\n     */\n    name?: null | string;\n\n    /**\n     *  The major version of the signing domain.\n     */\n    version?: null | string;\n\n    /**\n     *  The chain ID of the signing domain.\n     */\n    chainId?: null | BigNumberish;\n\n    /**\n     *  The the address of the contract that will verify the signature.\n     */\n    verifyingContract?: null | string;\n\n    /**\n     *  A salt used for purposes decided by the specific domain.\n     */\n    salt?: null | BytesLike;\n};\n\n/**\n *  A specific field of a structured [[link-eip-712]] type.\n */\nexport interface TypedDataField {\n    /**\n     *  The field name.\n     */\n    name: string;\n\n    /**\n     *  The type of the field.\n     */\n    type: string;\n};\n\nfunction hexPadRight(value: BytesLike): string {\n    const bytes = getBytes(value);\n    const padOffset = bytes.length % 32\n    if (padOffset) {\n        return concat([ bytes, padding.slice(padOffset) ]);\n    }\n    return hexlify(bytes);\n}\n\nconst hexTrue = toBeHex(BN_1, 32);\nconst hexFalse = toBeHex(BN_0, 32);\n\nconst domainFieldTypes: Record<string, string> = {\n    name: \"string\",\n    version: \"string\",\n    chainId: \"uint256\",\n    verifyingContract: \"address\",\n    salt: \"bytes32\"\n};\n\nconst domainFieldNames: Array<string> = [\n    \"name\", \"version\", \"chainId\", \"verifyingContract\", \"salt\"\n];\n\nfunction checkString(key: string): (value: any) => string {\n    return function (value: any){\n        assertArgument(typeof(value) === \"string\", `invalid domain value for ${ JSON.stringify(key) }`, `domain.${ key }`, value);\n        return value;\n    }\n}\n\nconst domainChecks: Record<string, (value: any) => any> = {\n    name: checkString(\"name\"),\n    version: checkString(\"version\"),\n    chainId: function(_value: any) {\n        const value = getBigInt(_value, \"domain.chainId\");\n        assertArgument(value >= 0, \"invalid chain ID\", \"domain.chainId\", _value);\n        if (Number.isSafeInteger(value)) { return Number(value); }\n        return toQuantity(value);\n    },\n    verifyingContract: function(value: any) {\n        try {\n            return getAddress(value).toLowerCase();\n        } catch (error) { }\n        assertArgument(false, `invalid domain value \"verifyingContract\"`, \"domain.verifyingContract\", value);\n    },\n    salt: function(value: any) {\n        const bytes = getBytes(value, \"domain.salt\");\n        assertArgument(bytes.length === 32, `invalid domain value \"salt\"`, \"domain.salt\", value);\n        return hexlify(bytes);\n    }\n}\n\nfunction getBaseEncoder(type: string): null | ((value: any) => string) {\n    // intXX and uintXX\n    {\n        const match = type.match(/^(u?)int(\\d+)$/);\n        if (match) {\n            const signed = (match[1] === \"\");\n\n            const width = parseInt(match[2]);\n            assertArgument(width % 8 === 0 && width !== 0 && width <= 256 && match[2] === String(width), \"invalid numeric width\", \"type\", type);\n\n            const boundsUpper = mask(BN_MAX_UINT256, signed ? (width - 1): width);\n            const boundsLower = signed ? ((boundsUpper + BN_1) * BN__1): BN_0;\n\n            return function(_value: BigNumberish) {\n                const value = getBigInt(_value, \"value\");\n\n                assertArgument(value >= boundsLower && value <= boundsUpper, `value out-of-bounds for ${ type }`, \"value\", value);\n\n                return toBeHex(signed ? toTwos(value, 256): value, 32);\n            };\n        }\n    }\n\n    // bytesXX\n    {\n        const match = type.match(/^bytes(\\d+)$/);\n        if (match) {\n            const width = parseInt(match[1]);\n            assertArgument(width !== 0 && width <= 32 && match[1] === String(width), \"invalid bytes width\", \"type\", type);\n\n            return function(value: BytesLike) {\n                const bytes = getBytes(value);\n                assertArgument(bytes.length === width, `invalid length for ${ type }`, \"value\", value);\n                return hexPadRight(value);\n            };\n        }\n    }\n\n    switch (type) {\n        case \"address\": return function(value: string) {\n            return zeroPadValue(getAddress(value), 32);\n        };\n        case \"bool\": return function(value: boolean) {\n            return ((!value) ? hexFalse: hexTrue);\n        };\n        case \"bytes\": return function(value: BytesLike) {\n            return keccak256(value);\n        };\n        case \"string\": return function(value: string) {\n            return id(value);\n        };\n    }\n\n    return null;\n}\n\nfunction encodeType(name: string, fields: Array<TypedDataField>): string {\n    return `${ name }(${ fields.map(({ name, type }) => (type + \" \" + name)).join(\",\") })`;\n}\n\ntype ArrayResult = {\n    base: string;         // The base type\n    index?: string;       // the full Index (if any)\n    array?: {             // The Array... (if index)\n        base: string;     // ...base type (same as above)\n        prefix: string;   // ...sans the final Index\n        count: number;    // ...the final Index (-1 for dynamic)\n    }\n};\n\n// foo[][3] => { base: \"foo\", index: \"[][3]\", array: {\n//     base: \"foo\", prefix: \"foo[]\", count: 3 } }\nfunction splitArray(type: string): ArrayResult {\n    const match = type.match(/^([^\\x5b]*)((\\x5b\\d*\\x5d)*)(\\x5b(\\d*)\\x5d)$/);\n    if (match) {\n        return {\n            base: match[1],\n            index: (match[2] + match[4]),\n            array: {\n                base: match[1],\n                prefix: (match[1] + match[2]),\n                count: (match[5] ? parseInt(match[5]): -1),\n            }\n        };\n    }\n\n    return { base: type };\n}\n\n/**\n *  A **TypedDataEncode** prepares and encodes [[link-eip-712]] payloads\n *  for signed typed data.\n *\n *  This is useful for those that wish to compute various components of a\n *  typed data hash, primary types, or sub-components, but generally the\n *  higher level [[Signer-signTypedData]] is more useful.\n */\nexport class TypedDataEncoder {\n    /**\n     *  The primary type for the structured [[types]].\n     *\n     *  This is derived automatically from the [[types]], since no\n     *  recursion is possible, once the DAG for the types is consturcted\n     *  internally, the primary type must be the only remaining type with\n     *  no parent nodes.\n     */\n    readonly primaryType!: string;\n\n    readonly #types: string;\n\n    /**\n     *  The types.\n     */\n    get types(): Record<string, Array<TypedDataField>> {\n        return JSON.parse(this.#types);\n    }\n\n    readonly #fullTypes: Map<string, string>\n\n    readonly #encoderCache: Map<string, (value: any) => string>;\n\n    /**\n     *  Create a new **TypedDataEncoder** for %%types%%.\n     *\n     *  This performs all necessary checking that types are valid and\n     *  do not violate the [[link-eip-712]] structural constraints as\n     *  well as computes the [[primaryType]].\n     */\n    constructor(_types: Record<string, Array<TypedDataField>>) {\n        this.#fullTypes = new Map();\n        this.#encoderCache = new Map();\n\n        // Link struct types to their direct child structs\n        const links: Map<string, Set<string>> = new Map();\n\n        // Link structs to structs which contain them as a child\n        const parents: Map<string, Array<string>> = new Map();\n\n        // Link all subtypes within a given struct\n        const subtypes: Map<string, Set<string>> = new Map();\n\n        const types: Record<string, Array<TypedDataField>> = { };\n        Object.keys(_types).forEach((type) => {\n            types[type] = _types[type].map(({ name, type }) => {\n\n                // Normalize the base type (unless name conflict)\n                let { base, index } = splitArray(type);\n                if (base === \"int\" && !_types[\"int\"]) { base = \"int256\"; }\n                if (base === \"uint\" && !_types[\"uint\"]) { base = \"uint256\"; }\n\n                return { name, type: (base + (index || \"\")) };\n            });\n\n            links.set(type, new Set());\n            parents.set(type, [ ]);\n            subtypes.set(type, new Set());\n        });\n        this.#types = JSON.stringify(types);\n\n        for (const name in types) {\n            const uniqueNames: Set<string> = new Set();\n\n            for (const field of types[name]) {\n\n                // Check each field has a unique name\n                assertArgument(!uniqueNames.has(field.name), `duplicate variable name ${ JSON.stringify(field.name) } in ${ JSON.stringify(name) }`, \"types\", _types);\n                uniqueNames.add(field.name);\n\n                // Get the base type (drop any array specifiers)\n                const baseType = splitArray(field.type).base;\n                assertArgument(baseType !== name, `circular type reference to ${ JSON.stringify(baseType) }`, \"types\", _types);\n\n                // Is this a base encoding type?\n                const encoder = getBaseEncoder(baseType);\n                if (encoder) { continue; }\n\n                assertArgument(parents.has(baseType), `unknown type ${ JSON.stringify(baseType) }`, \"types\", _types);\n\n                // Add linkage\n                (parents.get(baseType) as Array<string>).push(name);\n                (links.get(name) as Set<string>).add(baseType);\n            }\n        }\n\n        // Deduce the primary type\n        const primaryTypes = Array.from(parents.keys()).filter((n) => ((parents.get(n) as Array<string>).length === 0));\n        assertArgument(primaryTypes.length !== 0, \"missing primary type\", \"types\", _types);\n        assertArgument(primaryTypes.length === 1, `ambiguous primary types or unused types: ${ primaryTypes.map((t) => (JSON.stringify(t))).join(\", \") }`, \"types\", _types);\n\n        defineProperties<TypedDataEncoder>(this, { primaryType: primaryTypes[0] });\n\n        // Check for circular type references\n        function checkCircular(type: string, found: Set<string>) {\n            assertArgument(!found.has(type), `circular type reference to ${ JSON.stringify(type) }`, \"types\", _types);\n\n            found.add(type);\n\n            for (const child of (links.get(type) as Set<string>)) {\n                if (!parents.has(child)) { continue; }\n\n                // Recursively check children\n                checkCircular(child, found);\n\n                // Mark all ancestors as having this decendant\n                for (const subtype of found) {\n                    (subtypes.get(subtype) as Set<string>).add(child);\n                }\n            }\n\n            found.delete(type);\n        }\n        checkCircular(this.primaryType, new Set());\n\n        // Compute each fully describe type\n        for (const [ name, set ] of subtypes) {\n            const st = Array.from(set);\n            st.sort();\n            this.#fullTypes.set(name, encodeType(name, types[name]) + st.map((t) => encodeType(t, types[t])).join(\"\"));\n        }\n    }\n\n    /**\n     *  Returnthe encoder for the specific %%type%%.\n     */\n    getEncoder(type: string): (value: any) => string {\n        let encoder = this.#encoderCache.get(type);\n        if (!encoder) {\n            encoder = this.#getEncoder(type);\n            this.#encoderCache.set(type, encoder);\n        }\n        return encoder;\n    }\n\n    #getEncoder(type: string): (value: any) => string {\n\n        // Basic encoder type (address, bool, uint256, etc)\n        {\n            const encoder = getBaseEncoder(type);\n            if (encoder) { return encoder; }\n        }\n\n        // Array\n        const array = splitArray(type).array;\n        if (array) {\n            const subtype = array.prefix;\n            const subEncoder = this.getEncoder(subtype);\n            return (value: Array<any>) => {\n                assertArgument(array.count === -1 || array.count === value.length, `array length mismatch; expected length ${ array.count }`, \"value\", value);\n\n                let result = value.map(subEncoder);\n                if (this.#fullTypes.has(subtype)) {\n                    result = result.map(keccak256);\n                }\n\n                return keccak256(concat(result));\n            };\n        }\n\n        // Struct\n        const fields = this.types[type];\n        if (fields) {\n            const encodedType = id(this.#fullTypes.get(type) as string);\n            return (value: Record<string, any>) => {\n                const values = fields.map(({ name, type }) => {\n                    const result = this.getEncoder(type)(value[name]);\n                    if (this.#fullTypes.has(type)) { return keccak256(result); }\n                    return result;\n                });\n                values.unshift(encodedType);\n                return concat(values);\n            }\n        }\n\n        assertArgument(false, `unknown type: ${ type }`, \"type\", type);\n    }\n\n    /**\n     *  Return the full type for %%name%%.\n     */\n    encodeType(name: string): string {\n        const result = this.#fullTypes.get(name);\n        assertArgument(result, `unknown type: ${ JSON.stringify(name) }`, \"name\", name);\n        return result;\n    }\n\n    /**\n     *  Return the encoded %%value%% for the %%type%%.\n     */\n    encodeData(type: string, value: any): string {\n        return this.getEncoder(type)(value);\n    }\n\n    /**\n     *  Returns the hash of %%value%% for the type of %%name%%.\n     */\n    hashStruct(name: string, value: Record<string, any>): string {\n        return keccak256(this.encodeData(name, value));\n    }\n\n    /**\n     *  Return the fulled encoded %%value%% for the [[types]].\n     */\n    encode(value: Record<string, any>): string {\n        return this.encodeData(this.primaryType, value);\n    }\n\n    /**\n     *  Return the hash of the fully encoded %%value%% for the [[types]].\n     */\n    hash(value: Record<string, any>): string {\n        return this.hashStruct(this.primaryType, value);\n    }\n\n    /**\n     *  @_ignore:\n     */\n    _visit(type: string, value: any, callback: (type: string, data: any) => any): any {\n        // Basic encoder type (address, bool, uint256, etc)\n        {\n            const encoder = getBaseEncoder(type);\n            if (encoder) { return callback(type, value); }\n        }\n\n        // Array\n        const array = splitArray(type).array;\n        if (array) {\n            assertArgument(array.count === -1 || array.count === value.length, `array length mismatch; expected length ${ array.count }`, \"value\", value);\n            return value.map((v: any) => this._visit(array.prefix, v, callback));\n        }\n\n        // Struct\n        const fields = this.types[type];\n        if (fields) {\n            return fields.reduce((accum, { name, type }) => {\n                accum[name] = this._visit(type, value[name], callback);\n                return accum;\n            }, <Record<string, any>>{});\n        }\n\n        assertArgument(false, `unknown type: ${ type }`, \"type\", type);\n    }\n\n    /**\n     *  Call %%calback%% for each value in %%value%%, passing the type and\n     *  component within %%value%%.\n     *\n     *  This is useful for replacing addresses or other transformation that\n     *  may be desired on each component, based on its type.\n     */\n    visit(value: Record<string, any>, callback: (type: string, data: any) => any): any {\n        return this._visit(this.primaryType, value, callback);\n    }\n\n    /**\n     *  Create a new **TypedDataEncoder** for %%types%%.\n     */\n    static from(types: Record<string, Array<TypedDataField>>): TypedDataEncoder {\n        return new TypedDataEncoder(types);\n    }\n\n    /**\n     *  Return the primary type for %%types%%.\n     */\n    static getPrimaryType(types: Record<string, Array<TypedDataField>>): string {\n        return TypedDataEncoder.from(types).primaryType;\n    }\n\n    /**\n     *  Return the hashed struct for %%value%% using %%types%% and %%name%%.\n     */\n    static hashStruct(name: string, types: Record<string, Array<TypedDataField>>, value: Record<string, any>): string {\n        return TypedDataEncoder.from(types).hashStruct(name, value);\n    }\n\n    /**\n     *  Return the domain hash for %%domain%%.\n     */\n    static hashDomain(domain: TypedDataDomain): string {\n        const domainFields: Array<TypedDataField> = [ ];\n        for (const name in domain) {\n            if ((<Record<string, any>>domain)[name] == null) { continue; }\n            const type = domainFieldTypes[name];\n            assertArgument(type, `invalid typed-data domain key: ${ JSON.stringify(name) }`, \"domain\", domain);\n            domainFields.push({ name, type });\n        }\n\n        domainFields.sort((a, b) => {\n            return domainFieldNames.indexOf(a.name) - domainFieldNames.indexOf(b.name);\n        });\n\n        return TypedDataEncoder.hashStruct(\"EIP712Domain\", { EIP712Domain: domainFields }, domain);\n    }\n\n    /**\n     *  Return the fully encoded [[link-eip-712]] %%value%% for %%types%% with %%domain%%.\n     */\n    static encode(domain: TypedDataDomain, types: Record<string, Array<TypedDataField>>, value: Record<string, any>): string {\n        return concat([\n            \"0x1901\",\n            TypedDataEncoder.hashDomain(domain),\n            TypedDataEncoder.from(types).hash(value)\n        ]);\n    }\n\n    /**\n     *  Return the hash of the fully encoded [[link-eip-712]] %%value%% for %%types%% with %%domain%%.\n     */\n    static hash(domain: TypedDataDomain, types: Record<string, Array<TypedDataField>>, value: Record<string, any>): string {\n        return keccak256(TypedDataEncoder.encode(domain, types, value));\n    }\n\n    // Replaces all address types with ENS names with their looked up address\n    /**\n     * Resolves to the value from resolving all addresses in %%value%% for\n     * %%types%% and the %%domain%%.\n     */\n    static async resolveNames(domain: TypedDataDomain, types: Record<string, Array<TypedDataField>>, value: Record<string, any>, resolveName: (name: string) => Promise<string>): Promise<{ domain: TypedDataDomain, value: any }> {\n        // Make a copy to isolate it from the object passed in\n        domain = Object.assign({ }, domain);\n\n        // Allow passing null to ignore value\n        for (const key in domain) {\n            if ((<Record<string, any>>domain)[key] == null) {\n                delete (<Record<string, any>>domain)[key];\n            }\n        }\n\n        // Look up all ENS names\n        const ensCache: Record<string, string> = { };\n\n        // Do we need to look up the domain's verifyingContract?\n        if (domain.verifyingContract && !isHexString(domain.verifyingContract, 20)) {\n            ensCache[domain.verifyingContract] = \"0x\";\n        }\n\n        // We are going to use the encoder to visit all the base values\n        const encoder = TypedDataEncoder.from(types);\n\n        // Get a list of all the addresses\n        encoder.visit(value, (type: string, value: any) => {\n            if (type === \"address\" && !isHexString(value, 20)) {\n                ensCache[value] = \"0x\";\n            }\n            return value;\n        });\n\n        // Lookup each name\n        for (const name in ensCache) {\n            ensCache[name] = await resolveName(name);\n        }\n\n        // Replace the domain verifyingContract if needed\n        if (domain.verifyingContract && ensCache[domain.verifyingContract]) {\n            domain.verifyingContract = ensCache[domain.verifyingContract];\n        }\n\n        // Replace all ENS names with their address\n        value = encoder.visit(value, (type: string, value: any) => {\n            if (type === \"address\" && ensCache[value]) { return ensCache[value]; }\n            return value;\n        });\n\n        return { domain, value };\n    }\n\n    /**\n     *  Returns the JSON-encoded payload expected by nodes which implement\n     *  the JSON-RPC [[link-eip-712]] method.\n     */\n    static getPayload(domain: TypedDataDomain, types: Record<string, Array<TypedDataField>>, value: Record<string, any>): any {\n        // Validate the domain fields\n        TypedDataEncoder.hashDomain(domain);\n\n        // Derive the EIP712Domain Struct reference type\n        const domainValues: Record<string, any> = { };\n        const domainTypes: Array<{ name: string, type:string }> = [ ];\n\n        domainFieldNames.forEach((name) => {\n            const value = (<any>domain)[name];\n            if (value == null) { return; }\n            domainValues[name] = domainChecks[name](value);\n            domainTypes.push({ name, type: domainFieldTypes[name] });\n        });\n\n        const encoder = TypedDataEncoder.from(types);\n\n        // Get the normalized types\n        types = encoder.types;\n\n        const typesWithDomain = Object.assign({ }, types);\n        assertArgument(typesWithDomain.EIP712Domain == null, \"types must not contain EIP712Domain type\", \"types.EIP712Domain\", types);\n\n        typesWithDomain.EIP712Domain = domainTypes;\n\n        // Validate the data structures and types\n        encoder.encode(value);\n\n        return {\n            types: typesWithDomain,\n            domain: domainValues,\n            primaryType: encoder.primaryType,\n            message: encoder.visit(value, (type: string, value: any) => {\n\n                // bytes\n                if (type.match(/^bytes(\\d*)/)) {\n                    return hexlify(getBytes(value));\n                }\n\n                // uint or int\n                if (type.match(/^u?int/)) {\n                    return getBigInt(value).toString();\n                }\n\n                switch (type) {\n                    case \"address\":\n                        return value.toLowerCase();\n                    case \"bool\":\n                        return !!value;\n                    case \"string\":\n                        assertArgument(typeof(value) === \"string\", \"invalid string\", \"value\", value);\n                        return value;\n                }\n\n                assertArgument(false, \"unsupported type\", \"type\", type);\n            })\n        };\n    }\n}\n\n/**\n *  Compute the address used to sign the typed data for the %%signature%%.\n */\nexport function verifyTypedData(domain: TypedDataDomain, types: Record<string, Array<TypedDataField>>, value: Record<string, any>, signature: SignatureLike): string {\n    return recoverAddress(TypedDataEncoder.hash(domain, types, value), signature);\n}\n", "/**\n *  Utilities for common tasks involving hashing. Also see\n *  [cryptographic hashing](about-crypto-hashing).\n *\n *  @_section: api/hashing:Hashing Utilities  [about-hashing]\n */\n\nexport { id } from \"./id.js\"\nexport { ensNormalize, isValidName, namehash, dnsEncode } from \"./namehash.js\";\nexport { hashMessage, verifyMessage } from \"./message.js\";\nexport {\n    solidityPacked, solidityPackedKeccak256, solidityPackedSha256\n} from \"./solidity.js\";\nexport { TypedDataEncoder, verifyTypedData } from \"./typed-data.js\";\n\nexport type { TypedDataDomain, TypedDataField } from \"./typed-data.js\";\n", "/**\n *  A fragment is a single item from an ABI, which may represent any of:\n *\n *  - [Functions](FunctionFragment)\n *  - [Events](EventFragment)\n *  - [Constructors](ConstructorFragment)\n *  - Custom [Errors](ErrorFragment)\n *  - [Fallback or Receive](FallbackFragment) functions\n *\n *  @_subsection api/abi/abi-coder:Fragments  [about-fragments]\n */\n\nimport {\n    defineProperties, getBigInt, getNumber,\n    assert, assertPrivate, assertArgument\n} from \"../utils/index.js\";\nimport { id } from \"../hash/index.js\";\n\n/**\n *  A Type description in a [JSON ABI format](link-solc-jsonabi).\n */\nexport interface JsonFragmentType {\n    /**\n     *  The parameter name.\n     */\n    readonly name?: string;\n\n    /**\n     *  If the parameter is indexed.\n     */\n    readonly indexed?: boolean;\n\n    /**\n     *  The type of the parameter.\n     */\n    readonly type?: string;\n\n    /**\n     *  The internal Solidity type.\n     */\n    readonly internalType?: string;\n\n    /**\n     *  The components for a tuple.\n     */\n    readonly components?: ReadonlyArray<JsonFragmentType>;\n}\n\n/**\n *  A fragment for a method, event or error in a [JSON ABI format](link-solc-jsonabi).\n */\nexport interface JsonFragment {\n    /**\n     *  The name of the error, event, function, etc.\n     */\n    readonly name?: string;\n\n    /**\n     *  The type of the fragment (e.g. ``event``, ``\"function\"``, etc.)\n     */\n    readonly type?: string;\n\n    /**\n     *  If the event is anonymous.\n     */\n    readonly anonymous?: boolean;\n\n    /**\n     *  If the function is payable.\n     */\n    readonly payable?: boolean;\n\n    /**\n     *  If the function is constant.\n     */\n    readonly constant?: boolean;\n\n    /**\n     *  The mutability state of the function.\n     */\n    readonly stateMutability?: string;\n\n    /**\n     *  The input parameters.\n     */\n    readonly inputs?: ReadonlyArray<JsonFragmentType>;\n\n    /**\n     *  The output parameters.\n     */\n    readonly outputs?: ReadonlyArray<JsonFragmentType>;\n\n    /**\n     *  The gas limit to use when sending a transaction for this function.\n     */\n    readonly gas?: string;\n};\n\n/**\n *  The format to serialize the output as.\n *\n *  **``\"sighash\"``** - the bare formatting, used to compute the selector\n *  or topic hash; this format cannot be reversed (as it discards ``indexed``)\n *  so cannot by used to export an [[Interface]].\n *\n *  **``\"minimal\"``** - Human-Readable ABI with minimal spacing and without\n *  names, so it is compact, but will result in Result objects that cannot\n *  be accessed by name.\n *\n *  **``\"full\"``** - Full Human-Readable ABI, with readable spacing and names\n *  intact; this is generally the recommended format.\n *\n *  **``\"json\"``** - The [JSON ABI format](link-solc-jsonabi).\n */\nexport type FormatType = \"sighash\" | \"minimal\" | \"full\" | \"json\";\n\n// [ \"a\", \"b\" ] => { \"a\": 1, \"b\": 1 }\nfunction setify(items: Array<string>): ReadonlySet<string> {\n    const result: Set<string> = new Set();\n    items.forEach((k) => result.add(k));\n    return Object.freeze(result);\n}\n\nconst _kwVisibDeploy = \"external public payable override\";\nconst KwVisibDeploy = setify(_kwVisibDeploy.split(\" \"));\n\n// Visibility Keywords\nconst _kwVisib = \"constant external internal payable private public pure view override\";\nconst KwVisib = setify(_kwVisib.split(\" \"));\n\nconst _kwTypes = \"constructor error event fallback function receive struct\";\nconst KwTypes = setify(_kwTypes.split(\" \"));\n\nconst _kwModifiers = \"calldata memory storage payable indexed\";\nconst KwModifiers = setify(_kwModifiers.split(\" \"));\n\nconst _kwOther = \"tuple returns\";\n\n// All Keywords\nconst _keywords = [ _kwTypes, _kwModifiers, _kwOther, _kwVisib ].join(\" \");\nconst Keywords = setify(_keywords.split(\" \"));\n\n// Single character tokens\nconst SimpleTokens: Record<string, string> = {\n  \"(\": \"OPEN_PAREN\", \")\": \"CLOSE_PAREN\",\n  \"[\": \"OPEN_BRACKET\", \"]\": \"CLOSE_BRACKET\",\n  \",\": \"COMMA\", \"@\": \"AT\"\n};\n\n// Parser regexes to consume the next token\nconst regexWhitespacePrefix = new RegExp(\"^(\\\\s*)\");\nconst regexNumberPrefix = new RegExp(\"^([0-9]+)\");\nconst regexIdPrefix = new RegExp(\"^([a-zA-Z$_][a-zA-Z0-9$_]*)\");\n\n// Parser regexs to check validity\nconst regexId = new RegExp(\"^([a-zA-Z$_][a-zA-Z0-9$_]*)$\");\nconst regexType = new RegExp(\"^(address|bool|bytes([0-9]*)|string|u?int([0-9]*))$\");\n\n/**\n *  @ignore:\n */\ntype Token = Readonly<{\n    // Type of token (e.g. TYPE, KEYWORD, NUMBER, etc)\n    type: string;\n\n    // Offset into the original source code\n    offset: number;\n\n    // Actual text content of the token\n    text: string;\n\n    // The parenthesis depth\n    depth: number;\n\n    // If a parenthesis, the offset (in tokens) that balances it\n    match: number;\n\n    // For parenthesis and commas, the offset (in tokens) to the\n    // previous/next parenthesis or comma in the list\n    linkBack: number;\n    linkNext: number;\n\n    // If a BRACKET, the value inside\n    value: number;\n}>;\n\nclass TokenString {\n    #offset: number;\n    #tokens: ReadonlyArray<Token>;\n\n    get offset(): number { return this.#offset; }\n    get length(): number { return this.#tokens.length - this.#offset; }\n\n    constructor(tokens: ReadonlyArray<Token>) {\n        this.#offset = 0;\n        this.#tokens = tokens.slice();\n    }\n\n    clone(): TokenString { return new TokenString(this.#tokens); }\n    reset(): void { this.#offset = 0; }\n\n    #subTokenString(from: number = 0, to: number = 0): TokenString {\n        return new TokenString(this.#tokens.slice(from, to).map((t) => {\n            return Object.freeze(Object.assign({ }, t, {\n                match: (t.match - from),\n                linkBack: (t.linkBack - from),\n                linkNext: (t.linkNext - from),\n            }));\n        }));\n    }\n\n    // Pops and returns the value of the next token, if it is a keyword in allowed; throws if out of tokens\n    popKeyword(allowed: ReadonlySet<string>): string {\n        const top = this.peek();\n        if (top.type !== \"KEYWORD\" || !allowed.has(top.text)) { throw new Error(`expected keyword ${ top.text }`); }\n        return this.pop().text;\n    }\n\n    // Pops and returns the value of the next token if it is `type`; throws if out of tokens\n    popType(type: string): string {\n        if (this.peek().type !== type) {\n            const top = this.peek();\n            throw new Error(`expected ${ type }; got ${ top.type } ${ JSON.stringify(top.text) }`);\n        }\n        return this.pop().text;\n    }\n\n    // Pops and returns a \"(\" TOKENS \")\"\n    popParen(): TokenString {\n        const top = this.peek();\n        if (top.type !== \"OPEN_PAREN\") { throw new Error(\"bad start\"); }\n        const result = this.#subTokenString(this.#offset + 1, top.match + 1);\n        this.#offset = top.match + 1;\n        return result;\n    }\n\n    // Pops and returns the items within \"(\" ITEM1 \",\" ITEM2 \",\" ... \")\"\n    popParams(): Array<TokenString> {\n        const top = this.peek();\n\n        if (top.type !== \"OPEN_PAREN\") { throw new Error(\"bad start\"); }\n\n        const result: Array<TokenString> = [ ];\n\n        while(this.#offset < top.match - 1) {\n            const link = this.peek().linkNext;\n            result.push(this.#subTokenString(this.#offset + 1, link));\n            this.#offset = link;\n        }\n\n        this.#offset = top.match + 1;\n\n        return result;\n    }\n\n    // Returns the top Token, throwing if out of tokens\n    peek(): Token {\n        if (this.#offset >= this.#tokens.length) {\n            throw new Error(\"out-of-bounds\");\n        }\n        return this.#tokens[this.#offset];\n    }\n\n    // Returns the next value, if it is a keyword in `allowed`\n    peekKeyword(allowed: ReadonlySet<string>): null | string {\n        const top = this.peekType(\"KEYWORD\");\n        return (top != null && allowed.has(top)) ? top: null;\n    }\n\n    // Returns the value of the next token if it is `type`\n    peekType(type: string): null | string {\n        if (this.length === 0) { return null; }\n        const top = this.peek();\n        return (top.type === type) ? top.text: null;\n    }\n\n    // Returns the next token; throws if out of tokens\n    pop(): Token {\n        const result = this.peek();\n        this.#offset++;\n        return result;\n    }\n\n    toString(): string {\n        const tokens: Array<string> = [ ];\n        for (let i = this.#offset; i < this.#tokens.length; i++) {\n            const token = this.#tokens[i];\n            tokens.push(`${ token.type }:${ token.text }`);\n        }\n        return `<TokenString ${ tokens.join(\" \") }>`\n    }\n}\n\ntype Writeable<T> = { -readonly [P in keyof T]: T[P] };\n\nfunction lex(text: string): TokenString {\n    const tokens: Array<Token> = [ ];\n\n    const throwError = (message: string) => {\n        const token = (offset < text.length) ? JSON.stringify(text[offset]): \"$EOI\";\n        throw new Error(`invalid token ${ token } at ${ offset }: ${ message }`);\n    };\n\n    let brackets: Array<number> = [ ];\n    let commas: Array<number> = [ ];\n\n    let offset = 0;\n    while (offset < text.length) {\n\n        // Strip off any leading whitespace\n        let cur = text.substring(offset);\n        let match = cur.match(regexWhitespacePrefix);\n        if (match) {\n            offset += match[1].length;\n            cur = text.substring(offset);\n        }\n\n        const token = { depth: brackets.length, linkBack: -1, linkNext: -1, match: -1, type: \"\", text: \"\", offset, value: -1 };\n        tokens.push(token);\n\n        let type = (SimpleTokens[cur[0]] || \"\");\n        if (type) {\n            token.type = type;\n            token.text = cur[0];\n            offset++;\n\n            if (type === \"OPEN_PAREN\") {\n                brackets.push(tokens.length - 1);\n                commas.push(tokens.length - 1);\n\n            } else if (type == \"CLOSE_PAREN\") {\n                if (brackets.length === 0) { throwError(\"no matching open bracket\"); }\n\n                token.match = brackets.pop() as number;\n                (<Writeable<Token>>(tokens[token.match])).match = tokens.length - 1;\n                token.depth--;\n\n                token.linkBack = commas.pop() as number;\n                (<Writeable<Token>>(tokens[token.linkBack])).linkNext = tokens.length - 1;\n\n            } else if (type === \"COMMA\") {\n                token.linkBack = commas.pop() as number;\n                (<Writeable<Token>>(tokens[token.linkBack])).linkNext = tokens.length - 1;\n                commas.push(tokens.length - 1);\n\n            } else if (type === \"OPEN_BRACKET\") {\n                token.type = \"BRACKET\";\n\n            } else if (type === \"CLOSE_BRACKET\") {\n                // Remove the CLOSE_BRACKET\n                let suffix = (tokens.pop() as Token).text;\n                if (tokens.length > 0 && tokens[tokens.length - 1].type === \"NUMBER\") {\n                    const value = (tokens.pop() as Token).text;\n                    suffix = value + suffix;\n                    (<Writeable<Token>>(tokens[tokens.length - 1])).value = getNumber(value);\n                }\n                if (tokens.length === 0 || tokens[tokens.length - 1].type !== \"BRACKET\") {\n                    throw new Error(\"missing opening bracket\");\n                }\n                (<Writeable<Token>>(tokens[tokens.length - 1])).text += suffix;\n            }\n\n            continue;\n        }\n\n        match = cur.match(regexIdPrefix);\n        if (match) {\n            token.text = match[1];\n            offset += token.text.length;\n\n            if (Keywords.has(token.text)) {\n                token.type = \"KEYWORD\";\n                continue;\n            }\n\n            if (token.text.match(regexType)) {\n                token.type = \"TYPE\";\n                continue;\n            }\n\n            token.type = \"ID\";\n            continue;\n        }\n\n        match = cur.match(regexNumberPrefix);\n        if (match) {\n            token.text = match[1];\n            token.type = \"NUMBER\";\n            offset += token.text.length;\n            continue;\n        }\n\n        throw new Error(`unexpected token ${ JSON.stringify(cur[0]) } at position ${ offset }`);\n    }\n\n    return new TokenString(tokens.map((t) => Object.freeze(t)));\n}\n\n// Check only one of `allowed` is in `set`\nfunction allowSingle(set: ReadonlySet<string>, allowed: ReadonlySet<string>): void {\n    let included: Array<string> = [ ];\n    for (const key in allowed.keys()) {\n        if (set.has(key)) { included.push(key); }\n    }\n    if (included.length > 1) { throw new Error(`conflicting types: ${ included.join(\", \") }`); }\n}\n\n// Functions to process a Solidity Signature TokenString from left-to-right for...\n\n// ...the name with an optional type, returning the name\nfunction consumeName(type: string, tokens: TokenString): string {\n    if (tokens.peekKeyword(KwTypes)) {\n        const keyword = tokens.pop().text;\n        if (keyword !== type) {\n            throw new Error(`expected ${ type }, got ${ keyword }`);\n        }\n    }\n\n    return tokens.popType(\"ID\");\n}\n\n// ...all keywords matching allowed, returning the keywords\nfunction consumeKeywords(tokens: TokenString, allowed?: ReadonlySet<string>): ReadonlySet<string> {\n    const keywords: Set<string> = new Set();\n    while (true) {\n        const keyword = tokens.peekType(\"KEYWORD\");\n\n        if (keyword == null || (allowed && !allowed.has(keyword))) { break; }\n        tokens.pop();\n\n        if (keywords.has(keyword)) { throw new Error(`duplicate keywords: ${ JSON.stringify(keyword) }`); }\n        keywords.add(keyword);\n    }\n\n    return Object.freeze(keywords);\n}\n\n// ...all visibility keywords, returning the coalesced mutability\nfunction consumeMutability(tokens: TokenString): \"payable\" | \"nonpayable\" | \"view\" | \"pure\" {\n    let modifiers = consumeKeywords(tokens, KwVisib);\n\n    // Detect conflicting modifiers\n    allowSingle(modifiers, setify(\"constant payable nonpayable\".split(\" \")));\n    allowSingle(modifiers, setify(\"pure view payable nonpayable\".split(\" \")));\n\n    // Process mutability states\n    if (modifiers.has(\"view\")) { return \"view\"; }\n    if (modifiers.has(\"pure\")) { return \"pure\"; }\n    if (modifiers.has(\"payable\")) { return \"payable\"; }\n    if (modifiers.has(\"nonpayable\")) { return \"nonpayable\"; }\n\n    // Process legacy `constant` last\n    if (modifiers.has(\"constant\")) { return \"view\"; }\n\n    return \"nonpayable\";\n}\n\n// ...a parameter list, returning the ParamType list\nfunction consumeParams(tokens: TokenString, allowIndexed?: boolean): Array<ParamType> {\n    return tokens.popParams().map((t) => ParamType.from(t, allowIndexed));\n}\n\n// ...a gas limit, returning a BigNumber or null if none\nfunction consumeGas(tokens: TokenString): null | bigint {\n    if (tokens.peekType(\"AT\")) {\n        tokens.pop();\n        if (tokens.peekType(\"NUMBER\")) {\n            return getBigInt(tokens.pop().text);\n        }\n        throw new Error(\"invalid gas\");\n    }\n    return null;\n}\n\nfunction consumeEoi(tokens: TokenString): void {\n    if (tokens.length) {\n        throw new Error(`unexpected tokens at offset ${ tokens.offset }: ${ tokens.toString() }`);\n    }\n}\n\nconst regexArrayType = new RegExp(/^(.*)\\[([0-9]*)\\]$/);\n\nfunction verifyBasicType(type: string): string {\n    const match = type.match(regexType);\n    assertArgument(match, \"invalid type\", \"type\", type);\n    if (type === \"uint\") { return \"uint256\"; }\n    if (type === \"int\") { return \"int256\"; }\n\n    if (match[2]) {\n        // bytesXX\n        const length = parseInt(match[2]);\n        assertArgument(length !== 0 && length <= 32, \"invalid bytes length\", \"type\", type);\n\n    } else if (match[3]) {\n        // intXX or uintXX\n        const size = parseInt(match[3] as string);\n        assertArgument(size !== 0 && size <= 256 && (size % 8) === 0, \"invalid numeric width\", \"type\", type);\n    }\n\n    return type;\n}\n\n// Make the Fragment constructors effectively private\nconst _guard = { };\n\n\n/**\n *  When [walking](ParamType-walk) a [[ParamType]], this is called\n *  on each component.\n */\nexport type ParamTypeWalkFunc = (type: string, value: any) => any;\n\n/**\n *  When [walking asynchronously](ParamType-walkAsync) a [[ParamType]],\n *  this is called on each component.\n */\nexport type ParamTypeWalkAsyncFunc = (type: string, value: any) => any | Promise<any>;\n\nconst internal = Symbol.for(\"_ethers_internal\");\n\nconst ParamTypeInternal = \"_ParamTypeInternal\";\nconst ErrorFragmentInternal = \"_ErrorInternal\";\nconst EventFragmentInternal = \"_EventInternal\";\nconst ConstructorFragmentInternal = \"_ConstructorInternal\";\nconst FallbackFragmentInternal = \"_FallbackInternal\";\nconst FunctionFragmentInternal = \"_FunctionInternal\";\nconst StructFragmentInternal = \"_StructInternal\";\n\n/**\n *  Each input and output of a [[Fragment]] is an Array of **ParamType**.\n */\nexport class ParamType {\n\n    /**\n     *  The local name of the parameter (or ``\"\"`` if unbound)\n     */\n    readonly name!: string;\n\n    /**\n     *  The fully qualified type (e.g. ``\"address\"``, ``\"tuple(address)\"``,\n     *  ``\"uint256[3][]\"``)\n     */\n    readonly type!: string;\n\n    /**\n     *  The base type (e.g. ``\"address\"``, ``\"tuple\"``, ``\"array\"``)\n     */\n    readonly baseType!: string;\n\n    /**\n     *  True if the parameters is indexed.\n     *\n     *  For non-indexable types this is ``null``.\n     */\n    readonly indexed!: null | boolean;\n\n    /**\n     *  The components for the tuple.\n     *\n     *  For non-tuple types this is ``null``.\n     */\n    readonly components!: null | ReadonlyArray<ParamType>;\n\n    /**\n     *  The array length, or ``-1`` for dynamic-lengthed arrays.\n     *\n     *  For non-array types this is ``null``.\n     */\n    readonly arrayLength!: null | number;\n\n    /**\n     *  The type of each child in the array.\n     *\n     *  For non-array types this is ``null``.\n     */\n    readonly arrayChildren!: null | ParamType;\n\n\n    /**\n     *  @private\n     */\n    constructor(guard: any, name: string, type: string, baseType: string, indexed: null | boolean, components: null | ReadonlyArray<ParamType>, arrayLength: null | number, arrayChildren: null | ParamType) {\n        assertPrivate(guard, _guard, \"ParamType\");\n        Object.defineProperty(this, internal, { value: ParamTypeInternal });\n\n        if (components) { components = Object.freeze(components.slice()); }\n\n        if (baseType === \"array\") {\n            if (arrayLength == null || arrayChildren == null) {\n                throw new Error(\"\");\n            }\n        } else if (arrayLength != null || arrayChildren != null) {\n            throw new Error(\"\");\n        }\n\n        if (baseType === \"tuple\") {\n            if (components == null) { throw new Error(\"\"); }\n        } else if (components != null) {\n            throw new Error(\"\");\n        }\n\n        defineProperties<ParamType>(this, {\n            name, type, baseType, indexed, components, arrayLength, arrayChildren\n        });\n    }\n\n    /**\n     *  Return a string representation of this type.\n     *\n     *  For example,\n     *\n     *  ``sighash\" => \"(uint256,address)\"``\n     *\n     *  ``\"minimal\" => \"tuple(uint256,address) indexed\"``\n     *\n     *  ``\"full\" => \"tuple(uint256 foo, address bar) indexed baz\"``\n     */\n    format(format?: FormatType): string {\n        if (format == null) { format = \"sighash\"; }\n        if (format === \"json\") {\n            const name = this.name || \"\";\n\n            if (this.isArray()) {\n                const result = JSON.parse(this.arrayChildren.format(\"json\"));\n                result.name = name;\n                result.type += `[${ (this.arrayLength < 0 ? \"\": String(this.arrayLength)) }]`;\n                return JSON.stringify(result);\n            }\n\n            const result: any = {\n                type: ((this.baseType === \"tuple\") ? \"tuple\": this.type),\n                name\n            };\n\n\n            if (typeof(this.indexed) === \"boolean\") { result.indexed = this.indexed; }\n            if (this.isTuple()) {\n                result.components = this.components.map((c) => JSON.parse(c.format(format)));\n            }\n            return JSON.stringify(result);\n        }\n\n        let result = \"\";\n\n        // Array\n        if (this.isArray()) {\n            result += this.arrayChildren.format(format);\n            result += `[${ (this.arrayLength < 0 ? \"\": String(this.arrayLength)) }]`;\n        } else {\n            if (this.isTuple()) {\n                result += \"(\" + this.components.map(\n                    (comp) => comp.format(format)\n                ).join((format === \"full\") ? \", \": \",\") + \")\";\n            } else {\n                result += this.type;\n            }\n        }\n\n        if (format !== \"sighash\") {\n            if (this.indexed === true) { result += \" indexed\"; }\n            if (format === \"full\" && this.name) {\n                result += \" \" + this.name;\n            }\n        }\n\n        return result;\n    }\n\n    /**\n     *  Returns true if %%this%% is an Array type.\n     *\n     *  This provides a type gaurd ensuring that [[arrayChildren]]\n     *  and [[arrayLength]] are non-null.\n     */\n    isArray(): this is (ParamType & { arrayChildren: ParamType, arrayLength: number }) {\n        return (this.baseType === \"array\")\n    }\n\n    /**\n     *  Returns true if %%this%% is a Tuple type.\n     *\n     *  This provides a type gaurd ensuring that [[components]]\n     *  is non-null.\n     */\n    isTuple(): this is (ParamType & { components: ReadonlyArray<ParamType> }) {\n        return (this.baseType === \"tuple\");\n    }\n\n    /**\n     *  Returns true if %%this%% is an Indexable type.\n     *\n     *  This provides a type gaurd ensuring that [[indexed]]\n     *  is non-null.\n     */\n    isIndexable(): this is (ParamType & { indexed: boolean }) {\n        return (this.indexed != null);\n    }\n\n    /**\n     *  Walks the **ParamType** with %%value%%, calling %%process%%\n     *  on each type, destructing the %%value%% recursively.\n     */\n    walk(value: any, process: ParamTypeWalkFunc): any {\n        if (this.isArray()) {\n            if (!Array.isArray(value)) { throw new Error(\"invalid array value\"); }\n            if (this.arrayLength !== -1 && value.length !== this.arrayLength) {\n                throw new Error(\"array is wrong length\");\n            }\n            const _this = this;\n            return value.map((v) => (_this.arrayChildren.walk(v, process)));\n        }\n\n        if (this.isTuple()) {\n            if (!Array.isArray(value)) { throw new Error(\"invalid tuple value\"); }\n            if (value.length !== this.components.length) {\n                throw new Error(\"array is wrong length\");\n            }\n            const _this = this;\n            return value.map((v, i) => (_this.components[i].walk(v, process)));\n        }\n\n        return process(this.type, value);\n    }\n\n    #walkAsync(promises: Array<Promise<void>>, value: any, process: ParamTypeWalkAsyncFunc, setValue: (value: any) => void): void {\n\n        if (this.isArray()) {\n            if (!Array.isArray(value)) { throw new Error(\"invalid array value\"); }\n            if (this.arrayLength !== -1 && value.length !== this.arrayLength) {\n                throw new Error(\"array is wrong length\");\n            }\n            const childType = this.arrayChildren;\n\n            const result = value.slice();\n            result.forEach((value, index) => {\n                childType.#walkAsync(promises, value, process, (value: any) => {\n                    result[index] = value;\n                });\n            });\n            setValue(result);\n            return;\n        }\n\n        if (this.isTuple()) {\n            const components = this.components;\n\n            // Convert the object into an array\n            let result: Array<any>;\n            if (Array.isArray(value)) {\n                result = value.slice();\n\n            } else {\n                if (value == null || typeof(value) !== \"object\") {\n                    throw new Error(\"invalid tuple value\");\n                }\n\n                result = components.map((param) => {\n                    if (!param.name) { throw new Error(\"cannot use object value with unnamed components\"); }\n                    if (!(param.name in value)) {\n                        throw new Error(`missing value for component ${ param.name }`);\n                    }\n                    return value[param.name];\n                });\n            }\n\n            if (result.length !== this.components.length) {\n                throw new Error(\"array is wrong length\");\n            }\n\n            result.forEach((value, index) => {\n                components[index].#walkAsync(promises, value, process, (value: any) => {\n                    result[index] = value;\n                });\n            });\n            setValue(result);\n            return;\n        }\n\n        const result = process(this.type, value);\n        if (result.then) {\n            promises.push((async function() { setValue(await result); })());\n        } else {\n            setValue(result);\n        }\n    }\n\n    /**\n     *  Walks the **ParamType** with %%value%%, asynchronously calling\n     *  %%process%% on each type, destructing the %%value%% recursively.\n     *\n     *  This can be used to resolve ENS naes by walking and resolving each\n     *  ``\"address\"`` type.\n     */\n    async walkAsync(value: any, process: ParamTypeWalkAsyncFunc): Promise<any> {\n        const promises: Array<Promise<void>> = [ ];\n        const result: [ any ] = [ value ];\n        this.#walkAsync(promises, value, process, (value: any) => {\n            result[0] = value;\n        });\n        if (promises.length) { await Promise.all(promises); }\n        return result[0];\n    }\n\n    /**\n     *  Creates a new **ParamType** for %%obj%%.\n     *\n     *  If %%allowIndexed%% then the ``indexed`` keyword is permitted,\n     *  otherwise the ``indexed`` keyword will throw an error.\n     */\n    static from(obj: any, allowIndexed?: boolean): ParamType {\n        if (ParamType.isParamType(obj)) { return obj; }\n\n        if (typeof(obj) === \"string\") {\n            try {\n                return ParamType.from(lex(obj), allowIndexed);\n            } catch (error) {\n                assertArgument(false, \"invalid param type\", \"obj\", obj);\n            }\n\n        } else if (obj instanceof TokenString) {\n            let type = \"\", baseType = \"\";\n            let comps: null | Array<ParamType> = null;\n\n            if (consumeKeywords(obj, setify([ \"tuple\" ])).has(\"tuple\") || obj.peekType(\"OPEN_PAREN\")) {\n                // Tuple\n                baseType = \"tuple\";\n                comps = obj.popParams().map((t) => ParamType.from(t));\n                type = `tuple(${ comps.map((c) => c.format()).join(\",\") })`;\n            } else {\n                // Normal\n                type = verifyBasicType(obj.popType(\"TYPE\"));\n                baseType = type;\n            }\n\n            // Check for Array\n            let arrayChildren: null | ParamType  = null;\n            let arrayLength: null | number = null;\n\n            while (obj.length && obj.peekType(\"BRACKET\")) {\n                const bracket = obj.pop(); //arrays[i];\n                arrayChildren = new ParamType(_guard, \"\", type, baseType, null, comps, arrayLength, arrayChildren);\n                arrayLength = bracket.value;\n                type += bracket.text;\n                baseType = \"array\";\n                comps = null;\n            }\n\n            let indexed: null | boolean = null;\n            const keywords = consumeKeywords(obj, KwModifiers);\n            if (keywords.has(\"indexed\")) {\n                if (!allowIndexed) { throw new Error(\"\"); }\n                indexed = true;\n            }\n\n            const name = (obj.peekType(\"ID\") ? obj.pop().text: \"\");\n\n            if (obj.length) { throw new Error(\"leftover tokens\"); }\n\n            return new ParamType(_guard, name, type, baseType, indexed, comps, arrayLength, arrayChildren);\n        }\n\n        const name = obj.name;\n        assertArgument(!name || (typeof(name) === \"string\" && name.match(regexId)),\n            \"invalid name\", \"obj.name\", name);\n\n        let indexed = obj.indexed;\n        if (indexed != null) {\n            assertArgument(allowIndexed, \"parameter cannot be indexed\", \"obj.indexed\", obj.indexed);\n            indexed = !!indexed;\n        }\n\n        let type = obj.type;\n\n        let arrayMatch = type.match(regexArrayType);\n        if (arrayMatch) {\n            const arrayLength = parseInt(arrayMatch[2] || \"-1\");\n            const arrayChildren = ParamType.from({\n                type: arrayMatch[1],\n                components: obj.components\n            });\n\n            return new ParamType(_guard, name || \"\", type, \"array\", indexed, null, arrayLength, arrayChildren);\n        }\n\n        if (type === \"tuple\" || type.startsWith(\"tuple(\"/* fix: ) */) || type.startsWith(\"(\" /* fix: ) */)) {\n            const comps = (obj.components != null) ? obj.components.map((c: any) => ParamType.from(c)): null;\n            const tuple = new ParamType(_guard, name || \"\", type, \"tuple\", indexed, comps, null, null);\n            // @TODO: use lexer to validate and normalize type\n            return tuple;\n        }\n\n        type = verifyBasicType(obj.type);\n\n        return new ParamType(_guard, name || \"\", type, type, indexed, null, null, null);\n    }\n\n    /**\n     *  Returns true if %%value%% is a **ParamType**.\n     */\n    static isParamType(value: any): value is ParamType {\n        return (value && value[internal] === ParamTypeInternal);\n    }\n}\n\n/**\n *  The type of a [[Fragment]].\n */\nexport type FragmentType = \"constructor\" | \"error\" | \"event\" | \"fallback\" | \"function\" | \"struct\";\n\n/**\n *  An abstract class to represent An individual fragment from a parse ABI.\n */\nexport abstract class Fragment {\n    /**\n     *  The type of the fragment.\n     */\n    readonly type!: FragmentType;\n\n    /**\n     *  The inputs for the fragment.\n     */\n    readonly inputs!: ReadonlyArray<ParamType>;\n\n    /**\n     *  @private\n     */\n    constructor(guard: any, type: FragmentType, inputs: ReadonlyArray<ParamType>) {\n        assertPrivate(guard, _guard, \"Fragment\");\n        inputs = Object.freeze(inputs.slice());\n        defineProperties<Fragment>(this, { type, inputs });\n    }\n\n    /**\n     *  Returns a string representation of this fragment as %%format%%.\n     */\n    abstract format(format?: FormatType): string;\n\n    /**\n     *  Creates a new **Fragment** for %%obj%%, wich can be any supported\n     *  ABI frgament type.\n     */\n    static from(obj: any): Fragment {\n        if (typeof(obj) === \"string\") {\n\n            // Try parsing JSON...\n            try {\n                Fragment.from(JSON.parse(obj));\n            } catch (e) { }\n\n            // ...otherwise, use the human-readable lexer\n            return Fragment.from(lex(obj));\n        }\n\n        if (obj instanceof TokenString) {\n            // Human-readable ABI (already lexed)\n\n            const type = obj.peekKeyword(KwTypes);\n\n            switch (type) {\n                case \"constructor\": return ConstructorFragment.from(obj);\n                case \"error\": return ErrorFragment.from(obj);\n                case \"event\": return EventFragment.from(obj);\n                case \"fallback\": case \"receive\":\n                    return FallbackFragment.from(obj);\n                case \"function\": return FunctionFragment.from(obj);\n                case \"struct\": return StructFragment.from(obj);\n            }\n\n        } else if (typeof(obj) === \"object\") {\n            // JSON ABI\n\n            switch (obj.type) {\n                case \"constructor\": return ConstructorFragment.from(obj);\n                case \"error\": return ErrorFragment.from(obj);\n                case \"event\": return EventFragment.from(obj);\n                case \"fallback\": case \"receive\":\n                    return FallbackFragment.from(obj);\n                case \"function\": return FunctionFragment.from(obj);\n                case \"struct\": return StructFragment.from(obj);\n            }\n\n            assert(false, `unsupported type: ${ obj.type }`, \"UNSUPPORTED_OPERATION\", {\n                operation: \"Fragment.from\"\n            });\n        }\n\n        assertArgument(false, \"unsupported frgament object\", \"obj\", obj);\n    }\n\n    /**\n     *  Returns true if %%value%% is a [[ConstructorFragment]].\n     */\n    static isConstructor(value: any): value is ConstructorFragment {\n        return ConstructorFragment.isFragment(value);\n    }\n\n    /**\n     *  Returns true if %%value%% is an [[ErrorFragment]].\n     */\n    static isError(value: any): value is ErrorFragment {\n        return ErrorFragment.isFragment(value);\n    }\n\n    /**\n     *  Returns true if %%value%% is an [[EventFragment]].\n     */\n    static isEvent(value: any): value is EventFragment {\n        return EventFragment.isFragment(value);\n    }\n\n    /**\n     *  Returns true if %%value%% is a [[FunctionFragment]].\n     */\n    static isFunction(value: any): value is FunctionFragment {\n        return FunctionFragment.isFragment(value);\n    }\n\n    /**\n     *  Returns true if %%value%% is a [[StructFragment]].\n     */\n    static isStruct(value: any): value is StructFragment {\n        return StructFragment.isFragment(value);\n    }\n}\n\n/**\n *  An abstract class to represent An individual fragment\n *  which has a name from a parse ABI.\n */\nexport abstract class NamedFragment extends Fragment {\n    /**\n     *  The name of the fragment.\n     */\n    readonly name!: string;\n\n    /**\n     *  @private\n     */\n    constructor(guard: any, type: FragmentType, name: string, inputs: ReadonlyArray<ParamType>) {\n        super(guard, type, inputs);\n        assertArgument(typeof(name) === \"string\" && name.match(regexId),\n            \"invalid identifier\", \"name\", name);\n        inputs = Object.freeze(inputs.slice());\n        defineProperties<NamedFragment>(this, { name });\n    }\n}\n\nfunction joinParams(format: FormatType, params: ReadonlyArray<ParamType>): string { \n    return \"(\" + params.map((p) => p.format(format)).join((format === \"full\") ? \", \": \",\") + \")\";\n}\n\n/**\n *  A Fragment which represents a //Custom Error//.\n */\nexport class ErrorFragment extends NamedFragment {\n    /**\n     *  @private\n     */\n    constructor(guard: any, name: string, inputs: ReadonlyArray<ParamType>) {\n        super(guard, \"error\", name, inputs);\n        Object.defineProperty(this, internal, { value: ErrorFragmentInternal });\n    }\n\n    /**\n     *  The Custom Error selector.\n     */\n    get selector(): string {\n        return id(this.format(\"sighash\")).substring(0, 10);\n    }\n\n    /**\n     *  Returns a string representation of this fragment as %%format%%.\n     */\n    format(format?: FormatType): string {\n        if (format == null) { format = \"sighash\"; }\n        if (format === \"json\") {\n            return JSON.stringify({\n                type: \"error\",\n                name: this.name,\n                inputs: this.inputs.map((input) => JSON.parse(input.format(format))),\n            });\n        }\n\n        const result: Array<string> = [ ];\n        if (format !== \"sighash\") { result.push(\"error\"); }\n        result.push(this.name + joinParams(format, this.inputs));\n        return result.join(\" \");\n    }\n\n    /**\n     *  Returns a new **ErrorFragment** for %%obj%%.\n     */\n    static from(obj: any): ErrorFragment {\n        if (ErrorFragment.isFragment(obj)) { return obj; }\n\n        if (typeof(obj) === \"string\") {\n            return ErrorFragment.from(lex(obj));\n\n        } else if (obj instanceof TokenString) {\n            const name = consumeName(\"error\", obj);\n            const inputs = consumeParams(obj);\n            consumeEoi(obj);\n\n            return new ErrorFragment(_guard, name, inputs);\n        }\n\n        return new ErrorFragment(_guard, obj.name,\n            obj.inputs ? obj.inputs.map(ParamType.from): [ ]);\n    }\n\n    /**\n     *  Returns ``true`` and provides a type guard if %%value%% is an\n     *  **ErrorFragment**.\n     */\n    static isFragment(value: any): value is ErrorFragment {\n        return (value && value[internal] === ErrorFragmentInternal);\n    }\n}\n\n/**\n *  A Fragment which represents an Event.\n */\nexport class EventFragment extends NamedFragment {\n    /**\n     *  Whether this event is anonymous.\n     */\n    readonly anonymous!: boolean;\n\n    /**\n     *  @private\n     */\n    constructor(guard: any, name: string, inputs: ReadonlyArray<ParamType>, anonymous: boolean) {\n        super(guard, \"event\", name, inputs);\n        Object.defineProperty(this, internal, { value: EventFragmentInternal });\n        defineProperties<EventFragment>(this, { anonymous });\n    }\n\n    /**\n     *  The Event topic hash.\n     */\n    get topicHash(): string {\n        return id(this.format(\"sighash\"));\n    }\n\n    /**\n     *  Returns a string representation of this event as %%format%%.\n     */\n    format(format?: FormatType): string {\n        if (format == null) { format = \"sighash\"; }\n        if (format === \"json\") {\n            return JSON.stringify({\n                type: \"event\",\n                anonymous: this.anonymous,\n                name: this.name,\n                inputs: this.inputs.map((i) => JSON.parse(i.format(format)))\n            });\n        }\n\n        const result: Array<string> = [ ];\n        if (format !== \"sighash\") { result.push(\"event\"); }\n        result.push(this.name + joinParams(format, this.inputs));\n        if (format !== \"sighash\" && this.anonymous) { result.push(\"anonymous\"); }\n        return result.join(\" \");\n    }\n\n    /**\n     *  Return the topic hash for an event with %%name%% and %%params%%.\n     */\n    static getTopicHash(name: string, params?: Array<any>): string {\n        params = (params || []).map((p) => ParamType.from(p));\n        const fragment = new EventFragment(_guard, name, params, false);\n        return fragment.topicHash;\n    }\n\n    /**\n     *  Returns a new **EventFragment** for %%obj%%.\n     */\n    static from(obj: any): EventFragment {\n        if (EventFragment.isFragment(obj)) { return obj; }\n\n        if (typeof(obj) === \"string\") {\n            try {\n                return EventFragment.from(lex(obj));\n            } catch (error) {\n                assertArgument(false, \"invalid event fragment\", \"obj\", obj);\n            }\n\n        } else if (obj instanceof TokenString) {\n            const name = consumeName(\"event\", obj);\n            const inputs = consumeParams(obj, true);\n            const anonymous = !!consumeKeywords(obj, setify([ \"anonymous\" ])).has(\"anonymous\");\n            consumeEoi(obj);\n\n            return new EventFragment(_guard, name, inputs, anonymous);\n        }\n\n        return new EventFragment(_guard, obj.name,\n            obj.inputs ? obj.inputs.map((p: any) => ParamType.from(p, true)): [ ], !!obj.anonymous);\n    }\n\n    /**\n     *  Returns ``true`` and provides a type guard if %%value%% is an\n     *  **EventFragment**.\n     */\n    static isFragment(value: any): value is EventFragment {\n        return (value && value[internal] === EventFragmentInternal);\n    }\n}\n\n/**\n *  A Fragment which represents a constructor.\n */\nexport class ConstructorFragment extends Fragment {\n\n    /**\n     *  Whether the constructor can receive an endowment.\n     */\n    readonly payable!: boolean;\n\n    /**\n     *  The recommended gas limit for deployment or ``null``.\n     */\n    readonly gas!: null | bigint;\n\n    /**\n     *  @private\n     */\n    constructor(guard: any, type: FragmentType, inputs: ReadonlyArray<ParamType>, payable: boolean, gas: null | bigint) {\n        super(guard, type, inputs);\n        Object.defineProperty(this, internal, { value: ConstructorFragmentInternal });\n        defineProperties<ConstructorFragment>(this, { payable, gas });\n    }\n\n    /**\n     *  Returns a string representation of this constructor as %%format%%.\n     */\n    format(format?: FormatType): string {\n        assert(format != null && format !== \"sighash\", \"cannot format a constructor for sighash\",\n            \"UNSUPPORTED_OPERATION\", { operation: \"format(sighash)\" });\n\n        if (format === \"json\") {\n            return JSON.stringify({\n                type: \"constructor\",\n                stateMutability: (this.payable ? \"payable\": \"undefined\"),\n                payable: this.payable,\n                gas: ((this.gas != null) ? this.gas: undefined),\n                inputs: this.inputs.map((i) => JSON.parse(i.format(format)))\n            });\n        }\n\n        const result = [ `constructor${ joinParams(format, this.inputs) }` ];\n        if (this.payable) { result.push(\"payable\"); }\n        if (this.gas != null) { result.push(`@${ this.gas.toString() }`); }\n        return result.join(\" \");\n    }\n\n    /**\n     *  Returns a new **ConstructorFragment** for %%obj%%.\n     */\n    static from(obj: any): ConstructorFragment {\n        if (ConstructorFragment.isFragment(obj)) { return obj; }\n\n        if (typeof(obj) === \"string\") {\n            try {\n                return ConstructorFragment.from(lex(obj));\n            } catch (error) {\n                assertArgument(false, \"invalid constuctor fragment\", \"obj\", obj);\n            }\n\n        } else if (obj instanceof TokenString) {\n            consumeKeywords(obj, setify([ \"constructor\" ]));\n            const inputs = consumeParams(obj);\n            const payable = !!consumeKeywords(obj, KwVisibDeploy).has(\"payable\");\n            const gas = consumeGas(obj);\n            consumeEoi(obj);\n\n            return new ConstructorFragment(_guard, \"constructor\", inputs, payable, gas);\n        }\n\n        return new ConstructorFragment(_guard, \"constructor\",\n            obj.inputs ? obj.inputs.map(ParamType.from): [ ],\n            !!obj.payable, (obj.gas != null) ? obj.gas: null);\n    }\n\n    /**\n     *  Returns ``true`` and provides a type guard if %%value%% is a\n     *  **ConstructorFragment**.\n     */\n    static isFragment(value: any): value is ConstructorFragment {\n        return (value && value[internal] === ConstructorFragmentInternal);\n    }\n}\n\n/**\n *  A Fragment which represents a method.\n */\nexport class FallbackFragment extends Fragment {\n\n    /**\n     *  If the function can be sent value during invocation.\n     */\n    readonly payable!: boolean;\n\n    constructor(guard: any, inputs: ReadonlyArray<ParamType>, payable: boolean) {\n        super(guard, \"fallback\", inputs);\n        Object.defineProperty(this, internal, { value: FallbackFragmentInternal });\n        defineProperties<FallbackFragment>(this, { payable });\n    }\n\n    /**\n     *  Returns a string representation of this fallback as %%format%%.\n     */\n    format(format?: FormatType): string {\n        const type = ((this.inputs.length === 0) ? \"receive\": \"fallback\");\n\n        if (format === \"json\") {\n            const stateMutability = (this.payable ? \"payable\": \"nonpayable\");\n            return JSON.stringify({ type, stateMutability });\n        }\n\n        return `${ type }()${ this.payable ? \" payable\": \"\" }`;\n    }\n\n    /**\n     *  Returns a new **FallbackFragment** for %%obj%%.\n     */\n    static from(obj: any): FallbackFragment {\n        if (FallbackFragment.isFragment(obj)) { return obj; }\n\n        if (typeof(obj) === \"string\") {\n            try {\n                return FallbackFragment.from(lex(obj));\n            } catch (error) {\n                assertArgument(false, \"invalid fallback fragment\", \"obj\", obj);\n            }\n\n        } else if (obj instanceof TokenString) {\n            const errorObj = obj.toString();\n\n            const topIsValid = obj.peekKeyword(setify([ \"fallback\", \"receive\" ]));\n            assertArgument(topIsValid, \"type must be fallback or receive\", \"obj\", errorObj);\n\n            const type = obj.popKeyword(setify([ \"fallback\", \"receive\" ]));\n\n            // receive()\n            if (type === \"receive\") {\n                const inputs = consumeParams(obj);\n                assertArgument(inputs.length === 0, `receive cannot have arguments`, \"obj.inputs\", inputs);\n                consumeKeywords(obj, setify([ \"payable\" ]));\n                consumeEoi(obj);\n                return new FallbackFragment(_guard, [ ], true);\n            }\n\n            // fallback() [payable]\n            // fallback(bytes) [payable] returns (bytes)\n            let inputs = consumeParams(obj);\n            if (inputs.length) {\n                assertArgument(inputs.length === 1 && inputs[0].type === \"bytes\",\n                    \"invalid fallback inputs\", \"obj.inputs\",\n                    inputs.map((i) => i.format(\"minimal\")).join(\", \"));\n            } else {\n                inputs = [ ParamType.from(\"bytes\") ];\n            }\n\n            const mutability = consumeMutability(obj);\n            assertArgument(mutability === \"nonpayable\" || mutability === \"payable\", \"fallback cannot be constants\", \"obj.stateMutability\", mutability);\n\n            if (consumeKeywords(obj, setify([ \"returns\" ])).has(\"returns\")) {\n                const outputs = consumeParams(obj);\n                assertArgument(outputs.length === 1 && outputs[0].type === \"bytes\",\n                    \"invalid fallback outputs\", \"obj.outputs\",\n                    outputs.map((i) => i.format(\"minimal\")).join(\", \"));\n            }\n\n            consumeEoi(obj);\n\n            return new FallbackFragment(_guard, inputs, mutability === \"payable\");\n        }\n\n        if (obj.type === \"receive\") {\n            return new FallbackFragment(_guard, [ ], true);\n        }\n\n        if (obj.type === \"fallback\") {\n            const inputs = [ ParamType.from(\"bytes\") ];\n            const payable = (obj.stateMutability === \"payable\");\n            return new FallbackFragment(_guard, inputs, payable);\n        }\n\n        assertArgument(false, \"invalid fallback description\", \"obj\", obj);\n    }\n\n    /**\n     *  Returns ``true`` and provides a type guard if %%value%% is a\n     *  **FallbackFragment**.\n     */\n    static isFragment(value: any): value is FallbackFragment {\n        return (value && value[internal] === FallbackFragmentInternal);\n    }\n}\n\n\n/**\n *  A Fragment which represents a method.\n */\nexport class FunctionFragment extends NamedFragment {\n    /**\n     *  If the function is constant (e.g. ``pure`` or ``view`` functions).\n     */\n    readonly constant!: boolean;\n\n    /**\n     *  The returned types for the result of calling this function.\n     */\n    readonly outputs!: ReadonlyArray<ParamType>;\n\n    /**\n     *  The state mutability (e.g. ``payable``, ``nonpayable``, ``view``\n     *  or ``pure``)\n     */\n    readonly stateMutability!: \"payable\" | \"nonpayable\" | \"view\" | \"pure\";\n\n    /**\n     *  If the function can be sent value during invocation.\n     */\n    readonly payable!: boolean;\n\n    /**\n     *  The recommended gas limit to send when calling this function.\n     */\n    readonly gas!: null | bigint;\n\n    /**\n     *  @private\n     */\n    constructor(guard: any, name: string, stateMutability: \"payable\" | \"nonpayable\" | \"view\" | \"pure\", inputs: ReadonlyArray<ParamType>, outputs: ReadonlyArray<ParamType>, gas: null | bigint) {\n        super(guard, \"function\", name, inputs);\n        Object.defineProperty(this, internal, { value: FunctionFragmentInternal });\n        outputs = Object.freeze(outputs.slice());\n        const constant = (stateMutability === \"view\" || stateMutability === \"pure\");\n        const payable = (stateMutability === \"payable\");\n        defineProperties<FunctionFragment>(this, { constant, gas, outputs, payable, stateMutability });\n    }\n\n    /**\n     *  The Function selector.\n     */\n    get selector(): string {\n        return id(this.format(\"sighash\")).substring(0, 10);\n    }\n\n    /**\n     *  Returns a string representation of this function as %%format%%.\n     */\n    format(format?: FormatType): string {\n        if (format == null) { format = \"sighash\"; }\n        if (format === \"json\") {\n            return JSON.stringify({\n                type: \"function\",\n                name: this.name,\n                constant: this.constant,\n                stateMutability: ((this.stateMutability !== \"nonpayable\") ? this.stateMutability: undefined),\n                payable: this.payable,\n                gas: ((this.gas != null) ? this.gas: undefined),\n                inputs: this.inputs.map((i) => JSON.parse(i.format(format))),\n                outputs: this.outputs.map((o) => JSON.parse(o.format(format))),\n            });\n        }\n\n        const result: Array<string> = [];\n\n        if (format !== \"sighash\") { result.push(\"function\"); }\n\n        result.push(this.name + joinParams(format, this.inputs));\n\n        if (format !== \"sighash\") {\n            if (this.stateMutability !== \"nonpayable\") {\n                result.push(this.stateMutability);\n            }\n\n            if (this.outputs && this.outputs.length) {\n                result.push(\"returns\");\n                result.push(joinParams(format, this.outputs));\n            }\n\n            if (this.gas != null) { result.push(`@${ this.gas.toString() }`); }\n        }\n        return result.join(\" \");\n    }\n\n    /**\n     *  Return the selector for a function with %%name%% and %%params%%.\n     */\n    static getSelector(name: string, params?: Array<any>): string {\n        params = (params || []).map((p) => ParamType.from(p));\n        const fragment = new FunctionFragment(_guard, name, \"view\", params, [ ], null);\n        return fragment.selector;\n    }\n\n    /**\n     *  Returns a new **FunctionFragment** for %%obj%%.\n     */\n    static from(obj: any): FunctionFragment {\n        if (FunctionFragment.isFragment(obj)) { return obj; }\n\n        if (typeof(obj) === \"string\") {\n            try {\n                return FunctionFragment.from(lex(obj));\n            } catch (error) {\n                assertArgument(false, \"invalid function fragment\", \"obj\", obj);\n            }\n\n        } else if (obj instanceof TokenString) {\n            const name = consumeName(\"function\", obj);\n            const inputs = consumeParams(obj);\n            const mutability = consumeMutability(obj);\n\n            let outputs: Array<ParamType> = [ ];\n            if (consumeKeywords(obj, setify([ \"returns\" ])).has(\"returns\")) {\n                outputs = consumeParams(obj);\n            }\n\n            const gas = consumeGas(obj);\n\n            consumeEoi(obj);\n\n            return new FunctionFragment(_guard, name, mutability, inputs, outputs, gas);\n        }\n\n        let stateMutability = obj.stateMutability;\n\n        // Use legacy Solidity ABI logic if stateMutability is missing\n        if (stateMutability == null) {\n            stateMutability = \"payable\";\n\n            if (typeof(obj.constant) === \"boolean\") {\n                stateMutability = \"view\";\n                if (!obj.constant) {\n                    stateMutability = \"payable\"\n                    if (typeof(obj.payable) === \"boolean\" && !obj.payable) {\n                        stateMutability = \"nonpayable\";\n                    }\n                }\n            } else if (typeof(obj.payable) === \"boolean\" && !obj.payable) {\n                stateMutability = \"nonpayable\";\n            }\n        }\n\n        // @TODO: verifyState for stateMutability (e.g. throw if\n        //        payable: false but stateMutability is \"nonpayable\")\n\n        return new FunctionFragment(_guard, obj.name, stateMutability,\n             obj.inputs ? obj.inputs.map(ParamType.from): [ ],\n             obj.outputs ? obj.outputs.map(ParamType.from): [ ],\n             (obj.gas != null) ? obj.gas: null);\n    }\n\n    /**\n     *  Returns ``true`` and provides a type guard if %%value%% is a\n     *  **FunctionFragment**.\n     */\n    static isFragment(value: any): value is FunctionFragment {\n        return (value && value[internal] === FunctionFragmentInternal);\n    }\n}\n\n/**\n *  A Fragment which represents a structure.\n */\nexport class StructFragment extends NamedFragment {\n\n    /**\n     *  @private\n     */\n    constructor(guard: any, name: string, inputs: ReadonlyArray<ParamType>) {\n        super(guard, \"struct\", name, inputs);\n        Object.defineProperty(this, internal, { value: StructFragmentInternal });\n    }\n\n    /**\n     *  Returns a string representation of this struct as %%format%%.\n     */\n    format(): string {\n        throw new Error(\"@TODO\");\n    }\n\n    /**\n     *  Returns a new **StructFragment** for %%obj%%.\n     */\n    static from(obj: any): StructFragment {\n        if (typeof(obj) === \"string\") {\n            try {\n                return StructFragment.from(lex(obj));\n            } catch (error) {\n                assertArgument(false, \"invalid struct fragment\", \"obj\", obj);\n            }\n\n        } else if (obj instanceof TokenString) {\n            const name = consumeName(\"struct\", obj);\n            const inputs = consumeParams(obj);\n            consumeEoi(obj);\n            return new StructFragment(_guard, name, inputs);\n        }\n\n        return new StructFragment(_guard, obj.name, obj.inputs ? obj.inputs.map(ParamType.from): [ ]);\n    }\n\n// @TODO: fix this return type\n    /**\n     *  Returns ``true`` and provides a type guard if %%value%% is a\n     *  **StructFragment**.\n     */\n    static isFragment(value: any): value is FunctionFragment {\n        return (value && value[internal] === StructFragmentInternal);\n    }\n}\n\n", "/**\n *  When sending values to or receiving values from a [[Contract]], the\n *  data is generally encoded using the [ABI standard](link-solc-abi).\n *\n *  The AbiCoder provides a utility to encode values to ABI data and\n *  decode values from ABI data.\n *\n *  Most of the time, developers should favour the [[Contract]] class,\n *  which further abstracts a lot of the finer details of ABI data.\n *\n *  @_section api/abi/abi-coder:ABI Encoding\n */\n\n// See: https://github.com/ethereum/wiki/wiki/Ethereum-Contract-ABI\n\nimport { assertArgumentCount, assertArgument } from \"../utils/index.js\";\n\nimport { Coder, Reader, Result, Writer } from \"./coders/abstract-coder.js\";\nimport { AddressCoder } from \"./coders/address.js\";\nimport { ArrayCoder } from \"./coders/array.js\";\nimport { BooleanCoder } from \"./coders/boolean.js\";\nimport { BytesCoder } from \"./coders/bytes.js\";\nimport { FixedBytesCoder } from \"./coders/fixed-bytes.js\";\nimport { NullCoder } from \"./coders/null.js\";\nimport { NumberCoder } from \"./coders/number.js\";\nimport { StringCoder } from \"./coders/string.js\";\nimport { TupleCoder } from \"./coders/tuple.js\";\nimport { ParamType } from \"./fragments.js\";\n\nimport { getAddress } from \"../address/index.js\";\nimport { getBytes, hexlify, makeError } from \"../utils/index.js\";\n\nimport type {\n    BytesLike,\n    CallExceptionAction, CallExceptionError, CallExceptionTransaction\n} from \"../utils/index.js\";\n\n// https://docs.soliditylang.org/en/v0.8.17/control-structures.html\nconst PanicReasons: Map<number, string> = new Map();\nPanicReasons.set(0x00, \"GENERIC_PANIC\");\nPanicReasons.set(0x01, \"ASSERT_FALSE\");\nPanicReasons.set(0x11, \"OVERFLOW\");\nPanicReasons.set(0x12, \"DIVIDE_BY_ZERO\");\nPanicReasons.set(0x21, \"ENUM_RANGE_ERROR\");\nPanicReasons.set(0x22, \"BAD_STORAGE_DATA\");\nPanicReasons.set(0x31, \"STACK_UNDERFLOW\");\nPanicReasons.set(0x32, \"ARRAY_RANGE_ERROR\");\nPanicReasons.set(0x41, \"OUT_OF_MEMORY\");\nPanicReasons.set(0x51, \"UNINITIALIZED_FUNCTION_CALL\");\n\nconst paramTypeBytes = new RegExp(/^bytes([0-9]*)$/);\nconst paramTypeNumber = new RegExp(/^(u?int)([0-9]*)$/);\n\n\nlet defaultCoder: null | AbiCoder = null;\nlet defaultMaxInflation = 1024;\n\nfunction getBuiltinCallException(action: CallExceptionAction, tx: { to?: null | string, from?: null | string, data?: string }, data: null | BytesLike, abiCoder: AbiCoder): CallExceptionError {\n    let message = \"missing revert data\";\n\n    let reason: null | string = null;\n    const invocation = null;\n    let revert: null | { signature: string, name: string, args: Array<any> } = null;\n\n    if (data) {\n        message = \"execution reverted\";\n\n        const bytes = getBytes(data);\n        data = hexlify(data);\n\n        if (bytes.length === 0) {\n            message += \" (no data present; likely require(false) occurred\";\n            reason = \"require(false)\";\n\n        } else if (bytes.length % 32 !== 4) {\n            message += \" (could not decode reason; invalid data length)\";\n\n        } else if (hexlify(bytes.slice(0, 4)) === \"0x08c379a0\") {\n            // Error(string)\n            try {\n                reason = abiCoder.decode([ \"string\" ], bytes.slice(4))[0]\n                revert = {\n                    signature: \"Error(string)\",\n                    name: \"Error\",\n                    args: [ reason ]\n                };\n                message += `: ${ JSON.stringify(reason) }`;\n\n            } catch (error) {\n                message += \" (could not decode reason; invalid string data)\";\n            }\n\n        } else if (hexlify(bytes.slice(0, 4)) === \"0x4e487b71\") {\n            // Panic(uint256)\n            try {\n                const code = Number(abiCoder.decode([ \"uint256\" ], bytes.slice(4))[0]);\n                revert = {\n                    signature: \"Panic(uint256)\",\n                    name: \"Panic\",\n                    args: [ code ]\n                };\n                reason = `Panic due to ${ PanicReasons.get(code) || \"UNKNOWN\" }(${ code })`;\n                message += `: ${ reason }`;\n            } catch (error) {\n                message += \" (could not decode panic code)\";\n            }\n        } else {\n            message += \" (unknown custom error)\";\n        }\n    }\n\n    const transaction: CallExceptionTransaction = {\n        to: (tx.to ? getAddress(tx.to): null),\n        data: (tx.data || \"0x\")\n    };\n    if (tx.from) { transaction.from = getAddress(tx.from); }\n\n    return makeError(message, \"CALL_EXCEPTION\", {\n        action, data, reason, transaction, invocation, revert\n    });\n}\n\n/**\n *  The **AbiCoder** is a low-level class responsible for encoding JavaScript\n *  values into binary data and decoding binary data into JavaScript values.\n */\nexport class AbiCoder {\n\n    #getCoder(param: ParamType): Coder {\n        if (param.isArray()) {\n            return new ArrayCoder(this.#getCoder(param.arrayChildren), param.arrayLength, param.name);\n        }\n\n        if (param.isTuple()) {\n            return new TupleCoder(param.components.map((c) => this.#getCoder(c)), param.name);\n        }\n\n        switch (param.baseType) {\n            case \"address\":\n                return new AddressCoder(param.name);\n            case \"bool\":\n                return new BooleanCoder(param.name);\n            case \"string\":\n                return new StringCoder(param.name);\n            case \"bytes\":\n                return new BytesCoder(param.name);\n            case \"\":\n                return new NullCoder(param.name);\n        }\n\n        // u?int[0-9]*\n        let match = param.type.match(paramTypeNumber);\n        if (match) {\n            let size = parseInt(match[2] || \"256\");\n            assertArgument(size !== 0 && size <= 256 && (size % 8) === 0,\n                \"invalid \" + match[1] + \" bit length\", \"param\", param);\n            return new NumberCoder(size / 8, (match[1] === \"int\"), param.name);\n        }\n\n        // bytes[0-9]+\n        match = param.type.match(paramTypeBytes);\n        if (match) {\n            let size = parseInt(match[1]);\n            assertArgument(size !== 0 && size <= 32, \"invalid bytes length\", \"param\", param);\n            return new FixedBytesCoder(size, param.name);\n        }\n\n        assertArgument(false, \"invalid type\", \"type\", param.type);\n    }\n\n    /**\n     *  Get the default values for the given %%types%%.\n     *\n     *  For example, a ``uint`` is by default ``0`` and ``bool``\n     *  is by default ``false``.\n     */\n    getDefaultValue(types: ReadonlyArray<string | ParamType>): Result {\n        const coders: Array<Coder> = types.map((type) => this.#getCoder(ParamType.from(type)));\n        const coder = new TupleCoder(coders, \"_\");\n        return coder.defaultValue();\n    }\n\n    /**\n     *  Encode the %%values%% as the %%types%% into ABI data.\n     *\n     *  @returns DataHexstring\n     */\n    encode(types: ReadonlyArray<string | ParamType>, values: ReadonlyArray<any>): string {\n        assertArgumentCount(values.length, types.length, \"types/values length mismatch\");\n\n        const coders = types.map((type) => this.#getCoder(ParamType.from(type)));\n        const coder = (new TupleCoder(coders, \"_\"));\n\n        const writer = new Writer();\n        coder.encode(writer, values);\n        return writer.data;\n    }\n\n    /**\n     *  Decode the ABI %%data%% as the %%types%% into values.\n     *\n     *  If %%loose%% decoding is enabled, then strict padding is\n     *  not enforced. Some older versions of Solidity incorrectly\n     *  padded event data emitted from ``external`` functions.\n     */\n    decode(types: ReadonlyArray<string | ParamType>, data: BytesLike, loose?: boolean): Result {\n        const coders: Array<Coder> = types.map((type) => this.#getCoder(ParamType.from(type)));\n        const coder = new TupleCoder(coders, \"_\");\n        return coder.decode(new Reader(data, loose, defaultMaxInflation));\n    }\n\n    static _setDefaultMaxInflation(value: number): void {\n        assertArgument(typeof(value) === \"number\" && Number.isInteger(value), \"invalid defaultMaxInflation factor\", \"value\", value);\n        defaultMaxInflation = value;\n    }\n\n    /**\n     *  Returns the shared singleton instance of a default [[AbiCoder]].\n     *\n     *  On the first call, the instance is created internally.\n     */\n    static defaultAbiCoder(): AbiCoder {\n        if (defaultCoder == null) {\n            defaultCoder = new AbiCoder();\n        }\n        return defaultCoder;\n    }\n\n    /**\n     *  Returns an ethers-compatible [[CallExceptionError]] Error for the given\n     *  result %%data%% for the [[CallExceptionAction]] %%action%% against\n     *  the Transaction %%tx%%.\n     */\n    static getBuiltinCallException(action: CallExceptionAction, tx: { to?: null | string, from?: null | string, data?: string }, data: null | BytesLike): CallExceptionError {\n        return getBuiltinCallException(action, tx, data, AbiCoder.defaultAbiCoder());\n    }\n}\n", "/**\n *  About bytes32 strings...\n *\n *  @_docloc: api/utils:Bytes32 Strings\n */\n\nimport {\n    getBytes, toUtf8Bytes, toUtf8String, zeroPadBytes\n} from \"../utils/index.js\";\n\nimport type { BytesLike } from \"../utils/index.js\";\n\n/**\n *  Encodes %%text%% as a Bytes32 string.\n */\nexport function encodeBytes32String(text: string): string {\n\n    // Get the bytes\n    const bytes = toUtf8Bytes(text);\n\n    // Check we have room for null-termination\n    if (bytes.length > 31) { throw new Error(\"bytes32 string must be less than 32 bytes\"); }\n\n    // Zero-pad (implicitly null-terminates)\n    return zeroPadBytes(bytes, 32);\n}\n\n/**\n *  Encodes the Bytes32-encoded %%bytes%% into a string.\n */\nexport function decodeBytes32String(_bytes: BytesLike): string {\n    const data = getBytes(_bytes, \"bytes\");\n\n    // Must be 32 bytes with a null-termination\n    if (data.length !== 32) { throw new Error(\"invalid bytes32 - not 32 bytes long\"); }\n    if (data[31] !== 0) { throw new Error(\"invalid bytes32 string - no null terminator\"); }\n\n    // Find the null termination\n    let length = 31;\n    while (data[length - 1] === 0) { length--; }\n\n    // Determine the string value\n    return toUtf8String(data.slice(0, length));\n}\n\n", "/**\n *  The Interface class is a low-level class that accepts an\n *  ABI and provides all the necessary functionality to encode\n *  and decode paramaters to and results from methods, events\n *  and errors.\n *\n *  It also provides several convenience methods to automatically\n *  search and find matching transactions and events to parse them.\n *\n *  @_subsection api/abi:Interfaces  [interfaces]\n */\n\nimport { keccak256 } from \"../crypto/index.js\"\nimport { id } from \"../hash/index.js\"\nimport {\n    concat, dataSlice, getBigInt, getBytes, getBytesCopy,\n    hexlify, zeroPadBytes, zeroPadValue, isHexString, defineProperties,\n    assertArgument, toBeHex, assert\n} from \"../utils/index.js\";\n\nimport { AbiCoder } from \"./abi-coder.js\";\nimport { checkResultErrors, Result } from \"./coders/abstract-coder.js\";\nimport {\n    ConstructorFragment, ErrorFragment, EventFragment, FallbackFragment,\n    Fragment, FunctionFragment, ParamType\n} from \"./fragments.js\";\nimport { Typed } from \"./typed.js\";\n\nimport type { BigNumberish, BytesLike, CallExceptionError, CallExceptionTransaction } from \"../utils/index.js\";\n\nimport type { JsonFragment } from \"./fragments.js\";\n\n\nexport { checkResultErrors, Result };\n\n/**\n *  When using the [[Interface-parseLog]] to automatically match a Log to its event\n *  for parsing, a **LogDescription** is returned.\n */\nexport class LogDescription {\n    /**\n     *  The matching fragment for the ``topic0``.\n     */\n    readonly fragment!: EventFragment;\n\n    /**\n     *  The name of the Event.\n     */\n    readonly name!: string;\n\n    /**\n     *  The full Event signature.\n     */\n    readonly signature!: string;\n\n    /**\n     *  The topic hash for the Event.\n     */\n    readonly topic!: string;\n\n    /**\n     *  The arguments passed into the Event with ``emit``.\n     */\n    readonly args!: Result\n\n    /**\n     *  @_ignore:\n     */\n    constructor(fragment: EventFragment, topic: string, args: Result) {\n        const name = fragment.name, signature = fragment.format();\n        defineProperties<LogDescription>(this, {\n            fragment, name, signature, topic, args\n        });\n    }\n}\n\n/**\n *  When using the [[Interface-parseTransaction]] to automatically match\n *  a transaction data to its function for parsing,\n *  a **TransactionDescription** is returned.\n */\nexport class TransactionDescription {\n    /**\n     *  The matching fragment from the transaction ``data``.\n     */\n    readonly fragment!: FunctionFragment;\n\n    /**\n     *  The name of the Function from the transaction ``data``.\n     */\n    readonly name!: string;\n\n    /**\n     *  The arguments passed to the Function from the transaction ``data``.\n     */\n    readonly args!: Result;\n\n    /**\n     *  The full Function signature from the transaction ``data``.\n     */\n    readonly signature!: string;\n\n    /**\n     *  The selector for the Function from the transaction ``data``.\n     */\n    readonly selector!: string;\n\n    /**\n     *  The ``value`` (in wei) from the transaction.\n     */\n    readonly value!: bigint;\n\n    /**\n     *  @_ignore:\n     */\n    constructor(fragment: FunctionFragment, selector: string, args: Result, value: bigint) {\n        const name = fragment.name, signature = fragment.format();\n        defineProperties<TransactionDescription>(this, {\n            fragment, name, args, signature, selector, value\n        });\n    }\n}\n\n/**\n *  When using the [[Interface-parseError]] to automatically match an\n *  error for a call result for parsing, an **ErrorDescription** is returned.\n */\nexport class ErrorDescription {\n    /**\n     *  The matching fragment.\n     */\n    readonly fragment!: ErrorFragment;\n\n    /**\n     *  The name of the Error.\n     */\n    readonly name!: string;\n\n    /**\n     *  The arguments passed to the Error with ``revert``.\n     */\n    readonly args!: Result;\n\n    /**\n     *  The full Error signature.\n     */\n    readonly signature!: string;\n\n    /**\n     *  The selector for the Error.\n     */\n    readonly selector!: string;\n\n    /**\n     *  @_ignore:\n     */\n    constructor(fragment: ErrorFragment, selector: string, args: Result) {\n        const name = fragment.name, signature = fragment.format();\n        defineProperties<ErrorDescription>(this, {\n            fragment, name, args, signature, selector\n        });\n    }\n}\n\n/**\n *  An **Indexed** is used as a value when a value that does not\n *  fit within a topic (i.e. not a fixed-length, 32-byte type). It\n *  is the ``keccak256`` of the value, and used for types such as\n *  arrays, tuples, bytes and strings.\n */\nexport class Indexed {\n    /**\n     *  The ``keccak256`` of the value logged.\n     */\n    readonly hash!: null | string;\n\n    /**\n     *  @_ignore:\n     */\n    readonly _isIndexed!: boolean;\n\n    /**\n     *  Returns ``true`` if %%value%% is an **Indexed**.\n     *\n     *  This provides a Type Guard for property access.\n     */\n    static isIndexed(value: any): value is Indexed {\n        return !!(value && value._isIndexed);\n    }\n\n    /**\n     *  @_ignore:\n     */\n    constructor(hash: null | string) {\n        defineProperties<Indexed>(this, { hash, _isIndexed: true })\n    }\n}\n\ntype ErrorInfo = {\n    signature: string,\n    inputs: Array<string>,\n    name: string,\n    reason: (...args: Array<any>) => string;\n};\n\n// https://docs.soliditylang.org/en/v0.8.13/control-structures.html?highlight=panic#panic-via-assert-and-error-via-require\nconst PanicReasons: Record<string, string> = {\n    \"0\": \"generic panic\",\n    \"1\": \"assert(false)\",\n    \"17\": \"arithmetic overflow\",\n    \"18\": \"division or modulo by zero\",\n    \"33\": \"enum overflow\",\n    \"34\": \"invalid encoded storage byte array accessed\",\n    \"49\": \"out-of-bounds array access; popping on an empty array\",\n    \"50\": \"out-of-bounds access of an array or bytesN\",\n    \"65\": \"out of memory\",\n    \"81\": \"uninitialized function\",\n}\n\nconst BuiltinErrors: Record<string, ErrorInfo> = {\n    \"0x08c379a0\": {\n        signature: \"Error(string)\",\n        name: \"Error\",\n        inputs: [ \"string\" ],\n        reason: (message: string) => {\n            return `reverted with reason string ${ JSON.stringify(message) }`;\n        }\n    },\n    \"0x4e487b71\": {\n        signature: \"Panic(uint256)\",\n        name: \"Panic\",\n        inputs: [ \"uint256\" ],\n        reason: (code: bigint) => {\n            let reason = \"unknown panic code\";\n            if (code >= 0 && code <= 0xff && PanicReasons[code.toString()]) {\n                reason = PanicReasons[code.toString()];\n            }\n            return `reverted with panic code 0x${ code.toString(16) } (${ reason })`;\n        }\n    }\n}\n\n/*\nfunction wrapAccessError(property: string, error: Error): Error {\n    const wrap = new Error(`deferred error during ABI decoding triggered accessing ${ property }`);\n    (<any>wrap).error = error;\n    return wrap;\n}\n*/\n/*\nfunction checkNames(fragment: Fragment, type: \"input\" | \"output\", params: Array<ParamType>): void {\n    params.reduce((accum, param) => {\n        if (param.name) {\n            if (accum[param.name]) {\n                logger.throwArgumentError(`duplicate ${ type } parameter ${ JSON.stringify(param.name) } in ${ fragment.format(\"full\") }`, \"fragment\", fragment);\n            }\n            accum[param.name] = true;\n        }\n        return accum;\n    }, <{ [ name: string ]: boolean }>{ });\n}\n*/\n\n/**\n *  An **InterfaceAbi** may be any supported ABI format.\n *\n *  A string is expected to be a JSON string, which will be parsed\n *  using ``JSON.parse``. This means that the value **must** be a valid\n *  JSON string, with no stray commas, etc.\n *\n *  An array may contain any combination of:\n *  - Human-Readable fragments\n *  - Parsed JSON fragment\n *  - [[Fragment]] instances\n *\n *  A **Human-Readable Fragment** is a string which resembles a Solidity\n *  signature and is introduced in [this blog entry](link-ricmoo-humanreadableabi).\n *  For example, ``function balanceOf(address) view returns (uint)``.\n *\n *  A **Parsed JSON Fragment** is a JavaScript Object desribed in the\n *  [Solidity documentation](link-solc-jsonabi).\n */\nexport type InterfaceAbi = string | ReadonlyArray<Fragment | JsonFragment | string>;\n\n/**\n *  An Interface abstracts many of the low-level details for\n *  encoding and decoding the data on the blockchain.\n *\n *  An ABI provides information on how to encode data to send to\n *  a Contract, how to decode the results and events and how to\n *  interpret revert errors.\n *\n *  The ABI can be specified by [any supported format](InterfaceAbi).\n */\nexport class Interface {\n\n    /**\n     *  All the Contract ABI members (i.e. methods, events, errors, etc).\n     */\n    readonly fragments!: ReadonlyArray<Fragment>;\n\n    /**\n     *  The Contract constructor.\n     */\n    readonly deploy!: ConstructorFragment;\n\n    /**\n     *  The Fallback method, if any.\n     */\n    readonly fallback!: null | FallbackFragment;\n\n    /**\n     *  If receiving ether is supported.\n     */\n    readonly receive!: boolean;\n\n    #errors: Map<string, ErrorFragment>;\n    #events: Map<string, EventFragment>;\n    #functions: Map<string, FunctionFragment>;\n//    #structs: Map<string, StructFragment>;\n\n    #abiCoder: AbiCoder;\n\n    /**\n     *  Create a new Interface for the %%fragments%%.\n     */\n    constructor(fragments: InterfaceAbi) {\n        let abi: ReadonlyArray<Fragment | JsonFragment | string> = [ ];\n        if (typeof(fragments) === \"string\") {\n            abi = JSON.parse(fragments);\n        } else {\n            abi = fragments;\n        }\n\n        this.#functions = new Map();\n        this.#errors = new Map();\n        this.#events = new Map();\n//        this.#structs = new Map();\n\n\n        const frags: Array<Fragment> = [ ];\n        for (const a of abi) {\n            try {\n                frags.push(Fragment.from(a));\n            } catch (error: any) {\n                console.log(`[Warning] Invalid Fragment ${ JSON.stringify(a) }:`, error.message);\n            }\n        }\n\n        defineProperties<Interface>(this, {\n            fragments: Object.freeze(frags)\n        });\n\n        let fallback: null | FallbackFragment = null;\n        let receive = false;\n\n        this.#abiCoder = this.getAbiCoder();\n\n        // Add all fragments by their signature\n        this.fragments.forEach((fragment, index) => {\n            let bucket: Map<string, Fragment>;\n            switch (fragment.type) {\n                case \"constructor\":\n                    if (this.deploy) {\n                        console.log(\"duplicate definition - constructor\");\n                        return;\n                    }\n                    //checkNames(fragment, \"input\", fragment.inputs);\n                    defineProperties<Interface>(this, { deploy: <ConstructorFragment>fragment });\n                    return;\n\n                case \"fallback\":\n                    if (fragment.inputs.length === 0) {\n                        receive = true;\n                    } else {\n                        assertArgument(!fallback || (<FallbackFragment>fragment).payable !== fallback.payable,\n                            \"conflicting fallback fragments\", `fragments[${ index }]`, fragment);\n                        fallback = <FallbackFragment>fragment;\n                        receive = fallback.payable;\n                    }\n                    return;\n\n                case \"function\":\n                    //checkNames(fragment, \"input\", fragment.inputs);\n                    //checkNames(fragment, \"output\", (<FunctionFragment>fragment).outputs);\n                    bucket = this.#functions;\n                    break;\n\n                case \"event\":\n                    //checkNames(fragment, \"input\", fragment.inputs);\n                    bucket = this.#events;\n                    break;\n\n                case \"error\":\n                    bucket = this.#errors;\n                    break;\n\n                default:\n                    return;\n            }\n\n            // Two identical entries; ignore it\n            const signature = fragment.format();\n            if (bucket.has(signature)) { return; }\n\n            bucket.set(signature, fragment);\n        });\n\n        // If we do not have a constructor add a default\n        if (!this.deploy) {\n            defineProperties<Interface>(this, {\n                deploy: ConstructorFragment.from(\"constructor()\")\n            });\n        }\n\n        defineProperties<Interface>(this, { fallback, receive });\n    }\n\n    /**\n     *  Returns the entire Human-Readable ABI, as an array of\n     *  signatures, optionally as %%minimal%% strings, which\n     *  removes parameter names and unneceesary spaces.\n     */\n    format(minimal?: boolean): Array<string> {\n        const format = (minimal ? \"minimal\": \"full\");\n        const abi = this.fragments.map((f) => f.format(format));\n        return abi;\n    }\n\n    /**\n     *  Return the JSON-encoded ABI. This is the format Solidiy\n     *  returns.\n     */\n    formatJson(): string {\n        const abi = this.fragments.map((f) => f.format(\"json\"));\n\n        // We need to re-bundle the JSON fragments a bit\n        return JSON.stringify(abi.map((j) => JSON.parse(j)));\n    }\n\n    /**\n     *  The ABI coder that will be used to encode and decode binary\n     *  data.\n     */\n    getAbiCoder(): AbiCoder {\n        return AbiCoder.defaultAbiCoder();\n    }\n\n    // Find a function definition by any means necessary (unless it is ambiguous)\n    #getFunction(key: string, values: null | Array<any | Typed>, forceUnique: boolean): null | FunctionFragment {\n\n        // Selector\n        if (isHexString(key)) {\n            const selector = key.toLowerCase();\n            for (const fragment of this.#functions.values()) {\n                if (selector === fragment.selector) { return fragment; }\n            }\n            return null;\n        }\n\n        // It is a bare name, look up the function (will return null if ambiguous)\n        if (key.indexOf(\"(\") === -1) {\n            const matching: Array<FunctionFragment> = [ ];\n            for (const [ name, fragment ] of this.#functions) {\n                if (name.split(\"(\"/* fix:) */)[0] === key) { matching.push(fragment); }\n            }\n\n            if (values) {\n                const lastValue = (values.length > 0) ? values[values.length - 1]: null;\n\n                let valueLength = values.length;\n                let allowOptions = true;\n                if (Typed.isTyped(lastValue) && lastValue.type === \"overrides\") {\n                    allowOptions = false;\n                    valueLength--;\n                }\n\n                // Remove all matches that don't have a compatible length. The args\n                // may contain an overrides, so the match may have n or n - 1 parameters\n                for (let i = matching.length - 1; i >= 0; i--) {\n                    const inputs = matching[i].inputs.length;\n                    if (inputs !== valueLength && (!allowOptions || inputs !== valueLength - 1)) {\n                        matching.splice(i, 1);\n                    }\n                }\n\n                // Remove all matches that don't match the Typed signature\n                for (let i = matching.length - 1; i >= 0; i--) {\n                    const inputs = matching[i].inputs;\n                    for (let j = 0; j < values.length; j++) {\n                        // Not a typed value\n                        if (!Typed.isTyped(values[j])) { continue; }\n\n                        // We are past the inputs\n                        if (j >= inputs.length) {\n                            if (values[j].type === \"overrides\") { continue; }\n                            matching.splice(i, 1);\n                            break;\n                        }\n\n                        // Make sure the value type matches the input type\n                        if (values[j].type !== inputs[j].baseType) {\n                            matching.splice(i, 1);\n                            break;\n                        }\n                    }\n                }\n            }\n\n            // We found a single matching signature with an overrides, but the\n            // last value is something that cannot possibly be an options\n            if (matching.length === 1 && values && values.length !== matching[0].inputs.length) {\n                const lastArg = values[values.length - 1];\n                if (lastArg == null || Array.isArray(lastArg) || typeof(lastArg) !== \"object\") {\n                    matching.splice(0, 1);\n                }\n            }\n\n            if (matching.length === 0) { return null; }\n\n            if (matching.length > 1 && forceUnique) {\n                const matchStr = matching.map((m) => JSON.stringify(m.format())).join(\", \");\n                assertArgument(false, `ambiguous function description (i.e. matches ${ matchStr })`, \"key\", key);\n            }\n\n            return matching[0];\n        }\n\n        // Normalize the signature and lookup the function\n        const result = this.#functions.get(FunctionFragment.from(key).format());\n        if (result) { return result; }\n\n        return null;\n    }\n\n    /**\n     *  Get the function name for %%key%%, which may be a function selector,\n     *  function name or function signature that belongs to the ABI.\n     */\n    getFunctionName(key: string): string {\n        const fragment = this.#getFunction(key, null, false);\n        assertArgument(fragment, \"no matching function\", \"key\", key);\n        return fragment.name;\n    }\n\n    /**\n     *  Returns true if %%key%% (a function selector, function name or\n     *  function signature) is present in the ABI.\n     *\n     *  In the case of a function name, the name may be ambiguous, so\n     *  accessing the [[FunctionFragment]] may require refinement.\n     */\n    hasFunction(key: string): boolean {\n        return !!this.#getFunction(key, null, false);\n    }\n\n    /**\n     *  Get the [[FunctionFragment]] for %%key%%, which may be a function\n     *  selector, function name or function signature that belongs to the ABI.\n     *\n     *  If %%values%% is provided, it will use the Typed API to handle\n     *  ambiguous cases where multiple functions match by name.\n     *\n     *  If the %%key%% and %%values%% do not refine to a single function in\n     *  the ABI, this will throw.\n     */\n    getFunction(key: string, values?: Array<any | Typed>): null | FunctionFragment {\n        return this.#getFunction(key, values || null, true);\n    }\n\n    /**\n     *  Iterate over all functions, calling %%callback%%, sorted by their name.\n     */\n    forEachFunction(callback: (func: FunctionFragment, index: number) => void): void {\n        const names = Array.from(this.#functions.keys());\n        names.sort((a, b) => a.localeCompare(b));\n        for (let i = 0; i < names.length; i++) {\n            const name = names[i];\n            callback(<FunctionFragment>(this.#functions.get(name)), i);\n        }\n    }\n\n\n    // Find an event definition by any means necessary (unless it is ambiguous)\n    #getEvent(key: string, values: null | Array<null | any | Typed>, forceUnique: boolean): null | EventFragment {\n\n        // EventTopic\n        if (isHexString(key)) {\n            const eventTopic = key.toLowerCase();\n            for (const fragment of this.#events.values()) {\n                if (eventTopic === fragment.topicHash) { return fragment; }\n            }\n            return null;\n        }\n\n        // It is a bare name, look up the function (will return null if ambiguous)\n        if (key.indexOf(\"(\") === -1) {\n            const matching: Array<EventFragment> = [ ];\n            for (const [ name, fragment ] of this.#events) {\n                if (name.split(\"(\"/* fix:) */)[0] === key) { matching.push(fragment); }\n            }\n\n            if (values) {\n                // Remove all matches that don't have a compatible length.\n                for (let i = matching.length - 1; i >= 0; i--) {\n                    if (matching[i].inputs.length < values.length) {\n                        matching.splice(i, 1);\n                    }\n                }\n\n                // Remove all matches that don't match the Typed signature\n                for (let i = matching.length - 1; i >= 0; i--) {\n                    const inputs = matching[i].inputs;\n                    for (let j = 0; j < values.length; j++) {\n                        // Not a typed value\n                        if (!Typed.isTyped(values[j])) { continue; }\n\n                        // Make sure the value type matches the input type\n                        if (values[j].type !== inputs[j].baseType) {\n                            matching.splice(i, 1);\n                            break;\n                        }\n                    }\n                }\n            }\n\n            if (matching.length === 0) { return null; }\n\n            if (matching.length > 1 && forceUnique) {\n                const matchStr = matching.map((m) => JSON.stringify(m.format())).join(\", \");\n                assertArgument(false, `ambiguous event description (i.e. matches ${ matchStr })`, \"key\", key);\n            }\n\n            return matching[0];\n        }\n\n        // Normalize the signature and lookup the function\n        const result = this.#events.get(EventFragment.from(key).format());\n        if (result) { return result; }\n\n        return null;\n    }\n\n    /**\n     *  Get the event name for %%key%%, which may be a topic hash,\n     *  event name or event signature that belongs to the ABI.\n     */\n    getEventName(key: string): string {\n        const fragment = this.#getEvent(key, null, false);\n        assertArgument(fragment, \"no matching event\", \"key\", key);\n\n        return fragment.name;\n    }\n\n    /**\n     *  Returns true if %%key%% (an event topic hash, event name or\n     *  event signature) is present in the ABI.\n     *\n     *  In the case of an event name, the name may be ambiguous, so\n     *  accessing the [[EventFragment]] may require refinement.\n     */\n    hasEvent(key: string): boolean {\n        return !!this.#getEvent(key, null, false);\n    }\n\n    /**\n     *  Get the [[EventFragment]] for %%key%%, which may be a topic hash,\n     *  event name or event signature that belongs to the ABI.\n     *\n     *  If %%values%% is provided, it will use the Typed API to handle\n     *  ambiguous cases where multiple events match by name.\n     *\n     *  If the %%key%% and %%values%% do not refine to a single event in\n     *  the ABI, this will throw.\n     */\n    getEvent(key: string, values?: Array<any | Typed>): null | EventFragment {\n        return this.#getEvent(key, values || null, true)\n    }\n\n    /**\n     *  Iterate over all events, calling %%callback%%, sorted by their name.\n     */\n    forEachEvent(callback: (func: EventFragment, index: number) => void): void {\n        const names = Array.from(this.#events.keys());\n        names.sort((a, b) => a.localeCompare(b));\n        for (let i = 0; i < names.length; i++) {\n            const name = names[i];\n            callback(<EventFragment>(this.#events.get(name)), i);\n        }\n    }\n\n    /**\n     *  Get the [[ErrorFragment]] for %%key%%, which may be an error\n     *  selector, error name or error signature that belongs to the ABI.\n     *\n     *  If %%values%% is provided, it will use the Typed API to handle\n     *  ambiguous cases where multiple errors match by name.\n     *\n     *  If the %%key%% and %%values%% do not refine to a single error in\n     *  the ABI, this will throw.\n     */\n    getError(key: string, values?: Array<any | Typed>): null | ErrorFragment {\n        if (isHexString(key)) {\n            const selector = key.toLowerCase();\n\n            if (BuiltinErrors[selector]) {\n                return ErrorFragment.from(BuiltinErrors[selector].signature);\n            }\n\n            for (const fragment of this.#errors.values()) {\n                if (selector === fragment.selector) { return fragment; }\n            }\n\n            return null;\n        }\n\n        // It is a bare name, look up the function (will return null if ambiguous)\n        if (key.indexOf(\"(\") === -1) {\n            const matching: Array<ErrorFragment> = [ ];\n            for (const [ name, fragment ] of this.#errors) {\n                if (name.split(\"(\"/* fix:) */)[0] === key) { matching.push(fragment); }\n            }\n\n            if (matching.length === 0) {\n                if (key === \"Error\") { return ErrorFragment.from(\"error Error(string)\"); }\n                if (key === \"Panic\") { return ErrorFragment.from(\"error Panic(uint256)\"); }\n                return null;\n            } else if (matching.length > 1) {\n                const matchStr = matching.map((m) => JSON.stringify(m.format())).join(\", \");\n                assertArgument(false, `ambiguous error description (i.e. ${ matchStr })`, \"name\", key);\n            }\n\n            return matching[0];\n        }\n\n        // Normalize the signature and lookup the function\n        key = ErrorFragment.from(key).format()\n        if (key === \"Error(string)\") { return ErrorFragment.from(\"error Error(string)\"); }\n        if (key === \"Panic(uint256)\") { return ErrorFragment.from(\"error Panic(uint256)\"); }\n\n        const result = this.#errors.get(key);\n        if (result) { return result; }\n\n        return null;\n    }\n\n    /**\n     *  Iterate over all errors, calling %%callback%%, sorted by their name.\n     */\n    forEachError(callback: (func: ErrorFragment, index: number) => void): void {\n        const names = Array.from(this.#errors.keys());\n        names.sort((a, b) => a.localeCompare(b));\n        for (let i = 0; i < names.length; i++) {\n            const name = names[i];\n            callback(<ErrorFragment>(this.#errors.get(name)), i);\n        }\n    }\n\n    // Get the 4-byte selector used by Solidity to identify a function\n        /*\n    getSelector(fragment: ErrorFragment | FunctionFragment): string {\n        if (typeof(fragment) === \"string\") {\n            const matches: Array<Fragment> = [ ];\n\n            try { matches.push(this.getFunction(fragment)); } catch (error) { }\n            try { matches.push(this.getError(<string>fragment)); } catch (_) { }\n\n            if (matches.length === 0) {\n                logger.throwArgumentError(\"unknown fragment\", \"key\", fragment);\n            } else if (matches.length > 1) {\n                logger.throwArgumentError(\"ambiguous fragment matches function and error\", \"key\", fragment);\n            }\n\n            fragment = matches[0];\n        }\n\n        return dataSlice(id(fragment.format()), 0, 4);\n    }\n        */\n\n    // Get the 32-byte topic hash used by Solidity to identify an event\n    /*\n    getEventTopic(fragment: EventFragment): string {\n        //if (typeof(fragment) === \"string\") { fragment = this.getEvent(eventFragment); }\n        return id(fragment.format());\n    }\n    */\n\n\n    _decodeParams(params: ReadonlyArray<ParamType>, data: BytesLike): Result {\n        return this.#abiCoder.decode(params, data)\n    }\n\n    _encodeParams(params: ReadonlyArray<ParamType>, values: ReadonlyArray<any>): string {\n        return this.#abiCoder.encode(params, values)\n    }\n\n    /**\n     *  Encodes a ``tx.data`` object for deploying the Contract with\n     *  the %%values%% as the constructor arguments.\n     */\n    encodeDeploy(values?: ReadonlyArray<any>): string {\n        return this._encodeParams(this.deploy.inputs, values || [ ]);\n    }\n\n    /**\n     *  Decodes the result %%data%% (e.g. from an ``eth_call``) for the\n     *  specified error (see [[getError]] for valid values for\n     *  %%key%%).\n     *\n     *  Most developers should prefer the [[parseCallResult]] method instead,\n     *  which will automatically detect a ``CALL_EXCEPTION`` and throw the\n     *  corresponding error.\n     */\n    decodeErrorResult(fragment: ErrorFragment | string, data: BytesLike): Result {\n        if (typeof(fragment) === \"string\") {\n            const f = this.getError(fragment);\n            assertArgument(f, \"unknown error\", \"fragment\", fragment);\n            fragment = f;\n        }\n\n        assertArgument(dataSlice(data, 0, 4) === fragment.selector,\n            `data signature does not match error ${ fragment.name }.`, \"data\", data);\n\n        return this._decodeParams(fragment.inputs, dataSlice(data, 4));\n    }\n\n    /**\n     *  Encodes the transaction revert data for a call result that\n     *  reverted from the the Contract with the sepcified %%error%%\n     *  (see [[getError]] for valid values for %%fragment%%) with the %%values%%.\n     *\n     *  This is generally not used by most developers, unless trying to mock\n     *  a result from a Contract.\n     */\n    encodeErrorResult(fragment: ErrorFragment | string, values?: ReadonlyArray<any>): string {\n        if (typeof(fragment) === \"string\") {\n            const f = this.getError(fragment);\n            assertArgument(f, \"unknown error\", \"fragment\", fragment);\n            fragment = f;\n        }\n\n        return concat([\n            fragment.selector,\n            this._encodeParams(fragment.inputs, values || [ ])\n        ]);\n    }\n\n    /**\n     *  Decodes the %%data%% from a transaction ``tx.data`` for\n     *  the function specified (see [[getFunction]] for valid values\n     *  for %%fragment%%).\n     *\n     *  Most developers should prefer the [[parseTransaction]] method\n     *  instead, which will automatically detect the fragment.\n     */\n    decodeFunctionData(fragment: FunctionFragment | string, data: BytesLike): Result {\n        if (typeof(fragment) === \"string\") {\n            const f = this.getFunction(fragment);\n            assertArgument(f, \"unknown function\", \"fragment\", fragment);\n            fragment = f;\n        }\n\n        assertArgument(dataSlice(data, 0, 4) === fragment.selector,\n            `data signature does not match function ${ fragment.name }.`, \"data\", data);\n\n        return this._decodeParams(fragment.inputs, dataSlice(data, 4));\n    }\n\n    /**\n     *  Encodes the ``tx.data`` for a transaction that calls the function\n     *  specified (see [[getFunction]] for valid values for %%fragment%%) with\n     *  the %%values%%.\n     */\n    encodeFunctionData(fragment: FunctionFragment | string, values?: ReadonlyArray<any>): string {\n        if (typeof(fragment) === \"string\") {\n            const f = this.getFunction(fragment);\n            assertArgument(f, \"unknown function\", \"fragment\", fragment);\n            fragment = f;\n        }\n\n        return concat([\n            fragment.selector,\n            this._encodeParams(fragment.inputs, values || [ ])\n        ]);\n    }\n\n    /**\n     *  Decodes the result %%data%% (e.g. from an ``eth_call``) for the\n     *  specified function (see [[getFunction]] for valid values for\n     *  %%key%%).\n     *\n     *  Most developers should prefer the [[parseCallResult]] method instead,\n     *  which will automatically detect a ``CALL_EXCEPTION`` and throw the\n     *  corresponding error.\n     */\n    decodeFunctionResult(fragment: FunctionFragment | string, data: BytesLike): Result {\n        if (typeof(fragment) === \"string\") {\n            const f = this.getFunction(fragment);\n            assertArgument(f, \"unknown function\", \"fragment\", fragment);\n            fragment = f;\n        }\n\n        let message = \"invalid length for result data\";\n\n        const bytes = getBytesCopy(data);\n        if ((bytes.length % 32) === 0) {\n            try {\n                return this.#abiCoder.decode(fragment.outputs, bytes);\n            } catch (error) {\n                message = \"could not decode result data\";\n            }\n        }\n\n        // Call returned data with no error, but the data is junk\n        assert(false, message, \"BAD_DATA\", {\n            value: hexlify(bytes),\n            info: { method: fragment.name, signature: fragment.format() }\n        });\n    }\n\n    makeError(_data: BytesLike, tx: CallExceptionTransaction): CallExceptionError {\n        const data = getBytes(_data, \"data\");\n\n        const error = AbiCoder.getBuiltinCallException(\"call\", tx, data);\n\n        // Not a built-in error; try finding a custom error\n        const customPrefix = \"execution reverted (unknown custom error)\";\n        if (error.message.startsWith(customPrefix)) {\n            const selector = hexlify(data.slice(0, 4));\n\n            const ef = this.getError(selector);\n            if (ef) {\n                try {\n                    const args = this.#abiCoder.decode(ef.inputs, data.slice(4));\n                    error.revert = {\n                        name: ef.name, signature: ef.format(), args\n                    };\n                    error.reason = error.revert.signature;\n                    error.message = `execution reverted: ${ error.reason }`\n                 } catch (e) {\n                    error.message = `execution reverted (coult not decode custom error)`\n                }\n            }\n        }\n\n        // Add the invocation, if available\n        const parsed = this.parseTransaction(tx);\n        if (parsed) {\n            error.invocation = {\n                method: parsed.name,\n                signature: parsed.signature,\n                args: parsed.args\n            };\n        }\n\n        return error;\n    }\n\n    /**\n     *  Encodes the result data (e.g. from an ``eth_call``) for the\n     *  specified function (see [[getFunction]] for valid values\n     *  for %%fragment%%) with %%values%%.\n     *\n     *  This is generally not used by most developers, unless trying to mock\n     *  a result from a Contract.\n     */\n    encodeFunctionResult(fragment: FunctionFragment | string, values?: ReadonlyArray<any>): string {\n        if (typeof(fragment) === \"string\") {\n            const f = this.getFunction(fragment);\n            assertArgument(f, \"unknown function\", \"fragment\", fragment);\n            fragment = f;\n        }\n        return hexlify(this.#abiCoder.encode(fragment.outputs, values || [ ]));\n    }\n/*\n    spelunk(inputs: Array<ParamType>, values: ReadonlyArray<any>, processfunc: (type: string, value: any) => Promise<any>): Promise<Array<any>> {\n        const promises: Array<Promise<>> = [ ];\n        const process = function(type: ParamType, value: any): any {\n            if (type.baseType === \"array\") {\n                return descend(type.child\n            }\n            if (type. === \"address\") {\n            }\n        };\n\n        const descend = function (inputs: Array<ParamType>, values: ReadonlyArray<any>) {\n            if (inputs.length !== values.length) { throw new Error(\"length mismatch\"); }\n            \n        };\n\n        const result: Array<any> = [ ];\n        values.forEach((value, index) => {\n            if (value == null) {\n                topics.push(null);\n            } else if (param.baseType === \"array\" || param.baseType === \"tuple\") {\n                logger.throwArgumentError(\"filtering with tuples or arrays not supported\", (\"contract.\" + param.name), value);\n            } else if (Array.isArray(value)) {\n                topics.push(value.map((value) => encodeTopic(param, value)));\n            } else {\n                topics.push(encodeTopic(param, value));\n            }\n        });\n    }\n*/\n    // Create the filter for the event with search criteria (e.g. for eth_filterLog)\n    encodeFilterTopics(fragment: EventFragment | string, values: ReadonlyArray<any>): Array<null | string | Array<string>> {\n        if (typeof(fragment) === \"string\") {\n            const f = this.getEvent(fragment);\n            assertArgument(f, \"unknown event\", \"eventFragment\", fragment);\n            fragment = f;\n        }\n\n        assert(values.length <= fragment.inputs.length, `too many arguments for ${ fragment.format() }`,\n            \"UNEXPECTED_ARGUMENT\", { count: values.length, expectedCount: fragment.inputs.length })\n\n        const topics: Array<null | string | Array<string>> = [];\n        if (!fragment.anonymous) { topics.push(fragment.topicHash); }\n\n        // @TODO: Use the coders for this; to properly support tuples, etc.\n        const encodeTopic = (param: ParamType, value: any): string => {\n            if (param.type === \"string\") {\n                 return id(value);\n            } else if (param.type === \"bytes\") {\n                 return keccak256(hexlify(value));\n            }\n\n            if (param.type === \"bool\" && typeof(value) === \"boolean\") {\n                value = (value ? \"0x01\": \"0x00\");\n            } else if (param.type.match(/^u?int/)) {\n                value = toBeHex(value);  // @TODO: Should this toTwos??\n            } else if (param.type.match(/^bytes/)) {\n                value = zeroPadBytes(value, 32);\n            } else if (param.type === \"address\") {\n                // Check addresses are valid\n                this.#abiCoder.encode( [ \"address\" ], [ value ]);\n            }\n\n            return zeroPadValue(hexlify(value), 32);\n        };\n\n        values.forEach((value, index) => {\n\n            const param = (<EventFragment>fragment).inputs[index];\n\n            if (!param.indexed) {\n                assertArgument(value == null,\n                    \"cannot filter non-indexed parameters; must be null\", (\"contract.\" + param.name), value);\n                return;\n            }\n\n            if (value == null) {\n                topics.push(null);\n            } else if (param.baseType === \"array\" || param.baseType === \"tuple\") {\n                assertArgument(false, \"filtering with tuples or arrays not supported\", (\"contract.\" + param.name), value);\n            } else if (Array.isArray(value)) {\n                topics.push(value.map((value) => encodeTopic(param, value)));\n            } else {\n                topics.push(encodeTopic(param, value));\n            }\n        });\n\n        // Trim off trailing nulls\n        while (topics.length && topics[topics.length - 1] === null) {\n            topics.pop();\n        }\n\n        return topics;\n    }\n\n    encodeEventLog(fragment: EventFragment | string, values: ReadonlyArray<any>): { data: string, topics: Array<string> } {\n        if (typeof(fragment) === \"string\") {\n            const f = this.getEvent(fragment);\n            assertArgument(f, \"unknown event\", \"eventFragment\", fragment);\n            fragment = f;\n        }\n\n        const topics: Array<string> = [ ];\n\n        const dataTypes: Array<ParamType> = [ ];\n        const dataValues: Array<string> = [ ];\n\n        if (!fragment.anonymous) {\n            topics.push(fragment.topicHash);\n        }\n\n        assertArgument(values.length === fragment.inputs.length,\n            \"event arguments/values mismatch\", \"values\", values);\n\n        fragment.inputs.forEach((param, index) => {\n            const value = values[index];\n            if (param.indexed) {\n                if (param.type === \"string\") {\n                    topics.push(id(value))\n                } else if (param.type === \"bytes\") {\n                    topics.push(keccak256(value))\n                } else if (param.baseType === \"tuple\" || param.baseType === \"array\") {\n                    // @TODO\n                    throw new Error(\"not implemented\");\n                } else {\n                    topics.push(this.#abiCoder.encode([ param.type] , [ value ]));\n                }\n            } else {\n                dataTypes.push(param);\n                dataValues.push(value);\n            }\n        });\n\n        return {\n            data: this.#abiCoder.encode(dataTypes , dataValues),\n            topics: topics\n        };\n    }\n\n    // Decode a filter for the event and the search criteria\n    decodeEventLog(fragment: EventFragment | string, data: BytesLike, topics?: ReadonlyArray<string>): Result {\n        if (typeof(fragment) === \"string\") {\n            const f = this.getEvent(fragment);\n            assertArgument(f, \"unknown event\", \"eventFragment\", fragment);\n            fragment = f;\n        }\n\n        if (topics != null && !fragment.anonymous) {\n            const eventTopic = fragment.topicHash;\n            assertArgument(isHexString(topics[0], 32) && topics[0].toLowerCase() === eventTopic,\n                \"fragment/topic mismatch\", \"topics[0]\", topics[0]);\n            topics = topics.slice(1);\n        }\n\n        const indexed: Array<ParamType> = [];\n        const nonIndexed: Array<ParamType> = [];\n        const dynamic: Array<boolean> = [];\n\n        fragment.inputs.forEach((param, index) => {\n            if (param.indexed) {\n                if (param.type === \"string\" || param.type === \"bytes\" || param.baseType === \"tuple\" || param.baseType === \"array\") {\n                    indexed.push(ParamType.from({ type: \"bytes32\", name: param.name }));\n                    dynamic.push(true);\n                } else {\n                    indexed.push(param);\n                    dynamic.push(false);\n                }\n            } else {\n                nonIndexed.push(param);\n                dynamic.push(false);\n            }\n        });\n\n        const resultIndexed = (topics != null) ? this.#abiCoder.decode(indexed, concat(topics)): null;\n        const resultNonIndexed = this.#abiCoder.decode(nonIndexed, data, true);\n\n        //const result: (Array<any> & { [ key: string ]: any }) = [ ];\n        const values: Array<any> = [ ];\n        const keys: Array<null | string> = [ ];\n        let nonIndexedIndex = 0, indexedIndex = 0;\n        fragment.inputs.forEach((param, index) => {\n            let value: null | Indexed | Error = null;\n            if (param.indexed) {\n                if (resultIndexed == null) {\n                    value = new Indexed(null);\n\n                } else if (dynamic[index]) {\n                    value = new Indexed(resultIndexed[indexedIndex++]);\n\n                } else {\n                    try {\n                        value = resultIndexed[indexedIndex++];\n                    } catch (error: any) {\n                        value = error;\n                    }\n                }\n            } else {\n                try {\n                    value = resultNonIndexed[nonIndexedIndex++];\n                } catch (error: any) {\n                    value = error;\n                }\n            }\n\n            values.push(value);\n            keys.push(param.name || null);\n        });\n\n        return Result.fromItems(values, keys);\n    }\n\n    /**\n     *  Parses a transaction, finding the matching function and extracts\n     *  the parameter values along with other useful function details.\n     *\n     *  If the matching function cannot be found, return null.\n     */\n    parseTransaction(tx: { data: string, value?: BigNumberish }): null | TransactionDescription {\n        const data = getBytes(tx.data, \"tx.data\");\n        const value = getBigInt((tx.value != null) ? tx.value: 0, \"tx.value\");\n\n        const fragment = this.getFunction(hexlify(data.slice(0, 4)));\n\n        if (!fragment) { return null; }\n\n        const args = this.#abiCoder.decode(fragment.inputs, data.slice(4));\n        return new TransactionDescription(fragment, fragment.selector, args, value);\n    }\n\n    parseCallResult(data: BytesLike): Result {\n        throw new Error(\"@TODO\");\n    }\n\n    /**\n     *  Parses a receipt log, finding the matching event and extracts\n     *  the parameter values along with other useful event details.\n     *\n     *  If the matching event cannot be found, returns null.\n     */\n    parseLog(log: { topics: ReadonlyArray<string>, data: string}): null | LogDescription {\n        const fragment = this.getEvent(log.topics[0]);\n\n        if (!fragment || fragment.anonymous) { return null; }\n\n        // @TODO: If anonymous, and the only method, and the input count matches, should we parse?\n        //        Probably not, because just because it is the only event in the ABI does\n        //        not mean we have the full ABI; maybe just a fragment?\n\n\n       return new LogDescription(fragment, fragment.topicHash, this.decodeEventLog(fragment, log.data, log.topics));\n    }\n\n    /**\n     *  Parses a revert data, finding the matching error and extracts\n     *  the parameter values along with other useful error details.\n     *\n     *  If the matching error cannot be found, returns null.\n     */\n    parseError(data: BytesLike): null | ErrorDescription {\n        const hexData = hexlify(data);\n\n        const fragment = this.getError(dataSlice(hexData, 0, 4));\n\n        if (!fragment) { return null; }\n\n        const args = this.#abiCoder.decode(fragment.inputs, dataSlice(hexData, 4));\n        return new ErrorDescription(fragment, fragment.selector, args);\n    }\n\n    /**\n     *  Creates a new [[Interface]] from the ABI %%value%%.\n     *\n     *  The %%value%% may be provided as an existing [[Interface]] object,\n     *  a JSON-encoded ABI or any Human-Readable ABI format.\n     */\n    static from(value: InterfaceAbi | Interface): Interface {\n        // Already an Interface, which is immutable\n        if (value instanceof Interface) { return value; }\n\n        // JSON\n        if (typeof(value) === \"string\") { return new Interface(JSON.parse(value)); }\n\n        // Maybe an interface from an older version, or from a symlinked copy\n        if (typeof((<any>value).format) === \"function\") {\n            return new Interface((<any>value).format(\"json\"));\n        }\n\n        // Array of fragments\n        return new Interface(value);\n    }\n}\n", "/**\n *  The Application Binary Interface (ABI) describes how method input\n *  parameters should be encoded, their results decoded, and how to\n *  decode events and errors.\n *\n *  See [About ABIs](docs-abi) for more details how they are used.\n *\n *  @_section api/abi:Application Binary Interface  [about-abi]\n *  @_navTitle: ABI\n */\n\n\n//////\nexport { AbiCoder } from \"./abi-coder.js\";\n\nexport { decodeBytes32String, encodeBytes32String } from \"./bytes32.js\";\n\nexport {\n    ConstructorFragment, ErrorFragment, EventFragment, FallbackFragment,\n    Fragment, FunctionFragment, NamedFragment, ParamType, StructFragment,\n} from \"./fragments.js\";\n\nexport {\n    checkResultErrors,\n    Indexed,\n    Interface,\n    ErrorDescription, LogDescription, TransactionDescription,\n    Result\n} from \"./interface.js\";\n\nexport { Typed } from \"./typed.js\";\n\nexport type {\n    JsonFragment, JsonFragmentType,\n    FormatType, FragmentType, ParamTypeWalkAsyncFunc, ParamTypeWalkFunc\n} from \"./fragments.js\";\n\nexport type {\n    InterfaceAbi,\n} from \"./interface.js\";\n\n", "//import { resolveAddress } from \"@ethersproject/address\";\nimport {\n    defineProperties, getBigInt, getNumber, hexlify, resolveProperties,\n    assert, assertArgument, isError, makeError\n} from \"../utils/index.js\";\nimport { accessListify } from \"../transaction/index.js\";\n\nimport type { AddressLike, NameResolver } from \"../address/index.js\";\nimport type { BigNumberish, EventEmitterable } from \"../utils/index.js\";\nimport type { Signature } from \"../crypto/index.js\";\nimport type { AccessList, AccessListish, TransactionLike } from \"../transaction/index.js\";\n\nimport type { ContractRunner } from \"./contracts.js\";\nimport type { Network } from \"./network.js\";\n\n\nconst BN_0 = BigInt(0);\n\n/**\n *  A **BlockTag** specifies a specific block.\n *\n *  **numeric value** - specifies the block height, where\n *  the genesis block is block 0; many operations accept a negative\n *  value which indicates the block number should be deducted from\n *  the most recent block. A numeric value may be a ``number``, ``bigint``,\n *  or a decimal of hex string.\n *\n *  **blockhash** - specifies a specific block by its blockhash; this allows\n *  potentially orphaned blocks to be specifed, without ambiguity, but many\n *  backends do not support this for some operations.\n */\nexport type BlockTag = BigNumberish | string;\n\nimport {\n    BlockParams, LogParams, TransactionReceiptParams,\n    TransactionResponseParams\n} from \"./formatting.js\";\n\n// -----------------------\n\nfunction getValue<T>(value: undefined | null | T): null | T {\n    if (value == null) { return null; }\n    return value;\n}\n\nfunction toJson(value: null | bigint): null | string {\n    if (value == null) { return null; }\n    return value.toString();\n}\n\n// @TODO? <T extends FeeData = { }> implements Required<T>\n\n/**\n *  A **FeeData** wraps all the fee-related values associated with\n *  the network.\n */\nexport class FeeData {\n    /**\n     *  The gas price for legacy networks.\n     */\n    readonly gasPrice!: null | bigint;\n\n    /**\n     *  The maximum fee to pay per gas.\n     *\n     *  The base fee per gas is defined by the network and based on\n     *  congestion, increasing the cost during times of heavy load\n     *  and lowering when less busy.\n     *\n     *  The actual fee per gas will be the base fee for the block\n     *  and the priority fee, up to the max fee per gas.\n     *\n     *  This will be ``null`` on legacy networks (i.e. [pre-EIP-1559](link-eip-1559))\n     */\n    readonly maxFeePerGas!: null | bigint;\n\n    /**\n     *  The additional amout to pay per gas to encourage a validator\n     *  to include the transaction.\n     *\n     *  The purpose of this is to compensate the validator for the\n     *  adjusted risk for including a given transaction.\n     *\n     *  This will be ``null`` on legacy networks (i.e. [pre-EIP-1559](link-eip-1559))\n     */\n    readonly maxPriorityFeePerGas!: null | bigint;\n\n    /**\n     *  Creates a new FeeData for %%gasPrice%%, %%maxFeePerGas%% and\n     *  %%maxPriorityFeePerGas%%.\n     */\n    constructor(gasPrice?: null | bigint, maxFeePerGas?: null | bigint, maxPriorityFeePerGas?: null | bigint) {\n        defineProperties<FeeData>(this, {\n            gasPrice: getValue(gasPrice),\n            maxFeePerGas: getValue(maxFeePerGas),\n            maxPriorityFeePerGas: getValue(maxPriorityFeePerGas)\n        });\n    }\n\n    /**\n     *  Returns a JSON-friendly value.\n     */\n    toJSON(): any {\n        const {\n            gasPrice, maxFeePerGas, maxPriorityFeePerGas\n        } = this;\n        return {\n            _type: \"FeeData\",\n            gasPrice: toJson(gasPrice),\n            maxFeePerGas: toJson(maxFeePerGas),\n            maxPriorityFeePerGas: toJson(maxPriorityFeePerGas),\n        };\n    }\n}\n\n\n/**\n *  A **TransactionRequest** is a transactions with potentially various\n *  properties not defined, or with less strict types for its values.\n *\n *  This is used to pass to various operations, which will internally\n *  coerce any types and populate any necessary values.\n */\nexport interface TransactionRequest {\n    /**\n     *  The transaction type.\n     */\n    type?: null | number;\n\n    /**\n     *  The target of the transaction.\n     */\n    to?: null | AddressLike;\n\n    /**\n     *  The sender of the transaction.\n     */\n    from?: null | AddressLike;\n\n    /**\n     *  The nonce of the transaction, used to prevent replay attacks.\n     */\n    nonce?: null | number;\n\n    /**\n     *  The maximum amount of gas to allow this transaction to consume.\n     */\n    gasLimit?: null | BigNumberish;\n\n    /**\n     *  The gas price to use for legacy transactions or transactions on\n     *  legacy networks.\n     *\n     *  Most of the time the ``max*FeePerGas`` is preferred.\n     */\n    gasPrice?: null | BigNumberish;\n\n    /**\n     *  The [[link-eip-1559]] maximum priority fee to pay per gas.\n     */\n    maxPriorityFeePerGas?: null | BigNumberish;\n\n    /**\n     *  The [[link-eip-1559]] maximum total fee to pay per gas. The actual\n     *  value used is protocol enforced to be the block's base fee.\n     */\n    maxFeePerGas?: null | BigNumberish;\n\n    /**\n     *  The transaction data.\n     */\n    data?: null | string;\n\n    /**\n     *  The transaction value (in wei).\n     */\n    value?: null | BigNumberish;\n\n    /**\n     *  The chain ID for the network this transaction is valid on.\n     */\n    chainId?: null | BigNumberish;\n\n    /**\n     *  The [[link-eip-2930]] access list. Storage slots included in the access\n     *  list are //warmed// by pre-loading them, so their initial cost to\n     *  fetch is guaranteed, but then each additional access is cheaper.\n     */\n    accessList?: null | AccessListish;\n\n    /**\n     *  A custom object, which can be passed along for network-specific\n     *  values.\n     */\n    customData?: any;\n\n    // Only meaningful when used for call\n\n    /**\n     *  When using ``call`` or ``estimateGas``, this allows a specific\n     *  block to be queried. Many backends do not support this and when\n     *  unsupported errors are silently squelched and ``\"latest\"`` is used. \n     */\n    blockTag?: BlockTag;\n\n    /**\n     *  When using ``call``, this enables CCIP-read, which permits the\n     *  provider to be redirected to web-based content during execution,\n     *  which is then further validated by the contract.\n     *\n     *  There are potential security implications allowing CCIP-read, as\n     *  it could be used to expose the IP address or user activity during\n     *  the fetch to unexpected parties.\n     */\n    enableCcipRead?: boolean;\n\n    // Todo?\n    //gasMultiplier?: number;\n};\n\n/**\n *  A **PreparedTransactionRequest** is identical to a [[TransactionRequest]]\n *  except all the property types are strictly enforced.\n */\nexport interface PreparedTransactionRequest {\n    /**\n     *  The transaction type.\n     */\n    type?: number;\n\n\n    /**\n     *  The target of the transaction.\n     */\n    to?: AddressLike;\n\n    /**\n     *  The sender of the transaction.\n     */\n    from?: AddressLike;\n\n    /**\n     *  The nonce of the transaction, used to prevent replay attacks.\n     */\n\n    nonce?: number;\n\n    /**\n     *  The maximum amount of gas to allow this transaction to consime.\n     */\n    gasLimit?: bigint;\n\n    /**\n     *  The gas price to use for legacy transactions or transactions on\n     *  legacy networks.\n     *\n     *  Most of the time the ``max*FeePerGas`` is preferred.\n     */\n    gasPrice?: bigint;\n\n    /**\n     *  The [[link-eip-1559]] maximum priority fee to pay per gas.\n     */\n    maxPriorityFeePerGas?: bigint;\n\n    /**\n     *  The [[link-eip-1559]] maximum total fee to pay per gas. The actual\n     *  value used is protocol enforced to be the block's base fee.\n     */\n    maxFeePerGas?: bigint;\n\n    /**\n     *  The transaction data.\n     */\n    data?: string;\n\n\n    /**\n     *  The transaction value (in wei).\n     */\n    value?: bigint;\n\n    /**\n     *  The chain ID for the network this transaction is valid on.\n     */\n    chainId?: bigint;\n\n    /**\n     *  The [[link-eip-2930]] access list. Storage slots included in the access\n     *  list are //warmed// by pre-loading them, so their initial cost to\n     *  fetch is guaranteed, but then each additional access is cheaper.\n     */\n    accessList?: AccessList;\n\n    /**\n     *  A custom object, which can be passed along for network-specific\n     *  values.\n     */\n    customData?: any;\n\n\n\n    /**\n     *  When using ``call`` or ``estimateGas``, this allows a specific\n     *  block to be queried. Many backends do not support this and when\n     *  unsupported errors are silently squelched and ``\"latest\"`` is used. \n     */\n    blockTag?: BlockTag;\n\n    /**\n     *  When using ``call``, this enables CCIP-read, which permits the\n     *  provider to be redirected to web-based content during execution,\n     *  which is then further validated by the contract.\n     *\n     *  There are potential security implications allowing CCIP-read, as\n     *  it could be used to expose the IP address or user activity during\n     *  the fetch to unexpected parties.\n     */\n    enableCcipRead?: boolean;\n}\n\n/**\n *  Returns a copy of %%req%% with all properties coerced to their strict\n *  types.\n */\nexport function copyRequest(req: TransactionRequest): PreparedTransactionRequest {\n    const result: any = { };\n\n    // These could be addresses, ENS names or Addressables\n    if (req.to) { result.to = req.to; }\n    if (req.from) { result.from = req.from; }\n\n    if (req.data) { result.data = hexlify(req.data); }\n\n    const bigIntKeys = \"chainId,gasLimit,gasPrice,maxFeePerGas,maxPriorityFeePerGas,value\".split(/,/);\n    for (const key of bigIntKeys) {\n        if (!(key in req) || (<any>req)[key] == null) { continue; }\n        result[key] = getBigInt((<any>req)[key], `request.${ key }`);\n    }\n\n    const numberKeys = \"type,nonce\".split(/,/);\n    for (const key of numberKeys) {\n        if (!(key in req) || (<any>req)[key] == null) { continue; }\n        result[key] = getNumber((<any>req)[key], `request.${ key }`);\n    }\n\n    if (req.accessList) {\n        result.accessList = accessListify(req.accessList);\n    }\n\n    if (\"blockTag\" in req) { result.blockTag = req.blockTag; }\n\n    if (\"enableCcipRead\" in req) {\n        result.enableCcipRead = !!req.enableCcipRead\n    }\n\n    if (\"customData\" in req) {\n        result.customData = req.customData;\n    }\n\n    return result;\n}\n\n//////////////////////\n// Block\n\n/**\n *  An Interface to indicate a [[Block]] has been included in the\n *  blockchain. This asserts a Type Guard that necessary properties\n *  are non-null.\n *\n *  Before a block is included, it is a //pending// block.\n */\nexport interface MinedBlock extends Block {\n    /**\n     *  The block number also known as the block height.\n     */\n    readonly number: number;\n\n    /**\n     *  The block hash.\n     */\n    readonly hash: string;\n\n    /**\n     *  The block timestamp, in seconds from epoch.\n     */\n    readonly timestamp: number;\n\n    /**\n     *  The block date, created from the [[timestamp]].\n     */\n    readonly date: Date;\n\n    /**\n     *  The miner of the block, also known as the ``author`` or\n     *  block ``producer``.\n     */\n    readonly miner: string;\n}\n\n/**\n *  A **Block** represents the data associated with a full block on\n *  Ethereum.\n */\nexport class Block implements BlockParams, Iterable<string> {\n\n    /**\n     *  The provider connected to the block used to fetch additional details\n     *  if necessary.\n     */\n    readonly provider!: Provider;\n\n    /**\n     *  The block number, sometimes called the block height. This is a\n     *  sequential number that is one higher than the parent block.\n     */\n    readonly number!: number;\n\n    /**\n     *  The block hash.\n     *\n     *  This hash includes all properties, so can be safely used to identify\n     *  an exact set of block properties.\n     */\n    readonly hash!: null | string;\n\n    /**\n     *  The timestamp for this block, which is the number of seconds since\n     *  epoch that this block was included.\n     */\n    readonly timestamp!: number;\n\n    /**\n     *  The block hash of the parent block.\n     */\n    readonly parentHash!: string;\n\n    /**\n     *  The hash tree root of the parent beacon block for the given\n     *  execution block. See [[link-eip-4788]].\n     */\n    parentBeaconBlockRoot!: null | string;\n\n    /**\n     *  The nonce.\n     *\n     *  On legacy networks, this is the random number inserted which\n     *  permitted the difficulty target to be reached.\n     */\n    readonly nonce!: string;\n\n    /**\n     *  The difficulty target.\n     *\n     *  On legacy networks, this is the proof-of-work target required\n     *  for a block to meet the protocol rules to be included.\n     *\n     *  On modern networks, this is a random number arrived at using\n     *  randao.  @TODO: Find links?\n     */\n    readonly difficulty!: bigint;\n\n\n    /**\n     *  The total gas limit for this block.\n     */\n    readonly gasLimit!: bigint;\n\n    /**\n     *  The total gas used in this block.\n     */\n    readonly gasUsed!: bigint;\n\n\n    /**\n     *  The root hash for the global state after applying changes\n     *  in this block.\n     */\n    readonly stateRoot!: null | string;\n\n    /**\n     *  The hash of the transaction receipts trie.\n     */\n    readonly receiptsRoot!: null | string;\n\n    /**\n     *  The total amount of blob gas consumed by the transactions\n     *  within the block. See [[link-eip-4844]].\n     */\n    readonly blobGasUsed!: null | bigint;\n\n    /**\n     *  The running total of blob gas consumed in excess of the\n     *  target, prior to the block. See [[link-eip-4844]].\n     */\n    readonly excessBlobGas!: null | bigint;\n\n    /**\n     *  The miner coinbase address, wihch receives any subsidies for\n     *  including this block.\n     */\n    readonly miner!: string;\n\n    /**\n     *  Any extra data the validator wished to include.\n     */\n    readonly extraData!: string;\n\n    /**\n     *  The base fee per gas that all transactions in this block were\n     *  charged.\n     *\n     *  This adjusts after each block, depending on how congested the network\n     *  is.\n     */\n    readonly baseFeePerGas!: null | bigint;\n\n    readonly #transactions: Array<string | TransactionResponse>;\n\n    /**\n     *  Create a new **Block** object.\n     *\n     *  This should generally not be necessary as the unless implementing a\n     *  low-level library.\n     */\n    constructor(block: BlockParams, provider: Provider) {\n\n        this.#transactions = block.transactions.map((tx) => {\n            if (typeof(tx) !== \"string\") {\n                return new TransactionResponse(tx, provider);\n            }\n            return tx;\n        });\n\n        defineProperties<Block>(this, {\n            provider,\n\n            hash: getValue(block.hash),\n\n            number: block.number,\n            timestamp: block.timestamp,\n\n            parentHash: block.parentHash,\n            parentBeaconBlockRoot: block.parentBeaconBlockRoot,\n\n            nonce: block.nonce,\n            difficulty: block.difficulty,\n\n            gasLimit: block.gasLimit,\n            gasUsed: block.gasUsed,\n            blobGasUsed: block.blobGasUsed,\n            excessBlobGas: block.excessBlobGas,\n            miner: block.miner,\n            extraData: block.extraData,\n\n            baseFeePerGas: getValue(block.baseFeePerGas),\n\n            stateRoot: block.stateRoot,\n            receiptsRoot: block.receiptsRoot,\n        });\n    }\n\n    /**\n     *  Returns the list of transaction hashes, in the order\n     *  they were executed within the block.\n     */\n    get transactions(): ReadonlyArray<string> {\n        return this.#transactions.map((tx) => {\n            if (typeof(tx) === \"string\") { return tx; }\n            return tx.hash;\n        });\n    }\n\n    /**\n     *  Returns the complete transactions, in the order they\n     *  were executed within the block.\n     *\n     *  This is only available for blocks which prefetched\n     *  transactions, by passing ``true`` to %%prefetchTxs%%\n     *  into [[Provider-getBlock]].\n     */\n    get prefetchedTransactions(): Array<TransactionResponse> {\n        const txs = this.#transactions.slice();\n\n        // Doesn't matter...\n        if (txs.length === 0) { return [ ]; }\n\n        // Make sure we prefetched the transactions\n        assert(typeof(txs[0]) === \"object\", \"transactions were not prefetched with block request\", \"UNSUPPORTED_OPERATION\", {\n            operation: \"transactionResponses()\"\n        });\n\n        return <Array<TransactionResponse>>txs;\n    }\n\n    /**\n     *  Returns a JSON-friendly value.\n     */\n    toJSON(): any {\n        const {\n            baseFeePerGas, difficulty, extraData, gasLimit, gasUsed, hash,\n            miner, nonce, number, parentHash, parentBeaconBlockRoot,\n            stateRoot, receiptsRoot, timestamp, transactions\n        } = this;\n\n        return {\n            _type: \"Block\",\n            baseFeePerGas: toJson(baseFeePerGas),\n            difficulty: toJson(difficulty),\n            extraData,\n            gasLimit: toJson(gasLimit),\n            gasUsed: toJson(gasUsed),\n            blobGasUsed: toJson(this.blobGasUsed),\n            excessBlobGas: toJson(this.excessBlobGas),\n            hash, miner, nonce, number, parentHash, timestamp,\n            parentBeaconBlockRoot, stateRoot, receiptsRoot,\n            transactions,\n        };\n    }\n\n    [Symbol.iterator](): Iterator<string> {\n        let index = 0;\n        const txs = this.transactions;\n        return {\n            next: () => {\n                if (index < this.length) {\n                    return {\n                        value: txs[index++], done: false\n                    }\n                }\n                return { value: undefined, done: true };\n            }\n        };\n    }\n\n    /**\n     *  The number of transactions in this block.\n     */\n    get length(): number { return this.#transactions.length; }\n\n    /**\n     *  The [[link-js-date]] this block was included at.\n     */\n    get date(): null | Date {\n        if (this.timestamp == null) { return null; }\n        return new Date(this.timestamp * 1000);\n    }\n\n    /**\n     *  Get the transaction at %%indexe%% within this block.\n     */\n    async getTransaction(indexOrHash: number | string): Promise<TransactionResponse> {\n        // Find the internal value by its index or hash\n        let tx: string | TransactionResponse | undefined = undefined;\n        if (typeof(indexOrHash) === \"number\") {\n            tx = this.#transactions[indexOrHash];\n\n        } else {\n            const hash = indexOrHash.toLowerCase();\n            for (const v of this.#transactions) {\n                if (typeof(v) === \"string\") {\n                    if (v !== hash) { continue; }\n                    tx = v;\n                    break;\n                } else {\n                    if (v.hash === hash) { continue; }\n                    tx = v;\n                    break;\n                }\n            }\n        }\n        if (tx == null) { throw new Error(\"no such tx\"); }\n\n        if (typeof(tx) === \"string\") {\n            return <TransactionResponse>(await this.provider.getTransaction(tx));\n        } else {\n            return tx;\n        }\n    }\n\n    /**\n     *  If a **Block** was fetched with a request to include the transactions\n     *  this will allow synchronous access to those transactions.\n     *\n     *  If the transactions were not prefetched, this will throw.\n     */\n    getPrefetchedTransaction(indexOrHash: number | string): TransactionResponse {\n        const txs = this.prefetchedTransactions;\n        if (typeof(indexOrHash) === \"number\") {\n            return txs[indexOrHash];\n        }\n\n        indexOrHash = indexOrHash.toLowerCase();\n        for (const tx of txs) {\n            if (tx.hash === indexOrHash) { return tx; }\n        }\n\n        assertArgument(false, \"no matching transaction\", \"indexOrHash\", indexOrHash);\n    }\n\n    /**\n     *  Returns true if this block been mined. This provides a type guard\n     *  for all properties on a [[MinedBlock]].\n     */\n    isMined(): this is MinedBlock { return !!this.hash; }\n\n    /**\n     *  Returns true if this block is an [[link-eip-2930]] block.\n     */\n    isLondon(): this is (Block & { baseFeePerGas: bigint }) {\n        return !!this.baseFeePerGas;\n    }\n\n    /**\n     *  @_ignore:\n     */\n    orphanedEvent(): OrphanFilter {\n        if (!this.isMined()) { throw new Error(\"\"); }\n        return createOrphanedBlockFilter(this);\n    }\n}\n\n//////////////////////\n// Log\n\n/**\n *  A **Log** in Ethereum represents an event that has been included in a\n *  transaction using the ``LOG*`` opcodes, which are most commonly used by\n *  Solidity's emit for announcing events.\n */\nexport class Log implements LogParams {\n\n    /**\n     *  The provider connected to the log used to fetch additional details\n     *  if necessary.\n     */\n    readonly provider: Provider;\n\n    /**\n     *  The transaction hash of the transaction this log occurred in. Use the\n     *  [[Log-getTransaction]] to get the [[TransactionResponse]].\n     */\n    readonly transactionHash!: string;\n\n    /**\n     *  The block hash of the block this log occurred in. Use the\n     *  [[Log-getBlock]] to get the [[Block]].\n     */\n    readonly blockHash!: string;\n\n    /**\n     *  The block number of the block this log occurred in. It is preferred\n     *  to use the [[Block-hash]] when fetching the related [[Block]],\n     *  since in the case of an orphaned block, the block at that height may\n     *  have changed.\n     */\n    readonly blockNumber!: number;\n\n    /**\n     *  If the **Log** represents a block that was removed due to an orphaned\n     *  block, this will be true.\n     *\n     *  This can only happen within an orphan event listener.\n     */\n    readonly removed!: boolean;\n\n    /**\n     *  The address of the contract that emitted this log.\n     */\n    readonly address!: string;\n\n    /**\n     *  The data included in this log when it was emitted.\n     */\n    readonly data!: string;\n\n    /**\n     *  The indexed topics included in this log when it was emitted.\n     *\n     *  All topics are included in the bloom filters, so they can be\n     *  efficiently filtered using the [[Provider-getLogs]] method.\n     */\n    readonly topics!: ReadonlyArray<string>;\n\n    /**\n     *  The index within the block this log occurred at. This is generally\n     *  not useful to developers, but can be used with the various roots\n     *  to proof inclusion within a block.\n     */\n    readonly index!: number;\n\n    /**\n     *  The index within the transaction of this log.\n     */\n    readonly transactionIndex!: number;\n\n    /**\n     *  @_ignore:\n     */\n    constructor(log: LogParams, provider: Provider) {\n        this.provider = provider;\n\n        const topics = Object.freeze(log.topics.slice());\n        defineProperties<Log>(this, {\n            transactionHash: log.transactionHash,\n            blockHash: log.blockHash,\n            blockNumber: log.blockNumber,\n\n            removed: log.removed,\n\n            address: log.address,\n            data: log.data,\n\n            topics,\n\n            index: log.index,\n            transactionIndex: log.transactionIndex,\n        });\n    }\n\n    /**\n     *  Returns a JSON-compatible object.\n     */\n    toJSON(): any {\n        const {\n            address, blockHash, blockNumber, data, index,\n            removed, topics, transactionHash, transactionIndex\n        } = this;\n\n        return {\n            _type: \"log\",\n            address, blockHash, blockNumber, data, index,\n            removed, topics, transactionHash, transactionIndex\n        };\n    }\n\n    /**\n     *  Returns the block that this log occurred in.\n     */\n    async getBlock(): Promise<Block> {\n        const block = await this.provider.getBlock(this.blockHash);\n        assert(!!block, \"failed to find transaction\", \"UNKNOWN_ERROR\", { });\n        return block;\n    }\n\n    /**\n     *  Returns the transaction that this log occurred in.\n     */\n    async getTransaction(): Promise<TransactionResponse> {\n        const tx = await this.provider.getTransaction(this.transactionHash);\n        assert(!!tx, \"failed to find transaction\", \"UNKNOWN_ERROR\", { });\n        return tx;\n    }\n\n    /**\n     *  Returns the transaction receipt fot the transaction that this\n     *  log occurred in.\n     */\n    async getTransactionReceipt(): Promise<TransactionReceipt> {\n        const receipt = await this.provider.getTransactionReceipt(this.transactionHash);\n        assert(!!receipt, \"failed to find transaction receipt\", \"UNKNOWN_ERROR\", { });\n        return receipt;\n    }\n\n    /**\n     *  @_ignore:\n     */\n    removedEvent(): OrphanFilter {\n        return createRemovedLogFilter(this);\n    }\n}\n\n//////////////////////\n// Transaction Receipt\n\n/*\nexport interface LegacyTransactionReceipt {\n    byzantium: false;\n    status: null;\n    root: string;\n}\n\nexport interface ByzantiumTransactionReceipt {\n    byzantium: true;\n    status: number;\n    root: null;\n}\n*/\n\n/**\n *  A **TransactionReceipt** includes additional information about a\n *  transaction that is only available after it has been mined.\n */\nexport class TransactionReceipt implements TransactionReceiptParams, Iterable<Log> {\n    /**\n     *  The provider connected to the log used to fetch additional details\n     *  if necessary.\n     */\n    readonly provider!: Provider;\n\n    /**\n     *  The address the transaction was sent to.\n     */\n    readonly to!: null | string;\n\n    /**\n     *  The sender of the transaction.\n     */\n    readonly from!: string;\n\n    /**\n     *  The address of the contract if the transaction was directly\n     *  responsible for deploying one.\n     *\n     *  This is non-null **only** if the ``to`` is empty and the ``data``\n     *  was successfully executed as initcode.\n     */\n    readonly contractAddress!: null | string;\n\n    /**\n     *  The transaction hash.\n     */\n    readonly hash!: string;\n\n    /**\n     *  The index of this transaction within the block transactions.\n     */\n    readonly index!: number;\n\n    /**\n     *  The block hash of the [[Block]] this transaction was included in.\n     */\n    readonly blockHash!: string;\n\n    /**\n     *  The block number of the [[Block]] this transaction was included in.\n     */\n    readonly blockNumber!: number;\n\n    /**\n     *  The bloom filter bytes that represent all logs that occurred within\n     *  this transaction. This is generally not useful for most developers,\n     *  but can be used to validate the included logs.\n     */\n    readonly logsBloom!: string;\n\n    /**\n     *  The actual amount of gas used by this transaction.\n     *\n     *  When creating a transaction, the amount of gas that will be used can\n     *  only be approximated, but the sender must pay the gas fee for the\n     *  entire gas limit. After the transaction, the difference is refunded.\n     */\n    readonly gasUsed!: bigint;\n\n    /**\n     *  The gas used for BLObs. See [[link-eip-4844]].\n     */\n    readonly blobGasUsed!: null | bigint;\n\n    /**\n     *  The amount of gas used by all transactions within the block for this\n     *  and all transactions with a lower ``index``.\n     *\n     *  This is generally not useful for developers but can be used to\n     *  validate certain aspects of execution.\n     */\n    readonly cumulativeGasUsed!: bigint;\n\n    /**\n     *  The actual gas price used during execution.\n     *\n     *  Due to the complexity of [[link-eip-1559]] this value can only\n     *  be caluclated after the transaction has been mined, snce the base\n     *  fee is protocol-enforced.\n     */\n    readonly gasPrice!: bigint;\n\n    /**\n     *  The price paid per BLOB in gas. See [[link-eip-4844]].\n     */\n    readonly blobGasPrice!: null | bigint;\n\n    /**\n     *  The [[link-eip-2718]] transaction type.\n     */\n    readonly type!: number;\n    //readonly byzantium!: boolean;\n\n    /**\n     *  The status of this transaction, indicating success (i.e. ``1``) or\n     *  a revert (i.e. ``0``).\n     *\n     *  This is available in post-byzantium blocks, but some backends may\n     *  backfill this value.\n     */\n    readonly status!: null | number;\n\n    /**\n     *  The root hash of this transaction.\n     *\n     *  This is no present and was only included in pre-byzantium blocks, but\n     *  could be used to validate certain parts of the receipt.\n     */\n    readonly root!: null | string;\n\n    readonly #logs: ReadonlyArray<Log>;\n\n    /**\n     *  @_ignore:\n     */\n    constructor(tx: TransactionReceiptParams, provider: Provider) {\n        this.#logs = Object.freeze(tx.logs.map((log) => {\n            return new Log(log, provider);\n        }));\n\n        let gasPrice = BN_0;\n        if (tx.effectiveGasPrice != null) {\n            gasPrice = tx.effectiveGasPrice;\n        } else if (tx.gasPrice != null) {\n            gasPrice = tx.gasPrice;\n        }\n\n        defineProperties<TransactionReceipt>(this, {\n            provider,\n\n            to: tx.to,\n            from: tx.from,\n            contractAddress: tx.contractAddress,\n\n            hash: tx.hash,\n            index: tx.index,\n\n            blockHash: tx.blockHash,\n            blockNumber: tx.blockNumber,\n\n            logsBloom: tx.logsBloom,\n\n            gasUsed: tx.gasUsed,\n            cumulativeGasUsed: tx.cumulativeGasUsed,\n            blobGasUsed: tx.blobGasUsed,\n            gasPrice,\n            blobGasPrice: tx.blobGasPrice,\n\n            type: tx.type,\n            //byzantium: tx.byzantium,\n            status: tx.status,\n            root: tx.root\n        });\n    }\n\n    /**\n     *  The logs for this transaction.\n     */\n    get logs(): ReadonlyArray<Log> { return this.#logs; }\n\n    /**\n     *  Returns a JSON-compatible representation.\n     */\n    toJSON(): any {\n        const {\n            to, from, contractAddress, hash, index,\n            blockHash, blockNumber, logsBloom,\n            logs, //byzantium, \n            status, root\n        } = this;\n\n        return {\n            _type: \"TransactionReceipt\",\n            blockHash, blockNumber,\n            //byzantium, \n            contractAddress,\n            cumulativeGasUsed: toJson(this.cumulativeGasUsed),\n            from,\n            gasPrice: toJson(this.gasPrice),\n            blobGasUsed: toJson(this.blobGasUsed),\n            blobGasPrice: toJson(this.blobGasPrice),\n            gasUsed: toJson(this.gasUsed),\n            hash, index, logs, logsBloom, root, status, to\n        };\n    }\n\n    /**\n     *  @_ignore:\n     */\n    get length(): number { return this.logs.length; }\n\n    [Symbol.iterator](): Iterator<Log> {\n        let index = 0;\n        return {\n            next: () => {\n                if (index < this.length) {\n                    return { value: this.logs[index++], done: false }\n                }\n                return { value: undefined, done: true };\n            }\n        };\n    }\n\n    /**\n     *  The total fee for this transaction, in wei.\n     */\n    get fee(): bigint {\n        return this.gasUsed * this.gasPrice;\n    }\n\n    /**\n     *  Resolves to the block this transaction occurred in.\n     */\n    async getBlock(): Promise<Block> {\n        const block = await this.provider.getBlock(this.blockHash);\n        if (block == null) { throw new Error(\"TODO\"); }\n        return block;\n    }\n\n    /**\n     *  Resolves to the transaction this transaction occurred in.\n     */\n    async getTransaction(): Promise<TransactionResponse> {\n        const tx = await this.provider.getTransaction(this.hash);\n        if (tx == null) { throw new Error(\"TODO\"); }\n        return tx;\n    }\n\n    /**\n     *  Resolves to the return value of the execution of this transaction.\n     *\n     *  Support for this feature is limited, as it requires an archive node\n     *  with the ``debug_`` or ``trace_`` API enabled.\n     */\n    async getResult(): Promise<string> {\n        return <string>(await this.provider.getTransactionResult(this.hash));\n    }\n\n    /**\n     *  Resolves to the number of confirmations this transaction has.\n     */\n    async confirmations(): Promise<number> {\n        return (await this.provider.getBlockNumber()) - this.blockNumber + 1;\n    }\n\n    /**\n     *  @_ignore:\n     */\n    removedEvent(): OrphanFilter {\n        return createRemovedTransactionFilter(this);\n    }\n\n    /**\n     *  @_ignore:\n     */\n    reorderedEvent(other?: TransactionResponse): OrphanFilter {\n        assert(!other || other.isMined(), \"unmined 'other' transction cannot be orphaned\",\n            \"UNSUPPORTED_OPERATION\", { operation: \"reorderedEvent(other)\" });\n        return createReorderedTransactionFilter(this, other);\n    }\n}\n\n\n//////////////////////\n// Transaction Response\n\n/**\n *  A **MinedTransactionResponse** is an interface representing a\n *  transaction which has been mined and allows for a type guard for its\n *  property values being defined.\n */\nexport interface MinedTransactionResponse extends TransactionResponse {\n    /**\n     *  The block number this transaction occurred in.\n     */\n    blockNumber: number;\n\n    /**\n     *  The block hash this transaction occurred in.\n     */\n    blockHash: string;\n\n    /**\n     *  The date this transaction occurred on.\n     */\n    date: Date;\n}\n\n\n/**\n *  A **TransactionResponse** includes all properties about a transaction\n *  that was sent to the network, which may or may not be included in a\n *  block.\n *\n *  The [[TransactionResponse-isMined]] can be used to check if the\n *  transaction has been mined as well as type guard that the otherwise\n *  possibly ``null`` properties are defined.\n */\nexport class TransactionResponse implements TransactionLike<string>, TransactionResponseParams {\n    /**\n     *  The provider this is connected to, which will influence how its\n     *  methods will resolve its async inspection methods.\n     */\n    readonly provider: Provider;\n\n    /**\n     *  The block number of the block that this transaction was included in.\n     *\n     *  This is ``null`` for pending transactions.\n     */\n    readonly blockNumber: null | number;\n\n    /**\n     *  The blockHash of the block that this transaction was included in.\n     *\n     *  This is ``null`` for pending transactions.\n     */\n    readonly blockHash: null | string;\n\n    /**\n     *  The index within the block that this transaction resides at.\n     */\n    readonly index!: number;\n\n    /**\n     *  The transaction hash.\n     */\n    readonly hash!: string;\n\n    /**\n     *  The [[link-eip-2718]] transaction envelope type. This is\n     *  ``0`` for legacy transactions types.\n     */\n    readonly type!: number;\n\n    /**\n     *  The receiver of this transaction.\n     *\n     *  If ``null``, then the transaction is an initcode transaction.\n     *  This means the result of executing the [[data]] will be deployed\n     *  as a new contract on chain (assuming it does not revert) and the\n     *  address may be computed using [[getCreateAddress]].\n     */\n    readonly to!: null | string;\n\n    /**\n     *  The sender of this transaction. It is implicitly computed\n     *  from the transaction pre-image hash (as the digest) and the\n     *  [[signature]] using ecrecover.\n     */\n    readonly from!: string;\n\n    /**\n     *  The nonce, which is used to prevent replay attacks and offer\n     *  a method to ensure transactions from a given sender are explicitly\n     *  ordered.\n     *\n     *  When sending a transaction, this must be equal to the number of\n     *  transactions ever sent by [[from]].\n     */\n    readonly nonce!: number;\n\n    /**\n     *  The maximum units of gas this transaction can consume. If execution\n     *  exceeds this, the entries transaction is reverted and the sender\n     *  is charged for the full amount, despite not state changes being made.\n     */\n    readonly gasLimit!: bigint;\n\n    /**\n     *  The gas price can have various values, depending on the network.\n     *\n     *  In modern networks, for transactions that are included this is\n     *  the //effective gas price// (the fee per gas that was actually\n     *  charged), while for transactions that have not been included yet\n     *  is the [[maxFeePerGas]].\n     *\n     *  For legacy transactions, or transactions on legacy networks, this\n     *  is the fee that will be charged per unit of gas the transaction\n     *  consumes.\n     */\n    readonly gasPrice!: bigint;\n\n    /**\n     *  The maximum priority fee (per unit of gas) to allow a\n     *  validator to charge the sender. This is inclusive of the\n     *  [[maxFeeFeePerGas]].\n     */\n    readonly maxPriorityFeePerGas!: null | bigint;\n\n    /**\n     *  The maximum fee (per unit of gas) to allow this transaction\n     *  to charge the sender.\n     */\n    readonly maxFeePerGas!: null | bigint;\n\n    /**\n     *  The [[link-eip-4844]] max fee per BLOb gas.\n     */\n    readonly maxFeePerBlobGas!: null | bigint;\n\n    /**\n     *  The data.\n     */\n    readonly data!: string;\n\n    /**\n     *  The value, in wei. Use [[formatEther]] to format this value\n     *  as ether.\n     */\n    readonly value!: bigint;\n\n    /**\n     *  The chain ID.\n     */\n    readonly chainId!: bigint;\n\n    /**\n     *  The signature.\n     */\n    readonly signature!: Signature;\n\n    /**\n     *  The [[link-eip-2930]] access list for transaction types that\n     *  support it, otherwise ``null``.\n     */\n    readonly accessList!: null | AccessList;\n\n    /**\n     *  The [[link-eip-4844]] BLOb versioned hashes.\n     */\n    readonly blobVersionedHashes!: null | Array<string>;\n\n    #startBlock: number;\n\n    /**\n     *  @_ignore:\n     */\n    constructor(tx: TransactionResponseParams, provider: Provider) {\n        this.provider = provider;\n\n        this.blockNumber = (tx.blockNumber != null) ? tx.blockNumber: null;\n        this.blockHash = (tx.blockHash != null) ? tx.blockHash: null;\n\n        this.hash = tx.hash;\n        this.index = tx.index;\n\n        this.type = tx.type;\n\n        this.from = tx.from;\n        this.to = tx.to || null;\n\n        this.gasLimit = tx.gasLimit;\n        this.nonce = tx.nonce;\n        this.data = tx.data;\n        this.value = tx.value;\n\n        this.gasPrice = tx.gasPrice;\n        this.maxPriorityFeePerGas = (tx.maxPriorityFeePerGas != null) ? tx.maxPriorityFeePerGas: null;\n        this.maxFeePerGas = (tx.maxFeePerGas != null) ? tx.maxFeePerGas: null;\n        this.maxFeePerBlobGas = (tx.maxFeePerBlobGas != null) ? tx.maxFeePerBlobGas: null;\n\n        this.chainId = tx.chainId;\n        this.signature = tx.signature;\n\n        this.accessList = (tx.accessList != null) ? tx.accessList: null;\n        this.blobVersionedHashes = (tx.blobVersionedHashes != null) ? tx.blobVersionedHashes: null;\n\n        this.#startBlock = -1;\n    }\n\n    /**\n     *  Returns a JSON-compatible representation of this transaction.\n     */\n    toJSON(): any {\n        const {\n            blockNumber, blockHash, index, hash, type, to, from, nonce,\n            data, signature, accessList, blobVersionedHashes\n        } = this;\n\n        return {\n            _type: \"TransactionResponse\",\n            accessList, blockNumber, blockHash,\n            blobVersionedHashes,\n            chainId: toJson(this.chainId),\n            data, from,\n            gasLimit: toJson(this.gasLimit),\n            gasPrice: toJson(this.gasPrice),\n            hash,\n            maxFeePerGas: toJson(this.maxFeePerGas),\n            maxPriorityFeePerGas: toJson(this.maxPriorityFeePerGas),\n            maxFeePerBlobGas: toJson(this.maxFeePerBlobGas),\n            nonce, signature, to, index, type,\n            value: toJson(this.value),\n        };\n    }\n\n    /**\n     *  Resolves to the Block that this transaction was included in.\n     *\n     *  This will return null if the transaction has not been included yet.\n     */\n    async getBlock(): Promise<null | Block> {\n        let blockNumber = this.blockNumber;\n        if (blockNumber == null) {\n            const tx = await this.getTransaction();\n            if (tx) { blockNumber = tx.blockNumber; }\n        }\n        if (blockNumber == null) { return null; }\n        const block = this.provider.getBlock(blockNumber);\n        if (block == null) { throw new Error(\"TODO\"); }\n        return block;\n    }\n\n    /**\n     *  Resolves to this transaction being re-requested from the\n     *  provider. This can be used if you have an unmined transaction\n     *  and wish to get an up-to-date populated instance.\n     */\n    async getTransaction(): Promise<null | TransactionResponse> {\n        return this.provider.getTransaction(this.hash);\n    }\n\n    /**\n     *  Resolve to the number of confirmations this transaction has.\n     */\n    async confirmations(): Promise<number> {\n        if (this.blockNumber == null) {\n            const { tx, blockNumber } = await resolveProperties({\n                tx: this.getTransaction(),\n                blockNumber: this.provider.getBlockNumber()\n            });\n\n            // Not mined yet...\n            if (tx == null || tx.blockNumber == null) { return 0; }\n\n            return blockNumber - tx.blockNumber + 1;\n        }\n\n        const blockNumber = await this.provider.getBlockNumber();\n        return blockNumber - this.blockNumber + 1;\n    }\n\n    /**\n     *  Resolves once this transaction has been mined and has\n     *  %%confirms%% blocks including it (default: ``1``) with an\n     *  optional %%timeout%%.\n     *\n     *  This can resolve to ``null`` only if %%confirms%% is ``0``\n     *  and the transaction has not been mined, otherwise this will\n     *  wait until enough confirmations have completed.\n     */\n    async wait(_confirms?: number, _timeout?: number): Promise<null | TransactionReceipt> {\n        const confirms = (_confirms == null) ? 1: _confirms;\n        const timeout = (_timeout == null) ? 0: _timeout;\n\n        let startBlock = this.#startBlock\n        let nextScan = -1;\n        let stopScanning = (startBlock === -1) ? true: false;\n        const checkReplacement = async () => {\n            // Get the current transaction count for this sender\n            if (stopScanning) { return null; }\n            const { blockNumber, nonce } = await resolveProperties({\n                blockNumber: this.provider.getBlockNumber(),\n                nonce: this.provider.getTransactionCount(this.from)\n            });\n\n            // No transaction or our nonce has not been mined yet; but we\n            // can start scanning later when we do start\n            if (nonce < this.nonce) {\n                startBlock = blockNumber;\n                return;\n            }\n\n            // We were mined; no replacement\n            if (stopScanning) { return null; }\n            const mined = await this.getTransaction();\n            if (mined && mined.blockNumber != null) { return; }\n\n            // We were replaced; start scanning for that transaction\n\n            // Starting to scan; look back a few extra blocks for safety\n            if (nextScan === -1) {\n                nextScan = startBlock - 3;\n                if (nextScan < this.#startBlock) { nextScan = this.#startBlock; }\n            }\n\n            while (nextScan <= blockNumber) {\n                // Get the next block to scan\n                if (stopScanning) { return null; }\n                const block = await this.provider.getBlock(nextScan, true);\n\n                // This should not happen; but we'll try again shortly\n                if (block == null) { return; }\n\n                // We were mined; no replacement\n                for (const hash of block) {\n                    if (hash === this.hash) { return; }\n                }\n\n                // Search for the transaction that replaced us\n                for (let i = 0; i < block.length; i++) {\n                    const tx: TransactionResponse = await block.getTransaction(i);\n\n                    if (tx.from === this.from && tx.nonce === this.nonce) {\n                        // Get the receipt\n                        if (stopScanning) { return null; }\n                        const receipt = await this.provider.getTransactionReceipt(tx.hash);\n\n                        // This should not happen; but we'll try again shortly\n                        if (receipt == null) { return; }\n\n                        // We will retry this on the next block (this case could be optimized)\n                        if ((blockNumber - receipt.blockNumber + 1) < confirms) { return; }\n\n                        // The reason we were replaced\n                        let reason: \"replaced\" | \"repriced\" | \"cancelled\" = \"replaced\";\n                        if (tx.data === this.data && tx.to === this.to && tx.value === this.value) {\n                            reason = \"repriced\";\n                        } else  if (tx.data === \"0x\" && tx.from === tx.to && tx.value === BN_0) {\n                            reason = \"cancelled\"\n                        }\n\n                        assert(false, \"transaction was replaced\", \"TRANSACTION_REPLACED\", {\n                            cancelled: (reason === \"replaced\" || reason === \"cancelled\"),\n                            reason,\n                            replacement: tx.replaceableTransaction(startBlock),\n                            hash: tx.hash,\n                            receipt\n                        });\n                    }\n                }\n\n                nextScan++;\n            }\n            return;\n        };\n\n        const checkReceipt = (receipt: null | TransactionReceipt) => {\n            if (receipt == null || receipt.status !== 0) { return receipt; }\n            assert(false, \"transaction execution reverted\", \"CALL_EXCEPTION\", {\n                action: \"sendTransaction\",\n                data: null, reason: null, invocation: null, revert: null,\n                transaction: {\n                    to: receipt.to,\n                    from: receipt.from,\n                    data: \"\" // @TODO: in v7, split out sendTransaction properties\n                }, receipt\n            });\n        };\n\n        const receipt = await this.provider.getTransactionReceipt(this.hash);\n\n        if (confirms === 0) { return checkReceipt(receipt); }\n\n        if (receipt) {\n            if ((await receipt.confirmations()) >= confirms) {\n                return checkReceipt(receipt);\n            }\n\n        } else {\n            // Check for a replacement; throws if a replacement was found\n            await checkReplacement();\n\n            // Allow null only when the confirms is 0\n            if (confirms === 0) { return null; }\n        }\n\n        const waiter = new Promise((resolve, reject) => {\n            // List of things to cancel when we have a result (one way or the other)\n            const cancellers: Array<() => void> = [ ];\n            const cancel = () => { cancellers.forEach((c) => c()); };\n\n            // On cancel, stop scanning for replacements\n            cancellers.push(() => { stopScanning = true; });\n\n            // Set up any timeout requested\n            if (timeout > 0) {\n                const timer = setTimeout(() => {\n                    cancel();\n                    reject(makeError(\"wait for transaction timeout\", \"TIMEOUT\"));\n                }, timeout);\n                cancellers.push(() => { clearTimeout(timer); });\n            }\n\n            const txListener = async (receipt: TransactionReceipt) => {\n                // Done; return it!\n                if ((await receipt.confirmations()) >= confirms) {\n                    cancel();\n                    try {\n                        resolve(checkReceipt(receipt));\n                    } catch (error) { reject(error); }\n                }\n            };\n            cancellers.push(() => { this.provider.off(this.hash, txListener); });\n            this.provider.on(this.hash, txListener);\n            // We support replacement detection; start checking\n            if (startBlock >= 0) {\n                const replaceListener = async () => {\n                    try {\n                        // Check for a replacement; this throws only if one is found\n                        await checkReplacement();\n\n                    } catch (error) {\n                        // We were replaced (with enough confirms); re-throw the error\n                        if (isError(error, \"TRANSACTION_REPLACED\")) {\n                            cancel();\n                            reject(error);\n                            return;\n                        }\n                    }\n\n                    // Rescheudle a check on the next block\n                    if (!stopScanning) {\n                        this.provider.once(\"block\", replaceListener);\n                    }\n                };\n                cancellers.push(() => { this.provider.off(\"block\", replaceListener); });\n                this.provider.once(\"block\", replaceListener);\n            }\n        });\n\n        return await <Promise<TransactionReceipt>>waiter;\n    }\n\n    /**\n     *  Returns ``true`` if this transaction has been included.\n     *\n     *  This is effective only as of the time the TransactionResponse\n     *  was instantiated. To get up-to-date information, use\n     *  [[getTransaction]].\n     *\n     *  This provides a Type Guard that this transaction will have\n     *  non-null property values for properties that are null for\n     *  unmined transactions.\n     */\n    isMined(): this is MinedTransactionResponse {\n        return (this.blockHash != null);\n    }\n\n    /**\n     *  Returns true if the transaction is a legacy (i.e. ``type == 0``)\n     *  transaction.\n     *\n     *  This provides a Type Guard that this transaction will have\n     *  the ``null``-ness for hardfork-specific properties set correctly.\n     */\n    isLegacy(): this is (TransactionResponse & { accessList: null, maxFeePerGas: null, maxPriorityFeePerGas: null }) {\n        return (this.type === 0)\n    }\n\n    /**\n     *  Returns true if the transaction is a Berlin (i.e. ``type == 1``)\n     *  transaction. See [[link-eip-2070]].\n     *\n     *  This provides a Type Guard that this transaction will have\n     *  the ``null``-ness for hardfork-specific properties set correctly.\n     */\n    isBerlin(): this is (TransactionResponse & { accessList: AccessList, maxFeePerGas: null, maxPriorityFeePerGas: null }) {\n        return (this.type === 1);\n    }\n\n    /**\n     *  Returns true if the transaction is a London (i.e. ``type == 2``)\n     *  transaction. See [[link-eip-1559]].\n     *\n     *  This provides a Type Guard that this transaction will have\n     *  the ``null``-ness for hardfork-specific properties set correctly.\n     */\n    isLondon(): this is (TransactionResponse & { accessList: AccessList, maxFeePerGas: bigint, maxPriorityFeePerGas: bigint }){\n        return (this.type === 2);\n    }\n\n    /**\n     *  Returns true if hte transaction is a Cancun (i.e. ``type == 3``)\n     *  transaction. See [[link-eip-4844]].\n     */\n    isCancun(): this is (TransactionResponse & { accessList: AccessList, maxFeePerGas: bigint, maxPriorityFeePerGas: bigint, maxFeePerBlobGas: bigint, blobVersionedHashes: Array<string> }){\n        return (this.type === 3);\n    }\n\n    /**\n     *  Returns a filter which can be used to listen for orphan events\n     *  that evict this transaction.\n     */\n    removedEvent(): OrphanFilter {\n        assert(this.isMined(), \"unmined transaction canot be orphaned\",\n            \"UNSUPPORTED_OPERATION\", { operation: \"removeEvent()\" });\n        return createRemovedTransactionFilter(this);\n    }\n\n    /**\n     *  Returns a filter which can be used to listen for orphan events\n     *  that re-order this event against %%other%%.\n     */\n    reorderedEvent(other?: TransactionResponse): OrphanFilter {\n        assert(this.isMined(), \"unmined transaction canot be orphaned\",\n            \"UNSUPPORTED_OPERATION\", { operation: \"removeEvent()\" });\n\n        assert(!other || other.isMined(), \"unmined 'other' transaction canot be orphaned\",\n            \"UNSUPPORTED_OPERATION\", { operation: \"removeEvent()\" });\n\n        return createReorderedTransactionFilter(this, other);\n    }\n\n    /**\n     *  Returns a new TransactionResponse instance which has the ability to\n     *  detect (and throw an error) if the transaction is replaced, which\n     *  will begin scanning at %%startBlock%%.\n     *\n     *  This should generally not be used by developers and is intended\n     *  primarily for internal use. Setting an incorrect %%startBlock%% can\n     *  have devastating performance consequences if used incorrectly.\n     */\n    replaceableTransaction(startBlock: number): TransactionResponse {\n        assertArgument(Number.isInteger(startBlock) && startBlock >= 0, \"invalid startBlock\", \"startBlock\", startBlock);\n        const tx = new TransactionResponse(this, this.provider);\n        tx.#startBlock = startBlock;\n        return tx;\n    }\n}\n\n\n//////////////////////\n// OrphanFilter\n\n/**\n *  An Orphan Filter allows detecting when an orphan block has\n *  resulted in dropping a block or transaction or has resulted\n *  in transactions changing order.\n *\n *  Not currently fully supported.\n */\nexport type OrphanFilter = {\n    orphan: \"drop-block\",\n    hash: string,\n    number: number\n} | {\n    orphan: \"drop-transaction\",\n    tx: { hash: string, blockHash: string, blockNumber: number },\n    other?: { hash: string, blockHash: string, blockNumber: number }\n} | {\n    orphan: \"reorder-transaction\",\n    tx: { hash: string, blockHash: string, blockNumber: number },\n    other?: { hash: string, blockHash: string, blockNumber: number }\n} | {\n    orphan: \"drop-log\",\n    log: {\n        transactionHash: string,\n        blockHash: string,\n        blockNumber: number,\n        address: string,\n        data: string,\n        topics: ReadonlyArray<string>,\n        index: number\n    }\n};\n\nfunction createOrphanedBlockFilter(block: { hash: string, number: number }): OrphanFilter {\n    return { orphan: \"drop-block\", hash: block.hash, number: block.number };\n}\n\nfunction createReorderedTransactionFilter(tx: { hash: string, blockHash: string, blockNumber: number }, other?: { hash: string, blockHash: string, blockNumber: number }): OrphanFilter {\n    return { orphan: \"reorder-transaction\", tx, other };\n}\n\nfunction createRemovedTransactionFilter(tx: { hash: string, blockHash: string, blockNumber: number }): OrphanFilter {\n    return { orphan: \"drop-transaction\", tx };\n}\n\nfunction createRemovedLogFilter(log: { blockHash: string, transactionHash: string, blockNumber: number, address: string, data: string, topics: ReadonlyArray<string>, index: number }): OrphanFilter {\n    return { orphan: \"drop-log\", log: {\n        transactionHash: log.transactionHash,\n        blockHash: log.blockHash,\n        blockNumber: log.blockNumber,\n        address: log.address,\n        data: log.data,\n        topics: Object.freeze(log.topics.slice()),\n        index: log.index\n    } };\n}\n\n//////////////////////\n// EventFilter\n\n/**\n *  A **TopicFilter** provides a struture to define bloom-filter\n *  queries.\n *\n *  Each field that is ``null`` matches **any** value, a field that is\n *  a ``string`` must match exactly that value and and ``array`` is\n *  effectively an ``OR``-ed set, where any one of those values must\n *  match.\n */\nexport type TopicFilter = Array<null | string | Array<string>>;\n\n// @TODO:\n//export type DeferableTopicFilter = Array<null | string | Promise<string> | Array<string | Promise<string>>>;\n\n/**\n *  An **EventFilter** allows efficiently filtering logs (also known as\n *  events) using bloom filters included within blocks.\n */\nexport interface EventFilter {\n    address?: AddressLike | Array<AddressLike>;\n    topics?: TopicFilter;\n}\n\n/**\n *  A **Filter** allows searching a specific range of blocks for mathcing\n *  logs.\n */\nexport interface Filter extends EventFilter {\n\n    /**\n     *  The start block for the filter (inclusive).\n     */\n    fromBlock?: BlockTag;\n\n    /**\n     *  The end block for the filter (inclusive).\n     */\n    toBlock?: BlockTag;\n}\n\n/**\n *  A **FilterByBlockHash** allows searching a specific block for mathcing\n *  logs.\n */\nexport interface FilterByBlockHash extends EventFilter {\n    /**\n     *  The blockhash of the specific block for the filter.\n     */\n    blockHash?: string;\n}\n\n\n//////////////////////\n// ProviderEvent\n\n/**\n *  A **ProviderEvent** provides the types of events that can be subscribed\n *  to on a [[Provider]].\n *\n *  Each provider may include additional possible events it supports, but\n *  the most commonly supported are:\n *\n *  **``\"block\"``** - calls the listener with the current block number on each\n *  new block.\n *\n *  **``\"error\"``** - calls the listener on each async error that occurs during\n *  the event loop, with the error.\n *\n *  **``\"debug\"``** - calls the listener on debug events, which can be used to\n *  troubleshoot network errors, provider problems, etc.\n *\n *  **``transaction hash``** - calls the listener on each block after the\n *  transaction has been mined; generally ``.once`` is more appropriate for\n *  this event.\n *\n *  **``Array``** - calls the listener on each log that matches the filter.\n *\n *  [[EventFilter]] - calls the listener with each matching log\n */\nexport type ProviderEvent = string | Array<string | Array<string>> | EventFilter | OrphanFilter;\n\n\n//////////////////////\n// Provider\n\n/**\n *  A **Provider** is the primary method to interact with the read-only\n *  content on Ethereum.\n *\n *  It allows access to details about accounts, blocks and transactions\n *  and the ability to query event logs and simulate contract execution.\n *\n *  Account data includes the [balance](getBalance),\n *  [transaction count](getTransactionCount), [code](getCode) and\n *  [state trie storage](getStorage).\n *\n *  Simulating execution can be used to [call](call),\n *  [estimate gas](estimateGas) and\n *  [get transaction results](getTransactionResult).\n *\n *  The [[broadcastTransaction]] is the only method which allows updating\n *  the blockchain, but it is usually accessed by a [[Signer]], since a\n *  private key must be used to sign the transaction before it can be\n *  broadcast.\n */\nexport interface Provider extends ContractRunner, EventEmitterable<ProviderEvent>, NameResolver {\n\n    /**\n     *  The provider iteself.\n     *\n     *  This is part of the necessary API for executing a contract, as\n     *  it provides a common property on any [[ContractRunner]] that\n     *  can be used to access the read-only portion of the runner.\n     */\n    provider: this;\n\n    /**\n     *  Shutdown any resources this provider is using. No additional\n     *  calls should be made to this provider after calling this.\n     */\n    destroy(): void;\n\n    ////////////////////\n    // State\n\n    /**\n     *  Get the current block number.\n     */\n    getBlockNumber(): Promise<number>;\n\n    /**\n     *  Get the connected [[Network]].\n     */\n    getNetwork(): Promise<Network>;\n\n    /**\n     *  Get the best guess at the recommended [[FeeData]].\n     */\n    getFeeData(): Promise<FeeData>;\n\n\n    ////////////////////\n    // Account\n\n    /**\n     *  Get the account balance (in wei) of %%address%%. If %%blockTag%%\n     *  is specified and the node supports archive access for that\n     *  %%blockTag%%, the balance is as of that [[BlockTag]].\n     *\n     *  @note On nodes without archive access enabled, the %%blockTag%% may be\n     *        **silently ignored** by the node, which may cause issues if relied on.\n     */\n    getBalance(address: AddressLike, blockTag?: BlockTag): Promise<bigint>;\n\n    /**\n     *  Get the number of transactions ever sent for %%address%%, which\n     *  is used as the ``nonce`` when sending a transaction. If\n     *  %%blockTag%% is specified and the node supports archive access\n     *  for that %%blockTag%%, the transaction count is as of that\n     *  [[BlockTag]].\n     *\n     *  @note On nodes without archive access enabled, the %%blockTag%% may be\n     *        **silently ignored** by the node, which may cause issues if relied on.\n     */\n    getTransactionCount(address: AddressLike, blockTag?: BlockTag): Promise<number>;\n\n    /**\n     *  Get the bytecode for %%address%%.\n     *\n     *  @note On nodes without archive access enabled, the %%blockTag%% may be\n     *        **silently ignored** by the node, which may cause issues if relied on.\n     */\n    getCode(address: AddressLike, blockTag?: BlockTag): Promise<string>\n\n    /**\n     *  Get the storage slot value for %%address%% at slot %%position%%.\n     *\n     *  @note On nodes without archive access enabled, the %%blockTag%% may be\n     *        **silently ignored** by the node, which may cause issues if relied on.\n     */\n    getStorage(address: AddressLike, position: BigNumberish, blockTag?: BlockTag): Promise<string>\n\n\n    ////////////////////\n    // Execution\n\n    /**\n     *  Estimates the amount of gas required to executre %%tx%%.\n     */\n    estimateGas(tx: TransactionRequest): Promise<bigint>;\n\n    /**\n     *  Simulate the execution of %%tx%%. If the call reverts, it will\n     *  throw a [[CallExceptionError]] which includes the revert data.\n     */\n    call(tx: TransactionRequest): Promise<string>\n\n    /**\n     *  Broadcasts the %%signedTx%% to the network, adding it to the\n     *  memory pool of any node for which the transaction meets the\n     *  rebroadcast requirements.\n     */\n    broadcastTransaction(signedTx: string): Promise<TransactionResponse>;\n\n\n    ////////////////////\n    // Queries\n\n    /**\n     *  Resolves to the block for %%blockHashOrBlockTag%%.\n     *\n     *  If %%prefetchTxs%%, and the backend supports including transactions\n     *  with block requests, all transactions will be included and the\n     *  [[Block]] object will not need to make remote calls for getting\n     *  transactions.\n     */\n    getBlock(blockHashOrBlockTag: BlockTag | string, prefetchTxs?: boolean): Promise<null | Block>;\n\n    /**\n     *  Resolves to the transaction for %%hash%%.\n     *\n     *  If the transaction is unknown or on pruning nodes which\n     *  discard old transactions this resolves to ``null``.\n     */\n    getTransaction(hash: string): Promise<null | TransactionResponse>;\n\n    /**\n     *  Resolves to the transaction receipt for %%hash%%, if mined.\n     *\n     *  If the transaction has not been mined, is unknown or on\n     *  pruning nodes which discard old transactions this resolves to\n     *  ``null``.\n     */\n    getTransactionReceipt(hash: string): Promise<null | TransactionReceipt>;\n\n    /**\n     *  Resolves to the result returned by the executions of %%hash%%.\n     *\n     *  This is only supported on nodes with archive access and with\n     *  the necessary debug APIs enabled.\n     */\n    getTransactionResult(hash: string): Promise<null | string>;\n\n\n    ////////////////////\n    // Bloom-filter Queries\n\n    /**\n     *  Resolves to the list of Logs that match %%filter%%\n     */\n    getLogs(filter: Filter | FilterByBlockHash): Promise<Array<Log>>;\n\n\n    ////////////////////\n    // ENS\n\n    /**\n     *  Resolves to the address configured for the %%ensName%% or\n     *  ``null`` if unconfigured.\n     */\n    resolveName(ensName: string): Promise<null | string>;\n\n    /**\n     *  Resolves to the ENS name associated for the %%address%% or\n     *  ``null`` if the //primary name// is not configured.\n     *\n     *  Users must perform additional steps to configure a //primary name//,\n     *  which is not currently common.\n     */\n    lookupAddress(address: string): Promise<null | string>;\n\n    /**\n     *  Waits until the transaction %%hash%% is mined and has %%confirms%%\n     *  confirmations.\n     */\n    waitForTransaction(hash: string, confirms?: number, timeout?: number): Promise<null | TransactionReceipt>;\n\n    /**\n     *  Resolves to the block at %%blockTag%% once it has been mined.\n     *\n     *  This can be useful for waiting some number of blocks by using\n     *  the ``currentBlockNumber + N``.\n     */\n    waitForBlock(blockTag?: BlockTag): Promise<Block>;\n}\n", "// import from provider.ts instead of index.ts to prevent circular dep\n// from EtherscanProvider\nimport {\n    Block, Log, TransactionReceipt, TransactionResponse\n} from \"../providers/provider.js\";\nimport { defineProperties, EventPayload } from \"../utils/index.js\";\n\nimport type { EventFragment, Interface, Result } from \"../abi/index.js\";\nimport type { Listener } from \"../utils/index.js\";\nimport type {\n    Provider\n} from \"../providers/index.js\";\n\nimport type { BaseContract } from \"./contract.js\";\nimport type { ContractEventName } from \"./types.js\";\n\n/**\n *  An **EventLog** contains additional properties parsed from the [[Log]].\n */\nexport class EventLog extends Log {\n    /**\n     *  The Contract Interface.\n     */\n    readonly interface!: Interface;\n\n    /**\n     *  The matching event.\n     */\n    readonly fragment!: EventFragment;\n\n    /**\n     *  The parsed arguments passed to the event by ``emit``.\n     */\n    readonly args!: Result;\n\n    /**\n     * @_ignore:\n     */\n    constructor(log: Log, iface: Interface, fragment: EventFragment) {\n        super(log, log.provider);\n        const args = iface.decodeEventLog(fragment, log.data, log.topics);\n        defineProperties<EventLog>(this, { args, fragment, interface: iface });\n    }\n\n    /**\n     *  The name of the event.\n     */\n    get eventName(): string { return this.fragment.name; }\n\n    /**\n     *  The signature of the event.\n     */\n    get eventSignature(): string { return this.fragment.format(); }\n}\n\n/**\n *  An **EventLog** contains additional properties parsed from the [[Log]].\n */\nexport class UndecodedEventLog extends Log {\n\n    /**\n     *  The error encounted when trying to decode the log.\n     */\n    readonly error!: Error;\n\n    /**\n     * @_ignore:\n     */\n    constructor(log: Log, error: Error) {\n        super(log, log.provider);\n        defineProperties<UndecodedEventLog>(this, { error });\n    }\n}\n\n/**\n *  A **ContractTransactionReceipt** includes the parsed logs from a\n *  [[TransactionReceipt]].\n */\nexport class ContractTransactionReceipt extends TransactionReceipt {\n    readonly #iface: Interface;\n\n    /**\n     *  @_ignore:\n     */\n    constructor(iface: Interface, provider: Provider, tx: TransactionReceipt) {\n        super(tx, provider);\n        this.#iface = iface;\n    }\n\n    /**\n     *  The parsed logs for any [[Log]] which has a matching event in the\n     *  Contract ABI.\n     */\n    get logs(): Array<EventLog | Log> {\n        return super.logs.map((log) => {\n            const fragment = log.topics.length ? this.#iface.getEvent(log.topics[0]): null;\n            if (fragment) {\n                try {\n                    return new EventLog(log, this.#iface, fragment)\n                } catch (error: any) {\n                    return new UndecodedEventLog(log, error);\n                }\n            }\n\n            return log;\n        });\n    }\n\n}\n\n/**\n *  A **ContractTransactionResponse** will return a\n *  [[ContractTransactionReceipt]] when waited on.\n */\nexport class ContractTransactionResponse extends TransactionResponse {\n    readonly #iface: Interface;\n\n    /**\n     *  @_ignore:\n     */\n    constructor(iface: Interface, provider: Provider, tx: TransactionResponse) {\n        super(tx, provider);\n        this.#iface = iface;\n    }\n\n    /**\n     *  Resolves once this transaction has been mined and has\n     *  %%confirms%% blocks including it (default: ``1``) with an\n     *  optional %%timeout%%.\n     *\n     *  This can resolve to ``null`` only if %%confirms%% is ``0``\n     *  and the transaction has not been mined, otherwise this will\n     *  wait until enough confirmations have completed.\n     */\n    async wait(confirms?: number, timeout?: number): Promise<null | ContractTransactionReceipt> {\n        const receipt = await super.wait(confirms, timeout);\n        if (receipt == null) { return null; }\n        return new ContractTransactionReceipt(this.#iface, this.provider, receipt);\n    }\n}\n\n/**\n *  A **ContractUnknownEventPayload** is included as the last parameter to\n *  Contract Events when the event does not match any events in the ABI.\n */\nexport  class ContractUnknownEventPayload extends EventPayload<ContractEventName> {\n    /**\n     *  The log with no matching events.\n     */\n    readonly log!: Log;\n\n    /**\n     *  @_event:\n     */\n    constructor(contract: BaseContract, listener: null | Listener, filter: ContractEventName, log: Log) {\n        super(contract, listener, filter);\n        defineProperties<ContractUnknownEventPayload>(this, { log });\n    }\n\n    /**\n     *  Resolves to the block the event occured in.\n     */\n    async getBlock(): Promise<Block> {\n        return await this.log.getBlock();\n    }\n\n    /**\n     *  Resolves to the transaction the event occured in.\n     */\n    async getTransaction(): Promise<TransactionResponse> {\n        return await this.log.getTransaction();\n    }\n\n    /**\n     *  Resolves to the transaction receipt the event occured in.\n     */\n    async getTransactionReceipt(): Promise<TransactionReceipt> {\n        return await this.log.getTransactionReceipt();\n    }\n}\n\n/**\n *  A **ContractEventPayload** is included as the last parameter to\n *  Contract Events when the event is known.\n */\nexport class ContractEventPayload extends ContractUnknownEventPayload {\n\n    /**\n     *  The matching event.\n     */\n    declare readonly fragment: EventFragment;\n\n    /**\n     *  The log, with parsed properties.\n     */\n    declare readonly log: EventLog;\n\n    /**\n     *  The parsed arguments passed to the event by ``emit``.\n     */\n    declare readonly args: Result;\n\n    /**\n     *  @_ignore:\n     */\n    constructor(contract: BaseContract, listener: null | Listener, filter: ContractEventName, fragment: EventFragment, _log: Log) {\n        super(contract, listener, filter, new EventLog(_log, contract.interface, fragment));\n        const args = contract.interface.decodeEventLog(fragment, this.log.data, this.log.topics);\n        defineProperties<ContractEventPayload>(this, { args, fragment });\n    }\n\n    /**\n     *  The event name.\n     */\n    get eventName(): string {\n        return this.fragment.name;\n    }\n\n    /**\n     *  The event signature.\n     */\n    get eventSignature(): string {\n        return this.fragment.format();\n    }\n}\n", "import { Interface, Typed } from \"../abi/index.js\";\nimport { isAddressable, resolveAddress } from \"../address/index.js\";\n// import from provider.ts instead of index.ts to prevent circular dep\n// from EtherscanProvider\nimport { copyRequest, Log, TransactionResponse } from \"../providers/provider.js\";\nimport {\n    defineProperties, getBigInt, isCallException, isHexString, resolveProperties,\n    isError, makeError, assert, assertArgument\n} from \"../utils/index.js\";\n\nimport {\n    ContractEventPayload, ContractUnknownEventPayload,\n    ContractTransactionResponse,\n    EventLog, UndecodedEventLog\n} from \"./wrappers.js\";\n\nimport type { EventFragment, FunctionFragment, InterfaceAbi, ParamType, Result } from \"../abi/index.js\";\nimport type { Addressable, NameResolver } from \"../address/index.js\";\nimport type { EventEmitterable, Listener } from \"../utils/index.js\";\nimport type {\n    BlockTag, ContractRunner, Provider, TransactionRequest, TopicFilter\n} from \"../providers/index.js\";\n\nimport type {\n    BaseContractMethod,\n    ContractEventName,\n    ContractInterface,\n    ContractMethodArgs,\n    ContractMethod,\n    ContractEventArgs,\n    ContractEvent,\n    ContractTransaction,\n    DeferredTopicFilter,\n    WrappedFallback\n} from \"./types.js\";\n\nconst BN_0 = BigInt(0);\n\ninterface ContractRunnerCaller extends ContractRunner {\n    call: (tx: TransactionRequest) => Promise<string>;\n}\n\ninterface ContractRunnerEstimater extends ContractRunner {\n    estimateGas: (tx: TransactionRequest) => Promise<bigint>;\n}\n\ninterface ContractRunnerSender extends ContractRunner {\n    sendTransaction: (tx: TransactionRequest) => Promise<TransactionResponse>;\n}\n\ninterface ContractRunnerResolver extends ContractRunner {\n    resolveName: (name: string | Addressable) => Promise<null | string>;\n}\n\nfunction canCall(value: any): value is ContractRunnerCaller {\n    return (value && typeof(value.call) === \"function\");\n}\n\nfunction canEstimate(value: any): value is ContractRunnerEstimater {\n    return (value && typeof(value.estimateGas) === \"function\");\n}\n\nfunction canResolve(value: any): value is ContractRunnerResolver {\n    return (value && typeof(value.resolveName) === \"function\");\n}\n\nfunction canSend(value: any): value is ContractRunnerSender {\n    return (value && typeof(value.sendTransaction) === \"function\");\n}\n\nfunction getResolver(value: any): undefined | NameResolver {\n    if (value != null) {\n        if (canResolve(value)) { return value; }\n        if (value.provider) { return value.provider; }\n    }\n    return undefined;\n}\n\nclass PreparedTopicFilter implements DeferredTopicFilter {\n    #filter: Promise<TopicFilter>;\n    readonly fragment!: EventFragment;\n\n    constructor(contract: BaseContract, fragment: EventFragment, args: Array<any>) {\n        defineProperties<PreparedTopicFilter>(this, { fragment });\n        if (fragment.inputs.length < args.length) {\n            throw new Error(\"too many arguments\");\n        }\n\n        // Recursively descend into args and resolve any addresses\n        const runner = getRunner(contract.runner, \"resolveName\");\n        const resolver = canResolve(runner) ? runner: null;\n        this.#filter = (async function() {\n            const resolvedArgs = await Promise.all(fragment.inputs.map((param, index) => {\n                const arg = args[index];\n                if (arg == null) { return null; }\n\n                return param.walkAsync(args[index], (type, value) => {\n                    if (type === \"address\") {\n                        if (Array.isArray(value)) {\n                            return Promise.all(value.map((v) => resolveAddress(v, resolver)));\n                        }\n                        return resolveAddress(value, resolver);\n                    }\n                    return value;\n                });\n            }));\n\n            return contract.interface.encodeFilterTopics(fragment, resolvedArgs);\n        })();\n    }\n\n    getTopicFilter(): Promise<TopicFilter> {\n        return this.#filter;\n    }\n}\n\n\n// A = Arguments passed in as a tuple\n// R = The result type of the call (i.e. if only one return type,\n//     the qualified type, otherwise Result)\n// D = The type the default call will return (i.e. R for view/pure,\n//     TransactionResponse otherwise)\n//export interface ContractMethod<A extends Array<any> = Array<any>, R = any, D extends R | ContractTransactionResponse = ContractTransactionResponse> {\n\nfunction getRunner<T extends ContractRunner>(value: any, feature: keyof ContractRunner): null | T {\n    if (value == null) { return null; }\n    if (typeof(value[feature]) === \"function\") { return value; }\n    if (value.provider && typeof(value.provider[feature]) === \"function\") {\n        return value.provider;\n    }\n    return null;\n}\n\nfunction getProvider(value: null | ContractRunner): null | Provider {\n    if (value == null) { return null; }\n    return value.provider || null;\n}\n\n/**\n *  @_ignore:\n */\nexport async function copyOverrides<O extends string = \"data\" | \"to\">(arg: any, allowed?: Array<string>): Promise<Omit<ContractTransaction, O>> {\n\n    // Make sure the overrides passed in are a valid overrides object\n    const _overrides = Typed.dereference(arg, \"overrides\");\n    assertArgument(typeof(_overrides) === \"object\", \"invalid overrides parameter\", \"overrides\", arg);\n\n    // Create a shallow copy (we'll deep-ify anything needed during normalizing)\n    const overrides = copyRequest(_overrides);\n\n    assertArgument(overrides.to == null || (allowed || [ ]).indexOf(\"to\") >= 0,\n      \"cannot override to\", \"overrides.to\", overrides.to);\n    assertArgument(overrides.data == null || (allowed || [ ]).indexOf(\"data\") >= 0,\n      \"cannot override data\", \"overrides.data\", overrides.data);\n\n    // Resolve any from\n    if (overrides.from) { overrides.from = overrides.from; }\n\n    return <Omit<ContractTransaction, O>>overrides;\n}\n\n/**\n *  @_ignore:\n */\nexport async function resolveArgs(_runner: null | ContractRunner, inputs: ReadonlyArray<ParamType>, args: Array<any>): Promise<Array<any>> {\n    // Recursively descend into args and resolve any addresses\n    const runner = getRunner(_runner, \"resolveName\");\n    const resolver = canResolve(runner) ? runner: null;\n    return await Promise.all(inputs.map((param, index) => {\n        return param.walkAsync(args[index], (type, value) => {\n            value = Typed.dereference(value, type);\n            if (type === \"address\") { return resolveAddress(value, resolver); }\n            return value;\n        });\n    }));\n}\n\nfunction buildWrappedFallback(contract: BaseContract): WrappedFallback {\n\n    const populateTransaction = async function(overrides?: Omit<TransactionRequest, \"to\">): Promise<ContractTransaction> {\n        // If an overrides was passed in, copy it and normalize the values\n\n        const tx: ContractTransaction = <any>(await copyOverrides<\"data\">(overrides, [ \"data\" ]));\n        tx.to = await contract.getAddress();\n\n        if (tx.from) {\n            tx.from = await resolveAddress(tx.from, getResolver(contract.runner));\n        }\n\n        const iface = contract.interface;\n\n        const noValue = (getBigInt((tx.value || BN_0), \"overrides.value\") === BN_0);\n        const noData = ((tx.data || \"0x\") === \"0x\");\n\n        if (iface.fallback && !iface.fallback.payable && iface.receive && !noData && !noValue) {\n            assertArgument(false, \"cannot send data to receive or send value to non-payable fallback\", \"overrides\", overrides);\n        }\n\n        assertArgument(iface.fallback || noData,\n          \"cannot send data to receive-only contract\", \"overrides.data\", tx.data);\n\n        // Only allow payable contracts to set non-zero value\n        const payable = iface.receive || (iface.fallback && iface.fallback.payable);\n        assertArgument(payable || noValue,\n          \"cannot send value to non-payable fallback\", \"overrides.value\", tx.value);\n\n        // Only allow fallback contracts to set non-empty data\n        assertArgument(iface.fallback || noData,\n          \"cannot send data to receive-only contract\", \"overrides.data\", tx.data);\n\n        return tx;\n    }\n\n    const staticCall = async function(overrides?: Omit<TransactionRequest, \"to\">): Promise<string> {\n        const runner = getRunner(contract.runner, \"call\");\n        assert(canCall(runner), \"contract runner does not support calling\",\n            \"UNSUPPORTED_OPERATION\", { operation: \"call\" });\n\n        const tx = await populateTransaction(overrides);\n\n        try {\n            return await runner.call(tx);\n        } catch (error: any) {\n            if (isCallException(error) && error.data) {\n                throw contract.interface.makeError(error.data, tx);\n            }\n            throw error;\n        }\n    }\n\n    const send = async function(overrides?: Omit<TransactionRequest, \"to\">): Promise<ContractTransactionResponse> {\n        const runner = contract.runner;\n        assert(canSend(runner), \"contract runner does not support sending transactions\",\n            \"UNSUPPORTED_OPERATION\", { operation: \"sendTransaction\" });\n\n        const tx = await runner.sendTransaction(await populateTransaction(overrides));\n        const provider = getProvider(contract.runner);\n        // @TODO: the provider can be null; make a custom dummy provider that will throw a\n        // meaningful error\n        return new ContractTransactionResponse(contract.interface, <Provider>provider, tx);\n    }\n\n    const estimateGas = async function(overrides?: Omit<TransactionRequest, \"to\">): Promise<bigint> {\n        const runner = getRunner(contract.runner, \"estimateGas\");\n        assert(canEstimate(runner), \"contract runner does not support gas estimation\",\n            \"UNSUPPORTED_OPERATION\", { operation: \"estimateGas\" });\n\n        return await runner.estimateGas(await populateTransaction(overrides));\n    }\n\n    const method = async (overrides?: Omit<TransactionRequest, \"to\">) => {\n        return await send(overrides);\n    };\n\n    defineProperties<any>(method, {\n        _contract: contract,\n\n        estimateGas,\n        populateTransaction,\n        send, staticCall\n    });\n\n    return <WrappedFallback>method;\n}\n\nfunction buildWrappedMethod<A extends Array<any> = Array<any>, R = any, D extends R | ContractTransactionResponse = ContractTransactionResponse>(contract: BaseContract, key: string): BaseContractMethod<A, R, D> {\n\n    const getFragment = function(...args: ContractMethodArgs<A>): FunctionFragment {\n        const fragment = contract.interface.getFunction(key, args);\n        assert(fragment, \"no matching fragment\", \"UNSUPPORTED_OPERATION\", {\n            operation: \"fragment\",\n            info: { key, args }\n        });\n        return fragment;\n    }\n\n    const populateTransaction = async function(...args: ContractMethodArgs<A>): Promise<ContractTransaction> {\n        const fragment = getFragment(...args);\n\n        // If an overrides was passed in, copy it and normalize the values\n        let overrides: Omit<ContractTransaction, \"data\" | \"to\"> = { };\n        if (fragment.inputs.length + 1 === args.length) {\n            overrides = await copyOverrides(args.pop());\n\n            if (overrides.from) {\n                overrides.from = await resolveAddress(overrides.from, getResolver(contract.runner));\n            }\n        }\n\n        if (fragment.inputs.length !== args.length) {\n            throw new Error(\"internal error: fragment inputs doesn't match arguments; should not happen\");\n        }\n\n        const resolvedArgs = await resolveArgs(contract.runner, fragment.inputs, args);\n\n        return Object.assign({ }, overrides, await resolveProperties({\n            to: contract.getAddress(),\n            data: contract.interface.encodeFunctionData(fragment, resolvedArgs)\n        }));\n    }\n\n    const staticCall = async function(...args: ContractMethodArgs<A>): Promise<R> {\n        const result = await staticCallResult(...args);\n        if (result.length === 1) { return result[0]; }\n        return <R><unknown>result;\n    }\n\n    const send = async function(...args: ContractMethodArgs<A>): Promise<ContractTransactionResponse> {\n        const runner = contract.runner;\n        assert(canSend(runner), \"contract runner does not support sending transactions\",\n            \"UNSUPPORTED_OPERATION\", { operation: \"sendTransaction\" });\n\n        const tx = await runner.sendTransaction(await populateTransaction(...args));\n        const provider = getProvider(contract.runner);\n        // @TODO: the provider can be null; make a custom dummy provider that will throw a\n        // meaningful error\n        return new ContractTransactionResponse(contract.interface, <Provider>provider, tx);\n    }\n\n    const estimateGas = async function(...args: ContractMethodArgs<A>): Promise<bigint> {\n        const runner = getRunner(contract.runner, \"estimateGas\");\n        assert(canEstimate(runner), \"contract runner does not support gas estimation\",\n            \"UNSUPPORTED_OPERATION\", { operation: \"estimateGas\" });\n\n        return await runner.estimateGas(await populateTransaction(...args));\n    }\n\n    const staticCallResult = async function(...args: ContractMethodArgs<A>): Promise<Result> {\n        const runner = getRunner(contract.runner, \"call\");\n        assert(canCall(runner), \"contract runner does not support calling\",\n            \"UNSUPPORTED_OPERATION\", { operation: \"call\" });\n\n        const tx = await populateTransaction(...args);\n\n        let result = \"0x\";\n        try {\n            result = await runner.call(tx);\n        } catch (error: any) {\n            if (isCallException(error) && error.data) {\n                throw contract.interface.makeError(error.data, tx);\n            }\n            throw error;\n        }\n\n        const fragment = getFragment(...args);\n        return contract.interface.decodeFunctionResult(fragment, result);\n    };\n\n    const method = async (...args: ContractMethodArgs<A>) => {\n        const fragment = getFragment(...args);\n        if (fragment.constant) { return await staticCall(...args); }\n        return await send(...args);\n    };\n\n    defineProperties<any>(method, {\n        name: contract.interface.getFunctionName(key),\n        _contract: contract, _key: key,\n\n        getFragment,\n\n        estimateGas,\n        populateTransaction,\n        send, staticCall, staticCallResult,\n    });\n\n    // Only works on non-ambiguous keys (refined fragment is always non-ambiguous)\n    Object.defineProperty(method, \"fragment\", {\n        configurable: false,\n        enumerable: true,\n        get: () => {\n            const fragment = contract.interface.getFunction(key);\n            assert(fragment, \"no matching fragment\", \"UNSUPPORTED_OPERATION\", {\n                operation: \"fragment\",\n                info: { key }\n            });\n            return fragment;\n        }\n    });\n\n    return <BaseContractMethod<A, R, D>>method;\n}\n\nfunction buildWrappedEvent<A extends Array<any> = Array<any>>(contract: BaseContract, key: string): ContractEvent<A> {\n\n    const getFragment = function(...args: ContractEventArgs<A>): EventFragment {\n        const fragment = contract.interface.getEvent(key, args);\n\n        assert(fragment, \"no matching fragment\", \"UNSUPPORTED_OPERATION\", {\n            operation: \"fragment\",\n            info: { key, args }\n        });\n\n        return fragment;\n    }\n\n    const method = function(...args: ContractMethodArgs<A>): PreparedTopicFilter {\n        return new PreparedTopicFilter(contract, getFragment(...args), args);\n    };\n\n    defineProperties<any>(method, {\n        name: contract.interface.getEventName(key),\n        _contract: contract, _key: key,\n\n        getFragment\n    });\n\n    // Only works on non-ambiguous keys (refined fragment is always non-ambiguous)\n    Object.defineProperty(method, \"fragment\", {\n        configurable: false,\n        enumerable: true,\n        get: () => {\n            const fragment = contract.interface.getEvent(key);\n\n            assert(fragment, \"no matching fragment\", \"UNSUPPORTED_OPERATION\", {\n                operation: \"fragment\",\n                info: { key }\n            });\n\n            return fragment;\n        }\n    });\n\n    return <ContractEvent<A>><unknown>method;\n}\n\ntype Sub = {\n    tag: string;\n    listeners: Array<{ listener: Listener, once: boolean }>,\n    start: () => void;\n    stop: () => void;\n};\n\n\n// The combination of TypeScrype, Private Fields and Proxies makes\n// the world go boom; so we hide variables with some trickery keeping\n// a symbol attached to each BaseContract which its sub-class (even\n// via a Proxy) can reach and use to look up its internal values.\n\nconst internal = Symbol.for(\"_ethersInternal_contract\");\ntype Internal = {\n    addrPromise: Promise<string>;\n    addr: null | string;\n\n    deployTx: null | ContractTransactionResponse;\n\n    subs: Map<string, Sub>;\n};\n\nconst internalValues: WeakMap<BaseContract, Internal> = new WeakMap();\n\nfunction setInternal(contract: BaseContract, values: Internal): void {\n    internalValues.set(contract[internal], values);\n}\n\nfunction getInternal(contract: BaseContract): Internal {\n    return internalValues.get(contract[internal]) as Internal;\n}\n\nfunction isDeferred(value: any): value is DeferredTopicFilter {\n    return (value && typeof(value) === \"object\" && (\"getTopicFilter\" in value) &&\n      (typeof(value.getTopicFilter) === \"function\") && value.fragment);\n}\n\nasync function getSubInfo(contract: BaseContract, event: ContractEventName): Promise<{ fragment: null | EventFragment, tag: string, topics: TopicFilter }> {\n    let topics: Array<null | string | Array<string>>;\n    let fragment: null | EventFragment = null;\n\n    // Convert named events to topicHash and get the fragment for\n    // events which need deconstructing.\n\n    if (Array.isArray(event)) {\n        const topicHashify = function(name: string): string {\n            if (isHexString(name, 32)) { return name; }\n            const fragment = contract.interface.getEvent(name);\n            assertArgument(fragment, \"unknown fragment\", \"name\", name);\n            return fragment.topicHash;\n        }\n\n        // Array of Topics and Names; e.g. `[ \"0x1234...89ab\", \"Transfer(address)\" ]`\n        topics = event.map((e) => {\n            if (e == null) { return null; }\n            if (Array.isArray(e)) { return e.map(topicHashify); }\n            return topicHashify(e);\n        });\n\n    } else if (event === \"*\") {\n        topics = [ null ];\n\n    } else if (typeof(event) === \"string\") {\n        if (isHexString(event, 32)) {\n            // Topic Hash\n            topics = [ event ];\n        } else {\n           // Name or Signature; e.g. `\"Transfer\", `\"Transfer(address)\"`\n            fragment = contract.interface.getEvent(event);\n            assertArgument(fragment, \"unknown fragment\", \"event\", event);\n            topics = [ fragment.topicHash ];\n        }\n\n    } else if (isDeferred(event)) {\n        // Deferred Topic Filter; e.g. `contract.filter.Transfer(from)`\n        topics = await event.getTopicFilter();\n\n    } else if (\"fragment\" in event) {\n        // ContractEvent; e.g. `contract.filter.Transfer`\n        fragment = event.fragment;\n        topics = [ fragment.topicHash ];\n\n    } else {\n        assertArgument(false, \"unknown event name\", \"event\", event);\n    }\n\n    // Normalize topics and sort TopicSets\n    topics = topics.map((t) => {\n        if (t == null) { return null; }\n        if (Array.isArray(t)) {\n            const items = Array.from(new Set(t.map((t) => t.toLowerCase())).values());\n            if (items.length === 1) { return items[0]; }\n            items.sort();\n            return items;\n        }\n        return t.toLowerCase();\n    });\n\n    const tag = topics.map((t) => {\n        if (t == null) { return \"null\"; }\n        if (Array.isArray(t)) { return t.join(\"|\"); }\n        return t;\n    }).join(\"&\");\n\n    return { fragment, tag, topics }\n}\n\nasync function hasSub(contract: BaseContract, event: ContractEventName): Promise<null | Sub> {\n    const { subs } = getInternal(contract);\n    return subs.get((await getSubInfo(contract, event)).tag) || null;\n}\n\nasync function getSub(contract: BaseContract, operation: string, event: ContractEventName): Promise<Sub> {\n    // Make sure our runner can actually subscribe to events\n    const provider = getProvider(contract.runner);\n    assert(provider, \"contract runner does not support subscribing\",\n        \"UNSUPPORTED_OPERATION\", { operation });\n\n    const { fragment, tag, topics } = await getSubInfo(contract, event);\n\n    const { addr, subs } = getInternal(contract);\n\n    let sub = subs.get(tag);\n    if (!sub) {\n        const address: string | Addressable = (addr ? addr: contract);\n        const filter = { address, topics };\n        const listener = (log: Log) => {\n            let foundFragment = fragment;\n            if (foundFragment == null) {\n                try {\n                    foundFragment = contract.interface.getEvent(log.topics[0]);\n                } catch (error) { }\n            }\n\n            // If fragment is null, we do not deconstruct the args to emit\n\n            if (foundFragment) {\n                const _foundFragment = foundFragment;\n                const args = fragment ? contract.interface.decodeEventLog(fragment, log.data, log.topics): [ ];\n                emit(contract, event, args, (listener: null | Listener) => {\n                    return new ContractEventPayload(contract, listener, event, _foundFragment, log);\n                });\n            } else {\n                emit(contract, event, [ ], (listener: null | Listener) => {\n                    return new ContractUnknownEventPayload(contract, listener, event, log);\n                });\n            }\n        };\n\n        let starting: Array<Promise<any>> = [ ];\n        const start = () => {\n            if (starting.length) { return; }\n            starting.push(provider.on(filter, listener));\n        };\n\n        const stop = async () => {\n            if (starting.length == 0) { return; }\n\n            let started = starting;\n            starting = [ ];\n            await Promise.all(started);\n            provider.off(filter, listener);\n        };\n\n        sub = { tag, listeners: [ ], start, stop };\n        subs.set(tag, sub);\n    }\n    return sub;\n}\n\n// We use this to ensure one emit resolves before firing the next to\n// ensure correct ordering (note this cannot throw and just adds the\n// notice to the event queu using setTimeout).\nlet lastEmit: Promise<any> = Promise.resolve();\n\ntype PayloadFunc = (listener: null | Listener) => ContractUnknownEventPayload;\n\nasync function _emit(contract: BaseContract, event: ContractEventName, args: Array<any>, payloadFunc: null | PayloadFunc): Promise<boolean> {\n    await lastEmit;\n\n    const sub = await hasSub(contract, event);\n    if (!sub) { return false; }\n\n    const count = sub.listeners.length;\n    sub.listeners = sub.listeners.filter(({ listener, once }) => {\n        const passArgs = Array.from(args);\n        if (payloadFunc) {\n            passArgs.push(payloadFunc(once ? null: listener));\n        }\n        try {\n            listener.call(contract, ...passArgs);\n        } catch (error) { }\n        return !once;\n    });\n\n    if (sub.listeners.length === 0) {\n        sub.stop();\n        getInternal(contract).subs.delete(sub.tag);\n    }\n\n    return (count > 0);\n}\n\nasync function emit(contract: BaseContract, event: ContractEventName, args: Array<any>, payloadFunc: null | PayloadFunc): Promise<boolean> {\n    try {\n        await lastEmit;\n    } catch (error) { }\n\n    const resultPromise = _emit(contract, event, args, payloadFunc);\n    lastEmit = resultPromise;\n    return await resultPromise;\n}\n\nconst passProperties = [ \"then\" ];\nexport class BaseContract implements Addressable, EventEmitterable<ContractEventName> {\n    /**\n     *  The target to connect to.\n     *\n     *  This can be an address, ENS name or any [[Addressable]], such as\n     *  another contract. To get the resovled address, use the ``getAddress``\n     *  method.\n     */\n    readonly target!: string | Addressable;\n\n    /**\n     *  The contract Interface.\n     */\n    readonly interface!: Interface;\n\n    /**\n     *  The connected runner. This is generally a [[Provider]] or a\n     *  [[Signer]], which dictates what operations are supported.\n     *\n     *  For example, a **Contract** connected to a [[Provider]] may\n     *  only execute read-only operations.\n     */\n    readonly runner!: null | ContractRunner;\n\n    /**\n     *  All the Events available on this contract.\n     */\n    readonly filters!: Record<string, ContractEvent>;\n\n    /**\n     *  @_ignore:\n     */\n    readonly [internal]: any;\n\n    /**\n     *  The fallback or receive function if any.\n     */\n    readonly fallback!: null | WrappedFallback;\n\n    /**\n     *  Creates a new contract connected to %%target%% with the %%abi%% and\n     *  optionally connected to a %%runner%% to perform operations on behalf\n     *  of.\n     */\n    constructor(target: string | Addressable, abi: Interface | InterfaceAbi, runner?: null | ContractRunner, _deployTx?: null | TransactionResponse) {\n        assertArgument(typeof(target) === \"string\" || isAddressable(target),\n            \"invalid value for Contract target\", \"target\", target);\n\n        if (runner == null) { runner = null; }\n        const iface = Interface.from(abi);\n        defineProperties<BaseContract>(this, { target, runner, interface: iface });\n\n        Object.defineProperty(this, internal, { value: { } });\n\n        let addrPromise;\n        let addr: null | string = null;\n\n        let deployTx: null | ContractTransactionResponse = null;\n        if (_deployTx) {\n            const provider = getProvider(runner);\n            // @TODO: the provider can be null; make a custom dummy provider that will throw a\n            // meaningful error\n            deployTx = new ContractTransactionResponse(this.interface, <Provider>provider, _deployTx);\n        }\n\n        let subs = new Map();\n\n        // Resolve the target as the address\n        if (typeof(target) === \"string\") {\n            if (isHexString(target)) {\n                addr = target;\n                addrPromise = Promise.resolve(target);\n\n            } else {\n                const resolver = getRunner(runner, \"resolveName\");\n                if (!canResolve(resolver)) {\n                    throw makeError(\"contract runner does not support name resolution\", \"UNSUPPORTED_OPERATION\", {\n                        operation: \"resolveName\"\n                    });\n                }\n\n                addrPromise = resolver.resolveName(target).then((addr) => {\n                    if (addr == null) {\n                        throw makeError(\"an ENS name used for a contract target must be correctly configured\", \"UNCONFIGURED_NAME\", {\n                            value: target\n                        });\n                    }\n                    getInternal(this).addr = addr;\n                    return addr;\n                });\n            }\n        } else {\n            addrPromise = target.getAddress().then((addr) => {\n                if (addr == null) { throw new Error(\"TODO\"); }\n                getInternal(this).addr = addr;\n                return addr;\n            });\n        }\n\n        // Set our private values\n        setInternal(this, { addrPromise, addr, deployTx, subs });\n\n        // Add the event filters\n        const filters = new Proxy({ }, {\n            get: (target, prop, receiver) => {\n                // Pass important checks (like `then` for Promise) through\n                if (typeof(prop) === \"symbol\" || passProperties.indexOf(prop) >= 0) {\n                    return Reflect.get(target, prop, receiver);\n                }\n\n                try {\n                    return this.getEvent(prop);\n                } catch (error) {\n                    if (!isError(error, \"INVALID_ARGUMENT\") || error.argument !== \"key\") {\n                        throw error;\n                    }\n                }\n\n                return undefined;\n            },\n            has: (target, prop) => {\n                // Pass important checks (like `then` for Promise) through\n                if (passProperties.indexOf(<string>prop) >= 0) {\n                    return Reflect.has(target, prop);\n                }\n\n                return Reflect.has(target, prop) || this.interface.hasEvent(String(prop));\n            }\n        });\n        defineProperties<BaseContract>(this, { filters });\n\n        defineProperties<BaseContract>(this, {\n            fallback: ((iface.receive || iface.fallback) ? (buildWrappedFallback(this)): null)\n        });\n\n        // Return a Proxy that will respond to functions\n        return new Proxy(this, {\n            get: (target, prop, receiver) => {\n                if (typeof(prop) === \"symbol\" || prop in target || passProperties.indexOf(prop) >= 0) {\n                    return Reflect.get(target, prop, receiver);\n                }\n\n                // Undefined properties should return undefined\n                try {\n                    return target.getFunction(prop);\n                } catch (error) {\n                    if (!isError(error, \"INVALID_ARGUMENT\") || error.argument !== \"key\") {\n                        throw error;\n                    }\n                }\n\n                return undefined;\n            },\n            has: (target, prop) => {\n                if (typeof(prop) === \"symbol\" || prop in target || passProperties.indexOf(prop) >= 0) {\n                    return Reflect.has(target, prop);\n                }\n\n                return target.interface.hasFunction(prop);\n            }\n        });\n\n    }\n\n    /**\n     *  Return a new Contract instance with the same target and ABI, but\n     *  a different %%runner%%.\n     */\n    connect(runner: null | ContractRunner): BaseContract {\n        return new BaseContract(this.target, this.interface, runner);\n    }\n\n    /**\n     *  Return a new Contract instance with the same ABI and runner, but\n     *  a different %%target%%.\n     */\n    attach(target: string | Addressable): BaseContract {\n        return new BaseContract(target, this.interface, this.runner);\n    }\n\n    /**\n     *  Return the resolved address of this Contract.\n     */\n    async getAddress(): Promise<string> { return await getInternal(this).addrPromise; }\n\n    /**\n     *  Return the deployed bytecode or null if no bytecode is found.\n     */\n    async getDeployedCode(): Promise<null | string> {\n        const provider = getProvider(this.runner);\n        assert(provider, \"runner does not support .provider\",\n            \"UNSUPPORTED_OPERATION\", { operation: \"getDeployedCode\" });\n\n        const code = await provider.getCode(await this.getAddress());\n        if (code === \"0x\") { return null; }\n        return code;\n    }\n\n    /**\n     *  Resolve to this Contract once the bytecode has been deployed, or\n     *  resolve immediately if already deployed.\n     */\n    async waitForDeployment(): Promise<this> {\n        // We have the deployement transaction; just use that (throws if deployement fails)\n        const deployTx = this.deploymentTransaction();\n        if (deployTx) {\n            await deployTx.wait();\n            return this;\n        }\n\n        // Check for code\n        const code = await this.getDeployedCode();\n        if (code != null) { return this; }\n\n        // Make sure we can subscribe to a provider event\n        const provider = getProvider(this.runner);\n        assert(provider != null, \"contract runner does not support .provider\",\n            \"UNSUPPORTED_OPERATION\", { operation: \"waitForDeployment\" });\n\n        return new Promise((resolve, reject) => {\n            const checkCode = async () => {\n                try {\n                    const code = await this.getDeployedCode();\n                    if (code != null) { return resolve(this); }\n                    provider.once(\"block\", checkCode);\n                } catch (error) {\n                    reject(error);\n                }\n            };\n            checkCode();\n        });\n    }\n\n    /**\n     *  Return the transaction used to deploy this contract.\n     *\n     *  This is only available if this instance was returned from a\n     *  [[ContractFactory]].\n     */\n    deploymentTransaction(): null | ContractTransactionResponse {\n        return getInternal(this).deployTx;\n    }\n\n    /**\n     *  Return the function for a given name. This is useful when a contract\n     *  method name conflicts with a JavaScript name such as ``prototype`` or\n     *  when using a Contract programatically.\n     */\n    getFunction<T extends ContractMethod = ContractMethod>(key: string | FunctionFragment): T {\n        if (typeof(key) !== \"string\") { key = key.format(); }\n        const func = buildWrappedMethod(this, key);\n        return <T>func;\n    }\n\n    /**\n     *  Return the event for a given name. This is useful when a contract\n     *  event name conflicts with a JavaScript name such as ``prototype`` or\n     *  when using a Contract programatically.\n     */\n    getEvent(key: string | EventFragment): ContractEvent {\n        if (typeof(key) !== \"string\") { key = key.format(); }\n        return buildWrappedEvent(this, key);\n    }\n\n    /**\n     *  @_ignore:\n     */\n    async queryTransaction(hash: string): Promise<Array<EventLog>> {\n        throw new Error(\"@TODO\");\n    }\n\n    /*\n    // @TODO: this is a non-backwards compatible change, but will be added\n    //        in v7 and in a potential SmartContract class in an upcoming\n    //        v6 release\n    async getTransactionReceipt(hash: string): Promise<null | ContractTransactionReceipt> {\n        const provider = getProvider(this.runner);\n        assert(provider, \"contract runner does not have a provider\",\n            \"UNSUPPORTED_OPERATION\", { operation: \"queryTransaction\" });\n\n        const receipt = await provider.getTransactionReceipt(hash);\n        if (receipt == null) { return null; }\n\n        return new ContractTransactionReceipt(this.interface, provider, receipt);\n    }\n    */\n\n    /**\n     *  Provide historic access to event data for %%event%% in the range\n     *  %%fromBlock%% (default: ``0``) to %%toBlock%% (default: ``\"latest\"``)\n     *  inclusive.\n     */\n    async queryFilter(event: ContractEventName, fromBlock?: BlockTag, toBlock?: BlockTag): Promise<Array<EventLog | Log>> {\n        if (fromBlock == null) { fromBlock = 0; }\n        if (toBlock == null) { toBlock = \"latest\"; }\n        const { addr, addrPromise } = getInternal(this);\n        const address = (addr ? addr: (await addrPromise));\n        const { fragment, topics } = await getSubInfo(this, event);\n        const filter = { address, topics, fromBlock, toBlock };\n\n        const provider = getProvider(this.runner);\n        assert(provider, \"contract runner does not have a provider\",\n            \"UNSUPPORTED_OPERATION\", { operation: \"queryFilter\" });\n\n        return (await provider.getLogs(filter)).map((log) => {\n            let foundFragment = fragment;\n            if (foundFragment == null) {\n                try {\n                    foundFragment = this.interface.getEvent(log.topics[0]);\n                } catch (error) { }\n            }\n\n            if (foundFragment) {\n                try {\n                    return new EventLog(log, this.interface, foundFragment);\n                } catch (error: any) {\n                    return new UndecodedEventLog(log, error);\n                }\n            }\n\n            return new Log(log, provider);\n        });\n    }\n\n    /**\n     *  Add an event %%listener%% for the %%event%%.\n     */\n    async on(event: ContractEventName, listener: Listener): Promise<this> {\n        const sub = await getSub(this, \"on\", event);\n        sub.listeners.push({ listener, once: false });\n        sub.start();\n        return this;\n    }\n\n    /**\n     *  Add an event %%listener%% for the %%event%%, but remove the listener\n     *  after it is fired once.\n     */\n    async once(event: ContractEventName, listener: Listener): Promise<this> {\n        const sub = await getSub(this, \"once\", event);\n        sub.listeners.push({ listener, once: true });\n        sub.start();\n        return this;\n    }\n\n    /**\n     *  Emit an %%event%% calling all listeners with %%args%%.\n     *\n     *  Resolves to ``true`` if any listeners were called.\n     */\n    async emit(event: ContractEventName, ...args: Array<any>): Promise<boolean> {\n        return await emit(this, event, args, null);\n    }\n\n    /**\n     *  Resolves to the number of listeners of %%event%% or the total number\n     *  of listeners if unspecified.\n     */\n    async listenerCount(event?: ContractEventName): Promise<number> {\n        if (event) {\n            const sub = await hasSub(this, event);\n            if (!sub) { return 0; }\n            return sub.listeners.length;\n        }\n\n        const { subs } = getInternal(this);\n\n        let total = 0;\n        for (const { listeners } of subs.values()) {\n            total += listeners.length;\n        }\n        return total;\n    }\n\n    /**\n     *  Resolves to the listeners subscribed to %%event%% or all listeners\n     *  if unspecified.\n     */\n    async listeners(event?: ContractEventName): Promise<Array<Listener>> {\n        if (event) {\n            const sub = await hasSub(this, event);\n            if (!sub) { return [ ]; }\n            return sub.listeners.map(({ listener }) => listener);\n        }\n\n        const { subs } = getInternal(this);\n\n        let result: Array<Listener> = [ ];\n        for (const { listeners } of subs.values()) {\n            result = result.concat(listeners.map(({ listener }) => listener));\n        }\n        return result;\n    }\n\n    /**\n     *  Remove the %%listener%% from the listeners for %%event%% or remove\n     *  all listeners if unspecified.\n     */\n    async off(event: ContractEventName, listener?: Listener): Promise<this> {\n        const sub = await hasSub(this, event);\n        if (!sub) { return this; }\n\n        if (listener) {\n            const index = sub.listeners.map(({ listener }) => listener).indexOf(listener);\n            if (index >= 0) { sub.listeners.splice(index, 1); }\n        }\n\n        if (listener == null || sub.listeners.length === 0) {\n            sub.stop();\n            getInternal(this).subs.delete(sub.tag);\n        }\n\n        return this;\n    }\n\n    /**\n     *  Remove all the listeners for %%event%% or remove all listeners if\n     *  unspecified.\n     */\n    async removeAllListeners(event?: ContractEventName): Promise<this> {\n        if (event) {\n            const sub = await hasSub(this, event);\n            if (!sub) { return this; }\n            sub.stop();\n            getInternal(this).subs.delete(sub.tag);\n        } else {\n            const { subs } = getInternal(this);\n            for (const { tag, stop } of subs.values()) {\n                stop();\n                subs.delete(tag);\n            }\n        }\n\n        return this;\n    }\n\n    /**\n     *  Alias for [on].\n     */\n    async addListener(event: ContractEventName, listener: Listener): Promise<this> {\n        return await this.on(event, listener);\n    }\n\n    /**\n     *  Alias for [off].\n     */\n    async removeListener(event: ContractEventName, listener: Listener): Promise<this> {\n        return await this.off(event, listener);\n    }\n\n    /**\n     *  Create a new Class for the %%abi%%.\n     */\n    static buildClass<T = ContractInterface>(abi: Interface | InterfaceAbi): new (target: string, runner?: null | ContractRunner) => BaseContract & Omit<T, keyof BaseContract> {\n        class CustomContract extends BaseContract {\n            constructor(address: string, runner: null | ContractRunner = null) {\n                super(address, abi, runner);\n            }\n        }\n        return CustomContract as any;\n    };\n\n    /**\n     *  Create a new BaseContract with a specified Interface.\n     */\n    static from<T = ContractInterface>(target: string, abi: Interface | InterfaceAbi, runner?: null | ContractRunner): BaseContract & Omit<T, keyof BaseContract> {\n        if (runner == null) { runner = null; }\n        const contract = new this(target, abi, runner );\n        return contract as any;\n    }\n}\n\nfunction _ContractBase(): new (target: string | Addressable, abi: Interface | InterfaceAbi, runner?: null | ContractRunner) => BaseContract & Omit<ContractInterface, keyof BaseContract> {\n    return BaseContract as any;\n}\n\n/**\n *  A [[BaseContract]] with no type guards on its methods or events.\n */\nexport class Contract extends _ContractBase() { }\n", "\nimport { Interface } from \"../abi/index.js\";\nimport { getCreateAddress } from \"../address/index.js\";\nimport {\n    concat, defineProperties, getBytes, hexlify,\n    assert, assertArgument\n} from \"../utils/index.js\";\n\nimport { BaseContract, copyOverrides, resolveArgs } from \"./contract.js\";\n\nimport type { InterfaceAbi } from \"../abi/index.js\";\nimport type { Addressable } from \"../address/index.js\";\nimport type { ContractRunner } from \"../providers/index.js\";\nimport type { BytesLike } from \"../utils/index.js\";\n\nimport type {\n    ContractInterface, ContractMethodArgs, ContractDeployTransaction,\n} from \"./types.js\";\nimport type { ContractTransactionResponse } from \"./wrappers.js\";\n\n\n// A = Arguments to the constructor\n// I = Interface of deployed contracts\n\n/**\n *  A **ContractFactory** is used to deploy a Contract to the blockchain.\n */\nexport class ContractFactory<A extends Array<any> = Array<any>, I = BaseContract> {\n\n    /**\n     *  The Contract Interface.\n     */\n    readonly interface!: Interface;\n\n    /**\n     *  The Contract deployment bytecode. Often called the initcode.\n     */\n    readonly bytecode!: string;\n\n    /**\n     *  The ContractRunner to deploy the Contract as.\n     */\n    readonly runner!: null | ContractRunner;\n\n    /**\n     *  Create a new **ContractFactory** with %%abi%% and %%bytecode%%,\n     *  optionally connected to %%runner%%.\n     *\n     *  The %%bytecode%% may be the ``bytecode`` property within the\n     *  standard Solidity JSON output.\n     */\n    constructor(abi: Interface | InterfaceAbi, bytecode: BytesLike | { object: string }, runner?: null | ContractRunner) {\n        const iface = Interface.from(abi);\n\n        // Dereference Solidity bytecode objects and allow a missing `0x`-prefix\n        if (bytecode instanceof Uint8Array) {\n            bytecode = hexlify(getBytes(bytecode));\n        } else {\n            if (typeof(bytecode) === \"object\") { bytecode = bytecode.object; }\n            if (!bytecode.startsWith(\"0x\")) { bytecode = \"0x\" + bytecode; }\n            bytecode = hexlify(getBytes(bytecode));\n        }\n\n        defineProperties<ContractFactory>(this, {\n            bytecode, interface: iface, runner: (runner || null)\n        });\n    }\n\n    attach(target: string | Addressable): BaseContract & Omit<I, keyof BaseContract> {\n        return new (<any>BaseContract)(target, this.interface, this.runner);\n    }\n\n    /**\n     *  Resolves to the transaction to deploy the contract, passing %%args%%\n     *  into the constructor.\n     */\n    async getDeployTransaction(...args: ContractMethodArgs<A>): Promise<ContractDeployTransaction> {\n        let overrides: Omit<ContractDeployTransaction, \"data\"> = { };\n\n        const fragment = this.interface.deploy;\n\n        if (fragment.inputs.length + 1 === args.length) {\n            overrides = await copyOverrides(args.pop());\n        }\n\n        if (fragment.inputs.length !== args.length) {\n            throw new Error(\"incorrect number of arguments to constructor\");\n        }\n\n        const resolvedArgs = await resolveArgs(this.runner, fragment.inputs, args);\n\n        const data = concat([ this.bytecode, this.interface.encodeDeploy(resolvedArgs) ]);\n        return Object.assign({ }, overrides, { data });\n    }\n\n    /**\n     *  Resolves to the Contract deployed by passing %%args%% into the\n     *  constructor.\n     *\n     *  This will resolve to the Contract before it has been deployed to the\n     *  network, so the [[BaseContract-waitForDeployment]] should be used before\n     *  sending any transactions to it.\n     */\n    async deploy(...args: ContractMethodArgs<A>): Promise<BaseContract & { deploymentTransaction(): ContractTransactionResponse } & Omit<I, keyof BaseContract>> {\n        const tx = await this.getDeployTransaction(...args);\n\n        assert(this.runner && typeof(this.runner.sendTransaction) === \"function\",\n            \"factory runner does not support sending transactions\", \"UNSUPPORTED_OPERATION\", {\n            operation: \"sendTransaction\" });\n\n        const sentTx = await this.runner.sendTransaction(tx);\n        const address = getCreateAddress(sentTx);\n        return new (<any>BaseContract)(address, this.interface, this.runner, sentTx);\n    }\n\n    /**\n     *  Return a new **ContractFactory** with the same ABI and bytecode,\n     *  but connected to %%runner%%.\n     */\n    connect(runner: null | ContractRunner): ContractFactory<A, I> {\n        return new ContractFactory(this.interface, this.bytecode, runner);\n    }\n\n    /**\n     *  Create a new **ContractFactory** from the standard Solidity JSON output.\n     */\n    static fromSolidity<A extends Array<any> = Array<any>, I = ContractInterface>(output: any, runner?: ContractRunner): ContractFactory<A, I> {\n        assertArgument(output != null, \"bad compiler output\", \"output\", output);\n\n        if (typeof(output) === \"string\") { output = JSON.parse(output); }\n\n        const abi = output.abi;\n\n        let bytecode = \"\";\n        if (output.bytecode) {\n            bytecode = output.bytecode;\n        } else if (output.evm && output.evm.bytecode) {\n            bytecode = output.evm.bytecode;\n        }\n\n        return new this(abi, bytecode, runner);\n    }\n}\n", "/**\n *  A **Contract** object is a meta-class (a class whose definition is\n *  defined at runtime), which communicates with a deployed smart contract\n *  on the blockchain and provides a simple JavaScript interface to call\n *  methods, send transaction, query historic logs and listen for its events.\n *\n *  @_section: api/contract:Contracts  [about-contracts]\n */\nexport {\n    BaseContract, Contract\n} from \"./contract.js\";\n\nexport {\n    ContractFactory\n} from \"./factory.js\";\n\nexport {\n    ContractEventPayload, ContractUnknownEventPayload,\n    ContractTransactionReceipt, ContractTransactionResponse,\n    EventLog, UndecodedEventLog\n} from \"./wrappers.js\";\n\nexport type {\n    BaseContractMethod, ConstantContractMethod,\n    PostfixOverrides,\n    ContractEvent, ContractEventArgs, ContractEventName,\n    ContractDeployTransaction,\n    ContractInterface, ContractMethod, ContractMethodArgs, ContractTransaction,\n    DeferredTopicFilter, Overrides,\n    WrappedFallback\n} from \"./types.js\";\n", "/**\n *  ENS is a service which allows easy-to-remember names to map to\n *  network addresses.\n *\n *  @_section: api/providers/ens-resolver:ENS Resolver  [about-ens-rsolver]\n */\n\nimport { getAddress } from \"../address/index.js\";\nimport { ZeroAddress } from \"../constants/index.js\";\nimport { Contract } from \"../contract/index.js\";\nimport { dnsEncode, namehash } from \"../hash/index.js\";\nimport {\n    hexlify, isHexString, toBeHex,\n    defineProperties, encodeBase58,\n    assert, assertArgument, isError,\n    FetchRequest\n} from \"../utils/index.js\";\n\nimport type { FunctionFragment } from \"../abi/index.js\";\n\nimport type { BytesLike } from \"../utils/index.js\";\n\nimport type { AbstractProvider, AbstractProviderPlugin } from \"./abstract-provider.js\";\nimport type { EnsPlugin } from \"./plugins-network.js\";\nimport type { Provider } from \"./provider.js\";\n\n// @TODO: This should use the fetch-data:ipfs gateway\n// Trim off the ipfs:// prefix and return the default gateway URL\nfunction getIpfsLink(link: string): string {\n    if (link.match(/^ipfs:\\/\\/ipfs\\//i)) {\n        link = link.substring(12);\n    } else if (link.match(/^ipfs:\\/\\//i)) {\n        link = link.substring(7);\n    } else {\n        assertArgument(false, \"unsupported IPFS format\", \"link\", link);\n    }\n\n    return `https:/\\/gateway.ipfs.io/ipfs/${ link }`;\n}\n\n/**\n *  The type of data found during a steip during avatar resolution.\n */\nexport type AvatarLinkageType = \"name\" | \"avatar\" | \"!avatar\" | \"url\" | \"data\" | \"ipfs\" |\n    \"erc721\" | \"erc1155\" | \"!erc721-caip\" | \"!erc1155-caip\" |\n    \"!owner\" | \"owner\" | \"!balance\" | \"balance\" |\n    \"metadata-url-base\" | \"metadata-url-expanded\" | \"metadata-url\" | \"!metadata-url\" |\n    \"!metadata\" | \"metadata\" |\n    \"!imageUrl\" | \"imageUrl-ipfs\" | \"imageUrl\" | \"!imageUrl-ipfs\";\n\n/**\n *  An individual record for each step during avatar resolution.\n */\nexport interface AvatarLinkage {\n    /**\n     *  The type of linkage.\n     */\n    type: AvatarLinkageType;\n\n    /**\n     *  The linkage value.\n     */\n    value: string;\n};\n\n/**\n *  When resolving an avatar for an ENS name, there are many\n *  steps involved, fetching metadata, validating results, et cetera.\n *\n *  Some applications may wish to analyse this data, or use this data\n *  to diagnose promblems, so an **AvatarResult** provides details of\n *  each completed step during avatar resolution.\n */\nexport interface AvatarResult {\n    /**\n     *  How the [[url]] was arrived at, resolving the many steps required\n     *  for an avatar URL.\n     */\n    linkage: Array<AvatarLinkage>;\n\n    /**\n     *  The avatar URL or null if the avatar was not set, or there was\n     *  an issue during validation (such as the address not owning the\n     *  avatar or a metadata error).\n     */\n    url: null | string;\n};\n\n/**\n *  A provider plugin super-class for processing multicoin address types.\n */\nexport abstract class MulticoinProviderPlugin implements AbstractProviderPlugin {\n    /**\n     *  The name.\n     */\n    readonly name!: string;\n\n    /**\n     *  Creates a new **MulticoinProviderPluing** for %%name%%.\n     */\n    constructor(name: string) {\n        defineProperties<MulticoinProviderPlugin>(this, { name });\n    }\n\n    connect(proivder: Provider): MulticoinProviderPlugin {\n        return this;\n    }\n\n    /**\n     *  Returns ``true`` if %%coinType%% is supported by this plugin.\n     */\n    supportsCoinType(coinType: number): boolean {\n        return false;\n    }\n\n    /**\n     *  Resovles to the encoded %%address%% for %%coinType%%.\n     */\n    async encodeAddress(coinType: number, address: string): Promise<string> {\n        throw new Error(\"unsupported coin\");\n    }\n\n    /**\n     *  Resovles to the decoded %%data%% for %%coinType%%.\n     */\n    async decodeAddress(coinType: number, data: BytesLike): Promise<string> {\n        throw new Error(\"unsupported coin\");\n    }\n}\n\nconst BasicMulticoinPluginId = \"org.ethers.plugins.provider.BasicMulticoin\";\n\n/**\n *  A **BasicMulticoinProviderPlugin** provides service for common\n *  coin types, which do not require additional libraries to encode or\n *  decode.\n */\nexport class BasicMulticoinProviderPlugin extends MulticoinProviderPlugin {\n    /**\n     *  Creates a new **BasicMulticoinProviderPlugin**.\n     */\n    constructor() {\n        super(BasicMulticoinPluginId);\n    }\n}\n\nconst matcherIpfs = new RegExp(\"^(ipfs):/\\/(.*)$\", \"i\");\nconst matchers = [\n    new RegExp(\"^(https):/\\/(.*)$\", \"i\"),\n    new RegExp(\"^(data):(.*)$\", \"i\"),\n    matcherIpfs,\n    new RegExp(\"^eip155:[0-9]+/(erc[0-9]+):(.*)$\", \"i\"),\n];\n\n/**\n *  A connected object to a resolved ENS name resolver, which can be\n *  used to query additional details.\n */\nexport class EnsResolver {\n    /**\n     *  The connected provider.\n     */\n    provider!: AbstractProvider;\n\n    /**\n     *  The address of the resolver.\n     */\n    address!: string;\n\n    /**\n     *  The name this resolver was resolved against.\n     */\n    name!: string;\n\n    // For EIP-2544 names, the ancestor that provided the resolver\n    #supports2544: null | Promise<boolean>;\n\n    #resolver: Contract;\n\n    constructor(provider: AbstractProvider, address: string, name: string) {\n        defineProperties<EnsResolver>(this, { provider, address, name });\n        this.#supports2544 = null;\n\n        this.#resolver = new Contract(address, [\n            \"function supportsInterface(bytes4) view returns (bool)\",\n            \"function resolve(bytes, bytes) view returns (bytes)\",\n            \"function addr(bytes32) view returns (address)\",\n            \"function addr(bytes32, uint) view returns (bytes)\",\n            \"function text(bytes32, string) view returns (string)\",\n            \"function contenthash(bytes32) view returns (bytes)\",\n        ], provider);\n\n    }\n\n    /**\n     *  Resolves to true if the resolver supports wildcard resolution.\n     */\n    async supportsWildcard(): Promise<boolean> {\n        if (this.#supports2544 == null) {\n            this.#supports2544 = (async () => {\n                try {\n                    return await this.#resolver.supportsInterface(\"0x9061b923\");\n                } catch (error) {\n                    // Wildcard resolvers must understand supportsInterface\n                    // and return true.\n                    if (isError(error, \"CALL_EXCEPTION\")) { return false; }\n\n                    // Let future attempts try again...\n                    this.#supports2544 = null;\n\n                    throw error;\n                }\n            })();\n        }\n\n        return await this.#supports2544;\n    }\n\n    async #fetch(funcName: string, params?: Array<any>): Promise<null | any> {\n        params = (params || []).slice();\n        const iface = this.#resolver.interface;\n\n        // The first parameters is always the nodehash\n        params.unshift(namehash(this.name))\n\n        let fragment: null | FunctionFragment = null;\n        if (await this.supportsWildcard()) {\n            fragment = iface.getFunction(funcName);\n            assert(fragment, \"missing fragment\", \"UNKNOWN_ERROR\", {\n                info: { funcName }\n            });\n\n            params = [\n                dnsEncode(this.name, 255),\n                iface.encodeFunctionData(fragment, params)\n            ];\n\n            funcName = \"resolve(bytes,bytes)\";\n        }\n\n        params.push({\n            enableCcipRead: true\n        });\n\n        try {\n            const result = await this.#resolver[funcName](...params);\n\n            if (fragment) {\n                return iface.decodeFunctionResult(fragment, result)[0];\n            }\n\n            return result;\n        } catch (error: any) {\n            if (!isError(error, \"CALL_EXCEPTION\")) { throw error; }\n        }\n\n        return null;\n    }\n\n    /**\n     *  Resolves to the address for %%coinType%% or null if the\n     *  provided %%coinType%% has not been configured.\n     */\n    async getAddress(coinType?: number): Promise<null | string> {\n        if (coinType == null) { coinType = 60; }\n        if (coinType === 60) {\n            try {\n                const result = await this.#fetch(\"addr(bytes32)\");\n\n                // No address\n                if (result == null || result === ZeroAddress) { return null; }\n\n                return result;\n            } catch (error: any) {\n                if (isError(error, \"CALL_EXCEPTION\")) { return null; }\n                throw error;\n            }\n        }\n\n        // Try decoding its EVM canonical chain as an EVM chain address first\n        if (coinType >= 0 && coinType < 0x80000000) {\n            let ethCoinType = coinType + 0x80000000;\n\n            const data = await this.#fetch(\"addr(bytes32,uint)\", [ ethCoinType ]);\n            if (isHexString(data, 20)) { return getAddress(data); }\n        }\n\n        let coinPlugin: null | MulticoinProviderPlugin = null;\n        for (const plugin of this.provider.plugins) {\n            if (!(plugin instanceof MulticoinProviderPlugin)) { continue; }\n            if (plugin.supportsCoinType(coinType)) {\n                coinPlugin = plugin;\n                break;\n            }\n        }\n\n        if (coinPlugin == null) { return null; }\n\n        // keccak256(\"addr(bytes32,uint256\")\n        const data = await this.#fetch(\"addr(bytes32,uint)\", [ coinType ]);\n\n        // No address\n        if (data == null || data === \"0x\") { return null; }\n\n        // Compute the address\n        const address = await coinPlugin.decodeAddress(coinType, data);\n\n        if (address != null) { return address; }\n\n        assert(false, `invalid coin data`, \"UNSUPPORTED_OPERATION\", {\n            operation: `getAddress(${ coinType })`,\n            info: { coinType, data }\n        });\n    }\n\n    /**\n     *  Resolves to the EIP-634 text record for %%key%%, or ``null``\n     *  if unconfigured.\n     */\n    async getText(key: string): Promise<null | string> {\n        const data = await this.#fetch(\"text(bytes32,string)\", [ key ]);\n        if (data == null || data === \"0x\") { return null; }\n        return data;\n    }\n\n    /**\n     *  Rsolves to the content-hash or ``null`` if unconfigured.\n     */\n    async getContentHash(): Promise<null | string> {\n        // keccak256(\"contenthash()\")\n        const data = await this.#fetch(\"contenthash(bytes32)\");\n\n        // No contenthash\n        if (data == null || data === \"0x\") { return null; }\n\n        // IPFS (CID: 1, Type: 70=DAG-PB, 72=libp2p-key)\n        const ipfs = data.match(/^0x(e3010170|e5010172)(([0-9a-f][0-9a-f])([0-9a-f][0-9a-f])([0-9a-f]*))$/);\n        if (ipfs) {\n            const scheme = (ipfs[1] === \"e3010170\") ? \"ipfs\": \"ipns\";\n            const length = parseInt(ipfs[4], 16);\n            if (ipfs[5].length === length * 2) {\n                return `${ scheme }:/\\/${ encodeBase58(\"0x\" + ipfs[2])}`;\n            }\n        }\n\n        // Swarm (CID: 1, Type: swarm-manifest; hash/length hard-coded to keccak256/32)\n        const swarm = data.match(/^0xe40101fa011b20([0-9a-f]*)$/)\n        if (swarm && swarm[1].length === 64) {\n            return `bzz:/\\/${ swarm[1] }`;\n        }\n\n        assert(false, `invalid or unsupported content hash data`, \"UNSUPPORTED_OPERATION\", {\n            operation: \"getContentHash()\",\n            info: { data }\n        });\n    }\n\n    /**\n     *  Resolves to the avatar url or ``null`` if the avatar is either\n     *  unconfigured or incorrectly configured (e.g. references an NFT\n     *  not owned by the address).\n     *\n     *  If diagnosing issues with configurations, the [[_getAvatar]]\n     *  method may be useful.\n     */\n    async getAvatar(): Promise<null | string> {\n        const avatar = await this._getAvatar();\n        return avatar.url;\n    }\n\n    /**\n     *  When resolving an avatar, there are many steps involved, such\n     *  fetching metadata and possibly validating ownership of an\n     *  NFT.\n     *\n     *  This method can be used to examine each step and the value it\n     *  was working from.\n     */\n    async _getAvatar(): Promise<AvatarResult> {\n        const linkage: Array<AvatarLinkage> = [ { type: \"name\", value: this.name } ];\n        try {\n            // test data for ricmoo.eth\n            //const avatar = \"eip155:1/erc721:0x265385c7f4132228A0d54EB1A9e7460b91c0cC68/29233\";\n            const avatar = await this.getText(\"avatar\");\n            if (avatar == null) {\n                linkage.push({ type: \"!avatar\", value: \"\" });\n                return { url: null, linkage };\n            }\n            linkage.push({ type: \"avatar\", value: avatar });\n\n            for (let i = 0; i < matchers.length; i++) {\n                const match = avatar.match(matchers[i]);\n                if (match == null) { continue; }\n\n                const scheme = match[1].toLowerCase();\n\n                switch (scheme) {\n                    case \"https\":\n                    case \"data\":\n                        linkage.push({ type: \"url\", value: avatar });\n                        return { linkage, url: avatar };\n                    case \"ipfs\": {\n                        const url = getIpfsLink(avatar);\n                        linkage.push({ type: \"ipfs\", value: avatar });\n                        linkage.push({ type: \"url\", value: url });\n                        return { linkage, url };\n                    }\n\n                    case \"erc721\":\n                    case \"erc1155\": {\n                        // Depending on the ERC type, use tokenURI(uint256) or url(uint256)\n                        const selector = (scheme === \"erc721\") ? \"tokenURI(uint256)\": \"uri(uint256)\";\n                        linkage.push({ type: scheme, value: avatar });\n\n                        // The owner of this name\n                        const owner = await this.getAddress();\n                        if (owner == null) {\n                            linkage.push({ type: \"!owner\", value: \"\" });\n                            return { url: null, linkage };\n                        }\n\n                        const comps = (match[2] || \"\").split(\"/\");\n                        if (comps.length !== 2) {\n                            linkage.push({ type: <any>`!${ scheme }caip`, value: (match[2] || \"\") });\n                            return { url: null, linkage };\n                        }\n\n                        const tokenId = comps[1];\n\n                        const contract = new Contract(comps[0], [\n                            // ERC-721\n                            \"function tokenURI(uint) view returns (string)\",\n                            \"function ownerOf(uint) view returns (address)\",\n\n                            // ERC-1155\n                            \"function uri(uint) view returns (string)\",\n                            \"function balanceOf(address, uint256) view returns (uint)\"\n                        ], this.provider);\n\n                        // Check that this account owns the token\n                        if (scheme === \"erc721\") {\n                            const tokenOwner = await contract.ownerOf(tokenId);\n\n                            if (owner !== tokenOwner) {\n                                linkage.push({ type: \"!owner\", value: tokenOwner });\n                                return { url: null, linkage };\n                            }\n                            linkage.push({ type: \"owner\", value: tokenOwner });\n\n                        } else if (scheme === \"erc1155\") {\n                            const balance = await contract.balanceOf(owner, tokenId);\n                            if (!balance) {\n                                linkage.push({ type: \"!balance\", value: \"0\" });\n                                return { url: null, linkage };\n                            }\n                            linkage.push({ type: \"balance\", value: balance.toString() });\n                        }\n\n                        // Call the token contract for the metadata URL\n                        let metadataUrl = await contract[selector](tokenId);\n                        if (metadataUrl == null || metadataUrl === \"0x\") {\n                            linkage.push({ type: \"!metadata-url\", value: \"\" });\n                            return { url: null, linkage };\n                        }\n\n                        linkage.push({ type: \"metadata-url-base\", value: metadataUrl });\n\n                        // ERC-1155 allows a generic {id} in the URL\n                        if (scheme === \"erc1155\") {\n                            metadataUrl = metadataUrl.replace(\"{id}\", toBeHex(tokenId, 32).substring(2));\n                            linkage.push({ type: \"metadata-url-expanded\", value: metadataUrl });\n                        }\n\n                        // Transform IPFS metadata links\n                        if (metadataUrl.match(/^ipfs:/i)) {\n                            metadataUrl = getIpfsLink(metadataUrl);\n                        }\n                        linkage.push({ type: \"metadata-url\", value: metadataUrl });\n\n                        // Get the token metadata\n                        let metadata: any = { };\n                        const response = await (new FetchRequest(metadataUrl)).send();\n                        response.assertOk();\n\n                        try {\n                            metadata = response.bodyJson;\n                        } catch (error) {\n                            try {\n                                linkage.push({ type: \"!metadata\", value: response.bodyText });\n                            } catch (error) {\n                                const bytes = response.body;\n                                if (bytes) {\n                                    linkage.push({ type: \"!metadata\", value: hexlify(bytes) });\n                                }\n                                return { url: null, linkage };\n                            }\n                            return { url: null, linkage };\n                        }\n\n                        if (!metadata) {\n                            linkage.push({ type: \"!metadata\", value: \"\" });\n                            return { url: null, linkage };\n                        }\n\n                        linkage.push({ type: \"metadata\", value: JSON.stringify(metadata) });\n\n                        // Pull the image URL out\n                        let imageUrl = metadata.image;\n                        if (typeof(imageUrl) !== \"string\") {\n                            linkage.push({ type: \"!imageUrl\", value: \"\" });\n                            return { url: null, linkage };\n                        }\n\n                        if (imageUrl.match(/^(https:\\/\\/|data:)/i)) {\n                            // Allow\n                        } else {\n                            // Transform IPFS link to gateway\n                            const ipfs = imageUrl.match(matcherIpfs);\n                            if (ipfs == null) {\n                                linkage.push({ type: \"!imageUrl-ipfs\", value: imageUrl });\n                                return { url: null, linkage };\n                            }\n\n                            linkage.push({ type: \"imageUrl-ipfs\", value: imageUrl });\n                            imageUrl = getIpfsLink(imageUrl);\n                        }\n\n                        linkage.push({ type: \"url\", value: imageUrl });\n\n                        return { linkage, url: imageUrl };\n                    }\n                }\n            }\n        } catch (error) { }\n\n        return { linkage, url: null };\n    }\n\n    static async getEnsAddress(provider: Provider): Promise<string> {\n        const network = await provider.getNetwork();\n\n        const ensPlugin = network.getPlugin<EnsPlugin>(\"org.ethers.plugins.network.Ens\");\n\n        // No ENS...\n        assert(ensPlugin, \"network does not support ENS\", \"UNSUPPORTED_OPERATION\", {\n            operation: \"getEnsAddress\", info: { network } });\n\n        return ensPlugin.address;\n    }\n\n    static async #getResolver(provider: Provider, name: string): Promise<null | string> {\n        const ensAddr = await EnsResolver.getEnsAddress(provider);\n\n        try {\n            const contract = new Contract(ensAddr, [\n                \"function resolver(bytes32) view returns (address)\"\n            ], provider);\n\n            const addr = await contract.resolver(namehash(name), {\n                enableCcipRead: true\n            });\n\n            if (addr === ZeroAddress) { return null; }\n            return addr;\n\n        } catch (error) {\n            // ENS registry cannot throw errors on resolver(bytes32),\n            // so probably a link error\n            throw error;\n        }\n\n        return null;\n    }\n\n    /**\n     *  Resolve to the ENS resolver for %%name%% using %%provider%% or\n     *  ``null`` if unconfigured.\n     */\n    static async fromName(provider: AbstractProvider, name: string): Promise<null | EnsResolver> {\n\n        let currentName = name;\n        while (true) {\n            if (currentName === \"\" || currentName === \".\") { return null; }\n\n            // Optimization since the eth node cannot change and does\n            // not have a wildcard resolver\n            if (name !== \"eth\" && currentName === \"eth\") { return null; }\n\n            // Check the current node for a resolver\n            const addr = await EnsResolver.#getResolver(provider, currentName);\n\n            // Found a resolver!\n            if (addr != null) {\n                const resolver = new EnsResolver(provider, addr, name);\n\n                // Legacy resolver found, using EIP-2544 so it isn't safe to use\n                if (currentName !== name && !(await resolver.supportsWildcard())) { return null; }\n\n                return resolver;\n            }\n\n            // Get the parent node\n            currentName = currentName.split(\".\").slice(1).join(\".\");\n        }\n    }\n}\n", "/**\n *  @_ignore\n */\nimport { getAddress, getCreateAddress } from \"../address/index.js\";\nimport { Signature } from \"../crypto/index.js\"\nimport { accessListify } from \"../transaction/index.js\";\nimport {\n    getBigInt, getNumber, hexlify, isHexString, zeroPadValue,\n    assert, assertArgument\n} from \"../utils/index.js\";\n\nimport type {\n    BlockParams, LogParams,\n    TransactionReceiptParams, TransactionResponseParams,\n} from \"./formatting.js\";\n\n\nconst BN_0 = BigInt(0);\n\nexport type FormatFunc = (value: any) => any;\n\nexport function allowNull(format: FormatFunc, nullValue?: any): FormatFunc {\n    return (function(value: any) {\n        if (value == null) { return nullValue; }\n        return format(value);\n    });\n}\n\nexport function arrayOf(format: FormatFunc, allowNull?: boolean): FormatFunc {\n    return ((array: any) => {\n        if (allowNull && array == null) { return null; }\n        if (!Array.isArray(array)) { throw new Error(\"not an array\"); }\n        return array.map((i) => format(i));\n    });\n}\n\n// Requires an object which matches a fleet of other formatters\n// Any FormatFunc may return `undefined` to have the value omitted\n// from the result object. Calls preserve `this`.\nexport function object(format: Record<string, FormatFunc>, altNames?: Record<string, Array<string>>): FormatFunc {\n    return ((value: any) => {\n        const result: any = { };\n        for (const key in format) {\n            let srcKey = key;\n            if (altNames && key in altNames && !(srcKey in value)) {\n                for (const altKey of altNames[key]) {\n                    if (altKey in value) {\n                        srcKey = altKey;\n                        break;\n                    }\n                }\n            }\n\n            try {\n                const nv = format[key](value[srcKey]);\n                if (nv !== undefined) { result[key] = nv; }\n            } catch (error) {\n                const message = (error instanceof Error) ? error.message: \"not-an-error\";\n                assert(false, `invalid value for value.${ key } (${ message })`, \"BAD_DATA\", { value })\n            }\n        }\n        return result;\n    });\n}\n\nexport function formatBoolean(value: any): boolean {\n    switch (value) {\n        case true: case \"true\":\n            return true;\n        case false: case \"false\":\n            return false;\n    }\n    assertArgument(false, `invalid boolean; ${ JSON.stringify(value) }`, \"value\", value);\n}\n\nexport function formatData(value: string): string {\n    assertArgument(isHexString(value, true), \"invalid data\", \"value\", value);\n    return value;\n}\n\nexport function formatHash(value: any): string {\n    assertArgument(isHexString(value, 32), \"invalid hash\", \"value\", value);\n    return value;\n}\n\nexport function formatUint256(value: any): string {\n    if (!isHexString(value)) {\n        throw new Error(\"invalid uint256\");\n    }\n    return zeroPadValue(value, 32);\n}\n\nconst _formatLog = object({\n    address: getAddress,\n    blockHash: formatHash,\n    blockNumber: getNumber,\n    data: formatData,\n    index: getNumber,\n    removed: allowNull(formatBoolean, false),\n    topics: arrayOf(formatHash),\n    transactionHash: formatHash,\n    transactionIndex: getNumber,\n}, {\n    index: [ \"logIndex\" ]\n});\n\nexport function formatLog(value: any): LogParams {\n    return _formatLog(value);\n}\n\nconst _formatBlock = object({\n    hash: allowNull(formatHash),\n    parentHash: formatHash,\n    parentBeaconBlockRoot: allowNull(formatHash, null),\n\n    number: getNumber,\n\n    timestamp: getNumber,\n    nonce: allowNull(formatData),\n    difficulty: getBigInt,\n\n    gasLimit: getBigInt,\n    gasUsed: getBigInt,\n\n    stateRoot: allowNull(formatHash, null),\n    receiptsRoot: allowNull(formatHash, null),\n\n    blobGasUsed: allowNull(getBigInt, null),\n    excessBlobGas: allowNull(getBigInt, null),\n\n    miner: allowNull(getAddress),\n    extraData: formatData,\n\n    baseFeePerGas: allowNull(getBigInt)\n});\n\nexport function formatBlock(value: any): BlockParams {\n    const result = _formatBlock(value);\n    result.transactions = value.transactions.map((tx: string | TransactionResponseParams) => {\n        if (typeof(tx) === \"string\") { return tx; }\n        return formatTransactionResponse(tx);\n    });\n    return result;\n}\n\nconst _formatReceiptLog = object({\n    transactionIndex: getNumber,\n    blockNumber: getNumber,\n    transactionHash: formatHash,\n    address: getAddress,\n    topics: arrayOf(formatHash),\n    data: formatData,\n    index: getNumber,\n    blockHash: formatHash,\n}, {\n    index: [ \"logIndex\" ]\n});\n\nexport function formatReceiptLog(value: any): LogParams {\n    return _formatReceiptLog(value);\n}\n\nconst _formatTransactionReceipt = object({\n    to: allowNull(getAddress, null),\n    from: allowNull(getAddress, null),\n    contractAddress: allowNull(getAddress, null),\n    // should be allowNull(hash), but broken-EIP-658 support is handled in receipt\n    index: getNumber,\n    root: allowNull(hexlify),\n    gasUsed: getBigInt,\n    blobGasUsed: allowNull(getBigInt, null),\n    logsBloom: allowNull(formatData),\n    blockHash: formatHash,\n    hash: formatHash,\n    logs: arrayOf(formatReceiptLog),\n    blockNumber: getNumber,\n    //confirmations: allowNull(getNumber, null),\n    cumulativeGasUsed: getBigInt,\n    effectiveGasPrice: allowNull(getBigInt),\n    blobGasPrice: allowNull(getBigInt, null),\n    status: allowNull(getNumber),\n    type: allowNull(getNumber, 0)\n}, {\n    effectiveGasPrice: [ \"gasPrice\" ],\n    hash: [ \"transactionHash\" ],\n    index: [ \"transactionIndex\" ],\n});\n\nexport function formatTransactionReceipt(value: any): TransactionReceiptParams {\n    return _formatTransactionReceipt(value);\n}\n\nexport function formatTransactionResponse(value: any): TransactionResponseParams {\n\n    // Some clients (TestRPC) do strange things like return 0x0 for the\n    // 0 address; correct this to be a real address\n    if (value.to && getBigInt(value.to) === BN_0) {\n        value.to = \"0x0000000000000000000000000000000000000000\";\n    }\n\n    const result = object({\n        hash: formatHash,\n\n        // Some nodes do not return this, usually test nodes (like Ganache)\n        index: allowNull(getNumber, undefined),\n\n        type: (value: any) => {\n            if (value === \"0x\" || value == null) { return 0; }\n            return getNumber(value);\n        },\n        accessList: allowNull(accessListify, null),\n        blobVersionedHashes: allowNull(arrayOf(formatHash, true), null),\n\n        blockHash: allowNull(formatHash, null),\n        blockNumber: allowNull(getNumber, null),\n        transactionIndex: allowNull(getNumber, null),\n\n        from: getAddress,\n\n        // either (gasPrice) or (maxPriorityFeePerGas + maxFeePerGas) must be set\n        gasPrice: allowNull(getBigInt),\n        maxPriorityFeePerGas: allowNull(getBigInt),\n        maxFeePerGas: allowNull(getBigInt),\n        maxFeePerBlobGas: allowNull(getBigInt, null),\n\n        gasLimit: getBigInt,\n        to: allowNull(getAddress, null),\n        value: getBigInt,\n        nonce: getNumber,\n        data: formatData,\n\n        creates: allowNull(getAddress, null),\n\n        chainId: allowNull(getBigInt, null)\n    }, {\n        data: [ \"input\" ],\n        gasLimit: [ \"gas\" ],\n        index: [ \"transactionIndex\" ]\n    })(value);\n\n    // If to and creates are empty, populate the creates from the value\n    if (result.to == null && result.creates == null) {\n        result.creates = getCreateAddress(result);\n    }\n\n    // @TODO: Check fee data\n\n    // Add an access list to supported transaction types\n    if ((value.type === 1 || value.type === 2) && value.accessList == null) {\n        result.accessList = [ ];\n    }\n\n    // Compute the signature\n    if (value.signature) {\n        result.signature = Signature.from(value.signature);\n    } else {\n        result.signature = Signature.from(value);\n    }\n\n    // Some backends omit ChainId on legacy transactions, but we can compute it\n    if (result.chainId == null) {\n        const chainId = result.signature.legacyChainId;\n        if (chainId != null) { result.chainId = chainId; }\n    }\n\n\n    // @TODO: check chainID\n    /*\n    if (value.chainId != null) {\n        let chainId = value.chainId;\n\n        if (isHexString(chainId)) {\n            chainId = BigNumber.from(chainId).toNumber();\n        }\n\n        result.chainId = chainId;\n\n    } else {\n        let chainId = value.networkId;\n\n        // geth-etc returns chainId\n        if (chainId == null && result.v == null) {\n            chainId = value.chainId;\n        }\n\n        if (isHexString(chainId)) {\n            chainId = BigNumber.from(chainId).toNumber();\n        }\n\n        if (typeof(chainId) !== \"number\" && result.v != null) {\n            chainId = (result.v - 35) / 2;\n            if (chainId < 0) { chainId = 0; }\n            chainId = parseInt(chainId);\n        }\n\n        if (typeof(chainId) !== \"number\") { chainId = 0; }\n\n        result.chainId = chainId;\n    }\n    */\n\n    // 0x0000... should actually be null\n    if (result.blockHash && getBigInt(result.blockHash) === BN_0) {\n        result.blockHash = null;\n    }\n\n    return result;\n}\n", "import { defineProperties } from \"../utils/properties.js\";\n\nimport { assertArgument } from \"../utils/index.js\";\n\nimport type { FeeData, Provider } from \"./provider.js\";\nimport type { FetchRequest } from \"../utils/fetch.js\";\n\n\nconst EnsAddress = \"0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e\";\n\n/**\n *  A **NetworkPlugin** provides additional functionality on a [[Network]].\n */\nexport class NetworkPlugin {\n    /**\n     *  The name of the plugin.\n     *\n     *  It is recommended to use reverse-domain-notation, which permits\n     *  unique names with a known authority as well as hierarchal entries.\n     */\n    readonly name!: string;\n\n    /**\n     *  Creates a new **NetworkPlugin**.\n     */\n    constructor(name: string) {\n        defineProperties<NetworkPlugin>(this, { name });\n    }\n\n    /**\n     *  Creates a copy of this plugin.\n     */\n    clone(): NetworkPlugin {\n        return new NetworkPlugin(this.name);\n    }\n\n//    validate(network: Network): NetworkPlugin {\n//        return this;\n//    }\n}\n\n\n/**\n *  The gas cost parameters for a [[GasCostPlugin]].\n */\nexport type GasCostParameters = {\n    /**\n     *  The transactions base fee.\n     */\n    txBase?: number;\n\n    /**\n     *  The fee for creating a new account.\n     */\n    txCreate?: number;\n\n    /**\n     *  The fee per zero-byte in the data.\n     */\n    txDataZero?: number;\n\n    /**\n     *  The fee per non-zero-byte in the data.\n     */\n    txDataNonzero?: number;\n\n    /**\n     *  The fee per storage key in the [[link-eip-2930]] access list.\n     */\n    txAccessListStorageKey?: number;\n\n    /**\n     *  The fee per address in the [[link-eip-2930]] access list.\n     */\n    txAccessListAddress?: number;\n};\n\n/**\n *  A **GasCostPlugin** allows a network to provide alternative values when\n *  computing the intrinsic gas required for a transaction.\n */\nexport class GasCostPlugin extends NetworkPlugin implements GasCostParameters {\n    /**\n     *  The block number to treat these values as valid from.\n     *\n     *  This allows a hardfork to have updated values included as well as\n     *  mulutiple hardforks to be supported.\n     */\n    readonly effectiveBlock!: number;\n\n    /**\n     *  The transactions base fee.\n     */\n    readonly txBase!: number;\n\n    /**\n     *  The fee for creating a new account.\n     */\n    readonly txCreate!: number;\n\n    /**\n     *  The fee per zero-byte in the data.\n     */\n    readonly txDataZero!: number;\n\n    /**\n     *  The fee per non-zero-byte in the data.\n     */\n    readonly txDataNonzero!: number;\n\n    /**\n     *  The fee per storage key in the [[link-eip-2930]] access list.\n     */\n    readonly txAccessListStorageKey!: number;\n\n    /**\n     *  The fee per address in the [[link-eip-2930]] access list.\n     */\n    readonly txAccessListAddress!: number;\n\n\n    /**\n     *  Creates a new GasCostPlugin from %%effectiveBlock%% until the\n     *  latest block or another GasCostPlugin supercedes that block number,\n     *  with the associated %%costs%%.\n     */\n    constructor(effectiveBlock?: number, costs?: GasCostParameters) {\n        if (effectiveBlock == null) { effectiveBlock = 0; }\n        super(`org.ethers.network.plugins.GasCost#${ (effectiveBlock || 0) }`);\n\n        const props: Record<string, number> = { effectiveBlock };\n        function set(name: keyof GasCostParameters, nullish: number): void {\n            let value = (costs || { })[name];\n            if (value == null) { value = nullish; }\n            assertArgument(typeof(value) === \"number\", `invalud value for ${ name }`, \"costs\", costs);\n            props[name] = value;\n        }\n\n        set(\"txBase\", 21000);\n        set(\"txCreate\", 32000);\n        set(\"txDataZero\", 4);\n        set(\"txDataNonzero\", 16);\n        set(\"txAccessListStorageKey\", 1900);\n        set(\"txAccessListAddress\", 2400);\n\n        defineProperties<GasCostPlugin>(this, props);\n    }\n\n    clone(): GasCostPlugin {\n        return new GasCostPlugin(this.effectiveBlock, this);\n    }\n}\n\n/**\n *  An **EnsPlugin** allows a [[Network]] to specify the ENS Registry\n *  Contract address and the target network to use when using that\n *  contract.\n *\n *  Various testnets have their own instance of the contract to use, but\n *  in general, the mainnet instance supports multi-chain addresses and\n *  should be used.\n */\nexport class EnsPlugin extends NetworkPlugin {\n\n    /**\n     *  The ENS Registrty Contract address.\n     */\n    readonly address!: string;\n\n    /**\n     *  The chain ID that the ENS contract lives on.\n     */\n    readonly targetNetwork!: number;\n\n    /**\n     *  Creates a new **EnsPlugin** connected to %%address%% on the\n     *  %%targetNetwork%%. The default ENS address and mainnet is used\n     *  if unspecified.\n     */\n    constructor(address?: null | string, targetNetwork?: null | number) {\n        super(\"org.ethers.plugins.network.Ens\");\n        defineProperties<EnsPlugin>(this, {\n            address: (address || EnsAddress),\n            targetNetwork: ((targetNetwork == null) ? 1: targetNetwork)\n        });\n    }\n\n    clone(): EnsPlugin {\n        return new EnsPlugin(this.address, this.targetNetwork);\n    }\n}\n\n/**\n *  A **FeeDataNetworkPlugin** allows a network to provide and alternate\n *  means to specify its fee data.\n *\n *  For example, a network which does not support [[link-eip-1559]] may\n *  choose to use a Gas Station site to approximate the gas price.\n */\nexport class FeeDataNetworkPlugin extends NetworkPlugin {\n    readonly #feeDataFunc: (provider: Provider) => Promise<FeeData>;\n\n    /**\n     *  The fee data function provided to the constructor.\n     */\n    get feeDataFunc(): (provider: Provider) => Promise<FeeData> {\n        return this.#feeDataFunc;\n    }\n\n    /**\n     *  Creates a new **FeeDataNetworkPlugin**.\n     */\n    constructor(feeDataFunc: (provider: Provider) => Promise<FeeData>) {\n        super(\"org.ethers.plugins.network.FeeData\");\n        this.#feeDataFunc = feeDataFunc;\n    }\n\n    /**\n     *  Resolves to the fee data.\n     */\n    async getFeeData(provider: Provider): Promise<FeeData> {\n        return await this.#feeDataFunc(provider);\n    }\n\n    clone(): FeeDataNetworkPlugin {\n        return new FeeDataNetworkPlugin(this.#feeDataFunc);\n    }\n}\n\nexport class FetchUrlFeeDataNetworkPlugin extends NetworkPlugin {\n    readonly #url: string;\n    readonly #processFunc: (f: () => Promise<FeeData>, p: Provider, r: FetchRequest) => Promise<{ gasPrice?: null | bigint, maxFeePerGas?: null | bigint, maxPriorityFeePerGas?: null | bigint }>;\n\n    /**\n     *  The URL to initialize the FetchRequest with in %%processFunc%%.\n     */\n    get url(): string { return this.#url; }\n\n    /**\n     *  The callback to use when computing the FeeData.\n     */\n    get processFunc(): (f: () => Promise<FeeData>, p: Provider, r: FetchRequest) => Promise<{ gasPrice?: null | bigint, maxFeePerGas?: null | bigint, maxPriorityFeePerGas?: null | bigint }> { return this.#processFunc; }\n\n    /**\n     *  Creates a new **FetchUrlFeeDataNetworkPlugin** which will\n     *  be used when computing the fee data for the network.\n     */\n    constructor(url: string, processFunc: (f: () => Promise<FeeData>, p: Provider, r: FetchRequest) => Promise<{ gasPrice?: null | bigint, maxFeePerGas?: null | bigint, maxPriorityFeePerGas?: null | bigint }>) {\n        super(\"org.ethers.plugins.network.FetchUrlFeeDataPlugin\");\n        this.#url = url;\n        this.#processFunc = processFunc;\n    }\n\n    // We are immutable, so we can serve as our own clone\n    clone(): FetchUrlFeeDataNetworkPlugin { return this; }\n}\n\n/*\nexport class CustomBlockNetworkPlugin extends NetworkPlugin {\n    readonly #blockFunc: (provider: Provider, block: BlockParams<string>) => Block<string>;\n    readonly #blockWithTxsFunc: (provider: Provider, block: BlockParams<TransactionResponseParams>) => Block<TransactionResponse>;\n\n    constructor(blockFunc: (provider: Provider, block: BlockParams<string>) => Block<string>, blockWithTxsFunc: (provider: Provider, block: BlockParams<TransactionResponseParams>) => Block<TransactionResponse>) {\n        super(\"org.ethers.network-plugins.custom-block\");\n        this.#blockFunc = blockFunc;\n        this.#blockWithTxsFunc = blockWithTxsFunc;\n    }\n\n    async getBlock(provider: Provider, block: BlockParams<string>): Promise<Block<string>> {\n        return await this.#blockFunc(provider, block);\n    }\n\n    async getBlockions(provider: Provider, block: BlockParams<TransactionResponseParams>): Promise<Block<TransactionResponse>> {\n        return await this.#blockWithTxsFunc(provider, block);\n    }\n\n    clone(): CustomBlockNetworkPlugin {\n        return new CustomBlockNetworkPlugin(this.#blockFunc, this.#blockWithTxsFunc);\n    }\n}\n*/\n", "/**\n *  A **Network** encapsulates the various properties required to\n *  interact with a specific chain.\n *\n *  @_subsection: api/providers:Networks  [networks]\n */\n\nimport { accessListify } from \"../transaction/index.js\";\nimport { getBigInt, assert, assertArgument } from \"../utils/index.js\";\n\nimport {\n    EnsPlugin, FetchUrlFeeDataNetworkPlugin, GasCostPlugin\n} from \"./plugins-network.js\";\n\nimport type { BigNumberish } from \"../utils/index.js\";\nimport type { TransactionLike } from \"../transaction/index.js\";\n\nimport type { NetworkPlugin } from \"./plugins-network.js\";\n\n\n/**\n *  A Networkish can be used to allude to a Network, by specifing:\n *  - a [[Network]] object\n *  - a well-known (or registered) network name\n *  - a well-known (or registered) chain ID\n *  - an object with sufficient details to describe a network\n */\nexport type Networkish = Network | number | bigint | string | {\n    name?: string,\n    chainId?: number,\n    //layerOneConnection?: Provider,\n    ensAddress?: string,\n    ensNetwork?: number\n};\n\n\n\n\n/* * * *\n// Networks which operation against an L2 can use this plugin to\n// specify how to access L1, for the purpose of resolving ENS,\n// for example.\nexport class LayerOneConnectionPlugin extends NetworkPlugin {\n    readonly provider!: Provider;\n// @TODO: Rename to ChainAccess and allow for connecting to any chain\n    constructor(provider: Provider) {\n        super(\"org.ethers.plugins.layer-one-connection\");\n        defineProperties<LayerOneConnectionPlugin>(this, { provider });\n    }\n\n    clone(): LayerOneConnectionPlugin {\n        return new LayerOneConnectionPlugin(this.provider);\n    }\n}\n*/\n\n\nconst Networks: Map<string | bigint, () => Network> = new Map();\n\n\n/**\n *  A **Network** provides access to a chain's properties and allows\n *  for plug-ins to extend functionality.\n */\nexport class Network {\n    #name: string;\n    #chainId: bigint;\n\n    #plugins: Map<string, NetworkPlugin>;\n\n    /**\n     *  Creates a new **Network** for %%name%% and %%chainId%%.\n     */\n    constructor(name: string, chainId: BigNumberish) {\n        this.#name = name;\n        this.#chainId = getBigInt(chainId);\n        this.#plugins = new Map();\n    }\n\n    /**\n     *  Returns a JSON-compatible representation of a Network.\n     */\n    toJSON(): any {\n        return { name: this.name, chainId: String(this.chainId) };\n    }\n\n    /**\n     *  The network common name.\n     *\n     *  This is the canonical name, as networks migh have multiple\n     *  names.\n     */\n    get name(): string { return this.#name; }\n    set name(value: string) { this.#name =  value; }\n\n    /**\n     *  The network chain ID.\n     */\n    get chainId(): bigint { return this.#chainId; }\n    set chainId(value: BigNumberish) { this.#chainId = getBigInt(value, \"chainId\"); }\n\n    /**\n     *  Returns true if %%other%% matches this network. Any chain ID\n     *  must match, and if no chain ID is present, the name must match.\n     *\n     *  This method does not currently check for additional properties,\n     *  such as ENS address or plug-in compatibility.\n     */\n    matches(other: Networkish): boolean {\n        if (other == null) { return false; }\n\n        if (typeof(other) === \"string\") {\n            try {\n                return (this.chainId === getBigInt(other));\n            } catch (error) { }\n            return (this.name === other);\n        }\n\n        if (typeof(other) === \"number\" || typeof(other) === \"bigint\") {\n            try {\n                return (this.chainId === getBigInt(other));\n            } catch (error) { }\n            return false;\n        }\n\n        if (typeof(other) === \"object\") {\n            if (other.chainId != null) {\n                try {\n                    return (this.chainId === getBigInt(other.chainId));\n                } catch (error) { }\n                return false;\n            }\n            if (other.name != null) {\n                return (this.name === other.name);\n            }\n            return false;\n        }\n\n        return false;\n    }\n\n    /**\n     *  Returns the list of plugins currently attached to this Network.\n     */\n    get plugins(): Array<NetworkPlugin> {\n        return Array.from(this.#plugins.values());\n    }\n\n    /**\n     *  Attach a new %%plugin%% to this Network. The network name\n     *  must be unique, excluding any fragment.\n     */\n    attachPlugin(plugin: NetworkPlugin): this {\n        if (this.#plugins.get(plugin.name)) {\n            throw new Error(`cannot replace existing plugin: ${ plugin.name } `);\n        }\n        this.#plugins.set(plugin.name, plugin.clone());\n        return this;\n    }\n\n    /**\n     *  Return the plugin, if any, matching %%name%% exactly. Plugins\n     *  with fragments will not be returned unless %%name%% includes\n     *  a fragment.\n     */\n    getPlugin<T extends NetworkPlugin = NetworkPlugin>(name: string): null | T {\n        return <T>(this.#plugins.get(name)) || null;\n    }\n\n    /**\n     *  Gets a list of all plugins that match %%name%%, with otr without\n     *  a fragment.\n     */\n    getPlugins<T extends NetworkPlugin = NetworkPlugin>(basename: string): Array<T> {\n        return <Array<T>>(this.plugins.filter((p) => (p.name.split(\"#\")[0] === basename)));\n    }\n\n    /**\n     *  Create a copy of this Network.\n     */\n    clone(): Network {\n        const clone = new Network(this.name, this.chainId);\n        this.plugins.forEach((plugin) => {\n            clone.attachPlugin(plugin.clone());\n        });\n        return clone;\n    }\n\n    /**\n     *  Compute the intrinsic gas required for a transaction.\n     *\n     *  A GasCostPlugin can be attached to override the default\n     *  values.\n     */\n    computeIntrinsicGas(tx: TransactionLike): number {\n        const costs = this.getPlugin<GasCostPlugin>(\"org.ethers.plugins.network.GasCost\") || (new GasCostPlugin());\n\n        let gas = costs.txBase;\n        if (tx.to == null) { gas += costs.txCreate; }\n        if (tx.data) {\n            for (let i = 2; i < tx.data.length; i += 2) {\n                if (tx.data.substring(i, i + 2) === \"00\") {\n                    gas += costs.txDataZero;\n                } else {\n                    gas += costs.txDataNonzero;\n                }\n            }\n        }\n\n        if (tx.accessList) {\n            const accessList = accessListify(tx.accessList);\n            for (const addr in accessList) {\n                gas += costs.txAccessListAddress + costs.txAccessListStorageKey * accessList[addr].storageKeys.length;\n            }\n        }\n\n        return gas;\n    }\n\n    /**\n     *  Returns a new Network for the %%network%% name or chainId.\n     */\n    static from(network?: Networkish): Network {\n        injectCommonNetworks();\n\n        // Default network\n        if (network == null) { return Network.from(\"mainnet\"); }\n\n        // Canonical name or chain ID\n        if (typeof(network) === \"number\") { network = BigInt(network); }\n        if (typeof(network) === \"string\" || typeof(network) === \"bigint\") {\n            const networkFunc = Networks.get(network);\n            if (networkFunc) { return networkFunc(); }\n            if (typeof(network) === \"bigint\") {\n                return new Network(\"unknown\", network);\n            }\n\n            assertArgument(false, \"unknown network\", \"network\", network);\n        }\n\n        // Clonable with network-like abilities\n        if (typeof((<Network>network).clone) === \"function\") {\n            const clone = (<Network>network).clone();\n            //if (typeof(network.name) !== \"string\" || typeof(network.chainId) !== \"number\") {\n            //}\n            return clone;\n        }\n\n        // Networkish\n        if (typeof(network) === \"object\") {\n            assertArgument(typeof(network.name) === \"string\" && typeof(network.chainId) === \"number\",\n                \"invalid network object name or chainId\", \"network\", network);\n\n            const custom = new Network(<string>(network.name), <number>(network.chainId));\n\n            if ((<any>network).ensAddress || (<any>network).ensNetwork != null) {\n                custom.attachPlugin(new EnsPlugin((<any>network).ensAddress, (<any>network).ensNetwork));\n            }\n\n            //if ((<any>network).layerOneConnection) {\n            //    custom.attachPlugin(new LayerOneConnectionPlugin((<any>network).layerOneConnection));\n            //}\n\n            return custom;\n        }\n\n        assertArgument(false, \"invalid network\", \"network\", network);\n    }\n\n    /**\n     *  Register %%nameOrChainId%% with a function which returns\n     *  an instance of a Network representing that chain.\n     */\n    static register(nameOrChainId: string | number | bigint, networkFunc: () => Network): void {\n        if (typeof(nameOrChainId) === \"number\") { nameOrChainId = BigInt(nameOrChainId); }\n        const existing = Networks.get(nameOrChainId);\n        if (existing) {\n            assertArgument(false, `conflicting network for ${ JSON.stringify(existing.name) }`, \"nameOrChainId\", nameOrChainId);\n        }\n        Networks.set(nameOrChainId, networkFunc);\n    }\n}\n\n\ntype Options = {\n    ensNetwork?: number;\n    altNames?: Array<string>;\n    plugins?: Array<NetworkPlugin>;\n};\n\n// We don't want to bring in formatUnits because it is backed by\n// FixedNumber and we want to keep Networks tiny. The values\n// included by the Gas Stations are also IEEE 754 with lots of\n// rounding issues and exceed the strict checks formatUnits has.\nfunction parseUnits(_value: number | string, decimals: number): bigint {\n    const value = String(_value);\n    if (!value.match(/^[0-9.]+$/)) {\n        throw new Error(`invalid gwei value: ${ _value }`);\n    }\n\n    // Break into [ whole, fraction ]\n    const comps = value.split(\".\");\n    if (comps.length === 1) { comps.push(\"\"); }\n\n    // More than 1 decimal point or too many fractional positions\n    if (comps.length !== 2) {\n        throw new Error(`invalid gwei value: ${ _value }`);\n    }\n\n    // Pad the fraction to 9 decimalplaces\n    while (comps[1].length < decimals) { comps[1] += \"0\"; }\n\n    // Too many decimals and some non-zero ending, take the ceiling\n    if (comps[1].length > 9) {\n        let frac = BigInt(comps[1].substring(0, 9));\n        if (!comps[1].substring(9).match(/^0+$/)) { frac++; }\n        comps[1] = frac.toString();\n    }\n\n    return BigInt(comps[0] + comps[1]);\n}\n\n// Used by Polygon to use a gas station for fee data\nfunction getGasStationPlugin(url: string) {\n    return new FetchUrlFeeDataNetworkPlugin(url, async (fetchFeeData, provider, request) => {\n\n        // Prevent Cloudflare from blocking our request in node.js\n        request.setHeader(\"User-Agent\", \"ethers\");\n\n        let response;\n        try {\n            const [ _response, _feeData ] = await Promise.all([\n                request.send(), fetchFeeData()\n            ]);\n            response = _response;\n            const payload = response.bodyJson.standard;\n            const feeData = {\n                gasPrice: _feeData.gasPrice,\n                maxFeePerGas: parseUnits(payload.maxFee, 9),\n                maxPriorityFeePerGas: parseUnits(payload.maxPriorityFee, 9),\n            };\n            return feeData;\n        } catch (error: any) {\n            assert(false, `error encountered with polygon gas station (${ JSON.stringify(request.url) })`, \"SERVER_ERROR\", { request, response, error });\n        }\n    });\n}\n\n// See: https://chainlist.org\nlet injected = false;\nfunction injectCommonNetworks(): void {\n    if (injected) { return; }\n    injected = true;\n\n    /// Register popular Ethereum networks\n    function registerEth(name: string, chainId: number, options: Options): void {\n        const func = function() {\n            const network = new Network(name, chainId);\n\n            // We use 0 to disable ENS\n            if (options.ensNetwork != null) {\n                network.attachPlugin(new EnsPlugin(null, options.ensNetwork));\n            }\n\n            network.attachPlugin(new GasCostPlugin());\n\n            (options.plugins || []).forEach((plugin) => {\n                network.attachPlugin(plugin);\n            });\n\n            return network;\n        };\n\n        // Register the network by name and chain ID\n        Network.register(name, func);\n        Network.register(chainId, func);\n\n        if (options.altNames) {\n            options.altNames.forEach((name) => {\n                Network.register(name, func);\n            });\n        }\n    }\n\n    registerEth(\"mainnet\", 1, { ensNetwork: 1, altNames: [ \"homestead\" ] });\n    registerEth(\"ropsten\", 3, { ensNetwork: 3 });\n    registerEth(\"rinkeby\", 4, { ensNetwork: 4 });\n    registerEth(\"goerli\", 5, { ensNetwork: 5 });\n    registerEth(\"kovan\", 42, { ensNetwork: 42 });\n    registerEth(\"sepolia\", 11155111, { ensNetwork: 11155111 });\n    registerEth(\"holesky\", 17000, { ensNetwork: 17000 });\n\n    registerEth(\"classic\", 61, { });\n    registerEth(\"classicKotti\", 6, { });\n\n    registerEth(\"arbitrum\", 42161, {\n        ensNetwork: 1,\n    });\n    registerEth(\"arbitrum-goerli\", 421613, { });\n    registerEth(\"arbitrum-sepolia\", 421614, { });\n\n    registerEth(\"base\", 8453, { ensNetwork: 1 });\n    registerEth(\"base-goerli\", 84531, { });\n    registerEth(\"base-sepolia\", 84532, { });\n\n    registerEth(\"bnb\", 56, { ensNetwork: 1 });\n    registerEth(\"bnbt\", 97, { });\n\n    registerEth(\"linea\", 59144, { ensNetwork: 1 });\n    registerEth(\"linea-goerli\", 59140, { });\n\n    registerEth(\"matic\", 137, {\n        ensNetwork: 1,\n        plugins: [\n            getGasStationPlugin(\"https:/\\/gasstation.polygon.technology/v2\")\n        ]\n    });\n    registerEth(\"matic-mumbai\", 80001, {\n        altNames: [ \"maticMumbai\", \"maticmum\" ],  // @TODO: Future remove these alts\n        plugins: [\n            getGasStationPlugin(\"https:/\\/gasstation-testnet.polygon.technology/v2\")\n        ]\n    });\n\n    registerEth(\"optimism\", 10, {\n        ensNetwork: 1,\n        plugins: [ ]\n    });\n    registerEth(\"optimism-goerli\", 420, { });\n    registerEth(\"optimism-sepolia\", 11155420, { });\n\n    registerEth(\"xdai\", 100, { ensNetwork: 1 });\n}\n", "import { assert, isHexString } from \"../utils/index.js\";\n\nimport type { AbstractProvider, Subscriber } from \"./abstract-provider.js\";\nimport type { EventFilter, OrphanFilter, ProviderEvent } from \"./provider.js\";\n\nfunction copy(obj: any): any {\n    return JSON.parse(JSON.stringify(obj));\n}\n\n/**\n *  Return the polling subscriber for common events.\n *\n *  @_docloc: api/providers/abstract-provider\n */\nexport function getPollingSubscriber(provider: AbstractProvider, event: ProviderEvent): Subscriber {\n    if (event === \"block\") { return new PollingBlockSubscriber(provider); }\n    if (isHexString(event, 32)) { return new PollingTransactionSubscriber(provider, event); }\n\n    assert(false, \"unsupported polling event\", \"UNSUPPORTED_OPERATION\", {\n        operation: \"getPollingSubscriber\", info: { event }\n    });\n}\n\n// @TODO: refactor this\n\n/**\n *  A **PollingBlockSubscriber** polls at a regular interval for a change\n *  in the block number.\n *\n *  @_docloc: api/providers/abstract-provider\n */\nexport class PollingBlockSubscriber implements Subscriber {\n    #provider: AbstractProvider;\n    #poller: null | number;\n\n    #interval: number;\n\n    // The most recent block we have scanned for events. The value -2\n    // indicates we still need to fetch an initial block number\n    #blockNumber: number;\n\n    /**\n     *  Create a new **PollingBlockSubscriber** attached to %%provider%%.\n     */\n    constructor(provider: AbstractProvider) {\n        this.#provider = provider;\n        this.#poller = null;\n        this.#interval = 4000;\n\n        this.#blockNumber = -2;\n    }\n\n    /**\n     *  The polling interval.\n     */\n    get pollingInterval(): number { return this.#interval; }\n    set pollingInterval(value: number) { this.#interval = value; }\n\n    async #poll(): Promise<void> {\n        try {\n            const blockNumber = await this.#provider.getBlockNumber();\n\n            // Bootstrap poll to setup our initial block number\n            if (this.#blockNumber === -2) {\n                this.#blockNumber = blockNumber;\n                return;\n            }\n\n            // @TODO: Put a cap on the maximum number of events per loop?\n\n            if (blockNumber !== this.#blockNumber) {\n                for (let b = this.#blockNumber + 1; b <= blockNumber; b++) {\n                    // We have been stopped\n                    if (this.#poller == null) { return; }\n\n                    await this.#provider.emit(\"block\", b);\n                }\n\n                this.#blockNumber = blockNumber;\n            }\n\n        } catch (error) {\n            // @TODO: Minor bump, add an \"error\" event to let subscribers\n            //        know things went awry.\n            //console.log(error);\n        }\n\n        // We have been stopped\n        if (this.#poller == null) { return; }\n\n        this.#poller = this.#provider._setTimeout(this.#poll.bind(this), this.#interval);\n    }\n\n    start(): void {\n        if (this.#poller) { return; }\n        this.#poller = this.#provider._setTimeout(this.#poll.bind(this), this.#interval);\n        this.#poll();\n    }\n\n    stop(): void {\n        if (!this.#poller) { return; }\n        this.#provider._clearTimeout(this.#poller);\n        this.#poller = null;\n    }\n\n    pause(dropWhilePaused?: boolean): void {\n        this.stop();\n        if (dropWhilePaused) { this.#blockNumber = -2; }\n    }\n\n    resume(): void {\n        this.start();\n    }\n}\n\n\n/**\n *  An **OnBlockSubscriber** can be sub-classed, with a [[_poll]]\n *  implmentation which will be called on every new block.\n *\n *  @_docloc: api/providers/abstract-provider\n */\nexport class OnBlockSubscriber implements Subscriber {\n    #provider: AbstractProvider;\n    #poll: (b: number) => void;\n    #running: boolean;\n\n    /**\n     *  Create a new **OnBlockSubscriber** attached to %%provider%%.\n     */\n    constructor(provider: AbstractProvider) {\n        this.#provider = provider;\n        this.#running = false;\n        this.#poll = (blockNumber: number) => {\n            this._poll(blockNumber, this.#provider);\n        }\n    }\n\n    /**\n     *  Called on every new block.\n     */\n    async _poll(blockNumber: number, provider: AbstractProvider): Promise<void> {\n        throw new Error(\"sub-classes must override this\");\n    }\n\n    start(): void {\n        if (this.#running) { return; }\n        this.#running = true;\n\n        this.#poll(-2);\n        this.#provider.on(\"block\", this.#poll);\n    }\n\n    stop(): void {\n        if (!this.#running) { return; }\n        this.#running = false;\n\n        this.#provider.off(\"block\", this.#poll);\n    }\n\n    pause(dropWhilePaused?: boolean): void { this.stop(); }\n    resume(): void { this.start(); }\n}\n\nexport class PollingBlockTagSubscriber extends OnBlockSubscriber {\n    readonly #tag: string;\n    #lastBlock: number;\n\n    constructor(provider: AbstractProvider, tag: string) {\n        super(provider);\n        this.#tag = tag;\n        this.#lastBlock = -2;\n    }\n\n    pause(dropWhilePaused?: boolean): void {\n        if (dropWhilePaused) { this.#lastBlock = -2; }\n        super.pause(dropWhilePaused);\n    }\n\n    async _poll(blockNumber: number, provider: AbstractProvider): Promise<void> {\n        const block = await provider.getBlock(this.#tag);\n        if (block == null) { return; }\n\n        if (this.#lastBlock === -2) {\n            this.#lastBlock = block.number;\n        } else if (block.number > this.#lastBlock) {\n            provider.emit(this.#tag, block.number);\n            this.#lastBlock = block.number;\n        }\n    }\n}\n\n\n/**\n *  @_ignore:\n *\n *  @_docloc: api/providers/abstract-provider\n */\nexport class PollingOrphanSubscriber extends OnBlockSubscriber {\n    #filter: OrphanFilter;\n\n    constructor(provider: AbstractProvider, filter: OrphanFilter) {\n        super(provider);\n        this.#filter = copy(filter);\n    }\n\n    async _poll(blockNumber: number, provider: AbstractProvider): Promise<void> {\n        throw new Error(\"@TODO\");\n        console.log(this.#filter);\n    }\n}\n\n/**\n *  A **PollingTransactionSubscriber** will poll for a given transaction\n *  hash for its receipt.\n *\n *  @_docloc: api/providers/abstract-provider\n */\nexport class PollingTransactionSubscriber extends OnBlockSubscriber {\n    #hash: string;\n\n    /**\n     *  Create a new **PollingTransactionSubscriber** attached to\n     *  %%provider%%, listening for %%hash%%.\n     */\n    constructor(provider: AbstractProvider, hash: string) {\n        super(provider);\n        this.#hash = hash;\n    }\n\n    async _poll(blockNumber: number, provider: AbstractProvider): Promise<void> {\n        const tx = await provider.getTransactionReceipt(this.#hash);\n        if (tx) { provider.emit(this.#hash, tx); }\n    }\n}\n\n/**\n *  A **PollingEventSubscriber** will poll for a given filter for its logs.\n *\n *  @_docloc: api/providers/abstract-provider\n */\nexport class PollingEventSubscriber implements Subscriber {\n    #provider: AbstractProvider;\n    #filter: EventFilter;\n    #poller: (b: number) => void;\n\n    #running: boolean;\n\n    // The most recent block we have scanned for events. The value -2\n    // indicates we still need to fetch an initial block number\n    #blockNumber: number;\n\n    /**\n     *  Create a new **PollingTransactionSubscriber** attached to\n     *  %%provider%%, listening for %%filter%%.\n     */\n    constructor(provider: AbstractProvider, filter: EventFilter) {\n        this.#provider = provider;\n        this.#filter = copy(filter);\n        this.#poller = this.#poll.bind(this);\n        this.#running = false;\n        this.#blockNumber = -2;\n    }\n\n    async #poll(blockNumber: number): Promise<void> {\n        // The initial block hasn't been determined yet\n        if (this.#blockNumber === -2) { return; }\n\n        const filter = copy(this.#filter);\n        filter.fromBlock = this.#blockNumber + 1;\n        filter.toBlock = blockNumber;\n\n        const logs = await this.#provider.getLogs(filter);\n\n        // No logs could just mean the node has not indexed them yet,\n        // so we keep a sliding window of 60 blocks to keep scanning\n        if (logs.length === 0) {\n            if (this.#blockNumber < blockNumber - 60) {\n                this.#blockNumber = blockNumber - 60;\n            }\n            return;\n        }\n\n        for (const log of logs) {\n            this.#provider.emit(this.#filter, log);\n\n            // Only advance the block number when logs were found to\n            // account for networks (like BNB and Polygon) which may\n            // sacrifice event consistency for block event speed\n            this.#blockNumber = log.blockNumber;\n        }\n    }\n\n    start(): void {\n        if (this.#running) { return; }\n        this.#running = true;\n\n        if (this.#blockNumber === -2) {\n            this.#provider.getBlockNumber().then((blockNumber) => {\n                this.#blockNumber = blockNumber;\n            });\n        }\n        this.#provider.on(\"block\", this.#poller);\n    }\n\n    stop(): void {\n        if (!this.#running) { return; }\n        this.#running = false;\n\n        this.#provider.off(\"block\", this.#poller);\n    }\n\n    pause(dropWhilePaused?: boolean): void {\n        this.stop();\n        if (dropWhilePaused) { this.#blockNumber = -2; }\n    }\n\n    resume(): void {\n        this.start();\n    }\n}\n", "/**\n *  The available providers should suffice for most developers purposes,\n *  but the [[AbstractProvider]] class has many features which enable\n *  sub-classing it for specific purposes.\n *\n *  @_section: api/providers/abstract-provider: Subclassing Provider  [abstract-provider]\n */\n\n// @TODO\n// Event coalescence\n//   When we register an event with an async value (e.g. address is a Signer\n//   or ENS name), we need to add it immeidately for the Event API, but also\n//   need time to resolve the address. Upon resolving the address, we need to\n//   migrate the listener to the static event. We also need to maintain a map\n//   of Signer/ENS name to address so we can sync respond to listenerCount.\n\nimport { getAddress, resolveAddress } from \"../address/index.js\";\nimport { ZeroAddress } from \"../constants/index.js\";\nimport { Contract } from \"../contract/index.js\";\nimport { namehash } from \"../hash/index.js\";\nimport { Transaction } from \"../transaction/index.js\";\nimport {\n    concat, dataLength, dataSlice, hexlify, isHexString,\n    getBigInt, getBytes, getNumber,\n    isCallException, isError, makeError, assert, assertArgument,\n    FetchRequest,\n    toBeArray, toQuantity,\n    defineProperties, EventPayload, resolveProperties,\n    toUtf8String\n} from \"../utils/index.js\";\n\nimport { EnsResolver } from \"./ens-resolver.js\";\nimport {\n    formatBlock, formatLog, formatTransactionReceipt, formatTransactionResponse\n} from \"./format.js\";\nimport { Network } from \"./network.js\";\nimport { copyRequest, Block, FeeData, Log, TransactionReceipt, TransactionResponse } from \"./provider.js\";\nimport {\n    PollingBlockSubscriber, PollingBlockTagSubscriber, PollingEventSubscriber,\n    PollingOrphanSubscriber, PollingTransactionSubscriber\n} from \"./subscriber-polling.js\";\n\nimport type { Addressable, AddressLike } from \"../address/index.js\";\nimport type { BigNumberish, BytesLike } from \"../utils/index.js\";\nimport type { Listener } from \"../utils/index.js\";\n\nimport type { Networkish } from \"./network.js\";\nimport type { FetchUrlFeeDataNetworkPlugin } from \"./plugins-network.js\";\n//import type { MaxPriorityFeePlugin } from \"./plugins-network.js\";\nimport type {\n    BlockParams, LogParams, TransactionReceiptParams,\n    TransactionResponseParams\n} from \"./formatting.js\";\n\nimport type {\n    BlockTag, EventFilter, Filter, FilterByBlockHash, OrphanFilter,\n    PreparedTransactionRequest, Provider, ProviderEvent,\n    TransactionRequest\n} from \"./provider.js\";\n\ntype Timer = ReturnType<typeof setTimeout>;\n\n\n// Constants\nconst BN_2 = BigInt(2);\n\nconst MAX_CCIP_REDIRECTS = 10;\n\nfunction isPromise<T = any>(value: any): value is Promise<T> {\n    return (value && typeof(value.then) === \"function\");\n}\n\nfunction getTag(prefix: string, value: any): string {\n    return prefix + \":\" + JSON.stringify(value, (k, v) => {\n        if (v == null) { return \"null\"; }\n        if (typeof(v) === \"bigint\") { return `bigint:${ v.toString() }`}\n        if (typeof(v) === \"string\") { return v.toLowerCase(); }\n\n        // Sort object keys\n        if (typeof(v) === \"object\" && !Array.isArray(v)) {\n            const keys = Object.keys(v);\n            keys.sort();\n            return keys.reduce((accum, key) => {\n                accum[key] = v[key];\n                return accum;\n            }, <any>{ });\n        }\n\n        return v;\n    });\n}\n\n/**\n *  The types of additional event values that can be emitted for the\n *  ``\"debug\"`` event.\n */\nexport type DebugEventAbstractProvider = {\n    action: \"sendCcipReadFetchRequest\",\n    request: FetchRequest\n    index: number\n    urls: Array<string>\n} | {\n    action: \"receiveCcipReadFetchResult\",\n    request: FetchRequest,\n    result: any\n} | {\n    action: \"receiveCcipReadFetchError\",\n    request: FetchRequest,\n    result: any\n} | {\n    action: \"sendCcipReadCall\",\n    transaction: { to: string, data: string }\n} | {\n    action: \"receiveCcipReadCallResult\",\n    transaction: { to: string, data: string }\n    result: string\n} | {\n    action: \"receiveCcipReadCallError\",\n    transaction: { to: string, data: string }\n    error: Error\n};\n\n\n/**\n *  The value passed to the [[AbstractProvider-_getSubscriber]] method.\n *\n *  Only developers sub-classing [[AbstractProvider[[ will care about this,\n *  if they are modifying a low-level feature of how subscriptions operate.\n */\nexport type Subscription = {\n    type: \"block\" | \"close\" | \"debug\" | \"error\" | \"finalized\" | \"network\" | \"pending\" | \"safe\",\n    tag: string\n} | {\n    type: \"transaction\",\n    tag: string,\n    hash: string\n} | {\n    type: \"event\",\n    tag: string,\n    filter: EventFilter\n} | {\n    type: \"orphan\",\n    tag: string,\n    filter: OrphanFilter\n};\n\n/**\n *  A **Subscriber** manages a subscription.\n *\n *  Only developers sub-classing [[AbstractProvider[[ will care about this,\n *  if they are modifying a low-level feature of how subscriptions operate.\n */\nexport interface Subscriber {\n    /**\n     *  Called initially when a subscriber is added the first time.\n     */\n    start(): void;\n\n    /**\n     *  Called when there are no more subscribers to the event.\n     */\n    stop(): void;\n\n    /**\n     *  Called when the subscription should pause.\n     *\n     *  If %%dropWhilePaused%%, events that occur while paused should not\n     *  be emitted [[resume]].\n     */\n    pause(dropWhilePaused?: boolean): void;\n\n    /**\n     *  Resume a paused subscriber.\n     */\n    resume(): void;\n\n    /**\n     *  The frequency (in ms) to poll for events, if polling is used by\n     *  the subscriber.\n     *\n     *  For non-polling subscribers, this must return ``undefined``.\n     */\n    pollingInterval?: number;\n}\n\n/**\n *  An **UnmanagedSubscriber** is useful for events which do not require\n *  any additional management, such as ``\"debug\"`` which only requires\n *  emit in synchronous event loop triggered calls.\n */\nexport class UnmanagedSubscriber implements Subscriber {\n    /**\n     *  The name fof the event.\n     */\n    name!: string;\n\n    /**\n     *  Create a new UnmanagedSubscriber with %%name%%.\n     */\n    constructor(name: string) { defineProperties<UnmanagedSubscriber>(this, { name }); }\n\n    start(): void { }\n    stop(): void { }\n\n    pause(dropWhilePaused?: boolean): void { }\n    resume(): void { }\n}\n\ntype Sub = {\n    tag: string;\n    nameMap: Map<string, string>\n    addressableMap: WeakMap<Addressable, string>;\n    listeners: Array<{ listener: Listener, once: boolean }>;\n    // @TODO: get rid of this, as it is (and has to be)\n    // tracked in subscriber\n    started: boolean;\n    subscriber: Subscriber;\n};\n\nfunction copy<T = any>(value: T): T {\n    return JSON.parse(JSON.stringify(value));\n}\n\nfunction concisify(items: Array<string>): Array<string> {\n    items = Array.from((new Set(items)).values())\n    items.sort();\n    return items;\n}\n\n\nasync function getSubscription(_event: ProviderEvent, provider: AbstractProvider): Promise<Subscription> {\n    if (_event == null) { throw new Error(\"invalid event\"); }\n\n    // Normalize topic array info an EventFilter\n    if (Array.isArray(_event)) { _event = { topics: _event }; }\n\n    if (typeof(_event) === \"string\") {\n        switch (_event) {\n            case \"block\":\n            case \"debug\":\n            case \"error\":\n            case \"finalized\":\n            case \"network\":\n            case \"pending\":\n            case \"safe\": {\n                return { type: _event, tag: _event };\n            }\n        }\n    }\n\n    if (isHexString(_event, 32)) {\n        const hash = _event.toLowerCase();\n        return { type: \"transaction\", tag: getTag(\"tx\", { hash }), hash };\n    }\n\n    if ((<any>_event).orphan) {\n        const event = <OrphanFilter>_event;\n        // @TODO: Should lowercase and whatnot things here instead of copy...\n        return { type: \"orphan\", tag: getTag(\"orphan\", event), filter: copy(event) };\n    }\n\n    if (((<any>_event).address || (<any>_event).topics)) {\n        const event = <EventFilter>_event;\n\n        const filter: any = {\n            topics: ((event.topics || []).map((t) => {\n                if (t == null) { return null; }\n                if (Array.isArray(t)) {\n                    return concisify(t.map((t) => t.toLowerCase()));\n                }\n                return t.toLowerCase();\n            }))\n        };\n\n        if (event.address) {\n            const addresses: Array<string> = [ ];\n            const promises: Array<Promise<void>> = [ ];\n\n            const addAddress = (addr: AddressLike) => {\n                if (isHexString(addr)) {\n                    addresses.push(addr);\n                } else {\n                    promises.push((async () => {\n                        addresses.push(await resolveAddress(addr, provider));\n                    })());\n                }\n            }\n\n            if (Array.isArray(event.address)) {\n                event.address.forEach(addAddress);\n            } else {\n                addAddress(event.address);\n            }\n            if (promises.length) { await Promise.all(promises); }\n            filter.address = concisify(addresses.map((a) => a.toLowerCase()));\n        }\n\n        return { filter, tag: getTag(\"event\", filter), type: \"event\" };\n    }\n\n    assertArgument(false, \"unknown ProviderEvent\", \"event\", _event);\n}\n\nfunction getTime(): number { return (new Date()).getTime(); }\n\n/**\n *  An **AbstractPlugin** is used to provide additional internal services\n *  to an [[AbstractProvider]] without adding backwards-incompatible changes\n *  to method signatures or other internal and complex logic.\n */\nexport interface AbstractProviderPlugin {\n    /**\n     *  The reverse domain notation of the plugin.\n     */\n    readonly name: string;\n\n    /**\n     *  Creates a new instance of the plugin, connected to %%provider%%.\n     */\n    connect(provider: AbstractProvider): AbstractProviderPlugin;\n}\n\n/**\n *  A normalized filter used for [[PerformActionRequest]] objects.\n */\nexport type PerformActionFilter = {\n    address?: string | Array<string>;\n    topics?: Array<null | string | Array<string>>;\n    fromBlock?: BlockTag;\n    toBlock?: BlockTag;\n} | {\n    address?: string | Array<string>;\n    topics?: Array<null | string | Array<string>>;\n    blockHash?: string;\n};\n\n/**\n *  A normalized transactions used for [[PerformActionRequest]] objects.\n */\nexport interface PerformActionTransaction extends PreparedTransactionRequest {\n    /**\n     *  The ``to`` address of the transaction.\n     */\n    to?: string;\n\n    /**\n     *  The sender of the transaction.\n     */\n    from?: string;\n}\n\n/**\n *  The [[AbstractProvider]] methods will normalize all values and pass this\n *  type to [[AbstractProvider-_perform]].\n */\nexport type PerformActionRequest = {\n    method: \"broadcastTransaction\",\n    signedTransaction: string\n} | {\n    method: \"call\",\n    transaction: PerformActionTransaction, blockTag: BlockTag\n} | {\n    method: \"chainId\"\n} | {\n    method: \"estimateGas\",\n    transaction: PerformActionTransaction\n} | {\n    method: \"getBalance\",\n    address: string, blockTag: BlockTag\n} | {\n    method: \"getBlock\",\n    blockTag: BlockTag, includeTransactions: boolean\n} | {\n    method: \"getBlock\",\n    blockHash: string, includeTransactions: boolean\n} | {\n    method: \"getBlockNumber\"\n} | {\n    method: \"getCode\",\n    address: string, blockTag: BlockTag\n} | {\n    method: \"getGasPrice\"\n} | {\n    method: \"getLogs\",\n    filter: PerformActionFilter\n} | {\n    method: \"getPriorityFee\"\n} | {\n    method: \"getStorage\",\n    address: string, position: bigint, blockTag: BlockTag\n} | {\n    method: \"getTransaction\",\n    hash: string\n} | {\n    method: \"getTransactionCount\",\n    address: string, blockTag: BlockTag\n} | {\n    method: \"getTransactionReceipt\",\n    hash: string\n} | {\n    method: \"getTransactionResult\",\n    hash: string\n};\n\ntype _PerformAccountRequest = {\n    method: \"getBalance\" | \"getTransactionCount\" | \"getCode\"\n} | {\n    method: \"getStorage\", position: bigint\n}\n\n/**\n *  Options for configuring some internal aspects of an [[AbstractProvider]].\n *\n *  **``cacheTimeout``** - how long to cache a low-level ``_perform``\n *  for, based on input parameters. This reduces the number of calls\n *  to getChainId and getBlockNumber, but may break test chains which\n *  can perform operations (internally) synchronously. Use ``-1`` to\n *  disable, ``0`` will only buffer within the same event loop and\n *  any other value is in ms. (default: ``250``)\n */\nexport type AbstractProviderOptions = {\n    cacheTimeout?: number;\n    pollingInterval?: number;\n};\n\nconst defaultOptions = {\n    cacheTimeout: 250,\n    pollingInterval: 4000\n};\n\ntype CcipArgs = {\n    sender: string;\n    urls: Array<string>;\n    calldata: string;\n    selector: string;\n    extraData: string;\n    errorArgs: Array<any>\n};\n\n/**\n *  An **AbstractProvider** provides a base class for other sub-classes to\n *  implement the [[Provider]] API by normalizing input arguments and\n *  formatting output results as well as tracking events for consistent\n *  behaviour on an eventually-consistent network.\n */\nexport class AbstractProvider implements Provider {\n\n    #subs: Map<string, Sub>;\n    #plugins: Map<string, AbstractProviderPlugin>;\n\n    // null=unpaused, true=paused+dropWhilePaused, false=paused\n    #pausedState: null | boolean;\n\n    #destroyed: boolean;\n\n    #networkPromise: null | Promise<Network>;\n    readonly #anyNetwork: boolean;\n\n    #performCache: Map<string, Promise<any>>;\n\n    // The most recent block number if running an event or -1 if no \"block\" event\n    #lastBlockNumber: number;\n\n    #nextTimer: number;\n    #timers: Map<number, { timer: null | Timer, func: () => void, time: number }>;\n\n    #disableCcipRead: boolean;\n\n    #options: Required<AbstractProviderOptions>;\n\n    /**\n     *  Create a new **AbstractProvider** connected to %%network%%, or\n     *  use the various network detection capabilities to discover the\n     *  [[Network]] if necessary.\n     */\n    constructor(_network?: \"any\" | Networkish, options?: AbstractProviderOptions) {\n        this.#options = Object.assign({ }, defaultOptions, options || { });\n\n        if (_network === \"any\") {\n            this.#anyNetwork = true;\n            this.#networkPromise = null;\n        } else if (_network) {\n            const network = Network.from(_network);\n            this.#anyNetwork = false;\n            this.#networkPromise = Promise.resolve(network);\n            setTimeout(() => { this.emit(\"network\", network, null); }, 0);\n        } else {\n            this.#anyNetwork = false;\n            this.#networkPromise = null;\n        }\n\n        this.#lastBlockNumber = -1;\n\n        this.#performCache = new Map();\n\n        this.#subs = new Map();\n        this.#plugins = new Map();\n        this.#pausedState = null;\n\n        this.#destroyed = false;\n\n        this.#nextTimer = 1;\n        this.#timers = new Map();\n\n        this.#disableCcipRead = false;\n    }\n\n    get pollingInterval(): number { return this.#options.pollingInterval; }\n\n    /**\n     *  Returns ``this``, to allow an **AbstractProvider** to implement\n     *  the [[ContractRunner]] interface.\n     */\n    get provider(): this { return this; }\n\n    /**\n     *  Returns all the registered plug-ins.\n     */\n    get plugins(): Array<AbstractProviderPlugin> {\n        return Array.from(this.#plugins.values());\n    }\n\n    /**\n     *  Attach a new plug-in.\n     */\n    attachPlugin(plugin: AbstractProviderPlugin): this {\n        if (this.#plugins.get(plugin.name)) {\n            throw new Error(`cannot replace existing plugin: ${ plugin.name } `);\n        }\n        this.#plugins.set(plugin.name,  plugin.connect(this));\n        return this;\n    }\n\n    /**\n     *  Get a plugin by name.\n     */\n    getPlugin<T extends AbstractProviderPlugin = AbstractProviderPlugin>(name: string): null | T {\n        return <T>(this.#plugins.get(name)) || null;\n    }\n\n    /**\n     *  Prevent any CCIP-read operation, regardless of whether requested\n     *  in a [[call]] using ``enableCcipRead``.\n     */\n    get disableCcipRead(): boolean { return this.#disableCcipRead; }\n    set disableCcipRead(value: boolean) { this.#disableCcipRead = !!value; }\n\n    // Shares multiple identical requests made during the same 250ms\n    async #perform<T = any>(req: PerformActionRequest): Promise<T> {\n        const timeout = this.#options.cacheTimeout;\n\n        // Caching disabled\n        if (timeout < 0) { return await this._perform(req); }\n\n        // Create a tag\n        const tag = getTag(req.method, req);\n\n        let perform = this.#performCache.get(tag);\n        if (!perform) {\n            perform = this._perform(req);\n\n            this.#performCache.set(tag, perform);\n\n            setTimeout(() => {\n                if (this.#performCache.get(tag) === perform) {\n                    this.#performCache.delete(tag);\n                }\n            }, timeout);\n        }\n\n        return await perform;\n    }\n\n    /**\n     *  Resolves to the data for executing the CCIP-read operations.\n     */\n    async ccipReadFetch(tx: PerformActionTransaction, calldata: string, urls: Array<string>): Promise<null | string> {\n        if (this.disableCcipRead || urls.length === 0 || tx.to == null) { return null; }\n\n        const sender = tx.to.toLowerCase();\n        const data = calldata.toLowerCase();\n\n        const errorMessages: Array<string> = [ ];\n\n        for (let i = 0; i < urls.length; i++) {\n            const url = urls[i];\n\n            // URL expansion\n            const href = url.replace(\"{sender}\", sender).replace(\"{data}\", data);\n\n            // If no {data} is present, use POST; otherwise GET\n            //const json: string | null = (url.indexOf(\"{data}\") >= 0) ? null: JSON.stringify({ data, sender });\n\n            //const result = await fetchJson({ url: href, errorPassThrough: true }, json, (value, response) => {\n            //    value.status = response.statusCode;\n            //    return value;\n            //});\n            const request = new FetchRequest(href);\n            if (url.indexOf(\"{data}\") === -1) {\n                request.body = { data, sender };\n            }\n\n            this.emit(\"debug\", { action: \"sendCcipReadFetchRequest\", request, index: i, urls });\n\n            let errorMessage = \"unknown error\";\n\n            const resp = await request.send();\n            try {\n                 const result = resp.bodyJson;\n                 if (result.data) {\n                     this.emit(\"debug\", { action: \"receiveCcipReadFetchResult\", request, result });\n                     return result.data;\n                 }\n                 if (result.message) { errorMessage = result.message; }\n                 this.emit(\"debug\", { action: \"receiveCcipReadFetchError\", request, result });\n            } catch (error) { }\n\n            // 4xx indicates the result is not present; stop\n            assert(resp.statusCode < 400 || resp.statusCode >= 500, `response not found during CCIP fetch: ${ errorMessage }`,\n                \"OFFCHAIN_FAULT\", { reason: \"404_MISSING_RESOURCE\", transaction: tx, info: { url, errorMessage } });\n\n            // 5xx indicates server issue; try the next url\n            errorMessages.push(errorMessage);\n        }\n\n        assert(false, `error encountered during CCIP fetch: ${ errorMessages.map((m) => JSON.stringify(m)).join(\", \") }`, \"OFFCHAIN_FAULT\", {\n            reason: \"500_SERVER_ERROR\",\n            transaction: tx, info: { urls, errorMessages }\n        });\n    }\n\n    /**\n     *  Provides the opportunity for a sub-class to wrap a block before\n     *  returning it, to add additional properties or an alternate\n     *  sub-class of [[Block]].\n     */\n    _wrapBlock(value: BlockParams, network: Network): Block {\n        return new Block(formatBlock(value), this);\n    }\n\n    /**\n     *  Provides the opportunity for a sub-class to wrap a log before\n     *  returning it, to add additional properties or an alternate\n     *  sub-class of [[Log]].\n     */\n    _wrapLog(value: LogParams, network: Network): Log {\n        return new Log(formatLog(value), this);\n    }\n\n    /**\n     *  Provides the opportunity for a sub-class to wrap a transaction\n     *  receipt before returning it, to add additional properties or an\n     *  alternate sub-class of [[TransactionReceipt]].\n     */\n    _wrapTransactionReceipt(value: TransactionReceiptParams, network: Network): TransactionReceipt {\n        return new TransactionReceipt(formatTransactionReceipt(value), this);\n    }\n\n    /**\n     *  Provides the opportunity for a sub-class to wrap a transaction\n     *  response before returning it, to add additional properties or an\n     *  alternate sub-class of [[TransactionResponse]].\n     */\n    _wrapTransactionResponse(tx: TransactionResponseParams, network: Network): TransactionResponse {\n        return new TransactionResponse(formatTransactionResponse(tx), this);\n    }\n\n    /**\n     *  Resolves to the Network, forcing a network detection using whatever\n     *  technique the sub-class requires.\n     *\n     *  Sub-classes **must** override this.\n     */\n    _detectNetwork(): Promise<Network> {\n        assert(false, \"sub-classes must implement this\", \"UNSUPPORTED_OPERATION\", {\n            operation: \"_detectNetwork\"\n        });\n    }\n\n    /**\n     *  Sub-classes should use this to perform all built-in operations. All\n     *  methods sanitizes and normalizes the values passed into this.\n     *\n     *  Sub-classes **must** override this.\n     */\n    async _perform<T = any>(req: PerformActionRequest): Promise<T> {\n        assert(false, `unsupported method: ${ req.method }`, \"UNSUPPORTED_OPERATION\", {\n            operation: req.method,\n            info: req\n        });\n    }\n\n    // State\n\n    async getBlockNumber(): Promise<number> {\n        const blockNumber = getNumber(await this.#perform({ method: \"getBlockNumber\" }), \"%response\");\n        if (this.#lastBlockNumber >= 0) { this.#lastBlockNumber = blockNumber; }\n        return blockNumber;\n    }\n\n    /**\n     *  Returns or resolves to the address for %%address%%, resolving ENS\n     *  names and [[Addressable]] objects and returning if already an\n     *  address.\n     */\n    _getAddress(address: AddressLike): string | Promise<string> {\n        return resolveAddress(address, this);\n    }\n\n    /**\n     *  Returns or resolves to a valid block tag for %%blockTag%%, resolving\n     *  negative values and returning if already a valid block tag.\n     */\n    _getBlockTag(blockTag?: BlockTag): string | Promise<string> {\n        if (blockTag == null) { return \"latest\"; }\n\n        switch (blockTag) {\n            case \"earliest\":\n                return \"0x0\";\n            case \"finalized\":\n            case \"latest\":\n            case \"pending\":\n            case \"safe\":\n                return blockTag;\n        }\n\n\n        if (isHexString(blockTag)) {\n            if (isHexString(blockTag, 32)) { return blockTag; }\n            return toQuantity(blockTag);\n        }\n\n        if (typeof(blockTag) === \"bigint\") {\n            blockTag = getNumber(blockTag, \"blockTag\");\n        }\n\n        if (typeof(blockTag) === \"number\") {\n            if (blockTag >= 0) { return toQuantity(blockTag); }\n            if (this.#lastBlockNumber >= 0) { return toQuantity(this.#lastBlockNumber + blockTag); }\n            return this.getBlockNumber().then((b) => toQuantity(b + <number>blockTag));\n        }\n\n        assertArgument(false, \"invalid blockTag\", \"blockTag\", blockTag);\n    }\n\n    /**\n     *  Returns or resolves to a filter for %%filter%%, resolving any ENS\n     *  names or [[Addressable]] object and returning if already a valid\n     *  filter.\n     */\n    _getFilter(filter: Filter | FilterByBlockHash): PerformActionFilter | Promise<PerformActionFilter> {\n\n        // Create a canonical representation of the topics\n        const topics = (filter.topics || [ ]).map((t) => {\n            if (t == null) { return null; }\n            if (Array.isArray(t)) {\n                return concisify(t.map((t) => t.toLowerCase()));\n            }\n            return t.toLowerCase();\n        });\n\n        const blockHash = (\"blockHash\" in filter) ? filter.blockHash: undefined;\n\n        const resolve = (_address: Array<string>, fromBlock?: string, toBlock?: string) => {\n            let address: undefined | string | Array<string> = undefined;\n            switch (_address.length) {\n                case 0: break;\n                case 1:\n                    address = _address[0];\n                    break;\n                default:\n                    _address.sort();\n                    address = _address;\n            }\n\n            if (blockHash) {\n                if (fromBlock != null || toBlock != null) {\n                    throw new Error(\"invalid filter\");\n                }\n            }\n\n            const filter = <any>{ };\n            if (address) { filter.address = address; }\n            if (topics.length) { filter.topics = topics; }\n            if (fromBlock) { filter.fromBlock = fromBlock; }\n            if (toBlock) { filter.toBlock = toBlock; }\n            if (blockHash) { filter.blockHash = blockHash; }\n\n            return filter;\n        };\n\n        // Addresses could be async (ENS names or Addressables)\n        let address: Array<string | Promise<string>> = [ ];\n        if (filter.address) {\n            if (Array.isArray(filter.address)) {\n                for (const addr of filter.address) { address.push(this._getAddress(addr)); }\n            } else {\n                address.push(this._getAddress(filter.address));\n            }\n        }\n\n        let fromBlock: undefined | string | Promise<string> = undefined;\n        if (\"fromBlock\" in filter) { fromBlock = this._getBlockTag(filter.fromBlock); }\n\n        let toBlock: undefined | string | Promise<string> = undefined;\n        if (\"toBlock\" in filter) { toBlock = this._getBlockTag(filter.toBlock); }\n\n        if (address.filter((a) => (typeof(a) !== \"string\")).length ||\n            (fromBlock != null && typeof(fromBlock) !== \"string\") ||\n            (toBlock != null && typeof(toBlock) !== \"string\")) {\n\n            return Promise.all([ Promise.all(address), fromBlock, toBlock ]).then((result) => {\n                return resolve(result[0], result[1], result[2]);\n            });\n        }\n\n        return resolve(<Array<string>>address, fromBlock, toBlock);\n    }\n\n    /**\n     *  Returns or resovles to a transaction for %%request%%, resolving\n     *  any ENS names or [[Addressable]] and returning if already a valid\n     *  transaction.\n     */\n    _getTransactionRequest(_request: TransactionRequest): PerformActionTransaction | Promise<PerformActionTransaction> {\n        const request = <PerformActionTransaction>copyRequest(_request);\n\n        const promises: Array<Promise<void>> = [ ];\n        [ \"to\", \"from\" ].forEach((key) => {\n            if ((<any>request)[key] == null) { return; }\n\n            const addr = resolveAddress((<any>request)[key], this);\n            if (isPromise(addr)) {\n                promises.push((async function() { (<any>request)[key] = await addr; })());\n            } else {\n                (<any>request)[key] = addr;\n            }\n        });\n\n        if (request.blockTag != null) {\n            const blockTag = this._getBlockTag(request.blockTag);\n            if (isPromise(blockTag)) {\n                promises.push((async function() { request.blockTag = await blockTag; })());\n            } else {\n                request.blockTag = blockTag;\n            }\n        }\n\n        if (promises.length) {\n            return (async function() {\n                await Promise.all(promises);\n                return request;\n            })();\n        }\n\n        return request;\n    }\n\n    async getNetwork(): Promise<Network> {\n\n        // No explicit network was set and this is our first time\n        if (this.#networkPromise == null) {\n\n            // Detect the current network (shared with all calls)\n            const detectNetwork = (async () => {\n                try {\n                    const network = await this._detectNetwork();\n                    this.emit(\"network\", network, null);\n                    return network;\n                } catch (error) {\n                    if (this.#networkPromise === detectNetwork!) {\n                        this.#networkPromise = null;\n                    }\n                    throw error;\n                }\n            })();\n\n            this.#networkPromise = detectNetwork;\n            return (await detectNetwork).clone();\n        }\n\n        const networkPromise = this.#networkPromise;\n\n        const [ expected, actual ] = await Promise.all([\n            networkPromise,          // Possibly an explicit Network\n            this._detectNetwork()    // The actual connected network\n        ]);\n\n        if (expected.chainId !== actual.chainId) {\n            if (this.#anyNetwork) {\n                // The \"any\" network can change, so notify listeners\n                this.emit(\"network\", actual, expected);\n\n                // Update the network if something else hasn't already changed it\n                if (this.#networkPromise === networkPromise) {\n                    this.#networkPromise = Promise.resolve(actual);\n                }\n            } else {\n                // Otherwise, we do not allow changes to the underlying network\n                assert(false, `network changed: ${ expected.chainId } => ${ actual.chainId } `, \"NETWORK_ERROR\", {\n                    event: \"changed\"\n                });\n            }\n        }\n\n        return expected.clone();\n    }\n\n    async getFeeData(): Promise<FeeData> {\n        const network = await this.getNetwork();\n\n        const getFeeDataFunc = async () => {\n            const { _block, gasPrice, priorityFee } = await resolveProperties({\n                _block: this.#getBlock(\"latest\", false),\n                gasPrice: ((async () => {\n                    try {\n                        const value = await this.#perform({ method: \"getGasPrice\" });\n                        return getBigInt(value, \"%response\");\n                    } catch (error) { }\n                    return null\n                })()),\n                priorityFee: ((async () => {\n                    try {\n                        const value = await this.#perform({ method: \"getPriorityFee\" });\n                        return getBigInt(value, \"%response\");\n                    } catch (error) { }\n                    return null;\n                })())\n            });\n\n            let maxFeePerGas: null | bigint = null;\n            let maxPriorityFeePerGas: null | bigint = null;\n\n            // These are the recommended EIP-1559 heuristics for fee data\n            const block = this._wrapBlock(_block, network);\n            if (block && block.baseFeePerGas) {\n                maxPriorityFeePerGas = (priorityFee != null) ? priorityFee: BigInt(\"1000000000\");\n                maxFeePerGas = (block.baseFeePerGas * BN_2) + maxPriorityFeePerGas;\n            }\n\n            return new FeeData(gasPrice, maxFeePerGas, maxPriorityFeePerGas);\n        };\n\n        // Check for a FeeDataNetWorkPlugin\n        const plugin = <FetchUrlFeeDataNetworkPlugin>network.getPlugin(\"org.ethers.plugins.network.FetchUrlFeeDataPlugin\");\n        if (plugin) {\n            const req = new FetchRequest(plugin.url);\n            const feeData = await plugin.processFunc(getFeeDataFunc, this, req);\n            return new FeeData(feeData.gasPrice, feeData.maxFeePerGas, feeData.maxPriorityFeePerGas);\n        }\n\n        return await getFeeDataFunc();\n    }\n\n\n    async estimateGas(_tx: TransactionRequest): Promise<bigint> {\n        let tx = this._getTransactionRequest(_tx);\n        if (isPromise(tx)) { tx = await tx; }\n        return getBigInt(await this.#perform({\n            method: \"estimateGas\", transaction: tx\n        }), \"%response\");\n    }\n\n    async #call(tx: PerformActionTransaction, blockTag: string, attempt: number): Promise<string> {\n        assert (attempt < MAX_CCIP_REDIRECTS, \"CCIP read exceeded maximum redirections\", \"OFFCHAIN_FAULT\", {\n             reason: \"TOO_MANY_REDIRECTS\",\n             transaction: Object.assign({ }, tx, { blockTag, enableCcipRead: true })\n         });\n\n         // This came in as a PerformActionTransaction, so to/from are safe; we can cast\n         const transaction = <PerformActionTransaction>copyRequest(tx);\n\n         try {\n             return hexlify(await this._perform({ method: \"call\", transaction, blockTag }));\n\n         } catch (error: any) {\n             // CCIP Read OffchainLookup\n             if (!this.disableCcipRead && isCallException(error) && error.data && attempt >= 0 && blockTag === \"latest\" && transaction.to != null && dataSlice(error.data, 0, 4) === \"0x556f1830\") {\n                 const data = error.data;\n\n                 const txSender = await resolveAddress(transaction.to, this);\n\n                 // Parse the CCIP Read Arguments\n                 let ccipArgs: CcipArgs;\n                 try {\n                     ccipArgs = parseOffchainLookup(dataSlice(error.data, 4));\n                 } catch (error: any) {\n                     assert(false, error.message, \"OFFCHAIN_FAULT\", {\n                         reason: \"BAD_DATA\", transaction, info: { data } });\n                 }\n\n                 // Check the sender of the OffchainLookup matches the transaction\n                 assert(ccipArgs.sender.toLowerCase() === txSender.toLowerCase(),\n                     \"CCIP Read sender mismatch\", \"CALL_EXCEPTION\", {\n                         action: \"call\",\n                         data,\n                         reason: \"OffchainLookup\",\n                         transaction: <any>transaction, // @TODO: populate data?\n                         invocation: null,\n                         revert: {\n                             signature: \"OffchainLookup(address,string[],bytes,bytes4,bytes)\",\n                             name: \"OffchainLookup\",\n                             args: ccipArgs.errorArgs\n                         }\n                     });\n\n                 const ccipResult = await this.ccipReadFetch(transaction, ccipArgs.calldata, ccipArgs.urls);\n                 assert(ccipResult != null, \"CCIP Read failed to fetch data\", \"OFFCHAIN_FAULT\", {\n                     reason: \"FETCH_FAILED\", transaction, info: { data: error.data, errorArgs: ccipArgs.errorArgs } });\n\n                 const tx = {\n                     to: txSender,\n                     data: concat([ ccipArgs.selector, encodeBytes([ ccipResult, ccipArgs.extraData ]) ])\n                 };\n\n                 this.emit(\"debug\", { action: \"sendCcipReadCall\", transaction: tx });\n                 try {\n                     const result = await this.#call(tx, blockTag, attempt + 1);\n                     this.emit(\"debug\", { action: \"receiveCcipReadCallResult\", transaction: Object.assign({ }, tx), result });\n                     return result;\n                 } catch (error) {\n                     this.emit(\"debug\", { action: \"receiveCcipReadCallError\", transaction: Object.assign({ }, tx), error });\n                     throw error;\n                 }\n             }\n\n             throw error;\n         }\n    }\n\n    async #checkNetwork<T>(promise: Promise<T>): Promise<T> {\n        const { value } = await resolveProperties({\n            network: this.getNetwork(),\n            value: promise\n        });\n        return value;\n    }\n\n    async call(_tx: TransactionRequest): Promise<string> {\n        const { tx, blockTag } = await resolveProperties({\n            tx: this._getTransactionRequest(_tx),\n            blockTag: this._getBlockTag(_tx.blockTag)\n        });\n\n        return await this.#checkNetwork(this.#call(tx, blockTag, _tx.enableCcipRead ? 0: -1));\n    }\n\n    // Account\n    async #getAccountValue(request: _PerformAccountRequest, _address: AddressLike, _blockTag?: BlockTag): Promise<any> {\n        let address: string | Promise<string> = this._getAddress(_address);\n        let blockTag: string | Promise<string> = this._getBlockTag(_blockTag);\n\n        if (typeof(address) !== \"string\" || typeof(blockTag) !== \"string\") {\n            [ address, blockTag ] = await Promise.all([ address, blockTag ]);\n        }\n\n        return await this.#checkNetwork(this.#perform(Object.assign(request, { address, blockTag })));\n    }\n\n    async getBalance(address: AddressLike, blockTag?: BlockTag): Promise<bigint> {\n        return getBigInt(await this.#getAccountValue({ method: \"getBalance\" }, address, blockTag), \"%response\");\n    }\n\n    async getTransactionCount(address: AddressLike, blockTag?: BlockTag): Promise<number> {\n        return getNumber(await this.#getAccountValue({ method: \"getTransactionCount\" }, address, blockTag), \"%response\");\n    }\n\n    async getCode(address: AddressLike, blockTag?: BlockTag): Promise<string> {\n        return hexlify(await this.#getAccountValue({ method: \"getCode\" }, address, blockTag));\n    }\n\n    async getStorage(address: AddressLike, _position: BigNumberish, blockTag?: BlockTag): Promise<string> {\n        const position = getBigInt(_position, \"position\");\n        return hexlify(await this.#getAccountValue({ method: \"getStorage\", position }, address, blockTag));\n    }\n\n    // Write\n    async broadcastTransaction(signedTx: string): Promise<TransactionResponse> {\n        const { blockNumber, hash, network } = await resolveProperties({\n             blockNumber: this.getBlockNumber(),\n             hash: this._perform({\n                 method: \"broadcastTransaction\",\n                 signedTransaction: signedTx\n             }),\n             network: this.getNetwork()\n        });\n\n        const tx = Transaction.from(signedTx);\n        if (tx.hash !== hash) {\n            throw new Error(\"@TODO: the returned hash did not match\");\n        }\n\n        return this._wrapTransactionResponse(<any>tx, network).replaceableTransaction(blockNumber);\n    }\n\n    async #getBlock(block: BlockTag | string, includeTransactions: boolean): Promise<any> {\n        // @TODO: Add CustomBlockPlugin check\n\n        if (isHexString(block, 32)) {\n            return await this.#perform({\n                method: \"getBlock\", blockHash: block, includeTransactions\n            });\n        }\n\n        let blockTag = this._getBlockTag(block);\n        if (typeof(blockTag) !== \"string\") { blockTag = await blockTag; }\n\n        return await this.#perform({\n            method: \"getBlock\", blockTag, includeTransactions\n        });\n    }\n\n    // Queries\n    async getBlock(block: BlockTag | string, prefetchTxs?: boolean): Promise<null | Block> {\n        const { network, params } = await resolveProperties({\n            network: this.getNetwork(),\n            params: this.#getBlock(block, !!prefetchTxs)\n        });\n        if (params == null) { return null; }\n\n        return this._wrapBlock(params, network);\n    }\n\n    async getTransaction(hash: string): Promise<null | TransactionResponse> {\n        const { network, params } = await resolveProperties({\n            network: this.getNetwork(),\n            params: this.#perform({ method: \"getTransaction\", hash })\n        });\n        if (params == null) { return null; }\n\n        return this._wrapTransactionResponse(params, network);\n    }\n\n    async getTransactionReceipt(hash: string): Promise<null | TransactionReceipt> {\n        const { network, params } = await resolveProperties({\n            network: this.getNetwork(),\n            params: this.#perform({ method: \"getTransactionReceipt\", hash })\n        });\n        if (params == null) { return null; }\n\n        // Some backends did not backfill the effectiveGasPrice into old transactions\n        // in the receipt, so we look it up manually and inject it.\n        if (params.gasPrice == null && params.effectiveGasPrice == null) {\n            const tx = await this.#perform({ method: \"getTransaction\", hash });\n            if (tx == null) { throw new Error(\"report this; could not find tx or effectiveGasPrice\"); }\n            params.effectiveGasPrice = tx.gasPrice;\n        }\n\n        return this._wrapTransactionReceipt(params, network);\n    }\n\n    async getTransactionResult(hash: string): Promise<null | string> {\n        const { result } = await resolveProperties({\n            network: this.getNetwork(),\n            result: this.#perform({ method: \"getTransactionResult\", hash })\n        });\n        if (result == null) { return null; }\n        return hexlify(result);\n    }\n\n    // Bloom-filter Queries\n    async getLogs(_filter: Filter | FilterByBlockHash): Promise<Array<Log>> {\n        let filter = this._getFilter(_filter);\n        if (isPromise(filter)) { filter = await filter; }\n\n        const { network, params } = await resolveProperties({\n            network: this.getNetwork(),\n            params: this.#perform<Array<LogParams>>({ method: \"getLogs\", filter })\n        });\n\n        return params.map((p) => this._wrapLog(p, network));\n    }\n\n    // ENS\n    _getProvider(chainId: number): AbstractProvider {\n        assert(false, \"provider cannot connect to target network\", \"UNSUPPORTED_OPERATION\", {\n            operation: \"_getProvider()\"\n        });\n    }\n\n    async getResolver(name: string): Promise<null | EnsResolver> {\n        return await EnsResolver.fromName(this, name);\n    }\n\n    async getAvatar(name: string): Promise<null | string> {\n        const resolver = await this.getResolver(name);\n        if (resolver) { return await resolver.getAvatar(); }\n        return null;\n    }\n\n    async resolveName(name: string): Promise<null | string>{\n        const resolver = await this.getResolver(name);\n        if (resolver) { return await resolver.getAddress(); }\n        return null;\n    }\n\n    async lookupAddress(address: string): Promise<null | string> {\n        address = getAddress(address);\n        const node = namehash(address.substring(2).toLowerCase() + \".addr.reverse\");\n\n        try {\n\n            const ensAddr = await EnsResolver.getEnsAddress(this);\n            const ensContract = new Contract(ensAddr, [\n                \"function resolver(bytes32) view returns (address)\"\n            ], this);\n\n            const resolver = await ensContract.resolver(node);\n            if (resolver == null || resolver === ZeroAddress) { return null; }\n\n            const resolverContract = new Contract(resolver, [\n                \"function name(bytes32) view returns (string)\"\n            ], this);\n            const name = await resolverContract.name(node);\n\n            // Failed forward resolution\n            const check = await this.resolveName(name);\n            if (check !== address) { return null; }\n\n            return name;\n\n        } catch (error) {\n            // No data was returned from the resolver\n            if (isError(error, \"BAD_DATA\") && error.value === \"0x\") {\n                return null;\n            }\n\n            // Something reerted\n            if (isError(error, \"CALL_EXCEPTION\")) { return null; }\n\n            throw error;\n        }\n\n        return null;\n    }\n\n    async waitForTransaction(hash: string, _confirms?: null | number, timeout?: null | number): Promise<null | TransactionReceipt> {\n        const confirms = (_confirms != null) ? _confirms: 1;\n        if (confirms === 0) { return this.getTransactionReceipt(hash); }\n\n        return new Promise(async (resolve, reject) => {\n            let timer: null | Timer = null;\n\n            const listener = (async (blockNumber: number) => {\n                try {\n                    const receipt = await this.getTransactionReceipt(hash);\n                    if (receipt != null) {\n                        if (blockNumber - receipt.blockNumber + 1 >= confirms) {\n                            resolve(receipt);\n                            //this.off(\"block\", listener);\n                            if (timer) {\n                                clearTimeout(timer);\n                                timer = null;\n                            }\n                            return;\n                        }\n                    }\n                } catch (error) {\n                    console.log(\"EEE\", error);\n                }\n                this.once(\"block\", listener);\n            });\n\n            if (timeout != null) {\n                timer = setTimeout(() => {\n                    if (timer == null) { return; }\n                    timer = null;\n                    this.off(\"block\", listener);\n                    reject(makeError(\"timeout\", \"TIMEOUT\", { reason: \"timeout\" }));\n                }, timeout);\n            }\n\n            listener(await this.getBlockNumber());\n        });\n    }\n\n    async waitForBlock(blockTag?: BlockTag): Promise<Block> {\n        assert(false, \"not implemented yet\", \"NOT_IMPLEMENTED\", {\n            operation: \"waitForBlock\"\n        });\n    }\n\n    /**\n     *  Clear a timer created using the [[_setTimeout]] method.\n     */\n    _clearTimeout(timerId: number): void {\n        const timer = this.#timers.get(timerId);\n        if (!timer) { return; }\n        if (timer.timer) { clearTimeout(timer.timer); }\n        this.#timers.delete(timerId);\n    }\n\n    /**\n     *  Create a timer that will execute %%func%% after at least %%timeout%%\n     *  (in ms). If %%timeout%% is unspecified, then %%func%% will execute\n     *  in the next event loop.\n     *\n     *  [Pausing](AbstractProvider-paused) the provider will pause any\n     *  associated timers.\n     */\n    _setTimeout(_func: () => void, timeout?: number): number {\n        if (timeout == null) { timeout = 0; }\n        const timerId = this.#nextTimer++;\n        const func = () => {\n            this.#timers.delete(timerId);\n            _func();\n        };\n\n        if (this.paused) {\n            this.#timers.set(timerId, { timer: null, func, time: timeout });\n        } else {\n            const timer = setTimeout(func, timeout);\n            this.#timers.set(timerId, { timer, func, time: getTime() });\n        }\n\n        return timerId;\n    }\n\n    /**\n     *  Perform %%func%% on each subscriber.\n     */\n    _forEachSubscriber(func: (s: Subscriber) => void): void {\n        for (const sub of this.#subs.values()) {\n            func(sub.subscriber);\n        }\n    }\n\n    /**\n     *  Sub-classes may override this to customize subscription\n     *  implementations.\n     */\n    _getSubscriber(sub: Subscription): Subscriber {\n        switch (sub.type) {\n            case \"debug\":\n            case \"error\":\n            case \"network\":\n                return new UnmanagedSubscriber(sub.type);\n            case \"block\": {\n                const subscriber = new PollingBlockSubscriber(this);\n                subscriber.pollingInterval = this.pollingInterval;\n                return subscriber;\n            }\n            case \"safe\": case \"finalized\":\n                return new PollingBlockTagSubscriber(this, sub.type);\n            case \"event\":\n                return new PollingEventSubscriber(this, sub.filter);\n            case \"transaction\":\n                return new PollingTransactionSubscriber(this, sub.hash);\n            case \"orphan\":\n                return new PollingOrphanSubscriber(this, sub.filter);\n        }\n\n        throw new Error(`unsupported event: ${ sub.type }`);\n    }\n\n    /**\n     *  If a [[Subscriber]] fails and needs to replace itself, this\n     *  method may be used.\n     *\n     *  For example, this is used for providers when using the\n     *  ``eth_getFilterChanges`` method, which can return null if state\n     *  filters are not supported by the backend, allowing the Subscriber\n     *  to swap in a [[PollingEventSubscriber]].\n     */\n    _recoverSubscriber(oldSub: Subscriber, newSub: Subscriber): void {\n        for (const sub of this.#subs.values()) {\n            if (sub.subscriber === oldSub) {\n                if (sub.started) { sub.subscriber.stop(); }\n                sub.subscriber = newSub;\n                if (sub.started) { newSub.start(); }\n                if (this.#pausedState != null) { newSub.pause(this.#pausedState); }\n                break;\n            }\n        }\n    }\n\n    async #hasSub(event: ProviderEvent, emitArgs?: Array<any>): Promise<null | Sub> {\n        let sub = await getSubscription(event, this);\n        // This is a log that is removing an existing log; we actually want\n        // to emit an orphan event for the removed log\n        if (sub.type === \"event\" && emitArgs && emitArgs.length > 0 && emitArgs[0].removed === true) {\n            sub = await getSubscription({ orphan: \"drop-log\", log: emitArgs[0] }, this);\n        }\n        return this.#subs.get(sub.tag) || null;\n    }\n\n    async #getSub(event: ProviderEvent): Promise<Sub> {\n        const subscription = await getSubscription(event, this);\n\n        // Prevent tampering with our tag in any subclass' _getSubscriber\n        const tag = subscription.tag;\n\n        let sub = this.#subs.get(tag);\n        if (!sub) {\n            const subscriber = this._getSubscriber(subscription);\n\n            const addressableMap = new WeakMap();\n            const nameMap = new Map();\n            sub = { subscriber, tag, addressableMap, nameMap, started: false, listeners: [ ] };\n            this.#subs.set(tag, sub);\n        }\n\n        return sub;\n    }\n\n    async on(event: ProviderEvent, listener: Listener): Promise<this> {\n        const sub = await this.#getSub(event);\n        sub.listeners.push({ listener, once: false });\n        if (!sub.started) {\n            sub.subscriber.start();\n            sub.started = true;\n            if (this.#pausedState != null) { sub.subscriber.pause(this.#pausedState); }\n        }\n        return this;\n    }\n\n    async once(event: ProviderEvent, listener: Listener): Promise<this> {\n        const sub = await this.#getSub(event);\n        sub.listeners.push({ listener, once: true });\n        if (!sub.started) {\n            sub.subscriber.start();\n            sub.started = true;\n            if (this.#pausedState != null) { sub.subscriber.pause(this.#pausedState); }\n        }\n        return this;\n    }\n\n    async emit(event: ProviderEvent, ...args: Array<any>): Promise<boolean> {\n        const sub = await this.#hasSub(event, args);\n        // If there is not subscription or if a recent emit removed\n        // the last of them (which also deleted the sub) do nothing\n        if (!sub || sub.listeners.length === 0) { return false; };\n\n        const count = sub.listeners.length;\n        sub.listeners = sub.listeners.filter(({ listener, once }) => {\n            const payload = new EventPayload(this, (once ? null: listener), event);\n            try {\n                listener.call(this, ...args, payload);\n            } catch(error) { }\n            return !once;\n        });\n\n        if (sub.listeners.length === 0) {\n            if (sub.started) { sub.subscriber.stop(); }\n            this.#subs.delete(sub.tag);\n        }\n\n        return (count > 0);\n    }\n\n    async listenerCount(event?: ProviderEvent): Promise<number> {\n        if (event) {\n            const sub = await this.#hasSub(event);\n            if (!sub) { return 0; }\n            return sub.listeners.length;\n        }\n\n        let total = 0;\n        for (const { listeners } of this.#subs.values()) {\n            total += listeners.length;\n        }\n        return total;\n    }\n\n    async listeners(event?: ProviderEvent): Promise<Array<Listener>> {\n        if (event) {\n            const sub = await this.#hasSub(event);\n            if (!sub) { return  [ ]; }\n            return sub.listeners.map(({ listener }) => listener);\n        }\n        let result: Array<Listener> = [ ];\n        for (const { listeners } of this.#subs.values()) {\n            result = result.concat(listeners.map(({ listener }) => listener));\n        }\n        return result;\n    }\n\n    async off(event: ProviderEvent, listener?: Listener): Promise<this> {\n        const sub = await this.#hasSub(event);\n        if (!sub) { return this; }\n\n        if (listener) {\n            const index = sub.listeners.map(({ listener }) => listener).indexOf(listener);\n            if (index >= 0) { sub.listeners.splice(index, 1); }\n        }\n\n        if (!listener || sub.listeners.length === 0) {\n            if (sub.started) { sub.subscriber.stop(); }\n            this.#subs.delete(sub.tag);\n        }\n\n        return this;\n    }\n\n    async removeAllListeners(event?: ProviderEvent): Promise<this> {\n        if (event) {\n            const { tag, started, subscriber } = await this.#getSub(event);\n            if (started) { subscriber.stop(); }\n            this.#subs.delete(tag);\n        } else {\n            for (const [ tag, { started, subscriber } ] of this.#subs) {\n                if (started) { subscriber.stop(); }\n                this.#subs.delete(tag);\n            }\n        }\n        return this;\n    }\n\n    // Alias for \"on\"\n    async addListener(event: ProviderEvent, listener: Listener): Promise<this> {\n       return await this.on(event, listener);\n    }\n\n    // Alias for \"off\"\n    async removeListener(event: ProviderEvent, listener: Listener): Promise<this> {\n       return this.off(event, listener);\n    }\n\n    /**\n     *  If this provider has been destroyed using the [[destroy]] method.\n     *\n     *  Once destroyed, all resources are reclaimed, internal event loops\n     *  and timers are cleaned up and no further requests may be sent to\n     *  the provider.\n     */\n    get destroyed(): boolean {\n        return this.#destroyed;\n    }\n\n    /**\n     *  Sub-classes may use this to shutdown any sockets or release their\n     *  resources and reject any pending requests.\n     *\n     *  Sub-classes **must** call ``super.destroy()``.\n     */\n    destroy(): void {\n        // Stop all listeners\n        this.removeAllListeners();\n\n        // Shut down all tiemrs\n        for (const timerId of this.#timers.keys()) {\n            this._clearTimeout(timerId);\n        }\n\n        this.#destroyed = true;\n    }\n\n    /**\n     *  Whether the provider is currently paused.\n     *\n     *  A paused provider will not emit any events, and generally should\n     *  not make any requests to the network, but that is up to sub-classes\n     *  to manage.\n     *\n     *  Setting ``paused = true`` is identical to calling ``.pause(false)``,\n     *  which will buffer any events that occur while paused until the\n     *  provider is unpaused.\n     */\n    get paused(): boolean { return (this.#pausedState != null); }\n    set paused(pause: boolean) {\n        if (!!pause === this.paused) { return; }\n\n        if (this.paused) {\n            this.resume();\n        } else {\n            this.pause(false);\n        }\n    }\n\n    /**\n     *  Pause the provider. If %%dropWhilePaused%%, any events that occur\n     *  while paused are dropped, otherwise all events will be emitted once\n     *  the provider is unpaused.\n     */\n    pause(dropWhilePaused?: boolean): void {\n        this.#lastBlockNumber = -1;\n\n        if (this.#pausedState != null) {\n            if (this.#pausedState == !!dropWhilePaused) { return; }\n            assert(false, \"cannot change pause type; resume first\", \"UNSUPPORTED_OPERATION\", {\n                operation: \"pause\"\n            });\n        }\n\n        this._forEachSubscriber((s) => s.pause(dropWhilePaused));\n        this.#pausedState = !!dropWhilePaused;\n\n        for (const timer of this.#timers.values()) {\n            // Clear the timer\n            if (timer.timer) { clearTimeout(timer.timer); }\n\n            // Remaining time needed for when we become unpaused\n            timer.time = getTime() - timer.time;\n        }\n    }\n\n    /**\n     *  Resume the provider.\n     */\n    resume(): void {\n        if (this.#pausedState == null) { return; }\n\n        this._forEachSubscriber((s) => s.resume());\n        this.#pausedState = null;\n        for (const timer of this.#timers.values()) {\n            // Remaining time when we were paused\n            let timeout = timer.time;\n            if (timeout < 0) { timeout = 0; }\n\n            // Start time (in cause paused, so we con compute remaininf time)\n            timer.time = getTime();\n\n            // Start the timer\n            setTimeout(timer.func, timeout);\n        }\n    }\n}\n\n\nfunction _parseString(result: string, start: number): null | string {\n    try {\n        const bytes = _parseBytes(result, start);\n        if (bytes) { return toUtf8String(bytes); }\n    } catch(error) { }\n    return null;\n}\n\nfunction _parseBytes(result: string, start: number): null | string {\n    if (result === \"0x\") { return null; }\n    try {\n        const offset = getNumber(dataSlice(result, start, start + 32));\n        const length = getNumber(dataSlice(result, offset, offset + 32));\n\n        return dataSlice(result, offset + 32, offset + 32 + length);\n    } catch (error) { }\n    return null;\n}\n\nfunction numPad(value: number): Uint8Array {\n    const result = toBeArray(value);\n    if (result.length > 32) { throw new Error(\"internal; should not happen\"); }\n\n    const padded = new Uint8Array(32);\n    padded.set(result, 32 - result.length);\n    return padded;\n}\n\nfunction bytesPad(value: Uint8Array): Uint8Array {\n    if ((value.length % 32) === 0) { return value; }\n\n    const result = new Uint8Array(Math.ceil(value.length / 32) * 32);\n    result.set(value);\n    return result;\n}\n\nconst empty: Uint8Array = new Uint8Array([ ]);\n\n// ABI Encodes a series of (bytes, bytes, ...)\nfunction encodeBytes(datas: Array<BytesLike>): string {\n    const result: Array<Uint8Array> = [ ];\n\n    let byteCount = 0;\n\n    // Add place-holders for pointers as we add items\n    for (let i = 0; i < datas.length; i++) {\n        result.push(empty);\n        byteCount += 32;\n    }\n\n    for (let i = 0; i < datas.length; i++) {\n        const data = getBytes(datas[i]);\n\n        // Update the bytes offset\n        result[i] = numPad(byteCount);\n\n        // The length and padded value of data\n        result.push(numPad(data.length));\n        result.push(bytesPad(data));\n        byteCount += 32 + Math.ceil(data.length / 32) * 32;\n    }\n\n    return concat(result);\n}\n\nconst zeros = \"0x0000000000000000000000000000000000000000000000000000000000000000\"\nfunction parseOffchainLookup(data: string): CcipArgs {\n    const result: CcipArgs = {\n        sender: \"\", urls: [ ], calldata: \"\", selector: \"\", extraData: \"\", errorArgs: [ ]\n    };\n\n    assert(dataLength(data) >= 5 * 32, \"insufficient OffchainLookup data\", \"OFFCHAIN_FAULT\", {\n        reason: \"insufficient OffchainLookup data\"\n    });\n\n    const sender = dataSlice(data, 0, 32);\n    assert(dataSlice(sender, 0, 12) === dataSlice(zeros, 0, 12), \"corrupt OffchainLookup sender\", \"OFFCHAIN_FAULT\", {\n        reason: \"corrupt OffchainLookup sender\"\n    });\n    result.sender = dataSlice(sender, 12);\n\n    // Read the URLs from the response\n    try {\n        const urls: Array<string> = [];\n        const urlsOffset = getNumber(dataSlice(data, 32, 64));\n        const urlsLength = getNumber(dataSlice(data, urlsOffset, urlsOffset + 32));\n        const urlsData = dataSlice(data, urlsOffset + 32);\n        for (let u = 0; u < urlsLength; u++) {\n            const url = _parseString(urlsData, u * 32);\n            if (url == null) { throw new Error(\"abort\"); }\n            urls.push(url);\n        }\n        result.urls = urls;\n    } catch (error) {\n        assert(false, \"corrupt OffchainLookup urls\", \"OFFCHAIN_FAULT\", {\n            reason: \"corrupt OffchainLookup urls\"\n        });\n    }\n\n    // Get the CCIP calldata to forward\n    try {\n        const calldata = _parseBytes(data, 64);\n        if (calldata == null) { throw new Error(\"abort\"); }\n        result.calldata = calldata;\n    } catch (error) {\n        assert(false, \"corrupt OffchainLookup calldata\", \"OFFCHAIN_FAULT\", {\n            reason: \"corrupt OffchainLookup calldata\"\n        });\n    }\n\n    // Get the callbackSelector (bytes4)\n    assert(dataSlice(data, 100, 128) === dataSlice(zeros, 0, 28), \"corrupt OffchainLookup callbaackSelector\", \"OFFCHAIN_FAULT\", {\n        reason: \"corrupt OffchainLookup callbaackSelector\"\n    });\n    result.selector = dataSlice(data, 96, 100);\n\n    // Get the extra data to send back to the contract as context\n    try {\n        const extraData = _parseBytes(data, 128);\n        if (extraData == null) { throw new Error(\"abort\"); }\n        result.extraData = extraData;\n    } catch (error) {\n        assert(false, \"corrupt OffchainLookup extraData\", \"OFFCHAIN_FAULT\", {\n            reason: \"corrupt OffchainLookup extraData\"\n        });\n    }\n\n    result.errorArgs = \"sender,urls,calldata,selector,extraData\".split(/,/).map((k) => (<any>result)[k])\n\n    return result;\n}\n", "/**\n *  Generally the [[Wallet]] and [[JsonRpcSigner]] and their sub-classes\n *  are sufficent for most developers, but this is provided to\n *  fascilitate more complex Signers.\n *\n *  @_section: api/providers/abstract-signer: Subclassing Signer [abstract-signer]\n */\nimport { resolveAddress } from \"../address/index.js\";\nimport { Transaction } from \"../transaction/index.js\";\nimport {\n    defineProperties, getBigInt, resolveProperties,\n    assert, assertArgument\n} from \"../utils/index.js\";\n\nimport { copyRequest } from \"./provider.js\";\n\nimport type { TypedDataDomain, TypedDataField } from \"../hash/index.js\";\nimport type { TransactionLike } from \"../transaction/index.js\";\n\nimport type {\n    BlockTag, Provider, TransactionRequest, TransactionResponse\n} from \"./provider.js\";\nimport type { Signer } from \"./signer.js\";\n\n\nfunction checkProvider(signer: AbstractSigner, operation: string): Provider {\n    if (signer.provider) { return signer.provider; }\n    assert(false, \"missing provider\", \"UNSUPPORTED_OPERATION\", { operation });\n}\n\nasync function populate(signer: AbstractSigner, tx: TransactionRequest): Promise<TransactionLike<string>> {\n    let pop: any = copyRequest(tx);\n\n    if (pop.to != null) { pop.to = resolveAddress(pop.to, signer); }\n\n    if (pop.from != null) {\n        const from = pop.from;\n        pop.from = Promise.all([\n            signer.getAddress(),\n            resolveAddress(from, signer)\n        ]).then(([ address, from ]) => {\n            assertArgument(address.toLowerCase() === from.toLowerCase(),\n                \"transaction from mismatch\", \"tx.from\", from);\n            return address;\n        });\n    } else {\n        pop.from = signer.getAddress();\n    }\n\n    return await resolveProperties(pop);\n}\n\n\n/**\n *  An **AbstractSigner** includes most of teh functionality required\n *  to get a [[Signer]] working as expected, but requires a few\n *  Signer-specific methods be overridden.\n *\n */\nexport abstract class AbstractSigner<P extends null | Provider = null | Provider> implements Signer {\n    /**\n     *  The provider this signer is connected to.\n     */\n    readonly provider!: P;\n\n    /**\n     *  Creates a new Signer connected to %%provider%%.\n     */\n    constructor(provider?: P) {\n        defineProperties<AbstractSigner>(this, { provider: (provider || null) });\n    }\n\n    /**\n     *  Resolves to the Signer address.\n     */\n    abstract getAddress(): Promise<string>;\n\n    /**\n     *  Returns the signer connected to %%provider%%.\n     *\n     *  This may throw, for example, a Signer connected over a Socket or\n     *  to a specific instance of a node may not be transferrable.\n     */\n    abstract connect(provider: null | Provider): Signer;\n\n    async getNonce(blockTag?: BlockTag): Promise<number> {\n        return checkProvider(this, \"getTransactionCount\").getTransactionCount(await this.getAddress(), blockTag);\n    }\n\n    async populateCall(tx: TransactionRequest): Promise<TransactionLike<string>> {\n        const pop = await populate(this, tx);\n        return pop;\n    }\n\n    async populateTransaction(tx: TransactionRequest): Promise<TransactionLike<string>> {\n        const provider = checkProvider(this, \"populateTransaction\");\n\n        const pop = await populate(this, tx);\n\n        if (pop.nonce == null) {\n            pop.nonce = await this.getNonce(\"pending\");\n        }\n\n        if (pop.gasLimit == null) {\n            pop.gasLimit = await this.estimateGas(pop);\n        }\n\n        // Populate the chain ID\n        const network = await (<Provider>(this.provider)).getNetwork();\n        if (pop.chainId != null) {\n            const chainId = getBigInt(pop.chainId);\n            assertArgument(chainId === network.chainId, \"transaction chainId mismatch\", \"tx.chainId\", tx.chainId);\n        } else {\n            pop.chainId = network.chainId;\n        }\n\n        // Do not allow mixing pre-eip-1559 and eip-1559 properties\n        const hasEip1559 = (pop.maxFeePerGas != null || pop.maxPriorityFeePerGas != null);\n        if (pop.gasPrice != null && (pop.type === 2 || hasEip1559)) {\n            assertArgument(false, \"eip-1559 transaction do not support gasPrice\", \"tx\", tx);\n        } else if ((pop.type === 0 || pop.type === 1) && hasEip1559) {\n            assertArgument(false, \"pre-eip-1559 transaction do not support maxFeePerGas/maxPriorityFeePerGas\", \"tx\", tx);\n        }\n\n        if ((pop.type === 2 || pop.type == null) && (pop.maxFeePerGas != null && pop.maxPriorityFeePerGas != null)) {\n            // Fully-formed EIP-1559 transaction (skip getFeeData)\n            pop.type = 2;\n\n        } else if (pop.type === 0 || pop.type === 1) {\n            // Explicit Legacy or EIP-2930 transaction\n\n            // We need to get fee data to determine things\n            const feeData = await provider.getFeeData();\n\n            assert(feeData.gasPrice != null, \"network does not support gasPrice\", \"UNSUPPORTED_OPERATION\", {\n                operation: \"getGasPrice\" });\n\n            // Populate missing gasPrice\n            if (pop.gasPrice == null) { pop.gasPrice = feeData.gasPrice; }\n\n        } else {\n\n            // We need to get fee data to determine things\n            const feeData = await provider.getFeeData();\n\n            if (pop.type == null) {\n                // We need to auto-detect the intended type of this transaction...\n\n                if (feeData.maxFeePerGas != null && feeData.maxPriorityFeePerGas != null) {\n                    // The network supports EIP-1559!\n\n                    // Upgrade transaction from null to eip-1559\n                    pop.type = 2;\n\n                    if (pop.gasPrice != null) {\n                        // Using legacy gasPrice property on an eip-1559 network,\n                        // so use gasPrice as both fee properties\n                        const gasPrice = pop.gasPrice;\n                        delete pop.gasPrice;\n                        pop.maxFeePerGas = gasPrice;\n                        pop.maxPriorityFeePerGas = gasPrice;\n\n                    } else {\n                        // Populate missing fee data\n\n                        if (pop.maxFeePerGas == null) {\n                            pop.maxFeePerGas = feeData.maxFeePerGas;\n                        }\n\n                        if (pop.maxPriorityFeePerGas == null) {\n                            pop.maxPriorityFeePerGas = feeData.maxPriorityFeePerGas;\n                        }\n                    }\n\n                } else if (feeData.gasPrice != null) {\n                    // Network doesn't support EIP-1559...\n\n                    // ...but they are trying to use EIP-1559 properties\n                    assert(!hasEip1559, \"network does not support EIP-1559\", \"UNSUPPORTED_OPERATION\", {\n                            operation: \"populateTransaction\" });\n\n                    // Populate missing fee data\n                    if (pop.gasPrice == null) {\n                        pop.gasPrice = feeData.gasPrice;\n                    }\n\n                    // Explicitly set untyped transaction to legacy\n                    // @TODO: Maybe this shold allow type 1?\n                    pop.type = 0;\n\n               } else {\n                    // getFeeData has failed us.\n                    assert(false, \"failed to get consistent fee data\", \"UNSUPPORTED_OPERATION\", {\n                        operation: \"signer.getFeeData\" });\n                }\n\n            } else if (pop.type === 2) {\n                // Explicitly using EIP-1559\n\n                // Populate missing fee data\n                if (pop.maxFeePerGas == null) {\n                    pop.maxFeePerGas = feeData.maxFeePerGas;\n                }\n\n                if (pop.maxPriorityFeePerGas == null) {\n                    pop.maxPriorityFeePerGas = feeData.maxPriorityFeePerGas;\n                }\n            }\n        }\n\n//@TOOD: Don't await all over the place; save them up for\n// the end for better batching\n        return await resolveProperties(pop);\n    }\n\n    async estimateGas(tx: TransactionRequest): Promise<bigint> {\n        return checkProvider(this, \"estimateGas\").estimateGas(await this.populateCall(tx));\n    }\n\n    async call(tx: TransactionRequest): Promise<string> {\n        return checkProvider(this, \"call\").call(await this.populateCall(tx));\n    }\n\n    async resolveName(name: string): Promise<null | string> {\n        const provider = checkProvider(this, \"resolveName\");\n        return await provider.resolveName(name);\n    }\n\n    async sendTransaction(tx: TransactionRequest): Promise<TransactionResponse> {\n        const provider = checkProvider(this, \"sendTransaction\");\n\n        const pop = await this.populateTransaction(tx);\n        delete pop.from;\n        const txObj = Transaction.from(pop);\n        return await provider.broadcastTransaction(await this.signTransaction(txObj));\n    }\n\n    abstract signTransaction(tx: TransactionRequest): Promise<string>;\n    abstract signMessage(message: string | Uint8Array): Promise<string>;\n    abstract signTypedData(domain: TypedDataDomain, types: Record<string, Array<TypedDataField>>, value: Record<string, any>): Promise<string>;\n}\n\n/**\n *  A **VoidSigner** is a class deisgned to allow an address to be used\n *  in any API which accepts a Signer, but for which there are no\n *  credentials available to perform any actual signing.\n *\n *  This for example allow impersonating an account for the purpose of\n *  static calls or estimating gas, but does not allow sending transactions.\n */\nexport class VoidSigner extends AbstractSigner {\n    /**\n     *  The signer address.\n     */\n    readonly address!: string;\n\n    /**\n     *  Creates a new **VoidSigner** with %%address%% attached to\n     *  %%provider%%.\n     */\n    constructor(address: string, provider?: null | Provider) {\n        super(provider);\n        defineProperties<VoidSigner>(this, { address });\n    }\n\n    async getAddress(): Promise<string> { return this.address; }\n\n    connect(provider: null | Provider): VoidSigner {\n        return new VoidSigner(this.address, provider);\n    }\n\n    #throwUnsupported(suffix: string, operation: string): never {\n        assert(false, `VoidSigner cannot sign ${ suffix }`, \"UNSUPPORTED_OPERATION\", { operation });\n    }\n\n    async signTransaction(tx: TransactionRequest): Promise<string> {\n        this.#throwUnsupported(\"transactions\", \"signTransaction\");\n    }\n\n    async signMessage(message: string | Uint8Array): Promise<string> {\n        this.#throwUnsupported(\"messages\", \"signMessage\");\n    }\n\n    async signTypedData(domain: TypedDataDomain, types: Record<string, Array<TypedDataField>>, value: Record<string, any>): Promise<string> {\n        this.#throwUnsupported(\"typed-data\", \"signTypedData\");\n    }\n}\n\n", "/**\n *  There are many awesome community services that provide Ethereum\n *  nodes both for developers just starting out and for large-scale\n *  communities.\n *\n *  @_section: api/providers/thirdparty: Community Providers  [thirdparty]\n */\n\n/**\n *  Providers which offer community credentials should extend this\n *  to notify any interested consumers whether community credentials\n *  are in-use.\n */\nexport interface CommunityResourcable {\n    /**\n     *  Returns true of the instance is connected using the community\n     *  credentials.\n     */\n    isCommunityResource(): boolean;\n}\n\n// Show the throttle message only once per service\nconst shown: Set<string> = new Set();\n\n/**\n *  Displays a warning in tht console when the community resource is\n *  being used too heavily by the app, recommending the developer\n *  acquire their own credentials instead of using the community\n *  credentials.\n *\n *  The notification will only occur once per service.\n */\nexport function showThrottleMessage(service: string): void {\n    if (shown.has(service)) { return; }\n    shown.add(service);\n\n    console.log(\"========= NOTICE =========\")\n    console.log(`Request-Rate Exceeded for ${ service } (this message will not be repeated)`);\n    console.log(\"\");\n    console.log(\"The default API keys for each service are provided as a highly-throttled,\");\n    console.log(\"community resource for low-traffic projects and early prototyping.\");\n    console.log(\"\");\n    console.log(\"While your application will continue to function, we highly recommended\");\n    console.log(\"signing up for your own API keys to improve performance, increase your\");\n    console.log(\"request rate/limit and enable other perks, such as metrics and advanced APIs.\");\n    console.log(\"\");\n    console.log(\"For more details: https:/\\/docs.ethers.org/api-keys/\");\n    console.log(\"==========================\");\n}\n", "import { isError } from \"../utils/index.js\";\n\nimport { PollingEventSubscriber } from \"./subscriber-polling.js\";\n\nimport type { AbstractProvider, Subscriber } from \"./abstract-provider.js\";\nimport type { Network } from \"./network.js\";\nimport type { EventFilter } from \"./provider.js\";\nimport type { JsonRpcApiProvider } from \"./provider-jsonrpc.js\";\n\nfunction copy(obj: any): any {\n    return JSON.parse(JSON.stringify(obj));\n}\n\n/**\n *  Some backends support subscribing to events using a Filter ID.\n *\n *  When subscribing with this technique, the node issues a unique\n *  //Filter ID//. At this point the node dedicates resources to\n *  the filter, so that periodic calls to follow up on the //Filter ID//\n *  will receive any events since the last call.\n *\n *  @_docloc: api/providers/abstract-provider\n */\nexport class FilterIdSubscriber implements Subscriber {\n    #provider: JsonRpcApiProvider;\n\n    #filterIdPromise: null | Promise<string>;\n    #poller: (b: number) => Promise<void>;\n\n    #running: boolean;\n\n    #network: null | Network;\n\n    #hault: boolean;\n\n    /**\n     *  Creates a new **FilterIdSubscriber** which will used [[_subscribe]]\n     *  and [[_emitResults]] to setup the subscription and provide the event\n     *  to the %%provider%%.\n     */\n    constructor(provider: JsonRpcApiProvider) {\n        this.#provider = provider;\n\n        this.#filterIdPromise = null;\n        this.#poller = this.#poll.bind(this);\n\n        this.#running = false;\n\n        this.#network = null;\n\n        this.#hault = false;\n    }\n\n    /**\n     *  Sub-classes **must** override this to begin the subscription.\n     */\n    _subscribe(provider: JsonRpcApiProvider): Promise<string> {\n        throw new Error(\"subclasses must override this\");\n    }\n\n    /**\n     *  Sub-classes **must** override this handle the events.\n     */\n    _emitResults(provider: AbstractProvider, result: Array<any>): Promise<void> {\n        throw new Error(\"subclasses must override this\");\n    }\n\n    /**\n     *  Sub-classes **must** override this handle recovery on errors.\n     */\n    _recover(provider: AbstractProvider): Subscriber {\n        throw new Error(\"subclasses must override this\");\n    }\n\n    async #poll(blockNumber: number): Promise<void> {\n        try {\n            // Subscribe if necessary\n            if (this.#filterIdPromise == null) {\n                this.#filterIdPromise = this._subscribe(this.#provider);\n            }\n\n            // Get the Filter ID\n            let filterId: null | string = null;\n            try {\n                filterId = await this.#filterIdPromise;\n            } catch (error) {\n                if (!isError(error, \"UNSUPPORTED_OPERATION\") || error.operation !== \"eth_newFilter\") {\n                    throw error;\n                }\n            }\n\n            // The backend does not support Filter ID; downgrade to\n            // polling\n            if (filterId == null) {\n                this.#filterIdPromise = null;\n                this.#provider._recoverSubscriber(this, this._recover(this.#provider));\n                return;\n            }\n\n            const network = await this.#provider.getNetwork();\n            if (!this.#network) { this.#network = network; }\n\n            if ((this.#network as Network).chainId !== network.chainId) {\n                throw new Error(\"chaid changed\");\n            }\n\n            if (this.#hault) { return; }\n\n            const result = await this.#provider.send(\"eth_getFilterChanges\", [ filterId ]);\n            await this._emitResults(this.#provider, result);\n        } catch (error) { console.log(\"@TODO\", error); }\n\n        this.#provider.once(\"block\", this.#poller);\n    }\n\n    #teardown(): void {\n        const filterIdPromise = this.#filterIdPromise;\n        if (filterIdPromise) {\n            this.#filterIdPromise = null;\n            filterIdPromise.then((filterId) => {\n                this.#provider.send(\"eth_uninstallFilter\", [ filterId ]);\n            });\n        }\n    }\n\n    start(): void {\n        if (this.#running) { return; }\n        this.#running = true;\n\n        this.#poll(-2);\n    }\n\n    stop(): void {\n        if (!this.#running) { return; }\n        this.#running = false;\n\n        this.#hault = true;\n        this.#teardown();\n        this.#provider.off(\"block\", this.#poller);\n    }\n\n    pause(dropWhilePaused?: boolean): void {\n        if (dropWhilePaused){ this.#teardown(); }\n        this.#provider.off(\"block\", this.#poller);\n    }\n\n    resume(): void { this.start(); }\n}\n\n/**\n *  A **FilterIdSubscriber** for receiving contract events.\n *\n *  @_docloc: api/providers/abstract-provider\n */\nexport class FilterIdEventSubscriber extends FilterIdSubscriber {\n    #event: EventFilter;\n\n    /**\n     *  Creates a new **FilterIdEventSubscriber** attached to %%provider%%\n     *  listening for %%filter%%.\n     */\n    constructor(provider: JsonRpcApiProvider, filter: EventFilter) {\n        super(provider);\n        this.#event = copy(filter);\n    }\n\n    _recover(provider: AbstractProvider): Subscriber {\n        return new PollingEventSubscriber(provider, this.#event);\n    }\n\n    async _subscribe(provider: JsonRpcApiProvider): Promise<string> {\n        const filterId = await provider.send(\"eth_newFilter\", [ this.#event ]);\n        return filterId;\n    }\n\n    async _emitResults(provider: JsonRpcApiProvider, results: Array<any>): Promise<void> {\n        for (const result of results) {\n            provider.emit(this.#event, provider._wrapLog(result, provider._network));\n        }\n    }\n}\n\n/**\n *  A **FilterIdSubscriber** for receiving pending transactions events.\n *\n *  @_docloc: api/providers/abstract-provider\n */\nexport class FilterIdPendingSubscriber extends FilterIdSubscriber {\n    async _subscribe(provider: JsonRpcApiProvider): Promise<string> {\n        return await provider.send(\"eth_newPendingTransactionFilter\", [ ]);\n    }\n\n    async _emitResults(provider: JsonRpcApiProvider, results: Array<any>): Promise<void> {\n        for (const result of results) {\n            provider.emit(\"pending\", result);\n        }\n    }\n}\n", "/**\n *  One of the most common ways to interact with the blockchain is\n *  by a node running a JSON-RPC interface which can be connected to,\n *  based on the transport, using:\n *\n *  - HTTP or HTTPS - [[JsonRpcProvider]]\n *  - WebSocket - [[WebSocketProvider]]\n *  - IPC - [[IpcSocketProvider]]\n *\n * @_section: api/providers/jsonrpc:JSON-RPC Provider  [about-jsonrpcProvider]\n */\n\n// @TODO:\n// - Add the batching API\n\n// https://playground.open-rpc.org/?schemaUrl=https://raw.githubusercontent.com/ethereum/eth1.0-apis/assembled-spec/openrpc.json&uiSchema%5BappBar%5D%5Bui:splitView%5D=true&uiSchema%5BappBar%5D%5Bui:input%5D=false&uiSchema%5BappBar%5D%5Bui:examplesDropdown%5D=false\n\nimport { AbiCoder } from \"../abi/index.js\";\nimport { getAddress, resolveAddress } from \"../address/index.js\";\nimport { TypedDataEncoder } from \"../hash/index.js\";\nimport { accessListify } from \"../transaction/index.js\";\nimport {\n    defineProperties, getBigInt, hexlify, isHexString, toQuantity, toUtf8Bytes,\n    isError, makeError, assert, assertArgument,\n    FetchRequest, resolveProperties\n} from \"../utils/index.js\";\n\nimport { AbstractProvider, UnmanagedSubscriber } from \"./abstract-provider.js\";\nimport { AbstractSigner } from \"./abstract-signer.js\";\nimport { Network } from \"./network.js\";\nimport { FilterIdEventSubscriber, FilterIdPendingSubscriber } from \"./subscriber-filterid.js\";\nimport { PollingEventSubscriber } from \"./subscriber-polling.js\";\n\nimport type { TypedDataDomain, TypedDataField } from \"../hash/index.js\";\nimport type { TransactionLike } from \"../transaction/index.js\";\n\nimport type { PerformActionRequest, Subscriber, Subscription } from \"./abstract-provider.js\";\nimport type { Networkish } from \"./network.js\";\nimport type { Provider, TransactionRequest, TransactionResponse } from \"./provider.js\";\nimport type { Signer } from \"./signer.js\";\n\ntype Timer = ReturnType<typeof setTimeout>;\n\nconst Primitive = \"bigint,boolean,function,number,string,symbol\".split(/,/g);\n//const Methods = \"getAddress,then\".split(/,/g);\nfunction deepCopy<T = any>(value: T): T {\n    if (value == null || Primitive.indexOf(typeof(value)) >= 0) {\n        return value;\n    }\n\n    // Keep any Addressable\n    if (typeof((<any>value).getAddress) === \"function\") {\n        return value;\n    }\n\n    if (Array.isArray(value)) { return <any>(value.map(deepCopy)); }\n\n    if (typeof(value) === \"object\") {\n        return Object.keys(value).reduce((accum, key) => {\n            accum[key] = (<any>value)[key];\n            return accum;\n        }, <any>{ });\n    }\n\n    throw new Error(`should not happen: ${ value } (${ typeof(value) })`);\n}\n\nfunction stall(duration: number): Promise<void> {\n    return new Promise((resolve) => { setTimeout(resolve, duration); });\n}\n\nfunction getLowerCase(value: string): string {\n    if (value) { return value.toLowerCase(); }\n    return value;\n}\n\ninterface Pollable {\n    pollingInterval: number;\n}\n\nfunction isPollable(value: any): value is Pollable {\n    return (value && typeof(value.pollingInterval) === \"number\");\n}\n\n/**\n *  A JSON-RPC payload, which are sent to a JSON-RPC server.\n */\nexport type JsonRpcPayload = {\n    /**\n     *  The JSON-RPC request ID.\n     */\n    id: number;\n\n    /**\n     *  The JSON-RPC request method.\n     */\n    method: string;\n\n    /**\n     *  The JSON-RPC request parameters.\n     */\n    params: Array<any> | Record<string, any>;\n\n    /**\n     *  A required constant in the JSON-RPC specification.\n     */\n    jsonrpc: \"2.0\";\n};\n\n/**\n *  A JSON-RPC result, which are returned on success from a JSON-RPC server.\n */\nexport type JsonRpcResult = {\n    /**\n     *  The response ID to match it to the relevant request.\n     */\n    id: number;\n\n    /**\n     *  The response result.\n     */\n    result: any;\n};\n\n/**\n *  A JSON-RPC error, which are returned on failure from a JSON-RPC server.\n */\nexport type JsonRpcError = {\n    /**\n     *  The response ID to match it to the relevant request.\n     */\n    id: number;\n\n    /**\n     *  The response error.\n     */\n    error: {\n        code: number;\n        message?: string;\n        data?: any;\n    }\n};\n\n/**\n *  When subscribing to the ``\"debug\"`` event, the [[Listener]] will\n *  receive this object as the first parameter.\n */\nexport type DebugEventJsonRpcApiProvider = {\n    action: \"sendRpcPayload\",\n    payload: JsonRpcPayload | Array<JsonRpcPayload>\n} | {\n    action: \"receiveRpcResult\",\n    result: Array<JsonRpcResult | JsonRpcError>\n} | {\n    action: \"receiveRpcError\",\n    error: Error\n};\n\n/**\n *  Options for configuring a [[JsonRpcApiProvider]]. Much of this\n *  is targetted towards sub-classes, which often will not expose\n *  any of these options to their consumers.\n *\n *  **``polling``** - use the polling strategy is used immediately\n *  for events; otherwise, attempt to use filters and fall back onto\n *  polling (default: ``false``)\n *\n *  **``staticNetwork``** - do not request chain ID on requests to\n *  validate the underlying chain has not changed (default: ``null``)\n *\n *  This should **ONLY** be used if it is **certain** that the network\n *  cannot change, such as when using INFURA (since the URL dictates the\n *  network). If the network is assumed static and it does change, this\n *  can have tragic consequences. For example, this **CANNOT** be used\n *  with MetaMask, since the user can select a new network from the\n *  drop-down at any time.\n *\n *  **``batchStallTime``** - how long (ms) to aggregate requests into a\n *  single batch. ``0`` indicates batching will only encompass the current\n *  event loop. If ``batchMaxCount = 1``, this is ignored. (default: ``10``)\n *\n *  **``batchMaxSize``** - target maximum size (bytes) to allow per batch\n *  request (default: 1Mb)\n *\n *  **``batchMaxCount``** - maximum number of requests to allow in a batch.\n *  If ``batchMaxCount = 1``, then batching is disabled. (default: ``100``)\n *\n *  **``cacheTimeout``** - passed as [[AbstractProviderOptions]].\n */\nexport type JsonRpcApiProviderOptions = {\n    polling?: boolean;\n    staticNetwork?: null | boolean | Network;\n    batchStallTime?: number;\n    batchMaxSize?: number;\n    batchMaxCount?: number;\n\n    cacheTimeout?: number;\n    pollingInterval?: number;\n};\n\nconst defaultOptions = {\n    polling: false,\n    staticNetwork: null,\n\n    batchStallTime: 10,      // 10ms\n    batchMaxSize: (1 << 20), // 1Mb\n    batchMaxCount: 100,      // 100 requests\n\n    cacheTimeout: 250,\n    pollingInterval: 4000\n}\n\n/**\n *  A **JsonRpcTransactionRequest** is formatted as needed by the JSON-RPC\n *  Ethereum API specification.\n */\nexport interface JsonRpcTransactionRequest {\n     /**\n      *  The sender address to use when signing.\n      */\n     from?: string;\n\n     /**\n      *  The target address.\n      */\n     to?: string;\n\n     /**\n      *  The transaction data.\n      */\n     data?: string;\n\n     /**\n      *  The chain ID the transaction is valid on.\n      */\n     chainId?: string;\n\n     /**\n      *  The [[link-eip-2718]] transaction type.\n      */\n     type?: string;\n\n     /**\n      *  The maximum amount of gas to allow a transaction to consume.\n      *\n      *  In most other places in ethers, this is called ``gasLimit`` which\n      *  differs from the JSON-RPC Ethereum API specification.\n      */\n     gas?: string;\n\n     /**\n      *  The gas price per wei for transactions prior to [[link-eip-1559]].\n      */\n     gasPrice?: string;\n\n     /**\n      *  The maximum fee per gas for [[link-eip-1559]] transactions.\n      */\n     maxFeePerGas?: string;\n\n     /**\n      *  The maximum priority fee per gas for [[link-eip-1559]] transactions.\n      */\n     maxPriorityFeePerGas?: string;\n\n     /**\n      *  The nonce for the transaction.\n      */\n     nonce?: string;\n\n     /**\n      *  The transaction value (in wei).\n      */\n     value?: string;\n\n     /**\n      *  The transaction access list.\n      */\n     accessList?: Array<{ address: string, storageKeys: Array<string> }>;\n}\n\n// @TODO: Unchecked Signers\n\nexport class JsonRpcSigner extends AbstractSigner<JsonRpcApiProvider> {\n    address!: string;\n\n    constructor(provider: JsonRpcApiProvider, address: string) {\n        super(provider);\n        address = getAddress(address);\n        defineProperties<JsonRpcSigner>(this, { address });\n    }\n\n    connect(provider: null | Provider): Signer {\n        assert(false, \"cannot reconnect JsonRpcSigner\", \"UNSUPPORTED_OPERATION\", {\n            operation: \"signer.connect\"\n        });\n    }\n\n    async getAddress(): Promise<string> {\n        return this.address;\n    }\n\n    // JSON-RPC will automatially fill in nonce, etc. so we just check from\n    async populateTransaction(tx: TransactionRequest): Promise<TransactionLike<string>> {\n        return await this.populateCall(tx);\n    }\n\n    // Returns just the hash of the transaction after sent, which is what\n    // the bare JSON-RPC API does;\n    async sendUncheckedTransaction(_tx: TransactionRequest): Promise<string> {\n        const tx = deepCopy(_tx);\n\n        const promises: Array<Promise<void>> = [];\n\n        // Make sure the from matches the sender\n        if (tx.from) {\n            const _from = tx.from;\n            promises.push((async () => {\n                const from = await resolveAddress(_from, this.provider);\n                assertArgument(from != null && from.toLowerCase() === this.address.toLowerCase(),\n                    \"from address mismatch\", \"transaction\", _tx);\n                tx.from = from;\n            })());\n        } else {\n            tx.from = this.address;\n        }\n\n        // The JSON-RPC for eth_sendTransaction uses 90000 gas; if the user\n        // wishes to use this, it is easy to specify explicitly, otherwise\n        // we look it up for them.\n        if (tx.gasLimit == null) {\n            promises.push((async () => {\n                tx.gasLimit = await this.provider.estimateGas({ ...tx, from: this.address});\n            })());\n        }\n\n        // The address may be an ENS name or Addressable\n        if (tx.to != null) {\n            const _to = tx.to;\n            promises.push((async () => {\n                tx.to = await resolveAddress(_to, this.provider);\n            })());\n        }\n\n        // Wait until all of our properties are filled in\n        if (promises.length) { await Promise.all(promises); }\n\n        const hexTx = this.provider.getRpcTransaction(tx);\n\n        return this.provider.send(\"eth_sendTransaction\", [ hexTx ]);\n    }\n\n    async sendTransaction(tx: TransactionRequest): Promise<TransactionResponse> {\n        // This cannot be mined any earlier than any recent block\n        const blockNumber = await this.provider.getBlockNumber();\n\n        // Send the transaction\n        const hash = await this.sendUncheckedTransaction(tx);\n\n        // Unfortunately, JSON-RPC only provides and opaque transaction hash\n        // for a response, and we need the actual transaction, so we poll\n        // for it; it should show up very quickly\n        return await (new Promise((resolve, reject) => {\n            const timeouts = [ 1000, 100 ];\n            let invalids = 0;\n\n            const checkTx = async () => {\n\n                try {\n                    // Try getting the transaction\n                    const tx = await this.provider.getTransaction(hash);\n\n                    if (tx != null) {\n                        resolve(tx.replaceableTransaction(blockNumber));\n                        return;\n                    }\n\n                } catch (error) {\n\n                    // If we were cancelled: stop polling.\n                    // If the data is bad: the node returns bad transactions\n                    // If the network changed: calling again will also fail\n                    // If unsupported: likely destroyed\n                    if (isError(error, \"CANCELLED\") || isError(error, \"BAD_DATA\") ||\n                        isError(error, \"NETWORK_ERROR\" || isError(error, \"UNSUPPORTED_OPERATION\"))) {\n\n                        if (error.info == null) { error.info = { }; }\n                        error.info.sendTransactionHash = hash;\n\n                        reject(error);\n                        return;\n                    }\n\n                    // Stop-gap for misbehaving backends; see #4513\n                    if (isError(error, \"INVALID_ARGUMENT\")) {\n                        invalids++;\n                        if (error.info == null) { error.info = { }; }\n                        error.info.sendTransactionHash = hash;\n                        if (invalids > 10) {\n                            reject(error);\n                            return;\n                        }\n                    }\n\n                    // Notify anyone that cares; but we will try again, since\n                    // it is likely an intermittent service error\n                    this.provider.emit(\"error\", makeError(\"failed to fetch transation after sending (will try again)\", \"UNKNOWN_ERROR\", { error }));\n                }\n\n                // Wait another 4 seconds\n                this.provider._setTimeout(() => { checkTx(); }, timeouts.pop() || 4000);\n            };\n            checkTx();\n        }));\n    }\n\n    async signTransaction(_tx: TransactionRequest): Promise<string> {\n        const tx = deepCopy(_tx);\n\n        // Make sure the from matches the sender\n        if (tx.from) {\n            const from = await resolveAddress(tx.from, this.provider);\n            assertArgument(from != null && from.toLowerCase() === this.address.toLowerCase(),\n                \"from address mismatch\", \"transaction\", _tx);\n            tx.from = from;\n        } else {\n            tx.from = this.address;\n        }\n\n        const hexTx = this.provider.getRpcTransaction(tx);\n        return await this.provider.send(\"eth_signTransaction\", [ hexTx ]);\n    }\n\n\n    async signMessage(_message: string | Uint8Array): Promise<string> {\n        const message = ((typeof(_message) === \"string\") ? toUtf8Bytes(_message): _message);\n        return await this.provider.send(\"personal_sign\", [\n            hexlify(message), this.address.toLowerCase() ]);\n    }\n\n    async signTypedData(domain: TypedDataDomain, types: Record<string, Array<TypedDataField>>, _value: Record<string, any>): Promise<string> {\n        const value = deepCopy(_value);\n\n        // Populate any ENS names (in-place)\n        const populated = await TypedDataEncoder.resolveNames(domain, types, value, async (value: string) => {\n            const address = await resolveAddress(value);\n            assertArgument(address != null, \"TypedData does not support null address\", \"value\", value);\n            return address;\n        });\n\n        return await this.provider.send(\"eth_signTypedData_v4\", [\n            this.address.toLowerCase(),\n            JSON.stringify(TypedDataEncoder.getPayload(populated.domain, types, populated.value))\n        ]);\n    }\n\n    async unlock(password: string): Promise<boolean> {\n        return this.provider.send(\"personal_unlockAccount\", [\n            this.address.toLowerCase(), password, null ]);\n    }\n\n    // https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign\n    async _legacySignMessage(_message: string | Uint8Array): Promise<string> {\n        const message = ((typeof(_message) === \"string\") ? toUtf8Bytes(_message): _message);\n        return await this.provider.send(\"eth_sign\", [\n            this.address.toLowerCase(), hexlify(message) ]);\n    }\n}\n\ntype ResolveFunc = (result: JsonRpcResult) => void;\ntype RejectFunc = (error: Error) => void;\n\ntype Payload = { payload: JsonRpcPayload, resolve: ResolveFunc, reject: RejectFunc };\n\n/**\n *  The JsonRpcApiProvider is an abstract class and **MUST** be\n *  sub-classed.\n *\n *  It provides the base for all JSON-RPC-based Provider interaction.\n *\n *  Sub-classing Notes:\n *  - a sub-class MUST override _send\n *  - a sub-class MUST call the `_start()` method once connected\n */\nexport abstract class JsonRpcApiProvider extends AbstractProvider {\n\n    #options: Required<JsonRpcApiProviderOptions>;\n\n    // The next ID to use for the JSON-RPC ID field\n    #nextId: number;\n\n    // Payloads are queued and triggered in batches using the drainTimer\n    #payloads: Array<Payload>;\n    #drainTimer: null | Timer;\n\n    #notReady: null | {\n        promise: Promise<void>,\n        resolve: null | ((v: void) => void)\n    };\n\n    #network: null | Network;\n    #pendingDetectNetwork: null | Promise<Network>;\n\n    #scheduleDrain(): void {\n        if (this.#drainTimer) { return; }\n\n        // If we aren't using batching, no harm in sending it immediately\n        const stallTime = (this._getOption(\"batchMaxCount\") === 1) ? 0: this._getOption(\"batchStallTime\");\n\n        this.#drainTimer = setTimeout(() => {\n            this.#drainTimer = null;\n\n            const payloads = this.#payloads;\n            this.#payloads = [ ];\n\n            while (payloads.length) {\n\n                // Create payload batches that satisfy our batch constraints\n                const batch = [ <Payload>(payloads.shift()) ];\n                while (payloads.length) {\n                    if (batch.length === this.#options.batchMaxCount) { break; }\n                    batch.push(<Payload>(payloads.shift()));\n                    const bytes = JSON.stringify(batch.map((p) => p.payload));\n                    if (bytes.length > this.#options.batchMaxSize) {\n                        payloads.unshift(<Payload>(batch.pop()));\n                        break;\n                    }\n                }\n\n                // Process the result to each payload\n                (async () => {\n                    const payload = ((batch.length === 1) ? batch[0].payload: batch.map((p) => p.payload));\n\n                    this.emit(\"debug\", { action: \"sendRpcPayload\", payload });\n\n                    try {\n                        const result = await this._send(payload);\n                        this.emit(\"debug\", { action: \"receiveRpcResult\", result });\n\n                        // Process results in batch order\n                        for (const { resolve, reject, payload } of batch) {\n\n                            if (this.destroyed) {\n                                reject(makeError(\"provider destroyed; cancelled request\", \"UNSUPPORTED_OPERATION\", { operation: payload.method }));\n                                continue;\n                            }\n\n                            // Find the matching result\n                            const resp = result.filter((r) => (r.id === payload.id))[0];\n\n                            // No result; the node failed us in unexpected ways\n                            if (resp == null) {\n                                const error = makeError(\"missing response for request\", \"BAD_DATA\", {\n                                    value: result, info: { payload }\n                                });\n                                this.emit(\"error\", error);\n                                reject(error);\n                                continue;\n                            }\n\n                            // The response is an error\n                            if (\"error\" in resp) {\n                                reject(this.getRpcError(payload, resp));\n                                continue;\n                            }\n\n                            // All good; send the result\n                            resolve(resp.result);\n                        }\n\n                    } catch (error: any) {\n                        this.emit(\"debug\", { action: \"receiveRpcError\", error });\n\n                        for (const { reject } of batch) {\n                            // @TODO: augment the error with the payload\n                            reject(error);\n                        }\n                    }\n                })();\n            }\n        }, stallTime);\n    }\n\n    constructor(network?: Networkish, options?: JsonRpcApiProviderOptions) {\n        super(network, options);\n\n        this.#nextId = 1;\n        this.#options = Object.assign({ }, defaultOptions, options || { });\n\n        this.#payloads = [ ];\n        this.#drainTimer = null;\n\n        this.#network = null;\n        this.#pendingDetectNetwork = null;\n\n        {\n            let resolve: null | ((value: void) => void) = null;\n            const promise = new Promise((_resolve: (value: void) => void) => {\n                resolve = _resolve;\n            });\n            this.#notReady = { promise, resolve };\n        }\n\n        const staticNetwork = this._getOption(\"staticNetwork\");\n        if (typeof(staticNetwork) === \"boolean\") {\n            assertArgument(!staticNetwork || network !== \"any\", \"staticNetwork cannot be used on special network 'any'\", \"options\", options);\n            if (staticNetwork && network != null) {\n                this.#network = Network.from(network);\n            }\n\n        } else if (staticNetwork) {\n            // Make sure any static network is compatbile with the provided netwrok\n            assertArgument(network == null || staticNetwork.matches(network),\n                \"staticNetwork MUST match network object\", \"options\", options);\n            this.#network = staticNetwork;\n        }\n    }\n\n    /**\n     *  Returns the value associated with the option %%key%%.\n     *\n     *  Sub-classes can use this to inquire about configuration options.\n     */\n    _getOption<K extends keyof JsonRpcApiProviderOptions>(key: K): JsonRpcApiProviderOptions[K] {\n        return this.#options[key];\n    }\n\n    /**\n     *  Gets the [[Network]] this provider has committed to. On each call, the network\n     *  is detected, and if it has changed, the call will reject.\n     */\n    get _network(): Network {\n        assert (this.#network, \"network is not available yet\", \"NETWORK_ERROR\");\n        return this.#network;\n    }\n\n    /**\n     *  Sends a JSON-RPC %%payload%% (or a batch) to the underlying channel.\n     *\n     *  Sub-classes **MUST** override this.\n     */\n    abstract _send(payload: JsonRpcPayload | Array<JsonRpcPayload>): Promise<Array<JsonRpcResult | JsonRpcError>>;\n\n\n    /**\n     *  Resolves to the non-normalized value by performing %%req%%.\n     *\n     *  Sub-classes may override this to modify behavior of actions,\n     *  and should generally call ``super._perform`` as a fallback.\n     */\n    async _perform(req: PerformActionRequest): Promise<any> {\n\n        // Legacy networks do not like the type field being passed along (which\n        // is fair), so we delete type if it is 0 and a non-EIP-1559 network\n        if (req.method === \"call\" || req.method === \"estimateGas\") {\n            let tx = req.transaction;\n            if (tx && tx.type != null && getBigInt(tx.type)) {\n                // If there are no EIP-1559 properties, it might be non-EIP-a559\n                if (tx.maxFeePerGas == null && tx.maxPriorityFeePerGas == null) {\n                    const feeData = await this.getFeeData();\n                    if (feeData.maxFeePerGas == null && feeData.maxPriorityFeePerGas == null) {\n                        // Network doesn't know about EIP-1559 (and hence type)\n                        req = Object.assign({ }, req, {\n                            transaction: Object.assign({ }, tx, { type: undefined })\n                        });\n                    }\n                }\n            }\n        }\n\n        const request = this.getRpcRequest(req);\n\n        if (request != null) {\n            return await this.send(request.method, request.args);\n        }\n\n        return super._perform(req);\n    }\n\n    /**\n     *  Sub-classes may override this; it detects the *actual* network that\n     *  we are **currently** connected to.\n     *\n     *  Keep in mind that [[send]] may only be used once [[ready]], otherwise the\n     *  _send primitive must be used instead.\n     */\n    async _detectNetwork(): Promise<Network> {\n        const network = this._getOption(\"staticNetwork\");\n        if (network) {\n            if (network === true) {\n                if (this.#network) { return this.#network; }\n            } else {\n                return network;\n            }\n        }\n\n        if (this.#pendingDetectNetwork) {\n            return await this.#pendingDetectNetwork;\n        }\n\n        // If we are ready, use ``send``, which enabled requests to be batched\n        if (this.ready) {\n            this.#pendingDetectNetwork = (async () => {\n                try {\n                    const result = Network.from(getBigInt(await this.send(\"eth_chainId\", [ ])));\n                    this.#pendingDetectNetwork = null;\n                    return result;\n                } catch (error) {\n                    this.#pendingDetectNetwork = null;\n                    throw error;\n                }\n            })();\n            return await this.#pendingDetectNetwork;\n        }\n\n        // We are not ready yet; use the primitive _send\n        this.#pendingDetectNetwork = (async () => {\n            const payload: JsonRpcPayload = {\n                id: this.#nextId++, method: \"eth_chainId\", params: [ ], jsonrpc: \"2.0\"\n            };\n\n            this.emit(\"debug\", { action: \"sendRpcPayload\", payload });\n\n            let result: JsonRpcResult | JsonRpcError;\n            try {\n                result = (await this._send(payload))[0];\n                this.#pendingDetectNetwork = null;\n            } catch (error) {\n                this.#pendingDetectNetwork = null;\n                this.emit(\"debug\", { action: \"receiveRpcError\", error });\n                throw error;\n            }\n\n            this.emit(\"debug\", { action: \"receiveRpcResult\", result });\n\n            if (\"result\" in result) {\n                return Network.from(getBigInt(result.result));\n            }\n\n            throw this.getRpcError(payload, result);\n        })();\n\n        return await this.#pendingDetectNetwork;\n    }\n\n    /**\n     *  Sub-classes **MUST** call this. Until [[_start]] has been called, no calls\n     *  will be passed to [[_send]] from [[send]]. If it is overridden, then\n     *  ``super._start()`` **MUST** be called.\n     *\n     *  Calling it multiple times is safe and has no effect.\n     */\n    _start(): void {\n        if (this.#notReady == null || this.#notReady.resolve == null) { return; }\n\n        this.#notReady.resolve();\n        this.#notReady = null;\n\n        (async () => {\n\n            // Bootstrap the network\n            while (this.#network == null && !this.destroyed) {\n                try {\n                    this.#network = await this._detectNetwork();\n                } catch (error) {\n                    if (this.destroyed) { break; }\n                    console.log(\"JsonRpcProvider failed to detect network and cannot start up; retry in 1s (perhaps the URL is wrong or the node is not started)\");\n                    this.emit(\"error\", makeError(\"failed to bootstrap network detection\", \"NETWORK_ERROR\", { event: \"initial-network-discovery\", info: { error } }));\n                    await stall(1000);\n                }\n            }\n\n            // Start dispatching requests\n            this.#scheduleDrain();\n        })();\n    }\n\n    /**\n     *  Resolves once the [[_start]] has been called. This can be used in\n     *  sub-classes to defer sending data until the connection has been\n     *  established.\n     */\n    async _waitUntilReady(): Promise<void> {\n        if (this.#notReady == null) { return; }\n        return await this.#notReady.promise;\n    }\n\n\n    /**\n     *  Return a Subscriber that will manage the %%sub%%.\n     *\n     *  Sub-classes may override this to modify the behavior of\n     *  subscription management.\n     */\n    _getSubscriber(sub: Subscription): Subscriber {\n\n        // Pending Filters aren't availble via polling\n        if (sub.type === \"pending\") { return new FilterIdPendingSubscriber(this); }\n\n        if (sub.type === \"event\") {\n            if (this._getOption(\"polling\")) {\n                return new PollingEventSubscriber(this, sub.filter);\n            }\n            return new FilterIdEventSubscriber(this, sub.filter);\n        }\n\n        // Orphaned Logs are handled automatically, by the filter, since\n        // logs with removed are emitted by it\n        if (sub.type === \"orphan\" && sub.filter.orphan === \"drop-log\") {\n            return new UnmanagedSubscriber(\"orphan\");\n        }\n\n        return super._getSubscriber(sub);\n    }\n\n    /**\n     *  Returns true only if the [[_start]] has been called.\n     */\n    get ready(): boolean { return this.#notReady == null; }\n\n    /**\n     *  Returns %%tx%% as a normalized JSON-RPC transaction request,\n     *  which has all values hexlified and any numeric values converted\n     *  to Quantity values.\n     */\n    getRpcTransaction(tx: TransactionRequest): JsonRpcTransactionRequest {\n        const result: JsonRpcTransactionRequest = {};\n\n        // JSON-RPC now requires numeric values to be \"quantity\" values\n        [\"chainId\", \"gasLimit\", \"gasPrice\", \"type\", \"maxFeePerGas\", \"maxPriorityFeePerGas\", \"nonce\", \"value\"].forEach((key) => {\n            if ((<any>tx)[key] == null) { return; }\n            let dstKey = key;\n            if (key === \"gasLimit\") { dstKey = \"gas\"; }\n            (<any>result)[dstKey] = toQuantity(getBigInt((<any>tx)[key], `tx.${ key }`));\n        });\n\n        // Make sure addresses and data are lowercase\n        [\"from\", \"to\", \"data\"].forEach((key) => {\n            if ((<any>tx)[key] == null) { return; }\n            (<any>result)[key] = hexlify((<any>tx)[key]);\n        });\n\n        // Normalize the access list object\n        if (tx.accessList) {\n            result[\"accessList\"] = accessListify(tx.accessList);\n        }\n\n        return result;\n    }\n\n    /**\n     *  Returns the request method and arguments required to perform\n     *  %%req%%.\n     */\n    getRpcRequest(req: PerformActionRequest): null | { method: string, args: Array<any> } {\n        switch (req.method) {\n            case \"chainId\":\n                return { method: \"eth_chainId\", args: [ ] };\n\n            case \"getBlockNumber\":\n                return { method: \"eth_blockNumber\", args: [ ] };\n\n            case \"getGasPrice\":\n                return { method: \"eth_gasPrice\", args: [] };\n\n            case \"getPriorityFee\":\n                return { method: \"eth_maxPriorityFeePerGas\", args: [ ] };\n\n            case \"getBalance\":\n                return {\n                    method: \"eth_getBalance\",\n                    args: [ getLowerCase(req.address), req.blockTag ]\n                };\n\n            case \"getTransactionCount\":\n                return {\n                    method: \"eth_getTransactionCount\",\n                    args: [ getLowerCase(req.address), req.blockTag ]\n                };\n\n            case \"getCode\":\n                return {\n                    method: \"eth_getCode\",\n                    args: [ getLowerCase(req.address), req.blockTag ]\n                };\n\n            case \"getStorage\":\n                return {\n                    method: \"eth_getStorageAt\",\n                    args: [\n                        getLowerCase(req.address),\n                        (\"0x\" + req.position.toString(16)),\n                        req.blockTag\n                    ]\n                };\n\n            case \"broadcastTransaction\":\n                return {\n                    method: \"eth_sendRawTransaction\",\n                    args: [ req.signedTransaction ]\n                };\n\n            case \"getBlock\":\n                if (\"blockTag\" in req) {\n                    return {\n                        method: \"eth_getBlockByNumber\",\n                        args: [ req.blockTag, !!req.includeTransactions ]\n                    };\n                } else if (\"blockHash\" in req) {\n                    return {\n                        method: \"eth_getBlockByHash\",\n                        args: [ req.blockHash, !!req.includeTransactions ]\n                    };\n                }\n                break;\n\n            case \"getTransaction\":\n                return {\n                    method: \"eth_getTransactionByHash\",\n                    args: [ req.hash ]\n                };\n\n            case \"getTransactionReceipt\":\n                return {\n                    method: \"eth_getTransactionReceipt\",\n                    args: [ req.hash ]\n                };\n\n            case \"call\":\n                return {\n                    method: \"eth_call\",\n                    args: [ this.getRpcTransaction(req.transaction), req.blockTag ]\n                };\n\n            case \"estimateGas\": {\n                return {\n                    method: \"eth_estimateGas\",\n                    args: [ this.getRpcTransaction(req.transaction) ]\n                };\n            }\n\n            case \"getLogs\":\n                if (req.filter && req.filter.address != null) {\n                    if (Array.isArray(req.filter.address)) {\n                        req.filter.address = req.filter.address.map(getLowerCase);\n                    } else {\n                        req.filter.address = getLowerCase(req.filter.address);\n                    }\n                }\n                return { method: \"eth_getLogs\", args: [ req.filter ] };\n        }\n\n        return null;\n    }\n\n    /**\n     *  Returns an ethers-style Error for the given JSON-RPC error\n     *  %%payload%%, coalescing the various strings and error shapes\n     *  that different nodes return, coercing them into a machine-readable\n     *  standardized error.\n     */\n    getRpcError(payload: JsonRpcPayload, _error: JsonRpcError): Error {\n        const { method } = payload;\n        const { error } = _error;\n\n        if (method === \"eth_estimateGas\" && error.message) {\n            const msg = error.message;\n            if (!msg.match(/revert/i) && msg.match(/insufficient funds/i)) {\n                return makeError(\"insufficient funds\", \"INSUFFICIENT_FUNDS\", {\n                    transaction: ((<any>payload).params[0]),\n                    info: { payload, error }\n                });\n            }\n        }\n\n        if (method === \"eth_call\" || method === \"eth_estimateGas\") {\n            const result = spelunkData(error);\n\n            const e = AbiCoder.getBuiltinCallException(\n                (method === \"eth_call\") ? \"call\": \"estimateGas\",\n                ((<any>payload).params[0]),\n                (result ? result.data: null)\n            );\n            e.info = { error, payload };\n            return e;\n        }\n\n        // Only estimateGas and call can return arbitrary contract-defined text, so now we\n        // we can process text safely.\n\n        const message = JSON.stringify(spelunkMessage(error));\n\n        if (typeof(error.message) === \"string\" && error.message.match(/user denied|ethers-user-denied/i)) {\n            const actionMap: Record<string, \"requestAccess\" | \"sendTransaction\" | \"signMessage\" | \"signTransaction\" | \"signTypedData\"> = {\n                eth_sign: \"signMessage\",\n                personal_sign: \"signMessage\",\n                eth_signTypedData_v4: \"signTypedData\",\n                eth_signTransaction: \"signTransaction\",\n                eth_sendTransaction: \"sendTransaction\",\n                eth_requestAccounts: \"requestAccess\",\n                wallet_requestAccounts: \"requestAccess\",\n            };\n\n            return makeError(`user rejected action`, \"ACTION_REJECTED\", {\n                action: (actionMap[method] || \"unknown\") ,\n                reason: \"rejected\",\n                info: { payload, error }\n            });\n        }\n\n        if (method === \"eth_sendRawTransaction\" || method === \"eth_sendTransaction\") {\n            const transaction = <TransactionLike<string>>((<any>payload).params[0]);\n\n            if (message.match(/insufficient funds|base fee exceeds gas limit/i)) {\n                return makeError(\"insufficient funds for intrinsic transaction cost\", \"INSUFFICIENT_FUNDS\", {\n                    transaction, info: { error }\n                });\n            }\n\n            if (message.match(/nonce/i) && message.match(/too low/i)) {\n                return makeError(\"nonce has already been used\", \"NONCE_EXPIRED\", { transaction, info: { error } });\n            }\n\n            // \"replacement transaction underpriced\"\n            if (message.match(/replacement transaction/i) && message.match(/underpriced/i)) {\n                return makeError(\"replacement fee too low\", \"REPLACEMENT_UNDERPRICED\", { transaction, info: { error } });\n            }\n\n            if (message.match(/only replay-protected/i)) {\n                return makeError(\"legacy pre-eip-155 transactions not supported\", \"UNSUPPORTED_OPERATION\", {\n                    operation: method, info: { transaction, info: { error } }\n                });\n            }\n        }\n\n        let unsupported = !!message.match(/the method .* does not exist/i);\n        if (!unsupported) {\n            if (error && (<any>error).details && (<any>error).details.startsWith(\"Unauthorized method:\")) {\n                unsupported = true;\n            }\n        }\n\n        if (unsupported) {\n            return makeError(\"unsupported operation\", \"UNSUPPORTED_OPERATION\", {\n                operation: payload.method, info: { error, payload }\n            });\n        }\n\n        return makeError(\"could not coalesce error\", \"UNKNOWN_ERROR\", { error, payload });\n    }\n\n\n    /**\n     *  Requests the %%method%% with %%params%% via the JSON-RPC protocol\n     *  over the underlying channel. This can be used to call methods\n     *  on the backend that do not have a high-level API within the Provider\n     *  API.\n     *\n     *  This method queues requests according to the batch constraints\n     *  in the options, assigns the request a unique ID.\n     *\n     *  **Do NOT override** this method in sub-classes; instead\n     *  override [[_send]] or force the options values in the\n     *  call to the constructor to modify this method's behavior.\n     */\n    send(method: string, params: Array<any> | Record<string, any>): Promise<any> {\n        // @TODO: cache chainId?? purge on switch_networks\n\n        // We have been destroyed; no operations are supported anymore\n        if (this.destroyed) {\n            return Promise.reject(makeError(\"provider destroyed; cancelled request\", \"UNSUPPORTED_OPERATION\", { operation: method }));\n        }\n\n        const id = this.#nextId++;\n        const promise = new Promise((resolve, reject) => {\n            this.#payloads.push({\n                resolve, reject,\n                payload: { method, params, id, jsonrpc: \"2.0\" }\n            });\n        });\n\n        // If there is not a pending drainTimer, set one\n        this.#scheduleDrain();\n\n        return <Promise<JsonRpcResult>>promise;\n    }\n\n    /**\n     *  Resolves to the [[Signer]] account for  %%address%% managed by\n     *  the client.\n     *\n     *  If the %%address%% is a number, it is used as an index in the\n     *  the accounts from [[listAccounts]].\n     *\n     *  This can only be used on clients which manage accounts (such as\n     *  Geth with imported account or MetaMask).\n     *\n     *  Throws if the account doesn't exist.\n     */\n    async getSigner(address?: number | string): Promise<JsonRpcSigner> {\n        if (address == null) { address = 0; }\n\n        const accountsPromise = this.send(\"eth_accounts\", [ ]);\n\n        // Account index\n        if (typeof(address) === \"number\") {\n            const accounts = <Array<string>>(await accountsPromise);\n            if (address >= accounts.length) { throw new Error(\"no such account\"); }\n            return new JsonRpcSigner(this, accounts[address]);\n        }\n\n        const { accounts } = await resolveProperties({\n            network: this.getNetwork(),\n            accounts: accountsPromise\n        });\n\n        // Account address\n        address = getAddress(address);\n        for (const account of accounts) {\n            if (getAddress(account) === address) {\n                return new JsonRpcSigner(this, address);\n            }\n        }\n\n        throw new Error(\"invalid account\");\n    }\n\n    async listAccounts(): Promise<Array<JsonRpcSigner>> {\n        const accounts: Array<string> = await this.send(\"eth_accounts\", [ ]);\n        return accounts.map((a) => new JsonRpcSigner(this, a));\n    }\n\n    destroy(): void {\n\n        // Stop processing requests\n        if (this.#drainTimer) {\n            clearTimeout(this.#drainTimer);\n            this.#drainTimer = null;\n        }\n\n        // Cancel all pending requests\n        for (const { payload, reject } of this.#payloads) {\n            reject(makeError(\"provider destroyed; cancelled request\", \"UNSUPPORTED_OPERATION\", { operation: payload.method }));\n        }\n\n        this.#payloads = [ ];\n\n        // Parent clean-up\n        super.destroy();\n\n    }\n}\n\n// @TODO: remove this in v7, it is not exported because this functionality\n// is exposed in the JsonRpcApiProvider by setting polling to true. It should\n// be safe to remove regardless, because it isn't reachable, but just in case.\n/**\n *  @_ignore:\n */\nexport abstract class JsonRpcApiPollingProvider extends JsonRpcApiProvider {\n    #pollingInterval: number;\n    constructor(network?: Networkish, options?: JsonRpcApiProviderOptions) {\n        super(network, options);\n\n        this.#pollingInterval = 4000;\n    }\n\n    _getSubscriber(sub: Subscription): Subscriber {\n        const subscriber = super._getSubscriber(sub);\n        if (isPollable(subscriber)) {\n            subscriber.pollingInterval = this.#pollingInterval;\n        }\n        return subscriber;\n    }\n\n    /**\n     *  The polling interval (default: 4000 ms)\n     */\n    get pollingInterval(): number { return this.#pollingInterval; }\n    set pollingInterval(value: number) {\n        if (!Number.isInteger(value) || value < 0) { throw new Error(\"invalid interval\"); }\n        this.#pollingInterval = value;\n        this._forEachSubscriber((sub) => {\n            if (isPollable(sub)) {\n                sub.pollingInterval = this.#pollingInterval;\n            }\n        });\n    }\n}\n\n/**\n *  The JsonRpcProvider is one of the most common Providers,\n *  which performs all operations over HTTP (or HTTPS) requests.\n *\n *  Events are processed by polling the backend for the current block\n *  number; when it advances, all block-base events are then checked\n *  for updates.\n */\nexport class JsonRpcProvider extends JsonRpcApiPollingProvider {\n    #connect: FetchRequest;\n\n    constructor(url?: string | FetchRequest, network?: Networkish, options?: JsonRpcApiProviderOptions) {\n        if (url == null) { url = \"http:/\\/localhost:8545\"; }\n        super(network, options);\n\n        if (typeof(url) === \"string\") {\n            this.#connect = new FetchRequest(url);\n        } else {\n            this.#connect = url.clone();\n        }\n    }\n\n    _getConnection(): FetchRequest {\n        return this.#connect.clone();\n    }\n\n    async send(method: string, params: Array<any> | Record<string, any>): Promise<any> {\n        // All requests are over HTTP, so we can just start handling requests\n        // We do this here rather than the constructor so that we don't send any\n        // requests to the network (i.e. eth_chainId) until we absolutely have to.\n        await this._start();\n\n        return await super.send(method, params);\n    }\n\n    async _send(payload: JsonRpcPayload | Array<JsonRpcPayload>): Promise<Array<JsonRpcResult>> {\n        // Configure a POST connection for the requested method\n        const request = this._getConnection();\n        request.body = JSON.stringify(payload);\n        request.setHeader(\"content-type\", \"application/json\");\n        const response = await request.send();\n        response.assertOk();\n\n        let resp = response.bodyJson;\n        if (!Array.isArray(resp)) { resp = [ resp ]; }\n\n        return resp;\n    }\n}\n\nfunction spelunkData(value: any): null | { message: string, data: string } {\n    if (value == null) { return null; }\n\n    // These *are* the droids we're looking for.\n    if (typeof(value.message) === \"string\" && value.message.match(/revert/i) && isHexString(value.data)) {\n        return { message: value.message, data: value.data };\n    }\n\n    // Spelunk further...\n    if (typeof(value) === \"object\") {\n        for (const key in value) {\n            const result = spelunkData(value[key]);\n            if (result) { return result; }\n        }\n        return null;\n    }\n\n    // Might be a JSON string we can further descend...\n    if (typeof(value) === \"string\") {\n        try {\n            return spelunkData(JSON.parse(value));\n        } catch (error) { }\n    }\n\n    return null;\n}\n\nfunction _spelunkMessage(value: any, result: Array<string>): void {\n    if (value == null) { return; }\n\n    // These *are* the droids we're looking for.\n    if (typeof(value.message) === \"string\") {\n        result.push(value.message);\n    }\n\n    // Spelunk further...\n    if (typeof(value) === \"object\") {\n        for (const key in value) {\n            _spelunkMessage(value[key], result);\n        }\n    }\n\n    // Might be a JSON string we can further descend...\n    if (typeof(value) === \"string\") {\n        try {\n            return _spelunkMessage(JSON.parse(value), result);\n        } catch (error) { }\n    }\n}\n\nfunction spelunkMessage(value: any): Array<string> {\n    const result: Array<string> = [ ];\n    _spelunkMessage(value, result);\n    return result;\n}\n", "/**\n *  [[link-ankr]] provides a third-party service for connecting to\n *  various blockchains over JSON-RPC.\n *\n *  **Supported Networks**\n *\n *  - Ethereum Mainnet (``mainnet``)\n *  - Goerli Testnet (``goerli``)\n *  - Sepolia Testnet (``sepolia``)\n *  - Arbitrum (``arbitrum``)\n *  - Base (``base``)\n *  - Base Goerlia Testnet (``base-goerli``)\n *  - Base Sepolia Testnet (``base-sepolia``)\n *  - BNB (``bnb``)\n *  - BNB Testnet (``bnbt``)\n *  - Optimism (``optimism``)\n *  - Optimism Goerli Testnet (``optimism-goerli``)\n *  - Optimism Sepolia Testnet (``optimism-sepolia``)\n *  - Polygon (``matic``)\n *  - Polygon Mumbai Testnet (``matic-mumbai``)\n *\n *  @_subsection: api/providers/thirdparty:Ankr  [providers-ankr]\n */\nimport {\n    defineProperties, FetchRequest, assertArgument\n} from \"../utils/index.js\";\n\nimport { AbstractProvider } from \"./abstract-provider.js\";\nimport { showThrottleMessage } from \"./community.js\";\nimport { Network } from \"./network.js\";\nimport { JsonRpcProvider } from \"./provider-jsonrpc.js\";\n\nimport type { CommunityResourcable } from \"./community.js\";\nimport type { Networkish } from \"./network.js\";\nimport type { JsonRpcError, JsonRpcPayload } from \"./provider-jsonrpc.js\";\n\n\nconst defaultApiKey = \"9f7d929b018cdffb338517efa06f58359e86ff1ffd350bc889738523659e7972\";\n\nfunction getHost(name: string): string {\n    switch (name) {\n        case \"mainnet\":\n            return \"rpc.ankr.com/eth\";\n        case \"goerli\":\n            return \"rpc.ankr.com/eth_goerli\";\n        case \"sepolia\":\n            return \"rpc.ankr.com/eth_sepolia\";\n\n        case \"arbitrum\":\n            return \"rpc.ankr.com/arbitrum\";\n        case \"base\":\n            return \"rpc.ankr.com/base\";\n        case \"base-goerli\":\n            return \"rpc.ankr.com/base_goerli\";\n        case \"base-sepolia\":\n            return \"rpc.ankr.com/base_sepolia\";\n        case \"bnb\":\n            return \"rpc.ankr.com/bsc\";\n        case \"bnbt\":\n            return \"rpc.ankr.com/bsc_testnet_chapel\";\n        case \"matic\":\n            return \"rpc.ankr.com/polygon\";\n        case \"matic-mumbai\":\n            return \"rpc.ankr.com/polygon_mumbai\";\n        case \"optimism\":\n            return \"rpc.ankr.com/optimism\";\n        case \"optimism-goerli\":\n            return \"rpc.ankr.com/optimism_testnet\";\n        case \"optimism-sepolia\":\n            return \"rpc.ankr.com/optimism_sepolia\";\n    }\n\n    assertArgument(false, \"unsupported network\", \"network\", name);\n}\n\n\n/**\n *  The **AnkrProvider** connects to the [[link-ankr]]\n *  JSON-RPC end-points.\n *\n *  By default, a highly-throttled API key is used, which is\n *  appropriate for quick prototypes and simple scripts. To\n *  gain access to an increased rate-limit, it is highly\n *  recommended to [sign up here](link-ankr-signup).\n */\nexport class AnkrProvider extends JsonRpcProvider implements CommunityResourcable {\n\n    /**\n     *  The API key for the Ankr connection.\n     */\n    readonly apiKey!: string;\n\n    /**\n     *  Create a new **AnkrProvider**.\n     *\n     *  By default connecting to ``mainnet`` with a highly throttled\n     *  API key.\n     */\n    constructor(_network?: Networkish, apiKey?: null | string) {\n        if (_network == null) { _network = \"mainnet\"; }\n        const network = Network.from(_network);\n        if (apiKey == null) { apiKey = defaultApiKey; }\n\n        // Ankr does not support filterId, so we force polling\n        const options = { polling: true, staticNetwork: network };\n\n        const request = AnkrProvider.getRequest(network, apiKey);\n        super(request, network, options);\n\n        defineProperties<AnkrProvider>(this, { apiKey });\n    }\n\n    _getProvider(chainId: number): AbstractProvider {\n        try {\n            return new AnkrProvider(chainId, this.apiKey);\n        } catch (error) { }\n        return super._getProvider(chainId);\n    }\n\n    /**\n     *  Returns a prepared request for connecting to %%network%% with\n     *  %%apiKey%%.\n     */\n    static getRequest(network: Network, apiKey?: null | string): FetchRequest {\n        if (apiKey == null) { apiKey = defaultApiKey; }\n\n        const request = new FetchRequest(`https:/\\/${ getHost(network.name) }/${ apiKey }`);\n        request.allowGzip = true;\n\n        if (apiKey === defaultApiKey) {\n            request.retryFunc = async (request, response, attempt) => {\n                showThrottleMessage(\"AnkrProvider\");\n                return true;\n            };\n        }\n\n        return request;\n    }\n\n    getRpcError(payload: JsonRpcPayload, error: JsonRpcError): Error {\n        if (payload.method === \"eth_sendRawTransaction\") {\n            if (error && error.error && error.error.message === \"INTERNAL_ERROR: could not replace existing tx\") {\n                error.error.message = \"replacement transaction underpriced\";\n            }\n        }\n\n        return super.getRpcError(payload, error);\n    }\n\n    isCommunityResource(): boolean {\n        return (this.apiKey === defaultApiKey);\n    }\n}\n", "/**\n *  [[link-alchemy]] provides a third-party service for connecting to\n *  various blockchains over JSON-RPC.\n *\n *  **Supported Networks**\n *\n *  - Ethereum Mainnet (``mainnet``)\n *  - Goerli Testnet (``goerli``)\n *  - Sepolia Testnet (``sepolia``)\n *  - Arbitrum (``arbitrum``)\n *  - Arbitrum Goerli Testnet (``arbitrum-goerli``)\n *  - Arbitrum Sepolia Testnet (``arbitrum-sepolia``)\n *  - Base (``base``)\n *  - Base Goerlia Testnet (``base-goerli``)\n *  - Base Sepolia Testnet (``base-sepolia``)\n *  - Optimism (``optimism``)\n *  - Optimism Goerli Testnet (``optimism-goerli``)\n *  - Optimism Sepolia Testnet (``optimism-sepolia``)\n *  - Polygon (``matic``)\n *  - Polygon Mumbai Testnet (``matic-mumbai``)\n *\n *  @_subsection: api/providers/thirdparty:Alchemy  [providers-alchemy]\n */\n\nimport {\n    defineProperties, resolveProperties, assert, assertArgument,\n    FetchRequest\n} from \"../utils/index.js\";\n\nimport { showThrottleMessage } from \"./community.js\";\nimport { Network } from \"./network.js\";\nimport { JsonRpcProvider } from \"./provider-jsonrpc.js\";\n\nimport type { AbstractProvider, PerformActionRequest } from \"./abstract-provider.js\";\nimport type { CommunityResourcable } from \"./community.js\";\nimport type { Networkish } from \"./network.js\";\n\n\nconst defaultApiKey = \"_gg7wSSi0KMBsdKnGVfHDueq6xMB9EkC\"\n\nfunction getHost(name: string): string {\n    switch(name) {\n        case \"mainnet\":\n            return \"eth-mainnet.alchemyapi.io\";\n        case \"goerli\":\n            return \"eth-goerli.g.alchemy.com\";\n        case \"sepolia\":\n            return \"eth-sepolia.g.alchemy.com\";\n\n        case \"arbitrum\":\n            return \"arb-mainnet.g.alchemy.com\";\n        case \"arbitrum-goerli\":\n            return \"arb-goerli.g.alchemy.com\";\n        case \"arbitrum-sepolia\":\n            return \"arb-sepolia.g.alchemy.com\";\n        case \"base\":\n            return \"base-mainnet.g.alchemy.com\";\n        case \"base-goerli\":\n            return \"base-goerli.g.alchemy.com\";\n        case \"base-sepolia\":\n            return \"base-sepolia.g.alchemy.com\";\n        case \"matic\":\n            return \"polygon-mainnet.g.alchemy.com\";\n        case \"matic-mumbai\":\n            return \"polygon-mumbai.g.alchemy.com\";\n        case \"optimism\":\n            return \"opt-mainnet.g.alchemy.com\";\n        case \"optimism-goerli\":\n            return \"opt-goerli.g.alchemy.com\";\n        case \"optimism-sepolia\":\n            return \"opt-sepolia.g.alchemy.com\";\n    }\n\n    assertArgument(false, \"unsupported network\", \"network\", name);\n}\n\n/**\n *  The **AlchemyProvider** connects to the [[link-alchemy]]\n *  JSON-RPC end-points.\n *\n *  By default, a highly-throttled API key is used, which is\n *  appropriate for quick prototypes and simple scripts. To\n *  gain access to an increased rate-limit, it is highly\n *  recommended to [sign up here](link-alchemy-signup).\n *\n *  @_docloc: api/providers/thirdparty\n */\nexport class AlchemyProvider extends JsonRpcProvider implements CommunityResourcable {\n    readonly apiKey!: string;\n\n    constructor(_network?: Networkish, apiKey?: null | string) {\n        if (_network == null) { _network = \"mainnet\"; }\n        const network = Network.from(_network);\n        if (apiKey == null) { apiKey = defaultApiKey; }\n\n        const request = AlchemyProvider.getRequest(network, apiKey);\n        super(request, network, { staticNetwork: network });\n\n        defineProperties<AlchemyProvider>(this, { apiKey });\n    }\n\n    _getProvider(chainId: number): AbstractProvider {\n        try {\n            return new AlchemyProvider(chainId, this.apiKey);\n        } catch (error) { }\n        return super._getProvider(chainId);\n    }\n\n    async _perform(req: PerformActionRequest): Promise<any> {\n\n        // https://docs.alchemy.com/reference/trace-transaction\n        if (req.method === \"getTransactionResult\") {\n            const { trace, tx } = await resolveProperties({\n                trace: this.send(\"trace_transaction\", [ req.hash ]),\n                tx: this.getTransaction(req.hash)\n            });\n            if (trace == null || tx == null) { return null; }\n\n            let data: undefined | string;\n            let error = false;\n            try {\n                data = trace[0].result.output;\n                error = (trace[0].error === \"Reverted\");\n            } catch (error) { }\n\n            if (data) {\n                assert(!error, \"an error occurred during transaction executions\", \"CALL_EXCEPTION\", {\n                    action: \"getTransactionResult\",\n                    data,\n                    reason: null,\n                    transaction: tx,\n                    invocation: null,\n                    revert: null // @TODO\n                });\n                return data;\n            }\n\n            assert(false, \"could not parse trace result\", \"BAD_DATA\", { value: trace });\n        }\n\n        return await super._perform(req);\n    }\n\n    isCommunityResource(): boolean {\n        return (this.apiKey === defaultApiKey);\n    }\n\n    static getRequest(network: Network, apiKey?: string): FetchRequest {\n        if (apiKey == null) { apiKey = defaultApiKey; }\n\n        const request = new FetchRequest(`https:/\\/${ getHost(network.name) }/v2/${ apiKey }`);\n        request.allowGzip = true;\n\n        if (apiKey === defaultApiKey) {\n            request.retryFunc = async (request, response, attempt) => {\n                showThrottleMessage(\"alchemy\");\n                return true;\n            }\n        }\n\n        return request;\n    }\n}\n", "/**\n *  About Cloudflare\n *\n *  @_subsection: api/providers/thirdparty:Cloudflare  [providers-cloudflare]\n */\n\nimport { assertArgument } from \"../utils/index.js\";\n\nimport { Network } from \"./network.js\";\nimport { JsonRpcProvider } from \"./provider-jsonrpc.js\";\n\nimport type { Networkish } from \"./network.js\";\n\n/**\n *  About Cloudflare...\n */\nexport class CloudflareProvider extends JsonRpcProvider {\n    constructor(_network?: Networkish) {\n        if (_network == null) { _network = \"mainnet\"; }\n        const network = Network.from(_network);\n        assertArgument(network.name === \"mainnet\", \"unsupported network\", \"network\", _network);\n        super(\"https:/\\/cloudflare-eth.com/\", network, { staticNetwork: network });\n    }\n}\n", "/**\n *  [[link-etherscan]] provides a third-party service for connecting to\n *  various blockchains over a combination of JSON-RPC and custom API\n *  endpoints.\n *\n *  **Supported Networks**\n *\n *  - Ethereum Mainnet (``mainnet``)\n *  - Goerli Testnet (``goerli``)\n *  - Sepolia Testnet (``sepolia``)\n *  - Sepolia Testnet (``holesky``)\n *  - Arbitrum (``arbitrum``)\n *  - Arbitrum Goerli Testnet (``arbitrum-goerli``)\n *  - BNB Smart Chain Mainnet (``bnb``)\n *  - BNB Smart Chain Testnet (``bnbt``)\n *  - Optimism (``optimism``)\n *  - Optimism Goerli Testnet (``optimism-goerli``)\n *  - Polygon (``matic``)\n *  - Polygon Mumbai Testnet (``matic-mumbai``)\n *\n *  @_subsection api/providers/thirdparty:Etherscan  [providers-etherscan]\n */\n\nimport { AbiCoder } from \"../abi/index.js\";\nimport { Contract } from \"../contract/index.js\";\nimport { accessListify, Transaction } from \"../transaction/index.js\";\nimport {\n    defineProperties,\n    hexlify, toQuantity,\n    FetchRequest,\n    assert, assertArgument, isError,\n//    parseUnits,\n    toUtf8String\n } from \"../utils/index.js\";\n\nimport { AbstractProvider } from \"./abstract-provider.js\";\nimport { Network } from \"./network.js\";\nimport { NetworkPlugin } from \"./plugins-network.js\";\nimport { showThrottleMessage } from \"./community.js\";\n\nimport { PerformActionRequest } from \"./abstract-provider.js\";\nimport type { Networkish } from \"./network.js\";\n//import type { } from \"./pagination\";\nimport type { TransactionRequest } from \"./provider.js\";\n\nconst THROTTLE = 2000;\n\nfunction isPromise<T = any>(value: any): value is Promise<T> {\n    return (value && typeof(value.then) === \"function\");\n}\n\n\n/**\n *  When subscribing to the ``\"debug\"`` event on an Etherscan-based\n *  provider, the events receive a **DebugEventEtherscanProvider**\n *  payload.\n *\n *  @_docloc: api/providers/thirdparty:Etherscan\n */\nexport type DebugEventEtherscanProvider = {\n    action: \"sendRequest\",\n    id: number,\n    url: string,\n    payload: Record<string, any>\n} | {\n    action: \"receiveRequest\",\n    id: number,\n    result: any\n} | {\n    action: \"receiveError\",\n    id: number,\n    error: any\n};\n\nconst EtherscanPluginId = \"org.ethers.plugins.provider.Etherscan\";\n\n/**\n *  A Network can include an **EtherscanPlugin** to provide\n *  a custom base URL.\n *\n *  @_docloc: api/providers/thirdparty:Etherscan\n */\nexport class EtherscanPlugin extends NetworkPlugin {\n    /**\n     *  The Etherscan API base URL.\n     */\n    readonly baseUrl!: string;\n\n    /**\n     *  Creates a new **EtherscanProvider** which will use\n     *  %%baseUrl%%.\n     */\n    constructor(baseUrl: string) {\n        super(EtherscanPluginId);\n        defineProperties<EtherscanPlugin>(this, { baseUrl });\n    }\n\n    clone(): EtherscanPlugin {\n        return new EtherscanPlugin(this.baseUrl);\n    }\n}\n\nconst skipKeys = [ \"enableCcipRead\" ];\n\nlet nextId = 1;\n\n/**\n *  The **EtherscanBaseProvider** is the super-class of\n *  [[EtherscanProvider]], which should generally be used instead.\n *\n *  Since the **EtherscanProvider** includes additional code for\n *  [[Contract]] access, in //rare cases// that contracts are not\n *  used, this class can reduce code size.\n *\n *  @_docloc: api/providers/thirdparty:Etherscan\n */\nexport class EtherscanProvider extends AbstractProvider {\n\n    /**\n     *  The connected network.\n     */\n    readonly network!: Network;\n\n    /**\n     *  The API key or null if using the community provided bandwidth.\n     */\n    readonly apiKey!: null | string;\n\n    readonly #plugin: null | EtherscanPlugin;\n\n    /**\n     *  Creates a new **EtherscanBaseProvider**.\n     */\n    constructor(_network?: Networkish, _apiKey?: string) {\n        const apiKey = (_apiKey != null) ? _apiKey: null;\n\n        super();\n\n        const network = Network.from(_network);\n\n        this.#plugin = network.getPlugin<EtherscanPlugin>(EtherscanPluginId);\n\n        defineProperties<EtherscanProvider>(this, { apiKey, network });\n\n        // Test that the network is supported by Etherscan\n        this.getBaseUrl();\n    }\n\n    /**\n     *  Returns the base URL.\n     *\n     *  If an [[EtherscanPlugin]] is configured on the\n     *  [[EtherscanBaseProvider_network]], returns the plugin's\n     *  baseUrl.\n     */\n    getBaseUrl(): string {\n        if (this.#plugin) { return this.#plugin.baseUrl; }\n\n        switch(this.network.name) {\n            case \"mainnet\":\n                return \"https:/\\/api.etherscan.io\";\n            case \"goerli\":\n                return \"https:/\\/api-goerli.etherscan.io\";\n            case \"sepolia\":\n                return \"https:/\\/api-sepolia.etherscan.io\";\n            case \"holesky\":\n                return \"https:/\\/api-holesky.etherscan.io\";\n\n            case \"arbitrum\":\n                return \"https:/\\/api.arbiscan.io\";\n            case \"arbitrum-goerli\":\n                return \"https:/\\/api-goerli.arbiscan.io\";\n            case \"bnb\":\n                return \"https:/\\/api.bscscan.com\";\n            case \"bnbt\":\n                return \"https:/\\/api-testnet.bscscan.com\";\n            case \"matic\":\n                return \"https:/\\/api.polygonscan.com\";\n            case \"matic-mumbai\":\n                return \"https:/\\/api-testnet.polygonscan.com\";\n            case \"optimism\":\n                return \"https:/\\/api-optimistic.etherscan.io\";\n            case \"optimism-goerli\":\n                return \"https:/\\/api-goerli-optimistic.etherscan.io\";\n\n            default:\n        }\n\n        assertArgument(false, \"unsupported network\", \"network\", this.network);\n    }\n\n    /**\n     *  Returns the URL for the %%module%% and %%params%%.\n     */\n    getUrl(module: string, params: Record<string, string>): string {\n        const query = Object.keys(params).reduce((accum, key) => {\n            const value = params[key];\n            if (value != null) {\n                accum += `&${ key }=${ value }`\n            }\n            return accum\n        }, \"\");\n        const apiKey = ((this.apiKey) ? `&apikey=${ this.apiKey }`: \"\");\n        return `${ this.getBaseUrl() }/api?module=${ module }${ query }${ apiKey }`;\n    }\n\n    /**\n     *  Returns the URL for using POST requests.\n     */\n    getPostUrl(): string {\n        return `${ this.getBaseUrl() }/api`;\n    }\n\n    /**\n     *  Returns the parameters for using POST requests.\n     */\n    getPostData(module: string, params: Record<string, any>): Record<string, any> {\n        params.module = module;\n        params.apikey = this.apiKey;\n        return params;\n    }\n\n    async detectNetwork(): Promise<Network> {\n        return this.network;\n    }\n\n    /**\n     *  Resolves to the result of calling %%module%% with %%params%%.\n     *\n     *  If %%post%%, the request is made as a POST request.\n     */\n    async fetch(module: string, params: Record<string, any>, post?: boolean): Promise<any> {\n        const id = nextId++;\n\n        const url = (post ? this.getPostUrl(): this.getUrl(module, params));\n        const payload = (post ? this.getPostData(module, params): null);\n\n        this.emit(\"debug\", { action: \"sendRequest\", id, url, payload: payload });\n\n        const request = new FetchRequest(url);\n        request.setThrottleParams({ slotInterval: 1000 });\n        request.retryFunc = (req, resp, attempt: number) => {\n            if (this.isCommunityResource()) {\n                showThrottleMessage(\"Etherscan\");\n            }\n            return Promise.resolve(true);\n        };\n        request.processFunc = async (request, response) => {\n            const result = response.hasBody() ? JSON.parse(toUtf8String(response.body)): { };\n            const throttle = ((typeof(result.result) === \"string\") ? result.result: \"\").toLowerCase().indexOf(\"rate limit\") >= 0;\n            if (module === \"proxy\") {\n                // This JSON response indicates we are being throttled\n                if (result && result.status == 0 && result.message == \"NOTOK\" && throttle) {\n                    this.emit(\"debug\", { action: \"receiveError\", id, reason: \"proxy-NOTOK\", error: result });\n                    response.throwThrottleError(result.result, THROTTLE);\n                }\n            } else {\n                if (throttle) {\n                    this.emit(\"debug\", { action: \"receiveError\", id, reason: \"null result\", error: result.result });\n                    response.throwThrottleError(result.result, THROTTLE);\n                }\n            }\n            return response;\n        };\n\n        if (payload) {\n            request.setHeader(\"content-type\", \"application/x-www-form-urlencoded; charset=UTF-8\");\n            request.body = Object.keys(payload).map((k) => `${ k }=${ payload[k] }`).join(\"&\");\n        }\n\n        const response = await request.send();\n        try {\n            response.assertOk();\n        } catch (error) {\n            this.emit(\"debug\", { action: \"receiveError\", id, error, reason: \"assertOk\" });\n            assert(false, \"response error\", \"SERVER_ERROR\", { request, response });\n        }\n\n        if (!response.hasBody()) {\n            this.emit(\"debug\", { action: \"receiveError\", id, error: \"missing body\", reason: \"null body\" });\n            assert(false, \"missing response\", \"SERVER_ERROR\", { request, response });\n        }\n\n        const result = JSON.parse(toUtf8String(response.body));\n        if (module === \"proxy\") {\n            if (result.jsonrpc != \"2.0\") {\n                this.emit(\"debug\", { action: \"receiveError\", id, result, reason: \"invalid JSON-RPC\" });\n                assert(false, \"invalid JSON-RPC response (missing jsonrpc='2.0')\", \"SERVER_ERROR\", { request, response, info: { result } });\n            }\n\n            if (result.error) {\n                this.emit(\"debug\", { action: \"receiveError\", id, result, reason: \"JSON-RPC error\" });\n                assert(false, \"error response\", \"SERVER_ERROR\", { request, response, info: { result } });\n            }\n\n            this.emit(\"debug\", { action: \"receiveRequest\", id, result });\n\n            return result.result;\n\n        } else {\n            // getLogs, getHistory have weird success responses\n            if (result.status == 0 && (result.message === \"No records found\" || result.message === \"No transactions found\")) {\n                this.emit(\"debug\", { action: \"receiveRequest\", id, result });\n                return result.result;\n            }\n\n            if (result.status != 1 || (typeof(result.message) === \"string\" && !result.message.match(/^OK/))) {\n                this.emit(\"debug\", { action: \"receiveError\", id, result });\n                assert(false, \"error response\", \"SERVER_ERROR\", { request, response, info: { result } });\n            }\n\n            this.emit(\"debug\", { action: \"receiveRequest\", id, result });\n\n            return result.result;\n        }\n    }\n\n    /**\n     *  Returns %%transaction%% normalized for the Etherscan API.\n     */\n    _getTransactionPostData(transaction: TransactionRequest): Record<string, string> {\n        const result: Record<string, string> = { };\n        for (let key in transaction) {\n            if (skipKeys.indexOf(key) >= 0) { continue; }\n\n            if ((<any>transaction)[key] == null) { continue; }\n            let value = (<any>transaction)[key];\n            if (key === \"type\" && value === 0) { continue; }\n            if (key === \"blockTag\" && value === \"latest\") { continue; }\n\n            // Quantity-types require no leading zero, unless 0\n            if ((<any>{ type: true, gasLimit: true, gasPrice: true, maxFeePerGs: true, maxPriorityFeePerGas: true, nonce: true, value: true })[key]) {\n                value = toQuantity(value);\n            } else if (key === \"accessList\") {\n                value = \"[\" + accessListify(value).map((set) => {\n                    return `{address:\"${ set.address }\",storageKeys:[\"${ set.storageKeys.join('\",\"') }\"]}`;\n                }).join(\",\") + \"]\";\n            } else {\n                value = hexlify(value);\n            }\n            result[key] = value;\n        }\n        return result;\n    }\n\n    /**\n     *  Throws the normalized Etherscan error.\n     */\n    _checkError(req: PerformActionRequest, error: Error, transaction: any): never {\n\n        // Pull any message out if, possible\n        let message = \"\";\n        if (isError(error, \"SERVER_ERROR\")) {\n            // Check for an error emitted by a proxy call\n            try {\n                message = (<any>error).info.result.error.message;\n            } catch (e) { }\n\n            if (!message) {\n                try {\n                    message = (<any>error).info.message;\n                } catch (e) { }\n            }\n        }\n\n        if (req.method === \"estimateGas\") {\n            if (!message.match(/revert/i) && message.match(/insufficient funds/i)) {\n                assert(false, \"insufficient funds\", \"INSUFFICIENT_FUNDS\", {\n                    transaction: req.transaction\n                });\n            }\n        }\n\n        if (req.method === \"call\" || req.method === \"estimateGas\") {\n            if (message.match(/execution reverted/i)) {\n                let data = \"\";\n                try {\n                    data = (<any>error).info.result.error.data;\n                } catch (error) { }\n\n                const e = AbiCoder.getBuiltinCallException(req.method, <any>req.transaction, data);\n                e.info = { request: req, error }\n                throw e;\n            }\n        }\n\n        if (message) {\n            if (req.method === \"broadcastTransaction\") {\n                const transaction = Transaction.from(req.signedTransaction);\n                if (message.match(/replacement/i) && message.match(/underpriced/i)) {\n                    assert(false, \"replacement fee too low\", \"REPLACEMENT_UNDERPRICED\", {\n                        transaction\n                    });\n                }\n\n                if (message.match(/insufficient funds/)) {\n                    assert(false, \"insufficient funds for intrinsic transaction cost\", \"INSUFFICIENT_FUNDS\", {\n                       transaction\n                    });\n                }\n\n                if (message.match(/same hash was already imported|transaction nonce is too low|nonce too low/)) {\n                    assert(false, \"nonce has already been used\", \"NONCE_EXPIRED\", {\n                       transaction\n                    });\n                }\n            }\n        }\n\n        // Something we could not process\n        throw error;\n    }\n\n    async _detectNetwork(): Promise<Network> {\n        return this.network;\n    }\n\n    async _perform(req: PerformActionRequest): Promise<any> {\n        switch (req.method) {\n            case \"chainId\":\n                return this.network.chainId;\n\n            case \"getBlockNumber\":\n                return this.fetch(\"proxy\", { action: \"eth_blockNumber\" });\n\n            case \"getGasPrice\":\n                return this.fetch(\"proxy\", { action: \"eth_gasPrice\" });\n\n            case \"getPriorityFee\":\n                // This is temporary until Etherscan completes support\n                if (this.network.name === \"mainnet\") {\n                    return \"1000000000\";\n                } else if (this.network.name === \"optimism\") {\n                    return \"1000000\";\n                } else {\n                    throw new Error(\"fallback onto the AbstractProvider default\");\n                }\n                /* Working with Etherscan to get this added:\n                try {\n                    const test = await this.fetch(\"proxy\", {\n                        action: \"eth_maxPriorityFeePerGas\"\n                    });\n                    console.log(test);\n                    return test;\n                } catch (e) {\n                    console.log(\"DEBUG\", e);\n                    throw e;\n                }\n                */\n                /* This might be safe; but due to rounding neither myself\n                   or Etherscan are necessarily comfortable with this. :)\n                try {\n                    const result = await this.fetch(\"gastracker\", { action: \"gasoracle\" });\n                    console.log(result);\n                    const gasPrice = parseUnits(result.SafeGasPrice, \"gwei\");\n                    const baseFee = parseUnits(result.suggestBaseFee, \"gwei\");\n                    const priorityFee = gasPrice - baseFee;\n                    if (priorityFee < 0) { throw new Error(\"negative priority fee; defer to abstract provider default\"); }\n                    return priorityFee;\n                } catch (error) {\n                    console.log(\"DEBUG\", error);\n                    throw error;\n                }\n                */\n\n            case \"getBalance\":\n                // Returns base-10 result\n                return this.fetch(\"account\", {\n                    action: \"balance\",\n                    address: req.address,\n                    tag: req.blockTag\n                });\n\n           case \"getTransactionCount\":\n                return this.fetch(\"proxy\", {\n                    action: \"eth_getTransactionCount\",\n                    address: req.address,\n                    tag: req.blockTag\n                });\n\n            case \"getCode\":\n                return this.fetch(\"proxy\", {\n                    action: \"eth_getCode\",\n                    address: req.address,\n                    tag: req.blockTag\n                });\n\n            case \"getStorage\":\n                return this.fetch(\"proxy\", {\n                    action: \"eth_getStorageAt\",\n                    address: req.address,\n                    position: req.position,\n                    tag: req.blockTag\n                });\n\n            case \"broadcastTransaction\":\n                return this.fetch(\"proxy\", {\n                    action: \"eth_sendRawTransaction\",\n                    hex: req.signedTransaction\n                }, true).catch((error) => {\n                    return this._checkError(req, <Error>error, req.signedTransaction);\n                });\n\n            case \"getBlock\":\n                if (\"blockTag\" in req) {\n                    return this.fetch(\"proxy\", {\n                        action: \"eth_getBlockByNumber\",\n                        tag: req.blockTag,\n                        boolean: (req.includeTransactions ? \"true\": \"false\")\n                    });\n                }\n\n                assert(false, \"getBlock by blockHash not supported by Etherscan\", \"UNSUPPORTED_OPERATION\", {\n                    operation: \"getBlock(blockHash)\"\n                });\n\n            case \"getTransaction\":\n                return this.fetch(\"proxy\", {\n                    action: \"eth_getTransactionByHash\",\n                    txhash: req.hash\n                });\n\n            case \"getTransactionReceipt\":\n                return this.fetch(\"proxy\", {\n                    action: \"eth_getTransactionReceipt\",\n                    txhash: req.hash\n                });\n\n            case \"call\": {\n                if (req.blockTag !== \"latest\") {\n                    throw new Error(\"EtherscanProvider does not support blockTag for call\");\n                }\n\n                const postData = this._getTransactionPostData(req.transaction);\n                postData.module = \"proxy\";\n                postData.action = \"eth_call\";\n\n                try {\n                    return await this.fetch(\"proxy\", postData, true);\n                } catch (error) {\n                    return this._checkError(req, <Error>error, req.transaction);\n                }\n            }\n\n            case \"estimateGas\": {\n                const postData = this._getTransactionPostData(req.transaction);\n                postData.module = \"proxy\";\n                postData.action = \"eth_estimateGas\";\n\n                try {\n                    return await this.fetch(\"proxy\", postData, true);\n                } catch (error) {\n                    return this._checkError(req, <Error>error, req.transaction);\n                }\n            }\n/*\n            case \"getLogs\": {\n                // Needs to complain if more than one address is passed in\n                const args: Record<string, any> = { action: \"getLogs\" }\n\n                if (params.filter.fromBlock) {\n                    args.fromBlock = checkLogTag(params.filter.fromBlock);\n                }\n\n                if (params.filter.toBlock) {\n                    args.toBlock = checkLogTag(params.filter.toBlock);\n                }\n\n                if (params.filter.address) {\n                    args.address = params.filter.address;\n                }\n\n                // @TODO: We can handle slightly more complicated logs using the logs API\n                if (params.filter.topics && params.filter.topics.length > 0) {\n                    if (params.filter.topics.length > 1) {\n                        logger.throwError(\"unsupported topic count\", Logger.Errors.UNSUPPORTED_OPERATION, { topics: params.filter.topics });\n                    }\n                    if (params.filter.topics.length === 1) {\n                        const topic0 = params.filter.topics[0];\n                        if (typeof(topic0) !== \"string\" || topic0.length !== 66) {\n                            logger.throwError(\"unsupported topic format\", Logger.Errors.UNSUPPORTED_OPERATION, { topic0: topic0 });\n                        }\n                        args.topic0 = topic0;\n                    }\n                }\n\n                const logs: Array<any> = await this.fetch(\"logs\", args);\n\n                // Cache txHash => blockHash\n                let blocks: { [tag: string]: string } = {};\n\n                // Add any missing blockHash to the logs\n                for (let i = 0; i < logs.length; i++) {\n                    const log = logs[i];\n                    if (log.blockHash != null) { continue; }\n                    if (blocks[log.blockNumber] == null) {\n                        const block = await this.getBlock(log.blockNumber);\n                        if (block) {\n                            blocks[log.blockNumber] = block.hash;\n                        }\n                    }\n\n                    log.blockHash = blocks[log.blockNumber];\n                }\n\n                return logs;\n            }\n*/\n            default:\n                break;\n        }\n\n        return super._perform(req);\n    }\n\n    async getNetwork(): Promise<Network> {\n        return this.network;\n    }\n\n    /**\n     *  Resolves to the current price of ether.\n     *\n     *  This returns ``0`` on any network other than ``mainnet``.\n     */\n    async getEtherPrice(): Promise<number> {\n        if (this.network.name !== \"mainnet\") { return 0.0; }\n        return parseFloat((await this.fetch(\"stats\", { action: \"ethprice\" })).ethusd);\n    }\n\n    /**\n     *  Resolves to a [Contract]] for %%address%%, using the\n     *  Etherscan API to retreive the Contract ABI.\n     */\n    async getContract(_address: string): Promise<null | Contract> {\n        let address = this._getAddress(_address);\n        if (isPromise(address)) { address = await address; }\n\n        try {\n            const resp = await this.fetch(\"contract\", {\n            action: \"getabi\", address });\n            const abi = JSON.parse(resp);\n            return new Contract(address, abi, this);\n        } catch (error) {\n            return null;\n        }\n    }\n\n    isCommunityResource(): boolean {\n        return (this.apiKey == null);\n    }\n}\n", "\nfunction getGlobal(): any {\n  if (typeof self !== 'undefined') { return self; }\n  if (typeof window !== 'undefined') { return window; }\n  if (typeof global !== 'undefined') { return global; }\n  throw new Error('unable to locate global object');\n};\n\nconst _WebSocket = getGlobal().WebSocket;\n\nexport { _WebSocket as WebSocket };\n", "/**\n *  Generic long-lived socket provider.\n *\n *  Sub-classing notes\n *  - a sub-class MUST call the `_start()` method once connected\n *  - a sub-class MUST override the `_write(string)` method\n *  - a sub-class MUST call `_processMessage(string)` for each message\n *\n *  @_subsection: api/providers/abstract-provider:Socket Providers  [about-socketProvider]\n */\n\nimport { UnmanagedSubscriber } from \"./abstract-provider.js\";\nimport { assert, assertArgument, makeError } from \"../utils/index.js\";\nimport { JsonRpcApiProvider } from \"./provider-jsonrpc.js\";\n\nimport type { Subscriber, Subscription } from \"./abstract-provider.js\";\nimport type { EventFilter } from \"./provider.js\";\nimport type {\n    JsonRpcApiProviderOptions, JsonRpcError, JsonRpcPayload, JsonRpcResult\n} from \"./provider-jsonrpc.js\";\nimport type { Networkish } from \"./network.js\";\n\n\ntype JsonRpcSubscription = {\n    method: string,\n    params: {\n        result: any,\n        subscription: string\n    }\n};\n\n/**\n *  A **SocketSubscriber** uses a socket transport to handle events and\n *  should use [[_emit]] to manage the events.\n */\nexport class SocketSubscriber implements Subscriber {\n    #provider: SocketProvider;\n\n    #filter: string;\n\n    /**\n     *  The filter.\n     */\n    get filter(): Array<any> { return JSON.parse(this.#filter); }\n\n    #filterId: null | Promise<string |number>;\n    #paused: null | boolean;\n\n    #emitPromise: null | Promise<void>;\n\n    /**\n     *  Creates a new **SocketSubscriber** attached to %%provider%% listening\n     *  to %%filter%%.\n     */\n    constructor(provider: SocketProvider, filter: Array<any>) {\n        this.#provider = provider;\n        this.#filter = JSON.stringify(filter);\n        this.#filterId = null;\n        this.#paused = null;\n        this.#emitPromise = null;\n    }\n\n    start(): void {\n        this.#filterId = this.#provider.send(\"eth_subscribe\", this.filter).then((filterId) => {;\n            this.#provider._register(filterId, this);\n            return filterId;\n        });\n    }\n\n    stop(): void {\n        (<Promise<number>>(this.#filterId)).then((filterId) => {\n            this.#provider.send(\"eth_unsubscribe\", [ filterId ]);\n        });\n        this.#filterId = null;\n    }\n\n    // @TODO: pause should trap the current blockNumber, unsub, and on resume use getLogs\n    //        and resume\n    pause(dropWhilePaused?: boolean): void {\n        assert(dropWhilePaused, \"preserve logs while paused not supported by SocketSubscriber yet\",\n            \"UNSUPPORTED_OPERATION\", { operation: \"pause(false)\" });\n        this.#paused = !!dropWhilePaused;\n    }\n\n    resume(): void {\n        this.#paused = null;\n    }\n\n    /**\n     *  @_ignore:\n     */\n    _handleMessage(message: any): void {\n        if (this.#filterId == null) { return; }\n        if (this.#paused === null) {\n            let emitPromise: null | Promise<void> = this.#emitPromise;\n            if (emitPromise == null) {\n                emitPromise = this._emit(this.#provider, message);\n            } else {\n                emitPromise = emitPromise.then(async () => {\n                    await this._emit(this.#provider, message);\n                });\n            }\n            this.#emitPromise = emitPromise.then(() => {\n                if (this.#emitPromise === emitPromise) {\n                    this.#emitPromise = null;\n                }\n            });\n        }\n    }\n\n    /**\n     *  Sub-classes **must** override this to emit the events on the\n     *  provider.\n     */\n    async _emit(provider: SocketProvider, message: any): Promise<void> {\n        throw new Error(\"sub-classes must implemente this; _emit\");\n    }\n}\n\n/**\n *  A **SocketBlockSubscriber** listens for ``newHeads`` events and emits\n *  ``\"block\"`` events.\n */\nexport class SocketBlockSubscriber extends SocketSubscriber {\n    /**\n     *  @_ignore:\n     */\n    constructor(provider: SocketProvider) {\n        super(provider, [ \"newHeads\" ]);\n    }\n\n    async _emit(provider: SocketProvider, message: any): Promise<void> {\n        provider.emit(\"block\", parseInt(message.number));\n    }\n}\n\n/**\n *  A **SocketPendingSubscriber** listens for pending transacitons and emits\n *  ``\"pending\"`` events.\n */\nexport class SocketPendingSubscriber extends SocketSubscriber {\n\n    /**\n     *  @_ignore:\n     */\n    constructor(provider: SocketProvider) {\n        super(provider, [ \"newPendingTransactions\" ]);\n    }\n\n    async _emit(provider: SocketProvider, message: any): Promise<void> {\n        provider.emit(\"pending\", message);\n    }\n}\n\n/**\n *  A **SocketEventSubscriber** listens for event logs.\n */\nexport class SocketEventSubscriber extends SocketSubscriber {\n    #logFilter: string;\n\n    /**\n     *  The filter.\n     */\n    get logFilter(): EventFilter { return JSON.parse(this.#logFilter); }\n\n    /**\n     *  @_ignore:\n     */\n    constructor(provider: SocketProvider, filter: EventFilter) {\n        super(provider, [ \"logs\", filter ]);\n        this.#logFilter = JSON.stringify(filter);\n    }\n\n    async _emit(provider: SocketProvider, message: any): Promise<void> {\n        provider.emit(this.logFilter, provider._wrapLog(message, provider._network));\n    }\n}\n\n/**\n *  A **SocketProvider** is backed by a long-lived connection over a\n *  socket, which can subscribe and receive real-time messages over\n *  its communication channel.\n */\nexport class SocketProvider extends JsonRpcApiProvider {\n    #callbacks: Map<number, { payload: JsonRpcPayload, resolve: (r: any) => void, reject: (e: Error) => void }>;\n\n    // Maps each filterId to its subscriber\n    #subs: Map<number | string, SocketSubscriber>;\n\n    // If any events come in before a subscriber has finished\n    // registering, queue them\n    #pending: Map<number | string, Array<any>>;\n\n    /**\n     *  Creates a new **SocketProvider** connected to %%network%%.\n     *\n     *  If unspecified, the network will be discovered.\n     */\n    constructor(network?: Networkish, _options?: JsonRpcApiProviderOptions) {\n        // Copy the options\n        const options = Object.assign({ }, (_options != null) ? _options: { });\n\n        // Support for batches is generally not supported for\n        // connection-base providers; if this changes in the future\n        // the _send should be updated to reflect this\n        assertArgument(options.batchMaxCount == null || options.batchMaxCount === 1,\n            \"sockets-based providers do not support batches\", \"options.batchMaxCount\", _options);\n        options.batchMaxCount = 1;\n\n        // Socket-based Providers (generally) cannot change their network,\n        // since they have a long-lived connection; but let people override\n        // this if they have just cause.\n        if (options.staticNetwork == null) { options.staticNetwork = true; }\n\n        super(network, options);\n        this.#callbacks = new Map();\n        this.#subs = new Map();\n        this.#pending = new Map();\n    }\n\n    // This value is only valid after _start has been called\n    /*\n    get _network(): Network {\n        if (this.#network == null) {\n            throw new Error(\"this shouldn't happen\");\n        }\n        return this.#network.clone();\n    }\n    */\n\n    _getSubscriber(sub: Subscription): Subscriber {\n        switch (sub.type) {\n            case \"close\":\n                return new UnmanagedSubscriber(\"close\");\n            case \"block\":\n                return new SocketBlockSubscriber(this);\n            case \"pending\":\n                return new SocketPendingSubscriber(this);\n            case \"event\":\n                return new SocketEventSubscriber(this, sub.filter);\n            case \"orphan\":\n                // Handled auto-matically within AbstractProvider\n                // when the log.removed = true\n                if (sub.filter.orphan === \"drop-log\") {\n                    return new UnmanagedSubscriber(\"drop-log\");\n                }\n        }\n        return super._getSubscriber(sub);\n    }\n\n    /**\n     *  Register a new subscriber. This is used internalled by Subscribers\n     *  and generally is unecessary unless extending capabilities.\n     */\n    _register(filterId: number | string, subscriber: SocketSubscriber): void {\n        this.#subs.set(filterId, subscriber);\n        const pending = this.#pending.get(filterId);\n        if (pending) {\n            for (const message of pending) {\n                subscriber._handleMessage(message);\n            }\n            this.#pending.delete(filterId);\n        }\n    }\n\n    async _send(payload: JsonRpcPayload | Array<JsonRpcPayload>): Promise<Array<JsonRpcResult | JsonRpcError>> {\n        // WebSocket provider doesn't accept batches\n        assertArgument(!Array.isArray(payload), \"WebSocket does not support batch send\", \"payload\", payload);\n\n        // @TODO: stringify payloads here and store to prevent mutations\n\n        // Prepare a promise to respond to\n        const promise = new Promise((resolve, reject) => {\n            this.#callbacks.set(payload.id, { payload, resolve, reject });\n        });\n\n        // Wait until the socket is connected before writing to it\n        await this._waitUntilReady();\n\n        // Write the request to the socket\n        await this._write(JSON.stringify(payload));\n\n        return <Array<JsonRpcResult | JsonRpcError>>[ await promise ];\n    }\n\n    // Sub-classes must call this once they are connected\n    /*\n    async _start(): Promise<void> {\n        if (this.#ready) { return; }\n\n        for (const { payload } of this.#callbacks.values()) {\n            await this._write(JSON.stringify(payload));\n        }\n\n        this.#ready = (async function() {\n            await super._start();\n        })();\n    }\n    */\n\n    /**\n     *  Sub-classes **must** call this with messages received over their\n     *  transport to be processed and dispatched.\n     */\n    async _processMessage(message: string): Promise<void> {\n        const result = <JsonRpcResult | JsonRpcError | JsonRpcSubscription>(JSON.parse(message));\n\n        if (result && typeof(result) === \"object\" && \"id\" in result) {\n            const callback = this.#callbacks.get(result.id);\n            if (callback == null) {\n                this.emit(\"error\", makeError(\"received result for unknown id\", \"UNKNOWN_ERROR\", {\n                    reasonCode: \"UNKNOWN_ID\",\n                    result\n                }));\n                return;\n            }\n            this.#callbacks.delete(result.id);\n\n            callback.resolve(result);\n\n        } else if (result && result.method === \"eth_subscription\") {\n            const filterId = result.params.subscription;\n            const subscriber = this.#subs.get(filterId);\n            if (subscriber) {\n                subscriber._handleMessage(result.params.result);\n            } else {\n                let pending = this.#pending.get(filterId);\n                if (pending == null) {\n                    pending = [ ];\n                    this.#pending.set(filterId, pending);\n                }\n                pending.push(result.params.result);\n            }\n\n        } else {\n            this.emit(\"error\", makeError(\"received unexpected message\", \"UNKNOWN_ERROR\", {\n                reasonCode: \"UNEXPECTED_MESSAGE\",\n                result\n            }));\n            return;\n        }\n    }\n\n    /**\n     *  Sub-classes **must** override this to send %%message%% over their\n     *  transport.\n     */\n    async _write(message: string): Promise<void> {\n        throw new Error(\"sub-classes must override this\");\n    }\n}\n", "\n\nimport { WebSocket as _WebSocket } from \"./ws.js\"; /*-browser*/\n\nimport { SocketProvider } from \"./provider-socket.js\";\n\nimport type { JsonRpcApiProviderOptions} from \"./provider-jsonrpc.js\";\nimport type { Networkish } from \"./network.js\";\n\n/**\n *  A generic interface to a Websocket-like object.\n */\nexport interface WebSocketLike {\n    onopen: null | ((...args: Array<any>) => any);\n    onmessage: null | ((...args: Array<any>) => any);\n    onerror: null | ((...args: Array<any>) => any);\n\n    readyState: number;\n\n    send(payload: any): void;\n    close(code?: number, reason?: string): void;\n}\n\n/**\n *  A function which can be used to re-create a WebSocket connection\n *  on disconnect.\n */\nexport type WebSocketCreator = () => WebSocketLike;\n\n/**\n *  A JSON-RPC provider which is backed by a WebSocket.\n *\n *  WebSockets are often preferred because they retain a live connection\n *  to a server, which permits more instant access to events.\n *\n *  However, this incurs higher server infrasturture costs, so additional\n *  resources may be required to host your own WebSocket nodes and many\n *  third-party services charge additional fees for WebSocket endpoints.\n */\nexport class WebSocketProvider extends SocketProvider {\n    #connect: null | WebSocketCreator;\n\n    #websocket: null | WebSocketLike;\n    get websocket(): WebSocketLike {\n        if (this.#websocket == null) { throw new Error(\"websocket closed\"); }\n        return this.#websocket;\n    }\n\n    constructor(url: string | WebSocketLike | WebSocketCreator, network?: Networkish, options?: JsonRpcApiProviderOptions) {\n        super(network, options);\n        if (typeof(url) === \"string\") {\n            this.#connect = () => { return new _WebSocket(url); };\n            this.#websocket = this.#connect();\n        } else if (typeof(url) === \"function\") {\n            this.#connect = url;\n            this.#websocket = url();\n        } else {\n            this.#connect = null;\n            this.#websocket = url;\n        }\n\n        this.websocket.onopen = async () => {\n            try {\n                await this._start()\n                this.resume();\n            } catch (error) {\n                console.log(\"failed to start WebsocketProvider\", error);\n                // @TODO: now what? Attempt reconnect?\n            }\n        };\n\n        this.websocket.onmessage = (message: { data: string }) => {\n            this._processMessage(message.data);\n        };\n/*\n        this.websocket.onclose = (event) => {\n            // @TODO: What event.code should we reconnect on?\n            const reconnect = false;\n            if (reconnect) {\n                this.pause(true);\n                if (this.#connect) {\n                    this.#websocket = this.#connect();\n                    this.#websocket.onopen = ...\n                    // @TODO: this requires the super class to rebroadcast; move it there\n                }\n                this._reconnect();\n            }\n        };\n*/\n    }\n\n    async _write(message: string): Promise<void> {\n        this.websocket.send(message);\n    }\n\n    async destroy(): Promise<void> {\n        if (this.#websocket != null) {\n            this.#websocket.close();\n            this.#websocket = null;\n        }\n        super.destroy();\n    }\n}\n", "/**\n *  [[link-infura]] provides a third-party service for connecting to\n *  various blockchains over JSON-RPC.\n *\n *  **Supported Networks**\n *\n *  - Ethereum Mainnet (``mainnet``)\n *  - Goerli Testnet (``goerli``)\n *  - Sepolia Testnet (``sepolia``)\n *  - Arbitrum (``arbitrum``)\n *  - Arbitrum Goerli Testnet (``arbitrum-goerli``)\n *  - Arbitrum Sepolia Testnet (``arbitrum-sepolia``)\n *  - Base (``base``)\n *  - Base Goerlia Testnet (``base-goerli``)\n *  - Base Sepolia Testnet (``base-sepolia``)\n *  - BNB Smart Chain Mainnet (``bnb``)\n *  - BNB Smart Chain Testnet (``bnbt``)\n *  - Linea (``linea``)\n *  - Linea Goerlia Testnet (``linea-goerli``)\n *  - Optimism (``optimism``)\n *  - Optimism Goerli Testnet (``optimism-goerli``)\n *  - Optimism Sepolia Testnet (``optimism-sepolia``)\n *  - Polygon (``matic``)\n *  - Polygon Mumbai Testnet (``matic-mumbai``)\n *\n *  @_subsection: api/providers/thirdparty:INFURA  [providers-infura]\n */\nimport {\n    defineProperties, FetchRequest, assert, assertArgument\n} from \"../utils/index.js\";\n\nimport { showThrottleMessage } from \"./community.js\";\nimport { Network } from \"./network.js\";\nimport { JsonRpcProvider } from \"./provider-jsonrpc.js\";\nimport { WebSocketProvider } from \"./provider-websocket.js\";\n\nimport type { AbstractProvider } from \"./abstract-provider.js\";\nimport type { CommunityResourcable } from \"./community.js\";\nimport type { Networkish } from \"./network.js\";\n\n\nconst defaultProjectId = \"84842078b09946638c03157f83405213\";\n\nfunction getHost(name: string): string {\n    switch(name) {\n        case \"mainnet\":\n            return \"mainnet.infura.io\";\n        case \"goerli\":\n            return \"goerli.infura.io\";\n        case \"sepolia\":\n            return \"sepolia.infura.io\";\n\n        case \"arbitrum\":\n            return \"arbitrum-mainnet.infura.io\";\n        case \"arbitrum-goerli\":\n            return \"arbitrum-goerli.infura.io\";\n        case \"arbitrum-sepolia\":\n            return \"arbitrum-sepolia.infura.io\";\n        case \"base\":\n            return \"base-mainnet.infura.io\";\n        case \"base-goerlia\":\n            return \"base-goerli.infura.io\";\n        case \"base-sepolia\":\n            return \"base-sepolia.infura.io\";\n        case \"bnb\":\n            return \"bnbsmartchain-mainnet.infura.io\";\n        case \"bnbt\":\n            return \"bnbsmartchain-testnet.infura.io\";\n        case \"linea\":\n            return \"linea-mainnet.infura.io\";\n        case \"linea-goerli\":\n            return \"linea-goerli.infura.io\";\n        case \"matic\":\n            return \"polygon-mainnet.infura.io\";\n        case \"matic-mumbai\":\n            return \"polygon-mumbai.infura.io\";\n        case \"optimism\":\n            return \"optimism-mainnet.infura.io\";\n        case \"optimism-goerli\":\n            return \"optimism-goerli.infura.io\";\n        case \"optimism-sepolia\":\n            return \"optimism-sepolia.infura.io\";\n    }\n\n    assertArgument(false, \"unsupported network\", \"network\", name);\n}\n\n/**\n *  The **InfuraWebSocketProvider** connects to the [[link-infura]]\n *  WebSocket end-points.\n *\n *  By default, a highly-throttled API key is used, which is\n *  appropriate for quick prototypes and simple scripts. To\n *  gain access to an increased rate-limit, it is highly\n *  recommended to [sign up here](link-infura-signup).\n */\nexport class InfuraWebSocketProvider extends WebSocketProvider implements CommunityResourcable {\n\n    /**\n     *  The Project ID for the INFURA connection.\n     */\n    readonly projectId!: string;\n\n    /**\n     *  The Project Secret.\n     *\n     *  If null, no authenticated requests are made. This should not\n     *  be used outside of private contexts.\n     */\n    readonly projectSecret!: null | string;\n\n    /**\n     *  Creates a new **InfuraWebSocketProvider**.\n     */\n    constructor(network?: Networkish, projectId?: string) {\n        const provider = new InfuraProvider(network, projectId);\n\n        const req = provider._getConnection();\n        assert(!req.credentials, \"INFURA WebSocket project secrets unsupported\",\n            \"UNSUPPORTED_OPERATION\", { operation: \"InfuraProvider.getWebSocketProvider()\" });\n\n        const url = req.url.replace(/^http/i, \"ws\").replace(\"/v3/\", \"/ws/v3/\");\n        super(url, network);\n\n        defineProperties<InfuraWebSocketProvider>(this, {\n            projectId: provider.projectId,\n            projectSecret: provider.projectSecret\n        });\n    }\n\n    isCommunityResource(): boolean {\n        return (this.projectId === defaultProjectId);\n    }\n}\n\n/**\n *  The **InfuraProvider** connects to the [[link-infura]]\n *  JSON-RPC end-points.\n *\n *  By default, a highly-throttled API key is used, which is\n *  appropriate for quick prototypes and simple scripts. To\n *  gain access to an increased rate-limit, it is highly\n *  recommended to [sign up here](link-infura-signup).\n */\nexport class InfuraProvider extends JsonRpcProvider implements CommunityResourcable {\n    /**\n     *  The Project ID for the INFURA connection.\n     */\n    readonly projectId!: string;\n\n    /**\n     *  The Project Secret.\n     *\n     *  If null, no authenticated requests are made. This should not\n     *  be used outside of private contexts.\n     */\n    readonly projectSecret!: null | string;\n\n    /**\n     *  Creates a new **InfuraProvider**.\n     */\n    constructor(_network?: Networkish, projectId?: null | string, projectSecret?: null | string) {\n        if (_network == null) { _network = \"mainnet\"; }\n        const network = Network.from(_network);\n        if (projectId == null) { projectId = defaultProjectId; }\n        if (projectSecret == null) { projectSecret = null; }\n\n        const request = InfuraProvider.getRequest(network, projectId, projectSecret);\n        super(request, network, { staticNetwork: network });\n\n        defineProperties<InfuraProvider>(this, { projectId, projectSecret });\n    }\n\n    _getProvider(chainId: number): AbstractProvider {\n        try {\n            return new InfuraProvider(chainId, this.projectId, this.projectSecret);\n        } catch (error) { }\n        return super._getProvider(chainId);\n    }\n\n    isCommunityResource(): boolean {\n        return (this.projectId === defaultProjectId);\n    }\n\n    /**\n     *  Creates a new **InfuraWebSocketProvider**.\n     */\n    static getWebSocketProvider(network?: Networkish, projectId?: string): InfuraWebSocketProvider {\n        return new InfuraWebSocketProvider(network, projectId);\n    }\n\n    /**\n     *  Returns a prepared request for connecting to %%network%%\n     *  with %%projectId%% and %%projectSecret%%.\n     */\n    static getRequest(network: Network, projectId?: null | string, projectSecret?: null | string): FetchRequest {\n        if (projectId == null) { projectId = defaultProjectId; }\n        if (projectSecret == null) { projectSecret = null; }\n\n        const request = new FetchRequest(`https:/\\/${ getHost(network.name) }/v3/${ projectId }`);\n        request.allowGzip = true;\n        if (projectSecret) { request.setCredentials(\"\", projectSecret); }\n\n        if (projectId === defaultProjectId) {\n            request.retryFunc = async (request, response, attempt) => {\n                showThrottleMessage(\"InfuraProvider\");\n                return true;\n            };\n        }\n\n        return request;\n    }\n}\n", "/**\n *  [[link-quicknode]] provides a third-party service for connecting to\n *  various blockchains over JSON-RPC.\n *\n *  **Supported Networks**\n *\n *  - Ethereum Mainnet (``mainnet``)\n *  - Goerli Testnet (``goerli``)\n *  - Sepolia Testnet (``sepolia``)\n *  - Holesky Testnet (``holesky``)\n *  - Arbitrum (``arbitrum``)\n *  - Arbitrum Goerli Testnet (``arbitrum-goerli``)\n *  - Arbitrum Sepolia Testnet (``arbitrum-sepolia``)\n *  - Base Mainnet (``base``);\n *  - Base Goerli Testnet (``base-goerli``);\n *  - Base Sepolia Testnet (``base-sepolia``);\n *  - BNB Smart Chain Mainnet (``bnb``)\n *  - BNB Smart Chain Testnet (``bnbt``)\n *  - Optimism (``optimism``)\n *  - Optimism Goerli Testnet (``optimism-goerli``)\n *  - Optimism Sepolia Testnet (``optimism-sepolia``)\n *  - Polygon (``matic``)\n *  - Polygon Mumbai Testnet (``matic-mumbai``)\n *\n *  @_subsection: api/providers/thirdparty:QuickNode  [providers-quicknode]\n */\n\nimport {\n    defineProperties, FetchRequest, assertArgument\n} from \"../utils/index.js\";\n\nimport { showThrottleMessage } from \"./community.js\";\nimport { Network } from \"./network.js\";\nimport { JsonRpcProvider } from \"./provider-jsonrpc.js\";\n\nimport type { AbstractProvider } from \"./abstract-provider.js\";\nimport type { CommunityResourcable } from \"./community.js\";\nimport type { Networkish } from \"./network.js\";\n\n\nconst defaultToken = \"919b412a057b5e9c9b6dce193c5a60242d6efadb\";\n\nfunction getHost(name: string): string {\n    switch(name) {\n        case \"mainnet\":\n            return \"ethers.quiknode.pro\";\n        case \"goerli\":\n            return \"ethers.ethereum-goerli.quiknode.pro\";\n        case \"sepolia\":\n            return \"ethers.ethereum-sepolia.quiknode.pro\";\n        case \"holesky\":\n            return \"ethers.ethereum-holesky.quiknode.pro\";\n\n        case \"arbitrum\":\n            return \"ethers.arbitrum-mainnet.quiknode.pro\";\n        case \"arbitrum-goerli\":\n            return \"ethers.arbitrum-goerli.quiknode.pro\";\n        case \"arbitrum-sepolia\":\n            return \"ethers.arbitrum-sepolia.quiknode.pro\";\n        case \"base\":\n            return \"ethers.base-mainnet.quiknode.pro\";\n        case \"base-goerli\":\n            return \"ethers.base-goerli.quiknode.pro\";\n        case \"base-spolia\":\n            return \"ethers.base-sepolia.quiknode.pro\";\n        case \"bnb\":\n            return \"ethers.bsc.quiknode.pro\";\n        case \"bnbt\":\n            return \"ethers.bsc-testnet.quiknode.pro\";\n        case \"matic\":\n            return \"ethers.matic.quiknode.pro\";\n        case \"matic-mumbai\":\n            return \"ethers.matic-testnet.quiknode.pro\";\n        case \"optimism\":\n            return \"ethers.optimism.quiknode.pro\";\n        case \"optimism-goerli\":\n            return \"ethers.optimism-goerli.quiknode.pro\";\n        case \"optimism-sepolia\":\n            return \"ethers.optimism-sepolia.quiknode.pro\";\n        case \"xdai\":\n            return \"ethers.xdai.quiknode.pro\";\n    }\n\n    assertArgument(false, \"unsupported network\", \"network\", name);\n}\n\n/*\n@TODO:\n  These networks are not currently present in the Network\n  default included networks. Research them and ensure they\n  are EVM compatible and work with ethers\n\n  http://ethers.matic-amoy.quiknode.pro\n\n  http://ethers.avalanche-mainnet.quiknode.pro\n  http://ethers.avalanche-testnet.quiknode.pro\n  http://ethers.blast-sepolia.quiknode.pro\n  http://ethers.celo-mainnet.quiknode.pro\n  http://ethers.fantom.quiknode.pro\n  http://ethers.imx-demo.quiknode.pro\n  http://ethers.imx-mainnet.quiknode.pro\n  http://ethers.imx-testnet.quiknode.pro\n  http://ethers.near-mainnet.quiknode.pro\n  http://ethers.near-testnet.quiknode.pro\n  http://ethers.nova-mainnet.quiknode.pro\n  http://ethers.scroll-mainnet.quiknode.pro\n  http://ethers.scroll-testnet.quiknode.pro\n  http://ethers.tron-mainnet.quiknode.pro\n  http://ethers.zkevm-mainnet.quiknode.pro\n  http://ethers.zkevm-testnet.quiknode.pro\n  http://ethers.zksync-mainnet.quiknode.pro\n  http://ethers.zksync-testnet.quiknode.pro\n*/\n\n\n\n/**\n *  The **QuickNodeProvider** connects to the [[link-quicknode]]\n *  JSON-RPC end-points.\n *\n *  By default, a highly-throttled API token is used, which is\n *  appropriate for quick prototypes and simple scripts. To\n *  gain access to an increased rate-limit, it is highly\n *  recommended to [sign up here](link-quicknode).\n */\nexport class QuickNodeProvider extends JsonRpcProvider implements CommunityResourcable {\n    /**\n     *  The API token.\n     */\n    readonly token!: string;\n\n    /**\n     *  Creates a new **QuickNodeProvider**.\n     */\n    constructor(_network?: Networkish, token?: null | string) {\n        if (_network == null) { _network = \"mainnet\"; }\n        const network = Network.from(_network);\n        if (token == null) { token = defaultToken; }\n\n        const request = QuickNodeProvider.getRequest(network, token);\n        super(request, network, { staticNetwork: network });\n\n        defineProperties<QuickNodeProvider>(this, { token });\n    }\n\n    _getProvider(chainId: number): AbstractProvider {\n        try {\n            return new QuickNodeProvider(chainId, this.token);\n        } catch (error) { }\n        return super._getProvider(chainId);\n    }\n\n    isCommunityResource(): boolean {\n        return (this.token === defaultToken);\n    }\n\n    /**\n     *  Returns a new request prepared for %%network%% and the\n     *  %%token%%.\n     */\n    static getRequest(network: Network, token?: null | string): FetchRequest {\n        if (token == null) { token = defaultToken; }\n\n        const request = new FetchRequest(`https:/\\/${ getHost(network.name) }/${ token }`);\n        request.allowGzip = true;\n        //if (projectSecret) { request.setCredentials(\"\", projectSecret); }\n\n        if (token === defaultToken) {\n            request.retryFunc = async (request, response, attempt) => {\n                showThrottleMessage(\"QuickNodeProvider\");\n                return true;\n            };\n        }\n\n        return request;\n    }\n}\n", "/**\n *  A **FallbackProvider** provides resilience, security and performance\n *  in a way that is customizable and configurable.\n *\n *  @_section: api/providers/fallback-provider:Fallback Provider [about-fallback-provider]\n */\nimport {\n    assert, assertArgument, getBigInt, getNumber, isError\n} from \"../utils/index.js\";\n\nimport { AbstractProvider } from \"./abstract-provider.js\";\nimport { Network } from \"./network.js\"\n\nimport type { PerformActionRequest } from \"./abstract-provider.js\";\nimport type { Networkish } from \"./network.js\"\n\nconst BN_1 = BigInt(\"1\");\nconst BN_2 = BigInt(\"2\");\n\nfunction shuffle<T = any>(array: Array<T>): void {\n    for (let i = array.length - 1; i > 0; i--) {\n        const j = Math.floor(Math.random() * (i + 1));\n        const tmp = array[i];\n        array[i] = array[j];\n        array[j] = tmp;\n    }\n}\n\nfunction stall(duration: number): Promise<void> {\n    return new Promise((resolve) => { setTimeout(resolve, duration); });\n}\n\nfunction getTime(): number { return (new Date()).getTime(); }\n\nfunction stringify(value: any): string {\n    return JSON.stringify(value, (key, value) => {\n        if (typeof(value) === \"bigint\") {\n            return { type: \"bigint\", value: value.toString() };\n        }\n        return value;\n    });\n}\n\n/**\n *  A configuration entry for how to use a [[Provider]].\n */\nexport interface FallbackProviderConfig {\n\n    /**\n     *  The provider.\n     */\n    provider: AbstractProvider;\n\n    /**\n     *  The amount of time to wait before kicking off the next provider.\n     *\n     *  Any providers that have not responded can still respond and be\n     *  counted, but this ensures new providers start.\n     */\n    stallTimeout?: number;\n\n    /**\n     *  The priority. Lower priority providers are dispatched first.\n     */\n    priority?: number;\n\n    /**\n     *  The amount of weight a provider is given against the quorum.\n     */\n    weight?: number;\n};\n\nconst defaultConfig = { stallTimeout: 400, priority: 1, weight: 1 };\n\n// We track a bunch of extra stuff that might help debug problems or\n// optimize infrastructure later on.\n/**\n *  The statistics and state maintained for a [[Provider]].\n */\nexport interface FallbackProviderState extends Required<FallbackProviderConfig> {\n\n    /**\n     *  The most recent blockNumber this provider has reported (-2 if none).\n     */\n    blockNumber: number;\n\n    /**\n     *  The number of total requests ever sent to this provider.\n     */\n    requests: number;\n\n    /**\n     *  The number of responses that errored.\n     */\n    errorResponses: number;\n\n    /**\n     *  The number of responses that occured after the result resolved.\n     */\n    lateResponses: number;\n\n    /**\n     *  How many times syncing was required to catch up the expected block.\n     */\n    outOfSync: number;\n\n    /**\n     *  The number of requests which reported unsupported operation.\n     */\n    unsupportedEvents: number;\n\n    /**\n     *  A rolling average (5% current duration) for response time.\n     */\n    rollingDuration: number;\n\n    /**\n     *  The ratio of quorum-agreed results to total.\n     */\n    score: number;\n}\n\ninterface Config extends FallbackProviderState {\n    _updateNumber: null | Promise<any>;\n    _network: null | Network;\n    _totalTime: number;\n    _lastFatalError: null | Error;\n    _lastFatalErrorTimestamp: number;\n}\n\nconst defaultState = {\n    blockNumber: -2, requests: 0, lateResponses: 0, errorResponses: 0,\n    outOfSync: -1, unsupportedEvents: 0, rollingDuration: 0, score: 0,\n    _network: null, _updateNumber: null, _totalTime: 0,\n    _lastFatalError: null, _lastFatalErrorTimestamp: 0\n};\n\n\nasync function waitForSync(config: Config, blockNumber: number): Promise<void> {\n    while (config.blockNumber < 0 || config.blockNumber < blockNumber) {\n        if (!config._updateNumber) {\n            config._updateNumber = (async () => {\n                try {\n                    const blockNumber = await config.provider.getBlockNumber();\n                    if (blockNumber > config.blockNumber) {\n                        config.blockNumber = blockNumber;\n                    }\n                } catch (error: any) {\n                    config.blockNumber = -2;\n                    config._lastFatalError = error;\n                    config._lastFatalErrorTimestamp = getTime();\n                }\n                config._updateNumber = null;\n            })();\n        }\n        await config._updateNumber;\n        config.outOfSync++;\n        if (config._lastFatalError) { break; }\n    }\n}\n\n/**\n *  Additional options to configure a [[FallbackProvider]].\n */\nexport type FallbackProviderOptions = {\n    // How many providers must agree on a value before reporting\n    // back the response\n    quorum?: number;\n\n    // How many providers must have reported the same event\n    // for it to be emitted (currently unimplmented)\n    eventQuorum?: number;\n\n    // How many providers to dispatch each event to simultaneously.\n    // Set this to 0 to use getLog polling, which implies eventQuorum\n    // is equal to quorum. (currently unimplemented)\n    eventWorkers?: number;\n\n    cacheTimeout?: number;\n\n    pollingInterval?: number;\n};\n\ntype RunnerResult = { result: any } | { error: Error };\n\ntype RunnerState = {\n    config: Config;\n    staller: null | Promise<void>;\n    didBump: boolean;\n    perform: null | Promise<any>;\n    result: null | RunnerResult;\n}\n\nfunction _normalize(value: any): string {\n    if (value == null) { return \"null\"; }\n\n    if (Array.isArray(value)) {\n        return \"[\" + (value.map(_normalize)).join(\",\") + \"]\";\n    }\n\n    if (typeof(value) === \"object\" && typeof(value.toJSON) === \"function\") {\n        return _normalize(value.toJSON());\n    }\n\n    switch (typeof(value)) {\n        case \"boolean\": case \"symbol\":\n            return value.toString();\n        case \"bigint\": case \"number\":\n            return BigInt(value).toString();\n        case \"string\":\n            return JSON.stringify(value);\n        case \"object\": {\n            const keys = Object.keys(value);\n            keys.sort();\n            return \"{\" + keys.map((k) => `${ JSON.stringify(k) }:${ _normalize(value[k]) }`).join(\",\") + \"}\";\n        }\n    }\n\n    console.log(\"Could not serialize\", value);\n    throw new Error(\"Hmm...\");\n}\n\nfunction normalizeResult(value: RunnerResult): { tag: string, value: any } {\n\n    if (\"error\" in value) {\n        const error = value.error;\n        return { tag: _normalize(error), value: error };\n    }\n\n    const result = value.result;\n    return { tag: _normalize(result), value: result };\n}\n\ntype TallyResult = {\n    tag: string;\n    value: any;\n    weight: number;\n};\n\n// This strategy picks the highest weight result, as long as the weight is\n// equal to or greater than quorum\nfunction checkQuorum(quorum: number, results: Array<TallyResult>): any | Error {\n    const tally: Map<string, { value: any, weight: number }> = new Map();\n    for (const { value, tag, weight } of results) {\n        const t = tally.get(tag) || { value, weight: 0 };\n        t.weight += weight;\n        tally.set(tag, t);\n    }\n\n    let best: null | { value: any, weight: number } = null;\n\n    for (const r of tally.values()) {\n        if (r.weight >= quorum && (!best || r.weight > best.weight)) {\n            best = r;\n        }\n    }\n\n    if (best) { return best.value; }\n\n    return undefined;\n}\n\nfunction getMedian(quorum: number, results: Array<TallyResult>): undefined | bigint | Error {\n    let resultWeight = 0;\n\n    const errorMap: Map<string, { weight: number, value: Error }> = new Map();\n    let bestError: null | { weight: number, value: Error } = null;\n\n    const values: Array<bigint> = [ ];\n    for (const { value, tag, weight } of results) {\n        if (value instanceof Error) {\n            const e = errorMap.get(tag) || { value, weight: 0 };\n            e.weight += weight;\n            errorMap.set(tag, e);\n\n            if (bestError == null || e.weight > bestError.weight) { bestError = e; }\n        } else {\n            values.push(BigInt(value));\n            resultWeight += weight;\n        }\n    }\n\n    if (resultWeight < quorum) {\n        // We have quorum for an error\n        if (bestError && bestError.weight >= quorum) { return bestError.value; }\n\n        // We do not have quorum for a result\n        return undefined;\n    }\n\n    // Get the sorted values\n    values.sort((a, b) => ((a < b) ? -1: (b > a) ? 1: 0));\n\n    const mid = Math.floor(values.length / 2);\n\n    // Odd-length; take the middle value\n    if (values.length % 2) { return values[mid]; }\n\n    // Even length; take the ceiling of the mean of the center two values\n    return (values[mid - 1] + values[mid] + BN_1) / BN_2;\n}\n\nfunction getAnyResult(quorum: number, results: Array<TallyResult>): undefined | any | Error {\n    // If any value or error meets quorum, that is our preferred result\n    const result = checkQuorum(quorum, results);\n    if (result !== undefined) { return result; }\n\n    // Otherwise, do we have any result?\n    for (const r of results) {\n        if (r.value) { return r.value; }\n    }\n\n    // Nope!\n    return undefined;\n}\n\nfunction getFuzzyMode(quorum: number, results: Array<TallyResult>): undefined | number {\n    if (quorum === 1) { return getNumber(<bigint>getMedian(quorum, results), \"%internal\"); }\n\n    const tally: Map<number, { result: number, weight: number }> = new Map();\n    const add = (result: number, weight: number) => {\n        const t = tally.get(result) || { result, weight: 0 };\n        t.weight += weight;\n        tally.set(result, t);\n    };\n\n    for (const { weight, value } of results) {\n        const r = getNumber(value);\n        add(r - 1, weight);\n        add(r, weight);\n        add(r + 1, weight);\n    }\n\n    let bestWeight = 0;\n    let bestResult: undefined | number = undefined;\n\n    for (const { weight, result } of tally.values()) {\n        // Use this result, if this result meets quorum and has either:\n        // - a better weight\n        // - or equal weight, but the result is larger\n        if (weight >= quorum && (weight > bestWeight || (bestResult != null && weight === bestWeight && result > bestResult))) {\n            bestWeight = weight;\n            bestResult = result;\n        }\n    }\n\n    return bestResult;\n}\n\n/**\n *  A **FallbackProvider** manages several [[Providers]] providing\n *  resilience by switching between slow or misbehaving nodes, security\n *  by requiring multiple backends to aggree and performance by allowing\n *  faster backends to respond earlier.\n *\n */\nexport class FallbackProvider extends AbstractProvider {\n\n    /**\n     *  The number of backends that must agree on a value before it is\n     *  accpeted.\n     */\n    readonly quorum: number;\n\n    /**\n     *  @_ignore:\n     */\n    readonly eventQuorum: number;\n\n    /**\n     *  @_ignore:\n     */\n    readonly eventWorkers: number;\n\n    readonly #configs: Array<Config>;\n\n    #height: number;\n    #initialSyncPromise: null | Promise<void>;\n\n    /**\n     *  Creates a new **FallbackProvider** with %%providers%% connected to\n     *  %%network%%.\n     *\n     *  If a [[Provider]] is included in %%providers%%, defaults are used\n     *  for the configuration.\n     */\n    constructor(providers: Array<AbstractProvider | FallbackProviderConfig>, network?: Networkish, options?: FallbackProviderOptions) {\n        super(network, options);\n\n        this.#configs = providers.map((p) => {\n            if (p instanceof AbstractProvider) {\n                return Object.assign({ provider: p }, defaultConfig, defaultState );\n            } else {\n                return Object.assign({ }, defaultConfig, p, defaultState );\n            }\n        });\n\n        this.#height = -2;\n        this.#initialSyncPromise = null;\n\n        if (options && options.quorum != null) {\n            this.quorum = options.quorum;\n        } else {\n            this.quorum = Math.ceil(this.#configs.reduce((accum, config) => {\n                accum += config.weight;\n                return accum;\n            }, 0) / 2);\n        }\n\n        this.eventQuorum = 1;\n        this.eventWorkers = 1;\n\n        assertArgument(this.quorum <= this.#configs.reduce((a, c) => (a + c.weight), 0),\n            \"quorum exceed provider wieght\", \"quorum\", this.quorum);\n    }\n\n    get providerConfigs(): Array<FallbackProviderState> {\n        return this.#configs.map((c) => {\n            const result: any = Object.assign({ }, c);\n            for (const key in result) {\n                if (key[0] === \"_\") { delete result[key]; }\n            }\n            return result;\n        });\n    }\n\n    async _detectNetwork(): Promise<Network> {\n        return Network.from(getBigInt(await this._perform({ method: \"chainId\" })));\n    }\n\n    // @TODO: Add support to select providers to be the event subscriber\n    //_getSubscriber(sub: Subscription): Subscriber {\n    //    throw new Error(\"@TODO\");\n    //}\n\n    /**\n     *  Transforms a %%req%% into the correct method call on %%provider%%.\n     */\n    async _translatePerform(provider: AbstractProvider, req: PerformActionRequest): Promise<any> {\n        switch (req.method) {\n            case \"broadcastTransaction\":\n                return await provider.broadcastTransaction(req.signedTransaction);\n            case \"call\":\n                return await provider.call(Object.assign({ }, req.transaction, { blockTag: req.blockTag }));\n            case \"chainId\":\n                return (await provider.getNetwork()).chainId;\n            case \"estimateGas\":\n                return await provider.estimateGas(req.transaction);\n            case \"getBalance\":\n                return await provider.getBalance(req.address, req.blockTag);\n            case \"getBlock\": {\n                const block = (\"blockHash\" in req) ? req.blockHash: req.blockTag;\n                return await provider.getBlock(block, req.includeTransactions);\n            }\n            case \"getBlockNumber\":\n                return await provider.getBlockNumber();\n            case \"getCode\":\n                return await provider.getCode(req.address, req.blockTag);\n            case \"getGasPrice\":\n                return (await provider.getFeeData()).gasPrice;\n            case \"getPriorityFee\":\n                return (await provider.getFeeData()).maxPriorityFeePerGas;\n            case \"getLogs\":\n                return await provider.getLogs(req.filter);\n            case \"getStorage\":\n                return await provider.getStorage(req.address, req.position, req.blockTag);\n            case \"getTransaction\":\n                return await provider.getTransaction(req.hash);\n            case \"getTransactionCount\":\n                return await provider.getTransactionCount(req.address, req.blockTag);\n            case \"getTransactionReceipt\":\n                return await provider.getTransactionReceipt(req.hash);\n            case \"getTransactionResult\":\n                return await provider.getTransactionResult(req.hash);\n        }\n    }\n\n    // Grab the next (random) config that is not already part of\n    // the running set\n    #getNextConfig(running: Set<RunnerState>): null | Config {\n        // @TODO: Maybe do a check here to favour (heavily) providers that\n        //        do not require waitForSync and disfavour providers that\n        //        seem down-ish or are behaving slowly\n\n        const configs = Array.from(running).map((r) => r.config)\n\n        // Shuffle the states, sorted by priority\n        const allConfigs = this.#configs.slice();\n        shuffle(allConfigs);\n        allConfigs.sort((a, b) => (a.priority - b.priority));\n\n        for (const config of allConfigs) {\n            if (config._lastFatalError) { continue; }\n            if (configs.indexOf(config) === -1) { return config; }\n        }\n\n        return null;\n    }\n\n    // Adds a new runner (if available) to running.\n    #addRunner(running: Set<RunnerState>, req: PerformActionRequest): null | RunnerState {\n        const config = this.#getNextConfig(running);\n\n        // No runners available\n        if (config == null) { return null; }\n\n        // Create a new runner\n        const runner: RunnerState = {\n            config, result: null, didBump: false,\n            perform: null, staller: null\n        };\n\n        const now = getTime();\n\n        // Start performing this operation\n        runner.perform = (async () => {\n            try {\n                config.requests++;\n                const result = await this._translatePerform(config.provider, req);\n                runner.result = { result };\n            } catch (error: any) {\n                config.errorResponses++;\n                runner.result = { error };\n            }\n\n            const dt = (getTime() - now);\n            config._totalTime += dt;\n\n            config.rollingDuration = 0.95 * config.rollingDuration + 0.05 * dt;\n\n            runner.perform = null;\n        })();\n\n        // Start a staller; when this times out, it's time to force\n        // kicking off another runner because we are taking too long\n        runner.staller = (async () => {\n            await stall(config.stallTimeout);\n            runner.staller = null;\n        })();\n\n        running.add(runner);\n        return runner;\n    }\n\n    // Initializes the blockNumber and network for each runner and\n    // blocks until initialized\n    async #initialSync(): Promise<void> {\n        let initialSync = this.#initialSyncPromise;\n        if (!initialSync) {\n            const promises: Array<Promise<any>> = [ ];\n            this.#configs.forEach((config) => {\n                promises.push((async () => {\n                    await waitForSync(config, 0);\n                    if (!config._lastFatalError) {\n                        config._network = await config.provider.getNetwork();\n                    }\n                })());\n            });\n\n            this.#initialSyncPromise = initialSync = (async () => {\n                // Wait for all providers to have a block number and network\n                await Promise.all(promises);\n\n                // Check all the networks match\n                let chainId: null | bigint = null;\n                for (const config of this.#configs) {\n                    if (config._lastFatalError) { continue; }\n                    const network = <Network>(config._network);\n                    if (chainId == null) {\n                        chainId = network.chainId;\n                    } else if (network.chainId !== chainId) {\n                        assert(false, \"cannot mix providers on different networks\", \"UNSUPPORTED_OPERATION\", {\n                            operation: \"new FallbackProvider\"\n                        });\n                    }\n                }\n            })();\n        }\n\n        await initialSync\n    }\n\n\n    async #checkQuorum(running: Set<RunnerState>, req: PerformActionRequest): Promise<any> {\n        // Get all the result objects\n        const results: Array<TallyResult> = [ ];\n        for (const runner of running) {\n            if (runner.result != null) {\n                const { tag, value } = normalizeResult(runner.result);\n                results.push({ tag, value, weight: runner.config.weight });\n            }\n        }\n\n        // Are there enough results to event meet quorum?\n        if (results.reduce((a, r) => (a + r.weight), 0) < this.quorum) {\n            return undefined;\n        }\n\n        switch (req.method) {\n            case \"getBlockNumber\": {\n                // We need to get the bootstrap block height\n                if (this.#height === -2) {\n                    this.#height = Math.ceil(getNumber(<bigint>getMedian(this.quorum, this.#configs.filter((c) => (!c._lastFatalError)).map((c) => ({\n                        value: c.blockNumber,\n                        tag: getNumber(c.blockNumber).toString(),\n                        weight: c.weight\n                    })))));\n                }\n\n                // Find the mode across all the providers, allowing for\n                // a little drift between block heights\n                const mode = getFuzzyMode(this.quorum, results);\n                if (mode === undefined) { return undefined; }\n                if (mode > this.#height) { this.#height = mode; }\n                return this.#height;\n            }\n\n            case \"getGasPrice\":\n            case \"getPriorityFee\":\n            case \"estimateGas\":\n                return getMedian(this.quorum, results);\n\n            case \"getBlock\":\n                // Pending blocks are in the mempool and already\n                // quite untrustworthy; just grab anything\n                if (\"blockTag\" in req && req.blockTag === \"pending\") {\n                    return getAnyResult(this.quorum, results);\n                }\n                return checkQuorum(this.quorum, results);\n\n            case \"call\":\n            case \"chainId\":\n            case \"getBalance\":\n            case \"getTransactionCount\":\n            case \"getCode\":\n            case \"getStorage\":\n            case \"getTransaction\":\n            case \"getTransactionReceipt\":\n            case \"getLogs\":\n                return checkQuorum(this.quorum, results);\n\n            case \"broadcastTransaction\":\n                return getAnyResult(this.quorum, results);\n        }\n\n        assert(false, \"unsupported method\", \"UNSUPPORTED_OPERATION\", {\n            operation: `_perform(${ stringify((<any>req).method) })`\n        });\n    }\n\n    async #waitForQuorum(running: Set<RunnerState>, req: PerformActionRequest): Promise<any> {\n        if (running.size === 0) { throw new Error(\"no runners?!\"); }\n\n        // Any promises that are interesting to watch for; an expired stall\n        // or a successful perform\n        const interesting: Array<Promise<void>> = [ ];\n\n        let newRunners = 0;\n        for (const runner of running) {\n\n            // No responses, yet; keep an eye on it\n            if (runner.perform) {\n                interesting.push(runner.perform);\n            }\n\n            // Still stalling...\n            if (runner.staller) {\n                interesting.push(runner.staller);\n                continue;\n            }\n\n            // This runner has already triggered another runner\n            if (runner.didBump) { continue; }\n\n            // Got a response (result or error) or stalled; kick off another runner\n            runner.didBump = true;\n            newRunners++;\n        }\n\n        // Check if we have reached quorum on a result (or error)\n        const value = await this.#checkQuorum(running, req);\n        if (value !== undefined) {\n            if (value instanceof Error) { throw value; }\n            return value;\n        }\n\n        // Add any new runners, because a staller timed out or a result\n        // or error response came in.\n        for (let i = 0; i < newRunners; i++) {\n            this.#addRunner(running, req);\n        }\n\n        // All providers have returned, and we have no result\n\n        assert(interesting.length > 0, \"quorum not met\", \"SERVER_ERROR\", {\n            request: \"%sub-requests\",\n            info: { request: req, results: Array.from(running).map((r) => stringify(r.result)) }\n        });\n\n        // Wait for someone to either complete its perform or stall out\n        await Promise.race(interesting);\n\n        // This is recursive, but at worst case the depth is 2x the\n        // number of providers (each has a perform and a staller)\n        return await this.#waitForQuorum(running, req);\n    }\n\n    async _perform<T = any>(req: PerformActionRequest): Promise<T> {\n        // Broadcasting a transaction is rare (ish) and already incurs\n        // a cost on the user, so spamming is safe-ish. Just send it to\n        // every backend.\n        if (req.method === \"broadcastTransaction\") {\n            // Once any broadcast provides a positive result, use it. No\n            // need to wait for anyone else\n            const results: Array<null | TallyResult> = this.#configs.map((c) => null);\n            const broadcasts = this.#configs.map(async ({ provider, weight }, index) => {\n                try {\n                    const result = await provider._perform(req);\n                    results[index] = Object.assign(normalizeResult({ result }), { weight });\n                } catch (error: any) {\n                    results[index] = Object.assign(normalizeResult({ error }), { weight });\n                }\n            });\n\n            // As each promise finishes...\n            while (true) {\n                // Check for a valid broadcast result\n                const done = <Array<any>>results.filter((r) => (r != null));\n                for (const { value } of done) {\n                    if (!(value instanceof Error)) { return value; }\n                }\n\n                // Check for a legit broadcast error (one which we cannot\n                // recover from; some nodes may return the following red\n                // herring events:\n                // - alredy seend (UNKNOWN_ERROR)\n                // - NONCE_EXPIRED\n                // - REPLACEMENT_UNDERPRICED\n                const result = checkQuorum(this.quorum, <Array<any>>results.filter((r) => (r != null)));\n                if (isError(result, \"INSUFFICIENT_FUNDS\")) {\n                    throw result;\n                }\n\n                // Kick off the next provider (if any)\n                const waiting = broadcasts.filter((b, i) => (results[i] == null));\n                if (waiting.length === 0) { break; }\n                await Promise.race(waiting);\n            }\n\n            // Use standard quorum results; any result was returned above,\n            // so this will find any error that met quorum if any\n            const result = getAnyResult(this.quorum, <Array<any>>results);\n            assert(result !== undefined, \"problem multi-broadcasting\", \"SERVER_ERROR\", {\n                request: \"%sub-requests\",\n                info: { request: req, results: results.map(stringify) }\n            })\n            if (result instanceof Error) { throw result; }\n            return result;\n        }\n\n        await this.#initialSync();\n\n        // Bootstrap enough runners to meet quorum\n        const running: Set<RunnerState> = new Set();\n        let inflightQuorum = 0;\n        while (true) {\n            const runner = this.#addRunner(running, req);\n            if (runner == null) { break; }\n            inflightQuorum += runner.config.weight;\n            if (inflightQuorum >= this.quorum) { break; }\n        }\n\n        const result = await this.#waitForQuorum(running, req);\n\n        // Track requests sent to a provider that are still\n        // outstanding after quorum has been otherwise found\n        for (const runner of running) {\n            if (runner.perform && runner.result == null) {\n                runner.config.lateResponses++;\n            }\n        }\n\n        return result;\n    }\n\n    async destroy(): Promise<void> {\n        for (const { provider } of this.#configs) {\n            provider.destroy();\n        }\n        super.destroy();\n    }\n}\n", "\nimport { assert } from \"../utils/index.js\";\n\nimport { AnkrProvider } from \"./provider-ankr.js\";\nimport { AlchemyProvider } from \"./provider-alchemy.js\";\nimport { CloudflareProvider } from \"./provider-cloudflare.js\";\nimport { EtherscanProvider } from \"./provider-etherscan.js\";\nimport { InfuraProvider } from \"./provider-infura.js\";\n//import { PocketProvider } from \"./provider-pocket.js\";\nimport { QuickNodeProvider } from \"./provider-quicknode.js\";\n\nimport { FallbackProvider } from \"./provider-fallback.js\";\nimport { JsonRpcProvider } from \"./provider-jsonrpc.js\";\nimport { Network } from \"./network.js\";\nimport { WebSocketProvider } from \"./provider-websocket.js\";\n\nimport type { AbstractProvider } from \"./abstract-provider.js\";\nimport type { Networkish } from \"./network.js\";\nimport { WebSocketLike } from \"./provider-websocket.js\";\n\nfunction isWebSocketLike(value: any): value is WebSocketLike {\n    return (value && typeof(value.send) === \"function\" &&\n        typeof(value.close) === \"function\");\n}\n\nconst Testnets = \"goerli kovan sepolia classicKotti optimism-goerli arbitrum-goerli matic-mumbai bnbt\".split(\" \");\n\n/**\n *  Returns a default provider for %%network%%.\n *\n *  If %%network%% is a [[WebSocketLike]] or string that begins with\n *  ``\"ws:\"`` or ``\"wss:\"``, a [[WebSocketProvider]] is returned backed\n *  by that WebSocket or URL.\n *\n *  If %%network%% is a string that begins with ``\"HTTP:\"`` or ``\"HTTPS:\"``,\n *  a [[JsonRpcProvider]] is returned connected to that URL.\n *\n *  Otherwise, a default provider is created backed by well-known public\n *  Web3 backends (such as [[link-infura]]) using community-provided API\n *  keys.\n *\n *  The %%options%% allows specifying custom API keys per backend (setting\n *  an API key to ``\"-\"`` will omit that provider) and ``options.exclusive``\n *  can be set to either a backend name or and array of backend names, which\n *  will whitelist **only** those backends.\n *\n *  Current backend strings supported are:\n *  - ``\"alchemy\"``\n *  - ``\"ankr\"``\n *  - ``\"cloudflare\"``\n *  - ``\"etherscan\"``\n *  - ``\"infura\"``\n *  - ``\"publicPolygon\"``\n *  - ``\"quicknode\"``\n *\n *  @example:\n *    // Connect to a local Geth node\n *    provider = getDefaultProvider(\"http://localhost:8545/\");\n *\n *    // Connect to Ethereum mainnet with any current and future\n *    // third-party services available\n *    provider = getDefaultProvider(\"mainnet\");\n *\n *    // Connect to Polygon, but only allow Etherscan and\n *    // INFURA and use \"MY_API_KEY\" in calls to Etherscan.\n *    provider = getDefaultProvider(\"matic\", {\n *      etherscan: \"MY_API_KEY\",\n *      exclusive: [ \"etherscan\", \"infura\" ]\n *    });\n */\nexport function getDefaultProvider(network?: string | Networkish | WebSocketLike, options?: any): AbstractProvider {\n    if (options == null) { options = { }; }\n\n    const allowService = (name: string) => {\n        if (options[name] === \"-\") { return false; }\n        if (typeof(options.exclusive) === \"string\") {\n            return (name === options.exclusive);\n        }\n        if (Array.isArray(options.exclusive)) {\n            return (options.exclusive.indexOf(name) !== -1);\n        }\n        return true;\n    };\n\n    if (typeof(network) === \"string\" && network.match(/^https?:/)) {\n        return new JsonRpcProvider(network);\n    }\n\n    if (typeof(network) === \"string\" && network.match(/^wss?:/) || isWebSocketLike(network)) {\n        return new WebSocketProvider(network);\n    }\n\n    // Get the network and name, if possible\n    let staticNetwork: null | Network = null;\n    try {\n        staticNetwork = Network.from(network);\n    } catch (error) { }\n\n\n    const providers: Array<AbstractProvider> = [ ];\n\n    if (allowService(\"publicPolygon\") && staticNetwork) {\n        if (staticNetwork.name === \"matic\") {\n            providers.push(new JsonRpcProvider(\"https:/\\/polygon-rpc.com/\", staticNetwork, { staticNetwork }));\n        }\n    }\n\n    if (allowService(\"alchemy\")) {\n        try {\n            providers.push(new AlchemyProvider(network, options.alchemy));\n        } catch (error) { }\n    }\n\n    if (allowService(\"ankr\") && options.ankr != null) {\n        try {\n            providers.push(new AnkrProvider(network, options.ankr));\n        } catch (error) { }\n    }\n\n    if (allowService(\"cloudflare\")) {\n        try {\n            providers.push(new CloudflareProvider(network));\n        } catch (error) { }\n    }\n\n    if (allowService(\"etherscan\")) {\n        try {\n            providers.push(new EtherscanProvider(network, options.etherscan));\n        } catch (error) { }\n    }\n\n    if (allowService(\"infura\")) {\n        try {\n            let projectId = options.infura;\n            let projectSecret: undefined | string = undefined;\n            if (typeof(projectId) === \"object\") {\n                projectSecret = projectId.projectSecret;\n                projectId = projectId.projectId;\n            }\n            providers.push(new InfuraProvider(network, projectId, projectSecret));\n        } catch (error) { }\n    }\n/*\n    if (options.pocket !== \"-\") {\n        try {\n            let appId = options.pocket;\n            let secretKey: undefined | string = undefined;\n            let loadBalancer: undefined | boolean = undefined;\n            if (typeof(appId) === \"object\") {\n                loadBalancer = !!appId.loadBalancer;\n                secretKey = appId.secretKey;\n                appId = appId.appId;\n            }\n            providers.push(new PocketProvider(network, appId, secretKey, loadBalancer));\n        } catch (error) { console.log(error); }\n    }\n*/\n    if (allowService(\"quicknode\")) {\n        try {\n            let token = options.quicknode;\n            providers.push(new QuickNodeProvider(network, token));\n        } catch (error) { }\n    }\n\n    assert(providers.length, \"unsupported default network\", \"UNSUPPORTED_OPERATION\", {\n        operation: \"getDefaultProvider\"\n    });\n\n    // No need for a FallbackProvider\n    if (providers.length === 1) { return providers[0]; }\n\n    // We use the floor because public third-party providers can be unreliable,\n    // so a low number of providers with a large quorum will fail too often\n    let quorum = Math.floor(providers.length / 2);\n    if (quorum > 2) { quorum = 2; }\n\n    // Testnets don't need as strong a security gaurantee and speed is\n    // more useful during testing\n    if (staticNetwork && Testnets.indexOf(staticNetwork.name) !== -1) { quorum = 1; }\n\n    // Provided override qorum takes priority\n    if (options && options.quorum) { quorum = options.quorum; }\n\n    return new FallbackProvider(providers, undefined, { quorum });\n}\n", "import { defineProperties } from \"../utils/index.js\";\nimport { AbstractSigner } from \"./abstract-signer.js\";\n\nimport type { TypedDataDomain, TypedDataField } from \"../hash/index.js\";\n\nimport type {\n    BlockTag, Provider, TransactionRequest, TransactionResponse\n} from \"./provider.js\";\nimport type { Signer } from \"./signer.js\";\n\n\n/**\n *  A **NonceManager** wraps another [[Signer]] and automatically manages\n *  the nonce, ensuring serialized and sequential nonces are used during\n *  transaction.\n */\nexport class NonceManager extends AbstractSigner {\n    /**\n     *  The Signer being managed.\n     */\n    signer!: Signer;\n\n    #noncePromise: null | Promise<number>;\n    #delta: number;\n\n    /**\n     *  Creates a new **NonceManager** to manage %%signer%%.\n     */\n    constructor(signer: Signer) {\n        super(signer.provider);\n        defineProperties<NonceManager>(this, { signer });\n\n        this.#noncePromise = null;\n        this.#delta = 0;\n    }\n\n    async getAddress(): Promise<string> {\n        return this.signer.getAddress();\n    }\n\n    connect(provider: null | Provider): NonceManager {\n        return new NonceManager(this.signer.connect(provider));\n    }\n\n    async getNonce(blockTag?: BlockTag): Promise<number> {\n        if (blockTag === \"pending\") {\n            if (this.#noncePromise == null) {\n                this.#noncePromise = super.getNonce(\"pending\");\n            }\n\n            const delta = this.#delta;\n            return (await this.#noncePromise) + delta;\n        }\n\n        return super.getNonce(blockTag);\n    }\n\n    /**\n     *  Manually increment the nonce. This may be useful when managng\n     *  offline transactions.\n     */\n    increment(): void {\n        this.#delta++;\n    }\n\n    /**\n     *  Resets the nonce, causing the **NonceManager** to reload the current\n     *  nonce from the blockchain on the next transaction.\n     */\n    reset(): void {\n        this.#delta = 0;\n        this.#noncePromise = null;\n    }\n\n    async sendTransaction(tx: TransactionRequest): Promise<TransactionResponse> {\n        const noncePromise = this.getNonce(\"pending\");\n        this.increment();\n\n        tx = await this.signer.populateTransaction(tx);\n        tx.nonce = await noncePromise;\n\n        // @TODO: Maybe handle interesting/recoverable errors?\n        // Like don't increment if the tx was certainly not sent\n        return await this.signer.sendTransaction(tx);\n    }\n\n    signTransaction(tx: TransactionRequest): Promise<string> {\n        return this.signer.signTransaction(tx);\n    }\n\n    signMessage(message: string | Uint8Array): Promise<string> {\n        return this.signer.signMessage(message);\n    }\n\n    signTypedData(domain: TypedDataDomain, types: Record<string, Array<TypedDataField>>, value: Record<string, any>): Promise<string> {\n        return this.signer.signTypedData(domain, types, value);\n    }\n}\n", "import { assertArgument } from \"../utils/index.js\";\n\nimport { JsonRpcApiPollingProvider } from \"./provider-jsonrpc.js\";\n\nimport type {\n    JsonRpcError, JsonRpcPayload, JsonRpcResult,\n    JsonRpcSigner\n} from \"./provider-jsonrpc.js\";\nimport type { Networkish } from \"./network.js\";\n\n/**\n *  The interface to an [[link-eip-1193]] provider, which is a standard\n *  used by most injected providers, which the [[BrowserProvider]] accepts\n *  and exposes the API of.\n */\nexport interface Eip1193Provider {\n    /**\n     *  See [[link-eip-1193]] for details on this method.\n     */\n    request(request: { method: string, params?: Array<any> | Record<string, any> }): Promise<any>;\n};\n\n/**\n *  The possible additional events dispatched when using the ``\"debug\"``\n *  event on a [[BrowserProvider]].\n */\nexport type DebugEventBrowserProvider = {\n    action: \"sendEip1193Payload\",\n    payload: { method: string, params: Array<any> }\n} | {\n    action: \"receiveEip1193Result\",\n    result: any\n} | {\n    action: \"receiveEip1193Error\",\n    error: Error\n};\n\n\n/**\n *  A **BrowserProvider** is intended to wrap an injected provider which\n *  adheres to the [[link-eip-1193]] standard, which most (if not all)\n *  currently do.\n */\nexport class BrowserProvider extends JsonRpcApiPollingProvider {\n    #request: (method: string, params: Array<any> | Record<string, any>) => Promise<any>;\n\n    /**\n     *  Connnect to the %%ethereum%% provider, optionally forcing the\n     *  %%network%%.\n     */\n    constructor(ethereum: Eip1193Provider, network?: Networkish) {\n        assertArgument(ethereum && ethereum.request, \"invalid EIP-1193 provider\", \"ethereum\", ethereum);\n\n        super(network, { batchMaxCount: 1 });\n\n        this.#request = async (method: string, params: Array<any> | Record<string, any>) => {\n            const payload = { method, params };\n            this.emit(\"debug\", { action: \"sendEip1193Request\", payload });\n            try {\n                const result = await ethereum.request(payload);\n                this.emit(\"debug\", { action: \"receiveEip1193Result\", result });\n                return result;\n            } catch (e: any) {\n                const error = new Error(e.message);\n                (<any>error).code = e.code;\n                (<any>error).data = e.data;\n                (<any>error).payload = payload;\n                this.emit(\"debug\", { action: \"receiveEip1193Error\", error });\n                throw error;\n            }\n        };\n    }\n\n    async send(method: string, params: Array<any> | Record<string, any>): Promise<any> {\n        await this._start();\n\n        return await super.send(method, params);\n    }\n\n    async _send(payload: JsonRpcPayload | Array<JsonRpcPayload>): Promise<Array<JsonRpcResult | JsonRpcError>> {\n        assertArgument(!Array.isArray(payload), \"EIP-1193 does not support batch request\", \"payload\", payload);\n\n        try {\n            const result = await this.#request(payload.method, payload.params || [ ]);\n            return [ { id: payload.id, result } ];\n        } catch (e: any) {\n            return [ {\n                id: payload.id,\n                error: { code: e.code, data: e.data, message: e.message }\n            } ];\n        }\n    }\n\n    getRpcError(payload: JsonRpcPayload, error: JsonRpcError): Error {\n\n        error = JSON.parse(JSON.stringify(error));\n\n        // EIP-1193 gives us some machine-readable error codes, so rewrite\n        // them into \n        switch (error.error.code || -1) {\n            case 4001:\n                error.error.message = `ethers-user-denied: ${ error.error.message }`;\n                break;\n            case 4200:\n                error.error.message = `ethers-unsupported: ${ error.error.message }`;\n                break;\n        }\n\n        return super.getRpcError(payload, error);\n    }\n\n    /**\n     *  Resolves to ``true`` if the provider manages the %%address%%.\n     */\n    async hasSigner(address: number | string): Promise<boolean> {\n        if (address == null) { address = 0; }\n\n        const accounts = await this.send(\"eth_accounts\", [ ]);\n        if (typeof(address) === \"number\") {\n            return (accounts.length > address);\n        }\n\n        address = address.toLowerCase();\n        return accounts.filter((a: string) => (a.toLowerCase() === address)).length !== 0;\n    }\n\n    async getSigner(address?: number | string): Promise<JsonRpcSigner> {\n        if (address == null) { address = 0; }\n\n        if (!(await this.hasSigner(address))) {\n            try {\n                //const resp = \n                await this.#request(\"eth_requestAccounts\", [ ]);\n                //console.log(\"RESP\", resp);\n\n            } catch (error: any) {\n                const payload = error.payload;\n                throw this.getRpcError(payload, { id: payload.id, error });\n            }\n        }\n\n        return await super.getSigner(address);\n    }\n}\n", "/**\n *  [[link-pocket]] provides a third-party service for connecting to\n *  various blockchains over JSON-RPC.\n *\n *  **Supported Networks**\n *\n *  - Ethereum Mainnet (``mainnet``)\n *  - Goerli Testnet (``goerli``)\n *  - Polygon (``matic``)\n *  - Arbitrum (``arbitrum``)\n *\n *  @_subsection: api/providers/thirdparty:Pocket  [providers-pocket]\n */\nimport {\n    defineProperties, FetchRequest, assertArgument\n} from \"../utils/index.js\";\n\nimport { AbstractProvider } from \"./abstract-provider.js\";\nimport { showThrottleMessage } from \"./community.js\";\nimport { Network } from \"./network.js\";\nimport { JsonRpcProvider } from \"./provider-jsonrpc.js\";\n\nimport type { CommunityResourcable } from \"./community.js\";\nimport type { Networkish } from \"./network.js\";\n\nconst defaultApplicationId = \"62e1ad51b37b8e00394bda3b\";\n\nfunction getHost(name: string): string {\n    switch (name) {\n        case \"mainnet\":\n            return  \"eth-mainnet.gateway.pokt.network\";\n        case \"goerli\":\n            return \"eth-goerli.gateway.pokt.network\";\n\n        case \"matic\":\n            return \"poly-mainnet.gateway.pokt.network\";\n        case \"matic-mumbai\":\n            return \"polygon-mumbai-rpc.gateway.pokt.network\";\n    }\n\n    assertArgument(false, \"unsupported network\", \"network\", name);\n}\n\n\n/**\n *  The **PocketProvider** connects to the [[link-pocket]]\n *  JSON-RPC end-points.\n *\n *  By default, a highly-throttled API key is used, which is\n *  appropriate for quick prototypes and simple scripts. To\n *  gain access to an increased rate-limit, it is highly\n *  recommended to [sign up here](link-pocket-signup).\n */\nexport class PocketProvider extends JsonRpcProvider implements CommunityResourcable {\n\n    /**\n     *  The Application ID for the Pocket connection.\n     */\n    readonly applicationId!: string;\n\n    /**\n     *  The Application Secret for making authenticated requests\n     *  to the Pocket connection.\n     */\n    readonly applicationSecret!: null | string;\n\n    /**\n     *  Create a new **PocketProvider**.\n     *\n     *  By default connecting to ``mainnet`` with a highly throttled\n     *  API key.\n     */\n    constructor(_network?: Networkish, applicationId?: null | string, applicationSecret?: null | string) {\n        if (_network == null) { _network = \"mainnet\"; }\n        const network = Network.from(_network);\n        if (applicationId == null) { applicationId = defaultApplicationId; }\n        if (applicationSecret == null) { applicationSecret = null; }\n\n        const options = { staticNetwork: network };\n\n        const request = PocketProvider.getRequest(network, applicationId, applicationSecret);\n        super(request, network, options);\n\n        defineProperties<PocketProvider>(this, { applicationId, applicationSecret });\n    }\n\n    _getProvider(chainId: number): AbstractProvider {\n        try {\n            return new PocketProvider(chainId, this.applicationId, this.applicationSecret);\n        } catch (error) { }\n        return super._getProvider(chainId);\n    }\n\n    /**\n     *  Returns a prepared request for connecting to %%network%% with\n     *  %%applicationId%%.\n     */\n    static getRequest(network: Network, applicationId?: null | string, applicationSecret?: null | string): FetchRequest {\n        if (applicationId == null) { applicationId = defaultApplicationId; }\n\n        const request = new FetchRequest(`https:/\\/${ getHost(network.name) }/v1/lb/${ applicationId }`);\n        request.allowGzip = true;\n\n        if (applicationSecret) {\n            request.setCredentials(\"\", applicationSecret);\n        }\n\n        if (applicationId === defaultApplicationId) {\n            request.retryFunc = async (request, response, attempt) => {\n                showThrottleMessage(\"PocketProvider\");\n                return true;\n            };\n        }\n\n        return request;\n    }\n\n    isCommunityResource(): boolean {\n        return (this.applicationId === defaultApplicationId);\n    }\n}\n", "const IpcSocketProvider = undefined;\n\nexport { IpcSocketProvider };\n", "/**\n *  A **Provider** provides a connection to the blockchain, whch can be\n *  used to query its current state, simulate execution and send transactions\n *  to update the state.\n *\n *  It is one of the most fundamental components of interacting with a\n *  blockchain application, and there are many ways to connect, such as over\n *  HTTP, WebSockets or injected providers such as [MetaMask](link-metamask).\n *\n *  @_section: api/providers:Providers  [about-providers]\n */\n\n\nexport {\n    AbstractProvider, UnmanagedSubscriber\n} from \"./abstract-provider.js\";\n\nexport {\n    AbstractSigner,\n    VoidSigner,\n} from \"./abstract-signer.js\";\n\nexport {\n    showThrottleMessage\n} from \"./community.js\";\n\nexport { getDefaultProvider } from \"./default-provider.js\";\n\nexport {\n    EnsResolver,\n    MulticoinProviderPlugin\n} from \"./ens-resolver.js\";\n\nexport { Network } from \"./network.js\";\n\nexport { NonceManager } from \"./signer-noncemanager.js\";\n\nexport {\n    NetworkPlugin,\n    GasCostPlugin,\n    EnsPlugin,\n    FeeDataNetworkPlugin,\n    FetchUrlFeeDataNetworkPlugin,\n} from \"./plugins-network.js\";\n\nexport {\n    Block,\n    FeeData,\n    Log,\n    TransactionReceipt,\n    TransactionResponse,\n\n    copyRequest,\n    //resolveTransactionRequest,\n} from \"./provider.js\";\n\nexport { FallbackProvider } from \"./provider-fallback.js\";\nexport { JsonRpcApiProvider, JsonRpcProvider, JsonRpcSigner } from \"./provider-jsonrpc.js\"\n\nexport { BrowserProvider } from \"./provider-browser.js\";\n\nexport { AlchemyProvider } from \"./provider-alchemy.js\";\nexport { AnkrProvider } from \"./provider-ankr.js\";\nexport { CloudflareProvider } from \"./provider-cloudflare.js\";\nexport { EtherscanProvider, EtherscanPlugin } from \"./provider-etherscan.js\";\nexport { InfuraProvider, InfuraWebSocketProvider } from \"./provider-infura.js\";\nexport { PocketProvider } from \"./provider-pocket.js\";\nexport { QuickNodeProvider } from \"./provider-quicknode.js\";\n\nimport { IpcSocketProvider } from \"./provider-ipcsocket.js\"; /*-browser*/\nexport { IpcSocketProvider };\nexport { SocketProvider } from \"./provider-socket.js\";\nexport { WebSocketProvider } from \"./provider-websocket.js\";\n\nexport {\n    SocketSubscriber, SocketBlockSubscriber, SocketPendingSubscriber,\n    SocketEventSubscriber\n} from \"./provider-socket.js\";\n\nexport type {\n    AbstractProviderOptions, Subscription, Subscriber,\n    AbstractProviderPlugin,\n    PerformActionFilter, PerformActionTransaction, PerformActionRequest,\n} from \"./abstract-provider.js\"\n\nexport type { ContractRunner } from \"./contracts.js\";\n\nexport type {\n    BlockParams, LogParams, TransactionReceiptParams,\n    TransactionResponseParams,\n} from \"./formatting.js\";\n\n/*\nexport type {\n    CommunityResourcable\n} from \"./community.js\";\n\nexport type {\n    AvatarLinkageType, AvatarLinkage, AvatarResult\n} from \"./ens-resolver.js\";\n*/\nexport type { Networkish } from \"./network.js\";\n\nexport type { GasCostParameters } from \"./plugins-network.js\";\n\nexport type {\n    BlockTag,\n    TransactionRequest, PreparedTransactionRequest,\n    EventFilter, Filter, FilterByBlockHash, OrphanFilter, ProviderEvent,\n    TopicFilter,\n    Provider,\n    MinedBlock, MinedTransactionResponse\n} from \"./provider.js\";\n\nexport type {\n    DebugEventBrowserProvider, Eip1193Provider\n} from \"./provider-browser.js\";\n\nexport type { FallbackProviderOptions } from \"./provider-fallback.js\";\n\nexport type {\n    JsonRpcPayload, JsonRpcResult, JsonRpcError,\n    JsonRpcApiProviderOptions,\n    JsonRpcTransactionRequest,\n} from \"./provider-jsonrpc.js\";\n\nexport type {\n    WebSocketCreator, WebSocketLike\n} from \"./provider-websocket.js\";\n\nexport type { Signer } from \"./signer.js\";\n\n", "import { getAddress, resolveAddress } from \"../address/index.js\";\nimport { hashMessage, TypedDataEncoder } from \"../hash/index.js\";\nimport { AbstractSigner } from \"../providers/index.js\";\nimport { computeAddress, Transaction } from \"../transaction/index.js\";\nimport {\n    defineProperties, resolveProperties, assert, assertArgument\n} from \"../utils/index.js\";\n\nimport type { SigningKey } from \"../crypto/index.js\";\nimport type { TypedDataDomain, TypedDataField } from \"../hash/index.js\";\nimport type { Provider, TransactionRequest } from \"../providers/index.js\";\nimport type { TransactionLike } from \"../transaction/index.js\";\n\n\n/**\n *  The **BaseWallet** is a stream-lined implementation of a\n *  [[Signer]] that operates with a private key.\n *\n *  It is preferred to use the [[Wallet]] class, as it offers\n *  additional functionality and simplifies loading a variety\n *  of JSON formats, Mnemonic Phrases, etc.\n *\n *  This class may be of use for those attempting to implement\n *  a minimal Signer.\n */\nexport class BaseWallet extends AbstractSigner {\n    /**\n     *  The wallet address.\n     */\n    readonly address!: string;\n\n    readonly #signingKey: SigningKey;\n\n    /**\n     *  Creates a new BaseWallet for %%privateKey%%, optionally\n     *  connected to %%provider%%.\n     *\n     *  If %%provider%% is not specified, only offline methods can\n     *  be used.\n     */\n    constructor(privateKey: SigningKey, provider?: null | Provider) {\n        super(provider);\n\n        assertArgument(privateKey && typeof(privateKey.sign) === \"function\", \"invalid private key\", \"privateKey\", \"[ REDACTED ]\");\n\n        this.#signingKey = privateKey;\n\n        const address = computeAddress(this.signingKey.publicKey);\n        defineProperties<BaseWallet>(this, { address });\n    }\n\n    // Store private values behind getters to reduce visibility\n    // in console.log\n\n    /**\n     *  The [[SigningKey]] used for signing payloads.\n     */\n    get signingKey(): SigningKey { return this.#signingKey; }\n\n    /**\n     *  The private key for this wallet.\n     */\n    get privateKey(): string { return this.signingKey.privateKey; }\n\n    async getAddress(): Promise<string> { return this.address; }\n\n    connect(provider: null | Provider): BaseWallet {\n        return new BaseWallet(this.#signingKey, provider);\n    }\n\n    async signTransaction(tx: TransactionRequest): Promise<string> {\n\n        // Replace any Addressable or ENS name with an address\n        const { to, from } = await resolveProperties({\n            to: (tx.to ? resolveAddress(tx.to, this.provider): undefined),\n            from: (tx.from ? resolveAddress(tx.from, this.provider): undefined)\n        });\n\n        if (to != null) { tx.to = to; }\n        if (from != null) { tx.from = from; }\n\n        if (tx.from != null) {\n            assertArgument(getAddress(<string>(tx.from)) === this.address,\n                \"transaction from address mismatch\", \"tx.from\", tx.from);\n            delete tx.from;\n        }\n\n        // Build the transaction\n        const btx = Transaction.from(<TransactionLike<string>>tx);\n        btx.signature = this.signingKey.sign(btx.unsignedHash);\n\n        return btx.serialized;\n    }\n\n    async signMessage(message: string | Uint8Array): Promise<string> {\n        return this.signMessageSync(message);\n    }\n\n    // @TODO: Add a secialized signTx and signTyped sync that enforces\n    // all parameters are known?\n    /**\n     *  Returns the signature for %%message%% signed with this wallet.\n     */\n    signMessageSync(message: string | Uint8Array): string {\n        return this.signingKey.sign(hashMessage(message)).serialized;\n    }\n\n    async signTypedData(domain: TypedDataDomain, types: Record<string, Array<TypedDataField>>, value: Record<string, any>): Promise<string> {\n\n        // Populate any ENS names\n        const populated = await TypedDataEncoder.resolveNames(domain, types, value, async (name: string) => {\n            // @TODO: this should use resolveName; addresses don't\n            //        need a provider\n\n            assert(this.provider != null, \"cannot resolve ENS names without a provider\", \"UNSUPPORTED_OPERATION\", {\n                operation: \"resolveName\",\n                info: { name }\n            });\n\n            const address = await this.provider.resolveName(name);\n            assert(address != null, \"unconfigured ENS name\", \"UNCONFIGURED_NAME\", {\n                value: name\n            });\n\n            return address;\n        });\n\n        return this.signingKey.sign(TypedDataEncoder.hash(populated.domain, types, populated.value)).serialized;\n    }\n}\n", "import { assertArgument } from \"../utils/index.js\";\n\n\nconst subsChrs = \" !#$%&'()*+,-./<=>?@[]^_`{|}~\";\nconst Word = /^[a-z]*$/i;\n\nfunction unfold(words: Array<string>, sep: string): Array<string> {\n    let initial = 97;\n    return words.reduce((accum, word) => {\n        if (word === sep) {\n            initial++;\n        } else if (word.match(Word)) {\n            accum.push(String.fromCharCode(initial) + word);\n        } else {\n            initial = 97;\n            accum.push(word);\n        }\n        return accum;\n    }, <Array<string>>[]);\n}\n\n/**\n *  @_ignore\n */\nexport function decode(data: string, subs: string): Array<string> {\n\n    // Replace all the substitutions with their expanded form\n    for (let i = subsChrs.length - 1; i >= 0; i--) {\n        data = data.split(subsChrs[i]).join(subs.substring(2 * i, 2 * i + 2));\n    }\n\n    // Get all tle clumps; each suffix, first-increment and second-increment\n    const clumps: Array<string> = [ ];\n    const leftover = data.replace(/(:|([0-9])|([A-Z][a-z]*))/g, (all, item, semi, word) => {\n        if (semi) {\n            for (let i = parseInt(semi); i >= 0; i--) { clumps.push(\";\"); }\n        } else {\n            clumps.push(item.toLowerCase());\n        }\n        return \"\";\n    });\n    /* c8 ignore start */\n    if (leftover) { throw new Error(`leftovers: ${ JSON.stringify(leftover) }`); }\n    /* c8 ignore stop */\n\n    return unfold(unfold(clumps, \";\"), \":\");\n}\n\n/**\n *  @_ignore\n */\nexport function decodeOwl(data: string): Array<string> {\n    assertArgument(data[0] === \"0\", \"unsupported auwl data\", \"data\", data);\n\n    return decode(\n        data.substring(1 + 2 * subsChrs.length),\n        data.substring(1, 1 + 2 * subsChrs.length));\n}\n", "import { defineProperties } from \"../utils/index.js\";\n\n/**\n *  A Wordlist represents a collection of language-specific\n *  words used to encode and devoce [[link-bip-39]] encoded data\n *  by mapping words to 11-bit values and vice versa.\n */\nexport abstract class Wordlist {\n    locale!: string;\n\n    /**\n     *  Creates a new Wordlist instance.\n     *\n     *  Sub-classes MUST call this if they provide their own constructor,\n     *  passing in the locale string of the language.\n     *\n     *  Generally there is no need to create instances of a Wordlist,\n     *  since each language-specific Wordlist creates an instance and\n     *  there is no state kept internally, so they are safe to share.\n     */\n    constructor(locale: string) {\n        defineProperties<Wordlist>(this, { locale });\n    }\n\n    /**\n     *  Sub-classes may override this to provide a language-specific\n     *  method for spliting %%phrase%% into individual words.\n     *\n     *  By default, %%phrase%% is split using any sequences of\n     *  white-space as defined by regular expressions (i.e. ``/\\s+/``).\n     */\n    split(phrase: string): Array<string> {\n        return phrase.toLowerCase().split(/\\s+/g)\n    }\n\n    /**\n     *  Sub-classes may override this to provider a language-specific\n     *  method for joining %%words%% into a phrase.\n     *\n     *  By default, %%words%% are joined by a single space.\n     */\n    join(words: Array<string>): string {\n        return words.join(\" \");\n    }\n\n    /**\n     *  Maps an 11-bit value into its coresponding word in the list.\n     *\n     *  Sub-classes MUST override this.\n     */\n    abstract getWord(index: number): string;\n\n    /**\n     *  Maps a word to its corresponding 11-bit value.\n     *\n     *  Sub-classes MUST override this.\n     */\n    abstract getWordIndex(word: string): number;\n}\n", "\n// Use the encode-latin.js script to create the necessary\n// data files to be consumed by this class\n\nimport { id } from \"../hash/index.js\";\nimport { assertArgument } from \"../utils/index.js\";\n\nimport { decodeOwl } from \"./decode-owl.js\";\nimport { Wordlist } from \"./wordlist.js\";\n\n/**\n *  An OWL format Wordlist is an encoding method that exploits\n *  the general locality of alphabetically sorted words to\n *  achieve a simple but effective means of compression.\n *\n *  This class is generally not useful to most developers as\n *  it is used mainly internally to keep Wordlists for languages\n *  based on ASCII-7 small.\n *\n *  If necessary, there are tools within the ``generation/`` folder\n *  to create the necessary data.\n */\nexport class WordlistOwl extends Wordlist {\n    #data: string;\n    #checksum: string;\n\n    /**\n     *  Creates a new Wordlist for %%locale%% using the OWL %%data%%\n     *  and validated against the %%checksum%%.\n     */\n    constructor(locale: string, data: string, checksum: string) {\n        super(locale);\n        this.#data = data;\n        this.#checksum = checksum;\n        this.#words = null;\n    }\n\n    /**\n     *  The OWL-encoded data.\n     */\n    get _data(): string { return this.#data; }\n\n    /**\n     *  Decode all the words for the wordlist.\n     */\n    _decodeWords(): Array<string> {\n        return decodeOwl(this.#data);\n    }\n\n    #words: null | Array<string>;\n    #loadWords(): Array<string> {\n        if (this.#words == null) {\n            const words = this._decodeWords();\n\n            // Verify the computed list matches the official list\n            const checksum = id(words.join(\"\\n\") + \"\\n\");\n            /* c8 ignore start */\n            if (checksum !== this.#checksum) {\n                throw new Error(`BIP39 Wordlist for ${ this.locale } FAILED`);\n            }\n            /* c8 ignore stop */\n\n            this.#words = words;\n        }\n        return this.#words;\n    }\n\n    getWord(index: number): string {\n        const words = this.#loadWords();\n        assertArgument(index >= 0 && index < words.length, `invalid word index: ${ index }`, \"index\", index);\n        return words[index];\n    }\n\n    getWordIndex(word: string): number {\n        return this.#loadWords().indexOf(word);\n    }\n}\n", "import { WordlistOwl } from \"./wordlist-owl.js\";\n\nconst words = \"0erleonalorenseinceregesticitStanvetearctssi#ch2Athck&tneLl0And#Il.yLeOutO=S|S%b/ra@SurdU'0Ce[Cid|CountCu'Hie=IdOu,-Qui*Ro[TT]T%T*[Tu$0AptDD-tD*[Ju,M.UltV<)Vi)0Rob-0FairF%dRaid0A(EEntRee0Ead0MRRp%tS!_rmBumCoholErtI&LLeyLowMo,O}PhaReadySoT Ways0A>urAz(gOngOuntU'd0Aly,Ch%Ci|G G!GryIm$K!Noun)Nu$O` Sw T&naTiqueXietyY1ArtOlogyPe?P!Pro=Ril1ChCt-EaEnaGueMMedM%MyOundR<+Re,Ri=RowTTefa@Ti,Tw%k0KPe@SaultSetSi,SumeThma0H!>OmTa{T&dT.udeTra@0Ct]D.Gu,NtTh%ToTumn0Era+OcadoOid0AkeA*AyEsomeFulKw?d0Is:ByChel%C#D+GL<)Lc#y~MbooN<aNn RRelyRga(R*lSeS-SketTt!3A^AnAutyCau'ComeEfF%eG(Ha=H(dLie=LowLtN^Nef./TrayTt Twe&Y#d3Cyc!DKeNdOlogyRdR`Tt _{AdeAmeAnketA,EakE[IndOodO[omOu'UeUrUsh_rdAtDyIlMbNeNusOkO,Rd R(gRrowSsTtomUn)XY_{etA(AndA[A=EadEezeI{Id+IefIghtIngIskOccoliOk&OnzeOomO` OwnUsh2Bb!DdyD+tFf$oIldLbLkL!tNd!Nk Rd&Rg R,SS(e[SyTt Y Zz:Bba+B(B!CtusGeKe~LmM aMpNN$N)lNdyNn#NoeNvasNy#Pab!P.$Pta(RRb#RdRgoRpetRryRtSeShS(o/!Su$TT$ogT^Teg%yTt!UghtU'Ut]Ve3Il(gL yM|NsusNturyRe$Rta(_irAlkAmp]An+AosApt Ar+A'AtEapE{Ee'EfErryE,I{&IefIldIm}yOi)Oo'R#-U{!UnkUrn0G?Nnam#Rc!Tiz&TyVil_imApArifyAwAyE<ErkEv I{I|IffImbIn-IpO{OgO'O`OudOwnUbUmpU, Ut^_^A,C#utDeFfeeIlInL!@L%LumnMb(eMeMf%tM-Mm#Mp<yNc tNdu@NfirmNg*[N}@Nsid NtrolNv()OkOlPp PyR$ReRnR*@/Tt#U^UntryUp!Ur'Us(V Yo>_{Ad!AftAmA}AshAt AwlAzyEamEd.EekEwI{etImeIspIt-OpO[Ou^OwdUci$UelUi'Umb!Un^UshYY,$2BeLtu*PPbo?dRiousRr|Rta(R=Sh]/omTe3C!:DMa+MpN)Ng R(gShUght WnY3AlBa>BrisCadeCemb CideCl(eC%a>C*a'ErF&'F(eFyG*eLayLiv M<dMi'Ni$Nti,NyP?tP&dPos.P`PutyRi=ScribeS tSignSkSpair/royTailTe@VelopVi)Vo>3AgramAlAm#dAryCeE'lEtFf G.$Gn.yLemmaNn NosaurRe@RtSag*eScov Sea'ShSmi[S%d Splay/<)V tVideV%)Zzy5Ct%Cum|G~Lph(Ma(Na>NkeyN%OrSeUb!Ve_ftAg#AmaA,-AwEamE[IftIllInkIpI=OpUmY2CkMbNeR(g/T^Ty1Arf1Nam-:G G!RlyRnR`Sily/Sy1HoOlogyOnomy0GeItUca>1F%t0G1GhtTh 2BowD E@r-Eg<tEm|Eph<tEvat%I>Se0B?kBodyBra)Er+Ot]PloyPow Pty0Ab!A@DD![D%'EmyErgyF%)Ga+G(eH<)JoyLi,OughR-hRollSu*T Ti*TryVelope1Isode0U$Uip0AA'OdeOs]R%Upt0CapeSayS&)Ta>0Ern$H-s1Id&)IlOkeOl=1A@Amp!Ce[Ch<+C.eCludeCu'Ecu>Erci'Hau,Hib.I!I,ItOt-P<dPe@Pi*Pla(Po'P*[T&dTra0EEbrow:Br-CeCultyDeIntI`~L'MeMilyMousNNcyNtasyRmSh]TT$Th TigueUltV%.e3Atu*Bru?yD $EEdElMa!N)/iv$T^V W3B Ct]EldGu*LeLmLt N$NdNeNg NishReRmR,Sc$ShTT}[X_gAmeAshAtAv%EeIghtIpOatO{O%Ow UidUshY_mCusGIlLd~owOdOtR)Re,R+tRkRtu}RumRw?dSsil/ UndX_gi!AmeEqu|EshI&dIn+OgOntO,OwnOz&U.2ElNNnyRna)RyTu*:D+tInLaxy~ yMePRa+Rba+Rd&Rl-Rm|SSpTeTh U+Ze3N $NiusN*Nt!Nu(e/u*2O,0AntFtGg!Ng RaffeRlVe_dAn)A*A[IdeImp'ObeOomOryO=OwUe_tDde[LdOdO'RillaSpelSsipV nWn_bA)A(AntApeA[Av.yEatE&IdIefItOc yOupOwUnt_rdE[IdeIltIt?N3M:B.IrLfMm M, NdPpyRb%RdRshR=,TVeWkZ?d3AdAl`ArtAvyD+hogIght~oLmetLpNRo3Dd&Gh~NtPRe/%y5BbyCkeyLdLeLiday~owMeNeyOdPeRnRr%R'Sp.$/TelUrV 5BGeM<Mb!M%Nd*dNgryNtRd!RryRtSb<d3Brid:1EOn0EaEntifyLe2N%e4LLeg$L}[0A+Ita>M&'Mu}Pa@Po'Pro=Pul'0ChCludeComeC*a'DexD-a>Do%Du,ryF<tFl-tF%mHa!H .Iti$Je@JuryMa>N Noc|PutQuiryS<eSe@SideSpi*/$lTa@T e,ToVe,V.eVol=3On0L<dOla>Sue0Em1Ory:CketGu?RZz3AlousAns~yWel9BInKeUr}yY5D+I)MpNg!Ni%Nk/:Ng?oo3EnEpT^upY3CkDD}yNdNgdomSsTT^&TeTt&Wi4EeIfeO{Ow:BBelB%Dd DyKeMpNgua+PtopR+T T(UghUndryVaWWnWsu.Y Zy3Ad AfArnA=Ctu*FtGG$G&dIsu*M#NdNg`NsOp?dSs#Tt Vel3ArB tyBr?yC&'FeFtGhtKeMbM.NkOnQuid/Tt!VeZ?d5AdAnB, C$CkG-NelyNgOpTt yUdUn+VeY$5CkyGga+Mb N?N^Xury3R-s:Ch(eDG-G}tIdIlInJ%KeMm$NNa+Nda>NgoNs]Nu$P!Rb!R^Rg(R(eRketRria+SkSs/ T^T i$ThTrixTt XimumZe3AdowAnAsu*AtCh<-D$DiaLodyLtMb M%yNt]NuRcyR+R.RryShSsa+T$Thod3Dd!DnightLk~]M-NdNimumN%Nu>Rac!Rr%S ySs/akeXXedXtu*5Bi!DelDifyMM|N.%NkeyN, N`OnR$ReRn(gSqu.oTh T]T%Unta(U'VeVie5ChFf(LeLtiplySc!SeumShroomS-/Tu$3Self/ yTh:I=MePk(Rrow/yT]Tu*3ArCkEdGati=G!@I` PhewR=/TTw%kUtr$V WsXt3CeGht5B!I'M(eeOd!Rm$R`SeTab!TeTh(gTi)VelW5C!?Mb R'T:K0EyJe@Li+Scu*S =Ta(Vious0CurE<Tob 0Or1FF Fi)T&2L1Ay0DI=Ymp-0It0CeEI#L(eLy1EnEraIn]Po'T]1An+B.Ch?dD D(?yG<I|Ig($Ph<0Tr-h0H 0Tdo%T TputTside0AlEnEr0NN 0Yg&0/ 0O}:CtDd!GeIrLa)LmNdaNelN-N` P RadeR|RkRrotRtySsT^ThTi|TrolTt nU'VeYm|3A)AnutArAs<tL-<NN$tyNcilOp!Pp Rfe@Rm.Rs#T2O}OtoRa'Ys-$0AnoCn-Ctu*E)GGe#~LotNkO} Pe/olT^Zza_)A}tA,-A>AyEa'Ed+U{UgUn+2EmEtIntL?LeLi)NdNyOlPul?Rt]S.]Ssib!/TatoTt yV tyWd W _@i)Ai'Ed-tEf Epa*Es|EttyEv|I)IdeIm?yIntI%.yIs#Iva>IzeOb!mO)[Odu)Of.OgramOje@Omo>OofOp tyOsp O>@OudOvide2Bl-Dd(g~LpL'Mpk(N^PilPpyR^a'R.yRpo'R'ShTZz!3Ramid:99Al.yAntumArt E,]I{ItIzO>:Bb.Cco#CeCkD?DioIlInI'~yMpN^NdomN+PidReTeTh V&WZ%3AdyAlAs#BelBuildC$lCei=CipeC%dCyc!Du)F!@F%mFu'G]G*tGul?Je@LaxLea'LiefLyMa(Memb M(dMo=Nd NewNtOp&PairPeatPla)P%tQui*ScueSemb!Si,Sour)Sp#'SultTi*T*atTurnUn]Ve$ViewW?d2Y`m0BBb#CeChDeD+F!GhtGidNgOtPp!SkTu$V$V 5AdA,BotBu,CketM<)OfOkieOmSeTa>UghUndU>Y$5Bb DeGLeNNwayR$:DDd!D}[FeIlLadLm#L#LtLu>MeMp!NdTisfyToshiU)Usa+VeY1A!AnA*Att E}HemeHoolI&)I[%sOrp]OutRapRe&RiptRub1AAr^As#AtC#dC*tCt]Cur.yEdEkGm|Le@~M(?Ni%N'Nt&)RiesRvi)Ss]Tt!TupV&_dowAftAllowA*EdEllEriffIeldIftI}IpIv O{OeOotOpOrtOuld O=RimpRugUff!Y0Bl(gCkDeE+GhtGnL|Lk~yLv Mil?Mp!N)NgR&/ Tua>XZe1A>Et^IIllInIrtUll0AbAmEepEnd I)IdeIghtImOg<OtOwUsh0AllArtI!OkeOo`0A{AkeApIffOw0ApCc Ci$CkDaFtL?Ldi LidLut]L=Me#eNgOnRryRtUlUndUpUr)U`0A)A*Ati$AwnEakEci$EedEllEndH eI)Id IkeInIr.L.OilOns%O#OrtOtRayReadR(gY0Ua*UeezeUir*l_b!AdiumAffA+AirsAmpAndArtA>AyEakEelEmEpE*oI{IllIngO{Oma^O}OolOryO=Ra>gyReetRikeR#gRugg!Ud|UffUmb!Y!0Bje@Bm.BwayC)[ChDd&Ff G?G+,ItMm NNnyN'tP PplyP*meReRfa)R+Rpri'RroundR=ySpe@/a(1AllowAmpApArmE?EetIftImIngIt^Ord1MbolMptomRup/em:B!Ck!GIlL|LkNkPeR+tSk/eTtooXi3A^Am~NN<tNnisNtRm/Xt_nkAtEmeEnE%yE*EyIngIsOughtReeRi=RowUmbUnd 0CketDeG LtMb MeNyPRedSsueT!5A,BaccoDayDdl EGe` I!tK&MatoM%rowNeNgueNightOlO`PP-Pp!R^RnadoRtoi'SsT$Uri,W?dW WnY_{AdeAff-Ag-A(Ansf ApAshA=lAyEatEeEndI$IbeI{Igg ImIpOphyOub!U{UeUlyUmpetU,U`Y2BeIt]Mb!NaN}lRkeyRnRt!1El=EntyI)InI,O1PeP-$:5Ly5B*lla0Ab!Awa*C!Cov D DoFairFoldHappyIf%mIqueItIv 'KnownLo{TilUsu$Veil1Da>GradeHoldOnP Set1B<Ge0A+EEdEfulE![U$0Il.y:C<tCuumGueLidL!yL=NNishP%Rious/Ult3H-!L=tNd%Ntu*NueRbRifyRs]RyS'lT <3Ab!Br<tCiousCt%yDeoEw~a+Nta+Ol(Rtu$RusSaS.Su$T$Vid5C$I)IdLc<oLumeTeYa+:GeG#ItLk~LnutNtRfa*RmRri%ShSp/eT VeY3Al`Ap#ArA'lA` BDd(gEk&dIrdLcome/T_!AtEatEelEnE*IpIsp 0DeD`FeLd~NNdowNeNgNkNn Nt ReSdomSeShT}[5LfM<Nd OdOlRdRkRldRryR`_pE{E,!I,I>Ong::Rd3Ar~ow9UUngU`:3BraRo9NeO\";\nconst checksum = \"0x3c8acc1e7b08d8e76f9fda015ef48dc8c710a73cb7e0f77b2c18a9b5a7adde60\";\n\nlet wordlist: null | LangEn = null;\n\n/**\n *  The [[link-bip39-en]] for [mnemonic phrases](link-bip-39).\n *\n *  @_docloc: api/wordlists\n */\nexport class LangEn extends WordlistOwl {\n\n    /**\n     *  Creates a new instance of the English language Wordlist.\n     *\n     *  This should be unnecessary most of the time as the exported\n     *  [[langEn]] should suffice.\n     *\n     *  @_ignore:\n     */\n    constructor() { super(\"en\", words, checksum); }\n\n    /**\n     *  Returns a singleton instance of a ``LangEn``, creating it\n     *  if this is the first time being called.\n     */\n    static wordlist(): LangEn {\n        if (wordlist == null) { wordlist = new LangEn(); }\n        return wordlist;\n    }\n}\n", "import { pbkdf2, sha256 } from \"../crypto/index.js\";\nimport {\n    defineProperties, getBytes, hexlify, assertNormalize, assertPrivate, assertArgument, toUtf8Bytes\n} from \"../utils/index.js\";\nimport { LangEn } from \"../wordlists/lang-en.js\";\n\nimport type { BytesLike } from \"../utils/index.js\";\nimport type { Wordlist } from \"../wordlists/index.js\";\n\n\n// Returns a byte with the MSB bits set\nfunction getUpperMask(bits: number): number {\n   return ((1 << bits) - 1) << (8 - bits) & 0xff;\n}\n\n// Returns a byte with the LSB bits set\nfunction getLowerMask(bits: number): number {\n   return ((1 << bits) - 1) & 0xff;\n}\n\n\nfunction mnemonicToEntropy(mnemonic: string, wordlist?: null | Wordlist): string {\n    assertNormalize(\"NFKD\");\n\n    if (wordlist == null) { wordlist = LangEn.wordlist(); }\n\n    const words = wordlist.split(mnemonic);\n    assertArgument((words.length % 3) === 0 && words.length >= 12 && words.length <= 24,\n        \"invalid mnemonic length\", \"mnemonic\", \"[ REDACTED ]\");\n\n    const entropy = new Uint8Array(Math.ceil(11 * words.length / 8));\n\n    let offset = 0;\n    for (let i = 0; i < words.length; i++) {\n        let index = wordlist.getWordIndex(words[i].normalize(\"NFKD\"));\n        assertArgument(index >= 0, `invalid mnemonic word at index ${ i }`, \"mnemonic\", \"[ REDACTED ]\");\n\n        for (let bit = 0; bit < 11; bit++) {\n            if (index & (1 << (10 - bit))) {\n                entropy[offset >> 3] |= (1 << (7 - (offset % 8)));\n            }\n            offset++;\n        }\n    }\n\n    const entropyBits = 32 * words.length / 3;\n\n\n    const checksumBits = words.length / 3;\n    const checksumMask = getUpperMask(checksumBits);\n\n    const checksum = getBytes(sha256(entropy.slice(0, entropyBits / 8)))[0] & checksumMask;\n\n    assertArgument(checksum === (entropy[entropy.length - 1] & checksumMask),\n        \"invalid mnemonic checksum\", \"mnemonic\", \"[ REDACTED ]\");\n\n    return hexlify(entropy.slice(0, entropyBits / 8));\n}\n\nfunction entropyToMnemonic(entropy: Uint8Array, wordlist?: null | Wordlist): string {\n\n    assertArgument((entropy.length % 4) === 0 && entropy.length >= 16 && entropy.length <= 32,\n        \"invalid entropy size\", \"entropy\", \"[ REDACTED ]\");\n\n    if (wordlist == null) { wordlist = LangEn.wordlist(); }\n\n    const indices: Array<number> = [ 0 ];\n\n    let remainingBits = 11;\n    for (let i = 0; i < entropy.length; i++) {\n\n        // Consume the whole byte (with still more to go)\n        if (remainingBits > 8) {\n            indices[indices.length - 1] <<= 8;\n            indices[indices.length - 1] |= entropy[i];\n\n            remainingBits -= 8;\n\n        // This byte will complete an 11-bit index\n        } else {\n            indices[indices.length - 1] <<= remainingBits;\n            indices[indices.length - 1] |= entropy[i] >> (8 - remainingBits);\n\n            // Start the next word\n            indices.push(entropy[i] & getLowerMask(8 - remainingBits));\n\n            remainingBits += 3;\n        }\n    }\n\n    // Compute the checksum bits\n    const checksumBits = entropy.length / 4;\n    const checksum = parseInt(sha256(entropy).substring(2, 4), 16) & getUpperMask(checksumBits);\n\n    // Shift the checksum into the word indices\n    indices[indices.length - 1] <<= checksumBits;\n    indices[indices.length - 1] |= (checksum >> (8 - checksumBits));\n\n    return wordlist.join(indices.map((index) => (<Wordlist>wordlist).getWord(index)));\n}\n\nconst _guard = { };\n\n/**\n *  A **Mnemonic** wraps all properties required to compute [[link-bip-39]]\n *  seeds and convert between phrases and entropy.\n */\nexport class Mnemonic {\n    /**\n     *  The mnemonic phrase of 12, 15, 18, 21 or 24 words.\n     *\n     *  Use the [[wordlist]] ``split`` method to get the individual words.\n     */\n    readonly phrase!: string;\n\n    /**\n     *  The password used for this mnemonic. If no password is used this\n     *  is the empty string (i.e. ``\"\"``) as per the specification.\n     */\n    readonly password!: string;\n\n    /**\n     *  The wordlist for this mnemonic.\n     */\n    readonly wordlist!: Wordlist;\n\n    /**\n     *  The underlying entropy which the mnemonic encodes.\n     */\n    readonly entropy!: string;\n\n    /**\n     *  @private\n     */\n    constructor(guard: any, entropy: string, phrase: string, password?: null | string, wordlist?: null | Wordlist) {\n        if (password == null) { password = \"\"; }\n        if (wordlist == null) { wordlist = LangEn.wordlist(); }\n        assertPrivate(guard, _guard, \"Mnemonic\");\n        defineProperties<Mnemonic>(this, { phrase, password, wordlist, entropy });\n    }\n\n    /**\n     *  Returns the seed for the mnemonic.\n     */\n    computeSeed(): string {\n        const salt = toUtf8Bytes(\"mnemonic\" + this.password, \"NFKD\");\n        return pbkdf2(toUtf8Bytes(this.phrase, \"NFKD\"), salt, 2048, 64, \"sha512\");\n    }\n\n    /**\n     *  Creates a new Mnemonic for the %%phrase%%.\n     *\n     *  The default %%password%% is the empty string and the default\n     *  wordlist is the [English wordlists](LangEn).\n     */\n    static fromPhrase(phrase: string, password?: null | string, wordlist?: null | Wordlist): Mnemonic {\n        // Normalize the case and space; throws if invalid\n        const entropy = mnemonicToEntropy(phrase, wordlist);\n        phrase = entropyToMnemonic(getBytes(entropy), wordlist);\n        return new Mnemonic(_guard, entropy, phrase, password, wordlist);\n    }\n\n    /**\n     *  Create a new **Mnemonic** from the %%entropy%%.\n     *\n     *  The default %%password%% is the empty string and the default\n     *  wordlist is the [English wordlists](LangEn).\n     */\n    static fromEntropy(_entropy: BytesLike, password?: null | string, wordlist?: null | Wordlist): Mnemonic {\n        const entropy = getBytes(_entropy, \"entropy\");\n        const phrase = entropyToMnemonic(entropy, wordlist);\n        return new Mnemonic(_guard, hexlify(entropy), phrase, password, wordlist);\n    }\n\n    /**\n     *  Returns the phrase for %%mnemonic%%.\n     */\n    static entropyToPhrase(_entropy: BytesLike, wordlist?: null | Wordlist): string {\n        const entropy = getBytes(_entropy, \"entropy\");\n        return entropyToMnemonic(entropy, wordlist);\n    }\n\n    /**\n     *  Returns the entropy for %%phrase%%.\n     */\n    static phraseToEntropy(phrase: string, wordlist?: null | Wordlist): string {\n        return mnemonicToEntropy(phrase, wordlist);\n    }\n\n    /**\n     *  Returns true if %%phrase%% is a valid [[link-bip-39]] phrase.\n     *\n     *  This checks all the provided words belong to the %%wordlist%%,\n     *  that the length is valid and the checksum is correct.\n     */\n    static isValidMnemonic(phrase: string, wordlist?: null | Wordlist): boolean {\n        try {\n            mnemonicToEntropy(phrase, wordlist);\n            return true;\n        } catch (error) { }\n        return false;\n    }\n}\n", "/*! MIT License. Copyright 2015-2022 Richard Moore <me@ricmoo.com>. See LICENSE.txt. */\n\n// Number of rounds by keysize\nconst numberOfRounds: Record<number, number> = { 16: 10, 24: 12, 32: 14 };\n\n// Round constant words\nconst rcon = [0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91];\n\n// S-box and Inverse S-box (S is for Substitution)\nconst S = [0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16];\nconst Si =[0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb, 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e, 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25, 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92, 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84, 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06, 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73, 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e, 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b, 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4, 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f, 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef, 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61, 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d];\n\n// Transformations for encryption\nconst T1 = [0xc66363a5, 0xf87c7c84, 0xee777799, 0xf67b7b8d, 0xfff2f20d, 0xd66b6bbd, 0xde6f6fb1, 0x91c5c554, 0x60303050, 0x02010103, 0xce6767a9, 0x562b2b7d, 0xe7fefe19, 0xb5d7d762, 0x4dababe6, 0xec76769a, 0x8fcaca45, 0x1f82829d, 0x89c9c940, 0xfa7d7d87, 0xeffafa15, 0xb25959eb, 0x8e4747c9, 0xfbf0f00b, 0x41adadec, 0xb3d4d467, 0x5fa2a2fd, 0x45afafea, 0x239c9cbf, 0x53a4a4f7, 0xe4727296, 0x9bc0c05b, 0x75b7b7c2, 0xe1fdfd1c, 0x3d9393ae, 0x4c26266a, 0x6c36365a, 0x7e3f3f41, 0xf5f7f702, 0x83cccc4f, 0x6834345c, 0x51a5a5f4, 0xd1e5e534, 0xf9f1f108, 0xe2717193, 0xabd8d873, 0x62313153, 0x2a15153f, 0x0804040c, 0x95c7c752, 0x46232365, 0x9dc3c35e, 0x30181828, 0x379696a1, 0x0a05050f, 0x2f9a9ab5, 0x0e070709, 0x24121236, 0x1b80809b, 0xdfe2e23d, 0xcdebeb26, 0x4e272769, 0x7fb2b2cd, 0xea75759f, 0x1209091b, 0x1d83839e, 0x582c2c74, 0x341a1a2e, 0x361b1b2d, 0xdc6e6eb2, 0xb45a5aee, 0x5ba0a0fb, 0xa45252f6, 0x763b3b4d, 0xb7d6d661, 0x7db3b3ce, 0x5229297b, 0xdde3e33e, 0x5e2f2f71, 0x13848497, 0xa65353f5, 0xb9d1d168, 0x00000000, 0xc1eded2c, 0x40202060, 0xe3fcfc1f, 0x79b1b1c8, 0xb65b5bed, 0xd46a6abe, 0x8dcbcb46, 0x67bebed9, 0x7239394b, 0x944a4ade, 0x984c4cd4, 0xb05858e8, 0x85cfcf4a, 0xbbd0d06b, 0xc5efef2a, 0x4faaaae5, 0xedfbfb16, 0x864343c5, 0x9a4d4dd7, 0x66333355, 0x11858594, 0x8a4545cf, 0xe9f9f910, 0x04020206, 0xfe7f7f81, 0xa05050f0, 0x783c3c44, 0x259f9fba, 0x4ba8a8e3, 0xa25151f3, 0x5da3a3fe, 0x804040c0, 0x058f8f8a, 0x3f9292ad, 0x219d9dbc, 0x70383848, 0xf1f5f504, 0x63bcbcdf, 0x77b6b6c1, 0xafdada75, 0x42212163, 0x20101030, 0xe5ffff1a, 0xfdf3f30e, 0xbfd2d26d, 0x81cdcd4c, 0x180c0c14, 0x26131335, 0xc3ecec2f, 0xbe5f5fe1, 0x359797a2, 0x884444cc, 0x2e171739, 0x93c4c457, 0x55a7a7f2, 0xfc7e7e82, 0x7a3d3d47, 0xc86464ac, 0xba5d5de7, 0x3219192b, 0xe6737395, 0xc06060a0, 0x19818198, 0x9e4f4fd1, 0xa3dcdc7f, 0x44222266, 0x542a2a7e, 0x3b9090ab, 0x0b888883, 0x8c4646ca, 0xc7eeee29, 0x6bb8b8d3, 0x2814143c, 0xa7dede79, 0xbc5e5ee2, 0x160b0b1d, 0xaddbdb76, 0xdbe0e03b, 0x64323256, 0x743a3a4e, 0x140a0a1e, 0x924949db, 0x0c06060a, 0x4824246c, 0xb85c5ce4, 0x9fc2c25d, 0xbdd3d36e, 0x43acacef, 0xc46262a6, 0x399191a8, 0x319595a4, 0xd3e4e437, 0xf279798b, 0xd5e7e732, 0x8bc8c843, 0x6e373759, 0xda6d6db7, 0x018d8d8c, 0xb1d5d564, 0x9c4e4ed2, 0x49a9a9e0, 0xd86c6cb4, 0xac5656fa, 0xf3f4f407, 0xcfeaea25, 0xca6565af, 0xf47a7a8e, 0x47aeaee9, 0x10080818, 0x6fbabad5, 0xf0787888, 0x4a25256f, 0x5c2e2e72, 0x381c1c24, 0x57a6a6f1, 0x73b4b4c7, 0x97c6c651, 0xcbe8e823, 0xa1dddd7c, 0xe874749c, 0x3e1f1f21, 0x964b4bdd, 0x61bdbddc, 0x0d8b8b86, 0x0f8a8a85, 0xe0707090, 0x7c3e3e42, 0x71b5b5c4, 0xcc6666aa, 0x904848d8, 0x06030305, 0xf7f6f601, 0x1c0e0e12, 0xc26161a3, 0x6a35355f, 0xae5757f9, 0x69b9b9d0, 0x17868691, 0x99c1c158, 0x3a1d1d27, 0x279e9eb9, 0xd9e1e138, 0xebf8f813, 0x2b9898b3, 0x22111133, 0xd26969bb, 0xa9d9d970, 0x078e8e89, 0x339494a7, 0x2d9b9bb6, 0x3c1e1e22, 0x15878792, 0xc9e9e920, 0x87cece49, 0xaa5555ff, 0x50282878, 0xa5dfdf7a, 0x038c8c8f, 0x59a1a1f8, 0x09898980, 0x1a0d0d17, 0x65bfbfda, 0xd7e6e631, 0x844242c6, 0xd06868b8, 0x824141c3, 0x299999b0, 0x5a2d2d77, 0x1e0f0f11, 0x7bb0b0cb, 0xa85454fc, 0x6dbbbbd6, 0x2c16163a];\nconst T2 = [0xa5c66363, 0x84f87c7c, 0x99ee7777, 0x8df67b7b, 0x0dfff2f2, 0xbdd66b6b, 0xb1de6f6f, 0x5491c5c5, 0x50603030, 0x03020101, 0xa9ce6767, 0x7d562b2b, 0x19e7fefe, 0x62b5d7d7, 0xe64dabab, 0x9aec7676, 0x458fcaca, 0x9d1f8282, 0x4089c9c9, 0x87fa7d7d, 0x15effafa, 0xebb25959, 0xc98e4747, 0x0bfbf0f0, 0xec41adad, 0x67b3d4d4, 0xfd5fa2a2, 0xea45afaf, 0xbf239c9c, 0xf753a4a4, 0x96e47272, 0x5b9bc0c0, 0xc275b7b7, 0x1ce1fdfd, 0xae3d9393, 0x6a4c2626, 0x5a6c3636, 0x417e3f3f, 0x02f5f7f7, 0x4f83cccc, 0x5c683434, 0xf451a5a5, 0x34d1e5e5, 0x08f9f1f1, 0x93e27171, 0x73abd8d8, 0x53623131, 0x3f2a1515, 0x0c080404, 0x5295c7c7, 0x65462323, 0x5e9dc3c3, 0x28301818, 0xa1379696, 0x0f0a0505, 0xb52f9a9a, 0x090e0707, 0x36241212, 0x9b1b8080, 0x3ddfe2e2, 0x26cdebeb, 0x694e2727, 0xcd7fb2b2, 0x9fea7575, 0x1b120909, 0x9e1d8383, 0x74582c2c, 0x2e341a1a, 0x2d361b1b, 0xb2dc6e6e, 0xeeb45a5a, 0xfb5ba0a0, 0xf6a45252, 0x4d763b3b, 0x61b7d6d6, 0xce7db3b3, 0x7b522929, 0x3edde3e3, 0x715e2f2f, 0x97138484, 0xf5a65353, 0x68b9d1d1, 0x00000000, 0x2cc1eded, 0x60402020, 0x1fe3fcfc, 0xc879b1b1, 0xedb65b5b, 0xbed46a6a, 0x468dcbcb, 0xd967bebe, 0x4b723939, 0xde944a4a, 0xd4984c4c, 0xe8b05858, 0x4a85cfcf, 0x6bbbd0d0, 0x2ac5efef, 0xe54faaaa, 0x16edfbfb, 0xc5864343, 0xd79a4d4d, 0x55663333, 0x94118585, 0xcf8a4545, 0x10e9f9f9, 0x06040202, 0x81fe7f7f, 0xf0a05050, 0x44783c3c, 0xba259f9f, 0xe34ba8a8, 0xf3a25151, 0xfe5da3a3, 0xc0804040, 0x8a058f8f, 0xad3f9292, 0xbc219d9d, 0x48703838, 0x04f1f5f5, 0xdf63bcbc, 0xc177b6b6, 0x75afdada, 0x63422121, 0x30201010, 0x1ae5ffff, 0x0efdf3f3, 0x6dbfd2d2, 0x4c81cdcd, 0x14180c0c, 0x35261313, 0x2fc3ecec, 0xe1be5f5f, 0xa2359797, 0xcc884444, 0x392e1717, 0x5793c4c4, 0xf255a7a7, 0x82fc7e7e, 0x477a3d3d, 0xacc86464, 0xe7ba5d5d, 0x2b321919, 0x95e67373, 0xa0c06060, 0x98198181, 0xd19e4f4f, 0x7fa3dcdc, 0x66442222, 0x7e542a2a, 0xab3b9090, 0x830b8888, 0xca8c4646, 0x29c7eeee, 0xd36bb8b8, 0x3c281414, 0x79a7dede, 0xe2bc5e5e, 0x1d160b0b, 0x76addbdb, 0x3bdbe0e0, 0x56643232, 0x4e743a3a, 0x1e140a0a, 0xdb924949, 0x0a0c0606, 0x6c482424, 0xe4b85c5c, 0x5d9fc2c2, 0x6ebdd3d3, 0xef43acac, 0xa6c46262, 0xa8399191, 0xa4319595, 0x37d3e4e4, 0x8bf27979, 0x32d5e7e7, 0x438bc8c8, 0x596e3737, 0xb7da6d6d, 0x8c018d8d, 0x64b1d5d5, 0xd29c4e4e, 0xe049a9a9, 0xb4d86c6c, 0xfaac5656, 0x07f3f4f4, 0x25cfeaea, 0xafca6565, 0x8ef47a7a, 0xe947aeae, 0x18100808, 0xd56fbaba, 0x88f07878, 0x6f4a2525, 0x725c2e2e, 0x24381c1c, 0xf157a6a6, 0xc773b4b4, 0x5197c6c6, 0x23cbe8e8, 0x7ca1dddd, 0x9ce87474, 0x213e1f1f, 0xdd964b4b, 0xdc61bdbd, 0x860d8b8b, 0x850f8a8a, 0x90e07070, 0x427c3e3e, 0xc471b5b5, 0xaacc6666, 0xd8904848, 0x05060303, 0x01f7f6f6, 0x121c0e0e, 0xa3c26161, 0x5f6a3535, 0xf9ae5757, 0xd069b9b9, 0x91178686, 0x5899c1c1, 0x273a1d1d, 0xb9279e9e, 0x38d9e1e1, 0x13ebf8f8, 0xb32b9898, 0x33221111, 0xbbd26969, 0x70a9d9d9, 0x89078e8e, 0xa7339494, 0xb62d9b9b, 0x223c1e1e, 0x92158787, 0x20c9e9e9, 0x4987cece, 0xffaa5555, 0x78502828, 0x7aa5dfdf, 0x8f038c8c, 0xf859a1a1, 0x80098989, 0x171a0d0d, 0xda65bfbf, 0x31d7e6e6, 0xc6844242, 0xb8d06868, 0xc3824141, 0xb0299999, 0x775a2d2d, 0x111e0f0f, 0xcb7bb0b0, 0xfca85454, 0xd66dbbbb, 0x3a2c1616];\nconst T3 = [0x63a5c663, 0x7c84f87c, 0x7799ee77, 0x7b8df67b, 0xf20dfff2, 0x6bbdd66b, 0x6fb1de6f, 0xc55491c5, 0x30506030, 0x01030201, 0x67a9ce67, 0x2b7d562b, 0xfe19e7fe, 0xd762b5d7, 0xabe64dab, 0x769aec76, 0xca458fca, 0x829d1f82, 0xc94089c9, 0x7d87fa7d, 0xfa15effa, 0x59ebb259, 0x47c98e47, 0xf00bfbf0, 0xadec41ad, 0xd467b3d4, 0xa2fd5fa2, 0xafea45af, 0x9cbf239c, 0xa4f753a4, 0x7296e472, 0xc05b9bc0, 0xb7c275b7, 0xfd1ce1fd, 0x93ae3d93, 0x266a4c26, 0x365a6c36, 0x3f417e3f, 0xf702f5f7, 0xcc4f83cc, 0x345c6834, 0xa5f451a5, 0xe534d1e5, 0xf108f9f1, 0x7193e271, 0xd873abd8, 0x31536231, 0x153f2a15, 0x040c0804, 0xc75295c7, 0x23654623, 0xc35e9dc3, 0x18283018, 0x96a13796, 0x050f0a05, 0x9ab52f9a, 0x07090e07, 0x12362412, 0x809b1b80, 0xe23ddfe2, 0xeb26cdeb, 0x27694e27, 0xb2cd7fb2, 0x759fea75, 0x091b1209, 0x839e1d83, 0x2c74582c, 0x1a2e341a, 0x1b2d361b, 0x6eb2dc6e, 0x5aeeb45a, 0xa0fb5ba0, 0x52f6a452, 0x3b4d763b, 0xd661b7d6, 0xb3ce7db3, 0x297b5229, 0xe33edde3, 0x2f715e2f, 0x84971384, 0x53f5a653, 0xd168b9d1, 0x00000000, 0xed2cc1ed, 0x20604020, 0xfc1fe3fc, 0xb1c879b1, 0x5bedb65b, 0x6abed46a, 0xcb468dcb, 0xbed967be, 0x394b7239, 0x4ade944a, 0x4cd4984c, 0x58e8b058, 0xcf4a85cf, 0xd06bbbd0, 0xef2ac5ef, 0xaae54faa, 0xfb16edfb, 0x43c58643, 0x4dd79a4d, 0x33556633, 0x85941185, 0x45cf8a45, 0xf910e9f9, 0x02060402, 0x7f81fe7f, 0x50f0a050, 0x3c44783c, 0x9fba259f, 0xa8e34ba8, 0x51f3a251, 0xa3fe5da3, 0x40c08040, 0x8f8a058f, 0x92ad3f92, 0x9dbc219d, 0x38487038, 0xf504f1f5, 0xbcdf63bc, 0xb6c177b6, 0xda75afda, 0x21634221, 0x10302010, 0xff1ae5ff, 0xf30efdf3, 0xd26dbfd2, 0xcd4c81cd, 0x0c14180c, 0x13352613, 0xec2fc3ec, 0x5fe1be5f, 0x97a23597, 0x44cc8844, 0x17392e17, 0xc45793c4, 0xa7f255a7, 0x7e82fc7e, 0x3d477a3d, 0x64acc864, 0x5de7ba5d, 0x192b3219, 0x7395e673, 0x60a0c060, 0x81981981, 0x4fd19e4f, 0xdc7fa3dc, 0x22664422, 0x2a7e542a, 0x90ab3b90, 0x88830b88, 0x46ca8c46, 0xee29c7ee, 0xb8d36bb8, 0x143c2814, 0xde79a7de, 0x5ee2bc5e, 0x0b1d160b, 0xdb76addb, 0xe03bdbe0, 0x32566432, 0x3a4e743a, 0x0a1e140a, 0x49db9249, 0x060a0c06, 0x246c4824, 0x5ce4b85c, 0xc25d9fc2, 0xd36ebdd3, 0xacef43ac, 0x62a6c462, 0x91a83991, 0x95a43195, 0xe437d3e4, 0x798bf279, 0xe732d5e7, 0xc8438bc8, 0x37596e37, 0x6db7da6d, 0x8d8c018d, 0xd564b1d5, 0x4ed29c4e, 0xa9e049a9, 0x6cb4d86c, 0x56faac56, 0xf407f3f4, 0xea25cfea, 0x65afca65, 0x7a8ef47a, 0xaee947ae, 0x08181008, 0xbad56fba, 0x7888f078, 0x256f4a25, 0x2e725c2e, 0x1c24381c, 0xa6f157a6, 0xb4c773b4, 0xc65197c6, 0xe823cbe8, 0xdd7ca1dd, 0x749ce874, 0x1f213e1f, 0x4bdd964b, 0xbddc61bd, 0x8b860d8b, 0x8a850f8a, 0x7090e070, 0x3e427c3e, 0xb5c471b5, 0x66aacc66, 0x48d89048, 0x03050603, 0xf601f7f6, 0x0e121c0e, 0x61a3c261, 0x355f6a35, 0x57f9ae57, 0xb9d069b9, 0x86911786, 0xc15899c1, 0x1d273a1d, 0x9eb9279e, 0xe138d9e1, 0xf813ebf8, 0x98b32b98, 0x11332211, 0x69bbd269, 0xd970a9d9, 0x8e89078e, 0x94a73394, 0x9bb62d9b, 0x1e223c1e, 0x87921587, 0xe920c9e9, 0xce4987ce, 0x55ffaa55, 0x28785028, 0xdf7aa5df, 0x8c8f038c, 0xa1f859a1, 0x89800989, 0x0d171a0d, 0xbfda65bf, 0xe631d7e6, 0x42c68442, 0x68b8d068, 0x41c38241, 0x99b02999, 0x2d775a2d, 0x0f111e0f, 0xb0cb7bb0, 0x54fca854, 0xbbd66dbb, 0x163a2c16];\nconst T4 = [0x6363a5c6, 0x7c7c84f8, 0x777799ee, 0x7b7b8df6, 0xf2f20dff, 0x6b6bbdd6, 0x6f6fb1de, 0xc5c55491, 0x30305060, 0x01010302, 0x6767a9ce, 0x2b2b7d56, 0xfefe19e7, 0xd7d762b5, 0xababe64d, 0x76769aec, 0xcaca458f, 0x82829d1f, 0xc9c94089, 0x7d7d87fa, 0xfafa15ef, 0x5959ebb2, 0x4747c98e, 0xf0f00bfb, 0xadadec41, 0xd4d467b3, 0xa2a2fd5f, 0xafafea45, 0x9c9cbf23, 0xa4a4f753, 0x727296e4, 0xc0c05b9b, 0xb7b7c275, 0xfdfd1ce1, 0x9393ae3d, 0x26266a4c, 0x36365a6c, 0x3f3f417e, 0xf7f702f5, 0xcccc4f83, 0x34345c68, 0xa5a5f451, 0xe5e534d1, 0xf1f108f9, 0x717193e2, 0xd8d873ab, 0x31315362, 0x15153f2a, 0x04040c08, 0xc7c75295, 0x23236546, 0xc3c35e9d, 0x18182830, 0x9696a137, 0x05050f0a, 0x9a9ab52f, 0x0707090e, 0x12123624, 0x80809b1b, 0xe2e23ddf, 0xebeb26cd, 0x2727694e, 0xb2b2cd7f, 0x75759fea, 0x09091b12, 0x83839e1d, 0x2c2c7458, 0x1a1a2e34, 0x1b1b2d36, 0x6e6eb2dc, 0x5a5aeeb4, 0xa0a0fb5b, 0x5252f6a4, 0x3b3b4d76, 0xd6d661b7, 0xb3b3ce7d, 0x29297b52, 0xe3e33edd, 0x2f2f715e, 0x84849713, 0x5353f5a6, 0xd1d168b9, 0x00000000, 0xeded2cc1, 0x20206040, 0xfcfc1fe3, 0xb1b1c879, 0x5b5bedb6, 0x6a6abed4, 0xcbcb468d, 0xbebed967, 0x39394b72, 0x4a4ade94, 0x4c4cd498, 0x5858e8b0, 0xcfcf4a85, 0xd0d06bbb, 0xefef2ac5, 0xaaaae54f, 0xfbfb16ed, 0x4343c586, 0x4d4dd79a, 0x33335566, 0x85859411, 0x4545cf8a, 0xf9f910e9, 0x02020604, 0x7f7f81fe, 0x5050f0a0, 0x3c3c4478, 0x9f9fba25, 0xa8a8e34b, 0x5151f3a2, 0xa3a3fe5d, 0x4040c080, 0x8f8f8a05, 0x9292ad3f, 0x9d9dbc21, 0x38384870, 0xf5f504f1, 0xbcbcdf63, 0xb6b6c177, 0xdada75af, 0x21216342, 0x10103020, 0xffff1ae5, 0xf3f30efd, 0xd2d26dbf, 0xcdcd4c81, 0x0c0c1418, 0x13133526, 0xecec2fc3, 0x5f5fe1be, 0x9797a235, 0x4444cc88, 0x1717392e, 0xc4c45793, 0xa7a7f255, 0x7e7e82fc, 0x3d3d477a, 0x6464acc8, 0x5d5de7ba, 0x19192b32, 0x737395e6, 0x6060a0c0, 0x81819819, 0x4f4fd19e, 0xdcdc7fa3, 0x22226644, 0x2a2a7e54, 0x9090ab3b, 0x8888830b, 0x4646ca8c, 0xeeee29c7, 0xb8b8d36b, 0x14143c28, 0xdede79a7, 0x5e5ee2bc, 0x0b0b1d16, 0xdbdb76ad, 0xe0e03bdb, 0x32325664, 0x3a3a4e74, 0x0a0a1e14, 0x4949db92, 0x06060a0c, 0x24246c48, 0x5c5ce4b8, 0xc2c25d9f, 0xd3d36ebd, 0xacacef43, 0x6262a6c4, 0x9191a839, 0x9595a431, 0xe4e437d3, 0x79798bf2, 0xe7e732d5, 0xc8c8438b, 0x3737596e, 0x6d6db7da, 0x8d8d8c01, 0xd5d564b1, 0x4e4ed29c, 0xa9a9e049, 0x6c6cb4d8, 0x5656faac, 0xf4f407f3, 0xeaea25cf, 0x6565afca, 0x7a7a8ef4, 0xaeaee947, 0x08081810, 0xbabad56f, 0x787888f0, 0x25256f4a, 0x2e2e725c, 0x1c1c2438, 0xa6a6f157, 0xb4b4c773, 0xc6c65197, 0xe8e823cb, 0xdddd7ca1, 0x74749ce8, 0x1f1f213e, 0x4b4bdd96, 0xbdbddc61, 0x8b8b860d, 0x8a8a850f, 0x707090e0, 0x3e3e427c, 0xb5b5c471, 0x6666aacc, 0x4848d890, 0x03030506, 0xf6f601f7, 0x0e0e121c, 0x6161a3c2, 0x35355f6a, 0x5757f9ae, 0xb9b9d069, 0x86869117, 0xc1c15899, 0x1d1d273a, 0x9e9eb927, 0xe1e138d9, 0xf8f813eb, 0x9898b32b, 0x11113322, 0x6969bbd2, 0xd9d970a9, 0x8e8e8907, 0x9494a733, 0x9b9bb62d, 0x1e1e223c, 0x87879215, 0xe9e920c9, 0xcece4987, 0x5555ffaa, 0x28287850, 0xdfdf7aa5, 0x8c8c8f03, 0xa1a1f859, 0x89898009, 0x0d0d171a, 0xbfbfda65, 0xe6e631d7, 0x4242c684, 0x6868b8d0, 0x4141c382, 0x9999b029, 0x2d2d775a, 0x0f0f111e, 0xb0b0cb7b, 0x5454fca8, 0xbbbbd66d, 0x16163a2c];\n\n// Transformations for decryption\nconst T5 = [0x51f4a750, 0x7e416553, 0x1a17a4c3, 0x3a275e96, 0x3bab6bcb, 0x1f9d45f1, 0xacfa58ab, 0x4be30393, 0x2030fa55, 0xad766df6, 0x88cc7691, 0xf5024c25, 0x4fe5d7fc, 0xc52acbd7, 0x26354480, 0xb562a38f, 0xdeb15a49, 0x25ba1b67, 0x45ea0e98, 0x5dfec0e1, 0xc32f7502, 0x814cf012, 0x8d4697a3, 0x6bd3f9c6, 0x038f5fe7, 0x15929c95, 0xbf6d7aeb, 0x955259da, 0xd4be832d, 0x587421d3, 0x49e06929, 0x8ec9c844, 0x75c2896a, 0xf48e7978, 0x99583e6b, 0x27b971dd, 0xbee14fb6, 0xf088ad17, 0xc920ac66, 0x7dce3ab4, 0x63df4a18, 0xe51a3182, 0x97513360, 0x62537f45, 0xb16477e0, 0xbb6bae84, 0xfe81a01c, 0xf9082b94, 0x70486858, 0x8f45fd19, 0x94de6c87, 0x527bf8b7, 0xab73d323, 0x724b02e2, 0xe31f8f57, 0x6655ab2a, 0xb2eb2807, 0x2fb5c203, 0x86c57b9a, 0xd33708a5, 0x302887f2, 0x23bfa5b2, 0x02036aba, 0xed16825c, 0x8acf1c2b, 0xa779b492, 0xf307f2f0, 0x4e69e2a1, 0x65daf4cd, 0x0605bed5, 0xd134621f, 0xc4a6fe8a, 0x342e539d, 0xa2f355a0, 0x058ae132, 0xa4f6eb75, 0x0b83ec39, 0x4060efaa, 0x5e719f06, 0xbd6e1051, 0x3e218af9, 0x96dd063d, 0xdd3e05ae, 0x4de6bd46, 0x91548db5, 0x71c45d05, 0x0406d46f, 0x605015ff, 0x1998fb24, 0xd6bde997, 0x894043cc, 0x67d99e77, 0xb0e842bd, 0x07898b88, 0xe7195b38, 0x79c8eedb, 0xa17c0a47, 0x7c420fe9, 0xf8841ec9, 0x00000000, 0x09808683, 0x322bed48, 0x1e1170ac, 0x6c5a724e, 0xfd0efffb, 0x0f853856, 0x3daed51e, 0x362d3927, 0x0a0fd964, 0x685ca621, 0x9b5b54d1, 0x24362e3a, 0x0c0a67b1, 0x9357e70f, 0xb4ee96d2, 0x1b9b919e, 0x80c0c54f, 0x61dc20a2, 0x5a774b69, 0x1c121a16, 0xe293ba0a, 0xc0a02ae5, 0x3c22e043, 0x121b171d, 0x0e090d0b, 0xf28bc7ad, 0x2db6a8b9, 0x141ea9c8, 0x57f11985, 0xaf75074c, 0xee99ddbb, 0xa37f60fd, 0xf701269f, 0x5c72f5bc, 0x44663bc5, 0x5bfb7e34, 0x8b432976, 0xcb23c6dc, 0xb6edfc68, 0xb8e4f163, 0xd731dcca, 0x42638510, 0x13972240, 0x84c61120, 0x854a247d, 0xd2bb3df8, 0xaef93211, 0xc729a16d, 0x1d9e2f4b, 0xdcb230f3, 0x0d8652ec, 0x77c1e3d0, 0x2bb3166c, 0xa970b999, 0x119448fa, 0x47e96422, 0xa8fc8cc4, 0xa0f03f1a, 0x567d2cd8, 0x223390ef, 0x87494ec7, 0xd938d1c1, 0x8ccaa2fe, 0x98d40b36, 0xa6f581cf, 0xa57ade28, 0xdab78e26, 0x3fadbfa4, 0x2c3a9de4, 0x5078920d, 0x6a5fcc9b, 0x547e4662, 0xf68d13c2, 0x90d8b8e8, 0x2e39f75e, 0x82c3aff5, 0x9f5d80be, 0x69d0937c, 0x6fd52da9, 0xcf2512b3, 0xc8ac993b, 0x10187da7, 0xe89c636e, 0xdb3bbb7b, 0xcd267809, 0x6e5918f4, 0xec9ab701, 0x834f9aa8, 0xe6956e65, 0xaaffe67e, 0x21bccf08, 0xef15e8e6, 0xbae79bd9, 0x4a6f36ce, 0xea9f09d4, 0x29b07cd6, 0x31a4b2af, 0x2a3f2331, 0xc6a59430, 0x35a266c0, 0x744ebc37, 0xfc82caa6, 0xe090d0b0, 0x33a7d815, 0xf104984a, 0x41ecdaf7, 0x7fcd500e, 0x1791f62f, 0x764dd68d, 0x43efb04d, 0xccaa4d54, 0xe49604df, 0x9ed1b5e3, 0x4c6a881b, 0xc12c1fb8, 0x4665517f, 0x9d5eea04, 0x018c355d, 0xfa877473, 0xfb0b412e, 0xb3671d5a, 0x92dbd252, 0xe9105633, 0x6dd64713, 0x9ad7618c, 0x37a10c7a, 0x59f8148e, 0xeb133c89, 0xcea927ee, 0xb761c935, 0xe11ce5ed, 0x7a47b13c, 0x9cd2df59, 0x55f2733f, 0x1814ce79, 0x73c737bf, 0x53f7cdea, 0x5ffdaa5b, 0xdf3d6f14, 0x7844db86, 0xcaaff381, 0xb968c43e, 0x3824342c, 0xc2a3405f, 0x161dc372, 0xbce2250c, 0x283c498b, 0xff0d9541, 0x39a80171, 0x080cb3de, 0xd8b4e49c, 0x6456c190, 0x7bcb8461, 0xd532b670, 0x486c5c74, 0xd0b85742];\nconst T6 = [0x5051f4a7, 0x537e4165, 0xc31a17a4, 0x963a275e, 0xcb3bab6b, 0xf11f9d45, 0xabacfa58, 0x934be303, 0x552030fa, 0xf6ad766d, 0x9188cc76, 0x25f5024c, 0xfc4fe5d7, 0xd7c52acb, 0x80263544, 0x8fb562a3, 0x49deb15a, 0x6725ba1b, 0x9845ea0e, 0xe15dfec0, 0x02c32f75, 0x12814cf0, 0xa38d4697, 0xc66bd3f9, 0xe7038f5f, 0x9515929c, 0xebbf6d7a, 0xda955259, 0x2dd4be83, 0xd3587421, 0x2949e069, 0x448ec9c8, 0x6a75c289, 0x78f48e79, 0x6b99583e, 0xdd27b971, 0xb6bee14f, 0x17f088ad, 0x66c920ac, 0xb47dce3a, 0x1863df4a, 0x82e51a31, 0x60975133, 0x4562537f, 0xe0b16477, 0x84bb6bae, 0x1cfe81a0, 0x94f9082b, 0x58704868, 0x198f45fd, 0x8794de6c, 0xb7527bf8, 0x23ab73d3, 0xe2724b02, 0x57e31f8f, 0x2a6655ab, 0x07b2eb28, 0x032fb5c2, 0x9a86c57b, 0xa5d33708, 0xf2302887, 0xb223bfa5, 0xba02036a, 0x5ced1682, 0x2b8acf1c, 0x92a779b4, 0xf0f307f2, 0xa14e69e2, 0xcd65daf4, 0xd50605be, 0x1fd13462, 0x8ac4a6fe, 0x9d342e53, 0xa0a2f355, 0x32058ae1, 0x75a4f6eb, 0x390b83ec, 0xaa4060ef, 0x065e719f, 0x51bd6e10, 0xf93e218a, 0x3d96dd06, 0xaedd3e05, 0x464de6bd, 0xb591548d, 0x0571c45d, 0x6f0406d4, 0xff605015, 0x241998fb, 0x97d6bde9, 0xcc894043, 0x7767d99e, 0xbdb0e842, 0x8807898b, 0x38e7195b, 0xdb79c8ee, 0x47a17c0a, 0xe97c420f, 0xc9f8841e, 0x00000000, 0x83098086, 0x48322bed, 0xac1e1170, 0x4e6c5a72, 0xfbfd0eff, 0x560f8538, 0x1e3daed5, 0x27362d39, 0x640a0fd9, 0x21685ca6, 0xd19b5b54, 0x3a24362e, 0xb10c0a67, 0x0f9357e7, 0xd2b4ee96, 0x9e1b9b91, 0x4f80c0c5, 0xa261dc20, 0x695a774b, 0x161c121a, 0x0ae293ba, 0xe5c0a02a, 0x433c22e0, 0x1d121b17, 0x0b0e090d, 0xadf28bc7, 0xb92db6a8, 0xc8141ea9, 0x8557f119, 0x4caf7507, 0xbbee99dd, 0xfda37f60, 0x9ff70126, 0xbc5c72f5, 0xc544663b, 0x345bfb7e, 0x768b4329, 0xdccb23c6, 0x68b6edfc, 0x63b8e4f1, 0xcad731dc, 0x10426385, 0x40139722, 0x2084c611, 0x7d854a24, 0xf8d2bb3d, 0x11aef932, 0x6dc729a1, 0x4b1d9e2f, 0xf3dcb230, 0xec0d8652, 0xd077c1e3, 0x6c2bb316, 0x99a970b9, 0xfa119448, 0x2247e964, 0xc4a8fc8c, 0x1aa0f03f, 0xd8567d2c, 0xef223390, 0xc787494e, 0xc1d938d1, 0xfe8ccaa2, 0x3698d40b, 0xcfa6f581, 0x28a57ade, 0x26dab78e, 0xa43fadbf, 0xe42c3a9d, 0x0d507892, 0x9b6a5fcc, 0x62547e46, 0xc2f68d13, 0xe890d8b8, 0x5e2e39f7, 0xf582c3af, 0xbe9f5d80, 0x7c69d093, 0xa96fd52d, 0xb3cf2512, 0x3bc8ac99, 0xa710187d, 0x6ee89c63, 0x7bdb3bbb, 0x09cd2678, 0xf46e5918, 0x01ec9ab7, 0xa8834f9a, 0x65e6956e, 0x7eaaffe6, 0x0821bccf, 0xe6ef15e8, 0xd9bae79b, 0xce4a6f36, 0xd4ea9f09, 0xd629b07c, 0xaf31a4b2, 0x312a3f23, 0x30c6a594, 0xc035a266, 0x37744ebc, 0xa6fc82ca, 0xb0e090d0, 0x1533a7d8, 0x4af10498, 0xf741ecda, 0x0e7fcd50, 0x2f1791f6, 0x8d764dd6, 0x4d43efb0, 0x54ccaa4d, 0xdfe49604, 0xe39ed1b5, 0x1b4c6a88, 0xb8c12c1f, 0x7f466551, 0x049d5eea, 0x5d018c35, 0x73fa8774, 0x2efb0b41, 0x5ab3671d, 0x5292dbd2, 0x33e91056, 0x136dd647, 0x8c9ad761, 0x7a37a10c, 0x8e59f814, 0x89eb133c, 0xeecea927, 0x35b761c9, 0xede11ce5, 0x3c7a47b1, 0x599cd2df, 0x3f55f273, 0x791814ce, 0xbf73c737, 0xea53f7cd, 0x5b5ffdaa, 0x14df3d6f, 0x867844db, 0x81caaff3, 0x3eb968c4, 0x2c382434, 0x5fc2a340, 0x72161dc3, 0x0cbce225, 0x8b283c49, 0x41ff0d95, 0x7139a801, 0xde080cb3, 0x9cd8b4e4, 0x906456c1, 0x617bcb84, 0x70d532b6, 0x74486c5c, 0x42d0b857];\nconst T7 = [0xa75051f4, 0x65537e41, 0xa4c31a17, 0x5e963a27, 0x6bcb3bab, 0x45f11f9d, 0x58abacfa, 0x03934be3, 0xfa552030, 0x6df6ad76, 0x769188cc, 0x4c25f502, 0xd7fc4fe5, 0xcbd7c52a, 0x44802635, 0xa38fb562, 0x5a49deb1, 0x1b6725ba, 0x0e9845ea, 0xc0e15dfe, 0x7502c32f, 0xf012814c, 0x97a38d46, 0xf9c66bd3, 0x5fe7038f, 0x9c951592, 0x7aebbf6d, 0x59da9552, 0x832dd4be, 0x21d35874, 0x692949e0, 0xc8448ec9, 0x896a75c2, 0x7978f48e, 0x3e6b9958, 0x71dd27b9, 0x4fb6bee1, 0xad17f088, 0xac66c920, 0x3ab47dce, 0x4a1863df, 0x3182e51a, 0x33609751, 0x7f456253, 0x77e0b164, 0xae84bb6b, 0xa01cfe81, 0x2b94f908, 0x68587048, 0xfd198f45, 0x6c8794de, 0xf8b7527b, 0xd323ab73, 0x02e2724b, 0x8f57e31f, 0xab2a6655, 0x2807b2eb, 0xc2032fb5, 0x7b9a86c5, 0x08a5d337, 0x87f23028, 0xa5b223bf, 0x6aba0203, 0x825ced16, 0x1c2b8acf, 0xb492a779, 0xf2f0f307, 0xe2a14e69, 0xf4cd65da, 0xbed50605, 0x621fd134, 0xfe8ac4a6, 0x539d342e, 0x55a0a2f3, 0xe132058a, 0xeb75a4f6, 0xec390b83, 0xefaa4060, 0x9f065e71, 0x1051bd6e, 0x8af93e21, 0x063d96dd, 0x05aedd3e, 0xbd464de6, 0x8db59154, 0x5d0571c4, 0xd46f0406, 0x15ff6050, 0xfb241998, 0xe997d6bd, 0x43cc8940, 0x9e7767d9, 0x42bdb0e8, 0x8b880789, 0x5b38e719, 0xeedb79c8, 0x0a47a17c, 0x0fe97c42, 0x1ec9f884, 0x00000000, 0x86830980, 0xed48322b, 0x70ac1e11, 0x724e6c5a, 0xfffbfd0e, 0x38560f85, 0xd51e3dae, 0x3927362d, 0xd9640a0f, 0xa621685c, 0x54d19b5b, 0x2e3a2436, 0x67b10c0a, 0xe70f9357, 0x96d2b4ee, 0x919e1b9b, 0xc54f80c0, 0x20a261dc, 0x4b695a77, 0x1a161c12, 0xba0ae293, 0x2ae5c0a0, 0xe0433c22, 0x171d121b, 0x0d0b0e09, 0xc7adf28b, 0xa8b92db6, 0xa9c8141e, 0x198557f1, 0x074caf75, 0xddbbee99, 0x60fda37f, 0x269ff701, 0xf5bc5c72, 0x3bc54466, 0x7e345bfb, 0x29768b43, 0xc6dccb23, 0xfc68b6ed, 0xf163b8e4, 0xdccad731, 0x85104263, 0x22401397, 0x112084c6, 0x247d854a, 0x3df8d2bb, 0x3211aef9, 0xa16dc729, 0x2f4b1d9e, 0x30f3dcb2, 0x52ec0d86, 0xe3d077c1, 0x166c2bb3, 0xb999a970, 0x48fa1194, 0x642247e9, 0x8cc4a8fc, 0x3f1aa0f0, 0x2cd8567d, 0x90ef2233, 0x4ec78749, 0xd1c1d938, 0xa2fe8cca, 0x0b3698d4, 0x81cfa6f5, 0xde28a57a, 0x8e26dab7, 0xbfa43fad, 0x9de42c3a, 0x920d5078, 0xcc9b6a5f, 0x4662547e, 0x13c2f68d, 0xb8e890d8, 0xf75e2e39, 0xaff582c3, 0x80be9f5d, 0x937c69d0, 0x2da96fd5, 0x12b3cf25, 0x993bc8ac, 0x7da71018, 0x636ee89c, 0xbb7bdb3b, 0x7809cd26, 0x18f46e59, 0xb701ec9a, 0x9aa8834f, 0x6e65e695, 0xe67eaaff, 0xcf0821bc, 0xe8e6ef15, 0x9bd9bae7, 0x36ce4a6f, 0x09d4ea9f, 0x7cd629b0, 0xb2af31a4, 0x23312a3f, 0x9430c6a5, 0x66c035a2, 0xbc37744e, 0xcaa6fc82, 0xd0b0e090, 0xd81533a7, 0x984af104, 0xdaf741ec, 0x500e7fcd, 0xf62f1791, 0xd68d764d, 0xb04d43ef, 0x4d54ccaa, 0x04dfe496, 0xb5e39ed1, 0x881b4c6a, 0x1fb8c12c, 0x517f4665, 0xea049d5e, 0x355d018c, 0x7473fa87, 0x412efb0b, 0x1d5ab367, 0xd25292db, 0x5633e910, 0x47136dd6, 0x618c9ad7, 0x0c7a37a1, 0x148e59f8, 0x3c89eb13, 0x27eecea9, 0xc935b761, 0xe5ede11c, 0xb13c7a47, 0xdf599cd2, 0x733f55f2, 0xce791814, 0x37bf73c7, 0xcdea53f7, 0xaa5b5ffd, 0x6f14df3d, 0xdb867844, 0xf381caaf, 0xc43eb968, 0x342c3824, 0x405fc2a3, 0xc372161d, 0x250cbce2, 0x498b283c, 0x9541ff0d, 0x017139a8, 0xb3de080c, 0xe49cd8b4, 0xc1906456, 0x84617bcb, 0xb670d532, 0x5c74486c, 0x5742d0b8];\nconst T8 = [0xf4a75051, 0x4165537e, 0x17a4c31a, 0x275e963a, 0xab6bcb3b, 0x9d45f11f, 0xfa58abac, 0xe303934b, 0x30fa5520, 0x766df6ad, 0xcc769188, 0x024c25f5, 0xe5d7fc4f, 0x2acbd7c5, 0x35448026, 0x62a38fb5, 0xb15a49de, 0xba1b6725, 0xea0e9845, 0xfec0e15d, 0x2f7502c3, 0x4cf01281, 0x4697a38d, 0xd3f9c66b, 0x8f5fe703, 0x929c9515, 0x6d7aebbf, 0x5259da95, 0xbe832dd4, 0x7421d358, 0xe0692949, 0xc9c8448e, 0xc2896a75, 0x8e7978f4, 0x583e6b99, 0xb971dd27, 0xe14fb6be, 0x88ad17f0, 0x20ac66c9, 0xce3ab47d, 0xdf4a1863, 0x1a3182e5, 0x51336097, 0x537f4562, 0x6477e0b1, 0x6bae84bb, 0x81a01cfe, 0x082b94f9, 0x48685870, 0x45fd198f, 0xde6c8794, 0x7bf8b752, 0x73d323ab, 0x4b02e272, 0x1f8f57e3, 0x55ab2a66, 0xeb2807b2, 0xb5c2032f, 0xc57b9a86, 0x3708a5d3, 0x2887f230, 0xbfa5b223, 0x036aba02, 0x16825ced, 0xcf1c2b8a, 0x79b492a7, 0x07f2f0f3, 0x69e2a14e, 0xdaf4cd65, 0x05bed506, 0x34621fd1, 0xa6fe8ac4, 0x2e539d34, 0xf355a0a2, 0x8ae13205, 0xf6eb75a4, 0x83ec390b, 0x60efaa40, 0x719f065e, 0x6e1051bd, 0x218af93e, 0xdd063d96, 0x3e05aedd, 0xe6bd464d, 0x548db591, 0xc45d0571, 0x06d46f04, 0x5015ff60, 0x98fb2419, 0xbde997d6, 0x4043cc89, 0xd99e7767, 0xe842bdb0, 0x898b8807, 0x195b38e7, 0xc8eedb79, 0x7c0a47a1, 0x420fe97c, 0x841ec9f8, 0x00000000, 0x80868309, 0x2bed4832, 0x1170ac1e, 0x5a724e6c, 0x0efffbfd, 0x8538560f, 0xaed51e3d, 0x2d392736, 0x0fd9640a, 0x5ca62168, 0x5b54d19b, 0x362e3a24, 0x0a67b10c, 0x57e70f93, 0xee96d2b4, 0x9b919e1b, 0xc0c54f80, 0xdc20a261, 0x774b695a, 0x121a161c, 0x93ba0ae2, 0xa02ae5c0, 0x22e0433c, 0x1b171d12, 0x090d0b0e, 0x8bc7adf2, 0xb6a8b92d, 0x1ea9c814, 0xf1198557, 0x75074caf, 0x99ddbbee, 0x7f60fda3, 0x01269ff7, 0x72f5bc5c, 0x663bc544, 0xfb7e345b, 0x4329768b, 0x23c6dccb, 0xedfc68b6, 0xe4f163b8, 0x31dccad7, 0x63851042, 0x97224013, 0xc6112084, 0x4a247d85, 0xbb3df8d2, 0xf93211ae, 0x29a16dc7, 0x9e2f4b1d, 0xb230f3dc, 0x8652ec0d, 0xc1e3d077, 0xb3166c2b, 0x70b999a9, 0x9448fa11, 0xe9642247, 0xfc8cc4a8, 0xf03f1aa0, 0x7d2cd856, 0x3390ef22, 0x494ec787, 0x38d1c1d9, 0xcaa2fe8c, 0xd40b3698, 0xf581cfa6, 0x7ade28a5, 0xb78e26da, 0xadbfa43f, 0x3a9de42c, 0x78920d50, 0x5fcc9b6a, 0x7e466254, 0x8d13c2f6, 0xd8b8e890, 0x39f75e2e, 0xc3aff582, 0x5d80be9f, 0xd0937c69, 0xd52da96f, 0x2512b3cf, 0xac993bc8, 0x187da710, 0x9c636ee8, 0x3bbb7bdb, 0x267809cd, 0x5918f46e, 0x9ab701ec, 0x4f9aa883, 0x956e65e6, 0xffe67eaa, 0xbccf0821, 0x15e8e6ef, 0xe79bd9ba, 0x6f36ce4a, 0x9f09d4ea, 0xb07cd629, 0xa4b2af31, 0x3f23312a, 0xa59430c6, 0xa266c035, 0x4ebc3774, 0x82caa6fc, 0x90d0b0e0, 0xa7d81533, 0x04984af1, 0xecdaf741, 0xcd500e7f, 0x91f62f17, 0x4dd68d76, 0xefb04d43, 0xaa4d54cc, 0x9604dfe4, 0xd1b5e39e, 0x6a881b4c, 0x2c1fb8c1, 0x65517f46, 0x5eea049d, 0x8c355d01, 0x877473fa, 0x0b412efb, 0x671d5ab3, 0xdbd25292, 0x105633e9, 0xd647136d, 0xd7618c9a, 0xa10c7a37, 0xf8148e59, 0x133c89eb, 0xa927eece, 0x61c935b7, 0x1ce5ede1, 0x47b13c7a, 0xd2df599c, 0xf2733f55, 0x14ce7918, 0xc737bf73, 0xf7cdea53, 0xfdaa5b5f, 0x3d6f14df, 0x44db8678, 0xaff381ca, 0x68c43eb9, 0x24342c38, 0xa3405fc2, 0x1dc37216, 0xe2250cbc, 0x3c498b28, 0x0d9541ff, 0xa8017139, 0x0cb3de08, 0xb4e49cd8, 0x56c19064, 0xcb84617b, 0x32b670d5, 0x6c5c7448, 0xb85742d0];\n\n// Transformations for decryption key expansion\nconst U1 = [0x00000000, 0x0e090d0b, 0x1c121a16, 0x121b171d, 0x3824342c, 0x362d3927, 0x24362e3a, 0x2a3f2331, 0x70486858, 0x7e416553, 0x6c5a724e, 0x62537f45, 0x486c5c74, 0x4665517f, 0x547e4662, 0x5a774b69, 0xe090d0b0, 0xee99ddbb, 0xfc82caa6, 0xf28bc7ad, 0xd8b4e49c, 0xd6bde997, 0xc4a6fe8a, 0xcaaff381, 0x90d8b8e8, 0x9ed1b5e3, 0x8ccaa2fe, 0x82c3aff5, 0xa8fc8cc4, 0xa6f581cf, 0xb4ee96d2, 0xbae79bd9, 0xdb3bbb7b, 0xd532b670, 0xc729a16d, 0xc920ac66, 0xe31f8f57, 0xed16825c, 0xff0d9541, 0xf104984a, 0xab73d323, 0xa57ade28, 0xb761c935, 0xb968c43e, 0x9357e70f, 0x9d5eea04, 0x8f45fd19, 0x814cf012, 0x3bab6bcb, 0x35a266c0, 0x27b971dd, 0x29b07cd6, 0x038f5fe7, 0x0d8652ec, 0x1f9d45f1, 0x119448fa, 0x4be30393, 0x45ea0e98, 0x57f11985, 0x59f8148e, 0x73c737bf, 0x7dce3ab4, 0x6fd52da9, 0x61dc20a2, 0xad766df6, 0xa37f60fd, 0xb16477e0, 0xbf6d7aeb, 0x955259da, 0x9b5b54d1, 0x894043cc, 0x87494ec7, 0xdd3e05ae, 0xd33708a5, 0xc12c1fb8, 0xcf2512b3, 0xe51a3182, 0xeb133c89, 0xf9082b94, 0xf701269f, 0x4de6bd46, 0x43efb04d, 0x51f4a750, 0x5ffdaa5b, 0x75c2896a, 0x7bcb8461, 0x69d0937c, 0x67d99e77, 0x3daed51e, 0x33a7d815, 0x21bccf08, 0x2fb5c203, 0x058ae132, 0x0b83ec39, 0x1998fb24, 0x1791f62f, 0x764dd68d, 0x7844db86, 0x6a5fcc9b, 0x6456c190, 0x4e69e2a1, 0x4060efaa, 0x527bf8b7, 0x5c72f5bc, 0x0605bed5, 0x080cb3de, 0x1a17a4c3, 0x141ea9c8, 0x3e218af9, 0x302887f2, 0x223390ef, 0x2c3a9de4, 0x96dd063d, 0x98d40b36, 0x8acf1c2b, 0x84c61120, 0xaef93211, 0xa0f03f1a, 0xb2eb2807, 0xbce2250c, 0xe6956e65, 0xe89c636e, 0xfa877473, 0xf48e7978, 0xdeb15a49, 0xd0b85742, 0xc2a3405f, 0xccaa4d54, 0x41ecdaf7, 0x4fe5d7fc, 0x5dfec0e1, 0x53f7cdea, 0x79c8eedb, 0x77c1e3d0, 0x65daf4cd, 0x6bd3f9c6, 0x31a4b2af, 0x3fadbfa4, 0x2db6a8b9, 0x23bfa5b2, 0x09808683, 0x07898b88, 0x15929c95, 0x1b9b919e, 0xa17c0a47, 0xaf75074c, 0xbd6e1051, 0xb3671d5a, 0x99583e6b, 0x97513360, 0x854a247d, 0x8b432976, 0xd134621f, 0xdf3d6f14, 0xcd267809, 0xc32f7502, 0xe9105633, 0xe7195b38, 0xf5024c25, 0xfb0b412e, 0x9ad7618c, 0x94de6c87, 0x86c57b9a, 0x88cc7691, 0xa2f355a0, 0xacfa58ab, 0xbee14fb6, 0xb0e842bd, 0xea9f09d4, 0xe49604df, 0xf68d13c2, 0xf8841ec9, 0xd2bb3df8, 0xdcb230f3, 0xcea927ee, 0xc0a02ae5, 0x7a47b13c, 0x744ebc37, 0x6655ab2a, 0x685ca621, 0x42638510, 0x4c6a881b, 0x5e719f06, 0x5078920d, 0x0a0fd964, 0x0406d46f, 0x161dc372, 0x1814ce79, 0x322bed48, 0x3c22e043, 0x2e39f75e, 0x2030fa55, 0xec9ab701, 0xe293ba0a, 0xf088ad17, 0xfe81a01c, 0xd4be832d, 0xdab78e26, 0xc8ac993b, 0xc6a59430, 0x9cd2df59, 0x92dbd252, 0x80c0c54f, 0x8ec9c844, 0xa4f6eb75, 0xaaffe67e, 0xb8e4f163, 0xb6edfc68, 0x0c0a67b1, 0x02036aba, 0x10187da7, 0x1e1170ac, 0x342e539d, 0x3a275e96, 0x283c498b, 0x26354480, 0x7c420fe9, 0x724b02e2, 0x605015ff, 0x6e5918f4, 0x44663bc5, 0x4a6f36ce, 0x587421d3, 0x567d2cd8, 0x37a10c7a, 0x39a80171, 0x2bb3166c, 0x25ba1b67, 0x0f853856, 0x018c355d, 0x13972240, 0x1d9e2f4b, 0x47e96422, 0x49e06929, 0x5bfb7e34, 0x55f2733f, 0x7fcd500e, 0x71c45d05, 0x63df4a18, 0x6dd64713, 0xd731dcca, 0xd938d1c1, 0xcb23c6dc, 0xc52acbd7, 0xef15e8e6, 0xe11ce5ed, 0xf307f2f0, 0xfd0efffb, 0xa779b492, 0xa970b999, 0xbb6bae84, 0xb562a38f, 0x9f5d80be, 0x91548db5, 0x834f9aa8, 0x8d4697a3];\nconst U2 = [0x00000000, 0x0b0e090d, 0x161c121a, 0x1d121b17, 0x2c382434, 0x27362d39, 0x3a24362e, 0x312a3f23, 0x58704868, 0x537e4165, 0x4e6c5a72, 0x4562537f, 0x74486c5c, 0x7f466551, 0x62547e46, 0x695a774b, 0xb0e090d0, 0xbbee99dd, 0xa6fc82ca, 0xadf28bc7, 0x9cd8b4e4, 0x97d6bde9, 0x8ac4a6fe, 0x81caaff3, 0xe890d8b8, 0xe39ed1b5, 0xfe8ccaa2, 0xf582c3af, 0xc4a8fc8c, 0xcfa6f581, 0xd2b4ee96, 0xd9bae79b, 0x7bdb3bbb, 0x70d532b6, 0x6dc729a1, 0x66c920ac, 0x57e31f8f, 0x5ced1682, 0x41ff0d95, 0x4af10498, 0x23ab73d3, 0x28a57ade, 0x35b761c9, 0x3eb968c4, 0x0f9357e7, 0x049d5eea, 0x198f45fd, 0x12814cf0, 0xcb3bab6b, 0xc035a266, 0xdd27b971, 0xd629b07c, 0xe7038f5f, 0xec0d8652, 0xf11f9d45, 0xfa119448, 0x934be303, 0x9845ea0e, 0x8557f119, 0x8e59f814, 0xbf73c737, 0xb47dce3a, 0xa96fd52d, 0xa261dc20, 0xf6ad766d, 0xfda37f60, 0xe0b16477, 0xebbf6d7a, 0xda955259, 0xd19b5b54, 0xcc894043, 0xc787494e, 0xaedd3e05, 0xa5d33708, 0xb8c12c1f, 0xb3cf2512, 0x82e51a31, 0x89eb133c, 0x94f9082b, 0x9ff70126, 0x464de6bd, 0x4d43efb0, 0x5051f4a7, 0x5b5ffdaa, 0x6a75c289, 0x617bcb84, 0x7c69d093, 0x7767d99e, 0x1e3daed5, 0x1533a7d8, 0x0821bccf, 0x032fb5c2, 0x32058ae1, 0x390b83ec, 0x241998fb, 0x2f1791f6, 0x8d764dd6, 0x867844db, 0x9b6a5fcc, 0x906456c1, 0xa14e69e2, 0xaa4060ef, 0xb7527bf8, 0xbc5c72f5, 0xd50605be, 0xde080cb3, 0xc31a17a4, 0xc8141ea9, 0xf93e218a, 0xf2302887, 0xef223390, 0xe42c3a9d, 0x3d96dd06, 0x3698d40b, 0x2b8acf1c, 0x2084c611, 0x11aef932, 0x1aa0f03f, 0x07b2eb28, 0x0cbce225, 0x65e6956e, 0x6ee89c63, 0x73fa8774, 0x78f48e79, 0x49deb15a, 0x42d0b857, 0x5fc2a340, 0x54ccaa4d, 0xf741ecda, 0xfc4fe5d7, 0xe15dfec0, 0xea53f7cd, 0xdb79c8ee, 0xd077c1e3, 0xcd65daf4, 0xc66bd3f9, 0xaf31a4b2, 0xa43fadbf, 0xb92db6a8, 0xb223bfa5, 0x83098086, 0x8807898b, 0x9515929c, 0x9e1b9b91, 0x47a17c0a, 0x4caf7507, 0x51bd6e10, 0x5ab3671d, 0x6b99583e, 0x60975133, 0x7d854a24, 0x768b4329, 0x1fd13462, 0x14df3d6f, 0x09cd2678, 0x02c32f75, 0x33e91056, 0x38e7195b, 0x25f5024c, 0x2efb0b41, 0x8c9ad761, 0x8794de6c, 0x9a86c57b, 0x9188cc76, 0xa0a2f355, 0xabacfa58, 0xb6bee14f, 0xbdb0e842, 0xd4ea9f09, 0xdfe49604, 0xc2f68d13, 0xc9f8841e, 0xf8d2bb3d, 0xf3dcb230, 0xeecea927, 0xe5c0a02a, 0x3c7a47b1, 0x37744ebc, 0x2a6655ab, 0x21685ca6, 0x10426385, 0x1b4c6a88, 0x065e719f, 0x0d507892, 0x640a0fd9, 0x6f0406d4, 0x72161dc3, 0x791814ce, 0x48322bed, 0x433c22e0, 0x5e2e39f7, 0x552030fa, 0x01ec9ab7, 0x0ae293ba, 0x17f088ad, 0x1cfe81a0, 0x2dd4be83, 0x26dab78e, 0x3bc8ac99, 0x30c6a594, 0x599cd2df, 0x5292dbd2, 0x4f80c0c5, 0x448ec9c8, 0x75a4f6eb, 0x7eaaffe6, 0x63b8e4f1, 0x68b6edfc, 0xb10c0a67, 0xba02036a, 0xa710187d, 0xac1e1170, 0x9d342e53, 0x963a275e, 0x8b283c49, 0x80263544, 0xe97c420f, 0xe2724b02, 0xff605015, 0xf46e5918, 0xc544663b, 0xce4a6f36, 0xd3587421, 0xd8567d2c, 0x7a37a10c, 0x7139a801, 0x6c2bb316, 0x6725ba1b, 0x560f8538, 0x5d018c35, 0x40139722, 0x4b1d9e2f, 0x2247e964, 0x2949e069, 0x345bfb7e, 0x3f55f273, 0x0e7fcd50, 0x0571c45d, 0x1863df4a, 0x136dd647, 0xcad731dc, 0xc1d938d1, 0xdccb23c6, 0xd7c52acb, 0xe6ef15e8, 0xede11ce5, 0xf0f307f2, 0xfbfd0eff, 0x92a779b4, 0x99a970b9, 0x84bb6bae, 0x8fb562a3, 0xbe9f5d80, 0xb591548d, 0xa8834f9a, 0xa38d4697];\nconst U3 = [0x00000000, 0x0d0b0e09, 0x1a161c12, 0x171d121b, 0x342c3824, 0x3927362d, 0x2e3a2436, 0x23312a3f, 0x68587048, 0x65537e41, 0x724e6c5a, 0x7f456253, 0x5c74486c, 0x517f4665, 0x4662547e, 0x4b695a77, 0xd0b0e090, 0xddbbee99, 0xcaa6fc82, 0xc7adf28b, 0xe49cd8b4, 0xe997d6bd, 0xfe8ac4a6, 0xf381caaf, 0xb8e890d8, 0xb5e39ed1, 0xa2fe8cca, 0xaff582c3, 0x8cc4a8fc, 0x81cfa6f5, 0x96d2b4ee, 0x9bd9bae7, 0xbb7bdb3b, 0xb670d532, 0xa16dc729, 0xac66c920, 0x8f57e31f, 0x825ced16, 0x9541ff0d, 0x984af104, 0xd323ab73, 0xde28a57a, 0xc935b761, 0xc43eb968, 0xe70f9357, 0xea049d5e, 0xfd198f45, 0xf012814c, 0x6bcb3bab, 0x66c035a2, 0x71dd27b9, 0x7cd629b0, 0x5fe7038f, 0x52ec0d86, 0x45f11f9d, 0x48fa1194, 0x03934be3, 0x0e9845ea, 0x198557f1, 0x148e59f8, 0x37bf73c7, 0x3ab47dce, 0x2da96fd5, 0x20a261dc, 0x6df6ad76, 0x60fda37f, 0x77e0b164, 0x7aebbf6d, 0x59da9552, 0x54d19b5b, 0x43cc8940, 0x4ec78749, 0x05aedd3e, 0x08a5d337, 0x1fb8c12c, 0x12b3cf25, 0x3182e51a, 0x3c89eb13, 0x2b94f908, 0x269ff701, 0xbd464de6, 0xb04d43ef, 0xa75051f4, 0xaa5b5ffd, 0x896a75c2, 0x84617bcb, 0x937c69d0, 0x9e7767d9, 0xd51e3dae, 0xd81533a7, 0xcf0821bc, 0xc2032fb5, 0xe132058a, 0xec390b83, 0xfb241998, 0xf62f1791, 0xd68d764d, 0xdb867844, 0xcc9b6a5f, 0xc1906456, 0xe2a14e69, 0xefaa4060, 0xf8b7527b, 0xf5bc5c72, 0xbed50605, 0xb3de080c, 0xa4c31a17, 0xa9c8141e, 0x8af93e21, 0x87f23028, 0x90ef2233, 0x9de42c3a, 0x063d96dd, 0x0b3698d4, 0x1c2b8acf, 0x112084c6, 0x3211aef9, 0x3f1aa0f0, 0x2807b2eb, 0x250cbce2, 0x6e65e695, 0x636ee89c, 0x7473fa87, 0x7978f48e, 0x5a49deb1, 0x5742d0b8, 0x405fc2a3, 0x4d54ccaa, 0xdaf741ec, 0xd7fc4fe5, 0xc0e15dfe, 0xcdea53f7, 0xeedb79c8, 0xe3d077c1, 0xf4cd65da, 0xf9c66bd3, 0xb2af31a4, 0xbfa43fad, 0xa8b92db6, 0xa5b223bf, 0x86830980, 0x8b880789, 0x9c951592, 0x919e1b9b, 0x0a47a17c, 0x074caf75, 0x1051bd6e, 0x1d5ab367, 0x3e6b9958, 0x33609751, 0x247d854a, 0x29768b43, 0x621fd134, 0x6f14df3d, 0x7809cd26, 0x7502c32f, 0x5633e910, 0x5b38e719, 0x4c25f502, 0x412efb0b, 0x618c9ad7, 0x6c8794de, 0x7b9a86c5, 0x769188cc, 0x55a0a2f3, 0x58abacfa, 0x4fb6bee1, 0x42bdb0e8, 0x09d4ea9f, 0x04dfe496, 0x13c2f68d, 0x1ec9f884, 0x3df8d2bb, 0x30f3dcb2, 0x27eecea9, 0x2ae5c0a0, 0xb13c7a47, 0xbc37744e, 0xab2a6655, 0xa621685c, 0x85104263, 0x881b4c6a, 0x9f065e71, 0x920d5078, 0xd9640a0f, 0xd46f0406, 0xc372161d, 0xce791814, 0xed48322b, 0xe0433c22, 0xf75e2e39, 0xfa552030, 0xb701ec9a, 0xba0ae293, 0xad17f088, 0xa01cfe81, 0x832dd4be, 0x8e26dab7, 0x993bc8ac, 0x9430c6a5, 0xdf599cd2, 0xd25292db, 0xc54f80c0, 0xc8448ec9, 0xeb75a4f6, 0xe67eaaff, 0xf163b8e4, 0xfc68b6ed, 0x67b10c0a, 0x6aba0203, 0x7da71018, 0x70ac1e11, 0x539d342e, 0x5e963a27, 0x498b283c, 0x44802635, 0x0fe97c42, 0x02e2724b, 0x15ff6050, 0x18f46e59, 0x3bc54466, 0x36ce4a6f, 0x21d35874, 0x2cd8567d, 0x0c7a37a1, 0x017139a8, 0x166c2bb3, 0x1b6725ba, 0x38560f85, 0x355d018c, 0x22401397, 0x2f4b1d9e, 0x642247e9, 0x692949e0, 0x7e345bfb, 0x733f55f2, 0x500e7fcd, 0x5d0571c4, 0x4a1863df, 0x47136dd6, 0xdccad731, 0xd1c1d938, 0xc6dccb23, 0xcbd7c52a, 0xe8e6ef15, 0xe5ede11c, 0xf2f0f307, 0xfffbfd0e, 0xb492a779, 0xb999a970, 0xae84bb6b, 0xa38fb562, 0x80be9f5d, 0x8db59154, 0x9aa8834f, 0x97a38d46];\nconst U4 = [0x00000000, 0x090d0b0e, 0x121a161c, 0x1b171d12, 0x24342c38, 0x2d392736, 0x362e3a24, 0x3f23312a, 0x48685870, 0x4165537e, 0x5a724e6c, 0x537f4562, 0x6c5c7448, 0x65517f46, 0x7e466254, 0x774b695a, 0x90d0b0e0, 0x99ddbbee, 0x82caa6fc, 0x8bc7adf2, 0xb4e49cd8, 0xbde997d6, 0xa6fe8ac4, 0xaff381ca, 0xd8b8e890, 0xd1b5e39e, 0xcaa2fe8c, 0xc3aff582, 0xfc8cc4a8, 0xf581cfa6, 0xee96d2b4, 0xe79bd9ba, 0x3bbb7bdb, 0x32b670d5, 0x29a16dc7, 0x20ac66c9, 0x1f8f57e3, 0x16825ced, 0x0d9541ff, 0x04984af1, 0x73d323ab, 0x7ade28a5, 0x61c935b7, 0x68c43eb9, 0x57e70f93, 0x5eea049d, 0x45fd198f, 0x4cf01281, 0xab6bcb3b, 0xa266c035, 0xb971dd27, 0xb07cd629, 0x8f5fe703, 0x8652ec0d, 0x9d45f11f, 0x9448fa11, 0xe303934b, 0xea0e9845, 0xf1198557, 0xf8148e59, 0xc737bf73, 0xce3ab47d, 0xd52da96f, 0xdc20a261, 0x766df6ad, 0x7f60fda3, 0x6477e0b1, 0x6d7aebbf, 0x5259da95, 0x5b54d19b, 0x4043cc89, 0x494ec787, 0x3e05aedd, 0x3708a5d3, 0x2c1fb8c1, 0x2512b3cf, 0x1a3182e5, 0x133c89eb, 0x082b94f9, 0x01269ff7, 0xe6bd464d, 0xefb04d43, 0xf4a75051, 0xfdaa5b5f, 0xc2896a75, 0xcb84617b, 0xd0937c69, 0xd99e7767, 0xaed51e3d, 0xa7d81533, 0xbccf0821, 0xb5c2032f, 0x8ae13205, 0x83ec390b, 0x98fb2419, 0x91f62f17, 0x4dd68d76, 0x44db8678, 0x5fcc9b6a, 0x56c19064, 0x69e2a14e, 0x60efaa40, 0x7bf8b752, 0x72f5bc5c, 0x05bed506, 0x0cb3de08, 0x17a4c31a, 0x1ea9c814, 0x218af93e, 0x2887f230, 0x3390ef22, 0x3a9de42c, 0xdd063d96, 0xd40b3698, 0xcf1c2b8a, 0xc6112084, 0xf93211ae, 0xf03f1aa0, 0xeb2807b2, 0xe2250cbc, 0x956e65e6, 0x9c636ee8, 0x877473fa, 0x8e7978f4, 0xb15a49de, 0xb85742d0, 0xa3405fc2, 0xaa4d54cc, 0xecdaf741, 0xe5d7fc4f, 0xfec0e15d, 0xf7cdea53, 0xc8eedb79, 0xc1e3d077, 0xdaf4cd65, 0xd3f9c66b, 0xa4b2af31, 0xadbfa43f, 0xb6a8b92d, 0xbfa5b223, 0x80868309, 0x898b8807, 0x929c9515, 0x9b919e1b, 0x7c0a47a1, 0x75074caf, 0x6e1051bd, 0x671d5ab3, 0x583e6b99, 0x51336097, 0x4a247d85, 0x4329768b, 0x34621fd1, 0x3d6f14df, 0x267809cd, 0x2f7502c3, 0x105633e9, 0x195b38e7, 0x024c25f5, 0x0b412efb, 0xd7618c9a, 0xde6c8794, 0xc57b9a86, 0xcc769188, 0xf355a0a2, 0xfa58abac, 0xe14fb6be, 0xe842bdb0, 0x9f09d4ea, 0x9604dfe4, 0x8d13c2f6, 0x841ec9f8, 0xbb3df8d2, 0xb230f3dc, 0xa927eece, 0xa02ae5c0, 0x47b13c7a, 0x4ebc3774, 0x55ab2a66, 0x5ca62168, 0x63851042, 0x6a881b4c, 0x719f065e, 0x78920d50, 0x0fd9640a, 0x06d46f04, 0x1dc37216, 0x14ce7918, 0x2bed4832, 0x22e0433c, 0x39f75e2e, 0x30fa5520, 0x9ab701ec, 0x93ba0ae2, 0x88ad17f0, 0x81a01cfe, 0xbe832dd4, 0xb78e26da, 0xac993bc8, 0xa59430c6, 0xd2df599c, 0xdbd25292, 0xc0c54f80, 0xc9c8448e, 0xf6eb75a4, 0xffe67eaa, 0xe4f163b8, 0xedfc68b6, 0x0a67b10c, 0x036aba02, 0x187da710, 0x1170ac1e, 0x2e539d34, 0x275e963a, 0x3c498b28, 0x35448026, 0x420fe97c, 0x4b02e272, 0x5015ff60, 0x5918f46e, 0x663bc544, 0x6f36ce4a, 0x7421d358, 0x7d2cd856, 0xa10c7a37, 0xa8017139, 0xb3166c2b, 0xba1b6725, 0x8538560f, 0x8c355d01, 0x97224013, 0x9e2f4b1d, 0xe9642247, 0xe0692949, 0xfb7e345b, 0xf2733f55, 0xcd500e7f, 0xc45d0571, 0xdf4a1863, 0xd647136d, 0x31dccad7, 0x38d1c1d9, 0x23c6dccb, 0x2acbd7c5, 0x15e8e6ef, 0x1ce5ede1, 0x07f2f0f3, 0x0efffbfd, 0x79b492a7, 0x70b999a9, 0x6bae84bb, 0x62a38fb5, 0x5d80be9f, 0x548db591, 0x4f9aa883, 0x4697a38d];\n\nfunction convertToInt32(bytes: Uint8Array): Array<number> {\n  const result = [ ];\n  for (let i = 0; i < bytes.length; i += 4) {\n    result.push((bytes[i] << 24) | (bytes[i + 1] << 16) | (bytes[i + 2] <<  8) | bytes[i + 3]);\n  }\n  return result;\n}\n\nexport class AES {\n  readonly #key: Uint8Array;\n  readonly #Kd: Array<Array<number>>;\n  readonly #Ke: Array<Array<number>>;\n\n  get key(): Uint8Array { return this.#key.slice(); }\n\n  constructor(key: Uint8Array) {\n    if (!(this instanceof AES)) {\n      throw Error('AES must be instanitated with `new`');\n    }\n\n    this.#key = new Uint8Array(key);\n\n    const rounds = numberOfRounds[this.key.length];\n    if (rounds == null) {\n      throw new TypeError('invalid key size (must be 16, 24 or 32 bytes)');\n    }\n\n    // encryption round keys\n    this.#Ke = [];\n\n    // decryption round keys\n    this.#Kd = [];\n\n    for (let i = 0; i <= rounds; i++) {\n      this.#Ke.push([0, 0, 0, 0]);\n      this.#Kd.push([0, 0, 0, 0]);\n    }\n\n    const roundKeyCount = (rounds + 1) * 4;\n    const KC = this.key.length / 4;\n\n    // convert the key into ints\n    const tk = convertToInt32(this.key);\n\n    // copy values into round key arrays\n    let index;\n    for (let i = 0; i < KC; i++) {\n      index = i >> 2;\n      this.#Ke[index][i % 4] = tk[i];\n      this.#Kd[rounds - index][i % 4] = tk[i];\n    }\n\n    // key expansion (fips-197 section 5.2)\n    let rconpointer = 0;\n    let t = KC, tt;\n    while (t < roundKeyCount) {\n      tt = tk[KC - 1];\n      tk[0] ^= ((S[(tt >> 16) & 0xFF] << 24) ^\n                (S[(tt >>  8) & 0xFF] << 16) ^\n                (S[ tt        & 0xFF] <<  8) ^\n                 S[(tt >> 24) & 0xFF]        ^\n                (rcon[rconpointer] << 24));\n      rconpointer += 1;\n\n      // key expansion (for non-256 bit)\n      if (KC != 8) {\n        for (let i = 1; i < KC; i++) {\n          tk[i] ^= tk[i - 1];\n        }\n\n      // key expansion for 256-bit keys is \"slightly different\" (fips-197)\n      } else {\n        for (let i = 1; i < (KC / 2); i++) {\n          tk[i] ^= tk[i - 1];\n        }\n        tt = tk[(KC / 2) - 1];\n\n        tk[KC / 2] ^= (S[ tt        & 0xFF]        ^\n                      (S[(tt >>  8) & 0xFF] <<  8) ^\n                      (S[(tt >> 16) & 0xFF] << 16) ^\n                      (S[(tt >> 24) & 0xFF] << 24));\n\n        for (let i = (KC / 2) + 1; i < KC; i++) {\n          tk[i] ^= tk[i - 1];\n        }\n      }\n\n      // copy values into round key arrays\n      let i = 0, r, c;\n      while (i < KC && t < roundKeyCount) {\n        r = t >> 2;\n        c = t % 4;\n        this.#Ke[r][c] = tk[i];\n        this.#Kd[rounds - r][c] = tk[i++];\n        t++;\n      }\n    }\n\n    // inverse-cipher-ify the decryption round key (fips-197 section 5.3)\n    for (let r = 1; r < rounds; r++) {\n      for (let c = 0; c < 4; c++) {\n        tt = this.#Kd[r][c];\n        this.#Kd[r][c] = (U1[(tt >> 24) & 0xFF] ^\n                          U2[(tt >> 16) & 0xFF] ^\n                          U3[(tt >>  8) & 0xFF] ^\n                          U4[ tt        & 0xFF]);\n      }\n    }\n  }\n\n  encrypt(plaintext: Uint8Array): Uint8Array {\n    if (plaintext.length != 16) {\n      throw new TypeError('invalid plaintext size (must be 16 bytes)');\n    }\n\n    const rounds = this.#Ke.length - 1;\n    const a = [0, 0, 0, 0];\n\n    // convert plaintext to (ints ^ key)\n    let t = convertToInt32(plaintext);\n    for (let i = 0; i < 4; i++) {\n      t[i] ^= this.#Ke[0][i];\n    }\n\n    // apply round transforms\n    for (let r = 1; r < rounds; r++) {\n      for (let i = 0; i < 4; i++) {\n        a[i] = (T1[(t[ i         ] >> 24) & 0xff] ^\n                T2[(t[(i + 1) % 4] >> 16) & 0xff] ^\n                T3[(t[(i + 2) % 4] >>  8) & 0xff] ^\n                T4[ t[(i + 3) % 4]        & 0xff] ^\n                this.#Ke[r][i]);\n      }\n      t = a.slice();\n    }\n\n    // the last round is special\n    const result = new Uint8Array(16);\n    let tt = 0;\n    for (let i = 0; i < 4; i++) {\n      tt = this.#Ke[rounds][i];\n      result[4 * i    ] = (S[(t[ i         ] >> 24) & 0xff] ^ (tt >> 24)) & 0xff;\n      result[4 * i + 1] = (S[(t[(i + 1) % 4] >> 16) & 0xff] ^ (tt >> 16)) & 0xff;\n      result[4 * i + 2] = (S[(t[(i + 2) % 4] >>  8) & 0xff] ^ (tt >>  8)) & 0xff;\n      result[4 * i + 3] = (S[ t[(i + 3) % 4]        & 0xff] ^  tt       ) & 0xff;\n    }\n\n    return result;\n  }\n\n  decrypt(ciphertext: Uint8Array): Uint8Array {\n    if (ciphertext.length != 16) {\n      throw new TypeError('invalid ciphertext size (must be 16 bytes)');\n    }\n\n    const rounds = this.#Kd.length - 1;\n    const a = [0, 0, 0, 0];\n\n    // convert plaintext to (ints ^ key)\n    let t = convertToInt32(ciphertext);\n    for (let i = 0; i < 4; i++) {\n      t[i] ^= this.#Kd[0][i];\n    }\n\n    // apply round transforms\n    for (let r = 1; r < rounds; r++) {\n      for (let i = 0; i < 4; i++) {\n        a[i] = (T5[(t[ i         ] >> 24) & 0xff] ^\n                T6[(t[(i + 3) % 4] >> 16) & 0xff] ^\n                T7[(t[(i + 2) % 4] >>  8) & 0xff] ^\n                T8[ t[(i + 1) % 4]        & 0xff] ^\n                this.#Kd[r][i]);\n      }\n      t = a.slice();\n    }\n\n    // the last round is special\n    const result = new Uint8Array(16);\n    let tt = 0;\n    for (let i = 0; i < 4; i++) {\n      tt = this.#Kd[rounds][i];\n      result[4 * i    ] = (Si[(t[ i         ] >> 24) & 0xff] ^ (tt >> 24)) & 0xff;\n      result[4 * i + 1] = (Si[(t[(i + 3) % 4] >> 16) & 0xff] ^ (tt >> 16)) & 0xff;\n      result[4 * i + 2] = (Si[(t[(i + 2) % 4] >>  8) & 0xff] ^ (tt >>  8)) & 0xff;\n      result[4 * i + 3] = (Si[ t[(i + 1) % 4]        & 0xff] ^  tt       ) & 0xff;\n    }\n\n    return result;\n  }\n}\n", "\nimport { AES } from \"./aes.js\";\n\nexport abstract class ModeOfOperation {\n  readonly aes!: AES;\n  readonly name!: string;\n\n  constructor(name: string, key: Uint8Array, cls?: any) {\n    if (cls && !(this instanceof cls)) {\n      throw new Error(`${ name } must be instantiated with \"new\"`);\n    }\n\n    Object.defineProperties(this, {\n      aes: { enumerable: true, value: new AES(key) },\n      name: { enumerable: true, value: name }\n    });\n  }\n\n  abstract encrypt(plaintext: Uint8Array): Uint8Array;\n  abstract decrypt(ciphertext: Uint8Array): Uint8Array;\n}\n", "// Cipher Block Chaining\n\nimport { ModeOfOperation } from \"./mode.js\";\n\nexport class CBC extends ModeOfOperation {\n  #iv: Uint8Array;\n  #lastBlock: Uint8Array;\n\n  constructor(key: Uint8Array, iv?: Uint8Array) {\n    super(\"ECC\", key, CBC);\n\n    if (iv) {\n      if (iv.length % 16) {\n        throw new TypeError(\"invalid iv size (must be 16 bytes)\");\n      }\n      this.#iv = new Uint8Array(iv);\n    } else {\n      this.#iv = new Uint8Array(16);\n    }\n\n    this.#lastBlock = this.iv;\n  }\n\n  get iv(): Uint8Array { return new Uint8Array(this.#iv); }\n\n  encrypt(plaintext: Uint8Array): Uint8Array {\n    if (plaintext.length % 16) {\n      throw new TypeError(\"invalid plaintext size (must be multiple of 16 bytes)\");\n    }\n\n    const ciphertext = new Uint8Array(plaintext.length);\n    for (let i = 0; i < plaintext.length; i += 16) {\n      for (let j = 0; j < 16; j++) {\n        this.#lastBlock[j] ^= plaintext[i + j];\n      }\n\n      this.#lastBlock = this.aes.encrypt(this.#lastBlock);\n      ciphertext.set(this.#lastBlock, i);\n    }\n\n    return ciphertext;\n  }\n\n  decrypt(ciphertext: Uint8Array): Uint8Array {\n    if (ciphertext.length % 16) {\n        throw new TypeError(\"invalid ciphertext size (must be multiple of 16 bytes)\");\n    }\n\n    const plaintext = new Uint8Array(ciphertext.length);\n    for (let i = 0; i < ciphertext.length; i += 16) {\n        const block = this.aes.decrypt(ciphertext.subarray(i, i + 16));\n\n        for (let j = 0; j < 16; j++) {\n          plaintext[i + j] = block[j] ^ this.#lastBlock[j];\n          this.#lastBlock[j] = ciphertext[i + j];\n        }\n    }\n\n    return plaintext;\n  }\n}\n", "// Cipher Feedback\n\nimport { ModeOfOperation } from \"./mode.js\";\n\nexport class CFB extends ModeOfOperation {\n  #iv: Uint8Array;\n  #shiftRegister: Uint8Array;\n\n  readonly segmentSize!: number;\n\n  constructor(key: Uint8Array, iv?: Uint8Array, segmentSize: number = 8) {\n    super(\"CFB\", key, CFB);\n\n    // This library currently only handles byte-aligned segmentSize\n    if (!Number.isInteger(segmentSize) || (segmentSize % 8)) {\n      throw new TypeError(\"invalid segmentSize\");\n    }\n\n    Object.defineProperties(this, {\n      segmentSize: { enumerable: true, value: segmentSize }\n    });\n\n    if (iv) {\n      if (iv.length % 16) {\n        throw new TypeError(\"invalid iv size (must be 16 bytes)\");\n      }\n      this.#iv = new Uint8Array(iv);\n    } else {\n      this.#iv = new Uint8Array(16);\n    }\n\n    this.#shiftRegister = this.iv;\n  }\n\n  get iv(): Uint8Array { return new Uint8Array(this.#iv); }\n\n  #shift(data: Uint8Array): void {\n    const segmentSize = this.segmentSize / 8;\n\n    // Shift the register\n    this.#shiftRegister.set(this.#shiftRegister.subarray(segmentSize));\n    this.#shiftRegister.set(data.subarray(0, segmentSize), 16 - segmentSize);\n  }\n\n  encrypt(plaintext: Uint8Array): Uint8Array {\n    if (8 * plaintext.length % this.segmentSize) {\n      throw new TypeError(\"invalid plaintext size (must be multiple of segmentSize bytes)\");\n    }\n\n    const segmentSize = this.segmentSize / 8;\n\n    const ciphertext = new Uint8Array(plaintext);\n\n    for (let i = 0; i < ciphertext.length; i += segmentSize) {\n      const xorSegment = this.aes.encrypt(this.#shiftRegister);\n      for (let j = 0; j < segmentSize; j++) {\n        ciphertext[i + j] ^= xorSegment[j];\n      }\n\n      this.#shift(ciphertext.subarray(i));\n    }\n\n    return ciphertext;\n  }\n\n  decrypt(ciphertext: Uint8Array): Uint8Array {\n    if (8 * ciphertext.length % this.segmentSize) {\n        throw new TypeError(\"invalid ciphertext size (must be multiple of segmentSize bytes)\");\n    }\n\n    const segmentSize = this.segmentSize / 8;\n\n    const plaintext = new Uint8Array(ciphertext);\n\n    for (let i = 0; i < plaintext.length; i += segmentSize) {\n      const xorSegment = this.aes.encrypt(this.#shiftRegister);\n      for (let j = 0; j < segmentSize; j++) {\n        plaintext[i + j] ^= xorSegment[j];\n      }\n\n      this.#shift(ciphertext.subarray(i));\n    }\n\n    return plaintext;\n  }\n}\n", "// Counter Mode\n\nimport { ModeOfOperation } from \"./mode.js\";\n\nexport class CTR extends ModeOfOperation {\n\n  // Remaining bytes for the one-time pad\n  #remaining: Uint8Array;\n  #remainingIndex: number;\n\n  // The current counter\n  #counter: Uint8Array;\n\n  constructor(key: Uint8Array, initialValue?: number | Uint8Array) {\n    super(\"CTR\", key, CTR);\n\n    this.#counter = new Uint8Array(16)\n    this.#counter.fill(0);\n\n    this.#remaining = this.#counter;  // This will be discarded immediately\n    this.#remainingIndex = 16;\n\n    if (initialValue == null) { initialValue = 1; }\n\n    if (typeof(initialValue) === \"number\") {\n      this.setCounterValue(initialValue);\n    } else {\n      this.setCounterBytes(initialValue);\n    }\n  }\n\n  get counter(): Uint8Array { return new Uint8Array(this.#counter); }\n\n  setCounterValue(value: number): void {\n    if (!Number.isInteger(value) || value < 0 || value > Number.MAX_SAFE_INTEGER) {\n      throw new TypeError(\"invalid counter initial integer value\");\n    }\n\n    for (let index = 15; index >= 0; --index) {\n      this.#counter[index] = value % 256;\n      value = Math.floor(value / 256);\n    }\n  }\n\n  setCounterBytes(value: Uint8Array): void {\n    if (value.length !== 16) {\n      throw new TypeError(\"invalid counter initial Uint8Array value length\");\n    }\n\n    this.#counter.set(value);\n  }\n\n  increment() {\n    for (let i = 15; i >= 0; i--) {\n      if (this.#counter[i] === 255) {\n        this.#counter[i] = 0;\n      } else {\n        this.#counter[i]++;\n        break;\n      }\n    }\n  }\n\n  encrypt(plaintext: Uint8Array): Uint8Array {\n    const crypttext = new Uint8Array(plaintext);\n\n    for (let i = 0; i < crypttext.length; i++) {\n      if (this.#remainingIndex === 16) {\n        this.#remaining = this.aes.encrypt(this.#counter);\n        this.#remainingIndex = 0;\n        this.increment();\n      }\n      crypttext[i] ^= this.#remaining[this.#remainingIndex++];\n    }\n\n    return crypttext;\n  }\n\n  decrypt(ciphertext: Uint8Array): Uint8Array {\n    return this.encrypt(ciphertext);\n  }\n}\n", "// Electronic Code Book\n\nimport { ModeOfOperation } from \"./mode.js\";\n\nexport class ECB extends ModeOfOperation {\n\n  constructor(key: Uint8Array) {\n    super(\"ECB\", key, ECB);\n  }\n\n  encrypt(plaintext: Uint8Array): Uint8Array {\n    if (plaintext.length % 16) {\n        throw new TypeError(\"invalid plaintext size (must be multiple of 16 bytes)\");\n    }\n\n    const crypttext = new Uint8Array(plaintext.length);\n    for (let i = 0; i < plaintext.length; i += 16) {\n        crypttext.set(this.aes.encrypt(plaintext.subarray(i, i + 16)), i);\n    }\n\n    return crypttext;\n  }\n\n  decrypt(crypttext: Uint8Array): Uint8Array {\n    if (crypttext.length % 16) {\n        throw new TypeError(\"invalid ciphertext size (must be multiple of 16 bytes)\");\n    }\n\n    const plaintext = new Uint8Array(crypttext.length);\n    for (let i = 0; i < crypttext.length; i += 16) {\n        plaintext.set(this.aes.decrypt(crypttext.subarray(i, i + 16)), i);\n    }\n\n    return plaintext;\n  }\n}\n", "// Output Feedback\n\nimport { ModeOfOperation } from \"./mode.js\";\n\nexport class OFB extends ModeOfOperation {\n  #iv: Uint8Array;\n  #lastPrecipher: Uint8Array;\n  #lastPrecipherIndex: number;\n\n  constructor(key: Uint8Array, iv?: Uint8Array) {\n    super(\"OFB\", key, OFB);\n\n    if (iv) {\n      if (iv.length % 16) {\n        throw new TypeError(\"invalid iv size (must be 16 bytes)\");\n      }\n      this.#iv = new Uint8Array(iv);\n    } else {\n      this.#iv = new Uint8Array(16);\n    }\n\n    this.#lastPrecipher = this.iv;\n    this.#lastPrecipherIndex = 16;\n  }\n\n  get iv(): Uint8Array { return new Uint8Array(this.#iv); }\n\n  encrypt(plaintext: Uint8Array): Uint8Array {\n    if (plaintext.length % 16) {\n      throw new TypeError(\"invalid plaintext size (must be multiple of 16 bytes)\");\n    }\n\n    const ciphertext = new Uint8Array(plaintext);\n    for (let i = 0; i < ciphertext.length; i++) {\n      if (this.#lastPrecipherIndex === 16) {\n          this.#lastPrecipher = this.aes.encrypt(this.#lastPrecipher);\n          this.#lastPrecipherIndex = 0;\n      }\n      ciphertext[i] ^= this.#lastPrecipher[this.#lastPrecipherIndex++];\n    }\n\n    return ciphertext;\n  }\n\n  decrypt(ciphertext: Uint8Array): Uint8Array {\n    if (ciphertext.length % 16) {\n        throw new TypeError(\"invalid ciphertext size (must be multiple of 16 bytes)\");\n    }\n    return this.encrypt(ciphertext);\n  }\n}\n", "\nexport function pkcs7Pad(data: Uint8Array): Uint8Array {\n    const padder = 16 - (data.length % 16);\n\n    const result = new Uint8Array(data.length + padder);\n    result.set(data);\n\n    for (let i = data.length; i < result.length; i++) {\n        result[i] = padder;\n    }\n\n    return result;\n}\n\nexport function pkcs7Strip(data: Uint8Array): Uint8Array {\n    if (data.length < 16) { throw new TypeError('PKCS#7 invalid length'); }\n\n    const padder = data[data.length - 1];\n    if (padder > 16) { throw new TypeError('PKCS#7 padding byte out of range'); }\n\n    const length = data.length - padder;\n    for (let i = 0; i < padder; i++) {\n        if (data[length + i] !== padder) {\n            throw new TypeError('PKCS#7 invalid padding byte');\n        }\n    }\n\n    return new Uint8Array(data.subarray(0, length));\n}\n", "export { AES } from \"./aes.js\";\n\nexport { ModeOfOperation } from \"./mode.js\";\n\nexport { CBC } from \"./mode-cbc.js\";\nexport { CFB } from \"./mode-cfb.js\";\nexport { CTR } from \"./mode-ctr.js\";\nexport { ECB } from \"./mode-ecb.js\";\nexport { OFB } from \"./mode-ofb.js\";\n\nexport { pkcs7Pad, pkcs7Strip } from \"./padding.js\";\n", "/**\n *  @_ignore\n */\n\nimport {\n    getBytesCopy, assertArgument, toUtf8Bytes\n} from \"../utils/index.js\";\n\nexport function looseArrayify(hexString: string): Uint8Array {\n    if (typeof(hexString) === \"string\" && !hexString.startsWith(\"0x\")) {\n        hexString = \"0x\" + hexString;\n    }\n    return getBytesCopy(hexString);\n}\n\nexport function zpad(value: String | number, length: number): String {\n    value = String(value);\n    while (value.length < length) { value = '0' + value; }\n    return value;\n}\n\nexport function getPassword(password: string | Uint8Array): Uint8Array {\n    if (typeof(password) === 'string') {\n        return toUtf8Bytes(password, \"NFKC\");\n    }\n    return getBytesCopy(password);\n}\n\nexport function spelunk<T>(object: any, _path: string): T {\n\n    const match = _path.match(/^([a-z0-9$_.-]*)(:([a-z]+))?(!)?$/i);\n    assertArgument(match != null, \"invalid path\", \"path\", _path);\n\n    const path = match[1];\n    const type = match[3];\n    const reqd = (match[4] === \"!\");\n\n    let cur = object;\n    for (const comp of path.toLowerCase().split('.')) {\n\n        // Search for a child object with a case-insensitive matching key\n        if (Array.isArray(cur)) {\n            if (!comp.match(/^[0-9]+$/)) { break; }\n            cur = cur[parseInt(comp)];\n\n        } else if (typeof(cur) === \"object\") {\n            let found: any = null;\n            for (const key in cur) {\n                 if (key.toLowerCase() === comp) {\n                     found = cur[key];\n                     break;\n                 }\n            }\n            cur = found;\n\n        } else {\n            cur = null;\n        }\n\n        if (cur == null) { break; }\n    }\n\n    assertArgument(!reqd || cur != null, \"missing required value\", \"path\", path);\n\n    if (type && cur != null) {\n        if (type === \"int\") {\n            if (typeof(cur) === \"string\" && cur.match(/^-?[0-9]+$/)) {\n                return <T><unknown>parseInt(cur);\n            } else if (Number.isSafeInteger(cur)) {\n                return cur;\n            }\n        }\n\n        if (type === \"number\") {\n            if (typeof(cur) === \"string\" && cur.match(/^-?[0-9.]*$/)) {\n                return <T><unknown>parseFloat(cur);\n            }\n        }\n\n        if (type === \"data\") {\n            if (typeof(cur) === \"string\") { return <T><unknown>looseArrayify(cur); }\n        }\n\n        if (type === \"array\" && Array.isArray(cur)) { return <T><unknown>cur; }\n        if (type === typeof(cur)) { return cur; }\n\n        assertArgument(false, `wrong type found for ${ type } `, \"path\", path);\n    }\n\n    return cur;\n}\n/*\nexport function follow(object: any, path: string): null | string {\n    let currentChild = object;\n\n    for (const comp of path.toLowerCase().split('/')) {\n\n        // Search for a child object with a case-insensitive matching key\n        let matchingChild = null;\n        for (const key in currentChild) {\n             if (key.toLowerCase() === comp) {\n                 matchingChild = currentChild[key];\n                 break;\n             }\n        }\n\n        if (matchingChild === null) { return null; }\n\n        currentChild = matchingChild;\n    }\n\n    return currentChild;\n}\n\n// \"path/to/something:type!\"\nexport function followRequired(data: any, path: string): string {\n    const value = follow(data, path);\n    if (value != null) { return value; }\n    return logger.throwArgumentError(\"invalid value\", `data:${ path }`,\n    JSON.stringify(data));\n}\n*/\n// See: https://www.ietf.org/rfc/rfc4122.txt (Section 4.4)\n/*\nexport function uuidV4(randomBytes: BytesLike): string {\n    const bytes = getBytes(randomBytes, \"randomBytes\");\n\n    // Section: 4.1.3:\n    // - time_hi_and_version[12:16] = 0b0100\n    bytes[6] = (bytes[6] & 0x0f) | 0x40;\n\n    // Section 4.4\n    // - clock_seq_hi_and_reserved[6] = 0b0\n    // - clock_seq_hi_and_reserved[7] = 0b1\n    bytes[8] = (bytes[8] & 0x3f) | 0x80;\n\n    const value = hexlify(bytes);\n\n    return [\n       value.substring(2, 10),\n       value.substring(10, 14),\n       value.substring(14, 18),\n       value.substring(18, 22),\n       value.substring(22, 34),\n    ].join(\"-\");\n}\n*/\n", "/**\n *  The JSON Wallet formats allow a simple way to store the private\n *  keys needed in Ethereum along with related information and allows\n *  for extensible forms of encryption.\n *\n *  These utilities facilitate decrypting and encrypting the most common\n *  JSON Wallet formats.\n *\n *  @_subsection: api/wallet:JSON Wallets  [json-wallets]\n */\n\nimport { CTR } from \"aes-js\";\n\nimport { getAddress } from \"../address/index.js\";\nimport { keccak256, pbkdf2, randomBytes, scrypt, scryptSync } from \"../crypto/index.js\";\nimport { computeAddress } from \"../transaction/index.js\";\nimport {\n    concat, getBytes, hexlify, uuidV4, assert, assertArgument\n} from \"../utils/index.js\";\n\nimport { getPassword, spelunk, zpad } from \"./utils.js\";\n\nimport type { ProgressCallback } from \"../crypto/index.js\";\nimport type { BytesLike } from \"../utils/index.js\";\n\nimport { version } from \"../_version.js\";\n\n\nconst defaultPath = \"m/44'/60'/0'/0/0\";\n\n/**\n *  The contents of a JSON Keystore Wallet.\n */\nexport type KeystoreAccount = {\n    address: string;\n    privateKey: string;\n    mnemonic?: {\n        path?: string;\n        locale?: string;\n        entropy: string;\n    }\n};\n\n/**\n *  The parameters to use when encrypting a JSON Keystore Wallet.\n */\nexport type EncryptOptions = {\n   progressCallback?: ProgressCallback;\n   iv?: BytesLike;\n   entropy?: BytesLike;\n   client?: string;\n   salt?: BytesLike;\n   uuid?: string;\n   scrypt?: {\n       N?: number;\n       r?: number;\n       p?: number;\n   }\n}\n\n/**\n *  Returns true if %%json%% is a valid JSON Keystore Wallet.\n */\nexport function isKeystoreJson(json: string): boolean {\n    try {\n        const data = JSON.parse(json);\n        const version = ((data.version != null) ? parseInt(data.version): 0);\n        if (version === 3) { return true; }\n    } catch (error) { }\n    return false;\n}\n\nfunction decrypt(data: any, key: Uint8Array, ciphertext: Uint8Array): string {\n    const cipher = spelunk<string>(data, \"crypto.cipher:string\");\n    if (cipher === \"aes-128-ctr\") {\n        const iv = spelunk<Uint8Array>(data, \"crypto.cipherparams.iv:data!\")\n        const aesCtr = new CTR(key, iv);\n        return hexlify(aesCtr.decrypt(ciphertext));\n    }\n\n    assert(false, \"unsupported cipher\", \"UNSUPPORTED_OPERATION\", {\n        operation: \"decrypt\"\n    });\n}\n\nfunction getAccount(data: any, _key: string): KeystoreAccount {\n    const key = getBytes(_key);\n    const ciphertext = spelunk<Uint8Array>(data, \"crypto.ciphertext:data!\");\n\n    const computedMAC = hexlify(keccak256(concat([ key.slice(16, 32), ciphertext ]))).substring(2);\n    assertArgument(computedMAC === spelunk<string>(data, \"crypto.mac:string!\").toLowerCase(),\n        \"incorrect password\", \"password\", \"[ REDACTED ]\");\n\n    const privateKey = decrypt(data, key.slice(0, 16), ciphertext);\n\n    const address = computeAddress(privateKey);\n    if (data.address) {\n        let check = data.address.toLowerCase();\n        if (!check.startsWith(\"0x\")) { check = \"0x\" + check; }\n\n        assertArgument(getAddress(check) === address, \"keystore address/privateKey mismatch\", \"address\", data.address);\n    }\n\n    const account: KeystoreAccount = { address, privateKey };\n\n    // Version 0.1 x-ethers metadata must contain an encrypted mnemonic phrase\n    const version = spelunk(data, \"x-ethers.version:string\");\n    if (version === \"0.1\") {\n        const mnemonicKey = key.slice(32, 64);\n\n        const mnemonicCiphertext = spelunk<Uint8Array>(data, \"x-ethers.mnemonicCiphertext:data!\");\n        const mnemonicIv = spelunk<Uint8Array>(data, \"x-ethers.mnemonicCounter:data!\");\n\n        const mnemonicAesCtr = new CTR(mnemonicKey, mnemonicIv);\n\n        account.mnemonic = {\n            path: (spelunk<null | string>(data, \"x-ethers.path:string\") || defaultPath),\n            locale: (spelunk<null | string>(data, \"x-ethers.locale:string\") || \"en\"),\n            entropy: hexlify(getBytes(mnemonicAesCtr.decrypt(mnemonicCiphertext)))\n        };\n    }\n\n    return account;\n}\n\ntype ScryptParams = {\n    name: \"scrypt\";\n    salt: Uint8Array;\n    N: number;\n    r: number;\n    p: number;\n    dkLen: number;\n};\n\ntype KdfParams = ScryptParams | {\n    name: \"pbkdf2\";\n    salt: Uint8Array;\n    count: number;\n    dkLen: number;\n    algorithm: \"sha256\" | \"sha512\";\n};\n\nfunction getDecryptKdfParams<T>(data: any): KdfParams {\n    const kdf = spelunk(data, \"crypto.kdf:string\");\n    if (kdf && typeof(kdf) === \"string\") {\n        if (kdf.toLowerCase() === \"scrypt\") {\n            const salt = spelunk<Uint8Array>(data, \"crypto.kdfparams.salt:data!\");\n            const N = spelunk<number>(data, \"crypto.kdfparams.n:int!\");\n            const r = spelunk<number>(data, \"crypto.kdfparams.r:int!\");\n            const p = spelunk<number>(data, \"crypto.kdfparams.p:int!\");\n\n            // Make sure N is a power of 2\n            assertArgument(N > 0 && (N & (N - 1)) === 0, \"invalid kdf.N\", \"kdf.N\", N);\n            assertArgument(r > 0 && p > 0, \"invalid kdf\", \"kdf\", kdf);\n\n            const dkLen = spelunk<number>(data, \"crypto.kdfparams.dklen:int!\");\n            assertArgument(dkLen === 32, \"invalid kdf.dklen\", \"kdf.dflen\", dkLen);\n\n            return { name: \"scrypt\", salt, N, r, p, dkLen: 64 };\n\n        } else if (kdf.toLowerCase() === \"pbkdf2\") {\n\n            const salt = spelunk<Uint8Array>(data, \"crypto.kdfparams.salt:data!\");\n\n            const prf = spelunk<string>(data, \"crypto.kdfparams.prf:string!\");\n            const algorithm = prf.split(\"-\").pop();\n            assertArgument(algorithm === \"sha256\" || algorithm === \"sha512\", \"invalid kdf.pdf\", \"kdf.pdf\", prf);\n\n            const count = spelunk<number>(data, \"crypto.kdfparams.c:int!\");\n\n            const dkLen = spelunk<number>(data, \"crypto.kdfparams.dklen:int!\");\n            assertArgument(dkLen === 32, \"invalid kdf.dklen\", \"kdf.dklen\", dkLen);\n\n            return { name: \"pbkdf2\", salt, count, dkLen, algorithm };\n        }\n    }\n\n    assertArgument(false, \"unsupported key-derivation function\", \"kdf\", kdf);\n}\n\n\n/**\n *  Returns the account details for the JSON Keystore Wallet %%json%%\n *  using %%password%%.\n *\n *  It is preferred to use the [async version](decryptKeystoreJson)\n *  instead, which allows a [[ProgressCallback]] to keep the user informed\n *  as to the decryption status.\n *\n *  This method will block the event loop (freezing all UI) until decryption\n *  is complete, which can take quite some time, depending on the wallet\n *  paramters and platform.\n */\nexport function decryptKeystoreJsonSync(json: string, _password: string | Uint8Array): KeystoreAccount {\n    const data = JSON.parse(json);\n\n    const password = getPassword(_password);\n\n    const params = getDecryptKdfParams(data);\n    if (params.name === \"pbkdf2\") {\n        const { salt, count, dkLen, algorithm } = params;\n        const key = pbkdf2(password, salt, count, dkLen, algorithm);\n        return getAccount(data, key);\n    }\n\n    assert(params.name === \"scrypt\", \"cannot be reached\", \"UNKNOWN_ERROR\", { params })\n\n    const { salt, N, r, p, dkLen } = params;\n    const key = scryptSync(password, salt, N, r, p, dkLen);\n    return getAccount(data, key);\n}\n\nfunction stall(duration: number): Promise<void> {\n    return new Promise((resolve) => { setTimeout(() => { resolve(); }, duration); });\n}\n\n/**\n *  Resolves to the decrypted JSON Keystore Wallet %%json%% using the\n *  %%password%%.\n *\n *  If provided, %%progress%% will be called periodically during the\n *  decrpytion to provide feedback, and if the function returns\n *  ``false`` will halt decryption.\n *\n *  The %%progressCallback%% will **always** receive ``0`` before\n *  decryption begins and ``1`` when complete.\n */\nexport async function decryptKeystoreJson(json: string, _password: string | Uint8Array, progress?: ProgressCallback): Promise<KeystoreAccount> {\n    const data = JSON.parse(json);\n\n    const password = getPassword(_password);\n\n    const params = getDecryptKdfParams(data);\n    if (params.name === \"pbkdf2\") {\n        if (progress) {\n            progress(0);\n            await stall(0);\n        }\n        const { salt, count, dkLen, algorithm } = params;\n        const key = pbkdf2(password, salt, count, dkLen, algorithm);\n        if (progress) {\n            progress(1);\n            await stall(0);\n        }\n        return getAccount(data, key);\n    }\n\n    assert(params.name === \"scrypt\", \"cannot be reached\", \"UNKNOWN_ERROR\", { params })\n\n    const { salt, N, r, p, dkLen } = params;\n    const key = await scrypt(password, salt, N, r, p, dkLen, progress);\n    return getAccount(data, key);\n}\n\nfunction getEncryptKdfParams(options: EncryptOptions): ScryptParams {\n    // Check/generate the salt\n    const salt = (options.salt != null) ? getBytes(options.salt, \"options.salt\"): randomBytes(32);\n\n    // Override the scrypt password-based key derivation function parameters\n    let N = (1 << 17), r = 8, p = 1;\n    if (options.scrypt) {\n        if (options.scrypt.N) { N = options.scrypt.N; }\n        if (options.scrypt.r) { r = options.scrypt.r; }\n        if (options.scrypt.p) { p = options.scrypt.p; }\n    }\n    assertArgument(typeof(N) === \"number\" && N > 0 && Number.isSafeInteger(N) && (BigInt(N) & BigInt(N - 1)) === BigInt(0), \"invalid scrypt N parameter\", \"options.N\", N);\n    assertArgument(typeof(r) === \"number\" && r > 0 && Number.isSafeInteger(r), \"invalid scrypt r parameter\", \"options.r\", r);\n    assertArgument(typeof(p) === \"number\" && p > 0 && Number.isSafeInteger(p), \"invalid scrypt p parameter\", \"options.p\", p);\n\n    return { name: \"scrypt\", dkLen: 32, salt, N, r, p };\n}\n\nfunction _encryptKeystore(key: Uint8Array, kdf: ScryptParams, account: KeystoreAccount, options: EncryptOptions): any {\n\n    const privateKey = getBytes(account.privateKey, \"privateKey\");\n\n    // Override initialization vector\n    const iv = (options.iv != null) ? getBytes(options.iv, \"options.iv\"): randomBytes(16);\n    assertArgument(iv.length === 16, \"invalid options.iv length\", \"options.iv\", options.iv);\n\n    // Override the uuid\n    const uuidRandom = (options.uuid != null) ? getBytes(options.uuid, \"options.uuid\"): randomBytes(16);\n    assertArgument(uuidRandom.length === 16, \"invalid options.uuid length\", \"options.uuid\", options.iv);\n\n    // This will be used to encrypt the wallet (as per Web3 secret storage)\n    // - 32 bytes   As normal for the Web3 secret storage (derivedKey, macPrefix)\n    // - 32 bytes   AES key to encrypt mnemonic with (required here to be Ethers Wallet)\n    const derivedKey = key.slice(0, 16);\n    const macPrefix = key.slice(16, 32);\n\n    // Encrypt the private key\n    const aesCtr = new CTR(derivedKey, iv);\n    const ciphertext = getBytes(aesCtr.encrypt(privateKey));\n\n    // Compute the message authentication code, used to check the password\n    const mac = keccak256(concat([ macPrefix, ciphertext ]))\n\n    // See: https://github.com/ethereum/wiki/wiki/Web3-Secret-Storage-Definition\n    const data: { [key: string]: any } = {\n        address: account.address.substring(2).toLowerCase(),\n        id: uuidV4(uuidRandom),\n        version: 3,\n        Crypto: {\n            cipher: \"aes-128-ctr\",\n            cipherparams: {\n                iv: hexlify(iv).substring(2),\n            },\n            ciphertext: hexlify(ciphertext).substring(2),\n            kdf: \"scrypt\",\n            kdfparams: {\n                salt: hexlify(kdf.salt).substring(2),\n                n: kdf.N,\n                dklen: 32,\n                p: kdf.p,\n                r: kdf.r\n            },\n            mac: mac.substring(2)\n        }\n    };\n\n    // If we have a mnemonic, encrypt it into the JSON wallet\n    if (account.mnemonic) {\n        const client = (options.client != null) ? options.client: `ethers/${ version }`;\n\n        const path = account.mnemonic.path || defaultPath;\n        const locale = account.mnemonic.locale || \"en\";\n\n        const mnemonicKey = key.slice(32, 64);\n\n        const entropy = getBytes(account.mnemonic.entropy, \"account.mnemonic.entropy\");\n        const mnemonicIv = randomBytes(16);\n        const mnemonicAesCtr = new CTR(mnemonicKey, mnemonicIv);\n        const mnemonicCiphertext = getBytes(mnemonicAesCtr.encrypt(entropy));\n\n        const now = new Date();\n        const timestamp = (now.getUTCFullYear() + \"-\" +\n                           zpad(now.getUTCMonth() + 1, 2) + \"-\" +\n                           zpad(now.getUTCDate(), 2) + \"T\" +\n                           zpad(now.getUTCHours(), 2) + \"-\" +\n                           zpad(now.getUTCMinutes(), 2) + \"-\" +\n                           zpad(now.getUTCSeconds(), 2) + \".0Z\");\n        const gethFilename = (\"UTC--\" + timestamp + \"--\" + data.address);\n\n        data[\"x-ethers\"] = {\n            client, gethFilename, path, locale,\n            mnemonicCounter: hexlify(mnemonicIv).substring(2),\n            mnemonicCiphertext: hexlify(mnemonicCiphertext).substring(2),\n            version: \"0.1\"\n        };\n    }\n\n    return JSON.stringify(data);\n}\n\n/**\n *  Return the JSON Keystore Wallet for %%account%% encrypted with\n *  %%password%%.\n *\n *  The %%options%% can be used to tune the password-based key\n *  derivation function parameters, explicitly set the random values\n *  used. Any provided [[ProgressCallback]] is ignord.\n */\nexport function encryptKeystoreJsonSync(account: KeystoreAccount, password: string | Uint8Array, options?: EncryptOptions): string {\n    if (options == null) { options = { }; }\n\n    const passwordBytes = getPassword(password);\n    const kdf = getEncryptKdfParams(options);\n    const key = scryptSync(passwordBytes, kdf.salt, kdf.N, kdf.r, kdf.p, 64);\n    return _encryptKeystore(getBytes(key), kdf, account, options);\n}\n\n/**\n *  Resolved to the JSON Keystore Wallet for %%account%% encrypted\n *  with %%password%%.\n *\n *  The %%options%% can be used to tune the password-based key\n *  derivation function parameters, explicitly set the random values\n *  used and provide a [[ProgressCallback]] to receive periodic updates\n *  on the completion status..\n */\nexport async function encryptKeystoreJson(account: KeystoreAccount, password: string | Uint8Array, options?: EncryptOptions): Promise<string> {\n    if (options == null) { options = { }; }\n\n    const passwordBytes = getPassword(password);\n    const kdf = getEncryptKdfParams(options);\n    const key = await scrypt(passwordBytes, kdf.salt, kdf.N, kdf.r, kdf.p, 64, options.progressCallback);\n    return _encryptKeystore(getBytes(key), kdf, account, options);\n}\n\n", "/**\n *  Explain HD Wallets..\n *\n *  @_subsection: api/wallet:HD Wallets  [hd-wallets]\n */\nimport { computeHmac, randomBytes, ripemd160, SigningKey, sha256 } from \"../crypto/index.js\";\nimport { VoidSigner } from \"../providers/index.js\";\nimport { computeAddress } from \"../transaction/index.js\";\nimport {\n    concat, dataSlice, decodeBase58, defineProperties, encodeBase58,\n    getBytes, hexlify, isBytesLike,\n    getNumber, toBeArray, toBigInt, toBeHex,\n    assertPrivate, assert, assertArgument\n} from \"../utils/index.js\";\nimport { LangEn } from \"../wordlists/lang-en.js\";\n\nimport { BaseWallet } from \"./base-wallet.js\";\nimport { Mnemonic } from \"./mnemonic.js\";\nimport {\n    encryptKeystoreJson, encryptKeystoreJsonSync,\n} from \"./json-keystore.js\";\n\nimport type { ProgressCallback } from \"../crypto/index.js\";\nimport type { Provider } from \"../providers/index.js\";\nimport type { BytesLike, Numeric } from \"../utils/index.js\";\nimport type { Wordlist } from \"../wordlists/index.js\";\n\nimport type { KeystoreAccount } from \"./json-keystore.js\";\n\n/**\n *  The default derivation path for Ethereum HD Nodes. (i.e. ``\"m/44'/60'/0'/0/0\"``)\n */\nexport const defaultPath: string = \"m/44'/60'/0'/0/0\";\n\n\n// \"Bitcoin seed\"\nconst MasterSecret = new Uint8Array([ 66, 105, 116, 99, 111, 105, 110, 32, 115, 101, 101, 100 ]);\n\nconst HardenedBit = 0x80000000;\n\nconst N = BigInt(\"0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141\");\n\nconst Nibbles = \"0123456789abcdef\";\nfunction zpad(value: number, length: number): string {\n    let result = \"\";\n    while (value) {\n        result = Nibbles[value % 16] + result;\n        value = Math.trunc(value / 16);\n    }\n    while (result.length < length * 2) { result = \"0\" + result; }\n    return \"0x\" + result;\n}\n\nfunction encodeBase58Check(_value: BytesLike): string {\n    const value = getBytes(_value);\n    const check = dataSlice(sha256(sha256(value)), 0, 4);\n    const bytes = concat([ value, check ]);\n    return encodeBase58(bytes);\n}\n\nconst _guard = { };\n\nfunction ser_I(index: number, chainCode: string, publicKey: string, privateKey: null | string): { IL: Uint8Array, IR: Uint8Array } {\n    const data = new Uint8Array(37);\n\n    if (index & HardenedBit) {\n        assert(privateKey != null, \"cannot derive child of neutered node\", \"UNSUPPORTED_OPERATION\", {\n            operation: \"deriveChild\"\n        });\n\n        // Data = 0x00 || ser_256(k_par)\n        data.set(getBytes(privateKey), 1);\n\n    } else {\n        // Data = ser_p(point(k_par))\n        data.set(getBytes(publicKey));\n    }\n\n    // Data += ser_32(i)\n    for (let i = 24; i >= 0; i -= 8) { data[33 + (i >> 3)] = ((index >> (24 - i)) & 0xff); }\n    const I = getBytes(computeHmac(\"sha512\", chainCode, data));\n\n    return { IL: I.slice(0, 32), IR: I.slice(32) };\n}\n\ntype HDNodeLike<T> = { depth: number, deriveChild: (i: number) => T };\nfunction derivePath<T extends HDNodeLike<T>>(node: T, path: string): T {\n    const components = path.split(\"/\");\n\n    assertArgument(components.length > 0, \"invalid path\", \"path\", path);\n\n    if (components[0] === \"m\") {\n        assertArgument(node.depth === 0, `cannot derive root path (i.e. path starting with \"m/\") for a node at non-zero depth ${ node.depth }`, \"path\", path);\n        components.shift();\n    }\n\n    let result: T = node;\n    for (let i = 0; i < components.length; i++) {\n        const component = components[i];\n\n        if (component.match(/^[0-9]+'$/)) {\n            const index = parseInt(component.substring(0, component.length - 1));\n            assertArgument(index < HardenedBit, \"invalid path index\", `path[${ i }]`, component);\n            result = result.deriveChild(HardenedBit + index);\n\n        } else if (component.match(/^[0-9]+$/)) {\n            const index = parseInt(component);\n            assertArgument(index < HardenedBit, \"invalid path index\", `path[${ i }]`, component);\n            result = result.deriveChild(index);\n\n        } else {\n            assertArgument(false, \"invalid path component\", `path[${ i }]`, component);\n        }\n    }\n\n    return result;\n}\n\n/**\n *  An **HDNodeWallet** is a [[Signer]] backed by the private key derived\n *  from an HD Node using the [[link-bip-32]] stantard.\n *\n *  An HD Node forms a hierarchal structure with each HD Node having a\n *  private key and the ability to derive child HD Nodes, defined by\n *  a path indicating the index of each child.\n */\nexport class HDNodeWallet extends BaseWallet {\n    /**\n     *  The compressed public key.\n     */\n    readonly publicKey!: string;\n\n    /**\n     *  The fingerprint.\n     *\n     *  A fingerprint allows quick qay to detect parent and child nodes,\n     *  but developers should be prepared to deal with collisions as it\n     *  is only 4 bytes.\n     */\n    readonly fingerprint!: string;\n\n    /**\n     *  The parent fingerprint.\n     */\n    readonly parentFingerprint!: string;\n\n    /**\n     *  The mnemonic used to create this HD Node, if available.\n     *\n     *  Sources such as extended keys do not encode the mnemonic, in\n     *  which case this will be ``null``.\n     */\n    readonly mnemonic!: null | Mnemonic;\n\n    /**\n     *  The chaincode, which is effectively a public key used\n     *  to derive children.\n     */\n    readonly chainCode!: string;\n\n    /**\n     *  The derivation path of this wallet.\n     *\n     *  Since extended keys do not provider full path details, this\n     *  may be ``null``, if instantiated from a source that does not\n     *  enocde it.\n     */\n    readonly path!: null | string;\n\n    /**\n     *  The child index of this wallet. Values over ``2 *\\* 31`` indicate\n     *  the node is hardened.\n     */\n    readonly index!: number;\n\n    /**\n     *  The depth of this wallet, which is the number of components\n     *  in its path.\n     */\n    readonly depth!: number;\n\n    /**\n     *  @private\n     */\n    constructor(guard: any, signingKey: SigningKey, parentFingerprint: string, chainCode: string, path: null | string, index: number, depth: number, mnemonic: null | Mnemonic, provider: null | Provider) {\n        super(signingKey, provider);\n        assertPrivate(guard, _guard, \"HDNodeWallet\");\n\n        defineProperties<HDNodeWallet>(this, { publicKey: signingKey.compressedPublicKey });\n\n        const fingerprint = dataSlice(ripemd160(sha256(this.publicKey)), 0, 4);\n        defineProperties<HDNodeWallet>(this, {\n            parentFingerprint, fingerprint,\n            chainCode, path, index, depth\n        });\n\n        defineProperties<HDNodeWallet>(this, { mnemonic });\n    }\n\n    connect(provider: null | Provider): HDNodeWallet {\n        return new HDNodeWallet(_guard, this.signingKey, this.parentFingerprint,\n            this.chainCode, this.path, this.index, this.depth, this.mnemonic, provider);\n    }\n\n    #account(): KeystoreAccount {\n        const account: KeystoreAccount = { address: this.address, privateKey: this.privateKey };\n        const m = this.mnemonic;\n        if (this.path && m && m.wordlist.locale === \"en\" && m.password === \"\") {\n            account.mnemonic = {\n                path: this.path,\n                locale: \"en\",\n                entropy: m.entropy\n            };\n        }\n\n        return account;\n    }\n\n    /**\n     *  Resolves to a [JSON Keystore Wallet](json-wallets) encrypted with\n     *  %%password%%.\n     *\n     *  If %%progressCallback%% is specified, it will receive periodic\n     *  updates as the encryption process progreses.\n     */\n    async encrypt(password: Uint8Array | string, progressCallback?: ProgressCallback): Promise<string> {\n        return await encryptKeystoreJson(this.#account(), password, { progressCallback });\n    }\n\n    /**\n     *  Returns a [JSON Keystore Wallet](json-wallets) encryped with\n     *  %%password%%.\n     *\n     *  It is preferred to use the [async version](encrypt) instead,\n     *  which allows a [[ProgressCallback]] to keep the user informed.\n     *\n     *  This method will block the event loop (freezing all UI) until\n     *  it is complete, which may be a non-trivial duration.\n     */\n    encryptSync(password: Uint8Array | string): string {\n        return encryptKeystoreJsonSync(this.#account(), password);\n    }\n\n    /**\n     *  The extended key.\n     *\n     *  This key will begin with the prefix ``xpriv`` and can be used to\n     *  reconstruct this HD Node to derive its children.\n     */\n    get extendedKey(): string {\n        // We only support the mainnet values for now, but if anyone needs\n        // testnet values, let me know. I believe current sentiment is that\n        // we should always use mainnet, and use BIP-44 to derive the network\n        //   - Mainnet: public=0x0488B21E, private=0x0488ADE4\n        //   - Testnet: public=0x043587CF, private=0x04358394\n\n        assert(this.depth < 256, \"Depth too deep\", \"UNSUPPORTED_OPERATION\", { operation: \"extendedKey\" });\n\n        return encodeBase58Check(concat([\n            \"0x0488ADE4\", zpad(this.depth, 1), this.parentFingerprint,\n            zpad(this.index, 4), this.chainCode,\n            concat([ \"0x00\", this.privateKey ])\n        ]));\n    }\n\n    /**\n     *  Returns true if this wallet has a path, providing a Type Guard\n     *  that the path is non-null.\n     */\n    hasPath(): this is { path: string } { return (this.path != null); }\n\n    /**\n     *  Returns a neutered HD Node, which removes the private details\n     *  of an HD Node.\n     *\n     *  A neutered node has no private key, but can be used to derive\n     *  child addresses and other public data about the HD Node.\n     */\n    neuter(): HDNodeVoidWallet {\n        return new HDNodeVoidWallet(_guard, this.address, this.publicKey,\n            this.parentFingerprint, this.chainCode, this.path, this.index,\n            this.depth, this.provider);\n    }\n\n    /**\n     *  Return the child for %%index%%.\n     */\n    deriveChild(_index: Numeric): HDNodeWallet {\n        const index = getNumber(_index, \"index\");\n        assertArgument(index <= 0xffffffff, \"invalid index\", \"index\", index);\n\n        // Base path\n        let path = this.path;\n        if (path) {\n            path += \"/\" + (index & ~HardenedBit);\n            if (index & HardenedBit) { path += \"'\"; }\n        }\n\n        const { IR, IL } = ser_I(index, this.chainCode, this.publicKey, this.privateKey);\n        const ki = new SigningKey(toBeHex((toBigInt(IL) + BigInt(this.privateKey)) % N, 32));\n\n        return new HDNodeWallet(_guard, ki, this.fingerprint, hexlify(IR),\n            path, index, this.depth + 1, this.mnemonic, this.provider);\n\n    }\n\n    /**\n     *  Return the HDNode for %%path%% from this node.\n     */\n    derivePath(path: string): HDNodeWallet {\n        return derivePath<HDNodeWallet>(this, path);\n    }\n\n    static #fromSeed(_seed: BytesLike, mnemonic: null | Mnemonic): HDNodeWallet {\n        assertArgument(isBytesLike(_seed), \"invalid seed\", \"seed\", \"[REDACTED]\");\n\n        const seed = getBytes(_seed, \"seed\");\n        assertArgument(seed.length >= 16 && seed.length <= 64 , \"invalid seed\", \"seed\", \"[REDACTED]\");\n\n        const I = getBytes(computeHmac(\"sha512\", MasterSecret, seed));\n        const signingKey = new SigningKey(hexlify(I.slice(0, 32)));\n\n        return new HDNodeWallet(_guard, signingKey, \"0x00000000\", hexlify(I.slice(32)),\n            \"m\", 0, 0, mnemonic, null);\n    }\n\n    /**\n     *  Creates a new HD Node from %%extendedKey%%.\n     *\n     *  If the %%extendedKey%% will either have a prefix or ``xpub`` or\n     *  ``xpriv``, returning a neutered HD Node ([[HDNodeVoidWallet]])\n     *  or full HD Node ([[HDNodeWallet) respectively.\n     */\n    static fromExtendedKey(extendedKey: string): HDNodeWallet | HDNodeVoidWallet {\n        const bytes = toBeArray(decodeBase58(extendedKey)); // @TODO: redact\n\n        assertArgument(bytes.length === 82 || encodeBase58Check(bytes.slice(0, 78)) === extendedKey,\n            \"invalid extended key\", \"extendedKey\", \"[ REDACTED ]\");\n\n        const depth = bytes[4];\n        const parentFingerprint = hexlify(bytes.slice(5, 9));\n        const index = parseInt(hexlify(bytes.slice(9, 13)).substring(2), 16);\n        const chainCode = hexlify(bytes.slice(13, 45));\n        const key = bytes.slice(45, 78);\n\n        switch (hexlify(bytes.slice(0, 4))) {\n            // Public Key\n            case \"0x0488b21e\": case \"0x043587cf\": {\n                const publicKey = hexlify(key);\n                return new HDNodeVoidWallet(_guard, computeAddress(publicKey), publicKey,\n                    parentFingerprint, chainCode, null, index, depth, null);\n            }\n\n            // Private Key\n            case \"0x0488ade4\": case \"0x04358394 \":\n                if (key[0] !== 0) { break; }\n                return new HDNodeWallet(_guard, new SigningKey(key.slice(1)),\n                    parentFingerprint, chainCode, null, index, depth, null, null);\n        }\n\n\n        assertArgument(false, \"invalid extended key prefix\", \"extendedKey\", \"[ REDACTED ]\");\n    }\n\n    /**\n     *  Creates a new random HDNode.\n     */\n    static createRandom(password?: string, path?: string, wordlist?: Wordlist): HDNodeWallet {\n        if (password == null) { password = \"\"; }\n        if (path == null) { path = defaultPath; }\n        if (wordlist == null) { wordlist = LangEn.wordlist(); }\n        const mnemonic = Mnemonic.fromEntropy(randomBytes(16), password, wordlist)\n        return HDNodeWallet.#fromSeed(mnemonic.computeSeed(), mnemonic).derivePath(path);\n    }\n\n    /**\n     *  Create an HD Node from %%mnemonic%%.\n     */\n    static fromMnemonic(mnemonic: Mnemonic, path?: string): HDNodeWallet {\n        if (!path) { path = defaultPath; }\n        return HDNodeWallet.#fromSeed(mnemonic.computeSeed(), mnemonic).derivePath(path);\n    }\n\n    /**\n     *  Creates an HD Node from a mnemonic %%phrase%%.\n     */\n    static fromPhrase(phrase: string, password?: string, path?: string, wordlist?: Wordlist): HDNodeWallet {\n        if (password == null) { password = \"\"; }\n        if (path == null) { path = defaultPath; }\n        if (wordlist == null) { wordlist = LangEn.wordlist(); }\n        const mnemonic = Mnemonic.fromPhrase(phrase, password, wordlist)\n        return HDNodeWallet.#fromSeed(mnemonic.computeSeed(), mnemonic).derivePath(path);\n    }\n\n    /**\n     *  Creates an HD Node from a %%seed%%.\n     */\n    static fromSeed(seed: BytesLike): HDNodeWallet {\n        return HDNodeWallet.#fromSeed(seed, null);\n    }\n}\n\n/**\n *  A **HDNodeVoidWallet** cannot sign, but provides access to\n *  the children nodes of a [[link-bip-32]] HD wallet addresses.\n *\n *  The can be created by using an extended ``xpub`` key to\n *  [[HDNodeWallet_fromExtendedKey]] or by \n *  [nuetering](HDNodeWallet-neuter) a [[HDNodeWallet]].\n */\nexport class HDNodeVoidWallet extends VoidSigner {\n    /**\n     *  The compressed public key.\n     */\n    readonly publicKey!: string;\n\n    /**\n     *  The fingerprint.\n     *\n     *  A fingerprint allows quick qay to detect parent and child nodes,\n     *  but developers should be prepared to deal with collisions as it\n     *  is only 4 bytes.\n     */\n    readonly fingerprint!: string;\n\n    /**\n     *  The parent node fingerprint.\n     */\n    readonly parentFingerprint!: string;\n\n    /**\n     *  The chaincode, which is effectively a public key used\n     *  to derive children.\n     */\n    readonly chainCode!: string;\n\n    /**\n     *  The derivation path of this wallet.\n     *\n     *  Since extended keys do not provider full path details, this\n     *  may be ``null``, if instantiated from a source that does not\n     *  enocde it.\n     */\n    readonly path!: null | string;\n\n    /**\n     *  The child index of this wallet. Values over ``2 *\\* 31`` indicate\n     *  the node is hardened.\n     */\n    readonly index!: number;\n\n    /**\n     *  The depth of this wallet, which is the number of components\n     *  in its path.\n     */\n    readonly depth!: number;\n\n    /**\n     *  @private\n     */\n    constructor(guard: any, address: string, publicKey: string, parentFingerprint: string, chainCode: string, path: null | string, index: number, depth: number, provider: null | Provider) {\n        super(address, provider);\n        assertPrivate(guard, _guard, \"HDNodeVoidWallet\");\n\n        defineProperties<HDNodeVoidWallet>(this, { publicKey });\n\n        const fingerprint = dataSlice(ripemd160(sha256(publicKey)), 0, 4);\n        defineProperties<HDNodeVoidWallet>(this, {\n            publicKey, fingerprint, parentFingerprint, chainCode, path, index, depth\n        });\n    }\n\n    connect(provider: null | Provider): HDNodeVoidWallet {\n        return new HDNodeVoidWallet(_guard, this.address, this.publicKey,\n            this.parentFingerprint, this.chainCode, this.path, this.index, this.depth, provider);\n    }\n\n    /**\n     *  The extended key.\n     *\n     *  This key will begin with the prefix ``xpub`` and can be used to\n     *  reconstruct this neutered key to derive its children addresses.\n     */\n    get extendedKey(): string {\n        // We only support the mainnet values for now, but if anyone needs\n        // testnet values, let me know. I believe current sentiment is that\n        // we should always use mainnet, and use BIP-44 to derive the network\n        //   - Mainnet: public=0x0488B21E, private=0x0488ADE4\n        //   - Testnet: public=0x043587CF, private=0x04358394\n\n        assert(this.depth < 256, \"Depth too deep\", \"UNSUPPORTED_OPERATION\", { operation: \"extendedKey\" });\n\n        return encodeBase58Check(concat([\n            \"0x0488B21E\",\n            zpad(this.depth, 1),\n            this.parentFingerprint,\n            zpad(this.index, 4),\n            this.chainCode,\n            this.publicKey,\n        ]));\n    }\n\n    /**\n     *  Returns true if this wallet has a path, providing a Type Guard\n     *  that the path is non-null.\n     */\n    hasPath(): this is { path: string } { return (this.path != null); }\n\n    /**\n     *  Return the child for %%index%%.\n     */\n    deriveChild(_index: Numeric): HDNodeVoidWallet {\n        const index = getNumber(_index, \"index\");\n        assertArgument(index <= 0xffffffff, \"invalid index\", \"index\", index);\n\n        // Base path\n        let path = this.path;\n        if (path) {\n            path += \"/\" + (index & ~HardenedBit);\n            if (index & HardenedBit) { path += \"'\"; }\n        }\n\n        const { IR, IL } = ser_I(index, this.chainCode, this.publicKey, null);\n        const Ki = SigningKey.addPoints(IL, this.publicKey, true);\n\n        const address = computeAddress(Ki);\n\n        return new HDNodeVoidWallet(_guard, address, Ki, this.fingerprint, hexlify(IR),\n            path, index, this.depth + 1, this.provider);\n\n    }\n\n    /**\n     *  Return the signer for %%path%% from this node.\n     */\n    derivePath(path: string): HDNodeVoidWallet {\n        return derivePath<HDNodeVoidWallet>(this, path);\n    }\n}\n\n/*\nexport class HDNodeWalletManager {\n    #root: HDNodeWallet;\n\n    constructor(phrase: string, password?: null | string, path?: null | string, locale?: null | Wordlist) {\n        if (password == null) { password = \"\"; }\n        if (path == null) { path = \"m/44'/60'/0'/0\"; }\n        if (locale == null) { locale = LangEn.wordlist(); }\n        this.#root = HDNodeWallet.fromPhrase(phrase, password, path, locale);\n    }\n\n    getSigner(index?: number): HDNodeWallet {\n        return this.#root.deriveChild((index == null) ? 0: index);\n    }\n}\n*/\n\n/**\n *  Returns the [[link-bip-32]] path for the account at %%index%%.\n *\n *  This is the pattern used by wallets like Ledger.\n *\n *  There is also an [alternate pattern](getIndexedAccountPath) used by\n *  some software.\n */\nexport function getAccountPath(_index: Numeric): string {\n    const index = getNumber(_index, \"index\");\n    assertArgument(index >= 0 && index < HardenedBit, \"invalid account index\", \"index\", index);\n    return `m/44'/60'/${ index }'/0/0`;\n}\n\n/**\n *  Returns the path using an alternative pattern for deriving accounts,\n *  at %%index%%.\n *\n *  This derivation path uses the //index// component rather than the\n *  //account// component to derive sequential accounts.\n *\n *  This is the pattern used by wallets like MetaMask.\n */\nexport function getIndexedAccountPath(_index: Numeric): string {\n    const index = getNumber(_index, \"index\");\n    assertArgument(index >= 0 && index < HardenedBit, \"invalid account index\", \"index\", index);\n    return `m/44'/60'/0'/0/${ index}`;\n}\n\n", "/**\n *  @_subsection: api/wallet:JSON Wallets  [json-wallets]\n */\n\nimport { CBC, pkcs7Strip } from \"aes-js\";\n\nimport { getAddress } from \"../address/index.js\";\nimport { pbkdf2 } from \"../crypto/index.js\";\nimport { id } from \"../hash/index.js\";\nimport { getBytes, assertArgument } from \"../utils/index.js\";\n\nimport { getPassword, looseArrayify, spelunk } from \"./utils.js\";\n\n\n/**\n *  The data stored within a JSON Crowdsale wallet is fairly\n *  minimal.\n */\nexport type CrowdsaleAccount = {\n    privateKey: string;\n    address: string;\n}\n\n/**\n *  Returns true if %%json%% is a valid JSON Crowdsale wallet.\n */\nexport function isCrowdsaleJson(json: string): boolean {\n    try {\n        const data = JSON.parse(json);\n        if (data.encseed) { return true; }\n    } catch (error) { }\n    return false;\n}\n\n// See: https://github.com/ethereum/pyethsaletool\n\n/**\n *  Before Ethereum launched, it was necessary to create a wallet\n *  format for backers to use, which would be used to receive ether\n *  as a reward for contributing to the project.\n *\n *  The [[link-crowdsale]] format is now obsolete, but it is still\n *  useful to support and the additional code is fairly trivial as\n *  all the primitives required are used through core portions of\n *  the library.\n */\nexport function decryptCrowdsaleJson(json: string, _password: string | Uint8Array): CrowdsaleAccount {\n    const data = JSON.parse(json);\n    const password = getPassword(_password);\n\n    // Ethereum Address\n    const address = getAddress(spelunk(data, \"ethaddr:string!\"));\n\n    // Encrypted Seed\n    const encseed = looseArrayify(spelunk(data, \"encseed:string!\"));\n    assertArgument(encseed && (encseed.length % 16) === 0, \"invalid encseed\", \"json\", json);\n\n    const key = getBytes(pbkdf2(password, password, 2000, 32, \"sha256\")).slice(0, 16);\n\n    const iv = encseed.slice(0, 16);\n    const encryptedSeed = encseed.slice(16);\n\n    // Decrypt the seed\n    const aesCbc = new CBC(key, iv);\n    const seed = pkcs7Strip(getBytes(aesCbc.decrypt(encryptedSeed)));\n\n    // This wallet format is weird... Convert the binary encoded hex to a string.\n    let seedHex = \"\";\n    for (let i = 0; i < seed.length; i++) {\n        seedHex += String.fromCharCode(seed[i]);\n    }\n\n    return { address, privateKey: id(seedHex) };\n}\n", "import { SigningKey } from \"../crypto/index.js\";\nimport { assertArgument } from \"../utils/index.js\";\n\nimport { BaseWallet } from \"./base-wallet.js\";\nimport { HDNodeWallet } from \"./hdwallet.js\";\nimport { decryptCrowdsaleJson, isCrowdsaleJson  } from \"./json-crowdsale.js\";\nimport {\n    decryptKeystoreJson, decryptKeystoreJsonSync,\n    encryptKeystoreJson, encryptKeystoreJsonSync,\n    isKeystoreJson\n} from \"./json-keystore.js\";\nimport { Mnemonic } from \"./mnemonic.js\";\n\nimport type { ProgressCallback } from \"../crypto/index.js\";\nimport type { Provider } from \"../providers/index.js\";\n\nimport type { CrowdsaleAccount } from \"./json-crowdsale.js\";\nimport type { KeystoreAccount } from \"./json-keystore.js\";\n\n\nfunction stall(duration: number): Promise<void> {\n    return new Promise((resolve) => { setTimeout(() => { resolve(); }, duration); });\n}\n\n/**\n *  A **Wallet** manages a single private key which is used to sign\n *  transactions, messages and other common payloads.\n *\n *  This class is generally the main entry point for developers\n *  that wish to use a private key directly, as it can create\n *  instances from a large variety of common sources, including\n *  raw private key, [[link-bip-39]] mnemonics and encrypte JSON\n *  wallets.\n */\nexport class Wallet extends BaseWallet {\n\n    /**\n     *  Create a new wallet for the private %%key%%, optionally connected\n     *  to %%provider%%.\n     */\n    constructor(key: string | SigningKey, provider?: null | Provider) {\n        if (typeof(key) === \"string\" && !key.startsWith(\"0x\")) {\n            key = \"0x\" + key;\n        }\n\n        let signingKey = (typeof(key) === \"string\") ? new SigningKey(key): key;\n        super(signingKey, provider);\n    }\n\n    connect(provider: null | Provider): Wallet {\n        return new Wallet(this.signingKey, provider);\n    }\n\n    /**\n     *  Resolves to a [JSON Keystore Wallet](json-wallets) encrypted with\n     *  %%password%%.\n     *\n     *  If %%progressCallback%% is specified, it will receive periodic\n     *  updates as the encryption process progreses.\n     */\n    async encrypt(password: Uint8Array | string, progressCallback?: ProgressCallback): Promise<string> {\n        const account = { address: this.address, privateKey: this.privateKey };\n        return await encryptKeystoreJson(account, password, { progressCallback });\n    }\n\n    /**\n     *  Returns a [JSON Keystore Wallet](json-wallets) encryped with\n     *  %%password%%.\n     *\n     *  It is preferred to use the [async version](encrypt) instead,\n     *  which allows a [[ProgressCallback]] to keep the user informed.\n     *\n     *  This method will block the event loop (freezing all UI) until\n     *  it is complete, which may be a non-trivial duration.\n     */\n    encryptSync(password: Uint8Array | string): string {\n        const account = { address: this.address, privateKey: this.privateKey };\n        return encryptKeystoreJsonSync(account, password);\n    }\n\n    static #fromAccount(account: null | CrowdsaleAccount | KeystoreAccount): HDNodeWallet | Wallet {\n        assertArgument(account, \"invalid JSON wallet\", \"json\", \"[ REDACTED ]\");\n\n        if (\"mnemonic\" in account && account.mnemonic && account.mnemonic.locale === \"en\") {\n            const mnemonic = Mnemonic.fromEntropy(account.mnemonic.entropy);\n            const wallet = HDNodeWallet.fromMnemonic(mnemonic, account.mnemonic.path);\n            if (wallet.address === account.address && wallet.privateKey === account.privateKey) {\n                return wallet;\n            }\n            console.log(\"WARNING: JSON mismatch address/privateKey != mnemonic; fallback onto private key\");\n        }\n\n        const wallet = new Wallet(account.privateKey);\n\n        assertArgument(wallet.address === account.address,\n            \"address/privateKey mismatch\", \"json\", \"[ REDACTED ]\");\n\n        return wallet;\n    }\n\n    /**\n     *  Creates (asynchronously) a **Wallet** by decrypting the %%json%%\n     *  with %%password%%.\n     *\n     *  If %%progress%% is provided, it is called periodically during\n     *  decryption so that any UI can be updated.\n     */\n    static async fromEncryptedJson(json: string, password: Uint8Array | string, progress?: ProgressCallback): Promise<HDNodeWallet | Wallet> {\n        let account: null | CrowdsaleAccount | KeystoreAccount = null;\n        if (isKeystoreJson(json)) {\n            account = await decryptKeystoreJson(json, password, progress);\n\n        } else if (isCrowdsaleJson(json)) {\n            if (progress) { progress(0); await stall(0); }\n            account = decryptCrowdsaleJson(json, password);\n            if (progress) { progress(1); await stall(0); }\n\n        }\n\n        return Wallet.#fromAccount(account);\n    }\n\n    /**\n     *  Creates a **Wallet** by decrypting the %%json%% with %%password%%.\n     *\n     *  The [[fromEncryptedJson]] method is preferred, as this method\n     *  will lock up and freeze the UI during decryption, which may take\n     *  some time.\n     */\n    static fromEncryptedJsonSync(json: string, password: Uint8Array | string): HDNodeWallet | Wallet {\n        let account: null | CrowdsaleAccount | KeystoreAccount = null;\n        if (isKeystoreJson(json)) {\n            account = decryptKeystoreJsonSync(json, password);\n        } else if (isCrowdsaleJson(json)) {\n            account = decryptCrowdsaleJson(json, password);\n        } else {\n            assertArgument(false, \"invalid JSON wallet\", \"json\", \"[ REDACTED ]\");\n        }\n\n        return Wallet.#fromAccount(account);\n    }\n\n    /**\n     *  Creates a new random [[HDNodeWallet]] using the available\n     *  [cryptographic random source](randomBytes).\n     *\n     *  If there is no crytographic random source, this will throw.\n     */\n    static createRandom(provider?: null | Provider): HDNodeWallet {\n        const wallet = HDNodeWallet.createRandom();\n        if (provider) { return wallet.connect(provider); }\n        return wallet;\n    }\n\n    /**\n     *  Creates a [[HDNodeWallet]] for %%phrase%%.\n     */\n    static fromPhrase(phrase: string, provider?: Provider): HDNodeWallet {\n        const wallet = HDNodeWallet.fromPhrase(phrase);\n        if (provider) { return wallet.connect(provider); }\n        return wallet;\n    }\n}\n", "/**\n *  When interacting with Ethereum, it is necessary to use a private\n *  key authenticate actions by signing a payload.\n *\n *  Wallets are the simplest way to expose the concept of an\n *  //Externally Owner Account// (EOA) as it wraps a private key\n *  and supports high-level methods to sign common types of interaction\n *  and send transactions.\n *\n *  The class most developers will want to use is [[Wallet]], which\n *  can load a private key directly or from any common wallet format.\n *\n *  The [[HDNodeWallet]] can be used when it is necessary to access\n *  low-level details of how an HD wallets are derived, exported\n *  or imported.\n *\n *  @_section: api/wallet:Wallets  [about-wallets]\n */\n\nexport { BaseWallet } from \"./base-wallet.js\";\n\nexport {\n    defaultPath,\n\n    getAccountPath, getIndexedAccountPath,\n\n    HDNodeWallet,\n    HDNodeVoidWallet,\n} from \"./hdwallet.js\";\n\nexport { isCrowdsaleJson, decryptCrowdsaleJson } from \"./json-crowdsale.js\";\n\nexport {\n    isKeystoreJson,\n    decryptKeystoreJsonSync, decryptKeystoreJson,\n    encryptKeystoreJson, encryptKeystoreJsonSync\n} from \"./json-keystore.js\";\n\nexport { Mnemonic } from \"./mnemonic.js\";\n\nexport { Wallet } from \"./wallet.js\";\n\n\nexport type { CrowdsaleAccount } from \"./json-crowdsale.js\";\nexport type {\n    KeystoreAccount, EncryptOptions\n} from \"./json-keystore.js\"\n", "const Base64 = \")!@#$%^&*(ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_\";\n\n/**\n *  @_ignore\n */\nexport function decodeBits(width: number, data: string): Array<number> {\n    const maxValue = (1 << width) - 1;\n    const result: Array<number> = [ ];\n    let accum = 0, bits = 0, flood = 0;\n    for (let i = 0; i < data.length; i++) {\n\n        // Accumulate 6 bits of data\n        accum = ((accum << 6) | Base64.indexOf(data[i]));\n        bits += 6;\n\n        // While we have enough for a word...\n        while (bits >= width) {\n            // ...read the word\n            const value = (accum >> (bits - width));\n            accum &= (1 << (bits - width)) - 1;\n            bits -= width;\n\n            // A value of 0 indicates we exceeded maxValue, it\n            // floods over into the next value\n            if (value === 0) {\n                flood += maxValue;\n            } else {\n                result.push(value + flood);\n                flood = 0;\n            }\n        }\n    }\n\n    return result;\n}\n", "import { assertArgument } from \"../utils/index.js\";\n\nimport { decodeBits } from \"./bit-reader.js\";\nimport { decodeOwl } from \"./decode-owl.js\";\n\n/**\n *  @_ignore\n */\nexport function decodeOwlA(data: string, accents: string): Array<string> {\n    let words = decodeOwl(data).join(\",\");\n\n    // Inject the accents\n    accents.split(/,/g).forEach((accent) => {\n\n        const match = accent.match(/^([a-z]*)([0-9]+)([0-9])(.*)$/);\n        assertArgument(match !== null, \"internal error parsing accents\", \"accents\", accents);\n\n        let posOffset = 0;\n        const positions = decodeBits(parseInt(match[3]), match[4]);\n        const charCode = parseInt(match[2]);\n        const regex = new RegExp(`([${ match[1] }])`, \"g\");\n        words = words.replace(regex, (all, letter) => {\n            const rem = --positions[posOffset];\n            if (rem === 0) {\n                letter = String.fromCharCode(letter.charCodeAt(0), charCode);\n                posOffset++;\n            }\n            return letter;\n        });\n    });\n\n    return words.split(\",\");\n}\n", "\nimport { WordlistOwl } from \"./wordlist-owl.js\";\nimport { decodeOwlA } from \"./decode-owla.js\";\n\n/**\n *  An OWL-A format Wordlist extends the OWL format to add an\n *  overlay onto an OWL format Wordlist to support diacritic\n *  marks.\n *\n *  This class is generally not useful to most developers as\n *  it is used mainly internally to keep Wordlists for languages\n *  based on latin-1 small.\n *\n *  If necessary, there are tools within the ``generation/`` folder\n *  to create the necessary data.\n */\nexport class WordlistOwlA extends WordlistOwl {\n    #accent: string;\n\n\n    /**\n     *  Creates a new Wordlist for %%locale%% using the OWLA %%data%%\n     *  and %%accent%% data and validated against the %%checksum%%.\n     */\n    constructor(locale: string, data: string, accent: string, checksum: string) {\n        super(locale, data, checksum);\n        this.#accent = accent;\n    }\n\n    /**\n     *  The OWLA-encoded accent data.\n     */\n    get _accent(): string { return this.#accent; }\n\n    /**\n     *  Decode all the words for the wordlist.\n     */\n    _decodeWords(): Array<string> {\n        return decodeOwlA(this._data, this._accent);\n    }\n}\n", "\nimport { LangEn } from \"./lang-en.js\";\n\nimport type { Wordlist } from \"./wordlist.js\";\n\nexport const wordlists: Record<string, Wordlist> = {\n  en: LangEn.wordlist(),\n};\n", "/**\n *  A Wordlist is a set of 2048 words used to encode private keys\n *  (or other binary data) that is easier for humans to write down,\n *  transcribe and dictate.\n *\n *  The [[link-bip-39]] standard includes several checksum bits,\n *  depending on the size of the mnemonic phrase.\n *\n *  A mnemonic phrase may be 12, 15, 18, 21 or 24 words long. For\n *  most purposes 12 word mnemonics should be used, as including\n *  additional words increases the difficulty and potential for\n *  mistakes and does not offer any effective improvement on security.\n *\n *  There are a variety of [[link-bip39-wordlists]] for different\n *  languages, but for maximal compatibility, the\n *  [English Wordlist](LangEn) is recommended.\n *\n *  @_section: api/wordlists:Wordlists [about-wordlists]\n */\nexport { Wordlist } from \"./wordlist.js\";\nexport { LangEn } from \"./lang-en.js\";\n\nexport { WordlistOwl } from \"./wordlist-owl.js\";\nexport { WordlistOwlA } from \"./wordlist-owla.js\";\n\nexport { wordlists } from \"./wordlists.js\";\n", "\n\n/////////////////////////////\n//\n\nexport { version } from \"./_version.js\";\n\nexport {\n    decodeBytes32String, encodeBytes32String,\n\n    AbiCoder,\n    ConstructorFragment, ErrorFragment, EventFragment, Fragment, FallbackFragment, FunctionFragment, NamedFragment, ParamType, StructFragment,\n\n    checkResultErrors, ErrorDescription, Indexed, Interface, LogDescription, Result, TransactionDescription,\n    Typed,\n} from \"./abi/index.js\";\n\nexport {\n    getAddress, getIcapAddress,\n    getCreateAddress, getCreate2Address,\n    isAddressable, isAddress, resolveAddress\n} from \"./address/index.js\";\n\nexport {\n    ZeroAddress,\n    WeiPerEther, MaxUint256, MinInt256, MaxInt256, N,\n    ZeroHash,\n    EtherSymbol, MessagePrefix\n} from \"./constants/index.js\";\n\nexport {\n    BaseContract, Contract,\n    ContractFactory,\n    ContractEventPayload, ContractTransactionReceipt, ContractTransactionResponse, ContractUnknownEventPayload, EventLog, UndecodedEventLog\n} from \"./contract/index.js\";\n\nexport {\n    computeHmac,\n    randomBytes,\n    keccak256,\n    ripemd160,\n    sha256, sha512,\n    pbkdf2,\n    scrypt, scryptSync,\n    lock,\n    Signature, SigningKey\n} from \"./crypto/index.js\";\n\nexport {\n    id,\n    ensNormalize, isValidName, namehash, dnsEncode,\n    hashMessage, verifyMessage,\n    solidityPacked, solidityPackedKeccak256, solidityPackedSha256,\n    TypedDataEncoder,\n    verifyTypedData\n} from \"./hash/index.js\";\n\nexport {\n    getDefaultProvider,\n\n    Block, FeeData, Log, TransactionReceipt, TransactionResponse,\n\n    AbstractSigner, NonceManager, VoidSigner,\n\n    AbstractProvider,\n\n    FallbackProvider,\n    JsonRpcApiProvider, JsonRpcProvider, JsonRpcSigner,\n\n    BrowserProvider,\n\n    AlchemyProvider, AnkrProvider, CloudflareProvider, EtherscanProvider,\n    InfuraProvider, InfuraWebSocketProvider, PocketProvider, QuickNodeProvider,\n\n    IpcSocketProvider, SocketProvider, WebSocketProvider,\n\n    EnsResolver,\n    Network,\n\n    EnsPlugin, EtherscanPlugin,\n    FeeDataNetworkPlugin, FetchUrlFeeDataNetworkPlugin,\n    GasCostPlugin, NetworkPlugin, MulticoinProviderPlugin,\n\n    SocketBlockSubscriber, SocketEventSubscriber, SocketPendingSubscriber,\n    SocketSubscriber, UnmanagedSubscriber,\n\n    copyRequest, showThrottleMessage\n} from \"./providers/index.js\";\n\nexport {\n    accessListify,\n    computeAddress, recoverAddress,\n    Transaction\n} from \"./transaction/index.js\";\n\nexport {\n    decodeBase58, encodeBase58,\n    decodeBase64, encodeBase64,\n    concat, dataLength, dataSlice, getBytes, getBytesCopy, hexlify,\n    isHexString, isBytesLike, stripZerosLeft, zeroPadBytes, zeroPadValue,\n    defineProperties, resolveProperties,\n    assert, assertArgument, assertArgumentCount, assertNormalize, assertPrivate,\n    makeError,\n    isCallException, isError,\n    EventPayload,\n    FetchRequest, FetchResponse, FetchCancelSignal,\n    FixedNumber,\n    getBigInt, getNumber, getUint, toBeArray, toBigInt, toBeHex, toNumber, toQuantity,\n    fromTwos, toTwos, mask,\n    formatEther, parseEther, formatUnits, parseUnits,\n    toUtf8Bytes, toUtf8CodePoints, toUtf8String,\n    Utf8ErrorFuncs,\n    decodeRlp, encodeRlp,\n    uuidV4,\n} from \"./utils/index.js\";\n\nexport {\n    Mnemonic,\n    BaseWallet, HDNodeWallet, HDNodeVoidWallet,\n    Wallet,\n\n    defaultPath,\n\n    getAccountPath, getIndexedAccountPath,\n    isCrowdsaleJson, isKeystoreJson,\n\n    decryptCrowdsaleJson, decryptKeystoreJsonSync, decryptKeystoreJson,\n    encryptKeystoreJson, encryptKeystoreJsonSync,\n} from \"./wallet/index.js\";\n\nexport {\n    Wordlist, LangEn, WordlistOwl, WordlistOwlA, wordlists\n} from \"./wordlists/index.js\";\n\n\n\n/////////////////////////////\n// Types\n\nexport type {\n    JsonFragment, JsonFragmentType,\n    FormatType, FragmentType,\n    InterfaceAbi,\n    ParamTypeWalkFunc, ParamTypeWalkAsyncFunc\n} from \"./abi/index.js\";\n\nexport type {\n    Addressable, AddressLike, NameResolver\n} from \"./address/index.js\";\n\nexport type {\n    ConstantContractMethod, ContractEvent, ContractEventArgs, ContractEventName,\n    ContractInterface, ContractMethod, ContractMethodArgs, ContractTransaction,\n    DeferredTopicFilter, Overrides,\n    BaseContractMethod, ContractDeployTransaction, PostfixOverrides,\n    WrappedFallback\n} from \"./contract/index.js\";\n\nexport type { ProgressCallback, SignatureLike } from \"./crypto/index.js\";\n\nexport type { TypedDataDomain, TypedDataField } from \"./hash/index.js\";\n\nexport type {\n    Provider, Signer,\n\n    AbstractProviderOptions, FallbackProviderOptions,\n\n    AbstractProviderPlugin, BlockParams, BlockTag, ContractRunner, DebugEventBrowserProvider,\n    Eip1193Provider, EventFilter, Filter, FilterByBlockHash, GasCostParameters,\n    JsonRpcApiProviderOptions, JsonRpcError, JsonRpcPayload, JsonRpcResult,\n    JsonRpcTransactionRequest, LogParams, MinedBlock, MinedTransactionResponse, Networkish,\n    OrphanFilter, PerformActionFilter, PerformActionRequest, PerformActionTransaction,\n    PreparedTransactionRequest, ProviderEvent, Subscriber, Subscription, TopicFilter,\n    TransactionReceiptParams, TransactionRequest, TransactionResponseParams,\n    WebSocketCreator, WebSocketLike\n} from \"./providers/index.js\";\n\nexport type {\n    AccessList, AccessListish, AccessListEntry,\n    TransactionLike\n} from \"./transaction/index.js\";\n\nexport type {\n    BytesLike,\n    BigNumberish, Numeric,\n    ErrorCode,\n    FixedFormat,\n    Utf8ErrorFunc, UnicodeNormalizationForm, Utf8ErrorReason,\n    RlpStructuredData, RlpStructuredDataish,\n\n    GetUrlResponse,\n    FetchPreflightFunc, FetchProcessFunc, FetchRetryFunc,\n    FetchGatewayFunc, FetchGetUrlFunc,\n\n    EthersError, UnknownError, NotImplementedError, UnsupportedOperationError, NetworkError,\n    ServerError, TimeoutError, BadDataError, CancelledError, BufferOverrunError,\n    NumericFaultError, InvalidArgumentError, MissingArgumentError, UnexpectedArgumentError,\n    CallExceptionError, InsufficientFundsError, NonceExpiredError, OffchainFaultError,\n    ReplacementUnderpricedError, TransactionReplacedError, UnconfiguredNameError,\n    ActionRejectedError,\n    CodedEthersError,\n\n    CallExceptionAction, CallExceptionTransaction,\n    EventEmitterable, Listener\n} from \"./utils/index.js\";\n\nexport type {\n    CrowdsaleAccount, KeystoreAccount, EncryptOptions\n} from \"./wallet/index.js\";\n\n", "/**\n *  The Application Programming Interface (API) is the collection of\n *  functions, classes and types offered by the Ethers library.\n *\n *  @_section: api:Application Programming Interface  [about-api]\n *  @_navTitle: API\n */\nimport * as ethers from \"./ethers.js\";\n\nexport { ethers };\n\nexport * from \"./ethers.js\";\n", "/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n\r\nvar __assign = function() {\r\n    __assign = Object.assign || function __assign(t) {\r\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n            s = arguments[i];\r\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n        }\r\n        return t;\r\n    };\r\n    return __assign.apply(this, arguments);\r\n};\n\nvar NotyfNotification = /** @class */ (function () {\r\n    function NotyfNotification(options) {\r\n        this.options = options;\r\n        this.listeners = {};\r\n    }\r\n    NotyfNotification.prototype.on = function (eventType, cb) {\r\n        var callbacks = this.listeners[eventType] || [];\r\n        this.listeners[eventType] = callbacks.concat([cb]);\r\n    };\r\n    NotyfNotification.prototype.triggerEvent = function (eventType, event) {\r\n        var _this = this;\r\n        var callbacks = this.listeners[eventType] || [];\r\n        callbacks.forEach(function (cb) { return cb({ target: _this, event: event }); });\r\n    };\r\n    return NotyfNotification;\r\n}());\r\nvar NotyfArrayEvent;\r\n(function (NotyfArrayEvent) {\r\n    NotyfArrayEvent[NotyfArrayEvent[\"Add\"] = 0] = \"Add\";\r\n    NotyfArrayEvent[NotyfArrayEvent[\"Remove\"] = 1] = \"Remove\";\r\n})(NotyfArrayEvent || (NotyfArrayEvent = {}));\r\nvar NotyfArray = /** @class */ (function () {\r\n    function NotyfArray() {\r\n        this.notifications = [];\r\n    }\r\n    NotyfArray.prototype.push = function (elem) {\r\n        this.notifications.push(elem);\r\n        this.updateFn(elem, NotyfArrayEvent.Add, this.notifications);\r\n    };\r\n    NotyfArray.prototype.splice = function (index, num) {\r\n        var elem = this.notifications.splice(index, num)[0];\r\n        this.updateFn(elem, NotyfArrayEvent.Remove, this.notifications);\r\n        return elem;\r\n    };\r\n    NotyfArray.prototype.indexOf = function (elem) {\r\n        return this.notifications.indexOf(elem);\r\n    };\r\n    NotyfArray.prototype.onUpdate = function (fn) {\r\n        this.updateFn = fn;\r\n    };\r\n    return NotyfArray;\r\n}());\n\nvar NotyfEvent;\r\n(function (NotyfEvent) {\r\n    NotyfEvent[\"Dismiss\"] = \"dismiss\";\r\n    NotyfEvent[\"Click\"] = \"click\";\r\n})(NotyfEvent || (NotyfEvent = {}));\r\nvar DEFAULT_OPTIONS = {\r\n    types: [\r\n        {\r\n            type: 'success',\r\n            className: 'notyf__toast--success',\r\n            backgroundColor: '#3dc763',\r\n            icon: {\r\n                className: 'notyf__icon--success',\r\n                tagName: 'i',\r\n            },\r\n        },\r\n        {\r\n            type: 'error',\r\n            className: 'notyf__toast--error',\r\n            backgroundColor: '#ed3d3d',\r\n            icon: {\r\n                className: 'notyf__icon--error',\r\n                tagName: 'i',\r\n            },\r\n        },\r\n    ],\r\n    duration: 2000,\r\n    ripple: true,\r\n    position: {\r\n        x: 'right',\r\n        y: 'bottom',\r\n    },\r\n    dismissible: false,\r\n};\n\nvar NotyfView = /** @class */ (function () {\r\n    function NotyfView() {\r\n        this.notifications = [];\r\n        this.events = {};\r\n        this.X_POSITION_FLEX_MAP = {\r\n            left: 'flex-start',\r\n            center: 'center',\r\n            right: 'flex-end',\r\n        };\r\n        this.Y_POSITION_FLEX_MAP = {\r\n            top: 'flex-start',\r\n            center: 'center',\r\n            bottom: 'flex-end',\r\n        };\r\n        // Creates the main notifications container\r\n        var docFrag = document.createDocumentFragment();\r\n        var notyfContainer = this._createHTMLElement({ tagName: 'div', className: 'notyf' });\r\n        docFrag.appendChild(notyfContainer);\r\n        document.body.appendChild(docFrag);\r\n        this.container = notyfContainer;\r\n        // Identifies the main animation end event\r\n        this.animationEndEventName = this._getAnimationEndEventName();\r\n        this._createA11yContainer();\r\n    }\r\n    NotyfView.prototype.on = function (event, cb) {\r\n        var _a;\r\n        this.events = __assign(__assign({}, this.events), (_a = {}, _a[event] = cb, _a));\r\n    };\r\n    NotyfView.prototype.update = function (notification, type) {\r\n        if (type === NotyfArrayEvent.Add) {\r\n            this.addNotification(notification);\r\n        }\r\n        else if (type === NotyfArrayEvent.Remove) {\r\n            this.removeNotification(notification);\r\n        }\r\n    };\r\n    NotyfView.prototype.removeNotification = function (notification) {\r\n        var _this = this;\r\n        var renderedNotification = this._popRenderedNotification(notification);\r\n        var node;\r\n        if (!renderedNotification) {\r\n            return;\r\n        }\r\n        node = renderedNotification.node;\r\n        node.classList.add('notyf__toast--disappear');\r\n        var handleEvent;\r\n        node.addEventListener(this.animationEndEventName, (handleEvent = function (event) {\r\n            if (event.target === node) {\r\n                node.removeEventListener(_this.animationEndEventName, handleEvent);\r\n                _this.container.removeChild(node);\r\n            }\r\n        }));\r\n    };\r\n    NotyfView.prototype.addNotification = function (notification) {\r\n        var node = this._renderNotification(notification);\r\n        this.notifications.push({ notification: notification, node: node });\r\n        // For a11y purposes, we still want to announce that there's a notification in the screen\r\n        // even if it comes with no message.\r\n        this._announce(notification.options.message || 'Notification');\r\n    };\r\n    NotyfView.prototype._renderNotification = function (notification) {\r\n        var _a;\r\n        var card = this._buildNotificationCard(notification);\r\n        var className = notification.options.className;\r\n        if (className) {\r\n            (_a = card.classList).add.apply(_a, className.split(' '));\r\n        }\r\n        this.container.appendChild(card);\r\n        return card;\r\n    };\r\n    NotyfView.prototype._popRenderedNotification = function (notification) {\r\n        var idx = -1;\r\n        for (var i = 0; i < this.notifications.length && idx < 0; i++) {\r\n            if (this.notifications[i].notification === notification) {\r\n                idx = i;\r\n            }\r\n        }\r\n        if (idx !== -1) {\r\n            return this.notifications.splice(idx, 1)[0];\r\n        }\r\n        return;\r\n    };\r\n    NotyfView.prototype.getXPosition = function (options) {\r\n        var _a;\r\n        return ((_a = options === null || options === void 0 ? void 0 : options.position) === null || _a === void 0 ? void 0 : _a.x) || 'right';\r\n    };\r\n    NotyfView.prototype.getYPosition = function (options) {\r\n        var _a;\r\n        return ((_a = options === null || options === void 0 ? void 0 : options.position) === null || _a === void 0 ? void 0 : _a.y) || 'bottom';\r\n    };\r\n    NotyfView.prototype.adjustContainerAlignment = function (options) {\r\n        var align = this.X_POSITION_FLEX_MAP[this.getXPosition(options)];\r\n        var justify = this.Y_POSITION_FLEX_MAP[this.getYPosition(options)];\r\n        var style = this.container.style;\r\n        style.setProperty('justify-content', justify);\r\n        style.setProperty('align-items', align);\r\n    };\r\n    NotyfView.prototype._buildNotificationCard = function (notification) {\r\n        var _this = this;\r\n        var options = notification.options;\r\n        var iconOpts = options.icon;\r\n        // Adjust container according to position (e.g. top-left, bottom-center, etc)\r\n        this.adjustContainerAlignment(options);\r\n        // Create elements\r\n        var notificationElem = this._createHTMLElement({ tagName: 'div', className: 'notyf__toast' });\r\n        var ripple = this._createHTMLElement({ tagName: 'div', className: 'notyf__ripple' });\r\n        var wrapper = this._createHTMLElement({ tagName: 'div', className: 'notyf__wrapper' });\r\n        var message = this._createHTMLElement({ tagName: 'div', className: 'notyf__message' });\r\n        message.innerHTML = options.message || '';\r\n        var mainColor = options.background || options.backgroundColor;\r\n        // Build the icon and append it to the card\r\n        if (iconOpts) {\r\n            var iconContainer = this._createHTMLElement({ tagName: 'div', className: 'notyf__icon' });\r\n            if (typeof iconOpts === 'string' || iconOpts instanceof String)\r\n                iconContainer.innerHTML = new String(iconOpts).valueOf();\r\n            if (typeof iconOpts === 'object') {\r\n                var _a = iconOpts.tagName, tagName = _a === void 0 ? 'i' : _a, className_1 = iconOpts.className, text = iconOpts.text, _b = iconOpts.color, color = _b === void 0 ? mainColor : _b;\r\n                var iconElement = this._createHTMLElement({ tagName: tagName, className: className_1, text: text });\r\n                if (color)\r\n                    iconElement.style.color = color;\r\n                iconContainer.appendChild(iconElement);\r\n            }\r\n            wrapper.appendChild(iconContainer);\r\n        }\r\n        wrapper.appendChild(message);\r\n        notificationElem.appendChild(wrapper);\r\n        // Add ripple if applicable, else just paint the full toast\r\n        if (mainColor) {\r\n            if (options.ripple) {\r\n                ripple.style.background = mainColor;\r\n                notificationElem.appendChild(ripple);\r\n            }\r\n            else {\r\n                notificationElem.style.background = mainColor;\r\n            }\r\n        }\r\n        // Add dismiss button\r\n        if (options.dismissible) {\r\n            var dismissWrapper = this._createHTMLElement({ tagName: 'div', className: 'notyf__dismiss' });\r\n            var dismissButton = this._createHTMLElement({\r\n                tagName: 'button',\r\n                className: 'notyf__dismiss-btn',\r\n            });\r\n            dismissWrapper.appendChild(dismissButton);\r\n            wrapper.appendChild(dismissWrapper);\r\n            notificationElem.classList.add(\"notyf__toast--dismissible\");\r\n            dismissButton.addEventListener('click', function (event) {\r\n                var _a, _b;\r\n                (_b = (_a = _this.events)[NotyfEvent.Dismiss]) === null || _b === void 0 ? void 0 : _b.call(_a, { target: notification, event: event });\r\n                event.stopPropagation();\r\n            });\r\n        }\r\n        notificationElem.addEventListener('click', function (event) { var _a, _b; return (_b = (_a = _this.events)[NotyfEvent.Click]) === null || _b === void 0 ? void 0 : _b.call(_a, { target: notification, event: event }); });\r\n        // Adjust margins depending on whether its an upper or lower notification\r\n        var className = this.getYPosition(options) === 'top' ? 'upper' : 'lower';\r\n        notificationElem.classList.add(\"notyf__toast--\" + className);\r\n        return notificationElem;\r\n    };\r\n    NotyfView.prototype._createHTMLElement = function (_a) {\r\n        var tagName = _a.tagName, className = _a.className, text = _a.text;\r\n        var elem = document.createElement(tagName);\r\n        if (className) {\r\n            elem.className = className;\r\n        }\r\n        elem.textContent = text || null;\r\n        return elem;\r\n    };\r\n    /**\r\n     * Creates an invisible container which will announce the notyfs to\r\n     * screen readers\r\n     */\r\n    NotyfView.prototype._createA11yContainer = function () {\r\n        var a11yContainer = this._createHTMLElement({ tagName: 'div', className: 'notyf-announcer' });\r\n        a11yContainer.setAttribute('aria-atomic', 'true');\r\n        a11yContainer.setAttribute('aria-live', 'polite');\r\n        // Set the a11y container to be visible hidden. Can't use display: none as\r\n        // screen readers won't read it.\r\n        a11yContainer.style.border = '0';\r\n        a11yContainer.style.clip = 'rect(0 0 0 0)';\r\n        a11yContainer.style.height = '1px';\r\n        a11yContainer.style.margin = '-1px';\r\n        a11yContainer.style.overflow = 'hidden';\r\n        a11yContainer.style.padding = '0';\r\n        a11yContainer.style.position = 'absolute';\r\n        a11yContainer.style.width = '1px';\r\n        a11yContainer.style.outline = '0';\r\n        document.body.appendChild(a11yContainer);\r\n        this.a11yContainer = a11yContainer;\r\n    };\r\n    /**\r\n     * Announces a message to screenreaders.\r\n     */\r\n    NotyfView.prototype._announce = function (message) {\r\n        var _this = this;\r\n        this.a11yContainer.textContent = '';\r\n        // This 100ms timeout is necessary for some browser + screen-reader combinations:\r\n        // - Both JAWS and NVDA over IE11 will not announce anything without a non-zero timeout.\r\n        // - With Chrome and IE11 with NVDA or JAWS, a repeated (identical) message won't be read a\r\n        //   second time without clearing and then using a non-zero delay.\r\n        // (using JAWS 17 at time of this writing).\r\n        // https://github.com/angular/material2/blob/master/src/cdk/a11y/live-announcer/live-announcer.ts\r\n        setTimeout(function () {\r\n            _this.a11yContainer.textContent = message;\r\n        }, 100);\r\n    };\r\n    /**\r\n     * Determine which animationend event is supported\r\n     */\r\n    NotyfView.prototype._getAnimationEndEventName = function () {\r\n        var el = document.createElement('_fake');\r\n        var transitions = {\r\n            MozTransition: 'animationend',\r\n            OTransition: 'oAnimationEnd',\r\n            WebkitTransition: 'webkitAnimationEnd',\r\n            transition: 'animationend',\r\n        };\r\n        var t;\r\n        for (t in transitions) {\r\n            if (el.style[t] !== undefined) {\r\n                return transitions[t];\r\n            }\r\n        }\r\n        // No supported animation end event. Using \"animationend\" as a fallback\r\n        return 'animationend';\r\n    };\r\n    return NotyfView;\r\n}());\n\n/**\r\n * Main controller class. Defines the main Notyf API.\r\n */\r\nvar Notyf = /** @class */ (function () {\r\n    function Notyf(opts) {\r\n        var _this = this;\r\n        this.dismiss = this._removeNotification;\r\n        this.notifications = new NotyfArray();\r\n        this.view = new NotyfView();\r\n        var types = this.registerTypes(opts);\r\n        this.options = __assign(__assign({}, DEFAULT_OPTIONS), opts);\r\n        this.options.types = types;\r\n        this.notifications.onUpdate(function (elem, type) { return _this.view.update(elem, type); });\r\n        this.view.on(NotyfEvent.Dismiss, function (_a) {\r\n            var target = _a.target, event = _a.event;\r\n            _this._removeNotification(target);\r\n            // tslint:disable-next-line: no-string-literal\r\n            target['triggerEvent'](NotyfEvent.Dismiss, event);\r\n        });\r\n        // tslint:disable-next-line: no-string-literal\r\n        this.view.on(NotyfEvent.Click, function (_a) {\r\n            var target = _a.target, event = _a.event;\r\n            return target['triggerEvent'](NotyfEvent.Click, event);\r\n        });\r\n    }\r\n    Notyf.prototype.error = function (payload) {\r\n        var options = this.normalizeOptions('error', payload);\r\n        return this.open(options);\r\n    };\r\n    Notyf.prototype.success = function (payload) {\r\n        var options = this.normalizeOptions('success', payload);\r\n        return this.open(options);\r\n    };\r\n    Notyf.prototype.open = function (options) {\r\n        var defaultOpts = this.options.types.find(function (_a) {\r\n            var type = _a.type;\r\n            return type === options.type;\r\n        }) || {};\r\n        var config = __assign(__assign({}, defaultOpts), options);\r\n        this.assignProps(['ripple', 'position', 'dismissible'], config);\r\n        var notification = new NotyfNotification(config);\r\n        this._pushNotification(notification);\r\n        return notification;\r\n    };\r\n    Notyf.prototype.dismissAll = function () {\r\n        while (this.notifications.splice(0, 1))\r\n            ;\r\n    };\r\n    /**\r\n     * Assigns properties to a config object based on two rules:\r\n     * 1. If the config object already sets that prop, leave it as so\r\n     * 2. Otherwise, use the default prop from the global options\r\n     *\r\n     * It's intended to build the final config object to open a notification. e.g. if\r\n     * 'dismissible' is not set, then use the value from the global config.\r\n     *\r\n     * @param props - properties to be assigned to the config object\r\n     * @param config - object whose properties need to be set\r\n     */\r\n    Notyf.prototype.assignProps = function (props, config) {\r\n        var _this = this;\r\n        props.forEach(function (prop) {\r\n            // intentional double equality to check for both null and undefined\r\n            config[prop] = config[prop] == null ? _this.options[prop] : config[prop];\r\n        });\r\n    };\r\n    Notyf.prototype._pushNotification = function (notification) {\r\n        var _this = this;\r\n        this.notifications.push(notification);\r\n        var duration = notification.options.duration !== undefined ? notification.options.duration : this.options.duration;\r\n        if (duration) {\r\n            setTimeout(function () { return _this._removeNotification(notification); }, duration);\r\n        }\r\n    };\r\n    Notyf.prototype._removeNotification = function (notification) {\r\n        var index = this.notifications.indexOf(notification);\r\n        if (index !== -1) {\r\n            this.notifications.splice(index, 1);\r\n        }\r\n    };\r\n    Notyf.prototype.normalizeOptions = function (type, payload) {\r\n        var options = { type: type };\r\n        if (typeof payload === 'string') {\r\n            options.message = payload;\r\n        }\r\n        else if (typeof payload === 'object') {\r\n            options = __assign(__assign({}, options), payload);\r\n        }\r\n        return options;\r\n    };\r\n    Notyf.prototype.registerTypes = function (opts) {\r\n        var incomingTypes = ((opts && opts.types) || []).slice();\r\n        var finalDefaultTypes = DEFAULT_OPTIONS.types.map(function (defaultType) {\r\n            // find if there's a default type within the user input's types, if so, it means the user\r\n            // wants to change some of the default settings\r\n            var userTypeIdx = -1;\r\n            incomingTypes.forEach(function (t, idx) {\r\n                if (t.type === defaultType.type)\r\n                    userTypeIdx = idx;\r\n            });\r\n            var userType = userTypeIdx !== -1 ? incomingTypes.splice(userTypeIdx, 1)[0] : {};\r\n            return __assign(__assign({}, defaultType), userType);\r\n        });\r\n        return finalDefaultTypes.concat(incomingTypes);\r\n    };\r\n    return Notyf;\r\n}());\n\nexport { DEFAULT_OPTIONS, Notyf, NotyfArray, NotyfArrayEvent, NotyfEvent, NotyfNotification, NotyfView };\n", "import { Controller } from \"@hotwired/stimulus\"\nimport {FetchRequest, get} from \"@rails/request.js\"\nimport Tagify from '@yaireo/tagify'\nimport {Picker} from \"emoji-mart\";\nimport {ethers} from \"ethers\";\nimport { Notyf } from 'notyf';\n// Connects to data-controller=\"gairdao\"\n\nconst GairdaoController = class extends Controller {\n  static targets = [\"userProfileDrawer\"]\n\n  connect() {\n    document.addEventListener('gairdao:toggleDrawer',this.toggleDrawer);\n    document.addEventListener('gairdao:showMoreWait',this.showMoreWait);\n    document.addEventListener(\"notification:success\", this.successNotification);\n    document.addEventListener(\"notification:open\", this.openNotification);\n    document.addEventListener(\"notification:error\", this.errorNotification);\n    this.initThemeMode();\n    KTApp.hidePageLoading();\n  }\n\n  redirectTo = (e) => {\n    e.preventDefault();\n    let url = e.currentTarget.href || e.currentTarget.dataset.url;\n    KTApp.showPageLoading();\n    setTimeout(function() {\n      window.location = url;\n    }, 1000);\n  }\n\n  // \u5F00\u542F/\u5173\u95ED \u7528\u6237\u4FE1\u606F\u4FA7\u8FB9\u680F\n  // handleSidebarProfileToggle =(event) => {\n  //   console.log(\"handleSidebarProfileToggle\", components.get('sidebar-profile-component'));\n  //   components.get('sidebar-profile-component').controller.toggle(1,event);\n  //   event.preventDefault();\n  // }\n\n  // \u5F00\u542F/\u5173\u95ED \u7528\u6237\u4FE1\u606F\u4FA7\u8FB9\u680F\n  toggleUserDrawer(e){\n    e.preventDefault();\n    const url = e.currentTarget.dataset.url;\n    const frame = document.getElementById(\"user_profile_drawer_content\");\n    frame.src = url;\n    GairdaoController.toggleUserProfileDrawer(\"\",e);\n  }\n\n  // \u83B7\u53D6\u66F4\u591A\u5185\u5BB9\n  showMoreWait(e) {\n    e.preventDefault();\n    const button = e.currentTarget;\n    button.setAttribute(\"data-kt-indicator\", \"on\");\n    button.disabled = true;\n    setTimeout(function() {\n      const request = get(button.href, { responseKind: \"turbo-stream\" })\n      request.then((response) => {\n        console.log(\"handleMoreBtnByClick\", response);\n        button.disabled = false;\n        button.removeAttribute(\"data-kt-indicator\");\n      });\n    }, 1000);\n  }\n\n  successNotification = (event) => {\n    GairdaoController.notification().success(event.detail);\n  }\n\n  errorNotification = (event) => {\n    GairdaoController.notification().error(event.detail);\n  }\n\n  openNotification = (event) => {\n    GairdaoController.notification().open(event.detail);\n  }\n\n  copyLink = (e) => {\n    e.preventDefault();\n    const url = e.currentTarget.dataset.url;\n    const input = document.createElement('input');\n    input.setAttribute('readonly', 'readonly');\n    input.setAttribute('value', url);\n    document.body.appendChild(input);\n    input.select();\n    input.setSelectionRange(0, 9999);\n    document.execCommand('copy');\n    document.body.removeChild(input);\n    const currentTarget = e.currentTarget;\n    currentTarget.classList.add(\"active\");\n    setTimeout(function() {\n      currentTarget.classList.remove(\"active\");\n    }, 1000);\n  }\n\n  shareSocial = (e) => {\n    e.preventDefault();\n    const social = e.currentTarget.dataset.social;\n    const url = e.currentTarget.dataset.url;\n    const message = e.currentTarget.dataset.message;\n\n    let shareUrl = '';\n\n    switch(social) {\n      case 'twitter':\n        shareUrl = `https://twitter.com/share?url=${encodeURIComponent(url)}&text=${encodeURIComponent(message)}`;\n        break;\n      case 'facebook':\n        shareUrl = `https://www.facebook.com/sharer/sharer.php?u=${encodeURIComponent(url)}&quote=${encodeURIComponent(message)}`;\n        break;\n      case 'linkedin':\n        shareUrl = `https://www.linkedin.com/shareArticle?mini=true&url=${encodeURIComponent(url)}&summary=${encodeURIComponent(message)}`;\n        break;\n    }\n\n    if (shareUrl !== '') {\n      window.open(shareUrl, '_blank');\n    }\n  }\n\n  reportAbuse = (e) => {\n    e.preventDefault();\n    const url = e.currentTarget.dataset.url;\n    const request = get(url, { responseKind: \"turbo-stream\" })\n    request.then((response) => {\n      console.log(\"handleReportAbuseByClick\", response);\n    });\n\n  }\n\n\n\n  toggleDrawer = (event) => {\n    console.log(\"toggleUserDrawer\", event.detail);\n    const drawerId = event.detail.drawerId\n    const target = this.targets.find(drawerId)\n    const drawer = KTDrawer.getInstance(target) || new KTDrawer(target);\n    drawer.toggle();\n  }\n\n  initThemeMode() {\n    const defaultThemeMode = \"light\";\n    let themeMode;\n    if ( document.documentElement ) {\n      if ( document.documentElement.hasAttribute(\"data-bs-theme-mode\")) {\n        themeMode = document.documentElement.getAttribute(\"data-bs-theme-mode\");\n      } else {\n        if ( localStorage.getItem(\"data-bs-theme\") !== null ) {\n          themeMode = localStorage.getItem(\"data-bs-theme\");\n        } else {\n          themeMode = defaultThemeMode;\n        }\n      }\n      if (themeMode === \"system\") {\n        themeMode = window.matchMedia(\"(prefers-color-scheme: dark)\").matches ? \"dark\" : \"light\";\n      }\n      document.documentElement.setAttribute(\"data-bs-theme\", themeMode);\n    }\n  }\n\n\n\n\n\n  disconnect() {\n    document.removeEventListener('gairdao:toggleDrawer',this.toggleDrawer);\n    document.removeEventListener('gairdao:showMoreWait',this.showMoreWait);\n  }\n\n  static addOptimismChain =  () => {\n    window.ethereum.request({\n      method: \"wallet_addEthereumChain\",\n      params: [{\n        chainId: \"0xa\",\n        rpcUrls: [\"https://mainnet.optimism.io\"],\n        chainName: \"OP Mainnet\",\n        nativeCurrency: {\n          name: \"ETH\",\n          symbol: \"ETH\",\n          decimals: 18\n        },\n        blockExplorerUrls: [\"https://optimistic.etherscan.io\"]\n      }]\n    });\n  }\n\n  static initMetamaskProvider = async () => {\n    if (window.ethereum == null) {\n      GairdaoController.notification().success({\n        message: 'Please install <a href=\"https://metamask.io/download/\" target=\"_blank\">MetaMask</a> and refresh the page to continue.',\n        duration: 9000,\n        icon: false\n      });\n      return;\n    } else {\n      const provider = new ethers.BrowserProvider(window.ethereum)\n      const network = await provider.getNetwork();\n      if (network.chainId !== \"0xa\") {\n        this.addOptimismChain();\n      }\n      return provider;\n    }\n  }\n\n  static notification = () => {\n    return new Notyf({\n      duration: 5000,\n      position: {\n        x: 'center',\n        y: 'bottom',\n      },\n      dismissible: true\n    });\n  }\n\n  static toggleUserProfileDrawer(userId, event){\n    const drawerId = \"userProfileDrawer\";\n    document.dispatchEvent(new CustomEvent('gairdao:toggleDrawer', {\n      detail: {\n        userId: userId,\n        drawerId: drawerId,\n        currentTarget: event.currentTarget\n      }\n    }));\n  }\n\n  static showMoreWait(event){\n    document.dispatchEvent(new CustomEvent('gairdao:showMoreWait', {\n      detail: {\n        currentTarget: event.currentTarget\n      }\n    }));\n  }\n\n  // \u521D\u59CB\u5316tooltip\n  static initTooltips(targetDom) {\n    const tooltipTriggerList = [].slice.call(targetDom.querySelectorAll('[data-bs-toggle=\"tooltip\"]'))\n    tooltipTriggerList.map(function (tooltipTriggerEl) {\n      return new window.bootstrap.Tooltip(tooltipTriggerEl)\n    })\n  }\n\n  static initEmojiPicker(theme, onEmojiSelectCallback) {\n    const pickerOptions = {\n      onEmojiSelect: (emoji,e) => {\n        onEmojiSelectCallback(emoji,e);\n      },\n      theme: theme,\n    }\n    return new Picker(pickerOptions);\n  }\n\n  static async getRemoteTags(){\n\n    const request = new FetchRequest('get', '/tags/_hottest.json');\n    const response = await request.perform();\n    if (response.ok) {\n      const body = await response.text;\n      const tags = JSON.parse(body);\n      return tags.map((tag) => { return tag.name });\n    }\n  }\n\n  static initTagsPanel(targetDom, inlineMode = false, maxTags = 5, whitelist = [\"ChatGPT\", \"Life Sciences\", \"Robotics\", \"Digital Human\", \"E-Commerce\"]) {\n    const className = inlineMode ? \"tagify__inline__suggestions\" : \"tags-look\";\n    const tagifyConfig = {\n      maxTags: maxTags,\n      originalInputValueFormat: function(valuesArr) {\n        return valuesArr.map(item => item.value.slice(1)).join(',');\n      },\n      transformTag: function(tagData){\n        if (!tagData.value.startsWith('#')) {\n          tagData.value = '#' + tagData.value;\n        }\n      },\n      validate: function(tag) {\n        if (!tag.value.startsWith('#') || /^[!@$%^&*()_+\\-=\\[\\]{};':\"\\\\|,.<>\\/?]/.test(tag.value.slice(1))) {\n          return false;\n        }\n        return true;\n      },\n      dropdown: {\n        maxItems: 20,\n        enabled: 0,\n        closeOnSelect: false,\n        classname: className,\n      }\n    };\n\n    this.getRemoteTags().then((tags) => {\n      tagifyConfig.whitelist = tags;\n      const tagify = new Tagify(targetDom, tagifyConfig);\n      return tagify;\n    }).catch((error) => {\n      tagifyConfig.whitelist = whitelist;\n      const tagify = new Tagify(targetDom, tagifyConfig);\n      return tagify;\n    });\n  }\n\n  static spinnerDom() {\n    let spinner = document.createElement('div');\n    spinner.className = \"spinner-border text-primary\";\n    spinner.role = \"status\";\n\n    let span = document.createElement('span');\n    span.className = \"visually-hidden\";\n    span.textContent = \"Loading...\";\n    spinner.appendChild(span);\n\n    return spinner;\n  }\n\n}\nexport default GairdaoController;", "import { Controller } from \"@hotwired/stimulus\";\nimport { CodemirrorWrapper } from \"./codemirror-wrapper\";\nimport GairdaoController from \"../../javascript/controllers/gairdao_controller\";\nexport default class extends Controller {\n    static targets = [\n        \"tagsPanel\",\n        \"documentEditor\",\n        \"editorPanel\",\n        \"countWordsPanel\",\n        \"contentHiddenInput\"\n    ];\n\n    static values = {\n        directUploadUrl: String,\n        draftId: String,\n        enableTagsPanel: Boolean,\n        documentFormName: String,\n        editorHeight: Number,\n        placeholder: String\n    }\n\n    initialize() {\n        this.initialized = false;\n    }\n\n    connect() {\n\n        this.documentFormNameValue = this.documentFormNameValue || 'document';\n\n        const mentionUsers = [\n            {label: '@Walter White', apply: '[[@Walter White]]', info: 'Your first friend'},\n            {label: '@James Ting', apply: '[[@James Ting(ksish12)]]'},\n            {label: '@\u9C81\u897F\u897F', apply: '[[@\u9C81\u897F\u897F]]'},\n            {label: '@\u4E2D\u672C\u806A', apply: '[[@\u4E2D\u672C\u806A]]'},\n            {label: '@\u30B5\u30C8\u30B7\u30FB\u30CA\u30AB\u30E2\u30C8', apply: '[[@\u30B5\u30C8\u30B7\u30FB\u30CA\u30AB\u30E2\u30C8]]'},\n            {label: '@\u91CE\u6BD4\u306E\u3073\u592A', apply: '[[@\u91CE\u6BD4\u306E\u3073\u592A]]'},\n            {label: '@\uC131\uB355\uC120', apply: '[[@\uC131\uB355\uC120]]'},\n        ];\n\n        this.doc = this.content;\n        this.editor = this.initEditor(mentionUsers);\n        if (this.enableTagsPanelValue){\n            this.initTagsPanel(this.tagsPanelTarget);\n        }\n    }\n\n    initEditor(mentionUsers){\n        let placeholder = this.placeholderValue || 'Write something...';\n        let state = CodemirrorWrapper.newState(\n            this.directUploadUrlValue,\n            mentionUsers,\n            this.countWordsPanelTarget,\n            placeholder,\n            this.doc,\n            this.handleEditorViewUpdate,\n            this.handleEditorViewDropOrPasteFile\n        );\n        const view = CodemirrorWrapper.newEditor(state, this.documentEditorTarget);\n        // init localStorage draft\n        this.updateContent(view);\n        return new CodemirrorWrapper(view);\n    }\n\n    initTagsPanel(targetDom) {\n        this.tagify = GairdaoController.initTagsPanel(targetDom.children[0], true );\n    }\n    handleEditorViewUpdate = (viewUpdate) => {\n        this.updateContent(viewUpdate.view);\n        if (this.draftId){\n            try {\n                localStorage.setItem(this.draftId, this.getMarkdownContent(viewUpdate.view));\n            } catch (e) {\n                console.error('localStorage is not available:', e);\n            }\n\n        }\n    }\n\n    handleEditorViewDropOrPasteFile = (event) => {\n        console.log(\"handleEditorViewDropOrPasteFile\", event);\n    }\n\n    updateContent(editorView) {\n        const markdown = this.getMarkdownContent(editorView);\n        const formName = this.documentFormNameValue;\n        this.setContentToInput(`input[name=\"${formName}[body_markdown]\"]`, markdown);\n    }\n\n    setContentToInput(inputSelector, content) {\n        const inputDom = this.element.querySelector(inputSelector);\n        inputDom.value = content;\n    }\n\n    // \u83B7\u53D6 CodeMirror \u7F16\u8F91\u5668\u7684\u5185\u5BB9\n    getMarkdownContent(editorView) {\n        const doc = editorView.state.doc;\n        return doc.toString();\n    }\n\n    toolbarExternalAction(e) {\n        e.preventDefault();\n        const button = e.currentTarget;\n        const targetName = button.dataset.target;\n        const target = this.targets.find(targetName);\n        button.classList.toggle('show');\n        target.classList.toggle('show');\n    }\n\n    get content() {\n        const inputContent = this.contentHiddenInputTarget.value;\n        if (inputContent) {\n            return inputContent;\n        }\n        if (this.draftId){\n            try {\n                return localStorage.getItem(this.draftId) ;\n            } catch (e) {\n                console.error('localStorage is not available:', e);\n            }\n        }\n        return '';\n    }\n\n    get draftId() {\n        return this.draftIdValue;\n    }\n}", "import suggestionsWidgetController from './suggestions_widget/suggestions_widget_controller';\nimport trendingConferencesWidgetController from './trending_conferences_widget/trending_conferences_widget_controller';\nimport upcomingMeetingsWidgetController from './upcoming_meetings_widget/upcoming_meetings_widget_controller';\nimport trendingArticlesWidgetController from './trending_articles_widget/trending_articles_widget_controller';\nimport governanceVoteWidgetController from \"./governance_vote_widget/governance_vote_widget_controller\";\nimport trendingCommunitiesWidgetController from \"./trending_communities_widget/trending_communities_widget_controller\";\nimport recommendedUsersWidgetController from \"./recommended_users_widget/recommended_users_widget_controller\";\nimport researchAreasWidgetController from \"./research_areas_widget/research_areas_widget_controller\";\n\nconst components = new Map();\n\n// TODO \u540D\u5B57\u4E0D\u7B26\u5408\u89C4\u8303\ncomponents.set('suggestionsWidget', {controller: suggestionsWidgetController})\ncomponents.set('trending-conferences-widget', {controller: trendingConferencesWidgetController})\ncomponents.set('trending-articles-widget', {controller: trendingArticlesWidgetController})\ncomponents.set('upcoming-meetings-widget', {controller: upcomingMeetingsWidgetController})\ncomponents.set('governance-vote-widget', {controller: governanceVoteWidgetController})\ncomponents.set('trending-communities-widget', {controller: trendingCommunitiesWidgetController})\ncomponents.set('recommended-users-widget', {controller: recommendedUsersWidgetController})\ncomponents.set('research-areas-widget', {controller: researchAreasWidgetController})\n\n\n// modal\nimport modalController from \"./modal/modal_controller\";\nimport modalTriggerLinkController from \"./modal_trigger_link/modal_trigger_link_controller\";\ncomponents.set('modal', { controller: modalController })\ncomponents.set('modal-trigger-link', { controller: modalTriggerLinkController })\n\n\n// dropdown menu\nimport dropdownMenuController from './dropdown_menu/dropdown_menu_controller'\ncomponents.set('dropdown-menu', { controller: dropdownMenuController })\n\nimport dropdownMenuV2Controller from './dropdown_menu_v2/dropdown_menu_v2_controller'\ncomponents.set('dropdown-menu-v2', { controller: dropdownMenuV2Controller })\n\n// editor\nimport editorController from './editor/editor_controller'\ncomponents.set('editor', { controller: editorController })\n\nexport default components\n", "export const enum Info { Margin = 10, Width = 300 }\n\nexport const autocompleteLightThemeConfig = {\n    \".cm-tooltip.cm-tooltip-autocomplete\": {\n        \"& > ul\": {\n            fontFamily: \"Inter, Helvetica, 'sans-serif'\",\n            whiteSpace: \"nowrap\",\n            overflow: \"hidden auto\",\n            maxWidth_fallback: \"700px\",\n            maxWidth: \"min(700px, 95vw)\",\n            minWidth: \"150px\",\n            maxHeight: \"10em\",\n            height: \"100%\",\n            listStyle: \"none\",\n            margin: 0,\n            padding: 0,\n\n            \"& > li, & > completion-section\": {\n                padding: \"1px 3px\",\n                lineHeight: 1.5\n            },\n            \"& > li\": {\n                overflowX: \"hidden\",\n                textOverflow: \"ellipsis\",\n                cursor: \"pointer\"\n            },\n            \"& > completion-section\": {\n                display: \"list-item\",\n                borderBottom: \"1px solid silver\",\n                paddingLeft: \"0.5em\",\n                opacity: 0.7\n            }\n        }\n    },\n\n    \".cm-tooltip-autocomplete ul li[aria-selected]\": {\n        background: \"#3E97FF\",\n        color: \"white\",\n    },\n\n    \".cm-tooltip-autocomplete-disabled ul li[aria-selected]\": {\n        background: \"#777\",\n    },\n\n    \".cm-completionListIncompleteTop:before, .cm-completionListIncompleteBottom:after\": {\n        content: '\"\u00B7\u00B7\u00B7\"',\n        opacity: 0.5,\n        display: \"block\",\n        textAlign: \"center\"\n    },\n\n    \".cm-tooltip.cm-completionInfo\": {\n        position: \"absolute\",\n        padding: \"3px 9px\",\n        width: \"max-content\",\n        maxWidth: `${Info.Width}px`,\n        boxSizing: \"border-box\"\n    },\n\n    \".cm-completionInfo.cm-completionInfo-left\": { right: \"100%\" },\n    \".cm-completionInfo.cm-completionInfo-right\": { left: \"100%\" },\n    \".cm-completionInfo.cm-completionInfo-left-narrow\": { right: `${Info.Margin}px` },\n    \".cm-completionInfo.cm-completionInfo-right-narrow\": { left: `${Info.Margin}px` },\n\n    \".cm-snippetField\": {backgroundColor: \"#00000022\"},\n    \".cm-snippetFieldPosition\": {\n        verticalAlign: \"text-top\",\n        width: 0,\n        height: \"1.15em\",\n        display: \"inline-block\",\n        margin: \"0 -0.7px -.7em\",\n        borderLeft: \"1.4px dotted #888\"\n    },\n\n    \".cm-completionMatchedText\": {\n        textDecoration: \"underline\"\n    },\n\n    \".cm-completionDetail\": {\n        marginLeft: \"0.5em\",\n        fontStyle: \"italic\"\n    },\n\n    \".cm-completionIcon\": {\n        fontSize: \"90%\",\n        width: \".8em\",\n        display: \"inline-block\",\n        textAlign: \"center\",\n        paddingRight: \".6em\",\n        opacity: \"0.6\",\n        boxSizing: \"content-box\"\n    },\n\n    \".cm-completionIcon-function, .cm-completionIcon-method\": {\n        \"&:after\": { content: \"'\u0192'\" }\n    },\n    \".cm-completionIcon-class\": {\n        \"&:after\": { content: \"'\u25CB'\" }\n    },\n    \".cm-completionIcon-interface\": {\n        \"&:after\": { content: \"'\u25CC'\" }\n    },\n    \".cm-completionIcon-variable\": {\n        \"&:after\": { content: \"'\uD835\uDC65'\" }\n    },\n    \".cm-completionIcon-constant\": {\n        \"&:after\": { content: \"'\uD835\uDC36'\" }\n    },\n    \".cm-completionIcon-type\": {\n        \"&:after\": { content: \"'\uD835\uDC61'\" }\n    },\n    \".cm-completionIcon-enum\": {\n        \"&:after\": { content: \"'\u222A'\" }\n    },\n    \".cm-completionIcon-property\": {\n        \"&:after\": { content: \"'\u25A1'\" }\n    },\n    \".cm-completionIcon-keyword\": {\n        \"&:after\": { content: \"'\uD83D\uDD11\\uFE0E'\" } // Disable emoji rendering\n    },\n    \".cm-completionIcon-namespace\": {\n        \"&:after\": { content: \"'\u25A2'\" }\n    },\n    \".cm-completionIcon-text\": {\n        \"&:after\": { content: \"'abc'\", fontSize: \"50%\", verticalAlign: \"middle\" }\n    }\n}", "export const searchPanelLightThemeConfig = {\n    \".cm-panel.cm-search\": {\n        padding: \"2px 6px 4px\",\n        position: \"relative\",\n        fontSize: \"1.2em\",\n        fontFamily: \"Inter, Helvetica, 'sans-serif'\",\n        \"& [name=close]\": {\n            position: \"absolute\",\n            top: \"0\",\n            right: \"4px\",\n            backgroundColor: \"inherit\",\n            border: \"none\",\n            font: \"inherit\",\n            padding: 0,\n            margin: 0,\n        },\n        \"& input, & button, & label\": {\n            margin: \".2em .6em .2em 0\"\n        },\n        \"& input[type=checkbox]\": {\n            marginRight: \".2em\"\n        },\n        \"& label\": {\n            fontSize: \"80%\",\n            whiteSpace: \"pre\",\n            fontWeight: \"inherit\"\n\n        }\n    },\n    \".cm-searchMatch\": { backgroundColor: \"#ffff0054\" },\n    \".cm-searchMatch-selected\": { backgroundColor: \"#ff6a0054\" },\n};", "import {EditorView} from \"@codemirror/view\";\nimport { autocompleteLightThemeConfig } from \"./light-autocomplete-theme\";\nimport { searchPanelLightThemeConfig} from \"./light-search-panel-theme\";\n\n\nconst main = {\n    \"&\": { minHeight: \"30px\", height: \"100%\", maxHeight: \"500px\" },\n    \"&.cm-focused\": { outline: \"none\"},\n    \".cm-scroller\": {\n        fontFamily: \"Inter, Helvetica, 'sans-serif'\",\n    },\n    \".cm-gutters\": { backgroundColor: \"#ffffff\", border: \"none\"},\n    \".cm-activeLineGutter\": { backgroundColor: \"#ffffff\"},\n\n    '.cm-scroller::-webkit-scrollbar': {\n        width: '5px',\n    },\n    '.cm-scroller::-webkit-scrollbar-track': {\n        background: '#FFFFFF',\n    },\n    '.cm-scroller::-webkit-scrollbar-thumb': {\n        background: '#3E97FF1A',\n    },\n    '.cm-scroller::-webkit-scrollbar-thumb:hover': {\n        background: '#3E97FF59',\n    },\n\n}\nexport const lightTheme = EditorView.theme({...main, ...autocompleteLightThemeConfig, ...searchPanelLightThemeConfig }, {dark: false})\n", "export const enum Info { Margin = 10, Width = 300 }\n\nexport const autocompleteDarkThemeConfig = {\n    \".cm-tooltip.cm-tooltip-autocomplete\": {\n        \"& > ul\": {\n            fontFamily: \"Inter, Helvetica, 'sans-serif'\",\n            whiteSpace: \"nowrap\",\n            overflow: \"hidden auto\",\n            maxWidth_fallback: \"700px\",\n            maxWidth: \"min(700px, 95vw)\",\n            minWidth: \"150px\",\n            maxHeight: \"10em\",\n            height: \"100%\",\n            listStyle: \"none\",\n            margin: 0,\n            padding: 0,\n\n            \"& > li, & > completion-section\": {\n                padding: \"1px 3px\",\n                lineHeight: 1.5\n            },\n            \"& > li\": {\n                overflowX: \"hidden\",\n                textOverflow: \"ellipsis\",\n                cursor: \"pointer\"\n            },\n            \"& > completion-section\": {\n                display: \"list-item\",\n                borderBottom: \"1px solid silver\",\n                paddingLeft: \"0.5em\",\n                opacity: 0.7\n            }\n        }\n    },\n\n    \".cm-tooltip-autocomplete ul li[aria-selected]\": {\n        background: \"#347\",\n        color: \"white\",\n    },\n\n    \".cm-tooltip-autocomplete-disabled ul li[aria-selected]\": {\n        background: \"#444\",\n    },\n\n    \".cm-completionListIncompleteTop:before, .cm-completionListIncompleteBottom:after\": {\n        content: '\"\u00B7\u00B7\u00B7\"',\n        opacity: 0.5,\n        display: \"block\",\n        textAlign: \"center\"\n    },\n\n    \".cm-tooltip.cm-completionInfo\": {\n        position: \"absolute\",\n        padding: \"3px 9px\",\n        width: \"max-content\",\n        maxWidth: `${Info.Width}px`,\n        boxSizing: \"border-box\"\n    },\n\n    \".cm-completionInfo.cm-completionInfo-left\": { right: \"100%\" },\n    \".cm-completionInfo.cm-completionInfo-right\": { left: \"100%\" },\n    \".cm-completionInfo.cm-completionInfo-left-narrow\": { right: `${Info.Margin}px` },\n    \".cm-completionInfo.cm-completionInfo-right-narrow\": { left: `${Info.Margin}px` },\n\n    \".cm-snippetField\": {backgroundColor: \"#ffffff22\"},\n    \".cm-snippetFieldPosition\": {\n        verticalAlign: \"text-top\",\n        width: 0,\n        height: \"1.15em\",\n        display: \"inline-block\",\n        margin: \"0 -0.7px -.7em\",\n        borderLeft: \"1.4px dotted #888\"\n    },\n\n    \".cm-completionMatchedText\": {\n        textDecoration: \"underline\"\n    },\n\n    \".cm-completionDetail\": {\n        marginLeft: \"0.5em\",\n        fontStyle: \"italic\"\n    },\n\n    \".cm-completionIcon\": {\n        fontSize: \"90%\",\n        width: \".8em\",\n        display: \"inline-block\",\n        textAlign: \"center\",\n        paddingRight: \".6em\",\n        opacity: \"0.6\",\n        boxSizing: \"content-box\"\n    },\n\n    \".cm-completionIcon-function, .cm-completionIcon-method\": {\n        \"&:after\": { content: \"'\u0192'\" }\n    },\n    \".cm-completionIcon-class\": {\n        \"&:after\": { content: \"'\u25CB'\" }\n    },\n    \".cm-completionIcon-interface\": {\n        \"&:after\": { content: \"'\u25CC'\" }\n    },\n    \".cm-completionIcon-variable\": {\n        \"&:after\": { content: \"'\uD835\uDC65'\" }\n    },\n    \".cm-completionIcon-constant\": {\n        \"&:after\": { content: \"'\uD835\uDC36'\" }\n    },\n    \".cm-completionIcon-type\": {\n        \"&:after\": { content: \"'\uD835\uDC61'\" }\n    },\n    \".cm-completionIcon-enum\": {\n        \"&:after\": { content: \"'\u222A'\" }\n    },\n    \".cm-completionIcon-property\": {\n        \"&:after\": { content: \"'\u25A1'\" }\n    },\n    \".cm-completionIcon-keyword\": {\n        \"&:after\": { content: \"'\uD83D\uDD11\\uFE0E'\" } // Disable emoji rendering\n    },\n    \".cm-completionIcon-namespace\": {\n        \"&:after\": { content: \"'\u25A2'\" }\n    },\n    \".cm-completionIcon-text\": {\n        \"&:after\": { content: \"'abc'\", fontSize: \"50%\", verticalAlign: \"middle\" }\n    }\n}", "export const searchPanelDarkThemeConfig = {\n    \".cm-panel.cm-search\": {\n        padding: \"2px 6px 4px\",\n        position: \"relative\",\n        \"& [name=close]\": {\n            position: \"absolute\",\n            top: \"0\",\n            right: \"4px\",\n            backgroundColor: \"inherit\",\n            border: \"none\",\n            font: \"inherit\",\n            padding: 0,\n            margin: 0\n        },\n        \"& input, & button, & label\": {\n            margin: \".2em .6em .2em 0\"\n        },\n        \"& input[type=checkbox]\": {\n            marginRight: \".2em\"\n        },\n        \"& label\": {\n            fontSize: \"80%\",\n            whiteSpace: \"pre\"\n        }\n    },\n    \".cm-searchMatch\": { backgroundColor: \"#00ffff8a\" },\n    \".cm-searchMatch-selected\": { backgroundColor: \"#ff00ff8a\" }\n};", "import {EditorView} from \"@codemirror/view\"\nimport {Extension} from \"@codemirror/state\"\nimport {HighlightStyle, syntaxHighlighting} from \"@codemirror/language\"\nimport {tags as t} from \"@lezer/highlight\"\nimport { autocompleteDarkThemeConfig } from \"./dark-autocomplete-theme\";\nimport { searchPanelDarkThemeConfig} from \"./dark-search-panel-theme\";\n\n// Using https://github.com/one-dark/vscode-one-dark-theme/ as reference for the colors\n\nconst chalky = \"#e5c07b\",\n    coral = \"#e06c75\",\n    cyan = \"#56b6c2\",\n    invalid = \"#ffffff\",\n    ivory = \"#abb2bf\",\n    stone = \"#7d8799\", // Brightened compared to original to increase contrast\n    malibu = \"#61afef\",\n    sage = \"#98c379\",\n    whiskey = \"#d19a66\",\n    violet = \"#c678dd\",\n    darkBackground = \"#1b1b29\",\n    highlightBackground = \"#2c313a\",\n    background = \"#1b1b29\",\n    tooltipBackground = \"#353a42\",\n    selection = \"#3E4451\",\n    cursor = \"#528bff\"\n\n/// The colors used in the theme, as CSS color strings.\nexport const color = {\n    chalky,\n    coral,\n    cyan,\n    invalid,\n    ivory,\n    stone,\n    malibu,\n    sage,\n    whiskey,\n    violet,\n    darkBackground,\n    highlightBackground,\n    background,\n    tooltipBackground,\n    selection,\n    cursor\n}\n\nconst main = {\n    \"&\": {\n        color: ivory,\n        backgroundColor: background,\n        minHeight: \"30px\",\n        maxHeight: \"500px\",\n        height: \"100%\",\n        border: \"1px solid #2B2B40\",\n    },\n    \"&.cm-focused\": {outline: \"none\"},\n    \".cm-content\": {\n        caretColor: cursor\n    },\n    \".cm-cursor, .cm-dropCursor\": {borderLeftColor: cursor},\n    \"&.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground, .cm-selectionBackground, .cm-content ::selection\": {backgroundColor: selection},\n\n    \".cm-panels\": {backgroundColor: darkBackground, color: ivory},\n    \".cm-panels.cm-panels-top\": {borderBottom: \"2px solid black\"},\n    \".cm-panels.cm-panels-bottom\": {borderTop: \"2px solid black\"},\n\n    \".cm-searchMatch\": {\n        backgroundColor: \"#72a1ff59\",\n        outline: \"1px solid #457dff\"\n    },\n    \".cm-searchMatch.cm-searchMatch-selected\": {\n        backgroundColor: \"#6199ff2f\"\n    },\n\n    \".cm-activeLine\": {backgroundColor: \"#6699ff0b\"},\n    \".cm-selectionMatch\": {backgroundColor: \"#aafe661a\"},\n\n    \"&.cm-focused .cm-matchingBracket, &.cm-focused .cm-nonmatchingBracket\": {\n        backgroundColor: \"#bad0f847\"\n    },\n\n    \".cm-gutters\": {\n        backgroundColor: background,\n        color: stone,\n        border: \"none\"\n    },\n\n    \".cm-activeLineGutter\": {\n        backgroundColor: highlightBackground\n    },\n\n    \".cm-foldPlaceholder\": {\n        backgroundColor: \"transparent\",\n        border: \"none\",\n        color: \"#ddd\"\n    },\n\n    \".cm-tooltip\": {\n        border: \"none\",\n        backgroundColor: tooltipBackground\n    },\n    \".cm-tooltip .cm-tooltip-arrow:before\": {\n        borderTopColor: \"transparent\",\n        borderBottomColor: \"transparent\"\n    },\n    \".cm-tooltip .cm-tooltip-arrow:after\": {\n        borderTopColor: tooltipBackground,\n        borderBottomColor: tooltipBackground\n    },\n    \".cm-tooltip-autocomplete\": {\n        \"& > ul > li[aria-selected]\": {\n            backgroundColor: highlightBackground,\n            color: ivory\n        }\n    },\n    '.cm-scroller::-webkit-scrollbar': {\n        width: '5px',\n    },\n    '.cm-scroller::-webkit-scrollbar-track': {\n        background: '#aafe661a',\n    },\n    '.cm-scroller::-webkit-scrollbar-thumb': {\n        background: '#72A1FF25',\n    },\n    '.cm-scroller::-webkit-scrollbar-thumb:hover': {\n        background: '#72A1FF6B',\n    },\n}\n/// The editor theme styles for One Dark.\nexport const oneDarkTheme = EditorView.theme({...main, ...autocompleteDarkThemeConfig, ...searchPanelDarkThemeConfig }, {dark: true})\n\n/// The highlighting style for code in the One Dark theme.\nexport const oneDarkHighlightStyle = HighlightStyle.define([\n    {tag: t.keyword,\n        color: violet},\n    {tag: [t.name, t.deleted, t.character, t.propertyName, t.macroName],\n        color: coral},\n    {tag: [t.function(t.variableName), t.labelName],\n        color: malibu},\n    {tag: [t.color, t.constant(t.name), t.standard(t.name)],\n        color: whiskey},\n    {tag: [t.definition(t.name), t.separator],\n        color: ivory},\n    {tag: [t.typeName, t.className, t.number, t.changed, t.annotation, t.modifier, t.self, t.namespace],\n        color: chalky},\n    {tag: [t.operator, t.operatorKeyword, t.url, t.escape, t.regexp, t.link, t.special(t.string)],\n        color: cyan},\n    {tag: [t.meta, t.comment],\n        color: stone},\n    {tag: t.strong,\n        fontWeight: \"bold\"},\n    {tag: t.emphasis,\n        fontStyle: \"italic\"},\n    {tag: t.strikethrough,\n        textDecoration: \"line-through\"},\n    {tag: t.link,\n        color: stone,\n        textDecoration: \"underline\"},\n    {tag: t.heading,\n        fontWeight: \"bold\",\n        color: coral},\n    {tag: [t.atom, t.bool, t.special(t.variableName)],\n        color: whiskey },\n    {tag: [t.processingInstruction, t.string, t.inserted],\n        color: sage},\n    {tag: t.invalid,\n        color: invalid},\n])\n\n/// Extension to enable the One Dark theme (both the editor theme and\n/// the highlight style).\nexport const index: Extension = [oneDarkTheme, syntaxHighlighting(oneDarkHighlightStyle)]", "import {BlockInfo, EditorView, gutter, GutterMarker, ViewPlugin, ViewUpdate, WidgetType} from \"@codemirror/view\";\nimport {EditorSelection, EditorState, RangeSet, RangeSetBuilder} from \"@codemirror/state\";\n\nimport {\n    codeFolding,\n    foldable,\n    foldEffect,\n    foldState,\n    language,\n    syntaxTree,\n    unfoldEffect,\n} from \"@codemirror/language\";\n\ntype DocRange = {\n    from: number;\n    to: number;\n};\n\nfunction findFold(state: EditorState, from: number, to: number) {\n    let found: { from: number, to: number } | null = null\n    state.field(foldState , false)?.between(from, to, (from, to) => {\n        if (!found || found.from > from) found = {from, to}\n    })\n    return found\n}\n\nfunction generateRandomDomId(prefix = '') {\n    return prefix +'-' + Date.now().toString(36) + '-' + Math.random().toString(36).slice(2, 11);\n}\n\ntype Handlers = { [event: string]: (view: EditorView, line: BlockInfo, event: Event) => boolean }\n\ninterface FoldGutterConfig {\n    markerDOM?: ((open: boolean) => HTMLElement) | null\n    openText?: string\n    closedText?: string\n    domEventHandlers?: Handlers\n    foldingChanged?: (update: ViewUpdate) => boolean\n}\n\nconst foldGutterDefaults: Required<FoldGutterConfig> = {\n    openText: \"\u2304\",\n    closedText: \"\u203A\",\n    markerDOM:  null,\n    domEventHandlers: {},\n    foldingChanged: (update: ViewUpdate) => false\n}\n\nclass FoldMarker extends GutterMarker {\n    constructor(readonly config: Required<FoldGutterConfig>, readonly open: boolean) {\n        super()\n    }\n\n    eq(other: FoldMarker) {\n        return this.config == other.config && this.open == other.open\n    }\n\n    toDOM(view: EditorView) {\n        if (this.config.markerDOM) return this.config.markerDOM(this.open)\n        let span = document.createElement(\"span\")\n        if (this.open) {\n            span.textContent = this.config.openText;\n            span.title = view.state.phrase(\"Fold line or hold to drag\" )\n            span.id = generateRandomDomId(\"fold-marker\");\n        } else {\n            span.textContent = this.config.closedText;\n            span.title = view.state.phrase(\"Unfold line or hold to drag\")\n            span.id = generateRandomDomId(\"unfold-marker\");\n        }\n        return span\n    }\n}\n\nexport function dropFoldGutter(config = {}) {\n    let fullConfig = {...foldGutterDefaults, ...config}\n    let canFold = new FoldMarker(fullConfig, true), canUnfold = new FoldMarker(fullConfig, false)\n    let markers = ViewPlugin.fromClass(class {\n        markers: RangeSet<FoldMarker>\n        from: number\n        constructor(view: EditorView) {\n            this.from = view.viewport.from\n            this.markers = this.buildMarkers(view)\n        }\n        update(update: ViewUpdate) {\n            if (update.docChanged || update.viewportChanged ||\n                update.startState.facet(language) != update.state.facet(language) ||\n                update.startState.field(foldState, false) != update.state.field(foldState, false) ||\n                syntaxTree(update.startState) != syntaxTree(update.state) ||\n                fullConfig.foldingChanged(update)){\n                this.markers = this.buildMarkers(update.view)\n            }\n\n        }\n        buildMarkers(view: EditorView) {\n            let builder = new RangeSetBuilder<FoldMarker>()\n            for (let line of view.viewportLineBlocks) {\n\n                const fold = findFold(view.state, line.from, line.to);\n                const foldableRange = foldable(view.state, line.from, line.to);\n\n                let mark = fold ? canUnfold : foldableRange ? canFold : null\n                if (mark) {\n                    builder.add(line.from, line.from, mark);\n                }\n                if (foldableRange) {\n                    // \u5728\u8FD9\u91CC\u83B7\u53D6\u63D2\u5165widget\u7684\u4F4D\u7F6E\n                    //\u8FD9\u91CC\u83B7\u53D6widget \u4E2D\u53EF\u4EE5\u8F6C\u6362\u6210html\u7684markdown\u6587\u672C\u8D77\u59CB\u4F4D\u7F6E\n                    let lineNumber = view.state.doc.lineAt(line.from).number;\n                    let startLineNumber = view.state.doc.lineAt(foldableRange.from).number;\n                    let endLineNumber = view.state.doc.lineAt(foldableRange.to).number;\n                    // console.log(`Block Widget: ${lineNumber}, start line: ${startLineNumber}, end line: ${endLineNumber}`);\n                }else {\n                    // \u72EC\u7ACB\u884C\u7684widget\n                    // \u5728\u8FD9\u91CC\u83B7\u53D6\u63D2\u5165widget\u7684\u4F4D\u7F6E\n                    let lineNumber = view.state.doc.lineAt(line.from).number;\n                    // console.log(`Line Widget: ${lineNumber}`);\n                }\n            }\n            return builder.finish()\n        }\n    })\n    let {domEventHandlers} = fullConfig;\n    let rangeToDrag : DocRange = { from: 0, to: 0 };\n\n    let longPressTimer: string | number | NodeJS.Timeout | undefined;\n    const longPressDuration = 500; // \u957F\u6309\u65F6\u95F4\u8BBE\u5B9A\u4E3A 0.5 \u79D2\n    return [\n        markers,\n        gutter({\n            class: \"cm-foldGutter\",\n            markers(view) {\n                return view.plugin(markers)?.markers || RangeSet.empty\n            },\n            initialSpacer() {\n                return new FoldMarker(fullConfig, false)\n            },\n            domEventHandlers: {\n                ...domEventHandlers,\n                click: (view, line, event) => {\n                    if (domEventHandlers.click && domEventHandlers.click(view, line, event))\n                        return true;\n                    let folded = findFold(view.state, line.from, line.to);\n                    if (folded) {\n                        view.dispatch({effects: unfoldEffect.of(folded)});\n                        return true;\n                    }\n                    let range = foldable(view.state, line.from, line.to);\n                    if (range) {\n                        view.dispatch({effects: foldEffect.of(range)});\n                        return true;\n                    }\n                    return false;\n                },\n                mousedown: (view, line, event) => {\n                    if (domEventHandlers.mousedown && domEventHandlers.mousedown(view, line, event))\n                        return true;\n\n                    const dom = event.target as HTMLElement;\n\n\n                    longPressTimer = setTimeout(() => {\n                        event.preventDefault();\n                        dom.setAttribute('draggable', 'true');\n                        dom.style.cursor = \"grabbing\";\n                        console.log(`line: ${line.from} to ${line.to}`);\n                        // \u68C0\u67E5\u662F\u5426\u6298\u53E0\n                        let folded = findFold(view.state, line.from, line.to);\n                        if (folded) {\n                            // @ts-ignore\n                            rangeToDrag = { from: line.from, to: folded.to };\n                            console.log(\"GutterMarker folded from:\", rangeToDrag );\n                        } else {\n                            // rangeToDrag =  { from: 0, to: 0 };\n                            const foldRange = foldable(view.state, line.from, line.to);\n                            rangeToDrag =   { from: line.from, to: Number(foldRange?.to)  } ;\n                            console.log(\"GutterMarker foldRange:\", line.from, \"to:\",foldRange?.to);\n                        }\n                    }, longPressDuration );\n\n                    dom.addEventListener('dragstart', (event: DragEvent) => {\n                        rangeToDrag.from === 0 && rangeToDrag.to === 0 && event.preventDefault();\n                        if (!event.dataTransfer) return;\n\n                        let draggedData = view.state.doc.sliceString(rangeToDrag.from, rangeToDrag.to);\n                        // \u521B\u5EFA\u5E7D\u7075\u5143\u7D20\n                        let ghost = document.createElement('div');\n                        ghost.style.position = 'absolute';\n                        ghost.style.top = '-9999px';\n                        const p = document.createElement('p');\n                        p.innerText = draggedData;\n                        p.className = \"fs-5 text-gray-600 text-dark\";\n                        ghost.appendChild(p);\n                        document.body.appendChild(ghost);\n\n                        // \u8BBE\u7F6E\u62D6\u52A8\u56FE\u50CF\n                        event.dataTransfer.setDragImage(ghost, 0, 0);\n                        event.dataTransfer.setData( 'text/plain', draggedData);\n                        event.dataTransfer.setData( 'text/cm-range', JSON.stringify(rangeToDrag));\n\n                        // \u62D6\u52A8\u7ED3\u675F\u540E\u79FB\u9664\u5E7D\u7075\u5143\u7D20\n                        dom.addEventListener('dragend', (event: DragEvent) => {\n                            ghost.remove();\n                            dom.removeAttribute('draggable');\n                            dom.style.cursor = \"pointer\";\n                            console.log(\"dragend\", event);\n                            console.log(\"rangeToDrag\", rangeToDrag);\n                        }, { once: true });\n                    });\n\n                    // \u5982\u679C\u9F20\u6807\u63D0\u524D\u91CA\u653E\uFF0C\u5219\u6E05\u9664\u8BA1\u65F6\u5668\n                    document.addEventListener(\"mouseup\", (e) => {\n                        clearTimeout(longPressTimer);\n                        dom.removeAttribute('draggable');\n                        dom.style.cursor = \"pointer\";\n                    }, { once: true });\n\n                    document.addEventListener(\"mouseleave\", (e) => {\n                        clearTimeout(longPressTimer);\n                        dom.removeAttribute('draggable');\n                        dom.style.cursor = \"pointer\";\n                    }, { once: true });\n\n                    return false;\n                }\n            }\n        }),\n        codeFolding(),\n        EditorView.domEventHandlers({\n            drop(event: DragEvent, view: EditorView) {\n                if (!event.dataTransfer) return;\n                let draggedData = event.dataTransfer.getData('text/plain');\n                let rangeData = event.dataTransfer.getData('text/cm-range');\n                const dropPos = view.posAtCoords({ x: event.clientX, y: event.clientY });\n\n                if (rangeData.length > 0 && dropPos !== null && draggedData.length > 0 ) {\n                    event.dataTransfer.effectAllowed = 'move';\n                    event.preventDefault(); // \u5982\u679C\u6709\u8FD9\u4E2A\u81EA\u5B9A\u4E49\u7684MIME(text/cm-range) \u624D\u963B\u6B62\u9ED8\u8BA4\u884C\u4E3A, \u4E0D\u5F71\u54CD\u5176\u4ED6\u62D6\u52A8\n                    let docRange: DocRange = JSON.parse(rangeData);\n                    let changes = [\n                        { from: docRange.from, to: docRange.to }, // \u5220\u9664\u539F\u6765\u7684\u6587\u672C\n                        { from: dropPos, insert:'\\n' + draggedData + '\\n'}, // \u63D2\u5165\u62D6\u52A8\u7684\u6587\u672C TODO: \u76EE\u6807\u4F4D\u7F6E\u5982\u679C\u4E0B\u4E00\u884C\u6CA1\u6709\u6362\u884C\u52A0\u6362\u884C,\u4E0A\u884C\u6CA1\u6709\u6362\u884C\u52A0\u6362\u884C\n                    ];\n                    // \u521B\u5EFA\u4E00\u4E2A\u9009\u533A\uFF08selection\uFF09\u5BF9\u8C61\n                    const selection = EditorSelection.cursor(dropPos);\n                    let transaction = view.state.update({\n                        changes: changes,\n                        selection: selection,\n                    });\n                    // Apply the transaction\n                    view.dispatch(transaction);\n                }\n                return false;\n            },\n            dragover(event: DragEvent, view: EditorView) {\n                if (!event.dataTransfer) return;\n                const pos = view.posAtCoords({ x: event.clientX, y: event.clientY });\n                if (pos !== null) {\n                    event.preventDefault();\n                    // \u8F6C\u6362\u4E3A\u7F16\u8F91\u5668\u5185\u90E8\u4F4D\u7F6E\n                    const line = view.state.doc.lineAt(pos);\n                    if (line.text.trim().length === 0) {\n                        event.dataTransfer.effectAllowed = 'move';\n                        event.dataTransfer.dropEffect = 'move';\n                    } else {\n                        event.dataTransfer.dropEffect = \"none\"\n                    }\n                    return false;\n                }\n\n                return false;\n            },\n            dragleave(event: DragEvent) {\n                return false;\n            }\n        })\n    ];\n}", "import { EditorState, SelectionRange } from '@codemirror/state';\nimport {syntaxTree} from \"@codemirror/language\";\n\nclass EditorSelectionHelper {\n\n    public static isMultiLineSelection(state: EditorState): boolean {\n        return state.selection.ranges.some((range) => this.isRangeMultiLine(range, state));\n    }\n\n    public static canApplyInlineMarkdown(state: EditorState): boolean {\n        const nonInlineTypes = new Set([\n            \"HTMLBlock\",\n            \"URL\",\n            \"FencedCode\",\n            \"Blockquote\",\n            \"CodeBlock\",\n            \"StrongEmphasis\",\n            \"Strong\",\n            \"CodeText\",\n            \"Image\",\n\n        ]); // \u4E0D\u652F\u6301\u7684\u5757\u7EA7\u5143\u7D20\u7C7B\u578B\n        const {from, to} = state.selection.main;\n        const tree = syntaxTree(state);\n\n        let canApply = true;\n        tree.iterate({\n            from,\n            to,\n            enter(node) {\n                if (node.type.isTop) return;\n                console.log(\"node.name: \", node.name);\n                console.log(\"lineNumber: \", state.doc.lineAt(node.from).number);\n                console.log(\"node.range: \", node.from, node.to);\n                if (node.name === \"LinkMark\" || node.name === \"Link\" || node.name === \"ImageMark\") {\n                    // \u5982\u679C\u8282\u70B9\u662F\u94FE\u63A5\uFF0C\u5E76\u4E14\u9009\u533A\u4EC5\u4EC5\u9009\u62E9\u4E86\u94FE\u63A5\u7684\u4E00\u90E8\u5206\uFF0C\u5219\u4E0D\u80FD\u5E94\u7528Markdown\u6807\u8BB0\n                    if (from > node.from && to < node.to) {\n                        canApply = false;\n                        return false;\n                    }\n                }\n                // \u5982\u679C\u8282\u70B9\u662F\u6807\u9898\uFF0C\u5219\u4E0D\u80FD\u5E94\u7528Markdown\u6807\u8BB0\n                if (node.name.startsWith(\"ATXHeading\")) {\n                    canApply = false;\n                    return false;\n                }\n                // \u4F7F\u7528\u96C6\u5408\u6765\u68C0\u67E5\u662F\u5426\u662F\u5757\u7EA7\u5143\u7D20\n                if (nonInlineTypes.has(node.name)) {\n                    canApply = false;\n                    return false;\n                }\n            }\n        });\n        return canApply;\n    }\n\n    public static isEverythingSelected(state: EditorState): boolean {\n        const totalDocRange = { from: 0, to: state.doc.length };\n        return this.isRangeMultiLine(totalDocRange, state) && state.selection.ranges.some((range) => this.isRangeCovering(range, totalDocRange));\n    }\n\n    public static  getCurrentLine(state: EditorState): {lineNumber: number, text: string} {\n        // \u83B7\u53D6\u4E3B\u5149\u6807\u7684\u4F4D\u7F6E\n        const pos = state.selection.main.head;\n        // \u627E\u5230\u8BE5\u4F4D\u7F6E\u7684\u884C\u4FE1\u606F\n        const line = state.doc.lineAt(pos);\n        return {lineNumber: line.number, text: line.text};\n    }\n\n    private static isRangeMultiLine(range: SelectionRange | { from: number; to: number }, state: EditorState): boolean {\n        const fromLine = state.doc.lineAt(range.from).number;\n        const toLine = state.doc.lineAt(range.to).number;\n        return fromLine !== toLine;\n    }\n\n    private static isRangeCovering(range: SelectionRange, totalRange: { from: number; to: number }): boolean {\n        return range.from <= totalRange.from && range.to >= totalRange.to;\n    }\n\n\n\n}\n\nexport default EditorSelectionHelper;\n", "import {Tree, TreeBuffer, NodeType, NodeProp, NodePropSource, TreeFragment, NodeSet, TreeCursor,\n        Input, Parser, PartialParse, SyntaxNode, ParseWrapper} from \"@lezer/common\"\nimport {styleTags, tags as t, Tag} from \"@lezer/highlight\"\n\nclass CompositeBlock {\n  static create(type: number, value: number, from: number, parentHash: number, end: number) {\n    let hash = (parentHash + (parentHash << 8) + type + (value << 4)) | 0\n    return new CompositeBlock(type, value, from, hash, end, [], [])\n  }\n\n  /// @internal\n  hashProp: [NodeProp<any>, any][]\n\n  constructor(readonly type: number,\n              // Used for indentation in list items, markup character in lists\n              readonly value: number,\n              readonly from: number,\n              readonly hash: number,\n              public end: number,\n              readonly children: (Tree | TreeBuffer)[],\n              readonly positions: number[]) {\n    this.hashProp = [[NodeProp.contextHash, hash]]\n  }\n\n  addChild(child: Tree, pos: number) {\n    if (child.prop(NodeProp.contextHash) != this.hash)\n      child = new Tree(child.type, child.children, child.positions, child.length, this.hashProp)\n    this.children.push(child)\n    this.positions.push(pos)\n  }\n\n  toTree(nodeSet: NodeSet, end = this.end) {\n    let last = this.children.length - 1\n    if (last >= 0) end = Math.max(end, this.positions[last] + this.children[last].length + this.from)\n    return new Tree(nodeSet.types[this.type], this.children, this.positions, end - this.from).balance({\n      makeTree: (children, positions, length) => new Tree(NodeType.none, children, positions, length, this.hashProp)\n    })\n  }\n}\n\nexport enum Type {\n  Document = 1,\n\n  CodeBlock,\n  FencedCode,\n  Blockquote,\n  HorizontalRule,\n  BulletList,\n  OrderedList,\n  ListItem,\n  ATXHeading1,\n  ATXHeading2,\n  ATXHeading3,\n  ATXHeading4,\n  ATXHeading5,\n  ATXHeading6,\n  SetextHeading1,\n  SetextHeading2,\n  HTMLBlock,\n  LinkReference,\n  Paragraph,\n  CommentBlock,\n  ProcessingInstructionBlock,\n\n  // Inline\n  Escape,\n  Entity,\n  HardBreak,\n  Emphasis,\n  StrongEmphasis,\n  Link,\n  Image,\n  InlineCode,\n  HTMLTag,\n  Comment,\n  ProcessingInstruction,\n  URL,\n\n  // Smaller tokens\n  HeaderMark,\n  QuoteMark,\n  ListMark,\n  LinkMark,\n  EmphasisMark,\n  CodeMark,\n  CodeText,\n  CodeInfo,\n  LinkTitle,\n  LinkLabel\n}\n\n/// Data structure used to accumulate a block's content during [leaf\n/// block parsing](#BlockParser.leaf).\nexport class LeafBlock {\n  /// @internal\n  marks: Element[] = []\n  /// The block parsers active for this block.\n  parsers: LeafBlockParser[] = []\n\n  /// @internal\n  constructor(\n    /// The start position of the block.\n    readonly start: number,\n    /// The block's text content.\n    public content: string\n  ) {}\n}\n\n/// Data structure used during block-level per-line parsing.\nexport class Line {\n  /// The line's full text.\n  text = \"\"\n  /// The base indent provided by the composite contexts (that have\n  /// been handled so far).\n  baseIndent = 0\n  /// The string position corresponding to the base indent.\n  basePos = 0\n  /// The number of contexts handled @internal\n  depth = 0\n  /// Any markers (i.e. block quote markers) parsed for the contexts. @internal\n  markers: Element[] = []\n  /// The position of the next non-whitespace character beyond any\n  /// list, blockquote, or other composite block markers.\n  pos = 0\n  /// The column of the next non-whitespace character.\n  indent = 0\n  /// The character code of the character after `pos`.\n  next = -1\n\n  /// @internal\n  forward() {\n    if (this.basePos > this.pos) this.forwardInner()\n  }\n  \n  /// @internal\n  forwardInner() {\n    let newPos = this.skipSpace(this.basePos)\n    this.indent = this.countIndent(newPos, this.pos, this.indent)\n    this.pos = newPos\n    this.next = newPos == this.text.length ? -1 : this.text.charCodeAt(newPos)\n  }\n\n  /// Skip whitespace after the given position, return the position of\n  /// the next non-space character or the end of the line if there's\n  /// only space after `from`.\n  skipSpace(from: number) { return skipSpace(this.text, from) }\n\n  /// @internal\n  reset(text: string) {\n    this.text = text\n    this.baseIndent = this.basePos = this.pos = this.indent = 0\n    this.forwardInner()\n    this.depth = 1\n    while (this.markers.length) this.markers.pop()\n  }\n\n  /// Move the line's base position forward to the given position.\n  /// This should only be called by composite [block\n  /// parsers](#BlockParser.parse) or [markup skipping\n  /// functions](#NodeSpec.composite).\n  moveBase(to: number) {\n    this.basePos = to\n    this.baseIndent = this.countIndent(to, this.pos, this.indent)\n  }\n\n  /// Move the line's base position forward to the given _column_.\n  moveBaseColumn(indent: number) {\n    this.baseIndent = indent\n    this.basePos = this.findColumn(indent)\n  }\n\n  /// Store a composite-block-level marker. Should be called from\n  /// [markup skipping functions](#NodeSpec.composite) when they\n  /// consume any non-whitespace characters.\n  addMarker(elt: Element) {\n    this.markers.push(elt)\n  }\n\n  /// Find the column position at `to`, optionally starting at a given\n  /// position and column.\n  countIndent(to: number, from = 0, indent = 0) {\n    for (let i = from; i < to; i++)\n      indent += this.text.charCodeAt(i) == 9 ? 4 - indent % 4 : 1\n    return indent\n  }\n\n  /// Find the position corresponding to the given column.\n  findColumn(goal: number) {\n    let i = 0\n    for (let indent = 0; i < this.text.length && indent < goal; i++)\n      indent += this.text.charCodeAt(i) == 9 ? 4 - indent % 4 : 1\n    return i\n  }\n\n  /// @internal\n  scrub() {\n    if (!this.baseIndent) return this.text\n    let result = \"\"\n    for (let i = 0; i < this.basePos; i++) result += \" \"\n    return result + this.text.slice(this.basePos)\n  }\n}\n\nfunction skipForList(bl: CompositeBlock, cx: BlockContext, line: Line) {\n  if (line.pos == line.text.length ||\n      (bl != cx.block && line.indent >= cx.stack[line.depth + 1].value + line.baseIndent)) return true\n  if (line.indent >= line.baseIndent + 4) return false\n  let size = (bl.type == Type.OrderedList ? isOrderedList : isBulletList)(line, cx, false)\n  return size > 0 &&\n    (bl.type != Type.BulletList || isHorizontalRule(line, cx, false) < 0) &&\n    line.text.charCodeAt(line.pos + size - 1) == bl.value\n}\n\nconst DefaultSkipMarkup: {[type: number]: (bl: CompositeBlock, cx: BlockContext, line: Line) => boolean} = {\n  [Type.Blockquote](bl, cx, line) {\n    if (line.next != 62 /* '>' */) return false\n    line.markers.push(elt(Type.QuoteMark, cx.lineStart + line.pos, cx.lineStart + line.pos + 1))\n    line.moveBase(line.pos + (space(line.text.charCodeAt(line.pos + 1)) ? 2 : 1))\n    bl.end = cx.lineStart + line.text.length\n    return true\n  },\n  [Type.ListItem](bl, _cx, line) {\n    if (line.indent < line.baseIndent + bl.value && line.next > -1) return false\n    line.moveBaseColumn(line.baseIndent + bl.value)\n    return true\n  },\n  [Type.OrderedList]: skipForList,\n  [Type.BulletList]: skipForList,\n  [Type.Document]() { return true }\n}\n\nexport function space(ch: number) { return ch == 32 || ch == 9 || ch == 10 || ch == 13 }\n\nfunction skipSpace(line: string, i = 0) {\n  while (i < line.length && space(line.charCodeAt(i))) i++\n  return i\n}\n\nfunction skipSpaceBack(line: string, i: number, to: number) {\n  while (i > to && space(line.charCodeAt(i - 1))) i--\n  return i\n}\n\nfunction isFencedCode(line: Line) {\n  if (line.next != 96 && line.next != 126 /* '`~' */) return -1\n  let pos = line.pos + 1\n  while (pos < line.text.length && line.text.charCodeAt(pos) == line.next) pos++\n  if (pos < line.pos + 3) return -1\n  if (line.next == 96) for (let i = pos; i < line.text.length; i++) if (line.text.charCodeAt(i) == 96) return -1\n  return pos\n}\n\nfunction isBlockquote(line: Line) {\n  return line.next != 62 /* '>' */ ? -1 : line.text.charCodeAt(line.pos + 1) == 32 ? 2 : 1\n}\n\nfunction isHorizontalRule(line: Line, cx: BlockContext, breaking: boolean) {\n  if (line.next != 42 && line.next != 45 && line.next != 95 /* '_-*' */) return -1\n  let count = 1\n  for (let pos = line.pos + 1; pos < line.text.length; pos++) {\n    let ch = line.text.charCodeAt(pos)\n    if (ch == line.next) count++\n    else if (!space(ch)) return -1\n  }\n  // Setext headers take precedence\n  if (breaking && line.next == 45 && isSetextUnderline(line) > -1 && line.depth == cx.stack.length) return -1\n  return count < 3 ? -1 : 1\n}\n\nfunction inList(cx: BlockContext, type: Type) {\n  for (let i = cx.stack.length - 1; i >= 0; i--)\n    if (cx.stack[i].type == type) return true\n  return false\n}\n\nfunction isBulletList(line: Line, cx: BlockContext, breaking: boolean) {\n  return (line.next == 45 || line.next == 43 || line.next == 42 /* '-+*' */) &&\n    (line.pos == line.text.length - 1 || space(line.text.charCodeAt(line.pos + 1))) &&\n    (!breaking || inList(cx, Type.BulletList) || line.skipSpace(line.pos + 2) < line.text.length) ? 1 : -1\n}\n\nfunction isOrderedList(line: Line, cx: BlockContext, breaking: boolean) {\n  let pos = line.pos, next = line.next\n  for (;;) {\n    if (next >= 48 && next <= 57 /* '0-9' */) pos++\n    else break\n    if (pos == line.text.length) return -1\n    next = line.text.charCodeAt(pos)\n  }\n  if (pos == line.pos || pos > line.pos + 9 ||\n      (next != 46 && next != 41 /* '.)' */) ||\n      (pos < line.text.length - 1 && !space(line.text.charCodeAt(pos + 1))) ||\n      breaking && !inList(cx, Type.OrderedList) &&\n      (line.skipSpace(pos + 1) == line.text.length || pos > line.pos + 1 || line.next != 49 /* '1' */))\n    return -1\n  return pos + 1 - line.pos\n}\n\nfunction isAtxHeading(line: Line) {\n  if (line.next != 35 /* '#' */) return -1\n  let pos = line.pos + 1\n  while (pos < line.text.length && line.text.charCodeAt(pos) == 35) pos++\n  if (pos < line.text.length && line.text.charCodeAt(pos) != 32) return -1\n  let size = pos - line.pos\n  return size > 6 ? -1 : size\n}\n\nfunction isSetextUnderline(line: Line) {\n  if (line.next != 45 && line.next != 61 /* '-=' */ || line.indent >= line.baseIndent + 4) return -1\n  let pos = line.pos + 1\n  while (pos < line.text.length && line.text.charCodeAt(pos) == line.next) pos++\n  let end = pos\n  while (pos < line.text.length && space(line.text.charCodeAt(pos))) pos++\n  return pos == line.text.length ? end : -1\n}\n\nconst EmptyLine = /^[ \\t]*$/, CommentEnd = /-->/, ProcessingEnd = /\\?>/\nconst HTMLBlockStyle = [\n  [/^<(?:script|pre|style)(?:\\s|>|$)/i, /<\\/(?:script|pre|style)>/i],\n  [/^\\s*<!--/, CommentEnd],\n  [/^\\s*<\\?/, ProcessingEnd],\n  [/^\\s*<![A-Z]/, />/],\n  [/^\\s*<!\\[CDATA\\[/, /\\]\\]>/],\n  [/^\\s*<\\/?(?:address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h1|h2|h3|h4|h5|h6|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul)(?:\\s|\\/?>|$)/i, EmptyLine],\n  [/^\\s*(?:<\\/[a-z][\\w-]*\\s*>|<[a-z][\\w-]*(\\s+[a-z:_][\\w-.]*(?:\\s*=\\s*(?:[^\\s\"'=<>`]+|'[^']*'|\"[^\"]*\"))?)*\\s*>)\\s*$/i, EmptyLine]\n]\n\nfunction isHTMLBlock(line: Line, _cx: BlockContext, breaking: boolean) {\n  if (line.next != 60 /* '<' */) return -1\n  let rest = line.text.slice(line.pos)\n  for (let i = 0, e = HTMLBlockStyle.length - (breaking ? 1 : 0); i < e; i++)\n    if (HTMLBlockStyle[i][0].test(rest)) return i\n  return -1\n}\n\nfunction getListIndent(line: Line, pos: number) {\n  let indentAfter = line.countIndent(pos, line.pos, line.indent)\n  let indented = line.countIndent(line.skipSpace(pos), pos, indentAfter)\n  return indented >= indentAfter + 5 ? indentAfter + 1 : indented\n}\n\n// Return type for block parsing functions. Can be either:\n//\n// - false to indicate that nothing was matched and lower-precedence\n//   parsers should run.\n//\n// - true to indicate that a leaf block was parsed and the stream\n//   was advanced past its content.\n//\n// - null to indicate that a context was opened and block parsing\n//   should continue on this line.\ntype BlockResult = boolean | null\n\nfunction addCodeText(marks: Element[], from: number, to: number) {\n  let last = marks.length - 1\n  if (last >= 0 && marks[last].to == from && marks[last].type == Type.CodeText) (marks[last] as any).to = to\n  else marks.push(elt(Type.CodeText, from, to))\n}\n\n// Rules for parsing blocks. A return value of false means the rule\n// doesn't apply here, true means it does. When true is returned and\n// `p.line` has been updated, the rule is assumed to have consumed a\n// leaf block. Otherwise, it is assumed to have opened a context.\nconst DefaultBlockParsers: {[name: string]: ((cx: BlockContext, line: Line) => BlockResult) | undefined} = {\n  LinkReference: undefined,\n\n  IndentedCode(cx, line) {\n    let base = line.baseIndent + 4\n    if (line.indent < base) return false\n    let start = line.findColumn(base)\n    let from = cx.lineStart + start, to = cx.lineStart + line.text.length\n    let marks: Element[] = [], pendingMarks: Element[] = []\n    addCodeText(marks, from, to)\n    while (cx.nextLine() && line.depth >= cx.stack.length) {\n      if (line.pos == line.text.length) { // Empty\n        addCodeText(pendingMarks, cx.lineStart - 1, cx.lineStart)\n        for (let m of line.markers) pendingMarks.push(m)\n      } else if (line.indent < base) {\n        break\n      } else {\n        if (pendingMarks.length) {\n          for (let m of pendingMarks) {\n            if (m.type == Type.CodeText) addCodeText(marks, m.from, m.to)\n            else marks.push(m)\n          }\n          pendingMarks = []\n        }\n        addCodeText(marks, cx.lineStart - 1, cx.lineStart)\n        for (let m of line.markers) marks.push(m)\n        to = cx.lineStart + line.text.length\n        let codeStart = cx.lineStart + line.findColumn(line.baseIndent + 4)\n        if (codeStart < to) addCodeText(marks, codeStart, to)\n      }\n    }\n    if (pendingMarks.length) {\n      pendingMarks = pendingMarks.filter(m => m.type != Type.CodeText)\n      if (pendingMarks.length) line.markers = pendingMarks.concat(line.markers)\n    }\n\n    cx.addNode(cx.buffer.writeElements(marks, -from).finish(Type.CodeBlock, to - from), from)\n    return true\n  },\n\n  FencedCode(cx, line) {\n    let fenceEnd = isFencedCode(line)\n    if (fenceEnd < 0) return false\n    let from = cx.lineStart + line.pos, ch = line.next, len = fenceEnd - line.pos\n    let infoFrom = line.skipSpace(fenceEnd), infoTo = skipSpaceBack(line.text, line.text.length, infoFrom)\n    let marks: (Element | TreeElement)[] = [elt(Type.CodeMark, from, from + len)]\n    if (infoFrom < infoTo)\n      marks.push(elt(Type.CodeInfo, cx.lineStart + infoFrom, cx.lineStart + infoTo))\n\n    for (let first = true; cx.nextLine() && line.depth >= cx.stack.length; first = false) {\n      let i = line.pos\n      if (line.indent - line.baseIndent < 4)\n        while (i < line.text.length && line.text.charCodeAt(i) == ch) i++\n      if (i - line.pos >= len && line.skipSpace(i) == line.text.length) {\n        for (let m of line.markers) marks.push(m)\n        marks.push(elt(Type.CodeMark, cx.lineStart + line.pos, cx.lineStart + i))\n        cx.nextLine()\n        break\n      } else {\n        if (!first) addCodeText(marks, cx.lineStart - 1, cx.lineStart)\n        for (let m of line.markers) marks.push(m)\n        let textStart = cx.lineStart + line.basePos, textEnd = cx.lineStart + line.text.length\n        if (textStart < textEnd) addCodeText(marks, textStart, textEnd)\n      }\n    }\n    cx.addNode(cx.buffer.writeElements(marks, -from)\n      .finish(Type.FencedCode, cx.prevLineEnd() - from), from)\n    return true\n  },\n\n  Blockquote(cx, line) {\n    let size = isBlockquote(line)\n    if (size < 0) return false\n    cx.startContext(Type.Blockquote, line.pos)\n    cx.addNode(Type.QuoteMark, cx.lineStart + line.pos, cx.lineStart + line.pos + 1)\n    line.moveBase(line.pos + size)\n    return null\n  },\n\n  HorizontalRule(cx, line) {\n    if (isHorizontalRule(line, cx, false) < 0) return false\n    let from = cx.lineStart + line.pos\n    cx.nextLine()\n    cx.addNode(Type.HorizontalRule, from)\n    return true\n  },\n\n  BulletList(cx, line) {\n    let size = isBulletList(line, cx, false)\n    if (size < 0) return false\n    if (cx.block.type != Type.BulletList)\n      cx.startContext(Type.BulletList, line.basePos, line.next)\n    let newBase = getListIndent(line, line.pos + 1)\n    cx.startContext(Type.ListItem, line.basePos, newBase - line.baseIndent)\n    cx.addNode(Type.ListMark, cx.lineStart + line.pos, cx.lineStart + line.pos + size)\n    line.moveBaseColumn(newBase)\n    return null\n  },\n\n  OrderedList(cx, line) {\n    let size = isOrderedList(line, cx, false)\n    if (size < 0) return false\n    if (cx.block.type != Type.OrderedList)\n      cx.startContext(Type.OrderedList, line.basePos, line.text.charCodeAt(line.pos + size - 1))\n    let newBase = getListIndent(line, line.pos + size)\n    cx.startContext(Type.ListItem, line.basePos, newBase - line.baseIndent)\n    cx.addNode(Type.ListMark, cx.lineStart + line.pos, cx.lineStart + line.pos + size)\n    line.moveBaseColumn(newBase)\n    return null\n  },\n\n  ATXHeading(cx, line) {\n    let size = isAtxHeading(line)\n    if (size < 0) return false\n    let off = line.pos, from = cx.lineStart + off\n    let endOfSpace = skipSpaceBack(line.text, line.text.length, off), after = endOfSpace\n    while (after > off && line.text.charCodeAt(after - 1) == line.next) after--\n    if (after == endOfSpace || after == off || !space(line.text.charCodeAt(after - 1))) after = line.text.length\n    let buf = cx.buffer\n      .write(Type.HeaderMark, 0, size)\n      .writeElements(cx.parser.parseInline(line.text.slice(off + size + 1, after), from + size + 1), -from)\n    if (after < line.text.length) buf.write(Type.HeaderMark, after - off, endOfSpace - off)\n    let node = buf.finish(Type.ATXHeading1 - 1 + size, line.text.length - off)\n    cx.nextLine()\n    cx.addNode(node, from)\n    return true\n  },\n\n  HTMLBlock(cx, line) {\n    let type = isHTMLBlock(line, cx, false)\n    if (type < 0) return false\n    let from = cx.lineStart + line.pos, end = HTMLBlockStyle[type][1]\n    let marks: Element[] = [], trailing = end != EmptyLine\n    while (!end.test(line.text) && cx.nextLine()) {\n      if (line.depth < cx.stack.length) { trailing = false; break }\n      for (let m of line.markers) marks.push(m)\n    }\n    if (trailing) cx.nextLine()\n    let nodeType = end == CommentEnd ? Type.CommentBlock : end == ProcessingEnd ? Type.ProcessingInstructionBlock : Type.HTMLBlock\n    let to = cx.prevLineEnd()\n    cx.addNode(cx.buffer.writeElements(marks, -from).finish(nodeType, to - from), from)\n    return true\n  },\n\n  SetextHeading: undefined // Specifies relative precedence for block-continue function\n}\n\nconst enum RefStage { Failed = -1, Start, Label, Link, Title }\n\n// This implements a state machine that incrementally parses link references. At each\n// next line, it looks ahead to see if the line continues the reference or not. If it\n// doesn't and a valid link is available ending before that line, it finishes that.\n// Similarly, on `finish` (when the leaf is terminated by external circumstances), it\n// creates a link reference if there's a valid reference up to the current point.\nclass LinkReferenceParser implements LeafBlockParser {\n  stage = RefStage.Start\n  elts: Element[] = []\n  pos = 0\n  start: number\n\n  constructor(leaf: LeafBlock) {\n    this.start = leaf.start\n    this.advance(leaf.content)\n  }\n\n  nextLine(cx: BlockContext, line: Line, leaf: LeafBlock) {\n    if (this.stage == RefStage.Failed) return false\n    let content = leaf.content + \"\\n\" + line.scrub()\n    let finish = this.advance(content)\n    if (finish > -1 && finish < content.length) return this.complete(cx, leaf, finish)\n    return false\n  }\n\n  finish(cx: BlockContext, leaf: LeafBlock) {\n    if ((this.stage == RefStage.Link || this.stage == RefStage.Title) && skipSpace(leaf.content, this.pos) == leaf.content.length)\n      return this.complete(cx, leaf, leaf.content.length)\n    return false\n  }\n\n  complete(cx: BlockContext, leaf: LeafBlock, len: number) {\n    cx.addLeafElement(leaf, elt(Type.LinkReference, this.start, this.start + len, this.elts))\n    return true\n  }\n\n  nextStage(elt: Element | null | false) {\n    if (elt) {\n      this.pos = elt.to - this.start\n      this.elts.push(elt)\n      this.stage++\n      return true\n    }\n    if (elt === false) this.stage = RefStage.Failed\n    return false\n  }\n\n  advance(content: string) {\n    for (;;) {\n      if (this.stage == RefStage.Failed) {\n        return -1\n      } else if (this.stage == RefStage.Start) {\n        if (!this.nextStage(parseLinkLabel(content, this.pos, this.start, true))) return -1\n        if (content.charCodeAt(this.pos) != 58 /* ':' */) return this.stage = RefStage.Failed\n        this.elts.push(elt(Type.LinkMark, this.pos + this.start, this.pos + this.start + 1))\n        this.pos++\n      } else if (this.stage == RefStage.Label) {\n        if (!this.nextStage(parseURL(content, skipSpace(content, this.pos), this.start))) return -1\n      } else if (this.stage == RefStage.Link) {\n        let skip = skipSpace(content, this.pos), end = 0\n        if (skip > this.pos) {\n          let title = parseLinkTitle(content, skip, this.start)\n          if (title) {\n            let titleEnd = lineEnd(content, title.to - this.start)\n            if (titleEnd > 0) { this.nextStage(title); end = titleEnd }\n          }\n        }\n        if (!end) end = lineEnd(content, this.pos)\n        return end > 0 && end < content.length ? end : -1\n      } else { // RefStage.Title\n        return lineEnd(content, this.pos)\n      }\n    }\n  }\n}\n\nfunction lineEnd(text: string, pos: number) {\n  for (; pos < text.length; pos++) {\n    let next = text.charCodeAt(pos)\n    if (next == 10) break\n    if (!space(next)) return -1\n  }\n  return pos\n}\n\nclass SetextHeadingParser implements LeafBlockParser {\n  nextLine(cx: BlockContext, line: Line, leaf: LeafBlock) {\n    let underline = line.depth < cx.stack.length ? -1 : isSetextUnderline(line)\n    let next = line.next\n    if (underline < 0) return false\n    let underlineMark = elt(Type.HeaderMark, cx.lineStart + line.pos, cx.lineStart + underline)\n    cx.nextLine()\n    cx.addLeafElement(leaf, elt(next == 61 ? Type.SetextHeading1 : Type.SetextHeading2, leaf.start, cx.prevLineEnd(), [\n      ...cx.parser.parseInline(leaf.content, leaf.start),\n      underlineMark\n    ]))\n    return true\n  }\n\n  finish() {\n    return false\n  }\n}\n\nconst DefaultLeafBlocks: {[name: string]: (cx: BlockContext, leaf: LeafBlock) => LeafBlockParser | null} = {\n  LinkReference(_, leaf) { return leaf.content.charCodeAt(0) == 91 /* '[' */ ? new LinkReferenceParser(leaf) : null },\n  SetextHeading() { return new SetextHeadingParser }\n}\n\nconst DefaultEndLeaf: readonly ((cx: BlockContext, line: Line) => boolean)[] = [\n  (_, line) => isAtxHeading(line) >= 0,\n  (_, line) => isFencedCode(line) >= 0,\n  (_, line) => isBlockquote(line) >= 0,\n  (p, line) => isBulletList(line, p, true) >= 0,\n  (p, line) => isOrderedList(line, p, true) >= 0,\n  (p, line) => isHorizontalRule(line, p, true) >= 0,\n  (p, line) => isHTMLBlock(line, p, true) >= 0\n]\n\nconst scanLineResult = {text: \"\", end: 0}\n\n/// Block-level parsing functions get access to this context object.\nexport class BlockContext implements PartialParse {\n  /// @internal\n  block: CompositeBlock\n  /// @internal\n  stack: CompositeBlock[]\n  private line = new Line()\n  private atEnd = false\n  private fragments: FragmentCursor | null\n  private to: number\n  /// For reused nodes on gaps, we can't directly put the original\n  /// node into the tree, since that may be bitter than its parent.\n  /// When this happens, we create a dummy tree that is replaced by\n  /// the proper node in `injectGaps` @internal\n  reusePlaceholders: Map<Tree, Tree> = new Map\n  stoppedAt: number | null = null\n\n  /// The start of the current line.\n  lineStart: number\n  /// The absolute (non-gap-adjusted) position of the line @internal\n  absoluteLineStart: number\n  /// The range index that absoluteLineStart points into @internal\n  rangeI = 0\n  /// @internal\n  absoluteLineEnd: number\n\n  /// @internal\n  constructor(\n    /// The parser configuration used.\n    readonly parser: MarkdownParser,\n    /// @internal\n    readonly input: Input,\n    fragments: readonly TreeFragment[],\n    /// @internal\n    readonly ranges: readonly {from: number, to: number}[],\n  ) {\n    this.to = ranges[ranges.length - 1].to\n    this.lineStart = this.absoluteLineStart = this.absoluteLineEnd = ranges[0].from\n    this.block = CompositeBlock.create(Type.Document, 0, this.lineStart, 0, 0)\n    this.stack = [this.block]\n    this.fragments = fragments.length ? new FragmentCursor(fragments, input) : null\n    this.readLine()\n  }\n\n  get parsedPos() {\n    return this.absoluteLineStart\n  }\n\n  advance() {\n    if (this.stoppedAt != null && this.absoluteLineStart > this.stoppedAt)\n      return this.finish()\n\n    let {line} = this\n    for (;;) {\n      while (line.depth < this.stack.length) this.finishContext()\n      for (let mark of line.markers) this.addNode(mark.type, mark.from, mark.to)\n      if (line.pos < line.text.length) break\n      // Empty line\n      if (!this.nextLine()) return this.finish()\n    }\n\n    if (this.fragments && this.reuseFragment(line.basePos)) return null\n\n    start: for (;;) {\n      for (let type of this.parser.blockParsers) if (type) {\n        let result = type(this, line)\n        if (result != false) {\n          if (result == true) return null\n          line.forward()\n          continue start\n        }\n      }\n      break\n    }\n      \n    let leaf = new LeafBlock(this.lineStart + line.pos, line.text.slice(line.pos))\n    for (let parse of this.parser.leafBlockParsers) if (parse) {\n      let parser = parse!(this, leaf)\n      if (parser) leaf.parsers.push(parser!)\n    }\n    lines: while (this.nextLine()) {\n      if (line.pos == line.text.length) break\n      if (line.indent < line.baseIndent + 4) {\n        for (let stop of this.parser.endLeafBlock) if (stop(this, line, leaf)) break lines\n      }\n      for (let parser of leaf.parsers) if (parser.nextLine(this, line, leaf)) return null\n      leaf.content += \"\\n\" + line.scrub()\n      for (let m of line.markers) leaf.marks.push(m)\n    }\n    this.finishLeaf(leaf)\n    return null\n  }\n\n  stopAt(pos: number) {\n    if (this.stoppedAt != null && this.stoppedAt < pos) throw new RangeError(\"Can't move stoppedAt forward\")\n    this.stoppedAt = pos\n  }\n\n  private reuseFragment(start: number) {\n    if (!this.fragments!.moveTo(this.absoluteLineStart + start, this.absoluteLineStart) ||\n        !this.fragments!.matches(this.block.hash)) return false\n    let taken = this.fragments!.takeNodes(this)\n    if (!taken) return false\n    this.absoluteLineStart += taken\n    this.lineStart = toRelative(this.absoluteLineStart, this.ranges)\n    this.moveRangeI()\n    if (this.absoluteLineStart < this.to) {\n      this.lineStart++\n      this.absoluteLineStart++\n      this.readLine()\n    } else {\n      this.atEnd = true\n      this.readLine()\n    }\n    return true\n  }\n\n  /// The number of parent blocks surrounding the current block.\n  get depth() {\n    return this.stack.length\n  }\n\n  /// Get the type of the parent block at the given depth. When no\n  /// depth is passed, return the type of the innermost parent.\n  parentType(depth = this.depth - 1) {\n    return this.parser.nodeSet.types[this.stack[depth].type]\n  }\n\n  /// Move to the next input line. This should only be called by\n  /// (non-composite) [block parsers](#BlockParser.parse) that consume\n  /// the line directly, or leaf block parser\n  /// [`nextLine`](#LeafBlockParser.nextLine) methods when they\n  /// consume the current line (and return true).\n  nextLine() {\n    this.lineStart += this.line.text.length\n    if (this.absoluteLineEnd >= this.to) {\n      this.absoluteLineStart = this.absoluteLineEnd\n      this.atEnd = true\n      this.readLine()\n      return false\n    } else {\n      this.lineStart++\n      this.absoluteLineStart = this.absoluteLineEnd + 1\n      this.moveRangeI()\n      this.readLine()\n      return true\n    }\n  }\n\n  private moveRangeI() {\n    while (this.rangeI < this.ranges.length - 1 && this.absoluteLineStart >= this.ranges[this.rangeI].to) {\n      this.rangeI++\n      this.absoluteLineStart = Math.max(this.absoluteLineStart, this.ranges[this.rangeI].from)\n    }\n  }\n\n  /// @internal\n  scanLine(start: number) {\n    let r = scanLineResult\n    r.end = start\n    if (start >= this.to) {\n      r.text = \"\"\n    } else {\n      r.text = this.lineChunkAt(start)\n      r.end += r.text.length\n      if (this.ranges.length > 1) {\n        let textOffset = this.absoluteLineStart, rangeI = this.rangeI\n        while (this.ranges[rangeI].to < r.end) {\n          rangeI++\n          let nextFrom = this.ranges[rangeI].from\n          let after = this.lineChunkAt(nextFrom)\n          r.end = nextFrom + after.length\n          r.text = r.text.slice(0, this.ranges[rangeI - 1].to - textOffset) + after\n          textOffset = r.end - r.text.length\n        }\n      }\n    }\n    return r\n  }\n\n  /// @internal\n  readLine() {\n    let {line} = this, {text, end} = this.scanLine(this.absoluteLineStart)\n    this.absoluteLineEnd = end\n    line.reset(text)\n    for (; line.depth < this.stack.length; line.depth++) {\n      let cx = this.stack[line.depth], handler = this.parser.skipContextMarkup[cx.type]\n      if (!handler) throw new Error(\"Unhandled block context \" + Type[cx.type])\n      if (!handler(cx, this, line)) break\n      line.forward()\n    }\n  }\n\n  private lineChunkAt(pos: number) {\n    let next = this.input.chunk(pos), text\n    if (!this.input.lineChunks) {\n      let eol = next.indexOf(\"\\n\")\n      text = eol < 0 ? next : next.slice(0, eol)\n    } else {\n      text = next == \"\\n\" ? \"\" : next\n    }\n    return pos + text.length > this.to ? text.slice(0, this.to - pos) : text\n  }\n\n  /// The end position of the previous line.\n  prevLineEnd() { return this.atEnd ? this.lineStart : this.lineStart - 1 }\n\n  /// @internal\n  startContext(type: Type, start: number, value = 0) {\n    this.block = CompositeBlock.create(type, value, this.lineStart + start, this.block.hash, this.lineStart + this.line.text.length)\n    this.stack.push(this.block)\n  }\n\n  /// Start a composite block. Should only be called from [block\n  /// parser functions](#BlockParser.parse) that return null.\n  startComposite(type: string, start: number, value = 0) {\n    this.startContext(this.parser.getNodeType(type), start, value)\n  }\n\n  /// @internal\n  addNode(block: Type | Tree, from: number, to?: number) {\n    if (typeof block == \"number\") block = new Tree(this.parser.nodeSet.types[block], none, none, (to ?? this.prevLineEnd()) - from)\n    this.block.addChild(block, from - this.block.from)\n  }\n\n  /// Add a block element. Can be called by [block\n  /// parsers](#BlockParser.parse).\n  addElement(elt: Element) {\n    this.block.addChild(elt.toTree(this.parser.nodeSet), elt.from - this.block.from)\n  }\n\n  /// Add a block element from a [leaf parser](#LeafBlockParser). This\n  /// makes sure any extra composite block markup (such as blockquote\n  /// markers) inside the block are also added to the syntax tree.\n  addLeafElement(leaf: LeafBlock, elt: Element) {\n    this.addNode(this.buffer\n      .writeElements(injectMarks(elt.children, leaf.marks), -elt.from)\n      .finish(elt.type, elt.to - elt.from), elt.from)\n  }\n\n  /// @internal\n  finishContext() {\n    let cx = this.stack.pop()!\n    let top = this.stack[this.stack.length - 1]\n    top.addChild(cx.toTree(this.parser.nodeSet), cx.from - top.from)\n    this.block = top\n  }\n\n  private finish() {\n    while (this.stack.length > 1) this.finishContext()\n    return this.addGaps(this.block.toTree(this.parser.nodeSet, this.lineStart))\n  }\n\n  private addGaps(tree: Tree) {\n    return this.ranges.length > 1 ?\n      injectGaps(this.ranges, 0, tree.topNode, this.ranges[0].from, this.reusePlaceholders) : tree\n  }\n\n  /// @internal\n  finishLeaf(leaf: LeafBlock) {\n    for (let parser of leaf.parsers) if (parser.finish(this, leaf)) return\n    let inline = injectMarks(this.parser.parseInline(leaf.content, leaf.start), leaf.marks)\n    this.addNode(this.buffer\n      .writeElements(inline, -leaf.start)\n      .finish(Type.Paragraph, leaf.content.length), leaf.start)\n  }\n\n  /// Create an [`Element`](#Element) object to represent some syntax\n  /// node.\n  elt(type: string, from: number, to: number, children?: readonly Element[]): Element\n  elt(tree: Tree, at: number): Element\n  elt(type: string | Tree, from: number, to?: number, children?: readonly Element[]): Element {\n    if (typeof type == \"string\") return elt(this.parser.getNodeType(type), from, to!, children)\n    return new TreeElement(type, from)\n  }\n\n  /// @internal\n  get buffer() { return new Buffer(this.parser.nodeSet) }\n}\n\nfunction injectGaps(\n  ranges: readonly {from: number, to: number}[], rangeI: number,\n  tree: SyntaxNode, offset: number, dummies: Map<Tree, Tree>\n): Tree {\n  let rangeEnd = ranges[rangeI].to\n  let children = [], positions = [], start = tree.from + offset\n  function movePastNext(upto: number, inclusive: boolean) {\n    while (inclusive ? upto >= rangeEnd : upto > rangeEnd) {\n      let size = ranges[rangeI + 1].from - rangeEnd\n      offset += size\n      upto += size\n      rangeI++\n      rangeEnd = ranges[rangeI].to\n    }\n  }\n  for (let ch = tree.firstChild; ch; ch = ch.nextSibling) {\n    movePastNext(ch.from + offset, true)\n    let from = ch.from + offset, node, reuse = dummies.get(ch.tree!)\n    if (reuse) {\n      node = reuse\n    } else if (ch.to + offset > rangeEnd) {\n      node = injectGaps(ranges, rangeI, ch, offset, dummies)\n      movePastNext(ch.to + offset, false)\n    } else {\n      node = ch.toTree()\n    }\n    children.push(node)\n    positions.push(from - start)\n  }\n  movePastNext(tree.to + offset, false)\n  return new Tree(tree.type, children, positions, tree.to + offset - start, tree.tree ? tree.tree.propValues : undefined)\n}\n\n/// Used in the [configuration](#MarkdownConfig.defineNodes) to define\n/// new [syntax node\n/// types](https://lezer.codemirror.net/docs/ref/#common.NodeType).\nexport interface NodeSpec {\n  /// The node's name.\n  name: string,\n  /// Should be set to true if this type represents a block node.\n  block?: boolean,\n  /// If this is a composite block, this should hold a function that,\n  /// at the start of a new line where that block is active, checks\n  /// whether the composite block should continue (return value) and\n  /// optionally [adjusts](#Line.moveBase) the line's base position\n  /// and [registers](#Line.addMarker) nodes for any markers involved\n  /// in the block's syntax.\n  composite?(cx: BlockContext, line: Line, value: number): boolean,\n  /// Add highlighting tag information for this node. The value of\n  /// this property may either by a tag or array of tags to assign\n  /// directly to this node, or an object in the style of\n  /// [`styleTags`](https://lezer.codemirror.net/docs/ref/#highlight.styleTags)'s\n  /// argument to assign more complicated rules.\n  style?: Tag | readonly Tag[] | {[selector: string]: Tag | readonly Tag[]},\n}\n\n/// Inline parsers are called for every character of parts of the\n/// document that are parsed as inline content.\nexport interface InlineParser {\n  /// This parser's name, which can be used by other parsers to\n  /// [indicate](#InlineParser.before) a relative precedence.\n  name: string,\n  /// The parse function. Gets the next character and its position as\n  /// arguments. Should return -1 if it doesn't handle the character,\n  /// or add some [element](#InlineContext.addElement) or\n  /// [delimiter](#InlineContext.addDelimiter) and return the end\n  /// position of the content it parsed if it can.\n  parse(cx: InlineContext, next: number, pos: number): number,\n  /// When given, this parser will be installed directly before the\n  /// parser with the given name. The default configuration defines\n  /// inline parsers with names Escape, Entity, InlineCode, HTMLTag,\n  /// Emphasis, HardBreak, Link, and Image. When no `before` or\n  /// `after` property is given, the parser is added to the end of the\n  /// list.\n  before?: string,\n  /// When given, the parser will be installed directly _after_ the\n  /// parser with the given name.\n  after?: string\n}  \n\n/// Block parsers handle block-level structure. There are three\n/// general types of block parsers:\n///\n/// - Composite block parsers, which handle things like lists and\n///   blockquotes. These define a [`parse`](#BlockParser.parse) method\n///   that [starts](#BlockContext.startComposite) a composite block\n///   and returns null when it recognizes its syntax.\n///\n/// - Eager leaf block parsers, used for things like code or HTML\n///   blocks. These can unambiguously recognize their content from its\n///   first line. They define a [`parse`](#BlockParser.parse) method\n///   that, if it recognizes the construct,\n///   [moves](#BlockContext.nextLine) the current line forward to the\n///   line beyond the end of the block,\n///   [add](#BlockContext.addElement) a syntax node for the block, and\n///   return true.\n///\n/// - Leaf block parsers that observe a paragraph-like construct as it\n///   comes in, and optionally decide to handle it at some point. This\n///   is used for \"setext\" (underlined) headings and link references.\n///   These define a [`leaf`](#BlockParser.leaf) method that checks\n///   the first line of the block and returns a\n///   [`LeafBlockParser`](#LeafBlockParser) object if it wants to\n///   observe that block.\nexport interface BlockParser {\n  /// The name of the parser. Can be used by other block parsers to\n  /// [specify](#BlockParser.before) precedence.\n  name: string,\n  /// The eager parse function, which can look at the block's first\n  /// line and return `false` to do nothing, `true` if it has parsed\n  /// (and [moved past](#BlockContext.nextLine) a block), or `null` if\n  /// it has started a composite block.\n  parse?(cx: BlockContext, line: Line): BlockResult\n  /// A leaf parse function. If no [regular](#BlockParser.parse) parse\n  /// functions match for a given line, its content will be\n  /// accumulated for a paragraph-style block. This method can return\n  /// an [object](#LeafBlockParser) that overrides that style of\n  /// parsing in some situations.\n  leaf?(cx: BlockContext, leaf: LeafBlock): LeafBlockParser | null\n  /// Some constructs, such as code blocks or newly started\n  /// blockquotes, can interrupt paragraphs even without a blank line.\n  /// If your construct can do this, provide a predicate here that\n  /// recognizes lines that should end a paragraph (or other non-eager\n  /// [leaf block](#BlockParser.leaf)).\n  endLeaf?(cx: BlockContext, line: Line, leaf: LeafBlock): boolean\n  /// When given, this parser will be installed directly before the\n  /// block parser with the given name. The default configuration\n  /// defines block parsers with names LinkReference, IndentedCode,\n  /// FencedCode, Blockquote, HorizontalRule, BulletList, OrderedList,\n  /// ATXHeading, HTMLBlock, and SetextHeading.\n  before?: string,\n  /// When given, the parser will be installed directly _after_ the\n  /// parser with the given name.\n  after?: string,\n}\n\n/// Objects that are used to [override](#BlockParser.leaf)\n/// paragraph-style blocks should conform to this interface.\nexport interface LeafBlockParser {\n  /// Update the parser's state for the next line, and optionally\n  /// finish the block. This is not called for the first line (the\n  /// object is contructed at that line), but for any further lines.\n  /// When it returns `true`, the block is finished. It is okay for\n  /// the function to [consume](#BlockContext.nextLine) the current\n  /// line or any subsequent lines when returning true.\n  nextLine(cx: BlockContext, line: Line, leaf: LeafBlock): boolean\n  /// Called when the block is finished by external circumstances\n  /// (such as a blank line or the [start](#BlockParser.endLeaf) of\n  /// another construct). If this parser can handle the block up to\n  /// its current position, it should\n  /// [finish](#BlockContext.addLeafElement) the block and return\n  /// true.\n  finish(cx: BlockContext, leaf: LeafBlock): boolean\n}\n\n/// Objects of this type are used to\n/// [configure](#MarkdownParser.configure) the Markdown parser.\nexport interface MarkdownConfig {\n  /// Node props to add to the parser's node set.\n  props?: readonly NodePropSource[],\n  /// Define new [node types](#NodeSpec) for use in parser extensions.\n  defineNodes?: readonly (string | NodeSpec)[],\n  /// Define additional [block parsing](#BlockParser) logic.\n  parseBlock?: readonly BlockParser[],\n  /// Define new [inline parsing](#InlineParser) logic.\n  parseInline?: readonly InlineParser[],\n  /// Remove the named parsers from the configuration.\n  remove?: readonly string[]\n  /// Add a parse wrapper (such as a [mixed-language\n  /// parser](#common.parseMixed)) to this parser.\n  wrap?: ParseWrapper\n}\n\n/// To make it possible to group extensions together into bigger\n/// extensions (such as the [Github-flavored Markdown](#GFM)\n/// extension), [reconfiguration](#MarkdownParser.configure) accepts\n/// nested arrays of [config](#MarkdownConfig) objects.\nexport type MarkdownExtension = MarkdownConfig | readonly MarkdownExtension[]\n\n/// A Markdown parser configuration.\nexport class MarkdownParser extends Parser {\n  /// @internal\n  nodeTypes: {[name: string]: number} = Object.create(null)\n\n  /// @internal\n  constructor(\n    /// The parser's syntax [node\n    /// types](https://lezer.codemirror.net/docs/ref/#common.NodeSet).\n    readonly nodeSet: NodeSet,\n    /// @internal\n    readonly blockParsers: readonly (((cx: BlockContext, line: Line) => BlockResult) | undefined)[],\n    /// @internal\n    readonly leafBlockParsers: readonly (((cx: BlockContext, leaf: LeafBlock) => LeafBlockParser | null) | undefined)[],\n    /// @internal\n    readonly blockNames: readonly string[],\n    /// @internal\n    readonly endLeafBlock: readonly ((cx: BlockContext, line: Line, leaf: LeafBlock) => boolean)[],\n    /// @internal\n    readonly skipContextMarkup: {readonly [type: number]: (bl: CompositeBlock, cx: BlockContext, line: Line) => boolean},\n    /// @internal\n    readonly inlineParsers: readonly (((cx: InlineContext, next: number, pos: number) => number) | undefined)[],\n    /// @internal\n    readonly inlineNames: readonly string[],\n    /// @internal\n    readonly wrappers: readonly ParseWrapper[]\n  ) {\n    super()\n    for (let t of nodeSet.types) this.nodeTypes[t.name] = t.id\n  }\n\n  createParse(input: Input, fragments: readonly TreeFragment[], ranges: readonly {from: number, to: number}[]): PartialParse {\n    let parse: PartialParse = new BlockContext(this, input, fragments, ranges)\n    for (let w of this.wrappers) parse = w(parse, input, fragments, ranges)\n    return parse\n  }\n\n  /// Reconfigure the parser.\n  configure(spec: MarkdownExtension) {\n    let config = resolveConfig(spec)\n    if (!config) return this\n    let {nodeSet, skipContextMarkup} = this\n    let blockParsers = this.blockParsers.slice(), leafBlockParsers = this.leafBlockParsers.slice(),\n        blockNames = this.blockNames.slice(), inlineParsers = this.inlineParsers.slice(),\n        inlineNames = this.inlineNames.slice(), endLeafBlock = this.endLeafBlock.slice(),\n        wrappers = this.wrappers\n\n    if (nonEmpty(config.defineNodes)) {\n      skipContextMarkup = Object.assign({}, skipContextMarkup)\n      let nodeTypes = nodeSet.types.slice(), styles: {[selector: string]: Tag | readonly Tag[]} | undefined\n      for (let s of config.defineNodes) {\n        let {name, block, composite, style} = typeof s == \"string\" ? {name: s} as NodeSpec : s\n        if (nodeTypes.some(t => t.name == name)) continue\n        if (composite) (skipContextMarkup as any)[nodeTypes.length] =\n          (bl: CompositeBlock, cx: BlockContext, line: Line) => composite!(cx, line, bl.value)\n        let id = nodeTypes.length\n        let group = composite ? [\"Block\", \"BlockContext\"] : !block ? undefined\n          : id >= Type.ATXHeading1 && id <= Type.SetextHeading2 ? [\"Block\", \"LeafBlock\", \"Heading\"] : [\"Block\", \"LeafBlock\"]\n        nodeTypes.push(NodeType.define({\n          id,\n          name,\n          props: group && [[NodeProp.group, group]]\n        }))\n        if (style) {\n          if (!styles) styles = {}\n          if (Array.isArray(style) || style instanceof Tag) styles[name] = style\n          else Object.assign(styles, style)\n        }\n      }\n      nodeSet = new NodeSet(nodeTypes)\n      if (styles) nodeSet = nodeSet.extend(styleTags(styles))\n    }\n\n    if (nonEmpty(config.props)) nodeSet = nodeSet.extend(...config.props)\n\n    if (nonEmpty(config.remove)) {\n      for (let rm of config.remove) {\n        let block = this.blockNames.indexOf(rm), inline = this.inlineNames.indexOf(rm)\n        if (block > -1) blockParsers[block] = leafBlockParsers[block] = undefined\n        if (inline > -1) inlineParsers[inline] = undefined\n      }\n    }\n\n    if (nonEmpty(config.parseBlock)) {\n      for (let spec of config.parseBlock) {\n        let found = blockNames.indexOf(spec.name)\n        if (found > -1) {\n          blockParsers[found] = spec.parse\n          leafBlockParsers[found] = spec.leaf\n        } else {\n          let pos = spec.before ? findName(blockNames, spec.before)\n            : spec.after ? findName(blockNames, spec.after) + 1 : blockNames.length - 1\n          blockParsers.splice(pos, 0, spec.parse)\n          leafBlockParsers.splice(pos, 0, spec.leaf)\n          blockNames.splice(pos, 0, spec.name)\n        }\n        if (spec.endLeaf) endLeafBlock.push(spec.endLeaf)\n      }\n    }\n\n    if (nonEmpty(config.parseInline)) {\n      for (let spec of config.parseInline) {\n        let found = inlineNames.indexOf(spec.name)\n        if (found > -1) {\n          inlineParsers[found] = spec.parse\n        } else {\n          let pos = spec.before ? findName(inlineNames, spec.before)\n            : spec.after ? findName(inlineNames, spec.after) + 1 : inlineNames.length - 1\n          inlineParsers.splice(pos, 0, spec.parse)\n          inlineNames.splice(pos, 0, spec.name)\n        }\n      }\n    }\n\n    if (config.wrap) wrappers = wrappers.concat(config.wrap)\n\n    return new MarkdownParser(nodeSet,\n                              blockParsers, leafBlockParsers, blockNames,\n                              endLeafBlock, skipContextMarkup,\n                              inlineParsers, inlineNames, wrappers)\n  }\n\n  /// @internal\n  getNodeType(name: string) {\n    let found = this.nodeTypes[name]\n    if (found == null) throw new RangeError(`Unknown node type '${name}'`)\n    return found\n  }\n\n  /// Parse the given piece of inline text at the given offset,\n  /// returning an array of [`Element`](#Element) objects representing\n  /// the inline content.\n  parseInline(text: string, offset: number) {\n    let cx = new InlineContext(this, text, offset)\n    outer: for (let pos = offset; pos < cx.end;) {\n      let next = cx.char(pos)\n      for (let token of this.inlineParsers) if (token) {\n        let result = token(cx, next, pos)\n        if (result >= 0) { pos = result; continue outer }\n      }\n      pos++\n    }\n    return cx.resolveMarkers(0)\n  }\n}\n\nfunction nonEmpty<T>(a: undefined | readonly T[]): a is readonly T[] {\n  return a != null && a.length > 0\n}\n\nfunction resolveConfig(spec: MarkdownExtension): MarkdownConfig | null {\n  if (!Array.isArray(spec)) return spec as MarkdownConfig\n  if (spec.length == 0) return null\n  let conf = resolveConfig(spec[0])\n  if (spec.length == 1) return conf\n  let rest = resolveConfig(spec.slice(1))\n  if (!rest || !conf) return conf || rest\n  let conc: <T>(a: readonly T[] | undefined, b: readonly T[] | undefined) => readonly T[] =\n    (a, b) => (a || none).concat(b || none)\n  let wrapA = conf.wrap, wrapB = rest.wrap\n  return {\n    props: conc(conf.props, rest.props),\n    defineNodes: conc(conf.defineNodes, rest.defineNodes),\n    parseBlock: conc(conf.parseBlock, rest.parseBlock),\n    parseInline: conc(conf.parseInline, rest.parseInline),\n    remove: conc(conf.remove, rest.remove),\n    wrap: !wrapA ? wrapB : !wrapB ? wrapA :\n      (inner, input, fragments, ranges) => wrapA!(wrapB!(inner, input, fragments, ranges), input, fragments, ranges)\n  }\n}\n\nfunction findName(names: readonly string[], name: string) {\n  let found = names.indexOf(name)\n  if (found < 0) throw new RangeError(`Position specified relative to unknown parser ${name}`)\n  return found\n}\n\nlet nodeTypes = [NodeType.none]\nfor (let i = 1, name; name = Type[i]; i++) {\n  nodeTypes[i] = NodeType.define({\n    id: i,\n    name,\n    props: i >= Type.Escape ? [] : [[NodeProp.group, i in DefaultSkipMarkup ? [\"Block\", \"BlockContext\"] : [\"Block\", \"LeafBlock\"]]],\n    top: name == \"Document\"\n  })\n}\n\nconst none: readonly any[] = []\n\nclass Buffer {\n  content: number[] = []\n  nodes: Tree[] = []\n  constructor(readonly nodeSet: NodeSet) {}\n\n  write(type: Type, from: number, to: number, children = 0) {\n    this.content.push(type, from, to, 4 + children * 4)\n    return this\n  }\n\n  writeElements(elts: readonly (Element | TreeElement)[], offset = 0) {\n    for (let e of elts) e.writeTo(this, offset)\n    return this\n  }\n\n  finish(type: Type, length: number) {\n    return Tree.build({\n      buffer: this.content,\n      nodeSet: this.nodeSet,\n      reused: this.nodes,\n      topID: type,\n      length\n    })\n  }\n}  \n\n/// Elements are used to compose syntax nodes during parsing.\nexport class Element {\n  /// @internal\n  constructor(\n    /// The node's\n    /// [id](https://lezer.codemirror.net/docs/ref/#common.NodeType.id).\n    readonly type: number,\n    /// The start of the node, as an offset from the start of the document.\n    readonly from: number,\n    /// The end of the node.\n    readonly to: number,\n    /// The node's child nodes @internal\n    readonly children: readonly (Element | TreeElement)[] = none\n  ) {}\n\n  /// @internal\n  writeTo(buf: Buffer, offset: number) {\n    let startOff = buf.content.length\n    buf.writeElements(this.children, offset)\n    buf.content.push(this.type, this.from + offset, this.to + offset, buf.content.length + 4 - startOff)\n  }\n\n  /// @internal\n  toTree(nodeSet: NodeSet): Tree {\n    return new Buffer(nodeSet).writeElements(this.children, -this.from).finish(this.type, this.to - this.from)\n  }\n}\n\nclass TreeElement {\n  constructor(readonly tree: Tree, readonly from: number) {}\n\n  get to() { return this.from + this.tree.length }\n\n  get type() { return this.tree.type.id }\n\n  get children() { return none }\n\n  writeTo(buf: Buffer, offset: number) {\n    buf.nodes.push(this.tree)\n    buf.content.push(buf.nodes.length - 1, this.from + offset, this.to + offset, -1)\n  }\n\n  toTree(): Tree { return this.tree }\n}\n\nfunction elt(type: Type, from: number, to: number, children?: readonly (Element | TreeElement)[]) {\n  return new Element(type, from, to, children)\n}\n\nconst enum Mark { None = 0, Open = 1, Close = 2 }\n\n/// Delimiters are used during inline parsing to store the positions\n/// of things that _might_ be delimiters, if another matching\n/// delimiter is found. They are identified by objects with these\n/// properties.\nexport interface DelimiterType {\n  /// If this is given, the delimiter should be matched automatically\n  /// when a piece of inline content is finished. Such delimiters will\n  /// be matched with delimiters of the same type according to their\n  /// [open and close](#InlineContext.addDelimiter) properties. When a\n  /// match is found, the content between the delimiters is wrapped in\n  /// a node whose name is given by the value of this property.\n  ///\n  /// When this isn't given, you need to match the delimiter eagerly\n  /// using the [`findOpeningDelimiter`](#InlineContext.findOpeningDelimiter)\n  /// and [`takeContent`](#InlineContext.takeContent) methods.\n  resolve?: string,\n  /// If the delimiter itself should, when matched, create a syntax\n  /// node, set this to the name of the syntax node.\n  mark?: string\n}\n\nconst EmphasisUnderscore: DelimiterType = {resolve: \"Emphasis\", mark: \"EmphasisMark\"}\nconst EmphasisAsterisk: DelimiterType = {resolve: \"Emphasis\", mark: \"EmphasisMark\"}\nconst LinkStart: DelimiterType = {}, ImageStart: DelimiterType = {}\n\nclass InlineDelimiter {\n  constructor(readonly type: DelimiterType,\n              readonly from: number,\n              readonly to: number,\n              public side: Mark) {}\n}\n\nconst Escapable = \"!\\\"#$%&'()*+,-./:;<=>?@[\\\\]^_`{|}~\"\n\nexport let Punctuation = /[!\"#$%&'()*+,\\-.\\/:;<=>?@\\[\\\\\\]^_`{|}~\\xA1\\u2010-\\u2027]/\ntry { Punctuation = new RegExp(\"[\\\\p{Pc}|\\\\p{Pd}|\\\\p{Pe}|\\\\p{Pf}|\\\\p{Pi}|\\\\p{Po}|\\\\p{Ps}]\", \"u\") } catch (_) {}\n\nconst DefaultInline: {[name: string]: (cx: InlineContext, next: number, pos: number) => number} = {\n  Escape(cx, next, start) {\n    if (next != 92 /* '\\\\' */ || start == cx.end - 1) return -1\n    let escaped = cx.char(start + 1)\n    for (let i = 0; i < Escapable.length; i++) if (Escapable.charCodeAt(i) == escaped)\n      return cx.append(elt(Type.Escape, start, start + 2))\n    return -1\n  },\n\n  Entity(cx, next, start) {\n    if (next != 38 /* '&' */) return -1\n    let m = /^(?:#\\d+|#x[a-f\\d]+|\\w+);/i.exec(cx.slice(start + 1, start + 31))\n    return m ? cx.append(elt(Type.Entity, start, start + 1 + m[0].length)) : -1\n  },\n\n  InlineCode(cx, next, start) {\n    if (next != 96 /* '`' */ || start && cx.char(start - 1) == 96) return -1\n    let pos = start + 1\n    while (pos < cx.end && cx.char(pos) == 96) pos++\n    let size = pos - start, curSize = 0\n    for (; pos < cx.end; pos++) {\n      if (cx.char(pos) == 96) {\n        curSize++\n        if (curSize == size && cx.char(pos + 1) != 96)\n          return cx.append(elt(Type.InlineCode, start, pos + 1, [\n            elt(Type.CodeMark, start, start + size),\n            elt(Type.CodeMark, pos + 1 - size, pos + 1)\n          ]))\n      } else {\n        curSize = 0\n      }\n    }\n    return -1\n  },\n\n  HTMLTag(cx, next, start) { // or URL\n    if (next != 60 /* '<' */ || start == cx.end - 1) return -1\n    let after = cx.slice(start + 1, cx.end)\n    let url = /^(?:[a-z][-\\w+.]+:[^\\s>]+|[a-z\\d.!#$%&'*+/=?^_`{|}~-]+@[a-z\\d](?:[a-z\\d-]{0,61}[a-z\\d])?(?:\\.[a-z\\d](?:[a-z\\d-]{0,61}[a-z\\d])?)*)>/i.exec(after)\n    if (url) return cx.append(elt(Type.URL, start, start + 1 + url[0].length))\n    let comment = /^!--[^>](?:-[^-]|[^-])*?-->/i.exec(after)\n    if (comment) return cx.append(elt(Type.Comment, start, start + 1 + comment[0].length))\n    let procInst = /^\\?[^]*?\\?>/.exec(after)\n    if (procInst) return cx.append(elt(Type.ProcessingInstruction, start, start + 1 + procInst[0].length))\n    let m = /^(?:![A-Z][^]*?>|!\\[CDATA\\[[^]*?\\]\\]>|\\/\\s*[a-zA-Z][\\w-]*\\s*>|\\s*[a-zA-Z][\\w-]*(\\s+[a-zA-Z:_][\\w-.:]*(?:\\s*=\\s*(?:[^\\s\"'=<>`]+|'[^']*'|\"[^\"]*\"))?)*\\s*(\\/\\s*)?>)/.exec(after)\n    if (!m) return -1\n    return cx.append(elt(Type.HTMLTag, start, start + 1 + m[0].length))\n  },\n\n  Emphasis(cx, next, start) {\n    if (next != 95 && next != 42) return -1\n    let pos = start + 1\n    while (cx.char(pos) == next) pos++\n    let before = cx.slice(start - 1, start), after = cx.slice(pos, pos + 1)\n    let pBefore = Punctuation.test(before), pAfter = Punctuation.test(after)\n    let sBefore = /\\s|^$/.test(before), sAfter = /\\s|^$/.test(after)\n    let leftFlanking = !sAfter && (!pAfter || sBefore || pBefore)\n    let rightFlanking = !sBefore && (!pBefore || sAfter || pAfter)\n    let canOpen = leftFlanking && (next == 42 || !rightFlanking || pBefore)\n    let canClose = rightFlanking && (next == 42 || !leftFlanking || pAfter)\n    return cx.append(new InlineDelimiter(next == 95 ? EmphasisUnderscore : EmphasisAsterisk, start, pos,\n                                         (canOpen ? Mark.Open : 0) | (canClose ? Mark.Close : 0)))\n  },\n\n  HardBreak(cx, next, start) {\n    if (next == 92 /* '\\\\' */ && cx.char(start + 1) == 10 /* '\\n' */)\n      return cx.append(elt(Type.HardBreak, start, start + 2))\n    if (next == 32) {\n      let pos = start + 1\n      while (cx.char(pos) == 32) pos++\n      if (cx.char(pos) == 10 && pos >= start + 2)\n        return cx.append(elt(Type.HardBreak, start, pos + 1))\n    }\n    return -1\n  },\n\n  Link(cx, next, start) {\n    return next == 91 /* '[' */ ? cx.append(new InlineDelimiter(LinkStart, start, start + 1, Mark.Open)) : -1\n  },\n\n  Image(cx, next, start) {\n    return next == 33 /* '!' */ && cx.char(start + 1) == 91 /* '[' */\n      ? cx.append(new InlineDelimiter(ImageStart, start, start + 2, Mark.Open)) : -1\n  },\n\n  LinkEnd(cx, next, start) {\n    if (next != 93 /* ']' */) return -1\n    // Scanning back to the next link/image start marker\n    for (let i = cx.parts.length - 1; i >= 0; i--) {\n      let part = cx.parts[i]\n      if (part instanceof InlineDelimiter && (part.type == LinkStart || part.type == ImageStart)) {\n        // If this one has been set invalid (because it would produce\n        // a nested link) or there's no valid link here ignore both.\n        if (!part.side || cx.skipSpace(part.to) == start && !/[(\\[]/.test(cx.slice(start + 1, start + 2))) {\n          cx.parts[i] = null\n          return -1\n        }\n        // Finish the content and replace the entire range in\n        // this.parts with the link/image node.\n        let content = cx.takeContent(i)\n        let link = cx.parts[i] = finishLink(cx, content, part.type == LinkStart ? Type.Link : Type.Image, part.from, start + 1)\n        // Set any open-link markers before this link to invalid.\n        if (part.type == LinkStart) for (let j = 0; j < i; j++) {\n          let p = cx.parts[j]\n          if (p instanceof InlineDelimiter && p.type == LinkStart) p.side = Mark.None\n        }\n        return link.to\n      }\n    }\n    return -1\n  }\n}\n\nfunction finishLink(cx: InlineContext, content: Element[], type: Type, start: number, startPos: number) {\n  let {text} = cx, next = cx.char(startPos), endPos = startPos\n  content.unshift(elt(Type.LinkMark, start, start + (type == Type.Image ? 2 : 1)))\n  content.push(elt(Type.LinkMark, startPos - 1, startPos))\n  if (next == 40 /* '(' */) {\n    let pos = cx.skipSpace(startPos + 1)\n    let dest = parseURL(text, pos - cx.offset, cx.offset), title\n    if (dest) {\n      pos = cx.skipSpace(dest.to)\n      title = parseLinkTitle(text, pos - cx.offset, cx.offset)\n      if (title) pos = cx.skipSpace(title.to)\n    }\n    if (cx.char(pos) == 41 /* ')' */) {\n      content.push(elt(Type.LinkMark, startPos, startPos + 1))\n      endPos = pos + 1\n      if (dest) content.push(dest)\n      if (title) content.push(title)\n      content.push(elt(Type.LinkMark, pos, endPos))\n    }\n  } else if (next == 91 /* '[' */) {\n    let label = parseLinkLabel(text, startPos - cx.offset, cx.offset, false)\n    if (label) {\n      content.push(label)\n      endPos = label.to\n    }\n  }\n  return elt(type, start, endPos, content)\n}\n\n// These return `null` when falling off the end of the input, `false`\n// when parsing fails otherwise (for use in the incremental link\n// reference parser).\n\nfunction parseURL(text: string, start: number, offset: number): null | false | Element {\n  let next = text.charCodeAt(start)\n  if (next == 60 /* '<' */) {\n    for (let pos = start + 1; pos < text.length; pos++) {\n      let ch = text.charCodeAt(pos)\n      if (ch == 62 /* '>' */) return elt(Type.URL, start + offset, pos + 1 + offset)\n      if (ch == 60 || ch == 10 /* '<\\n' */) return false\n    }\n    return null\n  } else {\n    let depth = 0, pos = start\n    for (let escaped = false; pos < text.length; pos++) {\n      let ch = text.charCodeAt(pos)\n      if (space(ch)) {\n        break\n      } else if (escaped) {\n        escaped = false\n      } else if (ch == 40 /* '(' */) {\n        depth++\n      } else if (ch == 41 /* ')' */) {\n        if (!depth) break\n        depth--\n      } else if (ch == 92 /* '\\\\' */) {\n        escaped = true\n      }\n    }\n    return pos > start ? elt(Type.URL, start + offset, pos + offset) : pos == text.length ? null : false\n  }\n}\n\nfunction parseLinkTitle(text: string, start: number, offset: number): null | false | Element {\n  let next = text.charCodeAt(start)\n  if (next != 39 && next != 34 && next != 40 /* '\"\\'(' */) return false\n  let end = next == 40 ? 41 : next\n  for (let pos = start + 1, escaped = false; pos < text.length; pos++) {\n    let ch = text.charCodeAt(pos)\n    if (escaped) escaped = false\n    else if (ch == end) return elt(Type.LinkTitle, start + offset, pos + 1 + offset)\n    else if (ch == 92 /* '\\\\' */) escaped = true\n  }\n  return null\n}\n\nfunction parseLinkLabel(text: string, start: number, offset: number, requireNonWS: boolean): null | false | Element {\n  for (let escaped = false, pos = start + 1, end = Math.min(text.length, pos + 999); pos < end; pos++) {\n    let ch = text.charCodeAt(pos)\n    if (escaped) escaped = false\n    else if (ch == 93 /* ']' */) return requireNonWS ? false : elt(Type.LinkLabel, start + offset, pos + 1 + offset)\n    else {\n      if (requireNonWS && !space(ch)) requireNonWS = false\n      if (ch == 91 /* '[' */) return false\n      else if (ch == 92 /* '\\\\' */) escaped = true\n    }\n  }\n  return null\n}\n\n/// Inline parsing functions get access to this context, and use it to\n/// read the content and emit syntax nodes.\nexport class InlineContext {\n  /// @internal\n  parts: (Element | InlineDelimiter | null)[] = []\n\n  /// @internal\n  constructor(\n    /// The parser that is being used.\n    readonly parser: MarkdownParser,\n    /// The text of this inline section.\n    readonly text: string,\n    /// The starting offset of the section in the document.\n    readonly offset: number\n  ) {}\n\n  /// Get the character code at the given (document-relative)\n  /// position.\n  char(pos: number) { return pos >= this.end ? -1 : this.text.charCodeAt(pos - this.offset) }\n\n  /// The position of the end of this inline section.\n  get end() { return this.offset + this.text.length }\n\n  /// Get a substring of this inline section. Again uses\n  /// document-relative positions.\n  slice(from: number, to: number) { return this.text.slice(from - this.offset, to - this.offset) }\n\n  /// @internal\n  append(elt: Element | InlineDelimiter) {\n    this.parts.push(elt)\n    return elt.to\n  }\n\n  /// Add a [delimiter](#DelimiterType) at this given position. `open`\n  /// and `close` indicate whether this delimiter is opening, closing,\n  /// or both. Returns the end of the delimiter, for convenient\n  /// returning from [parse functions](#InlineParser.parse).\n  addDelimiter(type: DelimiterType, from: number, to: number, open: boolean, close: boolean) {\n    return this.append(new InlineDelimiter(type, from, to, (open ? Mark.Open : 0) | (close ? Mark.Close : 0)))\n  }\n\n  /// Add an inline element. Returns the end of the element.\n  addElement(elt: Element) {\n    return this.append(elt)\n  }\n\n  /// Resolve markers between this.parts.length and from, wrapping matched markers in the\n  /// appropriate node and updating the content of this.parts. @internal\n  resolveMarkers(from: number) {\n    // Scan forward, looking for closing tokens\n    for (let i = from; i < this.parts.length; i++) {\n      let close = this.parts[i]\n      if (!(close instanceof InlineDelimiter && close.type.resolve && (close.side & Mark.Close))) continue\n\n      let emp = close.type == EmphasisUnderscore || close.type == EmphasisAsterisk\n      let closeSize = close.to - close.from\n      let open: InlineDelimiter | undefined, j = i - 1\n      // Continue scanning for a matching opening token\n      for (; j >= from; j--) {\n        let part = this.parts[j]\n        if (part instanceof InlineDelimiter && (part.side & Mark.Open) && part.type == close.type &&\n            // Ignore emphasis delimiters where the character count doesn't match\n            !(emp && ((close.side & Mark.Open) || (part.side & Mark.Close)) &&\n              (part.to - part.from + closeSize) % 3 == 0 && ((part.to - part.from) % 3 || closeSize % 3))) {\n          open = part\n          break\n        }\n      }\n      if (!open) continue\n\n      let type = close.type.resolve, content = []\n      let start = open.from, end = close.to\n      // Emphasis marker effect depends on the character count. Size consumed is minimum of the two\n      // markers.\n      if (emp) {\n        let size = Math.min(2, open.to - open.from, closeSize)\n        start = open.to - size\n        end = close.from + size\n        type = size == 1 ? \"Emphasis\" : \"StrongEmphasis\"\n      }\n      // Move the covered region into content, optionally adding marker nodes\n      if (open.type.mark) content.push(this.elt(open.type.mark, start, open.to))\n      for (let k = j + 1; k < i; k++) {\n        if (this.parts[k] instanceof Element) content.push(this.parts[k] as Element)\n        this.parts[k] = null\n      }\n      if (close.type.mark) content.push(this.elt(close.type.mark, close.from, end))\n      let element = this.elt(type, start, end, content)\n      // If there are leftover emphasis marker characters, shrink the close/open markers. Otherwise, clear them.\n      this.parts[j] = emp && open.from != start ? new InlineDelimiter(open.type, open.from, start, open.side) : null\n      let keep = this.parts[i] = emp && close.to != end ? new InlineDelimiter(close.type, end, close.to, close.side) : null\n      // Insert the new element in this.parts\n      if (keep) this.parts.splice(i, 0, element)\n      else this.parts[i] = element\n    }\n\n    // Collect the elements remaining in this.parts into an array.\n    let result = []\n    for (let i = from; i < this.parts.length; i++) {\n      let part = this.parts[i]\n      if (part instanceof Element) result.push(part)\n    }\n    return result\n  }\n\n  /// Find an opening delimiter of the given type. Returns `null` if\n  /// no delimiter is found, or an index that can be passed to\n  /// [`takeContent`](#InlineContext.takeContent) otherwise.\n  findOpeningDelimiter(type: DelimiterType) {\n    for (let i = this.parts.length - 1; i >= 0; i--) {\n      let part = this.parts[i]\n      if (part instanceof InlineDelimiter && part.type == type) return i\n    }\n    return null\n  }\n\n  /// Remove all inline elements and delimiters starting from the\n  /// given index (which you should get from\n  /// [`findOpeningDelimiter`](#InlineContext.findOpeningDelimiter),\n  /// resolve delimiters inside of them, and return them as an array\n  /// of elements.\n  takeContent(startIndex: number) {\n    let content = this.resolveMarkers(startIndex)\n    this.parts.length = startIndex\n    return content\n  }\n\n  /// Skip space after the given (document) position, returning either\n  /// the position of the next non-space character or the end of the\n  /// section.\n  skipSpace(from: number) { return skipSpace(this.text, from - this.offset) + this.offset }\n\n  /// Create an [`Element`](#Element) for a syntax node.\n  elt(type: string, from: number, to: number, children?: readonly Element[]): Element\n  elt(tree: Tree, at: number): Element\n  elt(type: string | Tree, from: number, to?: number, children?: readonly Element[]): Element {\n    if (typeof type == \"string\") return elt(this.parser.getNodeType(type), from, to!, children)\n    return new TreeElement(type, from)\n  }\n}\n\nfunction injectMarks(elements: readonly (Element | TreeElement)[], marks: Element[]) {\n  if (!marks.length) return elements\n  if (!elements.length) return marks\n  let elts = elements.slice(), eI = 0\n  for (let mark of marks) {\n    while (eI < elts.length && elts[eI].to < mark.to) eI++\n    if (eI < elts.length && elts[eI].from < mark.from) {\n      let e = elts[eI]\n      if (e instanceof Element)\n        elts[eI] = new Element(e.type, e.from, e.to, injectMarks(e.children, [mark]))\n    } else {\n      elts.splice(eI++, 0, mark)\n    }\n  }\n  return elts\n}\n\n// These are blocks that can span blank lines, and should thus only be\n// reused if their next sibling is also being reused.\nconst NotLast = [Type.CodeBlock, Type.ListItem, Type.OrderedList, Type.BulletList]\n\nclass FragmentCursor {\n  // Index into fragment array\n  i = 0\n  // Active fragment\n  fragment: TreeFragment | null = null\n  fragmentEnd = -1\n  // Cursor into the current fragment, if any. When `moveTo` returns\n  // true, this points at the first block after `pos`.\n  cursor: TreeCursor | null = null\n\n  constructor(readonly fragments: readonly TreeFragment[], readonly input: Input) {\n    if (fragments.length) this.fragment = fragments[this.i++]\n  }\n\n  nextFragment() {\n    this.fragment = this.i < this.fragments.length ? this.fragments[this.i++] : null\n    this.cursor = null\n    this.fragmentEnd = -1\n  }\n\n  moveTo(pos: number, lineStart: number) {\n    while (this.fragment && this.fragment.to <= pos) this.nextFragment()\n    if (!this.fragment || this.fragment.from > (pos ? pos - 1 : 0)) return false\n    if (this.fragmentEnd < 0) {\n      let end = this.fragment.to\n      while (end > 0 && this.input.read(end - 1, end) != \"\\n\") end--\n      this.fragmentEnd = end ? end - 1 : 0\n    }\n\n    let c = this.cursor\n    if (!c) {\n      c = this.cursor = this.fragment.tree.cursor()\n      c.firstChild()\n    }\n\n    let rPos = pos + this.fragment.offset\n    while (c.to <= rPos) if (!c.parent()) return false\n    for (;;) {\n      if (c.from >= rPos) return this.fragment.from <= lineStart\n      if (!c.childAfter(rPos)) return false\n    }\n  }\n\n  matches(hash: number) {\n    let tree = this.cursor!.tree\n    return tree && tree.prop(NodeProp.contextHash) == hash\n  }\n\n  takeNodes(cx: BlockContext) {\n    let cur = this.cursor!, off = this.fragment!.offset, fragEnd = this.fragmentEnd - (this.fragment!.openEnd ? 1 : 0)\n    let start = cx.absoluteLineStart, end = start, blockI = cx.block.children.length\n    let prevEnd = end, prevI = blockI\n    for (;;) {\n      if (cur.to - off > fragEnd) {\n        if (cur.type.isAnonymous && cur.firstChild()) continue\n        break\n      }\n      let pos = toRelative(cur.from - off, cx.ranges)\n      if (cur.to - off <= cx.ranges[cx.rangeI].to) { // Fits in current range\n        cx.addNode(cur.tree!, pos)\n      } else {\n        let dummy = new Tree(cx.parser.nodeSet.types[Type.Paragraph], [], [], 0, cx.block.hashProp)\n        cx.reusePlaceholders.set(dummy, cur.tree!)\n        cx.addNode(dummy, pos)\n      }\n      // Taken content must always end in a block, because incremental\n      // parsing happens on block boundaries. Never stop directly\n      // after an indented code block, since those can continue after\n      // any number of blank lines.\n      if (cur.type.is(\"Block\")) {\n        if (NotLast.indexOf(cur.type.id) < 0) {\n          end = cur.to - off\n          blockI = cx.block.children.length\n        } else {\n          end = prevEnd\n          blockI = prevI\n          prevEnd = cur.to - off\n          prevI = cx.block.children.length\n        }\n      }\n      if (!cur.nextSibling()) break\n    }\n    while (cx.block.children.length > blockI) {\n      cx.block.children.pop()\n      cx.block.positions.pop()\n    }\n    return end - start\n  }\n}\n\n// Convert an input-stream-relative position to a\n// Markdown-doc-relative position by subtracting the size of all input\n// gaps before `abs`.\nfunction toRelative(abs: number, ranges: readonly {from: number, to: number}[]) {\n  let pos = abs\n  for (let i = 1; i < ranges.length; i++) {\n    let gapFrom = ranges[i - 1].to, gapTo = ranges[i].from\n    if (gapFrom < abs) pos -= gapTo - gapFrom\n  }\n  return pos\n}\n\nconst markdownHighlighting = styleTags({\n  \"Blockquote/...\": t.quote,\n  HorizontalRule: t.contentSeparator,\n  \"ATXHeading1/... SetextHeading1/...\": t.heading1,\n  \"ATXHeading2/... SetextHeading2/...\": t.heading2,\n  \"ATXHeading3/...\": t.heading3,\n  \"ATXHeading4/...\": t.heading4,\n  \"ATXHeading5/...\": t.heading5,\n  \"ATXHeading6/...\": t.heading6,\n  \"Comment CommentBlock\": t.comment,\n  Escape: t.escape,\n  Entity: t.character,\n  \"Emphasis/...\": t.emphasis,\n  \"StrongEmphasis/...\": t.strong,\n  \"Link/... Image/...\": t.link,\n  \"OrderedList/... BulletList/...\": t.list,\n  \"BlockQuote/...\": t.quote,\n  \"InlineCode CodeText\": t.monospace,\n  URL: t.url,\n  \"HeaderMark HardBreak QuoteMark ListMark LinkMark EmphasisMark CodeMark\": t.processingInstruction,\n  \"CodeInfo LinkLabel\": t.labelName,\n  LinkTitle: t.string,\n  Paragraph: t.content\n})\n\n/// The default CommonMark parser.\nexport const parser = new MarkdownParser(\n  new NodeSet(nodeTypes).extend(markdownHighlighting),\n  Object.keys(DefaultBlockParsers).map(n => DefaultBlockParsers[n]),\n  Object.keys(DefaultBlockParsers).map(n => DefaultLeafBlocks[n]),\n  Object.keys(DefaultBlockParsers),\n  DefaultEndLeaf,\n  DefaultSkipMarkup,\n  Object.keys(DefaultInline).map(n => DefaultInline[n]),\n  Object.keys(DefaultInline),\n  []\n)\n", "import { Type } from \"../lezer-parser-markdown/markdown\";\n\nconst MarkdownSVG = \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"16\\\" height=\\\"16\\\" fill=\\\"currentColor\\\" class=\\\"bi bi-markdown\\\"><path d=\\\"M14 3a1 1 0 0 1 1 1v8a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h12zM2 2a2 2 0 0 0-2 2v8a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V4a2 2 0 0 0-2-2H2z\\\"/><path fill-rule=\\\"evenodd\\\" d=\\\"M9.146 8.146a.5.5 0 0 1 .708 0L11.5 9.793l1.646-1.647a.5.5 0 0 1 .708.708l-2 2a.5.5 0 0 1-.708 0l-2-2a.5.5 0 0 1 0-.708z\\\"/><path fill-rule=\\\"evenodd\\\" d=\\\"M11.5 5a.5.5 0 0 1 .5.5v4a.5.5 0 0 1-1 0v-4a.5.5 0 0 1 .5-.5z\\\"/><path d=\\\"M3.56 11V7.01h.056l1.428 3.239h.774l1.42-3.24h.056V11h1.073V5.001h-1.2l-1.71 3.894h-.039l-1.71-3.894H2.5V11h1.06z\\\"/></svg>\";\n\nconst ATXHeading1 = `<?xml version=\"1.0\" standalone=\"no\"?><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg t=\"1552895621502\" class=\"icon\" style=\"\" viewBox=\"0 0 1024 1024\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" p-id=\"6506\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"15\" height=\"15\"><defs><style type=\"text/css\"></style></defs><path d=\"M832.512 453.632h32.768V819.2h-41.984V504.832c-23.04 23.552-51.712 39.936-86.016 50.176v-41.984c16.384-4.608 33.792-11.776 51.2-22.016 17.408-11.264 31.744-23.552 44.032-37.376zM51.2 153.6h51.2v306.944h461.2608V153.6H614.4v665.6h-50.7392v-306.4832H102.4V819.2H51.2z\" fill=\"#000000\" p-id=\"6507\"></path></svg>`;\nconst ATXHeading2 = `<?xml version=\"1.0\" standalone=\"no\"?><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg t=\"1552895618032\" class=\"icon\" style=\"\" viewBox=\"0 0 1024 1024\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" p-id=\"6397\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"15\" height=\"15\"><defs><style type=\"text/css\"></style></defs><path d=\"M822.272 446.464c33.792 0 61.44 9.728 83.456 29.184 21.504 19.456 32.768 45.568 32.768 77.312s-12.288 60.416-35.84 86.016c-12.8 13.312-37.888 33.28-75.776 58.88-46.592 31.232-73.216 59.392-79.872 83.968h192V819.2h-243.712c0-33.28 11.776-63.488 36.352-90.624 14.336-16.384 40.448-38.4 79.36-65.024 28.672-20.48 47.616-35.328 57.344-45.568 18.432-19.968 28.16-41.984 28.16-65.536 0-22.528-6.656-39.424-19.968-51.712s-32.256-18.432-55.808-18.432c-25.088 0-44.544 8.192-57.856 25.6-14.336 16.384-22.016 40.96-22.528 73.216h-41.984c0-40.96 11.776-73.728 34.304-97.792 22.528-24.576 52.736-36.864 89.6-36.864zM51.2 153.6h51.2v306.944h461.2608V153.6H614.4v665.6h-50.7392v-306.4832H102.4V819.2H51.2z\" fill=\"#000000\" p-id=\"6398\"></path></svg>`\nconst ATXHeading3 = `<?xml version=\"1.0\" standalone=\"no\"?><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg t=\"1552895609006\" class=\"icon\" style=\"\" viewBox=\"0 0 1024 1024\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" p-id=\"6179\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"15\" height=\"15\"><defs><style type=\"text/css\"></style></defs><path d=\"M820.736 446.464c34.816 0 63.488 8.704 84.992 26.624 20.992 17.92 31.744 41.984 31.744 72.704 0 40.96-19.968 68.608-59.904 81.92 21.504 6.656 37.888 16.896 49.152 31.232 12.288 14.336 18.432 32.256 18.432 53.76 0 33.28-11.776 60.416-34.816 81.408-23.552 21.504-54.272 32.256-92.16 32.256-34.816 0-62.976-9.216-84.992-26.624-26.112-21.504-40.448-52.736-43.52-93.696h42.496c1.024 28.672 10.752 50.688 28.672 65.536 15.36 12.288 34.304 18.944 57.344 18.944 26.112 0 47.104-7.68 62.976-22.528 14.336-14.336 22.016-32.256 22.016-53.76 0-22.016-7.168-38.912-21.504-51.2-14.336-12.288-33.792-17.92-59.392-17.92h-29.696v-32.768h28.16c24.576 0 43.008-5.632 55.808-16.384 12.8-11.264 19.456-27.136 19.456-47.616s-6.656-36.352-18.944-47.616c-13.312-12.288-32.256-17.92-55.808-17.92-24.576 0-43.52 6.144-57.344 19.456-14.336 13.312-22.528 32.256-25.088 56.832h-41.472c3.072-35.328 16.384-62.976 38.912-82.944 21.504-19.968 49.664-29.696 84.48-29.696zM51.2 153.6h51.2v306.944h461.2608V153.6H614.4v665.6h-50.7392v-306.4832H102.4V819.2H51.2z\" fill=\"#000000\" p-id=\"6180\"></path></svg>`;\nconst ATXHeading4 = `<?xml version=\"1.0\" standalone=\"no\"?><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg t=\"1552895416338\" class=\"icon\" style=\"\" viewBox=\"0 0 1024 1024\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" p-id=\"3654\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"15\" height=\"15\"><defs><style type=\"text/css\"></style></defs><path d=\"M834.8672 692.4288v-162.2528l-114.7904 162.304h114.7904zM835.584 819.2v-87.5008h-156.9792v-44.032l163.9936-227.4816h37.9904v232.2432h52.736v39.2704H880.64V819.2h-45.0048zM51.2 153.6h51.2v306.944h461.2608V153.6H614.4v665.6h-50.7392v-306.4832H102.4V819.2H51.2z\" fill=\"#000000\" p-id=\"3655\"></path></svg>`;\nconst ATXHeading5 = `<?xml version=\"1.0\" standalone=\"no\"?><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg t=\"1552895409750\" class=\"icon\" style=\"\" viewBox=\"0 0 1024 1024\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" p-id=\"3545\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"15\" height=\"15\"><defs><style type=\"text/css\"></style></defs><path d=\"M728.832 727.9616c3.0208 25.6512 14.9504 43.4176 35.7888 53.248 10.6496 4.9664 22.9888 7.4752 36.9664 7.4752 26.6752 0 46.4384-8.4992 59.2384-25.4976 12.8512-16.9984 19.2512-35.84 19.2512-56.4736 0-25.0368-7.5776-44.3392-22.8352-58.0096a79.36 79.36 0 0 0-54.8864-20.48c-15.5136 0-28.7744 2.9696-39.8848 8.96-11.0592 6.0416-20.5312 14.336-28.3648 25.0368l-39.0144-2.2528 27.2384-192.768h186.0096v43.52h-152.2176l-15.2576 99.4816c8.2944-6.3488 16.2304-11.1104 23.7568-14.2336 13.312-5.5296 28.7232-8.2432 46.2336-8.2432 32.8192 0 60.672 10.5472 83.456 31.744 22.8864 21.1456 34.304 47.9744 34.304 80.4864 0 33.792-10.496 63.6416-31.3856 89.4976-20.9408 25.856-54.272 38.7584-100.1472 38.7584a127.488 127.488 0 0 1-77.312-24.6272c-22.4768-16.384-35.0208-41.6256-37.6832-75.6224h46.7456zM51.2 153.6h51.2v306.944h461.2608V153.6H614.4v665.6h-50.7392v-306.4832H102.4V819.2H51.2z\" fill=\"#000000\" p-id=\"3546\"></path></svg>`;\nconst ATXHeading6 = `<?xml version=\"1.0\" standalone=\"no\"?><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg t=\"1552895401625\" class=\"icon\" style=\"\" viewBox=\"0 0 1024 1024\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" p-id=\"3436\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"15\" height=\"15\"><defs><style type=\"text/css\"></style></defs><path d=\"M815.36 459.7248c39.9872 0 67.84 10.3424 83.6096 31.0784 15.7696 20.7872 23.6544 42.1376 23.6544 64.1536h-44.544c-2.6624-14.1824-6.912-25.2416-12.7488-33.28-10.8032-15.0016-27.2384-22.4768-49.2544-22.4768-25.1392 0-45.1584 11.6224-59.9552 34.8672-14.848 23.2448-23.0912 56.5248-24.7808 99.84a97.792 97.792 0 0 1 39.0144-33.9456c14.336-6.656 30.3104-10.0352 47.9744-10.0352a116.736 116.736 0 0 1 78.5408 28.7744c22.3232 19.1488 33.4848 47.7696 33.4848 85.76a130.048 130.048 0 0 1-31.744 86.3744c-21.1968 25.088-51.3536 37.632-90.5216 37.632-33.4848 0-62.4128-12.7488-86.7328-38.144-24.32-25.3952-36.5056-68.1984-36.5056-128.3584 0-44.544 5.4272-82.2784 16.2304-113.2544 20.8384-59.392 58.9312-88.9856 114.2784-88.9856z m-3.2768 328.704c23.7056 0 41.3696-7.936 53.1456-23.8592 11.776-15.872 17.6128-34.7136 17.6128-56.3712 0-18.3296-5.2224-35.7888-15.7184-52.3776-10.5472-16.5888-29.5936-24.8832-57.2928-24.8832-19.3024 0-36.2496 6.4512-50.8416 19.2512-14.592 12.8-21.9136 32.1536-21.9136 58.0096 0 22.6816 6.656 41.728 19.9168 57.1392 13.2096 15.36 31.5904 23.0912 55.0912 23.0912zM51.2 153.6h51.2v306.944h461.2608V153.6H614.4v665.6h-50.7392v-306.4832H102.4V819.2H51.2z\" fill=\"#000000\" p-id=\"3437\"></path></svg>`;\n\nconst Link = `<?xml version=\"1.0\" standalone=\"no\"?><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg t=\"1552895479773\" class=\"icon\" style=\"\" viewBox=\"0 0 1024 1024\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" p-id=\"4425\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"15\" height=\"15\"><defs><style type=\"text/css\"></style></defs><path d=\"M487.936 570.2144l-33.8432 38.4-34.048-30.208a227.1744 227.1744 0 0 1 0-321.28l81.408-81.4592a227.1744 227.1744 0 1 1 321.3312 321.28l-81.408 81.4592-36.2496-36.1984L786.5856 460.8a176.0256 176.0256 0 0 0-248.8832-248.9344L456.192 293.2736c-68.7616 68.7616-68.7616 180.224-1.1776 247.8592l32.9216 29.0816z m21.3504-140.8l32.512-39.6288 36.608 30.208a227.1744 227.1744 0 0 1 0 321.3312l-81.408 81.4592A227.1744 227.1744 0 1 1 175.616 501.504l81.408-81.4592 36.2496 36.1984-81.4592 81.408a175.9744 175.9744 0 1 0 248.8832 248.9344l81.4592-81.408c68.7616-68.7616 68.7616-180.224 1.8944-247.296l-34.816-28.4672z\" fill=\"#000000\" p-id=\"4426\"></path></svg>`;\n\nconst Table = '<?xml version=\"1.0\" standalone=\"no\"?><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg t=\"1552895574874\" class=\"icon\" style=\"\" viewBox=\"0 0 1024 1024\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" p-id=\"5633\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"15\" height=\"15\"><defs><style type=\"text/css\"></style></defs><path d=\"M512 819.2v-102.4H153.6v-51.2h358.4v-102.4H153.6v-51.2h358.4V409.6h51.2v102.4h358.4v51.2h-358.4v102.4h358.4v51.2h-358.4v102.4h307.2a51.2 51.2 0 0 0 51.2-51.2V409.6H153.6v358.4a51.2 51.2 0 0 0 51.2 51.2h307.2zM204.8 153.6h665.6a102.4 102.4 0 0 1 102.4 102.4v512a102.4 102.4 0 0 1-102.4 102.4H204.8a102.4 102.4 0 0 1-102.4-102.4V256a102.4 102.4 0 0 1 102.4-102.4zM153.6 358.4h768V256a51.2 51.2 0 0 0-51.2-51.2H204.8a51.2 51.2 0 0 0-51.2 51.2v102.4z\" fill=\"#000000\" p-id=\"5634\"></path></svg>';\n\nconst HorizontalRule = `<?xml version=\"1.0\" standalone=\"no\"?><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg t=\"1552895591003\" class=\"icon\" style=\"\" viewBox=\"0 0 1024 1024\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" p-id=\"5852\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"15\" height=\"15\"><defs><style type=\"text/css\"></style></defs><path d=\"M204.8 512h102.4v51.2H204.8zM460.8 512h102.4v51.2H460.8zM716.8 512h102.4v51.2h-102.4zM153.6 819.2h716.8v51.2H153.6zM153.6 204.8h716.8v51.2H153.6z\" fill=\"#000000\" p-id=\"5853\"></path></svg>`;\n\nconst Code = `<?xml version=\"1.0\" standalone=\"no\"?><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg t=\"1552896744699\" class=\"icon\" style=\"\" viewBox=\"0 0 1024 1024\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" p-id=\"3439\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"15\" height=\"15\"><defs><style type=\"text/css\"></style></defs><path d=\"M212.9408 217.5488h45.9264v41.9328h-37.2736c-29.2864 0-43.9296 15.9744-43.9296 49.2544v138.4448c0 39.936-18.6368 67.2256-54.5792 81.2032 35.9424 14.6432 54.5792 41.9328 54.5792 81.2032v139.1104c0 31.9488 14.6432 48.5888 43.9296 48.5888h37.2736v41.9328h-45.9264c-27.2896 0-48.5888-8.6528-63.232-25.9584-14.6432-15.9744-21.2992-37.9392-21.2992-65.8944v-135.7824c0-19.968-4.6592-34.6112-12.6464-43.9296-9.3184-10.6496-26.624-16.64-50.5856-17.3056v-43.9296c23.9616-1.3312 41.2672-6.656 50.5856-17.3056 7.9872-9.3184 12.6464-23.9616 12.6464-43.9296V310.0672c0-27.9552 6.656-50.5856 21.2992-66.56 14.6432-17.3056 35.9424-25.9584 63.232-25.9584zM730.112 217.5488h45.9264c26.624 0 47.9232 8.6528 63.232 25.9584 13.9776 15.9744 21.2992 38.6048 21.2992 66.56v135.1168c0 19.968 3.9936 34.6112 12.6464 44.5952 9.3184 9.984 25.9584 15.3088 50.5856 16.64v43.9296c-24.6272 0.6656-41.2672 6.656-50.5856 17.3056-8.6528 9.3184-12.6464 23.9616-12.6464 43.9296v135.7824c0 27.9552-7.3216 49.92-21.2992 65.8944-15.3088 17.3056-36.608 25.9584-63.232 25.9584h-45.9264v-41.9328h37.2736c29.2864 0 43.9296-16.64 43.9296-48.5888v-139.1104c0-39.2704 17.9712-66.56 54.5792-81.2032-36.608-13.9776-54.5792-41.2672-54.5792-81.2032V308.736c0-33.28-14.6432-49.2544-43.9296-49.2544h-37.2736v-41.9328z\" fill=\"#000000\" p-id=\"3440\"></path><path d=\"M358.4 512m-51.2 0a51.2 51.2 0 1 0 102.4 0 51.2 51.2 0 1 0-102.4 0Z\" fill=\"#000000\" p-id=\"3441\"></path><path d=\"M512 512m-51.2 0a51.2 51.2 0 1 0 102.4 0 51.2 51.2 0 1 0-102.4 0Z\" fill=\"#000000\" p-id=\"3442\"></path><path d=\"M665.6 512m-51.2 0a51.2 51.2 0 1 0 102.4 0 51.2 51.2 0 1 0-102.4 0Z\" fill=\"#000000\" p-id=\"3443\"></path></svg>`;\nconst Blockquote = `<?xml version=\"1.0\" standalone=\"no\"?><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg t=\"1552895465429\" class=\"icon\" style=\"\" viewBox=\"0 0 1024 1024\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" p-id=\"4205\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"15\" height=\"15\"><defs><style type=\"text/css\"></style></defs><path d=\"M632.32 304.64c33.792 0 62.976 13.824 84.48 41.472 19.968 27.648 30.72 62.976 30.72 109.056 0 67.584-19.968 127.488-59.904 178.176-39.936 49.152-93.696 82.944-158.208 101.376v-76.8c39.936-13.824 72.192-35.328 96.768-66.048 23.04-32.256 33.792-66.048 33.792-102.912-6.144 3.072-18.432 4.608-33.792 4.608-26.112 0-47.616-9.216-66.048-27.648-18.432-18.432-27.648-39.936-27.648-66.048 0-29.184 9.216-52.224 29.184-69.12 16.896-18.432 39.936-26.112 70.656-26.112z m-302.592 0c33.792 0 61.44 13.824 82.944 41.472 19.968 27.648 30.72 62.976 30.72 109.056 0 67.584-19.968 127.488-59.904 178.176-39.936 49.152-93.696 82.944-158.208 101.376v-76.8c39.936-13.824 70.656-35.328 95.232-66.048 24.576-32.256 35.328-66.048 35.328-102.912-6.144 3.072-18.432 4.608-33.792 4.608-26.112 0-47.616-9.216-64.512-27.648-18.432-18.432-27.648-39.936-27.648-66.048 0-29.184 7.68-52.224 26.112-69.12 18.432-18.432 43.008-26.112 73.728-26.112z\" fill=\"#000000\" p-id=\"4206\"></path></svg>`;\nconst HTMLBlock = `<?xml version=\"1.0\" standalone=\"no\"?><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg t=\"1552895602111\" class=\"icon\" style=\"\" viewBox=\"0 0 1024 1024\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" p-id=\"6070\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"15\" height=\"15\"><defs><style type=\"text/css\"></style></defs><path d=\"M561.92 153.6h58.1632L452.2496 870.4H393.216l168.6528-716.8zM334.336 740.864l-36.1984 36.1984L24.064 502.9376 298.1376 228.864l36.1984 36.1984-237.8752 237.8752L334.336 740.864z m355.328 0l237.8752-237.9264-237.8752-237.8752 36.1984-36.1984 274.0736 274.0736-274.0736 274.1248-36.1984-36.1984z\" fill=\"#000000\" p-id=\"6071\"></path></svg>`;\n\nconst Image = `<?xml version=\"1.0\" standalone=\"no\"?><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg t=\"1552895535011\" class=\"icon\" style=\"\" viewBox=\"0 0 1024 1024\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" p-id=\"5304\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"15\" height=\"15\"><defs><style type=\"text/css\"></style></defs><path d=\"M204.8 204.8a51.2 51.2 0 0 0-51.2 51.2v563.2a51.2 51.2 0 0 0 51.2 51.2h614.4a51.2 51.2 0 0 0 51.2-51.2V256a51.2 51.2 0 0 0-51.2-51.2H204.8z m0-51.2h614.4a102.4 102.4 0 0 1 102.4 102.4v563.2a102.4 102.4 0 0 1-102.4 102.4H204.8a102.4 102.4 0 0 1-102.4-102.4V256a102.4 102.4 0 0 1 102.4-102.4z\" fill=\"#000000\" p-id=\"5305\"></path><path d=\"M142.6432 738.816l-36.352-36.0448 205.1584-206.8992 144.3328 146.2784-36.4544 35.9424-107.9808-109.4144zM358.4 435.2a76.8 76.8 0 1 1 0-153.6 76.8 76.8 0 0 1 0 153.6z m0-51.2a25.6 25.6 0 1 0 0-51.2 25.6 25.6 0 0 0 0 51.2z\" fill=\"#000000\" p-id=\"5306\"></path><path d=\"M673.3312 466.7392l-433.664 453.9392-37.0688-35.3792 469.504-491.4176 236.544 231.5776-35.7888 36.608z\" fill=\"#000000\" p-id=\"5307\"></path></svg>`;\n\nconst Plus = `<svg xmlns=\"http://www.w3.org/2000/svg\"  viewBox=\"0 0 24 24\" width=\"15\" height=\"15\"><path fill=\"#000000\" d=\"M 11 2 L 11 11 L 2 11 L 2 13 L 11 13 L 11 22 L 13 22 L 13 13 L 22 13 L 22 11 L 13 11 L 13 2 Z\"/></svg>`;\n\nconst Paragraph = `<?xml version=\"1.0\" standalone=\"no\"?><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg t=\"1552895582361\" class=\"icon\" style=\"\" viewBox=\"0 0 1024 1024\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" p-id=\"5742\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"15\" height=\"15\"><defs><style type=\"text/css\"></style></defs><path d=\"M409.6 512v51.2H307.2c-110.848 0-204.8-91.648-204.8-204.8s93.952-204.8 204.8-204.8h614.4v51.2H307.2C225.28 204.8 154.88 273.5616 153.6 358.4c1.28 84.8384 71.68 153.6 153.6 153.6h102.4z\" fill=\"#000000\" p-id=\"5743\"></path><path d=\"M358.4 153.6h51.2v716.8H358.4zM614.4 153.6h51.2v716.8h-51.2z\" fill=\"#000000\" p-id=\"5744\"></path></svg>`;\n\nconst BulletList = `<?xml version=\"1.0\" standalone=\"no\"?><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg t=\"1552895550303\" class=\"icon\" style=\"\" viewBox=\"0 0 1024 1024\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" p-id=\"5524\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"15\" height=\"15\"><defs><style type=\"text/css\"></style></defs><path d=\"M307.2 512h512v51.2H307.2zM307.2 819.2h614.4v51.2H307.2zM307.2 204.8h614.4v51.2H307.2zM102.4 153.6h102.4v102.4H102.4zM102.4 460.8h102.4v102.4H102.4zM102.4 768h102.4v102.4H102.4z\" fill=\"#000000\" p-id=\"5525\"></path></svg>`;\n\nconst OrderedList = `<?xml version=\"1.0\" standalone=\"no\"?><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><svg t=\"1552895614019\" class=\"icon\" style=\"\" viewBox=\"0 0 1024 1024\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" p-id=\"6288\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"15\" height=\"15\"><defs><style type=\"text/css\"></style></defs><path d=\"M307.2 512h512v51.2H307.2zM307.2 819.2h614.4v51.2H307.2zM307.2 204.8h614.4v51.2H307.2zM124.416 153.6h16.384v182.784h-20.992V179.2a97.792 97.792 0 0 1-43.008 25.088v-20.992c8.192-2.304 16.896-5.888 25.6-11.008 8.704-5.632 15.872-11.776 22.016-18.688zM130.56 428.032c16.896 0 30.72 4.864 41.728 14.592 10.752 9.728 16.384 22.784 16.384 38.656s-6.144 30.208-17.92 43.008c-6.4 6.656-18.944 16.64-37.888 29.44-23.296 15.616-36.608 29.696-39.936 41.984H188.928V614.4H67.072c0-16.64 5.888-31.744 18.176-45.312 7.168-8.192 20.224-19.2 39.68-32.512 14.336-10.24 23.808-17.664 28.672-22.784 9.216-9.984 14.08-20.992 14.08-32.768 0-11.264-3.328-19.712-9.984-25.856s-16.128-9.216-27.904-9.216c-12.544 0-22.272 4.096-28.928 12.8-7.168 8.192-11.008 20.48-11.264 36.608h-20.992c0-20.48 5.888-36.864 17.152-48.896 11.264-12.288 26.368-18.432 44.8-18.432zM129.792 735.232c17.408 0 31.744 4.352 42.496 13.312 10.496 8.96 15.872 20.992 15.872 36.352 0 20.48-9.984 34.304-29.952 40.96a48.128 48.128 0 0 1 24.576 15.616c6.144 7.168 9.216 16.128 9.216 26.88 0 16.64-5.888 30.208-17.408 40.704-11.776 10.752-27.136 16.128-46.08 16.128-17.408 0-31.488-4.608-42.496-13.312-13.056-10.752-20.224-26.368-21.76-46.848h21.248c0.512 14.336 5.376 25.344 14.336 32.768 7.68 6.144 17.152 9.472 28.672 9.472 13.056 0 23.552-3.84 31.488-11.264a36.6592 36.6592 0 0 0 11.008-26.88c0-11.008-3.584-19.456-10.752-25.6-7.168-6.144-16.896-8.96-29.696-8.96h-14.848v-16.384h14.08c12.288 0 21.504-2.816 27.904-8.192a30.1056 30.1056 0 0 0 9.728-23.808c0-10.24-3.328-18.176-9.472-23.808-6.656-6.144-16.128-8.96-27.904-8.96-12.288 0-21.76 3.072-28.672 9.728-7.168 6.656-11.264 16.128-12.544 28.416H68.096c1.536-17.664 8.192-31.488 19.456-41.472 10.752-9.984 24.832-14.848 42.24-14.848z\" fill=\"#000000\" p-id=\"6289\"></path></svg>`;\n\nconst Emoji = `<svg data-name=\"Layer 1\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 128 128\"><path d=\"M35.56 49.964a1.75 1.75 0 0 0 1.75-1.75 6.477 6.477 0 1 1 12.954 0 1.75 1.75 0 0 0 3.5 0 9.977 9.977 0 1 0-19.954 0 1.75 1.75 0 0 0 1.75 1.75zM75.986 49.964a1.75 1.75 0 0 0 1.75-1.75 6.477 6.477 0 1 1 12.954 0 1.75 1.75 0 0 0 3.5 0 9.977 9.977 0 1 0-19.954 0 1.75 1.75 0 0 0 1.75 1.75z\"/><path d=\"M64 4.75a59.863 59.863 0 1 0 59.863 59.863A59.931 59.931 0 0 0 64 4.75zm0 116.227a56.363 56.363 0 1 1 56.363-56.363A56.427 56.427 0 0 1 64 120.977z\"/><path d=\"M113.044 74.3a11.817 11.817 0 0 0-5.283-3.131c-.015 0-.027-.011-.042-.015h-.026a14.489 14.489 0 0 0-6.057-.516 1.75 1.75 0 1 0 .573 3.453 10.032 10.032 0 0 1 2.908.063 42.827 42.827 0 0 1-41.107 30.6h-.14a42.827 42.827 0 0 1-41.1-30.582 10.161 10.161 0 0 1 3.023-.081 1.75 1.75 0 1 0 .573-3.453 14.443 14.443 0 0 0-5.92.477 1.531 1.531 0 0 0-.717.225 11.576 11.576 0 0 0-4.773 2.96 1.75 1.75 0 1 0 2.558 2.389 7.271 7.271 0 0 1 1.924-1.441 46.324 46.324 0 0 0 44.432 33h.14a46.325 46.325 0 0 0 44.45-33.059 7.338 7.338 0 0 1 2.026 1.5 1.75 1.75 0 0 0 2.558-2.389z\"/></svg>`;\n// Define a mapping from Type enum to image paths\nexport const MarkdownTypeIcons: { [key: string]: string } = {\n    [Type[Type.Document]]: MarkdownSVG,\n    [Type[Type.CodeBlock]]: Code,\n    [Type[Type.FencedCode]]: Code,\n    [Type[Type.Blockquote]]: Blockquote,\n    [Type[Type.HorizontalRule]]: HorizontalRule,\n    [Type[Type.BulletList]]: BulletList,\n    [Type[Type.OrderedList]]: OrderedList,\n    [Type[Type.ListItem]]: '',\n    [Type[Type.ATXHeading1]]: ATXHeading1, // SVG String\n    [Type[Type.ATXHeading2]]: ATXHeading2,\n    [Type[Type.ATXHeading3]]: ATXHeading3,\n    [Type[Type.ATXHeading4]]: ATXHeading4,\n    [Type[Type.ATXHeading5]]: ATXHeading5,\n    [Type[Type.ATXHeading6]]: ATXHeading6,\n    [Type[Type.SetextHeading1]]: 'SHead1',\n    [Type[Type.SetextHeading2]]: 'SHead2',\n    [Type[Type.HTMLBlock]]: HTMLBlock,\n    [Type[Type.LinkReference]]: Link,\n    [Type[Type.Paragraph]]: Paragraph,\n    [Type[Type.CommentBlock]]: Code,\n    [Type[Type.ProcessingInstructionBlock]]: Code,\n    // Inline\n    [Type[Type.Escape]]: 'Esc',\n    [Type[Type.Entity]]: 'E',\n    [Type[Type.HardBreak]]: 'HB',\n    [Type[Type.Emphasis]]: 'E',\n    [Type[Type.StrongEmphasis]]: 'SE',\n    [Type[Type.Link]]: Link,\n    [Type[Type.Image]]: Image,\n    [Type[Type.InlineCode]]: 'IC',\n    [Type[Type.HTMLTag]]: 'HT',\n    [Type[Type.Comment]]: 'C',\n    [Type[Type.ProcessingInstruction]]: 'PI',\n    [Type[Type.URL]]: Link,\n    // Smaller tokens\n    [Type[Type.HeaderMark]]: '',\n    [Type[Type.QuoteMark]]: '',\n    [Type[Type.ListMark]]: '',\n    [Type[Type.LinkMark]]: '',\n    [Type[Type.EmphasisMark]]: '',\n    [Type[Type.CodeMark]]: '',\n    [Type[Type.CodeText]]: '',\n    [Type[Type.CodeInfo]]: '',\n    [Type[Type.LinkTitle]]: '',\n    [Type[Type.LinkLabel]]: '',\n\n    // Extension for custom string key\n    [\"Table\"]: Table,\n    [\"TableHeader\"]: '',\n    [\"TableRow\"]: '',\n    [\"TableCell\"]: '',\n    [\"TableDelimiter\"]: '',\n    [\"Emoji\"]: Emoji,\n    [\"\"]: Plus,\n};", "import {EditorView, showTooltip, Tooltip, TooltipView} from \"@codemirror/view\";\nimport {EditorState, Extension, StateEffect, StateField} from \"@codemirror/state\";\nimport EditorSelectionHelper from \"../codemirror-helper\";\n\n// \u5B9A\u4E49\u4E00\u4E2A StateEffect \u7528\u4E8E\u63A7\u5236 Tooltip \u7684\u663E\u793A\nconst toggleTooltipEffect = StateEffect.define<boolean>();\n// \u5B9A\u4E49\u4E00\u4E2A StateField \u6765\u7EF4\u62A4 Tooltip \u7684\u663E\u793A\u72B6\u6001\nconst tooltipDisplayField = StateField.define<boolean>({\n    create() {\n        return true; // \u9ED8\u8BA4\u663E\u793A Tooltip\n    },\n    update(value, tr) {\n        // \u5982\u679C\u4E8B\u52A1\u4E2D\u6709 toggleTooltipEffect\uFF0C\u90A3\u4E48\u4F7F\u7528\u8BE5\u6548\u679C\u7684\u503C\u66F4\u65B0\u72B6\u6001\n        for (const effect of tr.effects) {\n            if (effect.is(toggleTooltipEffect)) {\n                return effect.value;\n            }\n        }\n        // \u5982\u679C\u6CA1\u6709\u76F8\u5173\u6548\u679C\uFF0C\u4FDD\u6301\u5F53\u524D\u72B6\u6001\u4E0D\u53D8\n        return value;\n    }\n});\n\n// \u5B9A\u4E49\u4E00\u4E2A StateEffect \u6765\u8BBE\u7F6E\u6216\u6E05\u9664 Tooltip\nexport const setSelectionTooltip = StateEffect.define<Tooltip | null>();\n\n// \u521B\u5EFA\u4E00\u4E2A StateField \u6765\u8DDF\u8E2A Tooltip \u7684\u72B6\u6001\nconst selectionTooltipState = StateField.define<Tooltip | null>({\n    create: (state: EditorState) => null,\n    update: (value, tr) => {\n        if (tr.selection) {\n            // \u5F53\u9009\u62E9\u53D8\u5316\u65F6\uFF0C\u79FB\u9664 Tooltip\n            return null;\n        }\n        for (let effect of tr.effects) {\n            if (effect.is(setSelectionTooltip)) {\n                return effect.value;\n            }\n        }\n        return value;\n    },\n    provide: f => showTooltip.from(f)\n});\n\nclass TooltipActionView implements TooltipView {\n    dom: HTMLElement;\n    text: string;\n    view: EditorView;\n    offset: { x: number; y: number };\n    overlap: boolean;\n    resize: boolean;\n\n    constructor(text: string, view: EditorView) {\n        this.text = text;\n        this.view = view;\n        this.offset = {x: 0, y: 0};\n        this.overlap = false;\n        this.resize = false;\n\n        this.dom = document.createElement(\"div\");\n        this.dom.className = \"cm-tooltip-selection\";\n\n        // \u6DFB\u52A0\u4E00\u4E2A\u6309\u94AE\u7528\u4E8E Markdown \u52A0\u7C97\n        let boldButton = document.createElement(\"span\");\n        boldButton.textContent = \"Bold\";\n        boldButton.onclick = () => {\n            // \u6267\u884C Markdown \u52A0\u7C97\u547D\u4EE4\n            // \u6CE8\u610F\uFF1A\u8FD9\u91CC\u9700\u8981\u5B9E\u73B0\u5177\u4F53\u7684 Markdown \u5305\u88C5\u903B\u8F91\n            wrapWithMarkdown(view, text, \"**\");\n        };\n        this.dom.appendChild(boldButton);\n    }\n\n    destroy(): void {\n        this.dom.remove();\n    }\n\n    mount(view: EditorView): void {\n        this.view = view;\n    }\n}\n\n// Markdown \u5305\u88C5\u51FD\u6570\nfunction wrapWithMarkdown(view: EditorView, text: string, wrapper: string) {\n    const {from, to} = view.state.selection.main;\n    view.dispatch({\n        changes: [\n            {from, insert: wrapper},\n            {from: to, insert: wrapper}\n        ]\n    });\n}\n\n// \u751F\u6210 Tooltip \u7684\u51FD\u6570\nfunction getSelectionTooltip(state: EditorState): Tooltip | null {\n    const {ranges} = state.selection;\n    if (ranges.length !== 1 || ranges[0].empty) return null;\n    const {from, to} = state.selection.main;\n    const text = state.doc.sliceString(from, to);\n\n    // \u68C0\u67E5\u6587\u672C\u662F\u5426\u4E3A\u7A7A\u6216\u53EA\u5305\u542B\u7A7A\u767D\u5B57\u7B26\n    if (\n        !text\n        || text.trim().length === 0\n        || !EditorSelectionHelper.canApplyInlineMarkdown(state)\n    ) return null;\n\n    return {\n        pos: (from + to) / 2,\n        create: (view: EditorView) => new TooltipActionView(text, view),\n        above: true,\n        strictSide: true,\n        arrow: true\n    };\n}\n\n// \u521B\u5EFA\u4E00\u4E2A\u63D2\u4EF6\u6765\u76D1\u542C\u9009\u533A\u53D8\u5316\uFF0C\u6839\u636E tooltipDisplayField \u7684\u72B6\u6001\u6765\u51B3\u5B9A\u662F\u5426\u663E\u793A Tooltip\nconst selectionTooltipPlugin = EditorView.updateListener.of((update) => {\n    // \u53EA\u6709\u5F53 tooltipDisplayField \u4E3A true \u65F6\uFF0C\u624D\u5904\u7406 Tooltip \u7684\u663E\u793A\n\n\n    if (update.selectionSet && update.state.field(tooltipDisplayField)) {\n        const tooltip = getSelectionTooltip(update.state);\n        const effect = tooltip ? setSelectionTooltip.of(tooltip) : setSelectionTooltip.of(null);\n        update.view.dispatch({effects: effect});\n    }\n});\n\nconst selectionTooltipBaseTheme = EditorView.baseTheme({\n    \".cm-tooltip.cm-tooltip-selection\": {\n        backgroundColor: \"#66b\",\n        color: \"white\",\n        border: \"none\",\n        padding: \"2px 7px\",\n        borderRadius: \"4px\",\n        \"& .cm-tooltip-arrow:before\": {\n            borderTopColor: \"#66b\"\n        },\n        \"& .cm-tooltip-arrow:after\": {\n            borderTopColor: \"transparent\"\n        }\n    }\n});\n\n\n// \u6267\u884C\u5E26\u6709\u9009\u4E2D\u7684\u64CD\u4F5C,\u4E0D\u663E\u793A Tooltip\nexport function changeWithTooltipDisabled(view: EditorView, callback: () => void) {\n    // \u5148\u8BB0\u5F55\u539F\u6709\u7684 tooltip \u663E\u793A\u72B6\u6001\n    const originallyShowingTooltips = view.state.field(tooltipDisplayField);\n    // \u5982\u679C\u539F\u672C\u5C31\u7981\u7528\u4E86\uFF0C\u76F4\u63A5\u6389\u7528\u56DE\u8C03\u51FD\u6570\n    if (!originallyShowingTooltips) {\n        callback();\n        return;\n    }\n    // \u7981\u7528 tooltips\n    view.dispatch({\n        effects: toggleTooltipEffect.of(false)\n    });\n    // \u6267\u884C\u9700\u8981\u7684\u64CD\u4F5C\n    callback();\n\n    // \u6062\u590D\u539F\u6709\u7684 tooltips \u663E\u793A\u72B6\u6001\n    view.dispatch({\n        effects: toggleTooltipEffect.of(originallyShowingTooltips)\n    });\n}\n\n// \u6700\u7EC8\u7684\u6269\u5C55\u51FD\u6570\nexport function selectionTooltipAction(): Extension {\n    return [\n        tooltipDisplayField,\n        selectionTooltipPlugin,\n        selectionTooltipState,\n        selectionTooltipBaseTheme];\n}\n\n\n", "import {EditorView, gutter, GutterMarker, ViewPlugin, ViewUpdate} from \"@codemirror/view\";\nimport {RangeSet, RangeSetBuilder} from \"@codemirror/state\";\nimport tippy from \"tippy.js\";\nimport EditorSelectionHelper from \"../codemirror-helper\";\nimport {syntaxTree} from \"@codemirror/language\";\nimport {NodeType, SyntaxNodeRef} from \"@lezer/common\";\nimport {MarkdownTypeIcons} from \"./icons\";\nimport {fromMarkdown } from \"mdast-util-from-markdown\";\nimport { visit } from 'unist-util-visit';\nimport {Heading} from \"mdast-util-from-markdown/lib\";\nimport {toMarkdown} from \"mdast-util-to-markdown\";\nimport {changeWithTooltipDisabled} from \"../codemirror-tooltips-action\";\nfunction generateRandomDomId(prefix = '') {\n    return prefix + '-' + Date.now().toString(36) + '-' + Math.random().toString(36).slice(2, 11);\n}\nclass MarkdownMarker extends GutterMarker {\n    private menu: HTMLElement;\n    constructor(readonly type: NodeType) {\n        super()\n        this.menu = this.createMenu(this.type);\n    }\n    createMenu(type: NodeType): HTMLElement {\n        // \u6839\u636E\u7C7B\u578B\u521B\u5EFA\u83DC\u5355\n        const menuContent = `\n            <div class=\"menu menu-column w-200px\">\n                <div class=\"menu-item\">\n                    <span class=\"menu-link\">\n                        <span class=\"menu-icon\">\n                            <i class=\"ki-outline ki-notification-on fs-3\"></i>\n                        </span>\n                        <span class=\"menu-title\" data-cmd=\"bold\">${type.name} Link</span>\n                    </span>\n                </div>\n            </div>\n        `;\n        const menu = document.createElement('div');\n        menu.className = \"popover popover-menu popover-md shadow-0\"\n        menu.innerHTML = menuContent;\n        return menu;\n    }\n    modifyLineContent(view:EditorView, actionElement: HTMLElement, pos: number) {\n        // \u5728\u6B64\u5904\u4FEE\u6539\u5F53\u524D\u884C\u7684\u5185\u5BB9\n        const line = view.state.doc.lineAt(pos);\n        console.log(\"line content: \", line.text);\n        console.log(\"line number: \", line.number);\n        console.log(\"actionElement: \", actionElement);\n        const tree = fromMarkdown(line.text);\n        console.log(\"line tree\", tree);\n        const heading = tree.children[0];\n        console.log(\"heading\", heading);\n\n        let isHeanding = false;\n\n        visit(tree, 'heading', (node) => {\n            if (node.type === 'heading') {\n                // Cast node to a Heading node to access the depth property\n                const heading = node as Heading;\n                heading.depth = 2;\n                // \u904D\u5386\u6807\u9898\u4E0B\u7684\u6240\u6709\u5B50\u8282\u70B9\n                visit(heading, 'text', (textNode) => {\n                    if (textNode.type === 'text') {\n                        // \u8FD9\u91CC\u53EF\u4EE5\u66F4\u6539\u6587\u672C\u8282\u70B9\u7684\u503C\n                        textNode.value = '\u65B0\u7684\u6807\u9898\u6587\u672C';\n                    }\n                });\n                isHeanding = true;\n            }\n        });\n\n        if (isHeanding) {\n            const markdownString = toMarkdown(tree);\n            const insertString = markdownString.endsWith('\\n') ? markdownString.slice(0, -1) : markdownString;\n            let changeByRange = {\n                changes: [{ from: line.from, to: line.to, insert: insertString }],\n                /* \u4FEE\u6539\u4E4B\u540E\u5149\u6807\u79FB\u52A8\u5230\u7684\u4F4D\u7F6E */\n                selection: { anchor: line.from, head: line.from+insertString.length },\n            }\n            changeWithTooltipDisabled(view, () => {\n                view.dispatch(changeByRange);\n            });\n\n        }\n    }\n    showMenu(element: HTMLElement, view: EditorView, pos: number) {\n        tippy(element, {\n            appendTo: document.body,\n            popperOptions: { strategy: 'fixed'},\n            placement: 'bottom',\n            arrow: true,\n            animation: 'fade',\n            content: this.menu,\n            allowHTML: true,\n            interactive: true,\n            trigger: 'manual',\n            theme: 'light',\n            onShow: (instance) => {\n                const menuElement = instance.popper.querySelector('.menu-link');\n                if (menuElement) {\n                    menuElement.addEventListener('click', (event) => {\n                        const cmdElement = event.target as HTMLElement;\n                        this.modifyLineContent(view, cmdElement, pos);\n                    });\n                }\n            }\n        }).show();\n    }\n    eq(other: MarkdownMarker) {\n        return this.type == other.type\n    }\n    toDOM(view: EditorView) {\n        let span = document.createElement(\"span\")\n        span.id = generateRandomDomId('cm-gutter-markdown');\n        span.style.cursor = 'pointer';\n        // span.textContent = this.type;\n        span.innerHTML = MarkdownTypeIcons[this.type.name];\n        span.className = `cm-gutter-${this.type.name}`;\n        // \u6DFB\u52A0\u70B9\u51FB\u4E8B\u4EF6\u76D1\u542C\u5668\n        // span.addEventListener('click', (event) => {\n        //     event.preventDefault();\n        //     const gutterElement = event.currentTarget as HTMLElement;\n        //     if (gutterElement !== null) {\n        //         // \u83B7\u53D6\u70B9\u51FB\u5143\u7D20\u7684\u5750\u6807\n        //         const rect = gutterElement.getBoundingClientRect();\n        //         const x = rect.left;\n        //         const y = event.clientY;\n        //\n        //         // \u5C06\u5C4F\u5E55\u5750\u6807\u8F6C\u6362\u4E3A\u6587\u6863\u4F4D\u7F6E\n        //         const pos = view.posAtCoords({x, y})\n        //         if (pos !== null) {\n        //             this.showMenu(gutterElement, view, pos);\n        //         }\n        //     }\n        // });\n        return span\n    }\n}\n\nconst markdownGutterTheme = EditorView.baseTheme({\n    \".cm-markdownGutter\": {\n        paddingLeft: \"0.25rem !important\",\n    },\n    \".cm-markdownGutter .cm-gutterElement\": {\n        display: 'inline-block',\n        verticalAlign: 'middle',\n        marginLeft: '0.2ch',\n    },\n    '.cm-markdownGutter .cm-gutterElement span': {\n\n    },\n    \"&light .cm-markdownGutter\": { backgroundColor: \"#ffffff\" },\n    \"&dark .cm-markdownGutter\": { backgroundColor: \"#1e1e2d\" },\n    '&dark .cm-markdownGutter .cm-gutterElement svg path': { fill: \"#ffffff\"},\n});\n\nexport const markdownMarkersPlugin = ViewPlugin.fromClass(class {\n    markers: RangeSet<MarkdownMarker>\n    constructor(view: EditorView) {\n        this.markers = this.buildMarkers(view)\n    }\n    update(update: ViewUpdate) {\n        if (update.docChanged || update.viewportChanged) {\n            this.markers = this.buildMarkers(update.view)\n        }\n    }\n    buildMarkers(view: EditorView) {\n        const builder = new RangeSetBuilder<MarkdownMarker>();\n        let lastLineStart = -1; // Track the start of the last line processed\n        const tree = syntaxTree(view.state);\n        tree.iterate({\n            from: view.viewport.from,\n            to: view.viewport.to,\n            enter: (node: SyntaxNodeRef) => {\n                let from = node.from, to = node.to;\n                if (node.type.isTop) return;\n                // Calculate the current line start position\n                let lineNumber = view.state.doc.lineAt(from).number;\n                // \u53EA\u8981\u7B2C\u4E00\u4E2A\u8282\u70B9\n                if (lineNumber > lastLineStart) {\n                    // Update the last line start position\n                    lastLineStart = lineNumber;\n                    // console.log(`node: ${node.name}, node.type: ${node.type.name}, node.from: ${node.from}, node.to: ${node.to}`);\n                    // \u5904\u7406\u6807\u9898\u8282\u70B9\n                    builder.add(from, to, new MarkdownMarker(node.type));\n                }\n            }\n        });\n        return builder.finish();\n    }\n});\nexport function markdownGutter(config = {}) {\n    return [\n        markdownMarkersPlugin,\n        gutter({\n            class: \"cm-markdownGutter\",\n            renderEmptyElements: true,\n            markers(view) {\n                return view.plugin(markdownMarkersPlugin)?.markers || RangeSet.empty\n            },\n            lineMarker(view, line, otherMarkers) {\n                const lineNumber = view.state.doc.lineAt(line.from).number\n                const currentLine = EditorSelectionHelper.getCurrentLine(view.state).lineNumber\n                const isMultiLineSelection = EditorSelectionHelper.isMultiLineSelection(view.state);\n                if (currentLine === lineNumber && line.length === 0 && !isMultiLineSelection ) {\n                    const hasMarkdownMarker = otherMarkers.some(marker => {\n                        if (marker instanceof MarkdownMarker) {\n                            return true;\n                        }\n                    });\n                    if (hasMarkdownMarker) return null;\n                    return new MarkdownMarker(NodeType.none);\n                }\n                return null;\n            }\n        }),\n        markdownGutterTheme\n    ];\n}", "import {\n    Decoration, DecorationSet, EditorView, MatchDecorator,\n    ViewPlugin, ViewUpdate, WidgetType\n} from \"@codemirror/view\"\nconst placeholderMatcher = new MatchDecorator({\n    regexp: /\\[\\[(@[^]+?)\\]\\]/g,\n    decoration: match => Decoration.replace({\n        widget: new PlaceholderWidget(match[1]),\n    })\n});\n\nclass PlaceholderWidget extends WidgetType {\n    content: string;\n\n    constructor(content: string) {\n        super();\n        this.content = content;\n    }\n\n    eq(other: PlaceholderWidget) {\n        return this.content == other.content\n    }\n\n    toDOM() {\n        let span = document.createElement(\"span\");\n        if (!this.content) return span;\n        span.className = \"badge badge-light-success me-1 \";\n        span.textContent = this.content;\n        return span;\n    }\n\n    ignoreEvent() {\n        return true;\n    }\n\n    destroy(dom: HTMLElement) {\n        dom.remove();\n    }\n}\n\n\n\nconst placeholdersPlugin = ViewPlugin.fromClass(\n    class {\n        placeholders: DecorationSet;\n        constructor(view: EditorView) {\n            this.placeholders = placeholderMatcher.createDeco(view);\n        }\n        update(update: ViewUpdate) {\n            this.placeholders = placeholderMatcher.updateDeco(update, this.placeholders);\n        }\n    }, {\n        decorations: (instance: any) => {\n            return instance.placeholders;\n        },\n        provide: (plugin: any) =>\n            EditorView.atomicRanges.of((view: any) => {\n                return view.plugin(plugin)?.placeholders || Decoration.none;\n            }),\n    }\n);\n\nexport {placeholdersPlugin}", "import {\n    Decoration, DecorationSet, EditorView, MatchDecorator,\n    ViewPlugin, ViewUpdate, WidgetType\n} from \"@codemirror/view\"\n\nimport {SearchIndex} from 'emoji-mart'\n\nconst placeholderMatcher = new MatchDecorator({\n    regexp: /\\:([^]+?)\\:/g,\n    decoration: match => Decoration.replace({\n        widget: new PlaceholderWidget(match[1]),\n    })\n});\n\nclass PlaceholderWidget extends WidgetType {\n    content: string;\n\n    constructor(content: string) {\n        super();\n        this.content = content;\n    }\n\n    eq(other: PlaceholderWidget) {\n        return this.content == other.content\n    }\n\n    toDOM() {\n        const span = document.createElement(\"span\");\n        span.className = \"cm-emoji\";\n\n        if (this.content) {\n            SearchIndex.search(this.content).then((emojis:any) => {\n                if (emojis[0]){\n                    span.textContent =  emojis[0].skins[0].native;\n                } else {\n                    // \u5982\u679C\u627E\u4E0D\u5230\u8868\u60C5\u7B26\u53F7\uFF0C\u8FD4\u56DE\u539F\u59CB\u5185\u5BB9\n                    span.textContent = `:${this.content}:`;\n                }\n            }).catch(() => {\n                // \u5982\u679C\u53D1\u751F\u9519\u8BEF\uFF0C\u4E5F\u8FD4\u56DE\u539F\u59CB\u5185\u5BB9\n                span.textContent = `:${this.content}:`;\n            });\n        }\n        return span;\n    }\n\n    ignoreEvent() {\n        return true;\n    }\n\n    destroy(dom: HTMLElement) {\n        dom.remove();\n    }\n}\n\nconst emojiPlaceholdersPlugin = ViewPlugin.fromClass(\n    class {\n        placeholders: DecorationSet;\n        constructor(view: EditorView) {\n            this.placeholders = placeholderMatcher.createDeco(view);\n        }\n        update(update: ViewUpdate) {\n            this.placeholders = placeholderMatcher.updateDeco(update, this.placeholders);\n        }\n    }, {\n        decorations: (instance: any) => {\n            return instance.placeholders;\n        },\n        provide: (plugin: any) =>\n            EditorView.atomicRanges.of((view: any) => {\n                return view.plugin(plugin)?.placeholders || Decoration.none;\n            }),\n    }\n);\n\nexport {emojiPlaceholdersPlugin}\n", "import { CompletionContext, Completion } from '@codemirror/autocomplete';\n\nexport function mentionSuggestions(data: Completion[] = [], keyword: string = \"@\") {\n    return (context: CompletionContext) => {\n        let regexp = new RegExp(keyword + \"(\\\\w+)?\");\n        let word = context.matchBefore(regexp);\n        if (!word) return null;\n        if (word && word.from == word.to && !context.explicit) {\n            return null;\n        }\n        return {\n            from: word?.from!,\n            options: [...data],\n            filter: true,\n        };\n    };\n}\n\n", "import { CompletionContext, Completion } from '@codemirror/autocomplete';\nimport {init, SearchIndex} from 'emoji-mart'\nimport data from \"@emoji-mart/data\";\n\nexport async function initEmojiData() {\n    return await init({data});\n}\nexport function emojiSuggestions(keyword: string = \":\") {\n    return async (context: CompletionContext) => {\n        let regexp = new RegExp(keyword + \"(\\\\w+)?\");\n        let word = context.matchBefore(regexp);\n        if (!word) return null;\n        if (word && word.from == word.to && !context.explicit) {\n            return null;\n        }\n        if (word.text.length > 1 && word.text.startsWith(keyword)) word.text = word.text.substring(1)\n        const emojis = await SearchIndex.search(word.text);\n        return {\n            from: word?.from!,\n            options: emojis.map((emoji:any) => {\n                return {\n                    label: emoji.skins[0].shortcodes,\n                    detail: emoji.skins[0].shortcodes,\n                    apply: emoji.skins[0].shortcodes,\n                    displayLabel: emoji.skins[0].native,\n                };\n            }),\n            filter: true,\n        };\n    };\n}\n", "import {\n    ViewPlugin,\n    EditorView,\n    Decoration,\n    DecorationSet,\n    MatchDecorator,\n    WidgetType,\n    ViewUpdate,\n} from '@codemirror/view';\nimport { Extension, Range } from '@codemirror/state';\n\nconst pathStr = `<svg viewBox=\"0 0 1024 1024\" width=\"16\" height=\"16\" fill=\"#3E97FF\"><path d=\"M607.934444 417.856853c-6.179746-6.1777-12.766768-11.746532-19.554358-16.910135l-0.01228 0.011256c-6.986111-6.719028-16.47216-10.857279-26.930349-10.857279-21.464871 0-38.864146 17.400299-38.864146 38.864146 0 9.497305 3.411703 18.196431 9.071609 24.947182l-0.001023 0c0.001023 0.001023 0.00307 0.00307 0.005117 0.004093 2.718925 3.242857 5.953595 6.03853 9.585309 8.251941 3.664459 3.021823 7.261381 5.997598 10.624988 9.361205l3.203972 3.204995c40.279379 40.229237 28.254507 109.539812-12.024871 149.820214L371.157763 796.383956c-40.278355 40.229237-105.761766 40.229237-146.042167 0l-3.229554-3.231601c-40.281425-40.278355-40.281425-105.809861 0-145.991002l75.93546-75.909877c9.742898-7.733125 15.997346-19.668968 15.997346-33.072233 0-23.312962-18.898419-42.211381-42.211381-42.211381-8.797363 0-16.963347 2.693342-23.725354 7.297197-0.021489-0.045025-0.044002-0.088004-0.066515-0.134053l-0.809435 0.757247c-2.989077 2.148943-5.691629 4.669346-8.025791 7.510044l-78.913281 73.841775c-74.178443 74.229608-74.178443 195.632609 0 269.758863l3.203972 3.202948c74.178443 74.127278 195.529255 74.127278 269.707698 0l171.829484-171.880649c74.076112-74.17435 80.357166-191.184297 6.282077-265.311575L607.934444 417.856853z\"></path><path d=\"M855.61957 165.804257l-3.203972-3.203972c-74.17742-74.178443-195.528232-74.178443-269.706675 0L410.87944 334.479911c-74.178443 74.178443-78.263481 181.296089-4.085038 255.522628l3.152806 3.104711c3.368724 3.367701 6.865361 6.54302 10.434653 9.588379 2.583848 2.885723 5.618974 5.355985 8.992815 7.309476 0.025583 0.020466 0.052189 0.041956 0.077771 0.062422l0.011256-0.010233c5.377474 3.092431 11.608386 4.870938 18.257829 4.870938 20.263509 0 36.68962-16.428158 36.68962-36.68962 0-5.719258-1.309832-11.132548-3.645017-15.95846l0 0c-4.850471-10.891048-13.930267-17.521049-20.210297-23.802102l-3.15383-3.102664c-40.278355-40.278355-24.982998-98.79612 15.295358-139.074476l171.930791-171.830507c40.179095-40.280402 105.685018-40.280402 145.965419 0l3.206018 3.152806c40.279379 40.281425 40.279379 105.838513 0 146.06775l-75.686796 75.737962c-10.296507 7.628748-16.97358 19.865443-16.97358 33.662681 0 23.12365 18.745946 41.87062 41.87062 41.87062 8.048303 0 15.563464-2.275833 21.944801-6.211469 0.048095 0.081864 0.093121 0.157589 0.141216 0.240477l1.173732-1.083681c3.616364-2.421142 6.828522-5.393847 9.529027-8.792247l79.766718-73.603345C929.798013 361.334535 929.798013 239.981676 855.61957 165.804257z\"></path></svg>`;\nconst defaultRegexp = /\\b((?:https?|ftp):\\/\\/[^\\s/$.?#].[^\\s]*)\\b/gi;\nexport interface HyperLinkState {\n    at: number;\n    url: string;\n    anchor: HyperLinkExtensionOptions['anchor'];\n}\n\nclass HyperLinkIcon extends WidgetType {\n    private readonly state: HyperLinkState;\n    constructor(state: HyperLinkState) {\n        super();\n        this.state = state;\n    }\n    eq(other: HyperLinkIcon) {\n        return this.state.url === other.state.url && this.state.at === other.state.at;\n    }\n    toDOM() {\n        const wrapper = document.createElement('a');\n        wrapper.href = this.state.url;\n        wrapper.target = '_blank';\n        wrapper.innerHTML = pathStr;\n        wrapper.className = 'cm-hyper-link-icon';\n        wrapper.rel = 'nofollow';\n        const anchor = this.state.anchor && this.state.anchor(wrapper);\n        return anchor || wrapper;\n    }\n}\n\nfunction hyperLinkDecorations(view: EditorView, anchor?: HyperLinkExtensionOptions['anchor']) {\n    const widgets: Array<Range<Decoration>> = [];\n    const doc = view.state.doc;\n    let match;\n\n    while ((match = defaultRegexp.exec(doc.toString())) !== null) {\n        const from = match.index;\n        const to = from + match[0].length;\n        const widget = Decoration.widget({\n            widget: new HyperLinkIcon({\n                at: to,\n                url: match[0],\n                anchor,\n            }),\n            side: 1,\n        });\n        widgets.push(widget.range(to));\n    }\n\n    return Decoration.set(widgets);\n}\n\nconst linkDecorator = (\n    regexp?: RegExp,\n    matchData?: Record<string, string>,\n    matchFn?: (str: string, input: string, from: number, to: number) => string,\n    anchor?: HyperLinkExtensionOptions['anchor'],\n) =>\n    new MatchDecorator({\n        regexp: regexp || defaultRegexp,\n        decorate: (add, from, to, match, view) => {\n            const url = match[0];\n            let urlStr = matchFn && typeof matchFn === 'function' ? matchFn(url, match.input, from, to) : url;\n            if (matchData && matchData[url]) {\n                urlStr = matchData[url];\n            }\n            const start = to,\n                end = to;\n            const linkIcon = new HyperLinkIcon({ at: start, url: urlStr, anchor });\n            add(from, to, Decoration.mark({ class: 'cm-hyper-link-underline' }));\n            add(start, end, Decoration.widget({ widget: linkIcon, side: 1 }));\n        },\n    });\n\nexport type HyperLinkExtensionOptions = {\n    regexp?: RegExp;\n    match?: Record<string, string>;\n    handle?: (value: string, input: string, from: number, to: number) => string;\n    anchor?: (dom: HTMLAnchorElement) => HTMLAnchorElement;\n};\n\nexport function hyperLinkExtension({ regexp, match, handle, anchor }: HyperLinkExtensionOptions = {}) {\n    return ViewPlugin.fromClass(\n        class HyperLinkView {\n            decorator?: MatchDecorator;\n            decorations: DecorationSet;\n            constructor(view: EditorView) {\n                if (regexp) {\n                    this.decorator = linkDecorator(regexp, match, handle, anchor);\n                    this.decorations = this.decorator.createDeco(view);\n                } else {\n                    this.decorations = hyperLinkDecorations(view, anchor);\n                }\n            }\n            update(update: ViewUpdate) {\n                if (update.docChanged || update.viewportChanged) {\n                    if (regexp && this.decorator) {\n                        this.decorations = this.decorator.updateDeco(update, this.decorations);\n                    } else {\n                        this.decorations = hyperLinkDecorations(update.view, anchor);\n                    }\n                }\n            }\n        },\n        {\n            decorations: (v) => v.decorations,\n        },\n    );\n}\n\nexport const hyperLinkStyle = EditorView.baseTheme({\n    '.cm-hyper-link-icon': {\n        display: 'inline-block',\n        verticalAlign: 'middle',\n        marginLeft: '0.2ch',\n    },\n    '.cm-hyper-link-icon svg': {\n        display: 'block',\n    },\n    '.cm-hyper-link-underline': {\n        textDecoration: 'underline',\n    },\n});\n\nexport const hyperLink: Extension = [hyperLinkExtension(), hyperLinkStyle];", "import {Decoration, EditorView, keymap} from \"@codemirror/view\"\nimport {StateEffect, StateField, Text} from \"@codemirror/state\";\nimport {invertedEffects} from \"@codemirror/commands\";\n\nconst addHighlight = StateEffect.define({\n    map: mapRange\n});\nconst removeHighlight = StateEffect.define({\n    map: mapRange\n});\n\nfunction mapRange(range, change) {\n    let from = change.mapPos(range.from), to = change.mapPos(range.to);\n    return from < to ? {from, to} : undefined\n}\n\nfunction highlightSelection(view) {\n    view.dispatch({\n        effects: view.state.selection.ranges.filter(r => !r.empty)\n            .map(r => addHighlight.of(r))\n    });\n    return true\n}\n\nfunction unhighlightSelection(view) {\n    let highlighted = view.state.field(highlightedRanges);\n    let effects = [];\n    for (let sel of view.state.selection.ranges) {\n        highlighted.between(sel.from, sel.to, (rFrom, rTo) => {\n            let from = Math.max(sel.from, rFrom), to = Math.min(sel.to, rTo);\n            if (from < to) effects.push(removeHighlight.of({from, to}));\n        });\n    }\n    view.dispatch({effects});\n    return true\n}\n\nconst highlight = Decoration.mark({\n    attributes: {style: `background-color: rgba(255, 50, 0, 0.3)`}\n});\n\nconst highlightedRanges = StateField.define({\n    create() {\n        return Decoration.none\n    },\n    update(ranges, tr) {\n        ranges = ranges.map(tr.changes);\n        for (let e of tr.effects) {\n            if (e.is(addHighlight))\n                ranges = addRange(ranges, e.value);\n            else if (e.is(removeHighlight))\n                ranges = cutRange(ranges, e.value);\n        }\n        return ranges\n    },\n    provide: field => EditorView.decorations.from(field)\n});\n\n//!cutRange\n\nfunction cutRange(ranges, r) {\n    let leftover = [];\n    ranges.between(r.from, r.to, (from, to, deco) => {\n        if (from < r.from) leftover.push(deco.range(from, r.from));\n        if (to > r.to) leftover.push(deco.range(r.to, to));\n    });\n    return ranges.update({\n        filterFrom: r.from,\n        filterTo: r.to,\n        filter: () => false,\n        add: leftover\n    })\n}\n\nfunction addRange(ranges, r) {\n    ranges.between(r.from, r.to, (from, to) => {\n        if (from < r.from) r = {from, to: r.to};\n        if (to > r.to) r = {from: r.from, to};\n    });\n    return ranges.update({\n        filterFrom: r.from,\n        filterTo: r.to,\n        filter: () => false,\n        add: [highlight.range(r.from, r.to)]\n    })\n}\n\nconst invertHighlight = invertedEffects.of(tr => {\n    let found = [];\n    for (let e of tr.effects) {\n        if (e.is(addHighlight)) found.push(removeHighlight.of(e.value));\n        else if (e.is(removeHighlight)) found.push(addHighlight.of(e.value));\n    }\n    let ranges = tr.startState.field(highlightedRanges);\n    tr.changes.iterChangedRanges((chFrom, chTo) => {\n        ranges.between(chFrom, chTo, (rFrom, rTo) => {\n            if (rFrom >= chFrom || rTo <= chTo) {\n                let from = Math.max(chFrom, rFrom), to = Math.min(chTo, rTo);\n                if (from < to) found.push(addHighlight.of({from, to}));\n            }\n        });\n    });\n    return found\n});\nconst highlightKeymap = keymap.of([\n    {key: \"Mod-h\", run: highlightSelection},\n    {key: \"Shift-Mod-h\", run: unhighlightSelection}\n]);\n\nfunction rangeHighlighting() {\n    return [\n        highlightedRanges,\n        invertHighlight,\n        highlightKeymap\n    ]\n}\n\nexport {rangeHighlighting};", "import {EditorView, keymap, showPanel} from \"@codemirror/view\";\nimport {StateEffect, StateField} from \"@codemirror/state\";\n\nconst toggleHelp = StateEffect.define();\n\nconst helpPanelState = StateField.define({\n    create: () => false,\n    update(value, tr) {\n        for (let e of tr.effects) if (e.is(toggleHelp)) value = e.value;\n        return value\n    },\n    provide: f => showPanel.from(f, on => on ? createHelpPanel : null)\n});\n\nfunction createHelpPanel(view) {\n    let dom = document.createElement(\"div\");\n    dom.textContent = \"F1: Toggle the help panel\";\n    dom.className = \"cm-help-panel\";\n    return {top: true, dom}\n}\n\nconst helpKeymap = [{\n    key: \"F1\",\n    run(view) {\n        view.dispatch({\n            effects: toggleHelp.of(!view.state.field(helpPanelState))\n        });\n        return true\n    }\n}];\n\nconst helpTheme = EditorView.baseTheme({\n    \".cm-help-panel\": {\n        padding: \"5px 10px\",\n        backgroundColor: \"#fffa8f\",\n        fontFamily: \"monospace\"\n    }\n});\n\nfunction helpPanel() {\n    return [helpPanelState, keymap.of(helpKeymap), helpTheme]\n}\n\nexport {helpPanel};", "import {ViewPlugin} from \"@codemirror/view\";\n\nfunction countWords(doc) {\n    let count = 0, iter = doc.iter();\n    while (!iter.next().done) {\n        let inWord = false;\n        for (let i = 0; i < iter.value.length; i++) {\n            // \u5339\u914D\u82F1\u6587\u7CFB\u5B57\u7B26\n            let engWord = /\\w/.test(iter.value[i]);\n            // \u5339\u914D\u4E2D\u6587\u3001\u65E5\u6587\u5B57\u7B26\n            let cnJpWord = /[\\u4e00-\\u9fa5\\u3040-\\u309f\\u30a0-\\u30ff]/.test(iter.value[i]);\n\n            if (engWord && !inWord) {\n                count++;\n                inWord = true;\n            } else if (!engWord && inWord) {\n                inWord = false;\n            } else if (cnJpWord) {\n                count++;\n            }\n        }\n    }\n    return `<span class=\"text-gray-400 fw-semibold fs-7\">Word count: ${count}</span>`;\n}\n\nexport function wordCounter(dom) {\n    return ViewPlugin.fromClass(class {\n        update(update) {\n            if (update.docChanged)\n                dom.innerHTML = countWords(update.state.doc);\n        }\n    });\n}", "import {SyntaxNode, Parser, Input, parseMixed, SyntaxNodeRef} from \"@lezer/common\"\nimport {Type, MarkdownExtension} from \"./markdown\"\n\nfunction leftOverSpace(node: SyntaxNode, from: number, to: number) {\n  let ranges = []\n  for (let n = node.firstChild, pos = from;; n = n.nextSibling) {\n    let nextPos = n ? n.from : to\n    if (nextPos > pos) ranges.push({from: pos, to: nextPos})\n    if (!n) break\n    pos = n.to\n  }\n  return ranges\n}\n\n/// Create a Markdown extension to enable nested parsing on code\n/// blocks and/or embedded HTML.\nexport function parseCode(config: {\n  /// When provided, this will be used to parse the content of code\n  /// blocks. `info` is the string after the opening ` ``` ` marker,\n  /// or the empty string if there is no such info or this is an\n  /// indented code block. If there is a parser available for the\n  /// code, it should return a function that can construct the\n  /// [parse](https://lezer.codemirror.net/docs/ref/#common.PartialParse).\n  codeParser?: (info: string) => null | Parser\n  /// The parser used to parse HTML tags (both block and inline).\n  htmlParser?: Parser,\n}): MarkdownExtension {\n  let {codeParser, htmlParser} = config\n  let wrap = parseMixed((node: SyntaxNodeRef, input: Input) => {\n    let id = node.type.id\n    if (codeParser && (id == Type.CodeBlock || id == Type.FencedCode)) {\n      let info = \"\"\n      if (id == Type.FencedCode) {\n        let infoNode = node.node.getChild(Type.CodeInfo)\n        if (infoNode) info = input.read(infoNode.from, infoNode.to)\n      }\n      let parser = codeParser(info)\n      if (parser)\n        return {parser, overlay: node => node.type.id == Type.CodeText}\n    } else if (htmlParser && (id == Type.HTMLBlock || id == Type.HTMLTag)) {\n      return {parser: htmlParser, overlay: leftOverSpace(node.node, node.from, node.to)}\n    }\n    return null\n  })\n  return {wrap}\n}\n", "import {InlineContext, BlockContext, MarkdownConfig,\n        LeafBlockParser, LeafBlock, Line, Element, space, Punctuation} from \"./markdown\"\nimport {tags as t} from \"@lezer/highlight\"\n\nconst StrikethroughDelim = {resolve: \"Strikethrough\", mark: \"StrikethroughMark\"}\n\n/// An extension that implements\n/// [GFM-style](https://github.github.com/gfm/#strikethrough-extension-)\n/// Strikethrough syntax using `~~` delimiters.\nexport const Strikethrough: MarkdownConfig = {\n  defineNodes: [{\n    name: \"Strikethrough\",\n    style: {\"Strikethrough/...\": t.strikethrough}\n  }, {\n    name: \"StrikethroughMark\",\n    style: t.processingInstruction\n  }],\n  parseInline: [{\n    name: \"Strikethrough\",\n    parse(cx, next, pos) {\n      if (next != 126 /* '~' */ || cx.char(pos + 1) != 126 || cx.char(pos + 2) == 126) return -1\n      let before = cx.slice(pos - 1, pos), after = cx.slice(pos + 2, pos + 3)\n      let sBefore = /\\s|^$/.test(before), sAfter = /\\s|^$/.test(after)\n      let pBefore = Punctuation.test(before), pAfter = Punctuation.test(after)\n      return cx.addDelimiter(StrikethroughDelim, pos, pos + 2,\n                             !sAfter && (!pAfter || sBefore || pBefore),\n                             !sBefore && (!pBefore || sAfter || pAfter))\n    },\n    after: \"Emphasis\"\n  }]\n}\n\nfunction parseRow(cx: BlockContext, line: string, startI = 0, elts?: Element[], offset = 0) {\n  let count = 0, first = true, cellStart = -1, cellEnd = -1, esc = false\n  let parseCell = () => {\n    elts!.push(cx.elt(\"TableCell\", offset + cellStart, offset + cellEnd,\n                     cx.parser.parseInline(line.slice(cellStart, cellEnd), offset + cellStart)))\n  }\n\n  for (let i = startI; i < line.length; i++) {\n    let next = line.charCodeAt(i)\n    if (next == 124 /* '|' */ && !esc) {\n      if (!first || cellStart > -1) count++\n      first = false\n      if (elts) {\n        if (cellStart > -1) parseCell()\n        elts.push(cx.elt(\"TableDelimiter\", i + offset, i + offset + 1))\n      }\n      cellStart = cellEnd = -1\n    } else if (esc || next != 32 && next != 9) {\n      if (cellStart < 0) cellStart = i\n      cellEnd = i + 1\n    }\n    esc = !esc && next == 92\n  }\n  if (cellStart > -1) {\n    count++\n    if (elts) parseCell()\n  }\n  return count\n}\n\nfunction hasPipe(str: string, start: number) {\n  for (let i = start; i < str.length; i++) {\n    let next = str.charCodeAt(i)\n    if (next == 124 /* '|' */) return true\n    if (next == 92 /* '\\\\' */) i++\n  }\n  return false\n}\n\nconst delimiterLine = /^\\|?(\\s*:?-+:?\\s*\\|)+(\\s*:?-+:?\\s*)?$/\n\nclass TableParser implements LeafBlockParser {\n  // Null means we haven't seen the second line yet, false means this\n  // isn't a table, and an array means this is a table and we've\n  // parsed the given rows so far.\n  rows: false | null | Element[] = null\n\n  nextLine(cx: BlockContext, line: Line, leaf: LeafBlock) {\n    if (this.rows == null) { // Second line\n      this.rows = false\n      let lineText\n      if ((line.next == 45 || line.next == 58 || line.next == 124 /* '-:|' */) &&\n          delimiterLine.test(lineText = line.text.slice(line.pos))) {\n        let firstRow: Element[] = [], firstCount = parseRow(cx, leaf.content, 0, firstRow, leaf.start)\n        if (firstCount == parseRow(cx, lineText, line.pos))\n          this.rows = [cx.elt(\"TableHeader\", leaf.start, leaf.start + leaf.content.length, firstRow),\n                       cx.elt(\"TableDelimiter\", cx.lineStart + line.pos, cx.lineStart + line.text.length)]\n      }\n    } else if (this.rows) { // Line after the second\n      let content: Element[] = []\n      parseRow(cx, line.text, line.pos, content, cx.lineStart)\n      this.rows.push(cx.elt(\"TableRow\", cx.lineStart + line.pos, cx.lineStart + line.text.length, content))\n    }\n    return false\n  }\n\n  finish(cx: BlockContext, leaf: LeafBlock) {\n    if (!this.rows) return false\n    cx.addLeafElement(leaf, cx.elt(\"Table\", leaf.start, leaf.start + leaf.content.length, this.rows as readonly Element[]))\n    return true\n  }\n}\n\n/// This extension provides\n/// [GFM-style](https://github.github.com/gfm/#tables-extension-)\n/// tables, using syntax like this:\n///\n/// ```\n/// | head 1 | head 2 |\n/// | ---    | ---    |\n/// | cell 1 | cell 2 |\n/// ```\nexport const Table: MarkdownConfig = {\n  defineNodes: [\n    {name: \"Table\", block: true},\n    {name: \"TableHeader\", style: {\"TableHeader/...\": t.heading}},\n    \"TableRow\",\n    {name: \"TableCell\", style: t.content},\n    {name: \"TableDelimiter\", style: t.processingInstruction},\n  ],\n  parseBlock: [{\n    name: \"Table\",\n    leaf(_, leaf) { return hasPipe(leaf.content, 0) ? new TableParser : null },\n    endLeaf(cx, line, leaf) {\n      if (leaf.parsers.some(p => p instanceof TableParser) || !hasPipe(line.text, line.basePos)) return false\n      let next = cx.scanLine(cx.absoluteLineEnd + 1).text\n      return delimiterLine.test(next) && parseRow(cx, line.text, line.basePos) == parseRow(cx, next, line.basePos)\n    },\n    before: \"SetextHeading\"\n  }]\n}\n\nclass TaskParser implements LeafBlockParser {\n  nextLine() { return false }\n\n  finish(cx: BlockContext, leaf: LeafBlock) {\n    cx.addLeafElement(leaf, cx.elt(\"Task\", leaf.start, leaf.start + leaf.content.length, [\n      cx.elt(\"TaskMarker\", leaf.start, leaf.start + 3),\n      ...cx.parser.parseInline(leaf.content.slice(3), leaf.start + 3)\n    ]))\n    return true\n  }\n}\n\n/// Extension providing\n/// [GFM-style](https://github.github.com/gfm/#task-list-items-extension-)\n/// task list items, where list items can be prefixed with `[ ]` or\n/// `[x]` to add a checkbox.\nexport const TaskList: MarkdownConfig = {\n  defineNodes: [\n    {name: \"Task\", block: true, style: t.list},\n    {name: \"TaskMarker\", style: t.atom}\n  ],\n  parseBlock: [{\n    name: \"TaskList\",\n    leaf(cx, leaf) {\n      return /^\\[[ xX]\\][ \\t]/.test(leaf.content) && cx.parentType().name == \"ListItem\" ? new TaskParser : null\n    },\n    after: \"SetextHeading\"\n  }]\n}\n\nconst autolinkRE = /(www\\.)|(https?:\\/\\/)|([\\w.+-]+@)|(mailto:|xmpp:)/gy\nconst urlRE = /[\\w-]+(\\.\\w+(\\.\\w+)*)(\\/[^\\s<]*)?/gy\nconst emailRE = /[\\w.+-]+@[\\w-]+(\\.[\\w.-]+)+/gy\nconst xmppResourceRE = /\\/[a-zA-Z\\d@.]+/gy\n\nfunction count(str: string, from: number, to: number, ch: string) {\n  let result = 0\n  for (let i = from; i < to; i++) if (str[i] == ch) result++\n  return result\n}\n\nfunction autolinkURLEnd(text: string, from: number) {\n  urlRE.lastIndex = from\n  let m = urlRE.exec(text)\n  if (!m) return -1\n  let end = from + m[0].length\n  for (;;) {\n    let last = text[end - 1], m\n    if (/[?!.,:*_~]/.test(last) ||\n        last == \")\" && count(text, from, end, \")\") > count(text, from, end, \"(\"))\n      end--\n    else if (last == \";\" && (m = /&(?:#\\d+|#x[a-f\\d]+|\\w+);$/.exec(text.slice(from, end))))\n      end = from + m.index\n    else\n      break\n  }\n  return end\n}\n\nfunction autolinkEmailEnd(text: string, from: number) {\n  emailRE.lastIndex = from\n  let m = emailRE.exec(text)\n  if (!m) return -1\n  let last = m[0][m[0].length - 1]\n  return last == \"_\" || last == \"-\" ? -1 : from + m[0].length - (last == \".\" ? 1 : 0)\n}\n\n/// Extension that implements autolinking for\n/// `www.`/`http://`/`https://`/`mailto:`/`xmpp:` URLs and email\n/// addresses.\nexport const Autolink: MarkdownConfig = {\n  parseInline: [{\n    name: \"Autolink\",\n    parse(cx, next, absPos) {\n      let pos = absPos - cx.offset\n      autolinkRE.lastIndex = pos\n      let m = autolinkRE.exec(cx.text), end = -1\n      if (!m) return -1\n      if (m[1] || m[2]) { // www., http://\n        end = autolinkURLEnd(cx.text, pos + m[0].length)\n      } else if (m[3]) { // email address\n        end = autolinkEmailEnd(cx.text, pos)\n      } else { // mailto:/xmpp:\n        end = autolinkEmailEnd(cx.text, pos + m[0].length)\n        if (end > -1 && m[0] == \"xmpp:\") {\n          xmppResourceRE.lastIndex = end\n          m = xmppResourceRE.exec(cx.text)\n          if (m) end = m.index + m[0].length\n        }\n      }\n      if (end < 0) return -1\n      cx.addElement(cx.elt(\"URL\", absPos, end + cx.offset))\n      return end + cx.offset\n    }\n  }]\n}\n\n/// Extension bundle containing [`Table`](#Table),\n/// [`TaskList`](#TaskList), [`Strikethrough`](#Strikethrough), and\n/// [`Autolink`](#Autolink).\nexport const GFM = [Table, TaskList, Strikethrough, Autolink]\n\nfunction parseSubSuper(ch: number, node: string, mark: string) {\n  return (cx: InlineContext, next: number, pos: number) => {\n    if (next != ch || cx.char(pos + 1) == ch) return -1\n    let elts = [cx.elt(mark, pos, pos + 1)]\n    for (let i = pos + 1; i < cx.end; i++) {\n      let next = cx.char(i)\n      if (next == ch)\n        return cx.addElement(cx.elt(node, pos, i + 1, elts.concat(cx.elt(mark, i, i + 1))))\n      if (next == 92 /* '\\\\' */)\n        elts.push(cx.elt(\"Escape\", i, i++ + 2))\n      if (space(next)) break\n    }\n    return -1\n  }\n}\n\n/// Extension providing\n/// [Pandoc-style](https://pandoc.org/MANUAL.html#superscripts-and-subscripts)\n/// superscript using `^` markers.\nexport const Superscript: MarkdownConfig = {\n  defineNodes: [\n    {name: \"Superscript\", style: t.special(t.content)},\n    {name: \"SuperscriptMark\", style: t.processingInstruction}\n  ],\n  parseInline: [{\n    name: \"Superscript\",\n    parse: parseSubSuper(94 /* '^' */, \"Superscript\", \"SuperscriptMark\")\n  }]\n}\n\n/// Extension providing\n/// [Pandoc-style](https://pandoc.org/MANUAL.html#superscripts-and-subscripts)\n/// subscript using `~` markers.\nexport const Subscript: MarkdownConfig = {\n  defineNodes: [\n    {name: \"Subscript\", style: t.special(t.content)},\n    {name: \"SubscriptMark\", style: t.processingInstruction}\n  ],\n  parseInline: [{\n    name: \"Subscript\",\n    parse: parseSubSuper(126 /* '~' */, \"Subscript\", \"SubscriptMark\")\n  }]\n}\n\n/// Extension that parses two colons with only letters, underscores,\n/// and numbers between them as `Emoji` nodes.\nexport const Emoji: MarkdownConfig = {\n  defineNodes: [{name: \"Emoji\", style: t.character}],\n  parseInline: [{\n    name: \"Emoji\",\n    parse(cx, next, pos) {\n      let match: RegExpMatchArray | null\n      if (next != 58 /* ':' */ || !(match = /^[a-zA-Z_0-9]+:/.exec(cx.slice(pos + 1, cx.end)))) return -1\n      return cx.addElement(cx.elt(\"Emoji\", pos, pos + 1 + match[0].length))\n    }\n  }]\n}\n", "export {parser, MarkdownParser, Line, Element, LeafBlock, BlockContext, InlineContext} from \"./markdown\"\nexport type {\n    MarkdownConfig, MarkdownExtension,\n    NodeSpec, InlineParser, BlockParser, LeafBlockParser, DelimiterType\n} from \"./markdown\"\nexport {parseCode} from \"./nest\"\nexport {Table, TaskList, Strikethrough, Autolink, GFM, Subscript, Superscript, Emoji} from \"./extension\"\n", "import {Language, defineLanguageFacet, languageDataProp, foldNodeProp, indentNodeProp, foldService,\n        syntaxTree, LanguageDescription, ParseContext} from \"@codemirror/language\"\nimport {parser as baseParser, MarkdownParser, GFM, Subscript, Superscript, Emoji} from \"../lezer-parser-markdown\"\nimport {SyntaxNode, NodeType, NodeProp} from \"@lezer/common\"\n\nconst data = defineLanguageFacet({commentTokens: {block: {open: \"<!--\", close: \"-->\"}}})\n\nconst headingProp = new NodeProp<number>()\n\nconst commonmark = baseParser.configure({\n  props: [\n    foldNodeProp.add(type => {\n      return !type.is(\"Block\") || type.is(\"Document\") || isHeading(type) != null ? undefined\n        : (tree, state) => ({from: state.doc.lineAt(tree.from).to, to: tree.to})\n    }),\n    headingProp.add(isHeading),\n    indentNodeProp.add({\n      Document: () => null\n    }),\n    languageDataProp.add({\n      Document: data\n    })\n  ]\n})\n\nfunction isHeading(type: NodeType) {\n  let match = /^(?:ATX|Setext)Heading(\\d)$/.exec(type.name)\n  return match ? +match[1] : undefined\n}\n\nfunction findSectionEnd(headerNode: SyntaxNode, level: number) {\n  let last = headerNode\n  for (;;) {\n    let next = last.nextSibling, heading\n    if (!next || (heading = isHeading(next.type)) != null && heading <= level) break\n    last = next\n  }\n  return last.to\n}\n\nconst headerIndent = foldService.of((state, start, end) => {\n  for (let node: SyntaxNode | null = syntaxTree(state).resolveInner(end, -1); node; node = node.parent) {\n    if (node.from < start) break\n    let heading = node.type.prop(headingProp)\n    if (heading == null) continue\n    let upto = findSectionEnd(node, heading)\n    if (upto > end) return {from: end, to: upto}\n  }\n  return null\n})\n\nexport function mkLang(parser: MarkdownParser) {\n  return new Language(data, parser, [headerIndent], \"markdown\")\n}\n\n/// Language support for strict CommonMark.\nexport const commonmarkLanguage = mkLang(commonmark)\n\nconst extended = commonmark.configure([GFM, Subscript, Superscript, Emoji, {\n  props: [\n    foldNodeProp.add({\n      Table: (tree, state) => ({from: state.doc.lineAt(tree.from).to, to: tree.to})\n    })\n  ]\n}])\n\n/// Language support for [GFM](https://github.github.com/gfm/) plus\n/// subscript, superscript, and emoji syntax.\nexport const markdownLanguage = mkLang(extended)\n\nexport function getCodeParser(\n  languages: readonly LanguageDescription[] | ((info: string) => Language | LanguageDescription | null) | undefined,\n  defaultLanguage?: Language\n) {\n  return (info: string) => {\n    if (info && languages) {\n      let found = null\n      // Strip anything after whitespace\n      info = /\\S*/.exec(info)![0]\n      if (typeof languages == \"function\") found = languages(info)\n      else found = LanguageDescription.matchLanguageName(languages, info, true)\n      if (found instanceof LanguageDescription)\n        return found.support ? found.support.language.parser : ParseContext.getSkippingParser(found.load())\n      else if (found)\n        return found.parser\n    }\n    return defaultLanguage ? defaultLanguage.parser : null\n  }\n}\n", "import {StateCommand, Text, EditorState, EditorSelection, ChangeSpec, countColumn} from \"@codemirror/state\"\nimport {syntaxTree, indentUnit} from \"@codemirror/language\"\nimport {SyntaxNode, Tree} from \"@lezer/common\"\nimport {markdownLanguage} from \"./markdown\"\n\nclass Context {\n  constructor(\n    readonly node: SyntaxNode,\n    readonly from: number,\n    readonly to: number,\n    readonly spaceBefore: string,\n    readonly spaceAfter: string,\n    readonly type: string,\n    readonly item: SyntaxNode | null\n  ) {}\n\n  blank(maxWidth: number | null, trailing = true) {\n    let result = this.spaceBefore + (this.node.name == \"Blockquote\" ? \">\" : \"\")\n    if (maxWidth != null) {\n      while (result.length < maxWidth) result += \" \"\n      return result\n    } else {\n      for (let i = this.to - this.from - result.length - this.spaceAfter.length; i > 0; i--) result += \" \"\n      return result + (trailing ? this.spaceAfter : \"\")\n    }\n  }\n\n  marker(doc: Text, add: number) {\n    let number = this.node.name == \"OrderedList\" ? String((+itemNumber(this.item!, doc)[2] + add)) : \"\"\n    return this.spaceBefore + number + this.type + this.spaceAfter\n  }\n}\n\nfunction getContext(node: SyntaxNode, doc: Text) {\n  let nodes = []\n  for (let cur: SyntaxNode | null = node; cur && cur.name != \"Document\"; cur = cur.parent) {\n    if (cur.name == \"ListItem\" || cur.name == \"Blockquote\" || cur.name == \"FencedCode\")\n      nodes.push(cur)\n  }\n  let context = []\n  for (let i = nodes.length - 1; i >= 0; i--) {\n    let node = nodes[i], match\n    let line = doc.lineAt(node.from), startPos = node.from - line.from\n    if (node.name == \"FencedCode\") {\n      context.push(new Context(node, startPos, startPos, \"\", \"\", \"\", null))\n    } else if (node.name == \"Blockquote\" && (match = /^ *>( ?)/.exec(line.text.slice(startPos)))) {\n      context.push(new Context(node, startPos, startPos + match[0].length, \"\", match[1], \">\", null))\n    } else if (node.name == \"ListItem\" && node.parent!.name == \"OrderedList\" &&\n               (match = /^( *)\\d+([.)])( *)/.exec(line.text.slice(startPos)))) {\n      let after = match[3], len = match[0].length\n      if (after.length >= 4) { after = after.slice(0, after.length - 4); len -= 4 }\n      context.push(new Context(node.parent!, startPos, startPos + len, match[1], after, match[2], node))\n    } else if (node.name == \"ListItem\" && node.parent!.name == \"BulletList\" &&\n               (match = /^( *)([-+*])( {1,4}\\[[ xX]\\])?( +)/.exec(line.text.slice(startPos)))) {\n      let after = match[4], len = match[0].length\n      if (after.length > 4) { after = after.slice(0, after.length - 4); len -= 4 }\n      let type = match[2]\n      if (match[3]) type += match[3].replace(/[xX]/, ' ')\n      context.push(new Context(node.parent!, startPos, startPos + len, match[1], after, type, node))\n    }\n  }\n  return context\n}\n\nfunction itemNumber(item: SyntaxNode, doc: Text) {\n  return /^(\\s*)(\\d+)(?=[.)])/.exec(doc.sliceString(item.from, item.from + 10))!\n}\n\nfunction renumberList(after: SyntaxNode, doc: Text, changes: ChangeSpec[], offset = 0) {\n  for (let prev = -1, node = after;;) {\n    if (node.name == \"ListItem\") {\n      let m = itemNumber(node, doc)\n      let number = +m[2]\n      if (prev >= 0) {\n        if (number != prev + 1) return\n        changes.push({from: node.from + m[1].length, to: node.from + m[0].length, insert: String(prev + 2 + offset)})\n      }\n      prev = number\n    }\n    let next = node.nextSibling\n    if (!next) break\n    node = next\n  }\n}\n\nfunction normalizeIndent(content: string, state: EditorState) {\n  let blank = /^[ \\t]*/.exec(content)![0].length\n  if (!blank || state.facet(indentUnit) != \"\\t\") return content\n  let col = countColumn(content, 4, blank)\n  let space = \"\"\n  for (let i = col; i > 0;) {\n    if (i >= 4) { space += \"\\t\"; i -= 4 }\n    else { space += \" \"; i-- }\n  }\n  return space + content.slice(blank)\n}\n\n/// This command, when invoked in Markdown context with cursor\n/// selection(s), will create a new line with the markup for\n/// blockquotes and lists that were active on the old line. If the\n/// cursor was directly after the end of the markup for the old line,\n/// trailing whitespace and list markers are removed from that line.\n///\n/// The command does nothing in non-Markdown context, so it should\n/// not be used as the only binding for Enter (even in a Markdown\n/// document, HTML and code regions might use a different language).\nexport const insertNewlineContinueMarkup: StateCommand = ({state, dispatch}) => {\n  let tree = syntaxTree(state), {doc} = state\n  let dont = null, changes = state.changeByRange(range => {\n    if (!range.empty || !markdownLanguage.isActiveAt(state, range.from)) return dont = {range}\n    let pos = range.from, line = doc.lineAt(pos)\n    let context = getContext(tree.resolveInner(pos, -1), doc)\n    while (context.length && context[context.length - 1].from > pos - line.from) context.pop()\n    if (!context.length) return dont = {range}\n    let inner = context[context.length - 1]\n    if (inner.to - inner.spaceAfter.length > pos - line.from) return dont = {range}\n\n    let emptyLine = pos >= (inner.to - inner.spaceAfter.length) && !/\\S/.test(line.text.slice(inner.to))\n    // Empty line in list\n    if (inner.item && emptyLine) {\n      // First list item or blank line before: delete a level of markup\n      if (inner.node.firstChild!.to >= pos ||\n          line.from > 0 && !/[^\\s>]/.test(doc.lineAt(line.from - 1).text)) {\n        let next = context.length > 1 ? context[context.length - 2] : null\n        let delTo, insert = \"\"\n        if (next && next.item) { // Re-add marker for the list at the next level\n          delTo = line.from + next.from\n          insert = next.marker(doc, 1)\n        } else {\n          delTo = line.from + (next ? next.to : 0)\n        }\n        let changes: ChangeSpec[] = [{from: delTo, to: pos, insert}]\n        if (inner.node.name == \"OrderedList\") renumberList(inner.item!, doc, changes, -2)\n        if (next && next.node.name == \"OrderedList\") renumberList(next.item!, doc, changes)\n        return {range: EditorSelection.cursor(delTo + insert.length), changes}\n      } else { // Move this line down\n        let insert = \"\"\n        for (let i = 0, e = context.length - 2; i <= e; i++) {\n          insert += context[i].blank(i < e ? countColumn(line.text, 4, context[i + 1].from) - insert.length : null, i < e)\n        }\n        insert = normalizeIndent(insert, state)\n        return {range: EditorSelection.cursor(pos + insert.length + 1),\n                changes: {from: line.from, insert: insert + state.lineBreak}}\n      }\n    }\n\n    if (inner.node.name == \"Blockquote\" && emptyLine && line.from) {\n      let prevLine = doc.lineAt(line.from - 1), quoted = />\\s*$/.exec(prevLine.text)\n      // Two aligned empty quoted lines in a row\n      if (quoted && quoted.index == inner.from) {\n        let changes = state.changes([{from: prevLine.from + quoted.index, to: prevLine.to},\n                                     {from: line.from + inner.from, to: line.to}])\n        return {range: range.map(changes), changes}\n      }\n    }\n\n    let changes: ChangeSpec[] = []\n    if (inner.node.name == \"OrderedList\") renumberList(inner.item!, doc, changes)\n    let continued = inner.item && inner.item.from < line.from\n    let insert = \"\"\n    // If not dedented\n    if (!continued || /^[\\s\\d.)\\-+*>]*/.exec(line.text)![0].length >= inner.to) {\n      for (let i = 0, e = context.length - 1; i <= e; i++) {\n        insert += i == e && !continued ? context[i].marker(doc, 1)\n          : context[i].blank(i < e ? countColumn(line.text, 4, context[i + 1].from) - insert.length : null)\n      }\n    }\n    let from = pos\n    while (from > line.from && /\\s/.test(line.text.charAt(from - line.from - 1))) from--\n    insert = normalizeIndent(insert, state)\n    changes.push({from, to: pos, insert: state.lineBreak + insert})\n    return {range: EditorSelection.cursor(from + insert.length + 1), changes}\n  })\n  if (dont) return false\n  dispatch(state.update(changes, {scrollIntoView: true, userEvent: \"input\"}))\n  return true\n}\n\nfunction isMark(node: SyntaxNode) {\n  return node.name == \"QuoteMark\" || node.name == \"ListMark\"\n}\n\nfunction contextNodeForDelete(tree: Tree, pos: number) {\n  let node = tree.resolveInner(pos, -1), scan = pos\n  if (isMark(node)) {\n    scan = node.from\n    node = node.parent!\n  }\n  for (let prev; prev = node.childBefore(scan);) {\n    if (isMark(prev)) {\n      scan = prev.from\n    } else if (prev.name == \"OrderedList\" || prev.name == \"BulletList\") {\n      node = prev.lastChild!\n      scan = node.to\n    } else {\n      break\n    }\n  }\n  return node\n}\n\n/// This command will, when invoked in a Markdown context with the\n/// cursor directly after list or blockquote markup, delete one level\n/// of markup. When the markup is for a list, it will be replaced by\n/// spaces on the first invocation (a further invocation will delete\n/// the spaces), to make it easy to continue a list.\n///\n/// When not after Markdown block markup, this command will return\n/// false, so it is intended to be bound alongside other deletion\n/// commands, with a higher precedence than the more generic commands.\nexport const deleteMarkupBackward: StateCommand = ({state, dispatch}) => {\n  let tree = syntaxTree(state)\n  let dont = null, changes = state.changeByRange(range => {\n    let pos = range.from, {doc} = state\n    if (range.empty && markdownLanguage.isActiveAt(state, range.from)) {\n      let line = doc.lineAt(pos)\n      let context = getContext(contextNodeForDelete(tree, pos), doc)\n      if (context.length) {\n        let inner = context[context.length - 1]\n        let spaceEnd = inner.to - inner.spaceAfter.length + (inner.spaceAfter ? 1 : 0)\n        // Delete extra trailing space after markup\n        if (pos - line.from > spaceEnd && !/\\S/.test(line.text.slice(spaceEnd, pos - line.from)))\n          return {range: EditorSelection.cursor(line.from + spaceEnd),\n                  changes: {from: line.from + spaceEnd, to: pos}}\n        if (pos - line.from == spaceEnd &&\n            // Only apply this if we're on the line that has the\n            // construct's syntax, or there's only indentation in the\n            // target range\n            (!inner.item || line.from <= inner.item.from || !/\\S/.test(line.text.slice(0, inner.to)))) {\n          let start = line.from + inner.from\n          // Replace a list item marker with blank space\n          if (inner.item && inner.node.from < inner.item.from && /\\S/.test(line.text.slice(inner.from, inner.to))) {\n            let insert = inner.blank(countColumn(line.text, 4, inner.to) - countColumn(line.text, 4, inner.from))\n            if (start == line.from) insert = normalizeIndent(insert, state)\n            return {range: EditorSelection.cursor(start + insert.length),\n                    changes: {from: start, to: line.from + inner.to, insert}}\n          }\n          // Delete one level of indentation\n          if (start < pos)\n            return {range: EditorSelection.cursor(start), changes: {from: start, to: pos}}\n        }\n      }\n    }\n    return dont = {range}\n  })\n  if (dont) return false\n  dispatch(state.update(changes, {scrollIntoView: true, userEvent: \"delete\"}))\n  return true\n}\n", "import {Prec, EditorState} from \"@codemirror/state\"\nimport {KeyBinding, keymap} from \"@codemirror/view\"\nimport {Language, LanguageSupport, LanguageDescription, syntaxTree} from \"@codemirror/language\"\nimport {Completion, CompletionContext} from \"@codemirror/autocomplete\"\nimport {MarkdownExtension, MarkdownParser, parseCode} from \"../lezer-parser-markdown\"\nimport {html, htmlCompletionSource} from \"@codemirror/lang-html\"\nimport {commonmarkLanguage, markdownLanguage, mkLang, getCodeParser} from \"./markdown\"\nimport {insertNewlineContinueMarkup, deleteMarkupBackward} from \"./commands\"\nexport {commonmarkLanguage, markdownLanguage, insertNewlineContinueMarkup, deleteMarkupBackward}\n\n/// A small keymap with Markdown-specific bindings. Binds Enter to\n/// [`insertNewlineContinueMarkup`](#lang-markdown.insertNewlineContinueMarkup)\n/// and Backspace to\n/// [`deleteMarkupBackward`](#lang-markdown.deleteMarkupBackward).\nexport const markdownKeymap: readonly KeyBinding[] = [\n  {key: \"Enter\", run: insertNewlineContinueMarkup},\n  {key: \"Backspace\", run: deleteMarkupBackward}\n]\n\nconst htmlNoMatch = html({matchClosingTags: false})\n\n/// Markdown language support.\nexport function markdown(config: {\n  /// When given, this language will be used by default to parse code\n  /// blocks.\n  defaultCodeLanguage?: Language | LanguageSupport,\n  /// A source of language support for highlighting fenced code\n  /// blocks. When it is an array, the parser will use\n  /// [`LanguageDescription.matchLanguageName`](#language.LanguageDescription^matchLanguageName)\n  /// with the fenced code info to find a matching language. When it\n  /// is a function, will be called with the info string and may\n  /// return a language or `LanguageDescription` object.\n  codeLanguages?: readonly LanguageDescription[] | ((info: string) => Language | LanguageDescription | null),\n  /// Set this to false to disable installation of the Markdown\n  /// [keymap](#lang-markdown.markdownKeymap).\n  addKeymap?: boolean,\n  /// Markdown parser\n  /// [extensions](https://github.com/lezer-parser/markdown#user-content-markdownextension)\n  /// to add to the parser.\n  extensions?: MarkdownExtension,\n  /// The base language to use. Defaults to\n  /// [`commonmarkLanguage`](#lang-markdown.commonmarkLanguage).\n  base?: Language,\n  /// By default, the extension installs an autocompletion source that\n  /// completes HTML tags when a `<` is typed. Set this to false to\n  /// disable this.\n  completeHTMLTags?: boolean\n} = {}) {\n  let {codeLanguages,\n       defaultCodeLanguage,\n       addKeymap = true,\n       base: {parser} = commonmarkLanguage,\n       completeHTMLTags = true} = config\n  if (!(parser instanceof MarkdownParser)) throw new RangeError(\"Base parser provided to `markdown` should be a Markdown parser\")\n  let extensions = config.extensions ? [config.extensions] : []\n  let support = [htmlNoMatch.support], defaultCode\n  if (defaultCodeLanguage instanceof LanguageSupport) {\n    support.push(defaultCodeLanguage.support)\n    defaultCode = defaultCodeLanguage.language\n  } else if (defaultCodeLanguage) {\n    defaultCode = defaultCodeLanguage\n  }\n  let codeParser = codeLanguages || defaultCode ? getCodeParser(codeLanguages, defaultCode) : undefined\n  extensions.push(parseCode({codeParser, htmlParser: htmlNoMatch.language.parser}))\n  if (addKeymap) support.push(Prec.high(keymap.of(markdownKeymap)))\n  let lang = mkLang(parser.configure(extensions))\n  if (completeHTMLTags) support.push(lang.data.of({autocomplete: htmlTagCompletion}))\n  return new LanguageSupport(lang, support)\n}\n\nfunction htmlTagCompletion(context: CompletionContext) {\n  let {state, pos} = context, m = /<[:\\-\\.\\w\\u00b7-\\uffff]*$/.exec(state.sliceDoc(pos - 25, pos))\n  if (!m) return null\n  let tree = syntaxTree(state).resolveInner(pos, -1)\n  while (tree && !tree.type.isTop) {\n    if (tree.name == \"CodeBlock\" || tree.name == \"FencedCode\" || tree.name == \"ProcessingInstructionBlock\" ||\n        tree.name == \"CommentBlock\" || tree.name == \"Link\" || tree.name == \"Image\") return null\n    tree = tree.parent!\n  }\n\n  return {\n    from: pos - m[0].length, to: pos,\n    options: htmlTagCompletions(),\n    validFor: /^<[:\\-\\.\\w\\u00b7-\\uffff]*$/\n  }\n}\n\nlet _tagCompletions: readonly Completion[] | null = null\nfunction htmlTagCompletions() {\n  if (_tagCompletions) return _tagCompletions\n  let result = htmlCompletionSource(new CompletionContext(EditorState.create({extensions: htmlNoMatch}), 0, true))\n  return _tagCompletions = result ? result.options : []\n}\n", "import {EditorView, keymap, Panel, showPanel, ViewUpdate} from \"@codemirror/view\";\nimport {StateEffect, StateField} from \"@codemirror/state\";\nimport {micromark} from 'micromark';\nimport {gfm, gfmHtml} from 'micromark-extension-gfm';\nexport const toggleMarkdownPreview = StateEffect.define<boolean>();\nexport const markdownPreviewState = StateField.define({\n    create: () => false,\n    update(value, tr) {\n        for (let e of tr.effects) if (e.is(toggleMarkdownPreview)) value = e.value;\n        return value;\n    },\n    provide: f => showPanel.from(f, on => on ? createMarkdownPreviewPanel : null)\n});\n\nfunction createMarkdownPreviewPanel(view: EditorView) {\n    return new MarkdownPreviewPanel(view);\n}\n\nclass MarkdownPreviewPanel implements Panel {\n    dom: HTMLElement;\n    articleDom: HTMLElement;\n    editorView: EditorView;\n    fullScreen: boolean = false;\n    fullButton: HTMLElement;\n    constructor(view: EditorView) {\n        this.editorView = view;\n        this.dom = document.createElement(\"div\");\n        this.dom.className = \"cm-markdown-preview-panel cm-scroller\";\n\n        this.articleDom = document.createElement(\"article\");\n        this.articleDom.className = \"markdown-body p-1\";\n\n        this.dom.appendChild(this.articleDom);\n        this.renderHtml();\n\n\n        // \u9884\u89C8\u9762\u677F\u7684\u9AD8\u5EA6\u8BBE\u7F6E\u4E3A\u7F16\u8F91\u5668\u9AD8\u5EA6\u7684\u4E00\u534A\n        const previewHeight = this.editorView.dom.getBoundingClientRect().height / 2;\n        this.dom.style.height = previewHeight+\"px\";\n\n        this.fullButton = document.createElement(\"div\");\n        this.fullButton.innerHTML = \"<i class=\\\"ki-outline ki-arrow-two-diagonals text-primary fs-2\\\"></i>\";\n        this.fullButton.className = \"btn btn-sm btn-icon btn-active-color-primary full-markdown-preview\";\n        this.fullButton.onclick = () => {\n            this.fullScreen = !this.fullScreen;\n            if (this.fullScreen){\n                this.dom.style.height = this.editorView.dom.getBoundingClientRect().height +\"px\";\n                this.dom.style.overflowY = \"auto\";\n            } else {\n                const previewHeight = this.editorView.dom.getBoundingClientRect().height / 2;\n                this.dom.style.height = previewHeight+\"px\";\n                this.dom.style.overflowY = \"hidden\";\n            }\n            this.toggleFullButton();\n            this.renderHtml();\n        };\n        this.dom.appendChild(this.fullButton);\n\n        // \u521B\u5EFA\u5173\u95ED\u6309\u94AE\n        let closeButton = document.createElement(\"div\");\n        closeButton.innerHTML = \"<i class=\\\"ki-outline ki-cross-square text-primary fs-2\\\"></i>\";\n        closeButton.className = \"btn btn-sm btn-icon btn-active-color-primary close-markdown-preview\";\n        closeButton.onclick = () => {\n            // \u5F53\u70B9\u51FB\u5173\u95ED\u6309\u94AE\u65F6\uFF0C\u9690\u85CF Markdown \u9884\u89C8\u9762\u677F\n            this.editorView.dispatch({\n                effects: toggleMarkdownPreview.of(false)\n            });\n        };\n        this.dom.appendChild(closeButton);  // \u5C06\u5173\u95ED\u6309\u94AE\u6DFB\u52A0\u5230\u9762\u677F DOM \u4E2D\n    }\n\n    mount() {\n        // \u7ED1\u5B9A\u81EA\u5B9A\u4E49\u4E8B\u4EF6\u7684\u76D1\u542C\u5668\n        this.editorView.focus();\n        document.addEventListener('editorScroll', this.onEditorScroll);\n        this.toggleFullButtonVisibility();\n    }\n\n    destroy() {\n        // \u79FB\u9664\u81EA\u5B9A\u4E49\u4E8B\u4EF6\u7684\u76D1\u542C\u5668\n        this.editorView.focus();\n        document.removeEventListener('editorScroll', this.onEditorScroll);\n    }\n\n    update(update: ViewUpdate): void {\n        const view = update.view;\n        this.editorView = view;\n        if (update.docChanged || update.viewportChanged) {\n            if (!this.fullScreen) {\n                // \u9884\u89C8\u9762\u677F\u7684\u9AD8\u5EA6\u8BBE\u7F6E\u4E3A\u7F16\u8F91\u5668\u9AD8\u5EA6\u7684\u4E00\u534A\n                const previewHeight = this.editorView.dom.getBoundingClientRect().height / 2;\n                this.dom.style.height = previewHeight+\"px\";\n                this.renderHtml();\n            }\n\n            // \u68C0\u6D4B\u80FD\u4E0D\u80FD\u521B\u5EFA\u5168\u5C4F\u6309\u94AE\n            this.toggleFullButtonVisibility();\n        }\n    }\n\n    get top(): boolean {\n        return false;\n    }\n\n    toggleFullButton() {\n        if (this.fullScreen) {\n            this.fullButton.innerHTML = \"<i class=\\\"ki-outline ki-double-down text-primary fs-2\\\"></i>\";\n        } else {\n            this.fullButton.innerHTML = \"<i class=\\\"ki-outline ki-arrow-two-diagonals text-primary fs-2\\\"></i>\";\n        }\n    }\n\n    toggleFullButtonVisibility() {\n        if (this.editorView.dom.getBoundingClientRect().height <= 250) {\n            this.fullButton.style.display = \"none\";\n        } else {\n            this.fullButton.style.display = \"inline-flex\";\n        }\n    }\n\n    onEditorScroll = (event :Event)  => {\n        if (!this.fullScreen) this.renderHtml();\n    }\n\n    lastTopHeight = 0; // \u521D\u59CB\u8BBE\u7F6E\u4E3A0\n    renderHtml(): void {\n        // \u4F7F\u7528 requestAnimationFrame \u6765\u7B49\u5F85\u66F4\u65B0\u8FC7\u7A0B\u5B8C\u6210\n        requestAnimationFrame(() => {\n            if (this.fullScreen) {\n                // \u4F7F\u7528marked\u5F02\u6B65\u8F6C\u6362Markdown\u4E3AHTML\n                const text = this.editorView.state.doc.toString();\n                const html = renderMarkdown(text);\n                this.articleDom.innerHTML = html;\n            } else {\n                const rect = this.editorView.dom.getBoundingClientRect();\n                // \u9884\u89C8\u533A\u57DF\n                const previewRect = this.dom.getBoundingClientRect();\n\n                // \u8BA1\u7B97\u7F16\u8F91\u5668\u9876\u90E8\u548C\u5E95\u90E8\u76F8\u5BF9\u4E8E\u6587\u6863\u9876\u90E8\u7684\u9AD8\u5EA6\n                const topHeight = rect.top - this.editorView.documentTop;\n                const bottomHeight = previewRect.top - this.editorView.documentTop;\n\n                // \u5224\u65AD\u6EDA\u52A8\u65B9\u5411\n                const currentTopHeight = topHeight;\n                const scrollDirection = currentTopHeight > this.lastTopHeight ? 'down' : 'up';\n                this.lastTopHeight = currentTopHeight; // \u66F4\u65B0\u6700\u540E\u6EDA\u52A8\u4F4D\u7F6E\u4E3A\u5F53\u524D\u4F4D\u7F6E\n\n\n                // \u83B7\u53D6\u9876\u90E8\u548C\u5E95\u90E8\u53EF\u89C1\u884C\u7684\u4FE1\u606F\n                const topBlockInfo = this.editorView.lineBlockAtHeight(topHeight);\n                const bottomBlockInfo = this.editorView.lineBlockAtHeight(bottomHeight);\n\n                let start = topBlockInfo.from;\n                let end = bottomBlockInfo.to;\n\n                let startLine = this.editorView.state.doc.lineAt(start);\n                console.log(`startLine: ${startLine.number}`);\n\n                // \u622A\u53D6\u53EF\u89C1\u90E8\u5206\u7684\u6587\u672C\n                const text = this.editorView.state.doc.sliceString(start, end);\n\n                // \u4F7F\u7528marked\u5F02\u6B65\u8F6C\u6362Markdown\u4E3AHTML\n                const html = renderMarkdown(text);\n                this.articleDom.innerHTML = html;\n            }\n        });\n    }\n}\n\nconst renderMarkdown = (markdown: string) => {\n    return micromark(markdown, {\n        extensions: [gfm()],\n        htmlExtensions: [gfmHtml()]\n    });\n}\n\n\nconst markdownPreviewKeymap = [\n    {\n        key: \"Alt-p\",\n        run(view: EditorView) {\n            view.dispatch({\n                effects: toggleMarkdownPreview.of(!view.state.field(markdownPreviewState))\n            });\n            return true;\n        },\n    },\n    {\n        key: \"Escape\",\n        run(view: EditorView) {\n            view.dispatch({\n                effects: toggleMarkdownPreview.of(false)\n            });\n            return true;\n        }, scope: \"editor preview-panel\"\n\n    },\n];\n\nconst markdownPreviewTheme = EditorView.baseTheme({\n    \".cm-markdown-preview-panel\": {\n        position: \"relative\",\n        overflowY: \"hidden\",\n    },\n    \".close-markdown-preview\": {\n        position: \"absolute\",\n        top: \"2px\",\n        right: \"2px\",\n        cursor: \"pointer\",\n        backgroundColor: \"#FFFFFFE5\",\n    },\n    \".full-markdown-preview\": {\n        position: \"absolute\",\n        top: \"2px\",\n        right: \"35px\",\n        cursor: \"pointer\",\n        backgroundColor: \"#FFFFFFE5\",\n    },\n\n    \"&light .cm-markdown-preview-panel\": { backgroundColor: \"#ffffff\" },\n    \"&dark .cm-markdown-preview-panel\": { backgroundColor: \"#1e1e2d\" },\n});\n\nfunction markdownPreviewPanel() {\n    return [\n        markdownPreviewState,\n        keymap.of(markdownPreviewKeymap),\n        markdownPreviewTheme,\n        EditorView.domEventHandlers({\n            scroll(event, view) {\n                document.dispatchEvent(new CustomEvent('editorScroll'));\n                return false;\n            },\n        }),\n    ];\n}\n\nexport { markdownPreviewPanel };\n", "import {\n    BlockInfo, crosshairCursor,\n    drawSelection,\n    dropCursor,\n    EditorView, highlightActiveLine,\n    highlightActiveLineGutter,\n    highlightSpecialChars, keymap, lineNumbers, placeholder, rectangularSelection, ViewUpdate\n} from \"@codemirror/view\";\nimport {Compartment, EditorSelection, EditorState, SelectionRange} from \"@codemirror/state\";\nimport {lightTheme} from \"./codemirror-themes/light-theme\"\nimport {oneDarkTheme} from \"./codemirror-themes/dark-theme\"\nimport {defaultKeymap, history, historyKeymap, indentWithTab} from \"@codemirror/commands\";\nimport {\n    bracketMatching,\n    defaultHighlightStyle,\n    foldKeymap,\n    indentOnInput,\n    syntaxHighlighting\n} from \"@codemirror/language\";\n\nimport { dropFoldGutter } from \"./codemirror-drop-fold-gutter\";\nimport { markdownGutter } from \"./codemirror-markdow-gutter\";\nimport {autocompletion, closeBrackets, closeBracketsKeymap, completionKeymap} from \"@codemirror/autocomplete\";\nimport {highlightSelectionMatches, searchKeymap} from \"@codemirror/search\";\n\nimport * as prettier from 'prettier/standalone'\nimport pluginMarkdown from 'prettier/plugins/markdown'\nimport {placeholdersPlugin} from \"./codemirror-suggestions/mention_node\";\nimport {emojiPlaceholdersPlugin} from \"./codemirror-suggestions/emoji_node\";\nimport {mentionSuggestions} from \"./codemirror-suggestions/mention\";\nimport {emojiSuggestions} from \"./codemirror-suggestions/emojis\";\nimport {hyperLink} from \"./codemirror-hyper-link\";\nimport {rangeHighlighting} from \"./codemirror-cmd/range-highlighting\";\nimport {helpPanel} from \"./codemirror-cmd/toolbar-panel\";\nimport {wordCounter} from \"./codemirror-cmd/count-words\";\nimport {markdown, markdownLanguage} from \"../commons/codemirror-lang-markdown\";\n\nimport {markdownPreviewPanel, markdownPreviewState, toggleMarkdownPreview} from \"./codemirror-preview-panel\";\nimport { selectionTooltipAction } from \"./codemirror-tooltips-action\";\nimport { floatMenuWidget } from \"./codemirror-floatmenu-widget\";\nimport {languages} from \"@codemirror/language-data\";\n\nexport const isBlank = (str: string | undefined | null): boolean => {\n    if (str === undefined) {\n        return true\n    }\n    if (str == null) {\n        return true\n    }\n    if (str == '') {\n        return true\n    }\n    if (str == ' ') {\n        return true\n    }\n    if (str.length == 0) {\n        return true\n    }\n    return false\n}\n\nexport let codemirrorTheme = new Compartment;\n\nexport class CodemirrorWrapper {\n    /**\n     * editor\n     */\n    private readonly _editor: EditorView\n\n    constructor(editor: EditorView) {\n        this._editor = editor\n    }\n\n    /**\n     * \u83B7\u53D6\u7F16\u8F91\u5668\uFF0C\u4E0D\u5EFA\u8BAE\u76F4\u63A5\u4F7F\u7528\u8BE5\u5BF9\u8C61\uFF0C\u800C\u662F\u5BF9\u4F7F\u7528\u5230\u7684\u65B9\u6CD5\u8FDB\u884C\u5C01\u88C5\n     */\n    get eidtor(): EditorView {\n        return this._editor\n    }\n\n    /**\u2122\u2122\n     * \u521B\u5EFA EditorState\n     *\n     * @param updateCallback \u7F16\u8F91\u5668\u5185\u5BB9\u53D8\u52A8\u65F6\u7684\u56DE\u8C03\n     * @param saveCallback \u4FDD\u5B58\u5185\u5BB9\u65F6\u7684\u56DE\u8C03\n     * @param uploadFileCallback \u62D6\u62FD\u4E0A\u4F20\u6587\u4EF6\u540E\u7684\u4F1A\u8C03\n     * @param doc \u521D\u59CB\u5316\u7684\u5185\u5BB9\n     * @returns\n     */\n    static newState = (\n        mentionUsers: [],\n        countWordsPanelTarget: any,\n        doc?: string,\n        updateCallback?: any,\n        uploadFileCallback?: any,): EditorState => {\n\n        const gairdaoBasicSetup = /*@__PURE__*/(() => [\n            // lineNumbers(),\n            highlightActiveLineGutter(),\n            highlightSpecialChars(),\n            history(),\n            markdownGutter(),\n            dropFoldGutter(),\n            drawSelection(),\n            dropCursor(),\n            EditorState.allowMultipleSelections.of(true),\n            indentOnInput(),\n            syntaxHighlighting(defaultHighlightStyle, { fallback: true }),\n            bracketMatching(),\n            closeBrackets(),\n            rectangularSelection(),\n            crosshairCursor(),\n            highlightActiveLine(),\n            highlightSelectionMatches(),\n            EditorView.lineWrapping,\n            codemirrorTheme.of(lightTheme),\n            keymap.of([\n                ...closeBracketsKeymap,\n                ...defaultKeymap,\n                ...searchKeymap,\n                ...historyKeymap,\n                ...foldKeymap,\n                ...completionKeymap,\n                indentWithTab,\n            ])\n        ])();\n        return EditorState.create({\n            doc: doc,\n            extensions: [\n                gairdaoBasicSetup,\n                placeholdersPlugin,\n                emojiPlaceholdersPlugin,\n                autocompletion({\n                    override: [\n                        mentionSuggestions(mentionUsers, '@'),\n                        emojiSuggestions(),\n                    ],\n                    icons: false,\n                    defaultKeymap: true\n                }),\n                hyperLink,\n                rangeHighlighting(),\n                helpPanel(),\n                wordCounter(countWordsPanelTarget),\n                placeholder('Share your insights to help enrich our academic community.'),\n                markdown({\n                    base: markdownLanguage,\n                    addKeymap: true,\n                    completeHTMLTags: true,\n                    // codeLanguages: languages\n                }),\n\n                EditorView.updateListener.of((viewUpdate: ViewUpdate) => {\n                    if (viewUpdate.docChanged) {\n                        if (updateCallback) {\n                            updateCallback(viewUpdate);\n                        } else {\n                            console.warn('updateCallback is not defined');\n                        }\n                    }\n                }),\n                EditorView.domEventHandlers({\n                    drop(event: DragEvent, view: EditorView) {\n                        if (uploadFileCallback) {\n                            uploadFileCallback(event);\n                        } else {\n                            console.warn('uploadFileCallback is not defined');\n                        }\n                        return false;\n                    },\n                    paste(event: ClipboardEvent) {\n                        if (uploadFileCallback) {\n                            uploadFileCallback(event);\n                        } else {\n                            console.warn('uploadFileCallback is not defined');\n                        }\n                        return false;\n                    }\n                })\n            ]\n        })\n    }\n    /**\n     *\n     * @param state\n     * @param parent\n     * @returns\n     */\n    static newEditor = (state: EditorState, parent: Element | DocumentFragment): EditorView => {\n        return new EditorView({\n            state: state,\n            parent: parent,\n        })\n    }\n    /**\n     * \u8BBE\u7F6E\u53D8\u6210\n     * @param state\n     */\n    setState = (state: EditorState) => {\n        this._editor.setState(state)\n    }\n\n    //#region ============================================================ codemirror \u65B9\u6CD5\u5C01\u88C5 ============================================================\n    /**\n     * \u83B7\u53D6\u6307\u5B9A\u8303\u56F4\u7684\u5185\u5BB9\n     * @param editor\n     * @param from \u5F00\u59CB\u4F4D\u7F6E\n     * @param to \u7ED3\u675F\u4F4D\u7F6E\n     * @returns \u8303\u56F4\u5185\u7684\u5185\u5BB9\n     */\n    static sliceDoc = (editor: EditorView, from?: number, to?: number): string => {\n        return editor.state.sliceDoc(from, to)\n    }\n    /**\n     * \u83B7\u53D6\u6587\u6863\u5185\u5BB9\n     * @param editor\n     * @returns \u5185\u5BB9\n     */\n    static getDocString = (editor: EditorView): string => {\n        return editor.state.doc.toString()\n    }\n    /**\n     * \u83B7\u53D6\u6587\u6863\u957F\u5EA6\n     * @param editor\n     * @returns \u957F\u5EA6\n     */\n    static getDocLength = (editor: EditorView): number => {\n        return editor.state.doc.length\n    }\n    /**\n     * \u83B7\u53D6\u5F53\u524D\u9009\u4E2D\u5185\u5BB9, \u5E76\u8FD4\u56DE\u9009\u4E2D\u7684\u6587\u672C\u5185\u5BB9, \u53EF\u4EE5\u9009\u4E2D\u591A\u4E2A\u4E0D\u540C\u7684\u6BB5\u843D, \u591A\u4E2A\u6BB5\u843D\u4E4B\u95F4\u4F1A\u4EE5 \\n \u6362\u884C\n     * @param editor\n     * @returns \u6587\u672C\u5185\u5BB9, \u591A\u4E2A\u9009\u4E2D\u4E4B\u95F4\u4F1A\u6362\u884C\n     */\n    static getSelectionRangesText = (editor: EditorView): string => {\n        let ranges = editor.state.selection.ranges\n        let text = ''\n        if (ranges.length > 0) {\n            for (let i = 0; i < ranges.length; i++) {\n                let range = ranges[i]\n                if (range != undefined) {\n                    let rangeText = editor.state.sliceDoc(range.from, range.to)\n                    if (isBlank(rangeText)) {\n                        continue\n                    }\n                    if (i != 0) {\n                        text += '\\n'\n                    }\n                    text += rangeText\n                }\n            }\n        }\n        return text\n    }\n    /**\n     * \u83B7\u53D6\u9009\u4E2D\u7684\u5185\u5BB9\n     * @param editor\n     * @returns \u5B58\u5728\u591A\u4E2A\u9009\u4E2D\u6240\u4EE5\u8FD4\u56DE\u6570\u7EC4\n     */\n    static getSelectionRangesArr = (editor: EditorView): readonly SelectionRange[] => {\n    return editor.state.selection.ranges\n}\n/**\n * \u5728\u6307\u5B9A\u4F4D\u7F6E(istFrom -> istTo)\u63D2\u5165 content, \u6216\u5C06\u5185\u5BB9\u66FF\u6362\u4E3A content, \u968F\u540E\u9009\u4E2D (selectFrom -> selectTo)\n * istFrom \u4E0E istTo \u76F8\u540C\u5373\u4E3A\u63D2\u5165\uFF0C\u4E0D\u540C\u5373\u4E3A\u66FF\u6362\n * \u5982\u679C\u8981\u5C06\u5149\u6807\u79FB\u52A8\u5230\u67D0\u5904, selectFrom \u4E0E selectTo \u76F8\u540C\u5373\u53EF\n *\n * @param istFrom \u63D2\u5165\u7684\u5F00\u59CB\u4F4D\u7F6E\n * @param istTo \u63D2\u5165\u7684\u7ED3\u675F\u4F4D\u7F6E\n * @param content \u63D2\u5165\u7684\u5185\u5BB9\n * @param selectFrom \u63D2\u5165\u5185\u5BB9\u540E, \u5C06\u5149\u6807\u79FB\u52A8\u5230\u7684\u5F00\u59CB\u4F4D\u7F6E\n * @param selectTo \u63D2\u5165\u5185\u5BB9\u540E, \u5C06\u5149\u6807\u79FB\u52A8\u5230\u7684\u7ED3\u675F\u4F4D\u7F6E\n */\nstatic insert = (editor: EditorView, istFrom: number, istTo: number, content: string, selectFrom: number, selectTo: number) => {\n    let changeByRange = {\n        /* \u521B\u5EFA\u53D8\u66F4\u7684\u5185\u5BB9, \u53EF\u4EE5\u662F\u4E2A\u6570\u7EC4, \u8BF4\u660E\u540C\u65F6\u4FEE\u6539\u591A\u4E2A\u90E8\u5206 */\n        changes: [{ from: istFrom, to: istTo, insert: content }],\n        /* \u4FEE\u6539\u4E4B\u540E\u5149\u6807\u79FB\u52A8\u5230\u7684\u4F4D\u7F6E */\n        range: EditorSelection.range(selectFrom, selectTo)\n    }\n    editor.dispatch(changeByRange)\n}\nsliceDoc = (from?: number, to?: number): string => {\n    return this._editor.state.sliceDoc(from, to)\n}\ngetDocString = (): string => {\n    return CodemirrorWrapper.getDocString(this._editor)\n}\ngetDocLength = (): number => {\n    return CodemirrorWrapper.getDocLength(this._editor)\n}\ngetSelectionRangesText = (): string => {\n    return CodemirrorWrapper.getSelectionRangesText(this._editor)\n}\ngetSelectionRangesArr = (): readonly SelectionRange[] => {\n    return CodemirrorWrapper.getSelectionRangesArr(this._editor)\n}\ngetDocumentTop = (): number => {\n    return this._editor.documentTop\n}\ngetElementAtHeight = (height: number): BlockInfo => {\n    return this._editor.elementAtHeight(height)\n}\ngetLineBlockAtHeight = (height: number): BlockInfo => {\n    return this._editor.lineBlockAtHeight(height)\n}\ninsert = (istFrom: number, istTo: number, content: string, selectFrom: number, selectTo: number) => {\n    CodemirrorWrapper.insert(this._editor, istFrom, istTo, content, selectFrom, selectTo)\n}\n//#endregion\n//#region ============================================================ \u81EA\u5B9A\u4E49\u547D\u4EE4 ============================================================\n/**\n * \u884C\u5185\u683C\u5F0F\u7684\u66FF\u6362\u547D\u4EE4, \u7528\u4E8E\u524D\u540E\u7F00\u76F8\u540C\u7684\u683C\u5F0F, \u5982 `**` / `~~` \u7B49\n *\n * @param editor \u7F16\u8F91\u5668\n * @param range \u8303\u56F4\n * @param target \u6DFB\u52A0\u7684\u524D\u540E\u7F00\u5B57\u7B26, \u5982\u52A0\u7C97\u662F **, \u884C\u5185\u4EE3\u7801\u5757\u662F `\n */\nstatic replaceInlineCommand = (editor: EditorView, range: SelectionRange, target: string): any => {\n    let len = target.length\n\n    const prefixFrom: number = range.from - len\n    const prefixTo: number = range.from\n    const prefix = this.sliceDoc(editor, prefixFrom, prefixTo)\n\n    const suffixFrom: number = range.to\n    const suffixTo: number = range.to + len\n    const suffix = this.sliceDoc(editor, suffixFrom, suffixTo)\n    // \u5224\u65AD\u662F\u53D6\u6D88\u8FD8\u662F\u6DFB\u52A0, \u5982\u679C\u88AB\u9009\u4E2D\u7684\u6587\u672C\u524D\u540E\u5DF2\u7ECF\u662F target \u5B57\u7B26, \u5219\u5220\u9664\u524D\u540E\u5B57\u7B26\n    if (prefix == target && suffix == target) {\n        return {\n            changes: [\n                { from: prefixFrom, to: prefixTo, insert: '' },\n                { from: suffixFrom, to: suffixTo, insert: '' }\n            ],\n            range: EditorSelection.range(prefixFrom, suffixFrom - len)\n        }\n    } else {\n        return {\n            changes: [\n                { from: range.from, insert: target },\n                { from: range.to, insert: target }\n            ],\n            range: EditorSelection.range(range.from + len, range.to + len)\n        }\n    }\n}\n/**\n * \u884C\u5185\u683C\u5F0F\u7684\u66FF\u6362\u547D\u4EE4, \u7528\u4E8E\u524D\u540E\u7F00\u4E0D\u540C\u7684\u683C\u5F0F, \u5982 `<sup></sup>`\u7B49\n *\n * @param editor \u7F16\u8F91\u5668\n * @param range  \u8303\u56F4\n * @param prefixTarget \u524D\u7F00\n * @param suffixTarget \u540E\u7F00\n * @returns\n */\nstatic replaceDifInlineCommand = (editor: EditorView, range: SelectionRange, prefixTarget: string, suffixTarget: string): any => {\n    let prefixLen = prefixTarget.length\n    let suffixLen = suffixTarget.length\n\n    const prefixFrom: number = range.from - prefixLen\n    const prefixTo: number = range.from\n    const prefix = this.sliceDoc(editor, prefixFrom, prefixTo)\n\n    const suffixFrom: number = range.to\n    const suffixTo: number = range.to + suffixLen\n    const suffix = this.sliceDoc(editor, suffixFrom, suffixTo)\n\n    // \u5224\u65AD\u662F\u53D6\u6D88\u8FD8\u662F\u6DFB\u52A0, \u5982\u679C\u88AB\u9009\u4E2D\u7684\u6587\u672C\u524D\u540E\u5DF2\u7ECF\u662F target \u5B57\u7B26, \u5219\u5220\u9664\u524D\u540E\u5B57\u7B26\n    if (prefix == prefixTarget && suffix == suffixTarget) {\n        return {\n            changes: [\n                { from: prefixFrom, to: prefixTo, insert: '' },\n                { from: suffixFrom, to: suffixTo, insert: '' }\n            ],\n            range: EditorSelection.range(prefixFrom, range.to - prefixLen)\n        }\n    } else {\n        return {\n            changes: [\n                { from: range.from, insert: prefixTarget },\n                { from: range.to, insert: suffixTarget }\n            ],\n            range: EditorSelection.range(range.from + prefixLen, range.to + prefixLen)\n        }\n    }\n}\n/**\n * \u5C06\u9009\u4E2D\u5185\u5BB9\u66FF\u6362\u4E3A content, \u5982\u679C\u6CA1\u6709\u9009\u4E2D, \u5219\u5728\u5149\u6807\u4F4D\u7F6E\u63D2\u5165\n * @param editor \u7F16\u8F91\u5668\n * @param content \u63D2\u5165\u7684\u5185\u5BB9\n */\nstatic insertBlockCommand = (editor: EditorView, content: string) => {\n    editor.dispatch(editor.state.replaceSelection(content))\n}\n\n/** \u9009\u4E2D\u884C\u53D8\u6210\u6807\u9898 */\nprivate static commandHeading = (editor: EditorView) => {\n// \u83B7\u53D6\u9009\u4E2D\u7684\u8303\u56F4\n    let { from, to } = editor.state.selection.main;\n\n// \u83B7\u53D6\u884C\u7684\u5F00\u59CB\u548C\u7ED3\u675F\n    let start = editor.state.doc.lineAt(from).from;\n    let end = editor.state.doc.lineAt(to).to;\n\n// \u83B7\u53D6\u884C\u7684\u5F00\u59CB\u90E8\u5206\n    let lineStart = editor.state.doc.sliceString(start, start + 3);\n\n// \u521B\u5EFA\u4E00\u4E2A Transaction \u5BF9\u8C61\n    let tr;\n    if (lineStart === '## ') {\n// \u5982\u679C\u884C\u7684\u5F00\u59CB\u5DF2\u7ECF\u662F '## '\uFF0C\u5C06\u5176\u5220\u9664\n        tr = editor.state.update({\n            changes: { from: start, to: start + 3 },\n            selection: { anchor: end - 3, head: end - 3 }\n        });\n    } else {\n// \u5982\u679C\u884C\u7684\u5F00\u59CB\u4E0D\u662F '## '\uFF0C\u6DFB\u52A0 '## '\n        tr = editor.state.update({\n            changes: { from: start, to: start, insert: '## ' },\n            selection: { anchor: end + 3, head: end + 3 }\n        });\n    }\n\n// \u5E94\u7528 Transaction \u5BF9\u8C61\n    editor.dispatch(tr);\n    editor.focus();\n};\n\n/** \u9009\u4E2D\u5185\u5BB9\u52A0\u7C97 */\nprivate static commandBold = (editor: EditorView) => {\n    editor.dispatch(editor.state.changeByRange((range: SelectionRange) => this.replaceInlineCommand(editor, range, '**')))\n}\n\n/** \u6807\u8BB0\u9009\u62E9\u5185\u5BB9 */\nprivate static commandHighlighter = (editor: EditorView) => {\n    editor.dispatch(editor.state.changeByRange((range: SelectionRange) => this.replaceInlineCommand(editor, range, '`')))\n}\n\n/** \u9009\u4E2D\u5185\u5BB9\u659C\u4F53 */\nprivate static commandItalic = (editor: EditorView) => {\n    editor.dispatch(editor.state.changeByRange((range: SelectionRange) => this.replaceInlineCommand(editor, range, '*')))\n}\n/** \u9009\u4E2D\u5185\u5BB9\u589E\u52A0\u5220\u9664\u7EBF */\nprivate static commandStrike = (editor: EditorView) => {\n    editor.dispatch(editor.state.changeByRange((range: SelectionRange) => this.replaceInlineCommand(editor, range, '~~')))\n}\n/** \u9009\u62E9\u5185\u5BB9\u8BBE\u7F6E\u4E3A\u884C\u5185\u4EE3\u7801\u5757 */\nprivate static commandCode = (editor: EditorView) => {\n    editor.dispatch(editor.state.changeByRange((range: SelectionRange) => this.replaceInlineCommand(editor, range, '`')))\n}\n/** \u9009\u62E9\u5185\u5BB9\u8BBE\u7F6E\u4E3A\u4E0A\u6807 */\nprivate static commandSup = (editor: EditorView) => {\n    editor.dispatch(editor.state.changeByRange((range: SelectionRange) => this.replaceDifInlineCommand(editor, range, '<sup>', '</sup>')))\n}\n/** \u9009\u62E9\u5185\u5BB9\u8BBE\u7F6E\u4E3A\u4E0B\u6807 */\nprivate static commandSub = (editor: EditorView) => {\n    editor.dispatch(editor.state.changeByRange((range: SelectionRange) => this.replaceDifInlineCommand(editor, range, '<sub>', '</sub>')))\n}\n/** \u5728\u5F53\u524D\u4F4D\u7F6E\u589E\u52A0\u8868\u683C */\nprivate static commandTable = (editor: EditorView) => {\n    this.insertBlockCommand(editor, `\\n|||\\n|---|---|\\n|||\\n`)\n}\n\n/** \u5728\u5F53\u524D\u4F4D\u7F6E\u589E\u52A0\u5355\u9009\u6846 */\nprivate static commandCheckBox = (editor: EditorView) => {\n    this.insertBlockCommand(editor, `\\n- [ ] \\n`)\n}\n/** \u5728\u5F53\u524D\u4F4D\u7F6E\u589E\u52A0\u5206\u5272\u7EBF */\nprivate static commandSeparator = (editor: EditorView) => {\n    this.insertBlockCommand(editor, `\\n---\\n`)\n}\n/** \u5728\u5F53\u524D\u4F4D\u7F6E\u589E\u52A0\u5F15\u7528 */\nprivate static commandQuote = (editor: EditorView) => {\n    this.insertBlockCommand(editor, `\\n>\\n>\\n`)\n}\n/** \u5728\u5F53\u524D\u4F4D\u7F6E\u589E\u52A0\u65E0\u5E8F\u5217\u8868 */\nprivate static commandUnordered = (editor: EditorView) => {\n    this.insertBlockCommand(editor, `\\n- `)\n    editor.focus()\n}\n/** \u5728\u5F53\u524D\u4F4D\u7F6E\u589E\u52A0\u6709\u5E8F\u5217\u8868 */\nprivate static commandOrdered = (editor: EditorView) => {\n    this.insertBlockCommand(editor, `\\n1. `)\n    editor.focus()\n}\n/** \u5728\u5F53\u524D\u4F4D\u7F6E\u589E\u52A0\u56FE\u7247 */\nprivate static commandImg = (editor: EditorView) => {\n    this.insertBlockCommand(editor, `\\n![]()\\n`)\n}\n/** \u5728\u5F53\u524D\u4F4D\u7F6E\u589E\u52A0\u94FE\u63A5 */\nprivate static commandLink = (editor: EditorView) => {\n    this.insertBlockCommand(editor, `\\n[]()\\n`)\n}\n/** \u683C\u5F0F\u5316\u5185\u5BB9, \u4F7F\u7528 prettier */\nprivate static commandFormatMarkdown = (editor: EditorView) => {\n    prettier.format(CodemirrorWrapper.getDocString(editor), { semi: false, parser: 'markdown', plugins: [pluginMarkdown] }).then((formatContent) => {\n        let maxLen = CodemirrorWrapper.getDocLength(editor)\n        CodemirrorWrapper.insert(editor, 0, maxLen, formatContent, 0, 0)\n    })\n}\n/** \u9884\u89C8 */\nprivate static commandPreview = (editor: EditorView) => {\n    editor.dispatch({\n        effects: toggleMarkdownPreview.of(!editor.state.field(markdownPreviewState))\n    })\n\n};\n\nprivate static switchCodeMirrorThemeMode = (editor: EditorView, isDark: boolean) => {\n    if (isDark) {\n        editor.dispatch({\n            effects: codemirrorTheme.reconfigure(oneDarkTheme)\n        })\n    } else {\n        editor.dispatch({\n            effects: codemirrorTheme.reconfigure(lightTheme)\n        })\n    }\n}\n\n// \u5B9E\u4F8B\u8C03\u7528\ninsertBlockCommand = (content: string) => {\n    CodemirrorWrapper.insertBlockCommand(this._editor, content)\n}\n\ncommandHeading = () => {\n    CodemirrorWrapper.commandHeading(this._editor)\n}\ncommandBold = () => {\n    CodemirrorWrapper.commandBold(this._editor)\n}\ncommandItalic = () => {\n    CodemirrorWrapper.commandItalic(this._editor)\n}\ncommandStrike = () => {\n    CodemirrorWrapper.commandStrike(this._editor)\n}\ncommandCode = () => {\n    CodemirrorWrapper.commandCode(this._editor)\n}\ncommandSup = () => {\n    CodemirrorWrapper.commandSup(this._editor)\n}\ncommandSub = () => {\n    CodemirrorWrapper.commandSub(this._editor)\n}\ncommandTable = () => {\n    CodemirrorWrapper.commandTable(this._editor)\n}\ncommandCheckBox = () => {\n    CodemirrorWrapper.commandCheckBox(this._editor)\n}\ncommandSeparator = () => {\n    CodemirrorWrapper.commandSeparator(this._editor)\n}\ncommandQuote = () => {\n    CodemirrorWrapper.commandQuote(this._editor)\n}\n\ncommandUnordered = () => {\n    CodemirrorWrapper.commandUnordered(this._editor)\n}\ncommandOrdered = () => {\n    CodemirrorWrapper.commandOrdered(this._editor)\n}\ncommandImg = () => {\n    CodemirrorWrapper.commandImg(this._editor)\n}\ncommandLink = () => {\n    CodemirrorWrapper.commandLink(this._editor)\n}\ncommandFormatMarkdown = async () => {\n    CodemirrorWrapper.commandFormatMarkdown(this._editor)\n}\n\nswitchCodeMirrorThemeMode = (isDark: boolean) => {\n    CodemirrorWrapper.switchCodeMirrorThemeMode(this._editor, isDark)\n}\n\ncommandHighlighter = () => {\n    CodemirrorWrapper.commandHighlighter(this._editor)\n}\n\ncommandPreview = () => {\n    CodemirrorWrapper.commandPreview(this._editor)\n}\n\ndestroy = () => {\n    this._editor.destroy()\n}\n//#endregion\n}", "import { Controller } from \"@hotwired/stimulus\";\nimport { CodemirrorWrapper } from \"../../commons/codemirror-wrapper\";\nimport tippy from \"tippy.js\";\nimport { Picker } from \"emoji-mart\";\nimport GairdaoController from \"../gairdao_controller\";\nexport default class extends Controller {\n  static values = { inModal: Boolean };\n  static targets = [\n      \"socialFeedPostForm\",\n      \"socialFeedsPostBtn\",\n      \"socialFeedPostEditor\",\n      \"tagsPanel\",\n      \"filesPanel\",\n      \"imagesPanel\",\n      \"editorPanel\",\n      \"countWordsPanel\",\n      \"socialFeedPostAttachmentView\",\n      \"editorToolbar\",\n  ];\n\n  disconnect() {\n    this.editor.destroy();\n    this.imagesPond.destroy();\n    this.filesPond.destroy();\n    this.filePondUnBindEvents();\n  }\n\n  connect() {\n    const mentionUsers = [\n      {label: '@Walter White', apply: '[[@Walter White]]', info: 'Your first friend'},\n      {label: '@James Ting', apply: '[[@James Ting(ksish12)]]'},\n      {label: '@\u9C81\u897F\u897F', apply: '[[@\u9C81\u897F\u897F]]'},\n      {label: '@\u4E2D\u672C\u806A', apply: '[[@\u4E2D\u672C\u806A]]'},\n      {label: '@\u30B5\u30C8\u30B7\u30FB\u30CA\u30AB\u30E2\u30C8', apply: '[[@\u30B5\u30C8\u30B7\u30FB\u30CA\u30AB\u30E2\u30C8]]'},\n      {label: '@\u91CE\u6BD4\u306E\u3073\u592A', apply: '[[@\u91CE\u6BD4\u306E\u3073\u592A]]'},\n      {label: '@\uC131\uB355\uC120', apply: '[[@\uC131\uB355\uC120]]'},\n    ];\n\n    try {\n      this.doc = localStorage.getItem('post-draft') || '';\n    } catch (e) {\n      console.error('localStorage is not available:', e);\n    }\n    this.editor = this.initEditor(mentionUsers);\n    this.initTagsPanel(this.tagsPanelTarget);\n    this.initFilesPanel(this.filesPanelTarget);\n    this.initImagesPanel(this.imagesPanelTarget);\n    this.initSwitchThemeMode();\n    this.initEditorToolbar(this.editorToolbarTarget);\n    this.filePondBindEvents();\n  }\n\n  initEditor(mentionUsers){\n    let state = CodemirrorWrapper.newState(\n        mentionUsers,\n        this.countWordsPanelTarget,\n        this.doc,\n        this.handleEditorViewUpdate,\n        this.handleEditorViewDropOrPasteFile\n    );\n    const view = CodemirrorWrapper.newEditor(state, this.socialFeedPostEditorTarget);\n    // init localStorage draft\n    this.updateContent(view);\n    return new CodemirrorWrapper(view);\n  }\n\n  initEditorToolbar(toolbarDom) {\n    const buttons = toolbarDom.querySelectorAll('span.btn');\n    const controller = this;\n    buttons.forEach((button) => {\n      button.addEventListener('click', function(e) {\n        const cmd = e.currentTarget.dataset.cmd;\n        if (cmd) controller.editor[cmd]();\n      });\n    });\n  }\n\n\n  submitPost(e) {\n    e.preventDefault();\n    if (!this.validationForm()) return;\n    const button = e.currentTarget;\n    button.setAttribute(\"data-kt-indicator\", \"on\");\n    button.disabled = true;\n    const controller = this;\n    const inModal = this.inModalValue;\n    function handleSubmitEnd() {\n      button.disabled = false;\n      button.removeAttribute(\"data-kt-indicator\");\n      localStorage.removeItem('post-draft');\n      document.removeEventListener(\"turbo:submit-end\", handleSubmitEnd);\n      if (inModal) {\n        // close modal\n        window.dispatchEvent(new CustomEvent('modal:close'));\n\n      }\n    }\n    setTimeout(function() {\n      controller.socialFeedPostFormTarget.requestSubmit();\n      document.addEventListener(\"turbo:submit-end\", handleSubmitEnd);\n    }, 2000,{once: true});\n  }\n\n  emojiToolbarExternalAction(e) {\n    tippy(e.currentTarget, {\n      appendTo: document.body,\n      content: this.initEmojiPicker(),\n      interactive: true,\n      trigger: 'manual',\n      placement: 'bottom-start',\n      showOnCreate: true,\n      onHidden(instance) {\n        instance.destroy();\n      }\n    });\n  }\n\n  toolbarExternalAction(e) {\n    e.preventDefault();\n    const button = e.currentTarget;\n    const targetName = button.dataset.target;\n    const target = this.targets.find(targetName);\n    button.classList.toggle('show');\n    target.classList.toggle('show');\n    this.toolbarAttachmentViewToggle();\n  }\n\n  toolbarAttachmentViewToggle() {\n    const elements = [this.imagesPanelTarget, this.filesPanelTarget];\n    if (elements.some(element => element.classList.contains('show'))) {\n      this.socialFeedPostAttachmentViewTarget.classList.add('show');\n    }\n    if (elements.every(element => !element.classList.contains('show'))) {\n      this.socialFeedPostAttachmentViewTarget.classList.remove('show');\n    }\n  }\n\n  handleEditorViewUpdate = (viewUpdate) => {\n    this.updateContent(viewUpdate);\n    this.doc = this.getMarkdownContent(viewUpdate);\n    try {\n      localStorage.setItem('post-draft',this.doc);\n    } catch (e) {\n      console.error('localStorage is not available:', e);\n    }\n  }\n\n  handleEditorViewDropOrPasteFile = (event) => {\n    let files;\n    switch (event.type) {\n      case 'drop':\n        files = Array.from(event.dataTransfer.files);\n        break;\n      case 'paste':\n        files = Array.from(event.clipboardData.files);\n        break;\n      default:\n        return;\n    }\n    if (files.length === 0) return;\n    console.log('handleEditorViewDropOrPasteFile', event);\n    event.preventDefault();\n    files.forEach(file => this.handleFile(file));\n  };\n\n  handleFile = (file) => {\n    console.log('Adding file:', file);\n\n    const controller = this;\n    const isImage = file.type.startsWith('image');\n    const target = isImage ? 'imagesPanel' : 'filesPanel';\n    const pond = isImage ? this.imagesPond : this.filesPond;\n\n    const buttons = controller.editorToolbarTarget.querySelectorAll(`span.btn[data-target='${target}']`);\n    buttons.forEach(button => {\n      const targetName = button.dataset.target;\n      const target = controller.targets.find(targetName);\n      console.log('target', target);\n      console.log('targetName', targetName);\n      target.classList.add('show');\n      button.classList.add('show');\n    });\n    controller.toolbarAttachmentViewToggle();\n    pond.addFile(file).catch(error => console.log('FilePond error while adding file', error));\n  };\n\n  // \u83B7\u53D6 CodeMirror \u7F16\u8F91\u5668\u7684\u5185\u5BB9\n  getMarkdownContent(editorView) {\n    const doc = editorView.state.doc;\n    return doc.toString();\n  }\n\n  // \u5C06\u5185\u5BB9\u5B58\u50A8\u5728\u8F93\u5165\u5143\u7D20\u4E2D\n   setContentToInput(inputSelector, content) {\n    const inputDom = this.socialFeedPostFormTarget.querySelector(inputSelector);\n    inputDom.value = content;\n  }\n\n   updateContent(editorView) {\n    const markdown = this.getMarkdownContent(editorView);\n    this.setContentToInput('input[name=\"post[body_markdown]\"]', markdown);\n  }\n\n  initEmojiPicker() {\n    const theme = KTThemeMode.getMode();\n    const controller = this;\n    const pickerOptions = {\n      onEmojiSelect: (emoji,e) => {\n        const emojiText =emoji.shortcodes;\n        controller.editor.insertBlockCommand(emojiText);\n      },\n      theme: theme,\n    }\n    return new Picker(pickerOptions);\n  }\n\n  initTagsPanel(targetDom) {\n    this.tagify = GairdaoController.initTagsPanel(targetDom.children[0], true );\n  }\n  initImagesPanel(targetDom) {\n    const dom = targetDom.querySelector('input[name=\"post[images][]\"]')\n    this.imagesPond = FilePondRails.create(dom,{\n      maxFileSize: 2*1000*1000,\n      maxFiles: 10,\n      labelIdle:'<i class=\"ki-outline ki-picture text-warning \"></i> Drag & Drop Images (Max. 10) or <span class=\"filepond--label-action\">Browse</span>',\n      allowImagePreview: true,\n    });\n  }\n\n  initFilesPanel(targetDom) {\n    const dom = targetDom.querySelector('input[name=\"post[files][]\"]')\n    this.filesPond = FilePondRails.create(dom, {\n      acceptedFileTypes: ['application/pdf'],\n      labelIdle:'<i class=\"ki-outline ki-document text-primary \"></i> Drag & Drop PDFs (Max. 5) or <span class=\"filepond--label-action\">Browse</span>',\n      maxFiles: 5,\n      maxFileSize: 5*1000*1000,\n    });\n  }\n  initSwitchThemeMode() {\n    const mode = KTThemeMode.getMode();\n    const controller = this;\n    // \u8F7D\u5165\u7684\u65F6\u5019\u5E94\u7528\u5F53\u524D\u7684\u4E3B\u9898\u6A21\u5F0F\n    controller.editor.switchCodeMirrorThemeMode(mode === \"dark\")\n    KTThemeMode.on(\"kt.thememode.change\", function() {\n      const changeToMode = KTThemeMode.getMode();\n      controller.editor.switchCodeMirrorThemeMode(changeToMode === \"dark\")\n    });\n  }\n\n  filePondBindEvents(){\n    document.addEventListener('FilePond:processfilestart', this.filePondProcessfilestart.bind(this));\n    document.addEventListener('FilePond:processfile', this.filePondProcessfiles.bind(this));\n  }\n\n  filePondUnBindEvents(){\n    document.removeEventListener('FilePond:processfilestart', this.filePondProcessfilestart);\n    document.removeEventListener('FilePond:processfile', this.filePondProcessfiles);\n  }\n\n  filePondProcessfilestart(e) {\n    console.log('FilePond ready for use', e.detail);\n    this.socialFeedsPostBtnTarget.setAttribute(\"data-kt-indicator\", \"on\");\n    // get create method reference\n  }\n\n  filePondProcessfiles(e) {\n    console.log('FilePond ready for use', e.detail);\n    this.socialFeedsPostBtnTarget.removeAttribute(\"data-kt-indicator\");\n    // get create method reference\n  }\n\n\n  validationForm() {\n    // validate doc is not null\n    if (this.doc.toString().length === 0) {\n      this.editorPanelTarget.classList.add('border-danger');\n      this.editorPanelTarget.classList.remove('border-gray-300');\n      this.editorPanelTarget.setAttribute('title', 'Please enter content');\n      const tooltip = new window.bootstrap.Tooltip(this.editorPanelTarget);\n      tooltip.show();\n      const controller = this;\n      setTimeout(function() {\n        tooltip.hide();\n        tooltip.disable();\n        controller.editorPanelTarget.classList.remove('border-danger');\n        controller.editorPanelTarget.classList.add('border-gray-300');\n        controller.editorPanelTarget.removeAttribute('title');\n      }, 2000);\n      return false;\n    }\n    return true;\n  }\n\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n\n  static targets = [\"sharesActionMenu\"]\n\n  connect() {\n    this.initUI();\n  }\n\n  disconnect() {\n    this.clearUI();\n  }\n\n  initUI() {\n      new window.KTMenu(this.sharesActionMenuTarget);\n\n      window.refreshFsLightbox();\n  }\n\n  clearUI() {\n  }\n\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  static targets = [ \"sidebarDrawer\" ]\n  connect() {\n    this.initUI();\n  }\n\n  disconnect() {\n    this.clearUI();\n  }\n\n  initUI() {\n    if (this.sidebarDrawerTarget) {\n      const sidebarDom = this.sidebarDrawerTarget;\n      const sidebarDrawer = new KTDrawer(sidebarDom);\n    }\n  }\n\n  clearUI() {\n  }\n}\n", "(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"wangEditor\"] = factory();\n\telse\n\t\troot[\"wangEditor\"] = factory();\n})(window, function() {\nreturn ", " \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 141);\n", "function _interopRequireDefault(obj) {\n  return obj && obj.__esModule ? obj : {\n    \"default\": obj\n  };\n}\n\nmodule.exports = _interopRequireDefault;", "module.exports = require(\"core-js-pure/stable/object/define-property\");", "/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n    extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n    return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n    if (typeof b !== \"function\" && b !== null)\r\n        throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n    extendStatics(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n    __assign = Object.assign || function __assign(t) {\r\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n            s = arguments[i];\r\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n        }\r\n        return t;\r\n    }\r\n    return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n    var t = {};\r\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n        t[p] = s[p];\r\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n                t[p[i]] = s[p[i]];\r\n        }\r\n    return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n    return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n    return new (P || (P = Promise))(function (resolve, reject) {\r\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n    });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n    function verb(n) { return function (v) { return step([n, v]); }; }\r\n    function step(op) {\r\n        if (f) throw new TypeError(\"Generator is already executing.\");\r\n        while (_) try {\r\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n            if (y = 0, t) op = [op[0] & 2, t.value];\r\n            switch (op[0]) {\r\n                case 0: case 1: t = op; break;\r\n                case 4: _.label++; return { value: op[1], done: false };\r\n                case 5: _.label++; y = op[1]; op = [0]; continue;\r\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n                default:\r\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n                    if (t[2]) _.ops.pop();\r\n                    _.trys.pop(); continue;\r\n            }\r\n            op = body.call(thisArg, _);\r\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n    }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n    if (m) return m.call(o);\r\n    if (o && typeof o.length === \"number\") return {\r\n        next: function () {\r\n            if (o && i >= o.length) o = void 0;\r\n            return { value: o && o[i++], done: !o };\r\n        }\r\n    };\r\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n    if (!m) return o;\r\n    var i = m.call(o), r, ar = [], e;\r\n    try {\r\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n    }\r\n    catch (error) { e = { error: error }; }\r\n    finally {\r\n        try {\r\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n        }\r\n        finally { if (e) throw e.error; }\r\n    }\r\n    return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n    for (var ar = [], i = 0; i < arguments.length; i++)\r\n        ar = ar.concat(__read(arguments[i]));\r\n    return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n    for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n    for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n        for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n            r[k] = a[j];\r\n    return r;\r\n}\r\n\r\nexport function __spreadArray(to, from) {\r\n    for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\r\n        to[j] = from[i];\r\n    return to;\r\n}\r\n\r\nexport function __await(v) {\r\n    return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n    return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n    function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n    function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n    function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n    function fulfill(value) { resume(\"next\", value); }\r\n    function reject(value) { resume(\"throw\", value); }\r\n    function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n    var i, p;\r\n    return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n    function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var m = o[Symbol.asyncIterator], i;\r\n    return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n    function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n    function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n    if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n    return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n    o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n    if (mod && mod.__esModule) return mod;\r\n    var result = {};\r\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n    __setModuleDefault(result, mod);\r\n    return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n    return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n    if (!privateMap.has(receiver)) {\r\n        throw new TypeError(\"attempted to get private field on non-instance\");\r\n    }\r\n    return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n    if (!privateMap.has(receiver)) {\r\n        throw new TypeError(\"attempted to set private field on non-instance\");\r\n    }\r\n    privateMap.set(receiver, value);\r\n    return value;\r\n}\r\n", "/**\n * @description 封装 DOM 操作\n * @wangfupeng\n */\n\nimport Editor from '../editor/index'\nimport { toArray } from './util'\n\n// 记录元素基于上一个相对&绝对定位的位置信息\ntype OffsetDataType = {\n    top: number\n    left: number\n    width: number\n    height: number\n    parent: Element | null\n}\n\n// 记录代理事件绑定\ntype listener = (e: Event) => void\ntype EventItem = {\n    elem: HTMLElement\n    selector: string\n    fn: listener\n    agentFn: listener\n}\nconst AGENT_EVENTS: EventItem[] = []\n\n/**\n * 根据 html 字符串创建 elem\n * @param {String} html html\n */\nfunction _createElemByHTML(html: string): HTMLElement[] {\n    const div = document.createElement('div')\n    div.innerHTML = html\n    const elems = div.children\n    return toArray(elems)\n}\n\n/**\n * 判断是否是 DOM List\n * @param selector DOM 元素或列表\n */\nfunction _isDOMList<T extends HTMLCollection | NodeList>(selector: unknown): selector is T {\n    if (!selector) {\n        return false\n    }\n    if (selector instanceof HTMLCollection || selector instanceof NodeList) {\n        return true\n    }\n    return false\n}\n\n/**\n * 封装 querySelectorAll\n * @param selector css 选择器\n */\nfunction _querySelectorAll(selector: string): HTMLElement[] {\n    const elems = document.querySelectorAll(selector)\n    return toArray(elems)\n}\n\n/**\n * 封装 _styleArrTrim\n * @param styleArr css\n */\nfunction _styleArrTrim(style: string | string[]): string[] {\n    let styleArr: string[] = []\n    let resultArr: string[] = []\n\n    if (!Array.isArray(style)) {\n        // 有 style，将 style 按照 `;` 拆分为数组\n        styleArr = style.split(';')\n    } else {\n        styleArr = style\n    }\n\n    styleArr.forEach(item => {\n        // 对每项样式，按照 : 拆分为 key 和 value\n        let arr = item.split(':').map(i => {\n            return i.trim()\n        })\n        if (arr.length === 2) {\n            resultArr.push(arr[0] + ':' + arr[1])\n        }\n    })\n    return resultArr\n}\n\nexport type DomElementSelector =\n    | string\n    | DomElement\n    | Document\n    | Node\n    | NodeList\n    | ChildNode\n    | ChildNode[]\n    | Element\n    | HTMLElement\n    | HTMLElement[]\n    | HTMLCollection\n    | EventTarget\n    | null\n    | undefined\n\n// 构造函数\nexport class DomElement<T extends DomElementSelector = DomElementSelector> {\n    // 定义属性\n    selector!: T\n    length: number\n    elems: HTMLElement[]\n    dataSource: Map<string, any>\n    prior?: DomElement // 通过 getNodeTop 获取顶级段落的时候，可以通过 prior 去回溯来源的子节点\n\n    /**\n     * 构造函数\n     * @param selector 任一类型的选择器\n     */\n    constructor(selector: T) {\n        // 初始化属性\n        this.elems = []\n        this.length = this.elems.length\n        this.dataSource = new Map()\n\n        if (!selector) {\n            return\n        }\n\n        // 原本就是 DomElement 实例，则直接返回\n        if (selector instanceof DomElement) {\n            return selector as DomElement<T>\n        }\n\n        let selectorResult: HTMLElement[] = [] // 存储查询结果\n        const nodeType = selector instanceof Node ? selector.nodeType : -1\n        this.selector = selector\n\n        if (nodeType === 1 || nodeType === 9) {\n            selectorResult = [selector as HTMLElement]\n        } else if (_isDOMList(selector)) {\n            // DOM List\n            selectorResult = toArray(selector)\n        } else if (selector instanceof Array) {\n            // Element 数组（其他数据类型，暂时忽略）\n            selectorResult = selector as HTMLElement[]\n        } else if (typeof selector === 'string') {\n            // 字符串\n            const tmpSelector = selector.replace('/\\n/mg', '').trim()\n            if (tmpSelector.indexOf('<') === 0) {\n                // 如 <div>\n                selectorResult = _createElemByHTML(tmpSelector)\n            } else {\n                // 如 #id .class\n                selectorResult = _querySelectorAll(tmpSelector)\n            }\n        }\n\n        const length = selectorResult.length\n        if (!length) {\n            // 空数组\n            return this\n        }\n\n        // 加入 DOM 节点\n        let i = 0\n        for (; i < length; i++) {\n            this.elems.push(selectorResult[i])\n        }\n        this.length = length\n    }\n\n    /**\n     * 获取元素 id\n     */\n    get id(): string {\n        return this.elems[0].id\n    }\n\n    /**\n     * 遍历所有元素，执行回调函数\n     * @param fn 回调函数\n     */\n    forEach(fn: (ele: HTMLElement, index?: number) => boolean | unknown): DomElement {\n        for (let i = 0; i < this.length; i++) {\n            const elem = this.elems[i]\n            const result = fn.call(elem, elem, i)\n            if (result === false) {\n                break\n            }\n        }\n        return this\n    }\n\n    /**\n     * 克隆元素\n     * @param deep 是否深度克隆\n     */\n    clone(deep: boolean = false): DomElement {\n        const cloneList: HTMLElement[] = []\n        this.elems.forEach(elem => {\n            cloneList.push(elem.cloneNode(!!deep) as HTMLElement)\n        })\n        return $(cloneList)\n    }\n\n    /**\n     * 获取第几个元素\n     * @param index index\n     */\n    get(index: number = 0): DomElement {\n        const length = this.length\n        if (index >= length) {\n            index = index % length\n        }\n        return $(this.elems[index])\n    }\n\n    /**\n     * 获取第一个元素\n     */\n    first(): DomElement {\n        return this.get(0)\n    }\n\n    /**\n     * 获取最后一个元素\n     */\n    last(): DomElement {\n        const length = this.length\n        return this.get(length - 1)\n    }\n\n    /**\n     * 绑定事件\n     * @param type 事件类型\n     * @param selector DOM 选择器\n     * @param fn 事件函数\n     */\n    on(type: string, fn: Function): DomElement\n    on(type: string, selector: string, fn: Function): DomElement\n    on(type: string, selector: string | Function, fn?: Function): DomElement {\n        if (!type) return this\n\n        // 没有 selector ，只有 type 和 fn\n        if (typeof selector === 'function') {\n            fn = selector\n            selector = ''\n        }\n\n        return this.forEach(elem => {\n            // 没有事件代理\n            if (!selector) {\n                // 无代理\n                elem.addEventListener(type, fn as listener)\n                return\n            }\n\n            // 有事件代理\n            const agentFn: listener = function (e) {\n                const target = e.target as HTMLElement\n                if (target.matches(selector as string)) {\n                    ;(fn as listener).call(target, e)\n                }\n            }\n            elem.addEventListener(type, agentFn)\n\n            // 缓存代理事件\n            AGENT_EVENTS.push({\n                elem: elem,\n                selector: selector as string,\n                fn: fn as listener,\n                agentFn,\n            })\n        })\n    }\n\n    /**\n     * 解绑事件\n     * @param type 事件类型\n     * @param selector DOM 选择器\n     * @param fn 事件函数\n     */\n    off(type: string, fn: Function): DomElement\n    off(type: string, selector: string, fn: Function): DomElement\n    off(type: string, selector: string | Function, fn?: Function): DomElement {\n        if (!type) return this\n\n        // 没有 selector ，只有 type 和 fn\n        if (typeof selector === 'function') {\n            fn = selector\n            selector = ''\n        }\n\n        return this.forEach(function (elem: HTMLElement) {\n            // 解绑事件代理\n            if (selector) {\n                let idx = -1\n                for (let i = 0; i < AGENT_EVENTS.length; i++) {\n                    let item = AGENT_EVENTS[i]\n                    if (item.selector === selector && item.fn === fn && item.elem === elem) {\n                        idx = i\n                        break\n                    }\n                }\n                if (idx !== -1) {\n                    const { agentFn } = AGENT_EVENTS.splice(idx, 1)[0]\n                    elem.removeEventListener(type, agentFn)\n                }\n            } else {\n                // @ts-ignore\n                elem.removeEventListener(type, fn)\n            }\n        })\n    }\n\n    /**\n     * 设置/获取 属性\n     * @param key key\n     * @param val value\n     */\n    attr(key: string): string\n    attr(key: string, val: string): DomElement\n    attr(key: string, val?: string): DomElement | string {\n        if (val == null) {\n            // 获取数据\n            return this.elems[0].getAttribute(key) || ''\n        }\n\n        // 否则，设置属性\n        return this.forEach(function (elem: HTMLElement) {\n            elem.setAttribute(key, val)\n        })\n    }\n\n    /**\n     * 删除 属性\n     * @param key key\n     */\n    removeAttr(key: string): void {\n        this.forEach(function (elem: HTMLElement) {\n            elem.removeAttribute(key)\n        })\n    }\n\n    /**\n     * 添加 css class\n     * @param className css class\n     */\n    addClass(className?: string): DomElement {\n        if (!className) {\n            return this\n        }\n\n        return this.forEach(function (elem: HTMLElement) {\n            if (elem.className) {\n                // 当前有 class\n                let arr: string[] = elem.className.split(/\\s/)\n                arr = arr.filter(item => {\n                    return !!item.trim()\n                })\n                // 添加 class\n                if (arr.indexOf(className) < 0) {\n                    arr.push(className)\n                }\n                // 修改 elem.class\n                elem.className = arr.join(' ')\n            } else {\n                // 当前没有 class\n                elem.className = className\n            }\n        })\n    }\n\n    /**\n     * 添加 css class\n     * @param className css class\n     */\n    removeClass(className?: string): DomElement {\n        if (!className) {\n            return this\n        }\n        return this.forEach(function (elem: HTMLElement) {\n            if (!elem.className) {\n                // 当前无 class\n                return\n            }\n\n            let arr: string[] = elem.className.split(/\\s/)\n            arr = arr.filter(item => {\n                item = item.trim()\n                // 删除 class\n                if (!item || item === className) {\n                    return false\n                }\n                return true\n            })\n            // 修改 elem.class\n            elem.className = arr.join(' ')\n        })\n    }\n\n    /**\n     * 是否有传入的 css class\n     * @param className css class\n     */\n    hasClass(className?: string): boolean {\n        if (!className) {\n            return false\n        }\n        const elem = this.elems[0]\n        if (!elem.className) {\n            // 当前无 class\n            return false\n        }\n        let arr: string[] = elem.className.split(/\\s/)\n        return arr.includes(className) // 是否包含\n    }\n\n    /**\n     * 修改 css\n     * @param key css key\n     * @param val css value\n     */\n    // css(key: string): string\n    css(key: string, val?: string | number): DomElement {\n        let currentStyle: string\n        if (val == '') {\n            currentStyle = ''\n        } else {\n            currentStyle = `${key}:${val};`\n        }\n        return this.forEach(elem => {\n            const style = (elem.getAttribute('style') || '').trim()\n            if (style) {\n                // 有 style，将 style 按照 `;` 拆分为数组\n                let resultArr: string[] = _styleArrTrim(style)\n\n                // 替换现有的 style\n                resultArr = resultArr.map(item => {\n                    if (item.indexOf(key) === 0) {\n                        return currentStyle\n                    } else {\n                        return item\n                    }\n                })\n                // 新增 style\n                if (currentStyle != '' && resultArr.indexOf(currentStyle) < 0) {\n                    resultArr.push(currentStyle)\n                }\n\n                // 去掉 空白\n                if (currentStyle == '') {\n                    resultArr = _styleArrTrim(resultArr)\n                }\n\n                // 重新设置 style\n                elem.setAttribute('style', resultArr.join('; '))\n            } else {\n                // 当前没有 style\n                elem.setAttribute('style', currentStyle)\n            }\n        })\n    }\n\n    /**\n     * 封装 getBoundingClientRect\n     */\n    getBoundingClientRect(): DOMRect {\n        const elem = this.elems[0]\n        return elem.getBoundingClientRect()\n    }\n\n    /**\n     * 显示\n     */\n    show(): DomElement {\n        return this.css('display', 'block')\n    }\n\n    /**\n     * 隐藏\n     */\n    hide(): DomElement {\n        return this.css('display', 'none')\n    }\n\n    /**\n     * 获取子节点（只有 DOM 元素）\n     */\n    children(): DomElement | null {\n        const elem = this.elems[0]\n        if (!elem) {\n            return null\n        }\n\n        return $(elem.children)\n    }\n\n    /**\n     * 获取子节点（包括文本节点）\n     */\n    childNodes(): DomElement | null {\n        const elem = this.elems[0]\n        if (!elem) {\n            return null\n        }\n\n        return $(elem.childNodes)\n    }\n\n    /**\n     * 将子元素全部替换\n     * @param $children 新的child节点\n     */\n    replaceChildAll($children: DomElement): void {\n        const parent = this.getNode()\n        const elem = this.elems[0]\n        while (elem.hasChildNodes()) {\n            parent.firstChild && elem.removeChild(parent.firstChild)\n        }\n        this.append($children)\n    }\n\n    /**\n     * 增加子节点\n     * @param $children 子节点\n     */\n    append($children: DomElement): DomElement {\n        return this.forEach(elem => {\n            $children.forEach(function (child: HTMLElement) {\n                elem.appendChild(child)\n            })\n        })\n    }\n\n    /**\n     * 移除当前节点\n     */\n    remove(): DomElement {\n        return this.forEach(elem => {\n            if (elem.remove) {\n                elem.remove()\n            } else {\n                const parent = elem.parentElement\n                parent && parent.removeChild(elem)\n            }\n        })\n    }\n\n    /**\n     * 当前元素，是否包含某个子元素\n     * @param $child 子元素\n     */\n    isContain($child: DomElement): boolean {\n        const elem = this.elems[0]\n        const child = $child.elems[0]\n        return elem.contains(child)\n    }\n\n    /**\n     * 获取当前元素 nodeName\n     */\n    getNodeName(): string {\n        const elem = this.elems[0]\n        return elem.nodeName\n    }\n\n    /**\n     * 根据元素位置获取元素节点（默认获取0位置的节点）\n     * @param n 元素节点位置\n     */\n    getNode(n: number = 0): Node {\n        let elem: Node\n        elem = this.elems[n]\n        return elem\n    }\n\n    /**\n     * 查询\n     * @param selector css 选择器\n     */\n    find(selector: string): DomElement {\n        const elem = this.elems[0]\n        return $(elem.querySelectorAll(selector))\n    }\n\n    /**\n     * 获取/设置 元素 text\n     * @param val text 值\n     */\n    text(): string\n    text(val: string): DomElement\n    text(val?: string): DomElement | string {\n        if (!val) {\n            // 获取 text\n            const elem = this.elems[0]\n\n            return elem.innerHTML.replace(/<[^>]+>/g, () => '')\n        } else {\n            // 设置 text\n            return this.forEach(function (elem: HTMLElement) {\n                elem.innerHTML = val\n            })\n        }\n    }\n\n    /**\n     * 设置/获取 元素 html\n     * @param val html 值\n     */\n    html(): string\n    html(val: string): DomElement\n    html(val?: string): DomElement | string {\n        const elem = this.elems[0]\n        if (!val) {\n            // 获取 html\n            return elem.innerHTML\n        } else {\n            // 设置 html\n            elem.innerHTML = val\n            return this\n        }\n    }\n\n    /**\n     * 获取元素 value\n     */\n    val(): string {\n        const elem = this.elems[0]\n        return (elem as any).value.trim() // 暂用 any\n    }\n\n    /**\n     * focus 到当前元素\n     */\n    focus(): DomElement {\n        return this.forEach(elem => {\n            elem.focus()\n        })\n    }\n\n    /**\n     * 当前元素前一个兄弟节点\n     */\n    prev(): DomElement {\n        const elem = this.elems[0]\n        return $(elem.previousElementSibling)\n    }\n\n    /**\n     * 当前元素后一个兄弟节点\n     * 不包括文本节点、注释节点）\n     */\n    next(): DomElement {\n        const elem = this.elems[0]\n        return $(elem.nextElementSibling)\n    }\n\n    /**\n     * 获取当前节点的下一个兄弟节点\n     * 包括文本节点、注释节点即回车、换行、空格、文本等等）\n     */\n    getNextSibling(): DomElement {\n        const elem = this.elems[0]\n        return $(elem.nextSibling)\n    }\n\n    /**\n     * 获取父元素\n     */\n    parent(): DomElement {\n        const elem = this.elems[0]\n        return $(elem.parentElement)\n    }\n\n    /**\n     * 查找父元素，直到满足 selector 条件\n     * @param selector css 选择器\n     * @param curElem 从哪个元素开始查找，默认为当前元素\n     */\n    parentUntil(selector: string, curElem?: HTMLElement): DomElement | null {\n        const elem = curElem || this.elems[0]\n        if (elem.nodeName === 'BODY') {\n            return null\n        }\n\n        const parent = elem.parentElement\n        if (parent === null) {\n            return null\n        }\n\n        if (parent.matches(selector)) {\n            // 找到，并返回\n            return $(parent)\n        }\n\n        // 继续查找，递归\n        return this.parentUntil(selector, parent)\n    }\n\n    /**\n     * 查找父元素，直到满足 selector 条件,或者 到达 编辑区域容器以及菜单栏容器\n     * @param selector css 选择器\n     * @param curElem 从哪个元素开始查找，默认为当前元素\n     */\n    parentUntilEditor(selector: string, editor: Editor, curElem?: HTMLElement): DomElement | null {\n        const elem = curElem || this.elems[0]\n        if ($(elem).equal(editor.$textContainerElem) || $(elem).equal(editor.$toolbarElem)) {\n            return null\n        }\n\n        const parent = elem.parentElement\n        if (parent === null) {\n            return null\n        }\n\n        if (parent.matches(selector)) {\n            // 找到，并返回\n            return $(parent)\n        }\n\n        // 继续查找，递归\n        return this.parentUntilEditor(selector, editor, parent)\n    }\n\n    /**\n     * 判读是否相等\n     * @param $elem 元素\n     */\n    equal($elem: DomElement | HTMLElement): boolean {\n        if ($elem instanceof DomElement) {\n            return this.elems[0] === $elem.elems[0]\n        } else if ($elem instanceof HTMLElement) {\n            return this.elems[0] === $elem\n        } else {\n            return false\n        }\n    }\n\n    /**\n     * 将该元素插入到某个元素前面\n     * @param selector css 选择器\n     */\n    insertBefore(selector: string | DomElement): DomElement {\n        const $referenceNode = $(selector)\n        const referenceNode = $referenceNode.elems[0]\n        if (!referenceNode) {\n            return this\n        }\n        return this.forEach(elem => {\n            const parent = referenceNode.parentNode as Node\n            parent?.insertBefore(elem, referenceNode)\n        })\n    }\n\n    /**\n     * 将该元素插入到selector元素后面\n     * @param selector css 选择器\n     */\n    insertAfter(selector: string | DomElement): DomElement {\n        const $referenceNode = $(selector)\n        const referenceNode = $referenceNode.elems[0]\n        const anchorNode = referenceNode && referenceNode.nextSibling\n        if (!referenceNode) {\n            return this\n        }\n        return this.forEach(function (elem: HTMLElement) {\n            const parent = referenceNode.parentNode as Node\n            if (anchorNode) {\n                parent.insertBefore(elem, anchorNode)\n            } else {\n                parent.appendChild(elem)\n            }\n        })\n    }\n\n    /**\n     * 设置/获取 数据\n     * @param key key\n     * @param value value\n     */\n    data<T>(key: string, value?: T): T | undefined {\n        if (value != null) {\n            // 设置数据\n            this.dataSource.set(key, value)\n        } else {\n            // 获取数据\n            return this.dataSource.get(key)\n        }\n    }\n\n    /**\n     * 获取当前节点的顶级(段落)\n     * @param editor 富文本实例\n     */\n    getNodeTop(editor: Editor): DomElement {\n        // 异常抛出，空的 DomElement 直接返回\n        if (this.length < 1) {\n            return this\n        }\n\n        // 获取父级元素，并判断是否是 编辑区域\n        // 如果是则返回当前节点\n        const $parent = this.parent()\n\n        // fix：添加当前元素与编辑区元素的比较，防止传入的当前元素就是编辑区元素而造成的获取顶级元素为空的情况\n        if (editor.$textElem.equal(this) || editor.$textElem.equal($parent)) {\n            return this\n        }\n\n        // 到了此处，即代表当前节点不是顶级段落\n        // 将当前节点存放于父节点的 prior 字段下\n        // 主要用于 回溯 子节点\n        // 例如：ul ol 等标签\n        // 实际操作的节点是 li 但是一个 ul ol 的子节点可能有多个\n        // 所以需要对其进行 回溯 找到对应的子节点\n        $parent.prior = this\n        return $parent.getNodeTop(editor)\n    }\n\n    /**\n     * 获取当前 节点 基与上一个拥有相对或者解决定位的父容器的位置\n     * @param editor 富文本实例\n     */\n    getOffsetData(): OffsetDataType {\n        const $node = this.elems[0]\n        return {\n            top: $node.offsetTop,\n            left: $node.offsetLeft,\n            width: $node.offsetWidth,\n            height: $node.offsetHeight,\n            parent: $node.offsetParent,\n        }\n    }\n\n    /**\n     * 从上至下进行滚动\n     * @param top 滚动的值\n     */\n    scrollTop(top: number): void {\n        const $node = this.elems[0]\n        $node.scrollTo({ top })\n    }\n}\n\n// new 一个对象\nfunction $(...arg: ConstructorParameters<typeof DomElement>): DomElement {\n    return new DomElement(...arg)\n}\n\nexport default $\n", "module.exports = require(\"core-js-pure/stable/instance/for-each\");", "'use strict';\nvar global = require('../internals/global');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar isForced = require('../internals/is-forced');\nvar path = require('../internals/path');\nvar bind = require('../internals/function-bind-context');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar has = require('../internals/has');\n\nvar wrapConstructor = function (NativeConstructor) {\n  var Wrapper = function (a, b, c) {\n    if (this instanceof NativeConstructor) {\n      switch (arguments.length) {\n        case 0: return new NativeConstructor();\n        case 1: return new NativeConstructor(a);\n        case 2: return new NativeConstructor(a, b);\n      } return new NativeConstructor(a, b, c);\n    } return NativeConstructor.apply(this, arguments);\n  };\n  Wrapper.prototype = NativeConstructor.prototype;\n  return Wrapper;\n};\n\n/*\n  options.target      - name of the target object\n  options.global      - target is the global object\n  options.stat        - export as static methods of target\n  options.proto       - export as prototype methods of target\n  options.real        - real prototype method for the `pure` version\n  options.forced      - export even if the native feature is available\n  options.bind        - bind methods to the target, required for the `pure` version\n  options.wrap        - wrap constructors to preventing global pollution, required for the `pure` version\n  options.unsafe      - use the simple assignment of property instead of delete + defineProperty\n  options.sham        - add a flag to not completely full polyfills\n  options.enumerable  - export as enumerable property\n  options.noTargetGet - prevent calling a getter on target\n*/\nmodule.exports = function (options, source) {\n  var TARGET = options.target;\n  var GLOBAL = options.global;\n  var STATIC = options.stat;\n  var PROTO = options.proto;\n\n  var nativeSource = GLOBAL ? global : STATIC ? global[TARGET] : (global[TARGET] || {}).prototype;\n\n  var target = GLOBAL ? path : path[TARGET] || (path[TARGET] = {});\n  var targetPrototype = target.prototype;\n\n  var FORCED, USE_NATIVE, VIRTUAL_PROTOTYPE;\n  var key, sourceProperty, targetProperty, nativeProperty, resultProperty, descriptor;\n\n  for (key in source) {\n    FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);\n    // contains in native\n    USE_NATIVE = !FORCED && nativeSource && has(nativeSource, key);\n\n    targetProperty = target[key];\n\n    if (USE_NATIVE) if (options.noTargetGet) {\n      descriptor = getOwnPropertyDescriptor(nativeSource, key);\n      nativeProperty = descriptor && descriptor.value;\n    } else nativeProperty = nativeSource[key];\n\n    // export native or implementation\n    sourceProperty = (USE_NATIVE && nativeProperty) ? nativeProperty : source[key];\n\n    if (USE_NATIVE && typeof targetProperty === typeof sourceProperty) continue;\n\n    // bind timers to global for call from export context\n    if (options.bind && USE_NATIVE) resultProperty = bind(sourceProperty, global);\n    // wrap global constructors for prevent changs in this version\n    else if (options.wrap && USE_NATIVE) resultProperty = wrapConstructor(sourceProperty);\n    // make static versions for prototype methods\n    else if (PROTO && typeof sourceProperty == 'function') resultProperty = bind(Function.call, sourceProperty);\n    // default case\n    else resultProperty = sourceProperty;\n\n    // add a flag to not completely full polyfills\n    if (options.sham || (sourceProperty && sourceProperty.sham) || (targetProperty && targetProperty.sham)) {\n      createNonEnumerableProperty(resultProperty, 'sham', true);\n    }\n\n    target[key] = resultProperty;\n\n    if (PROTO) {\n      VIRTUAL_PROTOTYPE = TARGET + 'Prototype';\n      if (!has(path, VIRTUAL_PROTOTYPE)) {\n        createNonEnumerableProperty(path, VIRTUAL_PROTOTYPE, {});\n      }\n      // export virtual prototype methods\n      path[VIRTUAL_PROTOTYPE][key] = sourceProperty;\n      // export real prototype methods\n      if (options.real && targetPrototype && !targetPrototype[key]) {\n        createNonEnumerableProperty(targetPrototype, key, sourceProperty);\n      }\n    }\n  }\n};\n", "/**\n * @description 工具函数集合\n * @author wangfupeng\n */\n\nclass NavUA {\n    public _ua: string\n\n    // 是否为旧版 Edge\n    public isOldEdge: boolean\n\n    // 是否为 Firefox\n    public isFirefox: boolean\n\n    constructor() {\n        this._ua = navigator.userAgent\n\n        const math = this._ua.match(/(Edge?)\\/(\\d+)/)\n        this.isOldEdge = math && math[1] == 'Edge' && parseInt(math[2]) < 19 ? true : false\n\n        this.isFirefox =\n            /Firefox\\/\\d+/.test(this._ua) && !/Seamonkey\\/\\d+/.test(this._ua) ? true : false\n    }\n\n    // 是否为 IE\n    public isIE() {\n        return 'ActiveXObject' in window\n    }\n\n    // 是否为 webkit\n    public isWebkit() {\n        return /webkit/i.test(this._ua)\n    }\n}\n\n// 和 UA 相关的属性\nexport const UA = new NavUA()\n\n/**\n * 获取随机字符\n * @param prefix 前缀\n */\nexport function getRandom(prefix: string = ''): string {\n    return prefix + Math.random().toString().slice(2)\n}\n\n/**\n * 替换 html 特殊字符\n * @param html html 字符串\n */\nexport function replaceHtmlSymbol(html: string) {\n    return html\n        .replace(/</gm, '&lt;')\n        .replace(/>/gm, '&gt;')\n        .replace(/\"/gm, '&quot;')\n        .replace(/(\\r\\n|\\r|\\n)/g, '<br/>')\n}\n\nexport function replaceSpecialSymbol(value: string) {\n    return value\n        .replace(/&lt;/gm, '<')\n        .replace(/&gt;/gm, '>')\n        .replace(/&quot;/gm, '\"')\n}\n\ninterface Obj {\n    [key: string]: unknown\n    [key: number]: unknown\n}\ninterface ArrObj {\n    length: number\n    [key: number]: unknown\n}\n\n/**\n * 遍历对象或数组，执行回调函数\n * @param obj 对象或数组\n * @param fn 回调函数 (key, val) => {...}\n */\nexport function forEach<T extends ArrObj, V = T[Extract<keyof T, number>]>(\n    obj: T,\n    fn: (key: string, value: V) => boolean | void\n): void\nexport function forEach<T extends Obj>(\n    obj: T,\n    fn: (key: string, value: T[Extract<keyof T, string | number>]) => boolean | void\n): void\nexport function forEach<T extends unknown[]>(\n    obj: T,\n    fn: (key: string, value: T[Extract<keyof T, number>]) => boolean | void\n): void\nexport function forEach<T extends unknown[] | Obj | ArrObj>(\n    obj: T,\n    fn: (\n        key: string,\n        value: T[Extract<keyof T, number>] | T[Extract<keyof T, string>]\n    ) => boolean | void\n): void {\n    for (let key in obj) {\n        if (Object.prototype.hasOwnProperty.call(obj, key)) {\n            const result = fn(key, obj[key])\n            if (result === false) {\n                // 提前终止循环\n                break\n            }\n        }\n    }\n}\n\n/**\n * 遍历类数组\n * @param fakeArr 类数组\n * @param fn 回调函数\n */\nexport function arrForEach<T extends { length: number; [key: number]: unknown }>(\n    fakeArr: T,\n    fn: (this: T, item: T[number], index: number) => boolean | unknown\n): void {\n    let i, item, result\n    const length = fakeArr.length || 0\n    for (i = 0; i < length; i++) {\n        item = fakeArr[i]\n        result = fn.call(fakeArr, item, i)\n        if (result === false) {\n            break\n        }\n    }\n}\n\n/**\n * 节流\n * @param fn 函数\n * @param interval 间隔时间，毫秒\n */\n\nexport function throttle<C, T extends unknown[]>(\n    fn: (this: C, ...args: T) => unknown,\n    interval: number = 200\n) {\n    let flag = false\n    return function (this: C, ...args: T): void {\n        if (!flag) {\n            flag = true\n            setTimeout(() => {\n                flag = false\n                fn.call(this, ...args) // this 报语法错误，先用 null\n            }, interval)\n        }\n    }\n}\n\n/**\n * 防抖\n * @param fn 函数\n * @param delay 间隔时间，毫秒\n */\nexport function debounce<C, T extends unknown[]>(\n    fn: (this: C, ...args: T) => void,\n    delay: number = 200\n): (this: C, ...args: T) => void {\n    let lastFn = 0\n    return function (...args: T) {\n        if (lastFn) {\n            window.clearTimeout(lastFn)\n        }\n        lastFn = window.setTimeout(() => {\n            lastFn = 0\n            fn.call(this, ...args) // this 报语法错误，先用 null\n        }, delay)\n    }\n}\n\n/**\n * isFunction 是否是函数\n * @param fn 函数\n */\nexport function isFunction(fn: any): fn is Function {\n    return typeof fn === 'function'\n}\n\n/**\n * 引用与非引用值 深拷贝方法\n * @param data\n */\nexport function deepClone<T>(data: T): T {\n    if (typeof data !== 'object' || typeof data == 'function' || data === null) {\n        return data\n    }\n\n    let item: any\n    if (Array.isArray(data)) {\n        item = []\n    }\n\n    if (!Array.isArray(data)) {\n        item = {}\n    }\n\n    for (let i in data) {\n        if (Object.prototype.hasOwnProperty.call(data, i)) {\n            item[i] = deepClone(data[i])\n        }\n    }\n\n    return item\n}\n\n/**\n * 将可遍历的对象转换为数组\n * @param data 可遍历的对象\n */\nexport function toArray<T>(data: T) {\n    return Array.prototype.slice.call(data)\n}\n\n/**\n * 唯一id生成\n * @param length 随机数长度\n */\nexport function getRandomCode() {\n    return Math.random().toString(36).slice(-5)\n}\n\n/**\n * hex color 转换成 rgb\n * @param hex string\n */\nexport function hexToRgb(hex: string) {\n    const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex)\n\n    if (result == null) return null\n\n    const colors = result.map(i => parseInt(i, 16))\n    const r = colors[1]\n    const g = colors[2]\n    const b = colors[3]\n\n    return `rgb(${r}, ${g}, ${b})`\n}\n", "/**\n * @description 常量\n * @author wangfupeng\n */\n\nexport function EMPTY_FN() {}\n\n//用于校验是否为url格式字符串\nexport const urlRegex = /(http|ftp|https):\\/\\/[\\w\\-_]+(\\.[\\w\\-_]+)+([\\w\\-.,@?^=%&amp;:/~+#]*[\\w\\-@?^=%&amp;/~+#])?/g\n\n// 编辑器为了方便继续输入/换行等原因 主动生成的空标签\nexport const EMPTY_P = '<p data-we-empty-p=\"\"><br></p>'\n\n// 用于校验dom中最后 由编辑器主动生成的空标签结构\nexport const EMPTY_P_LAST_REGEX = /<p data-we-empty-p=\"\"><br\\/?><\\/p>$/gim\n\n// 用于校验dom中所有 由编辑器主动生成的空标签结构\nexport const EMPTY_P_REGEX = /<p data-we-empty-p=\"\">/gim\n", "var check = function (it) {\n  return it && it.Math == Math && it;\n};\n\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nmodule.exports =\n  // eslint-disable-next-line no-undef\n  check(typeof globalThis == 'object' && globalThis) ||\n  check(typeof window == 'object' && window) ||\n  check(typeof self == 'object' && self) ||\n  check(typeof global == 'object' && global) ||\n  // eslint-disable-next-line no-new-func\n  Function('return this')();\n", "module.exports = {};\n", "var global = require('../internals/global');\nvar shared = require('../internals/shared');\nvar has = require('../internals/has');\nvar uid = require('../internals/uid');\nvar NATIVE_SYMBOL = require('../internals/native-symbol');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar WellKnownSymbolsStore = shared('wks');\nvar Symbol = global.Symbol;\nvar createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol : Symbol && Symbol.withoutSetter || uid;\n\nmodule.exports = function (name) {\n  if (!has(WellKnownSymbolsStore, name)) {\n    if (NATIVE_SYMBOL && has(Symbol, name)) WellKnownSymbolsStore[name] = Symbol[name];\n    else WellKnownSymbolsStore[name] = createWellKnownSymbol('Symbol.' + name);\n  } return WellKnownSymbolsStore[name];\n};\n", "module.exports = function (exec) {\n  try {\n    return !!exec();\n  } catch (error) {\n    return true;\n  }\n};\n", "var path = require('../internals/path');\nvar has = require('../internals/has');\nvar wrappedWellKnownSymbolModule = require('../internals/well-known-symbol-wrapped');\nvar defineProperty = require('../internals/object-define-property').f;\n\nmodule.exports = function (NAME) {\n  var Symbol = path.Symbol || (path.Symbol = {});\n  if (!has(Symbol, NAME)) defineProperty(Symbol, NAME, {\n    value: wrappedWellKnownSymbolModule.f(NAME)\n  });\n};\n", "module.exports = function (it) {\n  return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n", "var fails = require('../internals/fails');\n\n// Thank's IE8 for his funny defineProperty\nmodule.exports = !fails(function () {\n  return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7;\n});\n", "var path = require('../internals/path');\n\nmodule.exports = function (CONSTRUCTOR) {\n  return path[CONSTRUCTOR + 'Prototype'];\n};\n", "var hasOwnProperty = {}.hasOwnProperty;\n\nmodule.exports = function (it, key) {\n  return hasOwnProperty.call(it, key);\n};\n", "module.exports = require(\"core-js-pure/stable/instance/trim\");", "var DESCRIPTORS = require('../internals/descriptors');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\nvar anObject = require('../internals/an-object');\nvar toPrimitive = require('../internals/to-primitive');\n\nvar nativeDefineProperty = Object.defineProperty;\n\n// `Object.defineProperty` method\n// https://tc39.github.io/ecma262/#sec-object.defineproperty\nexports.f = DESCRIPTORS ? nativeDefineProperty : function defineProperty(O, P, Attributes) {\n  anObject(O);\n  P = toPrimitive(P, true);\n  anObject(Attributes);\n  if (IE8_DOM_DEFINE) try {\n    return nativeDefineProperty(O, P, Attributes);\n  } catch (error) { /* empty */ }\n  if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported');\n  if ('value' in Attributes) O[P] = Attributes.value;\n  return O;\n};\n", "var DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = DESCRIPTORS ? function (object, key, value) {\n  return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));\n} : function (object, key, value) {\n  object[key] = value;\n  return object;\n};\n", "\"use strict\";\n\nvar isOldIE = function isOldIE() {\n  var memo;\n  return function memorize() {\n    if (typeof memo === 'undefined') {\n      // Test for IE <= 9 as proposed by Browserhacks\n      // @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805\n      // Tests for existence of standard globals is to allow style-loader\n      // to operate correctly into non-standard environments\n      // @see https://github.com/webpack-contrib/style-loader/issues/177\n      memo = Boolean(window && document && document.all && !window.atob);\n    }\n\n    return memo;\n  };\n}();\n\nvar getTarget = function getTarget() {\n  var memo = {};\n  return function memorize(target) {\n    if (typeof memo[target] === 'undefined') {\n      var styleTarget = document.querySelector(target); // Special case to return head of iframe instead of iframe itself\n\n      if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\n        try {\n          // This will throw an exception if access to iframe is blocked\n          // due to cross-origin restrictions\n          styleTarget = styleTarget.contentDocument.head;\n        } catch (e) {\n          // istanbul ignore next\n          styleTarget = null;\n        }\n      }\n\n      memo[target] = styleTarget;\n    }\n\n    return memo[target];\n  };\n}();\n\nvar stylesInDom = [];\n\nfunction getIndexByIdentifier(identifier) {\n  var result = -1;\n\n  for (var i = 0; i < stylesInDom.length; i++) {\n    if (stylesInDom[i].identifier === identifier) {\n      result = i;\n      break;\n    }\n  }\n\n  return result;\n}\n\nfunction modulesToDom(list, options) {\n  var idCountMap = {};\n  var identifiers = [];\n\n  for (var i = 0; i < list.length; i++) {\n    var item = list[i];\n    var id = options.base ? item[0] + options.base : item[0];\n    var count = idCountMap[id] || 0;\n    var identifier = \"\".concat(id, \" \").concat(count);\n    idCountMap[id] = count + 1;\n    var index = getIndexByIdentifier(identifier);\n    var obj = {\n      css: item[1],\n      media: item[2],\n      sourceMap: item[3]\n    };\n\n    if (index !== -1) {\n      stylesInDom[index].references++;\n      stylesInDom[index].updater(obj);\n    } else {\n      stylesInDom.push({\n        identifier: identifier,\n        updater: addStyle(obj, options),\n        references: 1\n      });\n    }\n\n    identifiers.push(identifier);\n  }\n\n  return identifiers;\n}\n\nfunction insertStyleElement(options) {\n  var style = document.createElement('style');\n  var attributes = options.attributes || {};\n\n  if (typeof attributes.nonce === 'undefined') {\n    var nonce = typeof __webpack_nonce__ !== 'undefined' ? __webpack_nonce__ : null;\n\n    if (nonce) {\n      attributes.nonce = nonce;\n    }\n  }\n\n  Object.keys(attributes).forEach(function (key) {\n    style.setAttribute(key, attributes[key]);\n  });\n\n  if (typeof options.insert === 'function') {\n    options.insert(style);\n  } else {\n    var target = getTarget(options.insert || 'head');\n\n    if (!target) {\n      throw new Error(\"Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.\");\n    }\n\n    target.appendChild(style);\n  }\n\n  return style;\n}\n\nfunction removeStyleElement(style) {\n  // istanbul ignore if\n  if (style.parentNode === null) {\n    return false;\n  }\n\n  style.parentNode.removeChild(style);\n}\n/* istanbul ignore next  */\n\n\nvar replaceText = function replaceText() {\n  var textStore = [];\n  return function replace(index, replacement) {\n    textStore[index] = replacement;\n    return textStore.filter(Boolean).join('\\n');\n  };\n}();\n\nfunction applyToSingletonTag(style, index, remove, obj) {\n  var css = remove ? '' : obj.media ? \"@media \".concat(obj.media, \" {\").concat(obj.css, \"}\") : obj.css; // For old IE\n\n  /* istanbul ignore if  */\n\n  if (style.styleSheet) {\n    style.styleSheet.cssText = replaceText(index, css);\n  } else {\n    var cssNode = document.createTextNode(css);\n    var childNodes = style.childNodes;\n\n    if (childNodes[index]) {\n      style.removeChild(childNodes[index]);\n    }\n\n    if (childNodes.length) {\n      style.insertBefore(cssNode, childNodes[index]);\n    } else {\n      style.appendChild(cssNode);\n    }\n  }\n}\n\nfunction applyToTag(style, options, obj) {\n  var css = obj.css;\n  var media = obj.media;\n  var sourceMap = obj.sourceMap;\n\n  if (media) {\n    style.setAttribute('media', media);\n  } else {\n    style.removeAttribute('media');\n  }\n\n  if (sourceMap && typeof btoa !== 'undefined') {\n    css += \"\\n/*# sourceMappingURL=data:application/json;base64,\".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), \" */\");\n  } // For old IE\n\n  /* istanbul ignore if  */\n\n\n  if (style.styleSheet) {\n    style.styleSheet.cssText = css;\n  } else {\n    while (style.firstChild) {\n      style.removeChild(style.firstChild);\n    }\n\n    style.appendChild(document.createTextNode(css));\n  }\n}\n\nvar singleton = null;\nvar singletonCounter = 0;\n\nfunction addStyle(obj, options) {\n  var style;\n  var update;\n  var remove;\n\n  if (options.singleton) {\n    var styleIndex = singletonCounter++;\n    style = singleton || (singleton = insertStyleElement(options));\n    update = applyToSingletonTag.bind(null, style, styleIndex, false);\n    remove = applyToSingletonTag.bind(null, style, styleIndex, true);\n  } else {\n    style = insertStyleElement(options);\n    update = applyToTag.bind(null, style, options);\n\n    remove = function remove() {\n      removeStyleElement(style);\n    };\n  }\n\n  update(obj);\n  return function updateStyle(newObj) {\n    if (newObj) {\n      if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap) {\n        return;\n      }\n\n      update(obj = newObj);\n    } else {\n      remove();\n    }\n  };\n}\n\nmodule.exports = function (list, options) {\n  options = options || {}; // Force single-tag solution on IE6-9, which has a hard limit on the # of <style>\n  // tags it will allow on a page\n\n  if (!options.singleton && typeof options.singleton !== 'boolean') {\n    options.singleton = isOldIE();\n  }\n\n  list = list || [];\n  var lastIdentifiers = modulesToDom(list, options);\n  return function update(newList) {\n    newList = newList || [];\n\n    if (Object.prototype.toString.call(newList) !== '[object Array]') {\n      return;\n    }\n\n    for (var i = 0; i < lastIdentifiers.length; i++) {\n      var identifier = lastIdentifiers[i];\n      var index = getIndexByIdentifier(identifier);\n      stylesInDom[index].references--;\n    }\n\n    var newLastIdentifiers = modulesToDom(newList, options);\n\n    for (var _i = 0; _i < lastIdentifiers.length; _i++) {\n      var _identifier = lastIdentifiers[_i];\n\n      var _index = getIndexByIdentifier(_identifier);\n\n      if (stylesInDom[_index].references === 0) {\n        stylesInDom[_index].updater();\n\n        stylesInDom.splice(_index, 1);\n      }\n    }\n\n    lastIdentifiers = newLastIdentifiers;\n  };\n};", "\"use strict\";\n\n/*\n  MIT License http://www.opensource.org/licenses/mit-license.php\n  Author Tobias Koppers @sokra\n*/\n// css base code, injected by the css-loader\n// eslint-disable-next-line func-names\nmodule.exports = function (useSourceMap) {\n  var list = []; // return the list of modules as css string\n\n  list.toString = function toString() {\n    return this.map(function (item) {\n      var content = cssWithMappingToString(item, useSourceMap);\n\n      if (item[2]) {\n        return \"@media \".concat(item[2], \" {\").concat(content, \"}\");\n      }\n\n      return content;\n    }).join('');\n  }; // import a list of modules into the list\n  // eslint-disable-next-line func-names\n\n\n  list.i = function (modules, mediaQuery, dedupe) {\n    if (typeof modules === 'string') {\n      // eslint-disable-next-line no-param-reassign\n      modules = [[null, modules, '']];\n    }\n\n    var alreadyImportedModules = {};\n\n    if (dedupe) {\n      for (var i = 0; i < this.length; i++) {\n        // eslint-disable-next-line prefer-destructuring\n        var id = this[i][0];\n\n        if (id != null) {\n          alreadyImportedModules[id] = true;\n        }\n      }\n    }\n\n    for (var _i = 0; _i < modules.length; _i++) {\n      var item = [].concat(modules[_i]);\n\n      if (dedupe && alreadyImportedModules[item[0]]) {\n        // eslint-disable-next-line no-continue\n        continue;\n      }\n\n      if (mediaQuery) {\n        if (!item[2]) {\n          item[2] = mediaQuery;\n        } else {\n          item[2] = \"\".concat(mediaQuery, \" and \").concat(item[2]);\n        }\n      }\n\n      list.push(item);\n    }\n  };\n\n  return list;\n};\n\nfunction cssWithMappingToString(item, useSourceMap) {\n  var content = item[1] || ''; // eslint-disable-next-line prefer-destructuring\n\n  var cssMapping = item[3];\n\n  if (!cssMapping) {\n    return content;\n  }\n\n  if (useSourceMap && typeof btoa === 'function') {\n    var sourceMapping = toComment(cssMapping);\n    var sourceURLs = cssMapping.sources.map(function (source) {\n      return \"/*# sourceURL=\".concat(cssMapping.sourceRoot || '').concat(source, \" */\");\n    });\n    return [content].concat(sourceURLs).concat([sourceMapping]).join('\\n');\n  }\n\n  return [content].join('\\n');\n} // Adapted from convert-source-map (MIT)\n\n\nfunction toComment(sourceMap) {\n  // eslint-disable-next-line no-undef\n  var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))));\n  var data = \"sourceMappingURL=data:application/json;charset=utf-8;base64,\".concat(base64);\n  return \"/*# \".concat(data, \" */\");\n}", "var DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar has = require('../internals/has');\n\nvar defineProperty = Object.defineProperty;\nvar cache = {};\n\nvar thrower = function (it) { throw it; };\n\nmodule.exports = function (METHOD_NAME, options) {\n  if (has(cache, METHOD_NAME)) return cache[METHOD_NAME];\n  if (!options) options = {};\n  var method = [][METHOD_NAME];\n  var ACCESSORS = has(options, 'ACCESSORS') ? options.ACCESSORS : false;\n  var argument0 = has(options, 0) ? options[0] : thrower;\n  var argument1 = has(options, 1) ? options[1] : undefined;\n\n  return cache[METHOD_NAME] = !!method && !fails(function () {\n    if (ACCESSORS && !DESCRIPTORS) return true;\n    var O = { length: -1 };\n\n    if (ACCESSORS) defineProperty(O, 1, { enumerable: true, get: thrower });\n    else O[1] = 1;\n\n    method.call(O, argument0, argument1);\n  });\n};\n", "/**\n * @description 按钮菜单 Class\n * @author wangfupeng\n */\n\nimport { DomElement } from '../../utils/dom-core'\nimport Editor from '../../editor/index'\nimport Menu from './Menu'\n\nclass BtnMenu extends Menu {\n    constructor($elem: DomElement, editor: Editor) {\n        super($elem, editor)\n    }\n}\n\nexport default BtnMenu\n", "/**\n * @description 下拉菜单 Class\n * @author wangfupeng\n */\n\nimport $, { DomElement } from '../../utils/dom-core'\nimport Editor from '../../editor/index'\nimport Menu from './Menu'\nimport DropList, { DropListConf } from './DropList'\n\nclass DropListMenu extends Menu {\n    public dropList: DropList\n\n    constructor($elem: DomElement, editor: Editor, conf: DropListConf) {\n        super($elem, editor)\n\n        // 国际化\n        conf.title = editor.i18next.t(`menus.dropListMenu.${conf.title}`)\n\n        // 非中文模式下 带 icon 的下拉列表居左\n        const className: string = editor.config.lang === 'zh-CN' ? '' : 'w-e-drop-list-tl'\n        if (className !== '' && conf.type === 'list') {\n            conf.list.forEach(item => {\n                const $elem = item.$elem\n                const $children = $($elem.children())\n                if ($children.length > 0) {\n                    const nodeName = $children?.getNodeName()\n                    if (nodeName && nodeName === 'I') {\n                        $elem.addClass(className)\n                    }\n                }\n            })\n        }\n\n        // 初始化 dropList\n        const dropList = new DropList(this, conf)\n        this.dropList = dropList\n\n        // 绑定事件\n        $elem\n            .on('click', () => {\n                if (editor.selection.getRange() == null) {\n                    return\n                }\n                $elem.css('z-index', editor.zIndex.get('menu'))\n                // 触发 droplist 悬浮事件\n                editor.txt.eventHooks.dropListMenuHoverEvents.forEach(fn => fn())\n                // 显示\n                dropList.show()\n            })\n            .on('mouseleave', () => {\n                $elem.css('z-index', 'auto')\n                // 隐藏\n                dropList.hideTimeoutId = window.setTimeout(() => {\n                    dropList.hide()\n                })\n            })\n    }\n}\n\nexport default DropListMenu\n", "var isObject = require('../internals/is-object');\n\nmodule.exports = function (it) {\n  if (!isObject(it)) {\n    throw TypeError(String(it) + ' is not an object');\n  } return it;\n};\n", "module.exports = require(\"core-js-pure/stable/instance/map\");", "module.exports = require(\"core-js-pure/stable/instance/index-of\");", "module.exports = require(\"core-js-pure/stable/instance/includes\");", "module.exports = require(\"core-js-pure/stable/instance/find\");", "// toObject with fallback for non-array-like ES3 strings\nvar IndexedObject = require('../internals/indexed-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nmodule.exports = function (it) {\n  return IndexedObject(requireObjectCoercible(it));\n};\n", "var requireObjectCoercible = require('../internals/require-object-coercible');\n\n// `ToObject` abstract operation\n// https://tc39.github.io/ecma262/#sec-toobject\nmodule.exports = function (argument) {\n  return Object(requireObjectCoercible(argument));\n};\n", "var bind = require('../internals/function-bind-context');\nvar IndexedObject = require('../internals/indexed-object');\nvar toObject = require('../internals/to-object');\nvar toLength = require('../internals/to-length');\nvar arraySpeciesCreate = require('../internals/array-species-create');\n\nvar push = [].push;\n\n// `Array.prototype.{ forEach, map, filter, some, every, find, findIndex }` methods implementation\nvar createMethod = function (TYPE) {\n  var IS_MAP = TYPE == 1;\n  var IS_FILTER = TYPE == 2;\n  var IS_SOME = TYPE == 3;\n  var IS_EVERY = TYPE == 4;\n  var IS_FIND_INDEX = TYPE == 6;\n  var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n  return function ($this, callbackfn, that, specificCreate) {\n    var O = toObject($this);\n    var self = IndexedObject(O);\n    var boundFunction = bind(callbackfn, that, 3);\n    var length = toLength(self.length);\n    var index = 0;\n    var create = specificCreate || arraySpeciesCreate;\n    var target = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n    var value, result;\n    for (;length > index; index++) if (NO_HOLES || index in self) {\n      value = self[index];\n      result = boundFunction(value, index, O);\n      if (TYPE) {\n        if (IS_MAP) target[index] = result; // map\n        else if (result) switch (TYPE) {\n          case 3: return true;              // some\n          case 5: return value;             // find\n          case 6: return index;             // findIndex\n          case 2: push.call(target, value); // filter\n        } else if (IS_EVERY) return false;  // every\n      }\n    }\n    return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target;\n  };\n};\n\nmodule.exports = {\n  // `Array.prototype.forEach` method\n  // https://tc39.github.io/ecma262/#sec-array.prototype.foreach\n  forEach: createMethod(0),\n  // `Array.prototype.map` method\n  // https://tc39.github.io/ecma262/#sec-array.prototype.map\n  map: createMethod(1),\n  // `Array.prototype.filter` method\n  // https://tc39.github.io/ecma262/#sec-array.prototype.filter\n  filter: createMethod(2),\n  // `Array.prototype.some` method\n  // https://tc39.github.io/ecma262/#sec-array.prototype.some\n  some: createMethod(3),\n  // `Array.prototype.every` method\n  // https://tc39.github.io/ecma262/#sec-array.prototype.every\n  every: createMethod(4),\n  // `Array.prototype.find` method\n  // https://tc39.github.io/ecma262/#sec-array.prototype.find\n  find: createMethod(5),\n  // `Array.prototype.findIndex` method\n  // https://tc39.github.io/ecma262/#sec-array.prototype.findIndex\n  findIndex: createMethod(6)\n};\n", "/**\n * @description panel class\n * @author wangfupeng\n */\n\nimport $, { DomElement } from '../../utils/dom-core'\nimport PanelMenu from './PanelMenu'\nimport { EMPTY_FN } from '../../utils/const'\n\n// Panel 配置格式\nexport type TabEventConf = {\n    selector: string\n    type: string\n    fn: Function\n    bindEnter?: Boolean\n}\nexport type PanelTabConf = {\n    title: string\n    tpl: string\n    events: TabEventConf[]\n}\nexport type PanelConf = {\n    width: number | 0\n    height: number | 0\n    tabs: PanelTabConf[]\n    setLinkValue?: ($container: DomElement, type: string) => void\n}\n\nclass Panel {\n    // 记录已经创建过的 panelMenu\n    static createdMenus: Set<PanelMenu> = new Set()\n\n    private menu: PanelMenu\n    private conf: PanelConf\n    public $container: DomElement\n\n    constructor(menu: PanelMenu, conf: PanelConf) {\n        this.menu = menu\n        this.conf = conf\n        this.$container = $('<div class=\"w-e-panel-container\"></div>')\n\n        // 隐藏 panel\n        const editor = menu.editor\n        editor.txt.eventHooks.clickEvents.push(Panel.hideCurAllPanels)\n        editor.txt.eventHooks.toolbarClickEvents.push(Panel.hideCurAllPanels)\n        editor.txt.eventHooks.dropListMenuHoverEvents.push(Panel.hideCurAllPanels)\n    }\n\n    /**\n     * 创建并展示 panel\n     */\n    public create(): void {\n        const menu = this.menu\n        if (Panel.createdMenus.has(menu)) {\n            // 创建过了\n            return\n        }\n\n        const conf = this.conf\n\n        // panel 的容器\n        const $container = this.$container\n        const width = conf.width || 300 // 默认 300px\n        const rect = menu.editor.$toolbarElem.getBoundingClientRect()\n        const menuRect = menu.$elem.getBoundingClientRect()\n        const top = rect.height + rect.top - menuRect.top\n        let left = (rect.width - width) / 2 + rect.left - menuRect.left\n        const offset = 300 // icon与panel菜单距离偏移量暂定 300\n        if (Math.abs(left) > offset) {\n            // panel菜单离工具栏icon过远时，让panel菜单出现在icon正下方，处理边界逻辑\n            if (menuRect.left < document.documentElement.clientWidth / 2) {\n                // icon在左侧\n                left = -menuRect.width / 2\n            } else {\n                // icon在右侧\n                left = -width + menuRect.width / 2\n            }\n        }\n\n        $container\n            .css('width', width + 'px')\n            .css('margin-top', `${top}px`)\n            .css('margin-left', `${left}px`)\n            .css('z-index', menu.editor.zIndex.get('panel'))\n\n        // 添加关闭按钮\n        const $closeBtn = $('<i class=\"w-e-icon-close w-e-panel-close\"></i>')\n        $container.append($closeBtn)\n        $closeBtn.on('click', () => {\n            this.remove()\n        })\n\n        // 准备 tabs 容器\n        const $tabTitleContainer = $('<ul class=\"w-e-panel-tab-title\"></ul>')\n        const $tabContentContainer = $('<div class=\"w-e-panel-tab-content\"></div>')\n        $container.append($tabTitleContainer).append($tabContentContainer)\n\n        // 设置高度\n        const height = conf.height // height: 0 即不用设置\n        if (height) {\n            $tabContentContainer.css('height', height + 'px').css('overflow-y', 'auto')\n        }\n\n        // tabs\n        const tabs = conf.tabs || []\n        const tabTitleArr: DomElement[] = []\n        const tabContentArr: DomElement[] = []\n\n        tabs.forEach((tab: PanelTabConf, tabIndex: number) => {\n            if (!tab) {\n                return\n            }\n            const title = tab.title || ''\n            const tpl = tab.tpl || ''\n\n            // 添加到 DOM\n            const $title = $(`<li class=\"w-e-item\">${title}</li>`)\n            $tabTitleContainer.append($title)\n            const $content = $(tpl)\n            $tabContentContainer.append($content)\n\n            // 记录到内存\n            tabTitleArr.push($title)\n            tabContentArr.push($content)\n\n            // 设置 active 项\n            if (tabIndex === 0) {\n                $title.data('active', true)\n                $title.addClass('w-e-active')\n            } else {\n                $content.hide()\n            }\n\n            // 绑定 tab 的事件\n            $title.on('click', () => {\n                if ($title.data('active')) {\n                    return\n                }\n                // 隐藏所有的 tab\n                tabTitleArr.forEach($title => {\n                    $title.data('active', false)\n                    $title.removeClass('w-e-active')\n                })\n                tabContentArr.forEach($content => {\n                    $content.hide()\n                })\n\n                // 显示当前的 tab\n                $title.data('active', true)\n                $title.addClass('w-e-active')\n                $content.show()\n            })\n        })\n\n        // 绑定关闭事件\n        $container.on('click', (e: Event) => {\n            // 点击时阻止冒泡\n            e.stopPropagation()\n        })\n\n        // 添加到 DOM\n        menu.$elem.append($container)\n\n        // 设置tab内input的值\n        conf.setLinkValue && conf.setLinkValue($container, 'text')\n        conf.setLinkValue && conf.setLinkValue($container, 'link')\n\n        // 绑定 conf events 的事件，只有添加到 DOM 之后才能绑定成功\n        tabs.forEach((tab: PanelTabConf, index: number) => {\n            if (!tab) {\n                return\n            }\n            const events = tab.events || []\n            events.forEach((event: TabEventConf) => {\n                const selector = event.selector\n                const type = event.type\n                const fn = event.fn || EMPTY_FN\n                const $content = tabContentArr[index]\n                const bindEnter = event.bindEnter ?? false\n\n                const doneFn = async (e: Event) => {\n                    e.stopPropagation()\n                    const needToHide = await fn(e)\n                    // 执行完事件之后，是否要关闭 panel\n                    if (needToHide) {\n                        this.remove()\n                    }\n                }\n                // 给按钮绑定相应的事件\n                $content.find(selector).on(type, doneFn)\n                // 绑定enter键入事件\n                if (bindEnter && type === 'click') {\n                    $content.on('keyup', (e: KeyboardEvent) => {\n                        if (e.keyCode == 13) {\n                            doneFn(e)\n                        }\n                    })\n                }\n            })\n        })\n\n        // focus 第一个 elem\n        let $inputs = $container.find('input[type=text],textarea')\n        if ($inputs.length) {\n            $inputs.get(0).focus()\n        }\n\n        // 隐藏其他 panel\n        Panel.hideCurAllPanels()\n\n        // 记录该 menu 已经创建了 panel\n        menu.setPanel(this)\n        Panel.createdMenus.add(menu)\n    }\n\n    /**\n     * 移除 penal\n     */\n    public remove(): void {\n        const menu = this.menu\n        const $container = this.$container\n        if ($container) {\n            $container.remove()\n        }\n\n        // 将该 menu 记录中移除\n        Panel.createdMenus.delete(menu)\n    }\n\n    /**\n     * 隐藏当前所有的 panel\n     */\n    static hideCurAllPanels(): void {\n        if (Panel.createdMenus.size === 0) {\n            return\n        }\n        Panel.createdMenus.forEach(menu => {\n            const panel = (menu as PanelMenu).panel\n            panel && panel.remove()\n        })\n    }\n}\n\nexport default Panel\n", "var toString = {}.toString;\n\nmodule.exports = function (it) {\n  return toString.call(it).slice(8, -1);\n};\n", "var toInteger = require('../internals/to-integer');\n\nvar min = Math.min;\n\n// `ToLength` abstract operation\n// https://tc39.github.io/ecma262/#sec-tolength\nmodule.exports = function (argument) {\n  return argument > 0 ? min(toInteger(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991\n};\n", "var path = require('../internals/path');\nvar global = require('../internals/global');\n\nvar aFunction = function (variable) {\n  return typeof variable == 'function' ? variable : undefined;\n};\n\nmodule.exports = function (namespace, method) {\n  return arguments.length < 2 ? aFunction(path[namespace]) || aFunction(global[namespace])\n    : path[namespace] && path[namespace][method] || global[namespace] && global[namespace][method];\n};\n", "var TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar defineProperty = require('../internals/object-define-property').f;\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar has = require('../internals/has');\nvar toString = require('../internals/object-to-string');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\n\nmodule.exports = function (it, TAG, STATIC, SET_METHOD) {\n  if (it) {\n    var target = STATIC ? it : it.prototype;\n    if (!has(target, TO_STRING_TAG)) {\n      defineProperty(target, TO_STRING_TAG, { configurable: true, value: TAG });\n    }\n    if (SET_METHOD && !TO_STRING_TAG_SUPPORT) {\n      createNonEnumerableProperty(target, 'toString', toString);\n    }\n  }\n};\n", "/**\n * @description Modal 菜单 Class\n * @author wangfupeng\n */\n\nimport { DomElement } from '../../utils/dom-core'\nimport Editor from '../../editor/index'\nimport Menu from './Menu'\nimport Panel from './Panel'\n\nclass PanelMenu extends Menu {\n    public panel: Panel | undefined\n\n    constructor($elem: DomElement, editor: Editor) {\n        super($elem, editor)\n    }\n\n    /**\n     * 给 menu 设置 panel\n     * @param panel panel 实例\n     */\n    public setPanel(panel: Panel): void {\n        this.panel = panel\n    }\n}\n\nexport default PanelMenu\n", "/**\n * @description Tooltip class\n * @author wangfupeng\n */\n\nimport $, { DomElement } from '../../utils/dom-core'\nimport Editor from '../../editor/index'\n\ntype PositionDataType = {\n    top: number\n    left: number\n}\n\nexport type TooltipConfItemType = {\n    $elem: DomElement\n    onClick: Function\n}\nexport type TooltipConfType = Array<TooltipConfItemType>\n\nclass Tooltip {\n    private $container: DomElement\n    private $targetElem: DomElement\n    private editor: Editor\n    private conf: TooltipConfType\n    private _show: boolean\n    private _isInsertTextContainer: boolean\n\n    constructor(editor: Editor, $elem: DomElement, conf: TooltipConfType) {\n        this.editor = editor\n        this.$targetElem = $elem\n        this.conf = conf\n        this._show = false\n        this._isInsertTextContainer = false\n        // 定义 container\n        const $container = $('<div></div>')\n        $container.addClass('w-e-tooltip')\n        this.$container = $container\n    }\n\n    /**\n     * 获取 tooltip 定位\n     */\n    private getPositionData(): PositionDataType {\n        const $container = this.$container\n\n        let top = 0\n        let left = 0\n\n        // tooltip 的高度\n        const tooltipHeight = 20\n        // 网页的 scrollTop\n        const pageScrollTop = document.documentElement.scrollTop\n        // 目标元素的 rect\n        const targetElemRect = this.$targetElem.getBoundingClientRect()\n        // 编辑区域的 rect\n        const textElemRect = this.editor.$textElem.getBoundingClientRect()\n        // 获取基于 textContainerElem 的 位置信息\n        const targetOffset = this.$targetElem.getOffsetData()\n        const targetParentElem = $(targetOffset.parent)\n        // 获取 编辑区域的滚动条信息\n        const scrollTop = this.editor.$textElem.elems[0].scrollTop\n        // 是否插入 textContainer 中\n        this._isInsertTextContainer = targetParentElem.equal(this.editor.$textContainerElem)\n\n        if (this._isInsertTextContainer) {\n            // 父容器的高度\n            const targetParentElemHeight = targetParentElem.getBoundingClientRect().height\n            // 相对于父容器的位置信息\n            const { top: offsetTop, left: offsetLeft, height: offsetHeight } = targetOffset\n            // 元素基于父容器的 绝对top信息\n            const absoluteTop = offsetTop - scrollTop\n            if (absoluteTop > tooltipHeight + 5) {\n                // 说明模板元素的顶部空间足够\n                top = absoluteTop - tooltipHeight - 15\n                $container.addClass('w-e-tooltip-up')\n            } else if (absoluteTop + offsetHeight + tooltipHeight < targetParentElemHeight) {\n                // 说明模板元素的底部空间足够\n                top = absoluteTop + offsetHeight + 10\n                $container.addClass('w-e-tooltip-down')\n            } else {\n                // 其他情况，tooltip 放在目标元素左上角\n                top = (absoluteTop > 0 ? absoluteTop : 0) + tooltipHeight + 10\n                $container.addClass('w-e-tooltip-down')\n            }\n            // 计算 left\n            if (offsetLeft < 0) {\n                left = 0\n            } else {\n                left = offsetLeft\n            }\n        } else {\n            if (targetElemRect.top < tooltipHeight) {\n                // 说明目标元素的顶部，因滑动隐藏在浏览器上方。tooltip 要放在目标元素下面\n                top = targetElemRect.bottom + pageScrollTop + 5 // 5px 间距\n                $container.addClass('w-e-tooltip-down')\n            } else if (targetElemRect.top - textElemRect.top < tooltipHeight) {\n                // 说明目标元素的顶部，因滑动隐藏在编辑区域上方。tooltip 要放在目标元素下面\n                top = targetElemRect.bottom + pageScrollTop + 5 // 5px 间距\n                $container.addClass('w-e-tooltip-down')\n            } else {\n                // 其他情况，tooltip 放在目标元素上方\n                top = targetElemRect.top + pageScrollTop - tooltipHeight - 15 // 减去 toolbar 的高度，还有 15px 间距\n                $container.addClass('w-e-tooltip-up')\n            }\n            // 计算 left\n            if (targetElemRect.left < 0) {\n                left = 0\n            } else {\n                left = targetElemRect.left\n            }\n        }\n\n        // 返回结果\n        return { top, left }\n    }\n\n    /**\n     * 添加 tooltip 菜单\n     */\n    private appendMenus(): void {\n        const conf = this.conf\n        const editor = this.editor\n        const $targetElem = this.$targetElem\n        const $container = this.$container\n\n        conf.forEach((item: TooltipConfItemType, index: number) => {\n            // 添加元素\n            const $elem = item.$elem\n            const $wrapper = $('<div></div>')\n            $wrapper.addClass('w-e-tooltip-item-wrapper ')\n            $wrapper.append($elem)\n            $container.append($wrapper)\n\n            // 绑定点击事件\n            $elem.on('click', (e: Event) => {\n                e.preventDefault()\n                const res = item.onClick(editor, $targetElem)\n                if (res) this.remove()\n            })\n        })\n    }\n\n    /**\n     * 创建 tooltip\n     */\n    public create(): void {\n        const editor = this.editor\n        const $container = this.$container\n\n        // 生成 container 的内容\n        this.appendMenus()\n\n        // 设置定位\n        const { top, left } = this.getPositionData()\n        $container.css('top', `${top}px`)\n        $container.css('left', `${left}px`)\n\n        // 设置 z-index\n        $container.css('z-index', editor.zIndex.get('tooltip'))\n\n        // 添加到 DOM\n        if (this._isInsertTextContainer) {\n            this.editor.$textContainerElem.append($container)\n        } else {\n            $('body').append($container)\n        }\n\n        this._show = true\n\n        editor.beforeDestroy(this.remove.bind(this))\n        editor.txt.eventHooks.onBlurEvents.push(this.remove.bind(this))\n    }\n\n    /**\n     * 移除该 tooltip\n     */\n    public remove(): void {\n        this.$container.remove()\n        this._show = false\n    }\n\n    /**\n     * 是否显示\n     */\n    public get isShow(): boolean {\n        return this._show\n    }\n}\n\nexport default Tooltip\n", "var aFunction = require('../internals/a-function');\n\n// optional / simple context binding\nmodule.exports = function (fn, that, length) {\n  aFunction(fn);\n  if (that === undefined) return fn;\n  switch (length) {\n    case 0: return function () {\n      return fn.call(that);\n    };\n    case 1: return function (a) {\n      return fn.call(that, a);\n    };\n    case 2: return function (a, b) {\n      return fn.call(that, a, b);\n    };\n    case 3: return function (a, b, c) {\n      return fn.call(that, a, b, c);\n    };\n  }\n  return function (/* ...args */) {\n    return fn.apply(that, arguments);\n  };\n};\n", "module.exports = function (it) {\n  if (typeof it != 'function') {\n    throw TypeError(String(it) + ' is not a function');\n  } return it;\n};\n", "var NATIVE_WEAK_MAP = require('../internals/native-weak-map');\nvar global = require('../internals/global');\nvar isObject = require('../internals/is-object');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar objectHas = require('../internals/has');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar WeakMap = global.WeakMap;\nvar set, get, has;\n\nvar enforce = function (it) {\n  return has(it) ? get(it) : set(it, {});\n};\n\nvar getterFor = function (TYPE) {\n  return function (it) {\n    var state;\n    if (!isObject(it) || (state = get(it)).type !== TYPE) {\n      throw TypeError('Incompatible receiver, ' + TYPE + ' required');\n    } return state;\n  };\n};\n\nif (NATIVE_WEAK_MAP) {\n  var store = new WeakMap();\n  var wmget = store.get;\n  var wmhas = store.has;\n  var wmset = store.set;\n  set = function (it, metadata) {\n    wmset.call(store, it, metadata);\n    return metadata;\n  };\n  get = function (it) {\n    return wmget.call(store, it) || {};\n  };\n  has = function (it) {\n    return wmhas.call(store, it);\n  };\n} else {\n  var STATE = sharedKey('state');\n  hiddenKeys[STATE] = true;\n  set = function (it, metadata) {\n    createNonEnumerableProperty(it, STATE, metadata);\n    return metadata;\n  };\n  get = function (it) {\n    return objectHas(it, STATE) ? it[STATE] : {};\n  };\n  has = function (it) {\n    return objectHas(it, STATE);\n  };\n}\n\nmodule.exports = {\n  set: set,\n  get: get,\n  has: has,\n  enforce: enforce,\n  getterFor: getterFor\n};\n", "module.exports = true;\n", "module.exports = {};\n", "module.exports = require(\"core-js-pure/stable/instance/slice\");", "module.exports = require(\"core-js-pure/stable/set-timeout\");", "import { ListType } from '.'\nimport Editor from '../../editor/index'\nimport $, { DomElement } from '../../utils/dom-core'\nimport { ContainerFragment } from './ListHandle'\n\n/**\n * 过滤 选择的 node 节点\n * @returns { DomElement[] } DomElement[]\n */\nexport function filterSelectionNodes($nodes: DomElement[]): DomElement[] {\n    const $listHtml: DomElement[] = []\n    $nodes.forEach(($node: DomElement) => {\n        const targerName = $node.getNodeName()\n        if (targerName !== ListType.OrderedList && targerName !== ListType.UnorderedList) {\n            // 非序列\n            $listHtml.push($node)\n        } else {\n            // 序列\n            if ($node.prior) {\n                $listHtml.push($node.prior)\n            } else {\n                const $children = $node.children()\n                $children?.forEach(($li: HTMLElement) => {\n                    $listHtml.push($($li))\n                })\n            }\n        }\n    })\n\n    return $listHtml\n}\n\n/**\n * 更新选区\n * @param $node\n */\n\nexport function updateRange(editor: Editor, $node: DomElement, collapsed: boolean) {\n    const selection = editor.selection\n    const range = document.createRange()\n\n    // ===============================\n    // length 大于 1\n    // 代表着转换是一个文档节点多段落\n    // ===============================\n    if ($node.length > 1) {\n        range.setStart($node.elems[0], 0)\n        range.setEnd($node.elems[$node.length - 1], $node.elems[$node.length - 1].childNodes.length)\n    }\n\n    // ===============================\n    // 序列节点 或 单段落\n    // ===============================\n    else {\n        range.selectNodeContents($node.elems[0])\n    }\n\n    // ===============================\n    // collapsed 为 true 代表是光标\n    // ===============================\n    collapsed && range.collapse(false)\n    selection.saveRange(range)\n    selection.restoreSelection()\n}\n\n/**\n * 获取起点元素\n * @param $startElem 开始序列节点\n */\nexport function getStartPoint($startElem: DomElement): DomElement {\n    return $startElem.prior\n        ? $startElem.prior // 有 prior 代表不是全选序列\n        : $($startElem.children()?.elems[0]) // 没有则代表全选序列\n}\n\n/**\n * 获取结束元素\n * @param $endElem 结束序列节点\n */\nexport function getEndPoint($endElem: DomElement): DomElement {\n    return $endElem.prior\n        ? $endElem.prior // 有 prior 代表不是全选序列\n        : $($endElem.children()?.last().elems[0]) // 没有则代表全选序列\n}\n\n/**\n * 在您指定节点的已有子节点之前插入新的子节点。\n * @param { DomElement } $node 指定节点\n * @param { ContainerFragment } newNode 插入的新子节点\n * @param { Node | null } existingNode 指定子节点\n */\nexport function insertBefore(\n    $node: DomElement,\n    newNode: ContainerFragment,\n    existingNode: Node | null = null\n) {\n    $node.parent().elems[0].insertBefore(newNode, existingNode)\n}\n\n/**\n * 创建指定的 element 对象\n */\nexport function createElement(target: string): HTMLElement {\n    return document.createElement(target)\n}\n\n/**\n * 创建文档片段\n */\nexport function createDocumentFragment(): DocumentFragment {\n    return document.createDocumentFragment()\n}\n\n/**\n * 生成 li 标签的元素，并返回 $fragment 文档片段\n * @param { DomElement[] } $nodes 需要转换成 li 的 dom 元素数组\n * @param { ContainerFragment } $fragment 用于存储生成后 li 元素的文档片段\n */\nexport function createElementFragment(\n    $nodes: DomElement[],\n    $fragment: ContainerFragment,\n    tag: string = 'li'\n): ContainerFragment {\n    $nodes.forEach(($node: DomElement) => {\n        const $list = createElement(tag)\n        $list.innerHTML = $node.html()\n        $fragment.appendChild($list)\n        $node.remove()\n    })\n    return $fragment\n}\n", "module.exports = function (bitmap, value) {\n  return {\n    enumerable: !(bitmap & 1),\n    configurable: !(bitmap & 2),\n    writable: !(bitmap & 4),\n    value: value\n  };\n};\n", "// `RequireObjectCoercible` abstract operation\n// https://tc39.github.io/ecma262/#sec-requireobjectcoercible\nmodule.exports = function (it) {\n  if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n  return it;\n};\n", "'use strict';\nvar charAt = require('../internals/string-multibyte').charAt;\nvar InternalStateModule = require('../internals/internal-state');\nvar defineIterator = require('../internals/define-iterator');\n\nvar STRING_ITERATOR = 'String Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(STRING_ITERATOR);\n\n// `String.prototype[@@iterator]` method\n// https://tc39.github.io/ecma262/#sec-string.prototype-@@iterator\ndefineIterator(String, 'String', function (iterated) {\n  setInternalState(this, {\n    type: STRING_ITERATOR,\n    string: String(iterated),\n    index: 0\n  });\n// `%StringIteratorPrototype%.next` method\n// https://tc39.github.io/ecma262/#sec-%stringiteratorprototype%.next\n}, function next() {\n  var state = getInternalState(this);\n  var string = state.string;\n  var index = state.index;\n  var point;\n  if (index >= string.length) return { value: undefined, done: true };\n  point = charAt(string, index);\n  state.index += point.length;\n  return { value: point, done: false };\n});\n", "module.exports = {};\n", "var internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\n// `Object.keys` method\n// https://tc39.github.io/ecma262/#sec-object.keys\nmodule.exports = Object.keys || function keys(O) {\n  return internalObjectKeys(O, enumBugKeys);\n};\n", "var createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\n\nmodule.exports = function (target, key, value, options) {\n  if (options && options.enumerable) target[key] = value;\n  else createNonEnumerableProperty(target, key, value);\n};\n", "require('./es.array.iterator');\nvar DOMIterables = require('../internals/dom-iterables');\nvar global = require('../internals/global');\nvar classof = require('../internals/classof');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar Iterators = require('../internals/iterators');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\n\nfor (var COLLECTION_NAME in DOMIterables) {\n  var Collection = global[COLLECTION_NAME];\n  var CollectionPrototype = Collection && Collection.prototype;\n  if (CollectionPrototype && classof(CollectionPrototype) !== TO_STRING_TAG) {\n    createNonEnumerableProperty(CollectionPrototype, TO_STRING_TAG, COLLECTION_NAME);\n  }\n  Iterators[COLLECTION_NAME] = Iterators.Array;\n}\n", "var classof = require('../internals/classof-raw');\n\n// `IsArray` abstract operation\n// https://tc39.github.io/ecma262/#sec-isarray\nmodule.exports = Array.isArray || function isArray(arg) {\n  return classof(arg) == 'Array';\n};\n", "var fails = require('../internals/fails');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar V8_VERSION = require('../internals/engine-v8-version');\n\nvar SPECIES = wellKnownSymbol('species');\n\nmodule.exports = function (METHOD_NAME) {\n  // We can't use this feature detection in V8 since it causes\n  // deoptimization and serious performance degradation\n  // https://github.com/zloirock/core-js/issues/677\n  return V8_VERSION >= 51 || !fails(function () {\n    var array = [];\n    var constructor = array.constructor = {};\n    constructor[SPECIES] = function () {\n      return { foo: 1 };\n    };\n    return array[METHOD_NAME](Boolean).foo !== 1;\n  });\n};\n", "module.exports = require(\"core-js-pure/stable/instance/bind\");", "import Editor from '../../../editor'\nimport { DomElement } from '../../../utils/dom-core'\nimport SelectionRangeElem from '../SelectionRangeElem'\n\nexport type HandlerListOptions = {\n    editor: Editor\n    listType: string\n    listTarget: string\n    $selectionElem: DomElement\n    $startElem: DomElement\n    $endElem: DomElement\n}\n\nexport interface Exec {\n    exec: Function\n}\n\nexport class ListHandle {\n    public options: HandlerListOptions\n    public selectionRangeElem: SelectionRangeElem\n\n    constructor(options: HandlerListOptions) {\n        this.options = options\n        this.selectionRangeElem = new SelectionRangeElem()\n    }\n}\n", "'use strict';\nvar nativePropertyIsEnumerable = {}.propertyIsEnumerable;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// Nashorn ~ JDK8 bug\nvar NASHORN_BUG = getOwnPropertyDescriptor && !nativePropertyIsEnumerable.call({ 1: 2 }, 1);\n\n// `Object.prototype.propertyIsEnumerable` method implementation\n// https://tc39.github.io/ecma262/#sec-object.prototype.propertyisenumerable\nexports.f = NASHORN_BUG ? function propertyIsEnumerable(V) {\n  var descriptor = getOwnPropertyDescriptor(this, V);\n  return !!descriptor && descriptor.enumerable;\n} : nativePropertyIsEnumerable;\n", "var isObject = require('../internals/is-object');\n\n// `ToPrimitive` abstract operation\n// https://tc39.github.io/ecma262/#sec-toprimitive\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (input, PREFERRED_STRING) {\n  if (!isObject(input)) return input;\n  var fn, val;\n  if (PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val;\n  if (typeof (fn = input.valueOf) == 'function' && !isObject(val = fn.call(input))) return val;\n  if (!PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val;\n  throw TypeError(\"Can't convert object to primitive value\");\n};\n", "// empty\n", "var ceil = Math.ceil;\nvar floor = Math.floor;\n\n// `ToInteger` abstract operation\n// https://tc39.github.io/ecma262/#sec-tointeger\nmodule.exports = function (argument) {\n  return isNaN(argument = +argument) ? 0 : (argument > 0 ? floor : ceil)(argument);\n};\n", "var shared = require('../internals/shared');\nvar uid = require('../internals/uid');\n\nvar keys = shared('keys');\n\nmodule.exports = function (key) {\n  return keys[key] || (keys[key] = uid(key));\n};\n", "var id = 0;\nvar postfix = Math.random();\n\nmodule.exports = function (key) {\n  return 'Symbol(' + String(key === undefined ? '' : key) + ')_' + (++id + postfix).toString(36);\n};\n", "var TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar classofRaw = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\n// ES3 wrong here\nvar CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n  try {\n    return it[key];\n  } catch (error) { /* empty */ }\n};\n\n// getting tag from ES6+ `Object.prototype.toString`\nmodule.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) {\n  var O, tag, result;\n  return it === undefined ? 'Undefined' : it === null ? 'Null'\n    // @@toStringTag case\n    : typeof (tag = tryGet(O = Object(it), TO_STRING_TAG)) == 'string' ? tag\n    // builtinTag case\n    : CORRECT_ARGUMENTS ? classofRaw(O)\n    // ES3 arguments fallback\n    : (result = classofRaw(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : result;\n};\n", "var anObject = require('../internals/an-object');\nvar isArrayIteratorMethod = require('../internals/is-array-iterator-method');\nvar toLength = require('../internals/to-length');\nvar bind = require('../internals/function-bind-context');\nvar getIteratorMethod = require('../internals/get-iterator-method');\nvar callWithSafeIterationClosing = require('../internals/call-with-safe-iteration-closing');\n\nvar Result = function (stopped, result) {\n  this.stopped = stopped;\n  this.result = result;\n};\n\nvar iterate = module.exports = function (iterable, fn, that, AS_ENTRIES, IS_ITERATOR) {\n  var boundFunction = bind(fn, that, AS_ENTRIES ? 2 : 1);\n  var iterator, iterFn, index, length, result, next, step;\n\n  if (IS_ITERATOR) {\n    iterator = iterable;\n  } else {\n    iterFn = getIteratorMethod(iterable);\n    if (typeof iterFn != 'function') throw TypeError('Target is not iterable');\n    // optimisation for array iterators\n    if (isArrayIteratorMethod(iterFn)) {\n      for (index = 0, length = toLength(iterable.length); length > index; index++) {\n        result = AS_ENTRIES\n          ? boundFunction(anObject(step = iterable[index])[0], step[1])\n          : boundFunction(iterable[index]);\n        if (result && result instanceof Result) return result;\n      } return new Result(false);\n    }\n    iterator = iterFn.call(iterable);\n  }\n\n  next = iterator.next;\n  while (!(step = next.call(iterator)).done) {\n    result = callWithSafeIterationClosing(iterator, boundFunction, step.value, AS_ENTRIES);\n    if (typeof result == 'object' && result && result instanceof Result) return result;\n  } return new Result(false);\n};\n\niterate.stop = function (result) {\n  return new Result(true, result);\n};\n", "'use strict';\nvar fails = require('../internals/fails');\n\nmodule.exports = function (METHOD_NAME, argument) {\n  var method = [][METHOD_NAME];\n  return !!method && fails(function () {\n    // eslint-disable-next-line no-useless-call,no-throw-literal\n    method.call(null, argument || function () { throw 1; }, 1);\n  });\n};\n", "// a string of all valid unicode whitespaces\n// eslint-disable-next-line max-len\nmodule.exports = '\\u0009\\u000A\\u000B\\u000C\\u000D\\u0020\\u00A0\\u1680\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n", "'use strict';\nvar toPrimitive = require('../internals/to-primitive');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = function (object, key, value) {\n  var propertyKey = toPrimitive(key);\n  if (propertyKey in object) definePropertyModule.f(object, propertyKey, createPropertyDescriptor(0, value));\n  else object[propertyKey] = value;\n};\n", "module.exports = require(\"core-js-pure/stable/instance/filter\");", "var DESCRIPTORS = require('../internals/descriptors');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPrimitive = require('../internals/to-primitive');\nvar has = require('../internals/has');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\n\nvar nativeGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptor\nexports.f = DESCRIPTORS ? nativeGetOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {\n  O = toIndexedObject(O);\n  P = toPrimitive(P, true);\n  if (IE8_DOM_DEFINE) try {\n    return nativeGetOwnPropertyDescriptor(O, P);\n  } catch (error) { /* empty */ }\n  if (has(O, P)) return createPropertyDescriptor(!propertyIsEnumerableModule.f.call(O, P), O[P]);\n};\n", "var fails = require('../internals/fails');\nvar classof = require('../internals/classof-raw');\n\nvar split = ''.split;\n\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\nmodule.exports = fails(function () {\n  // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346\n  // eslint-disable-next-line no-prototype-builtins\n  return !Object('z').propertyIsEnumerable(0);\n}) ? function (it) {\n  return classof(it) == 'String' ? split.call(it, '') : Object(it);\n} : Object;\n", "var global = require('../internals/global');\nvar isObject = require('../internals/is-object');\n\nvar document = global.document;\n// typeof document.createElement is 'object' in old IE\nvar EXISTS = isObject(document) && isObject(document.createElement);\n\nmodule.exports = function (it) {\n  return EXISTS ? document.createElement(it) : {};\n};\n", "var IS_PURE = require('../internals/is-pure');\nvar store = require('../internals/shared-store');\n\n(module.exports = function (key, value) {\n  return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n  version: '3.6.4',\n  mode: IS_PURE ? 'pure' : 'global',\n  copyright: '© 2020 Denis Pushkarev (zloirock.ru)'\n});\n", "'use strict';\nvar $ = require('../internals/export');\nvar createIteratorConstructor = require('../internals/create-iterator-constructor');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefine = require('../internals/redefine');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_PURE = require('../internals/is-pure');\nvar Iterators = require('../internals/iterators');\nvar IteratorsCore = require('../internals/iterators-core');\n\nvar IteratorPrototype = IteratorsCore.IteratorPrototype;\nvar BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS;\nvar ITERATOR = wellKnownSymbol('iterator');\nvar KEYS = 'keys';\nvar VALUES = 'values';\nvar ENTRIES = 'entries';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) {\n  createIteratorConstructor(IteratorConstructor, NAME, next);\n\n  var getIterationMethod = function (KIND) {\n    if (KIND === DEFAULT && defaultIterator) return defaultIterator;\n    if (!BUGGY_SAFARI_ITERATORS && KIND in IterablePrototype) return IterablePrototype[KIND];\n    switch (KIND) {\n      case KEYS: return function keys() { return new IteratorConstructor(this, KIND); };\n      case VALUES: return function values() { return new IteratorConstructor(this, KIND); };\n      case ENTRIES: return function entries() { return new IteratorConstructor(this, KIND); };\n    } return function () { return new IteratorConstructor(this); };\n  };\n\n  var TO_STRING_TAG = NAME + ' Iterator';\n  var INCORRECT_VALUES_NAME = false;\n  var IterablePrototype = Iterable.prototype;\n  var nativeIterator = IterablePrototype[ITERATOR]\n    || IterablePrototype['@@iterator']\n    || DEFAULT && IterablePrototype[DEFAULT];\n  var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT);\n  var anyNativeIterator = NAME == 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator;\n  var CurrentIteratorPrototype, methods, KEY;\n\n  // fix native\n  if (anyNativeIterator) {\n    CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable()));\n    if (IteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) {\n      if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) {\n        if (setPrototypeOf) {\n          setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype);\n        } else if (typeof CurrentIteratorPrototype[ITERATOR] != 'function') {\n          createNonEnumerableProperty(CurrentIteratorPrototype, ITERATOR, returnThis);\n        }\n      }\n      // Set @@toStringTag to native iterators\n      setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true);\n      if (IS_PURE) Iterators[TO_STRING_TAG] = returnThis;\n    }\n  }\n\n  // fix Array#{values, @@iterator}.name in V8 / FF\n  if (DEFAULT == VALUES && nativeIterator && nativeIterator.name !== VALUES) {\n    INCORRECT_VALUES_NAME = true;\n    defaultIterator = function values() { return nativeIterator.call(this); };\n  }\n\n  // define iterator\n  if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) {\n    createNonEnumerableProperty(IterablePrototype, ITERATOR, defaultIterator);\n  }\n  Iterators[NAME] = defaultIterator;\n\n  // export additional methods\n  if (DEFAULT) {\n    methods = {\n      values: getIterationMethod(VALUES),\n      keys: IS_SET ? defaultIterator : getIterationMethod(KEYS),\n      entries: getIterationMethod(ENTRIES)\n    };\n    if (FORCED) for (KEY in methods) {\n      if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) {\n        redefine(IterablePrototype, KEY, methods[KEY]);\n      }\n    } else $({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods);\n  }\n\n  return methods;\n};\n", "var fails = require('../internals/fails');\n\nmodule.exports = !!Object.getOwnPropertySymbols && !fails(function () {\n  // Chrome 38 Symbol has incorrect toString conversion\n  // eslint-disable-next-line no-undef\n  return !String(Symbol());\n});\n", "var anObject = require('../internals/an-object');\nvar defineProperties = require('../internals/object-define-properties');\nvar enumBugKeys = require('../internals/enum-bug-keys');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar html = require('../internals/html');\nvar documentCreateElement = require('../internals/document-create-element');\nvar sharedKey = require('../internals/shared-key');\n\nvar GT = '>';\nvar LT = '<';\nvar PROTOTYPE = 'prototype';\nvar SCRIPT = 'script';\nvar IE_PROTO = sharedKey('IE_PROTO');\n\nvar EmptyConstructor = function () { /* empty */ };\n\nvar scriptTag = function (content) {\n  return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT;\n};\n\n// Create object with fake `null` prototype: use ActiveX Object with cleared prototype\nvar NullProtoObjectViaActiveX = function (activeXDocument) {\n  activeXDocument.write(scriptTag(''));\n  activeXDocument.close();\n  var temp = activeXDocument.parentWindow.Object;\n  activeXDocument = null; // avoid memory leak\n  return temp;\n};\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar NullProtoObjectViaIFrame = function () {\n  // Thrash, waste and sodomy: IE GC bug\n  var iframe = documentCreateElement('iframe');\n  var JS = 'java' + SCRIPT + ':';\n  var iframeDocument;\n  iframe.style.display = 'none';\n  html.appendChild(iframe);\n  // https://github.com/zloirock/core-js/issues/475\n  iframe.src = String(JS);\n  iframeDocument = iframe.contentWindow.document;\n  iframeDocument.open();\n  iframeDocument.write(scriptTag('document.F=Object'));\n  iframeDocument.close();\n  return iframeDocument.F;\n};\n\n// Check for document.domain and active x support\n// No need to use active x approach when document.domain is not set\n// see https://github.com/es-shims/es5-shim/issues/150\n// variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346\n// avoid IE GC bug\nvar activeXDocument;\nvar NullProtoObject = function () {\n  try {\n    /* global ActiveXObject */\n    activeXDocument = document.domain && new ActiveXObject('htmlfile');\n  } catch (error) { /* ignore */ }\n  NullProtoObject = activeXDocument ? NullProtoObjectViaActiveX(activeXDocument) : NullProtoObjectViaIFrame();\n  var length = enumBugKeys.length;\n  while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]];\n  return NullProtoObject();\n};\n\nhiddenKeys[IE_PROTO] = true;\n\n// `Object.create` method\n// https://tc39.github.io/ecma262/#sec-object.create\nmodule.exports = Object.create || function create(O, Properties) {\n  var result;\n  if (O !== null) {\n    EmptyConstructor[PROTOTYPE] = anObject(O);\n    result = new EmptyConstructor();\n    EmptyConstructor[PROTOTYPE] = null;\n    // add \"__proto__\" for Object.getPrototypeOf polyfill\n    result[IE_PROTO] = O;\n  } else result = NullProtoObject();\n  return Properties === undefined ? result : defineProperties(result, Properties);\n};\n", "var toIndexedObject = require('../internals/to-indexed-object');\nvar toLength = require('../internals/to-length');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\n\n// `Array.prototype.{ indexOf, includes }` methods implementation\nvar createMethod = function (IS_INCLUDES) {\n  return function ($this, el, fromIndex) {\n    var O = toIndexedObject($this);\n    var length = toLength(O.length);\n    var index = toAbsoluteIndex(fromIndex, length);\n    var value;\n    // Array#includes uses SameValueZero equality algorithm\n    // eslint-disable-next-line no-self-compare\n    if (IS_INCLUDES && el != el) while (length > index) {\n      value = O[index++];\n      // eslint-disable-next-line no-self-compare\n      if (value != value) return true;\n    // Array#indexOf ignores holes, Array#includes - not\n    } else for (;length > index; index++) {\n      if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;\n    } return !IS_INCLUDES && -1;\n  };\n};\n\nmodule.exports = {\n  // `Array.prototype.includes` method\n  // https://tc39.github.io/ecma262/#sec-array.prototype.includes\n  includes: createMethod(true),\n  // `Array.prototype.indexOf` method\n  // https://tc39.github.io/ecma262/#sec-array.prototype.indexof\n  indexOf: createMethod(false)\n};\n", "var toInteger = require('../internals/to-integer');\n\nvar max = Math.max;\nvar min = Math.min;\n\n// Helper for a popular repeating case of the spec:\n// Let integer be ? ToInteger(index).\n// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length).\nmodule.exports = function (index, length) {\n  var integer = toInteger(index);\n  return integer < 0 ? max(integer + length, 0) : min(integer, length);\n};\n", "// IE8- don't enum bug keys\nmodule.exports = [\n  'constructor',\n  'hasOwnProperty',\n  'isPrototypeOf',\n  'propertyIsEnumerable',\n  'toLocaleString',\n  'toString',\n  'valueOf'\n];\n", "var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar test = {};\n\ntest[TO_STRING_TAG] = 'z';\n\nmodule.exports = String(test) === '[object z]';\n", "module.exports = function () { /* empty */ };\n", "module.exports = function (it, Constructor, name) {\n  if (!(it instanceof Constructor)) {\n    throw TypeError('Incorrect ' + (name ? name + ' ' : '') + 'invocation');\n  } return it;\n};\n", "var getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('navigator', 'userAgent') || '';\n", "'use strict';\nvar aFunction = require('../internals/a-function');\n\nvar PromiseCapability = function (C) {\n  var resolve, reject;\n  this.promise = new C(function ($$resolve, $$reject) {\n    if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n    resolve = $$resolve;\n    reject = $$reject;\n  });\n  this.resolve = aFunction(resolve);\n  this.reject = aFunction(reject);\n};\n\n// 25.4.1.5 NewPromiseCapability(C)\nmodule.exports.f = function (C) {\n  return new PromiseCapability(C);\n};\n", "var global = require('../internals/global');\nvar userAgent = require('../internals/engine-user-agent');\n\nvar process = global.process;\nvar versions = process && process.versions;\nvar v8 = versions && versions.v8;\nvar match, version;\n\nif (v8) {\n  match = v8.split('.');\n  version = match[0] + match[1];\n} else if (userAgent) {\n  match = userAgent.match(/Edge\\/(\\d+)/);\n  if (!match || match[1] >= 74) {\n    match = userAgent.match(/Chrome\\/(\\d+)/);\n    if (match) version = match[1];\n  }\n}\n\nmodule.exports = version && +version;\n", "/**\n * @description 编辑器 class\n * @author wangfupeng\n */\n\nimport $, { DomElement, DomElementSelector } from '../utils/dom-core'\nimport { deepClone } from '../utils/util'\nimport defaultConfig, { ConfigType } from '../config'\nimport SelectionAndRangeAPI from './selection'\nimport CommandAPI from './command'\nimport Text from '../text/index'\nimport Menus from '../menus/index'\nimport initDom, { selectorValidator } from './init-fns/init-dom'\nimport initSelection from './init-fns/init-selection'\nimport bindEvent from './init-fns/bind-event'\nimport i18nextInit from './init-fns/i18next-init'\nimport initFullScreen, { setUnFullScreen, setFullScreen } from './init-fns/set-full-screen'\nimport scrollToHead from './init-fns/scroll-to-head'\nimport ZIndex from './z-index'\nimport Change from './change/index'\nimport History from './history/index'\nimport disableInit from './disable'\nimport SelectionChange from './selection-change'\n\nimport initPlugins, { RegisterOptions, pluginsListType, registerPlugin } from '../plugins'\n\n// 创建菜单的 class\nimport { MenuListType } from '../menus/menu-list'\nimport BtnMenu from '../menus/menu-constructors/BtnMenu'\nimport DropList from '../menus/menu-constructors/DropList'\nimport DropListMenu from '../menus/menu-constructors/DropListMenu'\nimport Panel from '../menus/menu-constructors/Panel'\nimport PanelMenu from '../menus/menu-constructors/PanelMenu'\nimport Tooltip from '../menus/menu-constructors/Tooltip'\n\nlet EDITOR_ID = 1\n\nclass Editor {\n    // 暴露 $\n    static $ = $\n\n    static BtnMenu = BtnMenu\n    static DropList = DropList\n    static DropListMenu = DropListMenu\n    static Panel = Panel\n    static PanelMenu = PanelMenu\n    static Tooltip = Tooltip\n    static globalCustomMenuConstructorList: MenuListType = {}\n    static globalPluginsFunctionList: pluginsListType = {}\n    public pluginsFunctionList: pluginsListType = {}\n\n    public id: string\n    public toolbarSelector: DomElementSelector\n    public textSelector?: DomElementSelector\n    public config: ConfigType\n    public $toolbarElem: DomElement\n    public $textContainerElem: DomElement\n    public $textElem: DomElement\n    public toolbarElemId: string\n    public textElemId: string\n    public isFocus: boolean\n    public isComposing: boolean\n    public isCompatibleMode: boolean\n    public selection: SelectionAndRangeAPI\n    public cmd: CommandAPI\n    public txt: Text\n    public menus: Menus\n    public i18next: any\n    public highlight: any\n    public zIndex: ZIndex\n    public change: Change\n    public history: History\n    public isEnable: Boolean\n    public onSelectionChange: SelectionChange\n\n    // 实例销毁前需要执行的钩子集合\n    private beforeDestroyHooks: Function[] = []\n\n    /** 禁用api */\n    public disable: Function\n\n    /** 启用api */\n    public enable: Function\n\n    /**\n     * 构造函数\n     * @param toolbarSelector 工具栏 DOM selector\n     * @param textSelector 文本区域 DOM selector\n     */\n    constructor(toolbarSelector: DomElementSelector, textSelector?: DomElementSelector) {\n        // id，用以区分单个页面不同的编辑器对象\n        this.id = `wangEditor-${EDITOR_ID++}`\n\n        this.toolbarSelector = toolbarSelector\n        this.textSelector = textSelector\n\n        selectorValidator(this)\n\n        // 属性的默认值，后面可能会再修改\n        // 默认配置 - 当一个页面有多个编辑器的时候，因为 JS 的特性(引用类型)会导致多个编辑器的 config 引用是同一个，所以需要 深度克隆 断掉引用\n        this.config = deepClone(defaultConfig)\n        this.$toolbarElem = $('<div></div>')\n        this.$textContainerElem = $('<div></div>')\n        this.$textElem = $('<div></div>')\n        this.toolbarElemId = ''\n        this.textElemId = ''\n        this.isFocus = false\n        this.isComposing = false\n        this.isCompatibleMode = false\n\n        this.selection = new SelectionAndRangeAPI(this)\n        this.cmd = new CommandAPI(this)\n        this.txt = new Text(this)\n        this.menus = new Menus(this)\n        this.zIndex = new ZIndex()\n        this.change = new Change(this)\n        this.history = new History(this)\n        this.onSelectionChange = new SelectionChange(this)\n\n        const { disable, enable } = disableInit(this)\n        this.disable = disable\n        this.enable = enable\n        this.isEnable = true\n    }\n\n    /**\n     * 初始化选区\n     * @param newLine 新建一行\n     */\n    public initSelection(newLine?: boolean): void {\n        initSelection(this, newLine)\n    }\n\n    /**\n     * 创建编辑器实例\n     */\n    public create(): void {\n        // 初始化 ZIndex\n        this.zIndex.init(this)\n\n        // 确定当前的历史记录模式\n        this.isCompatibleMode = this.config.compatibleMode()\n\n        // 标准模式下，重置延迟时间\n        if (!this.isCompatibleMode) {\n            this.config.onchangeTimeout = 30\n        }\n\n        // 国际化 因为要在创建菜单前使用 所以要最先 初始化\n        i18nextInit(this)\n\n        // 初始化 DOM\n        initDom(this)\n\n        // 初始化 text\n        this.txt.init()\n\n        // 初始化菜单\n        this.menus.init()\n\n        // 初始化全屏功能\n        initFullScreen(this)\n\n        // 初始化选区，将光标定位到内容尾部\n        this.initSelection(true)\n\n        // 绑定事件\n        bindEvent(this)\n\n        // 绑定监听的目标节点\n        this.change.observe()\n\n        this.history.observe()\n\n        // 初始化插件\n        initPlugins(this)\n    }\n\n    /**\n     * 提供给用户添加销毁前的钩子函数\n     * @param fn 钩子函数\n     */\n    public beforeDestroy(fn: Function): Editor {\n        this.beforeDestroyHooks.push(fn)\n        return this\n    }\n\n    /**\n     * 销毁当前编辑器实例\n     */\n    public destroy(): void {\n        // 调用钩子函数\n        this.beforeDestroyHooks.forEach(fn => fn.call(this))\n        // 销毁 DOM 节点\n        this.$toolbarElem.remove()\n        this.$textContainerElem.remove()\n    }\n\n    /**\n     * 将编辑器设置为全屏\n     */\n    public fullScreen(): void {\n        setFullScreen(this)\n    }\n\n    /**\n     * 将编辑器退出全屏\n     */\n    public unFullScreen(): void {\n        setUnFullScreen(this)\n    }\n\n    /**\n     * 滚动到指定标题锚点\n     * @param id 标题锚点id\n     */\n    public scrollToHead(id: string): void {\n        scrollToHead(this, id)\n    }\n\n    /**\n     * 自定义添加菜单\n     * @param key 菜单 key\n     * @param Menu 菜单构造函数\n     */\n    static registerMenu(key: string, Menu: any) {\n        if (!Menu || typeof Menu !== 'function') return\n        Editor.globalCustomMenuConstructorList[key] = Menu\n    }\n\n    /**\n     * 自定义添加插件\n     * @param { string } name 插件的名称\n     * @param { RegisterOptions } options 插件的选项\n     */\n    public registerPlugin(name: string, options: RegisterOptions) {\n        registerPlugin(name, options, this.pluginsFunctionList)\n    }\n\n    /**\n     * 自定义添加插件\n     * @param { string } name 插件的名称\n     * @param { RegisterOptions } options 插件的选项\n     */\n    static registerPlugin(name: string, options: RegisterOptions) {\n        registerPlugin(name, options, Editor.globalPluginsFunctionList)\n    }\n}\n\nexport default Editor\n", "var isObject = require('../internals/is-object');\nvar isArray = require('../internals/is-array');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar SPECIES = wellKnownSymbol('species');\n\n// `ArraySpeciesCreate` abstract operation\n// https://tc39.github.io/ecma262/#sec-arrayspeciescreate\nmodule.exports = function (originalArray, length) {\n  var C;\n  if (isArray(originalArray)) {\n    C = originalArray.constructor;\n    // cross-realm fallback\n    if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n    else if (isObject(C)) {\n      C = C[SPECIES];\n      if (C === null) C = undefined;\n    }\n  } return new (C === undefined ? Array : C)(length === 0 ? 0 : length);\n};\n", "module.exports = require(\"core-js-pure/stable/array/is-array\");", "var requireObjectCoercible = require('../internals/require-object-coercible');\nvar whitespaces = require('../internals/whitespaces');\n\nvar whitespace = '[' + whitespaces + ']';\nvar ltrim = RegExp('^' + whitespace + whitespace + '*');\nvar rtrim = RegExp(whitespace + whitespace + '*$');\n\n// `String.prototype.{ trim, trimStart, trimEnd, trimLeft, trimRight }` methods implementation\nvar createMethod = function (TYPE) {\n  return function ($this) {\n    var string = String(requireObjectCoercible($this));\n    if (TYPE & 1) string = string.replace(ltrim, '');\n    if (TYPE & 2) string = string.replace(rtrim, '');\n    return string;\n  };\n};\n\nmodule.exports = {\n  // `String.prototype.{ trimLeft, trimStart }` methods\n  // https://tc39.github.io/ecma262/#sec-string.prototype.trimstart\n  start: createMethod(1),\n  // `String.prototype.{ trimRight, trimEnd }` methods\n  // https://tc39.github.io/ecma262/#sec-string.prototype.trimend\n  end: createMethod(2),\n  // `String.prototype.trim` method\n  // https://tc39.github.io/ecma262/#sec-string.prototype.trim\n  trim: createMethod(3)\n};\n", "module.exports = require(\"core-js-pure/stable/instance/splice\");", "var _Symbol$iterator = require(\"../core-js/symbol/iterator\");\n\nvar _Symbol = require(\"../core-js/symbol\");\n\nfunction _typeof(obj) {\n  \"@babel/helpers - typeof\";\n\n  if (typeof _Symbol === \"function\" && typeof _Symbol$iterator === \"symbol\") {\n    module.exports = _typeof = function _typeof(obj) {\n      return typeof obj;\n    };\n  } else {\n    module.exports = _typeof = function _typeof(obj) {\n      return obj && typeof _Symbol === \"function\" && obj.constructor === _Symbol && obj !== _Symbol.prototype ? \"symbol\" : typeof obj;\n    };\n  }\n\n  return _typeof(obj);\n}\n\nmodule.exports = _typeof;", "var wellKnownSymbol = require('../internals/well-known-symbol');\n\nexports.f = wellKnownSymbol;\n", "module.exports = require(\"core-js-pure/stable/object/entries\");", "/**\n * @description Menu class 父类\n * @author wangfupeng\n */\n\nimport { DomElement } from '../../utils/dom-core'\nimport Editor from '../../editor/index'\nimport Panel from './Panel'\n\nexport interface MenuActive {\n    /**\n     * 修改菜单激活状态，菜单是否高亮\n     */\n    tryChangeActive(): void\n}\n\nclass Menu {\n    public key: string | undefined\n    public $elem: DomElement\n    public editor: Editor\n    private _active: boolean // 菜单是否处于激活状态，如选中一段加粗文字时，bold 菜单要被激活（即高亮显示）\n\n    constructor($elem: DomElement, editor: Editor) {\n        this.$elem = $elem\n        this.editor = editor\n        this._active = false\n\n        // 绑定菜单点击事件\n        $elem.on('click', (e: Event) => {\n            Panel.hideCurAllPanels() // 隐藏当前的所有 Panel\n\n            // 触发菜单点击的钩子\n            editor.txt.eventHooks.menuClickEvents.forEach(fn => fn())\n\n            e.stopPropagation()\n            if (editor.selection.getRange() == null) {\n                return\n            }\n            this.clickHandler(e)\n        })\n    }\n\n    /**\n     * 菜单点击事件，子类可重写\n     * @param e event\n     */\n    protected clickHandler(e: Event): void {}\n\n    /**\n     * 激活菜单，高亮显示\n     */\n    protected active(): void {\n        this._active = true\n        this.$elem.addClass('w-e-active')\n    }\n\n    /**\n     * 取消激活，不再高亮显示\n     */\n    protected unActive(): void {\n        this._active = false\n        this.$elem.removeClass('w-e-active')\n    }\n\n    /**\n     * 是否处于激活状态\n     */\n    public get isActive() {\n        return this._active\n    }\n}\n\nexport default Menu\n", "/**\n * @description 检查选区是否在链接中，即菜单是否应该 active\n * @author wangfupeng\n */\n\nimport Editor from '../../editor/index'\nimport { DomElement } from '../../utils/dom-core'\n\n// 加粗 b\n// 字号/字体/颜色 font\n// 斜体 i\n// 删除线 strike\nexport const EXTRA_TAG = ['B', 'FONT', 'I', 'STRIKE']\n\nexport function getParentNodeA(selectionELem: DomElement) {\n    let node = selectionELem.elems[0]\n\n    while (node && EXTRA_TAG.includes(node.nodeName)) {\n        node = node.parentElement!\n\n        if (node.nodeName === 'A') {\n            return node\n        }\n    }\n}\n\nfunction isActive(editor: Editor) {\n    const $selectionELem = editor.selection.getSelectionContainerElem()\n\n    if (!$selectionELem?.elems?.length) {\n        return false\n    }\n\n    // 选中直接是a元素\n    if ($selectionELem.getNodeName() === 'A') {\n        return true\n    }\n\n    // 有可能a里面嵌套了其他元素，比如b、i元素等\n    const parentNode = getParentNodeA($selectionELem)\n\n    if (parentNode && parentNode.nodeName === 'A') {\n        return true\n    }\n\n    return false\n}\n\nexport default isActive\n", "/**\n * @description 上传图片\n * @author wangfupeng\n */\n\nimport Editor from '../../editor/index'\nimport { arrForEach, forEach } from '../../utils/util'\nimport post from '../../editor/upload/upload-core'\nimport Progress from '../../editor/upload/progress'\n\ntype ResImgItemType = string | { url: string; alt?: string; href?: string }\n\nexport type ResType = {\n    errno: number | string\n    data: ResImgItemType[]\n}\n\nclass UploadImg {\n    private editor: Editor\n\n    constructor(editor: Editor) {\n        this.editor = editor\n    }\n\n    /**\n     * 往编辑区域插入图片\n     * @param src 图片地址\n     */\n    public insertImg(src: string, alt?: string, href?: string): void {\n        const editor = this.editor\n        const config = editor.config\n\n        const i18nPrefix = 'validate.'\n        const t = (text: string, prefix: string = i18nPrefix): string => {\n            return editor.i18next.t(prefix + text)\n        }\n\n        /**\n         * fix: insertImg xss\n         */\n\n        // 过滤src, 防止xss\n        let resultSrc = src.replace(/</g, '&lt;').replace(/>/g, '&gt;')\n\n        // 因为下面要单引号拼接字符串, 所以要将单引号替换成双引号\n        resultSrc = resultSrc.replace(\"'\", '\"')\n\n        let hrefText = ''\n\n        // 设置图片的元数据 data-\n        if (href) {\n            hrefText = href.replace(\"'\", '\"')\n\n            hrefText = `data-href='${encodeURIComponent(hrefText)}' `\n        }\n\n        let altText = ''\n        // 设置图片alt, 过滤xss标签攻击\n        if (alt) {\n            altText = alt.replace(/</g, '&lt;').replace(/>/g, '&gt;')\n\n            // 因为下面要单引号拼接字符串, 所以要将单引号替换成双引号\n            altText = altText.replace(\"'\", '\"')\n\n            altText = `alt='${altText}' `\n        }\n\n        // 先插入图片，无论是否能成功\n        editor.cmd.do(\n            'insertHTML',\n            `<img src='${resultSrc}' ${altText}${hrefText}style=\"max-width:100%;\" contenteditable=\"false\"/>`\n        )\n        // 执行回调函数\n        config.linkImgCallback(src, alt, href)\n\n        // 加载图片\n        let img: any = document.createElement('img')\n        img.onload = () => {\n            img = null\n        }\n        img.onerror = () => {\n            config.customAlert(\n                t('插入图片错误'),\n                'error',\n                `wangEditor: ${t('插入图片错误')}，${t('图片链接')} \"${src}\"，${t('下载链接失败')}`\n            )\n            img = null\n        }\n        img.onabort = () => (img = null)\n        img.src = src\n    }\n\n    /**\n     * 上传图片\n     * @param files 文件列表\n     */\n    public uploadImg(files: FileList | File[]): void {\n        if (!files.length) {\n            return\n        }\n\n        const editor = this.editor\n        const config = editor.config\n\n        // ------------------------------ i18next ------------------------------\n\n        const i18nPrefix = 'validate.'\n        const t = (text: string): string => {\n            return editor.i18next.t(i18nPrefix + text)\n        }\n\n        // ------------------------------ 获取配置信息 ------------------------------\n\n        // 服务端地址\n        let uploadImgServer = config.uploadImgServer\n        // base64 格式\n        const uploadImgShowBase64 = config.uploadImgShowBase64\n        // 图片最大体积\n        const maxSize = config.uploadImgMaxSize\n        const maxSizeM = maxSize / 1024 / 1024\n        // 一次最多上传图片数量\n        const maxLength = config.uploadImgMaxLength\n        // 自定义 fileName\n        const uploadFileName = config.uploadFileName\n        // 自定义参数\n        const uploadImgParams = config.uploadImgParams\n        // 参数拼接到 url 中\n        const uploadImgParamsWithUrl = config.uploadImgParamsWithUrl\n        // 自定义 header\n        const uploadImgHeaders = config.uploadImgHeaders\n        // 钩子函数\n        const hooks = config.uploadImgHooks\n        // 上传图片超时时间\n        const timeout = config.uploadImgTimeout\n        // 跨域带 cookie\n        const withCredentials = config.withCredentials\n        // 自定义上传图片\n        const customUploadImg = config.customUploadImg\n\n        if (!customUploadImg) {\n            // 没有 customUploadImg 的情况下，需要如下两个配置才能继续进行图片上传\n            if (!uploadImgServer && !uploadImgShowBase64) {\n                return\n            }\n        }\n\n        // ------------------------------ 验证文件信息 ------------------------------\n        const resultFiles: File[] = []\n        const errInfos: string[] = []\n        arrForEach(files, file => {\n            // chrome 低版本 粘贴一张图时files为 [null, File]\n            if (!file) return\n\n            const name = file.name || file.type.replace('/', '.') // 兼容低版本chrome 没有name\n            const size = file.size\n\n            // chrome 低版本 name === undefined\n            if (!name || !size) {\n                return\n            }\n\n            // 将uploadImgAccept数组转换为正则对象\n            const imgType = editor.config.uploadImgAccept.join('|')\n            const imgTypeRuleStr = `.(${imgType})$`\n            const uploadImgAcceptRule = new RegExp(imgTypeRuleStr, 'i')\n            if (uploadImgAcceptRule.test(name) === false) {\n                // 后缀名不合法，不是图片\n                errInfos.push(`【${name}】${t('不是图片')}`)\n                return\n            }\n\n            if (maxSize < size) {\n                // 上传图片过大\n                errInfos.push(`【${name}】${t('大于')} ${maxSizeM}M`)\n                return\n            }\n\n            // 验证通过的加入结果列表\n            resultFiles.push(file)\n        })\n        // 抛出验证信息\n        if (errInfos.length) {\n            config.customAlert(`${t('图片验证未通过')}: \\n` + errInfos.join('\\n'), 'warning')\n            return\n        }\n\n        // 如果过滤后文件列表为空直接返回\n        if (resultFiles.length === 0) {\n            config.customAlert(t('传入的文件不合法'), 'warning')\n            return\n        }\n\n        if (resultFiles.length > maxLength) {\n            config.customAlert(t('一次最多上传') + maxLength + t('张图片'), 'warning')\n            return\n        }\n\n        // ------------------------------ 自定义上传 ------------------------------\n        if (customUploadImg && typeof customUploadImg === 'function') {\n            customUploadImg(resultFiles, this.insertImg.bind(this))\n\n            // 阻止以下代码执行，重要！！！\n            return\n        }\n\n        // ------------------------------ 上传图片 ------------------------------\n\n        // 添加图片数据\n        const formData = new FormData()\n        resultFiles.forEach((file: File, index: number) => {\n            let name = uploadFileName || file.name\n            if (resultFiles.length > 1) {\n                // 多个文件时，filename 不能重复\n                name = name + (index + 1)\n            }\n            formData.append(name, file)\n        })\n        if (uploadImgServer) {\n            // 添加自定义参数\n            const uploadImgServerArr = uploadImgServer.split('#')\n            uploadImgServer = uploadImgServerArr[0]\n            const uploadImgServerHash = uploadImgServerArr[1] || ''\n            forEach(uploadImgParams, (key: string, val: string) => {\n                // 因使用者反应，自定义参数不能默认 encode ，由 v3.1.1 版本开始注释掉\n                // val = encodeURIComponent(val)\n\n                // 第一，将参数拼接到 url 中\n                if (uploadImgParamsWithUrl) {\n                    if (uploadImgServer.indexOf('?') > 0) {\n                        uploadImgServer += '&'\n                    } else {\n                        uploadImgServer += '?'\n                    }\n                    uploadImgServer = uploadImgServer + key + '=' + val\n                }\n\n                // 第二，将参数添加到 formData 中\n                formData.append(key, val)\n            })\n            if (uploadImgServerHash) {\n                uploadImgServer += '#' + uploadImgServerHash\n            }\n\n            // 开始上传\n            const xhr = post(uploadImgServer, {\n                timeout,\n                formData,\n                headers: uploadImgHeaders,\n                withCredentials: !!withCredentials,\n                beforeSend: xhr => {\n                    if (hooks.before) return hooks.before(xhr, editor, resultFiles)\n                },\n                onTimeout: xhr => {\n                    config.customAlert(t('上传图片超时'), 'error')\n                    if (hooks.timeout) hooks.timeout(xhr, editor)\n                },\n                onProgress: (percent, e) => {\n                    const progressBar = new Progress(editor)\n                    if (e.lengthComputable) {\n                        percent = e.loaded / e.total\n                        progressBar.show(percent)\n                    }\n                },\n                onError: xhr => {\n                    config.customAlert(\n                        t('上传图片错误'),\n                        'error',\n                        `${t('上传图片错误')}，${t('服务器返回状态')}: ${xhr.status}`\n                    )\n                    if (hooks.error) hooks.error(xhr, editor)\n                },\n                onFail: (xhr, resultStr) => {\n                    config.customAlert(\n                        t('上传图片失败'),\n                        'error',\n                        t('上传图片返回结果错误') + `，${t('返回结果')}: ` + resultStr\n                    )\n                    if (hooks.fail) hooks.fail(xhr, editor, resultStr)\n                },\n                onSuccess: (xhr, result: ResType) => {\n                    if (hooks.customInsert) {\n                        // 自定义插入图片\n                        hooks.customInsert(this.insertImg.bind(this), result, editor)\n                        return\n                    }\n                    if (result.errno != '0') {\n                        // 返回格式不对，应该为 { errno: 0, data: [...] }\n                        config.customAlert(\n                            t('上传图片失败'),\n                            'error',\n                            `${t('上传图片返回结果错误')}，${t('返回结果')} errno=${result.errno}`\n                        )\n                        if (hooks.fail) hooks.fail(xhr, editor, result)\n                        return\n                    }\n\n                    // 成功，插入图片\n                    const data = result.data\n                    data.forEach(link => {\n                        if (typeof link === 'string') {\n                            this.insertImg(link)\n                        } else {\n                            this.insertImg(link.url, link.alt, link.href)\n                        }\n                    })\n\n                    // 钩子函数\n                    if (hooks.success) hooks.success(xhr, editor, result)\n                },\n            })\n            if (typeof xhr === 'string') {\n                // 上传被阻止\n                config.customAlert(xhr, 'error')\n            }\n\n            // 阻止以下代码执行，重要！！！\n            return\n        }\n\n        // ------------------------------ 显示 base64 格式 ------------------------------\n        if (uploadImgShowBase64) {\n            arrForEach(files, file => {\n                const _this = this\n                const reader = new FileReader()\n                reader.readAsDataURL(file)\n                reader.onload = function () {\n                    if (!this.result) return\n                    const imgLink = this.result.toString()\n                    _this.insertImg(imgLink, imgLink)\n                }\n            })\n        }\n    }\n}\n\nexport default UploadImg\n", "import { DomElement } from '../../utils/dom-core'\nimport Editor from '../../editor'\n\n/**\n * 判断传入的单行顶级选区选取是不是todo\n * @param editor 编辑器对象\n */\nfunction isTodo($topSelectElem: DomElement) {\n    if ($topSelectElem.length) {\n        return $topSelectElem.attr('class') === 'w-e-todo'\n    }\n\n    return false\n}\n/**\n * 判断选中的内容是不是都是todo\n * @param editor 编辑器对象\n */\nfunction isAllTodo(editor: Editor): boolean | undefined {\n    const $topSelectElems = editor.selection.getSelectionRangeTopNodes()\n    // 排除为[]的情况\n    if ($topSelectElems.length === 0) return\n\n    return $topSelectElems.every($topSelectElem => {\n        return isTodo($topSelectElem)\n    })\n}\n\n/**\n * 根据所在的文本节点和光标在文本节点的位置获取截断的后节点内容\n * @param node 顶级节点\n * @param textNode 光标所在的文本节点\n * @param pos 光标在文本节点的位置\n */\nfunction getCursorNextNode(node: Node, textNode: Node, pos: number): Node | undefined {\n    if (!node.hasChildNodes()) return\n\n    const newNode = node.cloneNode() as ChildNode\n    // 判断光标是否在末尾\n    let end = false\n    if (textNode.nodeValue === '') {\n        end = true\n    }\n\n    let delArr: Node[] = []\n    node.childNodes.forEach(v => {\n        //光标后的内容\n        if (!isContains(v, textNode) && end) {\n            newNode.appendChild(v.cloneNode(true))\n            if (v.nodeName !== 'BR') {\n                delArr.push(v)\n            }\n        }\n        // 光标所在的区域\n        if (isContains(v, textNode)) {\n            if (v.nodeType === 1) {\n                const childNode = getCursorNextNode(v, textNode, pos) as Node\n                if (childNode && childNode.textContent !== '') newNode?.appendChild(childNode)\n            }\n            if (v.nodeType === 3) {\n                if (textNode.isEqualNode(v)) {\n                    const textContent = dealTextNode(v, pos)\n                    newNode.textContent = textContent\n                }\n            }\n            end = true\n        }\n    })\n    // 删除选中后原来的节点\n    delArr.forEach(v => {\n        const node = v as ChildNode\n        node.remove()\n    })\n\n    return newNode\n}\n\n/**\n * 判断otherNode是否包含在node中\n * @param node 父节点\n * @param otherNode 需要判断是不是被包含的节点\n */\nfunction isContains(node: Node, otherNode: Node) {\n    // 兼容ie11中textNode不支持contains方法\n    if (node.nodeType === 3) {\n        return node.nodeValue === otherNode.nodeValue\n    }\n\n    return node.contains(otherNode)\n}\n/**\n * 获取新的文本节点\n * @param node 要处理的文本节点\n * @param pos  光标在文本节点所在的位置\n * @param start 设置为true时保留开始位置到光标的内容，设置为false时删去开始的内容\n */\nfunction dealTextNode(node: Node, pos: number, start: boolean = true): string {\n    let content = node.nodeValue\n    let oldContent = content?.slice(0, pos) as string\n    content = content?.slice(pos) as string\n    // start为false时替换content和oldContent\n    if (!start) {\n        let temp = content\n        content = oldContent\n        oldContent = temp\n    }\n    node.nodeValue = oldContent\n    return content\n}\n\nexport { getCursorNextNode, isTodo, isAllTodo, dealTextNode }\n", "/**\n * @description 双栈实现撤销恢复\n * @author fangzhicong\n */\n\nimport { CeilStack } from './stack'\n\nexport default class Cache<T> {\n    /**\n     * 正常操作（用户输入、js代码修改内容、恢复操作）产生的缓存\n     */\n    protected data: CeilStack<T>\n\n    /**\n     * 撤销操作产生的缓存（恢复操作时需要这些数据）\n     */\n    protected revokeData: CeilStack<T>\n\n    /**\n     * 上一步操作是否为 撤销/恢复\n     */\n    protected isRe: boolean = false\n\n    constructor(protected maxSize: number) {\n        this.data = new CeilStack(maxSize)\n        this.revokeData = new CeilStack(maxSize)\n    }\n\n    /**\n     * 返回当前栈中的数据长度。格式为：[正常的数据的条数，被撤销的数据的条数]\n     */\n    public get size() {\n        return [this.data.size, this.revokeData.size]\n    }\n\n    /**\n     * 重设数据缓存器的缓存长度（第一次有效）\n     */\n    public resetMaxSize(maxSize: number) {\n        this.data.resetMax(maxSize)\n        this.revokeData.resetMax(maxSize)\n    }\n\n    /**\n     * 保存数据\n     */\n    public save(data: T) {\n        if (this.isRe) {\n            this.revokeData.clear()\n            this.isRe = false\n        }\n        this.data.instack(data)\n        return this\n    }\n\n    /**\n     * 撤销\n     * @param fn 撤销时，如果有数据，执行的回调函数\n     */\n    public revoke(fn: (data: T) => void) {\n        !this.isRe && (this.isRe = true)\n        let data = this.data.outstack()\n        if (data) {\n            this.revokeData.instack(data)\n            fn(data)\n            return true\n        }\n        return false\n    }\n\n    /**\n     * 恢复\n     * @param fn 恢复时，如果有数据，执行的回调函数\n     */\n    public restore(fn: (data: T) => void) {\n        !this.isRe && (this.isRe = true)\n        let data = this.revokeData.outstack()\n        if (data) {\n            this.data.instack(data)\n            fn(data)\n            return true\n        }\n        return false\n    }\n}\n", "var DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar createElement = require('../internals/document-create-element');\n\n// Thank's IE8 for his funny defineProperty\nmodule.exports = !DESCRIPTORS && !fails(function () {\n  return Object.defineProperty(createElement('div'), 'a', {\n    get: function () { return 7; }\n  }).a != 7;\n});\n", "var fails = require('../internals/fails');\n\nvar replacement = /#|\\.prototype\\./;\n\nvar isForced = function (feature, detection) {\n  var value = data[normalize(feature)];\n  return value == POLYFILL ? true\n    : value == NATIVE ? false\n    : typeof detection == 'function' ? fails(detection)\n    : !!detection;\n};\n\nvar normalize = isForced.normalize = function (string) {\n  return String(string).replace(replacement, '.').toLowerCase();\n};\n\nvar data = isForced.data = {};\nvar NATIVE = isForced.NATIVE = 'N';\nvar POLYFILL = isForced.POLYFILL = 'P';\n\nmodule.exports = isForced;\n", "var store = require('../internals/shared-store');\n\nvar functionToString = Function.toString;\n\n// this helper broken in `3.4.1-3.4.4`, so we can't use `shared` helper\nif (typeof store.inspectSource != 'function') {\n  store.inspectSource = function (it) {\n    return functionToString.call(it);\n  };\n}\n\nmodule.exports = store.inspectSource;\n", "var global = require('../internals/global');\nvar setGlobal = require('../internals/set-global');\n\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || setGlobal(SHARED, {});\n\nmodule.exports = store;\n", "'use strict';\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar has = require('../internals/has');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_PURE = require('../internals/is-pure');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar BUGGY_SAFARI_ITERATORS = false;\n\nvar returnThis = function () { return this; };\n\n// `%IteratorPrototype%` object\n// https://tc39.github.io/ecma262/#sec-%iteratorprototype%-object\nvar IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator;\n\nif ([].keys) {\n  arrayIterator = [].keys();\n  // Safari 8 has buggy iterators w/o `next`\n  if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS = true;\n  else {\n    PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator));\n    if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype;\n  }\n}\n\nif (IteratorPrototype == undefined) IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nif (!IS_PURE && !has(IteratorPrototype, ITERATOR)) {\n  createNonEnumerableProperty(IteratorPrototype, ITERATOR, returnThis);\n}\n\nmodule.exports = {\n  IteratorPrototype: IteratorPrototype,\n  BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS\n};\n", "var has = require('../internals/has');\nvar toObject = require('../internals/to-object');\nvar sharedKey = require('../internals/shared-key');\nvar CORRECT_PROTOTYPE_GETTER = require('../internals/correct-prototype-getter');\n\nvar IE_PROTO = sharedKey('IE_PROTO');\nvar ObjectPrototype = Object.prototype;\n\n// `Object.getPrototypeOf` method\n// https://tc39.github.io/ecma262/#sec-object.getprototypeof\nmodule.exports = CORRECT_PROTOTYPE_GETTER ? Object.getPrototypeOf : function (O) {\n  O = toObject(O);\n  if (has(O, IE_PROTO)) return O[IE_PROTO];\n  if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n    return O.constructor.prototype;\n  } return O instanceof Object ? ObjectPrototype : null;\n};\n", "var NATIVE_SYMBOL = require('../internals/native-symbol');\n\nmodule.exports = NATIVE_SYMBOL\n  // eslint-disable-next-line no-undef\n  && !Symbol.sham\n  // eslint-disable-next-line no-undef\n  && typeof Symbol.iterator == 'symbol';\n", "var has = require('../internals/has');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar indexOf = require('../internals/array-includes').indexOf;\nvar hiddenKeys = require('../internals/hidden-keys');\n\nmodule.exports = function (object, names) {\n  var O = toIndexedObject(object);\n  var i = 0;\n  var result = [];\n  var key;\n  for (key in O) !has(hiddenKeys, key) && has(O, key) && result.push(key);\n  // Don't enum bug & hidden keys\n  while (names.length > i) if (has(O, key = names[i++])) {\n    ~indexOf(result, key) || result.push(key);\n  }\n  return result;\n};\n", "var getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('document', 'documentElement');\n", "var global = require('../internals/global');\n\nmodule.exports = global.Promise;\n", "var redefine = require('../internals/redefine');\n\nmodule.exports = function (target, src, options) {\n  for (var key in src) {\n    if (options && options.unsafe && target[key]) target[key] = src[key];\n    else redefine(target, key, src[key], options);\n  } return target;\n};\n", "'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar definePropertyModule = require('../internals/object-define-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar DESCRIPTORS = require('../internals/descriptors');\n\nvar SPECIES = wellKnownSymbol('species');\n\nmodule.exports = function (CONSTRUCTOR_NAME) {\n  var Constructor = getBuiltIn(CONSTRUCTOR_NAME);\n  var defineProperty = definePropertyModule.f;\n\n  if (DESCRIPTORS && Constructor && !Constructor[SPECIES]) {\n    defineProperty(Constructor, SPECIES, {\n      configurable: true,\n      get: function () { return this; }\n    });\n  }\n};\n", "var wellKnownSymbol = require('../internals/well-known-symbol');\nvar Iterators = require('../internals/iterators');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar ArrayPrototype = Array.prototype;\n\n// check on default Array iterator\nmodule.exports = function (it) {\n  return it !== undefined && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it);\n};\n", "var classof = require('../internals/classof');\nvar Iterators = require('../internals/iterators');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\n\nmodule.exports = function (it) {\n  if (it != undefined) return it[ITERATOR]\n    || it['@@iterator']\n    || Iterators[classof(it)];\n};\n", "var anObject = require('../internals/an-object');\n\n// call something on iterator step with safe closing on error\nmodule.exports = function (iterator, fn, value, ENTRIES) {\n  try {\n    return ENTRIES ? fn(anObject(value)[0], value[1]) : fn(value);\n  // 7.4.6 IteratorClose(iterator, completion)\n  } catch (error) {\n    var returnMethod = iterator['return'];\n    if (returnMethod !== undefined) anObject(returnMethod.call(iterator));\n    throw error;\n  }\n};\n", "var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n  var called = 0;\n  var iteratorWithReturn = {\n    next: function () {\n      return { done: !!called++ };\n    },\n    'return': function () {\n      SAFE_CLOSING = true;\n    }\n  };\n  iteratorWithReturn[ITERATOR] = function () {\n    return this;\n  };\n  // eslint-disable-next-line no-throw-literal\n  Array.from(iteratorWithReturn, function () { throw 2; });\n} catch (error) { /* empty */ }\n\nmodule.exports = function (exec, SKIP_CLOSING) {\n  if (!SKIP_CLOSING && !SAFE_CLOSING) return false;\n  var ITERATION_SUPPORT = false;\n  try {\n    var object = {};\n    object[ITERATOR] = function () {\n      return {\n        next: function () {\n          return { done: ITERATION_SUPPORT = true };\n        }\n      };\n    };\n    exec(object);\n  } catch (error) { /* empty */ }\n  return ITERATION_SUPPORT;\n};\n", "var anObject = require('../internals/an-object');\nvar aFunction = require('../internals/a-function');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar SPECIES = wellKnownSymbol('species');\n\n// `SpeciesConstructor` abstract operation\n// https://tc39.github.io/ecma262/#sec-speciesconstructor\nmodule.exports = function (O, defaultConstructor) {\n  var C = anObject(O).constructor;\n  var S;\n  return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? defaultConstructor : aFunction(S);\n};\n", "var global = require('../internals/global');\nvar fails = require('../internals/fails');\nvar classof = require('../internals/classof-raw');\nvar bind = require('../internals/function-bind-context');\nvar html = require('../internals/html');\nvar createElement = require('../internals/document-create-element');\nvar IS_IOS = require('../internals/engine-is-ios');\n\nvar location = global.location;\nvar set = global.setImmediate;\nvar clear = global.clearImmediate;\nvar process = global.process;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\n\nvar run = function (id) {\n  // eslint-disable-next-line no-prototype-builtins\n  if (queue.hasOwnProperty(id)) {\n    var fn = queue[id];\n    delete queue[id];\n    fn();\n  }\n};\n\nvar runner = function (id) {\n  return function () {\n    run(id);\n  };\n};\n\nvar listener = function (event) {\n  run(event.data);\n};\n\nvar post = function (id) {\n  // old engines have not location.origin\n  global.postMessage(id + '', location.protocol + '//' + location.host);\n};\n\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!set || !clear) {\n  set = function setImmediate(fn) {\n    var args = [];\n    var i = 1;\n    while (arguments.length > i) args.push(arguments[i++]);\n    queue[++counter] = function () {\n      // eslint-disable-next-line no-new-func\n      (typeof fn == 'function' ? fn : Function(fn)).apply(undefined, args);\n    };\n    defer(counter);\n    return counter;\n  };\n  clear = function clearImmediate(id) {\n    delete queue[id];\n  };\n  // Node.js 0.8-\n  if (classof(process) == 'process') {\n    defer = function (id) {\n      process.nextTick(runner(id));\n    };\n  // Sphere (JS game engine) Dispatch API\n  } else if (Dispatch && Dispatch.now) {\n    defer = function (id) {\n      Dispatch.now(runner(id));\n    };\n  // Browsers with MessageChannel, includes WebWorkers\n  // except iOS - https://github.com/zloirock/core-js/issues/624\n  } else if (MessageChannel && !IS_IOS) {\n    channel = new MessageChannel();\n    port = channel.port2;\n    channel.port1.onmessage = listener;\n    defer = bind(port.postMessage, port, 1);\n  // Browsers with postMessage, skip WebWorkers\n  // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n  } else if (\n    global.addEventListener &&\n    typeof postMessage == 'function' &&\n    !global.importScripts &&\n    !fails(post) &&\n    location.protocol !== 'file:'\n  ) {\n    defer = post;\n    global.addEventListener('message', listener, false);\n  // IE8-\n  } else if (ONREADYSTATECHANGE in createElement('script')) {\n    defer = function (id) {\n      html.appendChild(createElement('script'))[ONREADYSTATECHANGE] = function () {\n        html.removeChild(this);\n        run(id);\n      };\n    };\n  // Rest old browsers\n  } else {\n    defer = function (id) {\n      setTimeout(runner(id), 0);\n    };\n  }\n}\n\nmodule.exports = {\n  set: set,\n  clear: clear\n};\n", "var userAgent = require('../internals/engine-user-agent');\n\nmodule.exports = /(iphone|ipod|ipad).*applewebkit/i.test(userAgent);\n", "var anObject = require('../internals/an-object');\nvar isObject = require('../internals/is-object');\nvar newPromiseCapability = require('../internals/new-promise-capability');\n\nmodule.exports = function (C, x) {\n  anObject(C);\n  if (isObject(x) && x.constructor === C) return x;\n  var promiseCapability = newPromiseCapability.f(C);\n  var resolve = promiseCapability.resolve;\n  resolve(x);\n  return promiseCapability.promise;\n};\n", "module.exports = function (exec) {\n  try {\n    return { error: false, value: exec() };\n  } catch (error) {\n    return { error: true, value: error };\n  }\n};\n", "module.exports = require(\"core-js-pure/stable/map\");", "'use strict';\nvar $ = require('./export');\nvar global = require('../internals/global');\nvar InternalMetadataModule = require('../internals/internal-metadata');\nvar fails = require('../internals/fails');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar iterate = require('../internals/iterate');\nvar anInstance = require('../internals/an-instance');\nvar isObject = require('../internals/is-object');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar defineProperty = require('../internals/object-define-property').f;\nvar forEach = require('../internals/array-iteration').forEach;\nvar DESCRIPTORS = require('../internals/descriptors');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar setInternalState = InternalStateModule.set;\nvar internalStateGetterFor = InternalStateModule.getterFor;\n\nmodule.exports = function (CONSTRUCTOR_NAME, wrapper, common) {\n  var IS_MAP = CONSTRUCTOR_NAME.indexOf('Map') !== -1;\n  var IS_WEAK = CONSTRUCTOR_NAME.indexOf('Weak') !== -1;\n  var ADDER = IS_MAP ? 'set' : 'add';\n  var NativeConstructor = global[CONSTRUCTOR_NAME];\n  var NativePrototype = NativeConstructor && NativeConstructor.prototype;\n  var exported = {};\n  var Constructor;\n\n  if (!DESCRIPTORS || typeof NativeConstructor != 'function'\n    || !(IS_WEAK || NativePrototype.forEach && !fails(function () { new NativeConstructor().entries().next(); }))\n  ) {\n    // create collection constructor\n    Constructor = common.getConstructor(wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER);\n    InternalMetadataModule.REQUIRED = true;\n  } else {\n    Constructor = wrapper(function (target, iterable) {\n      setInternalState(anInstance(target, Constructor, CONSTRUCTOR_NAME), {\n        type: CONSTRUCTOR_NAME,\n        collection: new NativeConstructor()\n      });\n      if (iterable != undefined) iterate(iterable, target[ADDER], target, IS_MAP);\n    });\n\n    var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME);\n\n    forEach(['add', 'clear', 'delete', 'forEach', 'get', 'has', 'set', 'keys', 'values', 'entries'], function (KEY) {\n      var IS_ADDER = KEY == 'add' || KEY == 'set';\n      if (KEY in NativePrototype && !(IS_WEAK && KEY == 'clear')) {\n        createNonEnumerableProperty(Constructor.prototype, KEY, function (a, b) {\n          var collection = getInternalState(this).collection;\n          if (!IS_ADDER && IS_WEAK && !isObject(a)) return KEY == 'get' ? undefined : false;\n          var result = collection[KEY](a === 0 ? 0 : a, b);\n          return IS_ADDER ? this : result;\n        });\n      }\n    });\n\n    IS_WEAK || defineProperty(Constructor.prototype, 'size', {\n      configurable: true,\n      get: function () {\n        return getInternalState(this).collection.size;\n      }\n    });\n  }\n\n  setToStringTag(Constructor, CONSTRUCTOR_NAME, false, true);\n\n  exported[CONSTRUCTOR_NAME] = Constructor;\n  $({ global: true, forced: true }, exported);\n\n  if (!IS_WEAK) common.setStrong(Constructor, CONSTRUCTOR_NAME, IS_MAP);\n\n  return Constructor;\n};\n", "var hiddenKeys = require('../internals/hidden-keys');\nvar isObject = require('../internals/is-object');\nvar has = require('../internals/has');\nvar defineProperty = require('../internals/object-define-property').f;\nvar uid = require('../internals/uid');\nvar FREEZING = require('../internals/freezing');\n\nvar METADATA = uid('meta');\nvar id = 0;\n\nvar isExtensible = Object.isExtensible || function () {\n  return true;\n};\n\nvar setMetadata = function (it) {\n  defineProperty(it, METADATA, { value: {\n    objectID: 'O' + ++id, // object ID\n    weakData: {}          // weak collections IDs\n  } });\n};\n\nvar fastKey = function (it, create) {\n  // return a primitive with prefix\n  if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n  if (!has(it, METADATA)) {\n    // can't set metadata to uncaught frozen object\n    if (!isExtensible(it)) return 'F';\n    // not necessary to add metadata\n    if (!create) return 'E';\n    // add missing metadata\n    setMetadata(it);\n  // return object ID\n  } return it[METADATA].objectID;\n};\n\nvar getWeakData = function (it, create) {\n  if (!has(it, METADATA)) {\n    // can't set metadata to uncaught frozen object\n    if (!isExtensible(it)) return true;\n    // not necessary to add metadata\n    if (!create) return false;\n    // add missing metadata\n    setMetadata(it);\n  // return the store of weak collections IDs\n  } return it[METADATA].weakData;\n};\n\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n  if (FREEZING && meta.REQUIRED && isExtensible(it) && !has(it, METADATA)) setMetadata(it);\n  return it;\n};\n\nvar meta = module.exports = {\n  REQUIRED: false,\n  fastKey: fastKey,\n  getWeakData: getWeakData,\n  onFreeze: onFreeze\n};\n\nhiddenKeys[METADATA] = true;\n", "'use strict';\nvar defineProperty = require('../internals/object-define-property').f;\nvar create = require('../internals/object-create');\nvar redefineAll = require('../internals/redefine-all');\nvar bind = require('../internals/function-bind-context');\nvar anInstance = require('../internals/an-instance');\nvar iterate = require('../internals/iterate');\nvar defineIterator = require('../internals/define-iterator');\nvar setSpecies = require('../internals/set-species');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fastKey = require('../internals/internal-metadata').fastKey;\nvar InternalStateModule = require('../internals/internal-state');\n\nvar setInternalState = InternalStateModule.set;\nvar internalStateGetterFor = InternalStateModule.getterFor;\n\nmodule.exports = {\n  getConstructor: function (wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER) {\n    var C = wrapper(function (that, iterable) {\n      anInstance(that, C, CONSTRUCTOR_NAME);\n      setInternalState(that, {\n        type: CONSTRUCTOR_NAME,\n        index: create(null),\n        first: undefined,\n        last: undefined,\n        size: 0\n      });\n      if (!DESCRIPTORS) that.size = 0;\n      if (iterable != undefined) iterate(iterable, that[ADDER], that, IS_MAP);\n    });\n\n    var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME);\n\n    var define = function (that, key, value) {\n      var state = getInternalState(that);\n      var entry = getEntry(that, key);\n      var previous, index;\n      // change existing entry\n      if (entry) {\n        entry.value = value;\n      // create new entry\n      } else {\n        state.last = entry = {\n          index: index = fastKey(key, true),\n          key: key,\n          value: value,\n          previous: previous = state.last,\n          next: undefined,\n          removed: false\n        };\n        if (!state.first) state.first = entry;\n        if (previous) previous.next = entry;\n        if (DESCRIPTORS) state.size++;\n        else that.size++;\n        // add to index\n        if (index !== 'F') state.index[index] = entry;\n      } return that;\n    };\n\n    var getEntry = function (that, key) {\n      var state = getInternalState(that);\n      // fast case\n      var index = fastKey(key);\n      var entry;\n      if (index !== 'F') return state.index[index];\n      // frozen object case\n      for (entry = state.first; entry; entry = entry.next) {\n        if (entry.key == key) return entry;\n      }\n    };\n\n    redefineAll(C.prototype, {\n      // 23.1.3.1 Map.prototype.clear()\n      // 23.2.3.2 Set.prototype.clear()\n      clear: function clear() {\n        var that = this;\n        var state = getInternalState(that);\n        var data = state.index;\n        var entry = state.first;\n        while (entry) {\n          entry.removed = true;\n          if (entry.previous) entry.previous = entry.previous.next = undefined;\n          delete data[entry.index];\n          entry = entry.next;\n        }\n        state.first = state.last = undefined;\n        if (DESCRIPTORS) state.size = 0;\n        else that.size = 0;\n      },\n      // 23.1.3.3 Map.prototype.delete(key)\n      // 23.2.3.4 Set.prototype.delete(value)\n      'delete': function (key) {\n        var that = this;\n        var state = getInternalState(that);\n        var entry = getEntry(that, key);\n        if (entry) {\n          var next = entry.next;\n          var prev = entry.previous;\n          delete state.index[entry.index];\n          entry.removed = true;\n          if (prev) prev.next = next;\n          if (next) next.previous = prev;\n          if (state.first == entry) state.first = next;\n          if (state.last == entry) state.last = prev;\n          if (DESCRIPTORS) state.size--;\n          else that.size--;\n        } return !!entry;\n      },\n      // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n      // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n      forEach: function forEach(callbackfn /* , that = undefined */) {\n        var state = getInternalState(this);\n        var boundFunction = bind(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n        var entry;\n        while (entry = entry ? entry.next : state.first) {\n          boundFunction(entry.value, entry.key, this);\n          // revert to the last existing entry\n          while (entry && entry.removed) entry = entry.previous;\n        }\n      },\n      // 23.1.3.7 Map.prototype.has(key)\n      // 23.2.3.7 Set.prototype.has(value)\n      has: function has(key) {\n        return !!getEntry(this, key);\n      }\n    });\n\n    redefineAll(C.prototype, IS_MAP ? {\n      // 23.1.3.6 Map.prototype.get(key)\n      get: function get(key) {\n        var entry = getEntry(this, key);\n        return entry && entry.value;\n      },\n      // 23.1.3.9 Map.prototype.set(key, value)\n      set: function set(key, value) {\n        return define(this, key === 0 ? 0 : key, value);\n      }\n    } : {\n      // 23.2.3.1 Set.prototype.add(value)\n      add: function add(value) {\n        return define(this, value = value === 0 ? 0 : value, value);\n      }\n    });\n    if (DESCRIPTORS) defineProperty(C.prototype, 'size', {\n      get: function () {\n        return getInternalState(this).size;\n      }\n    });\n    return C;\n  },\n  setStrong: function (C, CONSTRUCTOR_NAME, IS_MAP) {\n    var ITERATOR_NAME = CONSTRUCTOR_NAME + ' Iterator';\n    var getInternalCollectionState = internalStateGetterFor(CONSTRUCTOR_NAME);\n    var getInternalIteratorState = internalStateGetterFor(ITERATOR_NAME);\n    // add .keys, .values, .entries, [@@iterator]\n    // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n    defineIterator(C, CONSTRUCTOR_NAME, function (iterated, kind) {\n      setInternalState(this, {\n        type: ITERATOR_NAME,\n        target: iterated,\n        state: getInternalCollectionState(iterated),\n        kind: kind,\n        last: undefined\n      });\n    }, function () {\n      var state = getInternalIteratorState(this);\n      var kind = state.kind;\n      var entry = state.last;\n      // revert to the last existing entry\n      while (entry && entry.removed) entry = entry.previous;\n      // get next entry\n      if (!state.target || !(state.last = entry = entry ? entry.next : state.state.first)) {\n        // or finish the iteration\n        state.target = undefined;\n        return { value: undefined, done: true };\n      }\n      // return step by kind\n      if (kind == 'keys') return { value: entry.key, done: false };\n      if (kind == 'values') return { value: entry.value, done: false };\n      return { value: [entry.key, entry.value], done: false };\n    }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n    // add [@@species], 23.1.2.2, 23.2.2.2\n    setSpecies(CONSTRUCTOR_NAME);\n  }\n};\n", "var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.iterator` well-known symbol\n// https://tc39.github.io/ecma262/#sec-symbol.iterator\ndefineWellKnownSymbol('iterator');\n", "var internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\nvar hiddenKeys = enumBugKeys.concat('length', 'prototype');\n\n// `Object.getOwnPropertyNames` method\n// https://tc39.github.io/ecma262/#sec-object.getownpropertynames\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n  return internalObjectKeys(O, hiddenKeys);\n};\n", "exports.f = Object.getOwnPropertySymbols;\n", "module.exports = require(\"core-js-pure/stable/object/assign\");", "/**\n * @description 样式配置\n * @author wangfupeng\n */\n\nexport default {\n    zIndex: 10000,\n}\n", "/**\n * @description 默认常量配置\n * @author xiaokyo\n */\n\nexport default {\n    focus: true,\n    height: 300,\n    placeholder: '请输入正文',\n    zIndexFullScreen: 10002,\n    showFullScreen: true,\n}\n", "/**\n * @description 处理粘贴逻辑\n * @author wangfupeng\n */\n\nimport { replaceHtmlSymbol, forEach } from '../../utils/util'\nimport parseHtml from './parse-html'\n\n/**\n * 获取粘贴的纯文本\n * @param e Event 参数\n */\nexport function getPasteText(e: ClipboardEvent): string {\n    // const clipboardData = e.clipboardData || (e.originalEvent && e.originalEvent.clipboardData)\n    const clipboardData = e.clipboardData // 暂不考虑 originalEvent 的情况\n    let pasteText = ''\n    if (clipboardData == null) {\n        pasteText = (window as any).clipboardData && (window as any).clipboardData.getData('text')\n    } else {\n        pasteText = clipboardData.getData('text/plain')\n    }\n    return replaceHtmlSymbol(pasteText)\n}\n\n/**\n * 获取粘贴的 html 字符串\n * @param e Event 参数\n * @param filterStyle 是否过滤 style 样式\n * @param ignoreImg 是否忽略 img 标签\n */\nexport function getPasteHtml(\n    e: ClipboardEvent,\n    filterStyle: boolean = true,\n    ignoreImg: boolean = false\n): string {\n    const clipboardData = e.clipboardData // 暂不考虑 originalEvent 的情况\n    let pasteHtml = ''\n    if (clipboardData) {\n        pasteHtml = clipboardData.getData('text/html')\n    }\n\n    // 无法通过 'text/html' 格式获取 html，则尝试获取 text\n    if (!pasteHtml) {\n        const text = getPasteText(e)\n        if (!text) {\n            return '' // 没有找到任何文字，则返回\n        }\n        pasteHtml = `<p>${text}</p>`\n    }\n\n    // 转译<1，后面跟数字的转译成 &lt;1\n    pasteHtml = pasteHtml.replace(/<(\\d)/gm, (_, num) => '&lt;' + num)\n\n    // pdf复制只会有一个meta标签，parseHtml中的过滤meta标签会导致后面内容丢失\n    pasteHtml = pasteHtml.replace(/<(\\/?meta.*?)>/gim, '')\n\n    // 剔除多余的标签、属性\n    pasteHtml = parseHtml(pasteHtml, filterStyle, ignoreImg)\n\n    return pasteHtml\n}\n\n/**\n * 获取粘贴的图片文件\n * @param e Event 参数\n */\nexport function getPasteImgs(e: ClipboardEvent): File[] {\n    const result: File[] = []\n    const txt = getPasteText(e)\n    if (txt) {\n        // 有文字，就忽略图片\n        return result\n    }\n\n    const items = e.clipboardData?.items\n\n    if (!items) return result\n\n    forEach(items, (key, value) => {\n        const type = value.type\n        if (/image/i.test(type)) {\n            result.push(value.getAsFile() as File)\n        }\n    })\n\n    return result\n}\n", "module.exports = require(\"core-js-pure/stable/set\");", "module.exports = require(\"core-js-pure/stable/instance/some\");", "/**\n * @description 下拉列表 class\n */\n\nimport $, { DomElement } from '../../utils/dom-core'\nimport DropListMenu from './DropListMenu'\nimport { EMPTY_FN } from '../../utils/const'\n\nexport type DropListItem = {\n    $elem: DomElement\n    value: string\n}\n\n// droplist 的配置数据\nexport type DropListConf = {\n    title: string\n    list: DropListItem[]\n    type: string // 'list' 列表形式（如“标题”菜单）； 'inline-block' 块状形式（如“颜色”菜单）\n    clickHandler: (value: DropListItem['value']) => void\n    width: number | 100\n}\n\nclass DropList {\n    private menu: DropListMenu\n    private conf: DropListConf\n    private $container: DomElement\n    private rendered: boolean\n    private _show: boolean\n\n    public hideTimeoutId: number\n\n    constructor(menu: DropListMenu, conf: DropListConf) {\n        this.hideTimeoutId = 0\n        this.menu = menu\n        this.conf = conf\n\n        // 容器\n        const $container = $('<div class=\"w-e-droplist\"></div>')\n\n        // 标题\n        const $title = $(`<p>${conf.title}</p>`)\n        $title.addClass('w-e-dp-title')\n        $container.append($title)\n\n        // 列表和类型\n        const list = conf.list || []\n        const type = conf.type || 'list'\n        // item 的点击事件\n        const clickHandler = conf.clickHandler || EMPTY_FN\n\n        // 加入 DOM 并绑定事件\n        const $list = $('<ul class=\"' + (type === 'list' ? 'w-e-list' : 'w-e-block') + '\"></ul>')\n        list.forEach(item => {\n            const $elem = item.$elem\n\n            const value = item.value\n            const $li = $('<li class=\"w-e-item\"></li>')\n            if ($elem) {\n                $li.append($elem)\n                $list.append($li)\n                $li.on('click', (e: Event) => {\n                    clickHandler(value)\n\n                    // 阻止冒泡\n                    e.stopPropagation()\n\n                    // item 点击之后，隐藏 list\n                    this.hideTimeoutId = window.setTimeout(() => {\n                        this.hide()\n                    })\n                })\n            }\n        })\n        $container.append($list)\n\n        // 绑定隐藏事件\n        $container.on('mouseleave', () => {\n            this.hideTimeoutId = window.setTimeout(() => {\n                this.hide()\n            })\n        })\n\n        // 记录属性\n        this.$container = $container\n        this.rendered = false\n        this._show = false\n    }\n\n    /**\n     * 显示 DropList\n     */\n    public show() {\n        if (this.hideTimeoutId) {\n            // 清除之前的定时隐藏\n            clearTimeout(this.hideTimeoutId)\n        }\n\n        const menu = this.menu\n        const $menuELem = menu.$elem\n        const $container = this.$container\n        if (this._show) {\n            return\n        }\n        if (this.rendered) {\n            // 显示\n            $container.show()\n        } else {\n            // 加入 DOM 之前先定位位置\n            const menuHeight = $menuELem.getBoundingClientRect().height || 0\n            const width = this.conf.width || 100 // 默认为 100\n            $container.css('margin-top', menuHeight + 'px').css('width', width + 'px')\n\n            // 加入到 DOM\n            $menuELem.append($container)\n            this.rendered = true\n        }\n\n        // 修改属性\n        this._show = true\n    }\n\n    /**\n     * 隐藏 DropList\n     */\n    public hide() {\n        const $container = this.$container\n        if (!this._show) {\n            return\n        }\n        // 隐藏并需改属性\n        $container.hide()\n        this._show = false\n    }\n\n    public get isShow() {\n        return this._show\n    }\n}\n\nexport default DropList\n", "/**\n * @description 上传的核心方法\n * @author wangfupeng\n */\n\nimport { forEach } from '../../utils/util'\nimport { DicType } from '../../config/index'\n\ntype PostOptionType<T> = {\n    timeout?: number\n    formData?: FormData\n    headers?: DicType\n    withCredentials?: boolean\n    onTimeout?: (xhr: XMLHttpRequest) => void\n    onProgress?: (percent: number, event: ProgressEvent) => void\n    beforeSend?: (xhr: XMLHttpRequest) => { prevent: boolean; msg: string } | void\n    onError?: (xhr: XMLHttpRequest) => void\n    onFail?: (xhr: XMLHttpRequest, msg: string) => void\n    onSuccess: (xhr: XMLHttpRequest, result: T) => void\n}\n\n/**\n * 发送 post 请求（用于文件上传）\n * @param url url\n * @param option 配置项\n */\nfunction post<T extends Object>(url: string, option: PostOptionType<T>): XMLHttpRequest | string {\n    const xhr = new XMLHttpRequest()\n    xhr.open('POST', url)\n\n    // 超时，默认 10s\n    xhr.timeout = option.timeout || 10 * 1000\n    xhr.ontimeout = () => {\n        console.error('wangEditor - 请求超时')\n        option.onTimeout && option.onTimeout(xhr)\n    }\n\n    // 进度\n    if (xhr.upload) {\n        xhr.upload.onprogress = (e: ProgressEvent) => {\n            const percent = e.loaded / e.total\n            option.onProgress && option.onProgress(percent, e)\n        }\n    }\n\n    // 自定义 header\n    if (option.headers) {\n        forEach(option.headers, (key: string, val: string) => {\n            xhr.setRequestHeader(key, val)\n        })\n    }\n\n    // 跨域传 cookie\n    xhr.withCredentials = !!option.withCredentials\n\n    // 上传之前的钩子函数，在 xhr.send() 之前执行\n    if (option.beforeSend) {\n        const beforeResult = option.beforeSend(xhr)\n        if (beforeResult && typeof beforeResult === 'object') {\n            if (beforeResult.prevent) {\n                // 如果返回的结果是 {prevent: true, msg: 'xxxx'} 则表示用户放弃上传\n                return beforeResult.msg\n            }\n        }\n    }\n\n    // 服务端返回之后\n    xhr.onreadystatechange = () => {\n        if (xhr.readyState !== 4) return\n        const status = xhr.status\n        if (status < 200) return // 请求发送过程中，尚未返回\n        if (status >= 300 && status < 400) return // 重定向\n        if (status >= 400) {\n            // 40x 50x 报错\n            console.error('wangEditor - XHR 报错，状态码 ' + status)\n            if (option.onError) option.onError(xhr) // 有，则执行 onError 函数即可\n            return\n        }\n\n        // status = 200 ，得到结果\n        const resultStr = xhr.responseText\n        let result: T\n        if (typeof resultStr !== 'object') {\n            try {\n                result = JSON.parse(resultStr)\n            } catch (ex) {\n                console.error('wangEditor - 返回结果不是 JSON 格式', resultStr)\n                if (option.onFail) option.onFail(xhr, resultStr)\n                return\n            }\n        } else {\n            result = resultStr\n        }\n        option.onSuccess(xhr, result)\n    }\n\n    // 发送请求\n    xhr.send(option.formData || null)\n\n    return xhr\n}\n\nexport default post\n", "/**\n * @description 上传进度条\n * @author wangfupeng\n */\n\nimport $, { DomElement } from '../../utils/dom-core'\nimport Editor from '../../editor/index'\n\nclass Progress {\n    private editor: Editor\n    private $bar: DomElement\n    private $textContainer: DomElement\n    private isShow: boolean\n    private time: number\n    private timeoutId: number\n\n    constructor(editor: Editor) {\n        this.editor = editor\n        this.$textContainer = editor.$textContainerElem\n        this.$bar = $('<div class=\"w-e-progress\"></div>')\n\n        this.isShow = false\n        this.time = 0\n        this.timeoutId = 0\n    }\n\n    /**\n     * 显示进度条\n     * @param progress 进度百分比\n     */\n    public show(progress: number): void {\n        // 不要重新显示\n        if (this.isShow) {\n            return\n        }\n        this.isShow = true\n\n        // 渲染 $bar\n        const $bar = this.$bar\n        const $textContainer = this.$textContainer\n        $textContainer.append($bar)\n\n        // 改变进度条（防抖，100ms 渲染一次）\n        if (Date.now() - this.time > 100) {\n            if (progress <= 1) {\n                $bar.css('width', progress * 100 + '%')\n                this.time = Date.now()\n            }\n        }\n\n        // 500ms 之后隐藏\n        let timeoutId = this.timeoutId\n        if (timeoutId) {\n            clearTimeout(timeoutId)\n        }\n        this.timeoutId = window.setTimeout(() => {\n            this.hide()\n        }, 500)\n    }\n\n    /**\n     * 隐藏\n     */\n    private hide() {\n        const $bar = this.$bar\n        $bar.remove()\n\n        this.isShow = false\n        this.time = 0\n        this.timeoutId = 0\n    }\n}\n\nexport default Progress\n", "/**\n * @description 无序列表/有序列表\n * @author tonghan\n */\n\nimport $, { DomElement } from '../../utils/dom-core'\nimport Editor from '../../editor/index'\nimport DropListMenu from '../menu-constructors/DropListMenu'\nimport { MenuActive } from '../menu-constructors/Menu'\n\nimport { updateRange } from './utils'\n\nimport { HandlerListOptions } from './ListHandle/ListHandle'\nimport ListHandleCommand, { createListHandle, ClassType } from './ListHandle'\n\n/**\n * 列表的种类\n */\nexport enum ListType {\n    OrderedList = 'OL',\n    UnorderedList = 'UL',\n}\n\n// 序列类型\ntype ListTypeValue = ListType\n\nclass List extends DropListMenu implements MenuActive {\n    constructor(editor: Editor) {\n        const $elem = $(\n            `<div class=\"w-e-menu\" data-title=\"序列\">\n                <i class=\"w-e-icon-list2\"></i>\n            </div>`\n        )\n\n        const dropListConf = {\n            width: 130,\n            title: '序列',\n            type: 'list',\n            list: [\n                {\n                    $elem: $(`\n                        <p>\n                            <i class=\"w-e-icon-list2 w-e-drop-list-item\"></i>\n                            ${editor.i18next.t('menus.dropListMenu.list.无序列表')}\n                        <p>`),\n                    value: ListType.UnorderedList,\n                },\n\n                {\n                    $elem: $(\n                        `<p>\n                            <i class=\"w-e-icon-list-numbered w-e-drop-list-item\"></i>\n                            ${editor.i18next.t('menus.dropListMenu.list.有序列表')}\n                        <p>`\n                    ),\n                    value: ListType.OrderedList,\n                },\n            ],\n            clickHandler: (value: string) => {\n                // 注意 this 是指向当前的 List 对象\n                this.command(value as ListTypeValue)\n            },\n        }\n\n        super($elem, editor, dropListConf)\n    }\n\n    public command(type: ListTypeValue): void {\n        const editor = this.editor\n        const $selectionElem = editor.selection.getSelectionContainerElem()\n\n        // 选区范围的 DOM 元素不存在，不执行命令\n        if ($selectionElem === undefined) return\n\n        // 获取选区范围内的顶级 DOM 元素\n        this.handleSelectionRangeNodes(type)\n\n        // 是否激活\n        this.tryChangeActive()\n    }\n\n    public validator($startElem: DomElement, $endElem: DomElement, $textElem: DomElement): boolean {\n        if (\n            !$startElem.length ||\n            !$endElem.length ||\n            $textElem.equal($startElem) ||\n            $textElem.equal($endElem)\n        ) {\n            return false\n        }\n\n        return true\n    }\n\n    private handleSelectionRangeNodes(listType: ListTypeValue): void {\n        const editor = this.editor\n        const selection = editor.selection\n\n        // 获取 序列标签\n        const listTarget = listType.toLowerCase()\n\n        // 获取相对应的 元属节点\n        let $selectionElem = selection.getSelectionContainerElem() as DomElement\n        const $startElem = (selection.getSelectionStartElem() as DomElement).getNodeTop(editor)\n        const $endElem = (selection.getSelectionEndElem() as DomElement).getNodeTop(editor)\n\n        // 验证是否执行 处理逻辑\n        if (!this.validator($startElem, $endElem, editor.$textElem)) {\n            return\n        }\n\n        // 获取选区\n        const _range = selection.getRange()\n        const _collapsed = _range?.collapsed\n\n        // 防止光标的时候判断异常\n        if (!editor.$textElem.equal($selectionElem)) {\n            $selectionElem = $selectionElem.getNodeTop(editor)\n        }\n\n        const options: HandlerListOptions = {\n            editor,\n            listType,\n            listTarget,\n            $selectionElem,\n            $startElem,\n            $endElem,\n        }\n\n        let classType: ClassType\n\n        // =====================================\n        // 当 selectionElem 属于序列元素的时候\n        // 代表着当前选区一定是在一个序列元素内的\n        // =====================================\n        if (this.isOrderElem($selectionElem as DomElement)) {\n            classType = ClassType.Wrap\n        }\n\n        // =====================================\n        // 当 startElem 和 endElem 属于序列元素的时候\n        // 代表着当前选区一定是在再两个序列的中间(包括两个序列)\n        // =====================================\n        else if (\n            this.isOrderElem($startElem as DomElement) &&\n            this.isOrderElem($endElem as DomElement)\n        ) {\n            classType = ClassType.Join\n        }\n\n        // =====================================\n        // 选区开始元素为 序列 的时候\n        // =====================================\n        else if (this.isOrderElem($startElem as DomElement)) {\n            classType = ClassType.StartJoin\n        }\n\n        // =====================================\n        // 选区结束元素为 序列 的时候\n        // =====================================\n        else if (this.isOrderElem($endElem as DomElement)) {\n            classType = ClassType.EndJoin\n        }\n\n        // =====================================\n        // 当选区不是序列内且开头和结尾不是序列的时候\n        // 直接获取所有顶级段落然后过滤\n        // 代表着 设置序列 的操作\n        // =====================================\n        else {\n            classType = ClassType.Other\n        }\n\n        const listHandleCmd = new ListHandleCommand(\n            createListHandle(classType, options, _range as Range)\n        )\n\n        // 更新选区\n        updateRange(editor, listHandleCmd.getSelectionRangeElem(), !!_collapsed)\n    }\n\n    /**\n     * 是否是序列元素节点 UL and OL\n     * @param $node\n     */\n    private isOrderElem($node: DomElement) {\n        const nodeName = $node.getNodeName()\n        if (nodeName === ListType.OrderedList || nodeName === ListType.UnorderedList) {\n            return true\n        }\n        return false\n    }\n\n    public tryChangeActive(): void {}\n}\n\nexport default List\n", "module.exports = require(\"core-js-pure/stable/array/from\");", "/**\n * @description 检查选区是否在代码中，即菜单是否应该 active\n * @author lkw\n */\n\nimport Editor from '../../editor/index'\n\nfunction isActive(editor: Editor): boolean {\n    const $selectionELem = editor.selection.getSelectionContainerElem()\n    if (!$selectionELem?.length) {\n        return false\n    }\n    if (\n        $selectionELem.getNodeName() == 'CODE' ||\n        $selectionELem.getNodeName() == 'PRE' ||\n        $selectionELem.parent().getNodeName() == 'CODE' ||\n        $selectionELem.parent().getNodeName() == 'PRE' ||\n        /hljs/.test($selectionELem.parent().attr('class'))\n    ) {\n        return true\n    } else {\n        return false\n    }\n}\n\nexport default isActive\n", "import $, { DomElement } from '../../utils/dom-core'\nexport class todo {\n    private template: string\n    private checked: boolean\n    private $todo: DomElement\n    private $child: DomElement\n    constructor($orginElem?: DomElement) {\n        this.template = `<ul class=\"w-e-todo\"><li><span contenteditable=\"false\"><input type=\"checkbox\"></span></li></ul>`\n        this.checked = false\n        this.$todo = $(this.template)\n        this.$child = $orginElem?.childNodes()?.clone(true) as DomElement\n    }\n\n    public init() {\n        const $child = this.$child\n        const $inputContainer = this.getInputContainer()\n\n        if ($child) {\n            $child.insertAfter($inputContainer)\n        }\n    }\n\n    public getInput(): DomElement {\n        const $todo = this.$todo\n        const $input = $todo.find('input')\n        return $input\n    }\n\n    public getInputContainer(): DomElement {\n        const $inputContainer = this.getInput().parent()\n        return $inputContainer\n    }\n\n    public getTodo(): DomElement {\n        return this.$todo\n    }\n}\n\nfunction createTodo($orginElem?: DomElement): todo {\n    const t = new todo($orginElem)\n    t.init()\n    return t\n}\n\nexport default createTodo\n", "/**\n * @description 入口文件\n * @author wangfupeng\n */\n\nimport './assets/style/common.less'\nimport './assets/style/icon.less'\nimport './assets/style/menus.less'\nimport './assets/style/text.less'\nimport './assets/style/panel.less'\nimport './assets/style/droplist.less'\n\nimport './utils/polyfill'\nimport Editor from './editor/index'\n\nexport * from './menus/menu-constructors/index'\n\n// 检验是否浏览器环境\ntry {\n    document\n} catch (ex) {\n    throw new Error('请在浏览器环境下运行')\n}\n\nexport default Editor\n", "var parent = require('../../es/object/define-property');\n\nmodule.exports = parent;\n", "require('../../modules/es.object.define-property');\nvar path = require('../../internals/path');\n\nvar Object = path.Object;\n\nvar defineProperty = module.exports = function defineProperty(it, key, desc) {\n  return Object.defineProperty(it, key, desc);\n};\n\nif (Object.defineProperty.sham) defineProperty.sham = true;\n", "var $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar objectDefinePropertyModile = require('../internals/object-define-property');\n\n// `Object.defineProperty` method\n// https://tc39.github.io/ecma262/#sec-object.defineproperty\n$({ target: 'Object', stat: true, forced: !DESCRIPTORS, sham: !DESCRIPTORS }, {\n  defineProperty: objectDefinePropertyModile.f\n});\n", "var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n", "var api = require(\"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\");\n            var content = require(\"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/postcss-loader/src/index.js!../../../node_modules/less-loader/dist/cjs.js!./common.less\");\n\n            content = content.__esModule ? content.default : content;\n\n            if (typeof content === 'string') {\n              content = [[module.id, content, '']];\n            }\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nmodule.exports = content.locals || {};", "// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".w-e-toolbar,\\n.w-e-text-container,\\n.w-e-menu-panel {\\n  padding: 0;\\n  margin: 0;\\n  box-sizing: border-box;\\n  background-color: #fff;\\n  /*表情菜单样式*/\\n  /*分割线样式*/\\n}\\n.w-e-toolbar h1,\\n.w-e-text-container h1,\\n.w-e-menu-panel h1 {\\n  font-size: 32px !important;\\n}\\n.w-e-toolbar h2,\\n.w-e-text-container h2,\\n.w-e-menu-panel h2 {\\n  font-size: 24px !important;\\n}\\n.w-e-toolbar h3,\\n.w-e-text-container h3,\\n.w-e-menu-panel h3 {\\n  font-size: 18.72px !important;\\n}\\n.w-e-toolbar h4,\\n.w-e-text-container h4,\\n.w-e-menu-panel h4 {\\n  font-size: 16px !important;\\n}\\n.w-e-toolbar h5,\\n.w-e-text-container h5,\\n.w-e-menu-panel h5 {\\n  font-size: 13.28px !important;\\n}\\n.w-e-toolbar p,\\n.w-e-text-container p,\\n.w-e-menu-panel p {\\n  font-size: 16px !important;\\n}\\n.w-e-toolbar .eleImg,\\n.w-e-text-container .eleImg,\\n.w-e-menu-panel .eleImg {\\n  cursor: pointer;\\n  display: inline-block;\\n  font-size: 18px;\\n  padding: 0 3px;\\n}\\n.w-e-toolbar *,\\n.w-e-text-container *,\\n.w-e-menu-panel * {\\n  padding: 0;\\n  margin: 0;\\n  box-sizing: border-box;\\n}\\n.w-e-toolbar hr,\\n.w-e-text-container hr,\\n.w-e-menu-panel hr {\\n  cursor: pointer;\\n  display: block;\\n  height: 0px;\\n  border: 0;\\n  border-top: 3px solid #ccc;\\n  margin: 20px 0;\\n}\\n.w-e-clear-fix:after {\\n  content: \\\"\\\";\\n  display: table;\\n  clear: both;\\n}\\n.w-e-drop-list-item {\\n  position: relative;\\n  top: 1px;\\n  padding-right: 7px;\\n  color: #333 !important;\\n}\\n.w-e-drop-list-tl {\\n  padding-left: 10px;\\n  text-align: left;\\n}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n", "var api = require(\"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\");\n            var content = require(\"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/postcss-loader/src/index.js!../../../node_modules/less-loader/dist/cjs.js!./icon.less\");\n\n            content = content.__esModule ? content.default : content;\n\n            if (typeof content === 'string') {\n              content = [[module.id, content, '']];\n            }\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nmodule.exports = content.locals || {};", "// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/api.js\");\nvar ___CSS_LOADER_GET_URL_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/getUrl.js\");\nvar ___CSS_LOADER_URL_IMPORT_0___ = require(\"../font/w-e-icon.woff?ddq1c7\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\nvar ___CSS_LOADER_URL_REPLACEMENT_0___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_0___);\n// Module\nexports.push([module.id, \"@font-face {\\n  font-family: 'w-e-icon';\\n  src: url(\" + ___CSS_LOADER_URL_REPLACEMENT_0___ + \") format('truetype');\\n  font-weight: normal;\\n  font-style: normal;\\n}\\n[class^=\\\"w-e-icon-\\\"],\\n[class*=\\\" w-e-icon-\\\"] {\\n  /* use !important to prevent issues with browser extensions that change fonts */\\n  font-family: 'w-e-icon' !important;\\n  speak: none;\\n  font-style: normal;\\n  font-weight: normal;\\n  font-variant: normal;\\n  text-transform: none;\\n  line-height: 1;\\n  /* Better Font Rendering =========== */\\n  -webkit-font-smoothing: antialiased;\\n  -moz-osx-font-smoothing: grayscale;\\n}\\n.w-e-icon-close:before {\\n  content: \\\"\\\\f00d\\\";\\n}\\n.w-e-icon-upload2:before {\\n  content: \\\"\\\\e9c6\\\";\\n}\\n.w-e-icon-trash-o:before {\\n  content: \\\"\\\\f014\\\";\\n}\\n.w-e-icon-header:before {\\n  content: \\\"\\\\f1dc\\\";\\n}\\n.w-e-icon-pencil2:before {\\n  content: \\\"\\\\e906\\\";\\n}\\n.w-e-icon-paint-brush:before {\\n  content: \\\"\\\\f1fc\\\";\\n}\\n.w-e-icon-image:before {\\n  content: \\\"\\\\e90d\\\";\\n}\\n.w-e-icon-play:before {\\n  content: \\\"\\\\e912\\\";\\n}\\n.w-e-icon-location:before {\\n  content: \\\"\\\\e947\\\";\\n}\\n.w-e-icon-undo:before {\\n  content: \\\"\\\\e965\\\";\\n}\\n.w-e-icon-redo:before {\\n  content: \\\"\\\\e966\\\";\\n}\\n.w-e-icon-quotes-left:before {\\n  content: \\\"\\\\e977\\\";\\n}\\n.w-e-icon-list-numbered:before {\\n  content: \\\"\\\\e9b9\\\";\\n}\\n.w-e-icon-list2:before {\\n  content: \\\"\\\\e9bb\\\";\\n}\\n.w-e-icon-link:before {\\n  content: \\\"\\\\e9cb\\\";\\n}\\n.w-e-icon-happy:before {\\n  content: \\\"\\\\e9df\\\";\\n}\\n.w-e-icon-bold:before {\\n  content: \\\"\\\\ea62\\\";\\n}\\n.w-e-icon-underline:before {\\n  content: \\\"\\\\ea63\\\";\\n}\\n.w-e-icon-italic:before {\\n  content: \\\"\\\\ea64\\\";\\n}\\n.w-e-icon-strikethrough:before {\\n  content: \\\"\\\\ea65\\\";\\n}\\n.w-e-icon-table2:before {\\n  content: \\\"\\\\ea71\\\";\\n}\\n.w-e-icon-paragraph-left:before {\\n  content: \\\"\\\\ea77\\\";\\n}\\n.w-e-icon-paragraph-center:before {\\n  content: \\\"\\\\ea78\\\";\\n}\\n.w-e-icon-paragraph-right:before {\\n  content: \\\"\\\\ea79\\\";\\n}\\n.w-e-icon-paragraph-justify:before {\\n  content: \\\"\\\\ea7a\\\";\\n}\\n.w-e-icon-terminal:before {\\n  content: \\\"\\\\f120\\\";\\n}\\n.w-e-icon-page-break:before {\\n  content: \\\"\\\\ea68\\\";\\n}\\n.w-e-icon-cancel-circle:before {\\n  content: \\\"\\\\ea0d\\\";\\n}\\n.w-e-icon-font:before {\\n  content: \\\"\\\\ea5c\\\";\\n}\\n.w-e-icon-text-heigh:before {\\n  content: \\\"\\\\ea5f\\\";\\n}\\n.w-e-icon-paint-format:before {\\n  content: \\\"\\\\e90c\\\";\\n}\\n.w-e-icon-indent-increase:before {\\n  content: \\\"\\\\ea7b\\\";\\n}\\n.w-e-icon-indent-decrease:before {\\n  content: \\\"\\\\ea7c\\\";\\n}\\n.w-e-icon-row-height:before {\\n  content: \\\"\\\\e9be\\\";\\n}\\n.w-e-icon-fullscreen_exit:before {\\n  content: \\\"\\\\e900\\\";\\n}\\n.w-e-icon-fullscreen:before {\\n  content: \\\"\\\\e901\\\";\\n}\\n.w-e-icon-split-line:before {\\n  content: \\\"\\\\ea0b\\\";\\n}\\n.w-e-icon-checkbox-checked:before {\\n  content: \\\"\\\\ea52\\\";\\n}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n", "\"use strict\";\n\nmodule.exports = function (url, options) {\n  if (!options) {\n    // eslint-disable-next-line no-param-reassign\n    options = {};\n  } // eslint-disable-next-line no-underscore-dangle, no-param-reassign\n\n\n  url = url && url.__esModule ? url.default : url;\n\n  if (typeof url !== 'string') {\n    return url;\n  } // If url is already wrapped in quotes, remove them\n\n\n  if (/^['\"].*['\"]$/.test(url)) {\n    // eslint-disable-next-line no-param-reassign\n    url = url.slice(1, -1);\n  }\n\n  if (options.hash) {\n    // eslint-disable-next-line no-param-reassign\n    url += options.hash;\n  } // Should url be wrapped?\n  // See https://drafts.csswg.org/css-values-3/#urls\n\n\n  if (/[\"'() \\t\\n]/.test(url) || options.needQuotes) {\n    return \"\\\"\".concat(url.replace(/\"/g, '\\\\\"').replace(/\\n/g, '\\\\n'), \"\\\"\");\n  }\n\n  return url;\n};", "export default \"data:font/woff;base64,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\"", "var api = require(\"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\");\n            var content = require(\"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/postcss-loader/src/index.js!../../../node_modules/less-loader/dist/cjs.js!./menus.less\");\n\n            content = content.__esModule ? content.default : content;\n\n            if (typeof content === 'string') {\n              content = [[module.id, content, '']];\n            }\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nmodule.exports = content.locals || {};", "// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".w-e-toolbar {\\n  display: flex;\\n  padding: 0 6px;\\n  flex-wrap: wrap;\\n  position: relative;\\n  /* 单个菜单 */\\n}\\n.w-e-toolbar .w-e-menu {\\n  position: relative;\\n  display: flex;\\n  width: 40px;\\n  height: 40px;\\n  align-items: center;\\n  justify-content: center;\\n  text-align: center;\\n  cursor: pointer;\\n}\\n.w-e-toolbar .w-e-menu i {\\n  color: #999;\\n}\\n.w-e-toolbar .w-e-menu:hover {\\n  background-color: #F6F6F6;\\n}\\n.w-e-toolbar .w-e-menu:hover i {\\n  color: #333;\\n}\\n.w-e-toolbar .w-e-active i {\\n  color: #1e88e5;\\n}\\n.w-e-toolbar .w-e-active:hover i {\\n  color: #1e88e5;\\n}\\n.w-e-menu-tooltip {\\n  position: absolute;\\n  display: flex;\\n  color: #f1f1f1;\\n  background-color: rgba(0, 0, 0, 0.75);\\n  box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.15);\\n  border-radius: 4px;\\n  padding: 4px 5px 6px;\\n  justify-content: center;\\n  align-items: center;\\n}\\n.w-e-menu-tooltip-up::after {\\n  content: \\\"\\\";\\n  position: absolute;\\n  top: 100%;\\n  left: 50%;\\n  margin-left: -5px;\\n  border: 5px solid rgba(0, 0, 0, 0);\\n  border-top-color: rgba(0, 0, 0, 0.73);\\n}\\n.w-e-menu-tooltip-down::after {\\n  content: \\\"\\\";\\n  position: absolute;\\n  bottom: 100%;\\n  left: 50%;\\n  margin-left: -5px;\\n  border: 5px solid rgba(0, 0, 0, 0);\\n  border-bottom-color: rgba(0, 0, 0, 0.73);\\n}\\n.w-e-menu-tooltip-item-wrapper {\\n  font-size: 14px;\\n  margin: 0 5px;\\n}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n", "var api = require(\"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\");\n            var content = require(\"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/postcss-loader/src/index.js!../../../node_modules/less-loader/dist/cjs.js!./text.less\");\n\n            content = content.__esModule ? content.default : content;\n\n            if (typeof content === 'string') {\n              content = [[module.id, content, '']];\n            }\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nmodule.exports = content.locals || {};", "// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".w-e-text-container {\\n  position: relative;\\n  height: 100%;\\n}\\n.w-e-text-container .w-e-progress {\\n  position: absolute;\\n  background-color: #1e88e5;\\n  top: 0;\\n  left: 0;\\n  height: 1px;\\n}\\n.w-e-text-container .placeholder {\\n  color: #D4D4D4;\\n  position: absolute;\\n  font-size: 11pt;\\n  line-height: 22px;\\n  left: 10px;\\n  top: 10px;\\n  -webkit-user-select: none;\\n     -moz-user-select: none;\\n      -ms-user-select: none;\\n          user-select: none;\\n  z-index: -1;\\n}\\n.w-e-text {\\n  padding: 0 10px;\\n  overflow-y: auto;\\n}\\n.w-e-text p,\\n.w-e-text h1,\\n.w-e-text h2,\\n.w-e-text h3,\\n.w-e-text h4,\\n.w-e-text h5,\\n.w-e-text table,\\n.w-e-text pre {\\n  margin: 10px 0;\\n  line-height: 1.5;\\n}\\n.w-e-text ul,\\n.w-e-text ol {\\n  margin: 10px 0 10px 20px;\\n}\\n.w-e-text blockquote {\\n  display: block;\\n  border-left: 8px solid #d0e5f2;\\n  padding: 5px 10px;\\n  margin: 10px 0;\\n  line-height: 1.4;\\n  font-size: 100%;\\n  background-color: #f1f1f1;\\n}\\n.w-e-text code {\\n  display: inline-block;\\n  background-color: #f1f1f1;\\n  border-radius: 3px;\\n  padding: 3px 5px;\\n  margin: 0 3px;\\n}\\n.w-e-text pre code {\\n  display: block;\\n}\\n.w-e-text table {\\n  border-top: 1px solid #ccc;\\n  border-left: 1px solid #ccc;\\n}\\n.w-e-text table td,\\n.w-e-text table th {\\n  border-bottom: 1px solid #ccc;\\n  border-right: 1px solid #ccc;\\n  padding: 3px 5px;\\n  min-height: 30px;\\n  height: 30px;\\n}\\n.w-e-text table th {\\n  border-bottom: 2px solid #ccc;\\n  text-align: center;\\n  background-color: #f1f1f1;\\n}\\n.w-e-text:focus {\\n  outline: none;\\n}\\n.w-e-text img {\\n  cursor: pointer;\\n}\\n.w-e-text img:hover {\\n  box-shadow: 0 0 5px #333;\\n}\\n.w-e-text .w-e-todo {\\n  margin: 0 0 0 20px;\\n}\\n.w-e-text .w-e-todo li {\\n  list-style: none;\\n  font-size: 1em;\\n}\\n.w-e-text .w-e-todo li span:nth-child(1) {\\n  position: relative;\\n  left: -18px;\\n}\\n.w-e-text .w-e-todo li span:nth-child(1) input {\\n  position: absolute;\\n  margin-right: 3px;\\n}\\n.w-e-text .w-e-todo li span:nth-child(1) input[type=checkbox] {\\n  top: 50%;\\n  margin-top: -6px;\\n}\\n.w-e-tooltip {\\n  position: absolute;\\n  display: flex;\\n  color: #f1f1f1;\\n  background-color: rgba(0, 0, 0, 0.75);\\n  box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.15);\\n  border-radius: 4px;\\n  padding: 4px 5px 6px;\\n  justify-content: center;\\n  align-items: center;\\n}\\n.w-e-tooltip-up::after {\\n  content: \\\"\\\";\\n  position: absolute;\\n  top: 100%;\\n  left: 50%;\\n  margin-left: -5px;\\n  border: 5px solid rgba(0, 0, 0, 0);\\n  border-top-color: rgba(0, 0, 0, 0.73);\\n}\\n.w-e-tooltip-down::after {\\n  content: \\\"\\\";\\n  position: absolute;\\n  bottom: 100%;\\n  left: 50%;\\n  margin-left: -5px;\\n  border: 5px solid rgba(0, 0, 0, 0);\\n  border-bottom-color: rgba(0, 0, 0, 0.73);\\n}\\n.w-e-tooltip-item-wrapper {\\n  cursor: pointer;\\n  font-size: 14px;\\n  margin: 0 5px;\\n}\\n.w-e-tooltip-item-wrapper:hover {\\n  color: #ccc;\\n  text-decoration: underline;\\n}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n", "var api = require(\"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\");\n            var content = require(\"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/postcss-loader/src/index.js!../../../node_modules/less-loader/dist/cjs.js!./panel.less\");\n\n            content = content.__esModule ? content.default : content;\n\n            if (typeof content === 'string') {\n              content = [[module.id, content, '']];\n            }\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nmodule.exports = content.locals || {};", "// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".w-e-menu .w-e-panel-container {\\n  position: absolute;\\n  top: 0;\\n  left: 50%;\\n  border: 1px solid #ccc;\\n  border-top: 0;\\n  box-shadow: 1px 1px 2px #ccc;\\n  color: #333;\\n  background-color: #fff;\\n  text-align: left;\\n  /* 为 emotion panel 定制的样式 */\\n  /* 上传图片、上传视频的 panel 定制样式 */\\n}\\n.w-e-menu .w-e-panel-container .w-e-panel-close {\\n  position: absolute;\\n  right: 0;\\n  top: 0;\\n  padding: 5px;\\n  margin: 2px 5px 0 0;\\n  cursor: pointer;\\n  color: #999;\\n}\\n.w-e-menu .w-e-panel-container .w-e-panel-close:hover {\\n  color: #333;\\n}\\n.w-e-menu .w-e-panel-container .w-e-panel-tab-title {\\n  list-style: none;\\n  display: flex;\\n  font-size: 14px;\\n  margin: 2px 10px 0 10px;\\n  border-bottom: 1px solid #f1f1f1;\\n}\\n.w-e-menu .w-e-panel-container .w-e-panel-tab-title .w-e-item {\\n  padding: 3px 5px;\\n  color: #999;\\n  cursor: pointer;\\n  margin: 0 3px;\\n  position: relative;\\n  top: 1px;\\n}\\n.w-e-menu .w-e-panel-container .w-e-panel-tab-title .w-e-active {\\n  color: #333;\\n  border-bottom: 1px solid #333;\\n  cursor: default;\\n  font-weight: 700;\\n}\\n.w-e-menu .w-e-panel-container .w-e-panel-tab-content {\\n  padding: 10px 15px 10px 15px;\\n  font-size: 16px;\\n  /* 输入框的样式 */\\n  /* 按钮的样式 */\\n}\\n.w-e-menu .w-e-panel-container .w-e-panel-tab-content input:focus,\\n.w-e-menu .w-e-panel-container .w-e-panel-tab-content textarea:focus,\\n.w-e-menu .w-e-panel-container .w-e-panel-tab-content button:focus {\\n  outline: none;\\n}\\n.w-e-menu .w-e-panel-container .w-e-panel-tab-content textarea {\\n  width: 100%;\\n  border: 1px solid #ccc;\\n  padding: 5px;\\n  margin-top: 10px;\\n}\\n.w-e-menu .w-e-panel-container .w-e-panel-tab-content textarea:focus {\\n  border-color: #1e88e5;\\n}\\n.w-e-menu .w-e-panel-container .w-e-panel-tab-content input[type=text] {\\n  border: none;\\n  border-bottom: 1px solid #ccc;\\n  font-size: 14px;\\n  height: 20px;\\n  color: #333;\\n  text-align: left;\\n}\\n.w-e-menu .w-e-panel-container .w-e-panel-tab-content input[type=text].small {\\n  width: 30px;\\n  text-align: center;\\n}\\n.w-e-menu .w-e-panel-container .w-e-panel-tab-content input[type=text].block {\\n  display: block;\\n  width: 100%;\\n  margin: 10px 0;\\n}\\n.w-e-menu .w-e-panel-container .w-e-panel-tab-content input[type=text]:focus {\\n  border-bottom: 2px solid #1e88e5;\\n}\\n.w-e-menu .w-e-panel-container .w-e-panel-tab-content .w-e-button-container button {\\n  font-size: 14px;\\n  color: #1e88e5;\\n  border: none;\\n  padding: 5px 10px;\\n  background-color: #fff;\\n  cursor: pointer;\\n  border-radius: 3px;\\n}\\n.w-e-menu .w-e-panel-container .w-e-panel-tab-content .w-e-button-container button.left {\\n  float: left;\\n  margin-right: 10px;\\n}\\n.w-e-menu .w-e-panel-container .w-e-panel-tab-content .w-e-button-container button.right {\\n  float: right;\\n  margin-left: 10px;\\n}\\n.w-e-menu .w-e-panel-container .w-e-panel-tab-content .w-e-button-container button.gray {\\n  color: #999;\\n}\\n.w-e-menu .w-e-panel-container .w-e-panel-tab-content .w-e-button-container button.red {\\n  color: #c24f4a;\\n}\\n.w-e-menu .w-e-panel-container .w-e-panel-tab-content .w-e-button-container button:hover {\\n  background-color: #f1f1f1;\\n}\\n.w-e-menu .w-e-panel-container .w-e-panel-tab-content .w-e-button-container:after {\\n  content: \\\"\\\";\\n  display: table;\\n  clear: both;\\n}\\n.w-e-menu .w-e-panel-container .w-e-emoticon-container .w-e-item {\\n  cursor: pointer;\\n  font-size: 18px;\\n  padding: 0 3px;\\n  display: inline-block;\\n}\\n.w-e-menu .w-e-panel-container .w-e-up-img-container,\\n.w-e-menu .w-e-panel-container .w-e-up-video-container {\\n  text-align: center;\\n}\\n.w-e-menu .w-e-panel-container .w-e-up-img-container .w-e-up-btn,\\n.w-e-menu .w-e-panel-container .w-e-up-video-container .w-e-up-btn {\\n  display: inline-block;\\n  color: #999;\\n  cursor: pointer;\\n  font-size: 60px;\\n  line-height: 1;\\n}\\n.w-e-menu .w-e-panel-container .w-e-up-img-container .w-e-up-btn:hover,\\n.w-e-menu .w-e-panel-container .w-e-up-video-container .w-e-up-btn:hover {\\n  color: #333;\\n}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n", "var api = require(\"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\");\n            var content = require(\"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/postcss-loader/src/index.js!../../../node_modules/less-loader/dist/cjs.js!./droplist.less\");\n\n            content = content.__esModule ? content.default : content;\n\n            if (typeof content === 'string') {\n              content = [[module.id, content, '']];\n            }\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nmodule.exports = content.locals || {};", "// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".w-e-toolbar .w-e-droplist {\\n  position: absolute;\\n  left: 0;\\n  top: 0;\\n  background-color: #fff;\\n  border: 1px solid #f1f1f1;\\n  border-right-color: #ccc;\\n  border-bottom-color: #ccc;\\n}\\n.w-e-toolbar .w-e-droplist .w-e-dp-title {\\n  text-align: center;\\n  color: #999;\\n  line-height: 2;\\n  border-bottom: 1px solid #f1f1f1;\\n  font-size: 13px;\\n}\\n.w-e-toolbar .w-e-droplist ul.w-e-list {\\n  list-style: none;\\n  line-height: 1;\\n}\\n.w-e-toolbar .w-e-droplist ul.w-e-list li.w-e-item {\\n  color: #333;\\n  padding: 5px 0;\\n}\\n.w-e-toolbar .w-e-droplist ul.w-e-list li.w-e-item:hover {\\n  background-color: #f1f1f1;\\n}\\n.w-e-toolbar .w-e-droplist ul.w-e-block {\\n  list-style: none;\\n  text-align: left;\\n  padding: 5px;\\n}\\n.w-e-toolbar .w-e-droplist ul.w-e-block li.w-e-item {\\n  display: inline-block;\\n  padding: 3px 5px;\\n}\\n.w-e-toolbar .w-e-droplist ul.w-e-block li.w-e-item:hover {\\n  background-color: #f1f1f1;\\n}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n", "/**\n * @description polyfill 【注意，js 语法的兼容，都通过 babel transform runtime 支持】\n * @author wangfupeng\n */\n\nif (!Element.prototype.matches) {\n    Element.prototype.matches = function (s) {\n        let matches: NodeListOf<Element> = this.ownerDocument.querySelectorAll(s)\n        let i: number = matches.length\n        for (i; i >= 0; i--) {\n            if (matches.item(i) === this) break\n        }\n        return i > -1\n    }\n}\n\n// 有的第三方库需要原生 Promise ，而 IE11 又没有原生 Promise ，就报错\nif (!window.Promise) {\n    window.Promise = Promise\n}\n", "module.exports = require(\"core-js-pure/stable/promise\");", "var parent = require('../../es/promise');\n\nmodule.exports = parent;\n", "require('../../modules/es.object.to-string');\nrequire('../../modules/es.string.iterator');\nrequire('../../modules/web.dom-collections.iterator');\nrequire('../../modules/es.promise');\nrequire('../../modules/es.promise.all-settled');\nrequire('../../modules/es.promise.finally');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Promise;\n", "var toInteger = require('../internals/to-integer');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\n// `String.prototype.{ codePointAt, at }` methods implementation\nvar createMethod = function (CONVERT_TO_STRING) {\n  return function ($this, pos) {\n    var S = String(requireObjectCoercible($this));\n    var position = toInteger(pos);\n    var size = S.length;\n    var first, second;\n    if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined;\n    first = S.charCodeAt(position);\n    return first < 0xD800 || first > 0xDBFF || position + 1 === size\n      || (second = S.charCodeAt(position + 1)) < 0xDC00 || second > 0xDFFF\n        ? CONVERT_TO_STRING ? S.charAt(position) : first\n        : CONVERT_TO_STRING ? S.slice(position, position + 2) : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000;\n  };\n};\n\nmodule.exports = {\n  // `String.prototype.codePointAt` method\n  // https://tc39.github.io/ecma262/#sec-string.prototype.codepointat\n  codeAt: createMethod(false),\n  // `String.prototype.at` method\n  // https://github.com/mathiasbynens/String.prototype.at\n  charAt: createMethod(true)\n};\n", "var global = require('../internals/global');\nvar inspectSource = require('../internals/inspect-source');\n\nvar WeakMap = global.WeakMap;\n\nmodule.exports = typeof WeakMap === 'function' && /native code/.test(inspectSource(WeakMap));\n", "var global = require('../internals/global');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\n\nmodule.exports = function (key, value) {\n  try {\n    createNonEnumerableProperty(global, key, value);\n  } catch (error) {\n    global[key] = value;\n  } return value;\n};\n", "'use strict';\nvar IteratorPrototype = require('../internals/iterators-core').IteratorPrototype;\nvar create = require('../internals/object-create');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar Iterators = require('../internals/iterators');\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (IteratorConstructor, NAME, next) {\n  var TO_STRING_TAG = NAME + ' Iterator';\n  IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(1, next) });\n  setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true);\n  Iterators[TO_STRING_TAG] = returnThis;\n  return IteratorConstructor;\n};\n", "var fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n  function F() { /* empty */ }\n  F.prototype.constructor = null;\n  return Object.getPrototypeOf(new F()) !== F.prototype;\n});\n", "var DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar anObject = require('../internals/an-object');\nvar objectKeys = require('../internals/object-keys');\n\n// `Object.defineProperties` method\n// https://tc39.github.io/ecma262/#sec-object.defineproperties\nmodule.exports = DESCRIPTORS ? Object.defineProperties : function defineProperties(O, Properties) {\n  anObject(O);\n  var keys = objectKeys(Properties);\n  var length = keys.length;\n  var index = 0;\n  var key;\n  while (length > index) definePropertyModule.f(O, key = keys[index++], Properties[key]);\n  return O;\n};\n", "'use strict';\nvar TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar classof = require('../internals/classof');\n\n// `Object.prototype.toString` method implementation\n// https://tc39.github.io/ecma262/#sec-object.prototype.tostring\nmodule.exports = TO_STRING_TAG_SUPPORT ? {}.toString : function toString() {\n  return '[object ' + classof(this) + ']';\n};\n", "var anObject = require('../internals/an-object');\nvar aPossiblePrototype = require('../internals/a-possible-prototype');\n\n// `Object.setPrototypeOf` method\n// https://tc39.github.io/ecma262/#sec-object.setprototypeof\n// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nmodule.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () {\n  var CORRECT_SETTER = false;\n  var test = {};\n  var setter;\n  try {\n    setter = Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set;\n    setter.call(test, []);\n    CORRECT_SETTER = test instanceof Array;\n  } catch (error) { /* empty */ }\n  return function setPrototypeOf(O, proto) {\n    anObject(O);\n    aPossiblePrototype(proto);\n    if (CORRECT_SETTER) setter.call(O, proto);\n    else O.__proto__ = proto;\n    return O;\n  };\n}() : undefined);\n", "var isObject = require('../internals/is-object');\n\nmodule.exports = function (it) {\n  if (!isObject(it) && it !== null) {\n    throw TypeError(\"Can't set \" + String(it) + ' as a prototype');\n  } return it;\n};\n", "'use strict';\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar addToUnscopables = require('../internals/add-to-unscopables');\nvar Iterators = require('../internals/iterators');\nvar InternalStateModule = require('../internals/internal-state');\nvar defineIterator = require('../internals/define-iterator');\n\nvar ARRAY_ITERATOR = 'Array Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR);\n\n// `Array.prototype.entries` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.entries\n// `Array.prototype.keys` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.keys\n// `Array.prototype.values` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.values\n// `Array.prototype[@@iterator]` method\n// https://tc39.github.io/ecma262/#sec-array.prototype-@@iterator\n// `CreateArrayIterator` internal method\n// https://tc39.github.io/ecma262/#sec-createarrayiterator\nmodule.exports = defineIterator(Array, 'Array', function (iterated, kind) {\n  setInternalState(this, {\n    type: ARRAY_ITERATOR,\n    target: toIndexedObject(iterated), // target\n    index: 0,                          // next index\n    kind: kind                         // kind\n  });\n// `%ArrayIteratorPrototype%.next` method\n// https://tc39.github.io/ecma262/#sec-%arrayiteratorprototype%.next\n}, function () {\n  var state = getInternalState(this);\n  var target = state.target;\n  var kind = state.kind;\n  var index = state.index++;\n  if (!target || index >= target.length) {\n    state.target = undefined;\n    return { value: undefined, done: true };\n  }\n  if (kind == 'keys') return { value: index, done: false };\n  if (kind == 'values') return { value: target[index], done: false };\n  return { value: [index, target[index]], done: false };\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values%\n// https://tc39.github.io/ecma262/#sec-createunmappedargumentsobject\n// https://tc39.github.io/ecma262/#sec-createmappedargumentsobject\nIterators.Arguments = Iterators.Array;\n\n// https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n", "// iterable DOM collections\n// flag - `iterable` interface - 'entries', 'keys', 'values', 'forEach' methods\nmodule.exports = {\n  CSSRuleList: 0,\n  CSSStyleDeclaration: 0,\n  CSSValueList: 0,\n  ClientRectList: 0,\n  DOMRectList: 0,\n  DOMStringList: 0,\n  DOMTokenList: 1,\n  DataTransferItemList: 0,\n  FileList: 0,\n  HTMLAllCollection: 0,\n  HTMLCollection: 0,\n  HTMLFormElement: 0,\n  HTMLSelectElement: 0,\n  MediaList: 0,\n  MimeTypeArray: 0,\n  NamedNodeMap: 0,\n  NodeList: 1,\n  PaintRequestList: 0,\n  Plugin: 0,\n  PluginArray: 0,\n  SVGLengthList: 0,\n  SVGNumberList: 0,\n  SVGPathSegList: 0,\n  SVGPointList: 0,\n  SVGStringList: 0,\n  SVGTransformList: 0,\n  SourceBufferList: 0,\n  StyleSheetList: 0,\n  TextTrackCueList: 0,\n  TextTrackList: 0,\n  TouchList: 0\n};\n", "'use strict';\nvar $ = require('../internals/export');\nvar IS_PURE = require('../internals/is-pure');\nvar global = require('../internals/global');\nvar getBuiltIn = require('../internals/get-built-in');\nvar NativePromise = require('../internals/native-promise-constructor');\nvar redefine = require('../internals/redefine');\nvar redefineAll = require('../internals/redefine-all');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar setSpecies = require('../internals/set-species');\nvar isObject = require('../internals/is-object');\nvar aFunction = require('../internals/a-function');\nvar anInstance = require('../internals/an-instance');\nvar classof = require('../internals/classof-raw');\nvar inspectSource = require('../internals/inspect-source');\nvar iterate = require('../internals/iterate');\nvar checkCorrectnessOfIteration = require('../internals/check-correctness-of-iteration');\nvar speciesConstructor = require('../internals/species-constructor');\nvar task = require('../internals/task').set;\nvar microtask = require('../internals/microtask');\nvar promiseResolve = require('../internals/promise-resolve');\nvar hostReportErrors = require('../internals/host-report-errors');\nvar newPromiseCapabilityModule = require('../internals/new-promise-capability');\nvar perform = require('../internals/perform');\nvar InternalStateModule = require('../internals/internal-state');\nvar isForced = require('../internals/is-forced');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar V8_VERSION = require('../internals/engine-v8-version');\n\nvar SPECIES = wellKnownSymbol('species');\nvar PROMISE = 'Promise';\nvar getInternalState = InternalStateModule.get;\nvar setInternalState = InternalStateModule.set;\nvar getInternalPromiseState = InternalStateModule.getterFor(PROMISE);\nvar PromiseConstructor = NativePromise;\nvar TypeError = global.TypeError;\nvar document = global.document;\nvar process = global.process;\nvar $fetch = getBuiltIn('fetch');\nvar newPromiseCapability = newPromiseCapabilityModule.f;\nvar newGenericPromiseCapability = newPromiseCapability;\nvar IS_NODE = classof(process) == 'process';\nvar DISPATCH_EVENT = !!(document && document.createEvent && global.dispatchEvent);\nvar UNHANDLED_REJECTION = 'unhandledrejection';\nvar REJECTION_HANDLED = 'rejectionhandled';\nvar PENDING = 0;\nvar FULFILLED = 1;\nvar REJECTED = 2;\nvar HANDLED = 1;\nvar UNHANDLED = 2;\nvar Internal, OwnPromiseCapability, PromiseWrapper, nativeThen;\n\nvar FORCED = isForced(PROMISE, function () {\n  var GLOBAL_CORE_JS_PROMISE = inspectSource(PromiseConstructor) !== String(PromiseConstructor);\n  if (!GLOBAL_CORE_JS_PROMISE) {\n    // V8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables\n    // https://bugs.chromium.org/p/chromium/issues/detail?id=830565\n    // We can't detect it synchronously, so just check versions\n    if (V8_VERSION === 66) return true;\n    // Unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n    if (!IS_NODE && typeof PromiseRejectionEvent != 'function') return true;\n  }\n  // We need Promise#finally in the pure version for preventing prototype pollution\n  if (IS_PURE && !PromiseConstructor.prototype['finally']) return true;\n  // We can't use @@species feature detection in V8 since it causes\n  // deoptimization and performance degradation\n  // https://github.com/zloirock/core-js/issues/679\n  if (V8_VERSION >= 51 && /native code/.test(PromiseConstructor)) return false;\n  // Detect correctness of subclassing with @@species support\n  var promise = PromiseConstructor.resolve(1);\n  var FakePromise = function (exec) {\n    exec(function () { /* empty */ }, function () { /* empty */ });\n  };\n  var constructor = promise.constructor = {};\n  constructor[SPECIES] = FakePromise;\n  return !(promise.then(function () { /* empty */ }) instanceof FakePromise);\n});\n\nvar INCORRECT_ITERATION = FORCED || !checkCorrectnessOfIteration(function (iterable) {\n  PromiseConstructor.all(iterable)['catch'](function () { /* empty */ });\n});\n\n// helpers\nvar isThenable = function (it) {\n  var then;\n  return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\n\nvar notify = function (promise, state, isReject) {\n  if (state.notified) return;\n  state.notified = true;\n  var chain = state.reactions;\n  microtask(function () {\n    var value = state.value;\n    var ok = state.state == FULFILLED;\n    var index = 0;\n    // variable length - can't use forEach\n    while (chain.length > index) {\n      var reaction = chain[index++];\n      var handler = ok ? reaction.ok : reaction.fail;\n      var resolve = reaction.resolve;\n      var reject = reaction.reject;\n      var domain = reaction.domain;\n      var result, then, exited;\n      try {\n        if (handler) {\n          if (!ok) {\n            if (state.rejection === UNHANDLED) onHandleUnhandled(promise, state);\n            state.rejection = HANDLED;\n          }\n          if (handler === true) result = value;\n          else {\n            if (domain) domain.enter();\n            result = handler(value); // can throw\n            if (domain) {\n              domain.exit();\n              exited = true;\n            }\n          }\n          if (result === reaction.promise) {\n            reject(TypeError('Promise-chain cycle'));\n          } else if (then = isThenable(result)) {\n            then.call(result, resolve, reject);\n          } else resolve(result);\n        } else reject(value);\n      } catch (error) {\n        if (domain && !exited) domain.exit();\n        reject(error);\n      }\n    }\n    state.reactions = [];\n    state.notified = false;\n    if (isReject && !state.rejection) onUnhandled(promise, state);\n  });\n};\n\nvar dispatchEvent = function (name, promise, reason) {\n  var event, handler;\n  if (DISPATCH_EVENT) {\n    event = document.createEvent('Event');\n    event.promise = promise;\n    event.reason = reason;\n    event.initEvent(name, false, true);\n    global.dispatchEvent(event);\n  } else event = { promise: promise, reason: reason };\n  if (handler = global['on' + name]) handler(event);\n  else if (name === UNHANDLED_REJECTION) hostReportErrors('Unhandled promise rejection', reason);\n};\n\nvar onUnhandled = function (promise, state) {\n  task.call(global, function () {\n    var value = state.value;\n    var IS_UNHANDLED = isUnhandled(state);\n    var result;\n    if (IS_UNHANDLED) {\n      result = perform(function () {\n        if (IS_NODE) {\n          process.emit('unhandledRejection', value, promise);\n        } else dispatchEvent(UNHANDLED_REJECTION, promise, value);\n      });\n      // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n      state.rejection = IS_NODE || isUnhandled(state) ? UNHANDLED : HANDLED;\n      if (result.error) throw result.value;\n    }\n  });\n};\n\nvar isUnhandled = function (state) {\n  return state.rejection !== HANDLED && !state.parent;\n};\n\nvar onHandleUnhandled = function (promise, state) {\n  task.call(global, function () {\n    if (IS_NODE) {\n      process.emit('rejectionHandled', promise);\n    } else dispatchEvent(REJECTION_HANDLED, promise, state.value);\n  });\n};\n\nvar bind = function (fn, promise, state, unwrap) {\n  return function (value) {\n    fn(promise, state, value, unwrap);\n  };\n};\n\nvar internalReject = function (promise, state, value, unwrap) {\n  if (state.done) return;\n  state.done = true;\n  if (unwrap) state = unwrap;\n  state.value = value;\n  state.state = REJECTED;\n  notify(promise, state, true);\n};\n\nvar internalResolve = function (promise, state, value, unwrap) {\n  if (state.done) return;\n  state.done = true;\n  if (unwrap) state = unwrap;\n  try {\n    if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n    var then = isThenable(value);\n    if (then) {\n      microtask(function () {\n        var wrapper = { done: false };\n        try {\n          then.call(value,\n            bind(internalResolve, promise, wrapper, state),\n            bind(internalReject, promise, wrapper, state)\n          );\n        } catch (error) {\n          internalReject(promise, wrapper, error, state);\n        }\n      });\n    } else {\n      state.value = value;\n      state.state = FULFILLED;\n      notify(promise, state, false);\n    }\n  } catch (error) {\n    internalReject(promise, { done: false }, error, state);\n  }\n};\n\n// constructor polyfill\nif (FORCED) {\n  // 25.4.3.1 Promise(executor)\n  PromiseConstructor = function Promise(executor) {\n    anInstance(this, PromiseConstructor, PROMISE);\n    aFunction(executor);\n    Internal.call(this);\n    var state = getInternalState(this);\n    try {\n      executor(bind(internalResolve, this, state), bind(internalReject, this, state));\n    } catch (error) {\n      internalReject(this, state, error);\n    }\n  };\n  // eslint-disable-next-line no-unused-vars\n  Internal = function Promise(executor) {\n    setInternalState(this, {\n      type: PROMISE,\n      done: false,\n      notified: false,\n      parent: false,\n      reactions: [],\n      rejection: false,\n      state: PENDING,\n      value: undefined\n    });\n  };\n  Internal.prototype = redefineAll(PromiseConstructor.prototype, {\n    // `Promise.prototype.then` method\n    // https://tc39.github.io/ecma262/#sec-promise.prototype.then\n    then: function then(onFulfilled, onRejected) {\n      var state = getInternalPromiseState(this);\n      var reaction = newPromiseCapability(speciesConstructor(this, PromiseConstructor));\n      reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n      reaction.fail = typeof onRejected == 'function' && onRejected;\n      reaction.domain = IS_NODE ? process.domain : undefined;\n      state.parent = true;\n      state.reactions.push(reaction);\n      if (state.state != PENDING) notify(this, state, false);\n      return reaction.promise;\n    },\n    // `Promise.prototype.catch` method\n    // https://tc39.github.io/ecma262/#sec-promise.prototype.catch\n    'catch': function (onRejected) {\n      return this.then(undefined, onRejected);\n    }\n  });\n  OwnPromiseCapability = function () {\n    var promise = new Internal();\n    var state = getInternalState(promise);\n    this.promise = promise;\n    this.resolve = bind(internalResolve, promise, state);\n    this.reject = bind(internalReject, promise, state);\n  };\n  newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n    return C === PromiseConstructor || C === PromiseWrapper\n      ? new OwnPromiseCapability(C)\n      : newGenericPromiseCapability(C);\n  };\n\n  if (!IS_PURE && typeof NativePromise == 'function') {\n    nativeThen = NativePromise.prototype.then;\n\n    // wrap native Promise#then for native async functions\n    redefine(NativePromise.prototype, 'then', function then(onFulfilled, onRejected) {\n      var that = this;\n      return new PromiseConstructor(function (resolve, reject) {\n        nativeThen.call(that, resolve, reject);\n      }).then(onFulfilled, onRejected);\n    // https://github.com/zloirock/core-js/issues/640\n    }, { unsafe: true });\n\n    // wrap fetch result\n    if (typeof $fetch == 'function') $({ global: true, enumerable: true, forced: true }, {\n      // eslint-disable-next-line no-unused-vars\n      fetch: function fetch(input /* , init */) {\n        return promiseResolve(PromiseConstructor, $fetch.apply(global, arguments));\n      }\n    });\n  }\n}\n\n$({ global: true, wrap: true, forced: FORCED }, {\n  Promise: PromiseConstructor\n});\n\nsetToStringTag(PromiseConstructor, PROMISE, false, true);\nsetSpecies(PROMISE);\n\nPromiseWrapper = getBuiltIn(PROMISE);\n\n// statics\n$({ target: PROMISE, stat: true, forced: FORCED }, {\n  // `Promise.reject` method\n  // https://tc39.github.io/ecma262/#sec-promise.reject\n  reject: function reject(r) {\n    var capability = newPromiseCapability(this);\n    capability.reject.call(undefined, r);\n    return capability.promise;\n  }\n});\n\n$({ target: PROMISE, stat: true, forced: IS_PURE || FORCED }, {\n  // `Promise.resolve` method\n  // https://tc39.github.io/ecma262/#sec-promise.resolve\n  resolve: function resolve(x) {\n    return promiseResolve(IS_PURE && this === PromiseWrapper ? PromiseConstructor : this, x);\n  }\n});\n\n$({ target: PROMISE, stat: true, forced: INCORRECT_ITERATION }, {\n  // `Promise.all` method\n  // https://tc39.github.io/ecma262/#sec-promise.all\n  all: function all(iterable) {\n    var C = this;\n    var capability = newPromiseCapability(C);\n    var resolve = capability.resolve;\n    var reject = capability.reject;\n    var result = perform(function () {\n      var $promiseResolve = aFunction(C.resolve);\n      var values = [];\n      var counter = 0;\n      var remaining = 1;\n      iterate(iterable, function (promise) {\n        var index = counter++;\n        var alreadyCalled = false;\n        values.push(undefined);\n        remaining++;\n        $promiseResolve.call(C, promise).then(function (value) {\n          if (alreadyCalled) return;\n          alreadyCalled = true;\n          values[index] = value;\n          --remaining || resolve(values);\n        }, reject);\n      });\n      --remaining || resolve(values);\n    });\n    if (result.error) reject(result.value);\n    return capability.promise;\n  },\n  // `Promise.race` method\n  // https://tc39.github.io/ecma262/#sec-promise.race\n  race: function race(iterable) {\n    var C = this;\n    var capability = newPromiseCapability(C);\n    var reject = capability.reject;\n    var result = perform(function () {\n      var $promiseResolve = aFunction(C.resolve);\n      iterate(iterable, function (promise) {\n        $promiseResolve.call(C, promise).then(capability.resolve, reject);\n      });\n    });\n    if (result.error) reject(result.value);\n    return capability.promise;\n  }\n});\n", "var global = require('../internals/global');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar classof = require('../internals/classof-raw');\nvar macrotask = require('../internals/task').set;\nvar IS_IOS = require('../internals/engine-is-ios');\n\nvar MutationObserver = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar IS_NODE = classof(process) == 'process';\n// Node.js 11 shows ExperimentalWarning on getting `queueMicrotask`\nvar queueMicrotaskDescriptor = getOwnPropertyDescriptor(global, 'queueMicrotask');\nvar queueMicrotask = queueMicrotaskDescriptor && queueMicrotaskDescriptor.value;\n\nvar flush, head, last, notify, toggle, node, promise, then;\n\n// modern engines have queueMicrotask method\nif (!queueMicrotask) {\n  flush = function () {\n    var parent, fn;\n    if (IS_NODE && (parent = process.domain)) parent.exit();\n    while (head) {\n      fn = head.fn;\n      head = head.next;\n      try {\n        fn();\n      } catch (error) {\n        if (head) notify();\n        else last = undefined;\n        throw error;\n      }\n    } last = undefined;\n    if (parent) parent.enter();\n  };\n\n  // Node.js\n  if (IS_NODE) {\n    notify = function () {\n      process.nextTick(flush);\n    };\n  // browsers with MutationObserver, except iOS - https://github.com/zloirock/core-js/issues/339\n  } else if (MutationObserver && !IS_IOS) {\n    toggle = true;\n    node = document.createTextNode('');\n    new MutationObserver(flush).observe(node, { characterData: true });\n    notify = function () {\n      node.data = toggle = !toggle;\n    };\n  // environments with maybe non-completely correct, but existent Promise\n  } else if (Promise && Promise.resolve) {\n    // Promise.resolve without an argument throws an error in LG WebOS 2\n    promise = Promise.resolve(undefined);\n    then = promise.then;\n    notify = function () {\n      then.call(promise, flush);\n    };\n  // for other environments - macrotask based on:\n  // - setImmediate\n  // - MessageChannel\n  // - window.postMessag\n  // - onreadystatechange\n  // - setTimeout\n  } else {\n    notify = function () {\n      // strange IE + webpack dev server bug - use .call(global)\n      macrotask.call(global, flush);\n    };\n  }\n}\n\nmodule.exports = queueMicrotask || function (fn) {\n  var task = { fn: fn, next: undefined };\n  if (last) last.next = task;\n  if (!head) {\n    head = task;\n    notify();\n  } last = task;\n};\n", "var global = require('../internals/global');\n\nmodule.exports = function (a, b) {\n  var console = global.console;\n  if (console && console.error) {\n    arguments.length === 1 ? console.error(a) : console.error(a, b);\n  }\n};\n", "'use strict';\nvar $ = require('../internals/export');\nvar aFunction = require('../internals/a-function');\nvar newPromiseCapabilityModule = require('../internals/new-promise-capability');\nvar perform = require('../internals/perform');\nvar iterate = require('../internals/iterate');\n\n// `Promise.allSettled` method\n// https://github.com/tc39/proposal-promise-allSettled\n$({ target: 'Promise', stat: true }, {\n  allSettled: function allSettled(iterable) {\n    var C = this;\n    var capability = newPromiseCapabilityModule.f(C);\n    var resolve = capability.resolve;\n    var reject = capability.reject;\n    var result = perform(function () {\n      var promiseResolve = aFunction(C.resolve);\n      var values = [];\n      var counter = 0;\n      var remaining = 1;\n      iterate(iterable, function (promise) {\n        var index = counter++;\n        var alreadyCalled = false;\n        values.push(undefined);\n        remaining++;\n        promiseResolve.call(C, promise).then(function (value) {\n          if (alreadyCalled) return;\n          alreadyCalled = true;\n          values[index] = { status: 'fulfilled', value: value };\n          --remaining || resolve(values);\n        }, function (e) {\n          if (alreadyCalled) return;\n          alreadyCalled = true;\n          values[index] = { status: 'rejected', reason: e };\n          --remaining || resolve(values);\n        });\n      });\n      --remaining || resolve(values);\n    });\n    if (result.error) reject(result.value);\n    return capability.promise;\n  }\n});\n", "'use strict';\nvar $ = require('../internals/export');\nvar IS_PURE = require('../internals/is-pure');\nvar NativePromise = require('../internals/native-promise-constructor');\nvar fails = require('../internals/fails');\nvar getBuiltIn = require('../internals/get-built-in');\nvar speciesConstructor = require('../internals/species-constructor');\nvar promiseResolve = require('../internals/promise-resolve');\nvar redefine = require('../internals/redefine');\n\n// Safari bug https://bugs.webkit.org/show_bug.cgi?id=200829\nvar NON_GENERIC = !!NativePromise && fails(function () {\n  NativePromise.prototype['finally'].call({ then: function () { /* empty */ } }, function () { /* empty */ });\n});\n\n// `Promise.prototype.finally` method\n// https://tc39.github.io/ecma262/#sec-promise.prototype.finally\n$({ target: 'Promise', proto: true, real: true, forced: NON_GENERIC }, {\n  'finally': function (onFinally) {\n    var C = speciesConstructor(this, getBuiltIn('Promise'));\n    var isFunction = typeof onFinally == 'function';\n    return this.then(\n      isFunction ? function (x) {\n        return promiseResolve(C, onFinally()).then(function () { return x; });\n      } : onFinally,\n      isFunction ? function (e) {\n        return promiseResolve(C, onFinally()).then(function () { throw e; });\n      } : onFinally\n    );\n  }\n});\n\n// patch native Promise.prototype for native async functions\nif (!IS_PURE && typeof NativePromise == 'function' && !NativePromise.prototype['finally']) {\n  redefine(NativePromise.prototype, 'finally', getBuiltIn('Promise').prototype['finally']);\n}\n", "require('../../modules/web.dom-collections.iterator');\nvar forEach = require('../array/virtual/for-each');\nvar classof = require('../../internals/classof');\nvar ArrayPrototype = Array.prototype;\n\nvar DOMIterables = {\n  DOMTokenList: true,\n  NodeList: true\n};\n\nmodule.exports = function (it) {\n  var own = it.forEach;\n  return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.forEach)\n    // eslint-disable-next-line no-prototype-builtins\n    || DOMIterables.hasOwnProperty(classof(it)) ? forEach : own;\n};\n", "var parent = require('../../../es/array/virtual/for-each');\n\nmodule.exports = parent;\n", "require('../../../modules/es.array.for-each');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Array').forEach;\n", "'use strict';\nvar $ = require('../internals/export');\nvar forEach = require('../internals/array-for-each');\n\n// `Array.prototype.forEach` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.foreach\n$({ target: 'Array', proto: true, forced: [].forEach != forEach }, {\n  forEach: forEach\n});\n", "'use strict';\nvar $forEach = require('../internals/array-iteration').forEach;\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\nvar arrayMethodUsesToLength = require('../internals/array-method-uses-to-length');\n\nvar STRICT_METHOD = arrayMethodIsStrict('forEach');\nvar USES_TO_LENGTH = arrayMethodUsesToLength('forEach');\n\n// `Array.prototype.forEach` method implementation\n// https://tc39.github.io/ecma262/#sec-array.prototype.foreach\nmodule.exports = (!STRICT_METHOD || !USES_TO_LENGTH) ? function forEach(callbackfn /* , thisArg */) {\n  return $forEach(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n} : [].forEach;\n", "var parent = require('../../es/array/is-array');\n\nmodule.exports = parent;\n", "require('../../modules/es.array.is-array');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Array.isArray;\n", "var $ = require('../internals/export');\nvar isArray = require('../internals/is-array');\n\n// `Array.isArray` method\n// https://tc39.github.io/ecma262/#sec-array.isarray\n$({ target: 'Array', stat: true }, {\n  isArray: isArray\n});\n", "var parent = require('../../es/instance/map');\n\nmodule.exports = parent;\n", "var map = require('../array/virtual/map');\n\nvar ArrayPrototype = Array.prototype;\n\nmodule.exports = function (it) {\n  var own = it.map;\n  return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.map) ? map : own;\n};\n", "require('../../../modules/es.array.map');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Array').map;\n", "'use strict';\nvar $ = require('../internals/export');\nvar $map = require('../internals/array-iteration').map;\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\nvar arrayMethodUsesToLength = require('../internals/array-method-uses-to-length');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('map');\n// FF49- issue\nvar USES_TO_LENGTH = arrayMethodUsesToLength('map');\n\n// `Array.prototype.map` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.map\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT || !USES_TO_LENGTH }, {\n  map: function map(callbackfn /* , thisArg */) {\n    return $map(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\n", "var parent = require('../../es/instance/trim');\n\nmodule.exports = parent;\n", "var trim = require('../string/virtual/trim');\n\nvar StringPrototype = String.prototype;\n\nmodule.exports = function (it) {\n  var own = it.trim;\n  return typeof it === 'string' || it === StringPrototype\n    || (it instanceof String && own === StringPrototype.trim) ? trim : own;\n};\n", "require('../../../modules/es.string.trim');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('String').trim;\n", "'use strict';\nvar $ = require('../internals/export');\nvar $trim = require('../internals/string-trim').trim;\nvar forcedStringTrimMethod = require('../internals/string-trim-forced');\n\n// `String.prototype.trim` method\n// https://tc39.github.io/ecma262/#sec-string.prototype.trim\n$({ target: 'String', proto: true, forced: forcedStringTrimMethod('trim') }, {\n  trim: function trim() {\n    return $trim(this);\n  }\n});\n", "var fails = require('../internals/fails');\nvar whitespaces = require('../internals/whitespaces');\n\nvar non = '\\u200B\\u0085\\u180E';\n\n// check that a method works with the correct list\n// of whitespaces and has a correct name\nmodule.exports = function (METHOD_NAME) {\n  return fails(function () {\n    return !!whitespaces[METHOD_NAME]() || non[METHOD_NAME]() != non || whitespaces[METHOD_NAME].name !== METHOD_NAME;\n  });\n};\n", "var parent = require('../../es/map');\n\nmodule.exports = parent;\n", "require('../../modules/es.map');\nrequire('../../modules/es.object.to-string');\nrequire('../../modules/es.string.iterator');\nrequire('../../modules/web.dom-collections.iterator');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Map;\n", "'use strict';\nvar collection = require('../internals/collection');\nvar collectionStrong = require('../internals/collection-strong');\n\n// `Map` constructor\n// https://tc39.github.io/ecma262/#sec-map-objects\nmodule.exports = collection('Map', function (init) {\n  return function Map() { return init(this, arguments.length ? arguments[0] : undefined); };\n}, collectionStrong);\n", "var fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n  return Object.isExtensible(Object.preventExtensions({}));\n});\n", "var parent = require('../../es/instance/index-of');\n\nmodule.exports = parent;\n", "var indexOf = require('../array/virtual/index-of');\n\nvar ArrayPrototype = Array.prototype;\n\nmodule.exports = function (it) {\n  var own = it.indexOf;\n  return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.indexOf) ? indexOf : own;\n};\n", "require('../../../modules/es.array.index-of');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Array').indexOf;\n", "'use strict';\nvar $ = require('../internals/export');\nvar $indexOf = require('../internals/array-includes').indexOf;\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\nvar arrayMethodUsesToLength = require('../internals/array-method-uses-to-length');\n\nvar nativeIndexOf = [].indexOf;\n\nvar NEGATIVE_ZERO = !!nativeIndexOf && 1 / [1].indexOf(1, -0) < 0;\nvar STRICT_METHOD = arrayMethodIsStrict('indexOf');\nvar USES_TO_LENGTH = arrayMethodUsesToLength('indexOf', { ACCESSORS: true, 1: 0 });\n\n// `Array.prototype.indexOf` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.indexof\n$({ target: 'Array', proto: true, forced: NEGATIVE_ZERO || !STRICT_METHOD || !USES_TO_LENGTH }, {\n  indexOf: function indexOf(searchElement /* , fromIndex = 0 */) {\n    return NEGATIVE_ZERO\n      // convert -0 to +0\n      ? nativeIndexOf.apply(this, arguments) || 0\n      : $indexOf(this, searchElement, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\n", "var parent = require('../../es/instance/splice');\n\nmodule.exports = parent;\n", "var splice = require('../array/virtual/splice');\n\nvar ArrayPrototype = Array.prototype;\n\nmodule.exports = function (it) {\n  var own = it.splice;\n  return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.splice) ? splice : own;\n};\n", "require('../../../modules/es.array.splice');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Array').splice;\n", "'use strict';\nvar $ = require('../internals/export');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar toInteger = require('../internals/to-integer');\nvar toLength = require('../internals/to-length');\nvar toObject = require('../internals/to-object');\nvar arraySpeciesCreate = require('../internals/array-species-create');\nvar createProperty = require('../internals/create-property');\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\nvar arrayMethodUsesToLength = require('../internals/array-method-uses-to-length');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('splice');\nvar USES_TO_LENGTH = arrayMethodUsesToLength('splice', { ACCESSORS: true, 0: 0, 1: 2 });\n\nvar max = Math.max;\nvar min = Math.min;\nvar MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF;\nvar MAXIMUM_ALLOWED_LENGTH_EXCEEDED = 'Maximum allowed length exceeded';\n\n// `Array.prototype.splice` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.splice\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT || !USES_TO_LENGTH }, {\n  splice: function splice(start, deleteCount /* , ...items */) {\n    var O = toObject(this);\n    var len = toLength(O.length);\n    var actualStart = toAbsoluteIndex(start, len);\n    var argumentsLength = arguments.length;\n    var insertCount, actualDeleteCount, A, k, from, to;\n    if (argumentsLength === 0) {\n      insertCount = actualDeleteCount = 0;\n    } else if (argumentsLength === 1) {\n      insertCount = 0;\n      actualDeleteCount = len - actualStart;\n    } else {\n      insertCount = argumentsLength - 2;\n      actualDeleteCount = min(max(toInteger(deleteCount), 0), len - actualStart);\n    }\n    if (len + insertCount - actualDeleteCount > MAX_SAFE_INTEGER) {\n      throw TypeError(MAXIMUM_ALLOWED_LENGTH_EXCEEDED);\n    }\n    A = arraySpeciesCreate(O, actualDeleteCount);\n    for (k = 0; k < actualDeleteCount; k++) {\n      from = actualStart + k;\n      if (from in O) createProperty(A, k, O[from]);\n    }\n    A.length = actualDeleteCount;\n    if (insertCount < actualDeleteCount) {\n      for (k = actualStart; k < len - actualDeleteCount; k++) {\n        from = k + actualDeleteCount;\n        to = k + insertCount;\n        if (from in O) O[to] = O[from];\n        else delete O[to];\n      }\n      for (k = len; k > len - actualDeleteCount + insertCount; k--) delete O[k - 1];\n    } else if (insertCount > actualDeleteCount) {\n      for (k = len - actualDeleteCount; k > actualStart; k--) {\n        from = k + actualDeleteCount - 1;\n        to = k + insertCount - 1;\n        if (from in O) O[to] = O[from];\n        else delete O[to];\n      }\n    }\n    for (k = 0; k < insertCount; k++) {\n      O[k + actualStart] = arguments[k + 2];\n    }\n    O.length = len - actualDeleteCount + insertCount;\n    return A;\n  }\n});\n", "var parent = require('../../es/instance/filter');\n\nmodule.exports = parent;\n", "var filter = require('../array/virtual/filter');\n\nvar ArrayPrototype = Array.prototype;\n\nmodule.exports = function (it) {\n  var own = it.filter;\n  return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.filter) ? filter : own;\n};\n", "require('../../../modules/es.array.filter');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Array').filter;\n", "'use strict';\nvar $ = require('../internals/export');\nvar $filter = require('../internals/array-iteration').filter;\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\nvar arrayMethodUsesToLength = require('../internals/array-method-uses-to-length');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('filter');\n// Edge 14- issue\nvar USES_TO_LENGTH = arrayMethodUsesToLength('filter');\n\n// `Array.prototype.filter` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.filter\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT || !USES_TO_LENGTH }, {\n  filter: function filter(callbackfn /* , thisArg */) {\n    return $filter(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\n", "var parent = require('../../es/instance/includes');\n\nmodule.exports = parent;\n", "var arrayIncludes = require('../array/virtual/includes');\nvar stringIncludes = require('../string/virtual/includes');\n\nvar ArrayPrototype = Array.prototype;\nvar StringPrototype = String.prototype;\n\nmodule.exports = function (it) {\n  var own = it.includes;\n  if (it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.includes)) return arrayIncludes;\n  if (typeof it === 'string' || it === StringPrototype || (it instanceof String && own === StringPrototype.includes)) {\n    return stringIncludes;\n  } return own;\n};\n", "require('../../../modules/es.array.includes');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Array').includes;\n", "'use strict';\nvar $ = require('../internals/export');\nvar $includes = require('../internals/array-includes').includes;\nvar addToUnscopables = require('../internals/add-to-unscopables');\nvar arrayMethodUsesToLength = require('../internals/array-method-uses-to-length');\n\nvar USES_TO_LENGTH = arrayMethodUsesToLength('indexOf', { ACCESSORS: true, 1: 0 });\n\n// `Array.prototype.includes` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.includes\n$({ target: 'Array', proto: true, forced: !USES_TO_LENGTH }, {\n  includes: function includes(el /* , fromIndex = 0 */) {\n    return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\n\n// https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('includes');\n", "require('../../../modules/es.string.includes');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('String').includes;\n", "'use strict';\nvar $ = require('../internals/export');\nvar notARegExp = require('../internals/not-a-regexp');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar correctIsRegExpLogic = require('../internals/correct-is-regexp-logic');\n\n// `String.prototype.includes` method\n// https://tc39.github.io/ecma262/#sec-string.prototype.includes\n$({ target: 'String', proto: true, forced: !correctIsRegExpLogic('includes') }, {\n  includes: function includes(searchString /* , position = 0 */) {\n    return !!~String(requireObjectCoercible(this))\n      .indexOf(notARegExp(searchString), arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\n", "var isRegExp = require('../internals/is-regexp');\n\nmodule.exports = function (it) {\n  if (isRegExp(it)) {\n    throw TypeError(\"The method doesn't accept regular expressions\");\n  } return it;\n};\n", "var isObject = require('../internals/is-object');\nvar classof = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar MATCH = wellKnownSymbol('match');\n\n// `IsRegExp` abstract operation\n// https://tc39.github.io/ecma262/#sec-isregexp\nmodule.exports = function (it) {\n  var isRegExp;\n  return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : classof(it) == 'RegExp');\n};\n", "var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar MATCH = wellKnownSymbol('match');\n\nmodule.exports = function (METHOD_NAME) {\n  var regexp = /./;\n  try {\n    '/./'[METHOD_NAME](regexp);\n  } catch (e) {\n    try {\n      regexp[MATCH] = false;\n      return '/./'[METHOD_NAME](regexp);\n    } catch (f) { /* empty */ }\n  } return false;\n};\n", "var parent = require('../../es/instance/bind');\n\nmodule.exports = parent;\n", "var bind = require('../function/virtual/bind');\n\nvar FunctionPrototype = Function.prototype;\n\nmodule.exports = function (it) {\n  var own = it.bind;\n  return it === FunctionPrototype || (it instanceof Function && own === FunctionPrototype.bind) ? bind : own;\n};\n", "require('../../../modules/es.function.bind');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Function').bind;\n", "var $ = require('../internals/export');\nvar bind = require('../internals/function-bind');\n\n// `Function.prototype.bind` method\n// https://tc39.github.io/ecma262/#sec-function.prototype.bind\n$({ target: 'Function', proto: true }, {\n  bind: bind\n});\n", "'use strict';\nvar aFunction = require('../internals/a-function');\nvar isObject = require('../internals/is-object');\n\nvar slice = [].slice;\nvar factories = {};\n\nvar construct = function (C, argsLength, args) {\n  if (!(argsLength in factories)) {\n    for (var list = [], i = 0; i < argsLength; i++) list[i] = 'a[' + i + ']';\n    // eslint-disable-next-line no-new-func\n    factories[argsLength] = Function('C,a', 'return new C(' + list.join(',') + ')');\n  } return factories[argsLength](C, args);\n};\n\n// `Function.prototype.bind` method implementation\n// https://tc39.github.io/ecma262/#sec-function.prototype.bind\nmodule.exports = Function.bind || function bind(that /* , ...args */) {\n  var fn = aFunction(this);\n  var partArgs = slice.call(arguments, 1);\n  var boundFunction = function bound(/* args... */) {\n    var args = partArgs.concat(slice.call(arguments));\n    return this instanceof boundFunction ? construct(fn, args.length, args) : fn.apply(that, args);\n  };\n  if (isObject(fn.prototype)) boundFunction.prototype = fn.prototype;\n  return boundFunction;\n};\n", "module.exports = require(\"core-js-pure/features/symbol/iterator\");", "var parent = require('../../es/symbol/iterator');\n\nmodule.exports = parent;\n", "require('../../modules/es.symbol.iterator');\nrequire('../../modules/es.string.iterator');\nrequire('../../modules/web.dom-collections.iterator');\nvar WrappedWellKnownSymbolModule = require('../../internals/well-known-symbol-wrapped');\n\nmodule.exports = WrappedWellKnownSymbolModule.f('iterator');\n", "module.exports = require(\"core-js-pure/features/symbol\");", "var parent = require('../../es/symbol');\nrequire('../../modules/esnext.symbol.async-dispose');\nrequire('../../modules/esnext.symbol.dispose');\nrequire('../../modules/esnext.symbol.observable');\nrequire('../../modules/esnext.symbol.pattern-match');\n// TODO: Remove from `core-js@4`\nrequire('../../modules/esnext.symbol.replace-all');\n\nmodule.exports = parent;\n", "require('../../modules/es.array.concat');\nrequire('../../modules/es.object.to-string');\nrequire('../../modules/es.symbol');\nrequire('../../modules/es.symbol.async-iterator');\nrequire('../../modules/es.symbol.description');\nrequire('../../modules/es.symbol.has-instance');\nrequire('../../modules/es.symbol.is-concat-spreadable');\nrequire('../../modules/es.symbol.iterator');\nrequire('../../modules/es.symbol.match');\nrequire('../../modules/es.symbol.match-all');\nrequire('../../modules/es.symbol.replace');\nrequire('../../modules/es.symbol.search');\nrequire('../../modules/es.symbol.species');\nrequire('../../modules/es.symbol.split');\nrequire('../../modules/es.symbol.to-primitive');\nrequire('../../modules/es.symbol.to-string-tag');\nrequire('../../modules/es.symbol.unscopables');\nrequire('../../modules/es.math.to-string-tag');\nrequire('../../modules/es.json.to-string-tag');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Symbol;\n", "'use strict';\nvar $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar isArray = require('../internals/is-array');\nvar isObject = require('../internals/is-object');\nvar toObject = require('../internals/to-object');\nvar toLength = require('../internals/to-length');\nvar createProperty = require('../internals/create-property');\nvar arraySpeciesCreate = require('../internals/array-species-create');\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar V8_VERSION = require('../internals/engine-v8-version');\n\nvar IS_CONCAT_SPREADABLE = wellKnownSymbol('isConcatSpreadable');\nvar MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF;\nvar MAXIMUM_ALLOWED_INDEX_EXCEEDED = 'Maximum allowed index exceeded';\n\n// We can't use this feature detection in V8 since it causes\n// deoptimization and serious performance degradation\n// https://github.com/zloirock/core-js/issues/679\nvar IS_CONCAT_SPREADABLE_SUPPORT = V8_VERSION >= 51 || !fails(function () {\n  var array = [];\n  array[IS_CONCAT_SPREADABLE] = false;\n  return array.concat()[0] !== array;\n});\n\nvar SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('concat');\n\nvar isConcatSpreadable = function (O) {\n  if (!isObject(O)) return false;\n  var spreadable = O[IS_CONCAT_SPREADABLE];\n  return spreadable !== undefined ? !!spreadable : isArray(O);\n};\n\nvar FORCED = !IS_CONCAT_SPREADABLE_SUPPORT || !SPECIES_SUPPORT;\n\n// `Array.prototype.concat` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.concat\n// with adding support of @@isConcatSpreadable and @@species\n$({ target: 'Array', proto: true, forced: FORCED }, {\n  concat: function concat(arg) { // eslint-disable-line no-unused-vars\n    var O = toObject(this);\n    var A = arraySpeciesCreate(O, 0);\n    var n = 0;\n    var i, k, length, len, E;\n    for (i = -1, length = arguments.length; i < length; i++) {\n      E = i === -1 ? O : arguments[i];\n      if (isConcatSpreadable(E)) {\n        len = toLength(E.length);\n        if (n + len > MAX_SAFE_INTEGER) throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED);\n        for (k = 0; k < len; k++, n++) if (k in E) createProperty(A, n, E[k]);\n      } else {\n        if (n >= MAX_SAFE_INTEGER) throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED);\n        createProperty(A, n++, E);\n      }\n    }\n    A.length = n;\n    return A;\n  }\n});\n", "'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar getBuiltIn = require('../internals/get-built-in');\nvar IS_PURE = require('../internals/is-pure');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar NATIVE_SYMBOL = require('../internals/native-symbol');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\nvar fails = require('../internals/fails');\nvar has = require('../internals/has');\nvar isArray = require('../internals/is-array');\nvar isObject = require('../internals/is-object');\nvar anObject = require('../internals/an-object');\nvar toObject = require('../internals/to-object');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPrimitive = require('../internals/to-primitive');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar nativeObjectCreate = require('../internals/object-create');\nvar objectKeys = require('../internals/object-keys');\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertyNamesExternal = require('../internals/object-get-own-property-names-external');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar definePropertyModule = require('../internals/object-define-property');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefine = require('../internals/redefine');\nvar shared = require('../internals/shared');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar uid = require('../internals/uid');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar wrappedWellKnownSymbolModule = require('../internals/well-known-symbol-wrapped');\nvar defineWellKnownSymbol = require('../internals/define-well-known-symbol');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar InternalStateModule = require('../internals/internal-state');\nvar $forEach = require('../internals/array-iteration').forEach;\n\nvar HIDDEN = sharedKey('hidden');\nvar SYMBOL = 'Symbol';\nvar PROTOTYPE = 'prototype';\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(SYMBOL);\nvar ObjectPrototype = Object[PROTOTYPE];\nvar $Symbol = global.Symbol;\nvar $stringify = getBuiltIn('JSON', 'stringify');\nvar nativeGetOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\nvar nativeDefineProperty = definePropertyModule.f;\nvar nativeGetOwnPropertyNames = getOwnPropertyNamesExternal.f;\nvar nativePropertyIsEnumerable = propertyIsEnumerableModule.f;\nvar AllSymbols = shared('symbols');\nvar ObjectPrototypeSymbols = shared('op-symbols');\nvar StringToSymbolRegistry = shared('string-to-symbol-registry');\nvar SymbolToStringRegistry = shared('symbol-to-string-registry');\nvar WellKnownSymbolsStore = shared('wks');\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar USE_SETTER = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDescriptor = DESCRIPTORS && fails(function () {\n  return nativeObjectCreate(nativeDefineProperty({}, 'a', {\n    get: function () { return nativeDefineProperty(this, 'a', { value: 7 }).a; }\n  })).a != 7;\n}) ? function (O, P, Attributes) {\n  var ObjectPrototypeDescriptor = nativeGetOwnPropertyDescriptor(ObjectPrototype, P);\n  if (ObjectPrototypeDescriptor) delete ObjectPrototype[P];\n  nativeDefineProperty(O, P, Attributes);\n  if (ObjectPrototypeDescriptor && O !== ObjectPrototype) {\n    nativeDefineProperty(ObjectPrototype, P, ObjectPrototypeDescriptor);\n  }\n} : nativeDefineProperty;\n\nvar wrap = function (tag, description) {\n  var symbol = AllSymbols[tag] = nativeObjectCreate($Symbol[PROTOTYPE]);\n  setInternalState(symbol, {\n    type: SYMBOL,\n    tag: tag,\n    description: description\n  });\n  if (!DESCRIPTORS) symbol.description = description;\n  return symbol;\n};\n\nvar isSymbol = USE_SYMBOL_AS_UID ? function (it) {\n  return typeof it == 'symbol';\n} : function (it) {\n  return Object(it) instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(O, P, Attributes) {\n  if (O === ObjectPrototype) $defineProperty(ObjectPrototypeSymbols, P, Attributes);\n  anObject(O);\n  var key = toPrimitive(P, true);\n  anObject(Attributes);\n  if (has(AllSymbols, key)) {\n    if (!Attributes.enumerable) {\n      if (!has(O, HIDDEN)) nativeDefineProperty(O, HIDDEN, createPropertyDescriptor(1, {}));\n      O[HIDDEN][key] = true;\n    } else {\n      if (has(O, HIDDEN) && O[HIDDEN][key]) O[HIDDEN][key] = false;\n      Attributes = nativeObjectCreate(Attributes, { enumerable: createPropertyDescriptor(0, false) });\n    } return setSymbolDescriptor(O, key, Attributes);\n  } return nativeDefineProperty(O, key, Attributes);\n};\n\nvar $defineProperties = function defineProperties(O, Properties) {\n  anObject(O);\n  var properties = toIndexedObject(Properties);\n  var keys = objectKeys(properties).concat($getOwnPropertySymbols(properties));\n  $forEach(keys, function (key) {\n    if (!DESCRIPTORS || $propertyIsEnumerable.call(properties, key)) $defineProperty(O, key, properties[key]);\n  });\n  return O;\n};\n\nvar $create = function create(O, Properties) {\n  return Properties === undefined ? nativeObjectCreate(O) : $defineProperties(nativeObjectCreate(O), Properties);\n};\n\nvar $propertyIsEnumerable = function propertyIsEnumerable(V) {\n  var P = toPrimitive(V, true);\n  var enumerable = nativePropertyIsEnumerable.call(this, P);\n  if (this === ObjectPrototype && has(AllSymbols, P) && !has(ObjectPrototypeSymbols, P)) return false;\n  return enumerable || !has(this, P) || !has(AllSymbols, P) || has(this, HIDDEN) && this[HIDDEN][P] ? enumerable : true;\n};\n\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(O, P) {\n  var it = toIndexedObject(O);\n  var key = toPrimitive(P, true);\n  if (it === ObjectPrototype && has(AllSymbols, key) && !has(ObjectPrototypeSymbols, key)) return;\n  var descriptor = nativeGetOwnPropertyDescriptor(it, key);\n  if (descriptor && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) {\n    descriptor.enumerable = true;\n  }\n  return descriptor;\n};\n\nvar $getOwnPropertyNames = function getOwnPropertyNames(O) {\n  var names = nativeGetOwnPropertyNames(toIndexedObject(O));\n  var result = [];\n  $forEach(names, function (key) {\n    if (!has(AllSymbols, key) && !has(hiddenKeys, key)) result.push(key);\n  });\n  return result;\n};\n\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(O) {\n  var IS_OBJECT_PROTOTYPE = O === ObjectPrototype;\n  var names = nativeGetOwnPropertyNames(IS_OBJECT_PROTOTYPE ? ObjectPrototypeSymbols : toIndexedObject(O));\n  var result = [];\n  $forEach(names, function (key) {\n    if (has(AllSymbols, key) && (!IS_OBJECT_PROTOTYPE || has(ObjectPrototype, key))) {\n      result.push(AllSymbols[key]);\n    }\n  });\n  return result;\n};\n\n// `Symbol` constructor\n// https://tc39.github.io/ecma262/#sec-symbol-constructor\nif (!NATIVE_SYMBOL) {\n  $Symbol = function Symbol() {\n    if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor');\n    var description = !arguments.length || arguments[0] === undefined ? undefined : String(arguments[0]);\n    var tag = uid(description);\n    var setter = function (value) {\n      if (this === ObjectPrototype) setter.call(ObjectPrototypeSymbols, value);\n      if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n      setSymbolDescriptor(this, tag, createPropertyDescriptor(1, value));\n    };\n    if (DESCRIPTORS && USE_SETTER) setSymbolDescriptor(ObjectPrototype, tag, { configurable: true, set: setter });\n    return wrap(tag, description);\n  };\n\n  redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n    return getInternalState(this).tag;\n  });\n\n  redefine($Symbol, 'withoutSetter', function (description) {\n    return wrap(uid(description), description);\n  });\n\n  propertyIsEnumerableModule.f = $propertyIsEnumerable;\n  definePropertyModule.f = $defineProperty;\n  getOwnPropertyDescriptorModule.f = $getOwnPropertyDescriptor;\n  getOwnPropertyNamesModule.f = getOwnPropertyNamesExternal.f = $getOwnPropertyNames;\n  getOwnPropertySymbolsModule.f = $getOwnPropertySymbols;\n\n  wrappedWellKnownSymbolModule.f = function (name) {\n    return wrap(wellKnownSymbol(name), name);\n  };\n\n  if (DESCRIPTORS) {\n    // https://github.com/tc39/proposal-Symbol-description\n    nativeDefineProperty($Symbol[PROTOTYPE], 'description', {\n      configurable: true,\n      get: function description() {\n        return getInternalState(this).description;\n      }\n    });\n    if (!IS_PURE) {\n      redefine(ObjectPrototype, 'propertyIsEnumerable', $propertyIsEnumerable, { unsafe: true });\n    }\n  }\n}\n\n$({ global: true, wrap: true, forced: !NATIVE_SYMBOL, sham: !NATIVE_SYMBOL }, {\n  Symbol: $Symbol\n});\n\n$forEach(objectKeys(WellKnownSymbolsStore), function (name) {\n  defineWellKnownSymbol(name);\n});\n\n$({ target: SYMBOL, stat: true, forced: !NATIVE_SYMBOL }, {\n  // `Symbol.for` method\n  // https://tc39.github.io/ecma262/#sec-symbol.for\n  'for': function (key) {\n    var string = String(key);\n    if (has(StringToSymbolRegistry, string)) return StringToSymbolRegistry[string];\n    var symbol = $Symbol(string);\n    StringToSymbolRegistry[string] = symbol;\n    SymbolToStringRegistry[symbol] = string;\n    return symbol;\n  },\n  // `Symbol.keyFor` method\n  // https://tc39.github.io/ecma262/#sec-symbol.keyfor\n  keyFor: function keyFor(sym) {\n    if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol');\n    if (has(SymbolToStringRegistry, sym)) return SymbolToStringRegistry[sym];\n  },\n  useSetter: function () { USE_SETTER = true; },\n  useSimple: function () { USE_SETTER = false; }\n});\n\n$({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL, sham: !DESCRIPTORS }, {\n  // `Object.create` method\n  // https://tc39.github.io/ecma262/#sec-object.create\n  create: $create,\n  // `Object.defineProperty` method\n  // https://tc39.github.io/ecma262/#sec-object.defineproperty\n  defineProperty: $defineProperty,\n  // `Object.defineProperties` method\n  // https://tc39.github.io/ecma262/#sec-object.defineproperties\n  defineProperties: $defineProperties,\n  // `Object.getOwnPropertyDescriptor` method\n  // https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptors\n  getOwnPropertyDescriptor: $getOwnPropertyDescriptor\n});\n\n$({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL }, {\n  // `Object.getOwnPropertyNames` method\n  // https://tc39.github.io/ecma262/#sec-object.getownpropertynames\n  getOwnPropertyNames: $getOwnPropertyNames,\n  // `Object.getOwnPropertySymbols` method\n  // https://tc39.github.io/ecma262/#sec-object.getownpropertysymbols\n  getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives\n// https://bugs.chromium.org/p/v8/issues/detail?id=3443\n$({ target: 'Object', stat: true, forced: fails(function () { getOwnPropertySymbolsModule.f(1); }) }, {\n  getOwnPropertySymbols: function getOwnPropertySymbols(it) {\n    return getOwnPropertySymbolsModule.f(toObject(it));\n  }\n});\n\n// `JSON.stringify` method behavior with symbols\n// https://tc39.github.io/ecma262/#sec-json.stringify\nif ($stringify) {\n  var FORCED_JSON_STRINGIFY = !NATIVE_SYMBOL || fails(function () {\n    var symbol = $Symbol();\n    // MS Edge converts symbol values to JSON as {}\n    return $stringify([symbol]) != '[null]'\n      // WebKit converts symbol values to JSON as null\n      || $stringify({ a: symbol }) != '{}'\n      // V8 throws on boxed symbols\n      || $stringify(Object(symbol)) != '{}';\n  });\n\n  $({ target: 'JSON', stat: true, forced: FORCED_JSON_STRINGIFY }, {\n    // eslint-disable-next-line no-unused-vars\n    stringify: function stringify(it, replacer, space) {\n      var args = [it];\n      var index = 1;\n      var $replacer;\n      while (arguments.length > index) args.push(arguments[index++]);\n      $replacer = replacer;\n      if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n      if (!isArray(replacer)) replacer = function (key, value) {\n        if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n        if (!isSymbol(value)) return value;\n      };\n      args[1] = replacer;\n      return $stringify.apply(null, args);\n    }\n  });\n}\n\n// `Symbol.prototype[@@toPrimitive]` method\n// https://tc39.github.io/ecma262/#sec-symbol.prototype-@@toprimitive\nif (!$Symbol[PROTOTYPE][TO_PRIMITIVE]) {\n  createNonEnumerableProperty($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n}\n// `Symbol.prototype[@@toStringTag]` property\n// https://tc39.github.io/ecma262/#sec-symbol.prototype-@@tostringtag\nsetToStringTag($Symbol, SYMBOL);\n\nhiddenKeys[HIDDEN] = true;\n", "var toIndexedObject = require('../internals/to-indexed-object');\nvar nativeGetOwnPropertyNames = require('../internals/object-get-own-property-names').f;\n\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n  ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n  try {\n    return nativeGetOwnPropertyNames(it);\n  } catch (error) {\n    return windowNames.slice();\n  }\n};\n\n// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nmodule.exports.f = function getOwnPropertyNames(it) {\n  return windowNames && toString.call(it) == '[object Window]'\n    ? getWindowNames(it)\n    : nativeGetOwnPropertyNames(toIndexedObject(it));\n};\n", "var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.asyncIterator` well-known symbol\n// https://tc39.github.io/ecma262/#sec-symbol.asynciterator\ndefineWellKnownSymbol('asyncIterator');\n", "// empty\n", "var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.hasInstance` well-known symbol\n// https://tc39.github.io/ecma262/#sec-symbol.hasinstance\ndefineWellKnownSymbol('hasInstance');\n", "var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.isConcatSpreadable` well-known symbol\n// https://tc39.github.io/ecma262/#sec-symbol.isconcatspreadable\ndefineWellKnownSymbol('isConcatSpreadable');\n", "var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.match` well-known symbol\n// https://tc39.github.io/ecma262/#sec-symbol.match\ndefineWellKnownSymbol('match');\n", "var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.matchAll` well-known symbol\ndefineWellKnownSymbol('matchAll');\n", "var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.replace` well-known symbol\n// https://tc39.github.io/ecma262/#sec-symbol.replace\ndefineWellKnownSymbol('replace');\n", "var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.search` well-known symbol\n// https://tc39.github.io/ecma262/#sec-symbol.search\ndefineWellKnownSymbol('search');\n", "var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.species` well-known symbol\n// https://tc39.github.io/ecma262/#sec-symbol.species\ndefineWellKnownSymbol('species');\n", "var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.split` well-known symbol\n// https://tc39.github.io/ecma262/#sec-symbol.split\ndefineWellKnownSymbol('split');\n", "var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.toPrimitive` well-known symbol\n// https://tc39.github.io/ecma262/#sec-symbol.toprimitive\ndefineWellKnownSymbol('toPrimitive');\n", "var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.toStringTag` well-known symbol\n// https://tc39.github.io/ecma262/#sec-symbol.tostringtag\ndefineWellKnownSymbol('toStringTag');\n", "var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.unscopables` well-known symbol\n// https://tc39.github.io/ecma262/#sec-symbol.unscopables\ndefineWellKnownSymbol('unscopables');\n", "var setToStringTag = require('../internals/set-to-string-tag');\n\n// Math[@@toStringTag] property\n// https://tc39.github.io/ecma262/#sec-math-@@tostringtag\nsetToStringTag(Math, 'Math', true);\n", "var global = require('../internals/global');\nvar setToStringTag = require('../internals/set-to-string-tag');\n\n// JSON[@@toStringTag] property\n// https://tc39.github.io/ecma262/#sec-json-@@tostringtag\nsetToStringTag(global.JSON, 'JSON', true);\n", "var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.asyncDispose` well-known symbol\n// https://github.com/tc39/proposal-using-statement\ndefineWellKnownSymbol('asyncDispose');\n", "var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.dispose` well-known symbol\n// https://github.com/tc39/proposal-using-statement\ndefineWellKnownSymbol('dispose');\n", "var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.observable` well-known symbol\n// https://github.com/tc39/proposal-observable\ndefineWellKnownSymbol('observable');\n", "var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.patternMatch` well-known symbol\n// https://github.com/tc39/proposal-pattern-matching\ndefineWellKnownSymbol('patternMatch');\n", "// TODO: remove from `core-js@4`\nvar defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\ndefineWellKnownSymbol('replaceAll');\n", "module.exports = require(\"core-js-pure/stable/parse-int\");", "var parent = require('../es/parse-int');\n\nmodule.exports = parent;\n", "require('../modules/es.parse-int');\nvar path = require('../internals/path');\n\nmodule.exports = path.parseInt;\n", "var $ = require('../internals/export');\nvar parseIntImplementation = require('../internals/number-parse-int');\n\n// `parseInt` method\n// https://tc39.github.io/ecma262/#sec-parseint-string-radix\n$({ global: true, forced: parseInt != parseIntImplementation }, {\n  parseInt: parseIntImplementation\n});\n", "var global = require('../internals/global');\nvar trim = require('../internals/string-trim').trim;\nvar whitespaces = require('../internals/whitespaces');\n\nvar $parseInt = global.parseInt;\nvar hex = /^[+-]?0[Xx]/;\nvar FORCED = $parseInt(whitespaces + '08') !== 8 || $parseInt(whitespaces + '0x16') !== 22;\n\n// `parseInt` method\n// https://tc39.github.io/ecma262/#sec-parseint-string-radix\nmodule.exports = FORCED ? function parseInt(string, radix) {\n  var S = trim(String(string));\n  return $parseInt(S, (radix >>> 0) || (hex.test(S) ? 16 : 10));\n} : $parseInt;\n", "var parent = require('../../es/instance/slice');\n\nmodule.exports = parent;\n", "var slice = require('../array/virtual/slice');\n\nvar ArrayPrototype = Array.prototype;\n\nmodule.exports = function (it) {\n  var own = it.slice;\n  return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.slice) ? slice : own;\n};\n", "require('../../../modules/es.array.slice');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Array').slice;\n", "'use strict';\nvar $ = require('../internals/export');\nvar isObject = require('../internals/is-object');\nvar isArray = require('../internals/is-array');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar toLength = require('../internals/to-length');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar createProperty = require('../internals/create-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\nvar arrayMethodUsesToLength = require('../internals/array-method-uses-to-length');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('slice');\nvar USES_TO_LENGTH = arrayMethodUsesToLength('slice', { ACCESSORS: true, 0: 0, 1: 2 });\n\nvar SPECIES = wellKnownSymbol('species');\nvar nativeSlice = [].slice;\nvar max = Math.max;\n\n// `Array.prototype.slice` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.slice\n// fallback for not array-like ES3 strings and DOM objects\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT || !USES_TO_LENGTH }, {\n  slice: function slice(start, end) {\n    var O = toIndexedObject(this);\n    var length = toLength(O.length);\n    var k = toAbsoluteIndex(start, length);\n    var fin = toAbsoluteIndex(end === undefined ? length : end, length);\n    // inline `ArraySpeciesCreate` for usage native `Array#slice` where it's possible\n    var Constructor, result, n;\n    if (isArray(O)) {\n      Constructor = O.constructor;\n      // cross-realm fallback\n      if (typeof Constructor == 'function' && (Constructor === Array || isArray(Constructor.prototype))) {\n        Constructor = undefined;\n      } else if (isObject(Constructor)) {\n        Constructor = Constructor[SPECIES];\n        if (Constructor === null) Constructor = undefined;\n      }\n      if (Constructor === Array || Constructor === undefined) {\n        return nativeSlice.call(O, k, fin);\n      }\n    }\n    result = new (Constructor === undefined ? Array : Constructor)(max(fin - k, 0));\n    for (n = 0; k < fin; k++, n++) if (k in O) createProperty(result, n, O[k]);\n    result.length = n;\n    return result;\n  }\n});\n", "require('../modules/web.timers');\nvar path = require('../internals/path');\n\nmodule.exports = path.setTimeout;\n", "var $ = require('../internals/export');\nvar global = require('../internals/global');\nvar userAgent = require('../internals/engine-user-agent');\n\nvar slice = [].slice;\nvar MSIE = /MSIE .\\./.test(userAgent); // <- dirty ie9- check\n\nvar wrap = function (scheduler) {\n  return function (handler, timeout /* , ...arguments */) {\n    var boundArgs = arguments.length > 2;\n    var args = boundArgs ? slice.call(arguments, 2) : undefined;\n    return scheduler(boundArgs ? function () {\n      // eslint-disable-next-line no-new-func\n      (typeof handler == 'function' ? handler : Function(handler)).apply(this, args);\n    } : handler, timeout);\n  };\n};\n\n// ie9- setTimeout & setInterval additional parameters fix\n// https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#timers\n$({ global: true, bind: true, forced: MSIE }, {\n  // `setTimeout` method\n  // https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#dom-settimeout\n  setTimeout: wrap(global.setTimeout),\n  // `setInterval` method\n  // https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#dom-setinterval\n  setInterval: wrap(global.setInterval)\n});\n", "/**\n * @description 编辑器配置\n * @author wangfupeng\n */\n\nimport menusConfig, {\n    EmotionsType,\n    FontSizeConfType,\n    IndentationType,\n    tooltipPositionType,\n    FontStyleType,\n} from './menus'\nimport eventsConfig from './events'\nimport styleConfig from './style'\nimport pasteConfig from './paste'\nimport cmdConfig from './cmd'\nimport imageConfig, { UploadImageHooksType } from './image'\nimport textConfig from './text'\nimport langConfig from './lang'\nimport historyConfig from './history'\nimport videoConfig, { UploadVideoHooksType } from './video'\n\n// 字典类型\nexport type DicType = {\n    [key: string]: string\n}\n\n// 定义配置项的类型规范\nexport type ConfigType = {\n    height: number\n    languageType: string[]\n    languageTab: string\n    menus: string[]\n    excludeMenus: string[]\n    fontNames: FontStyleType\n    lineHeights: string[]\n    showMenuTooltips: boolean\n    indentation: IndentationType\n    fontSizes: FontSizeConfType\n    colors: string[]\n    emotions: EmotionsType[]\n    zIndex: number\n    onchange: Function | null\n    onfocus: Function\n    onblur: Function\n    onchangeTimeout: number\n    pasteFilterStyle: boolean\n    pasteIgnoreImg: boolean\n    pasteTextHandle: Function\n    styleWithCSS: boolean\n    linkImgCallback: Function\n    onSelectionChange: Function\n\n    placeholder: string\n    zIndexFullScreen: number\n    showFullScreen: boolean\n    showLinkImg: boolean\n    showLinkImgAlt: boolean\n    showLinkImgHref: boolean\n    uploadImgAccept: string[]\n    uploadImgServer: string\n    uploadImgShowBase64: boolean\n    uploadImgMaxSize: number\n    uploadImgMaxLength: number\n    uploadFileName: string\n    uploadImgParams: DicType\n    uploadImgParamsWithUrl: boolean\n    uploadImgHeaders: DicType\n    uploadImgHooks: UploadImageHooksType\n    uploadImgTimeout: number\n    withCredentials: boolean\n    customUploadImg: Function | null\n    uploadImgFromMedia: Function | null\n    customAlert: Function\n\n    onCatalogChange: Function | null\n\n    lang: string\n    languages: typeof langConfig\n\n    linkCheck: Function\n    linkImgCheck: Function\n    compatibleMode: () => boolean\n    historyMaxSize: number\n\n    focus: boolean\n\n    onlineVideoCheck: Function\n    onlineVideoCallback: Function\n\n    showLinkVideo: Boolean\n    uploadVideoAccept: string[]\n    uploadVideoServer: string\n    uploadVideoMaxSize: number\n    uploadVideoName: string\n    uploadVideoParams: DicType\n    uploadVideoParamsWithUrl: boolean\n    uploadVideoHeaders: DicType\n    uploadVideoHooks: UploadVideoHooksType\n    uploadVideoTimeout: number\n    withVideoCredentials: boolean\n    customUploadVideo: Function | null\n    customInsertVideo: Function | null\n\n    menuTooltipPosition: tooltipPositionType\n}\n\nexport type Resource = {\n    [language: string]: ResourceLanguage\n}\n\nexport type ResourceLanguage = {\n    [namespace: string]: ResourceKey\n}\n\nexport type ResourceKey =\n    | string\n    | {\n          [key: string]: any\n      }\n\n// 合并所有的配置信息\nconst defaultConfig = Object.assign(\n    {},\n    menusConfig,\n    eventsConfig,\n    styleConfig,\n    cmdConfig,\n    pasteConfig,\n    imageConfig,\n    textConfig,\n    langConfig,\n    historyConfig,\n    videoConfig,\n    //链接校验的配置函数\n    {\n        linkCheck: function (text: string, link: string): string | boolean {\n            return true\n        },\n    }\n)\n\nexport default defaultConfig\n", "var parent = require('../../es/object/assign');\n\nmodule.exports = parent;\n", "require('../../modules/es.object.assign');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Object.assign;\n", "var $ = require('../internals/export');\nvar assign = require('../internals/object-assign');\n\n// `Object.assign` method\n// https://tc39.github.io/ecma262/#sec-object.assign\n$({ target: 'Object', stat: true, forced: Object.assign !== assign }, {\n  assign: assign\n});\n", "'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar objectKeys = require('../internals/object-keys');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar toObject = require('../internals/to-object');\nvar IndexedObject = require('../internals/indexed-object');\n\nvar nativeAssign = Object.assign;\nvar defineProperty = Object.defineProperty;\n\n// `Object.assign` method\n// https://tc39.github.io/ecma262/#sec-object.assign\nmodule.exports = !nativeAssign || fails(function () {\n  // should have correct order of operations (Edge bug)\n  if (DESCRIPTORS && nativeAssign({ b: 1 }, nativeAssign(defineProperty({}, 'a', {\n    enumerable: true,\n    get: function () {\n      defineProperty(this, 'b', {\n        value: 3,\n        enumerable: false\n      });\n    }\n  }), { b: 2 })).b !== 1) return true;\n  // should work with symbols and should have deterministic property order (V8 bug)\n  var A = {};\n  var B = {};\n  // eslint-disable-next-line no-undef\n  var symbol = Symbol();\n  var alphabet = 'abcdefghijklmnopqrst';\n  A[symbol] = 7;\n  alphabet.split('').forEach(function (chr) { B[chr] = chr; });\n  return nativeAssign({}, A)[symbol] != 7 || objectKeys(nativeAssign({}, B)).join('') != alphabet;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n  var T = toObject(target);\n  var argumentsLength = arguments.length;\n  var index = 1;\n  var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n  var propertyIsEnumerable = propertyIsEnumerableModule.f;\n  while (argumentsLength > index) {\n    var S = IndexedObject(arguments[index++]);\n    var keys = getOwnPropertySymbols ? objectKeys(S).concat(getOwnPropertySymbols(S)) : objectKeys(S);\n    var length = keys.length;\n    var j = 0;\n    var key;\n    while (length > j) {\n      key = keys[j++];\n      if (!DESCRIPTORS || propertyIsEnumerable.call(S, key)) T[key] = S[key];\n    }\n  } return T;\n} : nativeAssign;\n", "/**\n * @description 菜单配置\n * @author wangfupeng\n */\n\n// 表情菜单数据结构类型\nexport type EmotionsContentType = {\n    alt: string\n    src: string\n}\nexport type EmotionsType = {\n    title: string\n    type: string\n    content: Array<EmotionsContentType | string>\n}\n\n// font-size 类型\nexport type FontSizeConfType = {\n    [key: string]: {\n        name: string\n        value: string\n    }\n}\n\n// liuWei 2020-04-17 对于字体增加扩展类型\n// font-style 类型\nexport type FontStyleType = Array<\n    | {\n          name: string\n          value: string\n      }\n    | string\n>\n\n// indent\nexport interface IndentationOptions {\n    value: number\n    unit: string\n}\nexport type IndentationType = string | IndentationOptions\n\n// tooltip-position类型\nexport type tooltipPositionType = 'up' | 'down'\n\n/*表情菜单数据结构类型END*/\nexport default {\n    menus: [\n        'head',\n        'bold',\n        'fontSize',\n        // 'customFontSize',\n        'fontName',\n        'italic',\n        'underline',\n        'strikeThrough',\n        'indent',\n        'lineHeight',\n        'foreColor',\n        'backColor',\n        'link',\n        'list',\n        'todo',\n        'justify',\n        'quote',\n        'emoticon',\n        'image',\n        'video',\n        'table',\n        'code',\n        'splitLine',\n        'undo',\n        'redo',\n    ],\n\n    fontNames: [\n        '黑体',\n        '仿宋',\n        '楷体',\n        '标楷体',\n        '华文仿宋',\n        '华文楷体',\n        '宋体',\n        '微软雅黑',\n        'Arial',\n        'Tahoma',\n        'Verdana',\n        'Times New Roman',\n        'Courier New',\n    ],\n    //  fontNames: [{ name: '宋体', value: '宋体' }],\n\n    fontSizes: {\n        'x-small': {\n            name: '10px',\n            value: '1',\n        },\n        small: {\n            name: '13px',\n            value: '2',\n        },\n        normal: {\n            name: '16px',\n            value: '3',\n        },\n        large: {\n            name: '18px',\n            value: '4',\n        },\n        'x-large': {\n            name: '24px',\n            value: '5',\n        },\n        'xx-large': {\n            name: '32px',\n            value: '6',\n        },\n        'xxx-large': {\n            name: '48px',\n            value: '7',\n        },\n    },\n\n    // customFontSize: [ // 该菜单暂时不用 - 王福朋 20200924\n    //     { value: '9px', text: '9' },\n    //     { value: '10px', text: '10' },\n    //     { value: '12px', text: '12' },\n    //     { value: '14px', text: '14' },\n    //     { value: '16px', text: '16' },\n    //     { value: '20px', text: '20' },\n    //     { value: '42px', text: '42' },\n    //     { value: '72px', text: '72' },\n    // ],\n\n    colors: [\n        '#000000',\n        '#ffffff',\n        '#eeece0',\n        '#1c487f',\n        '#4d80bf',\n        '#c24f4a',\n        '#8baa4a',\n        '#7b5ba1',\n        '#46acc8',\n        '#f9963b',\n    ],\n\n    //插入代码语言配置\n    languageType: [\n        'Bash',\n        'C',\n        'C#',\n        'C++',\n        'CSS',\n        'Java',\n        'JavaScript',\n        'JSON',\n        'TypeScript',\n        'Plain text',\n        'Html',\n        'XML',\n        'SQL',\n        'Go',\n        'Kotlin',\n        'Lua',\n        'Markdown',\n        'PHP',\n        'Python',\n        'Shell Session',\n        'Ruby',\n    ],\n\n    languageTab: '　　　　',\n    /**\n     * 表情配置菜单\n     * 如果为emoji表情直接作为元素插入\n     * emoticon:Array<EmotionsType>\n     */\n    emotions: [\n        {\n            // tab 的标题\n            title: '表情',\n            // type -> 'emoji' / 'image'\n            type: 'emoji',\n            // content -> 数组\n            content: '😀 😃 😄 😁 😆 😅 😂 🤣 😊 😇 🙂 🙃 😉 😌 😍 😘 😗 😙 😚 😋 😛 😝 😜 🤓 😎 😏 😒 😞 😔 😟 😕 🙁 😣 😖 😫 😩 😢 😭 😤 😠 😡 😳 😱 😨 🤗 🤔 😶 😑 😬 🙄 😯 😴 😷 🤑 😈 🤡 💩 👻 💀 👀 👣'.split(\n                /\\s/\n            ),\n        },\n        {\n            // tab 的标题\n            title: '手势',\n            // type -> 'emoji' / 'image'\n            type: 'emoji',\n            // content -> 数组\n            content: '👐 🙌 👏 🤝 👍 👎 👊 ✊ 🤛 🤜 🤞 ✌️ 🤘 👌 👈 👉 👆 👇 ☝️ ✋ 🤚 🖐 🖖 👋 🤙 💪 🖕 ✍️ 🙏'.split(\n                /\\s/\n            ),\n        },\n    ],\n\n    lineHeights: ['1', '1.15', '1.6', '2', '2.5', '3'],\n\n    undoLimit: 20,\n\n    indentation: '2em',\n\n    showMenuTooltips: true,\n\n    // 菜单栏tooltip为上标还是下标\n    menuTooltipPosition: 'up',\n}\n", "/**\n * @description 事件配置\n * @author wangfupeng\n */\n\nimport { EMPTY_FN } from '../utils/const'\n\nexport type TCatalog = {\n    tag: string\n    id: string\n    text: string\n}\n\n/**\n * 提示信息\n * @param alertInfo alert info\n * @param alertType 错误提示类型\n * @param debugInfo debug info\n */\nfunction customAlert(alertInfo: string, alertType: string, debugInfo?: string): void {\n    window.alert(alertInfo)\n    if (debugInfo) {\n        console.error('wangEditor: ' + debugInfo)\n    }\n}\n\nexport default {\n    onchangeTimeout: 200,\n\n    onchange: null,\n    onfocus: EMPTY_FN,\n    onblur: EMPTY_FN,\n\n    onCatalogChange: null,\n    customAlert,\n}\n", "/**\n * @description 粘贴，配置文件\n * @author wangfupeng\n */\n\nexport default {\n    // 粘贴过滤样式，默认开启\n    pasteFilterStyle: true,\n\n    // 粘贴内容时，忽略图片。默认关闭\n    pasteIgnoreImg: false,\n\n    // 对粘贴的文字进行自定义处理，返回处理后的结果。编辑器会将处理后的结果粘贴到编辑区域中。\n    // IE 暂时不支持\n    pasteTextHandle: function (content: string): string {\n        // content 即粘贴过来的内容（html 或 纯文本），可进行自定义处理然后返回\n        return content\n    },\n}\n", "/**\n * @description 命令配置项\n * @author wangfupeng\n */\n\nexport default {\n    styleWithCSS: false, // 默认 false\n}\n", "/**\n * @description 图片相关的配置\n * @author wangfupeng\n */\n\nimport Editor from '../editor/index'\nimport { EMPTY_FN } from '../utils/const'\nimport { ResType } from '../menus/img/upload-img'\n\nexport type UploadImageHooksType = {\n    before?: (\n        xhr: XMLHttpRequest,\n        editor: Editor,\n        files: File[]\n    ) => { prevent: boolean; msg: string } | void\n    success?: (xhr: XMLHttpRequest, editor: Editor, result: ResType) => void\n    fail?: (xhr: XMLHttpRequest, editor: Editor, err: ResType | string) => void\n    error?: (xhr: XMLHttpRequest, editor: Editor) => void\n    timeout?: (xhr: XMLHttpRequest, editor: Editor) => void\n    customInsert?: (\n        inserImg: (this: Editor, src: string) => void,\n        result: ResType,\n        editor: Editor\n    ) => void\n}\n\nexport default {\n    // 网络图片校验的配置函数\n    linkImgCheck: function (src: string, alt?: string, href?: string): string | boolean {\n        return true\n    },\n    // 显示“插入网络图片”\n    showLinkImg: true,\n\n    // 显示“插入图片alt”\n    showLinkImgAlt: true,\n\n    // 显示“插入图片href”\n    showLinkImgHref: true,\n\n    // 插入图片成功之后的回调函数\n    linkImgCallback: EMPTY_FN,\n\n    // accept\n    uploadImgAccept: ['jpg', 'jpeg', 'png', 'gif', 'bmp'],\n\n    // 服务端地址\n    uploadImgServer: '',\n\n    // 使用 base64 存储图片\n    uploadImgShowBase64: false,\n\n    // 上传图片的最大体积，默认 5M\n    uploadImgMaxSize: 5 * 1024 * 1024,\n\n    // 一次最多上传多少个图片\n    uploadImgMaxLength: 100,\n\n    // 自定义上传图片的名称\n    uploadFileName: '',\n\n    // 上传图片自定义参数\n    uploadImgParams: {},\n\n    // 自定义参数拼接到 url 中\n    uploadImgParamsWithUrl: false,\n\n    // 上传图片自定义 header\n    uploadImgHeaders: {},\n\n    // 钩子函数\n    uploadImgHooks: {},\n\n    // 上传图片超时时间 ms\n    uploadImgTimeout: 10 * 1000,\n\n    // 跨域带 cookie\n    withCredentials: false,\n\n    // 自定义上传\n    customUploadImg: null,\n\n    // 从媒体库上传\n    uploadImgFromMedia: null,\n}\n", "export default {\n    lang: 'zh-CN',\n    languages: {\n        'zh-CN': {\n            wangEditor: {\n                重置: '重置',\n                插入: '插入',\n                默认: '默认',\n                创建: '创建',\n                修改: '修改',\n                如: '如',\n                请输入正文: '请输入正文',\n                menus: {\n                    title: {\n                        标题: '标题',\n                        加粗: '加粗',\n                        字号: '字号',\n                        字体: '字体',\n                        斜体: '斜体',\n                        下划线: '下划线',\n                        删除线: '删除线',\n                        缩进: '缩进',\n                        行高: '行高',\n                        文字颜色: '文字颜色',\n                        背景色: '背景色',\n                        链接: '链接',\n                        序列: '序列',\n                        对齐: '对齐',\n                        引用: '引用',\n                        表情: '表情',\n                        图片: '图片',\n                        视频: '视频',\n                        表格: '表格',\n                        代码: '代码',\n                        分割线: '分割线',\n                        恢复: '恢复',\n                        撤销: '撤销',\n                        全屏: '全屏',\n                        取消全屏: '取消全屏',\n                        待办事项: '待办事项',\n                    },\n                    dropListMenu: {\n                        设置标题: '设置标题',\n                        背景颜色: '背景颜色',\n                        文字颜色: '文字颜色',\n                        设置字号: '设置字号',\n                        设置字体: '设置字体',\n                        设置缩进: '设置缩进',\n                        对齐方式: '对齐方式',\n                        设置行高: '设置行高',\n                        序列: '序列',\n                        head: {\n                            正文: '正文',\n                        },\n                        indent: {\n                            增加缩进: '增加缩进',\n                            减少缩进: '减少缩进',\n                        },\n                        justify: {\n                            靠左: '靠左',\n                            居中: '居中',\n                            靠右: '靠右',\n                            两端: '两端',\n                        },\n                        list: {\n                            无序列表: '无序列表',\n                            有序列表: '有序列表',\n                        },\n                    },\n                    panelMenus: {\n                        emoticon: {\n                            默认: '默认',\n                            新浪: '新浪',\n                            emoji: 'emoji',\n                            手势: '手势',\n                        },\n                        image: {\n                            上传图片: '上传图片',\n                            网络图片: '网络图片',\n                            图片地址: '图片地址',\n                            图片文字说明: '图片文字说明',\n                            跳转链接: '跳转链接',\n                        },\n                        link: {\n                            链接: '链接',\n                            链接文字: '链接文字',\n                            取消链接: '取消链接',\n                            查看链接: '查看链接',\n                        },\n                        video: {\n                            插入视频: '插入视频',\n                            上传视频: '上传视频',\n                        },\n                        table: {\n                            行: '行',\n                            列: '列',\n                            的: '的',\n                            表格: '表格',\n                            添加行: '添加行',\n                            删除行: '删除行',\n                            添加列: '添加列',\n                            删除列: '删除列',\n                            设置表头: '设置表头',\n                            取消表头: '取消表头',\n                            插入表格: '插入表格',\n                            删除表格: '删除表格',\n                        },\n                        code: {\n                            删除代码: '删除代码',\n                            修改代码: '修改代码',\n                            插入代码: '插入代码',\n                        },\n                    },\n                },\n                validate: {\n                    张图片: '张图片',\n                    大于: '大于',\n                    图片链接: '图片链接',\n                    不是图片: '不是图片',\n                    返回结果: '返回结果',\n                    上传图片超时: '上传图片超时',\n                    上传图片错误: '上传图片错误',\n                    上传图片失败: '上传图片失败',\n                    插入图片错误: '插入图片错误',\n                    一次最多上传: '一次最多上传',\n                    下载链接失败: '下载链接失败',\n                    图片验证未通过: '图片验证未通过',\n                    服务器返回状态: '服务器返回状态',\n                    上传图片返回结果错误: '上传图片返回结果错误',\n                    请替换为支持的图片类型: '请替换为支持的图片类型',\n                    您插入的网络图片无法识别: '您插入的网络图片无法识别',\n                    您刚才插入的图片链接未通过编辑器校验: '您刚才插入的图片链接未通过编辑器校验',\n                    插入视频错误: '插入视频错误',\n                    视频链接: '视频链接',\n                    不是视频: '不是视频',\n                    视频验证未通过: '视频验证未通过',\n                    个视频: '个视频',\n                    上传视频超时: '上传视频超时',\n                    上传视频错误: '上传视频错误',\n                    上传视频失败: '上传视频失败',\n                    上传视频返回结果错误: '上传视频返回结果错误',\n                },\n            },\n        },\n        en: {\n            wangEditor: {\n                重置: 'reset',\n                插入: 'insert',\n                默认: 'default',\n                创建: 'create',\n                修改: 'edit',\n                如: 'like',\n                请输入正文: 'please enter the text',\n                menus: {\n                    title: {\n                        标题: 'head',\n                        加粗: 'bold',\n                        字号: 'font size',\n                        字体: 'font family',\n                        斜体: 'italic',\n                        下划线: 'underline',\n                        删除线: 'strikethrough',\n                        缩进: 'indent',\n                        行高: 'line heihgt',\n                        文字颜色: 'font color',\n                        背景色: 'background',\n                        链接: 'link',\n                        序列: 'numbered list',\n                        对齐: 'align',\n                        引用: 'quote',\n                        表情: 'emoticons',\n                        图片: 'image',\n                        视频: 'media',\n                        表格: 'table',\n                        代码: 'code',\n                        分割线: 'split line',\n                        恢复: 'redo',\n                        撤销: 'undo',\n                        全屏: 'fullscreen',\n                        取消全屏: 'cancel fullscreen',\n                        待办事项: 'todo',\n                    },\n                    dropListMenu: {\n                        设置标题: 'title',\n                        背景颜色: 'background',\n                        文字颜色: 'font color',\n                        设置字号: 'font size',\n                        设置字体: 'font family',\n                        设置缩进: 'indent',\n                        对齐方式: 'align',\n                        设置行高: 'line heihgt',\n                        序列: 'list',\n                        head: {\n                            正文: 'text',\n                        },\n                        indent: {\n                            增加缩进: 'indent',\n                            减少缩进: 'outdent',\n                        },\n                        justify: {\n                            靠左: 'left',\n                            居中: 'center',\n                            靠右: 'right',\n                            两端: 'justify',\n                        },\n                        list: {\n                            无序列表: 'unordered',\n                            有序列表: 'ordered',\n                        },\n                    },\n                    panelMenus: {\n                        emoticon: {\n                            表情: 'emoji',\n                            手势: 'gesture',\n                        },\n                        image: {\n                            上传图片: 'upload image',\n                            网络图片: 'network image',\n                            图片地址: 'image link',\n                            图片文字说明: 'image alt',\n                            跳转链接: 'hyperlink',\n                        },\n                        link: {\n                            链接: 'link',\n                            链接文字: 'link text',\n                            取消链接: 'unlink',\n                            查看链接: 'view links',\n                        },\n                        video: {\n                            插入视频: 'insert video',\n                            上传视频: 'upload local video',\n                        },\n                        table: {\n                            行: 'rows',\n                            列: 'columns',\n                            的: ' ',\n                            表格: 'table',\n                            添加行: 'insert row',\n                            删除行: 'delete row',\n                            添加列: 'insert column',\n                            删除列: 'delete column',\n                            设置表头: 'set header',\n                            取消表头: 'cancel header',\n                            插入表格: 'insert table',\n                            删除表格: 'delete table',\n                        },\n                        code: {\n                            删除代码: 'delete code',\n                            修改代码: 'edit code',\n                            插入代码: 'insert code',\n                        },\n                    },\n                },\n                validate: {\n                    张图片: 'images',\n                    大于: 'greater than',\n                    图片链接: 'image link',\n                    不是图片: 'is not image',\n                    返回结果: 'return results',\n                    上传图片超时: 'upload image timeout',\n                    上传图片错误: 'upload image error',\n                    上传图片失败: 'upload image failed',\n                    插入图片错误: 'insert image error',\n                    一次最多上传: 'once most at upload',\n                    下载链接失败: 'download link failed',\n                    图片验证未通过: 'image validate failed',\n                    服务器返回状态: 'server return status',\n                    上传图片返回结果错误: 'upload image return results error',\n                    请替换为支持的图片类型: 'please replace with a supported image type',\n                    您插入的网络图片无法识别: 'the network picture you inserted is not recognized',\n                    您刚才插入的图片链接未通过编辑器校验:\n                        'the image link you just inserted did not pass the editor verification',\n                    插入视频错误: 'insert video error',\n                    视频链接: 'video link',\n                    不是视频: 'is not video',\n                    视频验证未通过: 'video validate failed',\n                    个视频: 'videos',\n                    上传视频超时: 'upload video timeout',\n                    上传视频错误: 'upload video error',\n                    上传视频失败: 'upload video failed',\n                    上传视频返回结果错误: 'upload video return results error',\n                },\n            },\n        },\n    },\n}\n", "/**\n * @description 历史记录 - 数据缓存的模式\n * @author fangzhicong\n */\n\nimport { UA } from '../utils/util'\n\n/**\n * 是否为兼容模式。返回 true 表示当前使用兼容（内容备份）模式，否则使用标准（差异备份）模式\n */\nfunction compatibleMode() {\n    if (UA.isIE() || UA.isOldEdge) {\n        return true\n    }\n    return false\n}\n\nexport default {\n    compatibleMode,\n    historyMaxSize: 30,\n}\n", "/**\n * @description 视频相关的配置\n * @author hutianhao\n */\n\nimport Editor from '../editor/index'\nimport { EMPTY_FN } from '../utils/const'\nimport { ResType } from '../menus/video/upload-video'\n\nexport type UploadVideoHooksType = {\n    before?: (\n        xhr: XMLHttpRequest,\n        editor: Editor,\n        files: File[]\n    ) => { prevent: boolean; msg: string } | void\n    success?: (xhr: XMLHttpRequest, editor: Editor, result: ResType) => void\n    fail?: (xhr: XMLHttpRequest, editor: Editor, err: ResType | string) => void\n    error?: (xhr: XMLHttpRequest, editor: Editor) => void\n    timeout?: (xhr: XMLHttpRequest, editor: Editor) => void\n    customInsert?: (\n        inserVideo: (this: Editor, src: string) => void,\n        result: ResType,\n        editor: Editor\n    ) => void\n}\n\nexport default {\n    // 插入网络视频前的回调函数\n    onlineVideoCheck: (video: string): string | boolean => {\n        return true\n    },\n\n    // 插入网络视频成功之后的回调函数\n    onlineVideoCallback: EMPTY_FN,\n\n    // 显示“插入视频”\n    showLinkVideo: true,\n\n    // accept\n    uploadVideoAccept: ['mp4'],\n\n    // 服务端地址\n    uploadVideoServer: '',\n\n    // 上传视频的最大体积，默认 1024M\n    uploadVideoMaxSize: 1 * 1024 * 1024 * 1024,\n\n    // 一次最多上传多少个视频\n    // uploadVideoMaxLength: 2,\n\n    // 自定义上传视频的名称\n    uploadVideoName: '',\n\n    // 上传视频自定义参数\n    uploadVideoParams: {},\n\n    // 自定义参数拼接到 url 中\n    uploadVideoParamsWithUrl: false,\n\n    // 上传视频自定义 header\n    uploadVideoHeaders: {},\n\n    // 钩子函数\n    uploadVideoHooks: {},\n\n    // 上传视频超时时间 ms 默认2个小时\n    uploadVideoTimeout: 1000 * 60 * 60 * 2,\n\n    // 跨域带 cookie\n    withVideoCredentials: false,\n\n    // 自定义上传\n    customUploadVideo: null,\n\n    // 自定义插入视频\n    customInsertVideo: null,\n}\n", "/**\n * @description selection range API\n * @author wangfupeng\n */\nimport $, { DomElement } from '../utils/dom-core'\nimport { UA } from '../utils/util'\nimport Editor from './index'\nimport { EMPTY_P } from '../utils/const'\n\nclass SelectionAndRange {\n    public editor: Editor\n    private _currentRange: Range | null | undefined = null\n\n    constructor(editor: Editor) {\n        this.editor = editor\n    }\n\n    /**\n     * 获取当前 range\n     */\n    public getRange(): Range | null | undefined {\n        return this._currentRange\n    }\n\n    /**\n     * 保存选区范围\n     * @param _range 选区范围\n     */\n    public saveRange(_range?: Range): void {\n        if (_range) {\n            // 保存已有选区\n            this._currentRange = _range\n            return\n        }\n\n        // 获取当前的选区\n        const selection = window.getSelection() as Selection\n        if (selection.rangeCount === 0) {\n            return\n        }\n        const range = selection.getRangeAt(0)\n\n        // 获取选区范围的 DOM 元素\n        const $containerElem = this.getSelectionContainerElem(range)\n        if (!$containerElem?.length) {\n            // 当 选区范围内没有 DOM元素 则抛出\n            return\n        }\n        if (\n            $containerElem.attr('contenteditable') === 'false' ||\n            $containerElem.parentUntil('[contenteditable=false]')\n        ) {\n            // 这里大体意义上就是个保险\n            // 确保 编辑区域 的 contenteditable属性 的值为 true\n            return\n        }\n\n        const editor = this.editor\n        const $textElem = editor.$textElem\n        if ($textElem.isContain($containerElem)) {\n            if ($textElem.elems[0] === $containerElem.elems[0]) {\n                if ($textElem.html().trim() === EMPTY_P) {\n                    const $children = $textElem.children()\n                    const $last = $children?.last()\n                    editor.selection.createRangeByElem($last as DomElement, true, true)\n                    editor.selection.restoreSelection()\n                }\n            }\n            // 是编辑内容之内的\n            this._currentRange = range\n        }\n    }\n\n    /**\n     * 折叠选区范围\n     * @param toStart true 开始位置，false 结束位置\n     */\n    public collapseRange(toStart: boolean = false): void {\n        const range = this._currentRange\n        if (range) {\n            range.collapse(toStart)\n        }\n    }\n\n    /**\n     * 获取选区范围内的文字\n     */\n    public getSelectionText(): string {\n        const range = this._currentRange\n        if (range) {\n            return range.toString()\n        } else {\n            return ''\n        }\n    }\n\n    /**\n     * 获取选区范围的 DOM 元素\n     * @param range 选区范围\n     */\n    public getSelectionContainerElem(range?: Range): DomElement | undefined {\n        let r: Range | null | undefined\n        r = range || this._currentRange\n        let elem: Node\n        if (r) {\n            elem = r.commonAncestorContainer\n            return $(elem.nodeType === 1 ? elem : elem.parentNode)\n        }\n    }\n\n    /**\n     * 选区范围开始的 DOM 元素\n     * @param range 选区范围\n     */\n    public getSelectionStartElem(range?: Range): DomElement | undefined {\n        let r: Range | null | undefined\n        r = range || this._currentRange\n        let elem: Node\n        if (r) {\n            elem = r.startContainer\n            return $(elem.nodeType === 1 ? elem : elem.parentNode)\n        }\n    }\n\n    /**\n     * 选区范围结束的 DOM 元素\n     * @param range 选区范围\n     */\n    public getSelectionEndElem(range?: Range): DomElement | undefined {\n        let r: Range | null | undefined\n        r = range || this._currentRange\n        let elem: Node\n        if (r) {\n            elem = r.endContainer\n            return $(elem.nodeType === 1 ? elem : elem.parentNode)\n        }\n    }\n\n    /**\n     * 选区是否为空（没有选择文字）\n     */\n    public isSelectionEmpty(): boolean {\n        const range = this._currentRange\n        if (range && range.startContainer) {\n            if (range.startContainer === range.endContainer) {\n                if (range.startOffset === range.endOffset) {\n                    return true\n                }\n            }\n        }\n        return false\n    }\n\n    /**\n     * 恢复选区范围\n     */\n    public restoreSelection(): void {\n        const selection = window.getSelection()\n        const r = this._currentRange\n        if (selection && r) {\n            selection.removeAllRanges()\n            selection.addRange(r)\n        }\n    }\n\n    /**\n     * 创建一个空白（即 &#8203 字符）选区\n     */\n    public createEmptyRange(): void {\n        const editor = this.editor\n        const range = this.getRange()\n        let $elem: DomElement\n\n        if (!range) {\n            // 当前无 range\n            return\n        }\n        if (!this.isSelectionEmpty()) {\n            // 当前选区必须没有内容才可以，有内容就直接 return\n            return\n        }\n\n        try {\n            // 目前只支持 webkit 内核\n            if (UA.isWebkit()) {\n                // 插入 &#8203\n                editor.cmd.do('insertHTML', '&#8203;')\n                // 修改 offset 位置\n                range.setEnd(range.endContainer, range.endOffset + 1)\n                // 存储\n                this.saveRange(range)\n            } else {\n                $elem = $('<strong>&#8203;</strong>')\n                editor.cmd.do('insertElem', $elem)\n                this.createRangeByElem($elem, true)\n            }\n        } catch (ex) {\n            // 部分情况下会报错，兼容一下\n        }\n    }\n    /**\n     * 重新设置选区\n     * @param startDom 选区开始的元素\n     * @param endDom 选区结束的元素\n     */\n    public createRangeByElems(startDom: Node, endDom: Node): void {\n        let selection = window.getSelection ? window.getSelection() : document.getSelection()\n        //清除所有的选区\n        selection?.removeAllRanges()\n        const range = document.createRange()\n        range.setStart(startDom, 0)\n        // 设置多行标签之后，第二个参数会被h标签内的b、font标签等影响range范围的选取\n        range.setEnd(endDom, endDom.childNodes.length || 1)\n        // 保存设置好的选区\n        this.saveRange(range)\n        //恢复选区\n        this.restoreSelection()\n    }\n    /**\n     * 根据 DOM 元素设置选区\n     * @param $elem DOM 元素\n     * @param toStart true 开始位置，false 结束位置\n     * @param isContent 是否选中 $elem 的内容\n     */\n    public createRangeByElem($elem: DomElement, toStart?: boolean, isContent?: boolean): void {\n        if (!$elem.length) {\n            return\n        }\n\n        const elem = $elem.elems[0]\n        const range = document.createRange()\n\n        if (isContent) {\n            range.selectNodeContents(elem)\n        } else {\n            // 如果用户没有传入 isContent 参数，那就默认为 false\n            range.selectNode(elem)\n        }\n\n        if (toStart != null) {\n            // 传入了 toStart 参数，折叠选区。如果没传入 toStart 参数，则忽略这一步\n            range.collapse(toStart)\n\n            if (!toStart) {\n                this.saveRange(range)\n                this.editor.selection.moveCursor(elem)\n            }\n        }\n\n        // 存储 range\n        this.saveRange(range)\n    }\n\n    /**\n     * 获取 当前 选取范围的 顶级(段落) 元素\n     * @param $editor\n     */\n    public getSelectionRangeTopNodes(): DomElement[] {\n        // 清空，防止叠加元素\n        let $nodeList: DomElement[]\n\n        const $startElem = this.getSelectionStartElem()?.getNodeTop(this.editor)\n        const $endElem = this.getSelectionEndElem()?.getNodeTop(this.editor)\n\n        $nodeList = this.recordSelectionNodes($($startElem), $($endElem))\n\n        return $nodeList\n    }\n\n    /**\n     * 移动光标位置,默认情况下在尾部\n     * 有一个特殊情况是firefox下的文本节点会自动补充一个br元素，会导致自动换行\n     * 所以默认情况下在firefox下的文本节点会自动移动到br前面\n     * @param {Node} node 元素节点\n     * @param {number} position 光标的位置\n     */\n    public moveCursor(node: Node, position?: number): void {\n        const range = this.getRange()\n        //对文本节点特殊处理\n        let len: number =\n            node.nodeType === 3 ? (node.nodeValue?.length as number) : node.childNodes.length\n        if ((UA.isFirefox || UA.isIE()) && len !== 0) {\n            // firefox下在节点为文本节点和节点最后一个元素为文本节点的情况下\n            if (node.nodeType === 3 || node.childNodes[len - 1].nodeName === 'BR') {\n                len = len - 1\n            }\n        }\n        let pos: number = position ?? len\n        if (!range) {\n            return\n        }\n        if (node) {\n            range.setStart(node, pos)\n            range.setEnd(node, pos)\n            this.restoreSelection()\n        }\n    }\n\n    /**\n     * 获取光标在当前选区的位置\n     */\n    public getCursorPos(): number | undefined {\n        const selection = window.getSelection()\n\n        return selection?.anchorOffset\n    }\n\n    /**\n     * 清除当前选区的Range,notice:不影响已保存的Range\n     */\n    public clearWindowSelectionRange(): void {\n        const selection = window.getSelection()\n        if (selection) {\n            selection.removeAllRanges()\n        }\n    }\n\n    /**\n     * 记录节点 - 从选区开始节点开始 一直到匹配到选区结束节点为止\n     * @param $node 节点\n     */\n    public recordSelectionNodes($node: DomElement, $endElem: DomElement): DomElement[] {\n        let $list: DomElement[] = []\n        let isEnd = true\n        /**  \n        @author:lw\n        @description 解决ctrl+a全选报错的bug $elem.getNodeName()可能会触发$elem[0]未定义\n        **/\n        try {\n            let $NODE: DomElement = $node\n            const $textElem = this.editor.$textElem\n            // $NODE元素为空时不需要进行循环\n            while (isEnd) {\n                const $elem = $NODE?.getNodeTop(this.editor)\n                if ($elem.getNodeName() === 'BODY') isEnd = false // 兜底\n                if ($elem.length > 0) {\n                    $list.push($($NODE))\n                    // 两个边界情况：\n                    // 1. 当前元素就是我们要找的末尾元素\n                    // 2. 当前元素已经是编辑区顶级元素（否则会找到编辑区的兄弟节点，比如placeholder元素）\n                    if ($endElem?.equal($elem) || $textElem.equal($elem)) {\n                        isEnd = false\n                    } else {\n                        $NODE = $elem.getNextSibling()\n                    }\n                }\n            }\n        } catch (e) {\n            isEnd = false\n        }\n        return $list\n    }\n\n    /**\n     * 将当前 range 设置到 node 元素并初始化位置\n     * 解决编辑器内容为空时，菜单不生效的问题\n     * @param node 元素节点\n     */\n    public setRangeToElem(node: Node): void {\n        const range = this.getRange()\n        range?.setStart(node, 0)\n        range?.setEnd(node, 0)\n    }\n}\n\nexport default SelectionAndRange\n", "/**\n * @description 封装 document.execCommand\n * @author wangfupeng\n */\n\nimport $, { DomElement } from '../utils/dom-core'\nimport Editor from './index'\n\nclass Command {\n    public editor: Editor\n\n    constructor(editor: Editor) {\n        this.editor = editor\n    }\n\n    /**\n     * 执行富文本操作的命令\n     * @param name name\n     * @param value value\n     */\n    public do(name: string, value?: string | DomElement): void {\n        const editor = this.editor\n\n        if (editor.config.styleWithCSS) {\n            document.execCommand('styleWithCSS', false, 'true')\n        }\n\n        const selection = editor.selection\n\n        // 如果无选区，忽略\n        if (!selection.getRange()) {\n            return\n        }\n\n        // 恢复选取\n        selection.restoreSelection()\n\n        // 执行\n        switch (name) {\n            case 'insertHTML':\n                this.insertHTML(value as string)\n                break\n            case 'insertElem':\n                this.insertElem(value as DomElement)\n                break\n            default:\n                // 默认 command\n                this.execCommand(name, value as string)\n                break\n        }\n\n        // 修改菜单状态\n        editor.menus.changeActive()\n\n        // 最后，恢复选取保证光标在原来的位置闪烁\n        selection.saveRange()\n        selection.restoreSelection()\n    }\n\n    /**\n     * 插入 html\n     * @param html html 字符串\n     */\n    private insertHTML(html: string): void {\n        const editor = this.editor\n        const range = editor.selection.getRange()\n        if (range == null) return\n\n        if (this.queryCommandSupported('insertHTML')) {\n            // W3C\n            this.execCommand('insertHTML', html)\n        } else if (range.insertNode) {\n            // IE\n            range.deleteContents()\n            if ($(html).elems.length > 0) {\n                range.insertNode($(html).elems[0])\n            } else {\n                let newNode = document.createElement('p')\n                newNode.appendChild(document.createTextNode(html))\n                range.insertNode(newNode)\n            }\n            editor.selection.collapseRange()\n        }\n        // else if (range.pasteHTML) {\n        //     // IE <= 10\n        //     range.pasteHTML(html)\n        // }\n    }\n\n    /**\n     * 插入 DOM 元素\n     * @param $elem DOM 元素\n     */\n    private insertElem($elem: DomElement): void {\n        const editor = this.editor\n        const range = editor.selection.getRange()\n        if (range == null) return\n\n        if (range.insertNode) {\n            range.deleteContents()\n            range.insertNode($elem.elems[0])\n        }\n    }\n\n    /**\n     * 执行 document.execCommand\n     * @param name name\n     * @param value value\n     */\n    private execCommand(name: string, value: string): void {\n        document.execCommand(name, false, value)\n    }\n\n    /**\n     * 执行 document.queryCommandValue\n     * @param name name\n     */\n    public queryCommandValue(name: string): string {\n        return document.queryCommandValue(name)\n    }\n\n    /**\n     * 执行 document.queryCommandState\n     * @param name name\n     */\n    public queryCommandState(name: string): boolean {\n        return document.queryCommandState(name)\n    }\n\n    /**\n     * 执行 document.queryCommandSupported\n     * @param name name\n     */\n    public queryCommandSupported(name: string): boolean {\n        return document.queryCommandSupported(name)\n    }\n}\n\nexport default Command\n", "/**\n * @description 编辑区域，入口文件\n * @author wangfupeng\n */\n\nimport $, { DomElement } from '../utils/dom-core'\nimport Editor from '../editor/index'\nimport initEventHooks from './event-hooks/index'\nimport { UA, throttle } from '../utils/util'\nimport getChildrenJSON, { NodeListType } from './getChildrenJSON'\nimport getHtmlByNodeList from './getHtmlByNodeList'\nimport { EMPTY_P, EMPTY_P_LAST_REGEX, EMPTY_P_REGEX } from '../utils/const'\n\n/** 按键函数 */\ntype KeyBoardHandler = (event: KeyboardEvent) => unknown\n/** 普通事件回调 */\ntype EventHandler = (event?: Event) => unknown\n// 各个事件钩子函数\ntype TextEventHooks = {\n    onBlurEvents: EventHandler[]\n    changeEvents: (() => void)[] // 内容修改时\n    dropEvents: ((event: DragEvent) => unknown)[]\n    clickEvents: EventHandler[]\n    keydownEvents: KeyBoardHandler[]\n    keyupEvents: KeyBoardHandler[]\n    /** tab 键（keyCode === ）Up 时 */\n    tabUpEvents: KeyBoardHandler[]\n    /** tab 键（keyCode === 9）Down 时 */\n    tabDownEvents: KeyBoardHandler[]\n    /** enter 键（keyCode === 13）up 时 */\n    enterUpEvents: KeyBoardHandler[]\n    /** enter 键（keyCode === 13）down 时 */\n    enterDownEvents: KeyBoardHandler[]\n    /** 删除键（keyCode === 8）up 时 */\n    deleteUpEvents: KeyBoardHandler[]\n    /** 删除键（keyCode === 8）down 时 */\n    deleteDownEvents: KeyBoardHandler[]\n    /** 粘贴事件 */\n    pasteEvents: ((e: ClipboardEvent) => void)[]\n    /** 点击链接事件 */\n    linkClickEvents: ((e: DomElement) => void)[]\n    /** 点击代码事件 */\n    codeClickEvents: ((e: DomElement) => void)[]\n    /** 编辑区域滑动事件 */\n    textScrollEvents: EventHandler[]\n    /** 菜单栏被点击 */\n    toolbarClickEvents: EventHandler[]\n    /** 图片被点击事件 */\n    imgClickEvents: ((e: DomElement) => void)[]\n    /** 图片拖拽MouseDown */\n    imgDragBarMouseDownEvents: (() => void)[]\n    /** 表格点击 */\n    tableClickEvents: (($dom: DomElement, e: MouseEvent) => void)[]\n    /** 每个菜单被点击时，按理说这个不属于 txt 的，先暂时在这放着吧 */\n    menuClickEvents: (() => void)[]\n    /** droplist 菜单悬浮事件。暂时放这里 */\n    dropListMenuHoverEvents: (() => void)[]\n    /** 点击分割线时 */\n    splitLineEvents: ((e: DomElement) => void)[]\n    /** 视频点击事件 */\n    videoClickEvents: ((e: DomElement) => void)[]\n}\n\nclass Text {\n    public editor: Editor\n    public eventHooks: TextEventHooks // Text 各个事件的钩子函数，如 keyup 时要执行哪些函数\n\n    constructor(editor: Editor) {\n        this.editor = editor\n\n        this.eventHooks = {\n            onBlurEvents: [],\n            changeEvents: [],\n            dropEvents: [],\n            clickEvents: [],\n            keydownEvents: [],\n            keyupEvents: [],\n            tabUpEvents: [],\n            tabDownEvents: [],\n            enterUpEvents: [],\n            enterDownEvents: [],\n            deleteUpEvents: [],\n            deleteDownEvents: [],\n            pasteEvents: [],\n            linkClickEvents: [],\n            codeClickEvents: [],\n            textScrollEvents: [],\n            toolbarClickEvents: [],\n            imgClickEvents: [],\n            imgDragBarMouseDownEvents: [],\n            tableClickEvents: [],\n            menuClickEvents: [],\n            dropListMenuHoverEvents: [],\n            splitLineEvents: [],\n            videoClickEvents: [],\n        }\n    }\n\n    /**\n     * 初始化\n     */\n    public init(): void {\n        // 实时保存选取范围\n        this._saveRange()\n\n        // 绑定事件\n        this._bindEventHooks()\n\n        // 初始化 text 事件钩子函数\n        initEventHooks(this)\n    }\n\n    /**\n     * 切换placeholder\n     */\n    public togglePlaceholder(): void {\n        const html = this.html()\n        const $placeholder = this.editor.$textContainerElem.find('.placeholder')\n        $placeholder.hide()\n        if (this.editor.isComposing) return\n        if (!html || html === ' ') $placeholder.show()\n    }\n\n    /**\n     * 清空内容\n     */\n    public clear(): void {\n        this.html(EMPTY_P)\n    }\n\n    /**\n     * 设置/获取 html\n     * @param val html 字符串\n     */\n    public html(val?: string): void | string {\n        const editor = this.editor\n        const $textElem = editor.$textElem\n\n        // 没有 val ，则是获取 html\n        if (val == null) {\n            let html = $textElem.html()\n            // 未选中任何内容的时候点击“加粗”或者“斜体”等按钮，就得需要一个空的占位符 &#8203 ，这里替换掉\n            html = html.replace(/\\u200b/gm, '')\n            // 去掉空行\n            html = html.replace(/<p><\\/p>/gim, '')\n            // 去掉最后的 空标签\n            html = html.replace(EMPTY_P_LAST_REGEX, '')\n            // 为了避免用户在最后生成的EMPTY_P标签中编辑数据, 最后产生多余标签, 去除所有p标签上的data-we-empty-p属性\n            html = html.replace(EMPTY_P_REGEX, '<p>')\n\n            /**\n             * 这里的代码为了处理火狐多余的空行标签,但是强制删除空行标签会带来其他问题\n             * html()方法返回的的值,EMPTY_P中pr会被删除,只留下<p>,点不进去,从而产生垃圾数据\n             * 目前在末位有多个空行的情况下执行撤销重做操作,会产生一种不记录末尾空行的错觉\n             * 暂时注释, 等待进一步的兼容处理\n             */\n            // html = html.replace(/><br>(?!<)/gi, '>') // 过滤 <p><br>内容</p> 中的br\n            // html = html.replace(/(?!>)<br></gi, '<') // 过滤 <p>内容<br></p> 中的br\n\n            /**\n             * pre标签格式化\n             * html()方法理论上应当输出纯净的代码文本,但是对于是否解析html标签还没有良好的判断\n             * 如果去除hljs的标签,在解析状态下回显,会造成显示错误并且无法再通过hljs方法渲染\n             * 暂且其弃用\n             */\n            // html = formatCodeHtml(editor, html)\n\n            // 将没有自闭和的标签过滤为自闭和\n            const selfCloseHtmls: RegExpMatchArray | null = html.match(/<(img|br|hr|input)[^>]*>/gi)\n            if (selfCloseHtmls !== null) {\n                selfCloseHtmls.forEach(item => {\n                    if (!item.match(/\\/>/)) {\n                        html = html.replace(item, item.substring(0, item.length - 1) + '/>')\n                    }\n                })\n            }\n            return html\n        }\n\n        // 有 val ，则是设置 html\n        val = val.trim()\n        if (val === '') {\n            val = EMPTY_P\n        }\n        if (val.indexOf('<') !== 0) {\n            // 内容用 p 标签包裹\n            val = `<p>${val}</p>`\n        }\n        $textElem.html(val)\n\n        // 初始化选区，将光标定位到内容尾部\n        editor.initSelection()\n    }\n\n    /**\n     * 将json设置成html至编辑器\n     * @param nodeList json格式\n     */\n    public setJSON(nodeList: NodeListType): void {\n        const html = getHtmlByNodeList(nodeList).children()\n        const editor = this.editor\n        const $textElem = editor.$textElem\n        // 没有获取到元素的情况\n        if (!html) return\n        // 替换文本节点下全部子节点\n        $textElem.replaceChildAll(html)\n    }\n\n    /**\n     * 获取 json 格式的数据\n     */\n    public getJSON(): NodeListType {\n        const editor = this.editor\n        const $textElem = editor.$textElem\n        return getChildrenJSON($textElem)\n    }\n\n    /**\n     * 设置 字符串内容\n     * @param val text 字符串\n     */\n    public text(val: string): void\n    /**\n     * 获取 字符串内容\n     */\n    public text(): string\n    public text(val?: string): void | string {\n        const editor = this.editor\n        const $textElem = editor.$textElem\n\n        // 没有 val ，是获取 text\n        if (val == null) {\n            let text = $textElem.text()\n            // 未选中任何内容的时候点击“加粗”或者“斜体”等按钮，就得需要一个空的占位符 &#8203 ，这里替换掉\n            text = text.replace(/\\u200b/gm, '')\n            return text\n        }\n\n        // 有 val ，则是设置 text\n        $textElem.text(`<p>${val}</p>`)\n\n        // 初始化选区，将光标定位到内容尾部\n        editor.initSelection()\n    }\n\n    /**\n     * 追加 html 内容\n     * @param html html 字符串\n     */\n    public append(html: string): void {\n        const editor = this.editor\n        if (html.indexOf('<') !== 0) {\n            // 普通字符串，用 <p> 包裹\n            html = `<p>${html}</p>`\n        }\n        this.html(this.html() + html)\n        // 初始化选区，将光标定位到内容尾部\n        editor.initSelection()\n    }\n\n    /**\n     * 每一步操作，都实时保存选区范围\n     */\n    private _saveRange(): void {\n        const editor = this.editor\n        const $textElem = editor.$textElem\n        const $document = $(document)\n\n        // 保存当前的选区\n        function saveRange() {\n            // 随时保存选区\n            editor.selection.saveRange()\n            // 更新按钮 active 状态\n            editor.menus.changeActive()\n        }\n\n        // 按键后保存\n        $textElem.on('keyup', saveRange)\n\n        // 点击后保存，为了避免被多次执行而导致造成浪费，这里对 click 使用一次性绑定\n        function onceClickSaveRange() {\n            saveRange()\n            $textElem.off('click', onceClickSaveRange)\n        }\n        $textElem.on('click', onceClickSaveRange)\n\n        function handleMouseUp() {\n            // 在编辑器区域之外完成抬起，保存此时编辑区内的新选区，取消此时鼠标抬起事件\n            saveRange()\n            $document.off('mouseup', handleMouseUp)\n        }\n        function listenMouseLeave() {\n            // 当鼠标移动到外面，要监听鼠标抬起操作\n            $document.on('mouseup', handleMouseUp)\n            // 首次移出时即接触leave监听，防止用户不断移入移出多次注册handleMouseUp\n            $textElem.off('mouseleave', listenMouseLeave)\n        }\n        $textElem.on('mousedown', () => {\n            // mousedown 状态下，要坚听鼠标滑动到编辑区域外面\n            $textElem.on('mouseleave', listenMouseLeave)\n        })\n\n        $textElem.on('mouseup', (e: MouseEvent) => {\n            // 记得移除$textElem的mouseleave事件, 避免内存泄露\n            $textElem.off('mouseleave', listenMouseLeave)\n            // fix：避免当选中一段文字之后，再次点击文字中间位置无法更新selection问题。issue#3096\n            setTimeout(() => {\n                const selection = editor.selection\n                const range = selection.getRange()\n                if (range === null) return\n                saveRange()\n            }, 0)\n        })\n    }\n\n    /**\n     * 绑定事件，事件会触发钩子函数\n     */\n    private _bindEventHooks(): void {\n        const editor = this.editor\n        const $textElem = editor.$textElem\n        const eventHooks = this.eventHooks\n\n        // click hooks\n        $textElem.on('click', (e: Event) => {\n            const clickEvents = eventHooks.clickEvents\n            clickEvents.forEach(fn => fn(e))\n        })\n\n        // enter 键 up 时的 hooks\n        $textElem.on('keyup', (e: KeyboardEvent) => {\n            if (e.keyCode !== 13) return\n            const enterUpEvents = eventHooks.enterUpEvents\n            enterUpEvents.forEach(fn => fn(e))\n        })\n\n        // 键盘 up 时的 hooks\n        $textElem.on('keyup', (e: KeyboardEvent) => {\n            const keyupEvents = eventHooks.keyupEvents\n            keyupEvents.forEach(fn => fn(e))\n        })\n\n        // 键盘 down 时的 hooks\n        $textElem.on('keydown', (e: KeyboardEvent) => {\n            const keydownEvents = eventHooks.keydownEvents\n            keydownEvents.forEach(fn => fn(e))\n        })\n\n        // delete 键 up 时 hooks\n        $textElem.on('keyup', (e: KeyboardEvent) => {\n            if (e.keyCode !== 8 && e.keyCode !== 46) return\n            const deleteUpEvents = eventHooks.deleteUpEvents\n            deleteUpEvents.forEach(fn => fn(e))\n        })\n\n        // delete 键 down 时 hooks\n        $textElem.on('keydown', (e: KeyboardEvent) => {\n            if (e.keyCode !== 8 && e.keyCode !== 46) return\n            const deleteDownEvents = eventHooks.deleteDownEvents\n            deleteDownEvents.forEach(fn => fn(e))\n        })\n\n        // 粘贴\n        $textElem.on('paste', (e: ClipboardEvent) => {\n            if (UA.isIE()) return // IE 不支持\n\n            // 阻止默认行为，使用 execCommand 的粘贴命令\n            e.preventDefault()\n\n            const pasteEvents = eventHooks.pasteEvents\n            pasteEvents.forEach(fn => fn(e))\n        })\n\n        // 撤销/恢复 快捷键\n        $textElem.on('keydown', (e: KeyboardEvent) => {\n            if (\n                // 编辑器处于聚焦状态下（多编辑器实例） || 当前处于兼容模式（兼容模式撤销/恢复后不聚焦，所以直接过，但会造成多编辑器同时撤销/恢复）\n                (editor.isFocus || editor.isCompatibleMode) &&\n                (e.ctrlKey || e.metaKey) &&\n                e.keyCode === 90\n            ) {\n                // 取消默认行为\n                e.preventDefault()\n                // 执行事件\n                if (e.shiftKey) {\n                    // 恢复\n                    editor.history.restore()\n                } else {\n                    // 撤销\n                    editor.history.revoke()\n                }\n            }\n        })\n\n        // tab up\n        $textElem.on('keyup', (e: KeyboardEvent) => {\n            if (e.keyCode !== 9) return\n            e.preventDefault()\n            const tabUpEvents = eventHooks.tabUpEvents\n            tabUpEvents.forEach(fn => fn(e))\n        })\n\n        // tab down\n        $textElem.on('keydown', (e: KeyboardEvent) => {\n            if (e.keyCode !== 9) return\n            e.preventDefault()\n            const tabDownEvents = eventHooks.tabDownEvents\n            tabDownEvents.forEach(fn => fn(e))\n        })\n\n        // 文本编辑区域 滚动时触发\n        $textElem.on(\n            'scroll',\n            // 使用节流\n            throttle((e: Event) => {\n                const textScrollEvents = eventHooks.textScrollEvents\n                textScrollEvents.forEach(fn => fn(e))\n            }, 100)\n        )\n\n        // 拖拽相关的事件\n        function preventDefault(e: Event) {\n            // 禁用 document 拖拽事件\n            e.preventDefault()\n        }\n\n        $(document)\n            .on('dragleave', preventDefault)\n            .on('drop', preventDefault)\n            .on('dragenter', preventDefault)\n            .on('dragover', preventDefault)\n        // 全局事件在编辑器实例销毁的时候进行解绑\n        editor.beforeDestroy(function () {\n            $(document)\n                .off('dragleave', preventDefault)\n                .off('drop', preventDefault)\n                .off('dragenter', preventDefault)\n                .off('dragover', preventDefault)\n        })\n\n        $textElem.on('drop', (e: DragEvent) => {\n            e.preventDefault()\n            const events = eventHooks.dropEvents\n            events.forEach(fn => fn(e))\n        })\n\n        // link click\n        $textElem.on('click', (e: Event) => {\n            // 存储链接元素\n            let $link: DomElement | null = null\n\n            const target = e.target as HTMLElement\n            const $target = $(target)\n            if ($target.getNodeName() === 'A') {\n                // 当前点击的就是一个链接\n                $link = $target\n            } else {\n                // 否则，向父节点中寻找链接\n                const $parent = $target.parentUntil('a')\n                if ($parent != null) {\n                    // 找到了\n                    $link = $parent\n                }\n            }\n\n            if (!$link) return // 没有点击链接，则返回\n\n            const linkClickEvents = eventHooks.linkClickEvents\n            linkClickEvents.forEach(fn => fn($link as DomElement))\n        })\n\n        // img click\n        $textElem.on('click', (e: Event) => {\n            // 存储图片元素\n            let $img: DomElement | null = null\n\n            const target = e.target as HTMLElement\n            const $target = $(target)\n\n            //处理图片点击 去除掉emoji图片的情况\n            if ($target.getNodeName() === 'IMG' && !$target.elems[0].getAttribute('data-emoji')) {\n                // 当前点击的就是img\n                e.stopPropagation()\n                $img = $target\n            }\n            if (!$img) return // 没有点击图片，则返回\n\n            const imgClickEvents = eventHooks.imgClickEvents\n            imgClickEvents.forEach(fn => fn($img as DomElement))\n        })\n\n        // code click\n        $textElem.on('click', (e: Event) => {\n            // 存储代码元素\n            let $code: DomElement | null = null\n\n            const target = e.target as HTMLElement\n            const $target = $(target)\n            if ($target.getNodeName() === 'PRE') {\n                // 当前点击的就是一个链接\n                $code = $target\n            } else {\n                // 否则，向父节点中寻找链接\n                const $parent = $target.parentUntil('pre')\n                if ($parent !== null) {\n                    // 找到了\n                    $code = $parent\n                }\n            }\n\n            if (!$code) return\n\n            const codeClickEvents = eventHooks.codeClickEvents\n            codeClickEvents.forEach(fn => fn($code as DomElement))\n        })\n\n        // splitLine click\n        $textElem.on('click', (e: Event) => {\n            // 存储分割线元素\n            let $splitLine: DomElement | null = null\n\n            const target = e.target as HTMLElement\n            const $target = $(target)\n            // 判断当前点击元素\n            if ($target.getNodeName() === 'HR') {\n                $splitLine = $target\n            } else {\n                $target == null\n            }\n\n            if (!$splitLine) return // 没有点击分割线，则返回\n            // 设置、恢复选区\n            editor.selection.createRangeByElem($splitLine)\n            editor.selection.restoreSelection()\n            const splitLineClickEvents = eventHooks.splitLineEvents\n            splitLineClickEvents.forEach(fn => fn($splitLine as DomElement))\n        })\n\n        // 菜单栏被点击\n        editor.$toolbarElem.on('click', (e: Event) => {\n            const toolbarClickEvents = eventHooks.toolbarClickEvents\n            toolbarClickEvents.forEach(fn => fn(e))\n        })\n\n        //mousedown事件\n        editor.$textContainerElem.on('mousedown', (e: MouseEvent) => {\n            const target = e.target as HTMLElement\n            const $target = $(target)\n            if ($target.hasClass('w-e-img-drag-rb')) {\n                // 点击的元素，是图片拖拽调整大小的 bar\n                const imgDragBarMouseDownEvents = eventHooks.imgDragBarMouseDownEvents\n                imgDragBarMouseDownEvents.forEach(fn => fn())\n            }\n        })\n\n        //table click\n        $textElem.on('click', (e: MouseEvent) => {\n            // 存储元素\n            let $dom: DomElement | null = null\n\n            const target = e.target as HTMLElement\n\n            //获取最祖父元素\n            $dom = $(target).parentUntilEditor('TABLE', editor, target)\n\n            // 没有table范围内，则返回\n            if (!$dom) return\n\n            const tableClickEvents = eventHooks.tableClickEvents\n            tableClickEvents.forEach(fn => fn($dom as DomElement, e))\n        })\n\n        // enter 键 down\n        $textElem.on('keydown', (e: KeyboardEvent) => {\n            if (e.keyCode !== 13) return\n            const enterDownEvents = eventHooks.enterDownEvents\n            enterDownEvents.forEach(fn => fn(e))\n        })\n\n        // 视频 click\n        $textElem.on('click', (e: Event) => {\n            // 存储视频\n            let $video: DomElement | null = null\n\n            const target = e.target as HTMLElement\n            const $target = $(target)\n\n            //处理视频点击 简单的video 标签\n            if ($target.getNodeName() === 'VIDEO') {\n                // 当前点击的就是视频\n                e.stopPropagation()\n                $video = $target\n            }\n\n            if (!$video) return // 没有点击视频，则返回\n\n            const videoClickEvents = eventHooks.videoClickEvents\n            videoClickEvents.forEach(fn => fn($video as DomElement))\n        })\n    }\n}\n\nexport default Text\n", "var parent = require('../../es/instance/find');\n\nmodule.exports = parent;\n", "var find = require('../array/virtual/find');\n\nvar ArrayPrototype = Array.prototype;\n\nmodule.exports = function (it) {\n  var own = it.find;\n  return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.find) ? find : own;\n};\n", "require('../../../modules/es.array.find');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Array').find;\n", "'use strict';\nvar $ = require('../internals/export');\nvar $find = require('../internals/array-iteration').find;\nvar addToUnscopables = require('../internals/add-to-unscopables');\nvar arrayMethodUsesToLength = require('../internals/array-method-uses-to-length');\n\nvar FIND = 'find';\nvar SKIPS_HOLES = true;\n\nvar USES_TO_LENGTH = arrayMethodUsesToLength(FIND);\n\n// Shouldn't skip holes\nif (FIND in []) Array(1)[FIND](function () { SKIPS_HOLES = false; });\n\n// `Array.prototype.find` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.find\n$({ target: 'Array', proto: true, forced: SKIPS_HOLES || !USES_TO_LENGTH }, {\n  find: function find(callbackfn /* , that = undefined */) {\n    return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\n\n// https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables(FIND);\n", "/**\n * @description Text 事件钩子函数。Text 公共的，不是某个菜单独有的\n * @wangfupeng\n */\n\nimport Text from '../index'\nimport enterToCreateP from './enter-to-create-p'\nimport deleteToKeepP, { cutToKeepP } from './del-to-keep-p'\nimport tabToSpan from './tab-to-space'\nimport pasteTextHtml from './paste-text-html'\nimport imgClickActive from './img-click-active'\n\n/**\n * 初始化 text 事件钩子函数\n * @param text text 实例\n */\nfunction initTextHooks(text: Text): void {\n    const editor = text.editor\n    const eventHooks = text.eventHooks\n\n    // 回车时，保证生成的是 <p> 标签\n    enterToCreateP(editor, eventHooks.enterUpEvents, eventHooks.enterDownEvents)\n\n    // 删除时，保留 EMPTY_P\n    deleteToKeepP(editor, eventHooks.deleteUpEvents, eventHooks.deleteDownEvents)\n\n    // 剪切时, 保留p\n    cutToKeepP(editor, eventHooks.keyupEvents)\n\n    // tab 转换为空格\n    tabToSpan(editor, eventHooks.tabDownEvents)\n\n    // 粘贴 text html\n    pasteTextHtml(editor, eventHooks.pasteEvents)\n\n    // img click active\n    imgClickActive(editor, eventHooks.imgClickEvents)\n}\n\nexport default initTextHooks\n", "/**\n * @description 回车时，保证生成的是 <p> 标签\n * @author wangfupeng\n */\n\nimport Editor from '../../editor/index'\nimport { EMPTY_P } from '../../utils/const'\nimport $, { DomElement } from '../../utils/dom-core'\n\n/**\n * 回车时，保证生成的是 <p> 标签\n * @param editor 编辑器实例\n * @param enterUpEvents enter 键 up 时的 hooks\n * @param enterDownEvents enter 键 down 时的 hooks\n */\nfunction enterToCreateP(editor: Editor, enterUpEvents: Function[], enterDownEvents: Function[]) {\n    function insertEmptyP($selectionElem: DomElement) {\n        const $p = $(EMPTY_P)\n        $p.insertBefore($selectionElem)\n        if ($selectionElem.html().indexOf('<img') >= 0) {\n            // 有图片的回车键弹起时\n            $p.remove()\n            return\n        }\n\n        editor.selection.createRangeByElem($p, true, true)\n        editor.selection.restoreSelection()\n        $selectionElem.remove()\n    }\n\n    // enter up 时\n    function fn() {\n        const $textElem = editor.$textElem\n        const $selectionElem = editor.selection.getSelectionContainerElem() as DomElement\n        const $parentElem = $selectionElem.parent()\n\n        if ($parentElem.html() === '<code><br></code>') {\n            // 回车之前光标所在一个 <p><code>.....</code></p> ，忽然回车生成一个空的 <p><code><br></code></p>\n            // 而且继续回车跳不出去，因此只能特殊处理\n            insertEmptyP($parentElem)\n            return\n        }\n\n        if (\n            $selectionElem.getNodeName() === 'FONT' &&\n            $selectionElem.text() === '' &&\n            $selectionElem.attr('face') === 'monospace'\n        ) {\n            // 行内code回车时会产生一个<font face=\"monospace\"><br></font>，导致样式问题\n            insertEmptyP($parentElem)\n            return\n        }\n\n        if (!$parentElem.equal($textElem)) {\n            // 不是顶级标签\n            return\n        }\n\n        const nodeName = $selectionElem.getNodeName()\n        if (nodeName === 'P' && $selectionElem.attr('data-we-empty-p') === null) {\n            // 当前的标签是 P 且不为 editor 生成的空白占位 p 标签，不用做处理\n            return\n        }\n\n        if ($selectionElem.text()) {\n            // 有内容，不做处理\n            return\n        }\n\n        // 插入 <p> ，并将选取定位到 <p>，删除当前标签\n        insertEmptyP($selectionElem)\n    }\n    enterUpEvents.push(fn)\n\n    // enter down 时\n    function createPWhenEnterText(e: Event) {\n        // selection中的range缓存还有问题,更新不及时,此处手动更新range,处理enter的bug\n        editor.selection.saveRange(getSelection()?.getRangeAt(0))\n        const $selectElem = editor.selection.getSelectionContainerElem() as DomElement\n        if ($selectElem.id === editor.textElemId) {\n            // 回车时，默认创建了 text 标签（没有 p 标签包裹），父元素直接就是 $textElem\n            // 例如，光标放在 table 最后侧，回车时，默认就是这个情况\n            e.preventDefault()\n            editor.cmd.do('insertHTML', '<p><br></p>')\n        }\n    }\n    enterDownEvents.push(createPWhenEnterText)\n}\n\nexport default enterToCreateP\n", "/**\n * @description 删除时保留 EMPTY_P\n * @author wangfupeng\n */\n\nimport { EMPTY_P } from '../../utils/const'\nimport Editor from '../../editor/index'\nimport $ from '../../utils/dom-core'\n\n/**\n * 删除时保留 EMPTY_P\n * @param editor 编辑器实例\n * @param deleteUpEvents delete 键 up 时的 hooks\n * @param deleteDownEvents delete 建 down 时的 hooks\n */\nfunction deleteToKeepP(editor: Editor, deleteUpEvents: Function[], deleteDownEvents: Function[]) {\n    function upFn() {\n        const $textElem = editor.$textElem\n        const html = editor.$textElem.html()\n        const text = editor.$textElem.text()\n        const txtHtml = html.trim()\n        /**\n          @description \n            如果编辑区清空的状态下，单单插入一张图片，删除图片后，会存在空的情况：'<p data-we-empty-p=\"\"></p>'\n            需要包含这种边界情况\n        **/\n\n        const emptyTags: string[] = ['<p><br></p>', '<br>', '<p data-we-empty-p=\"\"></p>', EMPTY_P]\n\n        // 编辑器中的字符是\"\"或空白，说明内容为空\n        if (/^\\s*$/.test(text) && (!txtHtml || emptyTags.includes(txtHtml))) {\n            // 内容空了\n            $textElem.html(EMPTY_P)\n\n            /**\n             * 当编辑器 - 文本区内容为空的情况下，会插入一个空的P，此时应该将选区移动到这个空标签上，重置选区\n             * bug: 如果选区没有从$textElem上调整到p上，就会有问题，在清空内容，设置标题时，会报错。\n             */\n            const containerElem = $textElem.getNode()\n\n            // 设置新的选区\n            editor.selection.createRangeByElems(\n                containerElem.childNodes[0],\n                containerElem.childNodes[0]\n            )\n\n            const $selectionElem = editor.selection.getSelectionContainerElem()!\n\n            editor.selection.restoreSelection()\n\n            // 设置折叠后的光标位置，在firebox等浏览器下\n            // 光标设置在end位置会自动换行\n            editor.selection.moveCursor($selectionElem.getNode(), 0)\n        }\n    }\n    deleteUpEvents.push(upFn)\n\n    function downFn(e: Event) {\n        const $textElem = editor.$textElem\n        const txtHtml = $textElem.html().toLowerCase().trim()\n        if (txtHtml === EMPTY_P) {\n            // 最后剩下一个空行，就不再删除了\n            e.preventDefault()\n            return\n        }\n    }\n    deleteDownEvents.push(downFn)\n}\n\n/**\n * 剪切时保留 EMPTY_P\n * @param editor 编辑器实例\n * @param cutEvents keydown hooks\n */\nexport function cutToKeepP(editor: Editor, cutEvents: Function[]) {\n    function upFn(e: KeyboardEvent) {\n        if (e.keyCode !== 88) {\n            return\n        }\n\n        const $textElem = editor.$textElem\n        const txtHtml = $textElem.html().toLowerCase().trim()\n\n        // firefox 时用 txtHtml === '<br>' 判断，其他用 !txtHtml 判断\n        if (!txtHtml || txtHtml === '<br>') {\n            // 内容空了\n            const $p = $(EMPTY_P)\n            $textElem.html(' ') // 一定要先清空，否则在 firefox 下有问题\n            $textElem.append($p)\n            editor.selection.createRangeByElem($p, false, true)\n            editor.selection.restoreSelection()\n            // 设置折叠后的光标位置，在firebox等浏览器下\n            // 光标设置在end位置会自动换行\n            editor.selection.moveCursor($p.getNode(), 0)\n        }\n    }\n\n    cutEvents.push(upFn)\n}\n\nexport default deleteToKeepP\n", "/**\n * @description 编辑区域 tab 的特殊处理\n * @author wangfupeng\n */\n\nimport Editor from '../../editor/index'\n\n/**\n * 编辑区域 tab 的特殊处理，转换为空格\n * @param editor 编辑器实例\n * @param tabDownEvents tab down 事件钩子\n */\nfunction tabHandler(editor: Editor, tabDownEvents: Function[]) {\n    // 定义函数\n    function fn() {\n        if (!editor.cmd.queryCommandSupported('insertHTML')) {\n            // 必须原生支持 insertHTML 命令\n            return\n        }\n        const $selectionElem = editor.selection.getSelectionContainerElem()\n        if (!$selectionElem) {\n            return\n        }\n        const $parentElem = $selectionElem.parent()\n        const selectionNodeName = $selectionElem.getNodeName()\n        const parentNodeName = $parentElem.getNodeName()\n\n        if (\n            selectionNodeName == 'CODE' ||\n            parentNodeName === 'CODE' ||\n            parentNodeName === 'PRE' ||\n            /hljs/.test(parentNodeName)\n        ) {\n            // <pre><code> 里面\n            editor.cmd.do('insertHTML', editor.config.languageTab)\n        } else {\n            // 普通文字\n            editor.cmd.do('insertHTML', '&nbsp;&nbsp;&nbsp;&nbsp;')\n        }\n    }\n\n    // 保留函数\n    tabDownEvents.push(fn)\n}\n\nexport default tabHandler\n", "/**\n * @description 粘贴 text html\n * @author wangfupeng\n */\n\nimport Editor from '../../editor/index'\nimport { getPasteText, getPasteHtml } from '../paste/paste-event'\nimport { isFunction } from '../../utils/util'\nimport { urlRegex } from '../../utils/const'\nimport { DomElement } from '../../utils/dom-core'\n\n/**\n * 格式化html\n * @param val 粘贴的html\n * @author Gavin\n * @description\n    格式化html，需要特别注意\n    功能：\n        1. 将htmlText中的div，都替换成p标签\n        2. 将处理后的htmlText模拟先插入到真实dom中，处理P截断问题。\n\n    注意点：\n        由于P不能嵌套p，会导致标签截断，从而将<p><p>xx</p></p>这样一个结构插入到页面时，会出现很多问题，包括光标位置问题，页面凭空多很多元素的问题。\n */\nfunction formatHtml(htmlText: string) {\n    const paste = htmlText\n        .replace(/<div>/gim, '<p>') // div 全部替换为 p 标签\n        .replace(/<\\/div>/gim, '</p>')\n        .trim() // 去除''\n\n    // 模拟插入到真实dom中\n    const tempContainer = document.createElement('div')\n\n    tempContainer.innerHTML = paste\n\n    return tempContainer.innerHTML.replace(/<p><\\/p>/gim, '') // 将被截断的p，都替换掉\n}\n\n/**\n * 格式化html\n * @param val 粘贴的html\n * @author liuwei\n */\nfunction formatCode(val: string) {\n    let pasteText = val.replace(/<br>|<br\\/>/gm, '\\n').replace(/<[^>]+>/gm, '')\n\n    return pasteText\n}\n\n/**\n * 判断html是否使用P标签包裹\n * @param html 粘贴的html\n * @author luochao\n */\nfunction isParagraphHtml(html: string): boolean {\n    if (html === '') return false\n\n    const container = document.createElement('div')\n    container.innerHTML = html\n\n    return container.firstChild?.nodeName === 'P'\n}\n\n/**\n * 判断当前选区是否是空段落\n * @param topElem 选区顶层元素\n * @author luochao\n */\nfunction isEmptyParagraph(topElem: DomElement | undefined): boolean {\n    if (!topElem?.length) return false\n\n    const dom = topElem.elems[0]\n\n    return dom.nodeName === 'P' && dom.innerHTML === '<br>'\n}\n\n/**\n * 粘贴文本和 html\n * @param editor 编辑器对象\n * @param pasteEvents 粘贴事件列表\n */\nfunction pasteTextHtml(editor: Editor, pasteEvents: Function[]) {\n    function fn(e: Event) {\n        // 获取配置\n        const config = editor.config\n        const pasteFilterStyle = config.pasteFilterStyle\n        const pasteIgnoreImg = config.pasteIgnoreImg\n        const pasteTextHandle = config.pasteTextHandle\n\n        // 获取粘贴的文字\n        let pasteHtml = getPasteHtml(e as ClipboardEvent, pasteFilterStyle, pasteIgnoreImg)\n        let pasteText = getPasteText(e as ClipboardEvent)\n        pasteText = pasteText.replace(/\\n/gm, '<br>')\n        // 当前选区所在的 DOM 节点\n        const $selectionElem = editor.selection.getSelectionContainerElem()\n        if (!$selectionElem) {\n            return\n        }\n        const nodeName = $selectionElem?.getNodeName()\n        const $topElem = $selectionElem?.getNodeTop(editor)\n        // 当前节点顶级可能没有\n        let topNodeName: string = ''\n        if ($topElem.elems[0]) {\n            topNodeName = $topElem?.getNodeName()\n        }\n        // code 中只能粘贴纯文本\n        if (nodeName === 'CODE' || topNodeName === 'PRE') {\n            if (pasteTextHandle && isFunction(pasteTextHandle)) {\n                // 用户自定义过滤处理粘贴内容\n                pasteText = '' + (pasteTextHandle(pasteText) || '')\n            }\n            editor.cmd.do('insertHTML', formatCode(pasteText))\n            return\n        }\n\n        // 如果用户开启闭粘贴样式注释则将复制进来为url的直接转为链接 否则不转换。\n        //  在群中有用户提到关闭样式粘贴复制的文字进来后链接直接转为文字了，不符合预期，这里优化下\n        if (urlRegex.test(pasteText) && pasteFilterStyle) {\n            //当复制的内容为链接时，也应该判断用户是否定义了处理粘贴的事件\n            if (pasteTextHandle && isFunction(pasteTextHandle)) {\n                // 用户自定义过滤处理粘贴内容\n                pasteText = '' + (pasteTextHandle(pasteText) || '') // html\n            }\n\n            // 当复制一个链接和文本时，需要区分出文本和a链接, 如：http://www.baidu.com  搜索。 issue: #3129\n            // 目前也支持粘贴文案：粘贴http://www.baidu.com粘贴http://www.baidu.com，连个链接。\n            const resultText = pasteText.replace(urlRegex, function (link: string) {\n                return `<a href=\"${link}\" target=\"_blank\">${link}</a>`\n            })\n            const range = editor.selection.getRange()\n\n            // 文本转义问题，如果直接使用innerHTML插入html结构，地址中的特殊字符会被转义\n            // 先生成元素，替换里面的文本，利用insertElem插入到页面\n            const div = document.createElement('div')\n            const fragment = document.createDocumentFragment()\n\n            div.innerHTML = resultText\n\n            if (range == null) return\n\n            // 将div里的dom结构，搬到fragment里\n            while (div.childNodes.length) {\n                fragment.append(div.childNodes[0])\n            }\n\n            // 修改a 链接文案，使用innerText插入文本，这样就避免了使用innerHTML时把特殊符号转义\n            const linkEle = fragment.querySelectorAll('a')\n            linkEle.forEach(ele => {\n                ele.innerText = ele.href\n            })\n\n            if (range.insertNode) {\n                range.deleteContents()\n                range.insertNode(fragment)\n            }\n\n            editor.selection.clearWindowSelectionRange()\n\n            return\n        }\n        // table 中（td、th），待开发。。。\n        if (!pasteHtml) {\n            return\n        }\n        try {\n            // firefox 中，获取的 pasteHtml 可能是没有 <ul> 包裹的 <li>\n            // 因此执行 insertHTML 会报错\n            if (pasteTextHandle && isFunction(pasteTextHandle)) {\n                // 用户自定义过滤处理粘贴内容\n                pasteHtml = '' + (pasteTextHandle(pasteHtml) || '') // html\n            }\n            // 粘贴的html的是否是css的style样式\n            let isCssStyle: boolean = /[\\.\\#\\@]?\\w+[ ]+\\{[^}]*\\}/.test(pasteHtml) // eslint-disable-line\n            // 经过处理后还是包含暴露的css样式则直接插入它的text\n            if (isCssStyle && pasteFilterStyle) {\n                editor.cmd.do('insertHTML', `${formatHtml(pasteText)}`) // text\n            } else {\n                const html = formatHtml(pasteHtml)\n                // 如果是段落，为了兼容 firefox 和 chrome差异，自定义插入\n                if (isParagraphHtml(html)) {\n                    const $textEl = editor.$textElem\n                    editor.cmd.do('insertHTML', html)\n                    // 全选的情况下覆盖原有内容\n                    if ($textEl.equal($selectionElem)) {\n                        // 更新选区\n                        editor.selection.createEmptyRange()\n                        return\n                    }\n                    // 如果选区是空段落，移除空段落\n                    if (isEmptyParagraph($topElem)) {\n                        $topElem.remove()\n                    }\n                } else {\n                    editor.cmd.do('insertHTML', html)\n\n                    // 如果用户从百度等网站点击复制得到的图片是一串img标签且待src的http地址\n                    // 见 https://github.com/wangeditor-team/wangEditor/issues/3119\n                    // 如果是走用户定义的图片上传逻辑\n                    // const isHasOnlyImgEleReg = /^<img [^>]*src=['\"]([^'\"]+)[^>]*>$/g\n                    // if (!isHasOnlyImgEleReg.test(html)) {\n                    //     editor.cmd.do('insertHTML', html)\n                    // }\n                }\n            }\n        } catch (ex) {\n            // 此时使用 pasteText 来兼容一下\n            if (pasteTextHandle && isFunction(pasteTextHandle)) {\n                // 用户自定义过滤处理粘贴内容\n                pasteText = '' + (pasteTextHandle(pasteText) || '')\n            }\n            editor.cmd.do('insertHTML', `${formatHtml(pasteText)}`) // text\n        }\n    }\n\n    pasteEvents.push(fn)\n}\n\nexport default pasteTextHtml\n", "/**\n * @description 将粘贴的 html 字符串，转换为正确、简洁的 html 代码。剔除不必要的标签和属性。\n * @author wangfupeng\n */\n\nimport { EMPTY_TAGS, IGNORE_TAGS, NECESSARY_ATTRS } from './tags'\nimport HtmlParser from '../../lib/simplehtmlparser.js'\n\ntype AttrType = {\n    name: string\n    value: string\n}\n\n/**\n * 过滤掉空 span\n * @param html html\n */\nfunction filterEmptySpan(html: string): string {\n    const regForReplace = /<span>.*?<\\/span>/gi\n    const regForMatch = /<span>(.*?)<\\/span>/\n    return html.replace(regForReplace, (s: string): string => {\n        // s 是单个 span ，如 <span>文字</span>\n        const result = s.match(regForMatch)\n        if (result == null) return ''\n        return result[1]\n    })\n}\n\n/**\n * 是否忽略标签\n * @param tag tag\n * @param ignoreImg 是否忽略 img 标签\n */\nfunction isIgnoreTag(tag: string, ignoreImg: boolean): boolean {\n    tag = tag.toLowerCase().trim()\n\n    // 忽略的标签\n    if (IGNORE_TAGS.has(tag)) {\n        return true\n    }\n\n    // 是否忽略图片\n    if (ignoreImg) {\n        if (tag === 'img') {\n            return true\n        }\n    }\n\n    return false\n}\n\n/**\n * 为 tag 生成 html 字符串，开始部分\n * @param tag tag\n * @param attrs 属性\n */\nfunction genStartHtml(tag: string, attrs: AttrType[]): string {\n    let result = ''\n\n    // tag < 符号\n    result = `<${tag}`\n\n    // 拼接属性\n    let attrStrArr: string[] = []\n    attrs.forEach((attr: AttrType) => {\n        attrStrArr.push(`${attr.name}=\"${attr.value}\"`)\n    })\n    if (attrStrArr.length > 0) {\n        result = result + ' ' + attrStrArr.join(' ')\n    }\n\n    // tag > 符号\n    const isEmpty = EMPTY_TAGS.has(tag) // 没有子节点或文本的标签，如 img\n    result = result + (isEmpty ? '/' : '') + '>'\n\n    return result\n}\n\n/**\n * 为 tag 生成 html 字符串，结尾部分\n * @param tag tag\n */\nfunction genEndHtml(tag: string) {\n    return `</${tag}>`\n}\n\n/**\n * 处理粘贴的 html\n * @param html html 字符串\n * @param filterStyle 是否过滤 style 样式\n * @param ignoreImg 是否忽略 img 标签\n */\nfunction parseHtml(html: string, filterStyle: boolean = true, ignoreImg: boolean = false): string {\n    let resultArr: string[] = [] // 存储结果，数组形式，最后再 join\n\n    // 当前正在处理的标签，以及记录和清除的方法\n    let CUR_TAG = ''\n    function markTagStart(tag: string): void {\n        tag = tag.trim()\n        if (!tag) return\n        if (EMPTY_TAGS.has(tag)) return // 内容为空的标签，如 img ，不用记录\n        CUR_TAG = tag\n    }\n    function markTagEnd(): void {\n        CUR_TAG = ''\n    }\n\n    // 能通过 'text/html' 格式获取 html\n    const htmlParser = new HtmlParser()\n    htmlParser.parse(html, {\n        startElement(tag: string, attrs: []) {\n            // 首先，标记开始\n            markTagStart(tag)\n\n            // 忽略的标签\n            if (isIgnoreTag(tag, ignoreImg)) {\n                return\n            }\n\n            // 找出该标签必须的属性（其他的属性忽略）\n            const necessaryAttrKeys = NECESSARY_ATTRS.get(tag) || []\n            const attrsForTag: AttrType[] = []\n            attrs.forEach((attr: AttrType) => {\n                // 属性名\n                const name = attr.name\n\n                // style 单独处理\n                if (name === 'style') {\n                    // 保留 style 样式\n                    if (!filterStyle) {\n                        attrsForTag.push(attr)\n                    }\n                    return\n                }\n\n                // 除了 style 之外的其他属性\n                if (necessaryAttrKeys.includes(name) === false) {\n                    // 不是必须的属性，忽略\n                    return\n                }\n                attrsForTag.push(attr)\n            })\n\n            // 拼接为 HTML 标签\n            const html = genStartHtml(tag, attrsForTag)\n            resultArr.push(html)\n        },\n        characters(str: string) {\n            if (!str) {\n                return\n            }\n\n            // 忽略的标签\n            if (isIgnoreTag(CUR_TAG, ignoreImg)) return\n            resultArr.push(str)\n        },\n        endElement(tag: string) {\n            // 忽略的标签\n            if (isIgnoreTag(tag, ignoreImg)) {\n                return\n            }\n\n            // 拼接为 HTML 标签\n            const html = genEndHtml(tag)\n            resultArr.push(html)\n\n            // 最后，标记结束\n            markTagEnd()\n        },\n        comment(str: string) {\n            /* 注释，不做处理 */\n            markTagStart(str)\n        },\n    })\n\n    let result = resultArr.join('') // 转换为字符串\n\n    // 过滤掉空 span 标签\n    result = filterEmptySpan(result)\n\n    return result\n}\n\nexport default parseHtml\n", "/**\n * @description 粘贴相关的 tags\n * @author wangfupeng\n */\n\n// 忽略的标签\nexport const IGNORE_TAGS = new Set([\n    'doctype',\n    '!doctype',\n    'html',\n    'head',\n    'meta',\n    'body',\n    'script',\n    'style',\n    'link',\n    'frame',\n    'iframe',\n    'title',\n    'svg', // 暂时忽略，有需要再修改\n    'center',\n    'o:p', // 复制 word 内容包含 o:p 标签\n])\n\n// 指定标签必要的属性\nexport const NECESSARY_ATTRS = new Map([\n    ['img', ['src', 'alt']],\n    ['a', ['href', 'target']],\n    ['td', ['colspan', 'rowspan']],\n    ['th', ['colspan', 'rowspan']],\n])\n\n// 没有子节点或文本的标签\nexport const EMPTY_TAGS = new Set([\n    'area',\n    'base',\n    'basefont',\n    'br',\n    'col',\n    'hr',\n    'img',\n    'input',\n    'isindex',\n    'embed',\n])\n\n// 编辑区域顶级节点\nexport const TOP_LEVEL_TAGS = new Set([\n    'h1',\n    'h2',\n    'h3',\n    'h4',\n    'h5',\n    'p',\n    'ul',\n    'ol',\n    'table',\n    'blockquote', // 引用\n    'pre', // 代码\n    'hr',\n    'form',\n])\n", "var parent = require('../../es/set');\n\nmodule.exports = parent;\n", "require('../../modules/es.set');\nrequire('../../modules/es.object.to-string');\nrequire('../../modules/es.string.iterator');\nrequire('../../modules/web.dom-collections.iterator');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Set;\n", "'use strict';\nvar collection = require('../internals/collection');\nvar collectionStrong = require('../internals/collection-strong');\n\n// `Set` constructor\n// https://tc39.github.io/ecma262/#sec-set-objects\nmodule.exports = collection('Set', function (init) {\n  return function Set() { return init(this, arguments.length ? arguments[0] : undefined); };\n}, collectionStrong);\n", "// Copyright 2004 Erik Arvidsson. All Rights Reserved.\n//\n// This code is triple licensed using Apache Software License 2.0,\n// Mozilla Public License or GNU Public License\n//\n///////////////////////////////////////////////////////////////////////////////\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n// use this file except in compliance with the License.  You may obtain a copy\n// of the License at http://www.apache.org/licenses/LICENSE-2.0\n//\n///////////////////////////////////////////////////////////////////////////////\n//\n// The contents of this file are subject to the Mozilla Public License\n// Version 1.1 (the \"License\"); you may not use this file except in\n// compliance with the License. You may obtain a copy of the License at\n// http://www.mozilla.org/MPL/\n//\n// Software distributed under the License is distributed on an \"AS IS\"\n// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the\n// License for the specific language governing rights and limitations\n// under the License.\n//\n// The Original Code is Simple HTML Parser.\n//\n// The Initial Developer of the Original Code is Erik Arvidsson.\n// Portions created by Erik Arvidssson are Copyright (C) 2004. All Rights\n// Reserved.\n//\n///////////////////////////////////////////////////////////////////////////////\n//\n// This program is free software; you can redistribute it and/or\n// modify it under the terms of the GNU General Public License\n// as published by the Free Software Foundation; either version 2\n// of the License, or (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with this program; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.\n//\n///////////////////////////////////////////////////////////////////////////////\n\n/*\nvar handler ={\n\tstartElement:   function (sTagName, oAttrs) {},\n\tendElement:     function (sTagName) {},\n    characters:\t\tfunction (s) {},\n    comment:\t\tfunction (s) {}\n};\n*/\n\nfunction SimpleHtmlParser() {}\n\nSimpleHtmlParser.prototype = {\n    handler: null,\n\n    // regexps\n\n    startTagRe: /^<([^>\\s\\/]+)((\\s+[^=>\\s]+(\\s*=\\s*((\\\"[^\"]*\\\")|(\\'[^']*\\')|[^>\\s]+))?)*)\\s*\\/?\\s*>/m,\n    endTagRe: /^<\\/([^>\\s]+)[^>]*>/m,\n    attrRe: /([^=\\s]+)(\\s*=\\s*((\\\"([^\"]*)\\\")|(\\'([^']*)\\')|[^>\\s]+))?/gm,\n\n    parse: function (s, oHandler) {\n        if (oHandler) this.contentHandler = oHandler\n\n        var i = 0\n        var res, lc, lm, rc, index\n        var treatAsChars = false\n        var oThis = this\n        while (s.length > 0) {\n            // Comment\n            if (s.substring(0, 4) == '<!--') {\n                index = s.indexOf('-->')\n                if (index != -1) {\n                    this.contentHandler.comment(s.substring(4, index))\n                    s = s.substring(index + 3)\n                    treatAsChars = false\n                } else {\n                    treatAsChars = true\n                }\n            }\n\n            // end tag\n            else if (s.substring(0, 2) == '</') {\n                if (this.endTagRe.test(s)) {\n                    lc = RegExp.leftContext\n                    lm = RegExp.lastMatch\n                    rc = RegExp.rightContext\n\n                    lm.replace(this.endTagRe, function () {\n                        return oThis.parseEndTag.apply(oThis, arguments)\n                    })\n\n                    s = rc\n                    treatAsChars = false\n                } else {\n                    treatAsChars = true\n                }\n            }\n            // start tag\n            else if (s.charAt(0) == '<') {\n                if (this.startTagRe.test(s)) {\n                    lc = RegExp.leftContext\n                    lm = RegExp.lastMatch\n                    rc = RegExp.rightContext\n\n                    lm.replace(this.startTagRe, function () {\n                        return oThis.parseStartTag.apply(oThis, arguments)\n                    })\n\n                    s = rc\n                    treatAsChars = false\n                } else {\n                    treatAsChars = true\n                }\n            }\n\n            if (treatAsChars) {\n                index = s.indexOf('<')\n                if (index == -1) {\n                    this.contentHandler.characters(s)\n                    s = ''\n                } else {\n                    this.contentHandler.characters(s.substring(0, index))\n                    s = s.substring(index)\n                }\n            }\n\n            treatAsChars = true\n        }\n    },\n\n    parseStartTag: function (sTag, sTagName, sRest) {\n        var attrs = this.parseAttributes(sTagName, sRest)\n        this.contentHandler.startElement(sTagName, attrs)\n    },\n\n    parseEndTag: function (sTag, sTagName) {\n        this.contentHandler.endElement(sTagName)\n    },\n\n    parseAttributes: function (sTagName, s) {\n        var oThis = this\n        var attrs = []\n        s.replace(this.attrRe, function (a0, a1, a2, a3, a4, a5, a6, a7) {\n            attrs.push(oThis.parseAttribute(sTagName, a0, a1, a2, a3, a4, a5, a6, a7))\n        })\n        return attrs\n    },\n\n    parseAttribute: function (sTagName, sAttribute, sName) {\n        var value = ''\n        if (arguments[7]) value = arguments[8]\n        else if (arguments[5]) value = arguments[6]\n        else if (arguments[3]) value = arguments[4]\n\n        var empty = !value && !arguments[3]\n        return { name: sName, value: empty ? null : value }\n    },\n}\n\n// export default SimpleHtmlParser\nmodule.exports = SimpleHtmlParser\n", "/**\n * @description 图片点击后选区更新到img的位置\n * @author tonghan\n */\n\nimport Editor from '../../editor/index'\nimport { DomElement } from '../../utils/dom-core'\n\n/**\n * 图片点击后选区更新到img的位置\n * @param editor 编辑器实例\n * @param imgClickEvents delete 键 up 时的 hooks\n */\nfunction imgClickActive(editor: Editor, imgClickEvents: Function[]) {\n    function clickFn($img: DomElement) {\n        editor.selection.createRangeByElem($img)\n        editor.selection.restoreSelection()\n    }\n    imgClickEvents.push(clickFn)\n}\n\nexport default imgClickActive\n", "/**\n * @description 获取子元素的 JSON 格式数据\n * @author wangfupeng\n */\n\nimport { replaceHtmlSymbol } from '../utils/util'\nimport $, { DomElement } from '../utils/dom-core'\n\ntype AttrType = {\n    name: string\n    value: string\n}\nexport type NodeType = {\n    tag: string\n    attrs: AttrType[]\n    children: NodeListType\n}\nexport type NodeListType = Array<string | NodeType>\n\n/**\n * 获取子元素的 JSON 格式数据\n * @param $elem DOM 节点\n */\nfunction getChildrenJSON($elem: DomElement): NodeListType {\n    const result: NodeListType = [] // 存储结果\n\n    const $children = $elem.childNodes() || [] // 注意 childNodes() 可以获取文本节点\n    $children.forEach((curElem: HTMLElement) => {\n        let elemResult\n        const nodeType = curElem.nodeType\n\n        // 文本节点\n        if (nodeType === 3) {\n            elemResult = curElem.textContent || ''\n            elemResult = replaceHtmlSymbol(elemResult)\n        }\n\n        // 普通 DOM 节点\n        if (nodeType === 1) {\n            elemResult = {}\n            elemResult = elemResult as NodeType\n\n            // tag\n            elemResult.tag = curElem.nodeName.toLowerCase()\n            // attr\n            const attrData = []\n            const attrList = curElem.attributes\n            const attrListLength = attrList.length || 0\n            for (let i = 0; i < attrListLength; i++) {\n                const attr = attrList[i]\n                attrData.push({\n                    name: attr.name,\n                    value: attr.value,\n                })\n            }\n            elemResult.attrs = attrData\n            // children（递归）\n            elemResult.children = getChildrenJSON($(curElem))\n        }\n\n        if (elemResult) {\n            result.push(elemResult)\n        }\n    })\n    return result\n}\n\nexport default getChildrenJSON\n", "/**\n * @description 从nodeList json格式中遍历生成dom元素\n * @author zhengwenjian\n */\n\nimport $, { DomElement } from './../utils/dom-core'\nimport { NodeListType } from './getChildrenJSON'\n\nfunction getHtmlByNodeList(\n    nodeList: NodeListType,\n    parent: Node = document.createElement('div')\n): DomElement {\n    // 设置一个父节点存储所有子节点\n    let root = parent\n\n    // 遍历节点JSON\n    nodeList.forEach(item => {\n        let elem: Text | Node | undefined\n\n        // 当为文本节点时\n        if (typeof item === 'string') {\n            elem = document.createTextNode(item)\n        }\n\n        // 当为普通节点时\n        if (typeof item === 'object') {\n            elem = document.createElement(item.tag)\n            item.attrs.forEach(attr => {\n                $(elem).attr(attr.name, attr.value)\n            })\n\n            // 有子节点时递归将子节点加入当前节点\n            if (item.children && item.children.length > 0) {\n                getHtmlByNodeList(item.children, elem.getRootNode())\n            }\n        }\n        elem && root.appendChild(elem)\n    })\n    return $(root)\n}\n\nexport default getHtmlByNodeList\n", "/**\n * @description Menus 菜单栏 入口文件\n * @author wangfupeng\n */\n\nimport Editor from '../editor/index'\nimport Menu from './menu-constructors/Menu'\nimport MenuConstructorList, { MenuListType } from './menu-list'\nimport $, { DomElement } from './../utils/dom-core'\n// import { MenuActive } from './menu-constructors/Menu'\n\nclass Menus {\n    public editor: Editor\n    public menuList: Menu[]\n    public constructorList: MenuListType\n\n    constructor(editor: Editor) {\n        this.editor = editor\n        this.menuList = []\n        this.constructorList = MenuConstructorList // 所有菜单构造函数的列表\n    }\n\n    /**\n     * 自定义添加菜单\n     * @param key 菜单 key ，和 editor.config.menus 对应\n     * @param Menu 菜单构造函数\n     */\n    public extend(key: string, Menu: any) {\n        if (!Menu || typeof Menu !== 'function') return\n        this.constructorList[key] = Menu\n    }\n\n    // 初始化菜单\n    public init(): void {\n        // 从用户配置的 menus 入手，看需要初始化哪些菜单\n        const config = this.editor.config\n\n        // 排除exclude包含的菜单\n        let excludeMenus: string[] | any = config.excludeMenus\n        if (Array.isArray(excludeMenus) === false) excludeMenus = []\n        config.menus = config.menus.filter(key => excludeMenus.includes(key) === false)\n\n        // 排除自扩展中exclude包含的菜单\n        let CustomMenuKeysList: string[] = Object.keys(Editor.globalCustomMenuConstructorList)\n        CustomMenuKeysList = CustomMenuKeysList.filter(key => excludeMenus.includes(key))\n        CustomMenuKeysList.forEach((key: string) => {\n            delete Editor.globalCustomMenuConstructorList[key]\n        })\n\n        config.menus.forEach(menuKey => {\n            const MenuConstructor = this.constructorList[menuKey] // 暂用 any ，后面再替换\n            this._initMenuList(menuKey, MenuConstructor)\n        })\n\n        // 全局注册\n        for (let [menuKey, menuFun] of Object.entries(Editor.globalCustomMenuConstructorList)) {\n            const MenuConstructor = menuFun // 暂用 any ，后面再替换\n            this._initMenuList(menuKey, MenuConstructor)\n        }\n\n        // 渲染 DOM\n        this._addToToolbar()\n\n        if (config.showMenuTooltips) {\n            // 添加菜单栏tooltips\n            this._bindMenuTooltips()\n        }\n    }\n\n    /**\n     * 创建 menu 实例，并放到 menuList 中\n     * @param menuKey 菜单 key ，和 editor.config.menus 对应\n     * @param MenuConstructor 菜单构造函数\n     */\n    private _initMenuList(menuKey: String, MenuConstructor: any): void {\n        if (MenuConstructor == null || typeof MenuConstructor !== 'function') {\n            // 必须是 class\n            return\n        }\n        if (this.menuList.some(menu => menu.key === menuKey)) {\n            console.warn('菜单名称重复:' + menuKey)\n        } else {\n            const m = new MenuConstructor(this.editor)\n            m.key = menuKey\n            this.menuList.push(m)\n        }\n    }\n\n    // 绑定菜单栏tooltips\n    private _bindMenuTooltips(): void {\n        const editor = this.editor\n        const $toolbarElem = editor.$toolbarElem\n        const config = editor.config\n\n        // 若isTooltipShowTop为true则伪元素为下三角，反之为上三角\n        const menuTooltipPosition = config.menuTooltipPosition\n        const $tooltipEl = $(\n            `<div class=\"w-e-menu-tooltip w-e-menu-tooltip-${menuTooltipPosition}\">\n            <div class=\"w-e-menu-tooltip-item-wrapper\">\n              <div></div>\n            </div>\n          </div>`\n        )\n\n        $tooltipEl.css('visibility', 'hidden')\n        $toolbarElem.append($tooltipEl)\n        // 设置 z-index\n        $tooltipEl.css('z-index', editor.zIndex.get('tooltip'))\n\n        let showTimeoutId: number = 0 // 定时器，延时200ms显示tooltips\n        // 清空计时器\n        function clearShowTimeoutId() {\n            if (showTimeoutId) {\n                clearTimeout(showTimeoutId)\n            }\n        }\n\n        // 隐藏tooltip\n        function hide() {\n            clearShowTimeoutId()\n            $tooltipEl.css('visibility', 'hidden')\n        }\n\n        // 事件监听\n        $toolbarElem\n            .on('mouseover', (e: MouseEvent) => {\n                const target = e.target as HTMLElement\n                const $target = $(target)\n                let title: string | undefined\n                let $menuEl: DomElement | undefined\n\n                if ($target.isContain($toolbarElem)) {\n                    hide()\n                    return\n                }\n\n                if ($target.parentUntil('.w-e-droplist') != null) {\n                    // 处于droplist中时隐藏\n                    hide()\n                } else {\n                    if ($target.attr('data-title')) {\n                        title = $target.attr('data-title')\n                        $menuEl = $target\n                    } else {\n                        const $parent = $target.parentUntil('.w-e-menu')\n                        if ($parent != null) {\n                            title = $parent.attr('data-title')\n                            $menuEl = $parent\n                        }\n                    }\n                }\n\n                if (title && $menuEl) {\n                    clearShowTimeoutId()\n                    const targetOffset = $menuEl.getOffsetData()\n                    $tooltipEl.text(editor.i18next.t('menus.title.' + title))\n                    const tooltipOffset = $tooltipEl.getOffsetData()\n                    const left =\n                        targetOffset.left + targetOffset.width / 2 - tooltipOffset.width / 2\n                    $tooltipEl.css('left', `${left}px`)\n\n                    // 2. 高度设置\n                    if (menuTooltipPosition === 'up') {\n                        $tooltipEl.css('top', `${targetOffset.top - tooltipOffset.height - 8}px`)\n                    } else if (menuTooltipPosition === 'down') {\n                        $tooltipEl.css('top', `${targetOffset.top + targetOffset.height + 8}px`)\n                    }\n\n                    showTimeoutId = window.setTimeout(() => {\n                        $tooltipEl.css('visibility', 'visible')\n                    }, 200)\n                } else {\n                    hide()\n                }\n            })\n            .on('mouseleave', () => {\n                hide()\n            })\n    }\n    // 添加到菜单栏\n    private _addToToolbar(): void {\n        const editor = this.editor\n        const $toolbarElem = editor.$toolbarElem\n\n        // 遍历添加到 DOM\n        this.menuList.forEach(menu => {\n            const $elem = menu.$elem\n            if ($elem) {\n                $toolbarElem.append($elem)\n            }\n        })\n    }\n\n    /**\n     * 获取菜单对象\n     * @param 菜单名称 小写\n     * @return Menus 菜单对象\n     */\n    public menuFind(key: string): Menu {\n        const menuList = this.menuList\n        for (let i = 0, l = menuList.length; i < l; i++) {\n            if (menuList[i].key === key) return menuList[i]\n        }\n\n        return menuList[0]\n    }\n\n    /**\n     * @description 修改菜单激活状态\n     */\n    public changeActive(): void {\n        this.menuList.forEach(menu => {\n            setTimeout((menu as any).tryChangeActive.bind(menu), 100) // 暂用 any ，后面再替换\n        })\n    }\n}\n\nexport default Menus\n", "module.exports = require(\"core-js-pure/stable/object/keys\");", "var parent = require('../../es/object/keys');\n\nmodule.exports = parent;\n", "require('../../modules/es.object.keys');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Object.keys;\n", "var $ = require('../internals/export');\nvar toObject = require('../internals/to-object');\nvar nativeKeys = require('../internals/object-keys');\nvar fails = require('../internals/fails');\n\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeKeys(1); });\n\n// `Object.keys` method\n// https://tc39.github.io/ecma262/#sec-object.keys\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES }, {\n  keys: function keys(it) {\n    return nativeKeys(toObject(it));\n  }\n});\n", "var parent = require('../../es/object/entries');\n\nmodule.exports = parent;\n", "require('../../modules/es.object.entries');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Object.entries;\n", "var $ = require('../internals/export');\nvar $entries = require('../internals/object-to-array').entries;\n\n// `Object.entries` method\n// https://tc39.github.io/ecma262/#sec-object.entries\n$({ target: 'Object', stat: true }, {\n  entries: function entries(O) {\n    return $entries(O);\n  }\n});\n", "var DESCRIPTORS = require('../internals/descriptors');\nvar objectKeys = require('../internals/object-keys');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar propertyIsEnumerable = require('../internals/object-property-is-enumerable').f;\n\n// `Object.{ entries, values }` methods implementation\nvar createMethod = function (TO_ENTRIES) {\n  return function (it) {\n    var O = toIndexedObject(it);\n    var keys = objectKeys(O);\n    var length = keys.length;\n    var i = 0;\n    var result = [];\n    var key;\n    while (length > i) {\n      key = keys[i++];\n      if (!DESCRIPTORS || propertyIsEnumerable.call(O, key)) {\n        result.push(TO_ENTRIES ? [key, O[key]] : O[key]);\n      }\n    }\n    return result;\n  };\n};\n\nmodule.exports = {\n  // `Object.entries` method\n  // https://tc39.github.io/ecma262/#sec-object.entries\n  entries: createMethod(true),\n  // `Object.values` method\n  // https://tc39.github.io/ecma262/#sec-object.values\n  values: createMethod(false)\n};\n", "var parent = require('../../es/instance/some');\n\nmodule.exports = parent;\n", "var some = require('../array/virtual/some');\n\nvar ArrayPrototype = Array.prototype;\n\nmodule.exports = function (it) {\n  var own = it.some;\n  return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.some) ? some : own;\n};\n", "require('../../../modules/es.array.some');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Array').some;\n", "'use strict';\nvar $ = require('../internals/export');\nvar $some = require('../internals/array-iteration').some;\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\nvar arrayMethodUsesToLength = require('../internals/array-method-uses-to-length');\n\nvar STRICT_METHOD = arrayMethodIsStrict('some');\nvar USES_TO_LENGTH = arrayMethodUsesToLength('some');\n\n// `Array.prototype.some` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.some\n$({ target: 'Array', proto: true, forced: !STRICT_METHOD || !USES_TO_LENGTH }, {\n  some: function some(callbackfn /* , thisArg */) {\n    return $some(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\n", "/**\n * @description 所有菜单的构造函数\n * @author wangfupeng\n */\n\nimport Bold from './bold/index'\nimport Head from './head/index'\nimport Link from './link/index'\nimport Italic from './italic/index'\nimport Underline from './underline/index'\nimport StrikeThrough from './strike-through/index'\nimport FontStyle from './font-style/index'\nimport FontSize from './font-size'\nimport Justify from './justify/index'\nimport Quote from './quote/index'\nimport BackColor from './back-color/index'\nimport FontColor from './font-color/index'\nimport Video from './video/index'\nimport Image from './img/index'\nimport Indent from './indent/index'\nimport Emoticon from './emoticon/index'\nimport List from './list/index'\nimport LineHeight from './lineHeight/index'\nimport Undo from './undo/index'\nimport Redo from './redo/index'\nimport Table from './table/index'\nimport Code from './code'\nimport SplitLine from './split-line/index'\nimport Todo from './todo'\n\nexport type MenuListType = {\n    [key: string]: any\n}\n\nexport default {\n    bold: Bold,\n    head: Head,\n    italic: Italic,\n    link: Link,\n    underline: Underline,\n    strikeThrough: StrikeThrough,\n    fontName: FontStyle,\n    fontSize: FontSize,\n    justify: Justify,\n    quote: Quote,\n    backColor: BackColor,\n    foreColor: FontColor,\n    video: Video,\n    image: Image,\n    indent: Indent,\n    emoticon: Emoticon,\n    list: List,\n    lineHeight: LineHeight,\n    undo: Undo,\n    redo: Redo,\n    table: Table,\n    code: Code,\n    splitLine: SplitLine,\n    todo: Todo,\n}\n", "/**\n * @description 加粗\n * @author wangfupeng\n */\n\nimport BtnMenu from '../menu-constructors/BtnMenu'\nimport $ from '../../utils/dom-core'\nimport Editor from '../../editor/index'\nimport { MenuActive } from '../menu-constructors/Menu'\n\nclass Bold extends BtnMenu implements MenuActive {\n    constructor(editor: Editor) {\n        const $elem = $(\n            `<div class=\"w-e-menu\" data-title=\"加粗\">\n                <i class=\"w-e-icon-bold\"></i>\n            </div>`\n        )\n        super($elem, editor)\n    }\n\n    /**\n     * 点击事件\n     */\n    public clickHandler(): void {\n        const editor = this.editor\n        const isSelectEmpty = editor.selection.isSelectionEmpty()\n\n        if (isSelectEmpty) {\n            // 选区范围是空的，插入并选中一个“空白”\n            editor.selection.createEmptyRange()\n        }\n\n        // 执行 bold 命令\n        editor.cmd.do('bold')\n\n        if (isSelectEmpty) {\n            // 需要将选区范围折叠起来\n            editor.selection.collapseRange()\n            editor.selection.restoreSelection()\n        }\n    }\n\n    /**\n     * 尝试修改菜单激活状态\n     */\n    public tryChangeActive(): void {\n        const editor = this.editor\n        if (editor.cmd.queryCommandState('bold')) {\n            this.active()\n        } else {\n            this.unActive()\n        }\n    }\n}\n\nexport default Bold\n", "/**\n * @description 标题\n * @author wangfupeng\n */\n\nimport DropListMenu from '../menu-constructors/DropListMenu'\nimport $, { DomElement } from '../../utils/dom-core'\nimport Editor from '../../editor/index'\nimport { MenuActive } from '../menu-constructors/Menu'\nimport { getRandomCode } from '../../utils/util'\nimport { TCatalog } from '../../config/events'\nimport { EMPTY_P } from '../../utils/const'\n\nclass Head extends DropListMenu implements MenuActive {\n    oldCatalogs: TCatalog[] | undefined\n    constructor(editor: Editor) {\n        const $elem = $(\n            '<div class=\"w-e-menu\" data-title=\"标题\"><i class=\"w-e-icon-header\"></i></div>'\n        )\n        const dropListConf = {\n            width: 100,\n            title: '设置标题',\n            type: 'list', // droplist 以列表形式展示\n            list: [\n                { $elem: $('<h1>H1</h1>'), value: '<h1>' },\n                { $elem: $('<h2>H2</h2>'), value: '<h2>' },\n                { $elem: $('<h3>H3</h3>'), value: '<h3>' },\n                { $elem: $('<h4>H4</h4>'), value: '<h4>' },\n                { $elem: $('<h5>H5</h5>'), value: '<h5>' },\n                {\n                    $elem: $(`<p>${editor.i18next.t('menus.dropListMenu.head.正文')}</p>`),\n                    value: '<p>',\n                },\n            ],\n            clickHandler: (value: string) => {\n                // 注意 this 是指向当前的 Head 对象\n                this.command(value)\n            },\n        }\n        super($elem, editor, dropListConf)\n\n        const onCatalogChange = editor.config.onCatalogChange\n        // 未配置目录change监听回调时不运行下面操作\n        if (onCatalogChange) {\n            this.oldCatalogs = []\n            this.addListenerCatalog() // 监听文本框编辑时的大纲信息\n            this.getCatalogs() // 初始有值的情况获取一遍大纲信息\n        }\n    }\n\n    /**\n     * 执行命令\n     * @param value value\n     */\n    public command(value: string): void {\n        const editor = this.editor\n        const $selectionElem = editor.selection.getSelectionContainerElem()\n        if ($selectionElem && editor.$textElem.equal($selectionElem)) {\n            // 不能选中多行来设置标题，否则会出现问题\n            // 例如选中的是 <p>xxx</p><p>yyy</p> 来设置标题，设置之后会成为 <h1>xxx<br>yyy</h1> 不符合预期\n            this.setMultilineHead(value)\n        } else {\n            // 选中内容包含序列，code，表格，分割线时不处理\n            if (\n                ['OL', 'UL', 'LI', 'TABLE', 'TH', 'TR', 'CODE', 'HR'].indexOf(\n                    $($selectionElem).getNodeName()\n                ) > -1\n            ) {\n                return\n            }\n\n            editor.cmd.do('formatBlock', value)\n        }\n\n        // 标题设置成功且不是<p>正文标签就配置大纲id\n        value !== '<p>' && this.addUidForSelectionElem()\n    }\n\n    /**\n     * 为标题设置大纲\n     */\n    private addUidForSelectionElem() {\n        const editor = this.editor\n        const tag = editor.selection.getSelectionContainerElem()\n        const id = getRandomCode() // 默认五位数id\n        $(tag).attr('id', id)\n    }\n\n    /**\n     * 监听change事件来返回大纲信息\n     */\n    private addListenerCatalog() {\n        const editor = this.editor\n        editor.txt.eventHooks.changeEvents.push(() => {\n            this.getCatalogs()\n        })\n    }\n\n    /**\n     * 获取大纲数组\n     */\n    private getCatalogs() {\n        const editor = this.editor\n        const $textElem = this.editor.$textElem\n        const onCatalogChange = editor.config.onCatalogChange\n        const elems = $textElem.find('h1,h2,h3,h4,h5')\n        const catalogs: TCatalog[] = []\n        elems.forEach((elem, index) => {\n            const $elem = $(elem)\n            let id = $elem.attr('id')\n            const tag = $elem.getNodeName()\n            const text = $elem.text()\n            if (!id) {\n                id = getRandomCode()\n                $elem.attr('id', id)\n            }\n            // 标题为空的情况不生成目录\n            if (!text) return\n            catalogs.push({\n                tag,\n                id,\n                text,\n            })\n        })\n        // 旧目录和新目录对比是否相等，不相等则运行回调并保存新目录到旧目录变量，以方便下一次对比\n        if (JSON.stringify(this.oldCatalogs) !== JSON.stringify(catalogs)) {\n            this.oldCatalogs = catalogs\n            onCatalogChange && onCatalogChange(catalogs)\n        }\n    }\n    /**\n     * 设置选中的多行标题\n     * @param value  需要执行的命令值\n     */\n    private setMultilineHead(value: string) {\n        const editor = this.editor\n        const $selection = editor.selection\n        // 初始选区的父节点\n        const containerElem = $selection.getSelectionContainerElem()?.elems[0]!\n        // 白名单：用户选区里如果有该元素则不进行转换\n        const _WHITE_LIST = [\n            'IMG',\n            'VIDEO',\n            'TABLE',\n            'TH',\n            'TR',\n            'UL',\n            'OL',\n            'PRE',\n            'HR',\n            'BLOCKQUOTE',\n        ]\n        // 获取选中的首、尾元素\n        const startElem = $($selection.getSelectionStartElem())\n        let endElem = $($selection.getSelectionEndElem())\n        // 判断用户选中元素是否为最后一个空元素，如果是将endElem指向上一个元素\n        if (\n            endElem.elems[0].outerHTML === $(EMPTY_P).elems[0].outerHTML &&\n            !endElem.elems[0].nextSibling\n        ) {\n            endElem = endElem.prev()!\n        }\n        // 存放选中的所有元素\n        const cacheDomList: DomElement[] = []\n        cacheDomList.push(startElem.getNodeTop(editor))\n        // 选中首尾元素在父级下的坐标\n        const indexList: number[] = []\n        // 选区共同祖先元素的所有子节点\n        const childList = $selection.getRange()?.commonAncestorContainer.childNodes\n        // 找到选区的首尾元素的下标，方便最后恢复选区\n        childList?.forEach((item, index) => {\n            if (item === cacheDomList[0].getNode()) {\n                indexList.push(index)\n            }\n            if (item === endElem.getNodeTop(editor).getNode()) {\n                indexList.push(index)\n            }\n        })\n        // 找到首尾元素中间所包含的所有dom\n        let i = 0\n        // 数组中的当前元素不等于选区最后一个节点时循环寻找中间节点\n        while (cacheDomList[i].getNode() !== endElem.getNodeTop(editor).getNode()) {\n            // 严谨性判断，是否元素为空\n            if (!cacheDomList[i].elems[0]) return\n            let d = $(cacheDomList[i].next().getNode())\n            cacheDomList.push(d)\n            i++\n        }\n        // 将选区内的所有子节点进行遍历生成对应的标签\n        cacheDomList?.forEach((_node, index) => {\n            // 判断元素是否含有白名单内的标签元素\n            if (!this.hasTag(_node, _WHITE_LIST)) {\n                const $h = $(value)\n                const $parentNode = _node.parent().getNode()\n                // 设置标签内容\n                $h.html(`${_node.html()}`)\n                // 插入生成的新标签\n                $parentNode.insertBefore($h.getNode(), _node.getNode())\n                // 移除原有的标签\n                _node.remove()\n            }\n        })\n        // 重新设置选区起始位置，保留拖蓝区域\n        $selection.createRangeByElems(\n            containerElem.children[indexList[0]],\n            containerElem.children[indexList[1]]\n        )\n    }\n    /**\n     * 是否含有某元素\n     * @param elem 需要检查的元素\n     * @param whiteList 白名单\n     */\n    private hasTag(elem: DomElement, whiteList: string[]): boolean {\n        if (!elem) return false\n        if (whiteList.includes(elem?.getNodeName())) return true\n        let _flag = false\n        elem.children()?.forEach(child => {\n            _flag = this.hasTag($(child), whiteList)\n        })\n        return _flag\n    }\n    /**\n     * 尝试改变菜单激活（高亮）状态\n     */\n    public tryChangeActive() {\n        const editor = this.editor\n        const reg = /^h/i\n        const cmdValue = editor.cmd.queryCommandValue('formatBlock')\n        if (reg.test(cmdValue)) {\n            this.active()\n        } else {\n            this.unActive()\n        }\n    }\n}\n\nexport default Head\n", "module.exports = require(\"core-js-pure/stable/json/stringify\");", "var parent = require('../../es/json/stringify');\n\nmodule.exports = parent;\n", "require('../../modules/es.json.stringify');\nvar core = require('../../internals/path');\n\nif (!core.JSON) core.JSON = { stringify: JSON.stringify };\n\n// eslint-disable-next-line no-unused-vars\nmodule.exports = function stringify(it, replacer, space) {\n  return core.JSON.stringify.apply(null, arguments);\n};\n", "var $ = require('../internals/export');\nvar getBuiltIn = require('../internals/get-built-in');\nvar fails = require('../internals/fails');\n\nvar $stringify = getBuiltIn('JSON', 'stringify');\nvar re = /[\\uD800-\\uDFFF]/g;\nvar low = /^[\\uD800-\\uDBFF]$/;\nvar hi = /^[\\uDC00-\\uDFFF]$/;\n\nvar fix = function (match, offset, string) {\n  var prev = string.charAt(offset - 1);\n  var next = string.charAt(offset + 1);\n  if ((low.test(match) && !hi.test(next)) || (hi.test(match) && !low.test(prev))) {\n    return '\\\\u' + match.charCodeAt(0).toString(16);\n  } return match;\n};\n\nvar FORCED = fails(function () {\n  return $stringify('\\uDF06\\uD834') !== '\"\\\\udf06\\\\ud834\"'\n    || $stringify('\\uDEAD') !== '\"\\\\udead\"';\n});\n\nif ($stringify) {\n  // https://github.com/tc39/proposal-well-formed-stringify\n  $({ target: 'JSON', stat: true, forced: FORCED }, {\n    // eslint-disable-next-line no-unused-vars\n    stringify: function stringify(it, replacer, space) {\n      var result = $stringify.apply(null, arguments);\n      return typeof result == 'string' ? result.replace(re, fix) : result;\n    }\n  });\n}\n", "/**\n * @description 链接 菜单\n * @author wangfupeng\n */\n\nimport PanelMenu from '../menu-constructors/PanelMenu'\nimport Editor from '../../editor/index'\nimport $, { DomElement } from '../../utils/dom-core'\nimport createPanelConf from './create-panel-conf'\nimport isActive, { getParentNodeA } from './is-active'\nimport Panel from '../menu-constructors/Panel'\nimport { MenuActive } from '../menu-constructors/Menu'\nimport bindEvent from './bind-event/index'\nimport { EMPTY_P } from '../../utils/const'\n\nclass Link extends PanelMenu implements MenuActive {\n    constructor(editor: Editor) {\n        const $elem = $(\n            '<div class=\"w-e-menu\" data-title=\"链接\"><i class=\"w-e-icon-link\"></i></div>'\n        )\n        super($elem, editor)\n\n        // 绑定事件，如点击链接时，可以查看链接\n        bindEvent(editor)\n    }\n\n    /**\n     * 菜单点击事件\n     */\n    public clickHandler(): void {\n        const editor = this.editor\n        let $linkElem\n\n        /**\n            @author:Gavin\n            @description \n                解决当全选删除编辑区内容时，点击链接没反应的问题(因为选区有问题)\n              \n        **/\n        let $selectionElem = editor.selection.getSelectionContainerElem()\n        const $textElem = editor.$textElem\n        const html = $textElem.html()\n        const $txtHtml = html.trim()\n\n        if ($txtHtml === EMPTY_P) {\n            const $emptyChild = $textElem.children()\n            // 调整选区\n            editor.selection.createRangeByElem($emptyChild as DomElement, true, true)\n\n            // 重新获取选区\n            $selectionElem = editor.selection.getSelectionContainerElem()\n        }\n\n        // 判断是否是多行 多行则退出 否则会出现问题\n        if ($selectionElem && editor.$textElem.equal($selectionElem)) {\n            return\n        }\n\n        if (this.isActive) {\n            let text = ''\n            let href = ''\n\n            // 菜单被激活，说明选区在链接里\n            $linkElem = editor.selection.getSelectionContainerElem()\n\n            if (!$linkElem) {\n                return\n            }\n\n            if ($linkElem.getNodeName() !== 'A') {\n                const parentNodeA = getParentNodeA($linkElem)!\n\n                $linkElem = $(parentNodeA)\n            }\n\n            text = $linkElem.elems[0].innerText\n            href = $linkElem.attr('href')\n\n            // 弹出 panel\n            this.createPanel(text, href)\n        } else {\n            // 菜单未被激活，说明选区不在链接里\n            if (editor.selection.isSelectionEmpty()) {\n                // 选区是空的，未选中内容\n                this.createPanel('', '')\n            } else {\n                // 选中内容了\n                this.createPanel(editor.selection.getSelectionText(), '')\n            }\n        }\n    }\n\n    /**\n     * 创建 panel\n     * @param text 文本\n     * @param link 链接\n     */\n    private createPanel(text: string, link: string): void {\n        const conf = createPanelConf(this.editor, text, link)\n        const panel = new Panel(this, conf)\n        panel.create()\n    }\n\n    /**\n     * 尝试修改菜单 active 状态\n     */\n    public tryChangeActive() {\n        const editor = this.editor\n        if (isActive(editor)) {\n            this.active()\n        } else {\n            this.unActive()\n        }\n    }\n}\n\nexport default Link\n", "/**\n * @description link 菜单 panel tab 配置\n * @author wangfupeng\n */\n\nimport Editor from '../../editor/index'\nimport { PanelConf } from '../menu-constructors/Panel'\nimport { getRandom } from '../../utils/util'\nimport $, { DomElement } from '../../utils/dom-core'\nimport isActive, { getParentNodeA, EXTRA_TAG } from './is-active'\nimport { insertHtml } from './util'\n\nexport default function (editor: Editor, text: string, link: string): PanelConf {\n    // panel 中需要用到的id\n    const inputLinkId = getRandom('input-link')\n    const inputTextId = getRandom('input-text')\n    const btnOkId = getRandom('btn-ok')\n    const btnDelId = getRandom('btn-del')\n\n    // 是否显示“取消链接”\n    const delBtnDisplay = isActive(editor) ? 'inline-block' : 'none'\n\n    let $selectedLink: DomElement\n\n    /**\n     * 选中整个链接元素\n     */\n    function selectLinkElem(): void {\n        if (!isActive(editor)) return\n\n        const $linkElem = editor.selection.getSelectionContainerElem()\n        if (!$linkElem) return\n        editor.selection.createRangeByElem($linkElem)\n        editor.selection.restoreSelection()\n\n        $selectedLink = $linkElem // 赋值给函数内全局变量\n    }\n\n    /**\n     * 插入链接\n     * @param text 文字\n     * @param link 链接\n     */\n    function insertLink(text: string, link: string): void {\n        // fix: 修复列表下无法设置超链接的问题(替换选中文字中的标签)\n\n        // const TagRegExp = new RegExp(/(<\\/?ul>)|(<\\/?li>)|(<\\/?ol>)/g)\n\n        // const resultText = text.replace(TagRegExp, '')\n\n        /**\n         * fix: 插入链接后再修改链接地址问题，会导致页面链接有问题\n         *\n         * 同上，列表无法插入链接的原因，是因为在insertLink, 处理text时有问题。\n         */\n        const resultText = text.replace(/</g, '&lt;').replace(/>/g, '&gt;') // Link xss\n\n        const $elem: DomElement = $(`<a target=\"_blank\">${resultText}</a>`)\n        const linkDom = $elem.elems[0] as HTMLAnchorElement\n\n        // fix: 字符转义问题，https://xxx.org?bar=1&macro=2 => https://xxx.org?bar=1¯o=2\n        linkDom.innerText = text\n\n        // 避免拼接字符串，带来的字符串嵌套问题：如: <a href=\"\"><img src=1 xx />\"> 造成xss攻击\n        linkDom.href = link\n\n        if (isActive(editor)) {\n            // 选区处于链接中，则选中整个菜单，再执行 insertHTML\n            selectLinkElem()\n            editor.cmd.do('insertElem', $elem)\n        } else {\n            // 选区未处于链接中，直接插入即可\n            editor.cmd.do('insertElem', $elem)\n        }\n    }\n\n    /**\n     * 取消链接\n     */\n    function delLink(): void {\n        if (!isActive(editor)) {\n            return\n        }\n        // 选中整个链接\n        selectLinkElem()\n\n        /**\n         * 替换链接\n         *\n         * 两种情况\n         * 1. 特殊标签里嵌套a，也要保留特殊标签：<b><a></a></b>  先加粗后添加链接\n         * 2. a标签里面可能会含有其他元素如：b, i等，要保留： <a><b></b></a> 先添加链接后加粗\n         */\n\n        if ($selectedLink.getNodeName() === 'A') {\n            const linkElem = $selectedLink.elems[0]\n            const linkParentNode = linkElem.parentElement\n\n            // 判断父级元素是不是特殊元素\n            if (linkParentNode && EXTRA_TAG.includes(linkParentNode.nodeName)) {\n                // 将特殊元素的内容设置为a标签的内容\n                linkParentNode.innerHTML = linkElem.innerHTML\n            } else {\n                // 如果父级不是特殊元素，直接设置内容\n                editor.cmd.do('insertHTML', '<span>' + linkElem.innerHTML + '</span>')\n            }\n        } else {\n            // 如果链接上选区是特殊元素，需要获取最近的a标签，获取html结果，以保留特殊元素\n            const parentNodeA = getParentNodeA($selectedLink)!\n\n            const selectionContent = parentNodeA.innerHTML\n\n            editor.cmd.do('insertHTML', '<span>' + selectionContent + '</span>')\n        }\n    }\n\n    /**\n     * 校验链接是否合法\n     * @param link 链接\n     */\n    function checkLink(text: string, link: string): boolean {\n        //查看开发者自定义配置的返回值\n        const check = editor.config.linkCheck(text, link)\n        if (check === undefined) {\n            //用户未能通过开发者的校验，且开发者不希望编辑器提示用户\n        } else if (check === true) {\n            //用户通过了开发者的校验\n            return true\n        } else {\n            //用户未能通过开发者的校验，开发者希望我们提示这一字符串\n            editor.config.customAlert(check, 'warning')\n        }\n        return false\n    }\n\n    const conf = {\n        width: 300,\n        height: 0,\n\n        // 拼接字符串的：xss 攻击：\n        //    如值为：\"><img src=1 onerror=alert(/xss/)>， 插入后：value=\"\"><img src=1 onerror=alert(/xss/)>\", 插入一个img元素\n\n        // panel 中可包含多个 tab\n        tabs: [\n            {\n                // tab 的标题\n                title: editor.i18next.t('menus.panelMenus.link.链接'),\n                // 模板\n                tpl: `<div>\n                        <input\n                            id=\"${inputTextId}\"\n                            type=\"text\"\n                            class=\"block\"\n                            placeholder=\"${editor.i18next.t('menus.panelMenus.link.链接文字')}\"/>\n                        </td>\n                        <input\n                            id=\"${inputLinkId}\"\n                            type=\"text\"\n                            class=\"block\"\n                            placeholder=\"${editor.i18next.t('如')} https://...\"/>\n                        </td>\n                        <div class=\"w-e-button-container\">\n                            <button type=\"button\" id=\"${btnOkId}\" class=\"right\">\n                                ${editor.i18next.t('插入')}\n                            </button>\n                            <button type=\"button\" id=\"${btnDelId}\" class=\"gray right\" style=\"display:${delBtnDisplay}\">\n                                ${editor.i18next.t('menus.panelMenus.link.取消链接')}\n                            </button>\n                        </div>\n                    </div>`,\n                // 事件绑定\n                events: [\n                    // 插入链接\n                    {\n                        selector: '#' + btnOkId,\n                        type: 'click',\n                        fn: () => {\n                            // 获取链接区间的顶层元素\n                            const $selectionContainerElem = editor.selection.getSelectionContainerElem()!\n                            const $elem = $selectionContainerElem?.elems[0]\n\n                            // 获取选取\n                            editor.selection.restoreSelection()\n                            const topNode = editor.selection\n                                .getSelectionRangeTopNodes()[0]\n                                .getNode()\n                            const selection = window.getSelection()\n                            // 执行插入链接\n                            const $link = $('#' + inputLinkId)\n                            const $text = $('#' + inputTextId)\n                            let link = $link.val().trim()\n                            let text = $text.val().trim()\n\n                            let html: string = ''\n\n                            if (selection && !selection?.isCollapsed) {\n                                html = insertHtml(selection, topNode)?.trim()\n                            }\n\n                            // 去除html的tag标签\n                            const htmlText = html?.replace(/<.*?>/g, '')\n                            const htmlTextLen = htmlText?.length ?? 0\n\n                            // 当input中的text的长度大于等于选区的文字时\n                            // 需要判断两者相同的长度的text内容是否相同\n                            // 相同则只需把多余的部分添加上去即可，否则使用input中的内容\n                            if (htmlTextLen <= text.length) {\n                                const startText = text.substring(0, htmlTextLen)\n                                const endText = text.substring(htmlTextLen)\n                                if (htmlText === startText) {\n                                    text = htmlText + endText\n                                }\n                            }\n                            // 链接为空，则不插入\n                            if (!link) return\n                            // 文本为空，则用链接代替\n                            if (!text) text = link\n                            // 校验链接是否满足用户的规则，若不满足则不插入\n                            if (!checkLink(text, link)) return\n\n                            /**\n                             * 插入链接\n                             * 1、针对首次插入链接，利用选区插入a标签即可\n                             * 1、针对：<a><b>xxxx</b></a> 情况，用户操作修改或者替换链接时，编辑得到a，修改已有a标签的href\n                             * 2、针对：<b><a>xxxx</a></b> 情况, 用户操作修改或者替换链接时，只要修改已有a标签的href\n                             */\n\n                            // 选区范围是a标签，直接替换href链接即可\n                            if ($elem?.nodeName === 'A') {\n                                $elem.setAttribute('href', link)\n                                $elem.innerText = text\n\n                                return true\n                            }\n\n                            // 不是a标签，并且为特殊元素, 需要检查是不是首次设置链接，还是已经设置过链接。\n                            if ($elem?.nodeName !== 'A' && EXTRA_TAG.includes($elem.nodeName)) {\n                                const nodeA = getParentNodeA($selectionContainerElem)\n\n                                // 防止第一次设置就为特殊元素，这种情况应该为首次设置链接\n                                if (nodeA) {\n                                    // 链接设置a\n                                    nodeA.setAttribute('href', link)\n\n                                    // 文案还是要设置刚开始的元素内的文字，比如加粗的元素，不然会将加粗替代\n                                    $elem.innerText = text\n\n                                    return true\n                                }\n                            }\n\n                            // 首次插入链接\n                            insertLink(text, link)\n\n                            // 返回 true，表示该事件执行完之后，panel 要关闭。否则 panel 不会关闭\n                            return true\n                        },\n                        bindEnter: true,\n                    },\n                    // 取消链接\n                    {\n                        selector: '#' + btnDelId,\n                        type: 'click',\n                        fn: () => {\n                            // 执行取消链接\n                            delLink()\n\n                            // 返回 true，表示该事件执行完之后，panel 要关闭。否则 panel 不会关闭\n                            return true\n                        },\n                    },\n                ],\n            }, // tab end\n        ], // tabs end\n        /**\n         * 设置input的值，分别为文案和链接地址设置值\n         *\n         * 利用dom 设置链接文案的值，防止回填拼接引号问题, 出现xss攻击\n         *\n         * @param $container 对应上面生成的dom容器\n         * @param type text | link\n         */\n        setLinkValue($container: DomElement, type: string) {\n            let inputId = ''\n            let inputValue = ''\n            let inputDom\n\n            // 设置链接文案\n            if (type === 'text') {\n                inputId = `#${inputTextId}`\n                inputValue = text\n            }\n\n            // 这只链接地址\n            if (type === 'link') {\n                inputId = `#${inputLinkId}`\n                inputValue = link\n            }\n\n            inputDom = $container.find(inputId).elems[0] as HTMLInputElement\n\n            inputDom.value = inputValue\n        },\n    }\n\n    return conf\n}\n", "/**\n * 获取除了包裹在整行区域的顶级Node\n * @param node 最外层node下的某个childNode\n * @param topText 最外层node中文本内容\n */\nfunction getTopNode(node: Node, topText: string): Node {\n    let pointerNode: Node = node\n    let topNode: Node = node\n    do {\n        if (pointerNode.textContent === topText) break\n        topNode = pointerNode\n        if (pointerNode.parentNode) {\n            pointerNode = pointerNode?.parentNode\n        }\n    } while (pointerNode?.nodeName !== 'P')\n\n    return topNode\n}\n\n/**\n * 生成html的string形式\n * @param tagName 标签名\n * @param content 需要包裹的内容\n */\nfunction makeHtmlString(node: Node, content: string): string {\n    let tagName = node.nodeName\n    let attr = ''\n    if (node.nodeType === 3 || /^(h|H)[1-6]$/.test(tagName)) {\n        return content\n    }\n    if (node.nodeType === 1) {\n        const style = (node as Element).getAttribute('style')\n        const face = (node as Element).getAttribute('face')\n        const color = (node as Element).getAttribute('color')\n        if (style) attr = attr + ` style=\"${style}\"`\n        if (face) attr = attr + ` face=\"${face}\"`\n        if (color) attr = attr + ` color=\"${color}\"`\n    }\n    tagName = tagName.toLowerCase()\n    return `<${tagName}${attr}>${content}</${tagName}>`\n}\n\n/**\n * 生成开始或者结束位置的html字符片段\n * @param topText 选区所在的行的文本内容\n * @param node 选区给出的node节点\n * @param startPos node文本内容选取的开始位置\n * @param endPos node文本内容选取的结束位置\n */\nfunction createPartHtml(topText: string, node: Node, startPos: number, endPost?: number): string {\n    let selectionContent = node.textContent?.substring(startPos, endPost)\n    let pointerNode: Node | null = node\n    let content = ''\n    do {\n        content = makeHtmlString(pointerNode, selectionContent ?? '')\n        selectionContent = content\n        pointerNode = pointerNode?.parentElement\n    } while (pointerNode && pointerNode.textContent !== topText)\n\n    return content\n}\n\n/**\n * 生成需要插入的html内容的字符串形式\n * @param selection 选区对象\n * @param topNode 选区所在行的顶级node节点\n */\nfunction insertHtml(selection: Selection, topNode: Node): string {\n    const { anchorNode, focusNode, anchorOffset: anchorPos, focusOffset: focusPos } = selection\n    const topText = topNode.textContent ?? ''\n    const TagArr = getContainerTag(topNode)\n\n    let content: string = ''\n    let startContent: string = ''\n    let middleContent: string = ''\n    let endContent: string = ''\n\n    let startNode = anchorNode\n    let endNode = focusNode\n    // 用来保存 anchorNode的非p最外层节点\n    let pointerNode = anchorNode\n\n    // 节点是同一个的处理\n    if (anchorNode?.isEqualNode(focusNode ?? null)) {\n        let innerContent = createPartHtml(topText, anchorNode, anchorPos, focusPos)\n        innerContent = addContainer(TagArr, innerContent)\n        return innerContent\n    }\n\n    // 选中开始位置节点的处理\n    if (anchorNode) startContent = createPartHtml(topText, anchorNode, anchorPos ?? 0)\n\n    // 结束位置节点的处理\n    if (focusNode) endContent = createPartHtml(topText, focusNode, 0, focusPos)\n\n    // 将指针节点位置放置到开始的节点\n    if (anchorNode) {\n        // 获取start的非p顶级node\n        startNode = getTopNode(anchorNode, topText)\n    }\n    if (focusNode) {\n        // 获取end的非p顶级node\n        endNode = getTopNode(focusNode, topText)\n    }\n\n    // 处于开始和结束节点位置之间的节点的处理\n    pointerNode = startNode?.nextSibling ?? anchorNode\n    while (!pointerNode?.isEqualNode(endNode ?? null)) {\n        const pointerNodeName = pointerNode?.nodeName\n        if (pointerNodeName === '#text') {\n            middleContent = middleContent + pointerNode?.textContent\n        } else {\n            let htmlString = pointerNode?.firstChild?.parentElement?.innerHTML\n            if (pointerNode)\n                middleContent = middleContent + makeHtmlString(pointerNode, htmlString ?? '')\n        }\n        // 解决文字和图片同一行时会触发无限循环, 到不了endNode === pointerNode条件\n        const nextPointNode = pointerNode?.nextSibling ?? pointerNode\n        if (nextPointNode === pointerNode) break\n        pointerNode = nextPointNode\n    }\n\n    content = `${startContent}${middleContent}${endContent}`\n\n    // 增加最外层包裹标签\n    content = addContainer(TagArr, content)\n\n    return content\n}\n/**\n * 获取包裹在最外层的非p Node tagName 数组\n * @param node 选区所在行的node节点\n */\nfunction getContainerTag(node: Node): Node[] {\n    const topText = node.textContent ?? ''\n    let tagArr = []\n    while (node?.textContent === topText) {\n        if (node.nodeName !== 'P' && node.nodeName !== 'TABLE') {\n            tagArr.push(node)\n        }\n        node = node.childNodes[0]\n    }\n    return tagArr\n}\n\n/**\n * 为内容增加包裹标签\n * @param tagArr 最外层包裹的tag数组，索引越小tag越在外面\n * @param content tag要包裹的内容\n */\nfunction addContainer(tagArr: Node[], content: string): string {\n    tagArr.forEach(v => {\n        content = makeHtmlString(v, content)\n    })\n    return content\n}\n\nexport { getTopNode, makeHtmlString, createPartHtml, insertHtml }\n", "/**\n * @description 绑定链接元素的事件，入口\n * @author wangfupeng\n */\n\nimport Editor from '../../../editor/index'\nimport bindTooltipEvent from './tooltip-event'\n\n/**\n * 绑定事件\n * @param editor 编辑器实例\n */\nfunction bindEvent(editor: Editor) {\n    // tooltip 事件\n    bindTooltipEvent(editor)\n}\n\nexport default bindEvent\n", "/**\n * @description tooltip 事件\n * @author wangfupeng\n */\n\nimport $, { DomElement } from '../../../utils/dom-core'\nimport Tooltip, { TooltipConfType } from '../../menu-constructors/Tooltip'\nimport Editor from '../../../editor/index'\nimport { EXTRA_TAG } from '../is-active'\n\n/**\n * 生成 Tooltip 的显示隐藏函数\n */\nfunction createShowHideFn(editor: Editor) {\n    let tooltip: Tooltip | null\n\n    /**\n     * 显示 tooltip\n     * @param $link 链接元素\n     */\n    function showLinkTooltip($link: DomElement) {\n        const conf: TooltipConfType = [\n            {\n                $elem: $(`<span>${editor.i18next.t('menus.panelMenus.link.查看链接')}</span>`),\n                onClick: (editor: Editor, $link: DomElement) => {\n                    const link = $link.attr('href')\n                    window.open(link, '_target')\n\n                    // 返回 true，表示执行完之后，隐藏 tooltip。否则不隐藏。\n                    return true\n                },\n            },\n            {\n                $elem: $(`<span>${editor.i18next.t('menus.panelMenus.link.取消链接')}</span>`),\n                onClick: (editor: Editor, $link: DomElement) => {\n                    // 选中链接元素\n                    editor.selection.createRangeByElem($link)\n                    editor.selection.restoreSelection()\n\n                    const $childNodes = $link.childNodes()\n                    // 如果链接是图片\n                    if ($childNodes?.getNodeName() === 'IMG') {\n                        // 获取选中的图片\n                        const $selectIMG = editor.selection.getSelectionContainerElem()?.children()\n                            ?.elems[0].children[0]\n                        // 插入图片\n                        editor.cmd.do(\n                            'insertHTML',\n                            `<img \n                                src=${$selectIMG?.getAttribute('src')} \n                                style=${$selectIMG?.getAttribute('style')}>`\n                        )\n                    } else {\n                        /**\n                         * 替换链接\n                         *\n                         * 两种情况\n                         * 1. a标签里面可能会含有其他元素如：b, i等，要保留： <a><b></b></a> 先添加链接后加粗\n                         * 2. 特殊标签里嵌套a，也要保留特殊标签：<b><a></a></b>  先加粗后添加链接\n                         */\n                        const linkElem = $link.elems[0]\n\n                        // a标签里面的html结构\n                        const selectionContent = linkElem.innerHTML\n\n                        // a标签的父元素\n                        const linkParentNode = linkElem.parentElement\n\n                        if (linkParentNode && EXTRA_TAG.includes(linkParentNode.nodeName)) {\n                            linkParentNode.innerHTML = selectionContent\n                        } else {\n                            editor.cmd.do('insertHTML', '<span>' + selectionContent + '</span>')\n                        }\n                    }\n\n                    // 返回 true，表示执行完之后，隐藏 tooltip。否则不隐藏。\n                    return true\n                },\n            },\n        ]\n\n        // 创建 tooltip\n        tooltip = new Tooltip(editor, $link, conf)\n        tooltip.create()\n    }\n\n    /**\n     * 隐藏 tooltip\n     */\n    function hideLinkTooltip() {\n        // 移除 tooltip\n        if (tooltip) {\n            tooltip.remove()\n            tooltip = null\n        }\n    }\n\n    return {\n        showLinkTooltip,\n        hideLinkTooltip,\n    }\n}\n\n/**\n * 绑定 tooltip 事件\n * @param editor 编辑器实例\n */\nfunction bindTooltipEvent(editor: Editor) {\n    const { showLinkTooltip, hideLinkTooltip } = createShowHideFn(editor)\n\n    // 点击链接元素是，显示 tooltip\n    editor.txt.eventHooks.linkClickEvents.push(showLinkTooltip)\n\n    // 点击其他地方，或者滚动时，隐藏 tooltip\n    editor.txt.eventHooks.clickEvents.push(hideLinkTooltip)\n    editor.txt.eventHooks.keyupEvents.push(hideLinkTooltip)\n    editor.txt.eventHooks.toolbarClickEvents.push(hideLinkTooltip)\n    editor.txt.eventHooks.menuClickEvents.push(hideLinkTooltip)\n    editor.txt.eventHooks.textScrollEvents.push(hideLinkTooltip)\n}\n\nexport default bindTooltipEvent\n", "/**\n * @description 斜体\n * @author liuwei\n */\n\nimport BtnMenu from '../menu-constructors/BtnMenu'\nimport $ from '../../utils/dom-core'\nimport Editor from '../../editor/index'\nimport { MenuActive } from '../menu-constructors/Menu'\n\nclass Italic extends BtnMenu implements MenuActive {\n    constructor(editor: Editor) {\n        const $elem = $(\n            `<div class=\"w-e-menu\" data-title=\"斜体\">\n                <i class=\"w-e-icon-italic\"></i>\n            </div>`\n        )\n        super($elem, editor)\n    }\n\n    /**\n     * 点击事件\n     */\n    public clickHandler(): void {\n        const editor = this.editor\n        const isSelectEmpty = editor.selection.isSelectionEmpty()\n\n        if (isSelectEmpty) {\n            // 选区范围是空的，插入并选中一个“空白”\n            editor.selection.createEmptyRange()\n        }\n\n        // 执行 italic 命令\n        editor.cmd.do('italic')\n\n        if (isSelectEmpty) {\n            // 需要将选区范围折叠起来\n            editor.selection.collapseRange()\n            editor.selection.restoreSelection()\n        }\n    }\n\n    /**\n     * 尝试修改菜单激活状态\n     */\n    public tryChangeActive(): void {\n        const editor = this.editor\n        if (editor.cmd.queryCommandState('italic')) {\n            this.active()\n        } else {\n            this.unActive()\n        }\n    }\n}\n\nexport default Italic\n", "/**\n * @description 下划线 underline\n * @author dyl\n *\n */\n\nimport BtnMenu from '../menu-constructors/BtnMenu'\nimport $ from '../../utils/dom-core'\nimport Editor from '../../editor/index'\nimport { MenuActive } from '../menu-constructors/Menu'\n\nclass Underline extends BtnMenu implements MenuActive {\n    constructor(editor: Editor) {\n        const $elem = $(\n            `<div class=\"w-e-menu\" data-title=\"下划线\">\n                <i class=\"w-e-icon-underline\"></i>\n            </div>`\n        )\n        super($elem, editor)\n    }\n\n    /**\n     * 点击事件\n     */\n    public clickHandler(): void {\n        const editor = this.editor\n        const isSelectEmpty = editor.selection.isSelectionEmpty()\n\n        if (isSelectEmpty) {\n            // 选区范围是空的，插入并选中一个“空白”\n            editor.selection.createEmptyRange()\n        }\n\n        // 执行 Underline 命令\n        editor.cmd.do('underline')\n\n        if (isSelectEmpty) {\n            // 需要将选区范围折叠起来\n            editor.selection.collapseRange()\n            editor.selection.restoreSelection()\n        }\n    }\n\n    /**\n     * 尝试修改菜单激活状态\n     */\n    public tryChangeActive(): void {\n        const editor = this.editor\n        if (editor.cmd.queryCommandState('underline')) {\n            this.active()\n        } else {\n            this.unActive()\n        }\n    }\n}\n\nexport default Underline\n", "/**\n * @description 删除线\n * @author lkw\n */\n\nimport BtnMenu from '../menu-constructors/BtnMenu'\nimport $ from '../../utils/dom-core'\nimport Editor from '../../editor/index'\nimport { MenuActive } from '../menu-constructors/Menu'\n\nclass StrikeThrough extends BtnMenu implements MenuActive {\n    constructor(editor: Editor) {\n        const $elem = $(\n            `<div class=\"w-e-menu\" data-title=\"删除线\">\n                <i class=\"w-e-icon-strikethrough\"></i>\n            </div>`\n        )\n        super($elem, editor)\n    }\n\n    /**\n     * 点击事件\n     */\n    public clickHandler(): void {\n        const editor = this.editor\n        const isSelectEmpty = editor.selection.isSelectionEmpty()\n\n        if (isSelectEmpty) {\n            // 选区范围是空的，插入并选中一个“空白”\n            editor.selection.createEmptyRange()\n        }\n\n        // 执行 strikeThrough 命令\n        editor.cmd.do('strikeThrough')\n\n        if (isSelectEmpty) {\n            // 需要将选区范围折叠起来\n            editor.selection.collapseRange()\n            editor.selection.restoreSelection()\n        }\n    }\n\n    /**\n     * 尝试修改菜单激活状态\n     */\n    public tryChangeActive(): void {\n        const editor = this.editor\n        if (editor.cmd.queryCommandState('strikeThrough')) {\n            this.active()\n        } else {\n            this.unActive()\n        }\n    }\n}\n\nexport default StrikeThrough\n", "/**\n * @description 字体样式 FontStyle\n * @author dyl\n *\n */\n\nimport DropListMenu from '../menu-constructors/DropListMenu'\nimport $ from '../../utils/dom-core'\nimport Editor from '../../editor/index'\nimport { MenuActive } from '../menu-constructors/Menu'\nimport FontStyleList from './FontStyleList'\n\nclass FontStyle extends DropListMenu implements MenuActive {\n    constructor(editor: Editor) {\n        const $elem = $(\n            `<div class=\"w-e-menu\" data-title=\"字体\">\n                <i class=\"w-e-icon-font\"></i>\n            </div>`\n        )\n        let fontStyleList = new FontStyleList(editor.config.fontNames)\n        const fontListConf = {\n            width: 100,\n            title: '设置字体',\n            type: 'list',\n            list: fontStyleList.getItemList(),\n            clickHandler: (value: string) => {\n                // this 是指向当前的 FontStyle 对象\n                this.command(value)\n            },\n        }\n        super($elem, editor, fontListConf)\n    }\n\n    /**\n     * 执行命令\n     * @param value value\n     */\n    public command(value: string): void {\n        const editor = this.editor\n        const isEmptySelection = editor.selection.isSelectionEmpty()\n\n        const $selectionElem = editor.selection.getSelectionContainerElem()?.elems[0]\n\n        if ($selectionElem == null) return\n\n        const isFont = $selectionElem?.nodeName.toLowerCase() !== 'p'\n        const isSameValue = $selectionElem?.getAttribute('face') === value\n\n        if (isEmptySelection) {\n            if (isFont && !isSameValue) {\n                const $elems = editor.selection.getSelectionRangeTopNodes()\n                editor.selection.createRangeByElem($elems[0])\n                editor.selection.moveCursor($elems[0].elems[0])\n            }\n            editor.selection.setRangeToElem($selectionElem)\n            // 插入空白选区\n            editor.selection.createEmptyRange()\n        }\n\n        editor.cmd.do('fontName', value)\n\n        if (isEmptySelection) {\n            // 需要将选区范围折叠起来\n            editor.selection.collapseRange()\n            editor.selection.restoreSelection()\n        }\n    }\n\n    /**\n     * 尝试修改菜单激活状态\n     * ?字体是否需要有激活状态这个操作?\n     */\n    public tryChangeActive(): void {\n        // const editor = this.editor\n        // const cmdValue = editor.cmd.queryCommandValue('fontName')\n        // if (menusConfig.fontNames.indexOf(cmdValue) >= 0) {\n        //     this.active()\n        // } else {\n        //     this.unActive()\n        // }\n    }\n}\n\nexport default FontStyle\n", "/**\n * @description 字体 class\n * @author dyl\n */\nimport $ from '../../utils/dom-core'\nimport { FontStyleType } from '../../config/menus'\nimport { DropListItem } from '../menu-constructors/DropList'\n\n/**\n * 封装的一个字体菜单列表数据的组装对象,\n * 原因是因为在constructor函数中,直接执行此流程,会让代码量看起来较多,\n * 如果要在constructor调用外部函数,个人目前发现会有错误提示,\n * 因此,想着顺便研究实践下ts,遍创建了这样一个类\n */\nclass FontStyleList {\n    private itemList: DropListItem[]\n    constructor(list: FontStyleType) {\n        this.itemList = []\n        list.forEach(fontValue => {\n            // fontValue 2种情况一种是string类型的直接value等同于font-family\n            // Object类型value为font-family name为ui视图呈现\n            const fontFamily = typeof fontValue === 'string' ? fontValue : fontValue.value\n            const fontName = typeof fontValue === 'string' ? fontValue : fontValue.name\n            this.itemList.push({\n                $elem: $(`<p style=\"font-family:'${fontFamily}'\">${fontName}</p>`),\n                value: fontName,\n            })\n        })\n    }\n\n    public getItemList(): DropListItem[] {\n        return this.itemList\n    }\n}\n\nexport default FontStyleList\n", "/**\n * @description 字号 FontSize\n * @author lkw\n *\n */\n\nimport DropListMenu from '../menu-constructors/DropListMenu'\nimport $ from '../../utils/dom-core'\nimport Editor from '../../editor/index'\nimport { MenuActive } from '../menu-constructors/Menu'\nimport FontSizeList from './FontSizeList'\n\nclass FontSize extends DropListMenu implements MenuActive {\n    constructor(editor: Editor) {\n        const $elem = $(\n            `<div class=\"w-e-menu\" data-title=\"字号\">\n                <i class=\"w-e-icon-text-heigh\"></i>\n            </div>`\n        )\n        let fontStyleList = new FontSizeList(editor.config.fontSizes)\n        const fontListConf = {\n            width: 160,\n            title: '设置字号',\n            type: 'list',\n            list: fontStyleList.getItemList(),\n            clickHandler: (value: string) => {\n                // this 是指向当前的 FontSize 对象\n                this.command(value)\n            },\n        }\n        super($elem, editor, fontListConf)\n    }\n\n    /**\n     * 执行命令\n     * @param value value\n     */\n    public command(value: string): void {\n        const editor = this.editor\n        const isEmptySelection = editor.selection.isSelectionEmpty()\n\n        let selectionElem = editor.selection.getSelectionContainerElem()?.elems[0]\n\n        if (selectionElem == null) return\n\n        editor.cmd.do('fontSize', value)\n        if (isEmptySelection) {\n            // 需要将选区范围折叠起来\n            editor.selection.collapseRange()\n            editor.selection.restoreSelection()\n        }\n    }\n\n    /**\n     * 尝试修改菜单激活状态\n     * ?字号是否需要有激活状态这个操作?\n     */\n    public tryChangeActive(): void {}\n}\n\nexport default FontSize\n", "/**\n * @description 字号 class\n * @author lkw\n */\nimport $ from '../../utils/dom-core'\nimport { DropListItem } from '../menu-constructors/DropList'\nimport { FontSizeConfType } from '../../config/menus'\n\n/**\n * FontSizeList 字号配置列表\n */\nclass FontSizeList {\n    private itemList: DropListItem[]\n\n    constructor(list: FontSizeConfType) {\n        this.itemList = []\n        for (let key in list) {\n            const item = list[key]\n            this.itemList.push({\n                $elem: $(`<p style=\"font-size:${key}\">${item.name}</p>`),\n                value: item.value,\n            })\n        }\n    }\n\n    public getItemList(): DropListItem[] {\n        return this.itemList\n    }\n}\n\nexport default FontSizeList\n", "/**\n * @description 对齐方式\n * @author liuwei\n */\n\nimport DropListMenu from '../menu-constructors/DropListMenu'\nimport $, { DomElement } from '../../utils/dom-core'\nimport Editor from '../../editor/index'\nimport { MenuActive } from '../menu-constructors/Menu'\n\nconst SPECIAL_NODE_LIST = ['LI']\nconst SPECIAL_TOP_NODE_LIST = ['BLOCKQUOTE']\n\nclass Justify extends DropListMenu implements MenuActive {\n    constructor(editor: Editor) {\n        const $elem = $(\n            '<div class=\"w-e-menu\" data-title=\"对齐\"><i class=\"w-e-icon-paragraph-left\"></i></div>'\n        )\n\n        const dropListConf = {\n            width: 100,\n            title: '对齐方式',\n            type: 'list', // droplist 以列表形式展示\n            list: [\n                {\n                    $elem: $(\n                        `<p>\n                            <i class=\"w-e-icon-paragraph-left w-e-drop-list-item\"></i>\n                            ${editor.i18next.t('menus.dropListMenu.justify.靠左')}\n                        </p>`\n                    ),\n                    value: 'left',\n                },\n                {\n                    $elem: $(\n                        `<p>\n                            <i class=\"w-e-icon-paragraph-center w-e-drop-list-item\"></i>\n                            ${editor.i18next.t('menus.dropListMenu.justify.居中')}\n                        </p>`\n                    ),\n                    value: 'center',\n                },\n                {\n                    $elem: $(\n                        `<p>\n                            <i class=\"w-e-icon-paragraph-right w-e-drop-list-item\"></i>\n                            ${editor.i18next.t('menus.dropListMenu.justify.靠右')}\n                        </p>`\n                    ),\n                    value: 'right',\n                },\n                {\n                    $elem: $(\n                        `<p>\n                            <i class=\"w-e-icon-paragraph-justify w-e-drop-list-item\"></i>\n                            ${editor.i18next.t('menus.dropListMenu.justify.两端')}\n                        </p>`\n                    ),\n                    value: 'justify',\n                },\n            ],\n            clickHandler: (value: string) => {\n                // 执行对应的value操作\n                this.command(value)\n            },\n        }\n        super($elem, editor, dropListConf)\n    }\n    /**\n     * 执行命令\n     * @param value value\n     */\n    public command(value: string): void {\n        const editor = this.editor\n        const selection = editor.selection\n        const $selectionElem = selection.getSelectionContainerElem()\n\n        // 保存选区\n        selection.saveRange()\n\n        // 获取顶级元素\n        const $elems = editor.selection.getSelectionRangeTopNodes()\n        if ($selectionElem?.length) {\n            // list 在chrome下默认多包裹一个 p，导致不能通过顶层元素判断，所以单独加个判断\n            if (this.isSpecialNode($selectionElem, $elems[0]) || this.isSpecialTopNode($elems[0])) {\n                const el = this.getSpecialNodeUntilTop($selectionElem, $elems[0])\n                if (el == null) return\n\n                $(el).css('text-align', value)\n            } else {\n                $elems.forEach((el: DomElement) => {\n                    el.css('text-align', value)\n                })\n            }\n        }\n        //恢复选区\n        selection.restoreSelection()\n    }\n\n    /**\n     * 获取选区中的特殊元素，如果不存在，则直接返回顶层元素子元素\n     * @param el DomElement\n     * @param topEl DomElement\n     */\n    private getSpecialNodeUntilTop(el: DomElement, topEl: DomElement) {\n        let parentNode: Node | null = el.elems[0]\n        const topNode = topEl.elems[0]\n        // 可能出现嵌套的情况，所以一级一级向上找，是否是特殊元素\n        while (parentNode != null) {\n            if (SPECIAL_NODE_LIST.indexOf(parentNode?.nodeName) !== -1) {\n                return parentNode\n            }\n            // 如果再到 top 元素之前还没找到特殊元素，直接返回元素\n            if (parentNode.parentNode === topNode) {\n                return parentNode\n            }\n            parentNode = parentNode.parentNode\n        }\n        return parentNode\n    }\n\n    /**\n     * 当选区元素或者顶层元素是某些特殊元素时，只需要修改子元素的对齐样式的元素\n     * @param el DomElement\n     * @param topEl DomElement\n     */\n    private isSpecialNode(el: DomElement, topEl: DomElement) {\n        // 如果以后有类似的元素要这样处理，直接修改这个数组即可\n        const parentNode = this.getSpecialNodeUntilTop(el, topEl)\n\n        if (parentNode == null) return false\n\n        return SPECIAL_NODE_LIST.indexOf(parentNode.nodeName) !== -1\n    }\n\n    /**\n     * 当选区 top 元素为某些特殊元素时，只需要修改子元素的对齐样式的元素\n     * @param el DomElement\n     */\n    private isSpecialTopNode(topEl: DomElement) {\n        if (topEl == null) return false\n\n        return SPECIAL_TOP_NODE_LIST.indexOf(topEl.elems[0]?.nodeName) !== -1\n    }\n\n    /**\n     * 尝试改变菜单激活（高亮）状态\n     * 默认左对齐,若选择其他对其方式对active进行高亮否则unActive\n     * ?考虑优化的话 是否可以对具体选中的进行高亮\n     */\n    public tryChangeActive(): void {}\n}\n\nexport default Justify\n", "/**\n * @description 引用\n * @author tonghan\n */\n\nimport $, { DomElement } from '../../utils/dom-core'\nimport Editor from '../../editor/index'\nimport BtnMenu from '../menu-constructors/BtnMenu'\nimport { MenuActive } from '../menu-constructors/Menu'\nimport bindEvent from './bind-event'\nimport createQuote from './create-quote-node'\nimport { EMPTY_P } from '../../utils/const'\n\nclass Quote extends BtnMenu implements MenuActive {\n    constructor(editor: Editor) {\n        const $elem = $(\n            `<div class=\"w-e-menu\" data-title=\"引用\">\n                <i class=\"w-e-icon-quotes-left\"></i>\n            </div>`\n        )\n        super($elem, editor)\n        bindEvent(editor)\n    }\n\n    /**\n     * 点击事件\n     */\n    public clickHandler(): void {\n        const editor = this.editor\n        const isSelectEmpty = editor.selection.isSelectionEmpty()\n        let topNodeElem: DomElement[] = editor.selection.getSelectionRangeTopNodes()\n        const $topNodeElem: DomElement = topNodeElem[topNodeElem.length - 1]\n        const nodeName = this.getTopNodeName()\n        // IE 中不支持 formatBlock <BLOCKQUOTE> ，要用其他方式兼容\n        // 兼容firefox无法取消blockquote的问题\n        if (nodeName === 'BLOCKQUOTE') {\n            // 撤销 quote\n            const $targetELem = $($topNodeElem.childNodes())\n            const len = $targetELem.length\n            let $middle = $topNodeElem\n            $targetELem.forEach((elem: Node) => {\n                const $elem = $(elem)\n                $elem.insertAfter($middle)\n                $middle = $elem\n            })\n            $topNodeElem.remove()\n            editor.selection.moveCursor($targetELem.elems[len - 1])\n            // 即时更新btn状态\n            this.tryChangeActive()\n        } else {\n            // 将 P 转换为 quote\n\n            /**\n            @author:gavin\n            @description \n                1. 解决ctrl+a全选删除后，选区错位的问题。\n                2. 或者内容清空，按删除键后，选区错位。\n\n                导致topNodeElem选择的是编辑器顶层元素，在进行dom操作时，quote插入的位置有问题。\n            **/\n            let $quote = createQuote(topNodeElem)\n\n            //如果选择的元素时顶层元素，就将选区移动到正确的位置\n            if (editor.$textElem.equal($topNodeElem)) {\n                const containerElem = editor.selection.getSelectionContainerElem()?.elems[0]!\n                editor.selection.createRangeByElems(\n                    containerElem.children[0],\n                    containerElem.children[0]\n                )\n\n                topNodeElem = editor.selection.getSelectionRangeTopNodes()\n                $quote = createQuote(topNodeElem)\n                $topNodeElem.append($quote)\n            } else {\n                $quote.insertAfter($topNodeElem)\n            }\n\n            this.delSelectNode(topNodeElem)\n            const moveNode = $quote.childNodes()?.last().getNode() as Node\n\n            if (moveNode == null) return\n\n            // 兼容firefox（firefox下空行情况下选区会在br后，造成自动换行的问题）\n            moveNode.textContent\n                ? editor.selection.moveCursor(moveNode)\n                : editor.selection.moveCursor(moveNode, 0)\n            // 即时更新btn状态\n            this.tryChangeActive()\n            // 防止最后一行无法跳出\n            $(EMPTY_P).insertAfter($quote)\n            return\n        }\n\n        if (isSelectEmpty) {\n            // 需要将选区范围折叠起来\n            editor.selection.collapseRange()\n            editor.selection.restoreSelection()\n        }\n    }\n\n    /**\n     * 尝试修改菜单激活状态\n     */\n    public tryChangeActive(): void {\n        const editor = this.editor\n        const cmdValue = editor.selection.getSelectionRangeTopNodes()[0]?.getNodeName()\n        if (cmdValue === 'BLOCKQUOTE') {\n            this.active()\n        } else {\n            this.unActive()\n        }\n    }\n\n    /**\n     * 获取包裹在最外层的节点(防止内部嵌入多个样式)\n     * @param selectionElem 选中的节点\n     * @returns {string} 最终要处理的节点名称\n     */\n    private getTopNodeName(): string {\n        const editor = this.editor\n        const $topNodeElem = editor.selection.getSelectionRangeTopNodes()[0]\n        const nodeName = $topNodeElem?.getNodeName()\n\n        return nodeName\n    }\n\n    /**\n     * 删除选中的元素\n     * @param selectElem 选中的元素节点数组\n     */\n    private delSelectNode(selectElem: DomElement[]) {\n        selectElem.forEach(node => {\n            node.remove()\n        })\n    }\n}\n\nexport default Quote\n", "import { EMPTY_P } from '../../../utils/const'\nimport Editor from '../../../editor/index'\nimport $, { DomElement } from '../../../utils/dom-core'\nfunction bindEvent(editor: Editor) {\n    function quoteEnter(e: Event) {\n        const $selectElem = editor.selection.getSelectionContainerElem() as DomElement\n        const $topSelectElem = editor.selection.getSelectionRangeTopNodes()[0]\n        // 对quote的enter进行特殊处理\n        //最后一行为空标签时再按会出跳出blockquote\n        if ($topSelectElem?.getNodeName() === 'BLOCKQUOTE') {\n            // firefox下点击引用按钮会选中外容器<blockquote></blockquote>\n            if ($selectElem.getNodeName() === 'BLOCKQUOTE') {\n                const selectNode = $selectElem.childNodes()?.getNode() as Node\n                editor.selection.moveCursor(selectNode)\n            }\n            if ($selectElem.text() === '') {\n                e.preventDefault()\n                $selectElem.remove()\n                const $newLine = $(EMPTY_P)\n                $newLine.insertAfter($topSelectElem)\n                // 将光标移动br前面\n                editor.selection.moveCursor($newLine.getNode(), 0)\n            }\n\n            // 当blockQuote中没有内容回车后移除blockquote\n            if ($topSelectElem.text() === '') {\n                $topSelectElem.remove()\n            }\n        }\n    }\n    editor.txt.eventHooks.enterDownEvents.push(quoteEnter)\n}\n\nexport default bindEvent\n", "import $, { DomElement } from '../../utils/dom-core'\n\n/**\n * 创建一个blockquote元素节点\n * @param editor 编辑器实例\n */\nfunction createQuote($childElem: DomElement[]): DomElement {\n    const $targetElem = $(`<blockquote></blockquote>`)\n    $childElem.forEach(node => {\n        $targetElem.append(node.clone(true))\n    })\n    return $targetElem\n}\n\nexport default createQuote\n", "/**\n * @description 背景颜色 BackColor\n * @author lkw\n *\n */\n\nimport DropListMenu from '../menu-constructors/DropListMenu'\nimport $ from '../../utils/dom-core'\nimport Editor from '../../editor/index'\nimport { MenuActive } from '../menu-constructors/Menu'\nimport { hexToRgb } from '../../utils/util'\nclass BackColor extends DropListMenu implements MenuActive {\n    constructor(editor: Editor) {\n        const $elem = $(\n            `<div class=\"w-e-menu\" data-title=\"背景色\">\n                <i class=\"w-e-icon-paint-brush\"></i>\n            </div>`\n        )\n        const colorListConf = {\n            width: 120,\n            title: '背景颜色',\n            // droplist 内容以 block 形式展示\n            type: 'inline-block',\n            list: editor.config.colors.map(color => {\n                return {\n                    $elem: $(`<i style=\"color:${color};\" class=\"w-e-icon-paint-brush\"></i>`),\n                    value: color,\n                }\n            }),\n            clickHandler: (value: string) => {\n                // this 是指向当前的 BackColor 对象\n                this.command(value)\n            },\n        }\n        super($elem, editor, colorListConf)\n    }\n\n    /**\n     * 执行命令\n     * @param value value\n     */\n    public command(value: string): void {\n        const editor = this.editor\n        const isEmptySelection = editor.selection.isSelectionEmpty()\n        const $selectionElem = editor.selection.getSelectionContainerElem()?.elems[0]\n\n        if ($selectionElem == null) return\n\n        const isSpan = $selectionElem?.nodeName.toLowerCase() !== 'p'\n        const bgColor = $selectionElem?.style.backgroundColor\n        const isSameColor = hexToRgb(value) === bgColor\n\n        if (isEmptySelection) {\n            if (isSpan && !isSameColor) {\n                const $elems = editor.selection.getSelectionRangeTopNodes()\n                editor.selection.createRangeByElem($elems[0])\n                editor.selection.moveCursor($elems[0].elems[0])\n            }\n            // 插入空白选区\n            editor.selection.createEmptyRange()\n        }\n\n        editor.cmd.do('backColor', value)\n\n        if (isEmptySelection) {\n            // 需要将选区范围折叠起来\n            editor.selection.collapseRange()\n            editor.selection.restoreSelection()\n        }\n    }\n\n    /**\n     * 尝试修改菜单激活状态\n     */\n    public tryChangeActive(): void {}\n}\n\nexport default BackColor\n", "/**\n * @description 文字颜色 FontColor\n * @author lkw\n *\n */\n\nimport DropListMenu from '../menu-constructors/DropListMenu'\nimport $ from '../../utils/dom-core'\nimport Editor from '../../editor/index'\nimport { MenuActive } from '../menu-constructors/Menu'\n\nclass FontColor extends DropListMenu implements MenuActive {\n    constructor(editor: Editor) {\n        const $elem = $(\n            `<div class=\"w-e-menu\" data-title=\"文字颜色\">\n                <i class=\"w-e-icon-pencil2\"></i>\n            </div>`\n        )\n        const colorListConf = {\n            width: 120,\n            title: '文字颜色',\n            // droplist 内容以 block 形式展示\n            type: 'inline-block',\n            list: editor.config.colors.map(color => {\n                return {\n                    $elem: $(`<i style=\"color:${color};\" class=\"w-e-icon-pencil2\"></i>`),\n                    value: color,\n                }\n            }),\n            clickHandler: (value: string) => {\n                // this 是指向当前的 BackColor 对象\n                this.command(value)\n            },\n        }\n        super($elem, editor, colorListConf)\n    }\n\n    /**\n     * 执行命令\n     * @param value value\n     */\n    public command(value: string): void {\n        const editor = this.editor\n        const isEmptySelection = editor.selection.isSelectionEmpty()\n        const $selectionElem = editor.selection.getSelectionContainerElem()?.elems[0]\n\n        if ($selectionElem == null) return\n\n        // 获取选区范围的文字\n        const $selectionText = editor.selection.getSelectionText()\n        // 如果设置的是 a 标签就特殊处理一下，避免回车换行设置颜色无效的情况\n        // 只处理选中a标签内全部文字的情况，因为选中部分文字不存在换行颜色失效的情况\n        if ($selectionElem.nodeName === 'A' && $selectionElem.textContent === $selectionText) {\n            // 创建一个相当于占位的元素\n            const _payloadElem = $('<span>&#8203;</span>').getNode()\n            // 添加到a标签之后\n            $selectionElem.appendChild(_payloadElem)\n        }\n        editor.cmd.do('foreColor', value)\n\n        if (isEmptySelection) {\n            // 需要将选区范围折叠起来\n            editor.selection.collapseRange()\n            editor.selection.restoreSelection()\n        }\n    }\n\n    /**\n     * 尝试修改菜单激活状态\n     */\n    public tryChangeActive(): void {}\n}\n\nexport default FontColor\n", "/**\n * @description 视频 菜单\n * @author tonghan\n */\n\nimport $ from '../../utils/dom-core'\nimport Panel from '../menu-constructors/Panel'\nimport Editor from '../../editor/index'\nimport PanelMenu from '../menu-constructors/PanelMenu'\nimport { MenuActive } from '../menu-constructors/Menu'\nimport createPanelConf from './create-panel-conf'\nimport bindEvent from './bind-event/index'\n\nclass Video extends PanelMenu implements MenuActive {\n    constructor(editor: Editor) {\n        const $elem = $(\n            `<div class=\"w-e-menu\" data-title=\"视频\">\n                <i class=\"w-e-icon-play\"></i>\n            </div>`\n        )\n        super($elem, editor)\n\n        // 绑定事件 tootip\n        bindEvent(editor)\n    }\n\n    /**\n     * 菜单点击事件\n     */\n    public clickHandler(): void {\n        // 弹出 panel\n        this.createPanel('')\n    }\n\n    /**\n     * 创建 panel\n     * @param link 链接\n     */\n    private createPanel(iframe: string): void {\n        const conf = createPanelConf(this.editor, iframe)\n        const panel = new Panel(this, conf)\n        panel.create()\n    }\n\n    /**\n     * 尝试修改菜单 active 状态\n     */\n    public tryChangeActive() {}\n}\n\nexport default Video\n", "/**\n * @description video 菜单 panel tab 配置\n * @author tonghan\n */\n\nimport Editor from '../../editor/index'\nimport { PanelConf, PanelTabConf } from '../menu-constructors/Panel'\nimport { getRandom } from '../../utils/util'\nimport $ from '../../utils/dom-core'\nimport UploadVideo from './upload-video'\nimport { EMPTY_P } from '../../utils/const'\n\nexport default function (editor: Editor, video: string): PanelConf {\n    const config = editor.config\n    const uploadVideo = new UploadVideo(editor)\n\n    // panel 中需要用到的id\n    const inputIFrameId = getRandom('input-iframe')\n    const btnOkId = getRandom('btn-ok')\n    const inputUploadId = getRandom('input-upload')\n    const btnStartId = getRandom('btn-local-ok')\n\n    /**\n     * 插入链接\n     * @param iframe html标签\n     */\n    function insertVideo(video: string): void {\n        editor.cmd.do('insertHTML', video + EMPTY_P)\n\n        // video添加后的回调\n        editor.config.onlineVideoCallback(video)\n    }\n\n    /**\n     * 校验在线视频链接\n     * @param video 在线视频链接\n     */\n    function checkOnlineVideo(video: string): boolean {\n        // 查看开发者自定义配置的返回值\n        const check = editor.config.onlineVideoCheck(video)\n        if (check === true) {\n            return true\n        }\n        if (typeof check === 'string') {\n            //用户未能通过开发者的校验，开发者希望我们提示这一字符串\n            editor.config.customAlert(check, 'error')\n        }\n        return false\n    }\n\n    // tabs配置\n    // const fileMultipleAttr = config.uploadVideoMaxLength === 1 ? '' : 'multiple=\"multiple\"'\n    const tabsConf: PanelTabConf[] = [\n        {\n            // tab 的标题\n            title: editor.i18next.t('menus.panelMenus.video.上传视频'),\n            tpl: `<div class=\"w-e-up-video-container\">\n                    <div id=\"${btnStartId}\" class=\"w-e-up-btn\">\n                        <i class=\"w-e-icon-upload2\"></i>\n                    </div>\n                    <div style=\"display:none;\">\n                        <input id=\"${inputUploadId}\" type=\"file\" accept=\"video/*\"/>\n                    </div>\n                 </div>`,\n            events: [\n                // 触发选择视频\n                {\n                    selector: '#' + btnStartId,\n                    type: 'click',\n                    fn: () => {\n                        const $file = $('#' + inputUploadId)\n                        const fileElem = $file.elems[0]\n                        if (fileElem) {\n                            fileElem.click()\n                        } else {\n                            // 返回 true 可关闭 panel\n                            return true\n                        }\n                    },\n                },\n                // 选择视频完毕\n                {\n                    selector: '#' + inputUploadId,\n                    type: 'change',\n                    fn: () => {\n                        const $file = $('#' + inputUploadId)\n                        const fileElem = $file.elems[0]\n                        if (!fileElem) {\n                            // 返回 true 可关闭 panel\n                            return true\n                        }\n\n                        // 获取选中的 file 对象列表\n                        const fileList = (fileElem as any).files\n                        if (fileList.length) {\n                            uploadVideo.uploadVideo(fileList)\n                        }\n\n                        // 返回 true 可关闭 panel\n                        return true\n                    },\n                },\n            ],\n        },\n        {\n            // tab 的标题\n            title: editor.i18next.t('menus.panelMenus.video.插入视频'),\n            // 模板\n            tpl: `<div>\n                    <input \n                        id=\"${inputIFrameId}\" \n                        type=\"text\" \n                        class=\"block\" \n                        placeholder=\"${editor.i18next.t('如')}：<iframe src=... ></iframe>\"/>\n                    </td>\n                    <div class=\"w-e-button-container\">\n                        <button type=\"button\" id=\"${btnOkId}\" class=\"right\">\n                            ${editor.i18next.t('插入')}\n                        </button>\n                    </div>\n                </div>`,\n            // 事件绑定\n            events: [\n                // 插入视频\n                {\n                    selector: '#' + btnOkId,\n                    type: 'click',\n                    fn: () => {\n                        // 执行插入视频\n                        const $video = $('#' + inputIFrameId)\n                        let video = $video.val().trim()\n\n                        // 视频为空，则不插入\n                        if (!video) return\n                        // 对当前用户插入的内容进行判断，插入为空，或者返回false，都停止插入\n                        if (!checkOnlineVideo(video)) return\n\n                        insertVideo(video)\n\n                        // 返回 true，表示该事件执行完之后，panel 要关闭。否则 panel 不会关闭\n                        return true\n                    },\n                    bindEnter: true,\n                },\n            ],\n        }, // tab end\n    ]\n\n    const conf: PanelConf = {\n        width: 300,\n        height: 0,\n\n        // panel 中可包含多个 tab\n        tabs: [], // tabs end\n    }\n\n    // 显示“上传视频”\n    if (window.FileReader && (config.uploadVideoServer || config.customUploadVideo)) {\n        conf.tabs.push(tabsConf[0])\n    }\n    // 显示“插入视频”\n    if (config.showLinkVideo) {\n        conf.tabs.push(tabsConf[1])\n    }\n\n    return conf\n}\n", "/**\n * @description 上传视频\n * @author lichunlin\n */\n\nimport Editor from '../../editor/index'\nimport { arrForEach, forEach } from '../../utils/util'\nimport post from '../../editor/upload/upload-core'\nimport Progress from '../../editor/upload/progress'\nimport { EMPTY_P } from '../../utils/const'\nimport { UA } from '../../utils/util'\n\ntype ResData = {\n    url: string\n}\n\n// 后台返回的格式\nexport type ResType = {\n    errno: number | string\n    data: ResData\n}\n\nclass UploadVideo {\n    private editor: Editor\n\n    constructor(editor: Editor) {\n        this.editor = editor\n    }\n\n    /**\n     * 上传视频\n     * @param files 文件列表\n     */\n    public uploadVideo(files: FileList | File[]): void {\n        if (!files.length) {\n            return\n        }\n\n        const editor = this.editor\n        const config = editor.config\n\n        // ------------------------------ i18next ------------------------------\n\n        const i18nPrefix = 'validate.'\n        const t = (text: string): string => {\n            return editor.i18next.t(i18nPrefix + text)\n        }\n\n        // ------------------------------ 获取配置信息 ------------------------------\n        // 服务端地址\n        let uploadVideoServer = config.uploadVideoServer\n        // 上传视频的最大体积，默认 1024M\n        const maxSize = config.uploadVideoMaxSize\n        const uploadVideoMaxSize = maxSize / 1024\n        // 一次最多上传多少个视频\n        // const uploadVideoMaxLength = config.uploadVideoMaxLength\n        // 自定义上传视频的名称\n        const uploadVideoName = config.uploadVideoName\n        // 上传视频自定义参数\n        const uploadVideoParams = config.uploadVideoParams\n        // 自定义参数拼接到 url 中\n        const uploadVideoParamsWithUrl = config.uploadVideoParamsWithUrl\n        // 上传视频自定义 header\n        const uploadVideoHeaders = config.uploadVideoHeaders\n        // 钩子函数\n        const uploadVideoHooks = config.uploadVideoHooks\n        // 上传视频超时时间 ms 默认2个小时\n        const uploadVideoTimeout = config.uploadVideoTimeout\n        // 跨域带 cookie\n        const withVideoCredentials = config.withVideoCredentials\n        // 自定义上传\n        const customUploadVideo = config.customUploadVideo\n        // 格式校验\n        const uploadVideoAccept = config.uploadVideoAccept\n\n        // ------------------------------ 验证文件信息 ------------------------------\n        const resultFiles: File[] = []\n        const errInfos: string[] = []\n        arrForEach(files, file => {\n            const name = file.name\n            const size = file.size / 1024 / 1024\n\n            // chrome 低版本 name === undefined\n            if (!name || !size) {\n                return\n            }\n\n            if (!(uploadVideoAccept instanceof Array)) {\n                // 格式不是数组\n                errInfos.push(`【${uploadVideoAccept}】${t('uploadVideoAccept 不是Array')}`)\n                return\n            }\n\n            if (\n                !uploadVideoAccept.some(\n                    item => item === name.split('.')[name.split('.').length - 1]\n                )\n            ) {\n                // 后缀名不合法，不是视频\n                errInfos.push(`【${name}】${t('不是视频')}`)\n                return\n            }\n\n            if (uploadVideoMaxSize < size) {\n                // 上传视频过大\n                errInfos.push(`【${name}】${t('大于')} ${uploadVideoMaxSize}M`)\n                return\n            }\n            //验证通过的加入结果列表\n            resultFiles.push(file)\n        })\n        // 抛出验证信息\n        if (errInfos.length) {\n            config.customAlert(`${t('视频验证未通过')}: \\n` + errInfos.join('\\n'), 'warning')\n            return\n        }\n        // 如果过滤后文件列表为空直接返回\n        if (resultFiles.length === 0) {\n            config.customAlert(t('传入的文件不合法'), 'warning')\n            return\n        }\n\n        // ------------------------------ 自定义上传 ------------------------------\n        if (customUploadVideo && typeof customUploadVideo === 'function') {\n            customUploadVideo(resultFiles, this.insertVideo.bind(this))\n            return\n        }\n\n        // 添加视频数据\n        const formData = new FormData()\n        resultFiles.forEach((file: File, index: number) => {\n            let name = uploadVideoName || file.name\n            if (resultFiles.length > 1) {\n                // 多个文件时，filename 不能重复\n                name = name + (index + 1)\n            }\n            formData.append(name, file)\n        })\n\n        // ------------------------------ 上传视频 ------------------------------\n\n        //添加自定义参数  基于有服务端地址的情况下\n        if (uploadVideoServer) {\n            // 添加自定义参数\n            const uploadVideoServerArr = uploadVideoServer.split('#')\n            uploadVideoServer = uploadVideoServerArr[0]\n            const uploadVideoServerHash = uploadVideoServerArr[1] || ''\n            forEach(uploadVideoParams, (key: string, val: string) => {\n                // 因使用者反应，自定义参数不能默认 encode ，由 v3.1.1 版本开始注释掉\n                // val = encodeURIComponent(val)\n\n                // 第一，将参数拼接到 url 中\n                if (uploadVideoParamsWithUrl) {\n                    if (uploadVideoServer.indexOf('?') > 0) {\n                        uploadVideoServer += '&'\n                    } else {\n                        uploadVideoServer += '?'\n                    }\n                    uploadVideoServer = uploadVideoServer + key + '=' + val\n                }\n\n                // 第二，将参数添加到 formData 中\n                formData.append(key, val)\n            })\n            if (uploadVideoServerHash) {\n                uploadVideoServer += '#' + uploadVideoServerHash\n            }\n\n            // 开始上传\n            const xhr = post(uploadVideoServer, {\n                timeout: uploadVideoTimeout,\n                formData,\n                headers: uploadVideoHeaders,\n                withCredentials: !!withVideoCredentials,\n                beforeSend: xhr => {\n                    if (uploadVideoHooks.before)\n                        return uploadVideoHooks.before(xhr, editor, resultFiles)\n                },\n                onTimeout: xhr => {\n                    config.customAlert(t('上传视频超时'), 'error')\n                    if (uploadVideoHooks.timeout) uploadVideoHooks.timeout(xhr, editor)\n                },\n                onProgress: (percent, e) => {\n                    const progressBar = new Progress(editor)\n                    if (e.lengthComputable) {\n                        percent = e.loaded / e.total\n                        progressBar.show(percent)\n                    }\n                },\n                onError: xhr => {\n                    config.customAlert(\n                        t('上传视频错误'),\n                        'error',\n                        `${t('上传视频错误')}，${t('服务器返回状态')}: ${xhr.status}`\n                    )\n                    if (uploadVideoHooks.error) uploadVideoHooks.error(xhr, editor)\n                },\n                onFail: (xhr, resultStr) => {\n                    config.customAlert(\n                        t('上传视频失败'),\n                        'error',\n                        t('上传视频返回结果错误') + `，${t('返回结果')}: ` + resultStr\n                    )\n                    if (uploadVideoHooks.fail) uploadVideoHooks.fail(xhr, editor, resultStr)\n                },\n                onSuccess: (xhr, result: ResType) => {\n                    if (uploadVideoHooks.customInsert) {\n                        // 自定义插入视频\n                        uploadVideoHooks.customInsert(this.insertVideo.bind(this), result, editor)\n                        return\n                    }\n                    if (result.errno != '0') {\n                        // 返回格式不对，应该为 { errno: 0, data: [...] }\n                        config.customAlert(\n                            t('上传视频失败'),\n                            'error',\n                            `${t('上传视频返回结果错误')}，${t('返回结果')} errno=${result.errno}`\n                        )\n                        if (uploadVideoHooks.fail) uploadVideoHooks.fail(xhr, editor, result)\n                        return\n                    }\n\n                    // 成功，插入视频\n                    const data = result.data\n\n                    this.insertVideo(data.url)\n\n                    // 钩子函数\n                    if (uploadVideoHooks.success) uploadVideoHooks.success(xhr, editor, result)\n                },\n            })\n            if (typeof xhr === 'string') {\n                // 上传被阻止\n                config.customAlert(xhr, 'error')\n            }\n        }\n    }\n\n    /**\n     * 往编辑器区域插入视频\n     * @param url 视频访问地址\n     */\n    public insertVideo(url: string): void {\n        const editor = this.editor\n        const config = editor.config\n\n        const i18nPrefix = 'validate.'\n        const t = (text: string, prefix: string = i18nPrefix): string => {\n            return editor.i18next.t(prefix + text)\n        }\n\n        // 判断用户是否自定义插入视频\n        if (!config.customInsertVideo) {\n            if (UA.isFirefox) {\n                editor.cmd.do(\n                    'insertHTML',\n                    `<p data-we-video-p=\"true\"><video src=\"${url}\" controls=\"controls\" style=\"max-width:100%\"></video></p><p>&#8203</p>`\n                )\n            } else {\n                editor.cmd.do(\n                    'insertHTML',\n                    `<video src=\"${url}\" controls=\"controls\" style=\"max-width:100%\"></video>${EMPTY_P}`\n                )\n            }\n        } else {\n            config.customInsertVideo(url)\n            return\n        }\n\n        // 加载视频\n        let video: any = document.createElement('video')\n        video.onload = () => {\n            video = null\n        }\n        video.onerror = () => {\n            config.customAlert(\n                t('插入视频错误'),\n                'error',\n                `wangEditor: ${t('插入视频错误')}，${t('视频链接')} \"${url}\"，${t('下载链接失败')}`\n            )\n            video = null\n        }\n        video.onabort = () => (video = null)\n        video.src = url\n    }\n}\n\nexport default UploadVideo\n", "module.exports = require(\"core-js-pure/stable/date/now\");", "var parent = require('../../es/date/now');\n\nmodule.exports = parent;\n", "require('../../modules/es.date.now');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Date.now;\n", "var $ = require('../internals/export');\n\n// `Date.now` method\n// https://tc39.github.io/ecma262/#sec-date.now\n$({ target: 'Date', stat: true }, {\n  now: function now() {\n    return new Date().getTime();\n  }\n});\n", "/**\n * @description 绑定视频的事件\n * @author lichunlin\n */\n\nimport Editor from '../../../editor/index'\nimport bindTooltipVideo from './tooltip-event'\nimport bindEventKeyboardEvent from './keyboard'\n\n/**\n * 绑定事件\n * @param editor 编辑器实例\n */\nfunction bindEvent(editor: Editor): void {\n    //Tooltip\n    bindTooltipVideo(editor)\n    bindEventKeyboardEvent(editor)\n}\n\nexport default bindEvent\n", "/**\n * @description tooltip 事件\n * @author lichunlin\n */\n\nimport $, { DomElement } from '../../../utils/dom-core'\nimport Tooltip, { TooltipConfType } from '../../menu-constructors/Tooltip'\nimport Editor from '../../../editor/index'\nimport setAlignment from './video-alignment'\n\n/**\n * 生成 Tooltip 的显示隐藏函数\n */\nexport function createShowHideFn(editor: Editor) {\n    let tooltip: Tooltip | null\n    const t = (text: string, prefix: string = ''): string => {\n        return editor.i18next.t(prefix + text)\n    }\n    /**\n     * 显示 tooltip\n     * @param $node 链接元素\n     */\n    function showVideoTooltip($node: DomElement) {\n        const conf: TooltipConfType = [\n            {\n                $elem: $(\"<span class='w-e-icon-trash-o'></span>\"),\n                onClick: (editor: Editor, $node: DomElement) => {\n                    // 选中video元素 删除\n                    $node.remove()\n                    // 返回 true，表示执行完之后，隐藏 tooltip。否则不隐藏。\n                    return true\n                },\n            },\n            {\n                $elem: $('<span>100%</span>'),\n                onClick: (editor: Editor, $node: DomElement) => {\n                    $node.attr('width', '100%')\n                    $node.removeAttr('height')\n                    // 返回 true，表示执行完之后，隐藏 tooltip。否则不隐藏。\n                    return true\n                },\n            },\n            {\n                $elem: $('<span>50%</span>'),\n                onClick: (editor: Editor, $node: DomElement) => {\n                    $node.attr('width', '50%')\n                    $node.removeAttr('height')\n                    // 返回 true，表示执行完之后，隐藏 tooltip。否则不隐藏。\n                    return true\n                },\n            },\n            {\n                $elem: $('<span>30%</span>'),\n                onClick: (editor: Editor, $node: DomElement) => {\n                    $node.attr('width', '30%')\n                    $node.removeAttr('height')\n                    // 返回 true，表示执行完之后，隐藏 tooltip。否则不隐藏。\n                    return true\n                },\n            },\n            {\n                $elem: $(`<span>${t('重置')}</span>`),\n                onClick: (editor: Editor, $node: DomElement) => {\n                    $node.removeAttr('width')\n                    $node.removeAttr('height')\n\n                    // 返回 true，表示执行完之后，隐藏 tooltip。否则不隐藏。\n                    return true\n                },\n            },\n            {\n                $elem: $(`<span>${t('menus.justify.靠左')}</span>`),\n                onClick: (editor: Editor, $node: DomElement) => {\n                    // 获取顶级元素\n                    setAlignment($node, 'left')\n                    // 返回 true，表示执行完之后，隐藏 tooltip。否则不隐藏。\n                    return true\n                },\n            },\n            {\n                $elem: $(`<span>${t('menus.justify.居中')}</span>`),\n                onClick: (editor: Editor, $node: DomElement) => {\n                    // 获取顶级元素\n                    setAlignment($node, 'center')\n                    // 返回 true，表示执行完之后，隐藏 tooltip。否则不隐藏。\n                    return true\n                },\n            },\n            {\n                $elem: $(`<span>${t('menus.justify.靠右')}</span>`),\n                onClick: (editor: Editor, $node: DomElement) => {\n                    // 获取顶级元素\n                    setAlignment($node, 'right')\n                    // 返回 true，表示执行完之后，隐藏 tooltip。否则不隐藏。\n                    return true\n                },\n            },\n        ]\n\n        tooltip = new Tooltip(editor, $node, conf)\n        tooltip.create()\n    }\n\n    /**\n     * 隐藏 tooltip\n     */\n    function hideVideoTooltip() {\n        // 移除 tooltip\n        if (tooltip) {\n            tooltip.remove()\n            tooltip = null\n        }\n    }\n\n    return {\n        showVideoTooltip,\n        hideVideoTooltip,\n    }\n}\n\n/**\n * 绑定 tooltip 事件\n * @param editor 编辑器实例\n */\nexport default function bindTooltipEvent(editor: Editor) {\n    const { showVideoTooltip, hideVideoTooltip } = createShowHideFn(editor)\n\n    // 点击视频元素是，显示 tooltip\n    editor.txt.eventHooks.videoClickEvents.push(showVideoTooltip)\n\n    // 点击其他地方，或者滚动时，隐藏 tooltip\n    editor.txt.eventHooks.clickEvents.push(hideVideoTooltip)\n    editor.txt.eventHooks.keyupEvents.push(hideVideoTooltip)\n    editor.txt.eventHooks.toolbarClickEvents.push(hideVideoTooltip)\n    editor.txt.eventHooks.menuClickEvents.push(hideVideoTooltip)\n    editor.txt.eventHooks.textScrollEvents.push(hideVideoTooltip)\n\n    // change 时隐藏\n    editor.txt.eventHooks.changeEvents.push(hideVideoTooltip)\n}\n", "/**\n * @description 视频布局 事件\n * @author lichunlin\n */\n\nimport $, { DomElement } from '../../../utils/dom-core'\n\n// 设置布局方式\nexport default function setAlignment($node: DomElement, value: string) {\n    // 设置顶级元素匹配\n    const NODENAME = ['P']\n    // 获取匹配得顶级元素\n    const topNode = getSelectedTopNode($node, NODENAME)\n    // 判断是否存在\n    if (topNode) {\n        $(topNode).css('text-align', value)\n    }\n}\n\n/**\n * 获取选中的元素的顶级元素\n * @params el 选中的元素\n * @params tag 匹配顶级的元素 如 P LI ....\n */\nfunction getSelectedTopNode(el: DomElement, tag: string[]): Node | null {\n    let parentNode: Node | null = el.elems[0]\n    // 可能出现嵌套的情况，所以一级一级向上找，找到指定得顶级元素\n    while (parentNode != null) {\n        if (tag.includes(parentNode?.nodeName)) {\n            return parentNode\n        }\n        // 兜底 body\n        if (parentNode?.parentNode?.nodeName === 'BODY') {\n            return null\n        }\n        parentNode = parentNode.parentNode\n    }\n    return parentNode\n}\n", "/**\n * @description 兼容火狐浏览器内核有video标签时光标定位不对问题\n * @author yanbiao(86driver)\n */\nimport Editor from '../../../editor/index'\nimport { UA } from '../../../utils/util'\n\nexport default function bindEventKeyboardEvent(editor: Editor) {\n    if (!UA.isFirefox) return\n    const { txt, selection } = editor\n    const { keydownEvents } = txt.eventHooks\n\n    keydownEvents.push(function (e) {\n        // 实时保存选区\n        // editor.selection.saveRange()\n        const $selectionContainerElem = selection.getSelectionContainerElem()\n        if ($selectionContainerElem) {\n            const $topElem = $selectionContainerElem.getNodeTop(editor)\n            const $preElem = $topElem.length\n                ? $topElem.prev().length\n                    ? $topElem.prev()\n                    : null\n                : null\n            if ($preElem && $preElem.attr('data-we-video-p')) {\n                // 光标处于选区开头\n                if (selection.getCursorPos() === 0) {\n                    // 如果上一个dom是包含video， 按下删除连video一块删除\n                    if (e.keyCode === 8) {\n                        $preElem.remove()\n                    }\n                }\n            }\n        }\n    })\n}\n", "/**\n * @description 插入、上传图片\n * @author wangfupeng\n */\n\nimport Editor from '../../editor/index'\nimport { EMPTY_FN } from '../../utils/const'\nimport $ from '../../utils/dom-core'\nimport { MenuActive } from '../menu-constructors/Menu'\nimport Panel from '../menu-constructors/Panel'\nimport PanelMenu from '../menu-constructors/PanelMenu'\nimport bindEvent from './bind-event/index'\nimport createPanelConf, { ImgPanelConf } from './create-panel-conf'\n\nclass Image extends PanelMenu implements MenuActive {\n    private imgPanelConfig: ImgPanelConf\n\n    constructor(editor: Editor) {\n        let $elem = $(\n            '<div class=\"w-e-menu\" data-title=\"图片\"><i class=\"w-e-icon-image\"></i></div>'\n        )\n        let imgPanelConfig = createPanelConf(editor)\n        if (imgPanelConfig.onlyUploadConf) {\n            $elem = imgPanelConfig.onlyUploadConf.$elem\n            imgPanelConfig.onlyUploadConf.events.map(event => {\n                const type = event.type\n                const fn = event.fn || EMPTY_FN\n                $elem.on(type, (e: Event) => {\n                    e.stopPropagation()\n                    fn(e)\n                })\n            })\n        }\n        super($elem, editor)\n        this.imgPanelConfig = imgPanelConfig\n\n        // 绑定事件，如粘贴图片\n        bindEvent(editor)\n    }\n\n    /**\n     * 菜单点击事件\n     */\n    public clickHandler(): void {\n        if (!this.imgPanelConfig.onlyUploadConf) {\n            this.createPanel()\n        }\n    }\n\n    /**\n     * 创建 panel\n     */\n    private createPanel(): void {\n        const conf = this.imgPanelConfig\n        const panel = new Panel(this, conf)\n        this.setPanel(panel)\n        panel.create()\n    }\n\n    /**\n     * 尝试修改菜单 active 状态\n     */\n    public tryChangeActive() {}\n}\n\nexport default Image\n", "/**\n * @description 绑定图片的事件\n * @author wangfupeng\n */\n\nimport Editor from '../../../editor/index'\nimport bindPasteImg from './paste-img'\nimport bindDropImg from './drop-img'\nimport bindDragImgSize from './drag-size'\nimport bindTooltipImg from './tooltip-event'\nimport bindKeyboardEvent from './keyboard-event'\n\n/**\n * 绑定事件\n * @param editor 编辑器实例\n */\nfunction bindEvent(editor: Editor): void {\n    // 粘贴图片\n    bindPasteImg(editor)\n\n    // 拖拽图片\n    bindDropImg(editor)\n\n    // 可再扩展其他事件...如图片 tooltip 等\n    // 拖拽图片尺寸\n    bindDragImgSize(editor)\n\n    //Tooltip\n    bindTooltipImg(editor)\n\n    bindKeyboardEvent(editor)\n}\n\nexport default bindEvent\n", "/**\n * @description 粘贴图片\n * @author wangfupeng\n */\n\nimport Editor from '../../../editor/index'\nimport { getPasteText, getPasteHtml, getPasteImgs } from '../../../text/paste/paste-event'\nimport UploadImg from '../upload-img'\n\n/**\n * 剪切板是否有 text 或者 html ？\n * @param editor 编辑器对象\n * @param e 粘贴事件参数\n */\nfunction _haveTextOrHtml(editor: Editor, e: ClipboardEvent): boolean {\n    const config = editor.config\n    const pasteFilterStyle = config.pasteFilterStyle\n    const pasteIgnoreImg = config.pasteIgnoreImg\n    let pasteHtml = getPasteHtml(e, pasteFilterStyle, pasteIgnoreImg)\n    if (pasteHtml) return true\n    let pasteText = getPasteText(e)\n    if (pasteText) return true\n\n    return false // text html 都没有，则返回 false\n}\n\n/**\n * 剪切板是否有 Files\n * @param editor 编辑器对象\n * @param e 粘贴事件参数\n */\nfunction _haveFiles(editor: Editor, e: ClipboardEvent): boolean {\n    const types = e.clipboardData?.types || []\n\n    for (let i = 0; i < types.length; i++) {\n        const type = types[i]\n        if (type === 'Files') {\n            return true\n        }\n    }\n\n    return false\n}\n/**\n * 粘贴图片事件方法\n * @param e 事件参数\n */\nfunction pasteImgHandler(e: ClipboardEvent, editor: Editor): void {\n    // 粘贴过来的没有 file 时，判断 text 或者 html\n    if (!_haveFiles(editor, e)) {\n        if (_haveTextOrHtml(editor, e)) {\n            // 粘贴过来的有 text 或者 html ，则不执行粘贴图片逻辑\n            return\n        }\n    }\n\n    // 获取粘贴的图片列表\n    const pastedFiles = getPasteImgs(e)\n    if (!pastedFiles.length) {\n        return\n    }\n\n    // code 中忽略（暂不管它）\n\n    // 执行上传\n    const uploadImg = new UploadImg(editor)\n    uploadImg.uploadImg(pastedFiles)\n}\n\n/**\n * 粘贴图片\n * @param editor 编辑器对象\n * @param pasteEvents 粘贴事件列表\n */\nfunction bindPasteImg(editor: Editor): void {\n    /**\n     * 绑定 paste 事件\n     * 这里使用了unshift，以前是push\n     * 在以前的流程中，pasteImgHandler触发之前，会调用到window.getSelection().removeAllRanges()\n     * 会导致性能变差。在编辑器中粘贴，粘贴耗时多了100+ms，根本原因未知\n     * 最小复现demo，在div内粘贴图片就可以看到getData耗时异常得长\n     * <html>\n     *     <div id=\"a\" contenteditable=\"true\"></div>\n     *     <script>\n     *         const div = document.getElementById('a')\n     *         div.addEventListener('paste', (e) => {\n     *             window.getSelection().removeAllRanges()\n     *             e.clipboardData.getData('text/html')\n     *         })\n     *     </script>\n     * </html>\n     * 因此改成unshift，先触发pasteImgHandler就不会有性能问题\n     */\n    editor.txt.eventHooks.pasteEvents.unshift((e: ClipboardEvent) => {\n        pasteImgHandler(e, editor)\n    })\n}\n\nexport default bindPasteImg\n", "/**\n * @description 拖拽上传图片\n * @author wangfupeng\n */\n\nimport Editor from '../../../editor/index'\nimport UploadImg from '../upload-img'\n\nexport default function bindDropImg(editor: Editor): void {\n    /**\n     * 拖拽图片的事件\n     * @param e 事件参数\n     */\n    function dropImgHandler(e: any): void {\n        const files = e.dataTransfer && e.dataTransfer.files\n        if (!files || !files.length) {\n            return\n        }\n\n        // 上传图片\n        const uploadImg = new UploadImg(editor)\n        uploadImg.uploadImg(files)\n    }\n\n    // 绑定 drop 事件\n    editor.txt.eventHooks.dropEvents.push(dropImgHandler)\n}\n", "/**\n * @description 图片拖拽事件绑定\n * @author xiaokyo\n */\n\nimport Editor from '../../../editor'\nimport $, { DomElement } from '../../../utils/dom-core'\nimport '../../../assets/style/drag-size.less'\nimport { UA } from '../../../utils/util'\n\n/**\n * 设置拖拽框的rect\n * @param $drag drag Dom\n * @param width 要设置的宽度\n * @param height 要设置的高度\n * @param left 要设置的左边\n * @param top 要设置的顶部距离\n */\nfunction setDragStyle($drag: DomElement, width: number, height: number, left: number, top: number) {\n    $drag.attr('style', `width:${width}px; height:${height}px; left:${left}px; top:${top}px;`)\n}\n\n/**\n * 生成一个图片指定大小的拖拽框\n * @param editor 编辑器实例\n * @param $textContainerElem 编辑框对象\n */\nfunction createDragBox(editor: Editor, $textContainerElem: DomElement): DomElement {\n    const $drag = $(\n        `<div class=\"w-e-img-drag-mask\">\n            <div class=\"w-e-img-drag-show-size\"></div>\n            <div class=\"w-e-img-drag-rb\"></div>\n         </div>`\n    )\n\n    $drag.hide()\n    $textContainerElem.append($drag)\n    return $drag\n}\n\n/**\n * 显示拖拽框并设置宽度\n * @param $textContainerElem 编辑框实例\n * @param $drag 拖拽框对象\n */\nfunction showDargBox($textContainerElem: DomElement, $drag: DomElement, $img: DomElement) {\n    const boxRect = $textContainerElem.getBoundingClientRect()\n    const rect = $img.getBoundingClientRect()\n    const rectW = rect.width.toFixed(2)\n    const rectH = rect.height.toFixed(2)\n    $drag.find('.w-e-img-drag-show-size').text(`${rectW}px * ${rectH}px`)\n    setDragStyle(\n        $drag,\n        parseFloat(rectW),\n        parseFloat(rectH),\n        rect.left - boxRect.left,\n        rect.top - boxRect.top\n    )\n    $drag.show()\n}\n\n/**\n * 生成图片拖拽框的 显示/隐藏 函数\n */\nexport function createShowHideFn(editor: Editor) {\n    const $textContainerElem = editor.$textContainerElem\n    let $imgTarget: DomElement\n\n    // 生成拖拽框\n    const $drag = createDragBox(editor, $textContainerElem)\n\n    /**\n     * 设置拖拽事件\n     * @param $drag 拖拽框的domElement\n     * @param $textContainerElem 编辑器实例\n     */\n    function bindDragEvents($drag: DomElement, $container: DomElement) {\n        $drag.on('click', function (e: Event) {\n            e.stopPropagation()\n        })\n        $drag.on('mousedown', '.w-e-img-drag-rb', (e: MouseEvent) => {\n            // e.stopPropagation()\n            e.preventDefault()\n\n            if (!$imgTarget) return\n\n            const firstX = e.clientX\n            const firstY = e.clientY\n            const boxRect = $container.getBoundingClientRect()\n            const imgRect = $imgTarget.getBoundingClientRect()\n            const width = imgRect.width\n            const height = imgRect.height\n            const left = imgRect.left - boxRect.left\n            const top = imgRect.top - boxRect.top\n            const ratio = width / height\n\n            let setW = width\n            let setH = height\n            const $document = $(document)\n\n            function offEvents() {\n                $document.off('mousemove', mouseMoveHandler)\n                $document.off('mouseup', mouseUpHandler)\n            }\n\n            function mouseMoveHandler(ev: MouseEvent) {\n                ev.stopPropagation()\n                ev.preventDefault()\n\n                setW = width + (ev.clientX - firstX)\n                setH = height + (ev.clientY - firstY)\n\n                // 等比计算\n                if (setW / setH != ratio) {\n                    setH = setW / ratio\n                }\n\n                setW = parseFloat(setW.toFixed(2))\n                setH = parseFloat(setH.toFixed(2))\n\n                $drag\n                    .find('.w-e-img-drag-show-size')\n                    .text(\n                        `${setW.toFixed(2).replace('.00', '')}px * ${setH\n                            .toFixed(2)\n                            .replace('.00', '')}px`\n                    )\n                setDragStyle($drag, setW, setH, left, top)\n            }\n            $document.on('mousemove', mouseMoveHandler)\n\n            function mouseUpHandler() {\n                $imgTarget.attr('width', setW + '')\n                $imgTarget.attr('height', setH + '')\n                const newImgRect = $imgTarget.getBoundingClientRect()\n                setDragStyle(\n                    $drag,\n                    setW,\n                    setH,\n                    newImgRect.left - boxRect.left,\n                    newImgRect.top - boxRect.top\n                )\n\n                // 解绑事件\n                offEvents()\n            }\n            $document.on('mouseup', mouseUpHandler)\n\n            // 解绑事件\n            $document.on('mouseleave', offEvents)\n        })\n    }\n\n    // 显示拖拽框\n    function showDrag($target: DomElement) {\n        if (UA.isIE()) return false\n        if ($target) {\n            $imgTarget = $target\n            showDargBox($textContainerElem, $drag, $imgTarget)\n        }\n    }\n\n    // 隐藏拖拽框\n    function hideDrag() {\n        $textContainerElem.find('.w-e-img-drag-mask').hide()\n    }\n\n    // 事件绑定\n    bindDragEvents($drag, $textContainerElem)\n\n    // 后期改成 blur 触发\n    $(document).on('click', hideDrag)\n    editor.beforeDestroy(function () {\n        $(document).off('click', hideDrag)\n    })\n\n    return {\n        showDrag,\n        hideDrag,\n    }\n}\n/**\n * 点击事件委托\n * @param editor 编辑器实例\n */\nexport default function bindDragImgSize(editor: Editor) {\n    const { showDrag, hideDrag } = createShowHideFn(editor)\n\n    // 显示拖拽框\n    editor.txt.eventHooks.imgClickEvents.push(showDrag)\n\n    // 隐藏拖拽框\n    editor.txt.eventHooks.textScrollEvents.push(hideDrag)\n    editor.txt.eventHooks.keyupEvents.push(hideDrag)\n    editor.txt.eventHooks.toolbarClickEvents.push(hideDrag)\n    editor.txt.eventHooks.menuClickEvents.push(hideDrag)\n    editor.txt.eventHooks.changeEvents.push(hideDrag)\n}\n", "module.exports = require(\"core-js-pure/stable/parse-float\");", "var parent = require('../es/parse-float');\n\nmodule.exports = parent;\n", "require('../modules/es.parse-float');\nvar path = require('../internals/path');\n\nmodule.exports = path.parseFloat;\n", "var $ = require('../internals/export');\nvar parseFloatImplementation = require('../internals/number-parse-float');\n\n// `parseFloat` method\n// https://tc39.github.io/ecma262/#sec-parsefloat-string\n$({ global: true, forced: parseFloat != parseFloatImplementation }, {\n  parseFloat: parseFloatImplementation\n});\n", "var global = require('../internals/global');\nvar trim = require('../internals/string-trim').trim;\nvar whitespaces = require('../internals/whitespaces');\n\nvar $parseFloat = global.parseFloat;\nvar FORCED = 1 / $parseFloat(whitespaces + '-0') !== -Infinity;\n\n// `parseFloat` method\n// https://tc39.github.io/ecma262/#sec-parsefloat-string\nmodule.exports = FORCED ? function parseFloat(string) {\n  var trimmedString = trim(String(string));\n  var result = $parseFloat(trimmedString);\n  return result === 0 && trimmedString.charAt(0) == '-' ? -0 : result;\n} : $parseFloat;\n", "var api = require(\"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\");\n            var content = require(\"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/postcss-loader/src/index.js!../../../node_modules/less-loader/dist/cjs.js!./drag-size.less\");\n\n            content = content.__esModule ? content.default : content;\n\n            if (typeof content === 'string') {\n              content = [[module.id, content, '']];\n            }\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nmodule.exports = content.locals || {};", "// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".w-e-text-container {\\n  overflow: hidden;\\n}\\n.w-e-img-drag-mask {\\n  position: absolute;\\n  z-index: 1;\\n  border: 1px dashed #ccc;\\n  box-sizing: border-box;\\n}\\n.w-e-img-drag-mask .w-e-img-drag-rb {\\n  position: absolute;\\n  right: -5px;\\n  bottom: -5px;\\n  width: 16px;\\n  height: 16px;\\n  border-radius: 50%;\\n  background: #ccc;\\n  cursor: se-resize;\\n}\\n.w-e-img-drag-mask .w-e-img-drag-show-size {\\n  min-width: 110px;\\n  height: 22px;\\n  line-height: 22px;\\n  font-size: 14px;\\n  color: #999;\\n  position: absolute;\\n  left: 0;\\n  top: 0;\\n  background-color: #999;\\n  color: #fff;\\n  border-radius: 2px;\\n  padding: 0 5px;\\n}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n", "/**\n * @description tooltip 事件\n * @author lichunlin\n */\n\nimport $, { DomElement } from '../../../utils/dom-core'\nimport Tooltip, { TooltipConfType } from '../../menu-constructors/Tooltip'\nimport Editor from '../../../editor/index'\n\n/**\n * 生成 Tooltip 的显示隐藏函数\n */\nexport function createShowHideFn(editor: Editor) {\n    let tooltip: Tooltip | null\n    const t = (text: string, prefix: string = ''): string => {\n        return editor.i18next.t(prefix + text)\n    }\n\n    /**\n     * 显示 tooltip\n     * @param $node 链接元素\n     */\n    function showImgTooltip($node: DomElement) {\n        const conf: TooltipConfType = [\n            {\n                $elem: $(\"<span class='w-e-icon-trash-o'></span>\"),\n                onClick: (editor: Editor, $node: DomElement) => {\n                    // 选中img元素\n                    editor.selection.createRangeByElem($node)\n                    editor.selection.restoreSelection()\n                    editor.cmd.do('delete')\n                    // 返回 true，表示执行完之后，隐藏 tooltip。否则不隐藏。\n                    return true\n                },\n            },\n            {\n                $elem: $('<span>30%</span>'),\n                onClick: (editor: Editor, $node: DomElement) => {\n                    $node.attr('width', '30%')\n                    $node.removeAttr('height')\n\n                    // 返回 true，表示执行完之后，隐藏 tooltip。否则不隐藏。\n                    return true\n                },\n            },\n            {\n                $elem: $('<span>50%</span>'),\n                onClick: (editor: Editor, $node: DomElement) => {\n                    $node.attr('width', '50%')\n                    $node.removeAttr('height')\n\n                    // 返回 true，表示执行完之后，隐藏 tooltip。否则不隐藏。\n                    return true\n                },\n            },\n            {\n                $elem: $('<span>100%</span>'),\n                onClick: (editor: Editor, $node: DomElement) => {\n                    $node.attr('width', '100%')\n                    $node.removeAttr('height')\n\n                    // 返回 true，表示执行完之后，隐藏 tooltip。否则不隐藏。\n                    return true\n                },\n            },\n        ]\n\n        conf.push({\n            $elem: $(`<span>${t('重置')}</span>`),\n            onClick: (editor: Editor, $node: DomElement) => {\n                $node.removeAttr('width')\n                $node.removeAttr('height')\n\n                // 返回 true，表示执行完之后，隐藏 tooltip。否则不隐藏。\n                return true\n            },\n        })\n\n        if ($node.attr('data-href')) {\n            conf.push({\n                $elem: $(`<span>${t('查看链接')}</span>`),\n                onClick: (editor: Editor, $node: DomElement) => {\n                    let link = $node.attr('data-href')\n                    if (link) {\n                        link = decodeURIComponent(link)\n                        window.open(link, '_target')\n                    }\n                    // 返回 true，表示执行完之后，隐藏 tooltip。否则不隐藏。\n                    return true\n                },\n            })\n        }\n\n        tooltip = new Tooltip(editor, $node, conf)\n        tooltip.create()\n    }\n\n    /**\n     * 隐藏 tooltip\n     */\n    function hideImgTooltip() {\n        // 移除 tooltip\n        if (tooltip) {\n            tooltip.remove()\n            tooltip = null\n        }\n    }\n\n    return {\n        showImgTooltip,\n        hideImgTooltip,\n    }\n}\n\n/**\n * 绑定 tooltip 事件\n * @param editor 编辑器实例\n */\nexport default function bindTooltipEvent(editor: Editor) {\n    const { showImgTooltip, hideImgTooltip } = createShowHideFn(editor)\n\n    // 点击图片元素是，显示 tooltip\n    editor.txt.eventHooks.imgClickEvents.push(showImgTooltip)\n\n    // 点击其他地方，或者滚动时，隐藏 tooltip\n    editor.txt.eventHooks.clickEvents.push(hideImgTooltip)\n    editor.txt.eventHooks.keyupEvents.push(hideImgTooltip)\n    editor.txt.eventHooks.toolbarClickEvents.push(hideImgTooltip)\n    editor.txt.eventHooks.menuClickEvents.push(hideImgTooltip)\n    editor.txt.eventHooks.textScrollEvents.push(hideImgTooltip)\n    editor.txt.eventHooks.imgDragBarMouseDownEvents.push(hideImgTooltip)\n\n    // change 时隐藏\n    editor.txt.eventHooks.changeEvents.push(hideImgTooltip)\n}\n", "import Editor from '../../../editor'\n\nexport default function bindEventKeyboardEvent(editor: Editor) {\n    const { txt, selection } = editor\n    const { keydownEvents } = txt.eventHooks\n\n    keydownEvents.push(function (e) {\n        // 删除图片时，有时会因为浏览器bug删不掉。因此这里手动判断光标前面是不是图片，是就删掉\n        const $selectionContainerElem = selection.getSelectionContainerElem()\n        const range = selection.getRange()\n\n        if (\n            !range ||\n            !$selectionContainerElem ||\n            e.keyCode !== 8 ||\n            !selection.isSelectionEmpty()\n        ) {\n            return\n        }\n        let { startContainer, startOffset } = range\n\n        // 同一段落内上一个节点\n        let prevNode: Node | null = null\n        if (startOffset === 0) {\n            // 此时上一个节点需要通过previousSibling去找\n            while (\n                startContainer !== $selectionContainerElem.elems[0] &&\n                $selectionContainerElem.elems[0].contains(startContainer) &&\n                startContainer.parentNode &&\n                !prevNode\n            ) {\n                if (startContainer.previousSibling) {\n                    prevNode = startContainer.previousSibling as Node\n                    break\n                }\n                startContainer = startContainer.parentNode\n            }\n        } else if (startContainer.nodeType !== 3) {\n            // 非文本节点才需要被处理，比如p\n            prevNode = startContainer.childNodes[startOffset - 1]\n        }\n\n        if (!prevNode) {\n            return\n        }\n\n        let lastChildNodeInPrevNode = prevNode\n\n        // 找到最右侧叶子节点\n        while (lastChildNodeInPrevNode.childNodes.length) {\n            lastChildNodeInPrevNode =\n                lastChildNodeInPrevNode.childNodes[lastChildNodeInPrevNode.childNodes.length - 1]\n        }\n\n        if (\n            lastChildNodeInPrevNode instanceof HTMLElement &&\n            lastChildNodeInPrevNode.tagName === 'IMG'\n        ) {\n            lastChildNodeInPrevNode.remove()\n            e.preventDefault()\n        }\n    })\n}\n", "/**\n * @description image 菜单 panel tab 配置\n * @author wangfupeng\n */\n\nimport Editor from '../../editor/index'\nimport $, { DomElement } from '../../utils/dom-core'\nimport { getRandom } from '../../utils/util'\nimport { PanelConf, PanelTabConf, TabEventConf } from '../menu-constructors/Panel'\nimport UploadImg from './upload-img'\n\nexport type ImgPanelConf = {\n    onlyUploadConf?: {\n        $elem: DomElement\n        events: TabEventConf[]\n    }\n} & PanelConf\n\nexport default function (editor: Editor): ImgPanelConf {\n    const config = editor.config\n    const uploadImg = new UploadImg(editor)\n\n    // panel 中需要用到的id\n    const upTriggerId = getRandom('up-trigger-id')\n    const upFileId = getRandom('up-file-id')\n    const linkUrlId = getRandom('input-link-url')\n    const linkUrlAltId = getRandom('input-link-url-alt')\n    const linkUrlHrefId = getRandom('input-link-url-href')\n    const linkBtnId = getRandom('btn-link')\n\n    const i18nPrefix = 'menus.panelMenus.image.'\n    const t = (text: string, prefix: string = i18nPrefix): string => {\n        return editor.i18next.t(prefix + text)\n    }\n\n    /**\n     * 校验网络图片链接是否合法\n     * @param linkImg 网络图片链接\n     */\n    function checkLinkImg(src: string, linkUrlAltText?: string, linkUrlHrefText?: string): boolean {\n        //查看开发者自定义配置的返回值\n        const check = config.linkImgCheck(src)\n        if (check === true) {\n            return true\n        } else if (typeof check === 'string') {\n            //用户未能通过开发者的校验，开发者希望我们提示这一字符串\n            config.customAlert(check, 'error')\n        }\n        return false\n    }\n\n    // tabs 配置 -----------------------------------------\n    const fileMultipleAttr = config.uploadImgMaxLength === 1 ? '' : 'multiple=\"multiple\"'\n    const accepts: string = config.uploadImgAccept.map((item: string) => `image/${item}`).join(',')\n\n    /**\n     * 设置模板的类名和icon图标\n     * w-e-menu是作为button菜单的模板\n     * w-e-up-img-container是做为panel菜单的窗口内容的模板\n     * @param containerClass 模板最外层的类名\n     * @param iconClass 模板中icon的类名\n     * @param titleName 模板中标题的名称 需要则设置不需要则设为空字符\n     */\n    const getUploadImgTpl = (containerClass: string, iconClass: string, titleName: string) =>\n        `<div class=\"${containerClass}\" data-title=\"${titleName}\">\n            <div id=\"${upTriggerId}\" class=\"w-e-up-btn\">\n                <i class=\"${iconClass}\"></i>\n            </div>\n            <div style=\"display:none;\">\n                <input id=\"${upFileId}\" type=\"file\" ${fileMultipleAttr} accept=\"${accepts}\"/>\n            </div>\n        </div>`\n    const uploadEvents: TabEventConf[] = [\n        // 触发选择图片\n        {\n            selector: '#' + upTriggerId,\n            type: 'click',\n            fn: () => {\n                const uploadImgFromMedia = config.uploadImgFromMedia\n                if (uploadImgFromMedia && typeof uploadImgFromMedia === 'function') {\n                    uploadImgFromMedia()\n                    return true\n                }\n                const $file = $('#' + upFileId)\n                const fileElem = $file.elems[0]\n                if (fileElem) {\n                    fileElem.click()\n                } else {\n                    // 返回 true 可关闭 panel\n                    return true\n                }\n            },\n        },\n        // 选择图片完毕\n        {\n            selector: '#' + upFileId,\n            type: 'change',\n            fn: () => {\n                const $file = $('#' + upFileId)\n                const fileElem = $file.elems[0] as HTMLInputElement\n                if (!fileElem) {\n                    // 返回 true 可关闭 panel\n                    return true\n                }\n\n                // 获取选中的 file 对象列表\n                const fileList = fileElem.files\n                if (fileList?.length) {\n                    uploadImg.uploadImg(fileList)\n                }\n\n                // 判断用于打开文件的input，有没有值，如果有就清空，以防上传同一张图片时，不会触发change事件\n                // input的功能只是单单为了打开文件而已，获取到需要的文件参数，当文件数据获取到后，可以清空。\n                if (fileElem) {\n                    fileElem.value = ''\n                }\n\n                // 返回 true 可关闭 panel\n                return true\n            },\n        },\n    ]\n\n    const linkImgInputs = [\n        `<input\n            id=\"${linkUrlId}\"\n            type=\"text\"\n            class=\"block\"\n            placeholder=\"${t('图片地址')}\"/>`,\n    ]\n\n    if (config.showLinkImgAlt) {\n        linkImgInputs.push(`\n        <input\n            id=\"${linkUrlAltId}\"\n            type=\"text\"\n            class=\"block\"\n            placeholder=\"${t('图片文字说明')}\"/>`)\n    }\n\n    if (config.showLinkImgHref) {\n        linkImgInputs.push(`\n        <input\n            id=\"${linkUrlHrefId}\"\n            type=\"text\"\n            class=\"block\"\n            placeholder=\"${t('跳转链接')}\"/>`)\n    }\n\n    const tabsConf: PanelTabConf[] = [\n        // first tab\n        {\n            // 标题\n            title: t('上传图片'),\n            // 模板\n            tpl: getUploadImgTpl('w-e-up-img-container', 'w-e-icon-upload2', ''),\n            // 事件绑定\n            events: uploadEvents,\n        }, // first tab end\n        // second tab\n        {\n            title: t('网络图片'),\n            tpl: `<div>\n                    ${linkImgInputs.join('')}\n                    <div class=\"w-e-button-container\">\n                        <button type=\"button\" id=\"${linkBtnId}\" class=\"right\">${t(\n                '插入',\n                ''\n            )}</button>\n                    </div>\n                </div>`,\n            events: [\n                {\n                    selector: '#' + linkBtnId,\n                    type: 'click',\n                    fn: () => {\n                        const $linkUrl = $('#' + linkUrlId)\n                        const url = $linkUrl.val().trim()\n\n                        //如果url为空则直接返回\n                        if (!url) return\n\n                        let linkUrlAltText\n                        if (config.showLinkImgAlt) {\n                            linkUrlAltText = $('#' + linkUrlAltId)\n                                .val()\n                                .trim()\n                        }\n                        let linkUrlHrefText\n                        if (config.showLinkImgHref) {\n                            linkUrlHrefText = $('#' + linkUrlHrefId)\n                                .val()\n                                .trim()\n                        }\n                        //如果不能通过校验也直接返回\n                        if (!checkLinkImg(url, linkUrlAltText, linkUrlHrefText)) return\n                        //插入图片url\n                        uploadImg.insertImg(url, linkUrlAltText, linkUrlHrefText)\n                        // 返回 true 表示函数执行结束之后关闭 panel\n                        return true\n                    },\n                    bindEnter: true,\n                },\n            ],\n        }, // second tab end\n    ]\n    // tabs end\n\n    // 最终的配置 -----------------------------------------\n    const conf: ImgPanelConf = {\n        width: 300,\n        height: 0,\n        tabs: [],\n        onlyUploadConf: {\n            $elem: $(getUploadImgTpl('w-e-menu', 'w-e-icon-image', '图片')),\n            events: uploadEvents,\n        },\n    }\n    // 显示“上传图片”\n    if (\n        window.FileReader &&\n        (config.uploadImgShowBase64 ||\n            config.uploadImgServer ||\n            config.customUploadImg ||\n            config.uploadImgFromMedia)\n    ) {\n        conf.tabs.push(tabsConf[0])\n    }\n    // 显示“插入网络图片”\n    if (config.showLinkImg) {\n        conf.tabs.push(tabsConf[1])\n        conf.onlyUploadConf = undefined\n    }\n\n    return conf\n}\n", "/**\n * @description 增加缩进/减少缩进\n * @author tonghan\n */\n\nimport $ from '../../utils/dom-core'\nimport Editor from '../../editor/index'\nimport DropListMenu from '../menu-constructors/DropListMenu'\nimport { MenuActive } from '../menu-constructors/Menu'\nimport operateElement from './operate-element'\n\nclass Indent extends DropListMenu implements MenuActive {\n    constructor(editor: Editor) {\n        const $elem = $(\n            `<div class=\"w-e-menu\" data-title=\"缩进\">\n                <i class=\"w-e-icon-indent-increase\"></i>\n            </div>`\n        )\n        const dropListConf = {\n            width: 130,\n            title: '设置缩进',\n            type: 'list',\n            list: [\n                {\n                    $elem: $(\n                        `<p>\n                            <i class=\"w-e-icon-indent-increase w-e-drop-list-item\"></i>\n                            ${editor.i18next.t('menus.dropListMenu.indent.增加缩进')}\n                        <p>`\n                    ),\n                    value: 'increase',\n                },\n\n                {\n                    $elem: $(\n                        `<p>\n                            <i class=\"w-e-icon-indent-decrease w-e-drop-list-item\"></i>\n                            ${editor.i18next.t('menus.dropListMenu.indent.减少缩进')}\n                        <p>`\n                    ),\n                    value: 'decrease',\n                },\n            ],\n            clickHandler: (value: string) => {\n                // 注意 this 是指向当前的 Indent 对象\n                this.command(value)\n            },\n        }\n\n        super($elem, editor, dropListConf)\n    }\n\n    /**\n     * 执行命令\n     * @param value value\n     */\n    public command(value: string): void {\n        const editor = this.editor\n        const $selectionElem = editor.selection.getSelectionContainerElem()\n\n        // 判断 当前选区为 textElem 时\n        if ($selectionElem && editor.$textElem.equal($selectionElem)) {\n            // 当 当前选区 等于 textElem 时\n            // 代表 当前选区 可能是一个选择了一个完整的段落或者多个段落\n            const $elems = editor.selection.getSelectionRangeTopNodes()\n            if ($elems.length > 0) {\n                $elems.forEach((item: any) => {\n                    operateElement($(item), value, editor)\n                })\n            }\n        } else {\n            // 当 当前选区 不等于 textElem 时\n            // 代表 当前选区要么是一个段落，要么是段落中的一部分\n            if ($selectionElem && $selectionElem.length > 0) {\n                $selectionElem.forEach((item: any) => {\n                    operateElement($(item), value, editor)\n                })\n            }\n        }\n\n        // 恢复选区\n        editor.selection.restoreSelection()\n        this.tryChangeActive()\n    }\n\n    /**\n     * 尝试改变菜单激活（高亮）状态\n     */\n    public tryChangeActive(): void {\n        const editor = this.editor\n        const $selectionElem = editor.selection.getSelectionStartElem()\n        const $selectionStartElem = $($selectionElem).getNodeTop(editor)\n\n        if ($selectionStartElem.length <= 0) return\n\n        if ($selectionStartElem.elems[0].style['paddingLeft'] != '') {\n            this.active()\n        } else {\n            this.unActive()\n        }\n    }\n}\n\nexport default Indent\n", "/**\n * @description 对节点 操作 进行封装\n *                  获取当前节点的段落\n *                  根据type判断是增加还是减少缩进\n * @author tonghan\n */\n\nimport { DomElement } from '../../utils/dom-core'\nimport Editor from '../../editor/index'\nimport { IndentationOptions } from '../../config/menus'\nimport increaseIndentStyle from './increase-indent-style'\nimport decreaseIndentStyle from './decrease-indent-style'\n\nconst lengthRegex = /^(\\d+)(\\w+)$/\nconst percentRegex = /^(\\d+)%$/\n\nfunction parseIndentation(editor: Editor): IndentationOptions {\n    const { indentation } = editor.config\n\n    if (typeof indentation === 'string') {\n        if (lengthRegex.test(indentation)) {\n            const [value, unit] = indentation.trim().match(lengthRegex)!.slice(1, 3)\n            return {\n                value: Number(value),\n                unit,\n            }\n        } else if (percentRegex.test(indentation)) {\n            return {\n                value: Number(indentation.trim().match(percentRegex)![1]),\n                unit: '%',\n            }\n        }\n    } else if (indentation.value !== void 0 && indentation.unit) {\n        return indentation\n    }\n\n    return {\n        value: 2,\n        unit: 'em',\n    }\n}\n\nfunction operateElement($node: DomElement, type: String, editor: Editor): void {\n    const $elem = $node.getNodeTop(editor)\n    const reg = /^(P|H[0-9]*)$/\n\n    if (reg.test($elem.getNodeName())) {\n        if (type === 'increase') increaseIndentStyle($elem, parseIndentation(editor))\n        else if (type === 'decrease') decreaseIndentStyle($elem, parseIndentation(editor))\n    }\n}\n\nexport default operateElement\n", "/**\n * @description 增加缩进\n * @author tonghan\n */\n\nimport { DomElement } from '../../utils/dom-core'\nimport { IndentationOptions } from '../../config/menus'\n\nfunction increaseIndentStyle($node: DomElement, options: IndentationOptions): void {\n    const $elem = $node.elems[0]\n    if ($elem.style['paddingLeft'] === '') {\n        $node.css('padding-left', options.value + options.unit)\n    } else {\n        const oldPL = $elem.style['paddingLeft']\n        const oldVal = oldPL.slice(0, oldPL.length - options.unit.length)\n        const newVal = Number(oldVal) + options.value\n        $node.css('padding-left', `${newVal}${options.unit}`)\n    }\n}\n\nexport default increaseIndentStyle\n", "/**\n * @description 减少缩进\n * @author tonghan\n */\n\nimport { DomElement } from '../../utils/dom-core'\nimport { IndentationOptions } from '../../config/menus'\n\nfunction decreaseIndentStyle($node: DomElement, options: IndentationOptions): void {\n    const $elem = $node.elems[0]\n    if ($elem.style['paddingLeft'] !== '') {\n        const oldPL = $elem.style['paddingLeft']\n        const oldVal = oldPL.slice(0, oldPL.length - options.unit.length)\n        const newVal = Number(oldVal) - options.value\n        if (newVal > 0) {\n            $node.css('padding-left', `${newVal}${options.unit}`)\n        } else {\n            $node.css('padding-left', '')\n        }\n    }\n}\n\nexport default decreaseIndentStyle\n", "/**\n * @description 插入表情\n * @author liuwe\n */\nimport $ from '../../utils/dom-core'\nimport Editor from '../../editor/index'\nimport PanelMenu from '../menu-constructors/PanelMenu'\nimport Panel from '../menu-constructors/Panel'\nimport { MenuActive } from '../menu-constructors/Menu'\nimport createPanelConf from './create-panel-conf'\n\nclass Emoticon extends PanelMenu implements MenuActive {\n    constructor(editor: Editor) {\n        const $elem = $(\n            `<div class=\"w-e-menu\" data-title=\"表情\">\n                <i class=\"w-e-icon-happy\"></i>\n            </div>`\n        )\n        super($elem, editor)\n    }\n    /**\n     * 创建 panel\n     */\n    private createPanel(): void {\n        const conf = createPanelConf(this.editor)\n        const panel = new Panel(this, conf)\n        panel.create()\n    }\n\n    /**\n     * 菜单表情点击事件\n     */\n    public clickHandler(): void {\n        this.createPanel()\n    }\n\n    public tryChangeActive() {}\n}\n\nexport default Emoticon\n", "/**\n * @description  表情菜单 panel配置\n * @author liuwei\n */\n\nimport Editor from '../../editor/index'\nimport { PanelConf, PanelTabConf } from '../menu-constructors/Panel'\nimport $ from '../../utils/dom-core'\nimport { EmotionsType, EmotionsContentType } from '../../config/menus'\n\nexport default function (editor: Editor): PanelConf {\n    // 声明emotions数据结构\n    const emotions: Array<EmotionsType> = editor.config.emotions\n\n    /* tabs配置项 ==================================================================*/\n\n    // 生成表情结构 TODO jele type类型待优化\n    function GenerateExpressionStructure(ele: EmotionsType) {\n        // 返回为一个数组对象\n        let res: string[] = []\n\n        // 如果type是image类型则生成一个img标签\n        if (ele.type == 'image') {\n            res = ele.content.map((con: EmotionsContentType | string) => {\n                if (typeof con == 'string') return ''\n                return `<span  title=\"${con.alt}\">\n                    <img class=\"eleImg\" data-emoji=\"${con.alt}\" style src=\"${con.src}\" alt=\"[${con.alt}]\">\n                </span>`\n            })\n            res = res.filter((s: string) => s !== '')\n        }\n        //否则直接当内容处理\n        else {\n            res = ele.content.map((con: EmotionsContentType | string) => {\n                return `<span class=\"eleImg\" title=\"${con}\">${con}</span>`\n            })\n        }\n\n        return res.join('').replace(/&nbsp;/g, '')\n    }\n\n    const tabsConf: PanelTabConf[] = emotions.map((ele: EmotionsType) => {\n        return {\n            title: editor.i18next.t(`menus.panelMenus.emoticon.${ele.title}`),\n\n            // 判断type类型如果是image则以img的形式插入否则以内容\n            tpl: `<div>${GenerateExpressionStructure(ele)}</div>`,\n\n            events: [\n                {\n                    selector: '.eleImg',\n                    type: 'click',\n                    fn: (e: Event) => {\n                        // e为事件对象\n                        const $target = $(e.target)\n                        const nodeName = $target.getNodeName()\n                        let insertHtml\n\n                        if (nodeName === 'IMG') {\n                            // 插入图片\n                            insertHtml = $target.parent().html().trim()\n                        } else {\n                            // 插入 emoji\n                            insertHtml = '<span>' + $target.html() + '</span>'\n                        }\n\n                        editor.cmd.do('insertHTML', insertHtml)\n                        // 示函数执行结束之后关闭 panel\n                        return true\n                    },\n                },\n            ],\n        }\n    })\n    /* tabs配置项 =================================================================end*/\n\n    // 最终的配置 -----------------------------------------\n    const conf: PanelConf = {\n        width: 300, // Panel容器宽度\n        height: 230, // Panel容器高度\n        tabs: tabsConf,\n    }\n    return conf\n}\n", "import $, { DomElement } from '../../../utils/dom-core'\nimport WrapListHandle from './WrapListHandle'\nimport JoinListHandle from './JoinListHandle'\nimport StartJoinListHandle from './StartJoinListHandle'\nimport EndJoinListHandle from './EndJoinListHandle'\nimport OtherListHandle from './OtherListHandle'\n\nimport { HandlerListOptions } from './ListHandle'\n\n// 片段类型\nexport type ContainerFragment = HTMLElement | DocumentFragment\n\n// 处理类\nexport type ListHandleClass =\n    | WrapListHandle\n    | JoinListHandle\n    | StartJoinListHandle\n    | EndJoinListHandle\n    | OtherListHandle\n\nexport enum ClassType {\n    Wrap = 'WrapListHandle',\n    Join = 'JoinListHandle',\n    StartJoin = 'StartJoinListHandle',\n    EndJoin = 'EndJoinListHandle',\n    Other = 'OtherListHandle',\n}\n\nconst handle = {\n    WrapListHandle,\n    JoinListHandle,\n    StartJoinListHandle,\n    EndJoinListHandle,\n    OtherListHandle,\n}\n\nexport function createListHandle(\n    classType: ClassType,\n    options: HandlerListOptions,\n    range?: Range\n): ListHandleClass {\n    if (classType === ClassType.Other && range === undefined) {\n        throw new Error('other 类需要传入 range')\n    }\n\n    return classType !== ClassType.Other\n        ? new handle[classType](options)\n        : new handle[classType](options, range as Range)\n}\n\n/**\n * 统一执行的接口\n */\nexport default class ListHandleCommand {\n    private handle: ListHandleClass\n\n    constructor(handle: ListHandleClass) {\n        this.handle = handle\n        this.handle.exec()\n    }\n\n    getSelectionRangeElem(): DomElement {\n        return $(this.handle.selectionRangeElem.get())\n    }\n}\n", "import { ContainerFragment } from '.'\nimport $, { DomElement } from '../../../utils/dom-core'\nimport { Exec, HandlerListOptions, ListHandle } from './ListHandle'\nimport {\n    insertBefore,\n    createElement,\n    createDocumentFragment,\n    createElementFragment,\n} from '../utils'\n\n/**\n * 选区在序列内的处理\n */\nexport default class WrapListHandle extends ListHandle implements Exec {\n    constructor(options: HandlerListOptions) {\n        super(options)\n    }\n\n    exec(): void {\n        const { listType, listTarget, $selectionElem, $startElem, $endElem } = this.options\n\n        let $containerFragment: ContainerFragment // 容器 - HTML 文档片段\n        const $nodes: DomElement[] = [] // 获取选中的段落\n\n        // 获取 selectionElem 的标签名\n        const containerNodeName = $selectionElem?.getNodeName()\n\n        // 获取开始以及结束的 li 元素\n        const $start = $startElem.prior\n        const $end = $endElem.prior\n\n        // =====================================\n        // 当 开始节点 和 结束节点 没有 prior\n        // 并且 开始节点 没有前一个兄弟节点\n        // 并且 结束节点 没有后一个兄弟节点\n        // 即代表 全选序列\n        // =====================================\n        if (\n            (!$startElem.prior && !$endElem.prior) ||\n            (!$start?.prev().length && !$end?.next().length)\n        ) {\n            // 获取当前序列下的所有 li 标签\n            ;($selectionElem?.children() as DomElement).forEach(($node: HTMLElement) => {\n                $nodes.push($($node))\n            })\n\n            // =====================================\n            // 当 selectionElem 的标签名和按钮类型 一致 的时候\n            // 代表着当前的操作是 取消 序列\n            // =====================================\n            if (containerNodeName === listType) {\n                // 生成对应的段落(p)并添加到文档片段中，然后删除掉无用的 li\n                $containerFragment = createElementFragment(\n                    $nodes,\n                    createDocumentFragment(), // 创建 文档片段\n                    'p'\n                )\n            }\n\n            // =====================================\n            // 当 selectionElem 的标签名和按钮类型 不一致 的时候\n            // 代表着当前的操作是 转换 序列\n            // =====================================\n            else {\n                // 创建 序列节点\n                $containerFragment = createElement(listTarget)\n\n                // 因为是转换，所以 li 元素可以直接使用\n                $nodes.forEach($node => {\n                    $containerFragment.appendChild($node.elems[0])\n                })\n            }\n\n            // 把 文档片段 或 序列节点 插入到 selectionElem 的前面\n            this.selectionRangeElem.set($containerFragment)\n\n            // 插入到 $selectionElem 之前\n            insertBefore($selectionElem, $containerFragment, $selectionElem.elems[0])\n\n            // 删除无用的 selectionElem 因为它被掏空了\n            $selectionElem.remove()\n        }\n\n        // =====================================\n        // 当不是全选序列的时候就代表是非全选序列(废话)\n        // 非全选序列的情况\n        // =====================================\n        else {\n            // 获取选中的内容\n            let $startDom: DomElement = $start as DomElement\n            while ($startDom.length) {\n                $nodes.push($startDom)\n                $end?.equal($startDom)\n                    ? ($startDom = $(undefined)) // 结束\n                    : ($startDom = $startDom.next()) // 继续\n            }\n\n            // 获取开始节点的上一个兄弟节点\n            const $prveDom: DomElement = ($start as DomElement).prev()\n            // 获取结束节点的下一个兄弟节点\n            let $nextDom: DomElement = ($end as DomElement).next()\n\n            // =====================================\n            // 当 selectionElem 的标签名和按钮类型一致的时候\n            // 代表着当前的操作是 取消 序列\n            // =====================================\n            if (containerNodeName === listType) {\n                // 生成对应的段落(p)并添加到文档片段中，然后删除掉无用的 li\n                $containerFragment = createElementFragment(\n                    $nodes,\n                    createDocumentFragment(), // 创建 文档片段\n                    'p'\n                )\n            }\n\n            // =====================================\n            // 当 selectionElem 的标签名和按钮类型不一致的时候\n            // 代表着当前的操作是 转换 序列\n            // =====================================\n            else {\n                // 创建 文档片段\n                $containerFragment = createElement(listTarget)\n\n                // 因为是转换，所以 li 元素可以直接使用\n                $nodes.forEach(($node: DomElement) => {\n                    $containerFragment.append($node.elems[0])\n                })\n            }\n\n            // =====================================\n            // 当 prveDom 和 nextDom 都存在的时候\n            // 代表着当前选区是在序列的中间\n            // 所以要先把 下半部分 未选择的 li 元素独立出来生成一个 序列\n            // =====================================\n            if ($prveDom.length && $nextDom.length) {\n                // 获取尾部的元素\n                const $tailDomArr: DomElement[] = []\n                while ($nextDom.length) {\n                    $tailDomArr.push($nextDom)\n                    $nextDom = $nextDom.next()\n                }\n\n                // 创建 尾部序列节点\n                const $tailDocFragment = createElement(containerNodeName)\n\n                // 把尾部元素节点添加到尾部序列节点中\n                $tailDomArr.forEach(($node: DomElement) => {\n                    $tailDocFragment.append($node.elems[0])\n                })\n\n                // 把尾部序列节点插入到 selectionElem 的后面\n                $($tailDocFragment).insertAfter($selectionElem)\n\n                // =====================================\n                // 获取选区容器元素的父元素，一般就是编辑区域\n                // 然后判断 selectionElem 是否还有下一个兄弟节点\n                // 如果有，就把文档片段添加到 selectionElem 下一个兄弟节点前\n                // 如果没有，就把文档片段添加到 编辑区域 末尾\n                // =====================================\n                this.selectionRangeElem.set($containerFragment)\n                const $selectionNextDom: DomElement = $selectionElem.next()\n                $selectionNextDom.length\n                    ? insertBefore($selectionElem, $containerFragment, $selectionNextDom.elems[0])\n                    : $selectionElem.parent().elems[0].append($containerFragment)\n            }\n\n            // =====================================\n            // 不管是 取消 还是 转换 都需要重新插入节点\n            //\n            // prveDom.length 等于 0 即代表选区是 selectionElem 序列的上半部分\n            // 上半部分的 li 元素\n            // =====================================\n            else if (!$prveDom.length) {\n                // 文档片段插入到 selectionElem 之前\n                this.selectionRangeElem.set($containerFragment)\n                insertBefore($selectionElem, $containerFragment, $selectionElem.elems[0])\n            }\n\n            // =====================================\n            // 不管是 取消 还是 转换 都需要重新插入节点\n            //\n            // nextDom.length 等于 0 即代表选区是 selectionElem 序列的下半部分\n            // 下半部分的 li 元素  if (!$nextDom.length)\n            // =====================================\n            else {\n                // 文档片段插入到 selectionElem 之后\n                this.selectionRangeElem.set($containerFragment)\n                const $selectionNextDom: DomElement = $selectionElem.next()\n                $selectionNextDom.length\n                    ? insertBefore($selectionElem, $containerFragment, $selectionNextDom.elems[0])\n                    : $selectionElem.parent().elems[0].append($containerFragment)\n            }\n        }\n    }\n}\n", "type SelectionRangeType = HTMLElement | ChildNode[]\ntype SetSelectionRangeType = SelectionRangeType | DocumentFragment\nexport type SelectionRangeElemType = SelectionRangeType | null\n\n/**\n * @description 选区的 Element\n * @author tonghan\n */\nclass SelectionRangeElem {\n    private _element: SelectionRangeElemType\n\n    constructor() {\n        this._element = null\n    }\n\n    /**\n     * 设置 SelectionRangeElem 的值\n     * @param { SetSelectionRangeType } data\n     */\n    public set(data: SetSelectionRangeType) {\n        //\n        if (data instanceof DocumentFragment) {\n            const childNode: ChildNode[] = []\n            data.childNodes.forEach(($node: ChildNode) => {\n                childNode.push($node)\n            })\n            data = childNode\n        }\n        this._element = data\n    }\n\n    /**\n     * 获取 SelectionRangeElem 的值\n     * @returns { SelectionRangeType } Elem\n     */\n    public get(): SelectionRangeElemType {\n        return this._element\n    }\n\n    /**\n     * 清除 SelectionRangeElem 的值\n     */\n    public clear() {\n        this._element = null\n    }\n}\n\nexport default SelectionRangeElem\n", "import { ContainerFragment } from '.'\nimport $, { DomElement } from '../../../utils/dom-core'\nimport { Exec, HandlerListOptions, ListHandle } from './ListHandle'\nimport {\n    filterSelectionNodes,\n    getStartPoint,\n    getEndPoint,\n    insertBefore,\n    createElement,\n    createDocumentFragment,\n    createElementFragment,\n} from '../utils'\n\nexport default class JoinListHandle extends ListHandle implements Exec {\n    constructor(options: HandlerListOptions) {\n        super(options)\n    }\n\n    exec(): void {\n        const { editor, listType, listTarget, $startElem, $endElem } = this.options\n\n        // 容器 - HTML 文档片段\n        let $containerFragment: ContainerFragment\n\n        // 获取选中的段落\n        const $nodes: DomElement[] = editor.selection.getSelectionRangeTopNodes()\n\n        // 获取开始段落和结束段落 标签名\n        const startNodeName = $startElem?.getNodeName()\n        const endNodeName = $endElem?.getNodeName()\n\n        // =====================================\n        // 开头结尾都是序列的情况下\n        // 开头序列 和 结尾序列的标签名一致的时候\n        // =====================================\n        if (startNodeName === endNodeName) {\n            // =====================================\n            // 开头序列 和 结尾序列 中间还有其他的段落的时候\n            // =====================================\n            if ($nodes.length > 2) {\n                // 弹出 开头 和 结尾\n                $nodes.shift()\n                $nodes.pop()\n\n                // 把中间部分的节点元素转换成 li 元素并添加到文档片段后删除\n                $containerFragment = createElementFragment(\n                    filterSelectionNodes($nodes), // 过滤 $nodes 获取到符合要求的选中元素节点\n                    createDocumentFragment() // 创建 文档片段\n                )\n\n                // =====================================\n                // 由于开头序列 和 结尾序列的标签名一样，所以只判断了开头序列的\n                // 当开头序列的标签名和按钮类型 一致 的时候\n                // 代表着当前是一个 设置序列 的操作\n                // =====================================\n                if (startNodeName === listType) {\n                    // 把结束序列的 li 元素添加到 文档片段中\n                    $endElem.children()?.forEach(($list: HTMLElement) => {\n                        $containerFragment.append($list)\n                    })\n\n                    // 下序列全选被掏空了，就卸磨杀驴吧\n                    $endElem.remove()\n\n                    // 在开始序列中添加 文档片段\n                    this.selectionRangeElem.set($containerFragment)\n                    $startElem.elems[0].append($containerFragment)\n                }\n\n                // =====================================\n                // 由于开头序列 和 结尾序列的标签名一样，所以只判断了开头序列的\n                // 当开头序列的标签名和按钮类型 不一致 的时候\n                // 代表着当前是一个 转换序列 的操作\n                // =====================================\n                else {\n                    // 创建 开始序列和结束序列的文档片段\n                    const $startFragment = document.createDocumentFragment()\n                    const $endFragment = document.createDocumentFragment()\n\n                    // 获取起点元素\n                    let $startDom: DomElement = getStartPoint($startElem)\n                    // 获取上半序列中的选中内容，并添加到文档片段中\n                    while ($startDom.length) {\n                        const _element = $startDom.elems[0]\n                        $startDom = $startDom.next()\n                        $startFragment.append(_element)\n                    }\n\n                    // 获取结束元素\n                    let $endDom: DomElement = getEndPoint($endElem)\n                    // 获取下半序列中选中的内容\n                    const domArr: Element[] = []\n                    while ($endDom.length) {\n                        domArr.unshift($endDom.elems[0])\n                        $endDom = $endDom.prev()\n                    }\n                    // 添加到文档片段中\n                    domArr.forEach(($node: Element) => {\n                        $endFragment.append($node)\n                    })\n\n                    // 合并文档片段\n                    const $orderFragment = createElement(listTarget)\n                    $orderFragment.append($startFragment)\n                    $orderFragment.append($containerFragment)\n                    $orderFragment.append($endFragment)\n                    $containerFragment = $orderFragment\n\n                    // 插入\n                    this.selectionRangeElem.set($containerFragment)\n                    $($orderFragment).insertAfter($startElem)\n\n                    // 序列全选被掏空了后，就卸磨杀驴吧\n                    !$startElem.children()?.length && $startElem.remove()\n                    !$endElem.children()?.length && $endElem.remove()\n                }\n            }\n\n            // =====================================\n            // 开头序列 和 结尾序列 中间没有其他的段落\n            // =====================================\n            else {\n                $nodes.length = 0\n\n                // 获取起点元素\n                let $startDom: DomElement = getStartPoint($startElem)\n                // 获取上半序列中的选中内容\n                while ($startDom.length) {\n                    $nodes.push($startDom)\n                    $startDom = $startDom.next()\n                }\n\n                // 获取结束元素\n                let $endDom: DomElement = getEndPoint($endElem)\n                // 获取下半序列中选中的内容\n                const domArr: DomElement[] = []\n                // 获取下半序列中的选中内容\n                while ($endDom.length) {\n                    domArr.unshift($endDom)\n                    $endDom = $endDom.prev()\n                }\n\n                // 融合内容\n                $nodes.push(...domArr)\n\n                // =====================================\n                // 由于开头序列 和 结尾序列的标签名一样，所以只判断了开头序列的\n                // 当开头序列的标签名和按钮类型 一致 的时候\n                // 代表着当前是一个 取消序列 的操作\n                // =====================================\n                if (startNodeName === listType) {\n                    // 创建 文档片段\n                    // 把 li 转换为 p 标签\n                    $containerFragment = createElementFragment(\n                        $nodes,\n                        createDocumentFragment(),\n                        'p'\n                    )\n\n                    // 插入到 endElem 前\n                    this.selectionRangeElem.set($containerFragment)\n                    insertBefore($startElem, $containerFragment, $endElem.elems[0])\n                }\n\n                // =====================================\n                // 由于开头序列 和 结尾序列的标签名一样，所以只判断了开头序列的\n                // 当开头序列的标签名和按钮类型 不一致 的时候\n                // 代表着当前是一个 设置序列 的操作\n                // =====================================\n                else {\n                    // 创建 序列元素\n                    $containerFragment = createElement(listTarget)\n                    // li 元素添加到 序列元素 中\n                    $nodes.forEach(($list: DomElement) => {\n                        $containerFragment.append($list.elems[0])\n                    })\n                    // 插入到 startElem 之后\n                    this.selectionRangeElem.set($containerFragment)\n                    $($containerFragment).insertAfter($startElem)\n                }\n\n                // 序列全选被掏空了后，就卸磨杀驴吧\n                !$startElem.children()?.length && $endElem.remove()\n                !$endElem.children()?.length && $endElem.remove()\n            }\n        }\n\n        // =====================================\n        // 由于开头序列 和 结尾序列的标签名不一样\n        // =====================================\n        else {\n            // 下序列元素数组\n            const lowerListElems: DomElement[] = []\n            // 获取结束元素\n            let $endDom: DomElement = getEndPoint($endElem)\n            // 获取下半序列中选中的内容\n            while ($endDom.length) {\n                lowerListElems.unshift($endDom)\n                $endDom = $endDom.prev()\n            }\n\n            // 上序列元素数组\n            const upperListElems: DomElement[] = []\n            // 获取起点元素\n            let $startDom: DomElement = getStartPoint($startElem)\n            // 获取上半序列中的选中内容，并添加到文档片段中\n            while ($startDom.length) {\n                upperListElems.push($startDom)\n                $startDom = $startDom.next()\n            }\n\n            // 创建 文档片段\n            $containerFragment = createDocumentFragment()\n\n            // 弹出开头和结尾的序列\n            $nodes.shift()\n            $nodes.pop()\n\n            // 把头部序列的内容添加到文档片段当中\n            upperListElems.forEach($list => $containerFragment.append($list.elems[0]))\n\n            // 生成 li 标签，并且添加到 文档片段中，删除无用节点\n            $containerFragment = createElementFragment(\n                filterSelectionNodes($nodes), // 序列中间的数据 - 进行数据过滤\n                $containerFragment\n            )\n\n            // 把尾部序列的内容添加到文档片段当中\n            lowerListElems.forEach($list => $containerFragment.append($list.elems[0]))\n\n            // 记录\n            this.selectionRangeElem.set($containerFragment)\n\n            // =====================================\n            // 开头序列 和 设置序列类型相同\n            // =====================================\n            if (startNodeName === listType) {\n                // 插入到 开始序列的尾部(作为子元素)\n                $startElem.elems[0].append($containerFragment)\n\n                // 序列全选被掏空了后，就卸磨杀驴吧\n                !$endElem.children()?.length && $endElem.remove()\n            }\n\n            // =====================================\n            // 结尾序列 和 设置序列类型相同\n            // =====================================\n            else {\n                // 插入到结束序列的顶部(作为子元素)\n                if ($endElem.children()?.length) {\n                    const $endElemChild = $endElem.children() as DomElement\n                    insertBefore($endElemChild, $containerFragment, $endElemChild.elems[0])\n                } else {\n                    $endElem.elems[0].append($containerFragment)\n                }\n            }\n        }\n    }\n}\n", "import { ContainerFragment } from '.'\nimport $, { DomElement } from '../../../utils/dom-core'\nimport { Exec, HandlerListOptions, ListHandle } from './ListHandle'\nimport {\n    filterSelectionNodes,\n    getStartPoint,\n    createElement,\n    createDocumentFragment,\n    createElementFragment,\n} from '../utils'\n\nexport default class StartJoinListHandle extends ListHandle implements Exec {\n    constructor(options: HandlerListOptions) {\n        super(options)\n    }\n\n    exec(): void {\n        const { editor, listType, listTarget, $startElem } = this.options\n\n        // 容器 - HTML 文档片段\n        let $containerFragment: ContainerFragment\n\n        // 获取选中的段落\n        const $nodes: DomElement[] = editor.selection.getSelectionRangeTopNodes()\n\n        // 获取开始段落标签名\n        const startNodeName = $startElem?.getNodeName()\n\n        // 弹出 开头序列\n        $nodes.shift()\n\n        // 上序列元素数组\n        const upperListElems: DomElement[] = []\n        // 获取起点元素\n        let $startDom: DomElement = getStartPoint($startElem)\n        // 获取上半序列中的选中内容，并添加到文档片段中\n        while ($startDom.length) {\n            upperListElems.push($startDom)\n            $startDom = $startDom.next()\n        }\n\n        // =====================================\n        // 当前序列类型和开头序列的类型 一致\n        // 代表当前是一个 融合(把其他段落加入到开头序列中) 的操作\n        // =====================================\n        if (startNodeName === listType) {\n            $containerFragment = createDocumentFragment()\n\n            upperListElems.forEach($list => $containerFragment.append($list.elems[0]))\n\n            // 生成 li 元属，并删除\n            $containerFragment = createElementFragment(\n                filterSelectionNodes($nodes), // 过滤元素节点数据\n                $containerFragment\n            )\n\n            // 插入到开始序列末尾\n            this.selectionRangeElem.set($containerFragment)\n            // this.selectionRangeElem.set($startElem.elems[0])\n            $startElem.elems[0].append($containerFragment)\n        }\n\n        // =====================================\n        // 当前序列类型和开头序列的类型 不一致\n        // 代表当前是一个 设置序列 的操作\n        // =====================================\n        else {\n            // 创建 序列节点\n            $containerFragment = createElement(listTarget)\n\n            upperListElems.forEach($list => $containerFragment.append($list.elems[0]))\n\n            // 生成 li 元素，并添加到 序列节点 当中，删除无用节点\n            $containerFragment = createElementFragment(\n                filterSelectionNodes($nodes), // 过滤普通节点\n                $containerFragment\n            )\n\n            // 插入到开始元素\n            this.selectionRangeElem.set($containerFragment)\n            $($containerFragment).insertAfter($startElem)\n\n            // 序列全选被掏空了后，就卸磨杀驴吧\n            !$startElem.children()?.length && $startElem.remove()\n        }\n    }\n}\n", "import { ContainerFragment } from '.'\nimport $, { DomElement } from '../../../utils/dom-core'\nimport { Exec, HandlerListOptions, ListHandle } from './ListHandle'\nimport {\n    filterSelectionNodes,\n    getEndPoint,\n    insertBefore,\n    createElement,\n    createDocumentFragment,\n    createElementFragment,\n} from '../utils'\n\nexport default class EndJoinListHandle extends ListHandle implements Exec {\n    constructor(options: HandlerListOptions) {\n        super(options)\n    }\n\n    exec(): void {\n        const { editor, listType, listTarget, $endElem } = this.options\n\n        // 容器 - HTML 文档片段\n        let $containerFragment: ContainerFragment\n\n        // 获取选中的段落\n        const $nodes: DomElement[] = editor.selection.getSelectionRangeTopNodes()\n\n        // 获取结束段落标签名\n        const endNodeName = $endElem?.getNodeName()\n\n        // 弹出 结束序列\n        $nodes.pop()\n\n        // 下序列元素数组\n        const lowerListElems: DomElement[] = []\n        // 获取结束元素\n        let $endDom: DomElement = getEndPoint($endElem)\n        // 获取下半序列中选中的内容\n        while ($endDom.length) {\n            lowerListElems.unshift($endDom)\n            $endDom = $endDom.prev()\n        }\n\n        // =====================================\n        // 当前序列类型和结束序列的类型 一致\n        // 代表当前是一个 融合(把其他段落加入到结束序列中) 的操作\n        // =====================================\n        if (endNodeName === listType) {\n            // 生成 li 元属，并删除原来的 dom 元素\n            $containerFragment = createElementFragment(\n                filterSelectionNodes($nodes), // 过滤元素节点数据\n                createDocumentFragment() // 创建 文档片段\n            )\n\n            lowerListElems.forEach($list => $containerFragment.append($list.elems[0]))\n\n            // 插入到结束序列之前\n            this.selectionRangeElem.set($containerFragment)\n\n            if ($endElem.children()?.length) {\n                const $endElemChild = $endElem.children() as DomElement\n                insertBefore($endElemChild, $containerFragment, $endElemChild.elems[0])\n            } else {\n                $endElem.elems[0].append($containerFragment)\n            }\n        }\n\n        // =====================================\n        // 当前序列类型和结束序列的类型 不一致\n        // 代表当前是一个 设置序列 的操作\n        // =====================================\n        else {\n            // 过滤元素节点数据\n            const $selectionNodes = filterSelectionNodes($nodes)\n            // 把下序列的内容添加到过滤元素中\n            $selectionNodes.push(...lowerListElems)\n            // 生成 li 元素并且添加到序列节点后删除原节点\n            $containerFragment = createElementFragment(\n                $selectionNodes,\n                createElement(listTarget) // 创建 序列节点\n            )\n\n            // 插入到结束序列之前\n            this.selectionRangeElem.set($containerFragment)\n            $($containerFragment).insertBefore($endElem)\n\n            // 序列全选被掏空了后，就卸磨杀驴吧\n            !$endElem.children()?.length && $endElem.remove()\n        }\n    }\n}\n", "import { ContainerFragment } from '.'\nimport { DomElement } from '../../../utils/dom-core'\nimport { Exec, HandlerListOptions, ListHandle } from './ListHandle'\nimport { filterSelectionNodes, createElement, createElementFragment } from '../utils'\n\nexport default class OtherListHandle extends ListHandle implements Exec {\n    public range: Range\n\n    constructor(options: HandlerListOptions, range: Range) {\n        super(options)\n        this.range = range\n    }\n\n    exec(): void {\n        const { editor, listTarget } = this.options\n\n        // 获取选中的段落\n        const $nodes: DomElement[] = editor.selection.getSelectionRangeTopNodes()\n\n        // 生成 li 元素并且添加到序列节点后删除原节点\n        const $containerFragment: ContainerFragment = createElementFragment(\n            filterSelectionNodes($nodes), // 过滤选取的元素\n            createElement(listTarget) // 创建 序列节点\n        )\n\n        // 插入节点到选区\n        this.selectionRangeElem.set($containerFragment)\n        this.range.insertNode($containerFragment)\n    }\n}\n", "/**\n * @description 段落行高 LineHeight\n * @author lichunlin\n *\n */\n\nimport DropListMenu from '../menu-constructors/DropListMenu'\nimport $, { DomElement } from '../../utils/dom-core'\nimport Editor from '../../editor/index'\nimport { MenuActive } from '../menu-constructors/Menu'\nimport lineHeightList from './lineHeightList'\n\nclass LineHeight extends DropListMenu implements MenuActive {\n    constructor(editor: Editor) {\n        const $elem = $(\n            `<div class=\"w-e-menu\" data-title=\"行高\">\n                    <i class=\"w-e-icon-row-height\"></i>\n                </div>`\n        )\n        let lineHeightMenu = new lineHeightList(editor, editor.config.lineHeights)\n        const DropListMenu = {\n            width: 100,\n            title: '设置行高',\n            type: 'list', // droplist 以列表形式展示\n            list: lineHeightMenu.getItemList(),\n            clickHandler: (value: string) => {\n                //保存焦点\n                editor.selection.saveRange()\n                this.command(value)\n            },\n        }\n\n        super($elem, editor, DropListMenu)\n    }\n\n    /**\n     * 执行命令\n     * @param value value\n     */\n    public command(value: string): void {\n        const editor = this.editor\n\n        //重置选区\n        editor.selection.restoreSelection()\n\n        // 获取选区的祖先元素\n        const $containerElem = $(editor.selection.getSelectionContainerElem())\n\n        if (!$containerElem.elems.length) return\n\n        //选中多行操作\n        if ($containerElem && editor.$textElem.equal($containerElem)) {\n            // 标识是否可以设置行高的样式\n            let setStyleLock: boolean = false\n\n            //获取range 开头结束的dom\n            const selectionStartElem: HTMLElement = $(editor.selection.getSelectionStartElem())\n                .elems[0]\n            const SelectionEndElem: HTMLElement = $(editor.selection.getSelectionEndElem()).elems[0]\n\n            // 获取选区中，在contenteditable下的直接父元素\n            const StartElemWrap: HTMLElement = this.getDom(selectionStartElem)\n            const EndElemWrap: HTMLElement = this.getDom(SelectionEndElem)\n\n            const containerElemChildren = $containerElem.elems[0].children\n\n            for (let i = 0; i < containerElemChildren.length; i++) {\n                const item: HTMLElement = containerElemChildren[i] as HTMLElement\n\n                // 目前只支持p 段落标签设置行高\n                if ($(item).getNodeName() !== 'P') {\n                    continue\n                }\n\n                if (item === StartElemWrap) {\n                    setStyleLock = true\n                }\n\n                // 证明在区间节点里\n                if (setStyleLock) {\n                    $(item).css('line-height', value)\n\n                    if (item === EndElemWrap) {\n                        setStyleLock = false\n\n                        // 当设置完选择的EndElemWrap时，就可以退出\n                        return\n                    }\n                }\n            }\n\n            //重新设置选区\n            editor.selection.createRangeByElems(selectionStartElem, SelectionEndElem)\n\n            return\n        }\n\n        // 单行操作\n        // 选中区间的dom元素\n        const selectElem = $containerElem.elems[0]\n\n        // 获取选区中，在contenteditable下的直接父元素\n        const selectElemWrapdom = this.getDom(selectElem)\n\n        // 目前只支持p 段落标签设置行高\n        if ($(selectElemWrapdom).getNodeName() !== 'P') {\n            return\n        }\n\n        $(selectElemWrapdom).css('line-height', value)\n\n        //重新设置选区\n        editor.selection.createRangeByElems(selectElemWrapdom, selectElemWrapdom)\n\n        return\n    }\n\n    /**\n     * 遍历dom 获取祖父元素 直到contenteditable属性的div标签\n     *\n     */\n    public getDom(dom: HTMLElement): HTMLElement {\n        let DOM: HTMLElement = $(dom).elems[0]\n        if (!DOM.parentNode) {\n            return DOM\n        }\n        function getParentNode($node: HTMLElement, editor: Editor): HTMLElement {\n            const $parent = $($node.parentNode)\n            if (editor.$textElem.equal($parent)) {\n                return $node\n            } else {\n                return getParentNode($parent.elems[0], editor)\n            }\n        }\n        DOM = getParentNode(DOM, this.editor)\n\n        return DOM\n    }\n\n    /**\n     * style 处理\n     *\n     * 废弃的方法\n     */\n    public styleProcessing(styleList: Array<string>): string {\n        let styleStr = ''\n        styleList.forEach(item => {\n            item !== '' && item.indexOf('line-height') === -1\n                ? (styleStr = styleStr + item + ';')\n                : ''\n        })\n        return styleStr\n    }\n\n    /**\n     * 段落全选 比如：避免11变成111\n     *\n     * 废弃的方法\n     */\n    public setRange(startDom: Node, endDom: Node): void {\n        const editor = this.editor\n        let selection = window.getSelection ? window.getSelection() : document.getSelection()\n        //清除所有的选区\n        selection?.removeAllRanges()\n        const range = document.createRange()\n        let star = startDom\n        let end = endDom\n        range.setStart(star, 0)\n        range.setEnd(end, 1)\n        selection?.addRange(range)\n        //保存设置好的选区\n        editor.selection.saveRange()\n        //清除所有的选区\n        selection?.removeAllRanges()\n        //恢复选区\n        editor.selection.restoreSelection()\n    }\n\n    /**\n     * 尝试修改菜单激活状态\n     */\n    public tryChangeActive(): void {\n        const editor = this.editor\n        const $selectionElem = editor.selection.getSelectionContainerElem()\n        if ($selectionElem && editor.$textElem.equal($selectionElem)) {\n            //避免选中多行设置\n            return\n        }\n        let dom: DomElement | HTMLElement = $(editor.selection.getSelectionStartElem())\n        // 有些情况下 dom 可能为空，比如编辑器初始化\n        if (dom.length === 0) return\n\n        dom = this.getDom(dom.elems[0])\n        let style: string | null = dom.getAttribute('style') ? dom.getAttribute('style') : ''\n\n        //判断当前标签是否具有line-height属性\n        if (style && style.indexOf('line-height') !== -1) {\n            this.active()\n        } else {\n            this.unActive()\n        }\n    }\n}\n\nexport default LineHeight\n", "/**\n * @description 行高 菜单\n * @author lichunlin\n */\nimport $ from '../../utils/dom-core'\nimport Editor from '../../editor/index'\nimport { DropListItem } from '../menu-constructors/DropList'\n\nclass lineHeightList {\n    private itemList: DropListItem[]\n\n    constructor(editor: Editor, list: string[]) {\n        this.itemList = [{ $elem: $(`<span>${editor.i18next.t('默认')}</span>`), value: '' }]\n        list.forEach(item => {\n            this.itemList.push({\n                $elem: $(`<span>${item}</span>`),\n                value: item,\n            })\n        })\n    }\n\n    public getItemList(): DropListItem[] {\n        return this.itemList\n    }\n}\n\nexport default lineHeightList\n", "/**\n * @description 撤销\n * @author tonghan\n */\n\nimport $ from '../../utils/dom-core'\nimport Editor from '../../editor/index'\nimport BtnMenu from '../menu-constructors/BtnMenu'\nimport { MenuActive } from '../menu-constructors/Menu'\n\nclass Undo extends BtnMenu implements MenuActive {\n    constructor(editor: Editor) {\n        const $elem = $(\n            `<div class=\"w-e-menu\" data-title=\"撤销\">\n                <i class=\"w-e-icon-undo\"></i>\n            </div>`\n        )\n        super($elem, editor)\n    }\n\n    /**\n     * 点击事件\n     */\n    public clickHandler(): void {\n        const editor = this.editor\n        editor.history.revoke()\n\n        // 重新创建 range，是处理当初始化编辑器，API插入内容后撤销，range 不在编辑器内部的问题\n        const children = editor.$textElem.children()\n\n        if (!children?.length) return\n\n        const $last = children.last()\n        editor.selection.createRangeByElem($last, false, true)\n        editor.selection.restoreSelection()\n    }\n\n    /**\n     * 尝试修改菜单激活状态\n     */\n    public tryChangeActive(): void {\n        // 标准模式下才进行操作\n        if (!this.editor.isCompatibleMode) {\n            if (this.editor.history.size[0]) {\n                this.active()\n            } else {\n                this.unActive()\n            }\n        }\n    }\n}\n\nexport default Undo\n", "/**\n * @description 重做\n * @author tonghan\n */\n\nimport $ from '../../utils/dom-core'\nimport Editor from '../../editor/index'\nimport BtnMenu from '../menu-constructors/BtnMenu'\nimport { MenuActive } from '../menu-constructors/Menu'\n\nclass Redo extends BtnMenu implements MenuActive {\n    constructor(editor: Editor) {\n        const $elem = $(\n            `<div class=\"w-e-menu\" data-title=\"恢复\">\n                <i class=\"w-e-icon-redo\"></i>\n            </div>`\n        )\n        super($elem, editor)\n    }\n\n    /**\n     * 点击事件\n     */\n    public clickHandler(): void {\n        const editor = this.editor\n        editor.history.restore()\n\n        // 重新创建 range，是处理当初始化编辑器，API插入内容后撤销，range 不在编辑器内部的问题\n        const children = editor.$textElem.children()\n\n        if (!children?.length) return\n\n        const $last = children.last()\n        editor.selection.createRangeByElem($last, false, true)\n        editor.selection.restoreSelection()\n    }\n\n    /**\n     * 尝试修改菜单激活状态\n     */\n    public tryChangeActive(): void {\n        // 标准模式下才进行操作\n        if (!this.editor.isCompatibleMode) {\n            if (this.editor.history.size[1]) {\n                this.active()\n            } else {\n                this.unActive()\n            }\n        }\n    }\n}\n\nexport default Redo\n", "/**\n * @description 创建table\n * @author lichunlin\n */\n\nimport PanelMenu from '../menu-constructors/PanelMenu'\nimport Editor from '../../editor/index'\nimport $ from '../../utils/dom-core'\nimport createPanelConf from './create-panel-conf'\nimport Panel from '../menu-constructors/Panel'\nimport { MenuActive } from '../menu-constructors/Menu'\nimport bindEvent from './bind-event/index'\n\nclass Table extends PanelMenu implements MenuActive {\n    constructor(editor: Editor) {\n        const $elem = $(\n            '<div class=\"w-e-menu\" data-title=\"表格\"><i class=\"w-e-icon-table2\"></i></div>'\n        )\n        super($elem, editor)\n\n        // 绑定事件\n        bindEvent(editor)\n    }\n\n    /**\n     * 菜单点击事件\n     */\n    public clickHandler(): void {\n        this.createPanel()\n    }\n\n    /**\n     * 创建 panel\n     */\n    private createPanel(): void {\n        const conf = createPanelConf(this.editor)\n        const panel = new Panel(this, conf)\n        panel.create()\n    }\n\n    /**\n     * 尝试修改菜单 active 状态\n     */\n    public tryChangeActive() {}\n}\n\nexport default Table\n", "/**\n * @description table 菜单 panel tab 配置\n * @author lichunlin\n */\n\nimport Editor from '../../editor/index'\nimport { PanelConf, PanelTabConf } from '../menu-constructors/Panel'\nimport { getRandom } from '../../utils/util'\nimport $ from '../../utils/dom-core'\nimport '../../assets/style/create-panel-conf.less'\nimport CreateTable from './create-table'\n\n/**\n * 判断一个数值是否为正整数\n * @param { number } n 被验证的值\n */\nfunction isPositiveInteger(n: number): boolean {\n    //是否为正整数\n    return n > 0 && Number.isInteger(n)\n}\n\nexport default function (editor: Editor): PanelConf {\n    const createTable = new CreateTable(editor)\n\n    // panel 中需要用到的id\n    const colId = getRandom('w-col-id')\n    const rowId = getRandom('w-row-id')\n    const insertBtnId = getRandom('btn-link')\n\n    const i18nPrefix = 'menus.panelMenus.table.'\n    const t = (text: string): string => {\n        return editor.i18next.t(text)\n    }\n\n    // tabs 配置 -----------------------------------------\n    const tabsConf: PanelTabConf[] = [\n        {\n            title: t(`${i18nPrefix}插入表格`),\n            tpl: `<div>\n                    <div class=\"w-e-table\">\n                        <span>${t('创建')}</span>\n                        <input id=\"${rowId}\"  type=\"text\" class=\"w-e-table-input\" value=\"5\"/></td>\n                        <span>${t(`${i18nPrefix}行`)}</span>\n                        <input id=\"${colId}\" type=\"text\" class=\"w-e-table-input\" value=\"5\"/></td>\n                        <span>${\n                            t(`${i18nPrefix}列`) + t(`${i18nPrefix}的`) + t(`${i18nPrefix}表格`)\n                        }</span>\n                    </div>\n                    <div class=\"w-e-button-container\">\n                        <button type=\"button\" id=\"${insertBtnId}\" class=\"right\">${t(\n                '插入'\n            )}</button>\n                    </div>\n                </div>`,\n            events: [\n                {\n                    selector: '#' + insertBtnId,\n                    type: 'click',\n                    fn: () => {\n                        const colValue = Number($('#' + colId).val())\n                        const rowValue = Number($('#' + rowId).val())\n                        //校验是否传值\n                        if (isPositiveInteger(rowValue) && isPositiveInteger(colValue)) {\n                            createTable.createAction(rowValue, colValue)\n                            return true\n                        } else {\n                            editor.config.customAlert('表格行列请输入正整数', 'warning')\n                            return false\n                        }\n                        // 返回 true 表示函数执行结束之后关闭 panel\n                    },\n                    bindEnter: true,\n                },\n            ],\n        },\n    ]\n    // tabs end\n\n    // 最终的配置 -----------------------------------------\n    const conf: PanelConf = {\n        width: 330,\n        height: 0,\n        tabs: [],\n    }\n    conf.tabs.push(tabsConf[0])\n\n    return conf\n}\n", "module.exports = require(\"core-js-pure/stable/number/is-integer\");", "var parent = require('../../es/number/is-integer');\n\nmodule.exports = parent;\n", "require('../../modules/es.number.is-integer');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Number.isInteger;\n", "var $ = require('../internals/export');\nvar isInteger = require('../internals/is-integer');\n\n// `Number.isInteger` method\n// https://tc39.github.io/ecma262/#sec-number.isinteger\n$({ target: 'Number', stat: true }, {\n  isInteger: isInteger\n});\n", "var isObject = require('../internals/is-object');\n\nvar floor = Math.floor;\n\n// `Number.isInteger` method implementation\n// https://tc39.github.io/ecma262/#sec-number.isinteger\nmodule.exports = function isInteger(it) {\n  return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n", "var api = require(\"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\");\n            var content = require(\"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/postcss-loader/src/index.js!../../../node_modules/less-loader/dist/cjs.js!./create-panel-conf.less\");\n\n            content = content.__esModule ? content.default : content;\n\n            if (typeof content === 'string') {\n              content = [[module.id, content, '']];\n            }\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nmodule.exports = content.locals || {};", "// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".w-e-table {\\n  display: flex;\\n}\\n.w-e-table .w-e-table-input {\\n  width: 40px;\\n  text-align: center!important;\\n  margin: 0 5px;\\n}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n", "/**\n * @description 创建tabel\n * @author lichunlin\n */\n\nimport { EMPTY_P } from '../../utils/const'\nimport Editor from '../../editor/index'\nimport $ from '../../utils/dom-core'\n\nclass CreateTable {\n    private editor: Editor\n\n    constructor(editor: Editor) {\n        this.editor = editor\n    }\n\n    /**\n     * 执行创建\n     * @param rowValue 行数\n     * @param colValue 列数\n     */\n    public createAction(rowValue: number, colValue: number) {\n        const editor = this.editor\n\n        //不允许在有序列表中添加table\n        let $selectionElem = $(editor.selection.getSelectionContainerElem())\n        const $ul = $($selectionElem.elems[0]).parentUntilEditor('UL', editor)\n        const $ol = $($selectionElem.elems[0]).parentUntilEditor('OL', editor)\n        if ($ul || $ol) {\n            return\n        }\n\n        const tableDom: string = this.createTableHtml(rowValue, colValue)\n        editor.cmd.do('insertHTML', tableDom)\n    }\n\n    /**\n     * 创建table、行、列\n     * @param rowValue 行数\n     * @param colValue 列数\n     */\n    public createTableHtml(rowValue: number, colValue: number): string {\n        let rowStr: string = ''\n        let colStr: string = ''\n        for (let i = 0; i < rowValue; i++) {\n            colStr = ''\n            for (let j = 0; j < colValue; j++) {\n                if (i === 0) {\n                    colStr = colStr + '<th></th>'\n                } else {\n                    colStr = colStr + '<td></td>'\n                }\n            }\n            rowStr = rowStr + '<tr>' + colStr + '</tr>'\n        }\n        const tableDom =\n            `<table border=\"0\" width=\"100%\" cellpadding=\"0\" cellspacing=\"0\"><tbody>` +\n            rowStr +\n            `</tbody></table>${EMPTY_P}`\n        return tableDom\n    }\n}\n\nexport default CreateTable\n", "/**\n * @description 绑定点击事件\n * @author lichunlin\n */\n\nimport Editor from '../../../editor/index'\nimport bindTooltip from './tooltip-event'\nimport { bindEventKeyboardEvent, bindClickEvent } from './table-event'\n\n/**\n * 绑定事件\n * @param editor 编辑器实例\n */\nfunction bindEvent(editor: Editor): void {\n    //Tooltip\n    bindTooltip(editor)\n\n    bindEventKeyboardEvent(editor)\n\n    bindClickEvent(editor)\n}\n\nexport default bindEvent\n", "/**\n * @description tooltip 事件\n * @author lichunlin\n */\n\nimport $, { DomElement } from '../../../utils/dom-core'\nimport Tooltip, { TooltipConfType } from '../../menu-constructors/Tooltip'\nimport Editor from '../../../editor/index'\n\n//操作事件\nimport operatingEvent from './event/operating-event'\n\nimport getNode from './event/getNode'\nimport { EMPTY_P } from '../../../utils/const'\n\n/**\n * 生成 Tooltip 的显示隐藏函数\n */\nfunction createShowHideFn(editor: Editor) {\n    let tooltip: Tooltip | null\n\n    /**\n     * 显示 tooltip\n     * @param  table元素\n     */\n    function showTableTooltip($node: DomElement) {\n        const getnode = new getNode(editor)\n\n        const i18nPrefix = 'menus.panelMenus.table.'\n        const t = (text: string, prefix: string = i18nPrefix): string => {\n            return editor.i18next.t(prefix + text)\n        }\n\n        const conf: TooltipConfType = [\n            {\n                // $elem: $(\"<span class='w-e-icon-trash-o'></span>\"),\n                $elem: $(`<span>${t('删除表格')}</span>`),\n                onClick: (editor: Editor, $node: DomElement) => {\n                    // 选中img元素\n                    editor.selection.createRangeByElem($node)\n                    editor.selection.restoreSelection()\n                    editor.cmd.do('insertHTML', EMPTY_P)\n                    // 返回 true，表示执行完之后，隐藏 tooltip。否则不隐藏。\n                    return true\n                },\n            },\n            {\n                $elem: $(`<span>${t('添加行')}</span>`),\n                onClick: (editor: Editor, $node: DomElement) => {\n                    // 禁止多选操作\n                    let isMore = isMoreRowAction(editor)\n                    if (isMore) {\n                        return true\n                    }\n                    //当前元素\n                    let selectDom = $(editor.selection.getSelectionStartElem())\n                    //当前行\n                    let $currentRow = getnode.getRowNode(selectDom.elems[0])\n                    if (!$currentRow) {\n                        return true\n                    }\n                    //获取当前行的index\n                    const index = Number(getnode.getCurrentRowIndex($node.elems[0], $currentRow))\n                    //生成要替换的html\n                    let htmlStr = getnode.getTableHtml($node.elems[0])\n                    //生成新的table\n                    let newdom: string = getnode.getTableHtml(\n                        operatingEvent.ProcessingRow($(htmlStr), index).elems[0]\n                    )\n                    newdom = _isEmptyP($node, newdom)\n                    // 选中table\n                    editor.selection.createRangeByElem($node)\n                    editor.selection.restoreSelection()\n\n                    editor.cmd.do('insertHTML', newdom)\n\n                    return true\n                },\n            },\n            {\n                $elem: $(`<span>${t('删除行')}</span>`),\n                onClick: (editor: Editor, $node: DomElement) => {\n                    // 禁止多选操作\n                    let isMore = isMoreRowAction(editor)\n                    if (isMore) {\n                        return true\n                    }\n                    //当前元素\n                    let selectDom = $(editor.selection.getSelectionStartElem())\n                    //当前行\n                    let $currentRow = getnode.getRowNode(selectDom.elems[0])\n                    if (!$currentRow) {\n                        return true\n                    }\n                    //获取当前行的index\n                    const index = Number(getnode.getCurrentRowIndex($node.elems[0], $currentRow))\n                    //生成要替换的html\n                    let htmlStr = getnode.getTableHtml($node.elems[0])\n                    //获取新生成的table 判断是否是最后一行被删除 是 删除整个table\n                    const trLength: number = operatingEvent.DeleteRow($(htmlStr), index).elems[0]\n                        .children[0].children.length\n                    //生成新的table\n                    let newdom: string = ''\n                    // 选中table\n                    editor.selection.createRangeByElem($node)\n                    editor.selection.restoreSelection()\n\n                    if (trLength === 0) {\n                        newdom = EMPTY_P\n                    } else {\n                        newdom = getnode.getTableHtml(\n                            operatingEvent.DeleteRow($(htmlStr), index).elems[0]\n                        )\n                    }\n                    newdom = _isEmptyP($node, newdom)\n                    editor.cmd.do('insertHTML', newdom)\n\n                    return true\n                },\n            },\n            {\n                $elem: $(`<span>${t('添加列')}</span>`),\n                onClick: (editor: Editor, $node: DomElement) => {\n                    // 禁止多选操作\n                    let isMore = isMoreRowAction(editor)\n                    if (isMore) {\n                        return true\n                    }\n                    //当前元素\n                    let selectDom = $(editor.selection.getSelectionStartElem())\n                    //当前列的index\n                    const index = getnode.getCurrentColIndex(selectDom.elems[0])\n                    //生成要替换的html\n                    let htmlStr = getnode.getTableHtml($node.elems[0])\n                    //生成新的table\n                    let newdom: string = getnode.getTableHtml(\n                        operatingEvent.ProcessingCol($(htmlStr), index).elems[0]\n                    )\n                    newdom = _isEmptyP($node, newdom)\n                    // 选中table\n                    editor.selection.createRangeByElem($node)\n                    editor.selection.restoreSelection()\n\n                    editor.cmd.do('insertHTML', newdom)\n\n                    return true\n                },\n            },\n            {\n                $elem: $(`<span>${t('删除列')}</span>`),\n                onClick: (editor: Editor, $node: DomElement) => {\n                    // 禁止多选操作\n                    let isMore = isMoreRowAction(editor)\n                    if (isMore) {\n                        return true\n                    }\n                    //当前元素\n                    let selectDom = $(editor.selection.getSelectionStartElem())\n                    //当前列的index\n                    const index = getnode.getCurrentColIndex(selectDom.elems[0])\n                    //生成要替换的html\n                    let htmlStr = getnode.getTableHtml($node.elems[0])\n                    //获取新生成的table 判断是否是最后一列被删除 是 删除整个table\n                    const newDom = operatingEvent.DeleteCol($(htmlStr), index)\n                    // 获取子节点的数量\n                    const tdLength: number = newDom.elems[0].children[0].children[0].children.length\n\n                    //生成新的table\n                    let newdom: string = ''\n                    // 选中table\n                    editor.selection.createRangeByElem($node)\n                    editor.selection.restoreSelection()\n\n                    // 如果没有列了 则替换成空行\n                    if (tdLength === 0) {\n                        newdom = EMPTY_P\n                    } else {\n                        newdom = getnode.getTableHtml(newDom.elems[0])\n                    }\n                    newdom = _isEmptyP($node, newdom)\n                    editor.cmd.do('insertHTML', newdom)\n\n                    return true\n                },\n            },\n            {\n                $elem: $(`<span>${t('设置表头')}</span>`),\n                onClick: (editor: Editor, $node: DomElement) => {\n                    // 禁止多选操作\n                    let isMore = isMoreRowAction(editor)\n                    if (isMore) {\n                        return true\n                    }\n                    //当前元素\n                    let selectDom = $(editor.selection.getSelectionStartElem())\n                    //当前行\n                    let $currentRow = getnode.getRowNode(selectDom.elems[0])\n                    if (!$currentRow) {\n                        return true\n                    }\n                    //获取当前行的index\n                    let index = Number(getnode.getCurrentRowIndex($node.elems[0], $currentRow))\n                    if (index !== 0) {\n                        //控制在table的第一行\n                        index = 0\n                    }\n                    //生成要替换的html\n                    let htmlStr = getnode.getTableHtml($node.elems[0])\n                    //生成新的table\n                    let newdom: string = getnode.getTableHtml(\n                        operatingEvent.setTheHeader($(htmlStr), index, 'th').elems[0]\n                    )\n                    newdom = _isEmptyP($node, newdom)\n                    // 选中table\n                    editor.selection.createRangeByElem($node)\n                    editor.selection.restoreSelection()\n\n                    editor.cmd.do('insertHTML', newdom)\n\n                    return true\n                },\n            },\n            {\n                $elem: $(`<span>${t('取消表头')}</span>`),\n                onClick: (editor: Editor, $node: DomElement) => {\n                    //当前元素\n                    let selectDom = $(editor.selection.getSelectionStartElem())\n                    //当前行\n                    let $currentRow = getnode.getRowNode(selectDom.elems[0])\n                    if (!$currentRow) {\n                        return true\n                    }\n                    //获取当前行的index\n                    let index = Number(getnode.getCurrentRowIndex($node.elems[0], $currentRow))\n                    if (index !== 0) {\n                        //控制在table的第一行\n                        index = 0\n                    }\n                    //生成要替换的html\n                    let htmlStr = getnode.getTableHtml($node.elems[0])\n                    //生成新的table\n                    let newdom: string = getnode.getTableHtml(\n                        operatingEvent.setTheHeader($(htmlStr), index, 'td').elems[0]\n                    )\n                    newdom = _isEmptyP($node, newdom)\n                    // 选中table\n                    editor.selection.createRangeByElem($node)\n                    editor.selection.restoreSelection()\n\n                    editor.cmd.do('insertHTML', newdom)\n\n                    return true\n                },\n            },\n        ]\n\n        tooltip = new Tooltip(editor, $node, conf)\n        tooltip.create()\n    }\n\n    /**\n     * 隐藏 tooltip\n     */\n    function hideTableTooltip() {\n        // 移除 tooltip\n        if (tooltip) {\n            tooltip.remove()\n            tooltip = null\n        }\n    }\n\n    return {\n        showTableTooltip,\n        hideTableTooltip,\n    }\n}\n\n/**\n * 判断是否是多行\n */\nfunction isMoreRowAction(editor: Editor): boolean {\n    const $startElem = editor.selection.getSelectionStartElem()\n    const $endElem = editor.selection.getSelectionEndElem()\n    if ($startElem?.elems[0] !== $endElem?.elems[0]) {\n        return true\n    } else {\n        return false\n    }\n}\n\n/**\n * 绑定 tooltip 事件\n * @param editor 编辑器实例\n */\nexport default function bindTooltipEvent(editor: Editor) {\n    const { showTableTooltip, hideTableTooltip } = createShowHideFn(editor)\n\n    // 点击table元素是，显示 tooltip\n    editor.txt.eventHooks.tableClickEvents.push(showTableTooltip)\n\n    // 点击其他地方，或者滚动时，隐藏 tooltip\n    editor.txt.eventHooks.clickEvents.push(hideTableTooltip)\n    editor.txt.eventHooks.keyupEvents.push(hideTableTooltip)\n    editor.txt.eventHooks.toolbarClickEvents.push(hideTableTooltip)\n    editor.txt.eventHooks.menuClickEvents.push(hideTableTooltip)\n    editor.txt.eventHooks.textScrollEvents.push(hideTableTooltip)\n}\n\n/**\n * 判断表格的下一个节点是否是空行\n */\nfunction _isEmptyP($node: DomElement, newdom: string): string {\n    // 当表格的下一个兄弟节点是空行时，在 newdom 后添加 EMPTY_P\n    let nextNode = $node.elems[0].nextSibling as HTMLElement\n    if (!nextNode || nextNode.innerHTML === '<br>') {\n        newdom += `${EMPTY_P}`\n    }\n    return newdom\n}\n", "import $, { DomElement } from '../../../../utils/dom-core'\n\n/**\n * 处理新添加行\n * @param $node 整个table\n * @param _index 行的inde\n */\nfunction ProcessingRow($node: DomElement, _index: number): DomElement {\n    //执行获取tbody节点\n    let $dom = generateDomAction($node)\n    //取出所有的行\n    let domArray: HTMLElement[] = Array.prototype.slice.apply($dom.children)\n    //列的数量\n    const childrenLength = domArray[0].children.length\n    //创建新tr\n    let tr = document.createElement('tr')\n    for (let i = 0; i < childrenLength; i++) {\n        const td = document.createElement('td')\n        tr.appendChild(td)\n    }\n    //插入集合中\n    domArray.splice(_index + 1, 0, tr)\n    //移除、新增节点事件\n    removeAndInsertAction($dom, domArray)\n    return $($dom.parentNode)\n}\n\n/**\n * 处理新添加列\n * @param $node 整个table\n * @param _index 列的inde\n */\nfunction ProcessingCol($node: DomElement, _index: number): DomElement {\n    //执行获取tbody节点\n    let $dom = generateDomAction($node)\n    //取出所有的行\n    let domArray: HTMLElement[] = Array.prototype.slice.apply($dom.children)\n    //创建td\n    for (let i = 0; i < domArray.length; i++) {\n        let cArray: Node[] = []\n        //取出所有的列\n        Array.from(domArray[i].children).forEach(item => {\n            cArray.push(item)\n        })\n        //移除行的旧的子节点\n        while (domArray[i].children.length !== 0) {\n            domArray[i].removeChild(domArray[i].children[0])\n        }\n        //列分th td\n        let td =\n            $(cArray[0]).getNodeName() !== 'TH'\n                ? document.createElement('td')\n                : document.createElement('th')\n        // let td = document.createElement('td')\n        cArray.splice(_index + 1, 0, td)\n        //插入新的子节点\n        for (let j = 0; j < cArray.length; j++) {\n            domArray[i].appendChild(cArray[j])\n        }\n    }\n    //移除、新增节点事件\n    removeAndInsertAction($dom, domArray)\n    return $($dom.parentNode)\n}\n\n/**\n * 处理删除行\n * @param $node  整个table\n * @param _index  行的inde\n */\nfunction DeleteRow($node: DomElement, _index: number): DomElement {\n    //执行获取tbody节点\n    let $dom = generateDomAction($node)\n    //取出所有的行\n    let domArray: HTMLElement[] = Array.prototype.slice.apply($dom.children)\n    //删除行\n    domArray.splice(_index, 1)\n    //移除、新增节点事件\n    removeAndInsertAction($dom, domArray)\n    return $($dom.parentNode)\n}\n\n/**\n * 处理删除列\n * @param $node\n * @param _index\n */\nfunction DeleteCol($node: DomElement, _index: number): DomElement {\n    //执行获取tbody节点\n    let $dom = generateDomAction($node)\n    //取出所有的行\n    let domArray: HTMLElement[] = Array.prototype.slice.apply($dom.children)\n    //创建td\n    for (let i = 0; i < domArray.length; i++) {\n        let cArray: Node[] = []\n        //取出所有的列\n        Array.from(domArray[i].children).forEach(item => {\n            cArray.push(item)\n        })\n        //移除行的旧的子节点\n        while (domArray[i].children.length !== 0) {\n            domArray[i].removeChild(domArray[i].children[0])\n        }\n        cArray.splice(_index, 1)\n        //插入新的子节点\n        for (let j = 0; j < cArray.length; j++) {\n            domArray[i].appendChild(cArray[j])\n        }\n    }\n    //移除、新增节点事件\n    removeAndInsertAction($dom, domArray)\n    return $($dom.parentNode)\n}\n\n/**\n * 处理设置/取消表头\n * @param $node\n * @param _index\n * @type 替换的标签 th还是td\n */\nfunction setTheHeader($node: DomElement, _index: number, type: string): DomElement {\n    // 执行获取tbody节点\n    let $dom = generateDomAction($node)\n    // 取出所有的行\n    let domArray: HTMLElement[] = Array.prototype.slice.apply($dom.children)\n    // 列的数量\n    const cols = domArray[_index].children\n    // 创建新tr\n    let tr = document.createElement('tr')\n    for (let i = 0; i < cols.length; i++) {\n        // 根据type(td 或者 th)生成对应的el\n        const el = document.createElement(type)\n        const col = cols[i]\n        /**\n         * 没有使用children是因为谷歌纯文本内容children数组就为空，而火狐纯文本内容是“xxx<br>”使用children只能获取br\n         * 当然使用childNodes也涵盖支持我们表头使用表情，代码块等，不管是设置还是取消都会保留第一行\n         */\n        Array.from(col.childNodes).forEach(item => {\n            el.appendChild(item)\n        })\n        tr.appendChild(el)\n    }\n    //插入集合中\n    domArray.splice(_index, 1, tr)\n    //移除、新增节点事件\n    removeAndInsertAction($dom, domArray)\n    return $($dom.parentNode)\n}\n\n/**\n * 封装移除、新增节点事件\n * @param $dom tbody节点\n * @param domArray  所有的行\n */\nfunction removeAndInsertAction($dom: Element, domArray: Node[]) {\n    //移除所有的旧的子节点\n    while ($dom.children.length !== 0) {\n        $dom.removeChild($dom.children[0])\n    }\n    //插入新的子节点\n    for (let i = 0; i < domArray.length; i++) {\n        $dom.appendChild(domArray[i])\n    }\n}\n\n/**\n * 封装判断是否tbody节点\n * 粘贴的table 第一个节点是<colgroup> 最后的节点<tbody>\n * @param dom\n */\nfunction generateDomAction($node: DomElement) {\n    let $dom = $node.elems[0].children[0]\n    if ($dom.nodeName === 'COLGROUP') {\n        $dom = $node.elems[0].children[$node.elems[0].children.length - 1]\n    }\n    return $dom\n}\n\nexport default {\n    ProcessingRow,\n    ProcessingCol,\n    DeleteRow,\n    DeleteCol,\n    setTheHeader,\n}\n", "var parent = require('../../es/array/from');\n\nmodule.exports = parent;\n", "require('../../modules/es.string.iterator');\nrequire('../../modules/es.array.from');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Array.from;\n", "var $ = require('../internals/export');\nvar from = require('../internals/array-from');\nvar checkCorrectnessOfIteration = require('../internals/check-correctness-of-iteration');\n\nvar INCORRECT_ITERATION = !checkCorrectnessOfIteration(function (iterable) {\n  Array.from(iterable);\n});\n\n// `Array.from` method\n// https://tc39.github.io/ecma262/#sec-array.from\n$({ target: 'Array', stat: true, forced: INCORRECT_ITERATION }, {\n  from: from\n});\n", "'use strict';\nvar bind = require('../internals/function-bind-context');\nvar toObject = require('../internals/to-object');\nvar callWithSafeIterationClosing = require('../internals/call-with-safe-iteration-closing');\nvar isArrayIteratorMethod = require('../internals/is-array-iterator-method');\nvar toLength = require('../internals/to-length');\nvar createProperty = require('../internals/create-property');\nvar getIteratorMethod = require('../internals/get-iterator-method');\n\n// `Array.from` method implementation\n// https://tc39.github.io/ecma262/#sec-array.from\nmodule.exports = function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n  var O = toObject(arrayLike);\n  var C = typeof this == 'function' ? this : Array;\n  var argumentsLength = arguments.length;\n  var mapfn = argumentsLength > 1 ? arguments[1] : undefined;\n  var mapping = mapfn !== undefined;\n  var iteratorMethod = getIteratorMethod(O);\n  var index = 0;\n  var length, result, step, iterator, next, value;\n  if (mapping) mapfn = bind(mapfn, argumentsLength > 2 ? arguments[2] : undefined, 2);\n  // if the target is not iterable or it's an array with the default iterator - use a simple case\n  if (iteratorMethod != undefined && !(C == Array && isArrayIteratorMethod(iteratorMethod))) {\n    iterator = iteratorMethod.call(O);\n    next = iterator.next;\n    result = new C();\n    for (;!(step = next.call(iterator)).done; index++) {\n      value = mapping ? callWithSafeIterationClosing(iterator, mapfn, [step.value, index], true) : step.value;\n      createProperty(result, index, value);\n    }\n  } else {\n    length = toLength(O.length);\n    result = new C(length);\n    for (;length > index; index++) {\n      value = mapping ? mapfn(O[index], index) : O[index];\n      createProperty(result, index, value);\n    }\n  }\n  result.length = index;\n  return result;\n};\n", "/**\n * @description 获取dom节点\n * @author lichunlin\n */\n\nimport $ from '../../../../utils/dom-core'\nimport Editor from '../../../../editor/index'\n\nclass getNode {\n    public editor: Editor\n    constructor(editor: Editor) {\n        this.editor = editor\n    }\n\n    /**\n     * 获取焦点所在行\n     * @param $node 当前table\n     */\n    public getRowNode($node: HTMLElement): HTMLElement | null | undefined {\n        let DOM: HTMLElement | null | undefined = $($node).elems[0]\n        if (!DOM.parentNode) {\n            return DOM\n        }\n        DOM = $(DOM).parentUntil('TR', DOM)?.elems[0]\n        return DOM\n    }\n\n    /**\n     * 获取当前行的下标\n     * @param $node 当前table\n     * @param $dmo 当前行节点\n     */\n    public getCurrentRowIndex($node: HTMLElement, $dom: HTMLElement): Number {\n        let _index: number = 0\n        let $nodeChild = $node.children[0]\n        //粘贴的table 最后一个节点才是tbody\n        if ($nodeChild.nodeName === 'COLGROUP') {\n            $nodeChild = $node.children[$node.children.length - 1]\n        }\n        Array.from($nodeChild.children).forEach((item, index) => {\n            item === $dom ? (_index = index) : ''\n        })\n        return _index\n    }\n\n    /**\n     * 获取当前列的下标\n     * @param $node 当前点击元素\n     */\n    public getCurrentColIndex($node: HTMLElement): number {\n        //当前行\n        let _index: number = 0\n        //获取当前列 td或th\n        let rowDom =\n            $($node).getNodeName() === 'TD' || $($node).getNodeName() === 'TH'\n                ? $node\n                : $($node).parentUntil('TD', $node)?.elems[0]\n        let colDom = $(rowDom).parent()\n        Array.from(colDom.elems[0].children).forEach((item, index) => {\n            item === rowDom ? (_index = index) : ''\n        })\n        return _index\n    }\n\n    /**\n     * 返回元素html字符串\n     * @param $node\n     */\n    public getTableHtml($node: HTMLElement): string {\n        const htmlStr = `<table border=\"0\" width=\"100%\" cellpadding=\"0\" cellspacing=\"0\">${$(\n            $node\n        ).html()}</table>`\n        return htmlStr\n    }\n}\n\nexport default getNode\n", "/**\n * @description 保证table后面始终有dom\n * @author yanbiao(86driver)\n */\nimport Editor from '../../../editor/index'\nimport $, { DomElement } from '../../../utils/dom-core'\n\n/**\n * @description 是否是空行\n * @param topElem\n */\nfunction isEmptyLine(topElem: DomElement): boolean {\n    if (!topElem.length) {\n        return false\n    }\n\n    const dom = topElem.elems[0]\n\n    return dom.nodeName === 'P' && dom.innerHTML === '<br>'\n}\nexport function bindClickEvent(editor: Editor) {\n    function handleTripleClick($dom: DomElement, e: MouseEvent) {\n        // 处理三击事件，此时选区可能离开table，修正回来\n        if (e.detail >= 3) {\n            const selection = window.getSelection()\n            if (selection) {\n                const { focusNode, anchorNode } = selection\n                const $anchorNode = $(anchorNode?.parentElement)\n                // 当focusNode离开了table\n                if (!$dom.isContain($(focusNode))) {\n                    const $td =\n                        $anchorNode.elems[0].tagName === 'TD'\n                            ? $anchorNode\n                            : $anchorNode.parentUntilEditor('td', editor)\n                    if ($td) {\n                        const range = editor.selection.getRange()\n                        range?.setEnd($td.elems[0], $td.elems[0].childNodes.length)\n                        editor.selection.restoreSelection()\n                    }\n                }\n            }\n        }\n    }\n\n    editor.txt.eventHooks.tableClickEvents.push(handleTripleClick)\n}\n\nexport function bindEventKeyboardEvent(editor: Editor) {\n    const { txt, selection } = editor\n    const { keydownEvents } = txt.eventHooks\n\n    keydownEvents.push(function (e) {\n        // 实时保存选区\n        editor.selection.saveRange()\n        const $selectionContainerElem = selection.getSelectionContainerElem()\n        if ($selectionContainerElem) {\n            const $topElem = $selectionContainerElem.getNodeTop(editor)\n            const $preElem = $topElem.length\n                ? $topElem.prev().length\n                    ? $topElem.prev()\n                    : null\n                : null\n\n            // 删除时，选区前面是table，且选区没有选中文本，阻止默认行为\n            if (\n                $preElem &&\n                $preElem.getNodeName() === 'TABLE' &&\n                selection.isSelectionEmpty() &&\n                selection.getCursorPos() === 0 &&\n                e.keyCode === 8\n            ) {\n                const $nextElem = $topElem.next()\n                const hasNext = !!$nextElem.length\n\n                /**\n                 * 如果当前是空行，并且当前行下面还有内容，删除当前行\n                 * 浏览器默认行为不会删除掉当前行的<br>标签\n                 * 因此阻止默认行为，特殊处理\n                 */\n                if (hasNext && isEmptyLine($topElem)) {\n                    $topElem.remove()\n                    editor.selection.setRangeToElem($nextElem.elems[0])\n                }\n                e.preventDefault()\n            }\n        }\n    })\n}\n", "/**\n * @description 代码 菜单\n * @author lkw\n */\n\nimport PanelMenu from '../menu-constructors/PanelMenu'\nimport Editor from '../../editor/index'\nimport $ from '../../utils/dom-core'\nimport { replaceSpecialSymbol, deepClone } from '../../utils/util'\nimport createPanelConf from './create-panel-conf'\nimport isActive from './is-active'\nimport Panel from '../menu-constructors/Panel'\nimport { MenuActive } from '../menu-constructors/Menu'\nimport bindEvent from './bind-event/index'\n\nexport function formatCodeHtml(editor: Editor, html: string) {\n    if (!html) return html\n\n    html = deleteHighlightCode(html)\n\n    html = formatEnterCode(html)\n\n    html = replaceSpecialSymbol(html)\n\n    return html\n\n    // 格式化换换所产生的code标签\n    function formatEnterCode(html: string): string {\n        let preArr = html.match(/<pre[\\s|\\S]+?\\/pre>/g)\n\n        if (preArr === null) return html\n\n        preArr.map(item => {\n            //将连续的code标签换为\\n换行\n            html = html.replace(item, item.replace(/<\\/code><code>/g, '\\n').replace(/<br>/g, ''))\n        })\n\n        return html\n    }\n\n    // highlight格式化方法\n    function deleteHighlightCode(html: string): string {\n        // 获取所有hljs文本\n        let m = html.match(/<span\\sclass=\"hljs[\\s|\\S]+?\\/span>/gm)\n\n        // 没有代码渲染文本则退出\n        // @ts-ignore\n        if (!m || !m.length) return html\n\n        // 获取替换文本\n        let r = deepClone(m).map((i: string) => {\n            i = i.replace(/<span\\sclass=\"hljs[^>]+>/, '')\n            return i.replace(/<\\/span>/, '')\n        })\n\n        // @ts-ignore\n        for (let i = 0; i < m.length; i++) {\n            html = html.replace(m[i], r[i])\n        }\n\n        return deleteHighlightCode(html)\n    }\n}\n\nclass Code extends PanelMenu implements MenuActive {\n    constructor(editor: Editor) {\n        const $elem = $(\n            '<div class=\"w-e-menu\" data-title=\"代码\"><i class=\"w-e-icon-terminal\"></i></div>'\n        )\n        super($elem, editor)\n\n        // 绑定事件，如点击链接时，可以查看链接\n        bindEvent(editor)\n    }\n\n    /**\n     * 插入行内代码\n     * @param text\n     * @return null\n     */\n    private insertLineCode(text: string) {\n        let editor = this.editor\n        // 行内代码处理\n        let $code = $(`<code>${text}</code>`)\n        editor.cmd.do('insertElem', $code)\n        editor.selection.createRangeByElem($code, false)\n        editor.selection.restoreSelection()\n    }\n\n    /**\n     * 菜单点击事件\n     */\n    public clickHandler(): void {\n        const editor = this.editor\n        const selectionText = editor.selection.getSelectionText()\n\n        if (this.isActive) {\n            return\n        } else {\n            // 菜单未被激活，说明选区不在链接里\n            if (editor.selection.isSelectionEmpty()) {\n                // 选区是空的，未选中内容\n                this.createPanel('', '')\n            } else {\n                // 行内代码处理 选中了非代码内容\n                this.insertLineCode(selectionText)\n            }\n        }\n    }\n\n    /**\n     * 创建 panel\n     * @param text 代码文本\n     * @param languageType 代码类型\n     */\n    public createPanel(text: string, languageType: string): void {\n        const conf = createPanelConf(this.editor, text, languageType)\n        const panel = new Panel(this, conf)\n        panel.create()\n    }\n\n    /**\n     * 尝试修改菜单 active 状态\n     */\n    public tryChangeActive() {\n        const editor = this.editor\n        if (isActive(editor)) {\n            this.active()\n        } else {\n            this.unActive()\n        }\n    }\n}\n\nexport default Code\n", "/**\n * @description code 菜单 panel tab 配置\n * @author lkw\n */\n\nimport Editor from '../../editor/index'\nimport { PanelConf } from '../menu-constructors/Panel'\nimport { getRandom } from '../../utils/util'\nimport $, { DomElement } from '../../utils/dom-core'\nimport isActive from './is-active'\nimport { EMPTY_P } from '../../utils/const'\n\nexport default function (editor: Editor, text: string, languageType: string): PanelConf {\n    // panel 中需要用到的id\n    const inputIFrameId = getRandom('input-iframe')\n    const languageId = getRandom('select')\n    const btnOkId = getRandom('btn-ok')\n\n    /**\n     * 插入代码块\n     * @param text 文字\n     */\n    function insertCode(languateType: string, code: string): void {\n        // 选区处于链接中，则选中整个菜单，再执行 insertHTML\n        let active = isActive(editor)\n\n        if (active) {\n            selectCodeElem()\n        }\n\n        const content = editor.selection.getSelectionStartElem()?.elems[0].innerHTML\n\n        if (content) {\n            editor.cmd.do('insertHTML', EMPTY_P)\n        }\n\n        // 过滤标签，防止xss\n        let formatCode = code.replace(/</g, '&lt;').replace(/>/g, '&gt;')\n\n        // 高亮渲染\n        if (editor.highlight) {\n            formatCode = editor.highlight.highlightAuto(formatCode).value\n        }\n\n        //增加pre标签\n        editor.cmd.do('insertHTML', `<pre><code class=\"${languateType}\">${formatCode}</code></pre>`)\n\n        const $code = editor.selection.getSelectionStartElem()\n        const $codeElem = $code?.getNodeTop(editor)\n\n        // 通过dom操作添加换行标签\n        if ($codeElem?.getNextSibling().elems.length === 0) {\n            // @ts-ignore\n            $(EMPTY_P).insertAfter($codeElem)\n        }\n    }\n\n    /**\n     * 选中整个链接元素\n     */\n    function selectCodeElem(): void {\n        if (!isActive(editor)) return\n\n        // eslint-disable-next-line @typescript-eslint/no-unused-vars\n        let $selectedCode: DomElement\n\n        const $code = editor.selection.getSelectionStartElem()\n        const $codeElem = $code?.getNodeTop(editor)\n        if (!$codeElem) return\n\n        editor.selection.createRangeByElem($codeElem)\n        editor.selection.restoreSelection()\n\n        $selectedCode = $codeElem // 赋值给函数内全局变量\n    }\n\n    const t = (text: string): string => {\n        return editor.i18next.t(text)\n    }\n\n    // @ts-ignore\n    const conf = {\n        width: 500,\n        height: 0,\n\n        // panel 中可包含多个 tab\n        tabs: [\n            {\n                // tab 的标题\n                title: t('menus.panelMenus.code.插入代码'),\n                // 模板\n                tpl: `<div>\n                        <select name=\"\" id=\"${languageId}\">\n                            ${editor.config.languageType.map(language => {\n                                return (\n                                    '<option ' +\n                                    (languageType == language ? 'selected' : '') +\n                                    ' value =\"' +\n                                    language +\n                                    '\">' +\n                                    language +\n                                    '</option>'\n                                )\n                            })}\n                        </select>\n                        <textarea id=\"${inputIFrameId}\" type=\"text\" class=\"wang-code-textarea\" placeholder=\"\" style=\"height: 160px\">${text.replace(\n                    /&quot;/g,\n                    '\"'\n                )}</textarea>\n                        <div class=\"w-e-button-container\">\n                            <button type=\"button\" id=\"${btnOkId}\" class=\"right\">${\n                    isActive(editor) ? t('修改') : t('插入')\n                }</button>\n                        </div>\n                    </div>`,\n                // 事件绑定\n                events: [\n                    // 插入链接\n                    {\n                        selector: '#' + btnOkId,\n                        type: 'click',\n                        fn: () => {\n                            const $code = document.getElementById(inputIFrameId)\n                            const $select = $('#' + languageId)\n\n                            let languageType = $select.val()\n                            // @ts-ignore\n                            let code = $code.value\n\n                            // 代码为空，则不插入\n                            if (!code) return\n\n                            //增加标签\n                            if (isActive(editor)) {\n                                return false\n                            } else {\n                                // @ts-ignore\n                                insertCode(languageType, code)\n                            }\n\n                            // 返回 true，表示该事件执行完之后，panel 要关闭。否则 panel 不会关闭\n                            return true\n                        },\n                    },\n                ],\n            }, // tab end\n        ], // tabs end\n    }\n\n    return conf\n}\n", "/**\n * @description 绑定链接元素的事件，入口\n * @author lkw\n */\n\nimport Editor from '../../../editor/index'\nimport bindTooltipEvent from './tooltip-event'\nimport bindEventJumpCodeBlock from './jump-code-block-down'\n\n/**\n * 绑定事件\n * @param editor 编辑器实例\n */\nfunction bindEvent(editor: Editor) {\n    // tooltip 事件\n    bindTooltipEvent(editor)\n\n    // 代码块为最后内容的跳出处理\n    bindEventJumpCodeBlock(editor)\n}\n\nexport default bindEvent\n", "/**\n * @description tooltip 事件\n * @author lkw\n */\n\nimport $, { DomElement } from '../../../utils/dom-core'\nimport Tooltip from '../../menu-constructors/Tooltip'\nimport Editor from '../../../editor/index'\n\n/**\n * 生成 Tooltip 的显示隐藏函数\n */\nexport function createShowHideFn(editor: Editor) {\n    let tooltip: Tooltip | null\n\n    /**\n     * 显示 tooltip\n     * @param $code 链接元素\n     */\n    function showCodeTooltip($code: DomElement) {\n        const i18nPrefix = 'menus.panelMenus.code.'\n        const t = (text: string, prefix: string = i18nPrefix): string => {\n            return editor.i18next.t(prefix + text)\n        }\n\n        const conf = [\n            {\n                $elem: $(`<span>${t('删除代码')}</span>`),\n                onClick: (editor: Editor, $code: DomElement) => {\n                    //dom操作删除\n                    $code.remove()\n\n                    // 返回 true，表示执行完之后，隐藏 tooltip。否则不隐藏。\n                    return true\n                },\n            },\n        ]\n\n        // 创建 tooltip\n        tooltip = new Tooltip(editor, $code, conf)\n        tooltip.create()\n    }\n\n    /**\n     * 隐藏 tooltip\n     */\n    function hideCodeTooltip() {\n        // 移除 tooltip\n        if (tooltip) {\n            tooltip.remove()\n            tooltip = null\n        }\n    }\n\n    return {\n        showCodeTooltip,\n        hideCodeTooltip,\n    }\n}\n\n/**\n * preEnterListener是为了统一浏览器 在pre标签内的enter行为而进行的监听\n * 目前并没有使用, 但是在未来处理与Firefox和ie的兼容性时需要用到 暂且放置\n * pre标签内的回车监听\n * @param e\n * @param editor\n */\n/* istanbul ignore next */\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nfunction preEnterListener(e: KeyboardEvent, editor: Editor) {\n    // 获取当前标签元素\n    const $selectionElem = editor.selection.getSelectionContainerElem() as DomElement\n\n    // 获取当前节点最顶级标签元素\n    const $topElem = $selectionElem?.getNodeTop(editor)\n\n    // 获取顶级节点节点名\n    const topNodeName = $topElem?.getNodeName()\n\n    // 非pre标签退出\n    if (topNodeName !== 'PRE') return\n\n    // 取消默认行为\n    e.preventDefault()\n\n    // 执行换行\n    editor.cmd.do('insertHTML', '\\n\\r')\n}\n\n/**\n * 绑定 tooltip 事件\n * @param editor 编辑器实例\n */\nexport default function bindTooltipEvent(editor: Editor) {\n    const { showCodeTooltip, hideCodeTooltip } = createShowHideFn(editor)\n\n    // 点击代码元素时，显示 tooltip\n    editor.txt.eventHooks.codeClickEvents.push(showCodeTooltip)\n\n    // 点击其他地方，或者滚动时，隐藏 tooltip\n    editor.txt.eventHooks.clickEvents.push(hideCodeTooltip)\n    editor.txt.eventHooks.toolbarClickEvents.push(hideCodeTooltip)\n    editor.txt.eventHooks.menuClickEvents.push(hideCodeTooltip)\n    editor.txt.eventHooks.textScrollEvents.push(hideCodeTooltip)\n}\n", "/**\n * @description 代码块为最后一块内容时往下跳出代码块\n * @author zhengwenjian\n */\nimport { EMPTY_P } from '../../../utils/const'\nimport Editor from '../../../editor/index'\nimport $ from '../../../utils/dom-core'\n\n/**\n * 在代码块最后一行 按方向下键跳出代码块的处理\n * @param editor 编辑器实例\n */\nexport default function bindEventJumpCodeBlock(editor: Editor) {\n    const { $textElem, selection, txt } = editor\n    const { keydownEvents } = txt.eventHooks\n\n    keydownEvents.push(function (e) {\n        // 40 是键盘中的下方向键\n        if (e.keyCode !== 40) return\n        const node = selection.getSelectionContainerElem()\n        const $lastNode = $textElem.children()?.last()\n        if (node?.elems[0].tagName === 'XMP' && $lastNode?.elems[0].tagName === 'PRE') {\n            // 就是最后一块是代码块的情况插入空p标签并光标移至p\n            const $emptyP = $(EMPTY_P)\n            $textElem.append($emptyP)\n        }\n    })\n    // fix: 修复代码块作为最后一个元素时，用户无法再进行输入的问题\n    keydownEvents.push(function (e) {\n        // 实时保存选区\n        editor.selection.saveRange()\n        const $selectionContainerElem = selection.getSelectionContainerElem()\n        if ($selectionContainerElem) {\n            const $topElem = $selectionContainerElem.getNodeTop(editor)\n            // 获取选区所在节点的上一元素\n            const $preElem = $topElem?.prev()\n            // 判断该元素后面是否还存在元素\n            // 如果存在则允许删除\n            const $nextElem = $topElem?.getNextSibling()\n\n            if ($preElem.length && $preElem?.getNodeName() === 'PRE' && $nextElem.length === 0) {\n                // 光标处于选区开头\n                if (selection.getCursorPos() === 0) {\n                    // 按下delete键时末尾追加空行\n                    if (e.keyCode === 8) {\n                        const $emptyP = $(EMPTY_P)\n                        $textElem.append($emptyP)\n                    }\n                }\n            }\n        }\n    })\n}\n", "/**\n * @description 分割线\n * @author wangqiaoling\n */\nimport BtnMenu from '../menu-constructors/BtnMenu'\nimport $ from '../../utils/dom-core'\nimport Editor from '../../editor/index'\nimport { MenuActive } from '../menu-constructors/Menu'\nimport bindEvent from './bind-event/index'\nimport { UA } from '../../utils/util'\nimport { EMPTY_P } from '../../utils/const'\nclass splitLine extends BtnMenu implements MenuActive {\n    constructor(editor: Editor) {\n        const $elem = $(\n            '<div class=\"w-e-menu\" data-title=\"分割线\"><i class=\"w-e-icon-split-line\"></i></div>'\n        )\n        super($elem, editor)\n        // 绑定事件\n        bindEvent(editor)\n    }\n    /**\n     * 菜单点击事件\n     */\n    public clickHandler(): void {\n        const editor = this.editor\n        const range = editor.selection.getRange()\n\n        const $selectionElem = editor.selection.getSelectionContainerElem()\n        if (!$selectionElem?.length) return\n\n        const $DomElement = $($selectionElem.elems[0])\n        const $tableDOM = $DomElement.parentUntil('TABLE', $selectionElem.elems[0])\n        const $imgDOM = $DomElement.children()\n\n        // 禁止在代码块中添加分割线\n        if ($DomElement.getNodeName() === 'CODE') return\n        // 禁止在表格中添加分割线\n        if ($tableDOM && $($tableDOM.elems[0]).getNodeName() === 'TABLE') return\n\n        // 禁止在图片处添加分割线\n        if (\n            $imgDOM &&\n            $imgDOM.length !== 0 &&\n            $($imgDOM.elems[0]).getNodeName() === 'IMG' &&\n            !range?.collapsed // 处理光标在 img 后面的情况\n        ) {\n            return\n        }\n\n        this.createSplitLine()\n    }\n    /**\n     * 创建 splitLine\n     */\n    private createSplitLine(): void {\n        // 防止插入分割线时没有占位元素的尴尬\n        let splitLineDOM: string = `<hr/>${EMPTY_P}`\n        // 火狐浏览器不需要br标签占位\n        if (UA.isFirefox) {\n            splitLineDOM = '<hr/><p></p>'\n        }\n        this.editor.cmd.do('insertHTML', splitLineDOM)\n    }\n    /**\n     * 尝试修改菜单激活状态\n     */\n    public tryChangeActive(): void {}\n}\nexport default splitLine\n", "/**\n * @description 绑定分割线元素的事件入口\n * @author wangqiaoling\n */\nimport Editor from '../../../editor/index'\nimport bindTooltipEvent from './tooltip-event'\n/**\n * 绑定事件\n * @param editor 编辑器实例\n */\nfunction bindEvent(editor: Editor) {\n    // 分割线的 tooltip 事件\n    bindTooltipEvent(editor)\n}\n\nexport default bindEvent\n", "/**\n * @description tooltip 事件\n * @author wangqiaoling\n */\nimport $, { DomElement } from '../../../utils/dom-core'\nimport Tooltip, { TooltipConfType } from '../../menu-constructors/Tooltip'\nimport Editor from '../../../editor/index'\n\n/**\n * 生成 Tooltip 的显示隐藏函数\n */\nfunction createShowHideFn(editor: Editor) {\n    let tooltip: Tooltip | null\n\n    /**\n     * 显示分割线的 tooltip\n     * @param $splitLine 分割线元素\n     */\n    function showSplitLineTooltip($splitLine: DomElement): void {\n        // 定义 splitLine tooltip 配置\n        const conf: TooltipConfType = [\n            {\n                $elem: $(`<span>${editor.i18next.t('menus.panelMenus.删除')}</span>`),\n                onClick: (editor: Editor, $splitLine: DomElement) => {\n                    // 选中 分割线 元素\n                    editor.selection.createRangeByElem($splitLine)\n                    editor.selection.restoreSelection()\n                    editor.cmd.do('delete')\n\n                    // 返回 true，表示执行完之后，隐藏 tooltip。否则不隐藏。\n                    return true\n                },\n            },\n        ]\n        // 实例化 tooltip\n        tooltip = new Tooltip(editor, $splitLine, conf)\n        // 创建 tooltip\n        tooltip.create()\n    }\n\n    /**\n     * 隐藏分割线的 tooltip\n     */\n    function hideSplitLineTooltip(): void {\n        if (tooltip) {\n            tooltip.remove()\n            tooltip = null\n        }\n    }\n\n    return {\n        showSplitLineTooltip,\n        hideSplitLineTooltip,\n    }\n}\n\nexport default function bindTooltipEvent(editor: Editor): void {\n    const { showSplitLineTooltip, hideSplitLineTooltip } = createShowHideFn(editor)\n\n    // 点击分割线时，显示 tooltip\n    editor.txt.eventHooks.splitLineEvents.push(showSplitLineTooltip)\n\n    // 点击其他地方（工具栏、滚动、keyup）时，隐藏 tooltip\n    editor.txt.eventHooks.clickEvents.push(hideSplitLineTooltip)\n    editor.txt.eventHooks.keyupEvents.push(hideSplitLineTooltip)\n    editor.txt.eventHooks.toolbarClickEvents.push(hideSplitLineTooltip)\n    editor.txt.eventHooks.menuClickEvents.push(hideSplitLineTooltip)\n    editor.txt.eventHooks.textScrollEvents.push(hideSplitLineTooltip)\n}\n", "import $, { DomElement } from '../../utils/dom-core'\nimport BtnMenu from '../menu-constructors/BtnMenu'\nimport Editor from '../../editor/index'\nimport { MenuActive } from '../menu-constructors/Menu'\nimport { isAllTodo } from './util'\nimport bindEvent from './bind-event'\nimport createTodo from './todo'\n\nclass Todo extends BtnMenu implements MenuActive {\n    constructor(editor: Editor) {\n        const $elem = $(\n            `<div class=\"w-e-menu\" data-title=\"待办事项\">\n                    <i class=\"w-e-icon-checkbox-checked\"></i>\n                </div>`\n        )\n        super($elem, editor)\n        bindEvent(editor)\n    }\n\n    /**\n     * 点击事件\n     */\n    public clickHandler(): void {\n        const editor = this.editor\n        if (!isAllTodo(editor)) {\n            // 设置todolist\n            this.setTodo()\n        } else {\n            // 取消设置todolist\n            this.cancelTodo()\n            this.tryChangeActive()\n        }\n    }\n    tryChangeActive() {\n        if (isAllTodo(this.editor)) {\n            this.active()\n        } else {\n            this.unActive()\n        }\n    }\n\n    /**\n     * 设置todo\n     */\n    private setTodo() {\n        const editor = this.editor\n        const topNodeElem: DomElement[] = editor.selection.getSelectionRangeTopNodes()\n        topNodeElem.forEach($node => {\n            const nodeName = $node?.getNodeName()\n            if (nodeName === 'P') {\n                const todo = createTodo($node)\n                const todoNode = todo.getTodo()\n                const child = todoNode.children()?.getNode() as Node\n                todoNode.insertAfter($node)\n                editor.selection.moveCursor(child)\n                $node.remove()\n            }\n        })\n        this.tryChangeActive()\n    }\n\n    /**\n     * 取消设置todo\n     */\n    private cancelTodo() {\n        const editor = this.editor\n        const $topNodeElems: DomElement[] = editor.selection.getSelectionRangeTopNodes()\n\n        $topNodeElems.forEach($topNodeElem => {\n            let content = $topNodeElem.childNodes()?.childNodes()?.clone(true) as DomElement\n            const $p = $(`<p></p>`)\n            $p.append(content)\n            $p.insertAfter($topNodeElem)\n            // 移除input\n            $p.childNodes()?.get(0).remove()\n            editor.selection.moveCursor($p.getNode())\n            $topNodeElem.remove()\n        })\n    }\n}\n\nexport default Todo\n", "module.exports = require(\"core-js-pure/stable/instance/every\");", "var parent = require('../../es/instance/every');\n\nmodule.exports = parent;\n", "var every = require('../array/virtual/every');\n\nvar ArrayPrototype = Array.prototype;\n\nmodule.exports = function (it) {\n  var own = it.every;\n  return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.every) ? every : own;\n};\n", "require('../../../modules/es.array.every');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Array').every;\n", "'use strict';\nvar $ = require('../internals/export');\nvar $every = require('../internals/array-iteration').every;\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\nvar arrayMethodUsesToLength = require('../internals/array-method-uses-to-length');\n\nvar STRICT_METHOD = arrayMethodIsStrict('every');\nvar USES_TO_LENGTH = arrayMethodUsesToLength('every');\n\n// `Array.prototype.every` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.every\n$({ target: 'Array', proto: true, forced: !STRICT_METHOD || !USES_TO_LENGTH }, {\n  every: function every(callbackfn /* , thisArg */) {\n    return $every(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\n", "import Editor from '../../../editor/index'\nimport $ from '../../../utils/dom-core'\nimport { getCursorNextNode, isAllTodo } from '../util'\nimport createTodo from '../todo'\nimport { dealTextNode, isTodo } from '../util'\nimport { EMPTY_P } from '../../../utils/const'\n\n/**\n * todolist 内部逻辑\n * @param editor\n */\nfunction bindEvent(editor: Editor) {\n    /**\n     * todo的自定义回车事件\n     * @param e 事件属性\n     */\n    function todoEnter(e: Event) {\n        // 判断是否为todo节点\n        if (isAllTodo(editor)) {\n            e.preventDefault()\n            const selection = editor.selection\n            const $topSelectElem = selection.getSelectionRangeTopNodes()[0]\n            const $li = $topSelectElem.childNodes()?.get(0)\n            const selectionNode = window.getSelection()?.anchorNode as Node\n            const range = selection.getRange()\n\n            if (!range?.collapsed) {\n                const rangeChildNodes = range?.commonAncestorContainer.childNodes\n                const startContainer = range?.startContainer as Node\n                const endContainer = range?.endContainer as Node\n                const startPos = range?.startOffset as number\n                const endPos = range?.endOffset as number\n                let startElemIndex: number = 0\n                let endElemIndex: number = 0\n                let delList: ChildNode[] = []\n                // 找出startContainer和endContainer在rangeChildNodes中的位置\n                rangeChildNodes?.forEach((v, i) => {\n                    if (v.contains(startContainer)) startElemIndex = i\n                    if (v.contains(endContainer)) endElemIndex = i\n                })\n                // 删除两个容器间的内容\n                if (endElemIndex - startElemIndex > 1) {\n                    rangeChildNodes?.forEach((v, i) => {\n                        if (i <= startElemIndex) return\n                        if (i >= endElemIndex) return\n                        delList.push(v)\n                    })\n                    delList.forEach(v => {\n                        v.remove()\n                    })\n                }\n                // 删除两个容器里拖蓝的内容\n                dealTextNode(startContainer, startPos)\n                dealTextNode(endContainer, endPos, false)\n                editor.selection.moveCursor(endContainer, 0)\n            }\n\n            // 回车时内容为空时，删去此行\n            if ($topSelectElem.text() === '') {\n                const $p = $(EMPTY_P)\n                $p.insertAfter($topSelectElem)\n                selection.moveCursor($p.getNode())\n                $topSelectElem.remove()\n                return\n            }\n\n            const pos = selection.getCursorPos() as number\n            const CursorNextNode = getCursorNextNode($li?.getNode() as Node, selectionNode, pos)\n            const todo = createTodo($(CursorNextNode))\n            const $inputcontainer = todo.getInputContainer()\n            const todoLiElem = $inputcontainer.parent().getNode()\n            const $newTodo = todo.getTodo()\n            const contentSection = $inputcontainer.getNode().nextSibling\n            // 处理光标在最前面时回车input不显示的问题\n            if ($li?.text() === '') {\n                $li?.append($(`<br>`))\n            }\n            $newTodo.insertAfter($topSelectElem)\n            // 处理在google中光标在最后面的，input不显示的问题(必须插入之后移动光标)\n            if (!contentSection || contentSection?.textContent === '') {\n                // 防止多个br出现的情况\n                if (contentSection?.nodeName !== 'BR') {\n                    const $br = $(`<br>`)\n                    $br.insertAfter($inputcontainer)\n                }\n                selection.moveCursor(todoLiElem, 1)\n            } else {\n                selection.moveCursor(todoLiElem)\n            }\n        }\n    }\n\n    /**\n     * 自定义删除事件，用来处理光标在最前面删除input产生的问题\n     */\n    function delDown(e: Event) {\n        if (isAllTodo(editor)) {\n            const selection = editor.selection\n            const $topSelectElem = selection.getSelectionRangeTopNodes()[0]\n            const $li = $topSelectElem.childNodes()?.getNode()\n            const $p = $(`<p></p>`)\n            const p = $p.getNode()\n            const selectionNode = window.getSelection()?.anchorNode as Node\n            const pos = selection.getCursorPos()\n            const prevNode = selectionNode.previousSibling\n\n            // 处理内容为空的情况\n            if ($topSelectElem.text() === '') {\n                e.preventDefault()\n                const $newP = $(EMPTY_P)\n                $newP.insertAfter($topSelectElem)\n                $topSelectElem.remove()\n                selection.moveCursor($newP.getNode(), 0)\n                return\n            }\n\n            // 处理有内容时，光标在最前面的情况\n            if (\n                prevNode?.nodeName === 'SPAN' &&\n                prevNode.childNodes[0].nodeName === 'INPUT' &&\n                pos === 0\n            ) {\n                e.preventDefault()\n                $li?.childNodes.forEach((v, index) => {\n                    if (index === 0) return\n                    p.appendChild(v.cloneNode(true))\n                })\n                $p.insertAfter($topSelectElem)\n\n                $topSelectElem.remove()\n            }\n        }\n    }\n\n    /**\n     * 自定义删除键up事件\n     */\n    function deleteUp() {\n        const selection = editor.selection\n        const $topSelectElem = selection.getSelectionRangeTopNodes()[0]\n        if ($topSelectElem && isTodo($topSelectElem)) {\n            if ($topSelectElem.text() === '') {\n                $(EMPTY_P).insertAfter($topSelectElem)\n                $topSelectElem.remove()\n            }\n        }\n    }\n\n    /**\n     * input 的点击事件（ input 默认不会产生 attribute 的改变 ）\n     * @param e 事件属性\n     */\n    function inputClick(e?: Event): void {\n        if (e && e.target instanceof HTMLInputElement) {\n            if (e.target.type === 'checkbox') {\n                if (e.target.checked) {\n                    e.target.setAttribute('checked', 'true')\n                } else {\n                    e.target.removeAttribute('checked')\n                }\n            }\n        }\n    }\n\n    editor.txt.eventHooks.enterDownEvents.push(todoEnter)\n    editor.txt.eventHooks.deleteUpEvents.push(deleteUp)\n    editor.txt.eventHooks.deleteDownEvents.push(delDown)\n    editor.txt.eventHooks.clickEvents.push(inputClick)\n}\n\nexport default bindEvent\n", "/**\n * @description 初始化编辑器 DOM 结构\n * @author wangfupeng\n */\n\nimport Editor from '../index'\nimport $, { DomElement } from '../../utils/dom-core'\nimport { getRandom } from '../../utils/util'\nimport { EMPTY_P } from '../../utils/const'\nimport CONFIG from '../../config/text'\nconst styleSettings = {\n    border: '1px solid #c9d8db',\n    toolbarBgColor: '#FFF',\n    toolbarBottomBorder: '1px solid #EEE',\n}\n\nexport default function (editor: Editor): void {\n    const toolbarSelector = editor.toolbarSelector\n    const $toolbarSelector = $(toolbarSelector)\n    const textSelector = editor.textSelector\n\n    const config = editor.config\n    const height = config.height\n    const i18next = editor.i18next\n\n    const $toolbarElem: DomElement = $('<div></div>')\n    const $textContainerElem: DomElement = $('<div></div>')\n    let $textElem: DomElement\n    let $children: DomElement | null\n    let $subChildren: DomElement | null = null\n\n    if (textSelector == null) {\n        // 将编辑器区域原有的内容，暂存起来\n        $children = $toolbarSelector.children()\n\n        // 添加到 DOM 结构中\n        $toolbarSelector.append($toolbarElem).append($textContainerElem)\n\n        // 自行创建的，需要配置默认的样式\n        $toolbarElem\n            .css('background-color', styleSettings.toolbarBgColor)\n            .css('border', styleSettings.border)\n            .css('border-bottom', styleSettings.toolbarBottomBorder)\n        $textContainerElem\n            .css('border', styleSettings.border)\n            .css('border-top', 'none')\n            .css('height', `${height}px`)\n    } else {\n        // toolbarSelector 和 textSelector 都有\n        $toolbarSelector.append($toolbarElem)\n        // 菜单分离后，文本区域内容暂存\n        $subChildren = $(textSelector).children()\n        $(textSelector).append($textContainerElem)\n        // 将编辑器区域原有的内容，暂存起来\n        $children = $textContainerElem.children()\n    }\n\n    // 编辑区域\n    $textElem = $('<div></div>')\n    $textElem.attr('contenteditable', 'true').css('width', '100%').css('height', '100%')\n\n    // 添加 placeholder\n    let $placeholder: DomElement\n    const placeholder = editor.config.placeholder\n    if (placeholder !== CONFIG.placeholder) {\n        $placeholder = $(`<div>${placeholder}</div>`)\n    } else {\n        $placeholder = $(`<div>${i18next.t(placeholder)}</div>`)\n    }\n    $placeholder.addClass('placeholder')\n\n    // 初始化编辑区域内容\n    if ($children && $children.length) {\n        $textElem.append($children)\n        // 编辑器有默认值的时候隐藏placeholder\n        $placeholder.hide()\n    } else {\n        $textElem.append($(EMPTY_P)) // 新增一行，方便继续编辑\n    }\n\n    // 菜单分离后，文本区域有标签的带入编辑器内\n    if ($subChildren && $subChildren.length) {\n        $textElem.append($subChildren)\n        // 编辑器有默认值的时候隐藏placeholder\n        $placeholder.hide()\n    }\n\n    // 编辑区域加入DOM\n    $textContainerElem.append($textElem)\n\n    // 添加placeholder\n    $textContainerElem.append($placeholder)\n\n    // 设置通用的 class\n    $toolbarElem.addClass('w-e-toolbar').css('z-index', editor.zIndex.get('toolbar'))\n    $textContainerElem.addClass('w-e-text-container')\n    $textContainerElem.css('z-index', editor.zIndex.get())\n    $textElem.addClass('w-e-text')\n\n    // 添加 ID\n    const toolbarElemId = getRandom('toolbar-elem')\n    $toolbarElem.attr('id', toolbarElemId)\n    const textElemId = getRandom('text-elem')\n    $textElem.attr('id', textElemId)\n\n    // 判断编辑区与容器高度是否一致\n    const textContainerCliheight = $textContainerElem.getBoundingClientRect().height\n    const textElemClientHeight = $textElem.getBoundingClientRect().height\n    if (textContainerCliheight !== textElemClientHeight) {\n        $textElem.css('min-height', textContainerCliheight + 'px')\n    }\n\n    // 记录属性\n    editor.$toolbarElem = $toolbarElem\n    editor.$textContainerElem = $textContainerElem\n    editor.$textElem = $textElem\n    editor.toolbarElemId = toolbarElemId\n    editor.textElemId = textElemId\n}\n\n/**\n * 工具栏/文本区域 DOM selector 有效性验证\n * @param editor 编辑器实例\n */\nexport function selectorValidator(editor: Editor) {\n    const name = 'data-we-id'\n    const regexp = /^wangEditor-\\d+$/\n    const { textSelector, toolbarSelector } = editor\n\n    const $el = {\n        bar: $('<div></div>'),\n        text: $('<div></div>'),\n    }\n\n    if (toolbarSelector == null) {\n        throw new Error('错误：初始化编辑器时候未传入任何参数，请查阅文档')\n    } else {\n        $el.bar = $(toolbarSelector)\n        if (!$el.bar.elems.length) {\n            throw new Error(`无效的节点选择器：${toolbarSelector}`)\n        }\n        if (regexp.test($el.bar.attr(name))) {\n            throw new Error('初始化节点已存在编辑器实例，无法重复创建编辑器')\n        }\n    }\n    if (textSelector) {\n        $el.text = $(textSelector)\n        if (!$el.text.elems.length) {\n            throw new Error(`无效的节点选择器：${textSelector}`)\n        }\n        if (regexp.test($el.text.attr(name))) {\n            throw new Error('初始化节点已存在编辑器实例，无法重复创建编辑器')\n        }\n    }\n\n    // 给节点做上标记\n    $el.bar.attr(name, editor.id)\n    $el.text.attr(name, editor.id)\n\n    // 在编辑器销毁前取消标记\n    editor.beforeDestroy(function () {\n        $el.bar.removeAttr(name)\n        $el.text.removeAttr(name)\n    })\n}\n", "/**\n * @description 初始化编辑器选区，将光标定位到文档末尾\n * @author wangfupeng\n */\n\nimport Editor from '../index'\nimport $ from '../../utils/dom-core'\nimport { EMPTY_P } from '../../utils/const'\n\n/**\n * 初始化编辑器选区，将光标定位到文档末尾\n * @param editor 编辑器实例\n * @param newLine 是否新增一行\n */\nfunction initSelection(editor: Editor, newLine?: boolean) {\n    const $textElem = editor.$textElem\n    const $children = $textElem.children()\n    if (!$children || !$children.length) {\n        // 如果编辑器区域无内容，添加一个空行，重新设置选区\n        $textElem.append($(EMPTY_P))\n        initSelection(editor)\n        return\n    }\n\n    const $last = $children.last()\n\n    if (newLine) {\n        // 新增一个空行\n        const html = $last.html().toLowerCase()\n        const nodeName = $last.getNodeName()\n        if ((html !== '<br>' && html !== '<br/>') || nodeName !== 'P') {\n            // 最后一个元素不是 空标签，添加一个空行，重新设置选区\n            $textElem.append($(EMPTY_P))\n            initSelection(editor)\n            return\n        }\n    }\n\n    editor.selection.createRangeByElem($last, false, true)\n    if (editor.config.focus) {\n        editor.selection.restoreSelection()\n    } else {\n        // 防止focus=false受其他因素影响\n        editor.selection.clearWindowSelectionRange()\n    }\n}\n\nexport default initSelection\n", "/**\n * @description 绑定编辑器事件 change blur focus\n * @author wangfupeng\n */\n\nimport Editor from '../index'\nimport $ from '../../utils/dom-core'\n\nfunction bindEvent(editor: Editor): void {\n    // 绑定 change 事件\n    _bindChange(editor)\n\n    // 绑定 focus blur 事件\n    _bindFocusAndBlur(editor)\n\n    // 绑定 input 输入\n    _bindInput(editor)\n}\n\n/**\n * 绑定 change 事件\n * @param editor 编辑器实例\n */\nfunction _bindChange(editor: Editor): void {\n    editor.txt.eventHooks.changeEvents.push(function () {\n        const { onchange } = editor.config\n        if (onchange) {\n            const html = editor.txt.html() || ''\n            // onchange触发时，是focus状态，详见https://github.com/wangeditor-team/wangEditor/issues/3034\n            editor.isFocus = true\n            onchange(html)\n        }\n\n        editor.txt.togglePlaceholder()\n    })\n}\n\n/**\n * 绑定 focus blur 事件\n * @param editor 编辑器实例\n */\nfunction _bindFocusAndBlur(editor: Editor): void {\n    // 当前编辑器是否是焦点状态\n    editor.isFocus = false\n\n    function listener(e: Event) {\n        const target = e.target\n        const $target = $(target)\n        const $textElem = editor.$textElem\n        const $toolbarElem = editor.$toolbarElem\n\n        //判断当前点击元素是否在编辑器内\n        const isChild = $textElem.isContain($target)\n\n        //判断当前点击元素是否为工具栏\n        const isToolbar = $toolbarElem.isContain($target)\n        const isMenu = $toolbarElem.elems[0] == e.target ? true : false\n\n        if (!isChild) {\n            // 若为选择工具栏中的功能，则不视为成 blur 操作\n            if ((isToolbar && !isMenu) || !editor.isFocus) {\n                return\n            }\n            _blurHandler(editor)\n            editor.isFocus = false\n        } else {\n            if (!editor.isFocus) {\n                _focusHandler(editor)\n            }\n\n            editor.isFocus = true\n        }\n    }\n    // fix: 增加判断条件，防止当用户设置isFocus=false时，初始化完成后点击其他元素依旧会触发blur事件的问题\n    if (document.activeElement === editor.$textElem.elems[0] && editor.config.focus) {\n        _focusHandler(editor)\n        editor.isFocus = true\n    }\n    // 绑定监听事件\n    $(document).on('click', listener)\n    // 全局事件在编辑器实例销毁的时候进行解绑\n    editor.beforeDestroy(function () {\n        $(document).off('click', listener)\n    })\n}\n\n/**\n * 绑定 input 事件\n * @param editor 编辑器实例\n */\nfunction _bindInput(editor: Editor) {\n    // 绑定中文输入\n    editor.$textElem\n        .on('compositionstart', () => {\n            editor.isComposing = true\n            editor.txt.togglePlaceholder()\n        })\n        .on('compositionend', () => {\n            editor.isComposing = false\n            editor.txt.togglePlaceholder()\n        })\n}\n\n/**\n * blur 事件\n * @param editor 编辑器实例\n */\nfunction _blurHandler(editor: Editor) {\n    const config = editor.config\n    const onblur = config.onblur\n    const currentHtml = editor.txt.html() || ''\n    editor.txt.eventHooks.onBlurEvents.forEach(fn => fn())\n    onblur(currentHtml)\n}\n\n/**\n * focus 事件\n * @param editor 编辑器实例\n */\nfunction _focusHandler(editor: Editor) {\n    const config = editor.config\n    const onfocus = config.onfocus\n    const currentHtml = editor.txt.html() || ''\n    onfocus(currentHtml)\n}\n\nexport default bindEvent\n", "/**\n * @description 国际化 初始化\n * @author tonghan\n * i18next 是使用 JavaScript 编写的国际化框架\n * i18next 提供了标准的i18n功能，例如（复数，上下文，插值，格式）等\n * i18next 文档地址： https://www.i18next.com/overview/getting-started\n */\n\nimport Editor from '../index'\n\nfunction i18nextInit(editor: Editor) {\n    const { lang, languages } = editor.config\n\n    if (editor.i18next != null) {\n        try {\n            editor.i18next.init({\n                ns: 'wangEditor',\n                lng: lang,\n                defaultNS: 'wangEditor',\n                resources: languages,\n            })\n        } catch (error) {\n            throw new Error('i18next:' + error)\n        }\n        return\n    }\n\n    // 没有引入 i18next 的替代品\n    editor.i18next = {\n        t(str: string) {\n            const strArr = str.split('.')\n            return strArr[strArr.length - 1]\n        },\n    }\n}\n\nexport default i18nextInit\n", "/**\n * @description 全屏功能\n * @author xiaokyo\n */\n\nimport Editor from '../index'\nimport $ from '../../utils/dom-core'\n\nimport '../../assets/style/full-screen.less'\n\nconst iconFullScreenText = 'w-e-icon-fullscreen' // 全屏icon class\nconst iconExitFullScreenText = 'w-e-icon-fullscreen_exit' // 退出全屏icon class\nconst classfullScreenEditor = 'w-e-full-screen-editor' // 全屏添加至编辑器的class\n\n/**\n * 设置全屏\n * @param editor 编辑器实例\n */\nexport const setFullScreen = (editor: Editor) => {\n    const $editorParent = $(editor.toolbarSelector)\n    const $textContainerElem = editor.$textContainerElem\n    const $toolbarElem = editor.$toolbarElem\n    const $iconElem = $toolbarElem.find(`i.${iconFullScreenText}`)\n    const config = editor.config\n\n    $iconElem.removeClass(iconFullScreenText)\n    $iconElem.addClass(iconExitFullScreenText)\n    $editorParent.addClass(classfullScreenEditor)\n    $editorParent.css('z-index', config.zIndexFullScreen)\n    const bar = $toolbarElem.getBoundingClientRect()\n    $textContainerElem.css('height', `calc(100% - ${bar.height}px)`)\n}\n\n/**\n * 取消全屏\n * @param editor 编辑器实例\n */\nexport const setUnFullScreen = (editor: Editor) => {\n    const $editorParent = $(editor.toolbarSelector)\n    const $textContainerElem = editor.$textContainerElem\n    const $toolbarElem = editor.$toolbarElem\n    const $iconElem = $toolbarElem.find(`i.${iconExitFullScreenText}`)\n    const config = editor.config\n\n    $iconElem.removeClass(iconExitFullScreenText)\n    $iconElem.addClass(iconFullScreenText)\n    $editorParent.removeClass(classfullScreenEditor)\n    $editorParent.css('z-index', 'auto')\n    $textContainerElem.css('height', config.height + 'px')\n}\n\n/**\n * 初始化全屏功能\n * @param editor 编辑器实例\n */\nconst initFullScreen = (editor: Editor) => {\n    // 当textSelector有值的时候，也就是编辑器是工具栏和编辑区域分离的情况， 则不生成全屏功能按钮\n    if (editor.textSelector) return\n    if (!editor.config.showFullScreen) return\n    const $toolbarElem = editor.$toolbarElem\n    const $elem = $(\n        `<div class=\"w-e-menu\" data-title=\"全屏\">\n            <i class=\"${iconFullScreenText}\"></i>\n        </div>`\n    )\n    $elem.on('click', function (e: MouseEvent) {\n        const $elemIcon = $(e.currentTarget).find('i')\n        if ($elemIcon.hasClass(iconFullScreenText)) {\n            $elem.attr('data-title', '取消全屏')\n            setFullScreen(editor)\n        } else {\n            $elem.attr('data-title', '全屏')\n            setUnFullScreen(editor)\n        }\n    })\n\n    $toolbarElem.append($elem)\n}\n\nexport default initFullScreen\n", "var api = require(\"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\");\n            var content = require(\"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/postcss-loader/src/index.js!../../../node_modules/less-loader/dist/cjs.js!./full-screen.less\");\n\n            content = content.__esModule ? content.default : content;\n\n            if (typeof content === 'string') {\n              content = [[module.id, content, '']];\n            }\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nmodule.exports = content.locals || {};", "// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".w-e-full-screen-editor {\\n  position: fixed;\\n  width: 100%!important;\\n  height: 100%!important;\\n  left: 0;\\n  top: 0;\\n}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n", "/**\n * @description 滚动到指定锚点\n * @author zhengwenjian\n */\n\nimport Editor from '../index'\n\n/**\n * 编辑器滚动到指定锚点\n * @param editor 编辑器实例\n * @param id 标题锚点id\n */\nconst scrollToHead = (editor: Editor, id: string) => {\n    const $textElem = editor.isEnable\n        ? editor.$textElem\n        : editor.$textContainerElem.find('.w-e-content-mantle')\n    const $targetHead = $textElem.find(`[id='${id}']`)\n    const targetTop = $targetHead.getOffsetData().top\n    $textElem.scrollTop(targetTop)\n}\n\nexport default scrollToHead\n", "/**\n * @description z-index 管理器\n * @author fangzhicong\n */\nimport Editor from '../index'\nimport style from '../../config/style'\n\nconst tier = {\n    menu: 2, // 显示状态下的菜单栏\n    panel: 2,\n    toolbar: 1, // 菜单栏父容器\n    tooltip: 1, // tooltip\n    textContainer: 1, // 编辑区域\n}\n\ntype Tier = typeof tier\n\ntype TierKey = keyof Tier\nexport default class ZIndex {\n    // 层级参数\n    private tier: Tier = tier\n\n    // 默认值\n    private baseZIndex = style.zIndex\n\n    // 获取 tierName 对应的 z-index 的值。如果 tierName 未定义则返回默认的 z-index 值\n    get(tierName?: TierKey): number {\n        if (tierName && this.tier[tierName]) {\n            return this.baseZIndex + this.tier[tierName]\n        }\n        return this.baseZIndex\n    }\n\n    // 初始化\n    init(editor: Editor) {\n        if (this.baseZIndex == style.zIndex) {\n            this.baseZIndex = editor.config.zIndex\n        }\n    }\n}\n", "/**\n * @description 编辑器 change 事件\n * @author fangzhicong\n */\n\nimport Editor from '../index'\nimport Mutation from '../../utils/observer/mutation'\nimport { debounce } from '../../utils/util'\nimport { EMPTY_FN } from '../../utils/const'\n\n/**\n * 剔除编辑区容器的 attribute 变化中的非 contenteditable 变化\n * @param mutations MutationRecord[]\n * @param tar 编辑区容器的 DOM 节点\n */\nfunction mutationsFilter(mutations: MutationRecord[], tar: Node) {\n    // 剔除编辑区容器的 attribute 变化中的非 contenteditable 变化\n    return mutations.filter(({ type, target, attributeName }) => {\n        return (\n            type != 'attributes' ||\n            (type == 'attributes' && (attributeName == 'contenteditable' || target != tar))\n        )\n    })\n}\n\n/**\n * Change 实现\n */\nexport default class Change extends Mutation {\n    /**\n     * 变化的数据集合\n     */\n    private data: MutationRecord[] = []\n\n    /**\n     * 异步保存数据\n     */\n    private asyncSave: Function = EMPTY_FN\n\n    constructor(public editor: Editor) {\n        super((mutations, observer) => {\n            // 数据过滤\n            mutations = mutationsFilter(mutations, observer.target as Node)\n\n            // 存储数据\n            this.data.push(...mutations)\n\n            // 标准模式下\n            if (!editor.isCompatibleMode) {\n                // 在非中文输入状态下时才保存数据\n                if (!editor.isComposing) {\n                    return this.asyncSave()\n                }\n            }\n            // 兼容模式下\n            else {\n                this.asyncSave()\n            }\n        })\n    }\n\n    /**\n     * 保存变化的数据并发布 change event\n     */\n    private save() {\n        // 有数据\n        if (this.data.length) {\n            // 保存变化数据\n            this.editor.history.save(this.data)\n\n            // 清除缓存\n            this.data.length = 0\n\n            this.emit()\n        }\n    }\n\n    /**\n     * 发布 change event\n     */\n    public emit() {\n        // 执行 onchange 回调\n        this.editor.txt.eventHooks.changeEvents.forEach(fn => fn())\n    }\n\n    // 重写 observe\n    public observe() {\n        super.observe(this.editor.$textElem.elems[0])\n\n        let timeout = this.editor.config.onchangeTimeout\n        this.asyncSave = debounce(() => {\n            this.save()\n        }, timeout)\n\n        if (!this.editor.isCompatibleMode) {\n            this.editor.$textElem.on('compositionend', () => {\n                this.asyncSave()\n            })\n        }\n    }\n}\n", "/**\n * @description 封装 MutationObserver\n * @author fangzhicong\n */\n\nexport type callback = (mutations: MutationRecord[], observer: Mutation) => void\n\n/**\n * 封装 MutationObserver，抽离成公共类\n */\nexport default class Mutation {\n    /**\n     * MutationObserver 实例\n     */\n    protected observer: MutationObserver\n\n    /**\n     * 被监听的 Node 节点（可继承的，方便扩展但又不会在外部被修改）\n     */\n    protected node?: Node\n\n    /**\n     * 默认的 MutationObserverInit 配置\n     */\n    protected options: MutationObserverInit = {\n        subtree: true,\n        childList: true,\n        attributes: true,\n        attributeOldValue: true,\n        characterData: true,\n        characterDataOldValue: true,\n    }\n\n    /**\n     * MutationCallback\n     */\n    protected callback: (mutations: MutationRecord[]) => void\n\n    /**\n     * 构造器\n     * @param fn 发生变化时执行的回调函数\n     * @param options 自定义配置项\n     */\n    constructor(fn: callback, options?: MutationObserverInit) {\n        this.callback = mutations => {\n            fn(mutations, this)\n        }\n        this.observer = new MutationObserver(this.callback)\n        options && (this.options = options)\n    }\n\n    public get target() {\n        return this.node\n    }\n\n    /**\n     * 绑定监听节点（初次绑定有效）\n     * @param node 需要被监听的节点\n     */\n    public observe(node: Node) {\n        if (!(this.node instanceof Node)) {\n            this.node = node\n            this.connect()\n        }\n    }\n\n    /**\n     * 连接监听器（开始观察）\n     */\n    public connect() {\n        if (this.node) {\n            this.observer.observe(this.node, this.options)\n            return this\n        }\n        throw new Error('还未初始化绑定，请您先绑定有效的 Node 节点')\n    }\n\n    /**\n     * 断开监听器（停止观察）\n     */\n    public disconnect() {\n        let list = this.observer.takeRecords()\n        list.length && this.callback(list)\n        this.observer.disconnect()\n    }\n}\n", "/**\n * @description 历史记录\n * @author fangzhicong\n */\n\nimport ContentCache from './data/content'\nimport ScrollCache from './data/scroll'\nimport RangeCache from './data/range'\nimport Editor from '../index'\n\n/**\n * 历史记录（撤销、恢复）\n */\nexport default class History {\n    // 数据缓存器实例\n    private content: ContentCache\n\n    // scroll 缓存\n    private scroll: ScrollCache\n\n    // Range 缓存\n    private range: RangeCache\n\n    constructor(public editor: Editor) {\n        this.content = new ContentCache(editor)\n        this.scroll = new ScrollCache(editor)\n        this.range = new RangeCache(editor)\n    }\n\n    /**\n     *  获取缓存中的数据长度。格式为：[正常的数据的条数，被撤销的数据的条数]\n     */\n    public get size() {\n        return this.scroll.size\n    }\n\n    /**\n     * 初始化绑定。在 editor.create() 结尾时调用\n     */\n    public observe() {\n        this.content.observe()\n        this.scroll.observe()\n        // 标准模式下才进行初始化绑定\n        !this.editor.isCompatibleMode && this.range.observe()\n    }\n\n    /**\n     * 保存数据\n     */\n    public save(mutations: MutationRecord[]) {\n        if (mutations.length) {\n            this.content.save(mutations)\n            this.scroll.save()\n            // 标准模式下才进行缓存\n            !this.editor.isCompatibleMode && this.range.save()\n        }\n    }\n\n    /**\n     * 撤销\n     */\n    public revoke() {\n        this.editor.change.disconnect()\n        const res = this.content.revoke()\n        if (res) {\n            this.scroll.revoke()\n            // 标准模式下才执行\n            if (!this.editor.isCompatibleMode) {\n                this.range.revoke()\n                this.editor.$textElem.focus()\n            }\n        }\n        this.editor.change.connect()\n        // 如果用户在 onchange 中修改了内容（DOM），那么缓存中的节点数据可能不连贯了，不连贯的数据必将导致恢复失败，所以必须将用户的 onchange 处于监控状态中\n        res && this.editor.change.emit()\n    }\n\n    /**\n     * 恢复\n     */\n    public restore() {\n        this.editor.change.disconnect()\n        const res = this.content.restore()\n        if (res) {\n            this.scroll.restore()\n            // 标准模式下才执行\n            if (!this.editor.isCompatibleMode) {\n                this.range.restore()\n                this.editor.$textElem.focus()\n            }\n        }\n        this.editor.change.connect()\n        // 与 revoke 同理\n        res && this.editor.change.emit()\n    }\n}\n", "/**\n * @description 整合差异备份和内容备份，进行统一管理\n * @author fangzhicong\n */\n\nimport NodeCache from './node'\nimport HtmlCache from './html'\nimport Editor from '../../index'\n\nexport default class ContentCache {\n    /**\n     * 内容备份的管理器\n     */\n    public cache?: HtmlCache | NodeCache\n\n    constructor(public editor: Editor) {}\n\n    /**\n     * 初始化绑定\n     */\n    observe() {\n        if (this.editor.isCompatibleMode) {\n            // 兼容模式（内容备份）\n            this.cache = new HtmlCache(this.editor)\n        } else {\n            // 标准模式（差异备份/节点备份）\n            this.cache = new NodeCache(this.editor)\n        }\n        this.cache.observe()\n    }\n\n    /**\n     * 保存\n     */\n    public save(mutations: MutationRecord[]) {\n        if (this.editor.isCompatibleMode) {\n            ;(this.cache as HtmlCache).save()\n        } else {\n            ;(this.cache as NodeCache).compile(mutations)\n        }\n    }\n\n    /**\n     * 撤销\n     */\n    public revoke() {\n        return this.cache?.revoke()\n    }\n\n    /**\n     * 恢复\n     */\n    public restore() {\n        return this.cache?.restore()\n    }\n}\n", "/**\n * @description 差异备份\n * @author fangzhicong\n */\n\nimport Cache from '../../../../utils/data-structure/cache'\nimport compile from './compile'\nimport { revoke, restore } from './decompilation'\nimport { Compile } from '../type'\nimport Editor from '../../../index'\n\nexport default class NodeCache extends Cache<Compile[]> {\n    constructor(public editor: Editor) {\n        super(editor.config.historyMaxSize)\n    }\n\n    public observe() {\n        this.resetMaxSize(this.editor.config.historyMaxSize)\n    }\n\n    /**\n     * 编译并保存数据\n     */\n    public compile(data: MutationRecord[]) {\n        this.save(compile(data))\n        return this\n    }\n\n    /**\n     * 撤销\n     */\n    public revoke() {\n        return super.revoke(data => {\n            revoke(data)\n        })\n    }\n\n    /**\n     * 恢复\n     */\n    public restore() {\n        return super.restore(data => {\n            restore(data)\n        })\n    }\n}\n", "/**\n * @description 数据结构 - 栈\n * @author fangzhicong\n */\n\n/**\n * 栈（限制最大数据条数，栈满后可以继续入栈，而先入栈的数据将失效）\n */\n// 取名灵感来自 Math.ceil，向上取有效值\nexport class CeilStack<T> {\n    /**\n     * 数据缓存\n     */\n    protected data: T[] = []\n\n    /**\n     * 栈的最大长度。为零则长度不限\n     */\n    protected max: number = 0\n\n    /**\n     * 标识是否重设过 max 值\n     */\n    protected reset: boolean = false\n\n    constructor(max: number = 0) {\n        max = Math.abs(max)\n        max && (this.max = max)\n    }\n\n    /**\n     * 允许用户重设一次 max 值\n     */\n    public resetMax(maxSize: number) {\n        maxSize = Math.abs(maxSize)\n        if (!this.reset && !isNaN(maxSize)) {\n            this.max = maxSize\n            this.reset = true\n        }\n    }\n\n    /**\n     * 当前栈中的数据条数\n     */\n    public get size() {\n        return this.data.length\n    }\n\n    /**\n     * 入栈\n     * @param data 入栈的数据\n     */\n    public instack(data: T) {\n        this.data.unshift(data)\n        if (this.max && this.size > this.max) {\n            this.data.length = this.max\n        }\n        return this\n    }\n\n    /**\n     * 出栈\n     */\n    public outstack(): T | undefined {\n        return this.data.shift()\n    }\n\n    /**\n     * 清空栈\n     */\n    public clear() {\n        this.data.length = 0\n        return this\n    }\n}\n", "/**\n * @description 数据整理\n * @author fangzhicong\n */\n\nimport { TargetPosition, DiffNodes, Compile } from '../type'\nimport { UA, toArray } from '../../../../utils/util'\n\n/**\n * 数据类型\n */\nexport function compileType(data: string) {\n    switch (data) {\n        case 'childList':\n            return 'node'\n        case 'attributes':\n            return 'attr'\n        default:\n            return 'text'\n    }\n}\n\n/**\n * 获取当前的文本内容\n */\nexport function compileValue(data: MutationRecord) {\n    switch (data.type) {\n        case 'attributes':\n            return (data.target as Element).getAttribute(data.attributeName as string) || ''\n        case 'characterData':\n            return data.target.textContent\n        default:\n            return ''\n    }\n}\n\n/**\n * addedNodes/removedNodes\n */\nexport function complieNodes(data: MutationRecord) {\n    const temp: DiffNodes = {}\n    if (data.addedNodes.length) {\n        temp.add = toArray(data.addedNodes)\n    }\n    if (data.removedNodes.length) {\n        temp.remove = toArray(data.removedNodes)\n    }\n    return temp\n}\n\n/**\n * addedNodes/removedNodes 的相对位置\n */\nexport function compliePosition(data: MutationRecord) {\n    let temp: TargetPosition\n    if (data.previousSibling) {\n        temp = {\n            type: 'before',\n            target: data.previousSibling,\n        }\n    } else if (data.nextSibling) {\n        temp = {\n            type: 'after',\n            target: data.nextSibling,\n        }\n    } else {\n        temp = {\n            type: 'parent',\n            target: data.target,\n        }\n    }\n    return temp\n}\n\n/**\n * 补全 Firefox 数据的特殊标签\n */\nconst tag = ['UL', 'OL', 'H1', 'H2', 'H3', 'H4', 'H5', 'H6']\n\n/**\n * 将 MutationRecord 转换成自定义格式的数据\n */\nexport default function compile(data: MutationRecord[]) {\n    const temp: Compile[] = []\n    // 以下两个变量是兼容 Firefox 时使用到的\n    // 前一次操作为删除元素节点\n    let removeNode: Node | false = false\n    // 连续的节点删除记录\n    const removeCache: Node[] = []\n    data.forEach((record, index) => {\n        const item: Compile = {\n            type: compileType(record.type),\n            target: record.target,\n            attr: record.attributeName || '',\n            value: compileValue(record) || '',\n            oldValue: record.oldValue || '',\n            nodes: complieNodes(record),\n            position: compliePosition(record),\n        }\n        temp.push(item)\n        // 兼容 Firefox，补全数据（这几十行代码写得吐血，跟 IE 有得一拼）\n        if (!UA.isFirefox) {\n            return\n        }\n        // 正常的数据：缩进、行高、超链接、对齐方式、引用、插入表情、插入图片、分割线、表格、插入代码\n        // 普通的数据补全：标题（纯文本内容）、加粗、斜体、删除线、下划线、颜色、背景色、字体、字号、列表（纯文本内容）\n        // 特殊的数据补全：标题（包含 HTMLElement）、列表（包含 HTMLElement 或 ul -> ol 或 ol -> ul 或 Enter）\n        if (removeNode && record.addedNodes.length && record.addedNodes[0].nodeType == 1) {\n            // 需要被全数据的目标节点\n            const replenishNode = record.addedNodes[0]\n            const replenishData: Compile = {\n                type: 'node',\n                target: replenishNode,\n                attr: '',\n                value: '',\n                oldValue: '',\n                nodes: {\n                    add: [removeNode],\n                },\n                position: {\n                    type: 'parent',\n                    target: replenishNode,\n                },\n            }\n            // 特殊的标签：['UL', 'OL', 'H1', 'H2', 'H3', 'H4', 'H5', 'H6']\n            if (tag.indexOf(replenishNode.nodeName) != -1) {\n                replenishData.nodes.add = toArray(replenishNode.childNodes)\n                temp.push(replenishData)\n            }\n            // 上一个删除元素是文本节点\n            else if (removeNode.nodeType == 3) {\n                if (contains(replenishNode, removeCache)) {\n                    replenishData.nodes.add = toArray(replenishNode.childNodes)\n                }\n                temp.push(replenishData)\n            }\n            // 上一个删除元素是 Element && 由近到远的删除元素至少有一个是需要补全数据节点的子节点\n            else if (\n                tag.indexOf(record.target.nodeName) == -1 &&\n                contains(replenishNode, removeCache)\n            ) {\n                replenishData.nodes.add = toArray(replenishNode.childNodes)\n                temp.push(replenishData)\n            }\n        }\n        // 记录本次的节点信息\n        if (item.type == 'node' && record.removedNodes.length == 1) {\n            removeNode = record.removedNodes[0]\n            removeCache.push(removeNode)\n        } else {\n            removeNode = false\n            removeCache.length = 0\n        }\n    })\n    return temp\n}\n\n// 删除元素的历史记录中包含有多少个目标节点的子元素\nfunction contains(tar: Node, childs: Node[]) {\n    let count = 0\n    for (let i = childs.length - 1; i > 0; i--) {\n        if (tar.contains(childs[i])) {\n            count++\n        } else {\n            break\n        }\n    }\n    return count\n}\n", "/**\n * @description 撤销 - 逆向操作，删除节点\n * @author fangzhicong\n */\nimport { Compile } from '../type'\n\n/**\n * 将节点添加到 DOM 树中\n * @param data 数据项\n * @param list 节点集合（addedNodes 或 removedNodes）\n */\nfunction insertNode(data: Compile, list: Node[]) {\n    let reference = data.position.target\n    switch (data.position.type) {\n        // reference 在这些节点的前面\n        case 'before':\n            if (reference.nextSibling) {\n                reference = reference.nextSibling\n                list.forEach((item: Node) => {\n                    data.target.insertBefore(item, reference)\n                })\n            } else {\n                list.forEach((item: Node) => {\n                    data.target.appendChild(item)\n                })\n            }\n            break\n        // reference 在这些节点的后面\n        case 'after':\n            list.forEach((item: Node) => {\n                data.target.insertBefore(item, reference)\n            })\n            break\n        // parent\n        // reference 是这些节点的父节点\n        default:\n            list.forEach((item: Node) => {\n                reference.appendChild(item)\n            })\n            break\n    }\n}\n\n/* ------------------------------------------------------------------ 撤销逻辑 ------------------------------------------------------------------ */\n\nfunction revokeNode(data: Compile) {\n    for (let [relative, list] of Object.entries(data.nodes)) {\n        switch (relative) {\n            // 反向操作，将这些节点从 DOM 中移除\n            case 'add':\n                list.forEach((item: Node) => {\n                    data.target.removeChild(item)\n                })\n                break\n            // remove（反向操作，将这些节点添加到 DOM 中）\n            default: {\n                insertNode(data, list)\n                break\n            }\n        }\n    }\n}\n\n/**\n * 撤销 attribute\n */\nfunction revokeAttr(data: Compile) {\n    let target = data.target as HTMLElement\n    if (data.oldValue == null) {\n        target.removeAttribute(data.attr)\n    } else {\n        target.setAttribute(data.attr, data.oldValue)\n    }\n}\n\n/**\n * 撤销文本内容\n */\nfunction revokeText(data: Compile) {\n    data.target.textContent = data.oldValue\n}\n\nconst revokeFns = {\n    node: revokeNode,\n    text: revokeText,\n    attr: revokeAttr,\n}\n\n// 撤销 - 对外暴露的接口\nexport function revoke(data: Compile[]) {\n    for (let i = data.length - 1; i > -1; i--) {\n        let item = data[i]\n        revokeFns[item.type](item)\n    }\n}\n\n/* ------------------------------------------------------------------ 恢复逻辑 ------------------------------------------------------------------ */\n\nfunction restoreNode(data: Compile) {\n    for (let [relative, list] of Object.entries(data.nodes)) {\n        switch (relative) {\n            case 'add': {\n                insertNode(data, list)\n                break\n            }\n            // remove\n            default: {\n                list.forEach((item: Node) => {\n                    ;(item.parentNode as Node).removeChild(item)\n                })\n                break\n            }\n        }\n    }\n}\n\nfunction restoreText(data: Compile) {\n    data.target.textContent = data.value\n}\n\nfunction restoreAttr(data: Compile) {\n    ;(data.target as HTMLElement).setAttribute(data.attr, data.value)\n}\n\nconst restoreFns = {\n    node: restoreNode,\n    text: restoreText,\n    attr: restoreAttr,\n}\n\n// 恢复 - 对外暴露的接口\nexport function restore(data: Compile[]) {\n    for (let item of data) {\n        restoreFns[item.type](item)\n    }\n}\n", "/**\n * @description 完整的内容备份，每次变化都将备份整个编辑器的内容\n * @author fangzhicong\n */\nimport Editor from '../../../index'\nimport { TailChain } from '../../../../utils/data-structure/chain'\n\nexport default class HtmlCache {\n    // 缓存数据\n    private data: TailChain<string>\n\n    constructor(public editor: Editor) {\n        this.data = new TailChain()\n    }\n\n    /**\n     * 初始化绑定\n     */\n    observe() {\n        this.data.resetMax(this.editor.config.historyMaxSize)\n        // 保存初始化值\n        this.data.insertLast(this.editor.$textElem.html())\n    }\n\n    /**\n     * 保存\n     */\n    public save() {\n        this.data.insertLast(this.editor.$textElem.html())\n        return this\n    }\n\n    /**\n     * 撤销\n     */\n    public revoke() {\n        let data = this.data.prev()\n        if (data) {\n            this.editor.$textElem.html(data)\n            return true\n        }\n        return false\n    }\n\n    /**\n     * 恢复\n     */\n    public restore() {\n        let data = this.data.next()\n        if (data) {\n            this.editor.$textElem.html(data)\n            return true\n        }\n        return false\n    }\n}\n", "/**\n * @description 数据结构 - 链表\n * @author fangzhicong\n */\n\n/**\n * 特殊链表（数据尾插入、插入前自动清理指针后边的数据、插入后指针永远定位于最后一位元素、可限制链表长度、指针双向移动）\n */\nexport class TailChain<T> {\n    /**\n     * 链表数据\n     */\n    protected data: T[] = []\n\n    /**\n     * 链表最大长度，零表示长度不限\n     */\n    protected max: number = 0\n\n    /**\n     * 指针\n     */\n    protected point = 0\n\n    // 当前指针是否人为操作过\n    protected isRe = false\n\n    /**\n     * 允许用户重设一次 max 值\n     */\n    resetMax(maxSize: number) {\n        maxSize = Math.abs(maxSize)\n        maxSize && (this.max = maxSize)\n    }\n\n    /**\n     * 当前链表的长度\n     */\n    get size() {\n        return this.data.length\n    }\n\n    /**\n     * 尾插入\n     * @param data 插入的数据\n     */\n    public insertLast<K extends T>(data: K) {\n        // 人为操作过指针，清除指针后面的元素\n        if (this.isRe) {\n            this.data.splice(this.point + 1)\n            this.isRe = false\n        }\n        this.data.push(data)\n        // 超出链表最大长度\n        while (this.max && this.size > this.max) {\n            this.data.shift()\n        }\n        // 从新定位指针到最后一个元素\n        this.point = this.size - 1\n        return this\n    }\n\n    /**\n     * 获取当前指针元素\n     */\n    public current(): T | undefined {\n        return this.data[this.point]\n    }\n\n    /**\n     * 获取上一指针元素\n     */\n    public prev(): T | undefined {\n        !this.isRe && (this.isRe = true)\n        this.point--\n        if (this.point < 0) {\n            this.point = 0\n            return undefined\n        }\n        return this.current()\n    }\n\n    /**\n     * 下一指针元素\n     */\n    public next(): T | undefined {\n        !this.isRe && (this.isRe = true)\n        this.point++\n        if (this.point >= this.size) {\n            this.point = this.size - 1\n            return undefined\n        }\n        return this.current()\n    }\n}\n", "/**\n * @description 记录 scrollTop\n * @author fangzhicong\n */\n\nimport Cache from '../../../../utils/data-structure/cache'\nimport Editor from '../../../index'\nimport { ScrollItem } from '../type'\n\nexport default class ScrollCache extends Cache<ScrollItem> {\n    /**\n     * 上一次的 scrollTop\n     */\n    private last: number = 0\n\n    /**\n     * 编辑区容器元素节点\n     */\n    private target: Element\n\n    constructor(public editor: Editor) {\n        super(editor.config.historyMaxSize)\n        this.target = editor.$textElem.elems[0]\n    }\n\n    /**\n     * 给编辑区容器绑定 scroll 事件\n     */\n    public observe() {\n        this.target = this.editor.$textElem.elems[0]\n        this.editor.$textElem.on('scroll', () => {\n            this.last = this.target.scrollTop\n        })\n        this.resetMaxSize(this.editor.config.historyMaxSize)\n    }\n\n    /**\n     * 保存 scrollTop 值\n     */\n    public save() {\n        super.save([this.last, this.target.scrollTop])\n        return this\n    }\n\n    /**\n     * 撤销\n     */\n    public revoke() {\n        return super.revoke(data => {\n            this.target.scrollTop = data[0]\n        })\n    }\n\n    /**\n     * 恢复\n     */\n    public restore() {\n        return super.restore(data => {\n            this.target.scrollTop = data[1]\n        })\n    }\n}\n", "/**\n * @description 记录 range 变化\n * @author fangzhicong\n */\n\nimport Cache from '../../../../utils/data-structure/cache'\nimport Editor from '../../../index'\nimport { RangeItem } from '../type'\nimport $ from '../../../../utils/dom-core'\nimport { debounce } from '../../../../utils/util'\n\n/**\n * 把 Range 对象转换成缓存对象\n * @param range Range 对象\n */\nfunction rangeToObject(range: Range): RangeItem {\n    return {\n        start: [range.startContainer, range.startOffset],\n        end: [range.endContainer, range.endOffset],\n        root: range.commonAncestorContainer,\n        collapsed: range.collapsed,\n    }\n}\n\n/**\n * 编辑区 range 缓存管理器\n */\nexport default class RangeCache extends Cache<[RangeItem, RangeItem]> {\n    /**\n     * 变化前的 Range 数据\n     */\n    private lastRange: RangeItem\n\n    /**\n     * 有效选区的根节点\n     */\n    private root: Element\n\n    public updateLastRange: Function\n\n    constructor(public editor: Editor) {\n        super(editor.config.historyMaxSize)\n        this.lastRange = rangeToObject(document.createRange())\n        this.root = editor.$textElem.elems[0]\n        this.updateLastRange = debounce(() => {\n            this.lastRange = rangeToObject(this.rangeHandle)\n        }, editor.config.onchangeTimeout)\n    }\n\n    /**\n     * 获取 Range 对象\n     */\n    public get rangeHandle() {\n        const selection = document.getSelection()\n        return selection && selection.rangeCount ? selection.getRangeAt(0) : document.createRange()\n    }\n\n    /**\n     * 初始化绑定\n     */\n    public observe() {\n        const self = this\n        // 同步节点数据\n        this.root = this.editor.$textElem.elems[0]\n        this.resetMaxSize(this.editor.config.historyMaxSize)\n        // selection change 回调函数\n        function selectionchange() {\n            const handle = self.rangeHandle\n            if (\n                self.root === handle.commonAncestorContainer ||\n                self.root.contains(handle.commonAncestorContainer)\n            ) {\n                // 非中文输入状态下才进行记录\n                if (!self.editor.isComposing) {\n                    self.updateLastRange()\n                }\n            }\n        }\n        // backspace 和 delete 手动更新 Range 缓存\n        function deletecallback(e: KeyboardEvent) {\n            if (e.key == 'Backspace' || e.key == 'Delete') {\n                // self.lastRange = rangeToObject(self.rangeHandle)\n                self.updateLastRange()\n            }\n        }\n        // 绑定事件（必须绑定在 document 上，不能绑定在 window 上）\n        $(document).on('selectionchange', selectionchange)\n        // 解除事件绑定\n        this.editor.beforeDestroy(function () {\n            $(document).off('selectionchange', selectionchange)\n        })\n\n        // 删除文本时手动更新 range\n        self.editor.$textElem.on('keydown', deletecallback)\n    }\n\n    /**\n     * 保存 Range\n     */\n    public save() {\n        let current = rangeToObject(this.rangeHandle)\n        super.save([this.lastRange, current])\n        this.lastRange = current\n        return this\n    }\n\n    /**\n     * 设置 Range，在 撤销/恢复 中调用\n     * @param range 缓存的 Range 数据\n     */\n    public set(range: RangeItem | undefined) {\n        try {\n            if (range) {\n                const handle = this.rangeHandle\n                handle.setStart(...range.start)\n                handle.setEnd(...range.end)\n                this.editor.menus.changeActive()\n                return true\n            }\n        } catch (err) {\n            return false\n        }\n        return false\n    }\n\n    /**\n     * 撤销\n     */\n    public revoke() {\n        return super.revoke(data => {\n            this.set(data[0])\n        })\n    }\n\n    /**\n     * 恢复\n     */\n    public restore() {\n        return super.restore(data => {\n            this.set(data[1])\n        })\n    }\n}\n", "/**\n * @description disable 内容编辑\n * @author lichunlin\n */\nimport Editor from '../index'\nimport $, { DomElement } from '../../utils/dom-core'\nimport '../../assets/style/disable.less'\n\nexport default function disableInit(editor: Editor) {\n    let isCurtain: Boolean = false // 避免重复生成幕布\n    let $contentDom: DomElement\n    let $menuDom: DomElement\n\n    // 禁用期间，通过 js 修改内容后，刷新内容\n    editor.txt.eventHooks.changeEvents.push(function () {\n        if (isCurtain) {\n            $contentDom.find('.w-e-content-preview').html(editor.$textElem.html())\n        }\n    })\n\n    // 创建幕布\n    function disable() {\n        if (isCurtain) return\n        // 隐藏编辑区域\n        editor.$textElem.hide()\n        // 生成div 渲染编辑内容\n        let textContainerZindexValue = editor.zIndex.get('textContainer')\n        const content = editor.txt.html()\n        $contentDom = $(\n            `<div class=\"w-e-content-mantle\" style=\"z-index:${textContainerZindexValue}\">\n                <div class=\"w-e-content-preview w-e-text\">${content}</div>\n            </div>`\n        )\n        editor.$textContainerElem.append($contentDom)\n        // 生成div 菜单膜布\n        let menuZindexValue = editor.zIndex.get('menu')\n        $menuDom = $(`<div class=\"w-e-menue-mantle\" style=\"z-index:${menuZindexValue}\"></div>`)\n        editor.$toolbarElem.append($menuDom)\n        isCurtain = true\n        editor.isEnable = false\n    }\n\n    // 销毁幕布并显示可编辑区域\n    function enable() {\n        if (!isCurtain) return\n        $contentDom.remove()\n        $menuDom.remove()\n        editor.$textElem.show()\n        isCurtain = false\n        editor.isEnable = true\n    }\n\n    return { disable, enable }\n}\n", "var api = require(\"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\");\n            var content = require(\"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/postcss-loader/src/index.js!../../../node_modules/less-loader/dist/cjs.js!./disable.less\");\n\n            content = content.__esModule ? content.default : content;\n\n            if (typeof content === 'string') {\n              content = [[module.id, content, '']];\n            }\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nmodule.exports = content.locals || {};", "// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".w-e-content-mantle {\\n  width: 100%;\\n  height: 100%;\\n  overflow-y: auto;\\n}\\n.w-e-content-mantle .w-e-content-preview {\\n  width: 100%;\\n  min-height: 100%;\\n  padding: 0 10px;\\n  line-height: 1.5;\\n}\\n.w-e-content-mantle .w-e-content-preview img {\\n  cursor: default;\\n}\\n.w-e-content-mantle .w-e-content-preview img:hover {\\n  box-shadow: none;\\n}\\n.w-e-menue-mantle {\\n  position: absolute;\\n  height: 100%;\\n  width: 100%;\\n  top: 0;\\n  left: 0;\\n}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n", "/**\n * @description range变化\n * @author liuwei\n */\nimport Editor from '../index'\nexport default class SelectionChange {\n    constructor(public editor: Editor) {\n        // 绑定的事件\n        const init = () => {\n            const activeElement = document.activeElement\n            if (activeElement === editor.$textElem.elems[0]) {\n                this.emit()\n            }\n        }\n\n        //  选取变化事件监听\n        window.document.addEventListener('selectionchange', init)\n\n        // 摧毁时移除监听\n        this.editor.beforeDestroy(() => {\n            window.document.removeEventListener('selectionchange', init)\n        })\n    }\n\n    public emit(): void {\n        // 执行rangeChange函数\n        const { onSelectionChange } = this.editor.config\n        if (onSelectionChange) {\n            const selection = this.editor.selection\n            selection.saveRange()\n            if (!selection.isSelectionEmpty())\n                onSelectionChange({\n                    // 当前文本\n                    text: selection.getSelectionText(),\n                    // 当前的html\n                    html: selection.getSelectionContainerElem()?.elems[0].innerHTML,\n                    // select对象\n                    selection: selection,\n                })\n        }\n    }\n}\n", "import Editor from '../editor'\nimport { deepClone } from '../utils/util'\n\n// 插件注册配置约束\nexport interface RegisterOptions {\n    intention: any\n    config?: any\n    // example?: any // 原本是用来存放实例化后的插件对象的\n}\n\n// 插件列表类型\nexport type pluginsListType = {\n    [key: string]: RegisterOptions\n}\n\n/**\n * 插件注册\n * @param { string } name 插件名\n * @param { RegisterOptions } options 插件配置\n * @param { pluginsListType } memory 存储介质\n */\nexport function registerPlugin(name: string, options: RegisterOptions, memory: pluginsListType) {\n    if (!name) {\n        throw new TypeError('name is not define')\n    }\n\n    if (!options) {\n        throw new TypeError('options is not define')\n    }\n\n    if (!options.intention) {\n        throw new TypeError('options.intention is not define')\n    }\n\n    if (options.intention && typeof options.intention !== 'function') {\n        throw new TypeError('options.intention is not function')\n    }\n\n    if (memory[name]) {\n        console.warn(`plugin ${name} 已存在，已覆盖。`)\n    }\n\n    memory[name] = options\n}\n\n/**\n * 插件初始化\n * @param { Editor } editor 编辑器实例\n */\nexport default function initPlugins(editor: Editor) {\n    const plugins: pluginsListType = Object.assign(\n        {},\n        deepClone(Editor.globalPluginsFunctionList),\n        deepClone(editor.pluginsFunctionList)\n    )\n\n    const values = Object.entries(plugins)\n    values.forEach(([name, options]) => {\n        console.info(`plugin ${name} initializing`)\n        const { intention, config } = options\n        intention(editor, config)\n        console.info(`plugin ${name} initialization complete`)\n    })\n}\n", "import { Controller } from \"@hotwired/stimulus\";\nimport { CodemirrorWrapper } from \"../../commons/codemirror-wrapper\";\nimport tippy from \"tippy.js\";\nimport { Picker } from \"emoji-mart\";\nimport GairdaoController from \"../gairdao_controller\";\nimport E from 'wangeditor'\nexport default class extends Controller {\n  static values = { inModal: Boolean };\n  static targets = [\n      \"socialFeedPostForm\",\n      \"socialFeedsPostBtn\",\n      \"socialFeedPostEditor\",\n      \"tagsPanel\",\n      \"filesPanel\",\n      \"imagesPanel\",\n      \"editorPanel\",\n      \"countWordsPanel\",\n      \"socialFeedPostAttachmentView\",\n      // \"editorToolbar\",\n  ];\n\n  disconnect() {\n    this.editor.destroy();\n    this.imagesPond.destroy();\n    this.filesPond.destroy();\n    this.filePondUnBindEvents();\n  }\n\n  connect() {\n    const mentionUsers = [\n      {label: '@Walter White', apply: '[[@Walter White]]', info: 'Your first friend'},\n      {label: '@James Ting', apply: '[[@James Ting(ksish12)]]'},\n      {label: '@\u9C81\u897F\u897F', apply: '[[@\u9C81\u897F\u897F]]'},\n      {label: '@\u4E2D\u672C\u806A', apply: '[[@\u4E2D\u672C\u806A]]'},\n      {label: '@\u30B5\u30C8\u30B7\u30FB\u30CA\u30AB\u30E2\u30C8', apply: '[[@\u30B5\u30C8\u30B7\u30FB\u30CA\u30AB\u30E2\u30C8]]'},\n      {label: '@\u91CE\u6BD4\u306E\u3073\u592A', apply: '[[@\u91CE\u6BD4\u306E\u3073\u592A]]'},\n      {label: '@\uC131\uB355\uC120', apply: '[[@\uC131\uB355\uC120]]'},\n    ];\n\n    try {\n      this.doc = localStorage.getItem('post-draft') || '';\n    } catch (e) {\n      console.error('localStorage is not available:', e);\n    }\n    this.editor = this.initEditor(mentionUsers);\n    this.initTagsPanel(this.tagsPanelTarget);\n    // this.initFilesPanel(this.filesPanelTarget);\n    this.initImagesPanel(this.imagesPanelTarget);\n    this.initSwitchThemeMode();\n    // this.initEditorToolbar(this.editorToolbarTarget);\n    this.filePondBindEvents();\n    this.initWangEidt(E)\n  }\n\n  initEditor(mentionUsers){\n    let state = CodemirrorWrapper.newState(\n        mentionUsers,\n        this.countWordsPanelTarget,\n        this.doc,\n        this.handleEditorViewUpdate,\n        this.handleEditorViewDropOrPasteFile\n    );\n    const view = CodemirrorWrapper.newEditor(state, this.socialFeedPostEditorTarget);\n    // init localStorage draft\n    this.updateContent(view);\n    return new CodemirrorWrapper(view);\n  }\n  initWangEidt(e){\n    document.addEventListener('turbo:frame-render', function () {\n      [\"editor-article\"].forEach(function (element) {\n        // \u904D\u5386\u6570\u7EC4\uFF0C\u5BF9\u6BCF\u4E2A\u5143\u7D20\u8FDB\u884C\u64CD\u4F5C\n        console.log(element);\n\n        var editor = new e(document.getElementById(element));\n        // var editorArticle = new e(document.getElementById('editor-article'));\n        // \u914D\u7F6E\u670D\u52A1\u5668\u7AEF\u5730\u5740\n        editor.config.uploadImgServer = '/uploads'  // \u540E\u7AEF\u63A5\u53E3\u5730\u5740\n        editor.config.uploadFileName = 'wangeditor_upload_file' // \u8BBE\u7F6E\u4E0A\u4F20\u6587\u4EF6\u7684\u5B57\u6BB5\u540D\uFF0C\u9ED8\u8BA4\u4E3AimgFile\uFF0C\u53EF\u4EE5\u6839\u636E\u4F60\u7684\u540E\u7AEF\u8BBE\u7F6E\u8C03\u6574\n        editor.config.uploadImgHooks = {\n          customInsert: function (insertImg, result) { // \u63D2\u5165\u56FE\u7247\u7684\u81EA\u5B9A\u4E49\u94A9\u5B50\u51FD\u6570\n            // console.log(result)\n            // const url = result.url; // \u4ECE\u8FD4\u56DE\u7ED3\u679C\u4E2D\u83B7\u53D6\u56FE\u7247URL\n            // insertImg(url); // \u5C06\u56FE\u7247\u63D2\u5165\u5230\u7F16\u8F91\u5668\u4E2D\n             // result \u662F\u4ECE\u670D\u52A1\u5668\u8FD4\u56DE\u7684\u6570\u636E\uFF0C\u8FD9\u91CC\u901A\u5E38\u662F {errno:0, data: [\u56FE\u7247\u94FE\u63A5\u6216\u8005base64\u7F16\u7801]} \u683C\u5F0F\n              if (result.success) {\n                  // \u4E0A\u4F20\u6210\u529F\uFF0C\u63D2\u5165\u56FE\u7247\u7684\u81EA\u5B9A\u4E49\u903B\u8F91\n                  var imgUrl = result.url; // \u5047\u8BBE\u670D\u52A1\u5668\u8FD4\u56DE\u7684\u6570\u636E\u4E2D data \u662F\u4E00\u4E2A\u6570\u7EC4\uFF0C\u91CC\u9762\u5305\u542B\u56FE\u7247\u94FE\u63A5\n                  insertImg(imgUrl); // \u8C03\u7528 insertImg \u65B9\u6CD5\u63D2\u5165\u56FE\u7247\n                  // alert('\u4E0A\u4F20\u6210\u529F'); // \u663E\u793A\u6210\u529F\u63D0\u793A\n              } else {\n                  // \u4E0A\u4F20\u5931\u8D25\uFF0C\u63D0\u793A\u9519\u8BEF\u4FE1\u606F\n                  alert('Upload failed\uFF1A' + result.message); // \u663E\u793A\u5931\u8D25\u539F\u56E0\n              }\n          }\n        }\n        // \u914D\u7F6E\u81EA\u5B9A\u4E49\u83DC\u5355\uFF08\u5982\u679C\u4F60\u9700\u8981\u81EA\u5B9A\u4E49\u83DC\u5355\uFF09\n        editor.config.menus = [\n          'head',  // \u6807\u9898\n          'bold',  // \u7C97\u4F53\n          'fontSize',  // \u5B57\u53F7\n          'fontName',  // \u5B57\u4F53\n          'italic',  // \u659C\u4F53\n          'underline',  // \u4E0B\u5212\u7EBF\n          'strikeThrough',  // \u5220\u9664\u7EBF\n          'foreColor',  // \u6587\u5B57\u989C\u8272\n          'backColor',  // \u80CC\u666F\u989C\u8272\n          'link',  // \u63D2\u5165\u94FE\u63A5\n          'list',  // \u5217\u8868\n          'justify',  // \u5BF9\u9F50\u65B9\u5F0F\n          'quote',  // \u5F15\u7528\n          'emoticon',  // \u8868\u60C5\n          'image',  // \u63D2\u5165\u56FE\u7247\n          'table',  // \u8868\u683C\n          // 'video',  // \u63D2\u5165\u89C6\u9891\n          'code',  // \u63D2\u5165\u4EE3\u7801\n          'undo',  // \u64A4\u9500\n          'redo',  // \u91CD\u590D\n          'splitLine',\n          'insertOrderedList', // \u6709\u5E8F\u5217\u8868\n          'insertUnorderedList', // \u65E0\u5E8F\u5217\u8868\n          // 'lineHeight'\n        ]\n        editor.create()\n        document.querySelector('.w-e-toolbar').classList.add('custom-toolbar');\n        \n        var div = document.getElementById('text-center');\n        var input = document.createElement('input');\n        // \u6B65\u9AA4 1: \u521B\u5EFAMutationObserver\u5B9E\u4F8B\n        const observer = new MutationObserver((mutationsList, observer) => {\n            const htmlContent = editor.txt.html();\n            console.log(777777)\n            console.log(htmlContent)\n            for(let mutation of mutationsList) {\n                if (mutation.type === 'childList') { // \u5B50\u8282\u70B9\u53D8\u5316\n                    input.type = 'text'; // \u6216\u8005 'password', 'checkbox' \u7B49\n                    input.name = 'communities_collection[body_markdown]';\n                    input.type = 'hidden';\n                    input.id = 'editPostValue';\n                    input.value = htmlContent;\n                    div.appendChild(input);\n                } else if (mutation.type === 'attributes') { // \u5C5E\u6027\u53D8\u5316\n                    input.type = 'text'; // \u6216\u8005 'password', 'checkbox' \u7B49\n                    input.name = 'communities_collection[body_markdown]';\n                    input.type = 'hidden';\n                    input.id = 'editPostValue';\n                    input.value = htmlContent;\n                    div.appendChild(input);\n                } else if (mutation.type === 'characterData') { // \u6587\u672C\u5185\u5BB9\u53D8\u5316\n                    input.type = 'text'; // \u6216\u8005 'password', 'checkbox' \u7B49\n                    input.name = 'communities_collection[body_markdown]';\n                    input.type = 'hidden';\n                    input.id = 'editPostValue';\n                    input.value = htmlContent;\n                    div.appendChild(input);\n                }\n            }\n        });\n         \n        // \u6B65\u9AA4 2: \u914D\u7F6E\u89C2\u5BDF\u9009\u9879\n        const config = { attributes: true, childList: true, characterData: true, subtree: true }; // subtree: true \u8868\u793A\u89C2\u5BDF\u76EE\u6807\u8282\u70B9\u7684\u5B50\u6811\u7684\u6240\u6709\u53D8\u52A8\n         \n        // \u6B65\u9AA4 3: \u6307\u5B9A\u89C2\u5BDF\u76EE\u6807\n        const targetNodea = document.getElementById('editor-article'); // \u83B7\u53D6\u76EE\u6807\u8282\u70B9\n        if (targetNodea) {\n            // \u6B65\u9AA4 4: \u5F00\u59CB\u89C2\u5BDF\n            observer.observe(targetNodea, config);\n        } else {\n            console.log('Target element not found.');\n        }\n\n      })\n      // \u904D\u5386\u8FD9\u4E9B\u5143\u7D20\u5E76\u66F4\u65B0\u5B83\u4EEC\u7684data-title\u5C5E\u6027\n      fetch('/app/users/users/get_language', {\n        method: 'GET',\n        headers: {\n          'Content-Type': 'application/json',\n          'Accept': 'application/json'\n        }\n      })\n      .then(response => response.json())\n      .then(data => {\n        console.log(data.locale); // \u8F93\u51FA\u5F53\u524D\u7684\u8BED\u8A00\u8BBE\u7F6E\uFF0C\u5982 \"en\" \u6216 \"zh-CN\"\n        if(data.locale === 'en'){\n          var menus = {\u6807\u9898: 'Title', \u52A0\u7C97: 'Bold', \u5B57\u53F7: 'Front size', \u5B57\u4F53: 'Format', \u659C\u4F53: 'Italic', \u4E0B\u5212\u7EBF: 'Underline', \u5220\u9664\u7EBF: 'Strikethrough', \u6587\u5B57\u989C\u8272: 'Text color', \u80CC\u666F\u8272: 'Fill color',\n            \u94FE\u63A5: 'Link', \u5E8F\u5217: 'Sequence',\u5BF9\u9F50: 'Align',\u5F15\u7528: 'Cite',\u8868\u60C5: 'Emoji',\u56FE\u7247:'Photo', \u8868\u683C: 'Table', \u4EE3\u7801: 'Coding',\u64A4\u9500: 'Undo',\u6062\u590D: 'Resume',\u5206\u5272\u7EBF: 'Divider line',\u5168\u5C4F: 'Full screen'}\n          const textsToTranslate = document.querySelectorAll('.w-e-dp-title, .w-e-list p:not(:has(i))');\n\n          const elements = document.querySelectorAll('[data-title]');\n          elements.forEach(element => {\n\n            console.log(element.getAttribute('data-title'));\n            // if(element.getAttribute('data-title') === '\u52A0\u7C97'){\n              element.setAttribute('data-title', menus[element.getAttribute('data-title')]);\n            // }\n            \n          });\n          // ==========\n          document.querySelector('.w-e-menu[data-title=\"Title\"]').addEventListener('click', function() {\n            // \u8F6C\u6362\u6807\u9898\u8BBE\u7F6E\u83DC\u5355\u6587\u672C\n            this.querySelector('.w-e-dp-title').textContent = 'Header Settings';\n            \n            // \u8F6C\u6362\u5404\u7EA7\u6807\u9898\u9009\u9879\n            this.querySelectorAll('.w-e-item').forEach(item => {\n              const text = item.textContent;\n              switch(text) {\n                case '\u6B63\u6587': item.textContent = 'Paragraph'; break;\n              }\n            });\n          });\n          // ==========\n          document.querySelector('.w-e-menu[data-title=\"Format\"]').addEventListener('click', function() {\n            // \u7FFB\u8BD1\u8BBE\u7F6E\u5B57\u4F53\u83DC\u5355\u6807\u9898\n            const title = this.querySelector('.w-e-dp-title');\n            if (title.textContent === '\u8BBE\u7F6E\u5B57\u4F53') {\n              title.textContent = 'Font Style';\n            }\n\n            // \u7FFB\u8BD1\u6240\u6709\u5B57\u4F53\u9009\u9879\uFF08\u4FDD\u7559\u82F1\u6587\u5B57\u4F53\u539F\u540D\uFF09\n            const fontItems = this.querySelectorAll('.w-e-item p');\n            fontItems.forEach(item => {\n              const chineseFont = item.textContent.trim();\n              switch(chineseFont) {\n                case '\u9ED1\u4F53': item.textContent = 'SimHei'; break;\n                case '\u4EFF\u5B8B': item.textContent = 'FangSong'; break;\n                case '\u6977\u4F53': item.textContent = 'KaiTi'; break;\n                case '\u6807\u6977\u4F53': item.textContent = 'DFKai-SB'; break;\n                case '\u534E\u6587\u4EFF\u5B8B': item.textContent = 'STFangsong'; break;\n                case '\u534E\u6587\u6977\u4F53': item.textContent = 'STKaiti'; break;\n                case '\u5B8B\u4F53': item.textContent = 'SimSun'; break;\n                case '\u5FAE\u8F6F\u96C5\u9ED1': item.textContent = 'Microsoft YaHei'; break;\n                // \u82F1\u6587\u5B57\u4F53\u4FDD\u6301\u4E0D\u53D8\n                default: if (/^[A-Z]/.test(chineseFont)) return;\n              }\n            });\n          });\n          // ==========\n          document.querySelector('.w-e-menu[data-title=\"Text color\"]').addEventListener('click', function() {\n            // \u7FFB\u8BD1\u83DC\u5355\u6807\u9898\n            const title = this.querySelector('.w-e-dp-title');\n            if (title.textContent === '\u6587\u5B57\u989C\u8272') {\n              title.textContent = 'Text Color';\n            }\n          });\n          // ==========\n          document.querySelector('.w-e-menu[data-title=\"Fill color\"]').addEventListener('click', function() {\n            // \u7FFB\u8BD1\u83DC\u5355\u6807\u9898\n            const title = this.querySelector('.w-e-dp-title');\n            if (title.textContent === '\u80CC\u666F\u989C\u8272') {\n              title.textContent = 'Background Color';\n            }\n          });\n\n          // ==========\n          document.querySelector('.w-e-menu[data-title=\"Link\"]').addEventListener('click', function() {\n            // \u7FFB\u8BD1\u9762\u677F\u6807\u9898\n            const panelTitle = this.querySelector('.w-e-panel-tab-title li.w-e-active');\n            if (panelTitle.textContent === '\u94FE\u63A5') {\n              panelTitle.textContent = 'Link';\n            }\n            \n            // \u7FFB\u8BD1\u8F93\u5165\u6846\u5360\u4F4D\u7B26\n            const textInput = document.querySelector('[id^=\"input-text\"]');\n            textInput.placeholder = 'Link Text';\n            \n            // const urlInput = document.getElementById('input-link04614271802658232');\n            const urlInput = document.querySelector('[id^=\"input-link\"]');\n            urlInput.placeholder = 'e.g. https://...';\n            \n            // \u7FFB\u8BD1\u6309\u94AE\u6587\u672C\n            // const insertBtn = document.getElementById('btn-ok5853955115153426');\n            const insertBtn = document.querySelector('[id^=\"btn-ok\"]');\n            console.log(insertBtn)\n            insertBtn.textContent = 'Insert';\n            \n            // const removeBtn = document.getElementById('btn-del2670523184837704');\n            const removeBtn = document.querySelector('[id^=\"btn-del\"]');\n            removeBtn.textContent = 'Remove Link';\n          });\n\n          // ==========\n          // \u83B7\u53D6Align\u83DC\u5355\u5143\u7D20\n          const alignMenu = document.querySelector('div[data-title=\"Align\"]');\n\n          // \u6DFB\u52A0\u70B9\u51FB\u4E8B\u4EF6\n          alignMenu.addEventListener('click', function(e) {\n            const title = this.querySelector('.w-e-dp-title');\n            title.textContent = 'Alignment';\n              // \u786E\u4FDD\u70B9\u51FB\u7684\u662F\u83DC\u5355\u672C\u8EAB\u800C\u4E0D\u662F\u5B50\u5143\u7D20\n              const listItems = this.querySelectorAll('.w-e-item p');\n                  \n              // \u66FF\u6362\u6587\u672C\u5185\u5BB9\n              listItems.forEach(item => {\n                  const chineseText = item.textContent.trim();\n                  const englishText = {\n                      \"\u9760\u5DE6\": \"Left\",\n                      \"\u5C45\u4E2D\": \"Center\",\n                      \"\u9760\u53F3\": \"Right\",\n                      \"\u4E24\u7AEF\": \"Justify\"\n                  }[chineseText];\n                  \n                  if (englishText) {\n                      item.textContent = englishText;\n                  }\n              });\n          });\n          // ==========\n\n          // \u83B7\u53D6Emoji\u83DC\u5355\u5143\u7D20\n          const emojiMenu = document.querySelector('[data-title=\"Emoji\"]');\n\n          // \u6DFB\u52A0\u70B9\u51FB\u4E8B\u4EF6\n          emojiMenu.addEventListener('click', function() {\n            // \u8F6C\u6362\u6807\u9898\u6587\u672C\n            this.setAttribute('data-title', 'Emoji');\n            // \u8F6C\u6362\u56FE\u6807\u6587\u672C\n            this.querySelector('.w-e-icon-happy').title = 'Happy';\n            // \u8F6C\u6362\u9762\u677F\u5173\u95ED\u6309\u94AE\u6587\u672C\n            this.querySelector('.w-e-icon-close').title = 'Close';\n            // \u8F6C\u6362\u6807\u7B7E\u6587\u672C\n            this.querySelector('.w-e-active').textContent = 'Emoticons';\n            this.querySelectorAll('.w-e-item').forEach(item => {\n              item.textContent = item.textContent.replace('\u8868\u60C5', 'Emoticons');\n              item.textContent = item.textContent.replace('\u624B\u52BF', 'Gestures');\n            });\n          });\n\n          // ===========\n\n          // \u83B7\u53D6Photo\u83DC\u5355\u5143\u7D20\n          const photoMenu = document.querySelector('[data-title=\"Photo\"]');\n\n          // \u6DFB\u52A0\u70B9\u51FB\u4E8B\u4EF6\n          photoMenu.addEventListener('click', function() {\n            // \u8F6C\u6362\u4E3B\u6807\u9898\n            this.setAttribute('data-title', 'Photo');\n            \n            // \u8F6C\u6362\u56FE\u6807\u6587\u672C\n            this.querySelector('.w-e-icon-image').title = 'Image';\n            this.querySelector('.w-e-icon-upload2').title = 'Upload';\n            this.querySelector('.w-e-icon-close').title = 'Close';\n            \n            // \u8F6C\u6362\u9762\u677F\u6807\u7B7E\u6587\u672C\n            this.querySelector('.w-e-active').textContent = 'Upload Image';\n            this.querySelectorAll('.w-e-item').forEach(item => {\n              item.textContent = item.textContent.replace('\u4E0A\u4F20\u56FE\u7247', 'Upload Image');\n              item.textContent = item.textContent.replace('\u7F51\u7EDC\u56FE\u7247', 'Web Images');\n            });\n            \n            // \u8F6C\u6362\u8F93\u5165\u6846\u5360\u4F4D\u7B26\n            // this.querySelector('#up-file-id5487433074674727').placeholder = 'Select images (jpg/jpeg/png/gif/bmp)';\n            this.querySelector('[id^=\"up-file-id\"]').placeholder = 'Select images (jpg/jpeg/png/gif/bmp)';\n            // this.querySelector('#input-link-url5635545995570673').placeholder = 'Image URL';\n            this.querySelector('[id^=\"input-link-url\"]').placeholder = 'Image URL';\n            // this.querySelector('#input-link-url-alt5722038216273467').placeholder = 'Image Caption';\n            this.querySelector('[id^=\"input-link-url-alt\"]').placeholder = 'Image Caption';\n            // this.querySelector('#input-link-url-href8356679490838893').placeholder = 'Link URL';\n            this.querySelector('[id^=\"input-link-url-href\"]').placeholder = 'Link URL';\n            \n            // \u8F6C\u6362\u6309\u94AE\u6587\u672C\n            // this.querySelector('#btn-link004943284596178543').textContent = 'Insert';\n            // this.querySelector('[id^=\"btn-link\"]').placeholder = 'Insert';\n            document.querySelector('[id^=\"btn-link\"]').textContent = 'Insert';\n            // console.log(insertBtn)\n            // insertBtn.textContent = 'Insert';\n          });\n\n          // =================\n\n          document.querySelectorAll('[data-title=\"Table\"]').forEach(tableMenu => {\n              tableMenu.addEventListener('click', function() {\n                  // \u66FF\u6362\u9762\u677F\u6807\u9898\n                  this.querySelector('.w-e-panel-tab-title li').textContent = 'Insert Table';\n                  \n                  // \u66FF\u6362\u8868\u683C\u521B\u5EFA\u754C\u9762\u6587\u672C\n                  const panelContent = this.querySelector('.w-e-panel-tab-content');\n                  panelContent.querySelector('.w-e-table span:first-child').textContent = 'Create';\n                  panelContent.querySelector('.w-e-table span:nth-child(3)').textContent = 'columns';\n                  panelContent.querySelector('.w-e-table span:nth-child(5)').textContent = 'columnar table';\n                  \n                  // \u66FF\u6362\u6309\u94AE\u6587\u672C\n                  panelContent.querySelector('.right').textContent = 'Insert';\n              });\n          });\n\n          // ==========\n          document.querySelector('.w-e-menu[data-title=\"Front size\"]').addEventListener('click', function() {\n            // \u83B7\u53D6\u4E0B\u62C9\u5217\u8868\u5143\u7D20\n            const dropList = this.querySelector('.w-e-droplist');\n            \n            // \u7FFB\u8BD1\u6807\u9898\u6587\u672C\n            const title = dropList.querySelector('.w-e-dp-title');\n            title.textContent = 'Font Size';\n          });\n          // ===========\n\n          document.querySelectorAll('[data-title=\"Coding\"]').forEach(codingMenu => {\n              codingMenu.addEventListener('click', function() {\n                  // \u66FF\u6362\u9762\u677F\u6807\u9898\n                  this.querySelector('.w-e-panel-tab-title li').textContent = 'Insert Code';\n                  \n                  // \u66FF\u6362\u6309\u94AE\u6587\u672C\n                  this.querySelector('.right').textContent = 'Insert';\n              });\n          });\n\n          // ==========\n          document.querySelector('.w-e-menu[data-title=\"Sequence\"]').addEventListener('click', function(event) {\n              // \u83B7\u53D6\u4E0B\u62C9\u5217\u8868\u5143\u7D20\n              const droplist = this.querySelector('.w-e-droplist');\n              console.log(929292929)\n              // \u66F4\u65B0\u6807\u9898\n              droplist.querySelector('.w-e-dp-title').textContent = 'Sequence';\n              \n              // \u66F4\u65B0\u5217\u8868\u9879\n              droplist.querySelectorAll('.w-e-item').forEach(item => {\n                item.querySelector('p').textContent = item.querySelector('p').textContent\n                  .replace('\u65E0\u5E8F\u5217\u8868', 'Unordered List')\n                  .replace('\u6709\u5E8F\u5217\u8868', 'Ordered List');\n              });\n          });\n          // ============\n        }\n\n      })\n      .catch(error => console.error('Error:', error));\n    });\n    document.addEventListener('DOMContentLoaded', function () {\n      // var editor = new e('#editor')\n      [\"editor-article\"].forEach(function (element) {\n        // \u904D\u5386\u6570\u7EC4\uFF0C\u5BF9\u6BCF\u4E2A\u5143\u7D20\u8FDB\u884C\u64CD\u4F5C\n        console.log(element);\n\n        var editor = new e(document.getElementById(element));\n        // var editorArticle = new e(document.getElementById('editor-article'));\n        // \u914D\u7F6E\u670D\u52A1\u5668\u7AEF\u5730\u5740\n        editor.config.uploadImgServer = '/uploads'  // \u540E\u7AEF\u63A5\u53E3\u5730\u5740\n        editor.config.uploadFileName = 'wangeditor_upload_file' // \u8BBE\u7F6E\u4E0A\u4F20\u6587\u4EF6\u7684\u5B57\u6BB5\u540D\uFF0C\u9ED8\u8BA4\u4E3AimgFile\uFF0C\u53EF\u4EE5\u6839\u636E\u4F60\u7684\u540E\u7AEF\u8BBE\u7F6E\u8C03\u6574\n        editor.config.uploadImgHooks = {\n          customInsert: function (insertImg, result) { // \u63D2\u5165\u56FE\u7247\u7684\u81EA\u5B9A\u4E49\u94A9\u5B50\u51FD\u6570\n            // console.log(result)\n            // const url = result.url; // \u4ECE\u8FD4\u56DE\u7ED3\u679C\u4E2D\u83B7\u53D6\u56FE\u7247URL\n            // insertImg(url); // \u5C06\u56FE\u7247\u63D2\u5165\u5230\u7F16\u8F91\u5668\u4E2D\n             // result \u662F\u4ECE\u670D\u52A1\u5668\u8FD4\u56DE\u7684\u6570\u636E\uFF0C\u8FD9\u91CC\u901A\u5E38\u662F {errno:0, data: [\u56FE\u7247\u94FE\u63A5\u6216\u8005base64\u7F16\u7801]} \u683C\u5F0F\n              // var success = result.success === 0; // \u6839\u636E errno \u5224\u65AD\u662F\u5426\u6210\u529F\n              if (result.success) {\n                  // \u4E0A\u4F20\u6210\u529F\uFF0C\u63D2\u5165\u56FE\u7247\u7684\u81EA\u5B9A\u4E49\u903B\u8F91\n                  var imgUrl = result.url; // \u5047\u8BBE\u670D\u52A1\u5668\u8FD4\u56DE\u7684\u6570\u636E\u4E2D data \u662F\u4E00\u4E2A\u6570\u7EC4\uFF0C\u91CC\u9762\u5305\u542B\u56FE\u7247\u94FE\u63A5\n                  insertImg(imgUrl); // \u8C03\u7528 insertImg \u65B9\u6CD5\u63D2\u5165\u56FE\u7247\n                  // alert('\u4E0A\u4F20\u6210\u529F'); // \u663E\u793A\u6210\u529F\u63D0\u793A\n              } else {\n                  // \u4E0A\u4F20\u5931\u8D25\uFF0C\u63D0\u793A\u9519\u8BEF\u4FE1\u606F\n                  alert('Upload failed\uFF1A' + result.message); // \u663E\u793A\u5931\u8D25\u539F\u56E0\n              }\n          }\n        }\n        // \u914D\u7F6E\u81EA\u5B9A\u4E49\u83DC\u5355\uFF08\u5982\u679C\u4F60\u9700\u8981\u81EA\u5B9A\u4E49\u83DC\u5355\uFF09\n        editor.config.menus = [\n          'head',  // \u6807\u9898\n          'bold',  // \u7C97\u4F53\n          'fontSize',  // \u5B57\u53F7\n          'fontName',  // \u5B57\u4F53\n          'italic',  // \u659C\u4F53\n          'underline',  // \u4E0B\u5212\u7EBF\n          'strikeThrough',  // \u5220\u9664\u7EBF\n          'foreColor',  // \u6587\u5B57\u989C\u8272\n          'backColor',  // \u80CC\u666F\u989C\u8272\n          'link',  // \u63D2\u5165\u94FE\u63A5\n          'list',  // \u5217\u8868\n          'justify',  // \u5BF9\u9F50\u65B9\u5F0F\n          'quote',  // \u5F15\u7528\n          'emoticon',  // \u8868\u60C5\n          'image',  // \u63D2\u5165\u56FE\u7247\n          'table',  // \u8868\u683C\n          // 'video',  // \u63D2\u5165\u89C6\u9891\n          'code',  // \u63D2\u5165\u4EE3\u7801\n          'undo',  // \u64A4\u9500\n          'redo',  // \u91CD\u590D\n          'splitLine',\n          'insertOrderedList', // \u6709\u5E8F\u5217\u8868\n          'insertUnorderedList', // \u65E0\u5E8F\u5217\u8868\n          // 'lineHeight'\n        ]\n        // editor.txt.html('<p>\u8FD9\u91CC\u662F\u4F60\u8BBE\u7F6E\u7684\u9ED8\u8BA4\u5185\u5BB9</p>')\n        editor.create()\n        document.querySelector('.w-e-toolbar').classList.add('custom-toolbar');\n        var div = document.getElementById('text-center');\n        var input = document.createElement('input');\n        // \u6B65\u9AA4 1: \u521B\u5EFAMutationObserver\u5B9E\u4F8B\n        const observer = new MutationObserver((mutationsList, observer) => {\n            const htmlContent = editor.txt.html();\n            console.log(8888888)\n            console.log(htmlContent)\n            for(let mutation of mutationsList) {\n                if (mutation.type === 'childList') { // \u5B50\u8282\u70B9\u53D8\u5316\n                    input.type = 'text'; // \u6216\u8005 'password', 'checkbox' \u7B49\n                    input.name = 'communities_collection[body_markdown]';\n                    input.type = 'hidden';\n                    input.id = 'editPostValue';\n                    input.value = htmlContent;\n                    div.appendChild(input);\n                } else if (mutation.type === 'attributes') { // \u5C5E\u6027\u53D8\u5316\n                    input.type = 'text'; // \u6216\u8005 'password', 'checkbox' \u7B49\n                    input.name = 'communities_collection[body_markdown]';\n                    input.type = 'hidden';\n                    input.id = 'editPostValue';\n                    input.value = htmlContent;\n                    div.appendChild(input);\n                } else if (mutation.type === 'characterData') { // \u6587\u672C\u5185\u5BB9\u53D8\u5316\n                    input.type = 'text'; // \u6216\u8005 'password', 'checkbox' \u7B49\n                    input.name = 'communities_collection[body_markdown]';\n                    input.type = 'hidden';\n                    input.id = 'editPostValue';\n                    input.value = htmlContent;\n                    div.appendChild(input);\n                }\n            }\n        });\n         \n        // \u6B65\u9AA4 2: \u914D\u7F6E\u89C2\u5BDF\u9009\u9879\n        const config = { attributes: true, childList: true, characterData: true, subtree: true }; // subtree: true \u8868\u793A\u89C2\u5BDF\u76EE\u6807\u8282\u70B9\u7684\u5B50\u6811\u7684\u6240\u6709\u53D8\u52A8\n         \n        // \u6B65\u9AA4 3: \u6307\u5B9A\u89C2\u5BDF\u76EE\u6807\n        const targetNodeb = document.getElementById('editor-article'); // \u83B7\u53D6\u76EE\u6807\u8282\u70B9\n        if (targetNodeb) {\n            // \u6B65\u9AA4 4: \u5F00\u59CB\u89C2\u5BDF\n            observer.observe(targetNodeb, config);\n        } else {\n            console.log('Target element not found.');\n        }\n\n      })\n     // \u904D\u5386\u8FD9\u4E9B\u5143\u7D20\u5E76\u66F4\u65B0\u5B83\u4EEC\u7684data-title\u5C5E\u6027\n      fetch('/app/users/users/get_language', {\n        method: 'GET',\n        headers: {\n          'Content-Type': 'application/json',\n          'Accept': 'application/json'\n        }\n      })\n      .then(response => response.json())\n      .then(data => {\n        console.log(data.locale); // \u8F93\u51FA\u5F53\u524D\u7684\u8BED\u8A00\u8BBE\u7F6E\uFF0C\u5982 \"en\" \u6216 \"zh-CN\"\n        if(data.locale === 'en'){\n          var menus = {\u6807\u9898: 'Title', \u52A0\u7C97: 'Bold', \u5B57\u53F7: 'Front size', \u5B57\u4F53: 'Format', \u659C\u4F53: 'Italic', \u4E0B\u5212\u7EBF: 'Underline', \u5220\u9664\u7EBF: 'Strikethrough', \u6587\u5B57\u989C\u8272: 'Text color', \u80CC\u666F\u8272: 'Fill color',\n            \u94FE\u63A5: 'Link', \u5E8F\u5217: 'Sequence',\u5BF9\u9F50: 'Align',\u5F15\u7528: 'Cite',\u8868\u60C5: 'Emoji',\u56FE\u7247:'Photo', \u8868\u683C: 'Table', \u4EE3\u7801: 'Coding',\u64A4\u9500: 'Undo',\u6062\u590D: 'Resume',\u5206\u5272\u7EBF: 'Divider line',\u5168\u5C4F: 'Full screen'}\n          const textsToTranslate = document.querySelectorAll('.w-e-dp-title, .w-e-list p:not(:has(i))');\n\n          const elements = document.querySelectorAll('[data-title]');\n          elements.forEach(element => {\n\n            console.log(element.getAttribute('data-title'));\n            // if(element.getAttribute('data-title') === '\u52A0\u7C97'){\n              element.setAttribute('data-title', menus[element.getAttribute('data-title')]);\n            // }\n            \n          });\n          // ==========\n          document.querySelector('.w-e-menu[data-title=\"Title\"]').addEventListener('click', function() {\n            // \u8F6C\u6362\u6807\u9898\u8BBE\u7F6E\u83DC\u5355\u6587\u672C\n            this.querySelector('.w-e-dp-title').textContent = 'Header Settings';\n            \n            // \u8F6C\u6362\u5404\u7EA7\u6807\u9898\u9009\u9879\n            this.querySelectorAll('.w-e-item').forEach(item => {\n              const text = item.textContent;\n              switch(text) {\n                case '\u6B63\u6587': item.textContent = 'Paragraph'; break;\n              }\n            });\n          });\n          // ==========\n          document.querySelector('.w-e-menu[data-title=\"Format\"]').addEventListener('click', function() {\n            // \u7FFB\u8BD1\u8BBE\u7F6E\u5B57\u4F53\u83DC\u5355\u6807\u9898\n            const title = this.querySelector('.w-e-dp-title');\n            if (title.textContent === '\u8BBE\u7F6E\u5B57\u4F53') {\n              title.textContent = 'Font Style';\n            }\n\n            // \u7FFB\u8BD1\u6240\u6709\u5B57\u4F53\u9009\u9879\uFF08\u4FDD\u7559\u82F1\u6587\u5B57\u4F53\u539F\u540D\uFF09\n            const fontItems = this.querySelectorAll('.w-e-item p');\n            fontItems.forEach(item => {\n              const chineseFont = item.textContent.trim();\n              switch(chineseFont) {\n                case '\u9ED1\u4F53': item.textContent = 'SimHei'; break;\n                case '\u4EFF\u5B8B': item.textContent = 'FangSong'; break;\n                case '\u6977\u4F53': item.textContent = 'KaiTi'; break;\n                case '\u6807\u6977\u4F53': item.textContent = 'DFKai-SB'; break;\n                case '\u534E\u6587\u4EFF\u5B8B': item.textContent = 'STFangsong'; break;\n                case '\u534E\u6587\u6977\u4F53': item.textContent = 'STKaiti'; break;\n                case '\u5B8B\u4F53': item.textContent = 'SimSun'; break;\n                case '\u5FAE\u8F6F\u96C5\u9ED1': item.textContent = 'Microsoft YaHei'; break;\n                // \u82F1\u6587\u5B57\u4F53\u4FDD\u6301\u4E0D\u53D8\n                default: if (/^[A-Z]/.test(chineseFont)) return;\n              }\n            });\n          });\n          // ==========\n          document.querySelector('.w-e-menu[data-title=\"Text color\"]').addEventListener('click', function() {\n            // \u7FFB\u8BD1\u83DC\u5355\u6807\u9898\n            const title = this.querySelector('.w-e-dp-title');\n            if (title.textContent === '\u6587\u5B57\u989C\u8272') {\n              title.textContent = 'Text Color';\n            }\n          });\n          // ==========\n          document.querySelector('.w-e-menu[data-title=\"Fill color\"]').addEventListener('click', function() {\n            // \u7FFB\u8BD1\u83DC\u5355\u6807\u9898\n            const title = this.querySelector('.w-e-dp-title');\n            if (title.textContent === '\u80CC\u666F\u989C\u8272') {\n              title.textContent = 'Background Color';\n            }\n          });\n\n          // ==========\n          document.querySelector('.w-e-menu[data-title=\"Link\"]').addEventListener('click', function() {\n            // \u7FFB\u8BD1\u9762\u677F\u6807\u9898\n            const panelTitle = this.querySelector('.w-e-panel-tab-title li.w-e-active');\n            if (panelTitle.textContent === '\u94FE\u63A5') {\n              panelTitle.textContent = 'Link';\n            }\n            \n            // \u7FFB\u8BD1\u8F93\u5165\u6846\u5360\u4F4D\u7B26\n            const textInput = document.querySelector('[id^=\"input-text\"]');\n            textInput.placeholder = 'Link Text';\n            \n            // const urlInput = document.getElementById('input-link04614271802658232');\n            const urlInput = document.querySelector('[id^=\"input-link\"]');\n            urlInput.placeholder = 'e.g. https://...';\n            \n            // \u7FFB\u8BD1\u6309\u94AE\u6587\u672C\n            // const insertBtn = document.getElementById('btn-ok5853955115153426');\n            const insertBtn = document.querySelector('[id^=\"btn-ok\"]');\n            console.log(insertBtn)\n            insertBtn.textContent = 'Insert';\n            \n            // const removeBtn = document.getElementById('btn-del2670523184837704');\n            const removeBtn = document.querySelector('[id^=\"btn-del\"]');\n            removeBtn.textContent = 'Remove Link';\n          });\n\n          // ==========\n          // \u83B7\u53D6Align\u83DC\u5355\u5143\u7D20\n          const alignMenu = document.querySelector('div[data-title=\"Align\"]');\n\n          // \u6DFB\u52A0\u70B9\u51FB\u4E8B\u4EF6\n          alignMenu.addEventListener('click', function(e) {\n            const title = this.querySelector('.w-e-dp-title');\n            title.textContent = 'Alignment';\n              // \u786E\u4FDD\u70B9\u51FB\u7684\u662F\u83DC\u5355\u672C\u8EAB\u800C\u4E0D\u662F\u5B50\u5143\u7D20\n              const listItems = this.querySelectorAll('.w-e-item p');\n                  \n              // \u66FF\u6362\u6587\u672C\u5185\u5BB9\n              listItems.forEach(item => {\n                  const chineseText = item.textContent.trim();\n                  const englishText = {\n                      \"\u9760\u5DE6\": \"Left\",\n                      \"\u5C45\u4E2D\": \"Center\",\n                      \"\u9760\u53F3\": \"Right\",\n                      \"\u4E24\u7AEF\": \"Justify\"\n                  }[chineseText];\n                  \n                  if (englishText) {\n                      item.textContent = englishText;\n                  }\n              });\n          });\n          // ==========\n\n          // \u83B7\u53D6Emoji\u83DC\u5355\u5143\u7D20\n          const emojiMenu = document.querySelector('[data-title=\"Emoji\"]');\n\n          // \u6DFB\u52A0\u70B9\u51FB\u4E8B\u4EF6\n          emojiMenu.addEventListener('click', function() {\n            // \u8F6C\u6362\u6807\u9898\u6587\u672C\n            this.setAttribute('data-title', 'Emoji');\n            // \u8F6C\u6362\u56FE\u6807\u6587\u672C\n            this.querySelector('.w-e-icon-happy').title = 'Happy';\n            // \u8F6C\u6362\u9762\u677F\u5173\u95ED\u6309\u94AE\u6587\u672C\n            this.querySelector('.w-e-icon-close').title = 'Close';\n            // \u8F6C\u6362\u6807\u7B7E\u6587\u672C\n            this.querySelector('.w-e-active').textContent = 'Emoticons';\n            this.querySelectorAll('.w-e-item').forEach(item => {\n              item.textContent = item.textContent.replace('\u8868\u60C5', 'Emoticons');\n              item.textContent = item.textContent.replace('\u624B\u52BF', 'Gestures');\n            });\n          });\n\n          // ===========\n\n          // \u83B7\u53D6Photo\u83DC\u5355\u5143\u7D20\n          const photoMenu = document.querySelector('[data-title=\"Photo\"]');\n\n          // \u6DFB\u52A0\u70B9\u51FB\u4E8B\u4EF6\n          photoMenu.addEventListener('click', function() {\n            // \u8F6C\u6362\u4E3B\u6807\u9898\n            this.setAttribute('data-title', 'Photo');\n            \n            // \u8F6C\u6362\u56FE\u6807\u6587\u672C\n            this.querySelector('.w-e-icon-image').title = 'Image';\n            this.querySelector('.w-e-icon-upload2').title = 'Upload';\n            this.querySelector('.w-e-icon-close').title = 'Close';\n            \n            // \u8F6C\u6362\u9762\u677F\u6807\u7B7E\u6587\u672C\n            this.querySelector('.w-e-active').textContent = 'Upload Image';\n            this.querySelectorAll('.w-e-item').forEach(item => {\n              item.textContent = item.textContent.replace('\u4E0A\u4F20\u56FE\u7247', 'Upload Image');\n              item.textContent = item.textContent.replace('\u7F51\u7EDC\u56FE\u7247', 'Web Images');\n            });\n            \n            // \u8F6C\u6362\u8F93\u5165\u6846\u5360\u4F4D\u7B26\n            // this.querySelector('#up-file-id5487433074674727').placeholder = 'Select images (jpg/jpeg/png/gif/bmp)';\n            this.querySelector('[id^=\"up-file-id\"]').placeholder = 'Select images (jpg/jpeg/png/gif/bmp)';\n            // this.querySelector('#input-link-url5635545995570673').placeholder = 'Image URL';\n            this.querySelector('[id^=\"input-link-url\"]').placeholder = 'Image URL';\n            // this.querySelector('#input-link-url-alt5722038216273467').placeholder = 'Image Caption';\n            this.querySelector('[id^=\"input-link-url-alt\"]').placeholder = 'Image Caption';\n            // this.querySelector('#input-link-url-href8356679490838893').placeholder = 'Link URL';\n            this.querySelector('[id^=\"input-link-url-href\"]').placeholder = 'Link URL';\n            \n            // \u8F6C\u6362\u6309\u94AE\u6587\u672C\n            // this.querySelector('#btn-link004943284596178543').textContent = 'Insert';\n            // this.querySelector('[id^=\"btn-link\"]').placeholder = 'Insert';\n            document.querySelector('[id^=\"btn-link\"]').textContent = 'Insert';\n            // console.log(insertBtn)\n            // insertBtn.textContent = 'Insert';\n          });\n\n          // =================\n\n          document.querySelectorAll('[data-title=\"Table\"]').forEach(tableMenu => {\n              tableMenu.addEventListener('click', function() {\n                  // \u66FF\u6362\u9762\u677F\u6807\u9898\n                  this.querySelector('.w-e-panel-tab-title li').textContent = 'Insert Table';\n                  \n                  // \u66FF\u6362\u8868\u683C\u521B\u5EFA\u754C\u9762\u6587\u672C\n                  const panelContent = this.querySelector('.w-e-panel-tab-content');\n                  panelContent.querySelector('.w-e-table span:first-child').textContent = 'Create';\n                  panelContent.querySelector('.w-e-table span:nth-child(3)').textContent = 'columns';\n                  panelContent.querySelector('.w-e-table span:nth-child(5)').textContent = 'columnar table';\n                  \n                  // \u66FF\u6362\u6309\u94AE\u6587\u672C\n                  panelContent.querySelector('.right').textContent = 'Insert';\n              });\n          });\n\n          // ==========\n          document.querySelector('.w-e-menu[data-title=\"Front size\"]').addEventListener('click', function() {\n            // \u83B7\u53D6\u4E0B\u62C9\u5217\u8868\u5143\u7D20\n            const dropList = this.querySelector('.w-e-droplist');\n            \n            // \u7FFB\u8BD1\u6807\u9898\u6587\u672C\n            const title = dropList.querySelector('.w-e-dp-title');\n            title.textContent = 'Font Size';\n          });\n          // ===========\n\n          document.querySelectorAll('[data-title=\"Coding\"]').forEach(codingMenu => {\n              codingMenu.addEventListener('click', function() {\n                  // \u66FF\u6362\u9762\u677F\u6807\u9898\n                  this.querySelector('.w-e-panel-tab-title li').textContent = 'Insert Code';\n                  \n                  // \u66FF\u6362\u6309\u94AE\u6587\u672C\n                  this.querySelector('.right').textContent = 'Insert';\n              });\n          });\n\n          // ==========\n          document.querySelector('.w-e-menu[data-title=\"Sequence\"]').addEventListener('click', function(event) {\n              // \u83B7\u53D6\u4E0B\u62C9\u5217\u8868\u5143\u7D20\n              const droplist = this.querySelector('.w-e-droplist');\n              console.log(929292929)\n              // \u66F4\u65B0\u6807\u9898\n              droplist.querySelector('.w-e-dp-title').textContent = 'Sequence';\n              \n              // \u66F4\u65B0\u5217\u8868\u9879\n              droplist.querySelectorAll('.w-e-item').forEach(item => {\n                item.querySelector('p').textContent = item.querySelector('p').textContent\n                  .replace('\u65E0\u5E8F\u5217\u8868', 'Unordered List')\n                  .replace('\u6709\u5E8F\u5217\u8868', 'Ordered List');\n              });\n          });\n          // ============\n        }\n\n      })\n      .catch(error => console.error('Error:', error));\n    });\n  }\n\n  wangeditChange(){\n   // \u904D\u5386\u8FD9\u4E9B\u5143\u7D20\u5E76\u66F4\u65B0\u5B83\u4EEC\u7684data-title\u5C5E\u6027\n    console.log(editor.config.lang)\n    fetch('/app/users/users/get_language', {\n      method: 'GET',\n      headers: {\n        'Content-Type': 'application/json',\n        'Accept': 'application/json'\n      }\n    })\n    .then(response => response.json())\n    .then(data => {\n      console.log(data.locale); // \u8F93\u51FA\u5F53\u524D\u7684\u8BED\u8A00\u8BBE\u7F6E\uFF0C\u5982 \"en\" \u6216 \"zh-CN\"\n      const elements = document.querySelectorAll('[data-title]');\n      elements.forEach(element => {\n\n        console.log(element.getAttribute('data-title'));\n        if(element.getAttribute('data-title') === '\u7C97\u4F53'){\n          element.setAttribute('data-title', \"123\");\n        }\n        \n      });\n    })\n    .catch(error => console.error('Error:', error));\n  }\n  initEditorToolbar(toolbarDom) {\n    console.log('toolbarDom')\n    const buttons = toolbarDom.querySelectorAll('span.btn');\n    const controller = this;\n    buttons.forEach((button) => {\n      button.addEventListener('click', function(e) {\n        const cmd = e.currentTarget.dataset.cmd;\n        if (cmd) controller.editor[cmd]();\n      });\n    });\n  }\n\n\n  submitPost(e) {\n    e.preventDefault();\n    if (!this.validationForm()) return;\n    const button = e.currentTarget;\n    button.setAttribute(\"data-kt-indicator\", \"on\");\n    button.disabled = true;\n    const controller = this;\n    const inModal = this.inModalValue;\n    function handleSubmitEnd() {\n      button.disabled = false;\n      button.removeAttribute(\"data-kt-indicator\");\n      localStorage.removeItem('post-draft');\n      document.removeEventListener(\"turbo:submit-end\", handleSubmitEnd);\n      if (inModal) {\n        // close modal\n        window.dispatchEvent(new CustomEvent('modal:close'));\n\n      }\n    }\n    setTimeout(function() {\n      controller.socialFeedPostFormTarget.requestSubmit();\n      document.addEventListener(\"turbo:submit-end\", handleSubmitEnd);\n    }, 2000,{once: true});\n  }\n\n  emojiToolbarExternalAction(e) {\n    tippy(e.currentTarget, {\n      appendTo: document.body,\n      content: this.initEmojiPicker(),\n      interactive: true,\n      trigger: 'manual',\n      placement: 'bottom-start',\n      showOnCreate: true,\n      onHidden(instance) {\n        instance.destroy();\n      }\n    });\n  }\n\n  toolbarExternalAction(e) {\n    e.preventDefault();\n    const button = e.currentTarget;\n    const targetName = button.dataset.target;\n    const target = this.targets.find(targetName);\n    button.classList.toggle('show');\n    target.classList.toggle('show');\n    this.toolbarAttachmentViewToggle();\n  }\n\n  toolbarAttachmentViewToggle() {\n    const elements = [this.imagesPanelTarget, this.filesPanelTarget];\n    if (elements.some(element => element.classList.contains('show'))) {\n      this.socialFeedPostAttachmentViewTarget.classList.add('show');\n    }\n    if (elements.every(element => !element.classList.contains('show'))) {\n      this.socialFeedPostAttachmentViewTarget.classList.remove('show');\n    }\n  }\n\n  handleEditorViewUpdate = (viewUpdate) => {\n    this.updateContent(viewUpdate);\n    this.doc = this.getMarkdownContent(viewUpdate);\n    try {\n      localStorage.setItem('post-draft',this.doc);\n    } catch (e) {\n      console.error('localStorage is not available:', e);\n    }\n  }\n\n  handleEditorViewDropOrPasteFile = (event) => {\n    let files;\n    switch (event.type) {\n      case 'drop':\n        files = Array.from(event.dataTransfer.files);\n        break;\n      case 'paste':\n        files = Array.from(event.clipboardData.files);\n        break;\n      default:\n        return;\n    }\n    if (files.length === 0) return;\n    console.log('handleEditorViewDropOrPasteFile', event);\n    event.preventDefault();\n    files.forEach(file => this.handleFile(file));\n  };\n\n  handleFile = (file) => {\n    console.log('Adding file:', file);\n\n    const controller = this;\n    const isImage = file.type.startsWith('image');\n    const target = isImage ? 'imagesPanel' : 'filesPanel';\n    const pond = isImage ? this.imagesPond : this.filesPond;\n\n    const buttons = controller.editorToolbarTarget.querySelectorAll(`span.btn[data-target='${target}']`);\n    buttons.forEach(button => {\n      const targetName = button.dataset.target;\n      const target = controller.targets.find(targetName);\n      console.log('target', target);\n      console.log('targetName', targetName);\n      target.classList.add('show');\n      button.classList.add('show');\n    });\n    controller.toolbarAttachmentViewToggle();\n    pond.addFile(file).catch(error => console.log('FilePond error while adding file', error));\n  };\n\n  // \u83B7\u53D6 CodeMirror \u7F16\u8F91\u5668\u7684\u5185\u5BB9\n  getMarkdownContent(editorView) {\n    const doc = editorView.state.doc;\n    return doc.toString();\n  }\n\n  // \u5C06\u5185\u5BB9\u5B58\u50A8\u5728\u8F93\u5165\u5143\u7D20\u4E2D\n   setContentToInput(inputSelector, content) {\n    const inputDom = this.socialFeedPostFormTarget.querySelector(inputSelector);\n    inputDom.value = content;\n  }\n\n   updateContent(editorView) {\n    const markdown = this.getMarkdownContent(editorView);\n    this.setContentToInput('input[name=\"post[body_markdown]\"]', markdown);\n  }\n\n  initEmojiPicker() {\n    const theme = KTThemeMode.getMode();\n    const controller = this;\n    const pickerOptions = {\n      onEmojiSelect: (emoji,e) => {\n        const emojiText =emoji.shortcodes;\n        controller.editor.insertBlockCommand(emojiText);\n      },\n      theme: theme,\n    }\n    return new Picker(pickerOptions);\n  }\n\n  initTagsPanel(targetDom) {\n    this.tagify = GairdaoController.initTagsPanel(targetDom.children[0], true );\n  }\n  initImagesPanel(targetDom) {\n    const dom = targetDom.querySelector('input[name=\"post[images][]\"]')\n    this.imagesPond = FilePondRails.create(dom,{\n      maxFileSize: 2*1000*1000,\n      maxFiles: 10,\n      labelIdle:'<i class=\"ki-outline ki-picture text-warning \"></i> Drag & Drop Images (Max. 10) or <span class=\"filepond--label-action\">Browse</span>',\n      allowImagePreview: true,\n    });\n  }\n\n  initFilesPanel(targetDom) {\n    const dom = targetDom.querySelector('input[name=\"post[files][]\"]')\n    this.filesPond = FilePondRails.create(dom, {\n      acceptedFileTypes: ['application/pdf'],\n      labelIdle:'<i class=\"ki-outline ki-document text-primary \"></i> Drag & Drop PDFs (Max. 5) or <span class=\"filepond--label-action\">Browse</span>',\n      maxFiles: 5,\n      maxFileSize: 5*1000*1000,\n    });\n  }\n  initSwitchThemeMode() {\n    const mode = KTThemeMode.getMode();\n    const controller = this;\n    // \u8F7D\u5165\u7684\u65F6\u5019\u5E94\u7528\u5F53\u524D\u7684\u4E3B\u9898\u6A21\u5F0F\n    controller.editor.switchCodeMirrorThemeMode(mode === \"dark\")\n    KTThemeMode.on(\"kt.thememode.change\", function() {\n      const changeToMode = KTThemeMode.getMode();\n      controller.editor.switchCodeMirrorThemeMode(changeToMode === \"dark\")\n    });\n  }\n\n  filePondBindEvents(){\n    document.addEventListener('FilePond:processfilestart', this.filePondProcessfilestart.bind(this));\n    document.addEventListener('FilePond:processfile', this.filePondProcessfiles.bind(this));\n  }\n\n  filePondUnBindEvents(){\n    document.removeEventListener('FilePond:processfilestart', this.filePondProcessfilestart);\n    document.removeEventListener('FilePond:processfile', this.filePondProcessfiles);\n  }\n\n  filePondProcessfilestart(e) {\n    console.log('FilePond ready for use', e.detail);\n    this.socialFeedsPostBtnTarget.setAttribute(\"data-kt-indicator\", \"on\");\n    // get create method reference\n  }\n\n  filePondProcessfiles(e) {\n    console.log('FilePond ready for use', e.detail);\n    this.socialFeedsPostBtnTarget.removeAttribute(\"data-kt-indicator\");\n    // get create method reference\n  }\n\n\n  validationForm() {\n    // validate doc is not null\n    if (this.doc.toString().length === 0) {\n      this.editorPanelTarget.classList.add('border-danger');\n      this.editorPanelTarget.classList.remove('border-gray-300');\n      // this.editorPanelTarget.setAttribute('title', 'Please enter content');\n      const tooltip = new window.bootstrap.Tooltip(this.editorPanelTarget);\n      tooltip.show();\n      const controller = this;\n      setTimeout(function() {\n        tooltip.hide();\n        tooltip.disable();\n        controller.editorPanelTarget.classList.remove('border-danger');\n        controller.editorPanelTarget.classList.add('border-gray-300');\n        controller.editorPanelTarget.removeAttribute('title');\n      }, 2000);\n      return false;\n    }\n    return true;\n  }\n\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n\n  static targets = [\"headerActionMenu\", \"sharesActionMenu\"]\n\n  connect() {\n    this.initUI();\n  }\n\n  disconnect() {\n    this.clearUI();\n  }\n\n  initUI() {\n    new window.KTMenu(this.headerActionMenuTarget);\n    if (this.hasSharesActionMenuTarget) {\n      new window.KTMenu(this.sharesActionMenuTarget);\n    }\n    window.refreshFsLightbox();\n  }\n\n  clearUI() {\n  }\n\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  static targets = [ \"sidebarDrawer\" ]\n  connect() {\n    this.initUI();\n  }\n\n  disconnect() {\n    this.clearUI();\n  }\n\n  initUI() {\n    if (this.sidebarDrawerTarget) {\n      const sidebarDom = this.sidebarDrawerTarget;\n      const sidebarDrawer = new KTDrawer(sidebarDom);\n    }\n  }\n\n  clearUI() {\n  }\n}\n", "var e=new Map;function t(t){var o=e.get(t);o&&o.destroy()}function o(t){var o=e.get(t);o&&o.update()}var r=null;\"undefined\"==typeof window?((r=function(e){return e}).destroy=function(e){return e},r.update=function(e){return e}):((r=function(t,o){return t&&Array.prototype.forEach.call(t.length?t:[t],function(t){return function(t){if(t&&t.nodeName&&\"TEXTAREA\"===t.nodeName&&!e.has(t)){var o,r=null,n=window.getComputedStyle(t),i=(o=t.value,function(){a({testForHeightReduction:\"\"===o||!t.value.startsWith(o),restoreTextAlign:null}),o=t.value}),l=function(o){t.removeEventListener(\"autosize:destroy\",l),t.removeEventListener(\"autosize:update\",s),t.removeEventListener(\"input\",i),window.removeEventListener(\"resize\",s),Object.keys(o).forEach(function(e){return t.style[e]=o[e]}),e.delete(t)}.bind(t,{height:t.style.height,resize:t.style.resize,textAlign:t.style.textAlign,overflowY:t.style.overflowY,overflowX:t.style.overflowX,wordWrap:t.style.wordWrap});t.addEventListener(\"autosize:destroy\",l),t.addEventListener(\"autosize:update\",s),t.addEventListener(\"input\",i),window.addEventListener(\"resize\",s),t.style.overflowX=\"hidden\",t.style.wordWrap=\"break-word\",e.set(t,{destroy:l,update:s}),s()}function a(e){var o,i,l=e.restoreTextAlign,s=void 0===l?null:l,d=e.testForHeightReduction,u=void 0===d||d,c=n.overflowY;if(0!==t.scrollHeight&&(\"vertical\"===n.resize?t.style.resize=\"none\":\"both\"===n.resize&&(t.style.resize=\"horizontal\"),u&&(o=function(e){for(var t=[];e&&e.parentNode&&e.parentNode instanceof Element;)e.parentNode.scrollTop&&t.push([e.parentNode,e.parentNode.scrollTop]),e=e.parentNode;return function(){return t.forEach(function(e){var t=e[0],o=e[1];t.style.scrollBehavior=\"auto\",t.scrollTop=o,t.style.scrollBehavior=null})}}(t),t.style.height=\"\"),i=\"content-box\"===n.boxSizing?t.scrollHeight-(parseFloat(n.paddingTop)+parseFloat(n.paddingBottom)):t.scrollHeight+parseFloat(n.borderTopWidth)+parseFloat(n.borderBottomWidth),\"none\"!==n.maxHeight&&i>parseFloat(n.maxHeight)?(\"hidden\"===n.overflowY&&(t.style.overflow=\"scroll\"),i=parseFloat(n.maxHeight)):\"hidden\"!==n.overflowY&&(t.style.overflow=\"hidden\"),t.style.height=i+\"px\",s&&(t.style.textAlign=s),o&&o(),r!==i&&(t.dispatchEvent(new Event(\"autosize:resized\",{bubbles:!0})),r=i),c!==n.overflow&&!s)){var v=n.textAlign;\"hidden\"===n.overflow&&(t.style.textAlign=\"start\"===v?\"end\":\"start\"),a({restoreTextAlign:v,testForHeightReduction:!0})}}function s(){a({testForHeightReduction:!0,restoreTextAlign:null})}}(t)}),t}).destroy=function(e){return e&&Array.prototype.forEach.call(e.length?e:[e],t),e},r.update=function(e){return e&&Array.prototype.forEach.call(e.length?e:[e],o),e});var n=r;export default n;\n", "import { Controller } from \"@hotwired/stimulus\"\nimport { get } from \"@rails/request.js\"\nimport autosize from 'autosize';\n\n\nconst commentsController = class extends Controller {\n    static targets = [\"collapse\", \"form\"]\n    static replyParamName = \"comment[parent_id]\"\n    connect() {\n        this.initUI();\n    }\n\n    disconnect() {\n        this.clearUI();\n    }\n\n    // \u8BC4\u8BBA\u63D0\u4EA4\u540E\uFF0C\u81EA\u52A8\u5C55\u5F00\u8BC4\u8BBA\u533A\n    formSubmit(e) {\n        const textarea =  this.formTarget.querySelector('textarea');\n        if (textarea.value.trim() === \"\") {\n            e.preventDefault();\n            return;\n        }\n        const commentsCollapse = this.collapseTarget;\n        commentsCollapse.classList.add('show');\n    }\n\n    initUI() {\n        // \u521D\u59CB\u5316textarea \u81EA\u52A8\u589E\u9AD8\n        if (this.hasFormTarget) {\n            const textarea =  this.formTarget.querySelector('textarea');\n            autosize(textarea);\n        }\n\n        // \u5F53<%= turbo_stream.replace %>\u66F4\u65B0DOM\u540E\uFF0CMutationObserver\u4F1A\u89E6\u53D1\u4E00\u4E2A\u56DE\u8C03\u51FD\u6570\n        this.observer = new MutationObserver((mutationsList, observer) => {\n            for(let mutation of mutationsList) {\n                if (mutation.type === 'childList') {\n                    // DOM has changed, you can get the new elements here\n                    mutation.target.querySelector('textarea') && autosize(mutation.target.querySelector('textarea'));\n                }\n            }\n        });\n        // Start observing the DOM\n        this.observer.observe(this.element, { childList: true, subtree: true });\n    }\n\n    clearUI() {\n        this.observer.disconnect();\n    }\n\n}\n\nexport default commentsController;", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  static values = { code: String }\n  connect() {\n\n  }\n\n}\n", "/*! choices.js v10.2.0 | \u00A9 2022 Josh Johnson | https://github.com/jshjohnson/Choices#readme */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Choices\"] = factory();\n\telse\n\t\troot[\"Choices\"] = factory();\n})(window, function() {\nreturn /******/ (function() { // webpackBootstrap\n/******/ \t\"use strict\";\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ 282:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports.clearChoices = exports.activateChoices = exports.filterChoices = exports.addChoice = void 0;\nvar constants_1 = __webpack_require__(883);\nvar addChoice = function (_a) {\n  var value = _a.value,\n    label = _a.label,\n    id = _a.id,\n    groupId = _a.groupId,\n    disabled = _a.disabled,\n    elementId = _a.elementId,\n    customProperties = _a.customProperties,\n    placeholder = _a.placeholder,\n    keyCode = _a.keyCode;\n  return {\n    type: constants_1.ACTION_TYPES.ADD_CHOICE,\n    value: value,\n    label: label,\n    id: id,\n    groupId: groupId,\n    disabled: disabled,\n    elementId: elementId,\n    customProperties: customProperties,\n    placeholder: placeholder,\n    keyCode: keyCode\n  };\n};\nexports.addChoice = addChoice;\nvar filterChoices = function (results) {\n  return {\n    type: constants_1.ACTION_TYPES.FILTER_CHOICES,\n    results: results\n  };\n};\nexports.filterChoices = filterChoices;\nvar activateChoices = function (active) {\n  if (active === void 0) {\n    active = true;\n  }\n  return {\n    type: constants_1.ACTION_TYPES.ACTIVATE_CHOICES,\n    active: active\n  };\n};\nexports.activateChoices = activateChoices;\nvar clearChoices = function () {\n  return {\n    type: constants_1.ACTION_TYPES.CLEAR_CHOICES\n  };\n};\nexports.clearChoices = clearChoices;\n\n/***/ }),\n\n/***/ 783:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports.addGroup = void 0;\nvar constants_1 = __webpack_require__(883);\nvar addGroup = function (_a) {\n  var value = _a.value,\n    id = _a.id,\n    active = _a.active,\n    disabled = _a.disabled;\n  return {\n    type: constants_1.ACTION_TYPES.ADD_GROUP,\n    value: value,\n    id: id,\n    active: active,\n    disabled: disabled\n  };\n};\nexports.addGroup = addGroup;\n\n/***/ }),\n\n/***/ 464:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports.highlightItem = exports.removeItem = exports.addItem = void 0;\nvar constants_1 = __webpack_require__(883);\nvar addItem = function (_a) {\n  var value = _a.value,\n    label = _a.label,\n    id = _a.id,\n    choiceId = _a.choiceId,\n    groupId = _a.groupId,\n    customProperties = _a.customProperties,\n    placeholder = _a.placeholder,\n    keyCode = _a.keyCode;\n  return {\n    type: constants_1.ACTION_TYPES.ADD_ITEM,\n    value: value,\n    label: label,\n    id: id,\n    choiceId: choiceId,\n    groupId: groupId,\n    customProperties: customProperties,\n    placeholder: placeholder,\n    keyCode: keyCode\n  };\n};\nexports.addItem = addItem;\nvar removeItem = function (id, choiceId) {\n  return {\n    type: constants_1.ACTION_TYPES.REMOVE_ITEM,\n    id: id,\n    choiceId: choiceId\n  };\n};\nexports.removeItem = removeItem;\nvar highlightItem = function (id, highlighted) {\n  return {\n    type: constants_1.ACTION_TYPES.HIGHLIGHT_ITEM,\n    id: id,\n    highlighted: highlighted\n  };\n};\nexports.highlightItem = highlightItem;\n\n/***/ }),\n\n/***/ 137:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports.setIsLoading = exports.resetTo = exports.clearAll = void 0;\nvar constants_1 = __webpack_require__(883);\nvar clearAll = function () {\n  return {\n    type: constants_1.ACTION_TYPES.CLEAR_ALL\n  };\n};\nexports.clearAll = clearAll;\nvar resetTo = function (state) {\n  return {\n    type: constants_1.ACTION_TYPES.RESET_TO,\n    state: state\n  };\n};\nexports.resetTo = resetTo;\nvar setIsLoading = function (isLoading) {\n  return {\n    type: constants_1.ACTION_TYPES.SET_IS_LOADING,\n    isLoading: isLoading\n  };\n};\nexports.setIsLoading = setIsLoading;\n\n/***/ }),\n\n/***/ 373:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\n\nvar __spreadArray = this && this.__spreadArray || function (to, from, pack) {\n  if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n    if (ar || !(i in from)) {\n      if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n      ar[i] = from[i];\n    }\n  }\n  return to.concat(ar || Array.prototype.slice.call(from));\n};\nvar __importDefault = this && this.__importDefault || function (mod) {\n  return mod && mod.__esModule ? mod : {\n    \"default\": mod\n  };\n};\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nvar deepmerge_1 = __importDefault(__webpack_require__(996));\n/* eslint-disable @typescript-eslint/no-explicit-any */\nvar fuse_js_1 = __importDefault(__webpack_require__(221));\nvar choices_1 = __webpack_require__(282);\nvar groups_1 = __webpack_require__(783);\nvar items_1 = __webpack_require__(464);\nvar misc_1 = __webpack_require__(137);\nvar components_1 = __webpack_require__(520);\nvar constants_1 = __webpack_require__(883);\nvar defaults_1 = __webpack_require__(789);\nvar utils_1 = __webpack_require__(799);\nvar reducers_1 = __webpack_require__(655);\nvar store_1 = __importDefault(__webpack_require__(744));\nvar templates_1 = __importDefault(__webpack_require__(686));\n/** @see {@link http://browserhacks.com/#hack-acea075d0ac6954f275a70023906050c} */\nvar IS_IE11 = '-ms-scroll-limit' in document.documentElement.style && '-ms-ime-align' in document.documentElement.style;\nvar USER_DEFAULTS = {};\n/**\n * Choices\n * @author Josh Johnson<josh@joshuajohnson.co.uk>\n */\nvar Choices = /** @class */function () {\n  function Choices(element, userConfig) {\n    if (element === void 0) {\n      element = '[data-choice]';\n    }\n    if (userConfig === void 0) {\n      userConfig = {};\n    }\n    var _this = this;\n    if (userConfig.allowHTML === undefined) {\n      console.warn('Deprecation warning: allowHTML will default to false in a future release. To render HTML in Choices, you will need to set it to true. Setting allowHTML will suppress this message.');\n    }\n    this.config = deepmerge_1.default.all([defaults_1.DEFAULT_CONFIG, Choices.defaults.options, userConfig],\n    // When merging array configs, replace with a copy of the userConfig array,\n    // instead of concatenating with the default array\n    {\n      arrayMerge: function (_, sourceArray) {\n        return __spreadArray([], sourceArray, true);\n      }\n    });\n    var invalidConfigOptions = (0, utils_1.diff)(this.config, defaults_1.DEFAULT_CONFIG);\n    if (invalidConfigOptions.length) {\n      console.warn('Unknown config option(s) passed', invalidConfigOptions.join(', '));\n    }\n    var passedElement = typeof element === 'string' ? document.querySelector(element) : element;\n    if (!(passedElement instanceof HTMLInputElement || passedElement instanceof HTMLSelectElement)) {\n      throw TypeError('Expected one of the following types text|select-one|select-multiple');\n    }\n    this._isTextElement = passedElement.type === constants_1.TEXT_TYPE;\n    this._isSelectOneElement = passedElement.type === constants_1.SELECT_ONE_TYPE;\n    this._isSelectMultipleElement = passedElement.type === constants_1.SELECT_MULTIPLE_TYPE;\n    this._isSelectElement = this._isSelectOneElement || this._isSelectMultipleElement;\n    this.config.searchEnabled = this._isSelectMultipleElement || this.config.searchEnabled;\n    if (!['auto', 'always'].includes(\"\".concat(this.config.renderSelectedChoices))) {\n      this.config.renderSelectedChoices = 'auto';\n    }\n    if (userConfig.addItemFilter && typeof userConfig.addItemFilter !== 'function') {\n      var re = userConfig.addItemFilter instanceof RegExp ? userConfig.addItemFilter : new RegExp(userConfig.addItemFilter);\n      this.config.addItemFilter = re.test.bind(re);\n    }\n    if (this._isTextElement) {\n      this.passedElement = new components_1.WrappedInput({\n        element: passedElement,\n        classNames: this.config.classNames,\n        delimiter: this.config.delimiter\n      });\n    } else {\n      this.passedElement = new components_1.WrappedSelect({\n        element: passedElement,\n        classNames: this.config.classNames,\n        template: function (data) {\n          return _this._templates.option(data);\n        }\n      });\n    }\n    this.initialised = false;\n    this._store = new store_1.default();\n    this._initialState = reducers_1.defaultState;\n    this._currentState = reducers_1.defaultState;\n    this._prevState = reducers_1.defaultState;\n    this._currentValue = '';\n    this._canSearch = !!this.config.searchEnabled;\n    this._isScrollingOnIe = false;\n    this._highlightPosition = 0;\n    this._wasTap = true;\n    this._placeholderValue = this._generatePlaceholderValue();\n    this._baseId = (0, utils_1.generateId)(this.passedElement.element, 'choices-');\n    /**\n     * setting direction in cases where it's explicitly set on passedElement\n     * or when calculated direction is different from the document\n     */\n    this._direction = this.passedElement.dir;\n    if (!this._direction) {\n      var elementDirection = window.getComputedStyle(this.passedElement.element).direction;\n      var documentDirection = window.getComputedStyle(document.documentElement).direction;\n      if (elementDirection !== documentDirection) {\n        this._direction = elementDirection;\n      }\n    }\n    this._idNames = {\n      itemChoice: 'item-choice'\n    };\n    if (this._isSelectElement) {\n      // Assign preset groups from passed element\n      this._presetGroups = this.passedElement.optionGroups;\n      // Assign preset options from passed element\n      this._presetOptions = this.passedElement.options;\n    }\n    // Assign preset choices from passed object\n    this._presetChoices = this.config.choices;\n    // Assign preset items from passed object first\n    this._presetItems = this.config.items;\n    // Add any values passed from attribute\n    if (this.passedElement.value && this._isTextElement) {\n      var splitValues = this.passedElement.value.split(this.config.delimiter);\n      this._presetItems = this._presetItems.concat(splitValues);\n    }\n    // Create array of choices from option elements\n    if (this.passedElement.options) {\n      this.passedElement.options.forEach(function (option) {\n        _this._presetChoices.push({\n          value: option.value,\n          label: option.innerHTML,\n          selected: !!option.selected,\n          disabled: option.disabled || option.parentNode.disabled,\n          placeholder: option.value === '' || option.hasAttribute('placeholder'),\n          customProperties: (0, utils_1.parseCustomProperties)(option.dataset.customProperties)\n        });\n      });\n    }\n    this._render = this._render.bind(this);\n    this._onFocus = this._onFocus.bind(this);\n    this._onBlur = this._onBlur.bind(this);\n    this._onKeyUp = this._onKeyUp.bind(this);\n    this._onKeyDown = this._onKeyDown.bind(this);\n    this._onClick = this._onClick.bind(this);\n    this._onTouchMove = this._onTouchMove.bind(this);\n    this._onTouchEnd = this._onTouchEnd.bind(this);\n    this._onMouseDown = this._onMouseDown.bind(this);\n    this._onMouseOver = this._onMouseOver.bind(this);\n    this._onFormReset = this._onFormReset.bind(this);\n    this._onSelectKey = this._onSelectKey.bind(this);\n    this._onEnterKey = this._onEnterKey.bind(this);\n    this._onEscapeKey = this._onEscapeKey.bind(this);\n    this._onDirectionKey = this._onDirectionKey.bind(this);\n    this._onDeleteKey = this._onDeleteKey.bind(this);\n    // If element has already been initialised with Choices, fail silently\n    if (this.passedElement.isActive) {\n      if (!this.config.silent) {\n        console.warn('Trying to initialise Choices on element already initialised', {\n          element: element\n        });\n      }\n      this.initialised = true;\n      return;\n    }\n    // Let's go\n    this.init();\n  }\n  Object.defineProperty(Choices, \"defaults\", {\n    get: function () {\n      return Object.preventExtensions({\n        get options() {\n          return USER_DEFAULTS;\n        },\n        get templates() {\n          return templates_1.default;\n        }\n      });\n    },\n    enumerable: false,\n    configurable: true\n  });\n  Choices.prototype.init = function () {\n    if (this.initialised) {\n      return;\n    }\n    this._createTemplates();\n    this._createElements();\n    this._createStructure();\n    this._store.subscribe(this._render);\n    this._render();\n    this._addEventListeners();\n    var shouldDisable = !this.config.addItems || this.passedElement.element.hasAttribute('disabled');\n    if (shouldDisable) {\n      this.disable();\n    }\n    this.initialised = true;\n    var callbackOnInit = this.config.callbackOnInit;\n    // Run callback if it is a function\n    if (callbackOnInit && typeof callbackOnInit === 'function') {\n      callbackOnInit.call(this);\n    }\n  };\n  Choices.prototype.destroy = function () {\n    if (!this.initialised) {\n      return;\n    }\n    this._removeEventListeners();\n    this.passedElement.reveal();\n    this.containerOuter.unwrap(this.passedElement.element);\n    this.clearStore();\n    if (this._isSelectElement) {\n      this.passedElement.options = this._presetOptions;\n    }\n    this._templates = templates_1.default;\n    this.initialised = false;\n  };\n  Choices.prototype.enable = function () {\n    if (this.passedElement.isDisabled) {\n      this.passedElement.enable();\n    }\n    if (this.containerOuter.isDisabled) {\n      this._addEventListeners();\n      this.input.enable();\n      this.containerOuter.enable();\n    }\n    return this;\n  };\n  Choices.prototype.disable = function () {\n    if (!this.passedElement.isDisabled) {\n      this.passedElement.disable();\n    }\n    if (!this.containerOuter.isDisabled) {\n      this._removeEventListeners();\n      this.input.disable();\n      this.containerOuter.disable();\n    }\n    return this;\n  };\n  Choices.prototype.highlightItem = function (item, runEvent) {\n    if (runEvent === void 0) {\n      runEvent = true;\n    }\n    if (!item || !item.id) {\n      return this;\n    }\n    var id = item.id,\n      _a = item.groupId,\n      groupId = _a === void 0 ? -1 : _a,\n      _b = item.value,\n      value = _b === void 0 ? '' : _b,\n      _c = item.label,\n      label = _c === void 0 ? '' : _c;\n    var group = groupId >= 0 ? this._store.getGroupById(groupId) : null;\n    this._store.dispatch((0, items_1.highlightItem)(id, true));\n    if (runEvent) {\n      this.passedElement.triggerEvent(constants_1.EVENTS.highlightItem, {\n        id: id,\n        value: value,\n        label: label,\n        groupValue: group && group.value ? group.value : null\n      });\n    }\n    return this;\n  };\n  Choices.prototype.unhighlightItem = function (item) {\n    if (!item || !item.id) {\n      return this;\n    }\n    var id = item.id,\n      _a = item.groupId,\n      groupId = _a === void 0 ? -1 : _a,\n      _b = item.value,\n      value = _b === void 0 ? '' : _b,\n      _c = item.label,\n      label = _c === void 0 ? '' : _c;\n    var group = groupId >= 0 ? this._store.getGroupById(groupId) : null;\n    this._store.dispatch((0, items_1.highlightItem)(id, false));\n    this.passedElement.triggerEvent(constants_1.EVENTS.highlightItem, {\n      id: id,\n      value: value,\n      label: label,\n      groupValue: group && group.value ? group.value : null\n    });\n    return this;\n  };\n  Choices.prototype.highlightAll = function () {\n    var _this = this;\n    this._store.items.forEach(function (item) {\n      return _this.highlightItem(item);\n    });\n    return this;\n  };\n  Choices.prototype.unhighlightAll = function () {\n    var _this = this;\n    this._store.items.forEach(function (item) {\n      return _this.unhighlightItem(item);\n    });\n    return this;\n  };\n  Choices.prototype.removeActiveItemsByValue = function (value) {\n    var _this = this;\n    this._store.activeItems.filter(function (item) {\n      return item.value === value;\n    }).forEach(function (item) {\n      return _this._removeItem(item);\n    });\n    return this;\n  };\n  Choices.prototype.removeActiveItems = function (excludedId) {\n    var _this = this;\n    this._store.activeItems.filter(function (_a) {\n      var id = _a.id;\n      return id !== excludedId;\n    }).forEach(function (item) {\n      return _this._removeItem(item);\n    });\n    return this;\n  };\n  Choices.prototype.removeHighlightedItems = function (runEvent) {\n    var _this = this;\n    if (runEvent === void 0) {\n      runEvent = false;\n    }\n    this._store.highlightedActiveItems.forEach(function (item) {\n      _this._removeItem(item);\n      // If this action was performed by the user\n      // trigger the event\n      if (runEvent) {\n        _this._triggerChange(item.value);\n      }\n    });\n    return this;\n  };\n  Choices.prototype.showDropdown = function (preventInputFocus) {\n    var _this = this;\n    if (this.dropdown.isActive) {\n      return this;\n    }\n    requestAnimationFrame(function () {\n      _this.dropdown.show();\n      _this.containerOuter.open(_this.dropdown.distanceFromTopWindow);\n      if (!preventInputFocus && _this._canSearch) {\n        _this.input.focus();\n      }\n      _this.passedElement.triggerEvent(constants_1.EVENTS.showDropdown, {});\n    });\n    return this;\n  };\n  Choices.prototype.hideDropdown = function (preventInputBlur) {\n    var _this = this;\n    if (!this.dropdown.isActive) {\n      return this;\n    }\n    requestAnimationFrame(function () {\n      _this.dropdown.hide();\n      _this.containerOuter.close();\n      if (!preventInputBlur && _this._canSearch) {\n        _this.input.removeActiveDescendant();\n        _this.input.blur();\n      }\n      _this.passedElement.triggerEvent(constants_1.EVENTS.hideDropdown, {});\n    });\n    return this;\n  };\n  Choices.prototype.getValue = function (valueOnly) {\n    if (valueOnly === void 0) {\n      valueOnly = false;\n    }\n    var values = this._store.activeItems.reduce(function (selectedItems, item) {\n      var itemValue = valueOnly ? item.value : item;\n      selectedItems.push(itemValue);\n      return selectedItems;\n    }, []);\n    return this._isSelectOneElement ? values[0] : values;\n  };\n  Choices.prototype.setValue = function (items) {\n    var _this = this;\n    if (!this.initialised) {\n      return this;\n    }\n    items.forEach(function (value) {\n      return _this._setChoiceOrItem(value);\n    });\n    return this;\n  };\n  Choices.prototype.setChoiceByValue = function (value) {\n    var _this = this;\n    if (!this.initialised || this._isTextElement) {\n      return this;\n    }\n    // If only one value has been passed, convert to array\n    var choiceValue = Array.isArray(value) ? value : [value];\n    // Loop through each value and\n    choiceValue.forEach(function (val) {\n      return _this._findAndSelectChoiceByValue(val);\n    });\n    return this;\n  };\n  /**\n   * Set choices of select input via an array of objects (or function that returns array of object or promise of it),\n   * a value field name and a label field name.\n   * This behaves the same as passing items via the choices option but can be called after initialising Choices.\n   * This can also be used to add groups of choices (see example 2); Optionally pass a true `replaceChoices` value to remove any existing choices.\n   * Optionally pass a `customProperties` object to add additional data to your choices (useful when searching/filtering etc).\n   *\n   * **Input types affected:** select-one, select-multiple\n   *\n   * @example\n   * ```js\n   * const example = new Choices(element);\n   *\n   * example.setChoices([\n   *   {value: 'One', label: 'Label One', disabled: true},\n   *   {value: 'Two', label: 'Label Two', selected: true},\n   *   {value: 'Three', label: 'Label Three'},\n   * ], 'value', 'label', false);\n   * ```\n   *\n   * @example\n   * ```js\n   * const example = new Choices(element);\n   *\n   * example.setChoices(async () => {\n   *   try {\n   *      const items = await fetch('/items');\n   *      return items.json()\n   *   } catch(err) {\n   *      console.error(err)\n   *   }\n   * });\n   * ```\n   *\n   * @example\n   * ```js\n   * const example = new Choices(element);\n   *\n   * example.setChoices([{\n   *   label: 'Group one',\n   *   id: 1,\n   *   disabled: false,\n   *   choices: [\n   *     {value: 'Child One', label: 'Child One', selected: true},\n   *     {value: 'Child Two', label: 'Child Two',  disabled: true},\n   *     {value: 'Child Three', label: 'Child Three'},\n   *   ]\n   * },\n   * {\n   *   label: 'Group two',\n   *   id: 2,\n   *   disabled: false,\n   *   choices: [\n   *     {value: 'Child Four', label: 'Child Four', disabled: true},\n   *     {value: 'Child Five', label: 'Child Five'},\n   *     {value: 'Child Six', label: 'Child Six', customProperties: {\n   *       description: 'Custom description about child six',\n   *       random: 'Another random custom property'\n   *     }},\n   *   ]\n   * }], 'value', 'label', false);\n   * ```\n   */\n  Choices.prototype.setChoices = function (choicesArrayOrFetcher, value, label, replaceChoices) {\n    var _this = this;\n    if (choicesArrayOrFetcher === void 0) {\n      choicesArrayOrFetcher = [];\n    }\n    if (value === void 0) {\n      value = 'value';\n    }\n    if (label === void 0) {\n      label = 'label';\n    }\n    if (replaceChoices === void 0) {\n      replaceChoices = false;\n    }\n    if (!this.initialised) {\n      throw new ReferenceError(\"setChoices was called on a non-initialized instance of Choices\");\n    }\n    if (!this._isSelectElement) {\n      throw new TypeError(\"setChoices can't be used with INPUT based Choices\");\n    }\n    if (typeof value !== 'string' || !value) {\n      throw new TypeError(\"value parameter must be a name of 'value' field in passed objects\");\n    }\n    // Clear choices if needed\n    if (replaceChoices) {\n      this.clearChoices();\n    }\n    if (typeof choicesArrayOrFetcher === 'function') {\n      // it's a choices fetcher function\n      var fetcher_1 = choicesArrayOrFetcher(this);\n      if (typeof Promise === 'function' && fetcher_1 instanceof Promise) {\n        // that's a promise\n        // eslint-disable-next-line no-promise-executor-return\n        return new Promise(function (resolve) {\n          return requestAnimationFrame(resolve);\n        }).then(function () {\n          return _this._handleLoadingState(true);\n        }).then(function () {\n          return fetcher_1;\n        }).then(function (data) {\n          return _this.setChoices(data, value, label, replaceChoices);\n        }).catch(function (err) {\n          if (!_this.config.silent) {\n            console.error(err);\n          }\n        }).then(function () {\n          return _this._handleLoadingState(false);\n        }).then(function () {\n          return _this;\n        });\n      }\n      // function returned something else than promise, let's check if it's an array of choices\n      if (!Array.isArray(fetcher_1)) {\n        throw new TypeError(\".setChoices first argument function must return either array of choices or Promise, got: \".concat(typeof fetcher_1));\n      }\n      // recursion with results, it's sync and choices were cleared already\n      return this.setChoices(fetcher_1, value, label, false);\n    }\n    if (!Array.isArray(choicesArrayOrFetcher)) {\n      throw new TypeError(\".setChoices must be called either with array of choices with a function resulting into Promise of array of choices\");\n    }\n    this.containerOuter.removeLoadingState();\n    this._startLoading();\n    choicesArrayOrFetcher.forEach(function (groupOrChoice) {\n      if (groupOrChoice.choices) {\n        _this._addGroup({\n          id: groupOrChoice.id ? parseInt(\"\".concat(groupOrChoice.id), 10) : null,\n          group: groupOrChoice,\n          valueKey: value,\n          labelKey: label\n        });\n      } else {\n        var choice = groupOrChoice;\n        _this._addChoice({\n          value: choice[value],\n          label: choice[label],\n          isSelected: !!choice.selected,\n          isDisabled: !!choice.disabled,\n          placeholder: !!choice.placeholder,\n          customProperties: choice.customProperties\n        });\n      }\n    });\n    this._stopLoading();\n    return this;\n  };\n  Choices.prototype.clearChoices = function () {\n    this._store.dispatch((0, choices_1.clearChoices)());\n    return this;\n  };\n  Choices.prototype.clearStore = function () {\n    this._store.dispatch((0, misc_1.clearAll)());\n    return this;\n  };\n  Choices.prototype.clearInput = function () {\n    var shouldSetInputWidth = !this._isSelectOneElement;\n    this.input.clear(shouldSetInputWidth);\n    if (!this._isTextElement && this._canSearch) {\n      this._isSearching = false;\n      this._store.dispatch((0, choices_1.activateChoices)(true));\n    }\n    return this;\n  };\n  Choices.prototype._render = function () {\n    if (this._store.isLoading()) {\n      return;\n    }\n    this._currentState = this._store.state;\n    var stateChanged = this._currentState.choices !== this._prevState.choices || this._currentState.groups !== this._prevState.groups || this._currentState.items !== this._prevState.items;\n    var shouldRenderChoices = this._isSelectElement;\n    var shouldRenderItems = this._currentState.items !== this._prevState.items;\n    if (!stateChanged) {\n      return;\n    }\n    if (shouldRenderChoices) {\n      this._renderChoices();\n    }\n    if (shouldRenderItems) {\n      this._renderItems();\n    }\n    this._prevState = this._currentState;\n  };\n  Choices.prototype._renderChoices = function () {\n    var _this = this;\n    var _a = this._store,\n      activeGroups = _a.activeGroups,\n      activeChoices = _a.activeChoices;\n    var choiceListFragment = document.createDocumentFragment();\n    this.choiceList.clear();\n    if (this.config.resetScrollPosition) {\n      requestAnimationFrame(function () {\n        return _this.choiceList.scrollToTop();\n      });\n    }\n    // If we have grouped options\n    if (activeGroups.length >= 1 && !this._isSearching) {\n      // If we have a placeholder choice along with groups\n      var activePlaceholders = activeChoices.filter(function (activeChoice) {\n        return activeChoice.placeholder === true && activeChoice.groupId === -1;\n      });\n      if (activePlaceholders.length >= 1) {\n        choiceListFragment = this._createChoicesFragment(activePlaceholders, choiceListFragment);\n      }\n      choiceListFragment = this._createGroupsFragment(activeGroups, activeChoices, choiceListFragment);\n    } else if (activeChoices.length >= 1) {\n      choiceListFragment = this._createChoicesFragment(activeChoices, choiceListFragment);\n    }\n    // If we have choices to show\n    if (choiceListFragment.childNodes && choiceListFragment.childNodes.length > 0) {\n      var activeItems = this._store.activeItems;\n      var canAddItem = this._canAddItem(activeItems, this.input.value);\n      // ...and we can select them\n      if (canAddItem.response) {\n        // ...append them and highlight the first choice\n        this.choiceList.append(choiceListFragment);\n        this._highlightChoice();\n      } else {\n        var notice = this._getTemplate('notice', canAddItem.notice);\n        this.choiceList.append(notice);\n      }\n    } else {\n      // Otherwise show a notice\n      var dropdownItem = void 0;\n      var notice = void 0;\n      if (this._isSearching) {\n        notice = typeof this.config.noResultsText === 'function' ? this.config.noResultsText() : this.config.noResultsText;\n        dropdownItem = this._getTemplate('notice', notice, 'no-results');\n      } else {\n        notice = typeof this.config.noChoicesText === 'function' ? this.config.noChoicesText() : this.config.noChoicesText;\n        dropdownItem = this._getTemplate('notice', notice, 'no-choices');\n      }\n      this.choiceList.append(dropdownItem);\n    }\n  };\n  Choices.prototype._renderItems = function () {\n    var activeItems = this._store.activeItems || [];\n    this.itemList.clear();\n    // Create a fragment to store our list items\n    // (so we don't have to update the DOM for each item)\n    var itemListFragment = this._createItemsFragment(activeItems);\n    // If we have items to add, append them\n    if (itemListFragment.childNodes) {\n      this.itemList.append(itemListFragment);\n    }\n  };\n  Choices.prototype._createGroupsFragment = function (groups, choices, fragment) {\n    var _this = this;\n    if (fragment === void 0) {\n      fragment = document.createDocumentFragment();\n    }\n    var getGroupChoices = function (group) {\n      return choices.filter(function (choice) {\n        if (_this._isSelectOneElement) {\n          return choice.groupId === group.id;\n        }\n        return choice.groupId === group.id && (_this.config.renderSelectedChoices === 'always' || !choice.selected);\n      });\n    };\n    // If sorting is enabled, filter groups\n    if (this.config.shouldSort) {\n      groups.sort(this.config.sorter);\n    }\n    groups.forEach(function (group) {\n      var groupChoices = getGroupChoices(group);\n      if (groupChoices.length >= 1) {\n        var dropdownGroup = _this._getTemplate('choiceGroup', group);\n        fragment.appendChild(dropdownGroup);\n        _this._createChoicesFragment(groupChoices, fragment, true);\n      }\n    });\n    return fragment;\n  };\n  Choices.prototype._createChoicesFragment = function (choices, fragment, withinGroup) {\n    var _this = this;\n    if (fragment === void 0) {\n      fragment = document.createDocumentFragment();\n    }\n    if (withinGroup === void 0) {\n      withinGroup = false;\n    }\n    // Create a fragment to store our list items (so we don't have to update the DOM for each item)\n    var _a = this.config,\n      renderSelectedChoices = _a.renderSelectedChoices,\n      searchResultLimit = _a.searchResultLimit,\n      renderChoiceLimit = _a.renderChoiceLimit;\n    var filter = this._isSearching ? utils_1.sortByScore : this.config.sorter;\n    var appendChoice = function (choice) {\n      var shouldRender = renderSelectedChoices === 'auto' ? _this._isSelectOneElement || !choice.selected : true;\n      if (shouldRender) {\n        var dropdownItem = _this._getTemplate('choice', choice, _this.config.itemSelectText);\n        fragment.appendChild(dropdownItem);\n      }\n    };\n    var rendererableChoices = choices;\n    if (renderSelectedChoices === 'auto' && !this._isSelectOneElement) {\n      rendererableChoices = choices.filter(function (choice) {\n        return !choice.selected;\n      });\n    }\n    // Split array into placeholders and \"normal\" choices\n    var _b = rendererableChoices.reduce(function (acc, choice) {\n        if (choice.placeholder) {\n          acc.placeholderChoices.push(choice);\n        } else {\n          acc.normalChoices.push(choice);\n        }\n        return acc;\n      }, {\n        placeholderChoices: [],\n        normalChoices: []\n      }),\n      placeholderChoices = _b.placeholderChoices,\n      normalChoices = _b.normalChoices;\n    // If sorting is enabled or the user is searching, filter choices\n    if (this.config.shouldSort || this._isSearching) {\n      normalChoices.sort(filter);\n    }\n    var choiceLimit = rendererableChoices.length;\n    // Prepend placeholeder\n    var sortedChoices = this._isSelectOneElement ? __spreadArray(__spreadArray([], placeholderChoices, true), normalChoices, true) : normalChoices;\n    if (this._isSearching) {\n      choiceLimit = searchResultLimit;\n    } else if (renderChoiceLimit && renderChoiceLimit > 0 && !withinGroup) {\n      choiceLimit = renderChoiceLimit;\n    }\n    // Add each choice to dropdown within range\n    for (var i = 0; i < choiceLimit; i += 1) {\n      if (sortedChoices[i]) {\n        appendChoice(sortedChoices[i]);\n      }\n    }\n    return fragment;\n  };\n  Choices.prototype._createItemsFragment = function (items, fragment) {\n    var _this = this;\n    if (fragment === void 0) {\n      fragment = document.createDocumentFragment();\n    }\n    // Create fragment to add elements to\n    var _a = this.config,\n      shouldSortItems = _a.shouldSortItems,\n      sorter = _a.sorter,\n      removeItemButton = _a.removeItemButton;\n    // If sorting is enabled, filter items\n    if (shouldSortItems && !this._isSelectOneElement) {\n      items.sort(sorter);\n    }\n    if (this._isTextElement) {\n      // Update the value of the hidden input\n      this.passedElement.value = items.map(function (_a) {\n        var value = _a.value;\n        return value;\n      }).join(this.config.delimiter);\n    } else {\n      // Update the options of the hidden input\n      this.passedElement.options = items;\n    }\n    var addItemToFragment = function (item) {\n      // Create new list element\n      var listItem = _this._getTemplate('item', item, removeItemButton);\n      // Append it to list\n      fragment.appendChild(listItem);\n    };\n    // Add each list item to list\n    items.forEach(addItemToFragment);\n    return fragment;\n  };\n  Choices.prototype._triggerChange = function (value) {\n    if (value === undefined || value === null) {\n      return;\n    }\n    this.passedElement.triggerEvent(constants_1.EVENTS.change, {\n      value: value\n    });\n  };\n  Choices.prototype._selectPlaceholderChoice = function (placeholderChoice) {\n    this._addItem({\n      value: placeholderChoice.value,\n      label: placeholderChoice.label,\n      choiceId: placeholderChoice.id,\n      groupId: placeholderChoice.groupId,\n      placeholder: placeholderChoice.placeholder\n    });\n    this._triggerChange(placeholderChoice.value);\n  };\n  Choices.prototype._handleButtonAction = function (activeItems, element) {\n    if (!activeItems || !element || !this.config.removeItems || !this.config.removeItemButton) {\n      return;\n    }\n    var itemId = element.parentNode && element.parentNode.dataset.id;\n    var itemToRemove = itemId && activeItems.find(function (item) {\n      return item.id === parseInt(itemId, 10);\n    });\n    if (!itemToRemove) {\n      return;\n    }\n    // Remove item associated with button\n    this._removeItem(itemToRemove);\n    this._triggerChange(itemToRemove.value);\n    if (this._isSelectOneElement && this._store.placeholderChoice) {\n      this._selectPlaceholderChoice(this._store.placeholderChoice);\n    }\n  };\n  Choices.prototype._handleItemAction = function (activeItems, element, hasShiftKey) {\n    var _this = this;\n    if (hasShiftKey === void 0) {\n      hasShiftKey = false;\n    }\n    if (!activeItems || !element || !this.config.removeItems || this._isSelectOneElement) {\n      return;\n    }\n    var passedId = element.dataset.id;\n    // We only want to select one item with a click\n    // so we deselect any items that aren't the target\n    // unless shift is being pressed\n    activeItems.forEach(function (item) {\n      if (item.id === parseInt(\"\".concat(passedId), 10) && !item.highlighted) {\n        _this.highlightItem(item);\n      } else if (!hasShiftKey && item.highlighted) {\n        _this.unhighlightItem(item);\n      }\n    });\n    // Focus input as without focus, a user cannot do anything with a\n    // highlighted item\n    this.input.focus();\n  };\n  Choices.prototype._handleChoiceAction = function (activeItems, element) {\n    if (!activeItems || !element) {\n      return;\n    }\n    // If we are clicking on an option\n    var id = element.dataset.id;\n    var choice = id && this._store.getChoiceById(id);\n    if (!choice) {\n      return;\n    }\n    var passedKeyCode = activeItems[0] && activeItems[0].keyCode ? activeItems[0].keyCode : undefined;\n    var hasActiveDropdown = this.dropdown.isActive;\n    // Update choice keyCode\n    choice.keyCode = passedKeyCode;\n    this.passedElement.triggerEvent(constants_1.EVENTS.choice, {\n      choice: choice\n    });\n    if (!choice.selected && !choice.disabled) {\n      var canAddItem = this._canAddItem(activeItems, choice.value);\n      if (canAddItem.response) {\n        this._addItem({\n          value: choice.value,\n          label: choice.label,\n          choiceId: choice.id,\n          groupId: choice.groupId,\n          customProperties: choice.customProperties,\n          placeholder: choice.placeholder,\n          keyCode: choice.keyCode\n        });\n        this._triggerChange(choice.value);\n      }\n    }\n    this.clearInput();\n    // We want to close the dropdown if we are dealing with a single select box\n    if (hasActiveDropdown && this._isSelectOneElement) {\n      this.hideDropdown(true);\n      this.containerOuter.focus();\n    }\n  };\n  Choices.prototype._handleBackspace = function (activeItems) {\n    if (!this.config.removeItems || !activeItems) {\n      return;\n    }\n    var lastItem = activeItems[activeItems.length - 1];\n    var hasHighlightedItems = activeItems.some(function (item) {\n      return item.highlighted;\n    });\n    // If editing the last item is allowed and there are not other selected items,\n    // we can edit the item value. Otherwise if we can remove items, remove all selected items\n    if (this.config.editItems && !hasHighlightedItems && lastItem) {\n      this.input.value = lastItem.value;\n      this.input.setWidth();\n      this._removeItem(lastItem);\n      this._triggerChange(lastItem.value);\n    } else {\n      if (!hasHighlightedItems) {\n        // Highlight last item if none already highlighted\n        this.highlightItem(lastItem, false);\n      }\n      this.removeHighlightedItems(true);\n    }\n  };\n  Choices.prototype._startLoading = function () {\n    this._store.dispatch((0, misc_1.setIsLoading)(true));\n  };\n  Choices.prototype._stopLoading = function () {\n    this._store.dispatch((0, misc_1.setIsLoading)(false));\n  };\n  Choices.prototype._handleLoadingState = function (setLoading) {\n    if (setLoading === void 0) {\n      setLoading = true;\n    }\n    var placeholderItem = this.itemList.getChild(\".\".concat(this.config.classNames.placeholder));\n    if (setLoading) {\n      this.disable();\n      this.containerOuter.addLoadingState();\n      if (this._isSelectOneElement) {\n        if (!placeholderItem) {\n          placeholderItem = this._getTemplate('placeholder', this.config.loadingText);\n          if (placeholderItem) {\n            this.itemList.append(placeholderItem);\n          }\n        } else {\n          placeholderItem.innerHTML = this.config.loadingText;\n        }\n      } else {\n        this.input.placeholder = this.config.loadingText;\n      }\n    } else {\n      this.enable();\n      this.containerOuter.removeLoadingState();\n      if (this._isSelectOneElement) {\n        if (placeholderItem) {\n          placeholderItem.innerHTML = this._placeholderValue || '';\n        }\n      } else {\n        this.input.placeholder = this._placeholderValue || '';\n      }\n    }\n  };\n  Choices.prototype._handleSearch = function (value) {\n    if (!this.input.isFocussed) {\n      return;\n    }\n    var choices = this._store.choices;\n    var _a = this.config,\n      searchFloor = _a.searchFloor,\n      searchChoices = _a.searchChoices;\n    var hasUnactiveChoices = choices.some(function (option) {\n      return !option.active;\n    });\n    // Check that we have a value to search and the input was an alphanumeric character\n    if (value !== null && typeof value !== 'undefined' && value.length >= searchFloor) {\n      var resultCount = searchChoices ? this._searchChoices(value) : 0;\n      // Trigger search event\n      this.passedElement.triggerEvent(constants_1.EVENTS.search, {\n        value: value,\n        resultCount: resultCount\n      });\n    } else if (hasUnactiveChoices) {\n      // Otherwise reset choices to active\n      this._isSearching = false;\n      this._store.dispatch((0, choices_1.activateChoices)(true));\n    }\n  };\n  Choices.prototype._canAddItem = function (activeItems, value) {\n    var canAddItem = true;\n    var notice = typeof this.config.addItemText === 'function' ? this.config.addItemText(value) : this.config.addItemText;\n    if (!this._isSelectOneElement) {\n      var isDuplicateValue = (0, utils_1.existsInArray)(activeItems, value);\n      if (this.config.maxItemCount > 0 && this.config.maxItemCount <= activeItems.length) {\n        // If there is a max entry limit and we have reached that limit\n        // don't update\n        canAddItem = false;\n        notice = typeof this.config.maxItemText === 'function' ? this.config.maxItemText(this.config.maxItemCount) : this.config.maxItemText;\n      }\n      if (!this.config.duplicateItemsAllowed && isDuplicateValue && canAddItem) {\n        canAddItem = false;\n        notice = typeof this.config.uniqueItemText === 'function' ? this.config.uniqueItemText(value) : this.config.uniqueItemText;\n      }\n      if (this._isTextElement && this.config.addItems && canAddItem && typeof this.config.addItemFilter === 'function' && !this.config.addItemFilter(value)) {\n        canAddItem = false;\n        notice = typeof this.config.customAddItemText === 'function' ? this.config.customAddItemText(value) : this.config.customAddItemText;\n      }\n    }\n    return {\n      response: canAddItem,\n      notice: notice\n    };\n  };\n  Choices.prototype._searchChoices = function (value) {\n    var newValue = typeof value === 'string' ? value.trim() : value;\n    var currentValue = typeof this._currentValue === 'string' ? this._currentValue.trim() : this._currentValue;\n    if (newValue.length < 1 && newValue === \"\".concat(currentValue, \" \")) {\n      return 0;\n    }\n    // If new value matches the desired length and is not the same as the current value with a space\n    var haystack = this._store.searchableChoices;\n    var needle = newValue;\n    var options = Object.assign(this.config.fuseOptions, {\n      keys: __spreadArray([], this.config.searchFields, true),\n      includeMatches: true\n    });\n    var fuse = new fuse_js_1.default(haystack, options);\n    var results = fuse.search(needle); // see https://github.com/krisk/Fuse/issues/303\n    this._currentValue = newValue;\n    this._highlightPosition = 0;\n    this._isSearching = true;\n    this._store.dispatch((0, choices_1.filterChoices)(results));\n    return results.length;\n  };\n  Choices.prototype._addEventListeners = function () {\n    var documentElement = document.documentElement;\n    // capture events - can cancel event processing or propagation\n    documentElement.addEventListener('touchend', this._onTouchEnd, true);\n    this.containerOuter.element.addEventListener('keydown', this._onKeyDown, true);\n    this.containerOuter.element.addEventListener('mousedown', this._onMouseDown, true);\n    // passive events - doesn't call `preventDefault` or `stopPropagation`\n    documentElement.addEventListener('click', this._onClick, {\n      passive: true\n    });\n    documentElement.addEventListener('touchmove', this._onTouchMove, {\n      passive: true\n    });\n    this.dropdown.element.addEventListener('mouseover', this._onMouseOver, {\n      passive: true\n    });\n    if (this._isSelectOneElement) {\n      this.containerOuter.element.addEventListener('focus', this._onFocus, {\n        passive: true\n      });\n      this.containerOuter.element.addEventListener('blur', this._onBlur, {\n        passive: true\n      });\n    }\n    this.input.element.addEventListener('keyup', this._onKeyUp, {\n      passive: true\n    });\n    this.input.element.addEventListener('focus', this._onFocus, {\n      passive: true\n    });\n    this.input.element.addEventListener('blur', this._onBlur, {\n      passive: true\n    });\n    if (this.input.element.form) {\n      this.input.element.form.addEventListener('reset', this._onFormReset, {\n        passive: true\n      });\n    }\n    this.input.addEventListeners();\n  };\n  Choices.prototype._removeEventListeners = function () {\n    var documentElement = document.documentElement;\n    documentElement.removeEventListener('touchend', this._onTouchEnd, true);\n    this.containerOuter.element.removeEventListener('keydown', this._onKeyDown, true);\n    this.containerOuter.element.removeEventListener('mousedown', this._onMouseDown, true);\n    documentElement.removeEventListener('click', this._onClick);\n    documentElement.removeEventListener('touchmove', this._onTouchMove);\n    this.dropdown.element.removeEventListener('mouseover', this._onMouseOver);\n    if (this._isSelectOneElement) {\n      this.containerOuter.element.removeEventListener('focus', this._onFocus);\n      this.containerOuter.element.removeEventListener('blur', this._onBlur);\n    }\n    this.input.element.removeEventListener('keyup', this._onKeyUp);\n    this.input.element.removeEventListener('focus', this._onFocus);\n    this.input.element.removeEventListener('blur', this._onBlur);\n    if (this.input.element.form) {\n      this.input.element.form.removeEventListener('reset', this._onFormReset);\n    }\n    this.input.removeEventListeners();\n  };\n  Choices.prototype._onKeyDown = function (event) {\n    var keyCode = event.keyCode;\n    var activeItems = this._store.activeItems;\n    var hasFocusedInput = this.input.isFocussed;\n    var hasActiveDropdown = this.dropdown.isActive;\n    var hasItems = this.itemList.hasChildren();\n    var keyString = String.fromCharCode(keyCode);\n    // eslint-disable-next-line no-control-regex\n    var wasPrintableChar = /[^\\x00-\\x1F]/.test(keyString);\n    var BACK_KEY = constants_1.KEY_CODES.BACK_KEY,\n      DELETE_KEY = constants_1.KEY_CODES.DELETE_KEY,\n      ENTER_KEY = constants_1.KEY_CODES.ENTER_KEY,\n      A_KEY = constants_1.KEY_CODES.A_KEY,\n      ESC_KEY = constants_1.KEY_CODES.ESC_KEY,\n      UP_KEY = constants_1.KEY_CODES.UP_KEY,\n      DOWN_KEY = constants_1.KEY_CODES.DOWN_KEY,\n      PAGE_UP_KEY = constants_1.KEY_CODES.PAGE_UP_KEY,\n      PAGE_DOWN_KEY = constants_1.KEY_CODES.PAGE_DOWN_KEY;\n    if (!this._isTextElement && !hasActiveDropdown && wasPrintableChar) {\n      this.showDropdown();\n      if (!this.input.isFocussed) {\n        /*\n          We update the input value with the pressed key as\n          the input was not focussed at the time of key press\n          therefore does not have the value of the key.\n        */\n        this.input.value += event.key.toLowerCase();\n      }\n    }\n    switch (keyCode) {\n      case A_KEY:\n        return this._onSelectKey(event, hasItems);\n      case ENTER_KEY:\n        return this._onEnterKey(event, activeItems, hasActiveDropdown);\n      case ESC_KEY:\n        return this._onEscapeKey(hasActiveDropdown);\n      case UP_KEY:\n      case PAGE_UP_KEY:\n      case DOWN_KEY:\n      case PAGE_DOWN_KEY:\n        return this._onDirectionKey(event, hasActiveDropdown);\n      case DELETE_KEY:\n      case BACK_KEY:\n        return this._onDeleteKey(event, activeItems, hasFocusedInput);\n      default:\n    }\n  };\n  Choices.prototype._onKeyUp = function (_a) {\n    var target = _a.target,\n      keyCode = _a.keyCode;\n    var value = this.input.value;\n    var activeItems = this._store.activeItems;\n    var canAddItem = this._canAddItem(activeItems, value);\n    var backKey = constants_1.KEY_CODES.BACK_KEY,\n      deleteKey = constants_1.KEY_CODES.DELETE_KEY;\n    // We are typing into a text input and have a value, we want to show a dropdown\n    // notice. Otherwise hide the dropdown\n    if (this._isTextElement) {\n      var canShowDropdownNotice = canAddItem.notice && value;\n      if (canShowDropdownNotice) {\n        var dropdownItem = this._getTemplate('notice', canAddItem.notice);\n        this.dropdown.element.innerHTML = dropdownItem.outerHTML;\n        this.showDropdown(true);\n      } else {\n        this.hideDropdown(true);\n      }\n    } else {\n      var wasRemovalKeyCode = keyCode === backKey || keyCode === deleteKey;\n      var userHasRemovedValue = wasRemovalKeyCode && target && !target.value;\n      var canReactivateChoices = !this._isTextElement && this._isSearching;\n      var canSearch = this._canSearch && canAddItem.response;\n      if (userHasRemovedValue && canReactivateChoices) {\n        this._isSearching = false;\n        this._store.dispatch((0, choices_1.activateChoices)(true));\n      } else if (canSearch) {\n        this._handleSearch(this.input.rawValue);\n      }\n    }\n    this._canSearch = this.config.searchEnabled;\n  };\n  Choices.prototype._onSelectKey = function (event, hasItems) {\n    var ctrlKey = event.ctrlKey,\n      metaKey = event.metaKey;\n    var hasCtrlDownKeyPressed = ctrlKey || metaKey;\n    // If CTRL + A or CMD + A have been pressed and there are items to select\n    if (hasCtrlDownKeyPressed && hasItems) {\n      this._canSearch = false;\n      var shouldHightlightAll = this.config.removeItems && !this.input.value && this.input.element === document.activeElement;\n      if (shouldHightlightAll) {\n        this.highlightAll();\n      }\n    }\n  };\n  Choices.prototype._onEnterKey = function (event, activeItems, hasActiveDropdown) {\n    var target = event.target;\n    var enterKey = constants_1.KEY_CODES.ENTER_KEY;\n    var targetWasButton = target && target.hasAttribute('data-button');\n    if (this._isTextElement && target && target.value) {\n      var value = this.input.value;\n      var canAddItem = this._canAddItem(activeItems, value);\n      if (canAddItem.response) {\n        this.hideDropdown(true);\n        this._addItem({\n          value: value\n        });\n        this._triggerChange(value);\n        this.clearInput();\n      }\n    }\n    if (targetWasButton) {\n      this._handleButtonAction(activeItems, target);\n      event.preventDefault();\n    }\n    if (hasActiveDropdown) {\n      var highlightedChoice = this.dropdown.getChild(\".\".concat(this.config.classNames.highlightedState));\n      if (highlightedChoice) {\n        // add enter keyCode value\n        if (activeItems[0]) {\n          activeItems[0].keyCode = enterKey; // eslint-disable-line no-param-reassign\n        }\n\n        this._handleChoiceAction(activeItems, highlightedChoice);\n      }\n      event.preventDefault();\n    } else if (this._isSelectOneElement) {\n      this.showDropdown();\n      event.preventDefault();\n    }\n  };\n  Choices.prototype._onEscapeKey = function (hasActiveDropdown) {\n    if (hasActiveDropdown) {\n      this.hideDropdown(true);\n      this.containerOuter.focus();\n    }\n  };\n  Choices.prototype._onDirectionKey = function (event, hasActiveDropdown) {\n    var keyCode = event.keyCode,\n      metaKey = event.metaKey;\n    var downKey = constants_1.KEY_CODES.DOWN_KEY,\n      pageUpKey = constants_1.KEY_CODES.PAGE_UP_KEY,\n      pageDownKey = constants_1.KEY_CODES.PAGE_DOWN_KEY;\n    // If up or down key is pressed, traverse through options\n    if (hasActiveDropdown || this._isSelectOneElement) {\n      this.showDropdown();\n      this._canSearch = false;\n      var directionInt = keyCode === downKey || keyCode === pageDownKey ? 1 : -1;\n      var skipKey = metaKey || keyCode === pageDownKey || keyCode === pageUpKey;\n      var selectableChoiceIdentifier = '[data-choice-selectable]';\n      var nextEl = void 0;\n      if (skipKey) {\n        if (directionInt > 0) {\n          nextEl = this.dropdown.element.querySelector(\"\".concat(selectableChoiceIdentifier, \":last-of-type\"));\n        } else {\n          nextEl = this.dropdown.element.querySelector(selectableChoiceIdentifier);\n        }\n      } else {\n        var currentEl = this.dropdown.element.querySelector(\".\".concat(this.config.classNames.highlightedState));\n        if (currentEl) {\n          nextEl = (0, utils_1.getAdjacentEl)(currentEl, selectableChoiceIdentifier, directionInt);\n        } else {\n          nextEl = this.dropdown.element.querySelector(selectableChoiceIdentifier);\n        }\n      }\n      if (nextEl) {\n        // We prevent default to stop the cursor moving\n        // when pressing the arrow\n        if (!(0, utils_1.isScrolledIntoView)(nextEl, this.choiceList.element, directionInt)) {\n          this.choiceList.scrollToChildElement(nextEl, directionInt);\n        }\n        this._highlightChoice(nextEl);\n      }\n      // Prevent default to maintain cursor position whilst\n      // traversing dropdown options\n      event.preventDefault();\n    }\n  };\n  Choices.prototype._onDeleteKey = function (event, activeItems, hasFocusedInput) {\n    var target = event.target;\n    // If backspace or delete key is pressed and the input has no value\n    if (!this._isSelectOneElement && !target.value && hasFocusedInput) {\n      this._handleBackspace(activeItems);\n      event.preventDefault();\n    }\n  };\n  Choices.prototype._onTouchMove = function () {\n    if (this._wasTap) {\n      this._wasTap = false;\n    }\n  };\n  Choices.prototype._onTouchEnd = function (event) {\n    var target = (event || event.touches[0]).target;\n    var touchWasWithinContainer = this._wasTap && this.containerOuter.element.contains(target);\n    if (touchWasWithinContainer) {\n      var containerWasExactTarget = target === this.containerOuter.element || target === this.containerInner.element;\n      if (containerWasExactTarget) {\n        if (this._isTextElement) {\n          this.input.focus();\n        } else if (this._isSelectMultipleElement) {\n          this.showDropdown();\n        }\n      }\n      // Prevents focus event firing\n      event.stopPropagation();\n    }\n    this._wasTap = true;\n  };\n  /**\n   * Handles mousedown event in capture mode for containetOuter.element\n   */\n  Choices.prototype._onMouseDown = function (event) {\n    var target = event.target;\n    if (!(target instanceof HTMLElement)) {\n      return;\n    }\n    // If we have our mouse down on the scrollbar and are on IE11...\n    if (IS_IE11 && this.choiceList.element.contains(target)) {\n      // check if click was on a scrollbar area\n      var firstChoice = this.choiceList.element.firstElementChild;\n      var isOnScrollbar = this._direction === 'ltr' ? event.offsetX >= firstChoice.offsetWidth : event.offsetX < firstChoice.offsetLeft;\n      this._isScrollingOnIe = isOnScrollbar;\n    }\n    if (target === this.input.element) {\n      return;\n    }\n    var item = target.closest('[data-button],[data-item],[data-choice]');\n    if (item instanceof HTMLElement) {\n      var hasShiftKey = event.shiftKey;\n      var activeItems = this._store.activeItems;\n      var dataset = item.dataset;\n      if ('button' in dataset) {\n        this._handleButtonAction(activeItems, item);\n      } else if ('item' in dataset) {\n        this._handleItemAction(activeItems, item, hasShiftKey);\n      } else if ('choice' in dataset) {\n        this._handleChoiceAction(activeItems, item);\n      }\n    }\n    event.preventDefault();\n  };\n  /**\n   * Handles mouseover event over this.dropdown\n   * @param {MouseEvent} event\n   */\n  Choices.prototype._onMouseOver = function (_a) {\n    var target = _a.target;\n    if (target instanceof HTMLElement && 'choice' in target.dataset) {\n      this._highlightChoice(target);\n    }\n  };\n  Choices.prototype._onClick = function (_a) {\n    var target = _a.target;\n    var clickWasWithinContainer = this.containerOuter.element.contains(target);\n    if (clickWasWithinContainer) {\n      if (!this.dropdown.isActive && !this.containerOuter.isDisabled) {\n        if (this._isTextElement) {\n          if (document.activeElement !== this.input.element) {\n            this.input.focus();\n          }\n        } else {\n          this.showDropdown();\n          this.containerOuter.focus();\n        }\n      } else if (this._isSelectOneElement && target !== this.input.element && !this.dropdown.element.contains(target)) {\n        this.hideDropdown();\n      }\n    } else {\n      var hasHighlightedItems = this._store.highlightedActiveItems.length > 0;\n      if (hasHighlightedItems) {\n        this.unhighlightAll();\n      }\n      this.containerOuter.removeFocusState();\n      this.hideDropdown(true);\n    }\n  };\n  Choices.prototype._onFocus = function (_a) {\n    var _b;\n    var _this = this;\n    var target = _a.target;\n    var focusWasWithinContainer = target && this.containerOuter.element.contains(target);\n    if (!focusWasWithinContainer) {\n      return;\n    }\n    var focusActions = (_b = {}, _b[constants_1.TEXT_TYPE] = function () {\n      if (target === _this.input.element) {\n        _this.containerOuter.addFocusState();\n      }\n    }, _b[constants_1.SELECT_ONE_TYPE] = function () {\n      _this.containerOuter.addFocusState();\n      if (target === _this.input.element) {\n        _this.showDropdown(true);\n      }\n    }, _b[constants_1.SELECT_MULTIPLE_TYPE] = function () {\n      if (target === _this.input.element) {\n        _this.showDropdown(true);\n        // If element is a select box, the focused element is the container and the dropdown\n        // isn't already open, focus and show dropdown\n        _this.containerOuter.addFocusState();\n      }\n    }, _b);\n    focusActions[this.passedElement.element.type]();\n  };\n  Choices.prototype._onBlur = function (_a) {\n    var _b;\n    var _this = this;\n    var target = _a.target;\n    var blurWasWithinContainer = target && this.containerOuter.element.contains(target);\n    if (blurWasWithinContainer && !this._isScrollingOnIe) {\n      var activeItems = this._store.activeItems;\n      var hasHighlightedItems_1 = activeItems.some(function (item) {\n        return item.highlighted;\n      });\n      var blurActions = (_b = {}, _b[constants_1.TEXT_TYPE] = function () {\n        if (target === _this.input.element) {\n          _this.containerOuter.removeFocusState();\n          if (hasHighlightedItems_1) {\n            _this.unhighlightAll();\n          }\n          _this.hideDropdown(true);\n        }\n      }, _b[constants_1.SELECT_ONE_TYPE] = function () {\n        _this.containerOuter.removeFocusState();\n        if (target === _this.input.element || target === _this.containerOuter.element && !_this._canSearch) {\n          _this.hideDropdown(true);\n        }\n      }, _b[constants_1.SELECT_MULTIPLE_TYPE] = function () {\n        if (target === _this.input.element) {\n          _this.containerOuter.removeFocusState();\n          _this.hideDropdown(true);\n          if (hasHighlightedItems_1) {\n            _this.unhighlightAll();\n          }\n        }\n      }, _b);\n      blurActions[this.passedElement.element.type]();\n    } else {\n      // On IE11, clicking the scollbar blurs our input and thus\n      // closes the dropdown. To stop this, we refocus our input\n      // if we know we are on IE *and* are scrolling.\n      this._isScrollingOnIe = false;\n      this.input.element.focus();\n    }\n  };\n  Choices.prototype._onFormReset = function () {\n    this._store.dispatch((0, misc_1.resetTo)(this._initialState));\n  };\n  Choices.prototype._highlightChoice = function (el) {\n    var _this = this;\n    if (el === void 0) {\n      el = null;\n    }\n    var choices = Array.from(this.dropdown.element.querySelectorAll('[data-choice-selectable]'));\n    if (!choices.length) {\n      return;\n    }\n    var passedEl = el;\n    var highlightedChoices = Array.from(this.dropdown.element.querySelectorAll(\".\".concat(this.config.classNames.highlightedState)));\n    // Remove any highlighted choices\n    highlightedChoices.forEach(function (choice) {\n      choice.classList.remove(_this.config.classNames.highlightedState);\n      choice.setAttribute('aria-selected', 'false');\n    });\n    if (passedEl) {\n      this._highlightPosition = choices.indexOf(passedEl);\n    } else {\n      // Highlight choice based on last known highlight location\n      if (choices.length > this._highlightPosition) {\n        // If we have an option to highlight\n        passedEl = choices[this._highlightPosition];\n      } else {\n        // Otherwise highlight the option before\n        passedEl = choices[choices.length - 1];\n      }\n      if (!passedEl) {\n        passedEl = choices[0];\n      }\n    }\n    passedEl.classList.add(this.config.classNames.highlightedState);\n    passedEl.setAttribute('aria-selected', 'true');\n    this.passedElement.triggerEvent(constants_1.EVENTS.highlightChoice, {\n      el: passedEl\n    });\n    if (this.dropdown.isActive) {\n      // IE11 ignores aria-label and blocks virtual keyboard\n      // if aria-activedescendant is set without a dropdown\n      this.input.setActiveDescendant(passedEl.id);\n      this.containerOuter.setActiveDescendant(passedEl.id);\n    }\n  };\n  Choices.prototype._addItem = function (_a) {\n    var value = _a.value,\n      _b = _a.label,\n      label = _b === void 0 ? null : _b,\n      _c = _a.choiceId,\n      choiceId = _c === void 0 ? -1 : _c,\n      _d = _a.groupId,\n      groupId = _d === void 0 ? -1 : _d,\n      _e = _a.customProperties,\n      customProperties = _e === void 0 ? {} : _e,\n      _f = _a.placeholder,\n      placeholder = _f === void 0 ? false : _f,\n      _g = _a.keyCode,\n      keyCode = _g === void 0 ? -1 : _g;\n    var passedValue = typeof value === 'string' ? value.trim() : value;\n    var items = this._store.items;\n    var passedLabel = label || passedValue;\n    var passedOptionId = choiceId || -1;\n    var group = groupId >= 0 ? this._store.getGroupById(groupId) : null;\n    var id = items ? items.length + 1 : 1;\n    // If a prepended value has been passed, prepend it\n    if (this.config.prependValue) {\n      passedValue = this.config.prependValue + passedValue.toString();\n    }\n    // If an appended value has been passed, append it\n    if (this.config.appendValue) {\n      passedValue += this.config.appendValue.toString();\n    }\n    this._store.dispatch((0, items_1.addItem)({\n      value: passedValue,\n      label: passedLabel,\n      id: id,\n      choiceId: passedOptionId,\n      groupId: groupId,\n      customProperties: customProperties,\n      placeholder: placeholder,\n      keyCode: keyCode\n    }));\n    if (this._isSelectOneElement) {\n      this.removeActiveItems(id);\n    }\n    // Trigger change event\n    this.passedElement.triggerEvent(constants_1.EVENTS.addItem, {\n      id: id,\n      value: passedValue,\n      label: passedLabel,\n      customProperties: customProperties,\n      groupValue: group && group.value ? group.value : null,\n      keyCode: keyCode\n    });\n  };\n  Choices.prototype._removeItem = function (item) {\n    var id = item.id,\n      value = item.value,\n      label = item.label,\n      customProperties = item.customProperties,\n      choiceId = item.choiceId,\n      groupId = item.groupId;\n    var group = groupId && groupId >= 0 ? this._store.getGroupById(groupId) : null;\n    if (!id || !choiceId) {\n      return;\n    }\n    this._store.dispatch((0, items_1.removeItem)(id, choiceId));\n    this.passedElement.triggerEvent(constants_1.EVENTS.removeItem, {\n      id: id,\n      value: value,\n      label: label,\n      customProperties: customProperties,\n      groupValue: group && group.value ? group.value : null\n    });\n  };\n  Choices.prototype._addChoice = function (_a) {\n    var value = _a.value,\n      _b = _a.label,\n      label = _b === void 0 ? null : _b,\n      _c = _a.isSelected,\n      isSelected = _c === void 0 ? false : _c,\n      _d = _a.isDisabled,\n      isDisabled = _d === void 0 ? false : _d,\n      _e = _a.groupId,\n      groupId = _e === void 0 ? -1 : _e,\n      _f = _a.customProperties,\n      customProperties = _f === void 0 ? {} : _f,\n      _g = _a.placeholder,\n      placeholder = _g === void 0 ? false : _g,\n      _h = _a.keyCode,\n      keyCode = _h === void 0 ? -1 : _h;\n    if (typeof value === 'undefined' || value === null) {\n      return;\n    }\n    // Generate unique id\n    var choices = this._store.choices;\n    var choiceLabel = label || value;\n    var choiceId = choices ? choices.length + 1 : 1;\n    var choiceElementId = \"\".concat(this._baseId, \"-\").concat(this._idNames.itemChoice, \"-\").concat(choiceId);\n    this._store.dispatch((0, choices_1.addChoice)({\n      id: choiceId,\n      groupId: groupId,\n      elementId: choiceElementId,\n      value: value,\n      label: choiceLabel,\n      disabled: isDisabled,\n      customProperties: customProperties,\n      placeholder: placeholder,\n      keyCode: keyCode\n    }));\n    if (isSelected) {\n      this._addItem({\n        value: value,\n        label: choiceLabel,\n        choiceId: choiceId,\n        customProperties: customProperties,\n        placeholder: placeholder,\n        keyCode: keyCode\n      });\n    }\n  };\n  Choices.prototype._addGroup = function (_a) {\n    var _this = this;\n    var group = _a.group,\n      id = _a.id,\n      _b = _a.valueKey,\n      valueKey = _b === void 0 ? 'value' : _b,\n      _c = _a.labelKey,\n      labelKey = _c === void 0 ? 'label' : _c;\n    var groupChoices = (0, utils_1.isType)('Object', group) ? group.choices : Array.from(group.getElementsByTagName('OPTION'));\n    var groupId = id || Math.floor(new Date().valueOf() * Math.random());\n    var isDisabled = group.disabled ? group.disabled : false;\n    if (groupChoices) {\n      this._store.dispatch((0, groups_1.addGroup)({\n        value: group.label,\n        id: groupId,\n        active: true,\n        disabled: isDisabled\n      }));\n      var addGroupChoices = function (choice) {\n        var isOptDisabled = choice.disabled || choice.parentNode && choice.parentNode.disabled;\n        _this._addChoice({\n          value: choice[valueKey],\n          label: (0, utils_1.isType)('Object', choice) ? choice[labelKey] : choice.innerHTML,\n          isSelected: choice.selected,\n          isDisabled: isOptDisabled,\n          groupId: groupId,\n          customProperties: choice.customProperties,\n          placeholder: choice.placeholder\n        });\n      };\n      groupChoices.forEach(addGroupChoices);\n    } else {\n      this._store.dispatch((0, groups_1.addGroup)({\n        value: group.label,\n        id: group.id,\n        active: false,\n        disabled: group.disabled\n      }));\n    }\n  };\n  Choices.prototype._getTemplate = function (template) {\n    var _a;\n    var args = [];\n    for (var _i = 1; _i < arguments.length; _i++) {\n      args[_i - 1] = arguments[_i];\n    }\n    return (_a = this._templates[template]).call.apply(_a, __spreadArray([this, this.config], args, false));\n  };\n  Choices.prototype._createTemplates = function () {\n    var callbackOnCreateTemplates = this.config.callbackOnCreateTemplates;\n    var userTemplates = {};\n    if (callbackOnCreateTemplates && typeof callbackOnCreateTemplates === 'function') {\n      userTemplates = callbackOnCreateTemplates.call(this, utils_1.strToEl);\n    }\n    this._templates = (0, deepmerge_1.default)(templates_1.default, userTemplates);\n  };\n  Choices.prototype._createElements = function () {\n    this.containerOuter = new components_1.Container({\n      element: this._getTemplate('containerOuter', this._direction, this._isSelectElement, this._isSelectOneElement, this.config.searchEnabled, this.passedElement.element.type, this.config.labelId),\n      classNames: this.config.classNames,\n      type: this.passedElement.element.type,\n      position: this.config.position\n    });\n    this.containerInner = new components_1.Container({\n      element: this._getTemplate('containerInner'),\n      classNames: this.config.classNames,\n      type: this.passedElement.element.type,\n      position: this.config.position\n    });\n    this.input = new components_1.Input({\n      element: this._getTemplate('input', this._placeholderValue),\n      classNames: this.config.classNames,\n      type: this.passedElement.element.type,\n      preventPaste: !this.config.paste\n    });\n    this.choiceList = new components_1.List({\n      element: this._getTemplate('choiceList', this._isSelectOneElement)\n    });\n    this.itemList = new components_1.List({\n      element: this._getTemplate('itemList', this._isSelectOneElement)\n    });\n    this.dropdown = new components_1.Dropdown({\n      element: this._getTemplate('dropdown'),\n      classNames: this.config.classNames,\n      type: this.passedElement.element.type\n    });\n  };\n  Choices.prototype._createStructure = function () {\n    // Hide original element\n    this.passedElement.conceal();\n    // Wrap input in container preserving DOM ordering\n    this.containerInner.wrap(this.passedElement.element);\n    // Wrapper inner container with outer container\n    this.containerOuter.wrap(this.containerInner.element);\n    if (this._isSelectOneElement) {\n      this.input.placeholder = this.config.searchPlaceholderValue || '';\n    } else if (this._placeholderValue) {\n      this.input.placeholder = this._placeholderValue;\n      this.input.setWidth();\n    }\n    this.containerOuter.element.appendChild(this.containerInner.element);\n    this.containerOuter.element.appendChild(this.dropdown.element);\n    this.containerInner.element.appendChild(this.itemList.element);\n    if (!this._isTextElement) {\n      this.dropdown.element.appendChild(this.choiceList.element);\n    }\n    if (!this._isSelectOneElement) {\n      this.containerInner.element.appendChild(this.input.element);\n    } else if (this.config.searchEnabled) {\n      this.dropdown.element.insertBefore(this.input.element, this.dropdown.element.firstChild);\n    }\n    if (this._isSelectElement) {\n      this._highlightPosition = 0;\n      this._isSearching = false;\n      this._startLoading();\n      if (this._presetGroups.length) {\n        this._addPredefinedGroups(this._presetGroups);\n      } else {\n        this._addPredefinedChoices(this._presetChoices);\n      }\n      this._stopLoading();\n    }\n    if (this._isTextElement) {\n      this._addPredefinedItems(this._presetItems);\n    }\n  };\n  Choices.prototype._addPredefinedGroups = function (groups) {\n    var _this = this;\n    // If we have a placeholder option\n    var placeholderChoice = this.passedElement.placeholderOption;\n    if (placeholderChoice && placeholderChoice.parentNode && placeholderChoice.parentNode.tagName === 'SELECT') {\n      this._addChoice({\n        value: placeholderChoice.value,\n        label: placeholderChoice.innerHTML,\n        isSelected: placeholderChoice.selected,\n        isDisabled: placeholderChoice.disabled,\n        placeholder: true\n      });\n    }\n    groups.forEach(function (group) {\n      return _this._addGroup({\n        group: group,\n        id: group.id || null\n      });\n    });\n  };\n  Choices.prototype._addPredefinedChoices = function (choices) {\n    var _this = this;\n    // If sorting is enabled or the user is searching, filter choices\n    if (this.config.shouldSort) {\n      choices.sort(this.config.sorter);\n    }\n    var hasSelectedChoice = choices.some(function (choice) {\n      return choice.selected;\n    });\n    var firstEnabledChoiceIndex = choices.findIndex(function (choice) {\n      return choice.disabled === undefined || !choice.disabled;\n    });\n    choices.forEach(function (choice, index) {\n      var _a = choice.value,\n        value = _a === void 0 ? '' : _a,\n        label = choice.label,\n        customProperties = choice.customProperties,\n        placeholder = choice.placeholder;\n      if (_this._isSelectElement) {\n        // If the choice is actually a group\n        if (choice.choices) {\n          _this._addGroup({\n            group: choice,\n            id: choice.id || null\n          });\n        } else {\n          /**\n           * If there is a selected choice already or the choice is not the first in\n           * the array, add each choice normally.\n           *\n           * Otherwise we pre-select the first enabled choice in the array (\"select-one\" only)\n           */\n          var shouldPreselect = _this._isSelectOneElement && !hasSelectedChoice && index === firstEnabledChoiceIndex;\n          var isSelected = shouldPreselect ? true : choice.selected;\n          var isDisabled = choice.disabled;\n          _this._addChoice({\n            value: value,\n            label: label,\n            isSelected: !!isSelected,\n            isDisabled: !!isDisabled,\n            placeholder: !!placeholder,\n            customProperties: customProperties\n          });\n        }\n      } else {\n        _this._addChoice({\n          value: value,\n          label: label,\n          isSelected: !!choice.selected,\n          isDisabled: !!choice.disabled,\n          placeholder: !!choice.placeholder,\n          customProperties: customProperties\n        });\n      }\n    });\n  };\n  Choices.prototype._addPredefinedItems = function (items) {\n    var _this = this;\n    items.forEach(function (item) {\n      if (typeof item === 'object' && item.value) {\n        _this._addItem({\n          value: item.value,\n          label: item.label,\n          choiceId: item.id,\n          customProperties: item.customProperties,\n          placeholder: item.placeholder\n        });\n      }\n      if (typeof item === 'string') {\n        _this._addItem({\n          value: item\n        });\n      }\n    });\n  };\n  Choices.prototype._setChoiceOrItem = function (item) {\n    var _this = this;\n    var itemType = (0, utils_1.getType)(item).toLowerCase();\n    var handleType = {\n      object: function () {\n        if (!item.value) {\n          return;\n        }\n        // If we are dealing with a select input, we need to create an option first\n        // that is then selected. For text inputs we can just add items normally.\n        if (!_this._isTextElement) {\n          _this._addChoice({\n            value: item.value,\n            label: item.label,\n            isSelected: true,\n            isDisabled: false,\n            customProperties: item.customProperties,\n            placeholder: item.placeholder\n          });\n        } else {\n          _this._addItem({\n            value: item.value,\n            label: item.label,\n            choiceId: item.id,\n            customProperties: item.customProperties,\n            placeholder: item.placeholder\n          });\n        }\n      },\n      string: function () {\n        if (!_this._isTextElement) {\n          _this._addChoice({\n            value: item,\n            label: item,\n            isSelected: true,\n            isDisabled: false\n          });\n        } else {\n          _this._addItem({\n            value: item\n          });\n        }\n      }\n    };\n    handleType[itemType]();\n  };\n  Choices.prototype._findAndSelectChoiceByValue = function (value) {\n    var _this = this;\n    var choices = this._store.choices;\n    // Check 'value' property exists and the choice isn't already selected\n    var foundChoice = choices.find(function (choice) {\n      return _this.config.valueComparer(choice.value, value);\n    });\n    if (foundChoice && !foundChoice.selected) {\n      this._addItem({\n        value: foundChoice.value,\n        label: foundChoice.label,\n        choiceId: foundChoice.id,\n        groupId: foundChoice.groupId,\n        customProperties: foundChoice.customProperties,\n        placeholder: foundChoice.placeholder,\n        keyCode: foundChoice.keyCode\n      });\n    }\n  };\n  Choices.prototype._generatePlaceholderValue = function () {\n    if (this._isSelectElement && this.passedElement.placeholderOption) {\n      var placeholderOption = this.passedElement.placeholderOption;\n      return placeholderOption ? placeholderOption.text : null;\n    }\n    var _a = this.config,\n      placeholder = _a.placeholder,\n      placeholderValue = _a.placeholderValue;\n    var dataset = this.passedElement.element.dataset;\n    if (placeholder) {\n      if (placeholderValue) {\n        return placeholderValue;\n      }\n      if (dataset.placeholder) {\n        return dataset.placeholder;\n      }\n    }\n    return null;\n  };\n  return Choices;\n}();\nexports[\"default\"] = Choices;\n\n/***/ }),\n\n/***/ 613:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nvar utils_1 = __webpack_require__(799);\nvar constants_1 = __webpack_require__(883);\nvar Container = /** @class */function () {\n  function Container(_a) {\n    var element = _a.element,\n      type = _a.type,\n      classNames = _a.classNames,\n      position = _a.position;\n    this.element = element;\n    this.classNames = classNames;\n    this.type = type;\n    this.position = position;\n    this.isOpen = false;\n    this.isFlipped = false;\n    this.isFocussed = false;\n    this.isDisabled = false;\n    this.isLoading = false;\n    this._onFocus = this._onFocus.bind(this);\n    this._onBlur = this._onBlur.bind(this);\n  }\n  Container.prototype.addEventListeners = function () {\n    this.element.addEventListener('focus', this._onFocus);\n    this.element.addEventListener('blur', this._onBlur);\n  };\n  Container.prototype.removeEventListeners = function () {\n    this.element.removeEventListener('focus', this._onFocus);\n    this.element.removeEventListener('blur', this._onBlur);\n  };\n  /**\n   * Determine whether container should be flipped based on passed\n   * dropdown position\n   */\n  Container.prototype.shouldFlip = function (dropdownPos) {\n    if (typeof dropdownPos !== 'number') {\n      return false;\n    }\n    // If flip is enabled and the dropdown bottom position is\n    // greater than the window height flip the dropdown.\n    var shouldFlip = false;\n    if (this.position === 'auto') {\n      shouldFlip = !window.matchMedia(\"(min-height: \".concat(dropdownPos + 1, \"px)\")).matches;\n    } else if (this.position === 'top') {\n      shouldFlip = true;\n    }\n    return shouldFlip;\n  };\n  Container.prototype.setActiveDescendant = function (activeDescendantID) {\n    this.element.setAttribute('aria-activedescendant', activeDescendantID);\n  };\n  Container.prototype.removeActiveDescendant = function () {\n    this.element.removeAttribute('aria-activedescendant');\n  };\n  Container.prototype.open = function (dropdownPos) {\n    this.element.classList.add(this.classNames.openState);\n    this.element.setAttribute('aria-expanded', 'true');\n    this.isOpen = true;\n    if (this.shouldFlip(dropdownPos)) {\n      this.element.classList.add(this.classNames.flippedState);\n      this.isFlipped = true;\n    }\n  };\n  Container.prototype.close = function () {\n    this.element.classList.remove(this.classNames.openState);\n    this.element.setAttribute('aria-expanded', 'false');\n    this.removeActiveDescendant();\n    this.isOpen = false;\n    // A dropdown flips if it does not have space within the page\n    if (this.isFlipped) {\n      this.element.classList.remove(this.classNames.flippedState);\n      this.isFlipped = false;\n    }\n  };\n  Container.prototype.focus = function () {\n    if (!this.isFocussed) {\n      this.element.focus();\n    }\n  };\n  Container.prototype.addFocusState = function () {\n    this.element.classList.add(this.classNames.focusState);\n  };\n  Container.prototype.removeFocusState = function () {\n    this.element.classList.remove(this.classNames.focusState);\n  };\n  Container.prototype.enable = function () {\n    this.element.classList.remove(this.classNames.disabledState);\n    this.element.removeAttribute('aria-disabled');\n    if (this.type === constants_1.SELECT_ONE_TYPE) {\n      this.element.setAttribute('tabindex', '0');\n    }\n    this.isDisabled = false;\n  };\n  Container.prototype.disable = function () {\n    this.element.classList.add(this.classNames.disabledState);\n    this.element.setAttribute('aria-disabled', 'true');\n    if (this.type === constants_1.SELECT_ONE_TYPE) {\n      this.element.setAttribute('tabindex', '-1');\n    }\n    this.isDisabled = true;\n  };\n  Container.prototype.wrap = function (element) {\n    (0, utils_1.wrap)(element, this.element);\n  };\n  Container.prototype.unwrap = function (element) {\n    if (this.element.parentNode) {\n      // Move passed element outside this element\n      this.element.parentNode.insertBefore(element, this.element);\n      // Remove this element\n      this.element.parentNode.removeChild(this.element);\n    }\n  };\n  Container.prototype.addLoadingState = function () {\n    this.element.classList.add(this.classNames.loadingState);\n    this.element.setAttribute('aria-busy', 'true');\n    this.isLoading = true;\n  };\n  Container.prototype.removeLoadingState = function () {\n    this.element.classList.remove(this.classNames.loadingState);\n    this.element.removeAttribute('aria-busy');\n    this.isLoading = false;\n  };\n  Container.prototype._onFocus = function () {\n    this.isFocussed = true;\n  };\n  Container.prototype._onBlur = function () {\n    this.isFocussed = false;\n  };\n  return Container;\n}();\nexports[\"default\"] = Container;\n\n/***/ }),\n\n/***/ 217:\n/***/ (function(__unused_webpack_module, exports) {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nvar Dropdown = /** @class */function () {\n  function Dropdown(_a) {\n    var element = _a.element,\n      type = _a.type,\n      classNames = _a.classNames;\n    this.element = element;\n    this.classNames = classNames;\n    this.type = type;\n    this.isActive = false;\n  }\n  Object.defineProperty(Dropdown.prototype, \"distanceFromTopWindow\", {\n    /**\n     * Bottom position of dropdown in viewport coordinates\n     */\n    get: function () {\n      return this.element.getBoundingClientRect().bottom;\n    },\n    enumerable: false,\n    configurable: true\n  });\n  Dropdown.prototype.getChild = function (selector) {\n    return this.element.querySelector(selector);\n  };\n  /**\n   * Show dropdown to user by adding active state class\n   */\n  Dropdown.prototype.show = function () {\n    this.element.classList.add(this.classNames.activeState);\n    this.element.setAttribute('aria-expanded', 'true');\n    this.isActive = true;\n    return this;\n  };\n  /**\n   * Hide dropdown from user\n   */\n  Dropdown.prototype.hide = function () {\n    this.element.classList.remove(this.classNames.activeState);\n    this.element.setAttribute('aria-expanded', 'false');\n    this.isActive = false;\n    return this;\n  };\n  return Dropdown;\n}();\nexports[\"default\"] = Dropdown;\n\n/***/ }),\n\n/***/ 520:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\n\nvar __importDefault = this && this.__importDefault || function (mod) {\n  return mod && mod.__esModule ? mod : {\n    \"default\": mod\n  };\n};\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports.WrappedSelect = exports.WrappedInput = exports.List = exports.Input = exports.Container = exports.Dropdown = void 0;\nvar dropdown_1 = __importDefault(__webpack_require__(217));\nexports.Dropdown = dropdown_1.default;\nvar container_1 = __importDefault(__webpack_require__(613));\nexports.Container = container_1.default;\nvar input_1 = __importDefault(__webpack_require__(11));\nexports.Input = input_1.default;\nvar list_1 = __importDefault(__webpack_require__(624));\nexports.List = list_1.default;\nvar wrapped_input_1 = __importDefault(__webpack_require__(541));\nexports.WrappedInput = wrapped_input_1.default;\nvar wrapped_select_1 = __importDefault(__webpack_require__(982));\nexports.WrappedSelect = wrapped_select_1.default;\n\n/***/ }),\n\n/***/ 11:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nvar utils_1 = __webpack_require__(799);\nvar constants_1 = __webpack_require__(883);\nvar Input = /** @class */function () {\n  function Input(_a) {\n    var element = _a.element,\n      type = _a.type,\n      classNames = _a.classNames,\n      preventPaste = _a.preventPaste;\n    this.element = element;\n    this.type = type;\n    this.classNames = classNames;\n    this.preventPaste = preventPaste;\n    this.isFocussed = this.element.isEqualNode(document.activeElement);\n    this.isDisabled = element.disabled;\n    this._onPaste = this._onPaste.bind(this);\n    this._onInput = this._onInput.bind(this);\n    this._onFocus = this._onFocus.bind(this);\n    this._onBlur = this._onBlur.bind(this);\n  }\n  Object.defineProperty(Input.prototype, \"placeholder\", {\n    set: function (placeholder) {\n      this.element.placeholder = placeholder;\n    },\n    enumerable: false,\n    configurable: true\n  });\n  Object.defineProperty(Input.prototype, \"value\", {\n    get: function () {\n      return (0, utils_1.sanitise)(this.element.value);\n    },\n    set: function (value) {\n      this.element.value = value;\n    },\n    enumerable: false,\n    configurable: true\n  });\n  Object.defineProperty(Input.prototype, \"rawValue\", {\n    get: function () {\n      return this.element.value;\n    },\n    enumerable: false,\n    configurable: true\n  });\n  Input.prototype.addEventListeners = function () {\n    this.element.addEventListener('paste', this._onPaste);\n    this.element.addEventListener('input', this._onInput, {\n      passive: true\n    });\n    this.element.addEventListener('focus', this._onFocus, {\n      passive: true\n    });\n    this.element.addEventListener('blur', this._onBlur, {\n      passive: true\n    });\n  };\n  Input.prototype.removeEventListeners = function () {\n    this.element.removeEventListener('input', this._onInput);\n    this.element.removeEventListener('paste', this._onPaste);\n    this.element.removeEventListener('focus', this._onFocus);\n    this.element.removeEventListener('blur', this._onBlur);\n  };\n  Input.prototype.enable = function () {\n    this.element.removeAttribute('disabled');\n    this.isDisabled = false;\n  };\n  Input.prototype.disable = function () {\n    this.element.setAttribute('disabled', '');\n    this.isDisabled = true;\n  };\n  Input.prototype.focus = function () {\n    if (!this.isFocussed) {\n      this.element.focus();\n    }\n  };\n  Input.prototype.blur = function () {\n    if (this.isFocussed) {\n      this.element.blur();\n    }\n  };\n  Input.prototype.clear = function (setWidth) {\n    if (setWidth === void 0) {\n      setWidth = true;\n    }\n    if (this.element.value) {\n      this.element.value = '';\n    }\n    if (setWidth) {\n      this.setWidth();\n    }\n    return this;\n  };\n  /**\n   * Set the correct input width based on placeholder\n   * value or input value\n   */\n  Input.prototype.setWidth = function () {\n    // Resize input to contents or placeholder\n    var _a = this.element,\n      style = _a.style,\n      value = _a.value,\n      placeholder = _a.placeholder;\n    style.minWidth = \"\".concat(placeholder.length + 1, \"ch\");\n    style.width = \"\".concat(value.length + 1, \"ch\");\n  };\n  Input.prototype.setActiveDescendant = function (activeDescendantID) {\n    this.element.setAttribute('aria-activedescendant', activeDescendantID);\n  };\n  Input.prototype.removeActiveDescendant = function () {\n    this.element.removeAttribute('aria-activedescendant');\n  };\n  Input.prototype._onInput = function () {\n    if (this.type !== constants_1.SELECT_ONE_TYPE) {\n      this.setWidth();\n    }\n  };\n  Input.prototype._onPaste = function (event) {\n    if (this.preventPaste) {\n      event.preventDefault();\n    }\n  };\n  Input.prototype._onFocus = function () {\n    this.isFocussed = true;\n  };\n  Input.prototype._onBlur = function () {\n    this.isFocussed = false;\n  };\n  return Input;\n}();\nexports[\"default\"] = Input;\n\n/***/ }),\n\n/***/ 624:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nvar constants_1 = __webpack_require__(883);\nvar List = /** @class */function () {\n  function List(_a) {\n    var element = _a.element;\n    this.element = element;\n    this.scrollPos = this.element.scrollTop;\n    this.height = this.element.offsetHeight;\n  }\n  List.prototype.clear = function () {\n    this.element.innerHTML = '';\n  };\n  List.prototype.append = function (node) {\n    this.element.appendChild(node);\n  };\n  List.prototype.getChild = function (selector) {\n    return this.element.querySelector(selector);\n  };\n  List.prototype.hasChildren = function () {\n    return this.element.hasChildNodes();\n  };\n  List.prototype.scrollToTop = function () {\n    this.element.scrollTop = 0;\n  };\n  List.prototype.scrollToChildElement = function (element, direction) {\n    var _this = this;\n    if (!element) {\n      return;\n    }\n    var listHeight = this.element.offsetHeight;\n    // Scroll position of dropdown\n    var listScrollPosition = this.element.scrollTop + listHeight;\n    var elementHeight = element.offsetHeight;\n    // Distance from bottom of element to top of parent\n    var elementPos = element.offsetTop + elementHeight;\n    // Difference between the element and scroll position\n    var destination = direction > 0 ? this.element.scrollTop + elementPos - listScrollPosition : element.offsetTop;\n    requestAnimationFrame(function () {\n      _this._animateScroll(destination, direction);\n    });\n  };\n  List.prototype._scrollDown = function (scrollPos, strength, destination) {\n    var easing = (destination - scrollPos) / strength;\n    var distance = easing > 1 ? easing : 1;\n    this.element.scrollTop = scrollPos + distance;\n  };\n  List.prototype._scrollUp = function (scrollPos, strength, destination) {\n    var easing = (scrollPos - destination) / strength;\n    var distance = easing > 1 ? easing : 1;\n    this.element.scrollTop = scrollPos - distance;\n  };\n  List.prototype._animateScroll = function (destination, direction) {\n    var _this = this;\n    var strength = constants_1.SCROLLING_SPEED;\n    var choiceListScrollTop = this.element.scrollTop;\n    var continueAnimation = false;\n    if (direction > 0) {\n      this._scrollDown(choiceListScrollTop, strength, destination);\n      if (choiceListScrollTop < destination) {\n        continueAnimation = true;\n      }\n    } else {\n      this._scrollUp(choiceListScrollTop, strength, destination);\n      if (choiceListScrollTop > destination) {\n        continueAnimation = true;\n      }\n    }\n    if (continueAnimation) {\n      requestAnimationFrame(function () {\n        _this._animateScroll(destination, direction);\n      });\n    }\n  };\n  return List;\n}();\nexports[\"default\"] = List;\n\n/***/ }),\n\n/***/ 730:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nvar utils_1 = __webpack_require__(799);\nvar WrappedElement = /** @class */function () {\n  function WrappedElement(_a) {\n    var element = _a.element,\n      classNames = _a.classNames;\n    this.element = element;\n    this.classNames = classNames;\n    if (!(element instanceof HTMLInputElement) && !(element instanceof HTMLSelectElement)) {\n      throw new TypeError('Invalid element passed');\n    }\n    this.isDisabled = false;\n  }\n  Object.defineProperty(WrappedElement.prototype, \"isActive\", {\n    get: function () {\n      return this.element.dataset.choice === 'active';\n    },\n    enumerable: false,\n    configurable: true\n  });\n  Object.defineProperty(WrappedElement.prototype, \"dir\", {\n    get: function () {\n      return this.element.dir;\n    },\n    enumerable: false,\n    configurable: true\n  });\n  Object.defineProperty(WrappedElement.prototype, \"value\", {\n    get: function () {\n      return this.element.value;\n    },\n    set: function (value) {\n      // you must define setter here otherwise it will be readonly property\n      this.element.value = value;\n    },\n    enumerable: false,\n    configurable: true\n  });\n  WrappedElement.prototype.conceal = function () {\n    // Hide passed input\n    this.element.classList.add(this.classNames.input);\n    this.element.hidden = true;\n    // Remove element from tab index\n    this.element.tabIndex = -1;\n    // Backup original styles if any\n    var origStyle = this.element.getAttribute('style');\n    if (origStyle) {\n      this.element.setAttribute('data-choice-orig-style', origStyle);\n    }\n    this.element.setAttribute('data-choice', 'active');\n  };\n  WrappedElement.prototype.reveal = function () {\n    // Reinstate passed element\n    this.element.classList.remove(this.classNames.input);\n    this.element.hidden = false;\n    this.element.removeAttribute('tabindex');\n    // Recover original styles if any\n    var origStyle = this.element.getAttribute('data-choice-orig-style');\n    if (origStyle) {\n      this.element.removeAttribute('data-choice-orig-style');\n      this.element.setAttribute('style', origStyle);\n    } else {\n      this.element.removeAttribute('style');\n    }\n    this.element.removeAttribute('data-choice');\n    // Re-assign values - this is weird, I know\n    // @todo Figure out why we need to do this\n    this.element.value = this.element.value; // eslint-disable-line no-self-assign\n  };\n\n  WrappedElement.prototype.enable = function () {\n    this.element.removeAttribute('disabled');\n    this.element.disabled = false;\n    this.isDisabled = false;\n  };\n  WrappedElement.prototype.disable = function () {\n    this.element.setAttribute('disabled', '');\n    this.element.disabled = true;\n    this.isDisabled = true;\n  };\n  WrappedElement.prototype.triggerEvent = function (eventType, data) {\n    (0, utils_1.dispatchEvent)(this.element, eventType, data);\n  };\n  return WrappedElement;\n}();\nexports[\"default\"] = WrappedElement;\n\n/***/ }),\n\n/***/ 541:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\n\nvar __extends = this && this.__extends || function () {\n  var extendStatics = function (d, b) {\n    extendStatics = Object.setPrototypeOf || {\n      __proto__: []\n    } instanceof Array && function (d, b) {\n      d.__proto__ = b;\n    } || function (d, b) {\n      for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p];\n    };\n    return extendStatics(d, b);\n  };\n  return function (d, b) {\n    if (typeof b !== \"function\" && b !== null) throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n    extendStatics(d, b);\n    function __() {\n      this.constructor = d;\n    }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n}();\nvar __importDefault = this && this.__importDefault || function (mod) {\n  return mod && mod.__esModule ? mod : {\n    \"default\": mod\n  };\n};\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nvar wrapped_element_1 = __importDefault(__webpack_require__(730));\nvar WrappedInput = /** @class */function (_super) {\n  __extends(WrappedInput, _super);\n  function WrappedInput(_a) {\n    var element = _a.element,\n      classNames = _a.classNames,\n      delimiter = _a.delimiter;\n    var _this = _super.call(this, {\n      element: element,\n      classNames: classNames\n    }) || this;\n    _this.delimiter = delimiter;\n    return _this;\n  }\n  Object.defineProperty(WrappedInput.prototype, \"value\", {\n    get: function () {\n      return this.element.value;\n    },\n    set: function (value) {\n      this.element.setAttribute('value', value);\n      this.element.value = value;\n    },\n    enumerable: false,\n    configurable: true\n  });\n  return WrappedInput;\n}(wrapped_element_1.default);\nexports[\"default\"] = WrappedInput;\n\n/***/ }),\n\n/***/ 982:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\n\nvar __extends = this && this.__extends || function () {\n  var extendStatics = function (d, b) {\n    extendStatics = Object.setPrototypeOf || {\n      __proto__: []\n    } instanceof Array && function (d, b) {\n      d.__proto__ = b;\n    } || function (d, b) {\n      for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p];\n    };\n    return extendStatics(d, b);\n  };\n  return function (d, b) {\n    if (typeof b !== \"function\" && b !== null) throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n    extendStatics(d, b);\n    function __() {\n      this.constructor = d;\n    }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n  };\n}();\nvar __importDefault = this && this.__importDefault || function (mod) {\n  return mod && mod.__esModule ? mod : {\n    \"default\": mod\n  };\n};\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nvar wrapped_element_1 = __importDefault(__webpack_require__(730));\nvar WrappedSelect = /** @class */function (_super) {\n  __extends(WrappedSelect, _super);\n  function WrappedSelect(_a) {\n    var element = _a.element,\n      classNames = _a.classNames,\n      template = _a.template;\n    var _this = _super.call(this, {\n      element: element,\n      classNames: classNames\n    }) || this;\n    _this.template = template;\n    return _this;\n  }\n  Object.defineProperty(WrappedSelect.prototype, \"placeholderOption\", {\n    get: function () {\n      return this.element.querySelector('option[value=\"\"]') ||\n      // Backward compatibility layer for the non-standard placeholder attribute supported in older versions.\n      this.element.querySelector('option[placeholder]');\n    },\n    enumerable: false,\n    configurable: true\n  });\n  Object.defineProperty(WrappedSelect.prototype, \"optionGroups\", {\n    get: function () {\n      return Array.from(this.element.getElementsByTagName('OPTGROUP'));\n    },\n    enumerable: false,\n    configurable: true\n  });\n  Object.defineProperty(WrappedSelect.prototype, \"options\", {\n    get: function () {\n      return Array.from(this.element.options);\n    },\n    set: function (options) {\n      var _this = this;\n      var fragment = document.createDocumentFragment();\n      var addOptionToFragment = function (data) {\n        // Create a standard select option\n        var option = _this.template(data);\n        // Append it to fragment\n        fragment.appendChild(option);\n      };\n      // Add each list item to list\n      options.forEach(function (optionData) {\n        return addOptionToFragment(optionData);\n      });\n      this.appendDocFragment(fragment);\n    },\n    enumerable: false,\n    configurable: true\n  });\n  WrappedSelect.prototype.appendDocFragment = function (fragment) {\n    this.element.innerHTML = '';\n    this.element.appendChild(fragment);\n  };\n  return WrappedSelect;\n}(wrapped_element_1.default);\nexports[\"default\"] = WrappedSelect;\n\n/***/ }),\n\n/***/ 883:\n/***/ (function(__unused_webpack_module, exports) {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports.SCROLLING_SPEED = exports.SELECT_MULTIPLE_TYPE = exports.SELECT_ONE_TYPE = exports.TEXT_TYPE = exports.KEY_CODES = exports.ACTION_TYPES = exports.EVENTS = void 0;\nexports.EVENTS = {\n  showDropdown: 'showDropdown',\n  hideDropdown: 'hideDropdown',\n  change: 'change',\n  choice: 'choice',\n  search: 'search',\n  addItem: 'addItem',\n  removeItem: 'removeItem',\n  highlightItem: 'highlightItem',\n  highlightChoice: 'highlightChoice',\n  unhighlightItem: 'unhighlightItem'\n};\nexports.ACTION_TYPES = {\n  ADD_CHOICE: 'ADD_CHOICE',\n  FILTER_CHOICES: 'FILTER_CHOICES',\n  ACTIVATE_CHOICES: 'ACTIVATE_CHOICES',\n  CLEAR_CHOICES: 'CLEAR_CHOICES',\n  ADD_GROUP: 'ADD_GROUP',\n  ADD_ITEM: 'ADD_ITEM',\n  REMOVE_ITEM: 'REMOVE_ITEM',\n  HIGHLIGHT_ITEM: 'HIGHLIGHT_ITEM',\n  CLEAR_ALL: 'CLEAR_ALL',\n  RESET_TO: 'RESET_TO',\n  SET_IS_LOADING: 'SET_IS_LOADING'\n};\nexports.KEY_CODES = {\n  BACK_KEY: 46,\n  DELETE_KEY: 8,\n  ENTER_KEY: 13,\n  A_KEY: 65,\n  ESC_KEY: 27,\n  UP_KEY: 38,\n  DOWN_KEY: 40,\n  PAGE_UP_KEY: 33,\n  PAGE_DOWN_KEY: 34\n};\nexports.TEXT_TYPE = 'text';\nexports.SELECT_ONE_TYPE = 'select-one';\nexports.SELECT_MULTIPLE_TYPE = 'select-multiple';\nexports.SCROLLING_SPEED = 4;\n\n/***/ }),\n\n/***/ 789:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports.DEFAULT_CONFIG = exports.DEFAULT_CLASSNAMES = void 0;\nvar utils_1 = __webpack_require__(799);\nexports.DEFAULT_CLASSNAMES = {\n  containerOuter: 'choices',\n  containerInner: 'choices__inner',\n  input: 'choices__input',\n  inputCloned: 'choices__input--cloned',\n  list: 'choices__list',\n  listItems: 'choices__list--multiple',\n  listSingle: 'choices__list--single',\n  listDropdown: 'choices__list--dropdown',\n  item: 'choices__item',\n  itemSelectable: 'choices__item--selectable',\n  itemDisabled: 'choices__item--disabled',\n  itemChoice: 'choices__item--choice',\n  placeholder: 'choices__placeholder',\n  group: 'choices__group',\n  groupHeading: 'choices__heading',\n  button: 'choices__button',\n  activeState: 'is-active',\n  focusState: 'is-focused',\n  openState: 'is-open',\n  disabledState: 'is-disabled',\n  highlightedState: 'is-highlighted',\n  selectedState: 'is-selected',\n  flippedState: 'is-flipped',\n  loadingState: 'is-loading',\n  noResults: 'has-no-results',\n  noChoices: 'has-no-choices'\n};\nexports.DEFAULT_CONFIG = {\n  items: [],\n  choices: [],\n  silent: false,\n  renderChoiceLimit: -1,\n  maxItemCount: -1,\n  addItems: true,\n  addItemFilter: null,\n  removeItems: true,\n  removeItemButton: false,\n  editItems: false,\n  allowHTML: true,\n  duplicateItemsAllowed: true,\n  delimiter: ',',\n  paste: true,\n  searchEnabled: true,\n  searchChoices: true,\n  searchFloor: 1,\n  searchResultLimit: 4,\n  searchFields: ['label', 'value'],\n  position: 'auto',\n  resetScrollPosition: true,\n  shouldSort: true,\n  shouldSortItems: false,\n  sorter: utils_1.sortByAlpha,\n  placeholder: true,\n  placeholderValue: null,\n  searchPlaceholderValue: null,\n  prependValue: null,\n  appendValue: null,\n  renderSelectedChoices: 'auto',\n  loadingText: 'Loading...',\n  noResultsText: 'No results found',\n  noChoicesText: 'No choices to choose from',\n  itemSelectText: 'Press to select',\n  uniqueItemText: 'Only unique values can be added',\n  customAddItemText: 'Only values matching specific conditions can be added',\n  addItemText: function (value) {\n    return \"Press Enter to add <b>\\\"\".concat((0, utils_1.sanitise)(value), \"\\\"</b>\");\n  },\n  maxItemText: function (maxItemCount) {\n    return \"Only \".concat(maxItemCount, \" values can be added\");\n  },\n  valueComparer: function (value1, value2) {\n    return value1 === value2;\n  },\n  fuseOptions: {\n    includeScore: true\n  },\n  labelId: '',\n  callbackOnInit: null,\n  callbackOnCreateTemplates: null,\n  classNames: exports.DEFAULT_CLASSNAMES\n};\n\n/***/ }),\n\n/***/ 18:\n/***/ (function(__unused_webpack_module, exports) {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\n\n/***/ }),\n\n/***/ 978:\n/***/ (function(__unused_webpack_module, exports) {\n\n\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\n\n/***/ }),\n\n/***/ 948:\n/***/ (function(__unused_webpack_module, exports) {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\n\n/***/ }),\n\n/***/ 359:\n/***/ (function(__unused_webpack_module, exports) {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\n\n/***/ }),\n\n/***/ 285:\n/***/ (function(__unused_webpack_module, exports) {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\n\n/***/ }),\n\n/***/ 533:\n/***/ (function(__unused_webpack_module, exports) {\n\n\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\n\n/***/ }),\n\n/***/ 187:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\n\nvar __createBinding = this && this.__createBinding || (Object.create ? function (o, m, k, k2) {\n  if (k2 === undefined) k2 = k;\n  var desc = Object.getOwnPropertyDescriptor(m, k);\n  if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n    desc = {\n      enumerable: true,\n      get: function () {\n        return m[k];\n      }\n    };\n  }\n  Object.defineProperty(o, k2, desc);\n} : function (o, m, k, k2) {\n  if (k2 === undefined) k2 = k;\n  o[k2] = m[k];\n});\nvar __exportStar = this && this.__exportStar || function (m, exports) {\n  for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\n__exportStar(__webpack_require__(18), exports);\n__exportStar(__webpack_require__(978), exports);\n__exportStar(__webpack_require__(948), exports);\n__exportStar(__webpack_require__(359), exports);\n__exportStar(__webpack_require__(285), exports);\n__exportStar(__webpack_require__(533), exports);\n__exportStar(__webpack_require__(287), exports);\n__exportStar(__webpack_require__(132), exports);\n__exportStar(__webpack_require__(837), exports);\n__exportStar(__webpack_require__(598), exports);\n__exportStar(__webpack_require__(369), exports);\n__exportStar(__webpack_require__(37), exports);\n__exportStar(__webpack_require__(47), exports);\n__exportStar(__webpack_require__(923), exports);\n__exportStar(__webpack_require__(876), exports);\n\n/***/ }),\n\n/***/ 287:\n/***/ (function(__unused_webpack_module, exports) {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\n\n/***/ }),\n\n/***/ 132:\n/***/ (function(__unused_webpack_module, exports) {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\n\n/***/ }),\n\n/***/ 837:\n/***/ (function(__unused_webpack_module, exports) {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\n\n/***/ }),\n\n/***/ 598:\n/***/ (function(__unused_webpack_module, exports) {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\n\n/***/ }),\n\n/***/ 37:\n/***/ (function(__unused_webpack_module, exports) {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\n\n/***/ }),\n\n/***/ 369:\n/***/ (function(__unused_webpack_module, exports) {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\n\n/***/ }),\n\n/***/ 47:\n/***/ (function(__unused_webpack_module, exports) {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\n\n/***/ }),\n\n/***/ 923:\n/***/ (function(__unused_webpack_module, exports) {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\n\n/***/ }),\n\n/***/ 876:\n/***/ (function(__unused_webpack_module, exports) {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\n\n/***/ }),\n\n/***/ 799:\n/***/ (function(__unused_webpack_module, exports) {\n\n\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports.parseCustomProperties = exports.diff = exports.cloneObject = exports.existsInArray = exports.dispatchEvent = exports.sortByScore = exports.sortByAlpha = exports.strToEl = exports.sanitise = exports.isScrolledIntoView = exports.getAdjacentEl = exports.wrap = exports.isType = exports.getType = exports.generateId = exports.generateChars = exports.getRandomNumber = void 0;\nvar getRandomNumber = function (min, max) {\n  return Math.floor(Math.random() * (max - min) + min);\n};\nexports.getRandomNumber = getRandomNumber;\nvar generateChars = function (length) {\n  return Array.from({\n    length: length\n  }, function () {\n    return (0, exports.getRandomNumber)(0, 36).toString(36);\n  }).join('');\n};\nexports.generateChars = generateChars;\nvar generateId = function (element, prefix) {\n  var id = element.id || element.name && \"\".concat(element.name, \"-\").concat((0, exports.generateChars)(2)) || (0, exports.generateChars)(4);\n  id = id.replace(/(:|\\.|\\[|\\]|,)/g, '');\n  id = \"\".concat(prefix, \"-\").concat(id);\n  return id;\n};\nexports.generateId = generateId;\nvar getType = function (obj) {\n  return Object.prototype.toString.call(obj).slice(8, -1);\n};\nexports.getType = getType;\nvar isType = function (type, obj) {\n  return obj !== undefined && obj !== null && (0, exports.getType)(obj) === type;\n};\nexports.isType = isType;\nvar wrap = function (element, wrapper) {\n  if (wrapper === void 0) {\n    wrapper = document.createElement('div');\n  }\n  if (element.parentNode) {\n    if (element.nextSibling) {\n      element.parentNode.insertBefore(wrapper, element.nextSibling);\n    } else {\n      element.parentNode.appendChild(wrapper);\n    }\n  }\n  return wrapper.appendChild(element);\n};\nexports.wrap = wrap;\nvar getAdjacentEl = function (startEl, selector, direction) {\n  if (direction === void 0) {\n    direction = 1;\n  }\n  var prop = \"\".concat(direction > 0 ? 'next' : 'previous', \"ElementSibling\");\n  var sibling = startEl[prop];\n  while (sibling) {\n    if (sibling.matches(selector)) {\n      return sibling;\n    }\n    sibling = sibling[prop];\n  }\n  return sibling;\n};\nexports.getAdjacentEl = getAdjacentEl;\nvar isScrolledIntoView = function (element, parent, direction) {\n  if (direction === void 0) {\n    direction = 1;\n  }\n  if (!element) {\n    return false;\n  }\n  var isVisible;\n  if (direction > 0) {\n    // In view from bottom\n    isVisible = parent.scrollTop + parent.offsetHeight >= element.offsetTop + element.offsetHeight;\n  } else {\n    // In view from top\n    isVisible = element.offsetTop >= parent.scrollTop;\n  }\n  return isVisible;\n};\nexports.isScrolledIntoView = isScrolledIntoView;\nvar sanitise = function (value) {\n  if (typeof value !== 'string') {\n    return value;\n  }\n  return value.replace(/&/g, '&amp;').replace(/>/g, '&gt;').replace(/</g, '&lt;').replace(/\"/g, '&quot;');\n};\nexports.sanitise = sanitise;\nexports.strToEl = function () {\n  var tmpEl = document.createElement('div');\n  return function (str) {\n    var cleanedInput = str.trim();\n    tmpEl.innerHTML = cleanedInput;\n    var firldChild = tmpEl.children[0];\n    while (tmpEl.firstChild) {\n      tmpEl.removeChild(tmpEl.firstChild);\n    }\n    return firldChild;\n  };\n}();\nvar sortByAlpha = function (_a, _b) {\n  var value = _a.value,\n    _c = _a.label,\n    label = _c === void 0 ? value : _c;\n  var value2 = _b.value,\n    _d = _b.label,\n    label2 = _d === void 0 ? value2 : _d;\n  return label.localeCompare(label2, [], {\n    sensitivity: 'base',\n    ignorePunctuation: true,\n    numeric: true\n  });\n};\nexports.sortByAlpha = sortByAlpha;\nvar sortByScore = function (a, b) {\n  var _a = a.score,\n    scoreA = _a === void 0 ? 0 : _a;\n  var _b = b.score,\n    scoreB = _b === void 0 ? 0 : _b;\n  return scoreA - scoreB;\n};\nexports.sortByScore = sortByScore;\nvar dispatchEvent = function (element, type, customArgs) {\n  if (customArgs === void 0) {\n    customArgs = null;\n  }\n  var event = new CustomEvent(type, {\n    detail: customArgs,\n    bubbles: true,\n    cancelable: true\n  });\n  return element.dispatchEvent(event);\n};\nexports.dispatchEvent = dispatchEvent;\nvar existsInArray = function (array, value, key) {\n  if (key === void 0) {\n    key = 'value';\n  }\n  return array.some(function (item) {\n    if (typeof value === 'string') {\n      return item[key] === value.trim();\n    }\n    return item[key] === value;\n  });\n};\nexports.existsInArray = existsInArray;\nvar cloneObject = function (obj) {\n  return JSON.parse(JSON.stringify(obj));\n};\nexports.cloneObject = cloneObject;\n/**\n * Returns an array of keys present on the first but missing on the second object\n */\nvar diff = function (a, b) {\n  var aKeys = Object.keys(a).sort();\n  var bKeys = Object.keys(b).sort();\n  return aKeys.filter(function (i) {\n    return bKeys.indexOf(i) < 0;\n  });\n};\nexports.diff = diff;\nvar parseCustomProperties = function (customProperties) {\n  if (typeof customProperties !== 'undefined') {\n    try {\n      return JSON.parse(customProperties);\n    } catch (e) {\n      return customProperties;\n    }\n  }\n  return {};\n};\nexports.parseCustomProperties = parseCustomProperties;\n\n/***/ }),\n\n/***/ 273:\n/***/ (function(__unused_webpack_module, exports) {\n\n\n\nvar __spreadArray = this && this.__spreadArray || function (to, from, pack) {\n  if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n    if (ar || !(i in from)) {\n      if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n      ar[i] = from[i];\n    }\n  }\n  return to.concat(ar || Array.prototype.slice.call(from));\n};\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports.defaultState = void 0;\nexports.defaultState = [];\nfunction choices(state, action) {\n  if (state === void 0) {\n    state = exports.defaultState;\n  }\n  if (action === void 0) {\n    action = {};\n  }\n  switch (action.type) {\n    case 'ADD_CHOICE':\n      {\n        var addChoiceAction = action;\n        var choice = {\n          id: addChoiceAction.id,\n          elementId: addChoiceAction.elementId,\n          groupId: addChoiceAction.groupId,\n          value: addChoiceAction.value,\n          label: addChoiceAction.label || addChoiceAction.value,\n          disabled: addChoiceAction.disabled || false,\n          selected: false,\n          active: true,\n          score: 9999,\n          customProperties: addChoiceAction.customProperties,\n          placeholder: addChoiceAction.placeholder || false\n        };\n        /*\n          A disabled choice appears in the choice dropdown but cannot be selected\n          A selected choice has been added to the passed input's value (added as an item)\n          An active choice appears within the choice dropdown\n        */\n        return __spreadArray(__spreadArray([], state, true), [choice], false);\n      }\n    case 'ADD_ITEM':\n      {\n        var addItemAction_1 = action;\n        // When an item is added and it has an associated choice,\n        // we want to disable it so it can't be chosen again\n        if (addItemAction_1.choiceId > -1) {\n          return state.map(function (obj) {\n            var choice = obj;\n            if (choice.id === parseInt(\"\".concat(addItemAction_1.choiceId), 10)) {\n              choice.selected = true;\n            }\n            return choice;\n          });\n        }\n        return state;\n      }\n    case 'REMOVE_ITEM':\n      {\n        var removeItemAction_1 = action;\n        // When an item is removed and it has an associated choice,\n        // we want to re-enable it so it can be chosen again\n        if (removeItemAction_1.choiceId && removeItemAction_1.choiceId > -1) {\n          return state.map(function (obj) {\n            var choice = obj;\n            if (choice.id === parseInt(\"\".concat(removeItemAction_1.choiceId), 10)) {\n              choice.selected = false;\n            }\n            return choice;\n          });\n        }\n        return state;\n      }\n    case 'FILTER_CHOICES':\n      {\n        var filterChoicesAction_1 = action;\n        return state.map(function (obj) {\n          var choice = obj;\n          // Set active state based on whether choice is\n          // within filtered results\n          choice.active = filterChoicesAction_1.results.some(function (_a) {\n            var item = _a.item,\n              score = _a.score;\n            if (item.id === choice.id) {\n              choice.score = score;\n              return true;\n            }\n            return false;\n          });\n          return choice;\n        });\n      }\n    case 'ACTIVATE_CHOICES':\n      {\n        var activateChoicesAction_1 = action;\n        return state.map(function (obj) {\n          var choice = obj;\n          choice.active = activateChoicesAction_1.active;\n          return choice;\n        });\n      }\n    case 'CLEAR_CHOICES':\n      {\n        return exports.defaultState;\n      }\n    default:\n      {\n        return state;\n      }\n  }\n}\nexports[\"default\"] = choices;\n\n/***/ }),\n\n/***/ 871:\n/***/ (function(__unused_webpack_module, exports) {\n\n\n\nvar __spreadArray = this && this.__spreadArray || function (to, from, pack) {\n  if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n    if (ar || !(i in from)) {\n      if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n      ar[i] = from[i];\n    }\n  }\n  return to.concat(ar || Array.prototype.slice.call(from));\n};\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports.defaultState = void 0;\nexports.defaultState = [];\nfunction groups(state, action) {\n  if (state === void 0) {\n    state = exports.defaultState;\n  }\n  if (action === void 0) {\n    action = {};\n  }\n  switch (action.type) {\n    case 'ADD_GROUP':\n      {\n        var addGroupAction = action;\n        return __spreadArray(__spreadArray([], state, true), [{\n          id: addGroupAction.id,\n          value: addGroupAction.value,\n          active: addGroupAction.active,\n          disabled: addGroupAction.disabled\n        }], false);\n      }\n    case 'CLEAR_CHOICES':\n      {\n        return [];\n      }\n    default:\n      {\n        return state;\n      }\n  }\n}\nexports[\"default\"] = groups;\n\n/***/ }),\n\n/***/ 655:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\n\nvar __importDefault = this && this.__importDefault || function (mod) {\n  return mod && mod.__esModule ? mod : {\n    \"default\": mod\n  };\n};\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports.defaultState = void 0;\nvar redux_1 = __webpack_require__(791);\nvar items_1 = __importDefault(__webpack_require__(52));\nvar groups_1 = __importDefault(__webpack_require__(871));\nvar choices_1 = __importDefault(__webpack_require__(273));\nvar loading_1 = __importDefault(__webpack_require__(502));\nvar utils_1 = __webpack_require__(799);\nexports.defaultState = {\n  groups: [],\n  items: [],\n  choices: [],\n  loading: false\n};\nvar appReducer = (0, redux_1.combineReducers)({\n  items: items_1.default,\n  groups: groups_1.default,\n  choices: choices_1.default,\n  loading: loading_1.default\n});\nvar rootReducer = function (passedState, action) {\n  var state = passedState;\n  // If we are clearing all items, groups and options we reassign\n  // state and then pass that state to our proper reducer. This isn't\n  // mutating our actual state\n  // See: http://stackoverflow.com/a/35641992\n  if (action.type === 'CLEAR_ALL') {\n    state = exports.defaultState;\n  } else if (action.type === 'RESET_TO') {\n    return (0, utils_1.cloneObject)(action.state);\n  }\n  return appReducer(state, action);\n};\nexports[\"default\"] = rootReducer;\n\n/***/ }),\n\n/***/ 52:\n/***/ (function(__unused_webpack_module, exports) {\n\n\n\nvar __spreadArray = this && this.__spreadArray || function (to, from, pack) {\n  if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n    if (ar || !(i in from)) {\n      if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n      ar[i] = from[i];\n    }\n  }\n  return to.concat(ar || Array.prototype.slice.call(from));\n};\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports.defaultState = void 0;\nexports.defaultState = [];\nfunction items(state, action) {\n  if (state === void 0) {\n    state = exports.defaultState;\n  }\n  if (action === void 0) {\n    action = {};\n  }\n  switch (action.type) {\n    case 'ADD_ITEM':\n      {\n        var addItemAction = action;\n        // Add object to items array\n        var newState = __spreadArray(__spreadArray([], state, true), [{\n          id: addItemAction.id,\n          choiceId: addItemAction.choiceId,\n          groupId: addItemAction.groupId,\n          value: addItemAction.value,\n          label: addItemAction.label,\n          active: true,\n          highlighted: false,\n          customProperties: addItemAction.customProperties,\n          placeholder: addItemAction.placeholder || false,\n          keyCode: null\n        }], false);\n        return newState.map(function (obj) {\n          var item = obj;\n          item.highlighted = false;\n          return item;\n        });\n      }\n    case 'REMOVE_ITEM':\n      {\n        // Set item to inactive\n        return state.map(function (obj) {\n          var item = obj;\n          if (item.id === action.id) {\n            item.active = false;\n          }\n          return item;\n        });\n      }\n    case 'HIGHLIGHT_ITEM':\n      {\n        var highlightItemAction_1 = action;\n        return state.map(function (obj) {\n          var item = obj;\n          if (item.id === highlightItemAction_1.id) {\n            item.highlighted = highlightItemAction_1.highlighted;\n          }\n          return item;\n        });\n      }\n    default:\n      {\n        return state;\n      }\n  }\n}\nexports[\"default\"] = items;\n\n/***/ }),\n\n/***/ 502:\n/***/ (function(__unused_webpack_module, exports) {\n\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports.defaultState = void 0;\nexports.defaultState = false;\nvar general = function (state, action) {\n  if (state === void 0) {\n    state = exports.defaultState;\n  }\n  if (action === void 0) {\n    action = {};\n  }\n  switch (action.type) {\n    case 'SET_IS_LOADING':\n      {\n        return action.isLoading;\n      }\n    default:\n      {\n        return state;\n      }\n  }\n};\nexports[\"default\"] = general;\n\n/***/ }),\n\n/***/ 744:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\n\nvar __spreadArray = this && this.__spreadArray || function (to, from, pack) {\n  if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n    if (ar || !(i in from)) {\n      if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n      ar[i] = from[i];\n    }\n  }\n  return to.concat(ar || Array.prototype.slice.call(from));\n};\nvar __importDefault = this && this.__importDefault || function (mod) {\n  return mod && mod.__esModule ? mod : {\n    \"default\": mod\n  };\n};\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\n/* eslint-disable @typescript-eslint/no-explicit-any */\nvar redux_1 = __webpack_require__(791);\nvar index_1 = __importDefault(__webpack_require__(655));\nvar Store = /** @class */function () {\n  function Store() {\n    this._store = (0, redux_1.createStore)(index_1.default, window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__());\n  }\n  /**\n   * Subscribe store to function call (wrapped Redux method)\n   */\n  Store.prototype.subscribe = function (onChange) {\n    this._store.subscribe(onChange);\n  };\n  /**\n   * Dispatch event to store (wrapped Redux method)\n   */\n  Store.prototype.dispatch = function (action) {\n    this._store.dispatch(action);\n  };\n  Object.defineProperty(Store.prototype, \"state\", {\n    /**\n     * Get store object (wrapping Redux method)\n     */\n    get: function () {\n      return this._store.getState();\n    },\n    enumerable: false,\n    configurable: true\n  });\n  Object.defineProperty(Store.prototype, \"items\", {\n    /**\n     * Get items from store\n     */\n    get: function () {\n      return this.state.items;\n    },\n    enumerable: false,\n    configurable: true\n  });\n  Object.defineProperty(Store.prototype, \"activeItems\", {\n    /**\n     * Get active items from store\n     */\n    get: function () {\n      return this.items.filter(function (item) {\n        return item.active === true;\n      });\n    },\n    enumerable: false,\n    configurable: true\n  });\n  Object.defineProperty(Store.prototype, \"highlightedActiveItems\", {\n    /**\n     * Get highlighted items from store\n     */\n    get: function () {\n      return this.items.filter(function (item) {\n        return item.active && item.highlighted;\n      });\n    },\n    enumerable: false,\n    configurable: true\n  });\n  Object.defineProperty(Store.prototype, \"choices\", {\n    /**\n     * Get choices from store\n     */\n    get: function () {\n      return this.state.choices;\n    },\n    enumerable: false,\n    configurable: true\n  });\n  Object.defineProperty(Store.prototype, \"activeChoices\", {\n    /**\n     * Get active choices from store\n     */\n    get: function () {\n      return this.choices.filter(function (choice) {\n        return choice.active === true;\n      });\n    },\n    enumerable: false,\n    configurable: true\n  });\n  Object.defineProperty(Store.prototype, \"selectableChoices\", {\n    /**\n     * Get selectable choices from store\n     */\n    get: function () {\n      return this.choices.filter(function (choice) {\n        return choice.disabled !== true;\n      });\n    },\n    enumerable: false,\n    configurable: true\n  });\n  Object.defineProperty(Store.prototype, \"searchableChoices\", {\n    /**\n     * Get choices that can be searched (excluding placeholders)\n     */\n    get: function () {\n      return this.selectableChoices.filter(function (choice) {\n        return choice.placeholder !== true;\n      });\n    },\n    enumerable: false,\n    configurable: true\n  });\n  Object.defineProperty(Store.prototype, \"placeholderChoice\", {\n    /**\n     * Get placeholder choice from store\n     */\n    get: function () {\n      return __spreadArray([], this.choices, true).reverse().find(function (choice) {\n        return choice.placeholder === true;\n      });\n    },\n    enumerable: false,\n    configurable: true\n  });\n  Object.defineProperty(Store.prototype, \"groups\", {\n    /**\n     * Get groups from store\n     */\n    get: function () {\n      return this.state.groups;\n    },\n    enumerable: false,\n    configurable: true\n  });\n  Object.defineProperty(Store.prototype, \"activeGroups\", {\n    /**\n     * Get active groups from store\n     */\n    get: function () {\n      var _a = this,\n        groups = _a.groups,\n        choices = _a.choices;\n      return groups.filter(function (group) {\n        var isActive = group.active === true && group.disabled === false;\n        var hasActiveOptions = choices.some(function (choice) {\n          return choice.active === true && choice.disabled === false;\n        });\n        return isActive && hasActiveOptions;\n      }, []);\n    },\n    enumerable: false,\n    configurable: true\n  });\n  /**\n   * Get loading state from store\n   */\n  Store.prototype.isLoading = function () {\n    return this.state.loading;\n  };\n  /**\n   * Get single choice by it's ID\n   */\n  Store.prototype.getChoiceById = function (id) {\n    return this.activeChoices.find(function (choice) {\n      return choice.id === parseInt(id, 10);\n    });\n  };\n  /**\n   * Get group by group id\n   */\n  Store.prototype.getGroupById = function (id) {\n    return this.groups.find(function (group) {\n      return group.id === id;\n    });\n  };\n  return Store;\n}();\nexports[\"default\"] = Store;\n\n/***/ }),\n\n/***/ 686:\n/***/ (function(__unused_webpack_module, exports) {\n\n\n\n/**\n * Helpers to create HTML elements used by Choices\n * Can be overridden by providing `callbackOnCreateTemplates` option\n */\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nvar templates = {\n  containerOuter: function (_a, dir, isSelectElement, isSelectOneElement, searchEnabled, passedElementType, labelId) {\n    var containerOuter = _a.classNames.containerOuter;\n    var div = Object.assign(document.createElement('div'), {\n      className: containerOuter\n    });\n    div.dataset.type = passedElementType;\n    if (dir) {\n      div.dir = dir;\n    }\n    if (isSelectOneElement) {\n      div.tabIndex = 0;\n    }\n    if (isSelectElement) {\n      div.setAttribute('role', searchEnabled ? 'combobox' : 'listbox');\n      if (searchEnabled) {\n        div.setAttribute('aria-autocomplete', 'list');\n      }\n    }\n    div.setAttribute('aria-haspopup', 'true');\n    div.setAttribute('aria-expanded', 'false');\n    if (labelId) {\n      div.setAttribute('aria-labelledby', labelId);\n    }\n    return div;\n  },\n  containerInner: function (_a) {\n    var containerInner = _a.classNames.containerInner;\n    return Object.assign(document.createElement('div'), {\n      className: containerInner\n    });\n  },\n  itemList: function (_a, isSelectOneElement) {\n    var _b = _a.classNames,\n      list = _b.list,\n      listSingle = _b.listSingle,\n      listItems = _b.listItems;\n    return Object.assign(document.createElement('div'), {\n      className: \"\".concat(list, \" \").concat(isSelectOneElement ? listSingle : listItems)\n    });\n  },\n  placeholder: function (_a, value) {\n    var _b;\n    var allowHTML = _a.allowHTML,\n      placeholder = _a.classNames.placeholder;\n    return Object.assign(document.createElement('div'), (_b = {\n      className: placeholder\n    }, _b[allowHTML ? 'innerHTML' : 'innerText'] = value, _b));\n  },\n  item: function (_a, _b, removeItemButton) {\n    var _c, _d;\n    var allowHTML = _a.allowHTML,\n      _e = _a.classNames,\n      item = _e.item,\n      button = _e.button,\n      highlightedState = _e.highlightedState,\n      itemSelectable = _e.itemSelectable,\n      placeholder = _e.placeholder;\n    var id = _b.id,\n      value = _b.value,\n      label = _b.label,\n      customProperties = _b.customProperties,\n      active = _b.active,\n      disabled = _b.disabled,\n      highlighted = _b.highlighted,\n      isPlaceholder = _b.placeholder;\n    var div = Object.assign(document.createElement('div'), (_c = {\n      className: item\n    }, _c[allowHTML ? 'innerHTML' : 'innerText'] = label, _c));\n    Object.assign(div.dataset, {\n      item: '',\n      id: id,\n      value: value,\n      customProperties: customProperties\n    });\n    if (active) {\n      div.setAttribute('aria-selected', 'true');\n    }\n    if (disabled) {\n      div.setAttribute('aria-disabled', 'true');\n    }\n    if (isPlaceholder) {\n      div.classList.add(placeholder);\n    }\n    div.classList.add(highlighted ? highlightedState : itemSelectable);\n    if (removeItemButton) {\n      if (disabled) {\n        div.classList.remove(itemSelectable);\n      }\n      div.dataset.deletable = '';\n      /** @todo This MUST be localizable, not hardcoded! */\n      var REMOVE_ITEM_TEXT = 'Remove item';\n      var removeButton = Object.assign(document.createElement('button'), (_d = {\n        type: 'button',\n        className: button\n      }, _d[allowHTML ? 'innerHTML' : 'innerText'] = REMOVE_ITEM_TEXT, _d));\n      removeButton.setAttribute('aria-label', \"\".concat(REMOVE_ITEM_TEXT, \": '\").concat(value, \"'\"));\n      removeButton.dataset.button = '';\n      div.appendChild(removeButton);\n    }\n    return div;\n  },\n  choiceList: function (_a, isSelectOneElement) {\n    var list = _a.classNames.list;\n    var div = Object.assign(document.createElement('div'), {\n      className: list\n    });\n    if (!isSelectOneElement) {\n      div.setAttribute('aria-multiselectable', 'true');\n    }\n    div.setAttribute('role', 'listbox');\n    return div;\n  },\n  choiceGroup: function (_a, _b) {\n    var _c;\n    var allowHTML = _a.allowHTML,\n      _d = _a.classNames,\n      group = _d.group,\n      groupHeading = _d.groupHeading,\n      itemDisabled = _d.itemDisabled;\n    var id = _b.id,\n      value = _b.value,\n      disabled = _b.disabled;\n    var div = Object.assign(document.createElement('div'), {\n      className: \"\".concat(group, \" \").concat(disabled ? itemDisabled : '')\n    });\n    div.setAttribute('role', 'group');\n    Object.assign(div.dataset, {\n      group: '',\n      id: id,\n      value: value\n    });\n    if (disabled) {\n      div.setAttribute('aria-disabled', 'true');\n    }\n    div.appendChild(Object.assign(document.createElement('div'), (_c = {\n      className: groupHeading\n    }, _c[allowHTML ? 'innerHTML' : 'innerText'] = value, _c)));\n    return div;\n  },\n  choice: function (_a, _b, selectText) {\n    var _c;\n    var allowHTML = _a.allowHTML,\n      _d = _a.classNames,\n      item = _d.item,\n      itemChoice = _d.itemChoice,\n      itemSelectable = _d.itemSelectable,\n      selectedState = _d.selectedState,\n      itemDisabled = _d.itemDisabled,\n      placeholder = _d.placeholder;\n    var id = _b.id,\n      value = _b.value,\n      label = _b.label,\n      groupId = _b.groupId,\n      elementId = _b.elementId,\n      isDisabled = _b.disabled,\n      isSelected = _b.selected,\n      isPlaceholder = _b.placeholder;\n    var div = Object.assign(document.createElement('div'), (_c = {\n      id: elementId\n    }, _c[allowHTML ? 'innerHTML' : 'innerText'] = label, _c.className = \"\".concat(item, \" \").concat(itemChoice), _c));\n    if (isSelected) {\n      div.classList.add(selectedState);\n    }\n    if (isPlaceholder) {\n      div.classList.add(placeholder);\n    }\n    div.setAttribute('role', groupId && groupId > 0 ? 'treeitem' : 'option');\n    Object.assign(div.dataset, {\n      choice: '',\n      id: id,\n      value: value,\n      selectText: selectText\n    });\n    if (isDisabled) {\n      div.classList.add(itemDisabled);\n      div.dataset.choiceDisabled = '';\n      div.setAttribute('aria-disabled', 'true');\n    } else {\n      div.classList.add(itemSelectable);\n      div.dataset.choiceSelectable = '';\n    }\n    return div;\n  },\n  input: function (_a, placeholderValue) {\n    var _b = _a.classNames,\n      input = _b.input,\n      inputCloned = _b.inputCloned;\n    var inp = Object.assign(document.createElement('input'), {\n      type: 'search',\n      name: 'search_terms',\n      className: \"\".concat(input, \" \").concat(inputCloned),\n      autocomplete: 'off',\n      autocapitalize: 'off',\n      spellcheck: false\n    });\n    inp.setAttribute('role', 'textbox');\n    inp.setAttribute('aria-autocomplete', 'list');\n    inp.setAttribute('aria-label', placeholderValue);\n    return inp;\n  },\n  dropdown: function (_a) {\n    var _b = _a.classNames,\n      list = _b.list,\n      listDropdown = _b.listDropdown;\n    var div = document.createElement('div');\n    div.classList.add(list, listDropdown);\n    div.setAttribute('aria-expanded', 'false');\n    return div;\n  },\n  notice: function (_a, innerText, type) {\n    var _b;\n    var allowHTML = _a.allowHTML,\n      _c = _a.classNames,\n      item = _c.item,\n      itemChoice = _c.itemChoice,\n      noResults = _c.noResults,\n      noChoices = _c.noChoices;\n    if (type === void 0) {\n      type = '';\n    }\n    var classes = [item, itemChoice];\n    if (type === 'no-choices') {\n      classes.push(noChoices);\n    } else if (type === 'no-results') {\n      classes.push(noResults);\n    }\n    return Object.assign(document.createElement('div'), (_b = {}, _b[allowHTML ? 'innerHTML' : 'innerText'] = innerText, _b.className = classes.join(' '), _b));\n  },\n  option: function (_a) {\n    var label = _a.label,\n      value = _a.value,\n      customProperties = _a.customProperties,\n      active = _a.active,\n      disabled = _a.disabled;\n    var opt = new Option(label, value, false, active);\n    if (customProperties) {\n      opt.dataset.customProperties = \"\".concat(customProperties);\n    }\n    opt.disabled = !!disabled;\n    return opt;\n  }\n};\nexports[\"default\"] = templates;\n\n/***/ }),\n\n/***/ 996:\n/***/ (function(module) {\n\n\n\nvar isMergeableObject = function isMergeableObject(value) {\n\treturn isNonNullObject(value)\n\t\t&& !isSpecial(value)\n};\n\nfunction isNonNullObject(value) {\n\treturn !!value && typeof value === 'object'\n}\n\nfunction isSpecial(value) {\n\tvar stringValue = Object.prototype.toString.call(value);\n\n\treturn stringValue === '[object RegExp]'\n\t\t|| stringValue === '[object Date]'\n\t\t|| isReactElement(value)\n}\n\n// see https://github.com/facebook/react/blob/b5ac963fb791d1298e7f396236383bc955f916c1/src/isomorphic/classic/element/ReactElement.js#L21-L25\nvar canUseSymbol = typeof Symbol === 'function' && Symbol.for;\nvar REACT_ELEMENT_TYPE = canUseSymbol ? Symbol.for('react.element') : 0xeac7;\n\nfunction isReactElement(value) {\n\treturn value.$$typeof === REACT_ELEMENT_TYPE\n}\n\nfunction emptyTarget(val) {\n\treturn Array.isArray(val) ? [] : {}\n}\n\nfunction cloneUnlessOtherwiseSpecified(value, options) {\n\treturn (options.clone !== false && options.isMergeableObject(value))\n\t\t? deepmerge(emptyTarget(value), value, options)\n\t\t: value\n}\n\nfunction defaultArrayMerge(target, source, options) {\n\treturn target.concat(source).map(function(element) {\n\t\treturn cloneUnlessOtherwiseSpecified(element, options)\n\t})\n}\n\nfunction getMergeFunction(key, options) {\n\tif (!options.customMerge) {\n\t\treturn deepmerge\n\t}\n\tvar customMerge = options.customMerge(key);\n\treturn typeof customMerge === 'function' ? customMerge : deepmerge\n}\n\nfunction getEnumerableOwnPropertySymbols(target) {\n\treturn Object.getOwnPropertySymbols\n\t\t? Object.getOwnPropertySymbols(target).filter(function(symbol) {\n\t\t\treturn target.propertyIsEnumerable(symbol)\n\t\t})\n\t\t: []\n}\n\nfunction getKeys(target) {\n\treturn Object.keys(target).concat(getEnumerableOwnPropertySymbols(target))\n}\n\nfunction propertyIsOnObject(object, property) {\n\ttry {\n\t\treturn property in object\n\t} catch(_) {\n\t\treturn false\n\t}\n}\n\n// Protects from prototype poisoning and unexpected merging up the prototype chain.\nfunction propertyIsUnsafe(target, key) {\n\treturn propertyIsOnObject(target, key) // Properties are safe to merge if they don't exist in the target yet,\n\t\t&& !(Object.hasOwnProperty.call(target, key) // unsafe if they exist up the prototype chain,\n\t\t\t&& Object.propertyIsEnumerable.call(target, key)) // and also unsafe if they're nonenumerable.\n}\n\nfunction mergeObject(target, source, options) {\n\tvar destination = {};\n\tif (options.isMergeableObject(target)) {\n\t\tgetKeys(target).forEach(function(key) {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(target[key], options);\n\t\t});\n\t}\n\tgetKeys(source).forEach(function(key) {\n\t\tif (propertyIsUnsafe(target, key)) {\n\t\t\treturn\n\t\t}\n\n\t\tif (propertyIsOnObject(target, key) && options.isMergeableObject(source[key])) {\n\t\t\tdestination[key] = getMergeFunction(key, options)(target[key], source[key], options);\n\t\t} else {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(source[key], options);\n\t\t}\n\t});\n\treturn destination\n}\n\nfunction deepmerge(target, source, options) {\n\toptions = options || {};\n\toptions.arrayMerge = options.arrayMerge || defaultArrayMerge;\n\toptions.isMergeableObject = options.isMergeableObject || isMergeableObject;\n\t// cloneUnlessOtherwiseSpecified is added to `options` so that custom arrayMerge()\n\t// implementations can use it. The caller may not replace it.\n\toptions.cloneUnlessOtherwiseSpecified = cloneUnlessOtherwiseSpecified;\n\n\tvar sourceIsArray = Array.isArray(source);\n\tvar targetIsArray = Array.isArray(target);\n\tvar sourceAndTargetTypesMatch = sourceIsArray === targetIsArray;\n\n\tif (!sourceAndTargetTypesMatch) {\n\t\treturn cloneUnlessOtherwiseSpecified(source, options)\n\t} else if (sourceIsArray) {\n\t\treturn options.arrayMerge(target, source, options)\n\t} else {\n\t\treturn mergeObject(target, source, options)\n\t}\n}\n\ndeepmerge.all = function deepmergeAll(array, options) {\n\tif (!Array.isArray(array)) {\n\t\tthrow new Error('first argument should be an array')\n\t}\n\n\treturn array.reduce(function(prev, next) {\n\t\treturn deepmerge(prev, next, options)\n\t}, {})\n};\n\nvar deepmerge_1 = deepmerge;\n\nmodule.exports = deepmerge_1;\n\n\n/***/ }),\n\n/***/ 221:\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": function() { return /* binding */ Fuse; }\n/* harmony export */ });\n/**\n * Fuse.js v6.6.2 - Lightweight fuzzy-search (http://fusejs.io)\n *\n * Copyright (c) 2022 Kiro Risk (http://kiro.me)\n * All Rights Reserved. Apache Software License 2.0\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n */\n\nfunction isArray(value) {\n  return !Array.isArray\n    ? getTag(value) === '[object Array]'\n    : Array.isArray(value)\n}\n\n// Adapted from: https://github.com/lodash/lodash/blob/master/.internal/baseToString.js\nconst INFINITY = 1 / 0;\nfunction baseToString(value) {\n  // Exit early for strings to avoid a performance hit in some environments.\n  if (typeof value == 'string') {\n    return value\n  }\n  let result = value + '';\n  return result == '0' && 1 / value == -INFINITY ? '-0' : result\n}\n\nfunction toString(value) {\n  return value == null ? '' : baseToString(value)\n}\n\nfunction isString(value) {\n  return typeof value === 'string'\n}\n\nfunction isNumber(value) {\n  return typeof value === 'number'\n}\n\n// Adapted from: https://github.com/lodash/lodash/blob/master/isBoolean.js\nfunction isBoolean(value) {\n  return (\n    value === true ||\n    value === false ||\n    (isObjectLike(value) && getTag(value) == '[object Boolean]')\n  )\n}\n\nfunction isObject(value) {\n  return typeof value === 'object'\n}\n\n// Checks if `value` is object-like.\nfunction isObjectLike(value) {\n  return isObject(value) && value !== null\n}\n\nfunction isDefined(value) {\n  return value !== undefined && value !== null\n}\n\nfunction isBlank(value) {\n  return !value.trim().length\n}\n\n// Gets the `toStringTag` of `value`.\n// Adapted from: https://github.com/lodash/lodash/blob/master/.internal/getTag.js\nfunction getTag(value) {\n  return value == null\n    ? value === undefined\n      ? '[object Undefined]'\n      : '[object Null]'\n    : Object.prototype.toString.call(value)\n}\n\nconst EXTENDED_SEARCH_UNAVAILABLE = 'Extended search is not available';\n\nconst INCORRECT_INDEX_TYPE = \"Incorrect 'index' type\";\n\nconst LOGICAL_SEARCH_INVALID_QUERY_FOR_KEY = (key) =>\n  `Invalid value for key ${key}`;\n\nconst PATTERN_LENGTH_TOO_LARGE = (max) =>\n  `Pattern length exceeds max of ${max}.`;\n\nconst MISSING_KEY_PROPERTY = (name) => `Missing ${name} property in key`;\n\nconst INVALID_KEY_WEIGHT_VALUE = (key) =>\n  `Property 'weight' in key '${key}' must be a positive integer`;\n\nconst hasOwn = Object.prototype.hasOwnProperty;\n\nclass KeyStore {\n  constructor(keys) {\n    this._keys = [];\n    this._keyMap = {};\n\n    let totalWeight = 0;\n\n    keys.forEach((key) => {\n      let obj = createKey(key);\n\n      totalWeight += obj.weight;\n\n      this._keys.push(obj);\n      this._keyMap[obj.id] = obj;\n\n      totalWeight += obj.weight;\n    });\n\n    // Normalize weights so that their sum is equal to 1\n    this._keys.forEach((key) => {\n      key.weight /= totalWeight;\n    });\n  }\n  get(keyId) {\n    return this._keyMap[keyId]\n  }\n  keys() {\n    return this._keys\n  }\n  toJSON() {\n    return JSON.stringify(this._keys)\n  }\n}\n\nfunction createKey(key) {\n  let path = null;\n  let id = null;\n  let src = null;\n  let weight = 1;\n  let getFn = null;\n\n  if (isString(key) || isArray(key)) {\n    src = key;\n    path = createKeyPath(key);\n    id = createKeyId(key);\n  } else {\n    if (!hasOwn.call(key, 'name')) {\n      throw new Error(MISSING_KEY_PROPERTY('name'))\n    }\n\n    const name = key.name;\n    src = name;\n\n    if (hasOwn.call(key, 'weight')) {\n      weight = key.weight;\n\n      if (weight <= 0) {\n        throw new Error(INVALID_KEY_WEIGHT_VALUE(name))\n      }\n    }\n\n    path = createKeyPath(name);\n    id = createKeyId(name);\n    getFn = key.getFn;\n  }\n\n  return { path, id, weight, src, getFn }\n}\n\nfunction createKeyPath(key) {\n  return isArray(key) ? key : key.split('.')\n}\n\nfunction createKeyId(key) {\n  return isArray(key) ? key.join('.') : key\n}\n\nfunction get(obj, path) {\n  let list = [];\n  let arr = false;\n\n  const deepGet = (obj, path, index) => {\n    if (!isDefined(obj)) {\n      return\n    }\n    if (!path[index]) {\n      // If there's no path left, we've arrived at the object we care about.\n      list.push(obj);\n    } else {\n      let key = path[index];\n\n      const value = obj[key];\n\n      if (!isDefined(value)) {\n        return\n      }\n\n      // If we're at the last value in the path, and if it's a string/number/bool,\n      // add it to the list\n      if (\n        index === path.length - 1 &&\n        (isString(value) || isNumber(value) || isBoolean(value))\n      ) {\n        list.push(toString(value));\n      } else if (isArray(value)) {\n        arr = true;\n        // Search each item in the array.\n        for (let i = 0, len = value.length; i < len; i += 1) {\n          deepGet(value[i], path, index + 1);\n        }\n      } else if (path.length) {\n        // An object. Recurse further.\n        deepGet(value, path, index + 1);\n      }\n    }\n  };\n\n  // Backwards compatibility (since path used to be a string)\n  deepGet(obj, isString(path) ? path.split('.') : path, 0);\n\n  return arr ? list : list[0]\n}\n\nconst MatchOptions = {\n  // Whether the matches should be included in the result set. When `true`, each record in the result\n  // set will include the indices of the matched characters.\n  // These can consequently be used for highlighting purposes.\n  includeMatches: false,\n  // When `true`, the matching function will continue to the end of a search pattern even if\n  // a perfect match has already been located in the string.\n  findAllMatches: false,\n  // Minimum number of characters that must be matched before a result is considered a match\n  minMatchCharLength: 1\n};\n\nconst BasicOptions = {\n  // When `true`, the algorithm continues searching to the end of the input even if a perfect\n  // match is found before the end of the same input.\n  isCaseSensitive: false,\n  // When true, the matching function will continue to the end of a search pattern even if\n  includeScore: false,\n  // List of properties that will be searched. This also supports nested properties.\n  keys: [],\n  // Whether to sort the result list, by score\n  shouldSort: true,\n  // Default sort function: sort by ascending score, ascending index\n  sortFn: (a, b) =>\n    a.score === b.score ? (a.idx < b.idx ? -1 : 1) : a.score < b.score ? -1 : 1\n};\n\nconst FuzzyOptions = {\n  // Approximately where in the text is the pattern expected to be found?\n  location: 0,\n  // At what point does the match algorithm give up. A threshold of '0.0' requires a perfect match\n  // (of both letters and location), a threshold of '1.0' would match anything.\n  threshold: 0.6,\n  // Determines how close the match must be to the fuzzy location (specified above).\n  // An exact letter match which is 'distance' characters away from the fuzzy location\n  // would score as a complete mismatch. A distance of '0' requires the match be at\n  // the exact location specified, a threshold of '1000' would require a perfect match\n  // to be within 800 characters of the fuzzy location to be found using a 0.8 threshold.\n  distance: 100\n};\n\nconst AdvancedOptions = {\n  // When `true`, it enables the use of unix-like search commands\n  useExtendedSearch: false,\n  // The get function to use when fetching an object's properties.\n  // The default will search nested paths *ie foo.bar.baz*\n  getFn: get,\n  // When `true`, search will ignore `location` and `distance`, so it won't matter\n  // where in the string the pattern appears.\n  // More info: https://fusejs.io/concepts/scoring-theory.html#fuzziness-score\n  ignoreLocation: false,\n  // When `true`, the calculation for the relevance score (used for sorting) will\n  // ignore the field-length norm.\n  // More info: https://fusejs.io/concepts/scoring-theory.html#field-length-norm\n  ignoreFieldNorm: false,\n  // The weight to determine how much field length norm effects scoring.\n  fieldNormWeight: 1\n};\n\nvar Config = {\n  ...BasicOptions,\n  ...MatchOptions,\n  ...FuzzyOptions,\n  ...AdvancedOptions\n};\n\nconst SPACE = /[^ ]+/g;\n\n// Field-length norm: the shorter the field, the higher the weight.\n// Set to 3 decimals to reduce index size.\nfunction norm(weight = 1, mantissa = 3) {\n  const cache = new Map();\n  const m = Math.pow(10, mantissa);\n\n  return {\n    get(value) {\n      const numTokens = value.match(SPACE).length;\n\n      if (cache.has(numTokens)) {\n        return cache.get(numTokens)\n      }\n\n      // Default function is 1/sqrt(x), weight makes that variable\n      const norm = 1 / Math.pow(numTokens, 0.5 * weight);\n\n      // In place of `toFixed(mantissa)`, for faster computation\n      const n = parseFloat(Math.round(norm * m) / m);\n\n      cache.set(numTokens, n);\n\n      return n\n    },\n    clear() {\n      cache.clear();\n    }\n  }\n}\n\nclass FuseIndex {\n  constructor({\n    getFn = Config.getFn,\n    fieldNormWeight = Config.fieldNormWeight\n  } = {}) {\n    this.norm = norm(fieldNormWeight, 3);\n    this.getFn = getFn;\n    this.isCreated = false;\n\n    this.setIndexRecords();\n  }\n  setSources(docs = []) {\n    this.docs = docs;\n  }\n  setIndexRecords(records = []) {\n    this.records = records;\n  }\n  setKeys(keys = []) {\n    this.keys = keys;\n    this._keysMap = {};\n    keys.forEach((key, idx) => {\n      this._keysMap[key.id] = idx;\n    });\n  }\n  create() {\n    if (this.isCreated || !this.docs.length) {\n      return\n    }\n\n    this.isCreated = true;\n\n    // List is Array<String>\n    if (isString(this.docs[0])) {\n      this.docs.forEach((doc, docIndex) => {\n        this._addString(doc, docIndex);\n      });\n    } else {\n      // List is Array<Object>\n      this.docs.forEach((doc, docIndex) => {\n        this._addObject(doc, docIndex);\n      });\n    }\n\n    this.norm.clear();\n  }\n  // Adds a doc to the end of the index\n  add(doc) {\n    const idx = this.size();\n\n    if (isString(doc)) {\n      this._addString(doc, idx);\n    } else {\n      this._addObject(doc, idx);\n    }\n  }\n  // Removes the doc at the specified index of the index\n  removeAt(idx) {\n    this.records.splice(idx, 1);\n\n    // Change ref index of every subsquent doc\n    for (let i = idx, len = this.size(); i < len; i += 1) {\n      this.records[i].i -= 1;\n    }\n  }\n  getValueForItemAtKeyId(item, keyId) {\n    return item[this._keysMap[keyId]]\n  }\n  size() {\n    return this.records.length\n  }\n  _addString(doc, docIndex) {\n    if (!isDefined(doc) || isBlank(doc)) {\n      return\n    }\n\n    let record = {\n      v: doc,\n      i: docIndex,\n      n: this.norm.get(doc)\n    };\n\n    this.records.push(record);\n  }\n  _addObject(doc, docIndex) {\n    let record = { i: docIndex, $: {} };\n\n    // Iterate over every key (i.e, path), and fetch the value at that key\n    this.keys.forEach((key, keyIndex) => {\n      let value = key.getFn ? key.getFn(doc) : this.getFn(doc, key.path);\n\n      if (!isDefined(value)) {\n        return\n      }\n\n      if (isArray(value)) {\n        let subRecords = [];\n        const stack = [{ nestedArrIndex: -1, value }];\n\n        while (stack.length) {\n          const { nestedArrIndex, value } = stack.pop();\n\n          if (!isDefined(value)) {\n            continue\n          }\n\n          if (isString(value) && !isBlank(value)) {\n            let subRecord = {\n              v: value,\n              i: nestedArrIndex,\n              n: this.norm.get(value)\n            };\n\n            subRecords.push(subRecord);\n          } else if (isArray(value)) {\n            value.forEach((item, k) => {\n              stack.push({\n                nestedArrIndex: k,\n                value: item\n              });\n            });\n          } else ;\n        }\n        record.$[keyIndex] = subRecords;\n      } else if (isString(value) && !isBlank(value)) {\n        let subRecord = {\n          v: value,\n          n: this.norm.get(value)\n        };\n\n        record.$[keyIndex] = subRecord;\n      }\n    });\n\n    this.records.push(record);\n  }\n  toJSON() {\n    return {\n      keys: this.keys,\n      records: this.records\n    }\n  }\n}\n\nfunction createIndex(\n  keys,\n  docs,\n  { getFn = Config.getFn, fieldNormWeight = Config.fieldNormWeight } = {}\n) {\n  const myIndex = new FuseIndex({ getFn, fieldNormWeight });\n  myIndex.setKeys(keys.map(createKey));\n  myIndex.setSources(docs);\n  myIndex.create();\n  return myIndex\n}\n\nfunction parseIndex(\n  data,\n  { getFn = Config.getFn, fieldNormWeight = Config.fieldNormWeight } = {}\n) {\n  const { keys, records } = data;\n  const myIndex = new FuseIndex({ getFn, fieldNormWeight });\n  myIndex.setKeys(keys);\n  myIndex.setIndexRecords(records);\n  return myIndex\n}\n\nfunction computeScore$1(\n  pattern,\n  {\n    errors = 0,\n    currentLocation = 0,\n    expectedLocation = 0,\n    distance = Config.distance,\n    ignoreLocation = Config.ignoreLocation\n  } = {}\n) {\n  const accuracy = errors / pattern.length;\n\n  if (ignoreLocation) {\n    return accuracy\n  }\n\n  const proximity = Math.abs(expectedLocation - currentLocation);\n\n  if (!distance) {\n    // Dodge divide by zero error.\n    return proximity ? 1.0 : accuracy\n  }\n\n  return accuracy + proximity / distance\n}\n\nfunction convertMaskToIndices(\n  matchmask = [],\n  minMatchCharLength = Config.minMatchCharLength\n) {\n  let indices = [];\n  let start = -1;\n  let end = -1;\n  let i = 0;\n\n  for (let len = matchmask.length; i < len; i += 1) {\n    let match = matchmask[i];\n    if (match && start === -1) {\n      start = i;\n    } else if (!match && start !== -1) {\n      end = i - 1;\n      if (end - start + 1 >= minMatchCharLength) {\n        indices.push([start, end]);\n      }\n      start = -1;\n    }\n  }\n\n  // (i-1 - start) + 1 => i - start\n  if (matchmask[i - 1] && i - start >= minMatchCharLength) {\n    indices.push([start, i - 1]);\n  }\n\n  return indices\n}\n\n// Machine word size\nconst MAX_BITS = 32;\n\nfunction search(\n  text,\n  pattern,\n  patternAlphabet,\n  {\n    location = Config.location,\n    distance = Config.distance,\n    threshold = Config.threshold,\n    findAllMatches = Config.findAllMatches,\n    minMatchCharLength = Config.minMatchCharLength,\n    includeMatches = Config.includeMatches,\n    ignoreLocation = Config.ignoreLocation\n  } = {}\n) {\n  if (pattern.length > MAX_BITS) {\n    throw new Error(PATTERN_LENGTH_TOO_LARGE(MAX_BITS))\n  }\n\n  const patternLen = pattern.length;\n  // Set starting location at beginning text and initialize the alphabet.\n  const textLen = text.length;\n  // Handle the case when location > text.length\n  const expectedLocation = Math.max(0, Math.min(location, textLen));\n  // Highest score beyond which we give up.\n  let currentThreshold = threshold;\n  // Is there a nearby exact match? (speedup)\n  let bestLocation = expectedLocation;\n\n  // Performance: only computer matches when the minMatchCharLength > 1\n  // OR if `includeMatches` is true.\n  const computeMatches = minMatchCharLength > 1 || includeMatches;\n  // A mask of the matches, used for building the indices\n  const matchMask = computeMatches ? Array(textLen) : [];\n\n  let index;\n\n  // Get all exact matches, here for speed up\n  while ((index = text.indexOf(pattern, bestLocation)) > -1) {\n    let score = computeScore$1(pattern, {\n      currentLocation: index,\n      expectedLocation,\n      distance,\n      ignoreLocation\n    });\n\n    currentThreshold = Math.min(score, currentThreshold);\n    bestLocation = index + patternLen;\n\n    if (computeMatches) {\n      let i = 0;\n      while (i < patternLen) {\n        matchMask[index + i] = 1;\n        i += 1;\n      }\n    }\n  }\n\n  // Reset the best location\n  bestLocation = -1;\n\n  let lastBitArr = [];\n  let finalScore = 1;\n  let binMax = patternLen + textLen;\n\n  const mask = 1 << (patternLen - 1);\n\n  for (let i = 0; i < patternLen; i += 1) {\n    // Scan for the best match; each iteration allows for one more error.\n    // Run a binary search to determine how far from the match location we can stray\n    // at this error level.\n    let binMin = 0;\n    let binMid = binMax;\n\n    while (binMin < binMid) {\n      const score = computeScore$1(pattern, {\n        errors: i,\n        currentLocation: expectedLocation + binMid,\n        expectedLocation,\n        distance,\n        ignoreLocation\n      });\n\n      if (score <= currentThreshold) {\n        binMin = binMid;\n      } else {\n        binMax = binMid;\n      }\n\n      binMid = Math.floor((binMax - binMin) / 2 + binMin);\n    }\n\n    // Use the result from this iteration as the maximum for the next.\n    binMax = binMid;\n\n    let start = Math.max(1, expectedLocation - binMid + 1);\n    let finish = findAllMatches\n      ? textLen\n      : Math.min(expectedLocation + binMid, textLen) + patternLen;\n\n    // Initialize the bit array\n    let bitArr = Array(finish + 2);\n\n    bitArr[finish + 1] = (1 << i) - 1;\n\n    for (let j = finish; j >= start; j -= 1) {\n      let currentLocation = j - 1;\n      let charMatch = patternAlphabet[text.charAt(currentLocation)];\n\n      if (computeMatches) {\n        // Speed up: quick bool to int conversion (i.e, `charMatch ? 1 : 0`)\n        matchMask[currentLocation] = +!!charMatch;\n      }\n\n      // First pass: exact match\n      bitArr[j] = ((bitArr[j + 1] << 1) | 1) & charMatch;\n\n      // Subsequent passes: fuzzy match\n      if (i) {\n        bitArr[j] |=\n          ((lastBitArr[j + 1] | lastBitArr[j]) << 1) | 1 | lastBitArr[j + 1];\n      }\n\n      if (bitArr[j] & mask) {\n        finalScore = computeScore$1(pattern, {\n          errors: i,\n          currentLocation,\n          expectedLocation,\n          distance,\n          ignoreLocation\n        });\n\n        // This match will almost certainly be better than any existing match.\n        // But check anyway.\n        if (finalScore <= currentThreshold) {\n          // Indeed it is\n          currentThreshold = finalScore;\n          bestLocation = currentLocation;\n\n          // Already passed `loc`, downhill from here on in.\n          if (bestLocation <= expectedLocation) {\n            break\n          }\n\n          // When passing `bestLocation`, don't exceed our current distance from `expectedLocation`.\n          start = Math.max(1, 2 * expectedLocation - bestLocation);\n        }\n      }\n    }\n\n    // No hope for a (better) match at greater error levels.\n    const score = computeScore$1(pattern, {\n      errors: i + 1,\n      currentLocation: expectedLocation,\n      expectedLocation,\n      distance,\n      ignoreLocation\n    });\n\n    if (score > currentThreshold) {\n      break\n    }\n\n    lastBitArr = bitArr;\n  }\n\n  const result = {\n    isMatch: bestLocation >= 0,\n    // Count exact matches (those with a score of 0) to be \"almost\" exact\n    score: Math.max(0.001, finalScore)\n  };\n\n  if (computeMatches) {\n    const indices = convertMaskToIndices(matchMask, minMatchCharLength);\n    if (!indices.length) {\n      result.isMatch = false;\n    } else if (includeMatches) {\n      result.indices = indices;\n    }\n  }\n\n  return result\n}\n\nfunction createPatternAlphabet(pattern) {\n  let mask = {};\n\n  for (let i = 0, len = pattern.length; i < len; i += 1) {\n    const char = pattern.charAt(i);\n    mask[char] = (mask[char] || 0) | (1 << (len - i - 1));\n  }\n\n  return mask\n}\n\nclass BitapSearch {\n  constructor(\n    pattern,\n    {\n      location = Config.location,\n      threshold = Config.threshold,\n      distance = Config.distance,\n      includeMatches = Config.includeMatches,\n      findAllMatches = Config.findAllMatches,\n      minMatchCharLength = Config.minMatchCharLength,\n      isCaseSensitive = Config.isCaseSensitive,\n      ignoreLocation = Config.ignoreLocation\n    } = {}\n  ) {\n    this.options = {\n      location,\n      threshold,\n      distance,\n      includeMatches,\n      findAllMatches,\n      minMatchCharLength,\n      isCaseSensitive,\n      ignoreLocation\n    };\n\n    this.pattern = isCaseSensitive ? pattern : pattern.toLowerCase();\n\n    this.chunks = [];\n\n    if (!this.pattern.length) {\n      return\n    }\n\n    const addChunk = (pattern, startIndex) => {\n      this.chunks.push({\n        pattern,\n        alphabet: createPatternAlphabet(pattern),\n        startIndex\n      });\n    };\n\n    const len = this.pattern.length;\n\n    if (len > MAX_BITS) {\n      let i = 0;\n      const remainder = len % MAX_BITS;\n      const end = len - remainder;\n\n      while (i < end) {\n        addChunk(this.pattern.substr(i, MAX_BITS), i);\n        i += MAX_BITS;\n      }\n\n      if (remainder) {\n        const startIndex = len - MAX_BITS;\n        addChunk(this.pattern.substr(startIndex), startIndex);\n      }\n    } else {\n      addChunk(this.pattern, 0);\n    }\n  }\n\n  searchIn(text) {\n    const { isCaseSensitive, includeMatches } = this.options;\n\n    if (!isCaseSensitive) {\n      text = text.toLowerCase();\n    }\n\n    // Exact match\n    if (this.pattern === text) {\n      let result = {\n        isMatch: true,\n        score: 0\n      };\n\n      if (includeMatches) {\n        result.indices = [[0, text.length - 1]];\n      }\n\n      return result\n    }\n\n    // Otherwise, use Bitap algorithm\n    const {\n      location,\n      distance,\n      threshold,\n      findAllMatches,\n      minMatchCharLength,\n      ignoreLocation\n    } = this.options;\n\n    let allIndices = [];\n    let totalScore = 0;\n    let hasMatches = false;\n\n    this.chunks.forEach(({ pattern, alphabet, startIndex }) => {\n      const { isMatch, score, indices } = search(text, pattern, alphabet, {\n        location: location + startIndex,\n        distance,\n        threshold,\n        findAllMatches,\n        minMatchCharLength,\n        includeMatches,\n        ignoreLocation\n      });\n\n      if (isMatch) {\n        hasMatches = true;\n      }\n\n      totalScore += score;\n\n      if (isMatch && indices) {\n        allIndices = [...allIndices, ...indices];\n      }\n    });\n\n    let result = {\n      isMatch: hasMatches,\n      score: hasMatches ? totalScore / this.chunks.length : 1\n    };\n\n    if (hasMatches && includeMatches) {\n      result.indices = allIndices;\n    }\n\n    return result\n  }\n}\n\nclass BaseMatch {\n  constructor(pattern) {\n    this.pattern = pattern;\n  }\n  static isMultiMatch(pattern) {\n    return getMatch(pattern, this.multiRegex)\n  }\n  static isSingleMatch(pattern) {\n    return getMatch(pattern, this.singleRegex)\n  }\n  search(/*text*/) {}\n}\n\nfunction getMatch(pattern, exp) {\n  const matches = pattern.match(exp);\n  return matches ? matches[1] : null\n}\n\n// Token: 'file\n\nclass ExactMatch extends BaseMatch {\n  constructor(pattern) {\n    super(pattern);\n  }\n  static get type() {\n    return 'exact'\n  }\n  static get multiRegex() {\n    return /^=\"(.*)\"$/\n  }\n  static get singleRegex() {\n    return /^=(.*)$/\n  }\n  search(text) {\n    const isMatch = text === this.pattern;\n\n    return {\n      isMatch,\n      score: isMatch ? 0 : 1,\n      indices: [0, this.pattern.length - 1]\n    }\n  }\n}\n\n// Token: !fire\n\nclass InverseExactMatch extends BaseMatch {\n  constructor(pattern) {\n    super(pattern);\n  }\n  static get type() {\n    return 'inverse-exact'\n  }\n  static get multiRegex() {\n    return /^!\"(.*)\"$/\n  }\n  static get singleRegex() {\n    return /^!(.*)$/\n  }\n  search(text) {\n    const index = text.indexOf(this.pattern);\n    const isMatch = index === -1;\n\n    return {\n      isMatch,\n      score: isMatch ? 0 : 1,\n      indices: [0, text.length - 1]\n    }\n  }\n}\n\n// Token: ^file\n\nclass PrefixExactMatch extends BaseMatch {\n  constructor(pattern) {\n    super(pattern);\n  }\n  static get type() {\n    return 'prefix-exact'\n  }\n  static get multiRegex() {\n    return /^\\^\"(.*)\"$/\n  }\n  static get singleRegex() {\n    return /^\\^(.*)$/\n  }\n  search(text) {\n    const isMatch = text.startsWith(this.pattern);\n\n    return {\n      isMatch,\n      score: isMatch ? 0 : 1,\n      indices: [0, this.pattern.length - 1]\n    }\n  }\n}\n\n// Token: !^fire\n\nclass InversePrefixExactMatch extends BaseMatch {\n  constructor(pattern) {\n    super(pattern);\n  }\n  static get type() {\n    return 'inverse-prefix-exact'\n  }\n  static get multiRegex() {\n    return /^!\\^\"(.*)\"$/\n  }\n  static get singleRegex() {\n    return /^!\\^(.*)$/\n  }\n  search(text) {\n    const isMatch = !text.startsWith(this.pattern);\n\n    return {\n      isMatch,\n      score: isMatch ? 0 : 1,\n      indices: [0, text.length - 1]\n    }\n  }\n}\n\n// Token: .file$\n\nclass SuffixExactMatch extends BaseMatch {\n  constructor(pattern) {\n    super(pattern);\n  }\n  static get type() {\n    return 'suffix-exact'\n  }\n  static get multiRegex() {\n    return /^\"(.*)\"\\$$/\n  }\n  static get singleRegex() {\n    return /^(.*)\\$$/\n  }\n  search(text) {\n    const isMatch = text.endsWith(this.pattern);\n\n    return {\n      isMatch,\n      score: isMatch ? 0 : 1,\n      indices: [text.length - this.pattern.length, text.length - 1]\n    }\n  }\n}\n\n// Token: !.file$\n\nclass InverseSuffixExactMatch extends BaseMatch {\n  constructor(pattern) {\n    super(pattern);\n  }\n  static get type() {\n    return 'inverse-suffix-exact'\n  }\n  static get multiRegex() {\n    return /^!\"(.*)\"\\$$/\n  }\n  static get singleRegex() {\n    return /^!(.*)\\$$/\n  }\n  search(text) {\n    const isMatch = !text.endsWith(this.pattern);\n    return {\n      isMatch,\n      score: isMatch ? 0 : 1,\n      indices: [0, text.length - 1]\n    }\n  }\n}\n\nclass FuzzyMatch extends BaseMatch {\n  constructor(\n    pattern,\n    {\n      location = Config.location,\n      threshold = Config.threshold,\n      distance = Config.distance,\n      includeMatches = Config.includeMatches,\n      findAllMatches = Config.findAllMatches,\n      minMatchCharLength = Config.minMatchCharLength,\n      isCaseSensitive = Config.isCaseSensitive,\n      ignoreLocation = Config.ignoreLocation\n    } = {}\n  ) {\n    super(pattern);\n    this._bitapSearch = new BitapSearch(pattern, {\n      location,\n      threshold,\n      distance,\n      includeMatches,\n      findAllMatches,\n      minMatchCharLength,\n      isCaseSensitive,\n      ignoreLocation\n    });\n  }\n  static get type() {\n    return 'fuzzy'\n  }\n  static get multiRegex() {\n    return /^\"(.*)\"$/\n  }\n  static get singleRegex() {\n    return /^(.*)$/\n  }\n  search(text) {\n    return this._bitapSearch.searchIn(text)\n  }\n}\n\n// Token: 'file\n\nclass IncludeMatch extends BaseMatch {\n  constructor(pattern) {\n    super(pattern);\n  }\n  static get type() {\n    return 'include'\n  }\n  static get multiRegex() {\n    return /^'\"(.*)\"$/\n  }\n  static get singleRegex() {\n    return /^'(.*)$/\n  }\n  search(text) {\n    let location = 0;\n    let index;\n\n    const indices = [];\n    const patternLen = this.pattern.length;\n\n    // Get all exact matches\n    while ((index = text.indexOf(this.pattern, location)) > -1) {\n      location = index + patternLen;\n      indices.push([index, location - 1]);\n    }\n\n    const isMatch = !!indices.length;\n\n    return {\n      isMatch,\n      score: isMatch ? 0 : 1,\n      indices\n    }\n  }\n}\n\n// \u2757Order is important. DO NOT CHANGE.\nconst searchers = [\n  ExactMatch,\n  IncludeMatch,\n  PrefixExactMatch,\n  InversePrefixExactMatch,\n  InverseSuffixExactMatch,\n  SuffixExactMatch,\n  InverseExactMatch,\n  FuzzyMatch\n];\n\nconst searchersLen = searchers.length;\n\n// Regex to split by spaces, but keep anything in quotes together\nconst SPACE_RE = / +(?=(?:[^\\\"]*\\\"[^\\\"]*\\\")*[^\\\"]*$)/;\nconst OR_TOKEN = '|';\n\n// Return a 2D array representation of the query, for simpler parsing.\n// Example:\n// \"^core go$ | rb$ | py$ xy$\" => [[\"^core\", \"go$\"], [\"rb$\"], [\"py$\", \"xy$\"]]\nfunction parseQuery(pattern, options = {}) {\n  return pattern.split(OR_TOKEN).map((item) => {\n    let query = item\n      .trim()\n      .split(SPACE_RE)\n      .filter((item) => item && !!item.trim());\n\n    let results = [];\n    for (let i = 0, len = query.length; i < len; i += 1) {\n      const queryItem = query[i];\n\n      // 1. Handle multiple query match (i.e, once that are quoted, like `\"hello world\"`)\n      let found = false;\n      let idx = -1;\n      while (!found && ++idx < searchersLen) {\n        const searcher = searchers[idx];\n        let token = searcher.isMultiMatch(queryItem);\n        if (token) {\n          results.push(new searcher(token, options));\n          found = true;\n        }\n      }\n\n      if (found) {\n        continue\n      }\n\n      // 2. Handle single query matches (i.e, once that are *not* quoted)\n      idx = -1;\n      while (++idx < searchersLen) {\n        const searcher = searchers[idx];\n        let token = searcher.isSingleMatch(queryItem);\n        if (token) {\n          results.push(new searcher(token, options));\n          break\n        }\n      }\n    }\n\n    return results\n  })\n}\n\n// These extended matchers can return an array of matches, as opposed\n// to a singl match\nconst MultiMatchSet = new Set([FuzzyMatch.type, IncludeMatch.type]);\n\n/**\n * Command-like searching\n * ======================\n *\n * Given multiple search terms delimited by spaces.e.g. `^jscript .python$ ruby !java`,\n * search in a given text.\n *\n * Search syntax:\n *\n * | Token       | Match type                 | Description                            |\n * | ----------- | -------------------------- | -------------------------------------- |\n * | `jscript`   | fuzzy-match                | Items that fuzzy match `jscript`       |\n * | `=scheme`   | exact-match                | Items that are `scheme`                |\n * | `'python`   | include-match              | Items that include `python`            |\n * | `!ruby`     | inverse-exact-match        | Items that do not include `ruby`       |\n * | `^java`     | prefix-exact-match         | Items that start with `java`           |\n * | `!^earlang` | inverse-prefix-exact-match | Items that do not start with `earlang` |\n * | `.js$`      | suffix-exact-match         | Items that end with `.js`              |\n * | `!.go$`     | inverse-suffix-exact-match | Items that do not end with `.go`       |\n *\n * A single pipe character acts as an OR operator. For example, the following\n * query matches entries that start with `core` and end with either`go`, `rb`,\n * or`py`.\n *\n * ```\n * ^core go$ | rb$ | py$\n * ```\n */\nclass ExtendedSearch {\n  constructor(\n    pattern,\n    {\n      isCaseSensitive = Config.isCaseSensitive,\n      includeMatches = Config.includeMatches,\n      minMatchCharLength = Config.minMatchCharLength,\n      ignoreLocation = Config.ignoreLocation,\n      findAllMatches = Config.findAllMatches,\n      location = Config.location,\n      threshold = Config.threshold,\n      distance = Config.distance\n    } = {}\n  ) {\n    this.query = null;\n    this.options = {\n      isCaseSensitive,\n      includeMatches,\n      minMatchCharLength,\n      findAllMatches,\n      ignoreLocation,\n      location,\n      threshold,\n      distance\n    };\n\n    this.pattern = isCaseSensitive ? pattern : pattern.toLowerCase();\n    this.query = parseQuery(this.pattern, this.options);\n  }\n\n  static condition(_, options) {\n    return options.useExtendedSearch\n  }\n\n  searchIn(text) {\n    const query = this.query;\n\n    if (!query) {\n      return {\n        isMatch: false,\n        score: 1\n      }\n    }\n\n    const { includeMatches, isCaseSensitive } = this.options;\n\n    text = isCaseSensitive ? text : text.toLowerCase();\n\n    let numMatches = 0;\n    let allIndices = [];\n    let totalScore = 0;\n\n    // ORs\n    for (let i = 0, qLen = query.length; i < qLen; i += 1) {\n      const searchers = query[i];\n\n      // Reset indices\n      allIndices.length = 0;\n      numMatches = 0;\n\n      // ANDs\n      for (let j = 0, pLen = searchers.length; j < pLen; j += 1) {\n        const searcher = searchers[j];\n        const { isMatch, indices, score } = searcher.search(text);\n\n        if (isMatch) {\n          numMatches += 1;\n          totalScore += score;\n          if (includeMatches) {\n            const type = searcher.constructor.type;\n            if (MultiMatchSet.has(type)) {\n              allIndices = [...allIndices, ...indices];\n            } else {\n              allIndices.push(indices);\n            }\n          }\n        } else {\n          totalScore = 0;\n          numMatches = 0;\n          allIndices.length = 0;\n          break\n        }\n      }\n\n      // OR condition, so if TRUE, return\n      if (numMatches) {\n        let result = {\n          isMatch: true,\n          score: totalScore / numMatches\n        };\n\n        if (includeMatches) {\n          result.indices = allIndices;\n        }\n\n        return result\n      }\n    }\n\n    // Nothing was matched\n    return {\n      isMatch: false,\n      score: 1\n    }\n  }\n}\n\nconst registeredSearchers = [];\n\nfunction register(...args) {\n  registeredSearchers.push(...args);\n}\n\nfunction createSearcher(pattern, options) {\n  for (let i = 0, len = registeredSearchers.length; i < len; i += 1) {\n    let searcherClass = registeredSearchers[i];\n    if (searcherClass.condition(pattern, options)) {\n      return new searcherClass(pattern, options)\n    }\n  }\n\n  return new BitapSearch(pattern, options)\n}\n\nconst LogicalOperator = {\n  AND: '$and',\n  OR: '$or'\n};\n\nconst KeyType = {\n  PATH: '$path',\n  PATTERN: '$val'\n};\n\nconst isExpression = (query) =>\n  !!(query[LogicalOperator.AND] || query[LogicalOperator.OR]);\n\nconst isPath = (query) => !!query[KeyType.PATH];\n\nconst isLeaf = (query) =>\n  !isArray(query) && isObject(query) && !isExpression(query);\n\nconst convertToExplicit = (query) => ({\n  [LogicalOperator.AND]: Object.keys(query).map((key) => ({\n    [key]: query[key]\n  }))\n});\n\n// When `auto` is `true`, the parse function will infer and initialize and add\n// the appropriate `Searcher` instance\nfunction parse(query, options, { auto = true } = {}) {\n  const next = (query) => {\n    let keys = Object.keys(query);\n\n    const isQueryPath = isPath(query);\n\n    if (!isQueryPath && keys.length > 1 && !isExpression(query)) {\n      return next(convertToExplicit(query))\n    }\n\n    if (isLeaf(query)) {\n      const key = isQueryPath ? query[KeyType.PATH] : keys[0];\n\n      const pattern = isQueryPath ? query[KeyType.PATTERN] : query[key];\n\n      if (!isString(pattern)) {\n        throw new Error(LOGICAL_SEARCH_INVALID_QUERY_FOR_KEY(key))\n      }\n\n      const obj = {\n        keyId: createKeyId(key),\n        pattern\n      };\n\n      if (auto) {\n        obj.searcher = createSearcher(pattern, options);\n      }\n\n      return obj\n    }\n\n    let node = {\n      children: [],\n      operator: keys[0]\n    };\n\n    keys.forEach((key) => {\n      const value = query[key];\n\n      if (isArray(value)) {\n        value.forEach((item) => {\n          node.children.push(next(item));\n        });\n      }\n    });\n\n    return node\n  };\n\n  if (!isExpression(query)) {\n    query = convertToExplicit(query);\n  }\n\n  return next(query)\n}\n\n// Practical scoring function\nfunction computeScore(\n  results,\n  { ignoreFieldNorm = Config.ignoreFieldNorm }\n) {\n  results.forEach((result) => {\n    let totalScore = 1;\n\n    result.matches.forEach(({ key, norm, score }) => {\n      const weight = key ? key.weight : null;\n\n      totalScore *= Math.pow(\n        score === 0 && weight ? Number.EPSILON : score,\n        (weight || 1) * (ignoreFieldNorm ? 1 : norm)\n      );\n    });\n\n    result.score = totalScore;\n  });\n}\n\nfunction transformMatches(result, data) {\n  const matches = result.matches;\n  data.matches = [];\n\n  if (!isDefined(matches)) {\n    return\n  }\n\n  matches.forEach((match) => {\n    if (!isDefined(match.indices) || !match.indices.length) {\n      return\n    }\n\n    const { indices, value } = match;\n\n    let obj = {\n      indices,\n      value\n    };\n\n    if (match.key) {\n      obj.key = match.key.src;\n    }\n\n    if (match.idx > -1) {\n      obj.refIndex = match.idx;\n    }\n\n    data.matches.push(obj);\n  });\n}\n\nfunction transformScore(result, data) {\n  data.score = result.score;\n}\n\nfunction format(\n  results,\n  docs,\n  {\n    includeMatches = Config.includeMatches,\n    includeScore = Config.includeScore\n  } = {}\n) {\n  const transformers = [];\n\n  if (includeMatches) transformers.push(transformMatches);\n  if (includeScore) transformers.push(transformScore);\n\n  return results.map((result) => {\n    const { idx } = result;\n\n    const data = {\n      item: docs[idx],\n      refIndex: idx\n    };\n\n    if (transformers.length) {\n      transformers.forEach((transformer) => {\n        transformer(result, data);\n      });\n    }\n\n    return data\n  })\n}\n\nclass Fuse {\n  constructor(docs, options = {}, index) {\n    this.options = { ...Config, ...options };\n\n    if (\n      this.options.useExtendedSearch &&\n      !true\n    ) {}\n\n    this._keyStore = new KeyStore(this.options.keys);\n\n    this.setCollection(docs, index);\n  }\n\n  setCollection(docs, index) {\n    this._docs = docs;\n\n    if (index && !(index instanceof FuseIndex)) {\n      throw new Error(INCORRECT_INDEX_TYPE)\n    }\n\n    this._myIndex =\n      index ||\n      createIndex(this.options.keys, this._docs, {\n        getFn: this.options.getFn,\n        fieldNormWeight: this.options.fieldNormWeight\n      });\n  }\n\n  add(doc) {\n    if (!isDefined(doc)) {\n      return\n    }\n\n    this._docs.push(doc);\n    this._myIndex.add(doc);\n  }\n\n  remove(predicate = (/* doc, idx */) => false) {\n    const results = [];\n\n    for (let i = 0, len = this._docs.length; i < len; i += 1) {\n      const doc = this._docs[i];\n      if (predicate(doc, i)) {\n        this.removeAt(i);\n        i -= 1;\n        len -= 1;\n\n        results.push(doc);\n      }\n    }\n\n    return results\n  }\n\n  removeAt(idx) {\n    this._docs.splice(idx, 1);\n    this._myIndex.removeAt(idx);\n  }\n\n  getIndex() {\n    return this._myIndex\n  }\n\n  search(query, { limit = -1 } = {}) {\n    const {\n      includeMatches,\n      includeScore,\n      shouldSort,\n      sortFn,\n      ignoreFieldNorm\n    } = this.options;\n\n    let results = isString(query)\n      ? isString(this._docs[0])\n        ? this._searchStringList(query)\n        : this._searchObjectList(query)\n      : this._searchLogical(query);\n\n    computeScore(results, { ignoreFieldNorm });\n\n    if (shouldSort) {\n      results.sort(sortFn);\n    }\n\n    if (isNumber(limit) && limit > -1) {\n      results = results.slice(0, limit);\n    }\n\n    return format(results, this._docs, {\n      includeMatches,\n      includeScore\n    })\n  }\n\n  _searchStringList(query) {\n    const searcher = createSearcher(query, this.options);\n    const { records } = this._myIndex;\n    const results = [];\n\n    // Iterate over every string in the index\n    records.forEach(({ v: text, i: idx, n: norm }) => {\n      if (!isDefined(text)) {\n        return\n      }\n\n      const { isMatch, score, indices } = searcher.searchIn(text);\n\n      if (isMatch) {\n        results.push({\n          item: text,\n          idx,\n          matches: [{ score, value: text, norm, indices }]\n        });\n      }\n    });\n\n    return results\n  }\n\n  _searchLogical(query) {\n\n    const expression = parse(query, this.options);\n\n    const evaluate = (node, item, idx) => {\n      if (!node.children) {\n        const { keyId, searcher } = node;\n\n        const matches = this._findMatches({\n          key: this._keyStore.get(keyId),\n          value: this._myIndex.getValueForItemAtKeyId(item, keyId),\n          searcher\n        });\n\n        if (matches && matches.length) {\n          return [\n            {\n              idx,\n              item,\n              matches\n            }\n          ]\n        }\n\n        return []\n      }\n\n      const res = [];\n      for (let i = 0, len = node.children.length; i < len; i += 1) {\n        const child = node.children[i];\n        const result = evaluate(child, item, idx);\n        if (result.length) {\n          res.push(...result);\n        } else if (node.operator === LogicalOperator.AND) {\n          return []\n        }\n      }\n      return res\n    };\n\n    const records = this._myIndex.records;\n    const resultMap = {};\n    const results = [];\n\n    records.forEach(({ $: item, i: idx }) => {\n      if (isDefined(item)) {\n        let expResults = evaluate(expression, item, idx);\n\n        if (expResults.length) {\n          // Dedupe when adding\n          if (!resultMap[idx]) {\n            resultMap[idx] = { idx, item, matches: [] };\n            results.push(resultMap[idx]);\n          }\n          expResults.forEach(({ matches }) => {\n            resultMap[idx].matches.push(...matches);\n          });\n        }\n      }\n    });\n\n    return results\n  }\n\n  _searchObjectList(query) {\n    const searcher = createSearcher(query, this.options);\n    const { keys, records } = this._myIndex;\n    const results = [];\n\n    // List is Array<Object>\n    records.forEach(({ $: item, i: idx }) => {\n      if (!isDefined(item)) {\n        return\n      }\n\n      let matches = [];\n\n      // Iterate over every key (i.e, path), and fetch the value at that key\n      keys.forEach((key, keyIndex) => {\n        matches.push(\n          ...this._findMatches({\n            key,\n            value: item[keyIndex],\n            searcher\n          })\n        );\n      });\n\n      if (matches.length) {\n        results.push({\n          idx,\n          item,\n          matches\n        });\n      }\n    });\n\n    return results\n  }\n  _findMatches({ key, value, searcher }) {\n    if (!isDefined(value)) {\n      return []\n    }\n\n    let matches = [];\n\n    if (isArray(value)) {\n      value.forEach(({ v: text, i: idx, n: norm }) => {\n        if (!isDefined(text)) {\n          return\n        }\n\n        const { isMatch, score, indices } = searcher.searchIn(text);\n\n        if (isMatch) {\n          matches.push({\n            score,\n            key,\n            value: text,\n            idx,\n            norm,\n            indices\n          });\n        }\n      });\n    } else {\n      const { v: text, n: norm } = value;\n\n      const { isMatch, score, indices } = searcher.searchIn(text);\n\n      if (isMatch) {\n        matches.push({ score, key, value: text, norm, indices });\n      }\n    }\n\n    return matches\n  }\n}\n\nFuse.version = '6.6.2';\nFuse.createIndex = createIndex;\nFuse.parseIndex = parseIndex;\nFuse.config = Config;\n\n{\n  Fuse.parseQuery = parse;\n}\n\n{\n  register(ExtendedSearch);\n}\n\n\n\n\n/***/ }),\n\n/***/ 791:\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n// ESM COMPAT FLAG\n__webpack_require__.r(__webpack_exports__);\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n  \"__DO_NOT_USE__ActionTypes\": function() { return /* binding */ ActionTypes; },\n  \"applyMiddleware\": function() { return /* binding */ applyMiddleware; },\n  \"bindActionCreators\": function() { return /* binding */ bindActionCreators; },\n  \"combineReducers\": function() { return /* binding */ combineReducers; },\n  \"compose\": function() { return /* binding */ compose; },\n  \"createStore\": function() { return /* binding */ createStore; },\n  \"legacy_createStore\": function() { return /* binding */ legacy_createStore; }\n});\n\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/typeof.js\nfunction _typeof(obj) {\n  \"@babel/helpers - typeof\";\n\n  return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n    return typeof obj;\n  } : function (obj) {\n    return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n  }, _typeof(obj);\n}\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/toPrimitive.js\n\nfunction _toPrimitive(input, hint) {\n  if (_typeof(input) !== \"object\" || input === null) return input;\n  var prim = input[Symbol.toPrimitive];\n  if (prim !== undefined) {\n    var res = prim.call(input, hint || \"default\");\n    if (_typeof(res) !== \"object\") return res;\n    throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n  }\n  return (hint === \"string\" ? String : Number)(input);\n}\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/toPropertyKey.js\n\n\nfunction _toPropertyKey(arg) {\n  var key = _toPrimitive(arg, \"string\");\n  return _typeof(key) === \"symbol\" ? key : String(key);\n}\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/defineProperty.js\n\nfunction _defineProperty(obj, key, value) {\n  key = _toPropertyKey(key);\n  if (key in obj) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n  } else {\n    obj[key] = value;\n  }\n  return obj;\n}\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/objectSpread2.js\n\nfunction ownKeys(object, enumerableOnly) {\n  var keys = Object.keys(object);\n  if (Object.getOwnPropertySymbols) {\n    var symbols = Object.getOwnPropertySymbols(object);\n    enumerableOnly && (symbols = symbols.filter(function (sym) {\n      return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n    })), keys.push.apply(keys, symbols);\n  }\n  return keys;\n}\nfunction _objectSpread2(target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = null != arguments[i] ? arguments[i] : {};\n    i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {\n      _defineProperty(target, key, source[key]);\n    }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {\n      Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n    });\n  }\n  return target;\n}\n;// CONCATENATED MODULE: ./node_modules/redux/es/redux.js\n\n\n/**\n * Adapted from React: https://github.com/facebook/react/blob/master/packages/shared/formatProdErrorMessage.js\n *\n * Do not require this module directly! Use normal throw error calls. These messages will be replaced with error codes\n * during build.\n * @param {number} code\n */\nfunction formatProdErrorMessage(code) {\n  return \"Minified Redux error #\" + code + \"; visit https://redux.js.org/Errors?code=\" + code + \" for the full message or \" + 'use the non-minified dev environment for full errors. ';\n}\n\n// Inlined version of the `symbol-observable` polyfill\nvar $$observable = (function () {\n  return typeof Symbol === 'function' && Symbol.observable || '@@observable';\n})();\n\n/**\n * These are private action types reserved by Redux.\n * For any unknown actions, you must return the current state.\n * If the current state is undefined, you must return the initial state.\n * Do not reference these action types directly in your code.\n */\nvar randomString = function randomString() {\n  return Math.random().toString(36).substring(7).split('').join('.');\n};\n\nvar ActionTypes = {\n  INIT: \"@@redux/INIT\" + randomString(),\n  REPLACE: \"@@redux/REPLACE\" + randomString(),\n  PROBE_UNKNOWN_ACTION: function PROBE_UNKNOWN_ACTION() {\n    return \"@@redux/PROBE_UNKNOWN_ACTION\" + randomString();\n  }\n};\n\n/**\n * @param {any} obj The object to inspect.\n * @returns {boolean} True if the argument appears to be a plain object.\n */\nfunction isPlainObject(obj) {\n  if (typeof obj !== 'object' || obj === null) return false;\n  var proto = obj;\n\n  while (Object.getPrototypeOf(proto) !== null) {\n    proto = Object.getPrototypeOf(proto);\n  }\n\n  return Object.getPrototypeOf(obj) === proto;\n}\n\n// Inlined / shortened version of `kindOf` from https://github.com/jonschlinkert/kind-of\nfunction miniKindOf(val) {\n  if (val === void 0) return 'undefined';\n  if (val === null) return 'null';\n  var type = typeof val;\n\n  switch (type) {\n    case 'boolean':\n    case 'string':\n    case 'number':\n    case 'symbol':\n    case 'function':\n      {\n        return type;\n      }\n  }\n\n  if (Array.isArray(val)) return 'array';\n  if (isDate(val)) return 'date';\n  if (isError(val)) return 'error';\n  var constructorName = ctorName(val);\n\n  switch (constructorName) {\n    case 'Symbol':\n    case 'Promise':\n    case 'WeakMap':\n    case 'WeakSet':\n    case 'Map':\n    case 'Set':\n      return constructorName;\n  } // other\n\n\n  return type.slice(8, -1).toLowerCase().replace(/\\s/g, '');\n}\n\nfunction ctorName(val) {\n  return typeof val.constructor === 'function' ? val.constructor.name : null;\n}\n\nfunction isError(val) {\n  return val instanceof Error || typeof val.message === 'string' && val.constructor && typeof val.constructor.stackTraceLimit === 'number';\n}\n\nfunction isDate(val) {\n  if (val instanceof Date) return true;\n  return typeof val.toDateString === 'function' && typeof val.getDate === 'function' && typeof val.setDate === 'function';\n}\n\nfunction kindOf(val) {\n  var typeOfVal = typeof val;\n\n  if (false) {}\n\n  return typeOfVal;\n}\n\n/**\n * @deprecated\n *\n * **We recommend using the `configureStore` method\n * of the `@reduxjs/toolkit` package**, which replaces `createStore`.\n *\n * Redux Toolkit is our recommended approach for writing Redux logic today,\n * including store setup, reducers, data fetching, and more.\n *\n * **For more details, please read this Redux docs page:**\n * **https://redux.js.org/introduction/why-rtk-is-redux-today**\n *\n * `configureStore` from Redux Toolkit is an improved version of `createStore` that\n * simplifies setup and helps avoid common bugs.\n *\n * You should not be using the `redux` core package by itself today, except for learning purposes.\n * The `createStore` method from the core `redux` package will not be removed, but we encourage\n * all users to migrate to using Redux Toolkit for all Redux code.\n *\n * If you want to use `createStore` without this visual deprecation warning, use\n * the `legacy_createStore` import instead:\n *\n * `import { legacy_createStore as createStore} from 'redux'`\n *\n */\n\nfunction createStore(reducer, preloadedState, enhancer) {\n  var _ref2;\n\n  if (typeof preloadedState === 'function' && typeof enhancer === 'function' || typeof enhancer === 'function' && typeof arguments[3] === 'function') {\n    throw new Error( true ? formatProdErrorMessage(0) : 0);\n  }\n\n  if (typeof preloadedState === 'function' && typeof enhancer === 'undefined') {\n    enhancer = preloadedState;\n    preloadedState = undefined;\n  }\n\n  if (typeof enhancer !== 'undefined') {\n    if (typeof enhancer !== 'function') {\n      throw new Error( true ? formatProdErrorMessage(1) : 0);\n    }\n\n    return enhancer(createStore)(reducer, preloadedState);\n  }\n\n  if (typeof reducer !== 'function') {\n    throw new Error( true ? formatProdErrorMessage(2) : 0);\n  }\n\n  var currentReducer = reducer;\n  var currentState = preloadedState;\n  var currentListeners = [];\n  var nextListeners = currentListeners;\n  var isDispatching = false;\n  /**\n   * This makes a shallow copy of currentListeners so we can use\n   * nextListeners as a temporary list while dispatching.\n   *\n   * This prevents any bugs around consumers calling\n   * subscribe/unsubscribe in the middle of a dispatch.\n   */\n\n  function ensureCanMutateNextListeners() {\n    if (nextListeners === currentListeners) {\n      nextListeners = currentListeners.slice();\n    }\n  }\n  /**\n   * Reads the state tree managed by the store.\n   *\n   * @returns {any} The current state tree of your application.\n   */\n\n\n  function getState() {\n    if (isDispatching) {\n      throw new Error( true ? formatProdErrorMessage(3) : 0);\n    }\n\n    return currentState;\n  }\n  /**\n   * Adds a change listener. It will be called any time an action is dispatched,\n   * and some part of the state tree may potentially have changed. You may then\n   * call `getState()` to read the current state tree inside the callback.\n   *\n   * You may call `dispatch()` from a change listener, with the following\n   * caveats:\n   *\n   * 1. The subscriptions are snapshotted just before every `dispatch()` call.\n   * If you subscribe or unsubscribe while the listeners are being invoked, this\n   * will not have any effect on the `dispatch()` that is currently in progress.\n   * However, the next `dispatch()` call, whether nested or not, will use a more\n   * recent snapshot of the subscription list.\n   *\n   * 2. The listener should not expect to see all state changes, as the state\n   * might have been updated multiple times during a nested `dispatch()` before\n   * the listener is called. It is, however, guaranteed that all subscribers\n   * registered before the `dispatch()` started will be called with the latest\n   * state by the time it exits.\n   *\n   * @param {Function} listener A callback to be invoked on every dispatch.\n   * @returns {Function} A function to remove this change listener.\n   */\n\n\n  function subscribe(listener) {\n    if (typeof listener !== 'function') {\n      throw new Error( true ? formatProdErrorMessage(4) : 0);\n    }\n\n    if (isDispatching) {\n      throw new Error( true ? formatProdErrorMessage(5) : 0);\n    }\n\n    var isSubscribed = true;\n    ensureCanMutateNextListeners();\n    nextListeners.push(listener);\n    return function unsubscribe() {\n      if (!isSubscribed) {\n        return;\n      }\n\n      if (isDispatching) {\n        throw new Error( true ? formatProdErrorMessage(6) : 0);\n      }\n\n      isSubscribed = false;\n      ensureCanMutateNextListeners();\n      var index = nextListeners.indexOf(listener);\n      nextListeners.splice(index, 1);\n      currentListeners = null;\n    };\n  }\n  /**\n   * Dispatches an action. It is the only way to trigger a state change.\n   *\n   * The `reducer` function, used to create the store, will be called with the\n   * current state tree and the given `action`. Its return value will\n   * be considered the **next** state of the tree, and the change listeners\n   * will be notified.\n   *\n   * The base implementation only supports plain object actions. If you want to\n   * dispatch a Promise, an Observable, a thunk, or something else, you need to\n   * wrap your store creating function into the corresponding middleware. For\n   * example, see the documentation for the `redux-thunk` package. Even the\n   * middleware will eventually dispatch plain object actions using this method.\n   *\n   * @param {Object} action A plain object representing \u201Cwhat changed\u201D. It is\n   * a good idea to keep actions serializable so you can record and replay user\n   * sessions, or use the time travelling `redux-devtools`. An action must have\n   * a `type` property which may not be `undefined`. It is a good idea to use\n   * string constants for action types.\n   *\n   * @returns {Object} For convenience, the same action object you dispatched.\n   *\n   * Note that, if you use a custom middleware, it may wrap `dispatch()` to\n   * return something else (for example, a Promise you can await).\n   */\n\n\n  function dispatch(action) {\n    if (!isPlainObject(action)) {\n      throw new Error( true ? formatProdErrorMessage(7) : 0);\n    }\n\n    if (typeof action.type === 'undefined') {\n      throw new Error( true ? formatProdErrorMessage(8) : 0);\n    }\n\n    if (isDispatching) {\n      throw new Error( true ? formatProdErrorMessage(9) : 0);\n    }\n\n    try {\n      isDispatching = true;\n      currentState = currentReducer(currentState, action);\n    } finally {\n      isDispatching = false;\n    }\n\n    var listeners = currentListeners = nextListeners;\n\n    for (var i = 0; i < listeners.length; i++) {\n      var listener = listeners[i];\n      listener();\n    }\n\n    return action;\n  }\n  /**\n   * Replaces the reducer currently used by the store to calculate the state.\n   *\n   * You might need this if your app implements code splitting and you want to\n   * load some of the reducers dynamically. You might also need this if you\n   * implement a hot reloading mechanism for Redux.\n   *\n   * @param {Function} nextReducer The reducer for the store to use instead.\n   * @returns {void}\n   */\n\n\n  function replaceReducer(nextReducer) {\n    if (typeof nextReducer !== 'function') {\n      throw new Error( true ? formatProdErrorMessage(10) : 0);\n    }\n\n    currentReducer = nextReducer; // This action has a similiar effect to ActionTypes.INIT.\n    // Any reducers that existed in both the new and old rootReducer\n    // will receive the previous state. This effectively populates\n    // the new state tree with any relevant data from the old one.\n\n    dispatch({\n      type: ActionTypes.REPLACE\n    });\n  }\n  /**\n   * Interoperability point for observable/reactive libraries.\n   * @returns {observable} A minimal observable of state changes.\n   * For more information, see the observable proposal:\n   * https://github.com/tc39/proposal-observable\n   */\n\n\n  function observable() {\n    var _ref;\n\n    var outerSubscribe = subscribe;\n    return _ref = {\n      /**\n       * The minimal observable subscription method.\n       * @param {Object} observer Any object that can be used as an observer.\n       * The observer object should have a `next` method.\n       * @returns {subscription} An object with an `unsubscribe` method that can\n       * be used to unsubscribe the observable from the store, and prevent further\n       * emission of values from the observable.\n       */\n      subscribe: function subscribe(observer) {\n        if (typeof observer !== 'object' || observer === null) {\n          throw new Error( true ? formatProdErrorMessage(11) : 0);\n        }\n\n        function observeState() {\n          if (observer.next) {\n            observer.next(getState());\n          }\n        }\n\n        observeState();\n        var unsubscribe = outerSubscribe(observeState);\n        return {\n          unsubscribe: unsubscribe\n        };\n      }\n    }, _ref[$$observable] = function () {\n      return this;\n    }, _ref;\n  } // When a store is created, an \"INIT\" action is dispatched so that every\n  // reducer returns their initial state. This effectively populates\n  // the initial state tree.\n\n\n  dispatch({\n    type: ActionTypes.INIT\n  });\n  return _ref2 = {\n    dispatch: dispatch,\n    subscribe: subscribe,\n    getState: getState,\n    replaceReducer: replaceReducer\n  }, _ref2[$$observable] = observable, _ref2;\n}\n/**\n * Creates a Redux store that holds the state tree.\n *\n * **We recommend using `configureStore` from the\n * `@reduxjs/toolkit` package**, which replaces `createStore`:\n * **https://redux.js.org/introduction/why-rtk-is-redux-today**\n *\n * The only way to change the data in the store is to call `dispatch()` on it.\n *\n * There should only be a single store in your app. To specify how different\n * parts of the state tree respond to actions, you may combine several reducers\n * into a single reducer function by using `combineReducers`.\n *\n * @param {Function} reducer A function that returns the next state tree, given\n * the current state tree and the action to handle.\n *\n * @param {any} [preloadedState] The initial state. You may optionally specify it\n * to hydrate the state from the server in universal apps, or to restore a\n * previously serialized user session.\n * If you use `combineReducers` to produce the root reducer function, this must be\n * an object with the same shape as `combineReducers` keys.\n *\n * @param {Function} [enhancer] The store enhancer. You may optionally specify it\n * to enhance the store with third-party capabilities such as middleware,\n * time travel, persistence, etc. The only store enhancer that ships with Redux\n * is `applyMiddleware()`.\n *\n * @returns {Store} A Redux store that lets you read the state, dispatch actions\n * and subscribe to changes.\n */\n\nvar legacy_createStore = createStore;\n\n/**\n * Prints a warning in the console if it exists.\n *\n * @param {String} message The warning message.\n * @returns {void}\n */\nfunction warning(message) {\n  /* eslint-disable no-console */\n  if (typeof console !== 'undefined' && typeof console.error === 'function') {\n    console.error(message);\n  }\n  /* eslint-enable no-console */\n\n\n  try {\n    // This error was thrown as a convenience so that if you enable\n    // \"break on all exceptions\" in your console,\n    // it would pause the execution at this line.\n    throw new Error(message);\n  } catch (e) {} // eslint-disable-line no-empty\n\n}\n\nfunction getUnexpectedStateShapeWarningMessage(inputState, reducers, action, unexpectedKeyCache) {\n  var reducerKeys = Object.keys(reducers);\n  var argumentName = action && action.type === ActionTypes.INIT ? 'preloadedState argument passed to createStore' : 'previous state received by the reducer';\n\n  if (reducerKeys.length === 0) {\n    return 'Store does not have a valid reducer. Make sure the argument passed ' + 'to combineReducers is an object whose values are reducers.';\n  }\n\n  if (!isPlainObject(inputState)) {\n    return \"The \" + argumentName + \" has unexpected type of \\\"\" + kindOf(inputState) + \"\\\". Expected argument to be an object with the following \" + (\"keys: \\\"\" + reducerKeys.join('\", \"') + \"\\\"\");\n  }\n\n  var unexpectedKeys = Object.keys(inputState).filter(function (key) {\n    return !reducers.hasOwnProperty(key) && !unexpectedKeyCache[key];\n  });\n  unexpectedKeys.forEach(function (key) {\n    unexpectedKeyCache[key] = true;\n  });\n  if (action && action.type === ActionTypes.REPLACE) return;\n\n  if (unexpectedKeys.length > 0) {\n    return \"Unexpected \" + (unexpectedKeys.length > 1 ? 'keys' : 'key') + \" \" + (\"\\\"\" + unexpectedKeys.join('\", \"') + \"\\\" found in \" + argumentName + \". \") + \"Expected to find one of the known reducer keys instead: \" + (\"\\\"\" + reducerKeys.join('\", \"') + \"\\\". Unexpected keys will be ignored.\");\n  }\n}\n\nfunction assertReducerShape(reducers) {\n  Object.keys(reducers).forEach(function (key) {\n    var reducer = reducers[key];\n    var initialState = reducer(undefined, {\n      type: ActionTypes.INIT\n    });\n\n    if (typeof initialState === 'undefined') {\n      throw new Error( true ? formatProdErrorMessage(12) : 0);\n    }\n\n    if (typeof reducer(undefined, {\n      type: ActionTypes.PROBE_UNKNOWN_ACTION()\n    }) === 'undefined') {\n      throw new Error( true ? formatProdErrorMessage(13) : 0);\n    }\n  });\n}\n/**\n * Turns an object whose values are different reducer functions, into a single\n * reducer function. It will call every child reducer, and gather their results\n * into a single state object, whose keys correspond to the keys of the passed\n * reducer functions.\n *\n * @param {Object} reducers An object whose values correspond to different\n * reducer functions that need to be combined into one. One handy way to obtain\n * it is to use ES6 `import * as reducers` syntax. The reducers may never return\n * undefined for any action. Instead, they should return their initial state\n * if the state passed to them was undefined, and the current state for any\n * unrecognized action.\n *\n * @returns {Function} A reducer function that invokes every reducer inside the\n * passed object, and builds a state object with the same shape.\n */\n\n\nfunction combineReducers(reducers) {\n  var reducerKeys = Object.keys(reducers);\n  var finalReducers = {};\n\n  for (var i = 0; i < reducerKeys.length; i++) {\n    var key = reducerKeys[i];\n\n    if (false) {}\n\n    if (typeof reducers[key] === 'function') {\n      finalReducers[key] = reducers[key];\n    }\n  }\n\n  var finalReducerKeys = Object.keys(finalReducers); // This is used to make sure we don't warn about the same\n  // keys multiple times.\n\n  var unexpectedKeyCache;\n\n  if (false) {}\n\n  var shapeAssertionError;\n\n  try {\n    assertReducerShape(finalReducers);\n  } catch (e) {\n    shapeAssertionError = e;\n  }\n\n  return function combination(state, action) {\n    if (state === void 0) {\n      state = {};\n    }\n\n    if (shapeAssertionError) {\n      throw shapeAssertionError;\n    }\n\n    if (false) { var warningMessage; }\n\n    var hasChanged = false;\n    var nextState = {};\n\n    for (var _i = 0; _i < finalReducerKeys.length; _i++) {\n      var _key = finalReducerKeys[_i];\n      var reducer = finalReducers[_key];\n      var previousStateForKey = state[_key];\n      var nextStateForKey = reducer(previousStateForKey, action);\n\n      if (typeof nextStateForKey === 'undefined') {\n        var actionType = action && action.type;\n        throw new Error( true ? formatProdErrorMessage(14) : 0);\n      }\n\n      nextState[_key] = nextStateForKey;\n      hasChanged = hasChanged || nextStateForKey !== previousStateForKey;\n    }\n\n    hasChanged = hasChanged || finalReducerKeys.length !== Object.keys(state).length;\n    return hasChanged ? nextState : state;\n  };\n}\n\nfunction bindActionCreator(actionCreator, dispatch) {\n  return function () {\n    return dispatch(actionCreator.apply(this, arguments));\n  };\n}\n/**\n * Turns an object whose values are action creators, into an object with the\n * same keys, but with every function wrapped into a `dispatch` call so they\n * may be invoked directly. This is just a convenience method, as you can call\n * `store.dispatch(MyActionCreators.doSomething())` yourself just fine.\n *\n * For convenience, you can also pass an action creator as the first argument,\n * and get a dispatch wrapped function in return.\n *\n * @param {Function|Object} actionCreators An object whose values are action\n * creator functions. One handy way to obtain it is to use ES6 `import * as`\n * syntax. You may also pass a single function.\n *\n * @param {Function} dispatch The `dispatch` function available on your Redux\n * store.\n *\n * @returns {Function|Object} The object mimicking the original object, but with\n * every action creator wrapped into the `dispatch` call. If you passed a\n * function as `actionCreators`, the return value will also be a single\n * function.\n */\n\n\nfunction bindActionCreators(actionCreators, dispatch) {\n  if (typeof actionCreators === 'function') {\n    return bindActionCreator(actionCreators, dispatch);\n  }\n\n  if (typeof actionCreators !== 'object' || actionCreators === null) {\n    throw new Error( true ? formatProdErrorMessage(16) : 0);\n  }\n\n  var boundActionCreators = {};\n\n  for (var key in actionCreators) {\n    var actionCreator = actionCreators[key];\n\n    if (typeof actionCreator === 'function') {\n      boundActionCreators[key] = bindActionCreator(actionCreator, dispatch);\n    }\n  }\n\n  return boundActionCreators;\n}\n\n/**\n * Composes single-argument functions from right to left. The rightmost\n * function can take multiple arguments as it provides the signature for\n * the resulting composite function.\n *\n * @param {...Function} funcs The functions to compose.\n * @returns {Function} A function obtained by composing the argument functions\n * from right to left. For example, compose(f, g, h) is identical to doing\n * (...args) => f(g(h(...args))).\n */\nfunction compose() {\n  for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n    funcs[_key] = arguments[_key];\n  }\n\n  if (funcs.length === 0) {\n    return function (arg) {\n      return arg;\n    };\n  }\n\n  if (funcs.length === 1) {\n    return funcs[0];\n  }\n\n  return funcs.reduce(function (a, b) {\n    return function () {\n      return a(b.apply(void 0, arguments));\n    };\n  });\n}\n\n/**\n * Creates a store enhancer that applies middleware to the dispatch method\n * of the Redux store. This is handy for a variety of tasks, such as expressing\n * asynchronous actions in a concise manner, or logging every action payload.\n *\n * See `redux-thunk` package as an example of the Redux middleware.\n *\n * Because middleware is potentially asynchronous, this should be the first\n * store enhancer in the composition chain.\n *\n * Note that each middleware will be given the `dispatch` and `getState` functions\n * as named arguments.\n *\n * @param {...Function} middlewares The middleware chain to be applied.\n * @returns {Function} A store enhancer applying the middleware.\n */\n\nfunction applyMiddleware() {\n  for (var _len = arguments.length, middlewares = new Array(_len), _key = 0; _key < _len; _key++) {\n    middlewares[_key] = arguments[_key];\n  }\n\n  return function (createStore) {\n    return function () {\n      var store = createStore.apply(void 0, arguments);\n\n      var _dispatch = function dispatch() {\n        throw new Error( true ? formatProdErrorMessage(15) : 0);\n      };\n\n      var middlewareAPI = {\n        getState: store.getState,\n        dispatch: function dispatch() {\n          return _dispatch.apply(void 0, arguments);\n        }\n      };\n      var chain = middlewares.map(function (middleware) {\n        return middleware(middlewareAPI);\n      });\n      _dispatch = compose.apply(void 0, chain)(store.dispatch);\n      return _objectSpread2(_objectSpread2({}, store), {}, {\n        dispatch: _dispatch\n      });\n    };\n  };\n}\n\n/*\n * This is a dummy function to check if the function name has been altered by minification.\n * If the function has been minified and NODE_ENV !== 'production', warn the user.\n */\n\nfunction isCrushed() {}\n\nif (false) {}\n\n\n\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tvar cachedModule = __webpack_module_cache__[moduleId];\n/******/ \t\tif (cachedModule !== undefined) {\n/******/ \t\t\treturn cachedModule.exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\t// no module.id needed\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\n/******/ \t/* webpack/runtime/compat get default export */\n/******/ \t!function() {\n/******/ \t\t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t\t__webpack_require__.n = function(module) {\n/******/ \t\t\tvar getter = module && module.__esModule ?\n/******/ \t\t\t\tfunction() { return module['default']; } :\n/******/ \t\t\t\tfunction() { return module; };\n/******/ \t\t\t__webpack_require__.d(getter, { a: getter });\n/******/ \t\t\treturn getter;\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/define property getters */\n/******/ \t!function() {\n/******/ \t\t// define getter functions for harmony exports\n/******/ \t\t__webpack_require__.d = function(exports, definition) {\n/******/ \t\t\tfor(var key in definition) {\n/******/ \t\t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/hasOwnProperty shorthand */\n/******/ \t!function() {\n/******/ \t\t__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/make namespace object */\n/******/ \t!function() {\n/******/ \t\t// define __esModule on exports\n/******/ \t\t__webpack_require__.r = function(exports) {\n/******/ \t\t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t\t}\n/******/ \t\t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/************************************************************************/\nvar __webpack_exports__ = {};\n// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.\n!function() {\n/* harmony import */ var _scripts_choices__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(373);\n/* harmony import */ var _scripts_choices__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_scripts_choices__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _scripts_interfaces__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(187);\n/* harmony import */ var _scripts_interfaces__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_scripts_interfaces__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _scripts_constants__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(883);\n/* harmony import */ var _scripts_defaults__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(789);\n/* harmony import */ var _scripts_templates__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(686);\n\n\n\n\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ((_scripts_choices__WEBPACK_IMPORTED_MODULE_0___default()));\n\n}();\n__webpack_exports__ = __webpack_exports__[\"default\"];\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});", "import { Controller } from \"@hotwired/stimulus\"\nimport Choices from 'choices.js';\nimport autosize  from \"autosize\";\nimport GairdaoController from \"../../gairdao_controller\";\nimport {ethers} from \"ethers\";\nimport {post} from \"@rails/request.js\";\nexport default class extends Controller {\n    static targets = [ \"walletLabel\"]\n\n    initialize() {\n        const controller = this;\n        if (window.ethereum == null) {\n            console.log(\"MetaMask not installed; using read-only defaults\")\n            this.provider = ethers.getDefaultProvider();\n        }else {\n            window.ethereum.on('accountsChanged', async function (accounts) {\n                const currentAccount = accounts[0];\n                console.log(`accountsChanged: ${currentAccount}`);\n                controller.provider = new ethers.BrowserProvider(window.ethereum)\n                controller.signer = await controller.provider.getSigner(currentAccount);\n            });\n        }\n        this.notyf = GairdaoController.notification();\n    }\n\n\n    connect() {\n        this.initUI();\n    }\n\n    initUI() {\n        autosize(this.textarea);\n        const tagsDom =  this.element.querySelector('input[name=\"profile[research_field_list]\"]');\n        this.initTagsPanel(tagsDom);\n        const countryDom =  this.element.querySelector('select[name=\"profile[country]\"]');\n        this.initCountry(countryDom);\n        const avatarDom =  this.element.querySelector('div.image-input');\n        this.initAvatar(avatarDom);\n    }\n\n    initAvatar(targetDom){\n        const avatarImageInput= new KTImageInput(targetDom);\n        const controller = this;\n        avatarImageInput.on(\"kt.imageinput.removed\", function() {\n            controller.element.querySelector('input[name=\"profile[avatar]\"]').value = '';\n        });\n    }\n\n    initCountry(targetDom){\n        this.choices = new Choices(targetDom);\n    }\n\n    initTagsPanel(targetDom) {\n        this.tagify = GairdaoController.initTagsPanel(targetDom);\n    }\n\n    chainChangedHandler = async (chainId) => {\n        const decimalChainId = parseInt(chainId, 16);\n        if (decimalChainId !== 10) {\n            GairdaoController.notification().error('Please change to the OP Mainnet in Metamask');\n        }\n    };\n    walletBindCheckbox = async (e) => {\n        const metamaskUri = e.currentTarget.dataset.metamaskUri;\n        const target = e.currentTarget;\n        target.disabled = true;\n        try {\n            const provider = await GairdaoController.initMetamaskProvider();\n            if (provider == null) { target.checked = !target.checked;return;}\n            window.ethereum.off('chainChanged', this.chainChangedHandler);\n            const signer = await provider.getSigner();\n            const currentAddress = this.walletLabelTarget.textContent;\n            const network = await provider.getNetwork();\n            if (network.chainId !== BigInt(10)) {\n                GairdaoController.notification().error('Please change to the OP Mainnet in Metamask');\n                window.ethereum.on('chainChanged', this.chainChangedHandler);\n                target.checked = !target.checked;\n            } else {\n                if (target.checked) {\n                    if (currentAddress !== '' && currentAddress.trim() !== signer.address) {\n                        this.notyf.error('Please connect with the same wallet to continue');\n                        window.ethereum.request({ method: 'eth_requestAccounts' });\n                        target.checked = !target.checked;\n                        return;\n                    }\n\n                    const response = await post(`${metamaskUri}/wallet_message`,\n                        { body: JSON.stringify({ user: { address: signer.address } }) }\n                    )\n                    if (response.ok) {\n                        const message = await response.json\n                        if (message.bound == true) {\n                            this.notyf.error('This wallet has been bound to another account');\n                            target.checked = false;\n                            return;\n                        }\n                        const signature = await signer.signMessage(message.message);\n                        const bindResponse = await post(`${metamaskUri}/wallet`, { body: JSON.stringify({ user: { signature:signature, address: signer.address  } }) })\n                        if (bindResponse.ok) {\n                            const bindMessage = await bindResponse.json\n                            if (bindMessage.bound == true) {\n                                this.walletLabelTarget.innerText = `${signer.address}`;\n                                this.notyf.success('Wallet bound successfully');\n                            } else {\n\n                                this.notyf.success('Wallet bound failed');\n                                target.checked = false;\n                            }\n                        } else {\n                            this.notyf.error('Wallet bound failed');\n                            target.checked = false;\n                        }\n\n                    }\n                } else {\n                    // \u53D6\u6D88\u7ED1\u5B9A,\u4E00\u5B9A\u662F\u53D6\u6D88\u5F53\u524D\u5730\u5740\u7684\u7ED1\u5B9A\n                    if (currentAddress === '') {\n                        this.notyf.error('Current wallet is not bound to any account');\n                        return;\n                    }\n                    const bindResponse = await post(`${metamaskUri}/wallet`, { body: JSON.stringify({ user: { address: currentAddress, action: 'unbind'  } }) })\n                    if (bindResponse.ok) {\n                        const bindMessage = await bindResponse.json\n                        if (bindMessage.bound == false) {\n                            this.walletLabelTarget.innerText = '';\n                            this.notyf.success('Wallet unbound successfully');\n                        } else {\n                            this.notyf.error('Wallet unbound failed');\n                            target.checked = true;\n                        }\n                    } else {\n                        this.notyf.error('Wallet unbound failed');\n                        target.checked = true;\n                    }\n                }\n            }\n\n        } catch (error) {\n            if (error.code == 'ACTION_REJECTED') {\n                this.notyf.error('Please sign the message to continue');\n                target.checked = !target.checked;\n            }\n        } finally {\n            target.disabled = false;\n        }\n    }\n\n\n    get textarea() {\n        return this.element.querySelector('textarea');\n    }\n\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport autosize from \"autosize\";\nimport GairdaoController from \"../gairdao_controller\";\n\nexport default class extends Controller {\n    connect() {\n        this.initUI();\n    }\n\n    get textarea() {\n        return this.element.querySelector('textarea');\n    }\n\n    initUI() {\n        autosize(this.textarea);\n\n        const avatarDom =  this.element.querySelector('div.image-input');\n        this.initAvatar(avatarDom);\n\n        const tagsDom =  this.element.querySelector('input[name=\"community[research_field_list]\"]');\n        this.initTagsPanel(tagsDom);\n    }\n\n    initAvatar(targetDom) {\n        new KTImageInput(targetDom);\n    }\n\n    initTagsPanel(targetDom) {\n        this.tagify = GairdaoController.initTagsPanel(targetDom);\n    }\n\n}\n", "// Class definition\nconst Sticky = function(element, options) {\n    ////////////////////////////\n    // ** Private constiables  ** //\n    ////////////////////////////\n    let the = this;\n\n    if ( typeof element === \"undefined\" || element === null ) {\n        return;\n    }\n\n    // Default Options\n    const defaultOptions = {\n        offset: 200,\n        reverse: false,\n        release: null,\n        animation: true,\n        animationSpeed: '0.8s',\n        animationClass: 'animation-slide-in-down'\n    };\n    ////////////////////////////\n    // ** Private Methods  ** //\n    ////////////////////////////\n\n    const _construct = function() {\n        if ( KTUtil.data(element).has('sticky') === true ) {\n            the = KTUtil.data(element).get('sticky');\n        } else {\n            _init();\n        }\n    }\n\n    const _init = function() {\n        the.element = element;\n        the.options = KTUtil.deepExtend({}, defaultOptions, options);\n        the.uid = KTUtil.getUniqueId('sticky');\n        the.name = the.element.getAttribute('data-kt-sticky-name');\n        the.attributeName = 'data-kt-sticky-' + the.name;\n        the.attributeName2 = 'data-kt-' + the.name;\n        the.eventTriggerState = true;\n        the.lastScrollTop = 0;\n        the.targetElement = document.querySelector(_getOption('target'));\n\n        // Set initialized\n        the.element.setAttribute('data-kt-sticky', 'true');\n\n\n        // Event Handlers\n        the.targetElement.addEventListener('scroll', _scroll);\n\n        // Initial Launch\n        _scroll();\n\n        // Bind Instance\n        KTUtil.data(the.element).set('sticky', the);\n    }\n\n    const _scroll = function(e) {\n        let offset = _getOption('offset');\n        let release = _getOption('release');\n        const reverse = _getOption('reverse');\n        const st  =   the.targetElement.scrollTop;\n\n        // Exit if false\n        if ( offset === false ) {\n            _disable();\n            return;\n        }\n\n        offset = parseInt(offset);\n        release = release ? document.querySelector(release) : null;\n        const proceed = (!release || (release.offsetTop - release.clientHeight) > st);\n\n        if ( reverse === true ) {  // Release on reverse scroll mode\n            if ( st > offset && proceed ) {\n                if ( the.targetElement.hasAttribute(the.attributeName) === false) {\n                    if (_enable() === false) {\n                        return;\n                    }\n                    the.targetElement.setAttribute(the.attributeName, 'on');\n                    the.targetElement.setAttribute(the.attributeName2, 'on');\n                    the.element.setAttribute(\"data-kt-sticky-enabled\", \"true\");\n                }\n\n                if ( the.eventTriggerState === true ) {\n                    KTEventHandler.trigger(the.element, 'kt.sticky.on', the);\n                    KTEventHandler.trigger(the.element, 'kt.sticky.change', the);\n\n                    the.eventTriggerState = false;\n                }\n            } else { // Back scroll mode\n                if ( the.targetElement.hasAttribute(the.attributeName) === true) {\n                    _disable();\n                    the.targetElement.removeAttribute(the.attributeName);\n                    the.targetElement.removeAttribute(the.attributeName2);\n                    the.element.removeAttribute(\"data-kt-sticky-enabled\");\n                }\n\n                if ( the.eventTriggerState === false ) {\n                    KTEventHandler.trigger(the.element, 'kt.sticky.off', the);\n                    KTEventHandler.trigger(the.element, 'kt.sticky.change', the);\n                    the.eventTriggerState = true;\n                }\n            }\n\n            the.lastScrollTop = st;\n        } else { // Classic scroll mode\n            if ( st > offset && proceed ) {\n                if ( the.targetElement.hasAttribute(the.attributeName) === false) {\n\n                    if (_enable() === false) {\n                        return;\n                    } \n                    \n                    the.targetElement.setAttribute(the.attributeName, 'on');\n                    the.targetElement.setAttribute(the.attributeName2, 'on');\n                    the.element.setAttribute(\"data-kt-sticky-enabled\", \"true\");\n                }\n\n                if ( the.eventTriggerState === true ) {\n                    KTEventHandler.trigger(the.element, 'kt.sticky.on', the);\n                    KTEventHandler.trigger(the.element, 'kt.sticky.change', the);\n                    the.eventTriggerState = false;\n                }\n            } else { // back scroll mode\n                if ( the.targetElement.hasAttribute(the.attributeName) === true ) {\n                    _disable();\n                    the.targetElement.removeAttribute(the.attributeName);\n                    the.targetElement.removeAttribute(the.attributeName2);\n                    the.element.removeAttribute(\"data-kt-sticky-enabled\");\n                }\n\n                if ( the.eventTriggerState === false ) {\n                    KTEventHandler.trigger(the.element, 'kt.sticky.off', the);\n                    KTEventHandler.trigger(the.element, 'kt.sticky.change', the);\n                    the.eventTriggerState = true;\n                }\n            }\n        }      \n\n        if (release) {\n            if ( release.offsetTop - release.clientHeight > st ) {\n                the.element.setAttribute('data-kt-sticky-released', 'true');\n            } else {\n                the.element.removeAttribute('data-kt-sticky-released');\n            }\n        } \n    }\n\n    const _enable = function(update) {\n\n        let top = _getOption('top');\n        top = top ? parseInt(top) : 0;\n\n        const left = _getOption('left');\n        const right = _getOption('right');\n        let width = _getOption('width');\n        const zindex = _getOption('zindex');\n        const dependencies = _getOption('dependencies');\n        const classes = _getOption('class');\n\n        const height = _calculateHeight();\n        let heightOffset = _getOption('height-offset');\n        heightOffset = heightOffset ? parseInt(heightOffset) : 0;\n\n        if (height + heightOffset + top > KTUtil.getViewPort().height) {\n            return false;\n        }\n        \n        if ( update !== true && _getOption('animation') === true ) {\n            KTUtil.css(the.element, 'animationDuration', _getOption('animationSpeed'));\n            KTUtil.animateClass(the.element, 'animation ' + _getOption('animationClass'));\n        }\n\n        if ( classes !== null ) {\n            KTUtil.addClass(the.element, classes);\n        }\n\n        if ( zindex !== null ) {\n            KTUtil.css(the.element, 'z-index', zindex);\n            KTUtil.css(the.element, 'position', 'fixed');\n        }\n\n        if ( top >= 0 ) {\n            KTUtil.css(the.element, 'top', String(top) + 'px');\n        }\n\n        if ( width !== null ) {\n            if (width['target']) {\n                const targetElement = document.querySelector(width['target']);\n                if (targetElement) {\n                    width = KTUtil.css(targetElement, 'width');\n                }\n            }\n\n            KTUtil.css(the.element, 'width', width);\n        }\n\n        if ( left !== null ) {\n            if ( String(left).toLowerCase() === 'auto' ) {\n                const offsetLeft = KTUtil.offset(the.element).left;\n\n                if ( offsetLeft >= 0 ) {\n                    KTUtil.css(the.element, 'left', String(offsetLeft) + 'px');\n                }\n            } else {\n                KTUtil.css(the.element, 'left', left);\n            }\n        }\n\n        if ( right !== null ) {\n            KTUtil.css(the.element, 'right', right);\n        }        \n\n        // Height dependencies\n        if ( dependencies !== null ) {\n            const dependencyElements = document.querySelectorAll(dependencies);\n            \n            if ( dependencyElements && dependencyElements.length > 0 ) {\n                for ( let i = 0, len = dependencyElements.length; i < len; i++ ) {\n                    KTUtil.css(dependencyElements[i], 'padding-top', String(height) + 'px');\n                }\n            }\n        }\n    }\n\n    const _disable = function() {\n        KTUtil.css(the.element, 'top', '');\n        KTUtil.css(the.element, 'width', '');\n        KTUtil.css(the.element, 'left', '');\n        KTUtil.css(the.element, 'right', '');\n        KTUtil.css(the.element, 'z-index', '');\n        KTUtil.css(the.element, 'position', '');\n\n        const dependencies = _getOption('dependencies');\n        const classes = _getOption('class');\n\n        if ( classes !== null ) {\n            KTUtil.removeClass(the.element, classes);\n        }\n\n        // Height dependencies\n        if ( dependencies !== null ) {\n            const dependencyElements = document.querySelectorAll(dependencies);\n\n            if ( dependencyElements && dependencyElements.length > 0 ) {\n                for ( let i = 0, len = dependencyElements.length; i < len; i++ ) {\n                    KTUtil.css(dependencyElements[i], 'padding-top', '');\n                }\n            }\n        }\n    }\n\n    const _check = function() {\n\n    }\n\n    const _calculateHeight = function() {\n        let height = parseFloat(KTUtil.css(the.element, 'height'));\n\n        height = height + parseFloat(KTUtil.css(the.element, 'margin-top'));\n        height = height + parseFloat(KTUtil.css(the.element, 'margin-bottom'));\n        \n        if (KTUtil.css(element, 'border-top')) {\n            height = height + parseFloat(KTUtil.css(the.element, 'border-top'));\n        }\n\n        if (KTUtil.css(element, 'border-bottom')) {\n            height = height + parseFloat(KTUtil.css(the.element, 'border-bottom'));\n        }\n\n        return height;\n    }\n\n    const _getOption = function(name) {\n        if ( the.element.hasAttribute('data-kt-sticky-' + name) === true ) {\n            const attr = the.element.getAttribute('data-kt-sticky-' + name);\n            let value = KTUtil.getResponsiveValue(attr);\n\n            if ( value !== null && String(value) === 'true' ) {\n                value = true;\n            } else if ( value !== null && String(value) === 'false' ) {\n                value = false;\n            }\n\n            return value;\n        } else {\n            const optionName = KTUtil.snakeToCamel(name);\n\n            if ( the.options[optionName] ) {\n                return KTUtil.getResponsiveValue(the.options[optionName]);\n            } else {\n                return null;\n            }\n        }\n    }\n\n    const _destroy = function() {\n        the.targetElement.removeEventListener('scroll', _scroll);\n        KTUtil.data(the.element).remove('sticky');\n    }\n\n    // Construct Class\n    _construct();\n\n    ///////////////////////\n    // ** Public API  ** //\n    ///////////////////////\n\n    // Methods\n    the.update = function() {\n        if ( the.targetElement.hasAttribute(the.attributeName) === true ) {\n            _disable();\n            the.targetElement.removeAttribute(the.attributeName);\n            the.targetElement.removeAttribute(the.attributeName2);\n            _enable(true);\n            the.targetElement.setAttribute(the.attributeName, 'on');\n            the.targetElement.setAttribute(the.attributeName2, 'on');\n        }\n    }\n\n    the.destroy = function() {\n        return _destroy();\n    }\n\n    // Event API\n    the.on = function(name, handler) {\n        return KTEventHandler.on(the.element, name, handler);\n    }\n\n    the.one = function(name, handler) {\n        return KTEventHandler.one(the.element, name, handler);\n    }\n\n    the.off = function(name, handlerId) {\n        return KTEventHandler.off(the.element, name, handlerId);\n    }\n\n    the.trigger = function(name, event) {\n        return KTEventHandler.trigger(the.element, name, event, the, event);\n    }\n};\n\n// Static methods\nSticky.getInstance = function(element) {\n    if ( element !== null && KTUtil.data(element).has('sticky') ) {\n        return KTUtil.data(element).get('sticky');\n    } else {\n        return null;\n    }\n}\n\n// Create instances\nSticky.createInstances = function(selector = '[data-kt-sticky=\"true\"]') {\n    // Initialize Menus\n    const elements = document.body.querySelectorAll(selector);\n    let sticky;\n\n    if ( elements && elements.length > 0 ) {\n        for (let i = 0, len = elements.length; i < len; i++) {\n            sticky = new Sticky(elements[i]);\n        }\n    }\n}\n\n// Window resize handler\nSticky.handleResize = function() {\n    let timer;\n    window.addEventListener('resize', function() {\n        KTUtil.throttle(timer, function() {\n            // Locate and update Offcanvas instances on window resize\n            const elements = document.body.querySelectorAll('[data-kt-sticky=\"true\"]');\n    \n            if ( elements && elements.length > 0 ) {\n                for (let i = 0, len = elements.length; i < len; i++) {\n                    const sticky = Sticky.getInstance(elements[i]);\n                    if (sticky) {\n                        sticky.update();\n                    }\n                }\n            }\n        }, 200);\n    });\n}\n\n// Global initialization\nSticky.init = function() {\n    Sticky.createInstances();\n    Sticky.handleResize();\n};\n\nexport default Sticky;", "import { Controller } from \"@hotwired/stimulus\"\nimport Sticky from \"../commons/sticky\";\n\nexport default class extends Controller {\n  static targets = [\"toolbar\"]\n  connect() {\n    this.initUI();\n  }\n\n  disconnect() {\n    this.clearUI();\n  }\n\n  initUI() {\n    // sticky toolbar\n    if (this.hasToolbarTarget) {\n      const toolbarActionDom = this.toolbarTarget;\n      const sticky = new Sticky(toolbarActionDom);\n      sticky.update();\n    }\n  }\n\n  clearUI() {\n    // sticky toolbar\n    if (this.hasToolbarTarget) {\n      const toolbarActionDom = this.toolbarTarget;\n      let sticky = Sticky.getInstance(toolbarActionDom);\n      sticky.destroy();\n    }\n  }\n\n}\n", "/*\n * stimulus-use 0.52.1\n */\nimport { Controller } from \"@hotwired/stimulus\";\n\nconst method = (controller, methodName) => {\n  const method = controller[methodName];\n  if (typeof method == \"function\") {\n    return method;\n  } else {\n    return (...args) => {};\n  }\n};\n\nconst composeEventName = (name, controller, eventPrefix) => {\n  let composedName = name;\n  if (eventPrefix === true) {\n    composedName = `${controller.identifier}:${name}`;\n  } else if (typeof eventPrefix === \"string\") {\n    composedName = `${eventPrefix}:${name}`;\n  }\n  return composedName;\n};\n\nconst extendedEvent = (type, event, detail) => {\n  const {bubbles: bubbles, cancelable: cancelable, composed: composed} = event || {\n    bubbles: true,\n    cancelable: true,\n    composed: true\n  };\n  if (event) {\n    Object.assign(detail, {\n      originalEvent: event\n    });\n  }\n  const customEvent = new CustomEvent(type, {\n    bubbles: bubbles,\n    cancelable: cancelable,\n    composed: composed,\n    detail: detail\n  });\n  return customEvent;\n};\n\nfunction isElementInViewport(el) {\n  const rect = el.getBoundingClientRect();\n  const windowHeight = window.innerHeight || document.documentElement.clientHeight;\n  const windowWidth = window.innerWidth || document.documentElement.clientWidth;\n  const vertInView = rect.top <= windowHeight && rect.top + rect.height > 0;\n  const horInView = rect.left <= windowWidth && rect.left + rect.width > 0;\n  return vertInView && horInView;\n}\n\nfunction camelize(value) {\n  return value.replace(/(?:[_-])([a-z0-9])/g, ((_, char) => char.toUpperCase()));\n}\n\n/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise */ function __rest(s, e) {\n  var t = {};\n  for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n  if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n    if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n  }\n  return t;\n}\n\nconst defaultOptions$8 = {\n  debug: false,\n  logger: console,\n  dispatchEvent: true,\n  eventPrefix: true\n};\n\nclass StimulusUse {\n  constructor(controller, options = {}) {\n    var _a, _b, _c;\n    this.log = (functionName, args) => {\n      if (!this.debug) return;\n      this.logger.groupCollapsed(`%c${this.controller.identifier} %c#${functionName}`, \"color: #3B82F6\", \"color: unset\");\n      this.logger.log(Object.assign({\n        controllerId: this.controllerId\n      }, args));\n      this.logger.groupEnd();\n    };\n    this.warn = message => {\n      this.logger.warn(`%c${this.controller.identifier} %c${message}`, \"color: #3B82F6; font-weight: bold\", \"color: unset\");\n    };\n    this.dispatch = (eventName, details = {}) => {\n      if (this.dispatchEvent) {\n        const {event: event} = details, eventDetails = __rest(details, [ \"event\" ]);\n        const customEvent = this.extendedEvent(eventName, event || null, eventDetails);\n        this.targetElement.dispatchEvent(customEvent);\n        this.log(\"dispatchEvent\", Object.assign({\n          eventName: customEvent.type\n        }, eventDetails));\n      }\n    };\n    this.call = (methodName, args = {}) => {\n      const method = this.controller[methodName];\n      if (typeof method == \"function\") {\n        return method.call(this.controller, args);\n      }\n    };\n    this.extendedEvent = (name, event, detail) => {\n      const {bubbles: bubbles, cancelable: cancelable, composed: composed} = event || {\n        bubbles: true,\n        cancelable: true,\n        composed: true\n      };\n      if (event) {\n        Object.assign(detail, {\n          originalEvent: event\n        });\n      }\n      const customEvent = new CustomEvent(this.composeEventName(name), {\n        bubbles: bubbles,\n        cancelable: cancelable,\n        composed: composed,\n        detail: detail\n      });\n      return customEvent;\n    };\n    this.composeEventName = name => {\n      let composedName = name;\n      if (this.eventPrefix === true) {\n        composedName = `${this.controller.identifier}:${name}`;\n      } else if (typeof this.eventPrefix === \"string\") {\n        composedName = `${this.eventPrefix}:${name}`;\n      }\n      return composedName;\n    };\n    this.debug = (_b = (_a = options === null || options === void 0 ? void 0 : options.debug) !== null && _a !== void 0 ? _a : controller.application.stimulusUseDebug) !== null && _b !== void 0 ? _b : defaultOptions$8.debug;\n    this.logger = (_c = options === null || options === void 0 ? void 0 : options.logger) !== null && _c !== void 0 ? _c : defaultOptions$8.logger;\n    this.controller = controller;\n    this.controllerId = controller.element.id || controller.element.dataset.id;\n    this.targetElement = (options === null || options === void 0 ? void 0 : options.element) || controller.element;\n    const {dispatchEvent: dispatchEvent, eventPrefix: eventPrefix} = Object.assign({}, defaultOptions$8, options);\n    Object.assign(this, {\n      dispatchEvent: dispatchEvent,\n      eventPrefix: eventPrefix\n    });\n    this.controllerInitialize = controller.initialize.bind(controller);\n    this.controllerConnect = controller.connect.bind(controller);\n    this.controllerDisconnect = controller.disconnect.bind(controller);\n  }\n}\n\nconst defaultOptions$7 = {\n  eventPrefix: true,\n  bubbles: true,\n  cancelable: true\n};\n\nclass UseDispatch extends StimulusUse {\n  constructor(controller, options = {}) {\n    var _a, _b, _c, _d;\n    super(controller, options);\n    this.dispatch = (eventName, detail = {}) => {\n      const {controller: controller, targetElement: targetElement, eventPrefix: eventPrefix, bubbles: bubbles, cancelable: cancelable, log: log, warn: warn} = this;\n      Object.assign(detail, {\n        controller: controller\n      });\n      const eventNameWithPrefix = composeEventName(eventName, this.controller, eventPrefix);\n      const event = new CustomEvent(eventNameWithPrefix, {\n        detail: detail,\n        bubbles: bubbles,\n        cancelable: cancelable\n      });\n      targetElement.dispatchEvent(event);\n      warn(\"`useDispatch()` is deprecated. Please use the built-in `this.dispatch()` function from Stimulus. You can find more information on how to upgrade at: https://stimulus-use.github.io/stimulus-use/#/use-dispatch\");\n      log(\"dispatch\", {\n        eventName: eventNameWithPrefix,\n        detail: detail,\n        bubbles: bubbles,\n        cancelable: cancelable\n      });\n      return event;\n    };\n    this.targetElement = (_a = options.element) !== null && _a !== void 0 ? _a : controller.element;\n    this.eventPrefix = (_b = options.eventPrefix) !== null && _b !== void 0 ? _b : defaultOptions$7.eventPrefix;\n    this.bubbles = (_c = options.bubbles) !== null && _c !== void 0 ? _c : defaultOptions$7.bubbles;\n    this.cancelable = (_d = options.cancelable) !== null && _d !== void 0 ? _d : defaultOptions$7.cancelable;\n    this.enhanceController();\n  }\n  enhanceController() {\n    Object.assign(this.controller, {\n      dispatch: this.dispatch\n    });\n  }\n}\n\nconst useDispatch = (controller, options = {}) => new UseDispatch(controller, options);\n\nconst defaultOptions$6 = {\n  overwriteDispatch: true\n};\n\nconst useApplication = (controller, options = {}) => {\n  const {overwriteDispatch: overwriteDispatch} = Object.assign({}, defaultOptions$6, options);\n  Object.defineProperty(controller, \"isPreview\", {\n    get() {\n      return document.documentElement.hasAttribute(\"data-turbolinks-preview\") || document.documentElement.hasAttribute(\"data-turbo-preview\");\n    }\n  });\n  Object.defineProperty(controller, \"isConnected\", {\n    get() {\n      return !!Array.from(this.context.module.connectedContexts).find((c => c === this.context));\n    }\n  });\n  Object.defineProperty(controller, \"csrfToken\", {\n    get() {\n      return this.metaValue(\"csrf-token\");\n    }\n  });\n  if (overwriteDispatch) {\n    useDispatch(controller, options);\n  }\n  Object.assign(controller, {\n    metaValue(name) {\n      const element = document.head.querySelector(`meta[name=\"${name}\"]`);\n      return element && element.getAttribute(\"content\");\n    }\n  });\n};\n\nclass ApplicationController extends Controller {\n  constructor(context) {\n    super(context);\n    this.isPreview = false;\n    this.isConnected = false;\n    this.csrfToken = \"\";\n    useApplication(this, this.options);\n  }\n}\n\nconst defaultOptions$5 = {\n  events: [ \"click\", \"touchend\" ],\n  onlyVisible: true,\n  dispatchEvent: true,\n  eventPrefix: true\n};\n\nconst useClickOutside = (composableController, options = {}) => {\n  const controller = composableController;\n  const {onlyVisible: onlyVisible, dispatchEvent: dispatchEvent, events: events, eventPrefix: eventPrefix} = Object.assign({}, defaultOptions$5, options);\n  const onEvent = event => {\n    const targetElement = (options === null || options === void 0 ? void 0 : options.element) || controller.element;\n    if (targetElement.contains(event.target) || !isElementInViewport(targetElement) && onlyVisible) {\n      return;\n    }\n    if (controller.clickOutside) {\n      controller.clickOutside(event);\n    }\n    if (dispatchEvent) {\n      const eventName = composeEventName(\"click:outside\", controller, eventPrefix);\n      const clickOutsideEvent = extendedEvent(eventName, event, {\n        controller: controller\n      });\n      targetElement.dispatchEvent(clickOutsideEvent);\n    }\n  };\n  const observe = () => {\n    events === null || events === void 0 ? void 0 : events.forEach((event => {\n      window.addEventListener(event, onEvent, true);\n    }));\n  };\n  const unobserve = () => {\n    events === null || events === void 0 ? void 0 : events.forEach((event => {\n      window.removeEventListener(event, onEvent, true);\n    }));\n  };\n  const controllerDisconnect = controller.disconnect.bind(controller);\n  Object.assign(controller, {\n    disconnect() {\n      unobserve();\n      controllerDisconnect();\n    }\n  });\n  observe();\n  return [ observe, unobserve ];\n};\n\nclass ClickOutsideComposableController extends Controller {}\n\nclass ClickOutsideController extends ClickOutsideComposableController {\n  constructor(context) {\n    super(context);\n    requestAnimationFrame((() => {\n      const [observe, unobserve] = useClickOutside(this, this.options);\n      Object.assign(this, {\n        observe: observe,\n        unobserve: unobserve\n      });\n    }));\n  }\n}\n\nclass DebounceController extends Controller {}\n\nDebounceController.debounces = [];\n\nconst defaultWait$1 = 200;\n\nconst debounce = (fn, wait = defaultWait$1) => {\n  let timeoutId = null;\n  return function() {\n    const args = Array.from(arguments);\n    const context = this;\n    const params = args.map((arg => arg.params));\n    const callback = () => {\n      args.forEach(((arg, index) => arg.params = params[index]));\n      return fn.apply(context, args);\n    };\n    if (timeoutId) {\n      clearTimeout(timeoutId);\n    }\n    timeoutId = setTimeout(callback, wait);\n  };\n};\n\nconst useDebounce = (composableController, options) => {\n  const controller = composableController;\n  const constructor = controller.constructor;\n  constructor.debounces.forEach((func => {\n    if (typeof func === \"string\") {\n      controller[func] = debounce(controller[func], options === null || options === void 0 ? void 0 : options.wait);\n    }\n    if (typeof func === \"object\") {\n      const {name: name, wait: wait} = func;\n      if (!name) return;\n      controller[name] = debounce(controller[name], wait || (options === null || options === void 0 ? void 0 : options.wait));\n    }\n  }));\n};\n\nclass UseHover extends StimulusUse {\n  constructor(controller, options = {}) {\n    super(controller, options);\n    this.observe = () => {\n      this.targetElement.addEventListener(\"mouseenter\", this.onEnter);\n      this.targetElement.addEventListener(\"mouseleave\", this.onLeave);\n    };\n    this.unobserve = () => {\n      this.targetElement.removeEventListener(\"mouseenter\", this.onEnter);\n      this.targetElement.removeEventListener(\"mouseleave\", this.onLeave);\n    };\n    this.onEnter = event => {\n      this.call(\"mouseEnter\", event);\n      this.log(\"mouseEnter\", {\n        hover: true\n      });\n      this.dispatch(\"mouseEnter\", {\n        hover: false\n      });\n    };\n    this.onLeave = event => {\n      this.call(\"mouseLeave\", event);\n      this.log(\"mouseLeave\", {\n        hover: false\n      });\n      this.dispatch(\"mouseLeave\", {\n        hover: false\n      });\n    };\n    this.controller = controller;\n    this.enhanceController();\n    this.observe();\n  }\n  enhanceController() {\n    const controllerDisconnect = this.controller.disconnect.bind(this.controller);\n    const disconnect = () => {\n      this.unobserve();\n      controllerDisconnect();\n    };\n    Object.assign(this.controller, {\n      disconnect: disconnect\n    });\n  }\n}\n\nconst useHover = (composableController, options = {}) => {\n  const controller = composableController;\n  const observer = new UseHover(controller, options);\n  return [ observer.observe, observer.unobserve ];\n};\n\nclass HoverComposableController extends Controller {}\n\nclass HoverController extends HoverComposableController {\n  constructor(context) {\n    super(context);\n    requestAnimationFrame((() => {\n      const [observe, unobserve] = useHover(this, this.options);\n      Object.assign(this, {\n        observe: observe,\n        unobserve: unobserve\n      });\n    }));\n  }\n}\n\nconst defaultEvents = [ \"mousemove\", \"mousedown\", \"resize\", \"keydown\", \"touchstart\", \"wheel\" ];\n\nconst oneMinute = 6e4;\n\nconst defaultOptions$4 = {\n  ms: oneMinute,\n  initialState: false,\n  events: defaultEvents,\n  dispatchEvent: true,\n  eventPrefix: true\n};\n\nconst useIdle = (composableController, options = {}) => {\n  const controller = composableController;\n  const {ms: ms, initialState: initialState, events: events, dispatchEvent: dispatchEvent, eventPrefix: eventPrefix} = Object.assign({}, defaultOptions$4, options);\n  let isIdle = initialState;\n  let timeout = setTimeout((() => {\n    isIdle = true;\n    dispatchAway();\n  }), ms);\n  const dispatchAway = event => {\n    const eventName = composeEventName(\"away\", controller, eventPrefix);\n    controller.isIdle = true;\n    method(controller, \"away\").call(controller, event);\n    if (dispatchEvent) {\n      const clickOutsideEvent = extendedEvent(eventName, event || null, {\n        controller: controller\n      });\n      controller.element.dispatchEvent(clickOutsideEvent);\n    }\n  };\n  const dispatchBack = event => {\n    const eventName = composeEventName(\"back\", controller, eventPrefix);\n    controller.isIdle = false;\n    method(controller, \"back\").call(controller, event);\n    if (dispatchEvent) {\n      const clickOutsideEvent = extendedEvent(eventName, event || null, {\n        controller: controller\n      });\n      controller.element.dispatchEvent(clickOutsideEvent);\n    }\n  };\n  const onEvent = event => {\n    if (isIdle) dispatchBack(event);\n    isIdle = false;\n    clearTimeout(timeout);\n    timeout = setTimeout((() => {\n      isIdle = true;\n      dispatchAway(event);\n    }), ms);\n  };\n  const onVisibility = event => {\n    if (!document.hidden) onEvent(event);\n  };\n  if (isIdle) {\n    dispatchAway();\n  } else {\n    dispatchBack();\n  }\n  const controllerDisconnect = controller.disconnect.bind(controller);\n  const observe = () => {\n    events.forEach((event => {\n      window.addEventListener(event, onEvent);\n    }));\n    document.addEventListener(\"visibilitychange\", onVisibility);\n  };\n  const unobserve = () => {\n    clearTimeout(timeout);\n    events.forEach((event => {\n      window.removeEventListener(event, onEvent);\n    }));\n    document.removeEventListener(\"visibilitychange\", onVisibility);\n  };\n  Object.assign(controller, {\n    disconnect() {\n      unobserve();\n      controllerDisconnect();\n    }\n  });\n  observe();\n  return [ observe, unobserve ];\n};\n\nclass IdleComposableController extends Controller {\n  constructor() {\n    super(...arguments);\n    this.isIdle = false;\n  }\n}\n\nclass IdleController extends IdleComposableController {\n  constructor(context) {\n    super(context);\n    requestAnimationFrame((() => {\n      const [observe, unobserve] = useIdle(this, this.options);\n      Object.assign(this, {\n        observe: observe,\n        unobserve: unobserve\n      });\n    }));\n  }\n}\n\nconst defaultOptions$3 = {\n  dispatchEvent: true,\n  eventPrefix: true,\n  visibleAttribute: \"isVisible\"\n};\n\nconst useIntersection = (composableController, options = {}) => {\n  const controller = composableController;\n  const {dispatchEvent: dispatchEvent, eventPrefix: eventPrefix, visibleAttribute: visibleAttribute} = Object.assign({}, defaultOptions$3, options);\n  const targetElement = (options === null || options === void 0 ? void 0 : options.element) || controller.element;\n  if (!controller.intersectionElements) controller.intersectionElements = [];\n  controller.intersectionElements.push(targetElement);\n  const callback = entries => {\n    const [entry] = entries;\n    if (entry.isIntersecting) {\n      dispatchAppear(entry);\n    } else if (targetElement.hasAttribute(visibleAttribute)) {\n      dispatchDisappear(entry);\n    }\n  };\n  const observer = new IntersectionObserver(callback, options);\n  const dispatchAppear = entry => {\n    targetElement.setAttribute(visibleAttribute, \"true\");\n    method(controller, \"appear\").call(controller, entry, observer);\n    if (dispatchEvent) {\n      const eventName = composeEventName(\"appear\", controller, eventPrefix);\n      const appearEvent = extendedEvent(eventName, null, {\n        controller: controller,\n        entry: entry,\n        observer: observer\n      });\n      targetElement.dispatchEvent(appearEvent);\n    }\n  };\n  const dispatchDisappear = entry => {\n    targetElement.removeAttribute(visibleAttribute);\n    method(controller, \"disappear\").call(controller, entry, observer);\n    if (dispatchEvent) {\n      const eventName = composeEventName(\"disappear\", controller, eventPrefix);\n      const disappearEvent = extendedEvent(eventName, null, {\n        controller: controller,\n        entry: entry,\n        observer: observer\n      });\n      targetElement.dispatchEvent(disappearEvent);\n    }\n  };\n  const controllerDisconnect = controller.disconnect.bind(controller);\n  const disconnect = () => {\n    unobserve();\n    controllerDisconnect();\n  };\n  const observe = () => {\n    observer.observe(targetElement);\n  };\n  const unobserve = () => {\n    observer.unobserve(targetElement);\n  };\n  const noneVisible = () => controller.intersectionElements.filter((element => element.hasAttribute(visibleAttribute))).length === 0;\n  const oneVisible = () => controller.intersectionElements.filter((element => element.hasAttribute(visibleAttribute))).length === 1;\n  const atLeastOneVisible = () => controller.intersectionElements.some((element => element.hasAttribute(visibleAttribute)));\n  const allVisible = () => controller.intersectionElements.every((element => element.hasAttribute(visibleAttribute)));\n  const isVisible = allVisible;\n  Object.assign(controller, {\n    isVisible: isVisible,\n    noneVisible: noneVisible,\n    oneVisible: oneVisible,\n    atLeastOneVisible: atLeastOneVisible,\n    allVisible: allVisible,\n    disconnect: disconnect\n  });\n  observe();\n  return [ observe, unobserve ];\n};\n\nclass IntersectionComposableController extends Controller {}\n\nclass IntersectionController extends IntersectionComposableController {\n  constructor(context) {\n    super(context);\n    requestAnimationFrame((() => {\n      const [observe, unobserve] = useIntersection(this, this.options);\n      Object.assign(this, {\n        observe: observe,\n        unobserve: unobserve\n      });\n    }));\n  }\n}\n\nconst useLazyLoad = (controller, options) => {\n  const callback = entries => {\n    const [entry] = entries;\n    if (entry.isIntersecting && !controller.isLoaded) {\n      handleAppear();\n    }\n  };\n  const handleAppear = entry => {\n    const src = controller.data.get(\"src\");\n    if (!src) return;\n    const imageElement = controller.element;\n    controller.isLoading = true;\n    method(controller, \"loading\").call(controller, src);\n    imageElement.onload = () => {\n      handleLoaded(src);\n    };\n    imageElement.src = src;\n  };\n  const handleLoaded = src => {\n    controller.isLoading = false;\n    controller.isLoaded = true;\n    method(controller, \"loaded\").call(controller, src);\n  };\n  const controllerDisconnect = controller.disconnect.bind(controller);\n  const observer = new IntersectionObserver(callback, options);\n  const observe = () => {\n    observer.observe(controller.element);\n  };\n  const unobserve = () => {\n    observer.unobserve(controller.element);\n  };\n  Object.assign(controller, {\n    isVisible: false,\n    disconnect() {\n      unobserve();\n      controllerDisconnect();\n    }\n  });\n  observe();\n  return [ observe, unobserve ];\n};\n\nclass LazyLoadComposableController extends Controller {\n  constructor() {\n    super(...arguments);\n    this.isLoading = false;\n    this.isLoaded = false;\n  }\n}\n\nclass LazyLoadController extends LazyLoadComposableController {\n  constructor(context) {\n    super(context);\n    this.options = {\n      rootMargin: \"10%\"\n    };\n    requestAnimationFrame((() => {\n      const [observe, unobserve] = useLazyLoad(this, this.options);\n      Object.assign(this, {\n        observe: observe,\n        unobserve: unobserve\n      });\n    }));\n  }\n}\n\nconst defaultOptions$2 = {\n  mediaQueries: {},\n  dispatchEvent: true,\n  eventPrefix: true,\n  debug: false\n};\n\nclass UseMatchMedia extends StimulusUse {\n  constructor(controller, options = {}) {\n    var _a, _b, _c, _d;\n    super(controller, options);\n    this.matches = [];\n    this.callback = event => {\n      const name = Object.keys(this.mediaQueries).find((name => this.mediaQueries[name] === event.media));\n      if (!name) return;\n      const {media: media, matches: matches} = event;\n      this.changed({\n        name: name,\n        media: media,\n        matches: matches,\n        event: event\n      });\n    };\n    this.changed = payload => {\n      const {name: name} = payload;\n      if (payload.event) {\n        this.call(camelize(`${name}_changed`), payload);\n        this.dispatch(`${name}:changed`, payload);\n        this.log(`media query \"${name}\" changed`, payload);\n      }\n      if (payload.matches) {\n        this.call(camelize(`is_${name}`), payload);\n        this.dispatch(`is:${name}`, payload);\n      } else {\n        this.call(camelize(`not_${name}`), payload);\n        this.dispatch(`not:${name}`, payload);\n      }\n    };\n    this.observe = () => {\n      Object.keys(this.mediaQueries).forEach((name => {\n        const media = this.mediaQueries[name];\n        const match = window.matchMedia(media);\n        match.addListener(this.callback);\n        this.matches.push(match);\n        this.changed({\n          name: name,\n          media: media,\n          matches: match.matches\n        });\n      }));\n    };\n    this.unobserve = () => {\n      this.matches.forEach((match => match.removeListener(this.callback)));\n    };\n    this.controller = controller;\n    this.mediaQueries = (_a = options.mediaQueries) !== null && _a !== void 0 ? _a : defaultOptions$2.mediaQueries;\n    this.dispatchEvent = (_b = options.dispatchEvent) !== null && _b !== void 0 ? _b : defaultOptions$2.dispatchEvent;\n    this.eventPrefix = (_c = options.eventPrefix) !== null && _c !== void 0 ? _c : defaultOptions$2.eventPrefix;\n    this.debug = (_d = options.debug) !== null && _d !== void 0 ? _d : defaultOptions$2.debug;\n    if (!window.matchMedia) {\n      console.error(\"window.matchMedia() is not available\");\n      return;\n    }\n    this.enhanceController();\n    this.observe();\n  }\n  enhanceController() {\n    const controllerDisconnect = this.controller.disconnect.bind(this.controller);\n    const disconnect = () => {\n      this.unobserve();\n      controllerDisconnect();\n    };\n    Object.assign(this.controller, {\n      disconnect: disconnect\n    });\n  }\n}\n\nconst useMatchMedia = (controller, options = {}) => {\n  const observer = new UseMatchMedia(controller, options);\n  return [ observer.observe, observer.unobserve ];\n};\n\nconst memoize = (controller, name, value) => {\n  Object.defineProperty(controller, name, {\n    value: value\n  });\n  return value;\n};\n\nconst useMemo = controller => {\n  var _a;\n  (_a = controller.constructor.memos) === null || _a === void 0 ? void 0 : _a.forEach((getter => {\n    memoize(controller, getter, controller[getter]);\n  }));\n};\n\nconst defineMetaGetter = (controller, metaName, suffix) => {\n  const getterName = suffix ? `${camelize(metaName)}Meta` : camelize(metaName);\n  Object.defineProperty(controller, getterName, {\n    get() {\n      return typeCast(metaValue(metaName));\n    }\n  });\n};\n\nfunction metaValue(name) {\n  const element = document.head.querySelector(`meta[name=\"${name}\"]`);\n  return element && element.getAttribute(\"content\");\n}\n\nfunction typeCast(value) {\n  try {\n    return JSON.parse(value);\n  } catch (o_O) {\n    return value;\n  }\n}\n\nconst useMeta = (controller, options = {\n  suffix: true\n}) => {\n  const metaNames = controller.constructor.metaNames;\n  const suffix = options.suffix;\n  metaNames === null || metaNames === void 0 ? void 0 : metaNames.forEach((metaName => {\n    defineMetaGetter(controller, metaName, suffix);\n  }));\n  Object.defineProperty(controller, \"metas\", {\n    get() {\n      const result = {};\n      metaNames === null || metaNames === void 0 ? void 0 : metaNames.forEach((metaName => {\n        const value = typeCast(metaValue(metaName));\n        if (value !== undefined && value !== null) {\n          result[camelize(metaName)] = value;\n        }\n      }));\n      return result;\n    }\n  });\n};\n\nclass UseMutation extends StimulusUse {\n  constructor(controller, options = {}) {\n    super(controller, options);\n    this.observe = () => {\n      try {\n        this.observer.observe(this.targetElement, this.options);\n      } catch (error) {\n        this.controller.application.handleError(error, \"At a minimum, one of childList, attributes, and/or characterData must be true\", {});\n      }\n    };\n    this.unobserve = () => {\n      this.observer.disconnect();\n    };\n    this.mutation = entries => {\n      this.call(\"mutate\", entries);\n      this.log(\"mutate\", {\n        entries: entries\n      });\n      this.dispatch(\"mutate\", {\n        entries: entries\n      });\n    };\n    this.targetElement = (options === null || options === void 0 ? void 0 : options.element) || controller.element;\n    this.controller = controller;\n    this.options = options;\n    this.observer = new MutationObserver(this.mutation);\n    this.enhanceController();\n    this.observe();\n  }\n  enhanceController() {\n    const controllerDisconnect = this.controller.disconnect.bind(this.controller);\n    const disconnect = () => {\n      this.unobserve();\n      controllerDisconnect();\n    };\n    Object.assign(this.controller, {\n      disconnect: disconnect\n    });\n  }\n}\n\nconst useMutation = (controller, options = {}) => {\n  const observer = new UseMutation(controller, options);\n  return [ observer.observe, observer.unobserve ];\n};\n\nclass MutationComposableController extends Controller {}\n\nclass MutationController extends MutationComposableController {\n  constructor(context) {\n    super(context);\n    requestAnimationFrame((() => {\n      const [observe, unobserve] = useMutation(this, this.options);\n      Object.assign(this, {\n        observe: observe,\n        unobserve: unobserve\n      });\n    }));\n  }\n}\n\nconst defaultOptions$1 = {\n  dispatchEvent: true,\n  eventPrefix: true\n};\n\nconst useResize = (composableController, options = {}) => {\n  const controller = composableController;\n  const {dispatchEvent: dispatchEvent, eventPrefix: eventPrefix} = Object.assign({}, defaultOptions$1, options);\n  const targetElement = (options === null || options === void 0 ? void 0 : options.element) || controller.element;\n  const callback = entries => {\n    const [entry] = entries;\n    method(controller, \"resize\").call(controller, entry.contentRect);\n    if (dispatchEvent) {\n      const eventName = composeEventName(\"resize\", controller, eventPrefix);\n      const appearEvent = extendedEvent(eventName, null, {\n        controller: controller,\n        entry: entry\n      });\n      targetElement.dispatchEvent(appearEvent);\n    }\n  };\n  const controllerDisconnect = controller.disconnect.bind(controller);\n  const observer = new ResizeObserver(callback);\n  const observe = () => {\n    observer.observe(targetElement);\n  };\n  const unobserve = () => {\n    observer.unobserve(targetElement);\n  };\n  Object.assign(controller, {\n    disconnect() {\n      unobserve();\n      controllerDisconnect();\n    }\n  });\n  observe();\n  return [ observe, unobserve ];\n};\n\nclass ResizeComposableController extends Controller {}\n\nclass ResizeController extends ResizeComposableController {\n  constructor(context) {\n    super(context);\n    requestAnimationFrame((() => {\n      const [observe, unobserve] = useResize(this, this.options);\n      Object.assign(this, {\n        observe: observe,\n        unobserve: unobserve\n      });\n    }));\n  }\n}\n\nclass UseTargetMutation extends StimulusUse {\n  constructor(controller, options = {}) {\n    super(controller, options);\n    this.observe = () => {\n      this.observer.observe(this.targetElement, {\n        subtree: true,\n        characterData: true,\n        childList: true,\n        attributes: true,\n        attributeOldValue: true,\n        attributeFilter: [ this.targetSelector, this.scopedTargetSelector ]\n      });\n    };\n    this.unobserve = () => {\n      this.observer.disconnect();\n    };\n    this.mutation = entries => {\n      for (const mutation of entries) {\n        switch (mutation.type) {\n         case \"attributes\":\n          let newValue = mutation.target.getAttribute(mutation.attributeName);\n          let oldValue = mutation.oldValue;\n          if (mutation.attributeName === this.targetSelector || mutation.attributeName === this.scopedTargetSelector) {\n            let oldTargets = this.targetsUsedByThisController(oldValue);\n            let newTargets = this.targetsUsedByThisController(newValue);\n            let removedTargets = oldTargets.filter((target => !newTargets.includes(target)));\n            let addedTargets = newTargets.filter((target => !oldTargets.includes(target)));\n            removedTargets.forEach((target => this.targetRemoved(this.stripIdentifierPrefix(target), mutation.target, \"attributeChange\")));\n            addedTargets.forEach((target => this.targetAdded(this.stripIdentifierPrefix(target), mutation.target, \"attributeChange\")));\n          }\n          break;\n\n         case \"characterData\":\n          let nodule = this.findTargetInAncestry(mutation.target);\n          if (nodule == null) {\n            return;\n          } else {\n            let supportedTargets = this.targetsUsedByThisControllerFromNode(nodule);\n            supportedTargets.forEach((target => {\n              this.targetChanged(this.stripIdentifierPrefix(target), nodule, \"domMutation\");\n            }));\n          }\n          break;\n\n         case \"childList\":\n          let {addedNodes: addedNodes, removedNodes: removedNodes} = mutation;\n          addedNodes.forEach((node => this.processNodeDOMMutation(node, this.targetAdded)));\n          removedNodes.forEach((node => this.processNodeDOMMutation(node, this.targetRemoved)));\n          break;\n        }\n      }\n    };\n    this.controller = controller;\n    this.options = options;\n    this.targetElement = controller.element;\n    this.identifier = controller.scope.identifier;\n    this.identifierPrefix = `${this.identifier}.`;\n    this.targetSelector = controller.scope.schema.targetAttribute;\n    this.scopedTargetSelector = `data-${this.identifier}-target`;\n    this.targets = options.targets || controller.constructor.targets;\n    this.prefixedTargets = this.targets.map((target => `${this.identifierPrefix}${target}`));\n    this.observer = new MutationObserver(this.mutation);\n    this.enhanceController();\n    this.observe();\n  }\n  processNodeDOMMutation(node, initialChangeModeAssumption) {\n    let nodule = node;\n    let change = initialChangeModeAssumption;\n    let supportedTargets = [];\n    if (nodule.nodeName == \"#text\" || this.targetsUsedByThisControllerFromNode(nodule).length == 0) {\n      change = this.targetChanged;\n      nodule = this.findTargetInAncestry(node);\n    } else {\n      supportedTargets = this.targetsUsedByThisControllerFromNode(nodule);\n    }\n    if (nodule == null) {\n      return;\n    } else if (supportedTargets.length == 0) {\n      supportedTargets = this.targetsUsedByThisControllerFromNode(nodule);\n    }\n    supportedTargets.forEach((target => {\n      change.call(this, this.stripIdentifierPrefix(target), nodule, \"domMutation\");\n    }));\n  }\n  findTargetInAncestry(node) {\n    let nodule = node;\n    let supportedTargets = [];\n    if (nodule.nodeName != \"#text\") {\n      supportedTargets = this.targetsUsedByThisControllerFromNode(nodule);\n    }\n    while (nodule.parentNode !== null && nodule.parentNode != this.targetElement && supportedTargets.length == 0) {\n      nodule = nodule.parentNode;\n      if (nodule.nodeName !== \"#text\") {\n        let supportedTargets = this.targetsUsedByThisControllerFromNode(nodule);\n        if (supportedTargets.length > 0) {\n          return nodule;\n        }\n      }\n    }\n    if (nodule.nodeName == \"#text\") {\n      return null;\n    }\n    if (nodule.parentNode == null) {\n      return null;\n    }\n    if (nodule.parentNode == this.targetElement) {\n      if (this.targetsUsedByThisControllerFromNode(nodule).length > 0) {\n        return nodule;\n      }\n      return null;\n    }\n    return null;\n  }\n  targetAdded(name, node, trigger) {\n    let targetCallback = `${name}TargetAdded`;\n    this.controller[targetCallback] && method(this.controller, targetCallback).call(this.controller, node);\n    this.log(\"targetAdded\", {\n      target: name,\n      node: node,\n      trigger: trigger\n    });\n  }\n  targetRemoved(name, node, trigger) {\n    let targetCallback = `${name}TargetRemoved`;\n    this.controller[targetCallback] && method(this.controller, targetCallback).call(this.controller, node);\n    this.log(\"targetRemoved\", {\n      target: name,\n      node: node,\n      trigger: trigger\n    });\n  }\n  targetChanged(name, node, trigger) {\n    let targetCallback = `${name}TargetChanged`;\n    this.controller[targetCallback] && method(this.controller, targetCallback).call(this.controller, node);\n    this.log(\"targetChanged\", {\n      target: name,\n      node: node,\n      trigger: trigger\n    });\n  }\n  targetsUsedByThisControllerFromNode(node) {\n    if (node.nodeName == \"#text\" || node.nodeName == \"#comment\") {\n      return [];\n    }\n    let nodeElement = node;\n    return this.targetsUsedByThisController(nodeElement.getAttribute(this.scopedTargetSelector) || nodeElement.getAttribute(this.targetSelector));\n  }\n  targetsUsedByThisController(targetStr) {\n    targetStr = targetStr || \"\";\n    let targetsToCheck = this.stripIdentifierPrefix(targetStr).split(\" \");\n    return this.targets.filter((n => targetsToCheck.indexOf(n) !== -1));\n  }\n  stripIdentifierPrefix(target) {\n    return target.replace(new RegExp(this.identifierPrefix, \"g\"), \"\");\n  }\n  enhanceController() {\n    const controllerDisconnect = this.controller.disconnect.bind(this.controller);\n    const disconnect = () => {\n      this.unobserve();\n      controllerDisconnect();\n    };\n    Object.assign(this.controller, {\n      disconnect: disconnect\n    });\n  }\n}\n\nconst useTargetMutation = (composableController, options = {}) => {\n  const controller = composableController;\n  const observer = new UseTargetMutation(controller, options);\n  return [ observer.observe, observer.unobserve ];\n};\n\nclass TargetMutationComposableController extends Controller {}\n\nclass TargetMutationController extends TargetMutationComposableController {\n  constructor(context) {\n    super(context);\n    requestAnimationFrame((() => {\n      const [observe, unobserve] = useTargetMutation(this, this.options);\n      Object.assign(this, {\n        observe: observe,\n        unobserve: unobserve\n      });\n    }));\n  }\n}\n\nclass ThrottleController extends Controller {}\n\nThrottleController.throttles = [];\n\nconst defaultWait = 200;\n\nfunction throttle(func, wait = defaultWait) {\n  let inThrottle;\n  return function() {\n    const args = arguments;\n    const context = this;\n    if (!inThrottle) {\n      inThrottle = true;\n      func.apply(context, args);\n      setTimeout((() => inThrottle = false), wait);\n    }\n  };\n}\n\nconst useThrottle = (composableController, options = {}) => {\n  var _a;\n  const controller = composableController;\n  const constructor = controller.constructor;\n  (_a = constructor.throttles) === null || _a === void 0 ? void 0 : _a.forEach((func => {\n    if (typeof func === \"string\") {\n      controller[func] = throttle(controller[func], options === null || options === void 0 ? void 0 : options.wait);\n    }\n    if (typeof func === \"object\") {\n      const {name: name, wait: wait} = func;\n      if (!name) return;\n      controller[name] = throttle(controller[name], wait || (options === null || options === void 0 ? void 0 : options.wait));\n    }\n  }));\n};\n\nconst alpineNames = {\n  enterFromClass: \"enter\",\n  enterActiveClass: \"enterStart\",\n  enterToClass: \"enterEnd\",\n  leaveFromClass: \"leave\",\n  leaveActiveClass: \"leaveStart\",\n  leaveToClass: \"leaveEnd\"\n};\n\nconst defaultOptions = {\n  transitioned: false,\n  hiddenClass: \"hidden\",\n  preserveOriginalClass: true,\n  removeToClasses: true\n};\n\nconst useTransition = (composableController, options = {}) => {\n  var _a, _b, _c;\n  const controller = composableController;\n  const targetName = controller.element.dataset.transitionTarget;\n  let targetFromAttribute;\n  if (targetName) {\n    targetFromAttribute = controller[`${targetName}Target`];\n  }\n  const targetElement = (options === null || options === void 0 ? void 0 : options.element) || targetFromAttribute || controller.element;\n  if (!(targetElement instanceof HTMLElement || targetElement instanceof SVGElement)) return;\n  const dataset = targetElement.dataset;\n  const leaveAfter = parseInt(dataset.leaveAfter || \"\") || options.leaveAfter || 0;\n  const {transitioned: transitioned, hiddenClass: hiddenClass, preserveOriginalClass: preserveOriginalClass, removeToClasses: removeToClasses} = Object.assign({}, defaultOptions, options);\n  const controllerEnter = (_a = controller.enter) === null || _a === void 0 ? void 0 : _a.bind(controller);\n  const controllerLeave = (_b = controller.leave) === null || _b === void 0 ? void 0 : _b.bind(controller);\n  const controllerToggleTransition = (_c = controller.toggleTransition) === null || _c === void 0 ? void 0 : _c.bind(controller);\n  async function enter(event) {\n    if (controller.transitioned) return;\n    controller.transitioned = true;\n    controllerEnter && controllerEnter(event);\n    const enterFromClasses = getAttribute(\"enterFrom\", options, dataset);\n    const enterActiveClasses = getAttribute(\"enterActive\", options, dataset);\n    const enterToClasses = getAttribute(\"enterTo\", options, dataset);\n    const leaveToClasses = getAttribute(\"leaveTo\", options, dataset);\n    if (!!hiddenClass) {\n      targetElement.classList.remove(hiddenClass);\n    }\n    if (!removeToClasses) {\n      removeClasses(targetElement, leaveToClasses);\n    }\n    await transition(targetElement, enterFromClasses, enterActiveClasses, enterToClasses, hiddenClass, preserveOriginalClass, removeToClasses);\n    if (leaveAfter > 0) {\n      setTimeout((() => {\n        leave(event);\n      }), leaveAfter);\n    }\n  }\n  async function leave(event) {\n    if (!controller.transitioned) return;\n    controller.transitioned = false;\n    controllerLeave && controllerLeave(event);\n    const leaveFromClasses = getAttribute(\"leaveFrom\", options, dataset);\n    const leaveActiveClasses = getAttribute(\"leaveActive\", options, dataset);\n    const leaveToClasses = getAttribute(\"leaveTo\", options, dataset);\n    const enterToClasses = getAttribute(\"enterTo\", options, dataset);\n    if (!removeToClasses) {\n      removeClasses(targetElement, enterToClasses);\n    }\n    await transition(targetElement, leaveFromClasses, leaveActiveClasses, leaveToClasses, hiddenClass, preserveOriginalClass, removeToClasses);\n    if (!!hiddenClass) {\n      targetElement.classList.add(hiddenClass);\n    }\n  }\n  function toggleTransition(event) {\n    controllerToggleTransition && controllerToggleTransition(event);\n    if (controller.transitioned) {\n      leave();\n    } else {\n      enter();\n    }\n  }\n  async function transition(element, initialClasses, activeClasses, endClasses, hiddenClass, preserveOriginalClass, removeEndClasses) {\n    const stashedClasses = [];\n    if (preserveOriginalClass) {\n      initialClasses.forEach((cls => element.classList.contains(cls) && cls !== hiddenClass && stashedClasses.push(cls)));\n      activeClasses.forEach((cls => element.classList.contains(cls) && cls !== hiddenClass && stashedClasses.push(cls)));\n      endClasses.forEach((cls => element.classList.contains(cls) && cls !== hiddenClass && stashedClasses.push(cls)));\n    }\n    addClasses(element, initialClasses);\n    removeClasses(element, stashedClasses);\n    addClasses(element, activeClasses);\n    await nextAnimationFrame();\n    removeClasses(element, initialClasses);\n    addClasses(element, endClasses);\n    await afterTransition(element);\n    removeClasses(element, activeClasses);\n    if (removeEndClasses) {\n      removeClasses(element, endClasses);\n    }\n    addClasses(element, stashedClasses);\n  }\n  function initialState() {\n    controller.transitioned = transitioned;\n    if (transitioned) {\n      if (!!hiddenClass) {\n        targetElement.classList.remove(hiddenClass);\n      }\n      enter();\n    } else {\n      if (!!hiddenClass) {\n        targetElement.classList.add(hiddenClass);\n      }\n      leave();\n    }\n  }\n  function addClasses(element, classes) {\n    if (classes.length > 0) {\n      element.classList.add(...classes);\n    }\n  }\n  function removeClasses(element, classes) {\n    if (classes.length > 0) {\n      element.classList.remove(...classes);\n    }\n  }\n  initialState();\n  Object.assign(controller, {\n    enter: enter,\n    leave: leave,\n    toggleTransition: toggleTransition\n  });\n  return [ enter, leave, toggleTransition ];\n};\n\nfunction getAttribute(name, options, dataset) {\n  const datasetName = `transition${name[0].toUpperCase()}${name.substr(1)}`;\n  const datasetAlpineName = alpineNames[name];\n  const classes = options[name] || dataset[datasetName] || dataset[datasetAlpineName] || \" \";\n  return isEmpty(classes) ? [] : classes.split(\" \");\n}\n\nasync function afterTransition(element) {\n  return new Promise((resolve => {\n    const duration = Number(getComputedStyle(element).transitionDuration.split(\",\")[0].replace(\"s\", \"\")) * 1e3;\n    setTimeout((() => {\n      resolve(duration);\n    }), duration);\n  }));\n}\n\nasync function nextAnimationFrame() {\n  return new Promise((resolve => {\n    requestAnimationFrame((() => {\n      requestAnimationFrame(resolve);\n    }));\n  }));\n}\n\nfunction isEmpty(str) {\n  return str.length === 0 || !str.trim();\n}\n\nclass TransitionComposableController extends Controller {\n  constructor() {\n    super(...arguments);\n    this.transitioned = false;\n  }\n}\n\nclass TransitionController extends TransitionComposableController {\n  constructor(context) {\n    super(context);\n    requestAnimationFrame((() => {\n      useTransition(this, this.options);\n    }));\n  }\n}\n\nclass UseVisibility extends StimulusUse {\n  constructor(controller, options = {}) {\n    super(controller, options);\n    this.observe = () => {\n      this.controller.isVisible = !document.hidden;\n      document.addEventListener(\"visibilitychange\", this.handleVisibilityChange);\n      this.handleVisibilityChange();\n    };\n    this.unobserve = () => {\n      document.removeEventListener(\"visibilitychange\", this.handleVisibilityChange);\n    };\n    this.becomesInvisible = event => {\n      this.controller.isVisible = false;\n      this.call(\"invisible\", event);\n      this.log(\"invisible\", {\n        isVisible: false\n      });\n      this.dispatch(\"invisible\", {\n        event: event,\n        isVisible: false\n      });\n    };\n    this.becomesVisible = event => {\n      this.controller.isVisible = true;\n      this.call(\"visible\", event);\n      this.log(\"visible\", {\n        isVisible: true\n      });\n      this.dispatch(\"visible\", {\n        event: event,\n        isVisible: true\n      });\n    };\n    this.handleVisibilityChange = event => {\n      if (document.hidden) {\n        this.becomesInvisible(event);\n      } else {\n        this.becomesVisible(event);\n      }\n    };\n    this.controller = controller;\n    this.enhanceController();\n    this.observe();\n  }\n  enhanceController() {\n    const controllerDisconnect = this.controllerDisconnect;\n    const disconnect = () => {\n      this.unobserve();\n      controllerDisconnect();\n    };\n    Object.assign(this.controller, {\n      disconnect: disconnect\n    });\n  }\n}\n\nconst useVisibility = (composableController, options = {}) => {\n  const controller = composableController;\n  const observer = new UseVisibility(controller, options);\n  return [ observer.observe, observer.unobserve ];\n};\n\nclass VisibilityComposableController extends Controller {\n  constructor() {\n    super(...arguments);\n    this.isVisible = false;\n  }\n}\n\nclass VisibilityController extends VisibilityComposableController {\n  constructor(context) {\n    super(context);\n    requestAnimationFrame((() => {\n      const [observe, unobserve] = useVisibility(this, this.options);\n      Object.assign(this, {\n        observe: observe,\n        unobserve: unobserve\n      });\n    }));\n  }\n}\n\nclass UseWindowFocus extends StimulusUse {\n  constructor(controller, options = {}) {\n    super(controller, options);\n    this.observe = () => {\n      if (document.hasFocus()) {\n        this.becomesFocused();\n      } else {\n        this.becomesUnfocused();\n      }\n      this.interval = setInterval((() => {\n        this.handleWindowFocusChange();\n      }), this.intervalDuration);\n    };\n    this.unobserve = () => {\n      clearInterval(this.interval);\n    };\n    this.becomesUnfocused = event => {\n      this.controller.hasFocus = false;\n      this.call(\"unfocus\", event);\n      this.log(\"unfocus\", {\n        hasFocus: false\n      });\n      this.dispatch(\"unfocus\", {\n        event: event,\n        hasFocus: false\n      });\n    };\n    this.becomesFocused = event => {\n      this.controller.hasFocus = true;\n      this.call(\"focus\", event);\n      this.log(\"focus\", {\n        hasFocus: true\n      });\n      this.dispatch(\"focus\", {\n        event: event,\n        hasFocus: true\n      });\n    };\n    this.handleWindowFocusChange = event => {\n      if (document.hasFocus() && !this.controller.hasFocus) {\n        this.becomesFocused(event);\n      } else if (!document.hasFocus() && this.controller.hasFocus) {\n        this.becomesUnfocused(event);\n      }\n    };\n    this.controller = controller;\n    this.intervalDuration = options.interval || 200;\n    this.enhanceController();\n    this.observe();\n  }\n  enhanceController() {\n    const controllerDisconnect = this.controllerDisconnect;\n    const disconnect = () => {\n      this.unobserve();\n      controllerDisconnect();\n    };\n    Object.assign(this.controller, {\n      disconnect: disconnect\n    });\n  }\n}\n\nconst useWindowFocus = (composableController, options = {}) => {\n  const controller = composableController;\n  const observer = new UseWindowFocus(controller, options);\n  return [ observer.observe, observer.unobserve ];\n};\n\nclass WindowFocusComposableController extends Controller {\n  constructor() {\n    super(...arguments);\n    this.hasFocus = false;\n  }\n}\n\nclass WindowFocusController extends WindowFocusComposableController {\n  constructor(context) {\n    super(context);\n    requestAnimationFrame((() => {\n      const [observe, unobserve] = useWindowFocus(this, this.options);\n      Object.assign(this, {\n        observe: observe,\n        unobserve: unobserve\n      });\n    }));\n  }\n}\n\nconst useWindowResize = composableController => {\n  const controller = composableController;\n  const callback = event => {\n    const {innerWidth: innerWidth, innerHeight: innerHeight} = window;\n    const payload = {\n      height: innerHeight || Infinity,\n      width: innerWidth || Infinity,\n      event: event\n    };\n    method(controller, \"windowResize\").call(controller, payload);\n  };\n  const controllerDisconnect = controller.disconnect.bind(controller);\n  const observe = () => {\n    window.addEventListener(\"resize\", callback);\n    callback();\n  };\n  const unobserve = () => {\n    window.removeEventListener(\"resize\", callback);\n  };\n  Object.assign(controller, {\n    disconnect() {\n      unobserve();\n      controllerDisconnect();\n    }\n  });\n  observe();\n  return [ observe, unobserve ];\n};\n\nclass WindowResizeComposableController extends Controller {}\n\nclass WindowResizeController extends WindowResizeComposableController {\n  constructor(context) {\n    super(context);\n    requestAnimationFrame((() => {\n      const [observe, unobserve] = useWindowResize(this);\n      Object.assign(this, {\n        observe: observe,\n        unobserve: unobserve\n      });\n    }));\n  }\n}\n\nfunction useHotkeys() {\n  throw \"[stimulus-use] Notice: The import for `useHotkeys()` has been moved from `stimulus-use` to `stimulus-use/hotkeys`. \\nPlease change the import accordingly and add `hotkey-js` as a dependency to your project. \\n\\nFor more information see: https://stimulus-use.github.io/stimulus-use/#/use-hotkeys?id=importing-the-behavior\";\n}\n\nexport { ApplicationController, ClickOutsideController, HoverController, IdleController, IntersectionController, LazyLoadController, MutationController, ResizeController, TargetMutationController, TransitionController, UseHover, UseMutation, UseTargetMutation, UseVisibility, UseWindowFocus, VisibilityController, WindowFocusController, WindowResizeController, debounce, useApplication, useClickOutside, useDebounce, useDispatch, useHotkeys, useHover, useIdle, useIntersection, useLazyLoad, useMatchMedia, useMemo, useMeta, useMutation, useResize, useTargetMutation, useThrottle, useTransition, useVisibility, useWindowFocus, useWindowResize };\n", "import { Controller } from \"@hotwired/stimulus\"\nimport { useTargetMutation } from 'stimulus-use'\nexport default class extends Controller {\n    static targets = ['localMenuItem']\n\n    connect() {\n        useTargetMutation(this, { targets: [\"localMenuItem\"] });\n        this.activeLink = null;\n        this.ktmenu = new KTMenu(this.element);\n    }\n\n    localMenuItemTargetAdded(element) {\n        // \u9009\u4E2D\u65B0\u5EFA\u7684\u672C\u5730\u6587\u6863\u94FE\u63A5\n        const link = element.querySelector('a.local-doc-link');\n        this.setActiveLink(link);\n    }\n\n    localMenuItemTargetRemoved(element) {\n        console.log('localMenuItemTargetRemoved', element);\n    }\n\n    localMenuItemTargetChanged(element) {\n        console.log('localMenuItemTargetChanged', element);\n    }\n\n    toggleAccordion(event) {\n        event.preventDefault();\n        let menuItem = event.currentTarget.closest('.menu-item');\n        this.ktmenu.toggle(menuItem);\n    }\n\n    activeCurrentLink(event) {\n        this.setActiveLink(event.currentTarget)\n    }\n\n    setActiveLink(element) {\n        if (this.activeLink) {\n            this.removeActiveClass(this.activeLink)\n        }\n\n        this.activeLink = element\n        this.addActiveClass(this.activeLink)\n    }\n\n    addActiveClass(element) {\n        element.classList.add('text-primary')\n        element.classList.remove('text-gray-700')\n    }\n\n    removeActiveClass(element) {\n        element.classList.remove('text-primary')\n        element.classList.add('text-gray-700')\n    }\n\n    destroyLocalDocument(event) {\n        event.preventDefault();\n        const dom = event.currentTarget.dataset.dom;\n        const url = event.currentTarget.dataset.url;\n        console.log('destroyLocalDocument', dom, url);\n        const link = event.currentTarget.closest('div#'+dom).querySelector('span.menu-title a');\n        this.setActiveLink(link);\n        this.localMenuItemTarget.remove();\n        Turbo.visit(url, { action: 'advance', frame: 'main_content' });\n    }\n}\n", "(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Pickr\"] = factory();\n\telse\n\t\troot[\"Pickr\"] = factory();\n})(self, () => {\nreturn ", "// The require scope\nvar __webpack_require__ = {};\n\n", "// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};", "__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))", "// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};", "/* eslint-disable prefer-rest-params */\nfunction eventListener(method, elements, events, fn, options = {}) {\n\n    // Normalize array\n    if (elements instanceof HTMLCollection || elements instanceof NodeList) {\n        elements = Array.from(elements);\n    } else if (!Array.isArray(elements)) {\n        elements = [elements];\n    }\n\n    if (!Array.isArray(events)) {\n        events = [events];\n    }\n\n    for (const el of elements) {\n        for (const ev of events) {\n            el[method](ev, fn, {capture: false, ...options});\n        }\n    }\n\n    return Array.prototype.slice.call(arguments, 1);\n}\n\n/**\n * Add event(s) to element(s).\n * @param elements DOM-Elements\n * @param events Event names\n * @param fn Callback\n * @param options Optional options\n * @return Array passed arguments\n */\nexport const on = eventListener.bind(null, 'addEventListener');\n\n/**\n * Remove event(s) from element(s).\n * @param elements DOM-Elements\n * @param events Event names\n * @param fn Callback\n * @param options Optional options\n * @return Array passed arguments\n */\nexport const off = eventListener.bind(null, 'removeEventListener');\n\n/**\n * Creates an DOM-Element out of a string (Single element).\n * @param html HTML representing a single element\n * @returns {Element | null} The element.\n */\nexport function createElementFromString(html) {\n    const div = document.createElement('div');\n    div.innerHTML = html.trim();\n    return div.firstElementChild;\n}\n\n/**\n * Creates a new html element, every element which has\n * a ':ref' attribute will be saved in a object (which will be returned)\n * where the value of ':ref' is the object-key and the value the HTMLElement.\n *\n * It's possible to create a hierarchy if you add a ':obj' attribute. Every\n * sibling will be added to the object which will get the name from the 'data-con' attribute.\n *\n * If you want to create an Array out of multiple elements, you can use the ':arr' attribute,\n * the value defines the key and all elements, which has the same parent and the same 'data-arr' attribute,\n * would be added to it.\n *\n * @param str - The HTML String.\n */\n\nexport function createFromTemplate(str) {\n\n    // Removes an attribute from a HTMLElement and returns the value.\n    const removeAttribute = (el, name) => {\n        const value = el.getAttribute(name);\n        el.removeAttribute(name);\n        return value;\n    };\n\n    // Recursive function to resolve template\n    const resolve = (element, base = {}) => {\n\n        // Check key and container attribute\n        const con = removeAttribute(element, ':obj');\n        const key = removeAttribute(element, ':ref');\n        const subtree = con ? (base[con] = {}) : base;\n\n        // Check and save element\n        key && (base[key] = element);\n        for (const child of Array.from(element.children)) {\n            const arr = removeAttribute(child, ':arr');\n            const sub = resolve(child, arr ? {} : subtree);\n\n            if (arr) {\n\n                // Check if there is already an array and add element\n                (subtree[arr] || (subtree[arr] = []))\n                    .push(Object.keys(sub).length ? sub : child);\n            }\n        }\n\n        return base;\n    };\n\n    return resolve(createElementFromString(str));\n}\n\n/**\n * Polyfill for safari & firefox for the eventPath event property.\n * @param evt The event object.\n * @return [String] event path.\n */\nexport function eventPath(evt) {\n    let path = evt.path || (evt.composedPath && evt.composedPath());\n    if (path) {\n        return path;\n    }\n\n    let el = evt.target.parentElement;\n    path = [evt.target, el];\n    while (el = el.parentElement) {\n        path.push(el);\n    }\n\n    path.push(document, window);\n    return path;\n}\n\n/**\n * Resolves a HTMLElement by query.\n * @param val\n * @returns {null|Document|Element}\n */\nexport function resolveElement(val) {\n    if (val instanceof Element) {\n        return val;\n    } else if (typeof val === 'string') {\n        return val.split(/>>/g).reduce((pv, cv, ci, a) => {\n            pv = pv.querySelector(cv);\n            return ci < a.length - 1 ? pv.shadowRoot : pv;\n        }, document);\n    }\n\n    return null;\n}\n\n/**\n * Creates the ability to change numbers in an input field with the scroll-wheel.\n * @param el\n * @param mapper\n */\nexport function adjustableInputNumbers(el, mapper = v => v) {\n\n    function handleScroll(e) {\n        const inc = ([0.001, 0.01, 0.1])[Number(e.shiftKey || e.ctrlKey * 2)] * (e.deltaY < 0 ? 1 : -1);\n\n        let index = 0;\n        let off = el.selectionStart;\n        el.value = el.value.replace(/[\\d.]+/g, (v, i) => {\n\n            // Check if number is in cursor range and increase it\n            if (i <= off && i + v.length >= off) {\n                off = i;\n                return mapper(Number(v), inc, index);\n            }\n\n            index++;\n            return v;\n        });\n\n        el.focus();\n        el.setSelectionRange(off, off);\n\n        // Prevent default and trigger input event\n        e.preventDefault();\n        el.dispatchEvent(new Event('input'));\n    }\n\n    // Bind events\n    on(el, 'focus', () => on(window, 'wheel', handleScroll, {passive: false}));\n    on(el, 'blur', () => off(window, 'wheel', handleScroll));\n}\n", "// Shorthands\nconst {min, max, floor, round} = Math;\n\n/**\n * Tries to convert a color name to rgb/a hex representation\n * @param name\n * @returns {string | CanvasGradient | CanvasPattern}\n */\nfunction standardizeColor(name) {\n\n    // Since invalid color's will be parsed as black, filter them out\n    if (name.toLowerCase() === 'black') {\n        return '#000';\n    }\n\n    const ctx = document.createElement('canvas').getContext('2d');\n    ctx.fillStyle = name;\n    return ctx.fillStyle === '#000' ? null : ctx.fillStyle;\n}\n\n/**\n * Convert HSV spectrum to RGB.\n * @param h Hue\n * @param s Saturation\n * @param v Value\n * @returns {number[]} Array with rgb values.\n */\nexport function hsvToRgb(h, s, v) {\n    h = (h / 360) * 6;\n    s /= 100;\n    v /= 100;\n\n    const i = floor(h);\n\n    const f = h - i;\n    const p = v * (1 - s);\n    const q = v * (1 - f * s);\n    const t = v * (1 - (1 - f) * s);\n\n    const mod = i % 6;\n    const r = [v, q, p, p, t, v][mod];\n    const g = [t, v, v, q, p, p][mod];\n    const b = [p, p, t, v, v, q][mod];\n\n    return [\n        r * 255,\n        g * 255,\n        b * 255\n    ];\n}\n\n/**\n * Convert HSV spectrum to Hex.\n * @param h Hue\n * @param s Saturation\n * @param v Value\n * @returns {string[]} Hex values\n */\nexport function hsvToHex(h, s, v) {\n    return hsvToRgb(h, s, v).map(v =>\n        round(v).toString(16).padStart(2, '0')\n    );\n}\n\n/**\n * Convert HSV spectrum to CMYK.\n * @param h Hue\n * @param s Saturation\n * @param v Value\n * @returns {number[]} CMYK values\n */\nexport function hsvToCmyk(h, s, v) {\n    const rgb = hsvToRgb(h, s, v);\n    const r = rgb[0] / 255;\n    const g = rgb[1] / 255;\n    const b = rgb[2] / 255;\n\n    const k = min(1 - r, 1 - g, 1 - b);\n    const c = k === 1 ? 0 : (1 - r - k) / (1 - k);\n    const m = k === 1 ? 0 : (1 - g - k) / (1 - k);\n    const y = k === 1 ? 0 : (1 - b - k) / (1 - k);\n\n    return [\n        c * 100,\n        m * 100,\n        y * 100,\n        k * 100\n    ];\n}\n\n/**\n * Convert HSV spectrum to HSL.\n * @param h Hue\n * @param s Saturation\n * @param v Value\n * @returns {number[]} HSL values\n */\nexport function hsvToHsl(h, s, v) {\n    s /= 100;\n    v /= 100;\n\n    const l = (2 - s) * v / 2;\n\n    if (l !== 0) {\n        if (l === 1) {\n            s = 0;\n        } else if (l < 0.5) {\n            s = s * v / (l * 2);\n        } else {\n            s = s * v / (2 - l * 2);\n        }\n    }\n\n    return [\n        h,\n        s * 100,\n        l * 100\n    ];\n}\n\n/**\n * Convert RGB to HSV.\n * @param r Red\n * @param g Green\n * @param b Blue\n * @return {number[]} HSV values.\n */\nfunction rgbToHsv(r, g, b) {\n    r /= 255;\n    g /= 255;\n    b /= 255;\n\n    const minVal = min(r, g, b);\n    const maxVal = max(r, g, b);\n    const delta = maxVal - minVal;\n\n    let h, s;\n    const v = maxVal;\n    if (delta === 0) {\n        h = s = 0;\n    } else {\n        s = delta / maxVal;\n        const dr = (((maxVal - r) / 6) + (delta / 2)) / delta;\n        const dg = (((maxVal - g) / 6) + (delta / 2)) / delta;\n        const db = (((maxVal - b) / 6) + (delta / 2)) / delta;\n\n        if (r === maxVal) {\n            h = db - dg;\n        } else if (g === maxVal) {\n            h = (1 / 3) + dr - db;\n        } else if (b === maxVal) {\n            h = (2 / 3) + dg - dr;\n        }\n\n        if (h < 0) {\n            h += 1;\n        } else if (h > 1) {\n            h -= 1;\n        }\n    }\n\n    return [\n        h * 360,\n        s * 100,\n        v * 100\n    ];\n}\n\n/**\n * Convert CMYK to HSV.\n * @param c Cyan\n * @param m Magenta\n * @param y Yellow\n * @param k Key (Black)\n * @return {number[]} HSV values.\n */\nfunction cmykToHsv(c, m, y, k) {\n    c /= 100;\n    m /= 100;\n    y /= 100;\n    k /= 100;\n\n    const r = (1 - min(1, c * (1 - k) + k)) * 255;\n    const g = (1 - min(1, m * (1 - k) + k)) * 255;\n    const b = (1 - min(1, y * (1 - k) + k)) * 255;\n\n    return [...rgbToHsv(r, g, b)];\n}\n\n/**\n * Convert HSL to HSV.\n * @param h Hue\n * @param s Saturation\n * @param l Lightness\n * @return {number[]} HSV values.\n */\nfunction hslToHsv(h, s, l) {\n    s /= 100;\n    l /= 100;\n    s *= l < 0.5 ? l : 1 - l;\n\n    const ns = (2 * s / (l + s)) * 100;\n    const v = (l + s) * 100;\n    return [h, isNaN(ns) ? 0 : ns, v];\n}\n\n/**\n * Convert HEX to HSV.\n * @param hex Hexadecimal string of rgb colors, can have length 3 or 6.\n * @return {number[]} HSV values.\n */\nfunction hexToHsv(hex) {\n    return rgbToHsv(...hex.match(/.{2}/g).map(v => parseInt(v, 16)));\n}\n\n/**\n * Try's to parse a string which represents a color to a HSV array.\n * Current supported types are cmyk, rgba, hsla and hexadecimal.\n * @param str\n * @return {*}\n */\nexport function parseToHSVA(str) {\n\n    // Check if string is a color-name\n    str = str.match(/^[a-zA-Z]+$/) ? standardizeColor(str) : str;\n\n    // Regular expressions to match different types of color represention\n    const regex = {\n        cmyk: /^cmyk\\D+([\\d.]+)\\D+([\\d.]+)\\D+([\\d.]+)\\D+([\\d.]+)/i,\n        rgba: /^rgba?\\D+([\\d.]+)(%?)\\D+([\\d.]+)(%?)\\D+([\\d.]+)(%?)\\D*?(([\\d.]+)(%?)|$)/i,\n        hsla: /^hsla?\\D+([\\d.]+)\\D+([\\d.]+)\\D+([\\d.]+)\\D*?(([\\d.]+)(%?)|$)/i,\n        hsva: /^hsva?\\D+([\\d.]+)\\D+([\\d.]+)\\D+([\\d.]+)\\D*?(([\\d.]+)(%?)|$)/i,\n        hexa: /^#?(([\\dA-Fa-f]{3,4})|([\\dA-Fa-f]{6})|([\\dA-Fa-f]{8}))$/i\n    };\n\n    /**\n     * Takes an Array of any type, convert strings which represents\n     * a number to a number an anything else to undefined.\n     * @param array\n     * @return {*}\n     */\n    const numarize = array => array.map(v => /^(|\\d+)\\.\\d+|\\d+$/.test(v) ? Number(v) : undefined);\n\n    let match;\n    invalid: for (const type in regex) {\n\n        // Check if current scheme passed\n        if (!(match = regex[type].exec(str))) {\n            continue;\n        }\n\n        // Try to convert\n        switch (type) {\n            case 'cmyk': {\n                const [, c, m, y, k] = numarize(match);\n\n                if (c > 100 || m > 100 || y > 100 || k > 100) {\n                    break invalid;\n                }\n\n                return {values: cmykToHsv(c, m, y, k), type};\n            }\n            case 'rgba': {\n                let [, r, , g, , b, , , a] = numarize(match);\n\n                r = match[2] === '%' ? (r / 100) * 255 : r;\n                g = match[4] === '%' ? (g / 100) * 255 : g;\n                b = match[6] === '%' ? (b / 100) * 255 : b;\n                a = match[9] === '%' ? (a / 100) : a;\n\n                if (r > 255 || g > 255 || b > 255 || a < 0 || a > 1) {\n                    break invalid;\n                }\n\n                return {values: [...rgbToHsv(r, g, b), a], a, type};\n            }\n            case 'hexa': {\n                let [, hex] = match;\n\n                if (hex.length === 4 || hex.length === 3) {\n                    hex = hex.split('').map(v => v + v).join('');\n                }\n\n                const raw = hex.substring(0, 6);\n                let a = hex.substring(6);\n\n                // Convert 0 - 255 to 0 - 1 for opacity\n                a = a ? (parseInt(a, 16) / 255) : undefined;\n\n                return {values: [...hexToHsv(raw), a], a, type};\n            }\n            case 'hsla': {\n                let [, h, s, l, , a] = numarize(match);\n                a = match[6] === '%' ? (a / 100) : a;\n\n                if (h > 360 || s > 100 || l > 100 || a < 0 || a > 1) {\n                    break invalid;\n                }\n\n                return {values: [...hslToHsv(h, s, l), a], a, type};\n            }\n            case 'hsva': {\n                let [, h, s, v, , a] = numarize(match);\n                a = match[6] === '%' ? (a / 100) : a;\n\n                if (h > 360 || s > 100 || v > 100 || a < 0 || a > 1) {\n                    break invalid;\n                }\n\n                return {values: [h, s, v, a], a, type};\n            }\n        }\n    }\n\n    return {values: null, type: null};\n}\n", "import {hsvToCmyk, hsvToHex, hsvToHsl, hsvToRgb} from './color';\n\n/**\n * Simple class which holds the properties\n * of the color represention model hsla (hue saturation lightness alpha)\n */\nexport function HSVaColor(h = 0, s = 0, v = 0, a = 1) {\n    const mapper = (original, next) => (precision = -1) => {\n        return next(~precision ? original.map(v => Number(v.toFixed(precision))) : original);\n    };\n\n    const that = {\n        h, s, v, a,\n\n        toHSVA() {\n            const hsva = [that.h, that.s, that.v, that.a];\n            hsva.toString = mapper(hsva, arr => `hsva(${arr[0]}, ${arr[1]}%, ${arr[2]}%, ${that.a})`);\n            return hsva;\n        },\n\n        toHSLA() {\n            const hsla = [...hsvToHsl(that.h, that.s, that.v), that.a];\n            hsla.toString = mapper(hsla, arr => `hsla(${arr[0]}, ${arr[1]}%, ${arr[2]}%, ${that.a})`);\n            return hsla;\n        },\n\n        toRGBA() {\n            const rgba = [...hsvToRgb(that.h, that.s, that.v), that.a];\n            rgba.toString = mapper(rgba, arr => `rgba(${arr[0]}, ${arr[1]}, ${arr[2]}, ${that.a})`);\n            return rgba;\n        },\n\n        toCMYK() {\n            const cmyk = hsvToCmyk(that.h, that.s, that.v);\n            cmyk.toString = mapper(cmyk, arr => `cmyk(${arr[0]}%, ${arr[1]}%, ${arr[2]}%, ${arr[3]}%)`);\n            return cmyk;\n        },\n\n        toHEXA() {\n            const hex = hsvToHex(that.h, that.s, that.v);\n\n            // Check if alpha channel make sense, convert it to 255 number space, convert\n            // To hex and pad it with zeros if needet.\n            const alpha = that.a >= 1 ? '' : Number((that.a * 255).toFixed(0))\n                .toString(16)\n                .toUpperCase().padStart(2, '0');\n\n            alpha && hex.push(alpha);\n            hex.toString = () => `#${hex.join('').toUpperCase()}`;\n            return hex;\n        },\n\n        clone: () => HSVaColor(that.h, that.s, that.v, that.a)\n    };\n\n    return that;\n}\n", "import * as _ from '../utils/utils';\n\nconst clamp = v => Math.max(Math.min(v, 1), 0);\nexport default function Moveable(opt) {\n\n    const that = {\n\n        // Assign default values\n        options: Object.assign({\n            lock: null,\n            onchange: () => 0,\n            onstop: () => 0\n        }, opt),\n\n        _keyboard(e) {\n            const {options} = that;\n            const {type, key} = e;\n\n            // Check to see if the Movable is focused and then move it based on arrow key inputs\n            // For improved accessibility\n            if (document.activeElement === options.wrapper) {\n                const {lock} = that.options;\n                const up = key === 'ArrowUp';\n                const right = key === 'ArrowRight';\n                const down = key === 'ArrowDown';\n                const left = key === 'ArrowLeft';\n\n                if (type === 'keydown' && (up || right || down || left)) {\n                    let xm = 0;\n                    let ym = 0;\n\n                    if (lock === 'v') {\n                        xm = (up || right) ? 1 : -1;\n                    } else if (lock === 'h') {\n                        xm = (up || right) ? -1 : 1;\n                    } else {\n                        ym = up ? -1 : (down ? 1 : 0);\n                        xm = left ? -1 : (right ? 1 : 0);\n                    }\n\n                    that.update(\n                        clamp(that.cache.x + (0.01 * xm)),\n                        clamp(that.cache.y + (0.01 * ym))\n                    );\n                    e.preventDefault();\n                } else if (key.startsWith('Arrow')) {\n                    that.options.onstop();\n                    e.preventDefault();\n                }\n            }\n        },\n\n        _tapstart(evt) {\n            _.on(document, ['mouseup', 'touchend', 'touchcancel'], that._tapstop);\n            _.on(document, ['mousemove', 'touchmove'], that._tapmove);\n\n            if (evt.cancelable) {\n                evt.preventDefault();\n            }\n\n            // Trigger\n            that._tapmove(evt);\n        },\n\n        _tapmove(evt) {\n            const {options, cache} = that;\n            const {lock, element, wrapper} = options;\n            const b = wrapper.getBoundingClientRect();\n\n            let x = 0, y = 0;\n            if (evt) {\n                const touch = evt && evt.touches && evt.touches[0];\n                x = evt ? (touch || evt).clientX : 0;\n                y = evt ? (touch || evt).clientY : 0;\n\n                // Reset to bounds\n                if (x < b.left) {\n                    x = b.left;\n                } else if (x > b.left + b.width) {\n                    x = b.left + b.width;\n                }\n                if (y < b.top) {\n                    y = b.top;\n                } else if (y > b.top + b.height) {\n                    y = b.top + b.height;\n                }\n\n                // Normalize\n                x -= b.left;\n                y -= b.top;\n            } else if (cache) {\n                x = cache.x * b.width;\n                y = cache.y * b.height;\n            }\n\n            if (lock !== 'h') {\n                element.style.left = `calc(${x / b.width * 100}% - ${element.offsetWidth / 2}px)`;\n            }\n\n            if (lock !== 'v') {\n                element.style.top = `calc(${y / b.height * 100}% - ${element.offsetHeight / 2}px)`;\n            }\n\n            that.cache = {x: x / b.width, y: y / b.height};\n            const cx = clamp(x / b.width);\n            const cy = clamp(y / b.height);\n\n            switch (lock) {\n                case 'v':\n                    return options.onchange(cx);\n                case 'h':\n                    return options.onchange(cy);\n                default:\n                    return options.onchange(cx, cy);\n            }\n        },\n\n        _tapstop() {\n            that.options.onstop();\n            _.off(document, ['mouseup', 'touchend', 'touchcancel'], that._tapstop);\n            _.off(document, ['mousemove', 'touchmove'], that._tapmove);\n        },\n\n        trigger() {\n            that._tapmove();\n        },\n\n        update(x = 0, y = 0) {\n            const {left, top, width, height} = that.options.wrapper.getBoundingClientRect();\n\n            if (that.options.lock === 'h') {\n                y = x;\n            }\n\n            that._tapmove({\n                clientX: left + width * x,\n                clientY: top + height * y\n            });\n        },\n\n        destroy() {\n            const {options, _tapstart, _keyboard} = that;\n            _.off(document, ['keydown', 'keyup'], _keyboard);\n            _.off([options.wrapper, options.element], 'mousedown', _tapstart);\n            _.off([options.wrapper, options.element], 'touchstart', _tapstart, {\n                passive: false\n            });\n        }\n    };\n\n    // Initilize\n    const {options, _tapstart, _keyboard} = that;\n    _.on([options.wrapper, options.element], 'mousedown', _tapstart);\n    _.on([options.wrapper, options.element], 'touchstart', _tapstart, {\n        passive: false\n    });\n\n    _.on(document, ['keydown', 'keyup'], _keyboard);\n\n    return that;\n}\n", "import * as _ from '../utils/utils';\n\nexport default function Selectable(opt = {}) {\n    opt = Object.assign({\n        onchange: () => 0,\n        className: '',\n        elements: []\n    }, opt);\n\n    const onTap = _.on(opt.elements, 'click', evt => {\n        opt.elements.forEach(e =>\n            e.classList[evt.target === e ? 'add' : 'remove'](opt.className)\n        );\n\n        opt.onchange(evt);\n\n        // Fix for https://github.com/Simonwep/pickr/issues/243\n        evt.stopPropagation();\n    });\n\n    return {\n        destroy: () => _.off(...onTap)\n    };\n}\n", "import * as _ from './utils/utils';\n\nexport default instance => {\n\n    const {\n        components,\n        useAsButton,\n        inline,\n        appClass,\n        theme,\n        lockOpacity\n    } = instance.options;\n\n    // Utils\n    const hidden = con => con ? '' : 'style=\"display:none\" hidden';\n    const t = str => instance._t(str);\n\n    const root = _.createFromTemplate(`\n      <div :ref=\"root\" class=\"pickr\">\n\n        ${useAsButton ? '' : '<button type=\"button\" :ref=\"button\" class=\"pcr-button\"></button>'}\n\n        <div :ref=\"app\" class=\"pcr-app ${appClass || ''}\" data-theme=\"${theme}\" ${inline ? 'style=\"position: unset\"' : ''} aria-label=\"${t('ui:dialog', 'color picker dialog')}\" role=\"window\">\n          <div class=\"pcr-selection\" ${hidden(components.palette)}>\n            <div :obj=\"preview\" class=\"pcr-color-preview\" ${hidden(components.preview)}>\n              <button type=\"button\" :ref=\"lastColor\" class=\"pcr-last-color\" aria-label=\"${t('btn:last-color')}\"></button>\n              <div :ref=\"currentColor\" class=\"pcr-current-color\"></div>\n            </div>\n\n            <div :obj=\"palette\" class=\"pcr-color-palette\">\n              <div :ref=\"picker\" class=\"pcr-picker\"></div>\n              <div :ref=\"palette\" class=\"pcr-palette\" tabindex=\"0\" aria-label=\"${t('aria:palette')}\" role=\"listbox\"></div>\n            </div>\n\n            <div :obj=\"hue\" class=\"pcr-color-chooser\" ${hidden(components.hue)}>\n              <div :ref=\"picker\" class=\"pcr-picker\"></div>\n              <div :ref=\"slider\" class=\"pcr-hue pcr-slider\" tabindex=\"0\" aria-label=\"${t('aria:hue')}\" role=\"slider\"></div>\n            </div>\n\n            <div :obj=\"opacity\" class=\"pcr-color-opacity\" ${hidden(components.opacity)}>\n              <div :ref=\"picker\" class=\"pcr-picker\"></div>\n              <div :ref=\"slider\" class=\"pcr-opacity pcr-slider\" tabindex=\"0\" aria-label=\"${t('aria:opacity', 'opacity selection slider')}\" role=\"slider\"></div>\n            </div>\n          </div>\n\n          <div class=\"pcr-swatches ${components.palette ? '' : 'pcr-last'}\" :ref=\"swatches\"></div>\n\n          <div :obj=\"interaction\" class=\"pcr-interaction\" ${hidden(Object.keys(components.interaction).length)}>\n            <input :ref=\"result\" class=\"pcr-result\" type=\"text\" spellcheck=\"false\" ${hidden(components.interaction.input)} aria-label=\"${t('aria:input', 'color input field')}\">\n\n            <input :arr=\"options\" class=\"pcr-type\" data-type=\"HEXA\" value=\"${lockOpacity ? 'HEX' : 'HEXA'}\" type=\"button\" ${hidden(components.interaction.hex)}>\n            <input :arr=\"options\" class=\"pcr-type\" data-type=\"RGBA\" value=\"${lockOpacity ? 'RGB' : 'RGBA'}\" type=\"button\" ${hidden(components.interaction.rgba)}>\n            <input :arr=\"options\" class=\"pcr-type\" data-type=\"HSLA\" value=\"${lockOpacity ? 'HSL' : 'HSLA'}\" type=\"button\" ${hidden(components.interaction.hsla)}>\n            <input :arr=\"options\" class=\"pcr-type\" data-type=\"HSVA\" value=\"${lockOpacity ? 'HSV' : 'HSVA'}\" type=\"button\" ${hidden(components.interaction.hsva)}>\n            <input :arr=\"options\" class=\"pcr-type\" data-type=\"CMYK\" value=\"CMYK\" type=\"button\" ${hidden(components.interaction.cmyk)}>\n\n            <input :ref=\"save\" class=\"pcr-save\" value=\"${t('btn:save')}\" type=\"button\" ${hidden(components.interaction.save)} aria-label=\"${t('aria:btn:save')}\">\n            <input :ref=\"cancel\" class=\"pcr-cancel\" value=\"${t('btn:cancel')}\" type=\"button\" ${hidden(components.interaction.cancel)} aria-label=\"${t('aria:btn:cancel')}\">\n            <input :ref=\"clear\" class=\"pcr-clear\" value=\"${t('btn:clear')}\" type=\"button\" ${hidden(components.interaction.clear)} aria-label=\"${t('aria:btn:clear')}\">\n          </div>\n        </div>\n      </div>\n    `);\n\n    const int = root.interaction;\n\n    // Select option which is not hidden\n    int.options.find(o => !o.hidden && !o.classList.add('active'));\n\n    // Append method to find currently active option\n    int.type = () => int.options.find(e => e.classList.contains('active'));\n    return root;\n};\n", "type Direction = 'top' | 'left' | 'bottom' | 'right';\ntype Alignment = 'start' | 'middle' | 'end';\n\nexport type VariantFlipOrder = {\n    start: string;\n    middle: string;\n    end: string;\n};\n\nexport type PositionFlipOrder = {\n    top: string;\n    right: string;\n    bottom: string;\n    left: string;\n};\n\nexport type NanoPopPosition = `${Direction}-${Alignment}` | Direction;\n\nexport type NanoPopOptions = {\n    container: DOMRect;\n    position: NanoPopPosition;\n    variantFlipOrder: VariantFlipOrder;\n    positionFlipOrder: PositionFlipOrder;\n    margin: number;\n    reference?: HTMLElement;\n    popper?: HTMLElement;\n    arrow?: HTMLElement;\n    padding?: number;\n};\n\ntype AvailablePositions = {\n    t: number;\n    b: number;\n    l: number;\n    r: number;\n};\n\ntype AvailableVariants = {\n    vs: number;\n    vm: number;\n    ve: number;\n    hs: number;\n    hm: number;\n    he: number;\n};\n\ntype PositionPairs = [Direction, Direction];\n\nexport type PositionMatch = 'ts' | 'tm' | 'te' | 'bs' | 'bm' | 'be' | 'ls' | 'lm' | 'le' | 'rs' | 'rm' | 're';\n\nexport interface NanoPop {\n    update(updatedOptions?: Partial<NanoPopOptions>): PositionMatch | null;\n}\n\nexport interface NanoPopConstructor {\n\n    /**\n     * @param reference Reference element\n     * @param popper Actual popper element\n     * @param options Optional options\n     */\n    (reference: HTMLElement, popper: HTMLElement, options?: Partial<NanoPopOptions>): NanoPop;\n\n    /**\n     * @param options Partial options which get merged with the current one\n     */\n    (options?: Partial<NanoPopOptions>): NanoPop;\n}\n\n// Export current version\nexport const version = VERSION;\n\n// Export default\nexport const defaults = {\n    variantFlipOrder: {start: 'sme', middle: 'mse', end: 'ems'},\n    positionFlipOrder: {top: 'tbrl', right: 'rltb', bottom: 'btrl', left: 'lrbt'},\n    position: 'bottom',\n    margin: 8,\n    padding: 0\n};\n\n/**\n * Repositions an element once using the provided options and elements.\n * @param reference Reference element\n * @param popper Popper element\n * @param opt Optional, additional options\n */\nexport const reposition = (\n    reference: HTMLElement,\n    popper: HTMLElement,\n    opt?: Partial<NanoPopOptions>\n): PositionMatch | null => {\n    const {\n        container,\n        arrow,\n        margin,\n        padding,\n        position,\n        variantFlipOrder,\n        positionFlipOrder\n    } = {\n        container: document.documentElement.getBoundingClientRect(),\n        ...defaults,\n        ...opt\n    };\n\n    /**\n     * Reset position to resolve viewport\n     * See https://developer.mozilla.org/en-US/docs/Web/CSS/position#fixed\n     */\n    const {left: originalLeft, top: originalTop} = popper.style;\n    popper.style.left = '0';\n    popper.style.top = '0';\n\n    const refBox = reference.getBoundingClientRect();\n    const popBox = popper.getBoundingClientRect();\n\n    /**\n     * Holds coordinates of top, left, bottom and right alignment\n     */\n    const positionStore: AvailablePositions = {\n        t: refBox.top - popBox.height - margin,\n        b: refBox.bottom + margin,\n        r: refBox.right + margin,\n        l: refBox.left - popBox.width - margin\n    };\n\n    /**\n     * Holds corresponding variants (start, middle, end).\n     * The values depend on horizontal / vertical orientation\n     */\n    const variantStore: AvailableVariants = {\n        vs: refBox.left,\n        vm: refBox.left + refBox.width / 2 - popBox.width / 2,\n        ve: refBox.left + refBox.width - popBox.width,\n        hs: refBox.top,\n        hm: refBox.bottom - refBox.height / 2 - popBox.height / 2,\n        he: refBox.bottom - popBox.height\n    };\n\n    // Extract position and variant\n    // Top-start -> top is \"position\" and \"start\" is the variant\n    const [posKey, varKey = 'middle'] = position.split('-');\n    const positions = positionFlipOrder[posKey as keyof PositionFlipOrder];\n    const variants = variantFlipOrder[varKey as keyof VariantFlipOrder];\n\n    // Try out all possible combinations, starting with the preferred one.\n    const {top, left, bottom, right} = container;\n\n    for (const p of positions) {\n        const vertical = (p === 't' || p === 'b');\n\n        // The position-value\n        let positionVal = positionStore[p as keyof AvailablePositions];\n\n        // Which property has to be changes.\n        const [positionKey, variantKey] = (vertical ? ['top', 'left'] : ['left', 'top']) as PositionPairs;\n\n        /**\n         * box refers to the size of the popper element. Depending on the orientation this is width or height.\n         * The limit is the corresponding, maximum value for this position.\n         */\n        const [positionSize, variantSize] = vertical ? [popBox.height, popBox.width] : [popBox.width, popBox.height];\n\n        const [positionMaximum, variantMaximum] = vertical ? [bottom, right] : [right, bottom];\n        const [positionMinimum, variantMinimum] = vertical ? [top, left] : [left, top];\n\n        // Skip pre-clipped values\n        if (positionVal < positionMinimum || (positionVal + positionSize + padding) > positionMaximum) {\n            continue;\n        }\n\n        for (const v of variants) {\n\n            // The position-value, the related size value of the popper and the limit\n            let variantVal = variantStore[((vertical ? 'v' : 'h') + v) as keyof AvailableVariants];\n\n            if (variantVal < variantMinimum || (variantVal + variantSize + padding) > variantMaximum) {\n                continue;\n            }\n\n            // Subtract popBox's initial position\n            variantVal -= popBox[variantKey];\n            positionVal -= popBox[positionKey];\n\n            // Apply styles and normalize viewport\n            popper.style[variantKey] = `${variantVal}px`;\n            popper.style[positionKey] = `${positionVal}px`;\n\n            if (arrow) {\n                // Calculate refBox's center offset from its variant position for arrow positioning\n                const refBoxCenterOffset = vertical ? refBox.width / 2 : refBox.height / 2;\n\n                // When refBox is larger than popBox, have the arrow's variant position be the center of popBox instead.\n                const arrowVariantVal = refBoxCenterOffset * 2 < variantSize ?\n                    refBox[variantKey] + refBoxCenterOffset : variantVal + variantSize / 2;\n\n                // Arrow position is either on one side of the popBox or the other.\n                if (positionVal < refBox[positionKey]) {\n                    positionVal += positionSize;\n                }\n\n                // Apply styles to arrow\n                arrow.style[variantKey] = `${arrowVariantVal}px`;\n                arrow.style[positionKey] = `${positionVal}px`;\n            }\n\n            return (p + v) as PositionMatch;\n        }\n    }\n\n    // Revert style values (won't work with styled-elements or similar systems)\n    // \"Fix\" for https://github.com/Simonwep/nanopop/issues/7\n    popper.style.left = originalLeft;\n    popper.style.top = originalTop;\n\n    return null;\n};\n\n/**\n * Creates a stateful popper.\n * You can either...\n * ... pass an options object: createPopper(<options>)\n * ... pass both the reference and popper: create(<ref>, <el>, <?options>)\n * ... pass nothing, in this case you'll have to set at least both a reference and a popper in update.\n *\n * @param reference | options Reference element or options\n * @param popper Popper element\n * @param options Optional additional options\n */\nexport const createPopper: NanoPopConstructor = (\n    reference?: HTMLElement | Partial<NanoPopOptions>,\n    popper?: HTMLElement,\n    options?: Partial<NanoPopOptions>\n): NanoPop => {\n\n    // Resolve options\n    const baseOptions: Partial<NanoPopOptions> = typeof reference === 'object' && !(reference instanceof HTMLElement) ?\n        reference : {reference, popper, ...options};\n\n    return {\n\n        /**\n         * Repositions the current popper.\n         * @param options Optional options which get merged with the current ones.\n         */\n        update(options: Partial<NanoPopOptions> = baseOptions): PositionMatch | null {\n            const {reference, popper} = Object.assign(baseOptions, options);\n\n            if (!popper || !reference) {\n                throw new Error('Popper- or reference-element missing.');\n            }\n\n            return reposition(reference, popper, baseOptions);\n        }\n    };\n};\n", "import * as _ from './utils/utils';\nimport {parseToHSVA} from './utils/color';\nimport {HSVaColor} from './utils/hsvacolor';\nimport Moveable from './libs/moveable';\nimport Selectable from './libs/selectable';\nimport buildPickr from './template';\nimport {createPopper} from 'nanopop';\n\nexport default class Pickr {\n\n    // Expose pickr utils\n    static utils = _;\n\n    // Assign version and export\n    static version = VERSION;\n\n    // Default strings\n    static I18N_DEFAULTS = {\n\n        // Strings visible in the UI\n        'ui:dialog': 'color picker dialog',\n        'btn:toggle': 'toggle color picker dialog',\n        'btn:swatch': 'color swatch',\n        'btn:last-color': 'use previous color',\n        'btn:save': 'Save',\n        'btn:cancel': 'Cancel',\n        'btn:clear': 'Clear',\n\n        // Strings used for aria-labels\n        'aria:btn:save': 'save and close',\n        'aria:btn:cancel': 'cancel and close',\n        'aria:btn:clear': 'clear and close',\n        'aria:input': 'color input field',\n        'aria:palette': 'color selection area',\n        'aria:hue': 'hue selection slider',\n        'aria:opacity': 'selection slider'\n    };\n\n    // Default options\n    static DEFAULT_OPTIONS = {\n        appClass: null,\n        theme: 'classic',\n        useAsButton: false,\n        padding: 8,\n        disabled: false,\n        comparison: true,\n        closeOnScroll: false,\n        outputPrecision: 0,\n        lockOpacity: false,\n        autoReposition: true,\n        container: 'body',\n\n        components: {\n            interaction: {}\n        },\n\n        i18n: {},\n        swatches: null,\n        inline: false,\n        sliders: null,\n\n        default: '#42445a',\n        defaultRepresentation: null,\n        position: 'bottom-middle',\n        adjustableNumbers: true,\n        showAlways: false,\n\n        closeWithKey: 'Escape'\n    };\n\n    // Will be used to prevent specific actions during initilization\n    _initializingActive = true;\n\n    // If the current color value should be recalculated\n    _recalc = true;\n\n    // Positioning engine and DOM-Tree\n    _nanopop = null;\n    _root = null;\n\n    // Current and last color for comparison\n    _color = HSVaColor();\n    _lastColor = HSVaColor();\n    _swatchColors = [];\n\n    // Animation frame used for setup.\n    // Will be cancelled in case of destruction.\n    _setupAnimationFrame = null;\n\n    // Evenlistener name: [callbacks]\n    _eventListener = {\n        init: [],\n        save: [],\n        hide: [],\n        show: [],\n        clear: [],\n        change: [],\n        changestop: [],\n        cancel: [],\n        swatchselect: []\n    };\n\n    constructor(opt) {\n\n        // Assign default values\n        this.options = opt = Object.assign({...Pickr.DEFAULT_OPTIONS}, opt);\n\n        const {swatches, components, theme, sliders, lockOpacity, padding} = opt;\n\n        if (['nano', 'monolith'].includes(theme) && !sliders) {\n            opt.sliders = 'h';\n        }\n\n        // Check interaction section\n        if (!components.interaction) {\n            components.interaction = {};\n        }\n\n        // Overwrite palette if preview, opacity or hue are true\n        const {preview, opacity, hue, palette} = components;\n        components.opacity = (!lockOpacity && opacity);\n        components.palette = palette || preview || opacity || hue;\n\n        // Initialize picker\n        this._preBuild();\n        this._buildComponents();\n        this._bindEvents();\n        this._finalBuild();\n\n        // Append pre-defined swatch colors\n        if (swatches && swatches.length) {\n            swatches.forEach(color => this.addSwatch(color));\n        }\n\n        // Initialize positioning engine\n        const {button, app} = this._root;\n        this._nanopop = createPopper(button, app, {\n            margin: padding\n        });\n\n        // Initialize accessibility\n        button.setAttribute('role', 'button');\n        button.setAttribute('aria-label', this._t('btn:toggle'));\n\n        // Initilization is finish, pickr is visible and ready for usage\n        const that = this;\n        this._setupAnimationFrame = requestAnimationFrame((function cb() {\n\n            // TODO: Performance issue due to high call-rate?\n            if (!app.offsetWidth) {\n                return requestAnimationFrame(cb);\n            }\n\n            // Apply default color\n            that.setColor(opt.default);\n            that._rePositioningPicker();\n\n            // Initialize color representation\n            if (opt.defaultRepresentation) {\n                that._representation = opt.defaultRepresentation;\n                that.setColorRepresentation(that._representation);\n            }\n\n            // Show pickr if locked\n            if (opt.showAlways) {\n                that.show();\n            }\n\n            // Initialization is done - pickr is usable, fire init event\n            that._initializingActive = false;\n            that._emit('init');\n        }));\n    }\n\n    // Create instance via method\n    static create = options => new Pickr(options);\n\n    // Does only the absolutly basic thing to initialize the components\n    _preBuild() {\n        const {options} = this;\n\n        // Resolve elements\n        for (const type of ['el', 'container']) {\n            options[type] = _.resolveElement(options[type]);\n        }\n\n        // Create element and append it to body to\n        // Prevent initialization errors\n        this._root = buildPickr(this);\n\n        // Check if a custom button is used\n        if (options.useAsButton) {\n            this._root.button = options.el; // Replace button with customized button\n        }\n\n        options.container.appendChild(this._root.root);\n    }\n\n    _finalBuild() {\n        const opt = this.options;\n        const root = this._root;\n\n        // Remove from body\n        opt.container.removeChild(root.root);\n\n        if (opt.inline) {\n            const parent = opt.el.parentElement;\n\n            if (opt.el.nextSibling) {\n                parent.insertBefore(root.app, opt.el.nextSibling);\n            } else {\n                parent.appendChild(root.app);\n            }\n        } else {\n            opt.container.appendChild(root.app);\n        }\n\n        // Don't replace the the element if a custom button is used\n        if (!opt.useAsButton) {\n\n            // Replace element with actual color-picker\n            opt.el.parentNode.replaceChild(root.root, opt.el);\n        } else if (opt.inline) {\n            opt.el.remove();\n        }\n\n        // Check if it should be immediatly disabled\n        if (opt.disabled) {\n            this.disable();\n        }\n\n        // Check if color comparison is disabled, if yes - remove transitions so everything keeps smoothly\n        if (!opt.comparison) {\n            root.button.style.transition = 'none';\n\n            if (!opt.useAsButton) {\n                root.preview.lastColor.style.transition = 'none';\n            }\n        }\n\n        this.hide();\n    }\n\n    _buildComponents() {\n\n        // Instance reference\n        const inst = this;\n        const cs = this.options.components;\n        const sliders = (inst.options.sliders || 'v').repeat(2);\n        const [so, sh] = sliders.match(/^[vh]+$/g) ? sliders : [];\n\n        // Re-assign if null\n        const getColor = () =>\n            this._color || (this._color = this._lastColor.clone());\n\n        const components = {\n\n            palette: Moveable({\n                element: inst._root.palette.picker,\n                wrapper: inst._root.palette.palette,\n\n                onstop: () => inst._emit('changestop', 'slider', inst),\n                onchange(x, y) {\n                    if (!cs.palette) {\n                        return;\n                    }\n\n                    const color = getColor();\n                    const {_root, options} = inst;\n                    const {lastColor, currentColor} = _root.preview;\n\n                    // Update the input field only if the user is currently not typing\n                    if (inst._recalc) {\n\n                        // Calculate saturation based on the position\n                        color.s = x * 100;\n\n                        // Calculate the value\n                        color.v = 100 - y * 100;\n\n                        // Prevent falling under zero\n                        color.v < 0 ? color.v = 0 : 0;\n                        inst._updateOutput('slider');\n                    }\n\n                    // Set picker and gradient color\n                    const cssRGBaString = color.toRGBA().toString(0);\n                    this.element.style.background = cssRGBaString;\n                    this.wrapper.style.background = `\n                        linear-gradient(to top, rgba(0, 0, 0, ${color.a}), transparent),\n                        linear-gradient(to left, hsla(${color.h}, 100%, 50%, ${color.a}), rgba(255, 255, 255, ${color.a}))\n                    `;\n\n                    // Check if color is locked\n                    if (!options.comparison) {\n                        _root.button.style.setProperty('--pcr-color', cssRGBaString);\n\n                        // If the user changes the color, remove the cleared icon\n                        _root.button.classList.remove('clear');\n                    } else if (!options.useAsButton && !inst._lastColor) {\n\n                        // Apply color to both the last and current color since the current state is cleared\n                        lastColor.style.setProperty('--pcr-color', cssRGBaString);\n                    }\n\n                    // Check if there's a swatch which color matches the current one\n                    const hexa = color.toHEXA().toString();\n                    for (const {el, color} of inst._swatchColors) {\n                        el.classList[hexa === color.toHEXA().toString() ? 'add' : 'remove']('pcr-active');\n                    }\n\n                    // Change current color\n                    currentColor.style.setProperty('--pcr-color', cssRGBaString);\n                }\n            }),\n\n            hue: Moveable({\n                lock: sh === 'v' ? 'h' : 'v',\n                element: inst._root.hue.picker,\n                wrapper: inst._root.hue.slider,\n\n                onstop: () => inst._emit('changestop', 'slider', inst),\n                onchange(v) {\n                    if (!cs.hue || !cs.palette) {\n                        return;\n                    }\n\n                    const color = getColor();\n\n                    // Calculate hue\n                    if (inst._recalc) {\n                        color.h = v * 360;\n                    }\n\n                    // Update color\n                    this.element.style.backgroundColor = `hsl(${color.h}, 100%, 50%)`;\n                    components.palette.trigger();\n                }\n            }),\n\n            opacity: Moveable({\n                lock: so === 'v' ? 'h' : 'v',\n                element: inst._root.opacity.picker,\n                wrapper: inst._root.opacity.slider,\n\n                onstop: () => inst._emit('changestop', 'slider', inst),\n                onchange(v) {\n                    if (!cs.opacity || !cs.palette) {\n                        return;\n                    }\n\n                    const color = getColor();\n\n                    // Calculate opacity\n                    if (inst._recalc) {\n                        color.a = Math.round(v * 1e2) / 100;\n                    }\n\n                    // Update color\n                    this.element.style.background = `rgba(0, 0, 0, ${color.a})`;\n                    components.palette.trigger();\n                }\n            }),\n\n            selectable: Selectable({\n                elements: inst._root.interaction.options,\n                className: 'active',\n\n                onchange(e) {\n                    inst._representation = e.target.getAttribute('data-type').toUpperCase();\n                    inst._recalc && inst._updateOutput('swatch');\n                }\n            })\n        };\n\n        this._components = components;\n    }\n\n    _bindEvents() {\n        const {_root, options} = this;\n\n        const eventBindings = [\n\n            // Clear color\n            _.on(_root.interaction.clear, 'click', () => this._clearColor()),\n\n            // Select last color on click\n            _.on([\n                _root.interaction.cancel,\n                _root.preview.lastColor\n            ], 'click', () => {\n                this.setHSVA(...(this._lastColor || this._color).toHSVA(), true);\n                this._emit('cancel');\n            }),\n\n            // Save color\n            _.on(_root.interaction.save, 'click', () => {\n                !this.applyColor() && !options.showAlways && this.hide();\n            }),\n\n            // User input\n            _.on(_root.interaction.result, ['keyup', 'input'], e => {\n\n                // Fire listener if initialization is finish and changed color was valid\n                if (this.setColor(e.target.value, true) && !this._initializingActive) {\n                    this._emit('change', this._color, 'input', this);\n                    this._emit('changestop', 'input', this);\n                }\n\n                e.stopImmediatePropagation();\n            }),\n\n            // Detect user input and disable auto-recalculation\n            _.on(_root.interaction.result, ['focus', 'blur'], e => {\n                this._recalc = e.type === 'blur';\n                this._recalc && this._updateOutput(null);\n            }),\n\n            // Cancel input detection on color change\n            _.on([\n                _root.palette.palette,\n                _root.palette.picker,\n                _root.hue.slider,\n                _root.hue.picker,\n                _root.opacity.slider,\n                _root.opacity.picker\n            ], ['mousedown', 'touchstart'], () => this._recalc = true, {passive: true})\n        ];\n\n        // Provide hiding / showing abilities only if showAlways is false\n        if (!options.showAlways) {\n            const ck = options.closeWithKey;\n\n            eventBindings.push(\n\n                // Save and hide / show picker\n                _.on(_root.button, 'click', () => this.isOpen() ? this.hide() : this.show()),\n\n                // Close with escape key\n                _.on(document, 'keyup', e => this.isOpen() && (e.key === ck || e.code === ck) && this.hide()),\n\n                // Cancel selecting if the user taps behind the color picker\n                _.on(document, ['touchstart', 'mousedown'], e => {\n                    if (this.isOpen() && !_.eventPath(e).some(el => el === _root.app || el === _root.button)) {\n                        this.hide();\n                    }\n                }, {capture: true})\n            );\n        }\n\n        // Make input adjustable if enabled\n        if (options.adjustableNumbers) {\n            const ranges = {\n                rgba: [255, 255, 255, 1],\n                hsva: [360, 100, 100, 1],\n                hsla: [360, 100, 100, 1],\n                cmyk: [100, 100, 100, 100]\n            };\n\n            _.adjustableInputNumbers(_root.interaction.result, (o, step, index) => {\n                const range = ranges[this.getColorRepresentation().toLowerCase()];\n\n                if (range) {\n                    const max = range[index];\n\n                    // Calculate next reasonable number\n                    const nv = o + (max >= 100 ? step * 1000 : step);\n\n                    // Apply range of zero up to max, fix floating-point issues\n                    return nv <= 0 ? 0 : Number((nv < max ? nv : max).toPrecision(3));\n                }\n\n                return o;\n            });\n        }\n\n        if (options.autoReposition && !options.inline) {\n            let timeout = null;\n            const that = this;\n\n            // Re-calc position on window resize, scroll and wheel\n            eventBindings.push(\n                _.on(window, ['scroll', 'resize'], () => {\n                    if (that.isOpen()) {\n\n                        if (options.closeOnScroll) {\n                            that.hide();\n                        }\n\n                        if (timeout === null) {\n                            timeout = setTimeout(() => timeout = null, 100);\n\n                            // Update position on every frame\n                            requestAnimationFrame(function rs() {\n                                that._rePositioningPicker();\n                                (timeout !== null) && requestAnimationFrame(rs);\n                            });\n                        } else {\n                            clearTimeout(timeout);\n                            timeout = setTimeout(() => timeout = null, 100);\n                        }\n                    }\n                }, {capture: true})\n            );\n        }\n\n        // Save bindings\n        this._eventBindings = eventBindings;\n    }\n\n    _rePositioningPicker() {\n        const {options} = this;\n\n        // No repositioning needed if inline\n        if (!options.inline) {\n            const success = this._nanopop.update({\n                container: document.body.getBoundingClientRect(),\n                position: options.position\n            });\n\n            if (!success) {\n                const el = this._root.app;\n                const eb = el.getBoundingClientRect();\n                el.style.top = `${(window.innerHeight - eb.height) / 2}px`;\n                el.style.left = `${(window.innerWidth - eb.width) / 2}px`;\n            }\n        }\n    }\n\n    _updateOutput(eventSource) {\n        const {_root, _color, options} = this;\n\n        // Check if component is present\n        if (_root.interaction.type()) {\n\n            // Construct function name and call if present\n            const method = `to${_root.interaction.type().getAttribute('data-type')}`;\n            _root.interaction.result.value = typeof _color[method] === 'function' ?\n                _color[method]().toString(options.outputPrecision) : '';\n        }\n\n        // Fire listener if initialization is finish\n        if (!this._initializingActive && this._recalc) {\n            this._emit('change', _color, eventSource, this);\n        }\n    }\n\n    _clearColor(silent = false) {\n        const {_root, options} = this;\n\n        // Change only the button color if it isn't customized\n        if (!options.useAsButton) {\n            _root.button.style.setProperty('--pcr-color', 'rgba(0, 0, 0, 0.15)');\n        }\n\n        _root.button.classList.add('clear');\n\n        if (!options.showAlways) {\n            this.hide();\n        }\n\n        this._lastColor = null;\n        if (!this._initializingActive && !silent) {\n\n            // Fire listener\n            this._emit('save', null);\n            this._emit('clear');\n        }\n    }\n\n    _parseLocalColor(str) {\n        const {values, type, a} = parseToHSVA(str);\n        const {lockOpacity} = this.options;\n        const alphaMakesAChange = a !== undefined && a !== 1;\n\n        // If no opacity is applied, add undefined at the very end which gets\n        // Set to 1 in setHSVA\n        if (values && values.length === 3) {\n            values[3] = undefined;\n        }\n\n        return {\n            values: (!values || (lockOpacity && alphaMakesAChange)) ? null : values,\n            type\n        };\n    }\n\n    _t(key) {\n        return this.options.i18n[key] || Pickr.I18N_DEFAULTS[key];\n    }\n\n    _emit(event, ...args) {\n        this._eventListener[event].forEach(cb => cb(...args, this));\n    }\n\n    on(event, cb) {\n        this._eventListener[event].push(cb);\n        return this;\n    }\n\n    off(event, cb) {\n        const callBacks = (this._eventListener[event] || []);\n        const index = callBacks.indexOf(cb);\n\n        if (~index) {\n            callBacks.splice(index, 1);\n        }\n\n        return this;\n    }\n\n    /**\n     * Appends a color to the swatch palette\n     * @param color\n     * @returns {boolean}\n     */\n    addSwatch(color) {\n        const {values} = this._parseLocalColor(color);\n\n        if (values) {\n            const {_swatchColors, _root} = this;\n            const color = HSVaColor(...values);\n\n            // Create new swatch HTMLElement\n            const el = _.createElementFromString(\n                `<button type=\"button\" style=\"--pcr-color: ${color.toRGBA().toString(0)}\" aria-label=\"${this._t('btn:swatch')}\"/>`\n            );\n\n            // Append element and save swatch data\n            _root.swatches.appendChild(el);\n            _swatchColors.push({el, color});\n\n            // Bind event\n            this._eventBindings.push(\n                _.on(el, 'click', () => {\n                    this.setHSVA(...color.toHSVA(), true);\n                    this._emit('swatchselect', color);\n                    this._emit('change', color, 'swatch', this);\n                })\n            );\n\n            return true;\n        }\n\n        return false;\n    }\n\n    /**\n     * Removes a swatch color by it's index\n     * @param index\n     * @returns {boolean}\n     */\n    removeSwatch(index) {\n        const swatchColor = this._swatchColors[index];\n\n        // Check swatch data\n        if (swatchColor) {\n            const {el} = swatchColor;\n\n            // Remove HTML child and swatch data\n            this._root.swatches.removeChild(el);\n            this._swatchColors.splice(index, 1);\n            return true;\n        }\n\n        return false;\n    }\n\n    applyColor(silent = false) {\n        const {preview, button} = this._root;\n\n        // Change preview and current color\n        const cssRGBaString = this._color.toRGBA().toString(0);\n        preview.lastColor.style.setProperty('--pcr-color', cssRGBaString);\n\n        // Change only the button color if it isn't customized\n        if (!this.options.useAsButton) {\n            button.style.setProperty('--pcr-color', cssRGBaString);\n        }\n\n        // User changed the color so remove the clear clas\n        button.classList.remove('clear');\n\n        // Save last color\n        this._lastColor = this._color.clone();\n\n        // Fire listener\n        if (!this._initializingActive && !silent) {\n            this._emit('save', this._color);\n        }\n\n        return this;\n    }\n\n    /**\n     * Destroy's all functionalitys\n     */\n    destroy() {\n\n        // Cancel setup-frame if set\n        cancelAnimationFrame(this._setupAnimationFrame);\n\n        // Unbind events\n        this._eventBindings.forEach(args => _.off(...args));\n\n        // Destroy sub-components\n        Object.keys(this._components)\n            .forEach(key => this._components[key].destroy());\n    }\n\n    /**\n     * Destroy's all functionalitys and removes\n     * the pickr element.\n     */\n    destroyAndRemove() {\n        this.destroy();\n        const {root, app} = this._root;\n\n        // Remove element\n        if (root.parentElement) {\n            root.parentElement.removeChild(root);\n        }\n\n        // Remove .pcr-app\n        app.parentElement.removeChild(app);\n\n        // There are references to various DOM elements stored in the pickr instance\n        // This cleans all of them to avoid detached DOMs\n        Object.keys(this)\n            .forEach(key => this[key] = null);\n    }\n\n    /**\n     * Hides the color-picker ui.\n     */\n    hide() {\n        if (this.isOpen()) {\n            this._root.app.classList.remove('visible');\n            this._emit('hide');\n            return true;\n        }\n\n        return false;\n    }\n\n    /**\n     * Shows the color-picker ui.\n     */\n    show() {\n        if (!this.options.disabled && !this.isOpen()) {\n            this._root.app.classList.add('visible');\n            this._rePositioningPicker();\n            this._emit('show', this._color);\n            return this;\n        }\n\n        return false;\n    }\n\n    /**\n     * @return {boolean} If the color picker is currently open\n     */\n    isOpen() {\n        return this._root.app.classList.contains('visible');\n    }\n\n    /**\n     * Set a specific color.\n     * @param h Hue\n     * @param s Saturation\n     * @param v Value\n     * @param a Alpha channel (0 - 1)\n     * @param silent If the button should not change the color\n     * @return boolean if the color has been accepted\n     */\n    setHSVA(h = 360, s = 0, v = 0, a = 1, silent = false) {\n\n        // Deactivate color calculation\n        const recalc = this._recalc; // Save state\n        this._recalc = false;\n\n        // Validate input\n        if (h < 0 || h > 360 || s < 0 || s > 100 || v < 0 || v > 100 || a < 0 || a > 1) {\n            return false;\n        }\n\n        // Override current color and re-active color calculation\n        this._color = HSVaColor(h, s, v, a);\n\n        // Update slider and palette\n        const {hue, opacity, palette} = this._components;\n        hue.update((h / 360));\n        opacity.update(a);\n        palette.update(s / 100, 1 - (v / 100));\n\n        // Check if call is silent\n        if (!silent) {\n            this.applyColor();\n        }\n\n        // Update output if recalculation is enabled\n        if (recalc) {\n            this._updateOutput();\n        }\n\n        // Restore old state\n        this._recalc = recalc;\n        return true;\n    }\n\n    /**\n     * Tries to parse a string which represents a color.\n     * Examples: #fff\n     *           rgb 10 10 200\n     *           hsva 10 20 5 0.5\n     * @param string\n     * @param silent\n     */\n    setColor(string, silent = false) {\n\n        // Check if null\n        if (string === null) {\n            this._clearColor(silent);\n            return true;\n        }\n\n        const {values, type} = this._parseLocalColor(string);\n\n        // Check if color is ok\n        if (values) {\n\n            // Change selected color format\n            const utype = type.toUpperCase();\n            const {options} = this._root.interaction;\n            const target = options.find(el => el.getAttribute('data-type') === utype);\n\n            // Auto select only if not hidden\n            if (target && !target.hidden) {\n                for (const el of options) {\n                    el.classList[el === target ? 'add' : 'remove']('active');\n                }\n            }\n\n            // Update color (fires 'save' event if silent is 'false')\n            if (!this.setHSVA(...values, silent)) {\n                return false;\n            }\n\n            // Update representation (fires 'change' event)\n            return this.setColorRepresentation(utype);\n        }\n\n        return false;\n    }\n\n    /**\n     * Changes the color _representation.\n     * Allowed values are HEX, RGB, HSV, HSL and CMYK\n     * @param type\n     * @returns {boolean} if the selected type was valid.\n     */\n    setColorRepresentation(type) {\n\n        // Force uppercase to allow a case-sensitiv comparison\n        type = type.toUpperCase();\n\n        // Find button with given type and trigger click event\n        return !!this._root.interaction.options\n            .find(v => v.getAttribute('data-type').startsWith(type) && !v.click());\n    }\n\n    /**\n     * Returns the current color representaion. See setColorRepresentation\n     * @returns {*}\n     */\n    getColorRepresentation() {\n        return this._representation;\n    }\n\n    /**\n     * @returns HSVaColor Current HSVaColor object.\n     */\n    getColor() {\n        return this._color;\n    }\n\n    /**\n     * Returns the currently selected color.\n     * @returns {{a, toHSVA, toHEXA, s, v, h, clone, toCMYK, toHSLA, toRGBA}}\n     */\n    getSelectedColor() {\n        return this._lastColor;\n    }\n\n    /**\n     * @returns The root HTMLElement with all his components.\n     */\n    getRoot() {\n        return this._root;\n    }\n\n    /**\n     * Disable pickr\n     */\n    disable() {\n        this.hide();\n        this.options.disabled = true;\n        this._root.button.classList.add('disabled');\n        return this;\n    }\n\n    /**\n     * Enable pickr\n     */\n    enable() {\n        this.options.disabled = false;\n        this._root.button.classList.remove('disabled');\n        return this;\n    }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport Pickr from '@simonwep/pickr';\nimport Choices from 'choices.js';\nimport autosize  from \"autosize\";\nimport GairdaoController from \"../gairdao_controller\";\nexport default class extends Controller {\n    static targets = ['pickrContainer', 'iconPreview']\n    connect() {\n        this.initUI();\n    }\n    closeModal() {\n        window.dispatchEvent(new CustomEvent('modal:close'));\n    }\n    initUI() {\n        autosize(this.textarea);\n        // color picker\n        this.initColorPicker();\n        this.initIconChoices();\n        this.initCoverImage();\n        this.initTagsPanel();\n    }\n\n    get textarea() {\n        return this.element.querySelector('textarea');\n    }\n\n    initTagsPanel(){\n        const tagsDom =  this.element.querySelector('input[name=\"communities_collection[tag_list]\"]');\n        if (tagsDom === null) { return; }\n        this.tagify = GairdaoController.initTagsPanel(tagsDom);\n    }\n\n    initCoverImage(){\n        const targetDom = this.element.querySelector('div.image-input');\n        if (targetDom === null) { return; }\n        const coverImageImageInput = new KTImageInput(targetDom);\n        const controller = this;\n        coverImageImageInput.on(\"kt.imageinput.removed\", function() {\n            controller.element.querySelector('input[name=\"communities_collection[cover_image]\"]').value = '';\n        });\n    }\n\n    initColorPicker() {\n        if (!this.hasPickrContainerTarget || !this.hasIconPreviewTarget) { return; }\n        this.pickr = new Pickr({\n            el: this.pickrContainerTarget,\n            closeWithKey: 'Escape',\n            // lockOpacity: true,\n            theme: 'nano', // or 'monolith', or 'nano'\n            default: this.element.querySelector('input[name=\"communities_collection[color]\"]').value,\n            swatches: [\n                'rgba(244, 67, 54, 1)',\n                'rgba(233, 30, 99, 0.95)',\n                'rgba(156, 39, 176, 0.9)',\n                'rgba(103, 58, 183, 0.85)',\n                'rgba(63, 81, 181, 0.8)',\n                'rgba(33, 150, 243, 0.75)',\n                'rgba(3, 169, 244, 0.7)'\n            ],\n            defaultRepresentation: 'HEXA',\n            components: {\n                preview: true,\n                opacity: true,\n                hue: true,\n\n                interaction: {\n                    hex: false,\n                    rgba: false,\n                    hsva: false,\n                    input: true,\n                    clear: true,\n                    save: true\n                }\n            }\n        });\n\n        const controller = this;\n\n        this.pickr.on('save', (color, instance) => {\n            controller.element.querySelector('input[name=\"communities_collection[color]\"]').value = color.toHEXA().toString();\n            controller.iconPreviewTarget.style.color = color.toHEXA().toString();\n            controller.pickr.hide();\n        });\n    }\n\n    initIconChoices(){\n        const el = this.element.querySelector('select[name=\"communities_collection[icon]\"]');\n        if (el === null) { return; }\n        this.iconChoices = new Choices(\n            el,\n            {\n                allowHTML: true,\n                classNames: {\n                    containerOuter: 'color-choices-in-input-group',\n                    containerInner: 'color-choices-in-input-group-inner',\n                },\n                callbackOnCreateTemplates: function(strToEl) {\n                    const itemSelectText = this.config.itemSelectText;\n                    return {\n                        choice: function({ classNames }, data) {\n                            let icon = '';\n                            if (data.value !== '') {\n                                icon = '<i class=\"'+data.value+' fs-1\"></i>'\n                            }\n                            return strToEl(\n                                '\\\n                            <div\\\n                              class=\"d-flex align-items-center ' +\n                                String(classNames.item) +\n                                ' ' +\n                                String(classNames.itemChoice) +\n                                ' ' +\n                                String(\n                                    data.disabled\n                                        ? classNames.itemDisabled\n                                        : classNames.itemSelectable\n                                ) +\n                                '\"\\\n                            data-select-text=\"' +\n                                String(itemSelectText) +\n                                '\"\\\n                            data-choice \\\n                            ' +\n                                String(\n                                    data.disabled\n                                        ? 'data-choice-disabled aria-disabled=\"true\"'\n                                        : 'data-choice-selectable'\n                                ) +\n                                '\\\n                            data-id=\"' +\n                                String(data.id) +\n                                '\"\\\n                            data-value=\"' +\n                                String(data.value) +\n                                '\"\\\n                            ' +\n                                String(\n                                    data.groupId > 0 ? 'role=\"treeitem\"' : 'role=\"option\"'\n                                ) +\n                                '\\\n                            >\\\n                            <span style=\"margin-right:10px;\">'+icon+'</span> ' +\n                                String(data.label) +\n                                '\\\n                          </div>\\\n                        '\n                            );\n                        },\n                    };\n                },\n            }\n        );\n    }\n\n    changeIcon(e) {\n        let icon = e.target.value || this.iconPreviewTarget.dataset.defaultIcon\n        let size = 'fs-2x'\n        const classNames = `${icon} ${size}`\n        console.log(\"changeIcon icon: \", icon)\n        this.iconPreviewTarget.className = classNames;\n\n    }\n\n    changeColorOfChoiceListItem(color) {\n        let elementItems = this.element.querySelectorAll('.choices__list .choices__item i.ki-outline');\n        elementItems.forEach(function(element) {\n            element.style.color = color;\n        });\n    }\n}\n\n\n", "import { Controller } from \"@hotwired/stimulus\"\nimport GairdaoController from \"../gairdao_controller\";\nimport tippy from \"tippy.js\";\n// \u56E0\u4E3A\u8FD9\u4E2A\u8868\u5355\u662F turbo stream update \u7684 \uFF0C\u4E0D\u4F1A\u89E6\u53D1 app connect\uFF0C\u6240\u4EE5\u9700\u8981\u5728\u8FD9\u91CC\u521D\u59CB\u5316\nexport default class extends Controller {\n    static outlets = [\"editor\"]\n\n    editorCommand(event) {\n        event.preventDefault();\n        if (this.hasEditorOutlet) {\n            const cmd = event.currentTarget.dataset.cmd;\n            if (cmd) {\n                event.currentTarget.classList.toggle('active');\n                this.editorOutlet.editor[cmd]();\n            }\n        }\n    }\n\n    toolbarExternalAction(event) {\n        event.preventDefault();\n        if (this.hasEditorOutlet) {\n            this.editorOutlet.toolbarExternalAction(event);\n        }\n    }\n\n    connect() {\n        this.initUI();\n    }\n\n    disconnect() {\n        this.clearUI();\n    }\n\n    initUI() {\n\n        GairdaoController.initTooltips(this.element);\n        this.initCoverImage();\n    }\n\n    clearUI() {\n\n    }\n\n    emojiTrigger(event){\n        const theme = KTThemeMode.getMode();\n        const controller = this;\n        const emojiPicker = GairdaoController.initEmojiPicker(theme,function (emoji, e){\n            controller.updateEmojiContentAndView(emoji);\n        });\n        this.emojiTippy = tippy(event.currentTarget, {\n            appendTo: document.body,\n            content: emojiPicker,\n            trigger: 'manual',\n            placement: 'bottom-start',\n            showOnCreate: true,\n            duration: 0,\n            delay: 0,\n            interactive: true,\n            arrow: false,\n            onHidden(instance) {\n                instance.destroy();\n            }\n        });\n    }\n\n    updateEmojiContentAndView(emoji){\n        const previewDom = this.element.querySelector('i.emoji-preview');\n        const formDom = this.element.querySelector('input[name=\"document[emoji]\"]');\n        previewDom.innerHTML = emoji.native;\n        formDom.value = emoji.native;\n    }\n\n    initCoverImage(){\n        const targetDom = this.element.querySelector('div.image-input');\n        if (targetDom === null) { return; }\n        const coverImageImageInput = new KTImageInput(targetDom);\n        const controller = this;\n        coverImageImageInput.on(\"kt.imageinput.removed\", function() {\n            controller.element.querySelector('input[name=\"communities_collection[cover_image]\"]').value = '';\n        });\n    }\n}\n\n\n", "import { Controller } from \"@hotwired/stimulus\";\nimport { useHover } from 'stimulus-use';\nexport default class extends Controller {\n    static targets = ['descriptionView']\n\n    connect() {\n        if( this.descriptionView){\n            useHover(this, { element: this.descriptionView });\n        }\n    }\n\n    mouseEnter() {\n       console.log('mouseEnter');\n        this.descriptionView.style.cursor = 'pointer';\n        this.descriptionView.style.textDecoration = 'underline';\n        this.descriptionView.style.backgroundColor = '#f8f9fa';\n        this.descriptionView.title = 'Click to edit';\n    }\n\n    mouseLeave() {\n        console.log('mouseLeave');\n        this.descriptionView.style.cursor = 'default';\n        this.descriptionView.style.textDecoration = 'none';\n        this.descriptionView.style.backgroundColor = 'transparent';\n        this.descriptionView.title = '';\n    }\n\n    get descriptionView() {\n        if (!this.hasDescriptionViewTarget) return null\n        return this.descriptionViewTarget\n    }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport GairdaoController from \"../gairdao_controller\";\nimport tippy from \"tippy.js\";\n\nexport default class extends Controller {\n    static outlets = [\"editor\"]\n    connect() {\n        this.initUI();\n    }\n\n    disconnect() {\n        this.clearUI();\n    }\n\n    initUI() {\n        GairdaoController.initTooltips(this.element);\n    }\n\n    clearUI() {\n\n    }\n\n    editorCommand(event) {\n        event.preventDefault();\n        if (this.hasEditorOutlet) {\n            const cmd = event.currentTarget.dataset.cmd;\n            if (cmd) {\n                event.currentTarget.classList.toggle('active');\n                this.editorOutlet.editor[cmd]();\n            }\n        }\n    }\n\n    toolbarExternalAction(event) {\n        event.preventDefault();\n        if (this.hasEditorOutlet) {\n            this.editorOutlet.toolbarExternalAction(event);\n        }\n    }\n\n\n}\n", "import { Controller } from \"@hotwired/stimulus\";\nexport default class extends Controller {\n    static targets = [\"tabs\"];\n    connect() {\n        this.updateTab()\n        window.addEventListener(\"hashchange\", this.updateTab.bind(this), false)\n    }\n\n    disconnect() {\n        window.removeEventListener(\"hashchange\", this.updateTab.bind(this), false)\n    }\n\n    updateTab() {\n        let hash = window.location.hash\n        if (hash) {\n            let tab = this.tabsTarget.querySelector(`.nav-link[href=\"${hash}\"]`)\n            if (tab) {\n                new bootstrap.Tab(tab).show()\n            }\n        }\n    }\n\n    updateHash = (e) => {\n        window.location.hash = e.currentTarget.dataset.hash;\n    }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n    connect() {\n    }\n\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n    static values = { url: String }\n    connect() {\n    }\n\n    invitation = (e) => {\n        e.preventDefault();\n        console.log(\"invitation\");\n        // baseUrl\n        console.log(this.baseUrl);\n\n    }\n\n    get baseUrl() {\n        return this.urlValue;\n    }\n\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n    connect() {\n        this.ktmenu = new KTMenu(this.element);\n        const conferenceCode = document.querySelector('meta[name=\"conference-code\"]').getAttribute('content');\n        this.observer = new MutationObserver((mutationsList, observer) => {\n            for(let mutation of mutationsList) {\n                if (mutation.type === 'childList') {\n                    const sidebarDom = mutation.target.querySelector(`#sidebar_conference_${conferenceCode}`);\n                    if (sidebarDom) {\n                        this.ktmenu.toggle(sidebarDom);\n                        const menuLink = sidebarDom.querySelector('.menu-title a');\n                        this.activeLink = menuLink;\n                        this.addActiveClass(menuLink);\n                        this.observer.disconnect();\n                    }\n                }\n            }\n        });\n        this.observer.observe(this.element, { childList: true, subtree: true });\n    }\n\n    toggleAccordion(event) {\n        event.preventDefault();\n        let menuItem = event.currentTarget.closest('.menu-item');\n        this.ktmenu.toggle(menuItem);\n    }\n\n    activeCurrentLink(event) {\n        this.setActiveLink(event.currentTarget)\n    }\n\n    setActiveLink(element) {\n        if (this.activeLink) {\n            this.removeActiveClass(this.activeLink)\n        }\n\n        this.activeLink = element\n        this.addActiveClass(this.activeLink)\n    }\n\n    addActiveClass(element) {\n        element.classList.add('text-primary')\n        element.classList.remove('text-gray-700')\n    }\n\n    removeActiveClass(element) {\n        element.classList.remove('text-primary')\n        element.classList.add('text-gray-700')\n    }\n\n    lazyLoadingHandler = (event) => {\n    }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport Choices from 'choices.js';\nimport autosize  from \"autosize\";\nimport GairdaoController from \"../../gairdao_controller\";\nexport default class extends Controller {\n    connect() {\n        this.initUI();\n    }\n\n    disconnect() {\n        if (this.choices) {\n            this.choices.destroy();\n        }\n        if (this.tagify) {\n            this.tagify.destroy();\n        }\n    }\n\n    initUI() {\n        autosize(this.textarea);\n        const tagsDom =  this.element.querySelector('input[name=\"conferences_member[research_field_list]\"]');\n        this.initTagsPanel(tagsDom);\n        const countryDom =  this.element.querySelector('select[name=\"conferences_member[country]\"]');\n        this.initCountry(countryDom);\n        const avatarDom =  this.element.querySelector('div.image-input');\n        this.initAvatar(avatarDom);\n    }\n\n    initAvatar(targetDom){\n        const avatarImageInput= new KTImageInput(targetDom);\n        const controller = this;\n        avatarImageInput.on(\"kt.imageinput.removed\", function() {\n            controller.element.querySelector('input[name=\"conferences_member[avatar]\"]').value = '';\n        });\n    }\n\n    initCountry(targetDom){\n        this.choices = new Choices(targetDom,{\n            allowHTML: true,\n        });\n    }\n\n    initTagsPanel(targetDom) {\n        this.tagify = GairdaoController.initTagsPanel(targetDom);\n    }\n\n    get textarea() {\n        return this.element.querySelector('textarea');\n    }\n\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport { useDebounce } from 'stimulus-use'\nimport {get, patch} from '@rails/request.js'\nimport GairdaoController from '../../gairdao_controller'\nexport default class extends Controller {\n  static targets = [\"searchInput\", \"searchClear\", \"searchSpinner\"]\n  static values = { searchUrl: String, changeRoleUrl: String }\n\n  static debounces = [\n    'search',\n  ]\n  connect() {\n    useDebounce(this, { wait: 500 })\n  }\n\n  search = (event) => {\n    const url = new URL(this.searchUrl);\n    url.searchParams.append('search', this.searchValue);\n    this.searchSpinnerTarget.classList.remove('d-none');\n    this.searchClearTarget.classList.add('d-none');\n    get(url.toString()).then(response => {\n      if (response.ok) {\n        this.searchSpinnerTarget.classList.add('d-none');\n        if (this.searchValue === \"\") {\n          this.searchClearTarget.classList.add('d-none');\n        } else {\n          this.searchClearTarget.classList.remove('d-none');\n        }\n      } else {\n        console.log(\"error: \", response);\n      }\n    });\n  }\n\n  clearSearch = (event) => {\n    this.searchInputTarget.value = \"\";\n    this.search(event);\n  }\n\n  changeRole = (event) => {\n    const originalTarget = event.target;\n    const spinner = GairdaoController.spinnerDom();\n    originalTarget.replaceWith(spinner);\n    const url = new URL(this.changeRoleUrl);\n    const memberCode = originalTarget.dataset.memberCode;\n    const role = originalTarget.value;\n    patch(url.toString(), {\n      body: JSON.stringify({ conferences_member: { role: role }, member_code: memberCode }),\n      headers: {\n        'Content-Type': 'application/json'\n      }\n    }).then(response => {\n      if (!response.ok) {\n        spinner.replaceWith(originalTarget);\n      } else {\n        console.log(\"change role success\");\n      }\n    });\n\n  }\n\n  get searchValue() {\n    return this.searchInputTarget.value\n  }\n\n  get searchUrl() {\n    return this.searchUrlValue\n  }\n\n  get changeRoleUrl() {\n    return this.changeRoleUrlValue\n  }\n\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport { get } from \"@rails/request.js\"\nimport { Turbo } from \"@hotwired/turbo-rails\"\nexport default class extends Controller {\n    static targets = [ \"datepicker\" ]\n    connect() {\n        this.initUI();\n    }\n\n    initUI() {\n    }\n\n\n    datepickerHandler = (e) => {\n        e.preventDefault();\n        let date = e.target.value;\n        let url = new URL(e.target.dataset.url);\n        url.searchParams.set('date', date);\n\n        Turbo.navigator.delegate.adapter.showProgressBar();\n        const request = get(url.toString(), { responseKind: \"turbo-stream\" })\n        request.then((response) => {\n            Turbo.navigator.delegate.adapter.progressBar.hide();\n        });\n    }\n\n    get datepicker() {\n        return this.datepickerTarget;\n    }\n\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport Choices from 'choices.js';\nimport GairdaoController from \"../../gairdao_controller\";\nexport default class extends Controller {\n    static targets = [\"speakerSelect\", \"colorSelect\"]\n    connect() {\n        this.initUI();\n    }\n\n    initUI() {\n        this.initSpeakerChoices();\n        this.initTagsPanel();\n    }\n\n    initSpeakerChoices() {\n        const el = this.element.querySelector('select[id=\"topic_speakers\"]');\n        if (el === null) { return; }\n        this.speakerChoices = new Choices(el, {\n            searchEnabled: true,\n            removeItemButton: true,\n            allowHTML: true,\n            placeholderValue: 'Choose Speakers',\n            maxItemCount: 5,\n        });\n    }\n\n    initTagsPanel(){\n        const tagsDom =  this.element.querySelector('input[id=\"topic_tag_list\"]');\n        if (tagsDom === null) { return; }\n        this.tagify = GairdaoController.initTagsPanel(tagsDom);\n    }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n\n  static targets = [\"headerActionMenu\"]\n\n  connect() {\n    this.initUI();\n  }\n\n  disconnect() {\n    this.clearUI();\n  }\n\n  initUI() {\n    new window.KTMenu(this.headerActionMenuTarget);\n  }\n\n  clearUI() {\n  }\n\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport autosize  from \"autosize\";\nexport default class extends Controller {\n    connect() {\n        this.initUI();\n    }\n\n    initUI() {\n        autosize(this.textarea);\n        const avatarDom =  this.element.querySelector('div.image-input');\n        this.initAvatar(avatarDom);\n    }\n\n    initAvatar(targetDom){\n        const avatarImageInput= new KTImageInput(targetDom);\n        const controller = this;\n        avatarImageInput.on(\"kt.imageinput.removed\", function() {\n            controller.element.querySelector('input[name=\"profile[avatar]\"]').value = '';\n        });\n    }\n\n    get textarea() {\n        return this.element.querySelector('textarea');\n    }\n\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport autosize  from \"autosize\";\nimport GairdaoController from \"../../gairdao_controller\";\nexport default class extends Controller {\n    static outlets = [\"editor\"]\n    connect() {\n        console.log(\"conference form controller connected\");\n        this.initUI();\n    }\n\n    initUI() {\n        autosize(this.textarea);\n        this.initCoverImage();\n        this.initTagsPanel();\n\n        const meetingTypeElement = this.element.querySelector('#conference_preferences_online_meeting');\n        if (meetingTypeElement) {\n            const meetingType = meetingTypeElement.value;\n            this.initMeetingTypePlaceholder(meetingType);\n        }\n    }\n\n    get textarea() {\n        return this.element.querySelector('textarea');\n    }\n\n    initTagsPanel(){\n        const tagsDom =  this.element.querySelector('input[id=\"conference_tag_list\"]');\n        if (tagsDom === null) { return; }\n        this.tagify = GairdaoController.initTagsPanel(tagsDom);\n    }\n\n    initCoverImage(){\n        const targetDom = this.element.querySelector('div.image-input');\n        if (targetDom === null) { return; }\n        const coverImageImageInput = new KTImageInput(targetDom);\n        const controller = this;\n        coverImageImageInput.on(\"kt.imageinput.removed\", function() {\n            controller.element.querySelector('input[name=\"communities_collection[cover_image]\"]').value = '';\n        });\n    }\n\n    initMeetingTypePlaceholder(meetingType) {\n        const meetingUrl = this.element.querySelector(`input[id=\"conference_preferences_online_meeting_${meetingType}_url\"]`);\n        if (meetingUrl === null) { return; }\n        if (meetingType === 'zoom') {\n            meetingUrl.placeholder = 'https://zoom.us/j/1234567890';\n        } else if (meetingType === 'microsoft_teams') {\n            meetingUrl.placeholder = 'https://teams.microsoft.com/l/meetup-join/1234567890';\n        } else if (meetingType === 'google_meet') {\n            meetingUrl.placeholder = 'https://meet.google.com/abc-defg-hij';\n        } else if (meetingType === 'jitsi') {\n            meetingUrl.placeholder = 'https://meet.jit.si/room-name';\n        } else {\n            meetingUrl.placeholder = '';\n        }\n    }\n\n    changeMeetingType = (event) => {\n        const meetingType = event.target.dataset.meetingType;\n        this.initMeetingTypePlaceholder(meetingType);\n        const formTarget = event.target.dataset.formTarget;\n        const formTargetDom = this.element.querySelector(formTarget);\n        formTargetDom.value = meetingType;\n    }\n\n    editorCommand(event) {\n        event.preventDefault();\n        if (this.hasEditorOutlet) {\n            const cmd = event.currentTarget.dataset.cmd;\n            if (cmd) {\n                event.currentTarget.classList.toggle('active');\n                this.editorOutlet.editor[cmd]();\n            }\n        }\n    }\n\n}\n\n\n", "import { Controller } from \"@hotwired/stimulus\"\nimport { post} from \"@rails/request.js\"\nimport GairdaoController from \"../../gairdao_controller\";\n\nexport default class extends Controller {\n    static values = { toggleQuestionUrl: String }\n    connect() {\n    }\n\n    toggleQuestion = (event) => {\n        event.preventDefault();\n        if (!this.hasToggleQuestionUrlValue) return;\n        const questionId = event.target.id;\n        const spinner = GairdaoController.spinnerDom();\n        const originalTarget = event.target;\n        const originalChecked = originalTarget.checked;\n        originalTarget.replaceWith(spinner);\n        const formData = new FormData();\n        formData.append(\"registration[question]\", questionId);\n        setTimeout(() => {\n            const request = post(this.toggleQuestionUrlValue, { body: formData, responseKind: \"turbo-stream\" });\n            request.then((response) => {\n                spinner.replaceWith(originalTarget);\n                originalTarget.checked = originalChecked;\n            }).catch((error) => {\n                spinner.replaceWith(originalTarget);\n                originalTarget.checked = !originalChecked;\n            });\n        }, 300);\n    }\n\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nexport default class extends Controller {\n    connect() {\n        this.initUI();\n    }\n\n    initUI() {\n    }\n\n    activeCurrentTicketType = (event) => {\n        // \u67E5\u627E\u5F53\u524D\u94FE\u63A5\u7684\u7236\u5143\u7D20\u5E73\u884C\u5143\u7D20\u7684a \u6807\u7B7E\u90FD\u53BB\u6389active\n        event.target.parentElement.parentElement.querySelectorAll('a.active').forEach((item) => {\n            ['active', 'text-active-primary'].forEach(className => {\n                item.classList.remove(className);\n            });\n        });\n\n        let ticketType = event.currentTarget;\n        ['active', 'text-active-primary'].forEach(className => {\n            ticketType.classList.add(className);\n        });\n    }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport autosize  from \"autosize\";\nexport default class extends Controller {\n    connect() {\n        this.initUI();\n    }\n\n    initUI() {\n        autosize(this.textarea);\n        this.initCoverImage();\n    }\n\n    get textarea() {\n        return this.element.querySelector('textarea');\n    }\n\n    initCoverImage(){\n        const targetDom = this.element.querySelector('div.image-input');\n        if (targetDom === null) { return; }\n        const coverImageImageInput = new KTImageInput(targetDom);\n        const controller = this;\n        coverImageImageInput.on(\"kt.imageinput.removed\", function() {\n            controller.element.querySelector('input[name=\"channel[cover_image]\"]').value = '';\n        });\n    }\n\n}\n\n\n", "import { Controller } from \"@hotwired/stimulus\"\nimport GairdaoController from \"../../gairdao_controller\";\nimport { put } from \"@rails/request.js\"\n\nexport default class extends Controller {\n    static values = { url: String }\n    connect() {\n        this.initUI();\n    }\n\n    initUI() {\n        window.initBootstrapTooltip(this.element, '[data-bs-toggle=\"tooltip\"]');\n    }\n\n    toggleReleased = (event) => {\n        const confirmed = window.confirm(\"Are you sure you want to change the status?\");\n        if (!confirmed) {\n            event.preventDefault();\n            event.target.checked = !event.target.checked;\n            return;\n        }\n\n        const baseUrl = this.urlValue;\n        const channelCode = event.target.dataset.channelCode;\n        const spinner = GairdaoController.spinnerDom();\n        const originalTarget = event.target;\n        originalTarget.replaceWith(spinner);\n        const formData = new FormData();\n        formData.append(\"channel[code]\", channelCode);\n        const status = event.target.checked ? \"active\" : \"inactive\";\n        formData.append(\"channel[status]\", status);\n        const url = `${baseUrl}/${channelCode}`;\n        setTimeout(async () => {\n            try {\n                await put(url, { body: formData, responseKind: \"turbo-stream\" });\n            } catch (error) {\n                console.error(\"Error updating record: \", error);\n            }\n        }, 300);\n    }\n}\n\n\n", "import MembersController from \"./members_controller\";\nimport {post} from '@rails/request.js'\n\nexport default class extends MembersController {\n    static targets = [\"submitBtn\"]\n    static values = { inviteUsersUrl: String }\n    connect() {\n        this.checkedUsers = [];\n        this.observer = new MutationObserver((mutationsList, observer) => {\n            for(let mutation of mutationsList) {\n                if (mutation.type === 'childList') {\n                    this.checkedUsers.forEach(user => {\n                        const checkedUserDom = mutation.target.querySelector(`#user_${user.code}`);\n                        if (checkedUserDom) {\n                            checkedUserDom.children[0].classList.add(\"bg-light\");\n                            const roleSelectDiv = mutation.target.querySelector(`#role_user_${user.code}`);\n                            roleSelectDiv.classList.remove(\"d-none\");\n                            roleSelectDiv.children[0].value = user.role;\n                            const userCheckbox = mutation.target.querySelector(`#role_checkbox_user_${user.code}`);\n                            userCheckbox.checked = true;\n                        }\n                    });\n                }\n            }\n        });\n        this.observer.observe(this.element, { childList: true, subtree: true });\n    }\n\n    disconnect() {\n        this.observer.disconnect();\n        this.checkedUsers = [];\n    }\n\n    checkbox = (event) => {\n        const value = event.target.checked;\n        const userCode = event.target.dataset.userCode;\n        const roleSelectDiv = this.element.querySelector(`#role_user_${userCode}`);\n        const role = roleSelectDiv.children[0].value;\n        this.element.querySelector(`#user_${userCode}`).children[0].classList.toggle(\"bg-light\");\n        if (value) {\n            this.checkedUsers.push({ code: userCode, role: role });\n            roleSelectDiv.classList.remove(\"d-none\");\n            this.submitBtnTarget.classList.remove(\"d-none\");\n        } else {\n            this.checkedUsers = this.checkedUsers.filter(user => user.code !== userCode);\n            roleSelectDiv.classList.add(\"d-none\");\n            if (this.checkedUsers.length === 0) {\n                this.submitBtnTarget.classList.add(\"d-none\");\n            }\n        }\n    }\n\n    changeRole = (event) => {\n        const role = event.target.value;\n        const userCode = event.target.dataset.userCode;\n        this.checkedUsers = this.checkedUsers.map(user => {\n            if (user.code === userCode) {\n                user.role = role;\n            }\n            return user;\n        });\n    }\n\n    submitUsers = (event) => {\n        event.preventDefault();\n        if (this.checkedUsers.length === 0 || !this.hasInviteUsersUrlValue) {\n            return;\n        }\n        console.log(\"submit users\", this.checkedUsers);\n        const url = new URL(this.inviteUsersUrl);\n        post(url.toString(), {\n            body: JSON.stringify({ conferences_member: { users: this.checkedUsers } } ),\n            headers: {\n                'Content-Type': 'application/json'\n            }\n        }).then(response => {\n            if (response.ok) {\n                console.log(\"invite users success\");\n                this.checkedUsers = [];\n            } else {\n                console.log(\"invite users failed\");\n            }\n        });\n    }\n\n    get inviteUsersUrl() {\n        return this.inviteUsersUrlValue\n    }\n}", "import {get} from '@rails/request.js'\nimport { Controller } from \"@hotwired/stimulus\"\nimport {useDebounce} from \"stimulus-use\";\n\nexport default class extends Controller {\n    static values = { searchBaseUrl: String }\n    static targets = [\"searchInput\", \"searchSpinner\", \"searchClearKeywordButton\", \"searchSelectTime\", \"searchSelectStatus\"]\n\n    static debounces = [\n        'search',\n    ]\n\n    connect() {\n        useDebounce(this, { wait: 500 });\n        this.searchURL = new URL(this.searchBaseUrl);\n        this.searchParams = new URLSearchParams();\n    }\n\n    search = (event) => {\n        const keyword = event ? event.target.value : \"\";\n        if (keyword === \"\") {\n            this.searchParams.delete('search[keyword]');\n        } else {\n            this.searchParams.set('search[keyword]', event.target.value);\n        }\n        this.updateSearchURL();\n        this.requestSearch();\n    }\n\n    updateSearchURL = () => {\n        this.searchURL.search = this.searchParams.toString();\n    }\n\n    requestSearch = () => {\n        this.searchSpinnerTarget.classList.remove('d-none');\n        this.searchClearKeywordButtonTarget.classList.add('d-none');\n        get(this.searchURL.toString()).then(response => {\n            if (response.ok) {\n                this.searchSpinnerTarget.classList.add('d-none');\n                if (this.searchInputTarget.value !== \"\") {\n                    this.searchClearKeywordButtonTarget.classList.remove('d-none');\n                }\n            } else {\n                console.log(\"error: \", response);\n            }\n        });\n    }\n\n    changeTime = (event) => {\n        const originalTarget = event.target;\n        const filterParamName = originalTarget.value\n        this.searchParams.delete('search[today]');\n        this.searchParams.delete('search[last_month]');\n        this.searchParams.delete('search[this_month]');\n        this.searchParams.delete('search[by_days]');\n        switch (filterParamName) {\n            case \"all_time\":\n                break;\n            case \"today\":\n                this.searchParams.set('search[today]', 1);\n                break;\n            case \"last_month\":\n                this.searchParams.set('search[last_month]', 1);\n                break;\n            case \"this_month\":\n                this.searchParams.set('search[this_month]', 1);\n                break;\n            case \"last_90_days\":\n                this.searchParams.set('search[by_days]', 90);\n                break;\n        }\n        this.updateSearchURL();\n        this.requestSearch();\n    }\n\n    changeStatus = (event) => {\n        const originalTarget = event.target;\n        const filterParamName = originalTarget.value\n        this.searchParams.delete('search[status]');\n\n        if (filterParamName === \"all\") {\n            this.searchParams.delete('search[status]');\n        }\n        else {\n            this.searchParams.set('search[status]', filterParamName);\n        }\n        this.updateSearchURL();\n        this.requestSearch();\n    }\n\n    refresh = (event) => {\n        event.preventDefault();\n        this.searchParams.delete('search[keyword]');\n        this.searchParams.delete('search[today]');\n        this.searchParams.delete('search[last_month]');\n        this.searchParams.delete('search[this_month]');\n        this.searchParams.delete('search[by_days]');\n        this.searchInputTarget.value = \"\";\n        this.searchSelectTimeTarget.value = \"all_time\";\n        this.searchClearKeywordButtonTarget.classList.add('d-none');\n\n        if (this.hasSearchSelectStatusTarget) {\n            this.searchSelectStatusTarget.value = \"all\";\n            this.searchParams.delete('search[status]');\n        }\n        event.target.disabled = true;\n        this.search();\n        setTimeout(() => {\n            event.target.disabled = false;\n        }, 1000);\n    }\n\n    clearSearchKeyword = (event) => {\n        this.searchInputTarget.value = \"\";\n        this.searchInputTarget.focus();\n        this.searchClearKeywordButtonTarget.classList.add('d-none');\n        this.search();\n    }\n\n    get searchBaseUrl() {\n        return this.searchBaseUrlValue\n    }\n}", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  static targets = [ \"iframeContainer\", \"title\" ]\n  static values = { id: String }\n  connect() {\n    const url = `https://www.youtube.com/oembed?url=http%3A//youtube.com/watch%3Fv%3D${this.idValue}&format=json`;\n    this.iframeContainerTarget.src = `https://www.youtube.com/embed/${this.idValue}?feature=oembed`\n    fetch(url)\n        .then(response => {\n            if (!response.ok) {\n                throw new Error('Network response was not ok')\n            }\n            return response.json()\n        })\n        .then(data => {\n          this.titleTarget.href = `https://www.youtube.com/watch?v=${this.idValue}`\n          this.titleTarget.target = '_blank'\n          this.titleTarget.textContent = data.title\n        }).catch(error => {\n        this.titleTarget.href = `https://www.youtube.com/watch?v=${this.idValue}`\n        this.titleTarget.target = '_blank'\n        this.titleTarget.textContent = 'The owner has restricted this video. View it on YouTube.'\n    })\n  }\n\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport { ethers } from \"ethers\";\nimport { get, post, put, patch, destroy } from '@rails/request.js'\nimport GairdaoController from \"./gairdao_controller\";\nexport default class extends Controller {\n  static targets = [ \"signInButton\" ]\n  static values = { uri: String }\n\n  connect() {\n  }\n\n  chainChangedHandler = async (chainId) => {\n    const decimalChainId = parseInt(chainId, 16);\n    if (decimalChainId !== 10) {\n      GairdaoController.notification().error('Please change to the OP Mainnet in Metamask');\n    } else {\n      await this.signInRemote();\n    }\n  };\n\n  signInHandler = async (e) => {\n    e.preventDefault();\n    const provider = await GairdaoController.initMetamaskProvider();\n    if (provider === null) return;\n    window.ethereum.off('chainChanged', this.chainChangedHandler);\n    this.signer = await provider.getSigner();\n    const network = await provider.getNetwork();\n    if (network.chainId !== BigInt(10)) {\n      window.ethereum.on('chainChanged', this.chainChangedHandler);\n      GairdaoController.notification().error('Please change to the OP Mainnet in Metamask');\n    } else {\n      await this.signInRemote();\n    }\n  }\n\n\n  async signInRemote() {\n    const response = await post(`${this.uriValue}/message`,\n        {body: JSON.stringify({user: {address: this.signer.address}})}\n    )\n    if (response.ok) {\n      const message = await response.text\n      try {\n        const signature = await this.signer.signMessage(message);\n        await post(this.uriValue, {\n          body: JSON.stringify({user: {signature: signature, address: this.signer.address}}),\n          responseKind: \"turbo-stream\"\n        })\n      } catch (error) {\n        if (error.code == 'ACTION_REJECTED') {\n          GairdaoController.notification().error('Sign the message to continue');\n        }\n      }\n    }\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n    static targets = [\"form\", \"products\"]\n    connect() {\n        this.updateTotalQuantity();\n    }\n\n    decrease(event) {\n        event.preventDefault();\n        const targetDom = event.currentTarget.dataset.target;\n        const decreaseTarget = this.element.querySelector(targetDom);\n        if (decreaseTarget.value >= 1) {\n            decreaseTarget.value = parseInt(decreaseTarget.value) - 1;\n        }\n        const quantityName = decreaseTarget.name;\n        console.log(`remove ${quantityName} quantity:`, decreaseTarget.value);\n        this.updateTotalQuantity();\n    }\n\n    increase(event) {\n        event.preventDefault();\n        const targetDom = event.currentTarget.dataset.target;\n        const increaseTarget = this.element.querySelector(targetDom);\n        increaseTarget.value = parseInt(increaseTarget.value) + 1;\n        const quantityName = increaseTarget.name;\n        console.log(`add ${quantityName} quantity:`, increaseTarget.value);\n        this.updateTotalQuantity();\n    }\n\n    get form() {\n        return this.formTarget;\n    }\n\n    updateTotalQuantity() {\n        this.totalQuantity = Array.from(this.productsTargets).reduce((total, product) => {\n            return total + parseInt(product.querySelector('.product-quantity').value);\n        },0);\n        if (this.totalQuantity <= 0) {\n            this.form.querySelector('input[type=\"submit\"]').disabled = true;\n        } else {\n            this.form.querySelector('input[type=\"submit\"]').disabled = false;\n        }\n        console.log(\"Shopping Cart Connected\", this.totalQuantity);\n    }\n\n}\n", "// This file is auto-generated by ./bin/rails stimulus:manifest:update\n// Run that command whenever you add a new controller or create them with\n// ./bin/rails generate stimulus controllerName\n\nimport { application } from \"./application\"\n\n// \u6CE8\u518Ccomponents\u91CC\u9762\u7684\u6240\u6709controller\nimport componentControllers from '../../components'\ncomponentControllers.forEach((value,key) => {\n    console.log(\"register component controller:\", key)\n    application.register(key, value.controller)\n});\nimport articleFormComponentController from './articles/article_form_component_controller'\nimport articleController from \"./articles/article_controller\";\nimport articlesController from \"./articles/articles_controller\";\nimport postFormComponentController from './posts/post_form_component_controller'\nimport postController from \"./posts/post_controller\";\nimport postsController from \"./posts/posts_controller\";\nimport gairdaoController from \"./gairdao_controller\";\nimport commentsController from \"./comments/comments_controller\";\nimport commentController from \"./comments/comment_controller\";\nimport userProfileFormController from \"./users/registration_steps/profile_form_controller\";\nimport communitiesGroupFormController from \"./communities/group_form_controller\";\nimport mainAppController from \"./main_app_controller\";\n\n\napplication.register(\"article-form-component\", articleFormComponentController);\napplication.register(\"article-component\", articleController);\napplication.register(\"articles-component\", articlesController);\napplication.register(\"app\", mainAppController);\napplication.register(\"post-form-component\", postFormComponentController);\napplication.register(\"post-component\", postController);\napplication.register(\"posts-component\", postsController);\napplication.register(\"comments-component\", commentsController);\napplication.register(\"comment-component\", commentController);\napplication.register(\"user-profile-form\", userProfileFormController);\napplication.register(\"gairdao\", gairdaoController);\napplication.register(\"group-form\", communitiesGroupFormController);\n\n// groups\nimport collectionsSidebarController from \"./groups/collections_sidebar_controller\";\nimport collectionFormController from \"./groups/collection_form_controller\";\nimport documentFormController  from \"./groups/document_form_controller\";\nimport collectionController from \"./groups/collection_controller\";\nimport groupOverviewFormController from \"./groups/group_overview_form_controller\";\nimport groupController from \"./groups/group_controller\";\n\n// conferences\nimport conferencesController from \"./groups/conferences_controller\";\nimport conferenceController from \"./groups/conference_controller\";\nimport conferencesSidebarController from \"./groups/conferences_sidebar_controller\";\nimport memberFormController from \"./groups/conferences/member_form_controller\";\nimport membersController from \"./groups/conferences/members_controller\";\nimport programAgendasController from \"./groups/conferences/program_agendas_controller\";\nimport topicFormController from \"./groups/conferences/topic_form_controller\";\nimport memberGroupController from \"./groups/conferences/member_group_controller\";\nimport organizationFormController from \"./groups/conferences/organization_form_controller\";\nimport conferenceFormController from \"./groups/conferences/conference_form_controller\";\nimport registrationsController from \"./groups/conferences/registrations_controller\";\nimport ticketTypesController from \"./groups/conferences/ticket_types_controller\";\nimport channelFormController from \"./groups/conferences/channel_form_controller\";\nimport channelsController from \"./groups/conferences/channels_controller\";\nimport inviteCommunityUsersController from \"./groups/conferences/invite_community_users_controller\";\nimport ordersController from \"./groups/conferences/orders_controller\";\n\napplication.register(\"collection\", collectionController);\napplication.register(\"collections-sidebar\", collectionsSidebarController);\napplication.register(\"collection-form\", collectionFormController);\napplication.register(\"document-form\", documentFormController);\napplication.register(\"group\", groupController);\napplication.register(\"group-overview-form\", groupOverviewFormController);\n\napplication.register(\"conferences\", conferencesController);\napplication.register(\"conference\", conferenceController);\napplication.register(\"conferences-sidebar\", conferencesSidebarController);\napplication.register(\"conferences-member-form\", memberFormController);\napplication.register(\"conference-members\", membersController);\napplication.register(\"conferences-program-agendas\", programAgendasController);\napplication.register(\"conferences-topic-form\", topicFormController);\napplication.register(\"conferences-member-group\", memberGroupController);\napplication.register(\"conferences-organization-form\", organizationFormController);\napplication.register(\"conference-form\", conferenceFormController);\napplication.register(\"conference-registrations\", registrationsController);\napplication.register(\"conference-ticket-types\", ticketTypesController);\napplication.register(\"conference-channel-form\", channelFormController);\napplication.register(\"conference-channels\", channelsController);\napplication.register(\"conference-introduction-form\", groupOverviewFormController);\napplication.register(\"conference-invite-community-users\", inviteCommunityUsersController);\napplication.register(\"conference-orders\", ordersController);\n\n// videos\nimport youtubeOembedController from \"./videos/youtube_oembed_controller\";\napplication.register(\"youtube-oembed\", youtubeOembedController);\n\n\n// metamask\nimport metamaskController from \"./metamask_controller\";\napplication.register(\"metamask\", metamaskController);\n\n//shopping cart\nimport shoppingCartController from \"./shopping_cart_controller\";\napplication.register(\"shopping-cart\", shoppingCartController);", "import * as ActiveStorage from \"@rails/activestorage\"\nActiveStorage.start()", "/*\n * TurboPower 0.6.0\n */\nvar DOCUMENT_FRAGMENT_NODE = 11;\n\nfunction morphAttrs(fromNode, toNode) {\n  var toNodeAttrs = toNode.attributes;\n  var attr;\n  var attrName;\n  var attrNamespaceURI;\n  var attrValue;\n  var fromValue;\n  // document-fragments dont have attributes so lets not do anything\n    if (toNode.nodeType === DOCUMENT_FRAGMENT_NODE || fromNode.nodeType === DOCUMENT_FRAGMENT_NODE) {\n    return;\n  }\n  // update attributes on original DOM element\n    for (var i = toNodeAttrs.length - 1; i >= 0; i--) {\n    attr = toNodeAttrs[i];\n    attrName = attr.name;\n    attrNamespaceURI = attr.namespaceURI;\n    attrValue = attr.value;\n    if (attrNamespaceURI) {\n      attrName = attr.localName || attrName;\n      fromValue = fromNode.getAttributeNS(attrNamespaceURI, attrName);\n      if (fromValue !== attrValue) {\n        if (attr.prefix === \"xmlns\") {\n          attrName = attr.name;\n // It's not allowed to set an attribute with the XMLNS namespace without specifying the `xmlns` prefix\n                }\n        fromNode.setAttributeNS(attrNamespaceURI, attrName, attrValue);\n      }\n    } else {\n      fromValue = fromNode.getAttribute(attrName);\n      if (fromValue !== attrValue) {\n        fromNode.setAttribute(attrName, attrValue);\n      }\n    }\n  }\n  // Remove any extra attributes found on the original DOM element that\n  // weren't found on the target element.\n    var fromNodeAttrs = fromNode.attributes;\n  for (var d = fromNodeAttrs.length - 1; d >= 0; d--) {\n    attr = fromNodeAttrs[d];\n    attrName = attr.name;\n    attrNamespaceURI = attr.namespaceURI;\n    if (attrNamespaceURI) {\n      attrName = attr.localName || attrName;\n      if (!toNode.hasAttributeNS(attrNamespaceURI, attrName)) {\n        fromNode.removeAttributeNS(attrNamespaceURI, attrName);\n      }\n    } else {\n      if (!toNode.hasAttribute(attrName)) {\n        fromNode.removeAttribute(attrName);\n      }\n    }\n  }\n}\n\nvar range;\n\n // Create a range object for efficently rendering strings to elements.\nvar NS_XHTML = \"http://www.w3.org/1999/xhtml\";\n\nvar doc = typeof document === \"undefined\" ? undefined : document;\n\nvar HAS_TEMPLATE_SUPPORT = !!doc && \"content\" in doc.createElement(\"template\");\n\nvar HAS_RANGE_SUPPORT = !!doc && doc.createRange && \"createContextualFragment\" in doc.createRange();\n\nfunction createFragmentFromTemplate(str) {\n  var template = doc.createElement(\"template\");\n  template.innerHTML = str;\n  return template.content.childNodes[0];\n}\n\nfunction createFragmentFromRange(str) {\n  if (!range) {\n    range = doc.createRange();\n    range.selectNode(doc.body);\n  }\n  var fragment = range.createContextualFragment(str);\n  return fragment.childNodes[0];\n}\n\nfunction createFragmentFromWrap(str) {\n  var fragment = doc.createElement(\"body\");\n  fragment.innerHTML = str;\n  return fragment.childNodes[0];\n}\n\n/**\n * This is about the same\n * var html = new DOMParser().parseFromString(str, 'text/html');\n * return html.body.firstChild;\n *\n * @method toElement\n * @param {String} str\n */ function toElement(str) {\n  str = str.trim();\n  if (HAS_TEMPLATE_SUPPORT) {\n    // avoid restrictions on content for things like `<tr><th>Hi</th></tr>` which\n    // createContextualFragment doesn't support\n    // <template> support not available in IE\n    return createFragmentFromTemplate(str);\n  } else if (HAS_RANGE_SUPPORT) {\n    return createFragmentFromRange(str);\n  }\n  return createFragmentFromWrap(str);\n}\n\n/**\n * Returns true if two node's names are the same.\n *\n * NOTE: We don't bother checking `namespaceURI` because you will never find two HTML elements with the same\n *       nodeName and different namespace URIs.\n *\n * @param {Element} a\n * @param {Element} b The target element\n * @return {boolean}\n */ function compareNodeNames(fromEl, toEl) {\n  var fromNodeName = fromEl.nodeName;\n  var toNodeName = toEl.nodeName;\n  var fromCodeStart, toCodeStart;\n  if (fromNodeName === toNodeName) {\n    return true;\n  }\n  fromCodeStart = fromNodeName.charCodeAt(0);\n  toCodeStart = toNodeName.charCodeAt(0);\n  // If the target element is a virtual DOM node or SVG node then we may\n  // need to normalize the tag name before comparing. Normal HTML elements that are\n  // in the \"http://www.w3.org/1999/xhtml\"\n  // are converted to upper case\n    if (fromCodeStart <= 90 && toCodeStart >= 97) {\n    // from is upper and to is lower\n    return fromNodeName === toNodeName.toUpperCase();\n  } else if (toCodeStart <= 90 && fromCodeStart >= 97) {\n    // to is upper and from is lower\n    return toNodeName === fromNodeName.toUpperCase();\n  } else {\n    return false;\n  }\n}\n\n/**\n * Create an element, optionally with a known namespace URI.\n *\n * @param {string} name the element name, e.g. 'div' or 'svg'\n * @param {string} [namespaceURI] the element's namespace URI, i.e. the value of\n * its `xmlns` attribute or its inferred namespace.\n *\n * @return {Element}\n */ function createElementNS(name, namespaceURI) {\n  return !namespaceURI || namespaceURI === NS_XHTML ? doc.createElement(name) : doc.createElementNS(namespaceURI, name);\n}\n\n/**\n * Copies the children of one DOM element to another DOM element\n */ function moveChildren(fromEl, toEl) {\n  var curChild = fromEl.firstChild;\n  while (curChild) {\n    var nextChild = curChild.nextSibling;\n    toEl.appendChild(curChild);\n    curChild = nextChild;\n  }\n  return toEl;\n}\n\nfunction syncBooleanAttrProp(fromEl, toEl, name) {\n  if (fromEl[name] !== toEl[name]) {\n    fromEl[name] = toEl[name];\n    if (fromEl[name]) {\n      fromEl.setAttribute(name, \"\");\n    } else {\n      fromEl.removeAttribute(name);\n    }\n  }\n}\n\nvar specialElHandlers = {\n  OPTION: function(fromEl, toEl) {\n    var parentNode = fromEl.parentNode;\n    if (parentNode) {\n      var parentName = parentNode.nodeName.toUpperCase();\n      if (parentName === \"OPTGROUP\") {\n        parentNode = parentNode.parentNode;\n        parentName = parentNode && parentNode.nodeName.toUpperCase();\n      }\n      if (parentName === \"SELECT\" && !parentNode.hasAttribute(\"multiple\")) {\n        if (fromEl.hasAttribute(\"selected\") && !toEl.selected) {\n          // Workaround for MS Edge bug where the 'selected' attribute can only be\n          // removed if set to a non-empty value:\n          // https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/12087679/\n          fromEl.setAttribute(\"selected\", \"selected\");\n          fromEl.removeAttribute(\"selected\");\n        }\n        // We have to reset select element's selectedIndex to -1, otherwise setting\n        // fromEl.selected using the syncBooleanAttrProp below has no effect.\n        // The correct selectedIndex will be set in the SELECT special handler below.\n                parentNode.selectedIndex = -1;\n      }\n    }\n    syncBooleanAttrProp(fromEl, toEl, \"selected\");\n  },\n  /**\n     * The \"value\" attribute is special for the <input> element since it sets\n     * the initial value. Changing the \"value\" attribute without changing the\n     * \"value\" property will have no effect since it is only used to the set the\n     * initial value.  Similar for the \"checked\" attribute, and \"disabled\".\n     */\n  INPUT: function(fromEl, toEl) {\n    syncBooleanAttrProp(fromEl, toEl, \"checked\");\n    syncBooleanAttrProp(fromEl, toEl, \"disabled\");\n    if (fromEl.value !== toEl.value) {\n      fromEl.value = toEl.value;\n    }\n    if (!toEl.hasAttribute(\"value\")) {\n      fromEl.removeAttribute(\"value\");\n    }\n  },\n  TEXTAREA: function(fromEl, toEl) {\n    var newValue = toEl.value;\n    if (fromEl.value !== newValue) {\n      fromEl.value = newValue;\n    }\n    var firstChild = fromEl.firstChild;\n    if (firstChild) {\n      // Needed for IE. Apparently IE sets the placeholder as the\n      // node value and vise versa. This ignores an empty update.\n      var oldValue = firstChild.nodeValue;\n      if (oldValue == newValue || !newValue && oldValue == fromEl.placeholder) {\n        return;\n      }\n      firstChild.nodeValue = newValue;\n    }\n  },\n  SELECT: function(fromEl, toEl) {\n    if (!toEl.hasAttribute(\"multiple\")) {\n      var selectedIndex = -1;\n      var i = 0;\n      // We have to loop through children of fromEl, not toEl since nodes can be moved\n      // from toEl to fromEl directly when morphing.\n      // At the time this special handler is invoked, all children have already been morphed\n      // and appended to / removed from fromEl, so using fromEl here is safe and correct.\n            var curChild = fromEl.firstChild;\n      var optgroup;\n      var nodeName;\n      while (curChild) {\n        nodeName = curChild.nodeName && curChild.nodeName.toUpperCase();\n        if (nodeName === \"OPTGROUP\") {\n          optgroup = curChild;\n          curChild = optgroup.firstChild;\n        } else {\n          if (nodeName === \"OPTION\") {\n            if (curChild.hasAttribute(\"selected\")) {\n              selectedIndex = i;\n              break;\n            }\n            i++;\n          }\n          curChild = curChild.nextSibling;\n          if (!curChild && optgroup) {\n            curChild = optgroup.nextSibling;\n            optgroup = null;\n          }\n        }\n      }\n      fromEl.selectedIndex = selectedIndex;\n    }\n  }\n};\n\nvar ELEMENT_NODE = 1;\n\nvar DOCUMENT_FRAGMENT_NODE$1 = 11;\n\nvar TEXT_NODE = 3;\n\nvar COMMENT_NODE = 8;\n\nfunction noop() {}\n\nfunction defaultGetNodeKey(node) {\n  if (node) {\n    return node.getAttribute && node.getAttribute(\"id\") || node.id;\n  }\n}\n\nfunction morphdomFactory(morphAttrs) {\n  return function morphdom(fromNode, toNode, options) {\n    if (!options) {\n      options = {};\n    }\n    if (typeof toNode === \"string\") {\n      if (fromNode.nodeName === \"#document\" || fromNode.nodeName === \"HTML\" || fromNode.nodeName === \"BODY\") {\n        var toNodeHtml = toNode;\n        toNode = doc.createElement(\"html\");\n        toNode.innerHTML = toNodeHtml;\n      } else {\n        toNode = toElement(toNode);\n      }\n    } else if (toNode.nodeType === DOCUMENT_FRAGMENT_NODE$1) {\n      toNode = toNode.firstElementChild;\n    }\n    var getNodeKey = options.getNodeKey || defaultGetNodeKey;\n    var onBeforeNodeAdded = options.onBeforeNodeAdded || noop;\n    var onNodeAdded = options.onNodeAdded || noop;\n    var onBeforeElUpdated = options.onBeforeElUpdated || noop;\n    var onElUpdated = options.onElUpdated || noop;\n    var onBeforeNodeDiscarded = options.onBeforeNodeDiscarded || noop;\n    var onNodeDiscarded = options.onNodeDiscarded || noop;\n    var onBeforeElChildrenUpdated = options.onBeforeElChildrenUpdated || noop;\n    var skipFromChildren = options.skipFromChildren || noop;\n    var addChild = options.addChild || function(parent, child) {\n      return parent.appendChild(child);\n    };\n    var childrenOnly = options.childrenOnly === true;\n    // This object is used as a lookup to quickly find all keyed elements in the original DOM tree.\n        var fromNodesLookup = Object.create(null);\n    var keyedRemovalList = [];\n    function addKeyedRemoval(key) {\n      keyedRemovalList.push(key);\n    }\n    function walkDiscardedChildNodes(node, skipKeyedNodes) {\n      if (node.nodeType === ELEMENT_NODE) {\n        var curChild = node.firstChild;\n        while (curChild) {\n          var key = undefined;\n          if (skipKeyedNodes && (key = getNodeKey(curChild))) {\n            // If we are skipping keyed nodes then we add the key\n            // to a list so that it can be handled at the very end.\n            addKeyedRemoval(key);\n          } else {\n            // Only report the node as discarded if it is not keyed. We do this because\n            // at the end we loop through all keyed elements that were unmatched\n            // and then discard them in one final pass.\n            onNodeDiscarded(curChild);\n            if (curChild.firstChild) {\n              walkDiscardedChildNodes(curChild, skipKeyedNodes);\n            }\n          }\n          curChild = curChild.nextSibling;\n        }\n      }\n    }\n    /**\n    * Removes a DOM node out of the original DOM\n    *\n    * @param  {Node} node The node to remove\n    * @param  {Node} parentNode The nodes parent\n    * @param  {Boolean} skipKeyedNodes If true then elements with keys will be skipped and not discarded.\n    * @return {undefined}\n    */    function removeNode(node, parentNode, skipKeyedNodes) {\n      if (onBeforeNodeDiscarded(node) === false) {\n        return;\n      }\n      if (parentNode) {\n        parentNode.removeChild(node);\n      }\n      onNodeDiscarded(node);\n      walkDiscardedChildNodes(node, skipKeyedNodes);\n    }\n    // // TreeWalker implementation is no faster, but keeping this around in case this changes in the future\n    // function indexTree(root) {\n    //     var treeWalker = document.createTreeWalker(\n    //         root,\n    //         NodeFilter.SHOW_ELEMENT);\n    \n    //     var el;\n    //     while((el = treeWalker.nextNode())) {\n    //         var key = getNodeKey(el);\n    //         if (key) {\n    //             fromNodesLookup[key] = el;\n    //         }\n    //     }\n    // }\n    // // NodeIterator implementation is no faster, but keeping this around in case this changes in the future\n    \n    // function indexTree(node) {\n    //     var nodeIterator = document.createNodeIterator(node, NodeFilter.SHOW_ELEMENT);\n    //     var el;\n    //     while((el = nodeIterator.nextNode())) {\n    //         var key = getNodeKey(el);\n    //         if (key) {\n    //             fromNodesLookup[key] = el;\n    //         }\n    //     }\n    // }\n        function indexTree(node) {\n      if (node.nodeType === ELEMENT_NODE || node.nodeType === DOCUMENT_FRAGMENT_NODE$1) {\n        var curChild = node.firstChild;\n        while (curChild) {\n          var key = getNodeKey(curChild);\n          if (key) {\n            fromNodesLookup[key] = curChild;\n          }\n          // Walk recursively\n                    indexTree(curChild);\n          curChild = curChild.nextSibling;\n        }\n      }\n    }\n    indexTree(fromNode);\n    function handleNodeAdded(el) {\n      onNodeAdded(el);\n      var curChild = el.firstChild;\n      while (curChild) {\n        var nextSibling = curChild.nextSibling;\n        var key = getNodeKey(curChild);\n        if (key) {\n          var unmatchedFromEl = fromNodesLookup[key];\n          // if we find a duplicate #id node in cache, replace `el` with cache value\n          // and morph it to the child node.\n                    if (unmatchedFromEl && compareNodeNames(curChild, unmatchedFromEl)) {\n            curChild.parentNode.replaceChild(unmatchedFromEl, curChild);\n            morphEl(unmatchedFromEl, curChild);\n          } else {\n            handleNodeAdded(curChild);\n          }\n        } else {\n          // recursively call for curChild and it's children to see if we find something in\n          // fromNodesLookup\n          handleNodeAdded(curChild);\n        }\n        curChild = nextSibling;\n      }\n    }\n    function cleanupFromEl(fromEl, curFromNodeChild, curFromNodeKey) {\n      // We have processed all of the \"to nodes\". If curFromNodeChild is\n      // non-null then we still have some from nodes left over that need\n      // to be removed\n      while (curFromNodeChild) {\n        var fromNextSibling = curFromNodeChild.nextSibling;\n        if (curFromNodeKey = getNodeKey(curFromNodeChild)) {\n          // Since the node is keyed it might be matched up later so we defer\n          // the actual removal to later\n          addKeyedRemoval(curFromNodeKey);\n        } else {\n          // NOTE: we skip nested keyed nodes from being removed since there is\n          //       still a chance they will be matched up later\n          removeNode(curFromNodeChild, fromEl, true /* skip keyed nodes */);\n        }\n        curFromNodeChild = fromNextSibling;\n      }\n    }\n    function morphEl(fromEl, toEl, childrenOnly) {\n      var toElKey = getNodeKey(toEl);\n      if (toElKey) {\n        // If an element with an ID is being morphed then it will be in the final\n        // DOM so clear it out of the saved elements collection\n        delete fromNodesLookup[toElKey];\n      }\n      if (!childrenOnly) {\n        // optional\n        if (onBeforeElUpdated(fromEl, toEl) === false) {\n          return;\n        }\n        // update attributes on original DOM element first\n                morphAttrs(fromEl, toEl);\n        // optional\n                onElUpdated(fromEl);\n        if (onBeforeElChildrenUpdated(fromEl, toEl) === false) {\n          return;\n        }\n      }\n      if (fromEl.nodeName !== \"TEXTAREA\") {\n        morphChildren(fromEl, toEl);\n      } else {\n        specialElHandlers.TEXTAREA(fromEl, toEl);\n      }\n    }\n    function morphChildren(fromEl, toEl) {\n      var skipFrom = skipFromChildren(fromEl);\n      var curToNodeChild = toEl.firstChild;\n      var curFromNodeChild = fromEl.firstChild;\n      var curToNodeKey;\n      var curFromNodeKey;\n      var fromNextSibling;\n      var toNextSibling;\n      var matchingFromEl;\n      // walk the children\n            outer: while (curToNodeChild) {\n        toNextSibling = curToNodeChild.nextSibling;\n        curToNodeKey = getNodeKey(curToNodeChild);\n        // walk the fromNode children all the way through\n                while (!skipFrom && curFromNodeChild) {\n          fromNextSibling = curFromNodeChild.nextSibling;\n          if (curToNodeChild.isSameNode && curToNodeChild.isSameNode(curFromNodeChild)) {\n            curToNodeChild = toNextSibling;\n            curFromNodeChild = fromNextSibling;\n            continue outer;\n          }\n          curFromNodeKey = getNodeKey(curFromNodeChild);\n          var curFromNodeType = curFromNodeChild.nodeType;\n          // this means if the curFromNodeChild doesnt have a match with the curToNodeChild\n                    var isCompatible = undefined;\n          if (curFromNodeType === curToNodeChild.nodeType) {\n            if (curFromNodeType === ELEMENT_NODE) {\n              // Both nodes being compared are Element nodes\n              if (curToNodeKey) {\n                // The target node has a key so we want to match it up with the correct element\n                // in the original DOM tree\n                if (curToNodeKey !== curFromNodeKey) {\n                  // The current element in the original DOM tree does not have a matching key so\n                  // let's check our lookup to see if there is a matching element in the original\n                  // DOM tree\n                  if (matchingFromEl = fromNodesLookup[curToNodeKey]) {\n                    if (fromNextSibling === matchingFromEl) {\n                      // Special case for single element removals. To avoid removing the original\n                      // DOM node out of the tree (since that can break CSS transitions, etc.),\n                      // we will instead discard the current node and wait until the next\n                      // iteration to properly match up the keyed target element with its matching\n                      // element in the original tree\n                      isCompatible = false;\n                    } else {\n                      // We found a matching keyed element somewhere in the original DOM tree.\n                      // Let's move the original DOM node into the current position and morph\n                      // it.\n                      // NOTE: We use insertBefore instead of replaceChild because we want to go through\n                      // the `removeNode()` function for the node that is being discarded so that\n                      // all lifecycle hooks are correctly invoked\n                      fromEl.insertBefore(matchingFromEl, curFromNodeChild);\n                      // fromNextSibling = curFromNodeChild.nextSibling;\n                                            if (curFromNodeKey) {\n                        // Since the node is keyed it might be matched up later so we defer\n                        // the actual removal to later\n                        addKeyedRemoval(curFromNodeKey);\n                      } else {\n                        // NOTE: we skip nested keyed nodes from being removed since there is\n                        //       still a chance they will be matched up later\n                        removeNode(curFromNodeChild, fromEl, true /* skip keyed nodes */);\n                      }\n                      curFromNodeChild = matchingFromEl;\n                    }\n                  } else {\n                    // The nodes are not compatible since the \"to\" node has a key and there\n                    // is no matching keyed node in the source tree\n                    isCompatible = false;\n                  }\n                }\n              } else if (curFromNodeKey) {\n                // The original has a key\n                isCompatible = false;\n              }\n              isCompatible = isCompatible !== false && compareNodeNames(curFromNodeChild, curToNodeChild);\n              if (isCompatible) {\n                // We found compatible DOM elements so transform\n                // the current \"from\" node to match the current\n                // target DOM node.\n                // MORPH\n                morphEl(curFromNodeChild, curToNodeChild);\n              }\n            } else if (curFromNodeType === TEXT_NODE || curFromNodeType == COMMENT_NODE) {\n              // Both nodes being compared are Text or Comment nodes\n              isCompatible = true;\n              // Simply update nodeValue on the original node to\n              // change the text value\n                            if (curFromNodeChild.nodeValue !== curToNodeChild.nodeValue) {\n                curFromNodeChild.nodeValue = curToNodeChild.nodeValue;\n              }\n            }\n          }\n          if (isCompatible) {\n            // Advance both the \"to\" child and the \"from\" child since we found a match\n            // Nothing else to do as we already recursively called morphChildren above\n            curToNodeChild = toNextSibling;\n            curFromNodeChild = fromNextSibling;\n            continue outer;\n          }\n          // No compatible match so remove the old node from the DOM and continue trying to find a\n          // match in the original DOM. However, we only do this if the from node is not keyed\n          // since it is possible that a keyed node might match up with a node somewhere else in the\n          // target tree and we don't want to discard it just yet since it still might find a\n          // home in the final DOM tree. After everything is done we will remove any keyed nodes\n          // that didn't find a home\n                    if (curFromNodeKey) {\n            // Since the node is keyed it might be matched up later so we defer\n            // the actual removal to later\n            addKeyedRemoval(curFromNodeKey);\n          } else {\n            // NOTE: we skip nested keyed nodes from being removed since there is\n            //       still a chance they will be matched up later\n            removeNode(curFromNodeChild, fromEl, true /* skip keyed nodes */);\n          }\n          curFromNodeChild = fromNextSibling;\n        }\n // END: while(curFromNodeChild) {}\n        // If we got this far then we did not find a candidate match for\n        // our \"to node\" and we exhausted all of the children \"from\"\n        // nodes.\n                if (curToNodeKey && (matchingFromEl = fromNodesLookup[curToNodeKey]) && compareNodeNames(matchingFromEl, curToNodeChild)) {\n          // MORPH\n          addChild(fromEl, matchingFromEl);\n          morphEl(matchingFromEl, curToNodeChild);\n        } else {\n          var onBeforeNodeAddedResult = onBeforeNodeAdded(curToNodeChild);\n          if (onBeforeNodeAddedResult !== false) {\n            if (onBeforeNodeAddedResult) {\n              curToNodeChild = onBeforeNodeAddedResult;\n            }\n            if (curToNodeChild.actualize) {\n              curToNodeChild = curToNodeChild.actualize(fromEl.ownerDocument || doc);\n            }\n            addChild(fromEl, curToNodeChild);\n            handleNodeAdded(curToNodeChild);\n          }\n        }\n        curToNodeChild = toNextSibling;\n        curFromNodeChild = fromNextSibling;\n      }\n      cleanupFromEl(fromEl, curFromNodeChild, curFromNodeKey);\n      var specialElHandler = specialElHandlers[fromEl.nodeName];\n      if (specialElHandler) {\n        specialElHandler(fromEl, toEl);\n      }\n    }\n // END: morphChildren(...)\n        var morphedNode = fromNode;\n    var morphedNodeType = morphedNode.nodeType;\n    var toNodeType = toNode.nodeType;\n    if (!childrenOnly) {\n      // Handle the case where we are given two DOM nodes that are not\n      // compatible (e.g. <div> --> <span> or <div> --> TEXT)\n      if (morphedNodeType === ELEMENT_NODE) {\n        if (toNodeType === ELEMENT_NODE) {\n          if (!compareNodeNames(fromNode, toNode)) {\n            onNodeDiscarded(fromNode);\n            morphedNode = moveChildren(fromNode, createElementNS(toNode.nodeName, toNode.namespaceURI));\n          }\n        } else {\n          // Going from an element node to a text node\n          morphedNode = toNode;\n        }\n      } else if (morphedNodeType === TEXT_NODE || morphedNodeType === COMMENT_NODE) {\n        // Text or comment node\n        if (toNodeType === morphedNodeType) {\n          if (morphedNode.nodeValue !== toNode.nodeValue) {\n            morphedNode.nodeValue = toNode.nodeValue;\n          }\n          return morphedNode;\n        } else {\n          // Text node to something else\n          morphedNode = toNode;\n        }\n      }\n    }\n    if (morphedNode === toNode) {\n      // The \"to node\" was not compatible with the \"from node\" so we had to\n      // toss out the \"from node\" and use the \"to node\"\n      onNodeDiscarded(fromNode);\n    } else {\n      if (toNode.isSameNode && toNode.isSameNode(morphedNode)) {\n        return;\n      }\n      morphEl(morphedNode, toNode, childrenOnly);\n      // We now need to loop over any keyed nodes that might need to be\n      // removed. We only do the removal if we know that the keyed node\n      // never found a match. When a keyed node is matched up we remove\n      // it out of fromNodesLookup and we use fromNodesLookup to determine\n      // if a keyed node has been matched up or not\n            if (keyedRemovalList) {\n        for (var i = 0, len = keyedRemovalList.length; i < len; i++) {\n          var elToRemove = fromNodesLookup[keyedRemovalList[i]];\n          if (elToRemove) {\n            removeNode(elToRemove, elToRemove.parentNode, false);\n          }\n        }\n      }\n    }\n    if (!childrenOnly && morphedNode !== fromNode && fromNode.parentNode) {\n      if (morphedNode.actualize) {\n        morphedNode = morphedNode.actualize(fromNode.ownerDocument || doc);\n      }\n      // If we had to swap out the from node with a new node because the old\n      // node was not compatible with the target node then we need to\n      // replace the old DOM node in the original DOM tree. This is only\n      // possible if the original DOM node was part of a DOM tree which\n      // we know is the case if it has a parent node.\n            fromNode.parentNode.replaceChild(morphedNode, fromNode);\n    }\n    return morphedNode;\n  };\n}\n\nvar morphdom = morphdomFactory(morphAttrs);\n\n/*\n * TurboMorph 0.2.0\n */ function morph() {\n  const options = {\n    childrenOnly: this.hasAttribute(\"children-only\")\n  };\n  this.targetElements.forEach((element => {\n    morphdom(element, options.childrenOnly ? this.templateContent : this.templateElement.innerHTML, options);\n  }));\n}\n\nconst initialize$1 = streamActions => {\n  streamActions.morph = morph;\n};\n\nfunction camelize(value) {\n  return value.replace(/(?:[_-])([a-z0-9])/g, ((_, char) => char.toUpperCase()));\n}\n\nfunction capitalize(value) {\n  return value.charAt(0).toUpperCase() + value.slice(1);\n}\n\nfunction dasherize(value) {\n  return value.replace(/([A-Z])/g, ((_, char) => `-${char.toLowerCase()}`));\n}\n\nfunction tokenize(value) {\n  return value ? value.match(/[^\\s]+/g) || [] : [];\n}\n\nfunction typecast(value) {\n  try {\n    return JSON.parse(value);\n  } catch (e) {\n    return value;\n  }\n}\n\nvar Utils =  Object.freeze({\n  __proto__: null,\n  camelize: camelize,\n  capitalize: capitalize,\n  dasherize: dasherize,\n  tokenize: tokenize,\n  typecast: typecast\n});\n\nfunction add_css_class() {\n  const classes = tokenize(this.getAttribute(\"classes\"));\n  if (classes.length > 0) {\n    this.targetElements.forEach((element => element.classList.add(...classes)));\n  } else {\n    console.warn(`[TurboPower] no \"classes\" provided for Turbo Streams operation \"add_css_class\"`);\n  }\n}\n\nfunction remove_attribute() {\n  const attribute = this.getAttribute(\"attribute\");\n  if (attribute) {\n    this.targetElements.forEach((element => element.removeAttribute(attribute)));\n  } else {\n    console.warn(`[TurboPower] no \"attribute\" provided for Turbo Streams operation \"remove_attribute\"`);\n  }\n}\n\nfunction remove_css_class() {\n  const classes = tokenize(this.getAttribute(\"classes\"));\n  if (classes.length > 0) {\n    this.targetElements.forEach((element => element.classList.remove(...classes)));\n  } else {\n    console.warn(`[TurboPower] no \"classes\" provided for Turbo Streams operation \"remove_css_class\"`);\n  }\n}\n\nfunction set_attribute() {\n  const attribute = this.getAttribute(\"attribute\");\n  const value = this.getAttribute(\"value\") || \"\";\n  if (attribute) {\n    this.targetElements.forEach((element => element.setAttribute(attribute, value)));\n  } else {\n    console.warn(`[TurboPower] no \"attribute\" provided for Turbo Streams operation \"set_attribute\"`);\n  }\n}\n\nfunction set_dataset_attribute() {\n  const attribute = this.getAttribute(\"attribute\");\n  const value = this.getAttribute(\"value\") || \"\";\n  if (attribute) {\n    this.targetElements.forEach((element => element.dataset[camelize(attribute)] = value));\n  } else {\n    console.warn(`[TurboPower] no \"attribute\" provided for Turbo Streams operation \"set_dataset_attribute\"`);\n  }\n}\n\nfunction set_property() {\n  const name = this.getAttribute(\"name\");\n  const value = typecast(this.getAttribute(\"value\") || \"\");\n  if (name) {\n    this.targetElements.forEach((element => element[name] = value));\n  } else {\n    console.error(`[TurboPower] no \"name\" provided for Turbo Streams operation \"set_property\"`);\n  }\n}\n\nfunction set_style() {\n  const name = this.getAttribute(\"name\");\n  const value = this.getAttribute(\"value\") || \"\";\n  if (name) {\n    this.targetElements.forEach((element => element.style[name] = value));\n  } else {\n    console.error(`[TurboPower] no \"name\" provided for Turbo Streams operation \"set_style\"`);\n  }\n}\n\nfunction set_styles() {\n  const styles = this.getAttribute(\"styles\") || \"\";\n  this.targetElements.forEach((element => element.setAttribute(\"style\", styles)));\n}\n\nfunction set_value() {\n  const value = this.getAttribute(\"value\") || \"\";\n  this.targetElements.forEach((element => element.value = value));\n}\n\nfunction toggle_css_class() {\n  const classes = tokenize(this.getAttribute(\"classes\"));\n  if (classes.length > 0) {\n    this.targetElements.forEach((element => {\n      classes.forEach((className => element.classList.toggle(className)));\n    }));\n  } else {\n    console.warn(`[TurboPower] no \"classes\" provided for Turbo Streams operation \"toggle_css_class\"`);\n  }\n}\n\nfunction replace_css_class() {\n  const from = this.getAttribute(\"from\") || \"\";\n  const to = this.getAttribute(\"to\") || \"\";\n  if (from && to) {\n    this.targetElements.forEach((element => {\n      const wasReplaced = element.classList.replace(from, to);\n      if (!wasReplaced) {\n        console.warn(`[TurboPower] The \"${from}\" CSS class provided in the \"from\" attribute for the \"replace_css_class\" action was not found on the target element. No replacements made.`, element);\n      }\n    }));\n  } else {\n    console.warn(`[TurboPower] no \"from\" or \"to\" class provided for Turbo Streams operation \"replace_css_class\"`);\n  }\n}\n\nfunction registerAttributesActions(streamActions) {\n  streamActions.add_css_class = add_css_class;\n  streamActions.remove_css_class = remove_css_class;\n  streamActions.remove_attribute = remove_attribute;\n  streamActions.set_attribute = set_attribute;\n  streamActions.set_dataset_attribute = set_dataset_attribute;\n  streamActions.set_property = set_property;\n  streamActions.set_style = set_style;\n  streamActions.set_styles = set_styles;\n  streamActions.set_value = set_value;\n  streamActions.toggle_css_class = toggle_css_class;\n  streamActions.replace_css_class = replace_css_class;\n}\n\nfunction reload() {\n  window.location.reload();\n}\n\nfunction scroll_into_view() {\n  const alignToTop = this.getAttribute(\"align-to-top\");\n  const block = this.getAttribute(\"block\");\n  const inline = this.getAttribute(\"inline\");\n  const behavior = this.getAttribute(\"behavior\");\n  if (alignToTop) {\n    this.targetElements.forEach((element => element.scrollIntoView(alignToTop === \"true\")));\n  } else if (block || inline || behavior) {\n    const options = {};\n    if (block) options.block = block;\n    if (inline) options.inline = inline;\n    if (behavior) options.behavior = behavior;\n    this.targetElements.forEach((element => element.scrollIntoView(options)));\n  } else {\n    this.targetElements.forEach((element => element.scrollIntoView()));\n  }\n}\n\nfunction set_focus() {\n  this.targetElements.forEach((element => element.focus()));\n}\n\nfunction set_title() {\n  const title = this.getAttribute(\"title\") || \"\";\n  let titleElement = document.head.querySelector(\"title\");\n  if (!titleElement) {\n    titleElement = document.createElement(\"title\");\n    document.head.appendChild(titleElement);\n  }\n  titleElement.textContent = title;\n}\n\nfunction registerBrowserActions(streamActions) {\n  streamActions.reload = reload;\n  streamActions.scroll_into_view = scroll_into_view;\n  streamActions.set_focus = set_focus;\n  streamActions.set_title = set_title;\n}\n\nfunction console_log() {\n  const message = this.getAttribute(\"message\");\n  const level = this.getAttribute(\"level\") || \"log\";\n  console[level](message);\n}\n\nfunction console_table() {\n  const data = JSON.parse(this.getAttribute(\"data\") || \"[]\");\n  const columns = JSON.parse(this.getAttribute(\"columns\") || \"[]\");\n  console.table(data, columns);\n}\n\nfunction registerDebugActions(streamActions) {\n  streamActions.console_log = console_log;\n  streamActions.console_table = console_table;\n}\n\nfunction invoke() {\n  console.warn(\"[TurboPower] The `invoke` Turbo Stream Action was removed from TurboPower. If you'd like to continue using this action please use the successor library instead. Read more here: https://github.com/hopsoft/turbo_boost-streams\");\n}\n\nfunction registerDeprecatedActions(streamActions) {\n  if (!streamActions.invoke) {\n    streamActions.invoke = invoke;\n  }\n}\n\nclass CookieStringBuilder {\n  constructor(streamElement) {\n    this.ATTRIBUTE_TO_COOKIE_KEY_MAPPING = [ [ \"domain\", \"Domain\", false ], [ \"path\", \"Path\", false ], [ \"expires\", \"Expires\", false ], [ \"max-age\", \"Max-Age\", false ], [ \"http-only\", \"HttpOnly\", true ], [ \"secure\", \"Secure\", true ], [ \"same-site\", \"SameSite\", false ] ];\n    this.streamElement = streamElement;\n  }\n  build() {\n    let cookieString = `${this.streamElement.getAttribute(\"name\")}=${this.streamElement.getAttribute(\"value\")}`;\n    this.ATTRIBUTE_TO_COOKIE_KEY_MAPPING.forEach((([streamElementAttribute, cookieKey, isBooleanAttribute]) => {\n      const cookieValue = this.streamElement.getAttribute(streamElementAttribute);\n      if (cookieValue !== null) {\n        const cookieKeyPair = isBooleanAttribute ? cookieKey : `${cookieKey}=${cookieValue}`;\n        cookieString = `${cookieString}; ${cookieKeyPair}`;\n      }\n    }));\n    return cookieString;\n  }\n}\n\nfunction set_cookie() {\n  const cookie = this.getAttribute(\"cookie\") || \"\";\n  document.cookie = cookie;\n}\n\nfunction set_cookie_item() {\n  const cookieStringBuilder = new CookieStringBuilder(this);\n  document.cookie = cookieStringBuilder.build();\n}\n\nfunction registerDocumentActions(streamActions) {\n  streamActions.set_cookie = set_cookie;\n  streamActions.set_cookie_item = set_cookie_item;\n}\n\nfunction graft() {\n  const selector = this.getAttribute(\"parent\");\n  if (selector) {\n    const parent = document.querySelector(selector);\n    if (parent) {\n      this.targetElements.forEach((element => parent.appendChild(element)));\n    } else {\n      console.error(`[TurboPower] couldn't find parent element using selector \"${selector}\" for Turbo Streams operation \"graft\"`);\n    }\n  } else {\n    console.error(`[TurboPower] no \"parent\" selector provided for Turbo Streams operation \"graft\"`);\n  }\n}\n\nfunction inner_html() {\n  const html = this.templateContent.textContent || \"\";\n  this.targetElements.forEach((element => element.innerHTML = html));\n}\n\nfunction insert_adjacent_html() {\n  const position = this.getAttribute(\"position\") || \"beforebegin\";\n  const html = this.templateContent.textContent || \"\";\n  this.targetElements.forEach((element => element.insertAdjacentHTML(position, html)));\n}\n\nfunction insert_adjacent_text() {\n  const position = this.getAttribute(\"position\") || \"beforebegin\";\n  const message = this.getAttribute(\"text\") || \"\";\n  this.targetElements.forEach((element => element.insertAdjacentText(position, message)));\n}\n\nfunction outer_html() {\n  const html = this.templateContent.textContent || \"\";\n  this.targetElements.forEach((element => element.outerHTML = html));\n}\n\nfunction set_meta() {\n  const name = this.getAttribute(\"name\");\n  const content = this.getAttribute(\"content\") || \"\";\n  if (name) {\n    let meta = document.head.querySelector(`meta[name='${name}']`);\n    if (!meta) {\n      meta = document.createElement(\"meta\");\n      meta.name = name;\n      document.head.appendChild(meta);\n    }\n    meta.content = content;\n  } else {\n    console.error(`[TurboPower] no \"name\" provided for Turbo Streams operation \"set_meta\"`);\n  }\n}\n\nfunction text_content() {\n  const text = this.getAttribute(\"text\") || \"\";\n  this.targetElements.forEach((element => element.textContent = text));\n}\n\nfunction registerDOMActions(streamActions) {\n  streamActions.graft = graft;\n  streamActions.inner_html = inner_html;\n  streamActions.insert_adjacent_html = insert_adjacent_html;\n  streamActions.insert_adjacent_text = insert_adjacent_text;\n  streamActions.outer_html = outer_html;\n  streamActions.text_content = text_content;\n  streamActions.set_meta = set_meta;\n}\n\nfunction dispatch_event() {\n  const name = this.getAttribute(\"name\");\n  let template = null;\n  try {\n    template = this.templateContent.textContent;\n  } catch (e) {}\n  try {\n    const detail = template ? JSON.parse(template) : {};\n    if (name) {\n      const options = {\n        bubbles: true,\n        cancelable: true,\n        detail: detail\n      };\n      const event = new CustomEvent(name, options);\n      this.targetElements.forEach((element => element.dispatchEvent(event)));\n    } else {\n      console.warn(`[TurboPower] no \"name\" provided for Turbo Streams operation \"dispatch_event\"`);\n    }\n  } catch (error) {\n    console.error(`[TurboPower] error proccessing provided \"detail\" in \"<template>\" (\"${template}\") for Turbo Streams operation \"dispatch_event\".`, `Error: \"${error.message}\"`);\n  }\n}\n\nfunction registerEventsActions(streamActions) {\n  streamActions.dispatch_event = dispatch_event;\n}\n\nfunction reset_form() {\n  this.targetElements.forEach((form => form.reset()));\n}\n\nfunction registerFormActions(streamActions) {\n  streamActions.reset_form = reset_form;\n}\n\nfunction push_state() {\n  const url = this.getAttribute(\"url\");\n  const state = this.getAttribute(\"state\");\n  const title = this.getAttribute(\"title\") || \"\";\n  window.history.pushState(state, title, url);\n}\n\nfunction replace_state() {\n  const url = this.getAttribute(\"url\");\n  const state = this.getAttribute(\"state\");\n  const title = this.getAttribute(\"title\") || \"\";\n  window.history.replaceState(state, title, url);\n}\n\nfunction history_back() {\n  window.history.back();\n}\n\nfunction history_forward() {\n  window.history.forward();\n}\n\nfunction history_go() {\n  const delta = Number(this.getAttribute(\"delta\")) || 0;\n  window.history.go(delta);\n}\n\nfunction registerHistoryActions(streamActions) {\n  streamActions.push_state = push_state;\n  streamActions.replace_state = replace_state;\n  streamActions.history_back = history_back;\n  streamActions.history_go = history_go;\n}\n\nconst PERMITTED_ATTRIBUTES = [ \"dir\", \"lang\", \"badge\", \"body\", \"tag\", \"icon\", \"image\", \"data\", \"vibrate\", \"renotify\", \"require-interaction\", \"actions\", \"silent\" ];\n\nconst createNotification = streamElement => {\n  const title = streamElement.getAttribute(\"title\") || \"\";\n  const attributes = Array.from(streamElement.attributes).filter((attribute => PERMITTED_ATTRIBUTES.includes(attribute.name))).map((attribute => [ camelize(attribute.name), typecast(attribute.value) ]));\n  const options = Object.fromEntries(attributes);\n  new Notification(title, options);\n};\n\nfunction notification() {\n  if (!window.Notification) {\n    alert(\"This browser does not support desktop notification\");\n  } else if (Notification.permission === \"granted\") {\n    createNotification(this);\n  } else if (Notification.permission !== \"denied\") {\n    Notification.requestPermission().then((permission => {\n      if (permission === \"granted\") {\n        createNotification(this);\n      }\n    }));\n  }\n}\n\nfunction registerNotificationActions(streamActions) {\n  streamActions.notification = notification;\n}\n\nfunction storage(type) {\n  return type === \"session\" ? window.sessionStorage : window.localStorage;\n}\n\nfunction clear_storage() {\n  const type = this.getAttribute(\"type\");\n  storage(type).clear();\n}\n\nfunction set_storage_item() {\n  const key = this.getAttribute(\"key\");\n  const value = this.getAttribute(\"value\") || \"\";\n  const type = this.getAttribute(\"type\");\n  if (key) {\n    storage(type).setItem(key, value);\n  } else {\n    console.warn(`[TurboPower] no \"key\" provided for Turbo Streams operation \"set_storage_item\"`);\n  }\n}\n\nfunction remove_storage_item() {\n  const key = this.getAttribute(\"key\");\n  const type = this.getAttribute(\"type\");\n  if (key) {\n    storage(type).removeItem(key);\n  } else {\n    console.warn(`[TurboPower] no \"key\" provided for Turbo Streams operation \"remove_storage_item\"`);\n  }\n}\n\nfunction registerStorageActions(streamActions) {\n  streamActions.clear_storage = clear_storage;\n  streamActions.set_storage_item = set_storage_item;\n  streamActions.remove_storage_item = remove_storage_item;\n}\n\nvar Proxy = {\n  get location() {\n    return window.TurboPowerLocation || window.location;\n  }\n};\n\nfunction redirect_to() {\n  const url = this.getAttribute(\"url\") || \"/\";\n  const turboAction = this.getAttribute(\"turbo-action\") || \"advance\";\n  const turboFrame = this.getAttribute(\"turbo-frame\");\n  const turbo = this.getAttribute(\"turbo\") !== \"false\";\n  const options = {\n    action: turboAction\n  };\n  if (turboFrame) {\n    options.frame = turboFrame;\n  }\n  if (turbo && window.Turbo) {\n    window.Turbo.visit(url, options);\n  } else {\n    Proxy.location.assign(url);\n  }\n}\n\nfunction turbo_clear_cache() {\n  window.Turbo.cache.clear();\n}\n\nfunction registerTurboActions(streamActions) {\n  streamActions.redirect_to = redirect_to;\n  streamActions.turbo_clear_cache = turbo_clear_cache;\n}\n\nfunction turbo_progress_bar_set_value() {\n  const value = this.getAttribute(\"value\") || 0;\n  window.Turbo.navigator.adapter.progressBar.setValue(Number(value));\n}\n\nfunction turbo_progress_bar_show() {\n  window.Turbo.navigator.adapter.progressBar.show();\n}\n\nfunction turbo_progress_bar_hide() {\n  window.Turbo.navigator.adapter.progressBar.hide();\n}\n\nfunction registerTurboProgressBarActions(streamActions) {\n  streamActions.turbo_progress_bar_set_value = turbo_progress_bar_set_value;\n  streamActions.turbo_progress_bar_show = turbo_progress_bar_show;\n  streamActions.turbo_progress_bar_hide = turbo_progress_bar_hide;\n}\n\nfunction turbo_frame_reload() {\n  this.targetElements.forEach((element => element.reload()));\n}\n\nfunction turbo_frame_set_src() {\n  const src = this.getAttribute(\"src\");\n  this.targetElements.forEach((element => element.src = src));\n}\n\nfunction registerTurboFrameActions(streamActions) {\n  streamActions.turbo_frame_reload = turbo_frame_reload;\n  streamActions.turbo_frame_set_src = turbo_frame_set_src;\n}\n\nfunction register$1(streamActions) {\n  registerAttributesActions(streamActions);\n  registerBrowserActions(streamActions);\n  registerDebugActions(streamActions);\n  registerDeprecatedActions(streamActions);\n  registerDocumentActions(streamActions);\n  registerDOMActions(streamActions);\n  registerEventsActions(streamActions);\n  registerFormActions(streamActions);\n  registerHistoryActions(streamActions);\n  registerNotificationActions(streamActions);\n  registerStorageActions(streamActions);\n  registerTurboActions(streamActions);\n  registerTurboProgressBarActions(streamActions);\n  registerTurboFrameActions(streamActions);\n}\n\nvar Actions =  Object.freeze({\n  __proto__: null,\n  add_css_class: add_css_class,\n  clear_storage: clear_storage,\n  console_log: console_log,\n  console_table: console_table,\n  dispatch_event: dispatch_event,\n  graft: graft,\n  history_back: history_back,\n  history_forward: history_forward,\n  history_go: history_go,\n  inner_html: inner_html,\n  insert_adjacent_html: insert_adjacent_html,\n  insert_adjacent_text: insert_adjacent_text,\n  invoke: invoke,\n  notification: notification,\n  outer_html: outer_html,\n  push_state: push_state,\n  redirect_to: redirect_to,\n  register: register$1,\n  registerAttributesActions: registerAttributesActions,\n  registerBrowserActions: registerBrowserActions,\n  registerDOMActions: registerDOMActions,\n  registerDebugActions: registerDebugActions,\n  registerDeprecatedActions: registerDeprecatedActions,\n  registerDocumentActions: registerDocumentActions,\n  registerEventsActions: registerEventsActions,\n  registerFormActions: registerFormActions,\n  registerHistoryActions: registerHistoryActions,\n  registerNotificationActions: registerNotificationActions,\n  registerStorageActions: registerStorageActions,\n  registerTurboActions: registerTurboActions,\n  registerTurboFrameActions: registerTurboFrameActions,\n  registerTurboProgressBarActions: registerTurboProgressBarActions,\n  reload: reload,\n  remove_attribute: remove_attribute,\n  remove_css_class: remove_css_class,\n  remove_storage_item: remove_storage_item,\n  replace_css_class: replace_css_class,\n  replace_state: replace_state,\n  reset_form: reset_form,\n  scroll_into_view: scroll_into_view,\n  set_attribute: set_attribute,\n  set_cookie: set_cookie,\n  set_cookie_item: set_cookie_item,\n  set_dataset_attribute: set_dataset_attribute,\n  set_focus: set_focus,\n  set_meta: set_meta,\n  set_property: set_property,\n  set_storage_item: set_storage_item,\n  set_style: set_style,\n  set_styles: set_styles,\n  set_title: set_title,\n  set_value: set_value,\n  text_content: text_content,\n  toggle_css_class: toggle_css_class,\n  turbo_clear_cache: turbo_clear_cache,\n  turbo_frame_reload: turbo_frame_reload,\n  turbo_frame_set_src: turbo_frame_set_src,\n  turbo_progress_bar_hide: turbo_progress_bar_hide,\n  turbo_progress_bar_set_value: turbo_progress_bar_set_value,\n  turbo_progress_bar_show: turbo_progress_bar_show\n});\n\nfunction initialize(streamActions) {\n  initialize$1(streamActions);\n  register$1(streamActions);\n}\n\nfunction register(name, action, streamActions) {\n  streamActions[name] = action;\n}\n\nvar index = {\n  initialize: initialize,\n  register: register,\n  Actions: Actions,\n  Utils: Utils\n};\n\nexport { Actions, Utils, index as default, initialize, register };\n", "import TurboPower from 'turbo_power'\nTurboPower.initialize(Turbo.StreamActions)", "import \"./activestorage\"\nimport \"./turbo_power\"", "var adapters = {\n  logger: self.console,\n  WebSocket: self.WebSocket\n};\n\nvar logger = {\n  log(...messages) {\n    if (this.enabled) {\n      messages.push(Date.now());\n      adapters.logger.log(\"[ActionCable]\", ...messages);\n    }\n  }\n};\n\nconst now = () => (new Date).getTime();\n\nconst secondsSince = time => (now() - time) / 1e3;\n\nclass ConnectionMonitor {\n  constructor(connection) {\n    this.visibilityDidChange = this.visibilityDidChange.bind(this);\n    this.connection = connection;\n    this.reconnectAttempts = 0;\n  }\n  start() {\n    if (!this.isRunning()) {\n      this.startedAt = now();\n      delete this.stoppedAt;\n      this.startPolling();\n      addEventListener(\"visibilitychange\", this.visibilityDidChange);\n      logger.log(`ConnectionMonitor started. stale threshold = ${this.constructor.staleThreshold} s`);\n    }\n  }\n  stop() {\n    if (this.isRunning()) {\n      this.stoppedAt = now();\n      this.stopPolling();\n      removeEventListener(\"visibilitychange\", this.visibilityDidChange);\n      logger.log(\"ConnectionMonitor stopped\");\n    }\n  }\n  isRunning() {\n    return this.startedAt && !this.stoppedAt;\n  }\n  recordPing() {\n    this.pingedAt = now();\n  }\n  recordConnect() {\n    this.reconnectAttempts = 0;\n    this.recordPing();\n    delete this.disconnectedAt;\n    logger.log(\"ConnectionMonitor recorded connect\");\n  }\n  recordDisconnect() {\n    this.disconnectedAt = now();\n    logger.log(\"ConnectionMonitor recorded disconnect\");\n  }\n  startPolling() {\n    this.stopPolling();\n    this.poll();\n  }\n  stopPolling() {\n    clearTimeout(this.pollTimeout);\n  }\n  poll() {\n    this.pollTimeout = setTimeout((() => {\n      this.reconnectIfStale();\n      this.poll();\n    }), this.getPollInterval());\n  }\n  getPollInterval() {\n    const {staleThreshold: staleThreshold, reconnectionBackoffRate: reconnectionBackoffRate} = this.constructor;\n    const backoff = Math.pow(1 + reconnectionBackoffRate, Math.min(this.reconnectAttempts, 10));\n    const jitterMax = this.reconnectAttempts === 0 ? 1 : reconnectionBackoffRate;\n    const jitter = jitterMax * Math.random();\n    return staleThreshold * 1e3 * backoff * (1 + jitter);\n  }\n  reconnectIfStale() {\n    if (this.connectionIsStale()) {\n      logger.log(`ConnectionMonitor detected stale connection. reconnectAttempts = ${this.reconnectAttempts}, time stale = ${secondsSince(this.refreshedAt)} s, stale threshold = ${this.constructor.staleThreshold} s`);\n      this.reconnectAttempts++;\n      if (this.disconnectedRecently()) {\n        logger.log(`ConnectionMonitor skipping reopening recent disconnect. time disconnected = ${secondsSince(this.disconnectedAt)} s`);\n      } else {\n        logger.log(\"ConnectionMonitor reopening\");\n        this.connection.reopen();\n      }\n    }\n  }\n  get refreshedAt() {\n    return this.pingedAt ? this.pingedAt : this.startedAt;\n  }\n  connectionIsStale() {\n    return secondsSince(this.refreshedAt) > this.constructor.staleThreshold;\n  }\n  disconnectedRecently() {\n    return this.disconnectedAt && secondsSince(this.disconnectedAt) < this.constructor.staleThreshold;\n  }\n  visibilityDidChange() {\n    if (document.visibilityState === \"visible\") {\n      setTimeout((() => {\n        if (this.connectionIsStale() || !this.connection.isOpen()) {\n          logger.log(`ConnectionMonitor reopening stale connection on visibilitychange. visibilityState = ${document.visibilityState}`);\n          this.connection.reopen();\n        }\n      }), 200);\n    }\n  }\n}\n\nConnectionMonitor.staleThreshold = 6;\n\nConnectionMonitor.reconnectionBackoffRate = .15;\n\nvar INTERNAL = {\n  message_types: {\n    welcome: \"welcome\",\n    disconnect: \"disconnect\",\n    ping: \"ping\",\n    confirmation: \"confirm_subscription\",\n    rejection: \"reject_subscription\"\n  },\n  disconnect_reasons: {\n    unauthorized: \"unauthorized\",\n    invalid_request: \"invalid_request\",\n    server_restart: \"server_restart\"\n  },\n  default_mount_path: \"/cable\",\n  protocols: [ \"actioncable-v1-json\", \"actioncable-unsupported\" ]\n};\n\nconst {message_types: message_types, protocols: protocols} = INTERNAL;\n\nconst supportedProtocols = protocols.slice(0, protocols.length - 1);\n\nconst indexOf = [].indexOf;\n\nclass Connection {\n  constructor(consumer) {\n    this.open = this.open.bind(this);\n    this.consumer = consumer;\n    this.subscriptions = this.consumer.subscriptions;\n    this.monitor = new ConnectionMonitor(this);\n    this.disconnected = true;\n  }\n  send(data) {\n    if (this.isOpen()) {\n      this.webSocket.send(JSON.stringify(data));\n      return true;\n    } else {\n      return false;\n    }\n  }\n  open() {\n    if (this.isActive()) {\n      logger.log(`Attempted to open WebSocket, but existing socket is ${this.getState()}`);\n      return false;\n    } else {\n      logger.log(`Opening WebSocket, current state is ${this.getState()}, subprotocols: ${protocols}`);\n      if (this.webSocket) {\n        this.uninstallEventHandlers();\n      }\n      this.webSocket = new adapters.WebSocket(this.consumer.url, protocols);\n      this.installEventHandlers();\n      this.monitor.start();\n      return true;\n    }\n  }\n  close({allowReconnect: allowReconnect} = {\n    allowReconnect: true\n  }) {\n    if (!allowReconnect) {\n      this.monitor.stop();\n    }\n    if (this.isOpen()) {\n      return this.webSocket.close();\n    }\n  }\n  reopen() {\n    logger.log(`Reopening WebSocket, current state is ${this.getState()}`);\n    if (this.isActive()) {\n      try {\n        return this.close();\n      } catch (error) {\n        logger.log(\"Failed to reopen WebSocket\", error);\n      } finally {\n        logger.log(`Reopening WebSocket in ${this.constructor.reopenDelay}ms`);\n        setTimeout(this.open, this.constructor.reopenDelay);\n      }\n    } else {\n      return this.open();\n    }\n  }\n  getProtocol() {\n    if (this.webSocket) {\n      return this.webSocket.protocol;\n    }\n  }\n  isOpen() {\n    return this.isState(\"open\");\n  }\n  isActive() {\n    return this.isState(\"open\", \"connecting\");\n  }\n  isProtocolSupported() {\n    return indexOf.call(supportedProtocols, this.getProtocol()) >= 0;\n  }\n  isState(...states) {\n    return indexOf.call(states, this.getState()) >= 0;\n  }\n  getState() {\n    if (this.webSocket) {\n      for (let state in adapters.WebSocket) {\n        if (adapters.WebSocket[state] === this.webSocket.readyState) {\n          return state.toLowerCase();\n        }\n      }\n    }\n    return null;\n  }\n  installEventHandlers() {\n    for (let eventName in this.events) {\n      const handler = this.events[eventName].bind(this);\n      this.webSocket[`on${eventName}`] = handler;\n    }\n  }\n  uninstallEventHandlers() {\n    for (let eventName in this.events) {\n      this.webSocket[`on${eventName}`] = function() {};\n    }\n  }\n}\n\nConnection.reopenDelay = 500;\n\nConnection.prototype.events = {\n  message(event) {\n    if (!this.isProtocolSupported()) {\n      return;\n    }\n    const {identifier: identifier, message: message, reason: reason, reconnect: reconnect, type: type} = JSON.parse(event.data);\n    switch (type) {\n     case message_types.welcome:\n      this.monitor.recordConnect();\n      return this.subscriptions.reload();\n\n     case message_types.disconnect:\n      logger.log(`Disconnecting. Reason: ${reason}`);\n      return this.close({\n        allowReconnect: reconnect\n      });\n\n     case message_types.ping:\n      return this.monitor.recordPing();\n\n     case message_types.confirmation:\n      this.subscriptions.confirmSubscription(identifier);\n      return this.subscriptions.notify(identifier, \"connected\");\n\n     case message_types.rejection:\n      return this.subscriptions.reject(identifier);\n\n     default:\n      return this.subscriptions.notify(identifier, \"received\", message);\n    }\n  },\n  open() {\n    logger.log(`WebSocket onopen event, using '${this.getProtocol()}' subprotocol`);\n    this.disconnected = false;\n    if (!this.isProtocolSupported()) {\n      logger.log(\"Protocol is unsupported. Stopping monitor and disconnecting.\");\n      return this.close({\n        allowReconnect: false\n      });\n    }\n  },\n  close(event) {\n    logger.log(\"WebSocket onclose event\");\n    if (this.disconnected) {\n      return;\n    }\n    this.disconnected = true;\n    this.monitor.recordDisconnect();\n    return this.subscriptions.notifyAll(\"disconnected\", {\n      willAttemptReconnect: this.monitor.isRunning()\n    });\n  },\n  error() {\n    logger.log(\"WebSocket onerror event\");\n  }\n};\n\nconst extend = function(object, properties) {\n  if (properties != null) {\n    for (let key in properties) {\n      const value = properties[key];\n      object[key] = value;\n    }\n  }\n  return object;\n};\n\nclass Subscription {\n  constructor(consumer, params = {}, mixin) {\n    this.consumer = consumer;\n    this.identifier = JSON.stringify(params);\n    extend(this, mixin);\n  }\n  perform(action, data = {}) {\n    data.action = action;\n    return this.send(data);\n  }\n  send(data) {\n    return this.consumer.send({\n      command: \"message\",\n      identifier: this.identifier,\n      data: JSON.stringify(data)\n    });\n  }\n  unsubscribe() {\n    return this.consumer.subscriptions.remove(this);\n  }\n}\n\nclass SubscriptionGuarantor {\n  constructor(subscriptions) {\n    this.subscriptions = subscriptions;\n    this.pendingSubscriptions = [];\n  }\n  guarantee(subscription) {\n    if (this.pendingSubscriptions.indexOf(subscription) == -1) {\n      logger.log(`SubscriptionGuarantor guaranteeing ${subscription.identifier}`);\n      this.pendingSubscriptions.push(subscription);\n    } else {\n      logger.log(`SubscriptionGuarantor already guaranteeing ${subscription.identifier}`);\n    }\n    this.startGuaranteeing();\n  }\n  forget(subscription) {\n    logger.log(`SubscriptionGuarantor forgetting ${subscription.identifier}`);\n    this.pendingSubscriptions = this.pendingSubscriptions.filter((s => s !== subscription));\n  }\n  startGuaranteeing() {\n    this.stopGuaranteeing();\n    this.retrySubscribing();\n  }\n  stopGuaranteeing() {\n    clearTimeout(this.retryTimeout);\n  }\n  retrySubscribing() {\n    this.retryTimeout = setTimeout((() => {\n      if (this.subscriptions && typeof this.subscriptions.subscribe === \"function\") {\n        this.pendingSubscriptions.map((subscription => {\n          logger.log(`SubscriptionGuarantor resubscribing ${subscription.identifier}`);\n          this.subscriptions.subscribe(subscription);\n        }));\n      }\n    }), 500);\n  }\n}\n\nclass Subscriptions {\n  constructor(consumer) {\n    this.consumer = consumer;\n    this.guarantor = new SubscriptionGuarantor(this);\n    this.subscriptions = [];\n  }\n  create(channelName, mixin) {\n    const channel = channelName;\n    const params = typeof channel === \"object\" ? channel : {\n      channel: channel\n    };\n    const subscription = new Subscription(this.consumer, params, mixin);\n    return this.add(subscription);\n  }\n  add(subscription) {\n    this.subscriptions.push(subscription);\n    this.consumer.ensureActiveConnection();\n    this.notify(subscription, \"initialized\");\n    this.subscribe(subscription);\n    return subscription;\n  }\n  remove(subscription) {\n    this.forget(subscription);\n    if (!this.findAll(subscription.identifier).length) {\n      this.sendCommand(subscription, \"unsubscribe\");\n    }\n    return subscription;\n  }\n  reject(identifier) {\n    return this.findAll(identifier).map((subscription => {\n      this.forget(subscription);\n      this.notify(subscription, \"rejected\");\n      return subscription;\n    }));\n  }\n  forget(subscription) {\n    this.guarantor.forget(subscription);\n    this.subscriptions = this.subscriptions.filter((s => s !== subscription));\n    return subscription;\n  }\n  findAll(identifier) {\n    return this.subscriptions.filter((s => s.identifier === identifier));\n  }\n  reload() {\n    return this.subscriptions.map((subscription => this.subscribe(subscription)));\n  }\n  notifyAll(callbackName, ...args) {\n    return this.subscriptions.map((subscription => this.notify(subscription, callbackName, ...args)));\n  }\n  notify(subscription, callbackName, ...args) {\n    let subscriptions;\n    if (typeof subscription === \"string\") {\n      subscriptions = this.findAll(subscription);\n    } else {\n      subscriptions = [ subscription ];\n    }\n    return subscriptions.map((subscription => typeof subscription[callbackName] === \"function\" ? subscription[callbackName](...args) : undefined));\n  }\n  subscribe(subscription) {\n    if (this.sendCommand(subscription, \"subscribe\")) {\n      this.guarantor.guarantee(subscription);\n    }\n  }\n  confirmSubscription(identifier) {\n    logger.log(`Subscription confirmed ${identifier}`);\n    this.findAll(identifier).map((subscription => this.guarantor.forget(subscription)));\n  }\n  sendCommand(subscription, command) {\n    const {identifier: identifier} = subscription;\n    return this.consumer.send({\n      command: command,\n      identifier: identifier\n    });\n  }\n}\n\nclass Consumer {\n  constructor(url) {\n    this._url = url;\n    this.subscriptions = new Subscriptions(this);\n    this.connection = new Connection(this);\n  }\n  get url() {\n    return createWebSocketURL(this._url);\n  }\n  send(data) {\n    return this.connection.send(data);\n  }\n  connect() {\n    return this.connection.open();\n  }\n  disconnect() {\n    return this.connection.close({\n      allowReconnect: false\n    });\n  }\n  ensureActiveConnection() {\n    if (!this.connection.isActive()) {\n      return this.connection.open();\n    }\n  }\n}\n\nfunction createWebSocketURL(url) {\n  if (typeof url === \"function\") {\n    url = url();\n  }\n  if (url && !/^wss?:/i.test(url)) {\n    const a = document.createElement(\"a\");\n    a.href = url;\n    a.href = a.href;\n    a.protocol = a.protocol.replace(\"http\", \"ws\");\n    return a.href;\n  } else {\n    return url;\n  }\n}\n\nfunction createConsumer(url = getConfig(\"url\") || INTERNAL.default_mount_path) {\n  return new Consumer(url);\n}\n\nfunction getConfig(name) {\n  const element = document.head.querySelector(`meta[name='action-cable-${name}']`);\n  if (element) {\n    return element.getAttribute(\"content\");\n  }\n}\n\nexport { Connection, ConnectionMonitor, Consumer, INTERNAL, Subscription, SubscriptionGuarantor, Subscriptions, adapters, createConsumer, createWebSocketURL, getConfig, logger };\n", "// Action Cable provides the framework to deal with WebSockets in Rails.\n// You can generate new channels where WebSocket features live using the `bin/rails generate channel` command.\n\nimport { createConsumer } from \"@rails/actioncable\"\n\nexport default createConsumer()\n", "import consumer from \"./consumer\"\n\nconsumer.subscriptions.create(\"NotificationChannel\", {\n  connected() {\n    // Called when the subscription is ready for use on the server\n  },\n\n  disconnected() {\n    // Called when the subscription has been terminated by the server\n  },\n\n  received(data) {\n    // Called when there's incoming data on the websocket for this channel\n    console.log(\"received notification data \", data);\n    //\u8BA9\u901A\u77E5\u6807\u8BC6\u663E\u793A class notification-count\n    document.querySelectorAll('.notification-unread').forEach((element) => {\n        element.classList.remove('d-none');\n    });\n  }\n});\n", "import consumer from \"./consumer\"\n\nlet syncLog = []\n\nfunction addLogEntry(message, type = 'info') {\n  const logEl = document.getElementById('leiphone-sync-detail-log')\n  if (!logEl) return\n  \n  const timestamp = new Date().toLocaleTimeString('zh-CN', { hour12: false })\n  const icon = type === 'success' ? '\u2713' : type === 'error' ? '\u2717' : type === 'warning' ? '\u26A0' : '\u2192'\n  const color = type === 'success' ? 'text-success' : type === 'error' ? 'text-danger' : type === 'warning' ? 'text-warning' : 'text-muted'\n  \n  const entry = document.createElement('div')\n  entry.className = `mb-1 ${color}`\n  entry.innerHTML = `<span class=\"text-secondary\">[${timestamp}]</span> ${icon} ${message}`\n  \n  // \u6E05\u9664\u521D\u59CB\u63D0\u793A\n  if (syncLog.length === 0) {\n    logEl.innerHTML = ''\n  }\n  \n  logEl.appendChild(entry)\n  logEl.scrollTop = logEl.scrollHeight  // \u81EA\u52A8\u6EDA\u52A8\u5230\u5E95\u90E8\n  syncLog.push({ time: timestamp, message, type })\n}\n\nfunction updateProgressUI(data) {\n  const progressContainer = document.getElementById('leiphone-sync-progress')\n  const progressBar = document.getElementById('leiphone-sync-progress-bar')\n  const messageEl = document.getElementById('leiphone-sync-message')\n  const resultEl = document.getElementById('leiphone-sync-result')\n\n  if (!progressContainer || !progressBar || !messageEl || !resultEl) return\n\n  progressContainer.classList.remove('d-none')\n  \n  // \u53EA\u6709\u5F53\u8FDB\u5EA6 > 0 \u65F6\u624D\u66F4\u65B0\u8FDB\u5EA6\u6761\u6587\u672C\uFF0C\u907F\u514D\u6B8B\u7559 0%\n  const progressText = data.progress > 0 ? `${data.progress}%` : ''\n  progressBar.style.width = `${data.progress}%`\n  progressBar.setAttribute('aria-valuenow', data.progress)\n  progressBar.textContent = progressText\n  \n  messageEl.textContent = data.message\n\n  // \u6DFB\u52A0\u8BE6\u7EC6\u65E5\u5FD7\n  if (data.message && data.message !== '\u7B49\u5F85\u540C\u6B65...') {\n    const logType = data.status === 'failed' ? 'error' : data.status === 'completed' ? 'success' : 'info'\n    addLogEntry(`${data.message} (${data.progress}%)`, logType)\n  }\n\n  if (data.status === 'completed') {\n    const result = data.result || {}\n    addLogEntry(`\u540C\u6B65\u5B8C\u6210\uFF01\u65B0\u589E ${result.new_conferences || 0} \u4E2A\u4E13\u533A\uFF0C${result.new_articles || 0} \u7BC7\u6587\u7AE0`, 'success')\n    resultEl.innerHTML = `\n      <div class=\"alert alert-success mt-3\">\n        <strong>\u540C\u6B65\u5B8C\u6210\uFF01</strong><br>\n        \u65B0\u589E\u4E13\u533A\uFF1A<strong>${result.new_conferences || 0}</strong> \u4E2A<br>\n        \u66F4\u65B0\u4E13\u533A\uFF1A<strong>${result.updated_conferences || 0}</strong> \u4E2A<br>\n        \u65B0\u589E\u6587\u7AE0\uFF1A<strong>${result.new_articles || 0}</strong> \u7BC7<br>\n        \u8DF3\u8FC7\u6587\u7AE0\uFF1A<strong>${result.skipped_articles || 0}</strong> \u7BC7<br>\n        \u5931\u8D25\uFF1A<strong>${result.failed || 0}</strong> \u7BC7\n      </div>\n    `\n  } else if (data.status === 'failed') {\n    addLogEntry(`\u540C\u6B65\u5931\u8D25\uFF1A${data.error_message}`, 'error')\n    resultEl.innerHTML = `\n      <div class=\"alert alert-danger mt-3\">\n        <strong>\u540C\u6B65\u5931\u8D25\uFF1A</strong>${data.error_message || '\u672A\u77E5\u9519\u8BEF'}\n      </div>\n    `\n  }\n}\n\nfunction initSyncProgressChannel() {\n  const syncButton = document.getElementById('leiphone-sync-btn')\n  if (!syncButton) return\n\n  // \u9632\u6B62\u91CD\u590D\u7ED1\u5B9A\uFF1A\u5148\u79FB\u9664\u65E7\u7684\u4E8B\u4EF6\u76D1\u542C\u5668\n  const newSyncButton = syncButton.cloneNode(true)\n  syncButton.parentNode.replaceChild(newSyncButton, syncButton)\n\n  const channel = consumer.subscriptions.create(\"SyncProgressChannel\", {\n    connected() {\n      console.log(\"[SyncProgressChannel] connected\")\n    },\n\n    disconnected() {\n      console.log(\"[SyncProgressChannel] disconnected\")\n    },\n\n    received(data) {\n      console.log(\"[SyncProgressChannel] received:\", data)\n      updateProgressUI(data)\n    }\n  })\n\n  syncButton.addEventListener('click', function(event) {\n    event.preventDefault()\n    // \u79FB\u9664\u786E\u8BA4\u6B65\u9AA4\uFF0C\u76F4\u63A5\u542F\u52A8\u540C\u6B65\n\n    // \u91CD\u7F6E\u72B6\u6001\n    syncLog = []\n    const progressContainer = document.getElementById('leiphone-sync-progress')\n    const progressBar = document.getElementById('leiphone-sync-progress-bar')\n    const messageEl = document.getElementById('leiphone-sync-message')\n    const resultEl = document.getElementById('leiphone-sync-result')\n    const logEl = document.getElementById('leiphone-sync-detail-log')\n\n    if (progressContainer) progressContainer.classList.remove('d-none')\n    if (progressBar) {\n      progressBar.style.width = '0%'\n      progressBar.setAttribute('aria-valuenow', 0)\n      progressBar.textContent = ''  // \u4E0D\u663E\u793A 0%\uFF0C\u7B49\u5F85\u7B2C\u4E00\u6B21\u63A8\u9001\n    }\n    if (messageEl) messageEl.textContent = '\u6B63\u5728\u542F\u52A8\u540C\u6B65\u4EFB\u52A1...'\n    if (resultEl) resultEl.innerHTML = ''\n    if (logEl) logEl.innerHTML = '<div class=\"text-muted\">\u540C\u6B65\u65E5\u5FD7\u5C06\u5728\u6B64\u663E\u793A...</div>'\n\n    addLogEntry('\u6B63\u5728\u542F\u52A8\u540C\u6B65\u4EFB\u52A1...', 'info')\n\n    fetch(syncButton.dataset.url, {\n      method: 'POST',\n      headers: {\n        'Accept': 'application/json',\n        'X-CSRF-Token': document.querySelector('meta[name=csrf-token]')?.content\n      },\n      credentials: 'same-origin'\n    })\n    .then(response => {\n      if (!response.ok) {\n        throw new Error('\u540C\u6B65\u4EFB\u52A1\u542F\u52A8\u5931\u8D25')\n      }\n      return response.json()\n    })\n    .then(data => {\n      if (messageEl) messageEl.textContent = data.message || '\u540C\u6B65\u4EFB\u52A1\u5DF2\u542F\u52A8'\n    })\n    .catch(error => {\n      if (messageEl) messageEl.textContent = error.message\n      if (resultEl) resultEl.innerHTML = `<div class=\"alert alert-danger mt-2\">${error.message}</div>`\n    })\n  })\n}\n\ndocument.addEventListener('DOMContentLoaded', initSyncProgressChannel)\ndocument.addEventListener('turbo:load', initSyncProgressChannel)\n", "// Import all the channels to be used by Action Cable\nimport \"./notification_channel\"\nimport \"./sync_progress_channel\"\n", "import { Turbo } from \"@hotwired/turbo-rails\"\nwindow.Turbo = Turbo\nimport \"./commons\"\nimport \"./controllers\"\nimport \"./config\"\nimport \"./channels\"\n\n\nimport {initEmojiData} from \"./commons/codemirror-suggestions/emojis\";\n\n(async () => {\n    await initEmojiData()\n})();\nconsole.log(document.getElementById(\"#editor\"))\nif(document.getElementById(\"#editor\")){\n  console.log(83838383883838383)\n  \n}\n\ndocument.addEventListener(\"turbo:before-fetch-request\", function(e){\n    Turbo.navigator.delegate.adapter.showProgressBar();\n})\n\ndocument.addEventListener(\"turbo:before-fetch-response\", function(e) { //\n    Turbo.navigator.delegate.adapter.progressBar.hide();\n})\n\n\n// \u5728<turbo-frame>\u5143\u7D20\u6E32\u67D3\u5176\u89C6\u56FE\u540E\u7ACB\u5373\u89E6\u53D1\u3002\u901A\u8FC7event.detail.fetchResponse\u5C5E\u6027\u83B7\u53D6FetchResponse\u5BF9\u8C61\u3002\ndocument.addEventListener(\"turbo:frame-render\", function(e) { //\n    // https://fslightbox.com/javascript/documentation/installation#html\n    Turbo.navigator.delegate.adapter.progressBar.hide();\n})\n\n\ndocument.addEventListener(\"turbo:before-frame-render\", function(e) {\n\n})\n\n// \u5728\u8868\u5355\u63D0\u4EA4\u542F\u52A8\u7684\u7F51\u7EDC\u8BF7\u6C42\u5B8C\u6210\u540E\u89E6\u53D1\u3002\u901A\u8FC7event.detail.formSubmission\u83B7\u53D6FormSubmission\u5BF9\u8C61\u3002\ndocument.addEventListener(\"turbo:submit-end\", function(e) {\n    Turbo.navigator.delegate.adapter.progressBar.hide();\n});\n\n// \u5F53\u54CD\u5E94\u5230<turbo-frame>\u5143\u7D20\u8BF7\u6C42\u4E0D\u5305\u542B\u5339\u914D\u7684<turbo-frame>\u5143\u7D20\u65F6\u89E6\u53D1\u3002\ndocument.addEventListener(\"turbo:frame-missing\", function(e) {\n    Turbo.navigator.delegate.adapter.progressBar.hide();\n    if (e.detail.response && e.detail.response.url.includes(\"/account/login\")) {\n        Turbo.navigator.delegate.visit(\"/account/login\");\n        console.log(\"redirect to login page: \", e.detail.response.url);\n    }\n})\n\nwindow.initBootstrapTooltip =(element, selector) =>{\n    const tooltipTriggerList = [].slice.call(element.querySelectorAll(selector))\n    tooltipTriggerList.map(function (tooltipTriggerEl) {\n        return new window.bootstrap.Tooltip(tooltipTriggerEl)\n    })\n}\n\n"],
  "mappings": "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KAAM,IAAM,KAAM,IAAM,KAAM,GAAM,KAAM,GAAM,IAAM,KAAM,KAAM,KAAM,IAAM,KAAM,KAAM,GAAM,KAAM,IAAM,IAAM,IAAM,KAAM,IAAM,KAAM,IAAM,IAAM,KAAM,KAAM,IAAM,KAAM,IAAM,KAAM,IAAM,KAAM,GAAM,KAAM,IAAM,KAAM,KAAM,IAAM,KAAM,KAAM,KAAM,IAAM,IAAM,IAAM,IAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAM,IAAM,IAAM,KAAM,IAAM,KAAM,GAAM,KAAM,IAAM,IAAM,KAAM,KAAM,IAAM,KAAM,IAAM,KAAM,KAAM,KAAM,IAAM,KAAM,KAAM,KAAM,KAAM,IAAM,IAAM,KAAM,KAAM,KAAM,KAAM,IAAM,IAAM,KAAM,IAAM,KAAM,IAAM,IAAM,KAAM,KAAM,KAAM,IAAM,KAAM,IAAM,IAAM,KAAM,IAAM,KAAM,IAAM,KAAM,IAAM,IAAM,KAAM,KAAM,IAAM,KAAM,KAAM,IAAM,KAAM,IAAM,IAAM,KAAM,KAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,KAAM,KAAM,KAAM,IAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAM,KAAM,KAAM,KAAM,IAAM,KAAM,KAAM,IAAM,KAAM,KAAM,KAAM,KAAM,KAAM,GAAM,KAAM,KAAM,IAAM,IAAM,IAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAM,IAAM,KAAM,KAAM,KAAM,KAAM,IAAM,KAAM,KAAM,IAAM,GAAM,KAAM,IAAM,IAAM,IAAM,IAAM,KAAM,KAAM,KAAM,IAAM,KAAM,KAAM,KAAM,KAAM,IAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAM,KAAM,KAAM,KAAM,IAAM,IAAM,KAAM,KAAM,KAAM,KAAM,IAAM,KAAM,KAAM,IAAM,KAAM,IAAM,KAAM,IAAM,IAAM,KAAM,IAAM,KAAM,EAAI;AACzgD,MAAM,KAAI,CAAC,IAAM,GAAM,KAAM,KAAM,IAAM,IAAM,KAAM,IAAM,KAAM,IAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAM,KAAM,KAAM,IAAM,KAAM,KAAM,IAAM,KAAM,IAAM,IAAM,KAAM,KAAM,KAAM,KAAM,IAAM,KAAM,KAAM,IAAM,KAAM,KAAM,IAAM,IAAM,KAAM,IAAM,KAAM,IAAM,IAAM,KAAM,KAAM,IAAM,GAAM,IAAM,KAAM,KAAM,IAAM,KAAM,IAAM,KAAM,KAAM,IAAM,KAAM,IAAM,KAAM,KAAM,KAAM,IAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAM,KAAM,KAAM,IAAM,KAAM,IAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAM,IAAM,KAAM,KAAM,KAAM,KAAM,IAAM,IAAM,IAAM,IAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,GAAM,KAAM,KAAM,KAAM,IAAM,KAAM,KAAM,IAAM,GAAM,KAAM,KAAM,IAAM,GAAM,KAAM,IAAM,IAAM,KAAM,KAAM,IAAM,IAAM,GAAM,KAAM,KAAM,KAAM,GAAM,GAAM,IAAM,KAAM,KAAM,IAAM,KAAM,IAAM,IAAM,IAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAM,KAAM,KAAM,IAAM,KAAM,KAAM,KAAM,IAAM,KAAM,IAAM,KAAM,KAAM,KAAM,IAAM,KAAM,IAAM,KAAM,IAAM,IAAM,KAAM,KAAM,KAAM,KAAM,IAAM,IAAM,KAAM,IAAM,KAAM,IAAM,KAAM,IAAM,IAAM,IAAM,KAAM,KAAM,KAAM,IAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAM,KAAM,IAAM,KAAM,KAAM,IAAM,KAAM,GAAM,KAAM,IAAM,KAAM,IAAM,IAAM,IAAM,IAAM,KAAM,KAAM,IAAM,IAAM,IAAM,KAAM,KAAM,IAAM,KAAM,IAAM,IAAM,IAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAM,IAAM,KAAM,IAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAM,KAAM,IAAM,KAAM,IAAM,IAAM,IAAM,GAAM,KAAM,KAAM,KAAM,KAAM,IAAM,KAAM,KAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAI;AAGzgD,MAAMC,MAAK,CAAC,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,UAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,YAAY,YAAY,YAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,YAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,GAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,UAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,UAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,YAAY,YAAY,WAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,UAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,WAAY,WAAY,YAAY,YAAY,WAAY,WAAY,YAAY,YAAY,WAAY,WAAY,WAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,UAAY,YAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,WAAY,YAAY,YAAY,YAAY,SAAU;AAC1gG,MAAM,KAAK,CAAC,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,UAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,UAAY,YAAY,YAAY,YAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,WAAY,YAAY,WAAY,YAAY,WAAY,WAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,GAAY,WAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,UAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,WAAY,YAAY,YAAY,WAAY,WAAY,WAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,UAAY,UAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,WAAY,WAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,SAAU;AAC1gG,MAAM,KAAK,CAAC,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,UAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,UAAY,YAAY,WAAY,YAAY,WAAY,YAAY,UAAY,YAAY,WAAY,WAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,WAAY,YAAY,WAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,WAAY,YAAY,WAAY,YAAY,YAAY,YAAY,GAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,UAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,WAAY,YAAY,YAAY,WAAY,WAAY,WAAY,YAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,WAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,UAAY,YAAY,WAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,YAAY,YAAY,YAAY,SAAU;AAC1gG,MAAM,KAAK,CAAC,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,UAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,UAAY,YAAY,WAAY,YAAY,WAAY,YAAY,UAAY,YAAY,WAAY,WAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,WAAY,YAAY,WAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,WAAY,YAAY,WAAY,YAAY,YAAY,YAAY,GAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,UAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,WAAY,YAAY,YAAY,WAAY,WAAY,WAAY,YAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,WAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,UAAY,YAAY,WAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,YAAY,YAAY,YAAY,SAAU;AAG1gG,MAAM,KAAK,CAAC,YAAY,YAAY,WAAY,WAAY,YAAY,WAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,UAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,WAAY,WAAY,UAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,WAAY,YAAY,UAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,UAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,GAAY,WAAY,WAAY,WAAY,YAAY,YAAY,WAAY,YAAY,WAAY,WAAY,YAAY,YAAY,WAAY,WAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,WAAY,WAAY,YAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,WAAY,YAAY,WAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,WAAY,YAAY,WAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,UAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,WAAY,YAAY,WAAY,YAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,UAAU;AAC1gG,MAAM,KAAK,CAAC,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,UAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,WAAY,YAAY,YAAY,WAAY,YAAY,YAAY,WAAY,WAAY,UAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,WAAY,YAAY,WAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,UAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,GAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,YAAY,WAAY,YAAY,WAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,YAAY,YAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,WAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,WAAY,WAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,UAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,YAAY,WAAY,YAAY,YAAY,WAAY,YAAY,YAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,UAAY,YAAY,YAAY,WAAY,YAAY,YAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,UAAU;AAC1gG,MAAM,KAAK,CAAC,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,UAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,UAAY,YAAY,YAAY,WAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,WAAY,UAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,WAAY,GAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,WAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,WAAY,YAAY,WAAY,YAAY,WAAY,WAAY,YAAY,YAAY,YAAY,WAAY,WAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,WAAY,YAAY,WAAY,YAAY,WAAY,WAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,UAAY,YAAY,YAAY,WAAY,YAAY,YAAY,WAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,WAAY,YAAY,YAAY,UAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,UAAU;AAC1gG,MAAM,KAAK,CAAC,YAAY,YAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,UAAY,YAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,WAAY,UAAY,YAAY,UAAY,WAAY,YAAY,YAAY,WAAY,YAAY,YAAY,UAAY,WAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,GAAY,YAAY,WAAY,WAAY,YAAY,WAAY,YAAY,YAAY,WAAY,WAAY,YAAY,YAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,WAAY,WAAY,WAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,UAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,WAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,UAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,WAAY,YAAY,YAAY,WAAY,YAAY,WAAY,YAAY,YAAY,YAAY,WAAY,YAAY,UAAU;AAG1gG,MAAM,KAAK,CAAC,GAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,WAAY,WAAY,YAAY,WAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,UAAY,WAAY,WAAY,WAAY,YAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,UAAU;AAC1gG,MAAMC,MAAK,CAAC,GAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,WAAY,YAAY,WAAY,UAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,WAAY,YAAY,WAAY,UAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,UAAU;AAC1gG,MAAM,KAAK,CAAC,GAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,UAAY,WAAY,WAAY,WAAY,WAAY,YAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,WAAY,WAAY,WAAY,YAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,UAAY,WAAY,WAAY,YAAY,WAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,UAAY,WAAY,WAAY,YAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,UAAU;AAC1gG,MAAM,KAAK,CAAC,GAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,UAAU;AAUpgG,MAAO,MAAP,MAAO,KAAG;QAKd,IAAI,MAAG;AAAiB,iBAAO,uBAAA,MAAI,UAAA,GAAA,EAAM,MAAK;QAAI;QAElD,YAAY,KAAe;AAN3B,mBAAA,IAAA,MAAA,MAAA;AACA,kBAAA,IAAA,MAAA,MAAA;AACA,kBAAA,IAAA,MAAA,MAAA;AAKE,cAAI,EAAE,gBAAgB,OAAM;AAC1B,kBAAM,MAAM,qCAAqC;;AAGnD,iCAAA,MAAI,UAAQ,IAAI,WAAW,GAAG,GAAC,GAAA;AAE/B,gBAAM,SAAS,eAAe,KAAK,IAAI,MAAM;AAC7C,cAAI,UAAU,MAAM;AAClB,kBAAM,IAAI,UAAU,+CAA+C;;AAIrE,iCAAA,MAAI,SAAO,CAAA,GAAE,GAAA;AAGb,iCAAA,MAAI,SAAO,CAAA,GAAE,GAAA;AAEb,mBAAS,IAAI,GAAG,KAAK,QAAQ,KAAK;AAChC,mCAAA,MAAI,SAAA,GAAA,EAAK,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;AAC1B,mCAAA,MAAI,SAAA,GAAA,EAAK,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;;AAG5B,gBAAM,iBAAiB,SAAS,KAAK;AACrC,gBAAM,KAAK,KAAK,IAAI,SAAS;AAG7B,gBAAM,KAAK,eAAe,KAAK,GAAG;AAGlC,cAAIC;AACJ,mBAAS,IAAI,GAAG,IAAI,IAAI,KAAK;AAC3B,YAAAA,SAAQ,KAAK;AACb,mCAAA,MAAI,SAAA,GAAA,EAAKA,MAAK,EAAE,IAAI,CAAC,IAAI,GAAG,CAAC;AAC7B,mCAAA,MAAI,SAAA,GAAA,EAAK,SAASA,MAAK,EAAE,IAAI,CAAC,IAAI,GAAG,CAAC;;AAIxC,cAAI,cAAc;AAClB,cAAIC,KAAI,IAAIC;AACZ,iBAAOD,KAAI,eAAe;AACxB,YAAAC,MAAK,GAAG,KAAK,CAAC;AACd,eAAG,CAAC,KAAOL,GAAGK,OAAM,KAAM,GAAI,KAAK,KACxBL,GAAGK,OAAO,IAAK,GAAI,KAAK,KACxBL,GAAGK,MAAY,GAAI,KAAM,IACzBL,GAAGK,OAAM,KAAM,GAAI,IACnB,KAAK,WAAW,KAAK;AAChC,2BAAe;AAGf,gBAAI,MAAM,GAAG;AACX,uBAASC,KAAI,GAAGA,KAAI,IAAIA,MAAK;AAC3B,mBAAGA,EAAC,KAAK,GAAGA,KAAI,CAAC;;mBAId;AACL,uBAASA,KAAI,GAAGA,KAAK,KAAK,GAAIA,MAAK;AACjC,mBAAGA,EAAC,KAAK,GAAGA,KAAI,CAAC;;AAEnB,cAAAD,MAAK,GAAI,KAAK,IAAK,CAAC;AAEpB,iBAAG,KAAK,CAAC,KAAML,GAAGK,MAAY,GAAI,IACnBL,GAAGK,OAAO,IAAK,GAAI,KAAM,IACzBL,GAAGK,OAAM,KAAM,GAAI,KAAK,KACxBL,GAAGK,OAAM,KAAM,GAAI,KAAK;AAEvC,uBAASC,KAAK,KAAK,IAAK,GAAGA,KAAI,IAAIA,MAAK;AACtC,mBAAGA,EAAC,KAAK,GAAGA,KAAI,CAAC;;;AAKrB,gBAAI,IAAI,GAAGC,IAAG;AACd,mBAAO,IAAI,MAAMH,KAAI,eAAe;AAClC,cAAAG,KAAIH,MAAK;AACT,kBAAIA,KAAI;AACR,qCAAA,MAAI,SAAA,GAAA,EAAKG,EAAC,EAAE,CAAC,IAAI,GAAG,CAAC;AACrB,qCAAA,MAAI,SAAA,GAAA,EAAK,SAASA,EAAC,EAAE,CAAC,IAAI,GAAG,GAAG;AAChC,cAAAH;;;AAKJ,mBAASG,KAAI,GAAGA,KAAI,QAAQA,MAAK;AAC/B,qBAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,cAAAF,MAAK,uBAAA,MAAI,SAAA,GAAA,EAAKE,EAAC,EAAE,CAAC;AAClB,qCAAA,MAAI,SAAA,GAAA,EAAKA,EAAC,EAAE,CAAC,IAAK,GAAIF,OAAM,KAAM,GAAI,IACpBH,IAAIG,OAAM,KAAM,GAAI,IACpB,GAAIA,OAAO,IAAK,GAAI,IACpB,GAAIA,MAAY,GAAI;;;QAG5C;QAEA,QAAQ,WAAqB;AAC3B,cAAI,UAAU,UAAU,IAAI;AAC1B,kBAAM,IAAI,UAAU,2CAA2C;;AAGjE,gBAAM,SAAS,uBAAA,MAAI,SAAA,GAAA,EAAK,SAAS;AACjC,gBAAM,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;AAGrB,cAAID,KAAI,eAAe,SAAS;AAChC,mBAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,YAAAA,GAAE,CAAC,KAAK,uBAAA,MAAI,SAAA,GAAA,EAAK,CAAC,EAAE,CAAC;;AAIvB,mBAASG,KAAI,GAAGA,KAAI,QAAQA,MAAK;AAC/B,qBAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,gBAAE,CAAC,IAAKN,IAAIG,GAAG,CAAC,KAAc,KAAM,GAAI,IAChC,GAAIA,IAAG,IAAI,KAAK,CAAC,KAAK,KAAM,GAAI,IAChC,GAAIA,IAAG,IAAI,KAAK,CAAC,KAAM,IAAK,GAAI,IAChC,GAAIA,IAAG,IAAI,KAAK,CAAC,IAAW,GAAI,IAChC,uBAAA,MAAI,SAAA,GAAA,EAAKG,EAAC,EAAE,CAAC;;AAEvB,YAAAH,KAAI,EAAE,MAAK;;AAIb,gBAAM,SAAS,IAAI,WAAW,EAAE;AAChC,cAAIC,MAAK;AACT,mBAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,YAAAA,MAAK,uBAAA,MAAI,SAAA,GAAA,EAAK,MAAM,EAAE,CAAC;AACvB,mBAAO,IAAI,CAAC,KAASL,GAAGI,GAAG,CAAC,KAAc,KAAM,GAAI,IAAKC,OAAM,MAAO;AACtE,mBAAO,IAAI,IAAI,CAAC,KAAKL,GAAGI,IAAG,IAAI,KAAK,CAAC,KAAK,KAAM,GAAI,IAAKC,OAAM,MAAO;AACtE,mBAAO,IAAI,IAAI,CAAC,KAAKL,GAAGI,IAAG,IAAI,KAAK,CAAC,KAAM,IAAK,GAAI,IAAKC,OAAO,KAAM;AACtE,mBAAO,IAAI,IAAI,CAAC,KAAKL,GAAGI,IAAG,IAAI,KAAK,CAAC,IAAW,GAAI,IAAKC,OAAa;;AAGxE,iBAAO;QACT;QAEA,QAAQ,YAAsB;AAC5B,cAAI,WAAW,UAAU,IAAI;AAC3B,kBAAM,IAAI,UAAU,4CAA4C;;AAGlE,gBAAM,SAAS,uBAAA,MAAI,SAAA,GAAA,EAAK,SAAS;AACjC,gBAAM,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;AAGrB,cAAID,KAAI,eAAe,UAAU;AACjC,mBAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,YAAAA,GAAE,CAAC,KAAK,uBAAA,MAAI,SAAA,GAAA,EAAK,CAAC,EAAE,CAAC;;AAIvB,mBAASG,KAAI,GAAGA,KAAI,QAAQA,MAAK;AAC/B,qBAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,gBAAE,CAAC,IAAK,GAAIH,GAAG,CAAC,KAAc,KAAM,GAAI,IAChC,GAAIA,IAAG,IAAI,KAAK,CAAC,KAAK,KAAM,GAAI,IAChC,GAAIA,IAAG,IAAI,KAAK,CAAC,KAAM,IAAK,GAAI,IAChC,GAAIA,IAAG,IAAI,KAAK,CAAC,IAAW,GAAI,IAChC,uBAAA,MAAI,SAAA,GAAA,EAAKG,EAAC,EAAE,CAAC;;AAEvB,YAAAH,KAAI,EAAE,MAAK;;AAIb,gBAAM,SAAS,IAAI,WAAW,EAAE;AAChC,cAAIC,MAAK;AACT,mBAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,YAAAA,MAAK,uBAAA,MAAI,SAAA,GAAA,EAAK,MAAM,EAAE,CAAC;AACvB,mBAAO,IAAI,CAAC,KAAS,GAAID,GAAG,CAAC,KAAc,KAAM,GAAI,IAAKC,OAAM,MAAO;AACvE,mBAAO,IAAI,IAAI,CAAC,KAAK,GAAID,IAAG,IAAI,KAAK,CAAC,KAAK,KAAM,GAAI,IAAKC,OAAM,MAAO;AACvE,mBAAO,IAAI,IAAI,CAAC,KAAK,GAAID,IAAG,IAAI,KAAK,CAAC,KAAM,IAAK,GAAI,IAAKC,OAAO,KAAM;AACvE,mBAAO,IAAI,IAAI,CAAC,KAAK,GAAID,IAAG,IAAI,KAAK,CAAC,IAAW,GAAI,IAAKC,OAAa;;AAGzE,iBAAO;QACT;;;;;;;ACzNF,MAEsB;AAFtB;;;AAEM,MAAgB,kBAAhB,MAA+B;QAInC,YAAYG,OAAc,KAAiB,KAAS;AAClD,cAAI,OAAO,EAAE,gBAAgB,MAAM;AACjC,kBAAM,IAAI,MAAM,GAAIA,KAAK,kCAAkC;;AAG7D,iBAAO,iBAAiB,MAAM;YAC5B,KAAK,EAAE,YAAY,MAAM,OAAO,IAAI,IAAI,GAAG,EAAC;YAC5C,MAAM,EAAE,YAAY,MAAM,OAAOA,MAAI;WACtC;QACH;;;;;;AChBF,iFAIa;AAJb;;AAEA;;;;;;;;;;;;;;;;;AAEM,MAAO,MAAP,MAAO,aAAY,gBAAe;QAItC,YAAY,KAAiB,IAAe;AAC1C,gBAAM,OAAO,KAAK,IAAG;AAJvB,kBAAA,IAAA,MAAA,MAAA;AACA,yBAAA,IAAA,MAAA,MAAA;AAKE,cAAI,IAAI;AACN,gBAAI,GAAG,SAAS,IAAI;AAClB,oBAAM,IAAI,UAAU,oCAAoC;;AAE1D,YAAAC,wBAAA,MAAI,SAAO,IAAI,WAAW,EAAE,GAAC,GAAA;iBACxB;AACL,YAAAA,wBAAA,MAAI,SAAO,IAAI,WAAW,EAAE,GAAC,GAAA;;AAG/B,UAAAA,wBAAA,MAAI,gBAAc,KAAK,IAAE,GAAA;QAC3B;QAEA,IAAI,KAAE;AAAiB,iBAAO,IAAI,WAAWC,wBAAA,MAAI,SAAA,GAAA,CAAI;QAAG;QAExD,QAAQ,WAAqB;AAC3B,cAAI,UAAU,SAAS,IAAI;AACzB,kBAAM,IAAI,UAAU,uDAAuD;;AAG7E,gBAAM,aAAa,IAAI,WAAW,UAAU,MAAM;AAClD,mBAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK,IAAI;AAC7C,qBAASC,KAAI,GAAGA,KAAI,IAAIA,MAAK;AAC3B,cAAAD,wBAAA,MAAI,gBAAA,GAAA,EAAYC,EAAC,KAAK,UAAU,IAAIA,EAAC;;AAGvC,YAAAF,wBAAA,MAAI,gBAAc,KAAK,IAAI,QAAQC,wBAAA,MAAI,gBAAA,GAAA,CAAW,GAAC,GAAA;AACnD,uBAAW,IAAIA,wBAAA,MAAI,gBAAA,GAAA,GAAa,CAAC;;AAGnC,iBAAO;QACT;QAEA,QAAQ,YAAsB;AAC5B,cAAI,WAAW,SAAS,IAAI;AACxB,kBAAM,IAAI,UAAU,wDAAwD;;AAGhF,gBAAM,YAAY,IAAI,WAAW,WAAW,MAAM;AAClD,mBAAS,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK,IAAI;AAC5C,kBAAM,QAAQ,KAAK,IAAI,QAAQ,WAAW,SAAS,GAAG,IAAI,EAAE,CAAC;AAE7D,qBAASC,KAAI,GAAGA,KAAI,IAAIA,MAAK;AAC3B,wBAAU,IAAIA,EAAC,IAAI,MAAMA,EAAC,IAAID,wBAAA,MAAI,gBAAA,GAAA,EAAYC,EAAC;AAC/C,cAAAD,wBAAA,MAAI,gBAAA,GAAA,EAAYC,EAAC,IAAI,WAAW,IAAIA,EAAC;;;AAI3C,iBAAO;QACT;;;;;;;AC3DF;AAAA;;AAEA;;;;;;;;qLAkCSC,OAAgB;AACrB,cAAM,cAAc,KAAK,cAAc;AAGvC,QAAAC,wBAAA,MAAI,oBAAA,GAAA,EAAgB,IAAIA,wBAAA,MAAI,oBAAA,GAAA,EAAgB,SAAS,WAAW,CAAC;AACjE,QAAAA,wBAAA,MAAI,oBAAA,GAAA,EAAgB,IAAID,MAAK,SAAS,GAAG,WAAW,GAAG,KAAK,WAAW;MACzE;;;;;AC1CF,2GAIa;AAJb;;AAEA;;;;;;;;;;;;;;;;;AAEM,MAAO,MAAP,MAAO,aAAY,gBAAe;QAStC,YAAY,KAAiB,cAAkC;AAC7D,gBAAM,OAAO,KAAK,IAAG;AAPvB,yBAAA,IAAA,MAAA,MAAA;AACA,8BAAA,IAAA,MAAA,MAAA;AAGA,uBAAA,IAAA,MAAA,MAAA;AAKE,UAAAE,wBAAA,MAAI,cAAY,IAAI,WAAW,EAAE,GAAC,GAAA;AAClC,UAAAC,wBAAA,MAAI,cAAA,GAAA,EAAU,KAAK,CAAC;AAEpB,UAAAD,wBAAA,MAAI,gBAAcC,wBAAA,MAAI,cAAA,GAAA,GAAS,GAAA;AAC/B,UAAAD,wBAAA,MAAI,qBAAmB,IAAE,GAAA;AAEzB,cAAI,gBAAgB,MAAM;AAAE,2BAAe;;AAE3C,cAAI,OAAO,iBAAkB,UAAU;AACrC,iBAAK,gBAAgB,YAAY;iBAC5B;AACL,iBAAK,gBAAgB,YAAY;;QAErC;QAEA,IAAI,UAAO;AAAiB,iBAAO,IAAI,WAAWC,wBAAA,MAAI,cAAA,GAAA,CAAS;QAAG;QAElE,gBAAgB,OAAa;AAC3B,cAAI,CAAC,OAAO,UAAU,KAAK,KAAK,QAAQ,KAAK,QAAQ,OAAO,kBAAkB;AAC5E,kBAAM,IAAI,UAAU,uCAAuC;;AAG7D,mBAASC,SAAQ,IAAIA,UAAS,GAAG,EAAEA,QAAO;AACxC,YAAAD,wBAAA,MAAI,cAAA,GAAA,EAAUC,MAAK,IAAI,QAAQ;AAC/B,oBAAQ,KAAK,MAAM,QAAQ,GAAG;;QAElC;QAEA,gBAAgB,OAAiB;AAC/B,cAAI,MAAM,WAAW,IAAI;AACvB,kBAAM,IAAI,UAAU,iDAAiD;;AAGvE,UAAAD,wBAAA,MAAI,cAAA,GAAA,EAAU,IAAI,KAAK;QACzB;QAEA,YAAS;AACP,mBAAS,IAAI,IAAI,KAAK,GAAG,KAAK;AAC5B,gBAAIA,wBAAA,MAAI,cAAA,GAAA,EAAU,CAAC,MAAM,KAAK;AAC5B,cAAAA,wBAAA,MAAI,cAAA,GAAA,EAAU,CAAC,IAAI;mBACd;AACL,cAAAA,wBAAA,MAAI,cAAA,GAAA,EAAU,CAAC;AACf;;;QAGN;QAEA,QAAQ,WAAqB;;AAC3B,gBAAM,YAAY,IAAI,WAAW,SAAS;AAE1C,mBAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;AACzC,gBAAIA,wBAAA,MAAI,qBAAA,GAAA,MAAqB,IAAI;AAC/B,cAAAD,wBAAA,MAAI,gBAAc,KAAK,IAAI,QAAQC,wBAAA,MAAI,cAAA,GAAA,CAAS,GAAC,GAAA;AACjD,cAAAD,wBAAA,MAAI,qBAAmB,GAAC,GAAA;AACxB,mBAAK,UAAS;;AAEhB,sBAAU,CAAC,KAAKC,wBAAA,MAAI,gBAAA,GAAA,EAAYD,wBAAA,MAAA,sBAAA,KAAAC,wBAAA,MAAA,qBAAA,GAAA,GAAAE,MAAA,MAAsB,KAAA,GAAA,GAAAA,GAAA;;AAGxD,iBAAO;QACT;QAEA,QAAQ,YAAsB;AAC5B,iBAAO,KAAK,QAAQ,UAAU;QAChC;;;;;;;AChFF;;AAEA;;;;;ACFA;AAAA;;AAEA;;;;;;ACYM,WAAU,WAAWC,OAAgB;AACvC,QAAIA,MAAK,SAAS,IAAI;AAAE,YAAM,IAAI,UAAU,uBAAuB;;AAEnE,UAAM,SAASA,MAAKA,MAAK,SAAS,CAAC;AACnC,QAAI,SAAS,IAAI;AAAE,YAAM,IAAI,UAAU,kCAAkC;;AAEzE,UAAM,SAASA,MAAK,SAAS;AAC7B,aAAS,IAAI,GAAG,IAAI,QAAQ,KAAK;AAC7B,UAAIA,MAAK,SAAS,CAAC,MAAM,QAAQ;AAC7B,cAAM,IAAI,UAAU,6BAA6B;;;AAIzD,WAAO,IAAI,WAAWA,MAAK,SAAS,GAAG,MAAM,CAAC;EAClD;AA3BA;;;;;;ACDA,MAAAC,aAAA;;;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;;;;;ACFM,WAAU,cAAc,WAAiB;AAC3C,QAAI,OAAO,cAAe,YAAY,CAAC,UAAU,WAAW,IAAI,GAAG;AAC/D,kBAAY,OAAO;;AAEvB,WAAO,aAAa,SAAS;EACjC;AAEM,WAAU,KAAK,OAAwB,QAAc;AACvD,YAAQ,OAAO,KAAK;AACpB,WAAO,MAAM,SAAS,QAAQ;AAAE,cAAQ,MAAM;;AAC9C,WAAO;EACX;AAEM,WAAU,YAAY,UAA6B;AACrD,QAAI,OAAO,aAAc,UAAU;AAC/B,aAAO,YAAY,UAAU,MAAM;;AAEvC,WAAO,aAAa,QAAQ;EAChC;AAEM,WAAU,QAAWC,SAAa,OAAa;AAEjD,UAAM,QAAQ,MAAM,MAAM,oCAAoC;AAC9D,mBAAe,SAAS,MAAM,gBAAgB,QAAQ,KAAK;AAE3D,UAAMC,QAAO,MAAM,CAAC;AACpB,UAAM,OAAO,MAAM,CAAC;AACpB,UAAM,OAAQ,MAAM,CAAC,MAAM;AAE3B,QAAIC,OAAMF;AACV,eAAW,QAAQC,MAAK,YAAW,EAAG,MAAM,GAAG,GAAG;AAG9C,UAAI,MAAM,QAAQC,IAAG,GAAG;AACpB,YAAI,CAAC,KAAK,MAAM,UAAU,GAAG;AAAE;;AAC/B,QAAAA,OAAMA,KAAI,SAAS,IAAI,CAAC;iBAEjB,OAAOA,SAAS,UAAU;AACjC,YAAI,QAAa;AACjB,mBAAW,OAAOA,MAAK;AAClB,cAAI,IAAI,YAAW,MAAO,MAAM;AAC5B,oBAAQA,KAAI,GAAG;AACf;;;AAGT,QAAAA,OAAM;aAEH;AACH,QAAAA,OAAM;;AAGV,UAAIA,QAAO,MAAM;AAAE;;;AAGvB,mBAAe,CAAC,QAAQA,QAAO,MAAM,0BAA0B,QAAQD,KAAI;AAE3E,QAAI,QAAQC,QAAO,MAAM;AACrB,UAAI,SAAS,OAAO;AAChB,YAAI,OAAOA,SAAS,YAAYA,KAAI,MAAM,YAAY,GAAG;AACrD,iBAAmB,SAASA,IAAG;mBACxB,OAAO,cAAcA,IAAG,GAAG;AAClC,iBAAOA;;;AAIf,UAAI,SAAS,UAAU;AACnB,YAAI,OAAOA,SAAS,YAAYA,KAAI,MAAM,aAAa,GAAG;AACtD,iBAAmB,WAAWA,IAAG;;;AAIzC,UAAI,SAAS,QAAQ;AACjB,YAAI,OAAOA,SAAS,UAAU;AAAE,iBAAmB,cAAcA,IAAG;;;AAGxE,UAAI,SAAS,WAAW,MAAM,QAAQA,IAAG,GAAG;AAAE,eAAmBA;;AACjE,UAAI,SAAS,OAAOA,MAAM;AAAE,eAAOA;;AAEnC,qBAAe,OAAO,wBAAyB,IAAK,KAAK,QAAQD,KAAI;;AAGzE,WAAOC;EACX;AA1FA,MAAAC,cAAA;;AAIA,MAAAA;;;;;AC2DM,WAAU,eAAe,MAAY;AACvC,QAAI;AACA,YAAMC,QAAO,KAAK,MAAM,IAAI;AAC5B,YAAMC,WAAYD,MAAK,WAAW,OAAQ,SAASA,MAAK,OAAO,IAAG;AAClE,UAAIC,aAAY,GAAG;AAAE,eAAO;;aACvBC,QAAO;IAAA;AAChB,WAAO;EACX;AAEA,WAAS,QAAQF,OAAW,KAAiB,YAAsB;AAC/D,UAAM,SAAS,QAAgBA,OAAM,sBAAsB;AAC3D,QAAI,WAAW,eAAe;AAC1B,YAAM,KAAK,QAAoBA,OAAM,8BAA8B;AACnE,YAAM,SAAS,IAAI,IAAI,KAAK,EAAE;AAC9B,aAAO,QAAQ,OAAO,QAAQ,UAAU,CAAC;;AAG7C,WAAO,OAAO,sBAAsB,yBAAyB;MACzD,WAAW;KACd;EACL;AAEA,WAAS,WAAWA,OAAW,MAAY;AACvC,UAAM,MAAM,SAAS,IAAI;AACzB,UAAM,aAAa,QAAoBA,OAAM,yBAAyB;AAEtE,UAAM,cAAc,QAAQ,UAAU,OAAO,CAAE,IAAI,MAAM,IAAI,EAAE,GAAG,UAAU,CAAE,CAAC,CAAC,EAAE,UAAU,CAAC;AAC7F,mBAAe,gBAAgB,QAAgBA,OAAM,oBAAoB,EAAE,YAAW,GAClF,sBAAsB,YAAY,cAAc;AAEpD,UAAM,aAAa,QAAQA,OAAM,IAAI,MAAM,GAAG,EAAE,GAAG,UAAU;AAE7D,UAAM,UAAU,eAAe,UAAU;AACzC,QAAIA,MAAK,SAAS;AACd,UAAI,QAAQA,MAAK,QAAQ,YAAW;AACpC,UAAI,CAAC,MAAM,WAAW,IAAI,GAAG;AAAE,gBAAQ,OAAO;;AAE9C,qBAAe,WAAW,KAAK,MAAM,SAAS,wCAAwC,WAAWA,MAAK,OAAO;;AAGjH,UAAM,UAA2B,EAAE,SAAS,WAAU;AAGtD,UAAMC,WAAU,QAAQD,OAAM,yBAAyB;AACvD,QAAIC,aAAY,OAAO;AACnB,YAAM,cAAc,IAAI,MAAM,IAAI,EAAE;AAEpC,YAAM,qBAAqB,QAAoBD,OAAM,mCAAmC;AACxF,YAAM,aAAa,QAAoBA,OAAM,gCAAgC;AAE7E,YAAM,iBAAiB,IAAI,IAAI,aAAa,UAAU;AAEtD,cAAQ,WAAW;QACf,MAAO,QAAuBA,OAAM,sBAAsB,KAAK;QAC/D,QAAS,QAAuBA,OAAM,wBAAwB,KAAK;QACnE,SAAS,QAAQ,SAAS,eAAe,QAAQ,kBAAkB,CAAC,CAAC;;;AAI7E,WAAO;EACX;AAmBA,WAAS,oBAAuBA,OAAS;AACrC,UAAM,MAAM,QAAQA,OAAM,mBAAmB;AAC7C,QAAI,OAAO,OAAO,QAAS,UAAU;AACjC,UAAI,IAAI,YAAW,MAAO,UAAU;AAChC,cAAM,OAAO,QAAoBA,OAAM,6BAA6B;AACpE,cAAMG,KAAI,QAAgBH,OAAM,yBAAyB;AACzD,cAAMI,KAAI,QAAgBJ,OAAM,yBAAyB;AACzD,cAAM,IAAI,QAAgBA,OAAM,yBAAyB;AAGzD,uBAAeG,KAAI,MAAMA,KAAKA,KAAI,OAAQ,GAAG,iBAAiB,SAASA,EAAC;AACxE,uBAAeC,KAAI,KAAK,IAAI,GAAG,eAAe,OAAO,GAAG;AAExD,cAAM,QAAQ,QAAgBJ,OAAM,6BAA6B;AACjE,uBAAe,UAAU,IAAI,qBAAqB,aAAa,KAAK;AAEpE,eAAO,EAAE,MAAM,UAAU,MAAM,GAAAG,IAAG,GAAAC,IAAG,GAAG,OAAO,GAAE;iBAE1C,IAAI,YAAW,MAAO,UAAU;AAEvC,cAAM,OAAO,QAAoBJ,OAAM,6BAA6B;AAEpE,cAAM,MAAM,QAAgBA,OAAM,8BAA8B;AAChE,cAAM,YAAY,IAAI,MAAM,GAAG,EAAE,IAAG;AACpC,uBAAe,cAAc,YAAY,cAAc,UAAU,mBAAmB,WAAW,GAAG;AAElG,cAAMK,SAAQ,QAAgBL,OAAM,yBAAyB;AAE7D,cAAM,QAAQ,QAAgBA,OAAM,6BAA6B;AACjE,uBAAe,UAAU,IAAI,qBAAqB,aAAa,KAAK;AAEpE,eAAO,EAAE,MAAM,UAAU,MAAM,OAAAK,QAAO,OAAO,UAAS;;;AAI9D,mBAAe,OAAO,uCAAuC,OAAO,GAAG;EAC3E;AAeM,WAAU,wBAAwB,MAAc,WAA8B;AAChF,UAAML,QAAO,KAAK,MAAM,IAAI;AAE5B,UAAM,WAAW,YAAY,SAAS;AAEtC,UAAM,SAAS,oBAAoBA,KAAI;AACvC,QAAI,OAAO,SAAS,UAAU;AAC1B,YAAM,EAAE,MAAAM,OAAM,OAAAD,QAAO,OAAAE,QAAO,UAAS,IAAK;AAC1C,YAAMC,OAAMC,QAAO,UAAUH,OAAMD,QAAOE,QAAO,SAAS;AAC1D,aAAO,WAAWP,OAAMQ,IAAG;;AAG/B,WAAO,OAAO,SAAS,UAAU,qBAAqB,iBAAiB,EAAE,OAAM,CAAE;AAEjF,UAAM,EAAE,MAAM,GAAAL,IAAG,GAAAC,IAAG,GAAG,MAAK,IAAK;AACjC,UAAM,MAAM,WAAW,UAAU,MAAMD,IAAGC,IAAG,GAAG,KAAK;AACrD,WAAO,WAAWJ,OAAM,GAAG;EAC/B;AAEA,WAASU,OAAM,UAAgB;AAC3B,WAAO,IAAI,QAAQ,CAAC,YAAW;AAAG,iBAAW,MAAK;AAAG,gBAAO;MAAI,GAAG,QAAQ;IAAG,CAAC;EACnF;AAaA,WAAsB,oBAAoB,MAAc,WAAgC,UAA2B;;AAC/G,YAAMV,QAAO,KAAK,MAAM,IAAI;AAE5B,YAAM,WAAW,YAAY,SAAS;AAEtC,YAAM,SAAS,oBAAoBA,KAAI;AACvC,UAAI,OAAO,SAAS,UAAU;AAC1B,YAAI,UAAU;AACV,mBAAS,CAAC;AACV,gBAAMU,OAAM,CAAC;;AAEjB,cAAM,EAAE,MAAAJ,OAAM,OAAAD,QAAO,OAAAE,QAAO,UAAS,IAAK;AAC1C,cAAMC,OAAMC,QAAO,UAAUH,OAAMD,QAAOE,QAAO,SAAS;AAC1D,YAAI,UAAU;AACV,mBAAS,CAAC;AACV,gBAAMG,OAAM,CAAC;;AAEjB,eAAO,WAAWV,OAAMQ,IAAG;;AAG/B,aAAO,OAAO,SAAS,UAAU,qBAAqB,iBAAiB,EAAE,OAAM,CAAE;AAEjF,YAAM,EAAE,MAAM,GAAAL,IAAG,GAAAC,IAAG,GAAG,MAAK,IAAK;AACjC,YAAM,MAAM,MAAMO,QAAO,UAAU,MAAMR,IAAGC,IAAG,GAAG,OAAO,QAAQ;AACjE,aAAO,WAAWJ,OAAM,GAAG;IAC/B;;AAEA,WAAS,oBAAoB,SAAuB;AAEhD,UAAM,OAAQ,QAAQ,QAAQ,OAAQ,SAAS,QAAQ,MAAM,cAAc,IAAGY,aAAY,EAAE;AAG5F,QAAIT,KAAK,KAAK,IAAKC,KAAI,GAAG,IAAI;AAC9B,QAAI,QAAQ,QAAQ;AAChB,UAAI,QAAQ,OAAO,GAAG;AAAE,QAAAD,KAAI,QAAQ,OAAO;;AAC3C,UAAI,QAAQ,OAAO,GAAG;AAAE,QAAAC,KAAI,QAAQ,OAAO;;AAC3C,UAAI,QAAQ,OAAO,GAAG;AAAE,YAAI,QAAQ,OAAO;;;AAE/C,mBAAe,OAAOD,OAAO,YAAYA,KAAI,KAAK,OAAO,cAAcA,EAAC,MAAM,OAAOA,EAAC,IAAI,OAAOA,KAAI,CAAC,OAAO,OAAO,CAAC,GAAG,8BAA8B,aAAaA,EAAC;AACpK,mBAAe,OAAOC,OAAO,YAAYA,KAAI,KAAK,OAAO,cAAcA,EAAC,GAAG,8BAA8B,aAAaA,EAAC;AACvH,mBAAe,OAAO,MAAO,YAAY,IAAI,KAAK,OAAO,cAAc,CAAC,GAAG,8BAA8B,aAAa,CAAC;AAEvH,WAAO,EAAE,MAAM,UAAU,OAAO,IAAI,MAAM,GAAAD,IAAG,GAAAC,IAAG,EAAC;EACrD;AAEA,WAAS,iBAAiB,KAAiB,KAAmB,SAA0B,SAAuB;AAE3G,UAAM,aAAa,SAAS,QAAQ,YAAY,YAAY;AAG5D,UAAM,KAAM,QAAQ,MAAM,OAAQ,SAAS,QAAQ,IAAI,YAAY,IAAGQ,aAAY,EAAE;AACpF,mBAAe,GAAG,WAAW,IAAI,6BAA6B,cAAc,QAAQ,EAAE;AAGtF,UAAM,aAAc,QAAQ,QAAQ,OAAQ,SAAS,QAAQ,MAAM,cAAc,IAAGA,aAAY,EAAE;AAClG,mBAAe,WAAW,WAAW,IAAI,+BAA+B,gBAAgB,QAAQ,EAAE;AAKlG,UAAM,aAAa,IAAI,MAAM,GAAG,EAAE;AAClC,UAAM,YAAY,IAAI,MAAM,IAAI,EAAE;AAGlC,UAAM,SAAS,IAAI,IAAI,YAAY,EAAE;AACrC,UAAM,aAAa,SAAS,OAAO,QAAQ,UAAU,CAAC;AAGtD,UAAMC,OAAM,UAAU,OAAO,CAAE,WAAW,UAAU,CAAE,CAAC;AAGvD,UAAMb,QAA+B;MACjC,SAAS,QAAQ,QAAQ,UAAU,CAAC,EAAE,YAAW;MACjD,IAAI,OAAO,UAAU;MACrB,SAAS;MACT,QAAQ;QACJ,QAAQ;QACR,cAAc;UACV,IAAI,QAAQ,EAAE,EAAE,UAAU,CAAC;;QAE/B,YAAY,QAAQ,UAAU,EAAE,UAAU,CAAC;QAC3C,KAAK;QACL,WAAW;UACP,MAAM,QAAQ,IAAI,IAAI,EAAE,UAAU,CAAC;UACnC,GAAG,IAAI;UACP,OAAO;UACP,GAAG,IAAI;UACP,GAAG,IAAI;;QAEX,KAAKa,KAAI,UAAU,CAAC;;;AAK5B,QAAI,QAAQ,UAAU;AAClB,YAAM,SAAU,QAAQ,UAAU,OAAQ,QAAQ,SAAQ,UAAW,OAAQ;AAE7E,YAAMC,QAAO,QAAQ,SAAS,QAAQ;AACtC,YAAM,SAAS,QAAQ,SAAS,UAAU;AAE1C,YAAM,cAAc,IAAI,MAAM,IAAI,EAAE;AAEpC,YAAM,UAAU,SAAS,QAAQ,SAAS,SAAS,0BAA0B;AAC7E,YAAM,aAAaF,aAAY,EAAE;AACjC,YAAM,iBAAiB,IAAI,IAAI,aAAa,UAAU;AACtD,YAAM,qBAAqB,SAAS,eAAe,QAAQ,OAAO,CAAC;AAEnE,YAAMG,OAAM,oBAAI,KAAI;AACpB,YAAM,YAAaA,KAAI,eAAc,IAAK,MACvB,KAAKA,KAAI,YAAW,IAAK,GAAG,CAAC,IAAI,MACjC,KAAKA,KAAI,WAAU,GAAI,CAAC,IAAI,MAC5B,KAAKA,KAAI,YAAW,GAAI,CAAC,IAAI,MAC7B,KAAKA,KAAI,cAAa,GAAI,CAAC,IAAI,MAC/B,KAAKA,KAAI,cAAa,GAAI,CAAC,IAAI;AAClD,YAAM,eAAgB,UAAU,YAAY,OAAOf,MAAK;AAExD,MAAAA,MAAK,UAAU,IAAI;QACf;QAAQ;QAAc,MAAAc;QAAM;QAC5B,iBAAiB,QAAQ,UAAU,EAAE,UAAU,CAAC;QAChD,oBAAoB,QAAQ,kBAAkB,EAAE,UAAU,CAAC;QAC3D,SAAS;;;AAIjB,WAAO,KAAK,UAAUd,KAAI;EAC9B;AAUM,WAAU,wBAAwB,SAA0B,UAA+B,SAAwB;AACrH,QAAI,WAAW,MAAM;AAAE,gBAAU,CAAA;;AAEjC,UAAM,gBAAgB,YAAY,QAAQ;AAC1C,UAAM,MAAM,oBAAoB,OAAO;AACvC,UAAM,MAAM,WAAW,eAAe,IAAI,MAAM,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,EAAE;AACvE,WAAO,iBAAiB,SAAS,GAAG,GAAG,KAAK,SAAS,OAAO;EAChE;AAWA,WAAsB,oBAAoB,SAA0B,UAA+B,SAAwB;;AACvH,UAAI,WAAW,MAAM;AAAE,kBAAU,CAAA;;AAEjC,YAAM,gBAAgB,YAAY,QAAQ;AAC1C,YAAM,MAAM,oBAAoB,OAAO;AACvC,YAAM,MAAM,MAAMW,QAAO,eAAe,IAAI,MAAM,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,QAAQ,gBAAgB;AACnG,aAAO,iBAAiB,SAAS,GAAG,GAAG,KAAK,SAAS,OAAO;IAChE;;AAnYA,MA4BM;AA5BN;;AAWA,MAAAK;AAEA,MAAAC;AACA,MAAAC;AACA,MAAAC;AACA,MAAAC;AAIA,MAAAA;AAKA;AAGA,MAAM,cAAc;;;;;ACepB,WAASC,MAAK,OAAe,QAAc;AACvC,QAAI,SAAS;AACb,WAAO,OAAO;AACV,eAASC,SAAQ,QAAQ,EAAE,IAAI;AAC/B,cAAQ,KAAK,MAAM,QAAQ,EAAE;;AAEjC,WAAO,OAAO,SAAS,SAAS,GAAG;AAAE,eAAS,MAAM;;AACpD,WAAO,OAAO;EAClB;AAEA,WAAS,kBAAkBC,SAAiB;AACxC,UAAM,QAAQ,SAASA,OAAM;AAC7B,UAAM,QAAQ,UAAUC,QAAOA,QAAO,KAAK,CAAC,GAAG,GAAG,CAAC;AACnD,UAAMC,SAAQ,OAAO,CAAE,OAAO,KAAK,CAAE;AACrC,WAAO,aAAaA,MAAK;EAC7B;AAIA,WAAS,MAAMC,QAAe,WAAmB,WAAmB,YAAyB;AACzF,UAAMC,QAAO,IAAI,WAAW,EAAE;AAE9B,QAAID,SAAQ,aAAa;AACrB,aAAO,cAAc,MAAM,wCAAwC,yBAAyB;QACxF,WAAW;OACd;AAGD,MAAAC,MAAK,IAAI,SAAS,UAAU,GAAG,CAAC;WAE7B;AAEH,MAAAA,MAAK,IAAI,SAAS,SAAS,CAAC;;AAIhC,aAAS,IAAI,IAAI,KAAK,GAAG,KAAK,GAAG;AAAE,MAAAA,MAAK,MAAM,KAAK,EAAE,IAAMD,UAAU,KAAK,IAAM;;AAChF,UAAME,KAAI,SAAS,YAAY,UAAU,WAAWD,KAAI,CAAC;AAEzD,WAAO,EAAE,IAAIC,GAAE,MAAM,GAAG,EAAE,GAAG,IAAIA,GAAE,MAAM,EAAE,EAAC;EAChD;AAGA,WAAS,WAAoCC,OAASC,OAAY;AAC9D,UAAMC,cAAaD,MAAK,MAAM,GAAG;AAEjC,mBAAeC,YAAW,SAAS,GAAG,gBAAgB,QAAQD,KAAI;AAElE,QAAIC,YAAW,CAAC,MAAM,KAAK;AACvB,qBAAeF,MAAK,UAAU,GAAG,uFAAwFA,MAAK,KAAM,IAAI,QAAQC,KAAI;AACpJ,MAAAC,YAAW,MAAK;;AAGpB,QAAI,SAAYF;AAChB,aAAS,IAAI,GAAG,IAAIE,YAAW,QAAQ,KAAK;AACxC,YAAM,YAAYA,YAAW,CAAC;AAE9B,UAAI,UAAU,MAAM,WAAW,GAAG;AAC9B,cAAML,SAAQ,SAAS,UAAU,UAAU,GAAG,UAAU,SAAS,CAAC,CAAC;AACnE,uBAAeA,SAAQ,aAAa,sBAAsB,QAAS,CAAE,KAAK,SAAS;AACnF,iBAAS,OAAO,YAAY,cAAcA,MAAK;iBAExC,UAAU,MAAM,UAAU,GAAG;AACpC,cAAMA,SAAQ,SAAS,SAAS;AAChC,uBAAeA,SAAQ,aAAa,sBAAsB,QAAS,CAAE,KAAK,SAAS;AACnF,iBAAS,OAAO,YAAYA,MAAK;aAE9B;AACH,uBAAe,OAAO,0BAA0B,QAAS,CAAE,KAAK,SAAS;;;AAIjF,WAAO;EACX;AAicM,WAAU,eAAe,QAAe;AAC1C,UAAMA,SAAQ,UAAU,QAAQ,OAAO;AACvC,mBAAeA,UAAS,KAAKA,SAAQ,aAAa,yBAAyB,SAASA,MAAK;AACzF,WAAO,aAAcA,MAAM;EAC/B;AAWM,WAAU,sBAAsB,QAAe;AACjD,UAAMA,SAAQ,UAAU,QAAQ,OAAO;AACvC,mBAAeA,UAAS,KAAKA,SAAQ,aAAa,yBAAyB,SAASA,MAAK;AACzF,WAAO,kBAAmBA,MAAK;EACnC;AAxkBA,MAgCaM,cAIP,cAEA,aAEAC,IAEAX,UAkBAY,SA5DN,8CA8Ha,6BA4RA;AA1Zb;;AAKA,MAAAC;AACA;AACA,MAAAC;AACA,MAAAC;AAMA;AAEA;AACA;AACA;AAcO,MAAML,eAAsB;AAInC,MAAM,eAAe,IAAI,WAAW,CAAE,IAAI,KAAK,KAAK,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,KAAK,GAAG,CAAE;AAE/F,MAAM,cAAc;AAEpB,MAAMC,KAAI,OAAO,oEAAoE;AAErF,MAAMX,WAAU;AAkBhB,MAAMY,UAAS,CAAA;AAkET,MAAO,gBAAP,MAAO,sBAAqB,WAAU;;;;QA0DxC,YAAY,OAAY,YAAwB,mBAA2B,WAAmBJ,OAAqBJ,QAAe,OAAe,UAA2B,UAAyB;AACjM,gBAAM,YAAY,QAAQ;AAmB9B;AA1ES;;;;AASA;;;;;;;;AAKA;;;;AAQA;;;;;;;AAMA;;;;;AASA;;;;;;;;AAMA;;;;;AAMA;;;;;AAOL,wBAAc,OAAOQ,SAAQ,cAAc;AAE3C,2BAA+B,MAAM,EAAE,WAAW,WAAW,oBAAmB,CAAE;AAElF,gBAAM,cAAc,UAAUI,WAAUd,QAAO,KAAK,SAAS,CAAC,GAAG,GAAG,CAAC;AACrE,2BAA+B,MAAM;YACjC;YAAmB;YACnB;YAAW,MAAAM;YAAM,OAAAJ;YAAO;WAC3B;AAED,2BAA+B,MAAM,EAAE,SAAQ,CAAE;QACrD;QAEA,QAAQ,UAAyB;AAC7B,iBAAO,IAAI,cAAaQ,SAAQ,KAAK,YAAY,KAAK,mBAClD,KAAK,WAAW,KAAK,MAAM,KAAK,OAAO,KAAK,OAAO,KAAK,UAAU,QAAQ;QAClF;;;;;;;;QAuBM,QAAQ,UAA+B,kBAAmC;;AAC5E,mBAAO,MAAM,oBAAoB,sBAAK,sBAAL,YAAiB,UAAU,EAAE,iBAAgB,CAAE;UACpF;;;;;;;;;;;;QAYA,YAAY,UAA6B;AACrC,iBAAO,wBAAwB,sBAAK,sBAAL,YAAiB,QAAQ;QAC5D;;;;;;;QAQA,IAAI,cAAW;AAOX,iBAAO,KAAK,QAAQ,KAAK,kBAAkB,yBAAyB,EAAE,WAAW,cAAa,CAAE;AAEhG,iBAAO,kBAAkB,OAAO;YAC5B;YAAcb,MAAK,KAAK,OAAO,CAAC;YAAG,KAAK;YACxCA,MAAK,KAAK,OAAO,CAAC;YAAG,KAAK;YAC1B,OAAO,CAAE,QAAQ,KAAK,UAAU,CAAE;WACrC,CAAC;QACN;;;;;QAMA,UAAO;AAA+B,iBAAQ,KAAK,QAAQ;QAAO;;;;;;;;QASlE,SAAM;AACF,iBAAO,IAAI,iBAAiBa,SAAQ,KAAK,SAAS,KAAK,WACnD,KAAK,mBAAmB,KAAK,WAAW,KAAK,MAAM,KAAK,OACxD,KAAK,OAAO,KAAK,QAAQ;QACjC;;;;QAKA,YAAY,QAAe;AACvB,gBAAMR,SAAQ,UAAU,QAAQ,OAAO;AACvC,yBAAeA,UAAS,YAAY,iBAAiB,SAASA,MAAK;AAGnE,cAAII,QAAO,KAAK;AAChB,cAAIA,OAAM;AACN,YAAAA,SAAQ,OAAOJ,SAAQ,CAAC;AACxB,gBAAIA,SAAQ,aAAa;AAAE,cAAAI,SAAQ;;;AAGvC,gBAAM,EAAE,IAAI,GAAE,IAAK,MAAMJ,QAAO,KAAK,WAAW,KAAK,WAAW,KAAK,UAAU;AAC/E,gBAAMa,MAAK,IAAI,WAAW,SAAS,SAAS,EAAE,IAAI,OAAO,KAAK,UAAU,KAAKN,IAAG,EAAE,CAAC;AAEnF,iBAAO,IAAI,cAAaC,SAAQK,KAAI,KAAK,aAAa,QAAQ,EAAE,GAC5DT,OAAMJ,QAAO,KAAK,QAAQ,GAAG,KAAK,UAAU,KAAK,QAAQ;QAEjE;;;;QAKA,WAAWI,OAAY;AACnB,iBAAO,WAAyB,MAAMA,KAAI;QAC9C;;;;;;;;QAsBA,OAAO,gBAAgB,aAAmB;AACtC,gBAAML,SAAQ,UAAU,aAAa,WAAW,CAAC;AAEjD,yBAAeA,OAAM,WAAW,MAAM,kBAAkBA,OAAM,MAAM,GAAG,EAAE,CAAC,MAAM,aAC5E,wBAAwB,eAAe,cAAc;AAEzD,gBAAM,QAAQA,OAAM,CAAC;AACrB,gBAAM,oBAAoB,QAAQA,OAAM,MAAM,GAAG,CAAC,CAAC;AACnD,gBAAMC,SAAQ,SAAS,QAAQD,OAAM,MAAM,GAAG,EAAE,CAAC,EAAE,UAAU,CAAC,GAAG,EAAE;AACnE,gBAAM,YAAY,QAAQA,OAAM,MAAM,IAAI,EAAE,CAAC;AAC7C,gBAAM,MAAMA,OAAM,MAAM,IAAI,EAAE;AAE9B,kBAAQ,QAAQA,OAAM,MAAM,GAAG,CAAC,CAAC,GAAG;YAEhC,KAAK;YAAc,KAAK,cAAc;AAClC,oBAAM,YAAY,QAAQ,GAAG;AAC7B,qBAAO,IAAI,iBAAiBS,SAAQ,eAAe,SAAS,GAAG,WAC3D,mBAAmB,WAAW,MAAMR,QAAO,OAAO,IAAI;;YAI9D,KAAK;YAAc,KAAK;AACpB,kBAAI,IAAI,CAAC,MAAM,GAAG;AAAE;;AACpB,qBAAO,IAAI,cAAaQ,SAAQ,IAAI,WAAW,IAAI,MAAM,CAAC,CAAC,GACvD,mBAAmB,WAAW,MAAMR,QAAO,OAAO,MAAM,IAAI;;AAIxE,yBAAe,OAAO,+BAA+B,eAAe,cAAc;QACtF;;;;QAKA,OAAO,aAAa,UAAmBI,OAAeU,WAAmB;AA/W7E,cAAAC;AAgXQ,cAAI,YAAY,MAAM;AAAE,uBAAW;;AACnC,cAAIX,SAAQ,MAAM;AAAE,YAAAA,QAAOE;;AAC3B,cAAIQ,aAAY,MAAM;AAAE,YAAAA,YAAW,OAAO,SAAQ;;AAClD,gBAAM,WAAW,SAAS,YAAYE,aAAY,EAAE,GAAG,UAAUF,SAAQ;AACzE,iBAAO,gBAAAC,MAAA,eAAa,wBAAb,KAAAA,KAAuB,SAAS,YAAW,GAAI,UAAU,WAAWX,KAAI;QACnF;;;;QAKA,OAAO,aAAa,UAAoBA,OAAa;AA1XzD,cAAAW;AA2XQ,cAAI,CAACX,OAAM;AAAE,YAAAA,QAAOE;;AACpB,iBAAO,gBAAAS,MAAA,eAAa,wBAAb,KAAAA,KAAuB,SAAS,YAAW,GAAI,UAAU,WAAWX,KAAI;QACnF;;;;QAKA,OAAO,WAAWa,SAAgB,UAAmBb,OAAeU,WAAmB;AAlY3F,cAAAC;AAmYQ,cAAI,YAAY,MAAM;AAAE,uBAAW;;AACnC,cAAIX,SAAQ,MAAM;AAAE,YAAAA,QAAOE;;AAC3B,cAAIQ,aAAY,MAAM;AAAE,YAAAA,YAAW,OAAO,SAAQ;;AAClD,gBAAM,WAAW,SAAS,WAAWG,SAAQ,UAAUH,SAAQ;AAC/D,iBAAO,gBAAAC,MAAA,eAAa,wBAAb,KAAAA,KAAuB,SAAS,YAAW,GAAI,UAAU,WAAWX,KAAI;QACnF;;;;QAKA,OAAO,SAAS,MAAe;AA7YnC,cAAAW;AA8YQ,iBAAO,gBAAAA,MAAA,eAAa,wBAAb,KAAAA,KAAuB,MAAM;QACxC;;AAnMA;mBAAQ,WAAA;AACJ,cAAM,UAA2B,EAAE,SAAS,KAAK,SAAS,YAAY,KAAK,WAAU;AACrF,cAAM,IAAI,KAAK;AACf,YAAI,KAAK,QAAQ,KAAK,EAAE,SAAS,WAAW,QAAQ,EAAE,aAAa,IAAI;AACnE,kBAAQ,WAAW;YACf,MAAM,KAAK;YACX,QAAQ;YACR,SAAS,EAAE;;;AAInB,eAAO;MACX;AAiGO;oBAAS,SAAC,OAAkB,UAAyB;AACxD,uBAAe,YAAY,KAAK,GAAG,gBAAgB,QAAQ,YAAY;AAEvE,cAAM,OAAO,SAAS,OAAO,MAAM;AACnC,uBAAe,KAAK,UAAU,MAAM,KAAK,UAAU,IAAK,gBAAgB,QAAQ,YAAY;AAE5F,cAAMb,KAAI,SAAS,YAAY,UAAU,cAAc,IAAI,CAAC;AAC5D,cAAM,aAAa,IAAI,WAAW,QAAQA,GAAE,MAAM,GAAG,EAAE,CAAC,CAAC;AAEzD,eAAO,IAAI,cAAaM,SAAQ,YAAY,cAAc,QAAQN,GAAE,MAAM,EAAE,CAAC,GACzE,KAAK,GAAG,GAAG,UAAU,IAAI;MACjC;AAXA,mBA3LS,eA2LF;AA3LL,MAAO,eAAP;AA4RA,MAAO,mBAAP,MAAO,0BAAyB,WAAU;;;;QAkD5C,YAAY,OAAY,SAAiB,WAAmB,mBAA2B,WAAmBE,OAAqBJ,QAAe,OAAe,UAAyB;AAClL,gBAAM,SAAS,QAAQ;AA/ClB;;;;AASA;;;;;;;;AAKA;;;;AAMA;;;;;AASA;;;;;;;;AAMA;;;;;AAMA;;;;;AAOL,wBAAc,OAAOQ,SAAQ,kBAAkB;AAE/C,2BAAmC,MAAM,EAAE,UAAS,CAAE;AAEtD,gBAAM,cAAc,UAAUI,WAAUd,QAAO,SAAS,CAAC,GAAG,GAAG,CAAC;AAChE,2BAAmC,MAAM;YACrC;YAAW;YAAa;YAAmB;YAAW,MAAAM;YAAM,OAAAJ;YAAO;WACtE;QACL;QAEA,QAAQ,UAAyB;AAC7B,iBAAO,IAAI,kBAAiBQ,SAAQ,KAAK,SAAS,KAAK,WACnD,KAAK,mBAAmB,KAAK,WAAW,KAAK,MAAM,KAAK,OAAO,KAAK,OAAO,QAAQ;QAC3F;;;;;;;QAQA,IAAI,cAAW;AAOX,iBAAO,KAAK,QAAQ,KAAK,kBAAkB,yBAAyB,EAAE,WAAW,cAAa,CAAE;AAEhG,iBAAO,kBAAkB,OAAO;YAC5B;YACAb,MAAK,KAAK,OAAO,CAAC;YAClB,KAAK;YACLA,MAAK,KAAK,OAAO,CAAC;YAClB,KAAK;YACL,KAAK;WACR,CAAC;QACN;;;;;QAMA,UAAO;AAA+B,iBAAQ,KAAK,QAAQ;QAAO;;;;QAKlE,YAAY,QAAe;AACvB,gBAAMK,SAAQ,UAAU,QAAQ,OAAO;AACvC,yBAAeA,UAAS,YAAY,iBAAiB,SAASA,MAAK;AAGnE,cAAII,QAAO,KAAK;AAChB,cAAIA,OAAM;AACN,YAAAA,SAAQ,OAAOJ,SAAQ,CAAC;AACxB,gBAAIA,SAAQ,aAAa;AAAE,cAAAI,SAAQ;;;AAGvC,gBAAM,EAAE,IAAI,GAAE,IAAK,MAAMJ,QAAO,KAAK,WAAW,KAAK,WAAW,IAAI;AACpE,gBAAMkB,MAAK,WAAW,UAAU,IAAI,KAAK,WAAW,IAAI;AAExD,gBAAM,UAAU,eAAeA,GAAE;AAEjC,iBAAO,IAAI,kBAAiBV,SAAQ,SAASU,KAAI,KAAK,aAAa,QAAQ,EAAE,GACzEd,OAAMJ,QAAO,KAAK,QAAQ,GAAG,KAAK,QAAQ;QAElD;;;;QAKA,WAAWI,OAAY;AACnB,iBAAO,WAA6B,MAAMA,KAAI;QAClD;;;;;;AC/fE,WAAU,gBAAgB,MAAY;AACxC,QAAI;AACA,YAAMe,QAAO,KAAK,MAAM,IAAI;AAC5B,UAAIA,MAAK,SAAS;AAAE,eAAO;;aACtBC,QAAO;IAAA;AAChB,WAAO;EACX;AAcM,WAAU,qBAAqB,MAAc,WAA8B;AAC7E,UAAMD,QAAO,KAAK,MAAM,IAAI;AAC5B,UAAM,WAAW,YAAY,SAAS;AAGtC,UAAM,UAAU,WAAW,QAAQA,OAAM,iBAAiB,CAAC;AAG3D,UAAM,UAAU,cAAc,QAAQA,OAAM,iBAAiB,CAAC;AAC9D,mBAAe,WAAY,QAAQ,SAAS,OAAQ,GAAG,mBAAmB,QAAQ,IAAI;AAEtF,UAAM,MAAM,SAASE,QAAO,UAAU,UAAU,KAAM,IAAI,QAAQ,CAAC,EAAE,MAAM,GAAG,EAAE;AAEhF,UAAM,KAAK,QAAQ,MAAM,GAAG,EAAE;AAC9B,UAAM,gBAAgB,QAAQ,MAAM,EAAE;AAGtC,UAAM,SAAS,IAAI,IAAI,KAAK,EAAE;AAC9B,UAAM,OAAO,WAAW,SAAS,OAAO,QAAQ,aAAa,CAAC,CAAC;AAG/D,QAAI,UAAU;AACd,aAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AAClC,iBAAW,OAAO,aAAa,KAAK,CAAC,CAAC;;AAG1C,WAAO,EAAE,SAAS,YAAYC,IAAG,OAAO,EAAC;EAC7C;AAzEA;;AAIA,MAAAC;AAEA,MAAAC;AACA,MAAAC;AACA;AACA,MAAAC;AAEA,MAAAA;;;;;ACSA,WAASC,OAAM,UAAgB;AAC3B,WAAO,IAAI,QAAQ,CAAC,YAAW;AAAG,iBAAW,MAAK;AAAG,gBAAO;MAAI,GAAG,QAAQ;IAAG,CAAC;EACnF;AAtBA,oCAkCa;AAlCb;;MAAAC;AACA,MAAAC;AAEA;AACA;AACA;AACA;AAKA;AAuBM,MAAO,UAAP,MAAO,gBAAe,WAAU;;;;;QAMlC,YAAY,KAA0B,UAA0B;AAC5D,cAAI,OAAO,QAAS,YAAY,CAAC,IAAI,WAAW,IAAI,GAAG;AACnD,kBAAM,OAAO;;AAGjB,cAAI,aAAc,OAAO,QAAS,WAAY,IAAI,WAAW,GAAG,IAAG;AACnE,gBAAM,YAAY,QAAQ;QAC9B;QAEA,QAAQ,UAAyB;AAC7B,iBAAO,IAAI,QAAO,KAAK,YAAY,QAAQ;QAC/C;;;;;;;;QASM,QAAQ,UAA+B,kBAAmC;;AAC5E,kBAAM,UAAU,EAAE,SAAS,KAAK,SAAS,YAAY,KAAK,WAAU;AACpE,mBAAO,MAAM,oBAAoB,SAAS,UAAU,EAAE,iBAAgB,CAAE;UAC5E;;;;;;;;;;;;QAYA,YAAY,UAA6B;AACrC,gBAAM,UAAU,EAAE,SAAS,KAAK,SAAS,YAAY,KAAK,WAAU;AACpE,iBAAO,wBAAwB,SAAS,QAAQ;QACpD;;;;;;;;QA6BA,OAAa,kBAAkB,MAAc,UAA+B,UAA2B;;AA3G3G,gBAAAC;AA4GQ,gBAAI,UAAqD;AACzD,gBAAI,eAAe,IAAI,GAAG;AACtB,wBAAU,MAAM,oBAAoB,MAAM,UAAU,QAAQ;uBAErD,gBAAgB,IAAI,GAAG;AAC9B,kBAAI,UAAU;AAAE,yBAAS,CAAC;AAAG,sBAAMH,OAAM,CAAC;;AAC1C,wBAAU,qBAAqB,MAAM,QAAQ;AAC7C,kBAAI,UAAU;AAAE,yBAAS,CAAC;AAAG,sBAAMA,OAAM,CAAC;;;AAI9C,mBAAO,gBAAAG,MAAA,SAAO,8BAAP,KAAAA,KAAoB;UAC/B;;;;;;;;;QASA,OAAO,sBAAsB,MAAc,UAA6B;AAjI5E,cAAAA;AAkIQ,cAAI,UAAqD;AACzD,cAAI,eAAe,IAAI,GAAG;AACtB,sBAAU,wBAAwB,MAAM,QAAQ;qBACzC,gBAAgB,IAAI,GAAG;AAC9B,sBAAU,qBAAqB,MAAM,QAAQ;iBAC1C;AACH,2BAAe,OAAO,uBAAuB,QAAQ,cAAc;;AAGvE,iBAAO,gBAAAA,MAAA,SAAO,8BAAP,KAAAA,KAAoB;QAC/B;;;;;;;QAQA,OAAO,aAAa,UAA0B;AAC1C,gBAAM,SAAS,aAAa,aAAY;AACxC,cAAI,UAAU;AAAE,mBAAO,OAAO,QAAQ,QAAQ;;AAC9C,iBAAO;QACX;;;;QAKA,OAAO,WAAWC,SAAgB,UAAmB;AACjD,gBAAM,SAAS,aAAa,WAAWA,OAAM;AAC7C,cAAI,UAAU;AAAE,mBAAO,OAAO,QAAQ,QAAQ;;AAC9C,iBAAO;QACX;;AAjFO;uBAAY,SAAC,SAAkD;AAClE,uBAAe,SAAS,uBAAuB,QAAQ,cAAc;AAErE,YAAI,cAAc,WAAW,QAAQ,YAAY,QAAQ,SAAS,WAAW,MAAM;AAC/E,gBAAM,WAAW,SAAS,YAAY,QAAQ,SAAS,OAAO;AAC9D,gBAAMC,UAAS,aAAa,aAAa,UAAU,QAAQ,SAAS,IAAI;AACxE,cAAIA,QAAO,YAAY,QAAQ,WAAWA,QAAO,eAAe,QAAQ,YAAY;AAChF,mBAAOA;;AAEX,kBAAQ,IAAI,kFAAkF;;AAGlG,cAAM,SAAS,IAAI,QAAO,QAAQ,UAAU;AAE5C,uBAAe,OAAO,YAAY,QAAQ,SACtC,+BAA+B,QAAQ,cAAc;AAEzD,eAAO;MACX;AAlBA,mBA9CS,SA8CF;AA9CL,MAAO,SAAP;;;;;AClCN,MAAAC,eAAA;;AAmBA;AAEA;AASA;AAEA;AAMA;AAEA;;;;;ACnCM,WAAU,WAAW,OAAeC,OAAY;AAClD,UAAMC,aAAY,KAAK,SAAS;AAChC,UAAM,SAAwB,CAAA;AAC9B,QAAI,QAAQ,GAAG,OAAO,GAAG,QAAQ;AACjC,aAAS,IAAI,GAAG,IAAID,MAAK,QAAQ,KAAK;AAGlC,cAAU,SAAS,IAAK,OAAO,QAAQA,MAAK,CAAC,CAAC;AAC9C,cAAQ;AAGR,aAAO,QAAQ,OAAO;AAElB,cAAM,QAAS,SAAU,OAAO;AAChC,kBAAU,KAAM,OAAO,SAAU;AACjC,gBAAQ;AAIR,YAAI,UAAU,GAAG;AACb,mBAASC;eACN;AACH,iBAAO,KAAK,QAAQ,KAAK;AACzB,kBAAQ;;;;AAKpB,WAAO;EACX;AAlCA,MAAM;AAAN;;MAAM,SAAS;;;;;ACQT,WAAU,WAAWC,OAAc,SAAe;AACpD,QAAIC,SAAQ,UAAUD,KAAI,EAAE,KAAK,GAAG;AAGpC,YAAQ,MAAM,IAAI,EAAE,QAAQ,CAAC,WAAU;AAEnC,YAAM,QAAQ,OAAO,MAAM,+BAA+B;AAC1D,qBAAe,UAAU,MAAM,kCAAkC,WAAW,OAAO;AAEnF,UAAI,YAAY;AAChB,YAAM,YAAY,WAAW,SAAS,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;AACzD,YAAM,WAAW,SAAS,MAAM,CAAC,CAAC;AAClC,YAAM,QAAQ,IAAI,OAAO,KAAM,MAAM,CAAC,CAAE,MAAM,GAAG;AACjD,MAAAC,SAAQA,OAAM,QAAQ,OAAO,CAACC,MAAK,WAAU;AACzC,cAAM,MAAM,EAAE,UAAU,SAAS;AACjC,YAAI,QAAQ,GAAG;AACX,mBAAS,OAAO,aAAa,OAAO,WAAW,CAAC,GAAG,QAAQ;AAC3D;;AAEJ,eAAO;MACX,CAAC;IACL,CAAC;AAED,WAAOD,OAAM,MAAM,GAAG;EAC1B;AAhCA;;MAAAE;AAEA;AACA;;;;;ACFA,eAea;AAfb;;;AACA;AAcM,MAAO,eAAP,cAA4B,YAAW;;;;;QAQzC,YAAY,QAAgBC,OAAc,QAAgBC,WAAgB;AACtE,gBAAM,QAAQD,OAAMC,SAAQ;AARhC;AASI,6BAAK,SAAU;QACnB;;;;QAKA,IAAI,UAAO;AAAa,iBAAO,mBAAK;QAAS;;;;QAK7C,eAAY;AACR,iBAAO,WAAW,KAAK,OAAO,KAAK,OAAO;QAC9C;;AAtBA;;;;;AChBJ,MAIa;AAJb;;;AAIO,MAAM,YAAsC;QACjD,IAAI,OAAO,SAAQ;;;;;;ACNrB;;AAmBA;AACA;AAEA;AACA;AAEA;;;;;ACvBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wBAAAC;IAAA,qBAAAC;IAAA;;;;;;;;;;;;;;;;;;;;;;;;aAAAC;IAAA;;;;;;;;;;;;;;;;uBAAAC;IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uBAAAC;IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;cAAAC;IAAA;;;;;;;;;;;;;;;;kBAAAC;IAAA,mBAAAC;IAAA;;;qBAAAC;IAAA,cAAAC;IAAA;kBAAAC;IAAA,cAAAC;IAAA;;;;;;;;;;;;;;;;;;;;;;;;AAGA;AAEA;AAUA,MAAAC;AAMA;AAOA,MAAAC;AAMA,MAAAC;AAYA;AASA;AAgCA,MAAAC;AAMA,MAAAC;AAqBA,MAAAC;AAcA;;;;;AClIA,MAAAC,aAAA;;AAOA;AAIA;;;;;ACXA,MAeI,UAWA,mBAgBA,iBAKA,YAsBA,YAKAC,kBA8BA,WAuOA;AA/UJ;AAAA;AAeA,MAAI,WAAW,WAAW;AACtB,mBAAW,OAAO,UAAU,SAASC,UAASC,IAAG;AAC7C,mBAAS,GAAG,IAAI,GAAGC,KAAI,UAAU,QAAQ,IAAIA,IAAG,KAAK;AACjD,gBAAI,UAAU,CAAC;AACf,qBAAS,KAAK;AAAG,kBAAI,OAAO,UAAU,eAAe,KAAK,GAAG,CAAC;AAAG,gBAAAD,GAAE,CAAC,IAAI,EAAE,CAAC;AAAA,UAC/E;AACA,iBAAOA;AAAA,QACX;AACA,eAAO,SAAS,MAAM,MAAM,SAAS;AAAA,MACzC;AAEA,MAAI;AAAA,MAAmC,WAAY;AAC/C,iBAASE,mBAAkB,SAAS;AAChC,eAAK,UAAU;AACf,eAAK,YAAY,CAAC;AAAA,QACtB;AACA,QAAAA,mBAAkB,UAAU,KAAK,SAAU,WAAW,IAAI;AACtD,cAAI,YAAY,KAAK,UAAU,SAAS,KAAK,CAAC;AAC9C,eAAK,UAAU,SAAS,IAAI,UAAU,OAAO,CAAC,EAAE,CAAC;AAAA,QACrD;AACA,QAAAA,mBAAkB,UAAU,eAAe,SAAU,WAAW,OAAO;AACnE,cAAI,QAAQ;AACZ,cAAI,YAAY,KAAK,UAAU,SAAS,KAAK,CAAC;AAC9C,oBAAU,QAAQ,SAAU,IAAI;AAAE,mBAAO,GAAG,EAAE,QAAQ,OAAO,MAAa,CAAC;AAAA,UAAG,CAAC;AAAA,QACnF;AACA,eAAOA;AAAA,MACX,EAAE;AAEF,OAAC,SAAUC,kBAAiB;AACxB,QAAAA,iBAAgBA,iBAAgB,KAAK,IAAI,CAAC,IAAI;AAC9C,QAAAA,iBAAgBA,iBAAgB,QAAQ,IAAI,CAAC,IAAI;AAAA,MACrD,GAAG,oBAAoB,kBAAkB,CAAC,EAAE;AAC5C,MAAI;AAAA,MAA4B,WAAY;AACxC,iBAASC,cAAa;AAClB,eAAK,gBAAgB,CAAC;AAAA,QAC1B;AACA,QAAAA,YAAW,UAAU,OAAO,SAAU,MAAM;AACxC,eAAK,cAAc,KAAK,IAAI;AAC5B,eAAK,SAAS,MAAM,gBAAgB,KAAK,KAAK,aAAa;AAAA,QAC/D;AACA,QAAAA,YAAW,UAAU,SAAS,SAAUC,QAAO,KAAK;AAChD,cAAI,OAAO,KAAK,cAAc,OAAOA,QAAO,GAAG,EAAE,CAAC;AAClD,eAAK,SAAS,MAAM,gBAAgB,QAAQ,KAAK,aAAa;AAC9D,iBAAO;AAAA,QACX;AACA,QAAAD,YAAW,UAAU,UAAU,SAAU,MAAM;AAC3C,iBAAO,KAAK,cAAc,QAAQ,IAAI;AAAA,QAC1C;AACA,QAAAA,YAAW,UAAU,WAAW,SAAUE,KAAI;AAC1C,eAAK,WAAWA;AAAA,QACpB;AACA,eAAOF;AAAA,MACX,EAAE;AAGF,OAAC,SAAUG,aAAY;AACnB,QAAAA,YAAW,SAAS,IAAI;AACxB,QAAAA,YAAW,OAAO,IAAI;AAAA,MAC1B,GAAG,eAAe,aAAa,CAAC,EAAE;AAClC,MAAIT,mBAAkB;AAAA,QAClB,OAAO;AAAA,UACH;AAAA,YACI,MAAM;AAAA,YACN,WAAW;AAAA,YACX,iBAAiB;AAAA,YACjB,MAAM;AAAA,cACF,WAAW;AAAA,cACX,SAAS;AAAA,YACb;AAAA,UACJ;AAAA,UACA;AAAA,YACI,MAAM;AAAA,YACN,WAAW;AAAA,YACX,iBAAiB;AAAA,YACjB,MAAM;AAAA,cACF,WAAW;AAAA,cACX,SAAS;AAAA,YACb;AAAA,UACJ;AAAA,QACJ;AAAA,QACA,UAAU;AAAA,QACV,QAAQ;AAAA,QACR,UAAU;AAAA,UACN,GAAG;AAAA,UACH,GAAG;AAAA,QACP;AAAA,QACA,aAAa;AAAA,MACjB;AAEA,MAAI;AAAA,MAA2B,WAAY;AACvC,iBAASU,aAAY;AACjB,eAAK,gBAAgB,CAAC;AACtB,eAAK,SAAS,CAAC;AACf,eAAK,sBAAsB;AAAA,YACvB,MAAM;AAAA,YACN,QAAQ;AAAA,YACR,OAAO;AAAA,UACX;AACA,eAAK,sBAAsB;AAAA,YACvB,KAAK;AAAA,YACL,QAAQ;AAAA,YACR,QAAQ;AAAA,UACZ;AAEA,cAAI,UAAU,SAAS,uBAAuB;AAC9C,cAAI,iBAAiB,KAAK,mBAAmB,EAAE,SAAS,OAAO,WAAW,QAAQ,CAAC;AACnF,kBAAQ,YAAY,cAAc;AAClC,mBAAS,KAAK,YAAY,OAAO;AACjC,eAAK,YAAY;AAEjB,eAAK,wBAAwB,KAAK,0BAA0B;AAC5D,eAAK,qBAAqB;AAAA,QAC9B;AACA,QAAAA,WAAU,UAAU,KAAK,SAAU,OAAO,IAAI;AAC1C,cAAIC;AACJ,eAAK,SAAS,SAAS,SAAS,CAAC,GAAG,KAAK,MAAM,IAAIA,MAAK,CAAC,GAAGA,IAAG,KAAK,IAAI,IAAIA,IAAG;AAAA,QACnF;AACA,QAAAD,WAAU,UAAU,SAAS,SAAUE,eAAc,MAAM;AACvD,cAAI,SAAS,gBAAgB,KAAK;AAC9B,iBAAK,gBAAgBA,aAAY;AAAA,UACrC,WACS,SAAS,gBAAgB,QAAQ;AACtC,iBAAK,mBAAmBA,aAAY;AAAA,UACxC;AAAA,QACJ;AACA,QAAAF,WAAU,UAAU,qBAAqB,SAAUE,eAAc;AAC7D,cAAI,QAAQ;AACZ,cAAI,uBAAuB,KAAK,yBAAyBA,aAAY;AACrE,cAAIC;AACJ,cAAI,CAAC,sBAAsB;AACvB;AAAA,UACJ;AACA,UAAAA,QAAO,qBAAqB;AAC5B,UAAAA,MAAK,UAAU,IAAI,yBAAyB;AAC5C,cAAI;AACJ,UAAAA,MAAK,iBAAiB,KAAK,uBAAwB,cAAc,SAAU,OAAO;AAC9E,gBAAI,MAAM,WAAWA,OAAM;AACvB,cAAAA,MAAK,oBAAoB,MAAM,uBAAuB,WAAW;AACjE,oBAAM,UAAU,YAAYA,KAAI;AAAA,YACpC;AAAA,UACJ,CAAE;AAAA,QACN;AACA,QAAAH,WAAU,UAAU,kBAAkB,SAAUE,eAAc;AAC1D,cAAIC,QAAO,KAAK,oBAAoBD,aAAY;AAChD,eAAK,cAAc,KAAK,EAAE,cAAcA,eAAc,MAAMC,MAAK,CAAC;AAGlE,eAAK,UAAUD,cAAa,QAAQ,WAAW,cAAc;AAAA,QACjE;AACA,QAAAF,WAAU,UAAU,sBAAsB,SAAUE,eAAc;AAC9D,cAAID;AACJ,cAAI,OAAO,KAAK,uBAAuBC,aAAY;AACnD,cAAI,YAAYA,cAAa,QAAQ;AACrC,cAAI,WAAW;AACX,aAACD,MAAK,KAAK,WAAW,IAAI,MAAMA,KAAI,UAAU,MAAM,GAAG,CAAC;AAAA,UAC5D;AACA,eAAK,UAAU,YAAY,IAAI;AAC/B,iBAAO;AAAA,QACX;AACA,QAAAD,WAAU,UAAU,2BAA2B,SAAUE,eAAc;AACnE,cAAI,MAAM;AACV,mBAAS,IAAI,GAAG,IAAI,KAAK,cAAc,UAAU,MAAM,GAAG,KAAK;AAC3D,gBAAI,KAAK,cAAc,CAAC,EAAE,iBAAiBA,eAAc;AACrD,oBAAM;AAAA,YACV;AAAA,UACJ;AACA,cAAI,QAAQ,IAAI;AACZ,mBAAO,KAAK,cAAc,OAAO,KAAK,CAAC,EAAE,CAAC;AAAA,UAC9C;AACA;AAAA,QACJ;AACA,QAAAF,WAAU,UAAU,eAAe,SAAU,SAAS;AAClD,cAAIC;AACJ,mBAASA,MAAK,YAAY,QAAQ,YAAY,SAAS,SAAS,QAAQ,cAAc,QAAQA,QAAO,SAAS,SAASA,IAAG,MAAM;AAAA,QACpI;AACA,QAAAD,WAAU,UAAU,eAAe,SAAU,SAAS;AAClD,cAAIC;AACJ,mBAASA,MAAK,YAAY,QAAQ,YAAY,SAAS,SAAS,QAAQ,cAAc,QAAQA,QAAO,SAAS,SAASA,IAAG,MAAM;AAAA,QACpI;AACA,QAAAD,WAAU,UAAU,2BAA2B,SAAU,SAAS;AAC9D,cAAI,QAAQ,KAAK,oBAAoB,KAAK,aAAa,OAAO,CAAC;AAC/D,cAAI,UAAU,KAAK,oBAAoB,KAAK,aAAa,OAAO,CAAC;AACjE,cAAI,QAAQ,KAAK,UAAU;AAC3B,gBAAM,YAAY,mBAAmB,OAAO;AAC5C,gBAAM,YAAY,eAAe,KAAK;AAAA,QAC1C;AACA,QAAAA,WAAU,UAAU,yBAAyB,SAAUE,eAAc;AACjE,cAAI,QAAQ;AACZ,cAAI,UAAUA,cAAa;AAC3B,cAAI,WAAW,QAAQ;AAEvB,eAAK,yBAAyB,OAAO;AAErC,cAAI,mBAAmB,KAAK,mBAAmB,EAAE,SAAS,OAAO,WAAW,eAAe,CAAC;AAC5F,cAAI,SAAS,KAAK,mBAAmB,EAAE,SAAS,OAAO,WAAW,gBAAgB,CAAC;AACnF,cAAI,UAAU,KAAK,mBAAmB,EAAE,SAAS,OAAO,WAAW,iBAAiB,CAAC;AACrF,cAAI,UAAU,KAAK,mBAAmB,EAAE,SAAS,OAAO,WAAW,iBAAiB,CAAC;AACrF,kBAAQ,YAAY,QAAQ,WAAW;AACvC,cAAI,YAAY,QAAQ,cAAc,QAAQ;AAE9C,cAAI,UAAU;AACV,gBAAI,gBAAgB,KAAK,mBAAmB,EAAE,SAAS,OAAO,WAAW,cAAc,CAAC;AACxF,gBAAI,OAAO,aAAa,YAAY,oBAAoB;AACpD,4BAAc,YAAY,IAAI,OAAO,QAAQ,EAAE,QAAQ;AAC3D,gBAAI,OAAO,aAAa,UAAU;AAC9B,kBAAID,MAAK,SAAS,SAAS,UAAUA,QAAO,SAAS,MAAMA,KAAI,cAAc,SAAS,WAAWG,QAAO,SAAS,MAAM,KAAK,SAAS,OAAOC,SAAQ,OAAO,SAAS,YAAY;AAChL,kBAAI,cAAc,KAAK,mBAAmB,EAAE,SAAkB,WAAW,aAAa,MAAMD,MAAK,CAAC;AAClG,kBAAIC;AACA,4BAAY,MAAM,QAAQA;AAC9B,4BAAc,YAAY,WAAW;AAAA,YACzC;AACA,oBAAQ,YAAY,aAAa;AAAA,UACrC;AACA,kBAAQ,YAAY,OAAO;AAC3B,2BAAiB,YAAY,OAAO;AAEpC,cAAI,WAAW;AACX,gBAAI,QAAQ,QAAQ;AAChB,qBAAO,MAAM,aAAa;AAC1B,+BAAiB,YAAY,MAAM;AAAA,YACvC,OACK;AACD,+BAAiB,MAAM,aAAa;AAAA,YACxC;AAAA,UACJ;AAEA,cAAI,QAAQ,aAAa;AACrB,gBAAI,iBAAiB,KAAK,mBAAmB,EAAE,SAAS,OAAO,WAAW,iBAAiB,CAAC;AAC5F,gBAAI,gBAAgB,KAAK,mBAAmB;AAAA,cACxC,SAAS;AAAA,cACT,WAAW;AAAA,YACf,CAAC;AACD,2BAAe,YAAY,aAAa;AACxC,oBAAQ,YAAY,cAAc;AAClC,6BAAiB,UAAU,IAAI,2BAA2B;AAC1D,0BAAc,iBAAiB,SAAS,SAAU,OAAO;AACrD,kBAAIJ,KAAIK;AACR,eAACA,OAAML,MAAK,MAAM,QAAQ,WAAW,OAAO,OAAO,QAAQK,QAAO,SAAS,SAASA,IAAG,KAAKL,KAAI,EAAE,QAAQC,eAAc,MAAa,CAAC;AACtI,oBAAM,gBAAgB;AAAA,YAC1B,CAAC;AAAA,UACL;AACA,2BAAiB,iBAAiB,SAAS,SAAU,OAAO;AAAE,gBAAID,KAAIK;AAAI,oBAAQA,OAAML,MAAK,MAAM,QAAQ,WAAW,KAAK,OAAO,QAAQK,QAAO,SAAS,SAASA,IAAG,KAAKL,KAAI,EAAE,QAAQC,eAAc,MAAa,CAAC;AAAA,UAAG,CAAC;AAEzN,cAAI,YAAY,KAAK,aAAa,OAAO,MAAM,QAAQ,UAAU;AACjE,2BAAiB,UAAU,IAAI,mBAAmB,SAAS;AAC3D,iBAAO;AAAA,QACX;AACA,QAAAF,WAAU,UAAU,qBAAqB,SAAUC,KAAI;AACnD,cAAI,UAAUA,IAAG,SAAS,YAAYA,IAAG,WAAWG,QAAOH,IAAG;AAC9D,cAAI,OAAO,SAAS,cAAc,OAAO;AACzC,cAAI,WAAW;AACX,iBAAK,YAAY;AAAA,UACrB;AACA,eAAK,cAAcG,SAAQ;AAC3B,iBAAO;AAAA,QACX;AAKA,QAAAJ,WAAU,UAAU,uBAAuB,WAAY;AACnD,cAAI,gBAAgB,KAAK,mBAAmB,EAAE,SAAS,OAAO,WAAW,kBAAkB,CAAC;AAC5F,wBAAc,aAAa,eAAe,MAAM;AAChD,wBAAc,aAAa,aAAa,QAAQ;AAGhD,wBAAc,MAAM,SAAS;AAC7B,wBAAc,MAAM,OAAO;AAC3B,wBAAc,MAAM,SAAS;AAC7B,wBAAc,MAAM,SAAS;AAC7B,wBAAc,MAAM,WAAW;AAC/B,wBAAc,MAAM,UAAU;AAC9B,wBAAc,MAAM,WAAW;AAC/B,wBAAc,MAAM,QAAQ;AAC5B,wBAAc,MAAM,UAAU;AAC9B,mBAAS,KAAK,YAAY,aAAa;AACvC,eAAK,gBAAgB;AAAA,QACzB;AAIA,QAAAA,WAAU,UAAU,YAAY,SAAU,SAAS;AAC/C,cAAI,QAAQ;AACZ,eAAK,cAAc,cAAc;AAOjC,qBAAW,WAAY;AACnB,kBAAM,cAAc,cAAc;AAAA,UACtC,GAAG,GAAG;AAAA,QACV;AAIA,QAAAA,WAAU,UAAU,4BAA4B,WAAY;AACxD,cAAIO,MAAK,SAAS,cAAc,OAAO;AACvC,cAAI,cAAc;AAAA,YACd,eAAe;AAAA,YACf,aAAa;AAAA,YACb,kBAAkB;AAAA,YAClB,YAAY;AAAA,UAChB;AACA,cAAIf;AACJ,eAAKA,MAAK,aAAa;AACnB,gBAAIe,IAAG,MAAMf,EAAC,MAAM,QAAW;AAC3B,qBAAO,YAAYA,EAAC;AAAA,YACxB;AAAA,UACJ;AAEA,iBAAO;AAAA,QACX;AACA,eAAOQ;AAAA,MACX,EAAE;AAKF,MAAI;AAAA,MAAuB,WAAY;AACnC,iBAASQ,OAAM,MAAM;AACjB,cAAI,QAAQ;AACZ,eAAK,UAAU,KAAK;AACpB,eAAK,gBAAgB,IAAI,WAAW;AACpC,eAAK,OAAO,IAAI,UAAU;AAC1B,cAAIC,SAAQ,KAAK,cAAc,IAAI;AACnC,eAAK,UAAU,SAAS,SAAS,CAAC,GAAGnB,gBAAe,GAAG,IAAI;AAC3D,eAAK,QAAQ,QAAQmB;AACrB,eAAK,cAAc,SAAS,SAAU,MAAM,MAAM;AAAE,mBAAO,MAAM,KAAK,OAAO,MAAM,IAAI;AAAA,UAAG,CAAC;AAC3F,eAAK,KAAK,GAAG,WAAW,SAAS,SAAUR,KAAI;AAC3C,gBAAI,SAASA,IAAG,QAAQ,QAAQA,IAAG;AACnC,kBAAM,oBAAoB,MAAM;AAEhC,mBAAO,cAAc,EAAE,WAAW,SAAS,KAAK;AAAA,UACpD,CAAC;AAED,eAAK,KAAK,GAAG,WAAW,OAAO,SAAUA,KAAI;AACzC,gBAAI,SAASA,IAAG,QAAQ,QAAQA,IAAG;AACnC,mBAAO,OAAO,cAAc,EAAE,WAAW,OAAO,KAAK;AAAA,UACzD,CAAC;AAAA,QACL;AACA,QAAAO,OAAM,UAAU,QAAQ,SAAU,SAAS;AACvC,cAAI,UAAU,KAAK,iBAAiB,SAAS,OAAO;AACpD,iBAAO,KAAK,KAAK,OAAO;AAAA,QAC5B;AACA,QAAAA,OAAM,UAAU,UAAU,SAAU,SAAS;AACzC,cAAI,UAAU,KAAK,iBAAiB,WAAW,OAAO;AACtD,iBAAO,KAAK,KAAK,OAAO;AAAA,QAC5B;AACA,QAAAA,OAAM,UAAU,OAAO,SAAU,SAAS;AACtC,cAAI,cAAc,KAAK,QAAQ,MAAM,KAAK,SAAUP,KAAI;AACpD,gBAAI,OAAOA,IAAG;AACd,mBAAO,SAAS,QAAQ;AAAA,UAC5B,CAAC,KAAK,CAAC;AACP,cAAIS,UAAS,SAAS,SAAS,CAAC,GAAG,WAAW,GAAG,OAAO;AACxD,eAAK,YAAY,CAAC,UAAU,YAAY,aAAa,GAAGA,OAAM;AAC9D,cAAIR,gBAAe,IAAI,kBAAkBQ,OAAM;AAC/C,eAAK,kBAAkBR,aAAY;AACnC,iBAAOA;AAAA,QACX;AACA,QAAAM,OAAM,UAAU,aAAa,WAAY;AACrC,iBAAO,KAAK,cAAc,OAAO,GAAG,CAAC;AACjC;AAAA,QACR;AAYA,QAAAA,OAAM,UAAU,cAAc,SAAU,OAAOE,SAAQ;AACnD,cAAI,QAAQ;AACZ,gBAAM,QAAQ,SAAU,MAAM;AAE1B,YAAAA,QAAO,IAAI,IAAIA,QAAO,IAAI,KAAK,OAAO,MAAM,QAAQ,IAAI,IAAIA,QAAO,IAAI;AAAA,UAC3E,CAAC;AAAA,QACL;AACA,QAAAF,OAAM,UAAU,oBAAoB,SAAUN,eAAc;AACxD,cAAI,QAAQ;AACZ,eAAK,cAAc,KAAKA,aAAY;AACpC,cAAI,WAAWA,cAAa,QAAQ,aAAa,SAAYA,cAAa,QAAQ,WAAW,KAAK,QAAQ;AAC1G,cAAI,UAAU;AACV,uBAAW,WAAY;AAAE,qBAAO,MAAM,oBAAoBA,aAAY;AAAA,YAAG,GAAG,QAAQ;AAAA,UACxF;AAAA,QACJ;AACA,QAAAM,OAAM,UAAU,sBAAsB,SAAUN,eAAc;AAC1D,cAAIL,SAAQ,KAAK,cAAc,QAAQK,aAAY;AACnD,cAAIL,WAAU,IAAI;AACd,iBAAK,cAAc,OAAOA,QAAO,CAAC;AAAA,UACtC;AAAA,QACJ;AACA,QAAAW,OAAM,UAAU,mBAAmB,SAAU,MAAM,SAAS;AACxD,cAAI,UAAU,EAAE,KAAW;AAC3B,cAAI,OAAO,YAAY,UAAU;AAC7B,oBAAQ,UAAU;AAAA,UACtB,WACS,OAAO,YAAY,UAAU;AAClC,sBAAU,SAAS,SAAS,CAAC,GAAG,OAAO,GAAG,OAAO;AAAA,UACrD;AACA,iBAAO;AAAA,QACX;AACA,QAAAA,OAAM,UAAU,gBAAgB,SAAU,MAAM;AAC5C,cAAI,iBAAkB,QAAQ,KAAK,SAAU,CAAC,GAAG,MAAM;AACvD,cAAI,oBAAoBlB,iBAAgB,MAAM,IAAI,SAAU,aAAa;AAGrE,gBAAI,cAAc;AAClB,0BAAc,QAAQ,SAAUE,IAAG,KAAK;AACpC,kBAAIA,GAAE,SAAS,YAAY;AACvB,8BAAc;AAAA,YACtB,CAAC;AACD,gBAAI,WAAW,gBAAgB,KAAK,cAAc,OAAO,aAAa,CAAC,EAAE,CAAC,IAAI,CAAC;AAC/E,mBAAO,SAAS,SAAS,CAAC,GAAG,WAAW,GAAG,QAAQ;AAAA,UACvD,CAAC;AACD,iBAAO,kBAAkB,OAAO,aAAa;AAAA,QACjD;AACA,eAAOgB;AAAA,MACX,EAAE;AAAA;AAAA;;;ACtbF,MAEA,eAFAG,KAQM,mBA+SC;AAvTP;AAAA;AAAA;AAAA;AACA,MAAAC;AACA,sBAAmB;AACnB;AACA,MAAAC;AACA;AAGA,MAAM,qBAAoBF,MAAA,cAAc,WAAW;AAAA,QAAzB;AAAA;AAaxB,4CAAa,CAACG,OAAM;AAClB,YAAAA,GAAE,eAAe;AACjB,gBAAI,MAAMA,GAAE,cAAc,QAAQA,GAAE,cAAc,QAAQ;AAC1D,kBAAM,gBAAgB;AACtB,uBAAW,WAAW;AACpB,qBAAO,WAAW;AAAA,YACpB,GAAG,GAAI;AAAA,UACT;AAkCA,qDAAsB,CAAC,UAAU;AAC/B,8BAAkB,aAAa,EAAE,QAAQ,MAAM,MAAM;AAAA,UACvD;AAEA,mDAAoB,CAAC,UAAU;AAC7B,8BAAkB,aAAa,EAAE,MAAM,MAAM,MAAM;AAAA,UACrD;AAEA,kDAAmB,CAAC,UAAU;AAC5B,8BAAkB,aAAa,EAAE,KAAK,MAAM,MAAM;AAAA,UACpD;AAEA,0CAAW,CAACA,OAAM;AAChB,YAAAA,GAAE,eAAe;AACjB,kBAAM,MAAMA,GAAE,cAAc,QAAQ;AACpC,kBAAM,QAAQ,SAAS,cAAc,OAAO;AAC5C,kBAAM,aAAa,YAAY,UAAU;AACzC,kBAAM,aAAa,SAAS,GAAG;AAC/B,qBAAS,KAAK,YAAY,KAAK;AAC/B,kBAAM,OAAO;AACb,kBAAM,kBAAkB,GAAG,IAAI;AAC/B,qBAAS,YAAY,MAAM;AAC3B,qBAAS,KAAK,YAAY,KAAK;AAC/B,kBAAM,gBAAgBA,GAAE;AACxB,0BAAc,UAAU,IAAI,QAAQ;AACpC,uBAAW,WAAW;AACpB,4BAAc,UAAU,OAAO,QAAQ;AAAA,YACzC,GAAG,GAAI;AAAA,UACT;AAEA,6CAAc,CAACA,OAAM;AACnB,YAAAA,GAAE,eAAe;AACjB,kBAAM,SAASA,GAAE,cAAc,QAAQ;AACvC,kBAAM,MAAMA,GAAE,cAAc,QAAQ;AACpC,kBAAM,UAAUA,GAAE,cAAc,QAAQ;AAExC,gBAAI,WAAW;AAEf,oBAAO,QAAQ;AAAA,cACb,KAAK;AACH,2BAAW,iCAAiC,mBAAmB,GAAG,CAAC,SAAS,mBAAmB,OAAO,CAAC;AACvG;AAAA,cACF,KAAK;AACH,2BAAW,gDAAgD,mBAAmB,GAAG,CAAC,UAAU,mBAAmB,OAAO,CAAC;AACvH;AAAA,cACF,KAAK;AACH,2BAAW,uDAAuD,mBAAmB,GAAG,CAAC,YAAY,mBAAmB,OAAO,CAAC;AAChI;AAAA,YACJ;AAEA,gBAAI,aAAa,IAAI;AACnB,qBAAO,KAAK,UAAU,QAAQ;AAAA,YAChC;AAAA,UACF;AAEA,6CAAc,CAACA,OAAM;AACnB,YAAAA,GAAE,eAAe;AACjB,kBAAM,MAAMA,GAAE,cAAc,QAAQ;AACpC,kBAAM,UAAU,IAAI,KAAK,EAAE,cAAc,eAAe,CAAC;AACzD,oBAAQ,KAAK,CAAC,aAAa;AACzB,sBAAQ,IAAI,4BAA4B,QAAQ;AAAA,YAClD,CAAC;AAAA,UAEH;AAIA,8CAAe,CAAC,UAAU;AACxB,oBAAQ,IAAI,oBAAoB,MAAM,MAAM;AAC5C,kBAAM,WAAW,MAAM,OAAO;AAC9B,kBAAM,SAAS,KAAK,QAAQ,KAAK,QAAQ;AACzC,kBAAM,SAAS,SAAS,YAAY,MAAM,KAAK,IAAI,SAAS,MAAM;AAClE,mBAAO,OAAO;AAAA,UAChB;AAAA;AAAA,QA5HA,UAAU;AACR,mBAAS,iBAAiB,wBAAuB,KAAK,YAAY;AAClE,mBAAS,iBAAiB,wBAAuB,KAAK,YAAY;AAClE,mBAAS,iBAAiB,wBAAwB,KAAK,mBAAmB;AAC1E,mBAAS,iBAAiB,qBAAqB,KAAK,gBAAgB;AACpE,mBAAS,iBAAiB,sBAAsB,KAAK,iBAAiB;AACtE,eAAK,cAAc;AACnB,gBAAM,gBAAgB;AAAA,QACxB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAmBA,iBAAiBA,IAAE;AACjB,UAAAA,GAAE,eAAe;AACjB,gBAAM,MAAMA,GAAE,cAAc,QAAQ;AACpC,gBAAM,QAAQ,SAAS,eAAe,6BAA6B;AACnE,gBAAM,MAAM;AACZ,4BAAkB,wBAAwB,IAAGA,EAAC;AAAA,QAChD;AAAA;AAAA,QAGA,aAAaA,IAAG;AACd,UAAAA,GAAE,eAAe;AACjB,gBAAM,SAASA,GAAE;AACjB,iBAAO,aAAa,qBAAqB,IAAI;AAC7C,iBAAO,WAAW;AAClB,qBAAW,WAAW;AACpB,kBAAM,UAAU,IAAI,OAAO,MAAM,EAAE,cAAc,eAAe,CAAC;AACjE,oBAAQ,KAAK,CAAC,aAAa;AACzB,sBAAQ,IAAI,wBAAwB,QAAQ;AAC5C,qBAAO,WAAW;AAClB,qBAAO,gBAAgB,mBAAmB;AAAA,YAC5C,CAAC;AAAA,UACH,GAAG,GAAI;AAAA,QACT;AAAA,QA6EA,gBAAgB;AACd,gBAAM,mBAAmB;AACzB,cAAI;AACJ,cAAK,SAAS,iBAAkB;AAC9B,gBAAK,SAAS,gBAAgB,aAAa,oBAAoB,GAAG;AAChE,0BAAY,SAAS,gBAAgB,aAAa,oBAAoB;AAAA,YACxE,OAAO;AACL,kBAAK,aAAa,QAAQ,eAAe,MAAM,MAAO;AACpD,4BAAY,aAAa,QAAQ,eAAe;AAAA,cAClD,OAAO;AACL,4BAAY;AAAA,cACd;AAAA,YACF;AACA,gBAAI,cAAc,UAAU;AAC1B,0BAAY,OAAO,WAAW,8BAA8B,EAAE,UAAU,SAAS;AAAA,YACnF;AACA,qBAAS,gBAAgB,aAAa,iBAAiB,SAAS;AAAA,UAClE;AAAA,QACF;AAAA,QAMA,aAAa;AACX,mBAAS,oBAAoB,wBAAuB,KAAK,YAAY;AACrE,mBAAS,oBAAoB,wBAAuB,KAAK,YAAY;AAAA,QACvE;AAAA,QAgDA,OAAO,wBAAwB,QAAQ,OAAM;AAC3C,gBAAM,WAAW;AACjB,mBAAS,cAAc,IAAI,YAAY,wBAAwB;AAAA,YAC7D,QAAQ;AAAA,cACN;AAAA,cACA;AAAA,cACA,eAAe,MAAM;AAAA,YACvB;AAAA,UACF,CAAC,CAAC;AAAA,QACJ;AAAA,QAEA,OAAO,aAAa,OAAM;AACxB,mBAAS,cAAc,IAAI,YAAY,wBAAwB;AAAA,YAC7D,QAAQ;AAAA,cACN,eAAe,MAAM;AAAA,YACvB;AAAA,UACF,CAAC,CAAC;AAAA,QACJ;AAAA;AAAA,QAGA,OAAO,aAAa,WAAW;AAC7B,gBAAM,qBAAqB,CAAC,EAAE,MAAM,KAAK,UAAU,iBAAiB,4BAA4B,CAAC;AACjG,6BAAmB,IAAI,SAAU,kBAAkB;AACjD,mBAAO,IAAI,OAAO,UAAU,QAAQ,gBAAgB;AAAA,UACtD,CAAC;AAAA,QACH;AAAA,QAEA,OAAO,gBAAgBC,QAAO,uBAAuB;AACnD,gBAAM,gBAAgB;AAAA,YACpB,eAAe,CAAC,OAAMD,OAAM;AAC1B,oCAAsB,OAAMA,EAAC;AAAA,YAC/B;AAAA,YACA,OAAOC;AAAA,UACT;AACA,iBAAO,IAAI,yCAAO,aAAa;AAAA,QACjC;AAAA,QAEA,OAAa,gBAAe;AAAA;AAE1B,kBAAM,UAAU,IAAIC,cAAa,OAAO,qBAAqB;AAC7D,kBAAM,WAAW,MAAM,QAAQ,QAAQ;AACvC,gBAAI,SAAS,IAAI;AACf,oBAAM,OAAO,MAAM,SAAS;AAC5B,oBAAMC,QAAO,KAAK,MAAM,IAAI;AAC5B,qBAAOA,MAAK,IAAI,CAAC,QAAQ;AAAE,uBAAO,IAAI;AAAA,cAAK,CAAC;AAAA,YAC9C;AAAA,UACF;AAAA;AAAA,QAEA,OAAO,cAAc,WAAW,aAAa,OAAO,UAAU,GAAG,YAAY,CAAC,WAAW,iBAAiB,YAAY,iBAAiB,YAAY,GAAG;AACpJ,gBAAM,YAAY,aAAa,gCAAgC;AAC/D,gBAAM,eAAe;AAAA,YACnB;AAAA,YACA,0BAA0B,SAAS,WAAW;AAC5C,qBAAO,UAAU,IAAI,UAAQ,KAAK,MAAM,MAAM,CAAC,CAAC,EAAE,KAAK,GAAG;AAAA,YAC5D;AAAA,YACA,cAAc,SAAS,SAAQ;AAC7B,kBAAI,CAAC,QAAQ,MAAM,WAAW,GAAG,GAAG;AAClC,wBAAQ,QAAQ,MAAM,QAAQ;AAAA,cAChC;AAAA,YACF;AAAA,YACA,UAAU,SAAS,KAAK;AACtB,kBAAI,CAAC,IAAI,MAAM,WAAW,GAAG,KAAK,wCAAwC,KAAK,IAAI,MAAM,MAAM,CAAC,CAAC,GAAG;AAClG,uBAAO;AAAA,cACT;AACA,qBAAO;AAAA,YACT;AAAA,YACA,UAAU;AAAA,cACR,UAAU;AAAA,cACV,SAAS;AAAA,cACT,eAAe;AAAA,cACf,WAAW;AAAA,YACb;AAAA,UACF;AAEA,eAAK,cAAc,EAAE,KAAK,CAACA,UAAS;AAClC,yBAAa,YAAYA;AACzB,kBAAM,SAAS,IAAI,cAAAC,QAAO,WAAW,YAAY;AACjD,mBAAO;AAAA,UACT,CAAC,EAAE,MAAM,CAACC,WAAU;AAClB,yBAAa,YAAY;AACzB,kBAAM,SAAS,IAAI,cAAAD,QAAO,WAAW,YAAY;AACjD,mBAAO;AAAA,UACT,CAAC;AAAA,QACH;AAAA,QAEA,OAAO,aAAa;AAClB,cAAI,UAAU,SAAS,cAAc,KAAK;AAC1C,kBAAQ,YAAY;AACpB,kBAAQ,OAAO;AAEf,cAAI,OAAO,SAAS,cAAc,MAAM;AACxC,eAAK,YAAY;AACjB,eAAK,cAAc;AACnB,kBAAQ,YAAY,IAAI;AAExB,iBAAO;AAAA,QACT;AAAA,MAEF,GA7SE,cADwBP,KACjB,WAAU,CAAC,mBAAmB,IA6JrC,cA9JwBA,KA8JjB,oBAAoB,MAAM;AAC/B,eAAO,SAAS,QAAQ;AAAA,UACtB,QAAQ;AAAA,UACR,QAAQ,CAAC;AAAA,YACP,SAAS;AAAA,YACT,SAAS,CAAC,6BAA6B;AAAA,YACvC,WAAW;AAAA,YACX,gBAAgB;AAAA,cACd,MAAM;AAAA,cACN,QAAQ;AAAA,cACR,UAAU;AAAA,YACZ;AAAA,YACA,mBAAmB,CAAC,iCAAiC;AAAA,UACvD,CAAC;AAAA,QACH,CAAC;AAAA,MACH,IAEA,cA/KwBA,KA+KjB,wBAAuB,MAAY,QAAAA,KAAA;AACxC,YAAI,OAAO,YAAY,MAAM;AAC3B,4BAAkB,aAAa,EAAE,QAAQ;AAAA,YACvC,SAAS;AAAA,YACT,UAAU;AAAA,YACV,MAAM;AAAA,UACR,CAAC;AACD;AAAA,QACF,OAAO;AACL,gBAAM,WAAW,IAAI,eAAO,gBAAgB,OAAO,QAAQ;AAC3D,gBAAM,UAAU,MAAM,SAAS,WAAW;AAC1C,cAAI,QAAQ,YAAY,OAAO;AAC7B,YAAAA,IAAK,iBAAiB;AAAA,UACxB;AACA,iBAAO;AAAA,QACT;AAAA,MACF,KAEA,cAjMwBA,KAiMjB,gBAAe,MAAM;AAC1B,eAAO,IAAI,MAAM;AAAA,UACf,UAAU;AAAA,UACV,UAAU;AAAA,YACR,GAAG;AAAA,YACH,GAAG;AAAA,UACL;AAAA,UACA,aAAa;AAAA,QACf,CAAC;AAAA,MACH,IA1MwBA;AA+S1B,MAAO,6BAAQ;AAAA;AAAA;;;ACvTf,MAGO;AAHP;AAAA;AAAA;AAAA;AACA;AACA;AACA,MAAO,4BAAP,cAA6B,WAAW;AAAA,QAAxC;AAAA;AA+DI,wDAAyB,CAAC,eAAe;AACrC,iBAAK,cAAc,WAAW,IAAI;AAClC,gBAAI,KAAK,SAAQ;AACb,kBAAI;AACA,6BAAa,QAAQ,KAAK,SAAS,KAAK,mBAAmB,WAAW,IAAI,CAAC;AAAA,cAC/E,SAASS,IAAG;AACR,wBAAQ,MAAM,kCAAkCA,EAAC;AAAA,cACrD;AAAA,YAEJ;AAAA,UACJ;AAEA,iEAAkC,CAAC,UAAU;AACzC,oBAAQ,IAAI,mCAAmC,KAAK;AAAA,UACxD;AAAA;AAAA,QA3DA,aAAa;AACT,eAAK,cAAc;AAAA,QACvB;AAAA,QAEA,UAAU;AAEN,eAAK,wBAAwB,KAAK,yBAAyB;AAE3D,gBAAM,eAAe;AAAA,YACjB,EAAC,OAAO,iBAAiB,OAAO,qBAAqB,MAAM,oBAAmB;AAAA,YAC9E,EAAC,OAAO,eAAe,OAAO,2BAA0B;AAAA,YACxD,EAAC,OAAO,uBAAQ,OAAO,0BAAU;AAAA,YACjC,EAAC,OAAO,uBAAQ,OAAO,0BAAU;AAAA,YACjC,EAAC,OAAO,qDAAa,OAAO,wDAAe;AAAA,YAC3C,EAAC,OAAO,mCAAU,OAAO,sCAAY;AAAA,YACrC,EAAC,OAAO,uBAAQ,OAAO,0BAAU;AAAA,UACrC;AAEA,eAAK,MAAM,KAAK;AAChB,eAAK,SAAS,KAAK,WAAW,YAAY;AAC1C,cAAI,KAAK,sBAAqB;AAC1B,iBAAK,cAAc,KAAK,eAAe;AAAA,UAC3C;AAAA,QACJ;AAAA,QAEA,WAAW,cAAa;AACpB,cAAIC,eAAc,KAAK,oBAAoB;AAC3C,cAAI,QAAQ,kBAAkB;AAAA,YAC1B,KAAK;AAAA,YACL;AAAA,YACA,KAAK;AAAA,YACLA;AAAA,YACA,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AAAA,UACT;AACA,gBAAM,OAAO,kBAAkB,UAAU,OAAO,KAAK,oBAAoB;AAEzE,eAAK,cAAc,IAAI;AACvB,iBAAO,IAAI,kBAAkB,IAAI;AAAA,QACrC;AAAA,QAEA,cAAc,WAAW;AACrB,eAAK,SAAS,2BAAkB,cAAc,UAAU,SAAS,CAAC,GAAG,IAAK;AAAA,QAC9E;AAAA,QAiBA,cAAc,YAAY;AACtB,gBAAMC,YAAW,KAAK,mBAAmB,UAAU;AACnD,gBAAM,WAAW,KAAK;AACtB,eAAK,kBAAkB,eAAe,QAAQ,qBAAqBA,SAAQ;AAAA,QAC/E;AAAA,QAEA,kBAAkBC,gBAAeC,UAAS;AACtC,gBAAM,WAAW,KAAK,QAAQ,cAAcD,cAAa;AACzD,mBAAS,QAAQC;AAAA,QACrB;AAAA;AAAA,QAGA,mBAAmB,YAAY;AAC3B,gBAAMC,OAAM,WAAW,MAAM;AAC7B,iBAAOA,KAAI,SAAS;AAAA,QACxB;AAAA,QAEA,sBAAsBL,IAAG;AACrB,UAAAA,GAAE,eAAe;AACjB,gBAAM,SAASA,GAAE;AACjB,gBAAM,aAAa,OAAO,QAAQ;AAClC,gBAAM,SAAS,KAAK,QAAQ,KAAK,UAAU;AAC3C,iBAAO,UAAU,OAAO,MAAM;AAC9B,iBAAO,UAAU,OAAO,MAAM;AAAA,QAClC;AAAA,QAEA,IAAI,UAAU;AACV,gBAAM,eAAe,KAAK,yBAAyB;AACnD,cAAI,cAAc;AACd,mBAAO;AAAA,UACX;AACA,cAAI,KAAK,SAAQ;AACb,gBAAI;AACA,qBAAO,aAAa,QAAQ,KAAK,OAAO;AAAA,YAC5C,SAASA,IAAG;AACR,sBAAQ,MAAM,kCAAkCA,EAAC;AAAA,YACrD;AAAA,UACJ;AACA,iBAAO;AAAA,QACX;AAAA,QAEA,IAAI,UAAU;AACV,iBAAO,KAAK;AAAA,QAChB;AAAA,MACJ;AA1HI,oBADG,2BACI,WAAU;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAEA,oBATG,2BASI,UAAS;AAAA,QACZ,iBAAiB;AAAA,QACjB,SAAS;AAAA,QACT,iBAAiB;AAAA,QACjB,kBAAkB;AAAA,QAClB,cAAc;AAAA,QACd,aAAa;AAAA,MACjB;AAAA;AAAA;;;ACnBJ,MAMA,4CAGM,YA+BC;AAxCP;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA,mDAA6C;AAC7C;AAgBA;AACA;AAMA;AAGA;AAIA;AA5BA,MAAM,aAAa,oBAAI,IAAI;AAG3B,iBAAW,IAAI,qBAAqB,EAAC,YAAY,sCAA2B,CAAC;AAC7E,iBAAW,IAAI,+BAA+B,EAAC,YAAY,+CAAmC,CAAC;AAC/F,iBAAW,IAAI,4BAA4B,EAAC,YAAY,4CAAgC,CAAC;AACzF,iBAAW,IAAI,4BAA4B,EAAC,YAAY,4CAAgC,CAAC;AACzF,iBAAW,IAAI,0BAA0B,EAAC,YAAY,0CAA8B,CAAC;AACrF,iBAAW,IAAI,+BAA+B,EAAC,YAAY,+CAAmC,CAAC;AAC/F,iBAAW,IAAI,4BAA4B,EAAC,YAAY,2CAAAM,QAAgC,CAAC;AACzF,iBAAW,IAAI,yBAAyB,EAAC,YAAY,yCAA6B,CAAC;AAMnF,iBAAW,IAAI,SAAS,EAAE,YAAY,yBAAgB,CAAC;AACvD,iBAAW,IAAI,sBAAsB,EAAE,YAAY,sCAA2B,CAAC;AAK/E,iBAAW,IAAI,iBAAiB,EAAE,YAAY,iCAAuB,CAAC;AAGtE,iBAAW,IAAI,oBAAoB,EAAE,YAAY,oCAAyB,CAAC;AAI3E,iBAAW,IAAI,UAAU,EAAE,YAAY,0BAAiB,CAAC;AAEzD,MAAO,qBAAQ;AAAA;AAAA;;;ACxCf,MAEaC;AAFb,MAAAC,iCAAA;AAAA;AAAA;AAEO,MAAMD,gCAA+B;AAAA,QACxC,uCAAuC;AAAA,UACnC,UAAU;AAAA,YACN,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,UAAU;AAAA,YACV,mBAAmB;AAAA,YACnB,UAAU;AAAA,YACV,UAAU;AAAA,YACV,WAAW;AAAA,YACX,QAAQ;AAAA,YACR,WAAW;AAAA,YACX,QAAQ;AAAA,YACR,SAAS;AAAA,YAET,kCAAkC;AAAA,cAC9B,SAAS;AAAA,cACT,YAAY;AAAA,YAChB;AAAA,YACA,UAAU;AAAA,cACN,WAAW;AAAA,cACX,cAAc;AAAA,cACd,QAAQ;AAAA,YACZ;AAAA,YACA,0BAA0B;AAAA,cACtB,SAAS;AAAA,cACT,cAAc;AAAA,cACd,aAAa;AAAA,cACb,SAAS;AAAA,YACb;AAAA,UACJ;AAAA,QACJ;AAAA,QAEA,iDAAiD;AAAA,UAC7C,YAAY;AAAA,UACZ,OAAO;AAAA,QACX;AAAA,QAEA,0DAA0D;AAAA,UACtD,YAAY;AAAA,QAChB;AAAA,QAEA,oFAAoF;AAAA,UAChF,SAAS;AAAA,UACT,SAAS;AAAA,UACT,SAAS;AAAA,UACT,WAAW;AAAA,QACf;AAAA,QAEA,iCAAiC;AAAA,UAC7B,UAAU;AAAA,UACV,SAAS;AAAA,UACT,OAAO;AAAA,UACP,UAAU,GAAG,eAAU;AAAA,UACvB,WAAW;AAAA,QACf;AAAA,QAEA,6CAA6C,EAAE,OAAO,OAAO;AAAA,QAC7D,8CAA8C,EAAE,MAAM,OAAO;AAAA,QAC7D,oDAAoD,EAAE,OAAO,GAAG,eAAW,KAAK;AAAA,QAChF,qDAAqD,EAAE,MAAM,GAAG,eAAW,KAAK;AAAA,QAEhF,oBAAoB,EAAC,iBAAiB,YAAW;AAAA,QACjD,4BAA4B;AAAA,UACxB,eAAe;AAAA,UACf,OAAO;AAAA,UACP,QAAQ;AAAA,UACR,SAAS;AAAA,UACT,QAAQ;AAAA,UACR,YAAY;AAAA,QAChB;AAAA,QAEA,6BAA6B;AAAA,UACzB,gBAAgB;AAAA,QACpB;AAAA,QAEA,wBAAwB;AAAA,UACpB,YAAY;AAAA,UACZ,WAAW;AAAA,QACf;AAAA,QAEA,sBAAsB;AAAA,UAClB,UAAU;AAAA,UACV,OAAO;AAAA,UACP,SAAS;AAAA,UACT,WAAW;AAAA,UACX,cAAc;AAAA,UACd,SAAS;AAAA,UACT,WAAW;AAAA,QACf;AAAA,QAEA,0DAA0D;AAAA,UACtD,WAAW,EAAE,SAAS,WAAM;AAAA,QAChC;AAAA,QACA,4BAA4B;AAAA,UACxB,WAAW,EAAE,SAAS,WAAM;AAAA,QAChC;AAAA,QACA,gCAAgC;AAAA,UAC5B,WAAW,EAAE,SAAS,WAAM;AAAA,QAChC;AAAA,QACA,+BAA+B;AAAA,UAC3B,WAAW,EAAE,SAAS,cAAO;AAAA,QACjC;AAAA,QACA,+BAA+B;AAAA,UAC3B,WAAW,EAAE,SAAS,cAAO;AAAA,QACjC;AAAA,QACA,2BAA2B;AAAA,UACvB,WAAW,EAAE,SAAS,cAAO;AAAA,QACjC;AAAA,QACA,2BAA2B;AAAA,UACvB,WAAW,EAAE,SAAS,WAAM;AAAA,QAChC;AAAA,QACA,+BAA+B;AAAA,UAC3B,WAAW,EAAE,SAAS,WAAM;AAAA,QAChC;AAAA,QACA,8BAA8B;AAAA,UAC1B,WAAW,EAAE,SAAS,oBAAa;AAAA;AAAA,QACvC;AAAA,QACA,gCAAgC;AAAA,UAC5B,WAAW,EAAE,SAAS,WAAM;AAAA,QAChC;AAAA,QACA,2BAA2B;AAAA,UACvB,WAAW,EAAE,SAAS,SAAS,UAAU,OAAO,eAAe,SAAS;AAAA,QAC5E;AAAA,MACJ;AAAA;AAAA;;;AC9HA,MAAaE;AAAb,MAAAC,iCAAA;AAAA;AAAA;AAAO,MAAMD,+BAA8B;AAAA,QACvC,uBAAuB;AAAA,UACnB,SAAS;AAAA,UACT,UAAU;AAAA,UACV,UAAU;AAAA,UACV,YAAY;AAAA,UACZ,kBAAkB;AAAA,YACd,UAAU;AAAA,YACV,KAAK;AAAA,YACL,OAAO;AAAA,YACP,iBAAiB;AAAA,YACjB,QAAQ;AAAA,YACR,MAAM;AAAA,YACN,SAAS;AAAA,YACT,QAAQ;AAAA,UACZ;AAAA,UACA,8BAA8B;AAAA,YAC1B,QAAQ;AAAA,UACZ;AAAA,UACA,0BAA0B;AAAA,YACtB,aAAa;AAAA,UACjB;AAAA,UACA,WAAW;AAAA,YACP,UAAU;AAAA,YACV,YAAY;AAAA,YACZ,YAAY;AAAA,UAEhB;AAAA,QACJ;AAAA,QACA,mBAAmB,EAAE,iBAAiB,YAAY;AAAA,QAClD,4BAA4B,EAAE,iBAAiB,YAAY;AAAA,MAC/D;AAAA;AAAA;;;AC/BA,MAKME,OAuBOC;AA5Bb,MAAAC,oBAAA;AAAA;AAAA;AAAA,MAAAC;AACA,MAAAC;AACA,MAAAC;AAGA,MAAML,QAAO;AAAA,QACT,KAAK,EAAE,WAAW,QAAQ,QAAQ,QAAQ,WAAW,QAAQ;AAAA,QAC7D,gBAAgB,EAAE,SAAS,OAAM;AAAA,QACjC,gBAAgB;AAAA,UACZ,YAAY;AAAA,QAChB;AAAA,QACA,eAAe,EAAE,iBAAiB,WAAW,QAAQ,OAAM;AAAA,QAC3D,wBAAwB,EAAE,iBAAiB,UAAS;AAAA,QAEpD,mCAAmC;AAAA,UAC/B,OAAO;AAAA,QACX;AAAA,QACA,yCAAyC;AAAA,UACrC,YAAY;AAAA,QAChB;AAAA,QACA,yCAAyC;AAAA,UACrC,YAAY;AAAA,QAChB;AAAA,QACA,+CAA+C;AAAA,UAC3C,YAAY;AAAA,QAChB;AAAA,MAEJ;AACO,MAAMC,cAAa,WAAW,MAAM,iDAAID,QAASM,gCAAiCC,+BAA+B,EAAC,MAAM,MAAK,CAAC;AAAA;AAAA;;;AC5BrI,MAEaC;AAFb,MAAAC,gCAAA;AAAA;AAAA;AAEO,MAAMD,+BAA8B;AAAA,QACvC,uCAAuC;AAAA,UACnC,UAAU;AAAA,YACN,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,UAAU;AAAA,YACV,mBAAmB;AAAA,YACnB,UAAU;AAAA,YACV,UAAU;AAAA,YACV,WAAW;AAAA,YACX,QAAQ;AAAA,YACR,WAAW;AAAA,YACX,QAAQ;AAAA,YACR,SAAS;AAAA,YAET,kCAAkC;AAAA,cAC9B,SAAS;AAAA,cACT,YAAY;AAAA,YAChB;AAAA,YACA,UAAU;AAAA,cACN,WAAW;AAAA,cACX,cAAc;AAAA,cACd,QAAQ;AAAA,YACZ;AAAA,YACA,0BAA0B;AAAA,cACtB,SAAS;AAAA,cACT,cAAc;AAAA,cACd,aAAa;AAAA,cACb,SAAS;AAAA,YACb;AAAA,UACJ;AAAA,QACJ;AAAA,QAEA,iDAAiD;AAAA,UAC7C,YAAY;AAAA,UACZ,OAAO;AAAA,QACX;AAAA,QAEA,0DAA0D;AAAA,UACtD,YAAY;AAAA,QAChB;AAAA,QAEA,oFAAoF;AAAA,UAChF,SAAS;AAAA,UACT,SAAS;AAAA,UACT,SAAS;AAAA,UACT,WAAW;AAAA,QACf;AAAA,QAEA,iCAAiC;AAAA,UAC7B,UAAU;AAAA,UACV,SAAS;AAAA,UACT,OAAO;AAAA,UACP,UAAU,GAAG,eAAU;AAAA,UACvB,WAAW;AAAA,QACf;AAAA,QAEA,6CAA6C,EAAE,OAAO,OAAO;AAAA,QAC7D,8CAA8C,EAAE,MAAM,OAAO;AAAA,QAC7D,oDAAoD,EAAE,OAAO,GAAG,eAAW,KAAK;AAAA,QAChF,qDAAqD,EAAE,MAAM,GAAG,eAAW,KAAK;AAAA,QAEhF,oBAAoB,EAAC,iBAAiB,YAAW;AAAA,QACjD,4BAA4B;AAAA,UACxB,eAAe;AAAA,UACf,OAAO;AAAA,UACP,QAAQ;AAAA,UACR,SAAS;AAAA,UACT,QAAQ;AAAA,UACR,YAAY;AAAA,QAChB;AAAA,QAEA,6BAA6B;AAAA,UACzB,gBAAgB;AAAA,QACpB;AAAA,QAEA,wBAAwB;AAAA,UACpB,YAAY;AAAA,UACZ,WAAW;AAAA,QACf;AAAA,QAEA,sBAAsB;AAAA,UAClB,UAAU;AAAA,UACV,OAAO;AAAA,UACP,SAAS;AAAA,UACT,WAAW;AAAA,UACX,cAAc;AAAA,UACd,SAAS;AAAA,UACT,WAAW;AAAA,QACf;AAAA,QAEA,0DAA0D;AAAA,UACtD,WAAW,EAAE,SAAS,WAAM;AAAA,QAChC;AAAA,QACA,4BAA4B;AAAA,UACxB,WAAW,EAAE,SAAS,WAAM;AAAA,QAChC;AAAA,QACA,gCAAgC;AAAA,UAC5B,WAAW,EAAE,SAAS,WAAM;AAAA,QAChC;AAAA,QACA,+BAA+B;AAAA,UAC3B,WAAW,EAAE,SAAS,cAAO;AAAA,QACjC;AAAA,QACA,+BAA+B;AAAA,UAC3B,WAAW,EAAE,SAAS,cAAO;AAAA,QACjC;AAAA,QACA,2BAA2B;AAAA,UACvB,WAAW,EAAE,SAAS,cAAO;AAAA,QACjC;AAAA,QACA,2BAA2B;AAAA,UACvB,WAAW,EAAE,SAAS,WAAM;AAAA,QAChC;AAAA,QACA,+BAA+B;AAAA,UAC3B,WAAW,EAAE,SAAS,WAAM;AAAA,QAChC;AAAA,QACA,8BAA8B;AAAA,UAC1B,WAAW,EAAE,SAAS,oBAAa;AAAA;AAAA,QACvC;AAAA,QACA,gCAAgC;AAAA,UAC5B,WAAW,EAAE,SAAS,WAAM;AAAA,QAChC;AAAA,QACA,2BAA2B;AAAA,UACvB,WAAW,EAAE,SAAS,SAAS,UAAU,OAAO,eAAe,SAAS;AAAA,QAC5E;AAAA,MACJ;AAAA;AAAA;;;AC9HA,MAAaE;AAAb,MAAAC,gCAAA;AAAA;AAAA;AAAO,MAAMD,8BAA6B;AAAA,QACtC,uBAAuB;AAAA,UACnB,SAAS;AAAA,UACT,UAAU;AAAA,UACV,kBAAkB;AAAA,YACd,UAAU;AAAA,YACV,KAAK;AAAA,YACL,OAAO;AAAA,YACP,iBAAiB;AAAA,YACjB,QAAQ;AAAA,YACR,MAAM;AAAA,YACN,SAAS;AAAA,YACT,QAAQ;AAAA,UACZ;AAAA,UACA,8BAA8B;AAAA,YAC1B,QAAQ;AAAA,UACZ;AAAA,UACA,0BAA0B;AAAA,YACtB,aAAa;AAAA,UACjB;AAAA,UACA,WAAW;AAAA,YACP,UAAU;AAAA,YACV,YAAY;AAAA,UAChB;AAAA,QACJ;AAAA,QACA,mBAAmB,EAAE,iBAAiB,YAAY;AAAA,QAClD,4BAA4B,EAAE,iBAAiB,YAAY;AAAA,MAC/D;AAAA;AAAA;;;AC3BA,MASME,SACFC,QACAC,OACAC,UACAC,QACAC,QACAC,SACAC,OACAC,UACAC,SACAC,iBACAC,sBACAC,aACAC,oBACAC,YACAC,SAsBEC,OAmFOC,eAGAC,wBAuCAC;AA3Kb,MAAAC,mBAAA;AAAA;AAAA;AAAA,MAAAC;AAEA,MAAAA;AACA,MAAAA;AACA,MAAAC;AACA,MAAAC;AAIA,MAAMvB,UAAS;AAAf,MACIC,SAAQ;AADZ,MAEIC,QAAO;AAFX,MAGIC,WAAU;AAHd,MAIIC,SAAQ;AAJZ,MAKIC,SAAQ;AALZ,MAMIC,UAAS;AANb,MAOIC,QAAO;AAPX,MAQIC,WAAU;AARd,MASIC,UAAS;AATb,MAUIC,kBAAiB;AAVrB,MAWIC,uBAAsB;AAX1B,MAYIC,cAAa;AAZjB,MAaIC,qBAAoB;AAbxB,MAcIC,aAAY;AAdhB,MAeIC,UAAS;AAsBb,MAAMC,QAAO;AAAA,QACT,KAAK;AAAA,UACD,OAAOZ;AAAA,UACP,iBAAiBQ;AAAA,UACjB,WAAW;AAAA,UACX,WAAW;AAAA,UACX,QAAQ;AAAA,UACR,QAAQ;AAAA,QACZ;AAAA,QACA,gBAAgB,EAAC,SAAS,OAAM;AAAA,QAChC,eAAe;AAAA,UACX,YAAYG;AAAA,QAChB;AAAA,QACA,8BAA8B,EAAC,iBAAiBA,QAAM;AAAA,QACtD,8HAA8H,EAAC,iBAAiBD,WAAS;AAAA,QAEzJ,cAAc,EAAC,iBAAiBJ,iBAAgB,OAAON,OAAK;AAAA,QAC5D,4BAA4B,EAAC,cAAc,kBAAiB;AAAA,QAC5D,+BAA+B,EAAC,WAAW,kBAAiB;AAAA,QAE5D,mBAAmB;AAAA,UACf,iBAAiB;AAAA,UACjB,SAAS;AAAA,QACb;AAAA,QACA,2CAA2C;AAAA,UACvC,iBAAiB;AAAA,QACrB;AAAA,QAEA,kBAAkB,EAAC,iBAAiB,YAAW;AAAA,QAC/C,sBAAsB,EAAC,iBAAiB,YAAW;AAAA,QAEnD,yEAAyE;AAAA,UACrE,iBAAiB;AAAA,QACrB;AAAA,QAEA,eAAe;AAAA,UACX,iBAAiBQ;AAAA,UACjB,OAAOP;AAAA,UACP,QAAQ;AAAA,QACZ;AAAA,QAEA,wBAAwB;AAAA,UACpB,iBAAiBM;AAAA,QACrB;AAAA,QAEA,uBAAuB;AAAA,UACnB,iBAAiB;AAAA,UACjB,QAAQ;AAAA,UACR,OAAO;AAAA,QACX;AAAA,QAEA,eAAe;AAAA,UACX,QAAQ;AAAA,UACR,iBAAiBE;AAAA,QACrB;AAAA,QACA,wCAAwC;AAAA,UACpC,gBAAgB;AAAA,UAChB,mBAAmB;AAAA,QACvB;AAAA,QACA,uCAAuC;AAAA,UACnC,gBAAgBA;AAAA,UAChB,mBAAmBA;AAAA,QACvB;AAAA,QACA,4BAA4B;AAAA,UACxB,8BAA8B;AAAA,YAC1B,iBAAiBF;AAAA,YACjB,OAAOP;AAAA,UACX;AAAA,QACJ;AAAA,QACA,mCAAmC;AAAA,UAC/B,OAAO;AAAA,QACX;AAAA,QACA,yCAAyC;AAAA,UACrC,YAAY;AAAA,QAChB;AAAA,QACA,yCAAyC;AAAA,UACrC,YAAY;AAAA,QAChB;AAAA,QACA,+CAA+C;AAAA,UAC3C,YAAY;AAAA,QAChB;AAAA,MACJ;AAEO,MAAMa,gBAAe,WAAW,MAAM,iDAAID,QAASQ,+BAAgCC,8BAA8B,EAAC,MAAM,KAAI,CAAC;AAG7H,MAAMP,yBAAwB,eAAe,OAAO;AAAA,QACvD;AAAA,UAAC,KAAK,KAAE;AAAA,UACJ,OAAOT;AAAA,QAAM;AAAA,QACjB;AAAA,UAAC,KAAK,CAAC,KAAE,MAAM,KAAE,SAAS,KAAE,WAAW,KAAE,cAAc,KAAE,SAAS;AAAA,UAC9D,OAAOR;AAAA,QAAK;AAAA,QAChB;AAAA,UAAC,KAAK,CAAC,KAAE,SAAS,KAAE,YAAY,GAAG,KAAE,SAAS;AAAA,UAC1C,OAAOK;AAAA,QAAM;AAAA,QACjB;AAAA,UAAC,KAAK,CAAC,KAAE,OAAO,KAAE,SAAS,KAAE,IAAI,GAAG,KAAE,SAAS,KAAE,IAAI,CAAC;AAAA,UAClD,OAAOE;AAAA,QAAO;AAAA,QAClB;AAAA,UAAC,KAAK,CAAC,KAAE,WAAW,KAAE,IAAI,GAAG,KAAE,SAAS;AAAA,UACpC,OAAOJ;AAAA,QAAK;AAAA,QAChB;AAAA,UAAC,KAAK,CAAC,KAAE,UAAU,KAAE,WAAW,KAAE,QAAQ,KAAE,SAAS,KAAE,YAAY,KAAE,UAAU,KAAE,MAAM,KAAE,SAAS;AAAA,UAC9F,OAAOJ;AAAA,QAAM;AAAA,QACjB;AAAA,UAAC,KAAK,CAAC,KAAE,UAAU,KAAE,iBAAiB,KAAE,KAAK,KAAE,QAAQ,KAAE,QAAQ,KAAE,MAAM,KAAE,QAAQ,KAAE,MAAM,CAAC;AAAA,UACxF,OAAOE;AAAA,QAAI;AAAA,QACf;AAAA,UAAC,KAAK,CAAC,KAAE,MAAM,KAAE,OAAO;AAAA,UACpB,OAAOG;AAAA,QAAK;AAAA,QAChB;AAAA,UAAC,KAAK,KAAE;AAAA,UACJ,YAAY;AAAA,QAAM;AAAA,QACtB;AAAA,UAAC,KAAK,KAAE;AAAA,UACJ,WAAW;AAAA,QAAQ;AAAA,QACvB;AAAA,UAAC,KAAK,KAAE;AAAA,UACJ,gBAAgB;AAAA,QAAc;AAAA,QAClC;AAAA,UAAC,KAAK,KAAE;AAAA,UACJ,OAAOA;AAAA,UACP,gBAAgB;AAAA,QAAW;AAAA,QAC/B;AAAA,UAAC,KAAK,KAAE;AAAA,UACJ,YAAY;AAAA,UACZ,OAAOJ;AAAA,QAAK;AAAA,QAChB;AAAA,UAAC,KAAK,CAAC,KAAE,MAAM,KAAE,MAAM,KAAE,QAAQ,KAAE,YAAY,CAAC;AAAA,UAC5C,OAAOO;AAAA,QAAQ;AAAA,QACnB;AAAA,UAAC,KAAK,CAAC,KAAE,uBAAuB,KAAE,QAAQ,KAAE,QAAQ;AAAA,UAChD,OAAOD;AAAA,QAAI;AAAA,QACf;AAAA,UAAC,KAAK,KAAE;AAAA,UACJ,OAAOJ;AAAA,QAAO;AAAA,MACtB,CAAC;AAIM,MAAMgB,SAAmB,CAACF,eAAc,mBAAmBC,sBAAqB,CAAC;AAAA;AAAA;;;ACzJxF,WAASQ,UAAS,OAAoB,MAAcC,KAAY;AAlBhE,QAAAC;AAmBI,QAAI,QAA6C;AACjD,KAAAA,MAAA,MAAM,MAAM,WAAY,KAAK,MAA7B,gBAAAA,IAAgC,QAAQ,MAAMD,KAAI,CAACE,OAAMF,QAAO;AAC5D,UAAI,CAAC,SAAS,MAAM,OAAOE;AAAM,gBAAQ,EAAC,MAAAA,OAAM,IAAAF,IAAE;AAAA,IACtD;AACA,WAAO;AAAA,EACX;AAEA,WAASG,qBAAoB,SAAS,IAAI;AACtC,WAAO,SAAQ,MAAM,KAAK,IAAI,EAAE,SAAS,EAAE,IAAI,MAAM,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,MAAM,GAAG,EAAE;AAAA,EAC/F;AA6CO,WAASC,gBAAeC,UAAS,CAAC,GAAG;AACxC,QAAI,aAAa,kCAAIC,sBAAuBD;AAC5C,QAAI,UAAU,IAAIE,YAAW,YAAY,IAAI,GAAG,YAAY,IAAIA,YAAW,YAAY,KAAK;AAC5F,QAAI,UAAU,WAAW,UAAU,MAAM;AAAA,MAGrC,YAAY,MAAkB;AAF9B;AACA;AAEI,aAAK,OAAO,KAAK,SAAS;AAC1B,aAAK,UAAU,KAAK,aAAa,IAAI;AAAA,MACzC;AAAA,MACA,OAAO,QAAoB;AACvB,YAAI,OAAO,cAAc,OAAO,mBAC5B,OAAO,WAAW,MAAM,QAAQ,KAAK,OAAO,MAAM,MAAM,QAAQ,KAChE,OAAO,WAAW,MAAM,WAAW,KAAK,KAAK,OAAO,MAAM,MAAM,WAAW,KAAK,KAChF,WAAW,OAAO,UAAU,KAAK,WAAW,OAAO,KAAK,KACxD,WAAW,eAAe,MAAM,GAAE;AAClC,eAAK,UAAU,KAAK,aAAa,OAAO,IAAI;AAAA,QAChD;AAAA,MAEJ;AAAA,MACA,aAAa,MAAkB;AAC3B,YAAI,UAAU,IAAI,gBAA4B;AAC9C,iBAAS,QAAQ,KAAK,oBAAoB;AAEtC,gBAAM,OAAOR,UAAS,KAAK,OAAO,KAAK,MAAM,KAAK,EAAE;AACpD,gBAAM,gBAAgB,SAAS,KAAK,OAAO,KAAK,MAAM,KAAK,EAAE;AAE7D,cAAI,OAAO,OAAO,YAAY,gBAAgB,UAAU;AACxD,cAAI,MAAM;AACN,oBAAQ,IAAI,KAAK,MAAM,KAAK,MAAM,IAAI;AAAA,UAC1C;AACA,cAAI,eAAe;AAGf,gBAAI,aAAa,KAAK,MAAM,IAAI,OAAO,KAAK,IAAI,EAAE;AAClD,gBAAI,kBAAkB,KAAK,MAAM,IAAI,OAAO,cAAc,IAAI,EAAE;AAChE,gBAAI,gBAAgB,KAAK,MAAM,IAAI,OAAO,cAAc,EAAE,EAAE;AAAA,UAEhE,OAAM;AAGF,gBAAI,aAAa,KAAK,MAAM,IAAI,OAAO,KAAK,IAAI,EAAE;AAAA,UAEtD;AAAA,QACJ;AACA,eAAO,QAAQ,OAAO;AAAA,MAC1B;AAAA,IACJ,CAAC;AACD,QAAI,EAAC,iBAAgB,IAAI;AACzB,QAAI,cAAyB,EAAE,MAAM,GAAG,IAAI,EAAE;AAE9C,QAAI;AACJ,UAAM,oBAAoB;AAC1B,WAAO;AAAA,MACH;AAAA,MACA,OAAO;AAAA,QACH,OAAO;AAAA,QACP,QAAQ,MAAM;AAlI1B,cAAAE;AAmIgB,mBAAOA,MAAA,KAAK,OAAO,OAAO,MAAnB,gBAAAA,IAAsB,YAAW,SAAS;AAAA,QACrD;AAAA,QACA,gBAAgB;AACZ,iBAAO,IAAIM,YAAW,YAAY,KAAK;AAAA,QAC3C;AAAA,QACA,kBAAkB,iCACX,mBADW;AAAA,UAEd,OAAO,CAAC,MAAM,MAAM,UAAU;AAC1B,gBAAI,iBAAiB,SAAS,iBAAiB,MAAM,MAAM,MAAM,KAAK;AAClE,qBAAO;AACX,gBAAI,SAASR,UAAS,KAAK,OAAO,KAAK,MAAM,KAAK,EAAE;AACpD,gBAAI,QAAQ;AACR,mBAAK,SAAS,EAAC,SAAS,aAAa,GAAG,MAAM,EAAC,CAAC;AAChD,qBAAO;AAAA,YACX;AACA,gBAAIS,SAAQ,SAAS,KAAK,OAAO,KAAK,MAAM,KAAK,EAAE;AACnD,gBAAIA,QAAO;AACP,mBAAK,SAAS,EAAC,SAAS,WAAW,GAAGA,MAAK,EAAC,CAAC;AAC7C,qBAAO;AAAA,YACX;AACA,mBAAO;AAAA,UACX;AAAA,UACA,WAAW,CAAC,MAAM,MAAM,UAAU;AAC9B,gBAAI,iBAAiB,aAAa,iBAAiB,UAAU,MAAM,MAAM,KAAK;AAC1E,qBAAO;AAEX,kBAAM,MAAM,MAAM;AAGlB,6BAAiB,WAAW,MAAM;AAC9B,oBAAM,eAAe;AACrB,kBAAI,aAAa,aAAa,MAAM;AACpC,kBAAI,MAAM,SAAS;AACnB,sBAAQ,IAAI,SAAS,KAAK,IAAI,OAAO,KAAK,EAAE,EAAE;AAE9C,kBAAI,SAAST,UAAS,KAAK,OAAO,KAAK,MAAM,KAAK,EAAE;AACpD,kBAAI,QAAQ;AAER,8BAAc,EAAE,MAAM,KAAK,MAAM,IAAI,OAAO,GAAG;AAC/C,wBAAQ,IAAI,6BAA6B,WAAY;AAAA,cACzD,OAAO;AAEH,sBAAM,YAAY,SAAS,KAAK,OAAO,KAAK,MAAM,KAAK,EAAE;AACzD,8BAAgB,EAAE,MAAM,KAAK,MAAM,IAAI,OAAO,uCAAW,EAAE,EAAG;AAC9D,wBAAQ,IAAI,2BAA2B,KAAK,MAAM,OAAM,uCAAW,EAAE;AAAA,cACzE;AAAA,YACJ,GAAG,iBAAkB;AAErB,gBAAI,iBAAiB,aAAa,CAACU,WAAqB;AACpD,0BAAY,SAAS,KAAK,YAAY,OAAO,KAAKA,OAAM,eAAe;AACvE,kBAAI,CAACA,OAAM;AAAc;AAEzB,kBAAI,cAAc,KAAK,MAAM,IAAI,YAAY,YAAY,MAAM,YAAY,EAAE;AAE7E,kBAAI,QAAQ,SAAS,cAAc,KAAK;AACxC,oBAAM,MAAM,WAAW;AACvB,oBAAM,MAAM,MAAM;AAClB,oBAAM,IAAI,SAAS,cAAc,GAAG;AACpC,gBAAE,YAAY;AACd,gBAAE,YAAY;AACd,oBAAM,YAAY,CAAC;AACnB,uBAAS,KAAK,YAAY,KAAK;AAG/B,cAAAA,OAAM,aAAa,aAAa,OAAO,GAAG,CAAC;AAC3C,cAAAA,OAAM,aAAa,QAAS,cAAc,WAAW;AACrD,cAAAA,OAAM,aAAa,QAAS,iBAAiB,KAAK,UAAU,WAAW,CAAC;AAGxE,kBAAI,iBAAiB,WAAW,CAACA,WAAqB;AAClD,sBAAM,OAAO;AACb,oBAAI,gBAAgB,WAAW;AAC/B,oBAAI,MAAM,SAAS;AACnB,wBAAQ,IAAI,WAAWA,MAAK;AAC5B,wBAAQ,IAAI,eAAe,WAAW;AAAA,cAC1C,GAAG,EAAE,MAAM,KAAK,CAAC;AAAA,YACrB,CAAC;AAGD,qBAAS,iBAAiB,WAAW,CAACC,OAAM;AACxC,2BAAa,cAAc;AAC3B,kBAAI,gBAAgB,WAAW;AAC/B,kBAAI,MAAM,SAAS;AAAA,YACvB,GAAG,EAAE,MAAM,KAAK,CAAC;AAEjB,qBAAS,iBAAiB,cAAc,CAACA,OAAM;AAC3C,2BAAa,cAAc;AAC3B,kBAAI,gBAAgB,WAAW;AAC/B,kBAAI,MAAM,SAAS;AAAA,YACvB,GAAG,EAAE,MAAM,KAAK,CAAC;AAEjB,mBAAO;AAAA,UACX;AAAA,QACJ;AAAA,MACJ,CAAC;AAAA,MACD,YAAY;AAAA,MACZ,WAAW,iBAAiB;AAAA,QACxB,KAAK,OAAkB,MAAkB;AACrC,cAAI,CAAC,MAAM;AAAc;AACzB,cAAI,cAAc,MAAM,aAAa,QAAQ,YAAY;AACzD,cAAI,YAAY,MAAM,aAAa,QAAQ,eAAe;AAC1D,gBAAM,UAAU,KAAK,YAAY,EAAE,GAAG,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC;AAEvE,cAAI,UAAU,SAAS,KAAK,YAAY,QAAQ,YAAY,SAAS,GAAI;AACrE,kBAAM,aAAa,gBAAgB;AACnC,kBAAM,eAAe;AACrB,gBAAI,WAAqB,KAAK,MAAM,SAAS;AAC7C,gBAAI,UAAU;AAAA,cACV,EAAE,MAAM,SAAS,MAAM,IAAI,SAAS,GAAG;AAAA;AAAA,cACvC,EAAE,MAAM,SAAS,QAAO,OAAO,cAAc,KAAI;AAAA;AAAA,YACrD;AAEA,kBAAMC,aAAY,gBAAgB,OAAO,OAAO;AAChD,gBAAI,cAAc,KAAK,MAAM,OAAO;AAAA,cAChC;AAAA,cACA,WAAWA;AAAA,YACf,CAAC;AAED,iBAAK,SAAS,WAAW;AAAA,UAC7B;AACA,iBAAO;AAAA,QACX;AAAA,QACA,SAAS,OAAkB,MAAkB;AACzC,cAAI,CAAC,MAAM;AAAc;AACzB,gBAAM,MAAM,KAAK,YAAY,EAAE,GAAG,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC;AACnE,cAAI,QAAQ,MAAM;AACd,kBAAM,eAAe;AAErB,kBAAM,OAAO,KAAK,MAAM,IAAI,OAAO,GAAG;AACtC,gBAAI,KAAK,KAAK,KAAK,EAAE,WAAW,GAAG;AAC/B,oBAAM,aAAa,gBAAgB;AACnC,oBAAM,aAAa,aAAa;AAAA,YACpC,OAAO;AACH,oBAAM,aAAa,aAAa;AAAA,YACpC;AACA,mBAAO;AAAA,UACX;AAEA,iBAAO;AAAA,QACX;AAAA,QACA,UAAU,OAAkB;AACxB,iBAAO;AAAA,QACX;AAAA,MACJ,CAAC;AAAA,IACL;AAAA,EACJ;AApRA,MAwCML,qBAQAC;AAhDN,MAAAK,oCAAA;AAAA;AAAA;AAAA,MAAAC;AACA;AAEA,MAAAA;AAqCA,MAAMP,sBAAiD;AAAA,QACnD,UAAU;AAAA,QACV,YAAY;AAAA,QACZ,WAAY;AAAA,QACZ,kBAAkB,CAAC;AAAA,QACnB,gBAAgB,CAAC,WAAuB;AAAA,MAC5C;AAEA,MAAMC,cAAN,cAAyB,aAAa;AAAA,QAClC,YAAqBF,SAA6C,MAAe;AAC7E,gBAAM;AADW,wBAAAA;AAA6C;AAAA,QAElE;AAAA,QAEA,GAAG,OAAmB;AAClB,iBAAO,KAAK,UAAU,MAAM,UAAU,KAAK,QAAQ,MAAM;AAAA,QAC7D;AAAA,QAEA,MAAM,MAAkB;AACpB,cAAI,KAAK,OAAO;AAAW,mBAAO,KAAK,OAAO,UAAU,KAAK,IAAI;AACjE,cAAI,OAAO,SAAS,cAAc,MAAM;AACxC,cAAI,KAAK,MAAM;AACX,iBAAK,cAAc,KAAK,OAAO;AAC/B,iBAAK,QAAQ,KAAK,MAAM,OAAO,2BAA4B;AAC3D,iBAAK,KAAKF,qBAAoB,aAAa;AAAA,UAC/C,OAAO;AACH,iBAAK,cAAc,KAAK,OAAO;AAC/B,iBAAK,QAAQ,KAAK,MAAM,OAAO,6BAA6B;AAC5D,iBAAK,KAAKA,qBAAoB,eAAe;AAAA,UACjD;AACA,iBAAO;AAAA,QACX;AAAA,MACJ;AAAA;AAAA;;;ACvEA,MAGMW,wBAgFCC;AAnFP,MAAAC,0BAAA;AAAA;AAAA;AACA,MAAAC;AAEA,MAAMH,yBAAN,MAA4B;AAAA,QAExB,OAAc,qBAAqB,OAA6B;AAC5D,iBAAO,MAAM,UAAU,OAAO,KAAK,CAACI,WAAU,KAAK,iBAAiBA,QAAO,KAAK,CAAC;AAAA,QACrF;AAAA,QAEA,OAAc,uBAAuB,OAA6B;AAC9D,gBAAM,iBAAiB,oBAAI,IAAI;AAAA,YAC3B;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UAEJ,CAAC;AACD,gBAAM,EAAC,MAAM,IAAAC,IAAE,IAAI,MAAM,UAAU;AACnC,gBAAM,OAAO,WAAW,KAAK;AAE7B,cAAI,WAAW;AACf,eAAK,QAAQ;AAAA,YACT;AAAA,YACA,IAAAA;AAAA,YACA,MAAMC,OAAM;AACR,kBAAIA,MAAK,KAAK;AAAO;AACrB,sBAAQ,IAAI,eAAeA,MAAK,IAAI;AACpC,sBAAQ,IAAI,gBAAgB,MAAM,IAAI,OAAOA,MAAK,IAAI,EAAE,MAAM;AAC9D,sBAAQ,IAAI,gBAAgBA,MAAK,MAAMA,MAAK,EAAE;AAC9C,kBAAIA,MAAK,SAAS,cAAcA,MAAK,SAAS,UAAUA,MAAK,SAAS,aAAa;AAE/E,oBAAI,OAAOA,MAAK,QAAQD,MAAKC,MAAK,IAAI;AAClC,6BAAW;AACX,yBAAO;AAAA,gBACX;AAAA,cACJ;AAEA,kBAAIA,MAAK,KAAK,WAAW,YAAY,GAAG;AACpC,2BAAW;AACX,uBAAO;AAAA,cACX;AAEA,kBAAI,eAAe,IAAIA,MAAK,IAAI,GAAG;AAC/B,2BAAW;AACX,uBAAO;AAAA,cACX;AAAA,YACJ;AAAA,UACJ,CAAC;AACD,iBAAO;AAAA,QACX;AAAA,QAEA,OAAc,qBAAqB,OAA6B;AAC5D,gBAAM,gBAAgB,EAAE,MAAM,GAAG,IAAI,MAAM,IAAI,OAAO;AACtD,iBAAO,KAAK,iBAAiB,eAAe,KAAK,KAAK,MAAM,UAAU,OAAO,KAAK,CAACF,WAAU,KAAK,gBAAgBA,QAAO,aAAa,CAAC;AAAA,QAC3I;AAAA,QAEA,OAAe,eAAe,OAAwD;AAElF,gBAAM,MAAM,MAAM,UAAU,KAAK;AAEjC,gBAAM,OAAO,MAAM,IAAI,OAAO,GAAG;AACjC,iBAAO,EAAC,YAAY,KAAK,QAAQ,MAAM,KAAK,KAAI;AAAA,QACpD;AAAA,QAEA,OAAe,iBAAiBA,QAAsD,OAA6B;AAC/G,gBAAM,WAAW,MAAM,IAAI,OAAOA,OAAM,IAAI,EAAE;AAC9C,gBAAM,SAAS,MAAM,IAAI,OAAOA,OAAM,EAAE,EAAE;AAC1C,iBAAO,aAAa;AAAA,QACxB;AAAA,QAEA,OAAe,gBAAgBA,QAAuB,YAAmD;AACrG,iBAAOA,OAAM,QAAQ,WAAW,QAAQA,OAAM,MAAM,WAAW;AAAA,QACnE;AAAA,MAIJ;AAEA,MAAOH,6BAAQD;AAAA;AAAA;;;ACwHf,WAASO,aAAYC,KAAoB,IAAkB,MAAY;AACrE,QAAI,KAAK,OAAO,KAAK,KAAK,UACrBA,OAAM,GAAG,SAAS,KAAK,UAAU,GAAG,MAAM,KAAK,QAAQ,CAAC,EAAE,QAAQ,KAAK;AAAa,aAAO;AAChG,QAAI,KAAK,UAAU,KAAK,aAAa;AAAG,aAAO;AAC/C,QAAI,QAAQA,IAAG,QAAQ,sBAAmBC,iBAAgBC,eAAc,MAAM,IAAI,KAAK;AACvF,WAAO,OAAO,MACXF,IAAG,QAAQ,sBAAmBG,kBAAiB,MAAM,IAAI,KAAK,IAAI,MACnE,KAAK,KAAK,WAAW,KAAK,MAAM,OAAO,CAAC,KAAKH,IAAG;AAAA,EACpD;AAoBO,WAASI,OAAM,IAAY;AAAE,WAAO,MAAM,MAAM,MAAM,KAAK,MAAM,MAAM,MAAM;AAAA,EAAG;AAEvF,WAASC,WAAU,MAAc,IAAI,GAAG;AACtC,WAAO,IAAI,KAAK,UAAUD,OAAM,KAAK,WAAW,CAAC,CAAC;AAAG;AACrD,WAAO;AAAA,EACT;AAEA,WAASE,eAAc,MAAc,GAAWC,KAAY;AAC1D,WAAO,IAAIA,OAAMH,OAAM,KAAK,WAAW,IAAI,CAAC,CAAC;AAAG;AAChD,WAAO;AAAA,EACT;AAEA,WAASI,cAAa,MAAY;AAChC,QAAI,KAAK,QAAQ,MAAM,KAAK,QAAQ;AAAgB,aAAO;AAC3D,QAAI,MAAM,KAAK,MAAM;AACrB,WAAO,MAAM,KAAK,KAAK,UAAU,KAAK,KAAK,WAAW,GAAG,KAAK,KAAK;AAAM;AACzE,QAAI,MAAM,KAAK,MAAM;AAAG,aAAO;AAC/B,QAAI,KAAK,QAAQ;AAAI,eAAS,IAAI,KAAK,IAAI,KAAK,KAAK,QAAQ;AAAK,YAAI,KAAK,KAAK,WAAW,CAAC,KAAK;AAAI,iBAAO;AAAA;AAC5G,WAAO;AAAA,EACT;AAEA,WAASC,cAAa,MAAY;AAChC,WAAO,KAAK,QAAQ,KAAe,KAAK,KAAK,KAAK,WAAW,KAAK,MAAM,CAAC,KAAK,KAAK,IAAI;AAAA,EACzF;AAEA,WAASN,kBAAiB,MAAY,IAAkB,UAAmB;AACzE,QAAI,KAAK,QAAQ,MAAM,KAAK,QAAQ,MAAM,KAAK,QAAQ;AAAgB,aAAO;AAC9E,QAAIO,SAAQ;AACZ,aAAS,MAAM,KAAK,MAAM,GAAG,MAAM,KAAK,KAAK,QAAQ,OAAO;AAC1D,UAAI,KAAK,KAAK,KAAK,WAAW,GAAG;AACjC,UAAI,MAAM,KAAK;AAAM,QAAAA;AAAA,eACZ,CAACN,OAAM,EAAE;AAAG,eAAO;AAAA,IAC9B;AAEA,QAAI,YAAY,KAAK,QAAQ,MAAMO,mBAAkB,IAAI,IAAI,MAAM,KAAK,SAAS,GAAG,MAAM;AAAQ,aAAO;AACzG,WAAOD,SAAQ,IAAI,KAAK;AAAA,EAC1B;AAEA,WAASE,QAAO,IAAkB,MAAY;AAC5C,aAAS,IAAI,GAAG,MAAM,SAAS,GAAG,KAAK,GAAG;AACxC,UAAI,GAAG,MAAM,CAAC,EAAE,QAAQ;AAAM,eAAO;AACvC,WAAO;AAAA,EACT;AAEA,WAASV,cAAa,MAAY,IAAkB,UAAmB;AACrE,YAAQ,KAAK,QAAQ,MAAM,KAAK,QAAQ,MAAM,KAAK,QAAQ,QACxD,KAAK,OAAO,KAAK,KAAK,SAAS,KAAKE,OAAM,KAAK,KAAK,WAAW,KAAK,MAAM,CAAC,CAAC,OAC5E,CAAC,YAAYQ,QAAO,IAAI,kBAAe,KAAK,KAAK,UAAU,KAAK,MAAM,CAAC,IAAI,KAAK,KAAK,UAAU,IAAI;AAAA,EACxG;AAEA,WAASX,eAAc,MAAY,IAAkB,UAAmB;AACtE,QAAI,MAAM,KAAK,KAAK,OAAO,KAAK;AAChC,eAAS;AACP,UAAI,QAAQ,MAAM,QAAQ;AAAgB;AAAA;AACrC;AACL,UAAI,OAAO,KAAK,KAAK;AAAQ,eAAO;AACpC,aAAO,KAAK,KAAK,WAAW,GAAG;AAAA,IACjC;AACA,QAAI,OAAO,KAAK,OAAO,MAAM,KAAK,MAAM,KACnC,QAAQ,MAAM,QAAQ,MACtB,MAAM,KAAK,KAAK,SAAS,KAAK,CAACG,OAAM,KAAK,KAAK,WAAW,MAAM,CAAC,CAAC,KACnE,YAAY,CAACQ,QAAO,IAAI,mBAAgB,MACvC,KAAK,UAAU,MAAM,CAAC,KAAK,KAAK,KAAK,UAAU,MAAM,KAAK,MAAM,KAAK,KAAK,QAAQ;AACrF,aAAO;AACT,WAAO,MAAM,IAAI,KAAK;AAAA,EACxB;AAEA,WAASC,cAAa,MAAY;AAChC,QAAI,KAAK,QAAQ;AAAc,aAAO;AACtC,QAAI,MAAM,KAAK,MAAM;AACrB,WAAO,MAAM,KAAK,KAAK,UAAU,KAAK,KAAK,WAAW,GAAG,KAAK;AAAI;AAClE,QAAI,MAAM,KAAK,KAAK,UAAU,KAAK,KAAK,WAAW,GAAG,KAAK;AAAI,aAAO;AACtE,QAAI,OAAO,MAAM,KAAK;AACtB,WAAO,OAAO,IAAI,KAAK;AAAA,EACzB;AAEA,WAASF,mBAAkB,MAAY;AACrC,QAAI,KAAK,QAAQ,MAAM,KAAK,QAAQ,MAAiB,KAAK,UAAU,KAAK,aAAa;AAAG,aAAO;AAChG,QAAI,MAAM,KAAK,MAAM;AACrB,WAAO,MAAM,KAAK,KAAK,UAAU,KAAK,KAAK,WAAW,GAAG,KAAK,KAAK;AAAM;AACzE,QAAIG,OAAM;AACV,WAAO,MAAM,KAAK,KAAK,UAAUV,OAAM,KAAK,KAAK,WAAW,GAAG,CAAC;AAAG;AACnE,WAAO,OAAO,KAAK,KAAK,SAASU,OAAM;AAAA,EACzC;AAaA,WAASC,aAAY,MAAY,KAAmB,UAAmB;AACrE,QAAI,KAAK,QAAQ;AAAc,aAAO;AACtC,QAAI,OAAO,KAAK,KAAK,MAAM,KAAK,GAAG;AACnC,aAAS,IAAI,GAAGC,KAAIC,gBAAe,UAAU,WAAW,IAAI,IAAI,IAAID,IAAG;AACrE,UAAIC,gBAAe,CAAC,EAAE,CAAC,EAAE,KAAK,IAAI;AAAG,eAAO;AAC9C,WAAO;AAAA,EACT;AAEA,WAASC,eAAc,MAAY,KAAa;AAC9C,QAAI,cAAc,KAAK,YAAY,KAAK,KAAK,KAAK,KAAK,MAAM;AAC7D,QAAI,WAAW,KAAK,YAAY,KAAK,UAAU,GAAG,GAAG,KAAK,WAAW;AACrE,WAAO,YAAY,cAAc,IAAI,cAAc,IAAI;AAAA,EACzD;AAcA,WAASC,aAAY,OAAkB,MAAcZ,KAAY;AAC/D,QAAI,OAAO,MAAM,SAAS;AAC1B,QAAI,QAAQ,KAAK,MAAM,IAAI,EAAE,MAAM,QAAQ,MAAM,IAAI,EAAE,QAAQ;AAAe,MAAC,MAAM,IAAI,EAAU,KAAKA;AAAA;AACnG,YAAM,KAAKa,KAAI,mBAAe,MAAMb,GAAE,CAAC;AAAA,EAC9C;AAsOA,WAASc,SAAQC,OAAc,KAAa;AAC1C,WAAO,MAAMA,MAAK,QAAQ,OAAO;AAC/B,UAAI,OAAOA,MAAK,WAAW,GAAG;AAC9B,UAAI,QAAQ;AAAI;AAChB,UAAI,CAAClB,OAAM,IAAI;AAAG,eAAO;AAAA,IAC3B;AACA,WAAO;AAAA,EACT;AA8TA,WAASmB,YACP,QAA+C,QAC/C,MAAkBC,SAAgB,SAC5B;AACN,QAAIC,YAAW,OAAO,MAAM,EAAE;AAC9B,QAAI,WAAW,CAAC,GAAG,YAAY,CAAC,GAAGC,SAAQ,KAAK,OAAOF;AACvD,aAAS,aAAa,MAAc,WAAoB;AACtD,aAAO,YAAY,QAAQC,YAAW,OAAOA,WAAU;AACrD,YAAI,OAAO,OAAO,SAAS,CAAC,EAAE,OAAOA;AACrC,QAAAD,WAAU;AACV,gBAAQ;AACR;AACA,QAAAC,YAAW,OAAO,MAAM,EAAE;AAAA,MAC5B;AAAA,IACF;AACA,aAAS,KAAK,KAAK,YAAY,IAAI,KAAK,GAAG,aAAa;AACtD,mBAAa,GAAG,OAAOD,SAAQ,IAAI;AACnC,UAAI,OAAO,GAAG,OAAOA,SAAQG,OAAM,QAAQ,QAAQ,IAAI,GAAG,IAAK;AAC/D,UAAI,OAAO;AACT,QAAAA,QAAO;AAAA,MACT,WAAW,GAAG,KAAKH,UAASC,WAAU;AACpC,QAAAE,QAAOJ,YAAW,QAAQ,QAAQ,IAAIC,SAAQ,OAAO;AACrD,qBAAa,GAAG,KAAKA,SAAQ,KAAK;AAAA,MACpC,OAAO;AACL,QAAAG,QAAO,GAAG,OAAO;AAAA,MACnB;AACA,eAAS,KAAKA,KAAI;AAClB,gBAAU,KAAK,OAAOD,MAAK;AAAA,IAC7B;AACA,iBAAa,KAAK,KAAKF,SAAQ,KAAK;AACpC,WAAO,IAAI,KAAK,KAAK,MAAM,UAAU,WAAW,KAAK,KAAKA,UAASE,QAAO,KAAK,OAAO,KAAK,KAAK,aAAa,MAAS;AAAA,EACxH;AAsSA,WAASE,UAAY,GAAgD;AACnE,WAAO,KAAK,QAAQ,EAAE,SAAS;AAAA,EACjC;AAEA,WAASC,eAAc,MAAgD;AACrE,QAAI,CAAC,MAAM,QAAQ,IAAI;AAAG,aAAO;AACjC,QAAI,KAAK,UAAU;AAAG,aAAO;AAC7B,QAAI,OAAOA,eAAc,KAAK,CAAC,CAAC;AAChC,QAAI,KAAK,UAAU;AAAG,aAAO;AAC7B,QAAI,OAAOA,eAAc,KAAK,MAAM,CAAC,CAAC;AACtC,QAAI,CAAC,QAAQ,CAAC;AAAM,aAAO,QAAQ;AACnC,QAAIC,QACF,CAAC,GAAGC,QAAO,KAAKC,OAAM,OAAOD,MAAKC,KAAI;AACxC,QAAI,QAAQ,KAAK,MAAM,QAAQ,KAAK;AACpC,WAAO;AAAA,MACL,OAAOF,MAAK,KAAK,OAAO,KAAK,KAAK;AAAA,MAClC,aAAaA,MAAK,KAAK,aAAa,KAAK,WAAW;AAAA,MACpD,YAAYA,MAAK,KAAK,YAAY,KAAK,UAAU;AAAA,MACjD,aAAaA,MAAK,KAAK,aAAa,KAAK,WAAW;AAAA,MACpD,QAAQA,MAAK,KAAK,QAAQ,KAAK,MAAM;AAAA,MACrC,MAAM,CAAC,QAAQ,QAAQ,CAAC,QAAQ,QAC9B,CAAC,OAAO,OAAO,WAAW,WAAW,MAAO,MAAO,OAAO,OAAO,WAAW,MAAM,GAAG,OAAO,WAAW,MAAM;AAAA,IACjH;AAAA,EACF;AAEA,WAASG,UAASC,QAA0BC,OAAc;AACxD,QAAI,QAAQD,OAAM,QAAQC,KAAI;AAC9B,QAAI,QAAQ;AAAG,YAAM,IAAI,WAAW,iDAAiDA,KAAI,EAAE;AAC3F,WAAO;AAAA,EACT;AAqFA,WAASf,KAAI,MAAY,MAAcb,KAAY,UAA+C;AAChG,WAAO,IAAI6B,SAAQ,MAAM,MAAM7B,KAAI,QAAQ;AAAA,EAC7C;AA0JA,WAAS8B,YAAW,IAAmBC,UAAoB,MAAYZ,QAAe,UAAkB;AACtG,QAAI,EAAC,MAAAJ,MAAI,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,GAAG,SAAS;AACpD,IAAAgB,SAAQ,QAAQlB,KAAI,mBAAeM,QAAOA,UAAS,QAAQ,iBAAa,IAAI,EAAE,CAAC;AAC/E,IAAAY,SAAQ,KAAKlB,KAAI,mBAAe,WAAW,GAAG,QAAQ,CAAC;AACvD,QAAI,QAAQ,IAAc;AACxB,UAAI,MAAM,GAAG,UAAU,WAAW,CAAC;AACnC,UAAI,OAAOmB,UAASjB,OAAM,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG;AACvD,UAAI,MAAM;AACR,cAAM,GAAG,UAAU,KAAK,EAAE;AAC1B,gBAAQkB,gBAAelB,OAAM,MAAM,GAAG,QAAQ,GAAG,MAAM;AACvD,YAAI;AAAO,gBAAM,GAAG,UAAU,MAAM,EAAE;AAAA,MACxC;AACA,UAAI,GAAG,KAAK,GAAG,KAAK,IAAc;AAChC,QAAAgB,SAAQ,KAAKlB,KAAI,mBAAe,UAAU,WAAW,CAAC,CAAC;AACvD,iBAAS,MAAM;AACf,YAAI;AAAM,UAAAkB,SAAQ,KAAK,IAAI;AAC3B,YAAI;AAAO,UAAAA,SAAQ,KAAK,KAAK;AAC7B,QAAAA,SAAQ,KAAKlB,KAAI,mBAAe,KAAK,MAAM,CAAC;AAAA,MAC9C;AAAA,IACF,WAAW,QAAQ,IAAc;AAC/B,UAAI,QAAQqB,gBAAenB,OAAM,WAAW,GAAG,QAAQ,GAAG,QAAQ,KAAK;AACvE,UAAI,OAAO;AACT,QAAAgB,SAAQ,KAAK,KAAK;AAClB,iBAAS,MAAM;AAAA,MACjB;AAAA,IACF;AACA,WAAOlB,KAAI,MAAMM,QAAO,QAAQY,QAAO;AAAA,EACzC;AAMA,WAASC,UAASjB,OAAcI,QAAeF,SAAwC;AACrF,QAAI,OAAOF,MAAK,WAAWI,MAAK;AAChC,QAAI,QAAQ,IAAc;AACxB,eAAS,MAAMA,SAAQ,GAAG,MAAMJ,MAAK,QAAQ,OAAO;AAClD,YAAI,KAAKA,MAAK,WAAW,GAAG;AAC5B,YAAI,MAAM;AAAc,iBAAOF,KAAI,cAAUM,SAAQF,SAAQ,MAAM,IAAIA,OAAM;AAC7E,YAAI,MAAM,MAAM,MAAM;AAAgB,iBAAO;AAAA,MAC/C;AACA,aAAO;AAAA,IACT,OAAO;AACL,UAAI,QAAQ,GAAG,MAAME;AACrB,eAAS,UAAU,OAAO,MAAMJ,MAAK,QAAQ,OAAO;AAClD,YAAI,KAAKA,MAAK,WAAW,GAAG;AAC5B,YAAIlB,OAAM,EAAE,GAAG;AACb;AAAA,QACF,WAAW,SAAS;AAClB,oBAAU;AAAA,QACZ,WAAW,MAAM,IAAc;AAC7B;AAAA,QACF,WAAW,MAAM,IAAc;AAC7B,cAAI,CAAC;AAAO;AACZ;AAAA,QACF,WAAW,MAAM,IAAe;AAC9B,oBAAU;AAAA,QACZ;AAAA,MACF;AACA,aAAO,MAAMsB,SAAQN,KAAI,cAAUM,SAAQF,SAAQ,MAAMA,OAAM,IAAI,OAAOF,MAAK,SAAS,OAAO;AAAA,IACjG;AAAA,EACF;AAEA,WAASkB,gBAAelB,OAAcI,QAAeF,SAAwC;AAC3F,QAAI,OAAOF,MAAK,WAAWI,MAAK;AAChC,QAAI,QAAQ,MAAM,QAAQ,MAAM,QAAQ;AAAiB,aAAO;AAChE,QAAIZ,OAAM,QAAQ,KAAK,KAAK;AAC5B,aAAS,MAAMY,SAAQ,GAAG,UAAU,OAAO,MAAMJ,MAAK,QAAQ,OAAO;AACnE,UAAI,KAAKA,MAAK,WAAW,GAAG;AAC5B,UAAI;AAAS,kBAAU;AAAA,eACd,MAAMR;AAAK,eAAOM,KAAI,oBAAgBM,SAAQF,SAAQ,MAAM,IAAIA,OAAM;AAAA,eACtE,MAAM;AAAe,kBAAU;AAAA,IAC1C;AACA,WAAO;AAAA,EACT;AAEA,WAASiB,gBAAenB,OAAcI,QAAeF,SAAgB,cAA+C;AAClH,aAAS,UAAU,OAAO,MAAME,SAAQ,GAAGZ,OAAM,KAAK,IAAIQ,MAAK,QAAQ,MAAM,GAAG,GAAG,MAAMR,MAAK,OAAO;AACnG,UAAI,KAAKQ,MAAK,WAAW,GAAG;AAC5B,UAAI;AAAS,kBAAU;AAAA,eACd,MAAM;AAAc,eAAO,eAAe,QAAQF,KAAI,oBAAgBM,SAAQF,SAAQ,MAAM,IAAIA,OAAM;AAAA,WAC1G;AACH,YAAI,gBAAgB,CAACpB,OAAM,EAAE;AAAG,yBAAe;AAC/C,YAAI,MAAM;AAAc,iBAAO;AAAA,iBACtB,MAAM;AAAe,oBAAU;AAAA,MAC1C;AAAA,IACF;AACA,WAAO;AAAA,EACT;AA+IA,WAASsC,aAAY,UAA8C,OAAkB;AACnF,QAAI,CAAC,MAAM;AAAQ,aAAO;AAC1B,QAAI,CAAC,SAAS;AAAQ,aAAO;AAC7B,QAAI,OAAO,SAAS,MAAM,GAAG,KAAK;AAClC,aAAS,QAAQ,OAAO;AACtB,aAAO,KAAK,KAAK,UAAU,KAAK,EAAE,EAAE,KAAK,KAAK;AAAI;AAClD,UAAI,KAAK,KAAK,UAAU,KAAK,EAAE,EAAE,OAAO,KAAK,MAAM;AACjD,YAAI1B,KAAI,KAAK,EAAE;AACf,YAAIA,cAAaoB;AACf,eAAK,EAAE,IAAI,IAAIA,SAAQpB,GAAE,MAAMA,GAAE,MAAMA,GAAE,IAAI0B,aAAY1B,GAAE,UAAU,CAAC,IAAI,CAAC,CAAC;AAAA,MAChF,OAAO;AACL,aAAK,OAAO,MAAM,GAAG,IAAI;AAAA,MAC3B;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAmGA,WAAS2B,YAAW,KAAa,QAA+C;AAC9E,QAAI,MAAM;AACV,aAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACtC,UAAI,UAAU,OAAO,IAAI,CAAC,EAAE,IAAI,QAAQ,OAAO,CAAC,EAAE;AAClD,UAAI,UAAU;AAAK,eAAO,QAAQ;AAAA,IACpC;AACA,WAAO;AAAA,EACT;AAn0DA,MAIMC,iBAoCMC,OAqDCC,YAgBAC,OAwGPC,oBAuGAC,YAAwBC,aAAoBC,gBAC5ClC,iBA8CAmC,sBA0JAC,sBA+EAC,sBAmBAC,oBAKAC,iBAUAC,iBAGOC,eA2cAC,iBAgLTC,YAUE5B,OAEA6B,SA2BOzB,UA2BP0B,cA4CAC,qBACAC,mBACAC,YAA+BC,aAE/BC,kBAOAC,YAEKC,cAGLC,gBA6MOC,gBA8JPC,UAEAC,iBAsGAC,uBA0BOC;AA/1Db,MAAAC,iBAAA;AAAA;AAAA;AAAA,MAAAC;AAEA,MAAAA;AAEA,MAAMjC,kBAAN,MAAM,gBAAe;AAAA,QASnB,YAAqB,MAEA,OACA,MACAkC,OACFhE,MACE,UACA,WAAqB;AAPrB;AAEA;AACA;AACA,sBAAAgE;AACF,qBAAAhE;AACE;AACA;AATrB;AAAA;AAUE,eAAK,WAAW,CAAC,CAAC,SAAS,aAAagE,KAAI,CAAC;AAAA,QAC/C;AAAA,QAjBA,OAAO,OAAO,MAAc,OAAe,MAAc,YAAoBhE,MAAa;AACxF,cAAIgE,QAAQ,cAAc,cAAc,KAAK,QAAQ,SAAS,KAAM;AACpE,iBAAO,IAAI,gBAAe,MAAM,OAAO,MAAMA,OAAMhE,MAAK,CAAC,GAAG,CAAC,CAAC;AAAA,QAChE;AAAA,QAgBA,SAAS,OAAa,KAAa;AACjC,cAAI,MAAM,KAAK,SAAS,WAAW,KAAK,KAAK;AAC3C,oBAAQ,IAAI,KAAK,MAAM,MAAM,MAAM,UAAU,MAAM,WAAW,MAAM,QAAQ,KAAK,QAAQ;AAC3F,eAAK,SAAS,KAAK,KAAK;AACxB,eAAK,UAAU,KAAK,GAAG;AAAA,QACzB;AAAA,QAEA,OAAO,SAAkBA,OAAM,KAAK,KAAK;AACvC,cAAI,OAAO,KAAK,SAAS,SAAS;AAClC,cAAI,QAAQ;AAAG,YAAAA,OAAM,KAAK,IAAIA,MAAK,KAAK,UAAU,IAAI,IAAI,KAAK,SAAS,IAAI,EAAE,SAAS,KAAK,IAAI;AAChG,iBAAO,IAAI,KAAK,QAAQ,MAAM,KAAK,IAAI,GAAG,KAAK,UAAU,KAAK,WAAWA,OAAM,KAAK,IAAI,EAAE,QAAQ;AAAA,YAChG,UAAU,CAAC,UAAU,WAAW,WAAW,IAAI,KAAK,SAAS,MAAM,UAAU,WAAW,QAAQ,KAAK,QAAQ;AAAA,UAC/G,CAAC;AAAA,QACH;AAAA,MACF;AAEO,MAAK+B,QAAL,kBAAKA,UAAL;AACL,QAAAA,YAAA,cAAW,KAAX;AAEA,QAAAA,YAAA;AACA,QAAAA,YAAA;AACA,QAAAA,YAAA;AACA,QAAAA,YAAA;AACA,QAAAA,YAAA;AACA,QAAAA,YAAA;AACA,QAAAA,YAAA;AACA,QAAAA,YAAA;AACA,QAAAA,YAAA;AACA,QAAAA,YAAA;AACA,QAAAA,YAAA;AACA,QAAAA,YAAA;AACA,QAAAA,YAAA;AACA,QAAAA,YAAA;AACA,QAAAA,YAAA;AACA,QAAAA,YAAA;AACA,QAAAA,YAAA;AACA,QAAAA,YAAA;AACA,QAAAA,YAAA;AACA,QAAAA,YAAA;AAGA,QAAAA,YAAA;AACA,QAAAA,YAAA;AACA,QAAAA,YAAA;AACA,QAAAA,YAAA;AACA,QAAAA,YAAA;AACA,QAAAA,YAAA;AACA,QAAAA,YAAA;AACA,QAAAA,YAAA;AACA,QAAAA,YAAA;AACA,QAAAA,YAAA;AACA,QAAAA,YAAA;AACA,QAAAA,YAAA;AAGA,QAAAA,YAAA;AACA,QAAAA,YAAA;AACA,QAAAA,YAAA;AACA,QAAAA,YAAA;AACA,QAAAA,YAAA;AACA,QAAAA,YAAA;AACA,QAAAA,YAAA;AACA,QAAAA,YAAA;AACA,QAAAA,YAAA;AACA,QAAAA,YAAA;AAhDU,eAAAA;AAAA,kBAAA;AAqDL,MAAMC,aAAN,MAAgB;AAAA;AAAA,QAOrB,YAEWpB,QAEFY,UACP;AAHS,uBAAAZ;AAEF,yBAAAY;AATT;AAAA,uCAAmB,CAAC;AAEpB;AAAA,yCAA6B,CAAC;AAAA,QAQ3B;AAAA,MACL;AAGO,MAAMS,QAAN,MAAW;AAAA,QAAX;AAEL;AAAA,sCAAO;AAGP;AAAA;AAAA,4CAAa;AAEb;AAAA,yCAAU;AAEV;AAAA,uCAAQ;AAER;AAAA,yCAAqB,CAAC;AAGtB;AAAA;AAAA,qCAAM;AAEN;AAAA,wCAAS;AAET;AAAA,sCAAO;AAAA;AAAA;AAAA,QAGP,UAAU;AACR,cAAI,KAAK,UAAU,KAAK;AAAK,iBAAK,aAAa;AAAA,QACjD;AAAA;AAAA,QAGA,eAAe;AACb,cAAI,SAAS,KAAK,UAAU,KAAK,OAAO;AACxC,eAAK,SAAS,KAAK,YAAY,QAAQ,KAAK,KAAK,KAAK,MAAM;AAC5D,eAAK,MAAM;AACX,eAAK,OAAO,UAAU,KAAK,KAAK,SAAS,KAAK,KAAK,KAAK,WAAW,MAAM;AAAA,QAC3E;AAAA;AAAA;AAAA;AAAA,QAKA,UAAU,MAAc;AAAE,iBAAO1C,WAAU,KAAK,MAAM,IAAI;AAAA,QAAE;AAAA;AAAA,QAG5D,MAAMiB,OAAc;AAClB,eAAK,OAAOA;AACZ,eAAK,aAAa,KAAK,UAAU,KAAK,MAAM,KAAK,SAAS;AAC1D,eAAK,aAAa;AAClB,eAAK,QAAQ;AACb,iBAAO,KAAK,QAAQ;AAAQ,iBAAK,QAAQ,IAAI;AAAA,QAC/C;AAAA;AAAA;AAAA;AAAA;AAAA,QAMA,SAASf,KAAY;AACnB,eAAK,UAAUA;AACf,eAAK,aAAa,KAAK,YAAYA,KAAI,KAAK,KAAK,KAAK,MAAM;AAAA,QAC9D;AAAA;AAAA,QAGA,eAAewE,SAAgB;AAC7B,eAAK,aAAaA;AAClB,eAAK,UAAU,KAAK,WAAWA,OAAM;AAAA,QACvC;AAAA;AAAA;AAAA;AAAA,QAKA,UAAU3D,MAAc;AACtB,eAAK,QAAQ,KAAKA,IAAG;AAAA,QACvB;AAAA;AAAA;AAAA,QAIA,YAAYb,KAAY,OAAO,GAAGwE,UAAS,GAAG;AAC5C,mBAAS,IAAI,MAAM,IAAIxE,KAAI;AACzB,YAAAwE,WAAU,KAAK,KAAK,WAAW,CAAC,KAAK,IAAI,IAAIA,UAAS,IAAI;AAC5D,iBAAOA;AAAA,QACT;AAAA;AAAA,QAGA,WAAW,MAAc;AACvB,cAAI,IAAI;AACR,mBAASA,UAAS,GAAG,IAAI,KAAK,KAAK,UAAUA,UAAS,MAAM;AAC1D,YAAAA,WAAU,KAAK,KAAK,WAAW,CAAC,KAAK,IAAI,IAAIA,UAAS,IAAI;AAC5D,iBAAO;AAAA,QACT;AAAA;AAAA,QAGA,QAAQ;AACN,cAAI,CAAC,KAAK;AAAY,mBAAO,KAAK;AAClC,cAAI,SAAS;AACb,mBAAS,IAAI,GAAG,IAAI,KAAK,SAAS;AAAK,sBAAU;AACjD,iBAAO,SAAS,KAAK,KAAK,MAAM,KAAK,OAAO;AAAA,QAC9C;AAAA,MACF;AAYA,MAAM/B,qBAAqG;AAAA,QACzG,CAAC,kBAAe,EAAEhD,KAAI,IAAI,MAAM;AAC9B,cAAI,KAAK,QAAQ;AAAc,mBAAO;AACtC,eAAK,QAAQ,KAAKoB,KAAI,oBAAgB,GAAG,YAAY,KAAK,KAAK,GAAG,YAAY,KAAK,MAAM,CAAC,CAAC;AAC3F,eAAK,SAAS,KAAK,OAAOhB,OAAM,KAAK,KAAK,WAAW,KAAK,MAAM,CAAC,CAAC,IAAI,IAAI,EAAE;AAC5E,UAAAJ,IAAG,MAAM,GAAG,YAAY,KAAK,KAAK;AAClC,iBAAO;AAAA,QACT;AAAA,QACA,CAAC,gBAAa,EAAEA,KAAI,KAAK,MAAM;AAC7B,cAAI,KAAK,SAAS,KAAK,aAAaA,IAAG,SAAS,KAAK,OAAO;AAAI,mBAAO;AACvE,eAAK,eAAe,KAAK,aAAaA,IAAG,KAAK;AAC9C,iBAAO;AAAA,QACT;AAAA,QACA,CAAC,mBAAgB,GAAGD;AAAA,QACpB,CAAC,kBAAe,GAAGA;AAAA,QACnB,CAAC,gBAAa,IAAI;AAAE,iBAAO;AAAA,QAAK;AAAA,MAClC;AAuFA,MAAMkD,aAAY;AAAlB,MAA8BC,cAAa;AAA3C,MAAkDC,iBAAgB;AAClE,MAAMlC,kBAAiB;AAAA,QACrB,CAAC,qCAAqC,2BAA2B;AAAA,QACjE,CAAC,YAAYiC,WAAU;AAAA,QACvB,CAAC,WAAWC,cAAa;AAAA,QACzB,CAAC,eAAe,GAAG;AAAA,QACnB,CAAC,mBAAmB,OAAO;AAAA,QAC3B,CAAC,iYAAiYF,UAAS;AAAA,QAC3Y,CAAC,oHAAoHA,UAAS;AAAA,MAChI;AAsCA,MAAMG,uBAAqG;AAAA,QACzG,eAAe;AAAA,QAEf,aAAa,IAAI,MAAM;AACrB,cAAI4B,QAAO,KAAK,aAAa;AAC7B,cAAI,KAAK,SAASA;AAAM,mBAAO;AAC/B,cAAItD,SAAQ,KAAK,WAAWsD,KAAI;AAChC,cAAI,OAAO,GAAG,YAAYtD,QAAOnB,MAAK,GAAG,YAAY,KAAK,KAAK;AAC/D,cAAI,QAAmB,CAAC,GAAG,eAA0B,CAAC;AACtD,UAAAY,aAAY,OAAO,MAAMZ,GAAE;AAC3B,iBAAO,GAAG,SAAS,KAAK,KAAK,SAAS,GAAG,MAAM,QAAQ;AACrD,gBAAI,KAAK,OAAO,KAAK,KAAK,QAAQ;AAChC,cAAAY,aAAY,cAAc,GAAG,YAAY,GAAG,GAAG,SAAS;AACxD,uBAAS,KAAK,KAAK;AAAS,6BAAa,KAAK,CAAC;AAAA,YACjD,WAAW,KAAK,SAAS6D,OAAM;AAC7B;AAAA,YACF,OAAO;AACL,kBAAI,aAAa,QAAQ;AACvB,yBAAS,KAAK,cAAc;AAC1B,sBAAI,EAAE,QAAQ;AAAe,oBAAA7D,aAAY,OAAO,EAAE,MAAM,EAAE,EAAE;AAAA;AACvD,0BAAM,KAAK,CAAC;AAAA,gBACnB;AACA,+BAAe,CAAC;AAAA,cAClB;AACA,cAAAA,aAAY,OAAO,GAAG,YAAY,GAAG,GAAG,SAAS;AACjD,uBAAS,KAAK,KAAK;AAAS,sBAAM,KAAK,CAAC;AACxC,cAAAZ,MAAK,GAAG,YAAY,KAAK,KAAK;AAC9B,kBAAI,YAAY,GAAG,YAAY,KAAK,WAAW,KAAK,aAAa,CAAC;AAClE,kBAAI,YAAYA;AAAI,gBAAAY,aAAY,OAAO,WAAWZ,GAAE;AAAA,YACtD;AAAA,UACF;AACA,cAAI,aAAa,QAAQ;AACvB,2BAAe,aAAa,OAAO,OAAK,EAAE,QAAQ,iBAAa;AAC/D,gBAAI,aAAa;AAAQ,mBAAK,UAAU,aAAa,OAAO,KAAK,OAAO;AAAA,UAC1E;AAEA,aAAG,QAAQ,GAAG,OAAO,cAAc,OAAO,CAAC,IAAI,EAAE,OAAO,mBAAgBA,MAAK,IAAI,GAAG,IAAI;AACxF,iBAAO;AAAA,QACT;AAAA,QAEA,WAAW,IAAI,MAAM;AACnB,cAAI,WAAWC,cAAa,IAAI;AAChC,cAAI,WAAW;AAAG,mBAAO;AACzB,cAAI,OAAO,GAAG,YAAY,KAAK,KAAK,KAAK,KAAK,MAAM,MAAM,WAAW,KAAK;AAC1E,cAAI,WAAW,KAAK,UAAU,QAAQ,GAAG,SAASF,eAAc,KAAK,MAAM,KAAK,KAAK,QAAQ,QAAQ;AACrG,cAAI,QAAmC,CAACc,KAAI,mBAAe,MAAM,OAAO,GAAG,CAAC;AAC5E,cAAI,WAAW;AACb,kBAAM,KAAKA,KAAI,mBAAe,GAAG,YAAY,UAAU,GAAG,YAAY,MAAM,CAAC;AAE/E,mBAAS,QAAQ,MAAM,GAAG,SAAS,KAAK,KAAK,SAAS,GAAG,MAAM,QAAQ,QAAQ,OAAO;AACpF,gBAAI,IAAI,KAAK;AACb,gBAAI,KAAK,SAAS,KAAK,aAAa;AAClC,qBAAO,IAAI,KAAK,KAAK,UAAU,KAAK,KAAK,WAAW,CAAC,KAAK;AAAI;AAChE,gBAAI,IAAI,KAAK,OAAO,OAAO,KAAK,UAAU,CAAC,KAAK,KAAK,KAAK,QAAQ;AAChE,uBAAS,KAAK,KAAK;AAAS,sBAAM,KAAK,CAAC;AACxC,oBAAM,KAAKA,KAAI,mBAAe,GAAG,YAAY,KAAK,KAAK,GAAG,YAAY,CAAC,CAAC;AACxE,iBAAG,SAAS;AACZ;AAAA,YACF,OAAO;AACL,kBAAI,CAAC;AAAO,gBAAAD,aAAY,OAAO,GAAG,YAAY,GAAG,GAAG,SAAS;AAC7D,uBAAS,KAAK,KAAK;AAAS,sBAAM,KAAK,CAAC;AACxC,kBAAI,YAAY,GAAG,YAAY,KAAK,SAAS,UAAU,GAAG,YAAY,KAAK,KAAK;AAChF,kBAAI,YAAY;AAAS,gBAAAA,aAAY,OAAO,WAAW,OAAO;AAAA,YAChE;AAAA,UACF;AACA,aAAG,QAAQ,GAAG,OAAO,cAAc,OAAO,CAAC,IAAI,EAC5C,OAAO,oBAAiB,GAAG,YAAY,IAAI,IAAI,GAAG,IAAI;AACzD,iBAAO;AAAA,QACT;AAAA,QAEA,WAAW,IAAI,MAAM;AACnB,cAAI,OAAOV,cAAa,IAAI;AAC5B,cAAI,OAAO;AAAG,mBAAO;AACrB,aAAG,aAAa,oBAAiB,KAAK,GAAG;AACzC,aAAG,QAAQ,oBAAgB,GAAG,YAAY,KAAK,KAAK,GAAG,YAAY,KAAK,MAAM,CAAC;AAC/E,eAAK,SAAS,KAAK,MAAM,IAAI;AAC7B,iBAAO;AAAA,QACT;AAAA,QAEA,eAAe,IAAI,MAAM;AACvB,cAAIN,kBAAiB,MAAM,IAAI,KAAK,IAAI;AAAG,mBAAO;AAClD,cAAI,OAAO,GAAG,YAAY,KAAK;AAC/B,aAAG,SAAS;AACZ,aAAG,QAAQ,wBAAqB,IAAI;AACpC,iBAAO;AAAA,QACT;AAAA,QAEA,WAAW,IAAI,MAAM;AACnB,cAAI,OAAOD,cAAa,MAAM,IAAI,KAAK;AACvC,cAAI,OAAO;AAAG,mBAAO;AACrB,cAAI,GAAG,MAAM,QAAQ;AACnB,eAAG,aAAa,oBAAiB,KAAK,SAAS,KAAK,IAAI;AAC1D,cAAI,UAAUgB,eAAc,MAAM,KAAK,MAAM,CAAC;AAC9C,aAAG,aAAa,kBAAe,KAAK,SAAS,UAAU,KAAK,UAAU;AACtE,aAAG,QAAQ,mBAAe,GAAG,YAAY,KAAK,KAAK,GAAG,YAAY,KAAK,MAAM,IAAI;AACjF,eAAK,eAAe,OAAO;AAC3B,iBAAO;AAAA,QACT;AAAA,QAEA,YAAY,IAAI,MAAM;AACpB,cAAI,OAAOjB,eAAc,MAAM,IAAI,KAAK;AACxC,cAAI,OAAO;AAAG,mBAAO;AACrB,cAAI,GAAG,MAAM,QAAQ;AACnB,eAAG,aAAa,qBAAkB,KAAK,SAAS,KAAK,KAAK,WAAW,KAAK,MAAM,OAAO,CAAC,CAAC;AAC3F,cAAI,UAAUiB,eAAc,MAAM,KAAK,MAAM,IAAI;AACjD,aAAG,aAAa,kBAAe,KAAK,SAAS,UAAU,KAAK,UAAU;AACtE,aAAG,QAAQ,mBAAe,GAAG,YAAY,KAAK,KAAK,GAAG,YAAY,KAAK,MAAM,IAAI;AACjF,eAAK,eAAe,OAAO;AAC3B,iBAAO;AAAA,QACT;AAAA,QAEA,WAAW,IAAI,MAAM;AACnB,cAAI,OAAOL,cAAa,IAAI;AAC5B,cAAI,OAAO;AAAG,mBAAO;AACrB,cAAI,MAAM,KAAK,KAAK,OAAO,GAAG,YAAY;AAC1C,cAAI,aAAaP,eAAc,KAAK,MAAM,KAAK,KAAK,QAAQ,GAAG,GAAG,QAAQ;AAC1E,iBAAO,QAAQ,OAAO,KAAK,KAAK,WAAW,QAAQ,CAAC,KAAK,KAAK;AAAM;AACpE,cAAI,SAAS,cAAc,SAAS,OAAO,CAACF,OAAM,KAAK,KAAK,WAAW,QAAQ,CAAC,CAAC;AAAG,oBAAQ,KAAK,KAAK;AACtG,cAAI,MAAM,GAAG,OACV,MAAM,qBAAiB,GAAG,IAAI,EAC9B,cAAc,GAAG,OAAO,YAAY,KAAK,KAAK,MAAM,MAAM,OAAO,GAAG,KAAK,GAAG,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI;AACtG,cAAI,QAAQ,KAAK,KAAK;AAAQ,gBAAI,MAAM,qBAAiB,QAAQ,KAAK,aAAa,GAAG;AACtF,cAAIuB,QAAO,IAAI,OAAO,sBAAmB,IAAI,MAAM,KAAK,KAAK,SAAS,GAAG;AACzE,aAAG,SAAS;AACZ,aAAG,QAAQA,OAAM,IAAI;AACrB,iBAAO;AAAA,QACT;AAAA,QAEA,UAAU,IAAI,MAAM;AAClB,cAAI,OAAOZ,aAAY,MAAM,IAAI,KAAK;AACtC,cAAI,OAAO;AAAG,mBAAO;AACrB,cAAI,OAAO,GAAG,YAAY,KAAK,KAAKD,OAAMG,gBAAe,IAAI,EAAE,CAAC;AAChE,cAAI,QAAmB,CAAC,GAAG,WAAWH,QAAOmC;AAC7C,iBAAO,CAACnC,KAAI,KAAK,KAAK,IAAI,KAAK,GAAG,SAAS,GAAG;AAC5C,gBAAI,KAAK,QAAQ,GAAG,MAAM,QAAQ;AAAE,yBAAW;AAAO;AAAA,YAAM;AAC5D,qBAAS,KAAK,KAAK;AAAS,oBAAM,KAAK,CAAC;AAAA,UAC1C;AACA,cAAI;AAAU,eAAG,SAAS;AAC1B,cAAI,WAAWA,QAAOoC,cAAa,wBAAoBpC,QAAOqC,iBAAgB,sCAAkC;AAChH,cAAI5C,MAAK,GAAG,YAAY;AACxB,aAAG,QAAQ,GAAG,OAAO,cAAc,OAAO,CAAC,IAAI,EAAE,OAAO,UAAUA,MAAK,IAAI,GAAG,IAAI;AAClF,iBAAO;AAAA,QACT;AAAA,QAEA,eAAe;AAAA;AAAA,MACjB;AASA,MAAM8C,uBAAN,MAAqD;AAAA,QAMnD,YAAY,MAAiB;AAL7B,uCAAQ;AACR,sCAAkB,CAAC;AACnB,qCAAM;AACN;AAGE,eAAK,QAAQ,KAAK;AAClB,eAAK,QAAQ,KAAK,OAAO;AAAA,QAC3B;AAAA,QAEA,SAAS,IAAkB,MAAY,MAAiB;AACtD,cAAI,KAAK,SAAS;AAAiB,mBAAO;AAC1C,cAAIf,WAAU,KAAK,UAAU,OAAO,KAAK,MAAM;AAC/C,cAAI,SAAS,KAAK,QAAQA,QAAO;AACjC,cAAI,SAAS,MAAM,SAASA,SAAQ;AAAQ,mBAAO,KAAK,SAAS,IAAI,MAAM,MAAM;AACjF,iBAAO;AAAA,QACT;AAAA,QAEA,OAAO,IAAkB,MAAiB;AACxC,eAAK,KAAK,SAAS,gBAAiB,KAAK,SAAS,kBAAmBjC,WAAU,KAAK,SAAS,KAAK,GAAG,KAAK,KAAK,QAAQ;AACrH,mBAAO,KAAK,SAAS,IAAI,MAAM,KAAK,QAAQ,MAAM;AACpD,iBAAO;AAAA,QACT;AAAA,QAEA,SAAS,IAAkB,MAAiB,KAAa;AACvD,aAAG,eAAe,MAAMe,KAAI,wBAAoB,KAAK,OAAO,KAAK,QAAQ,KAAK,KAAK,IAAI,CAAC;AACxF,iBAAO;AAAA,QACT;AAAA,QAEA,UAAUA,MAA6B;AACrC,cAAIA,MAAK;AACP,iBAAK,MAAMA,KAAI,KAAK,KAAK;AACzB,iBAAK,KAAK,KAAKA,IAAG;AAClB,iBAAK;AACL,mBAAO;AAAA,UACT;AACA,cAAIA,SAAQ;AAAO,iBAAK,QAAQ;AAChC,iBAAO;AAAA,QACT;AAAA,QAEA,QAAQkB,UAAiB;AACvB,qBAAS;AACP,gBAAI,KAAK,SAAS,iBAAiB;AACjC,qBAAO;AAAA,YACT,WAAW,KAAK,SAAS,eAAgB;AACvC,kBAAI,CAAC,KAAK,UAAUG,gBAAeH,UAAS,KAAK,KAAK,KAAK,OAAO,IAAI,CAAC;AAAG,uBAAO;AACjF,kBAAIA,SAAQ,WAAW,KAAK,GAAG,KAAK;AAAc,uBAAO,KAAK,QAAQ;AACtE,mBAAK,KAAK,KAAKlB,KAAI,mBAAe,KAAK,MAAM,KAAK,OAAO,KAAK,MAAM,KAAK,QAAQ,CAAC,CAAC;AACnF,mBAAK;AAAA,YACP,WAAW,KAAK,SAAS,eAAgB;AACvC,kBAAI,CAAC,KAAK,UAAUmB,UAASD,UAASjC,WAAUiC,UAAS,KAAK,GAAG,GAAG,KAAK,KAAK,CAAC;AAAG,uBAAO;AAAA,YAC3F,WAAW,KAAK,SAAS,cAAe;AACtC,kBAAI,OAAOjC,WAAUiC,UAAS,KAAK,GAAG,GAAGxB,OAAM;AAC/C,kBAAI,OAAO,KAAK,KAAK;AACnB,oBAAI,QAAQ0B,gBAAeF,UAAS,MAAM,KAAK,KAAK;AACpD,oBAAI,OAAO;AACT,sBAAI,WAAWjB,SAAQiB,UAAS,MAAM,KAAK,KAAK,KAAK;AACrD,sBAAI,WAAW,GAAG;AAAE,yBAAK,UAAU,KAAK;AAAG,oBAAAxB,OAAM;AAAA,kBAAS;AAAA,gBAC5D;AAAA,cACF;AACA,kBAAI,CAACA;AAAK,gBAAAA,OAAMO,SAAQiB,UAAS,KAAK,GAAG;AACzC,qBAAOxB,OAAM,KAAKA,OAAMwB,SAAQ,SAASxB,OAAM;AAAA,YACjD,OAAO;AACL,qBAAOO,SAAQiB,UAAS,KAAK,GAAG;AAAA,YAClC;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAWA,MAAMgB,uBAAN,MAAqD;AAAA,QACnD,SAAS,IAAkB,MAAY,MAAiB;AACtD,cAAI,YAAY,KAAK,QAAQ,GAAG,MAAM,SAAS,KAAK3C,mBAAkB,IAAI;AAC1E,cAAI,OAAO,KAAK;AAChB,cAAI,YAAY;AAAG,mBAAO;AAC1B,cAAI,gBAAgBS,KAAI,qBAAiB,GAAG,YAAY,KAAK,KAAK,GAAG,YAAY,SAAS;AAC1F,aAAG,SAAS;AACZ,aAAG,eAAe,MAAMA,KAAI,QAAQ,KAAK,0BAAsB,yBAAqB,KAAK,OAAO,GAAG,YAAY,GAAG;AAAA,YAChH,GAAG,GAAG,OAAO,YAAY,KAAK,SAAS,KAAK,KAAK;AAAA,YACjD;AAAA,UACF,CAAC,CAAC;AACF,iBAAO;AAAA,QACT;AAAA,QAEA,SAAS;AACP,iBAAO;AAAA,QACT;AAAA,MACF;AAEA,MAAMmC,qBAAqG;AAAA,QACzG,cAAc,GAAG,MAAM;AAAE,iBAAO,KAAK,QAAQ,WAAW,CAAC,KAAK,KAAe,IAAIF,qBAAoB,IAAI,IAAI;AAAA,QAAK;AAAA,QAClH,gBAAgB;AAAE,iBAAO,IAAIC;AAAA,QAAoB;AAAA,MACnD;AAEA,MAAME,kBAAyE;AAAA,QAC7E,CAAC,GAAG,SAAS3C,cAAa,IAAI,KAAK;AAAA,QACnC,CAAC,GAAG,SAASL,cAAa,IAAI,KAAK;AAAA,QACnC,CAAC,GAAG,SAASC,cAAa,IAAI,KAAK;AAAA,QACnC,CAAC,GAAG,SAASP,cAAa,MAAM,GAAG,IAAI,KAAK;AAAA,QAC5C,CAAC,GAAG,SAASD,eAAc,MAAM,GAAG,IAAI,KAAK;AAAA,QAC7C,CAAC,GAAG,SAASE,kBAAiB,MAAM,GAAG,IAAI,KAAK;AAAA,QAChD,CAAC,GAAG,SAASY,aAAY,MAAM,GAAG,IAAI,KAAK;AAAA,MAC7C;AAEA,MAAM0C,kBAAiB,EAAC,MAAM,IAAI,KAAK,EAAC;AAGjC,MAAMC,gBAAN,MAA2C;AAAA;AAAA,QA0BhD,YAEWiB,SAEA,OACT,WAES,QACT;AANS,wBAAAA;AAEA;AAGA;AA/BX;AAAA;AAEA;AAAA;AACA,8BAAQ,QAAO,IAAI5B,MAAK;AACxB,8BAAQ,SAAQ;AAChB,8BAAQ;AACR,8BAAQ;AAKR;AAAA;AAAA;AAAA;AAAA,mDAAqC,oBAAI;AACzC,2CAA2B;AAG3B;AAAA;AAEA;AAAA;AAEA;AAAA,wCAAS;AAET;AAAA;AAYE,eAAK,KAAK,OAAO,OAAO,SAAS,CAAC,EAAE;AACpC,eAAK,YAAY,KAAK,oBAAoB,KAAK,kBAAkB,OAAO,CAAC,EAAE;AAC3E,eAAK,QAAQH,gBAAe,OAAO,kBAAe,GAAG,KAAK,WAAW,GAAG,CAAC;AACzE,eAAK,QAAQ,CAAC,KAAK,KAAK;AACxB,eAAK,YAAY,UAAU,SAAS,IAAI6B,gBAAe,WAAW,KAAK,IAAI;AAC3E,eAAK,SAAS;AAAA,QAChB;AAAA,QAEA,IAAI,YAAY;AACd,iBAAO,KAAK;AAAA,QACd;AAAA,QAEA,UAAU;AACR,cAAI,KAAK,aAAa,QAAQ,KAAK,oBAAoB,KAAK;AAC1D,mBAAO,KAAK,OAAO;AAErB,cAAI,EAAC,KAAI,IAAI;AACb,qBAAS;AACP,mBAAO,KAAK,QAAQ,KAAK,MAAM;AAAQ,mBAAK,cAAc;AAC1D,qBAAS,QAAQ,KAAK;AAAS,mBAAK,QAAQ,KAAK,MAAM,KAAK,MAAM,KAAK,EAAE;AACzE,gBAAI,KAAK,MAAM,KAAK,KAAK;AAAQ;AAEjC,gBAAI,CAAC,KAAK,SAAS;AAAG,qBAAO,KAAK,OAAO;AAAA,UAC3C;AAEA,cAAI,KAAK,aAAa,KAAK,cAAc,KAAK,OAAO;AAAG,mBAAO;AAE/D;AAAO,uBAAS;AACd,uBAAS,QAAQ,KAAK,OAAO;AAAc,oBAAI,MAAM;AACnD,sBAAI,SAAS,KAAK,MAAM,IAAI;AAC5B,sBAAI,UAAU,OAAO;AACnB,wBAAI,UAAU;AAAM,6BAAO;AAC3B,yBAAK,QAAQ;AACb,6BAAS;AAAA,kBACX;AAAA,gBACF;AACA;AAAA,YACF;AAEA,cAAI,OAAO,IAAI3B,WAAU,KAAK,YAAY,KAAK,KAAK,KAAK,KAAK,MAAM,KAAK,GAAG,CAAC;AAC7E,mBAASmC,UAAS,KAAK,OAAO;AAAkB,gBAAIA,QAAO;AACzD,kBAAIN,UAASM,OAAO,MAAM,IAAI;AAC9B,kBAAIN;AAAQ,qBAAK,QAAQ,KAAKA,OAAO;AAAA,YACvC;AACA;AAAO,mBAAO,KAAK,SAAS,GAAG;AAC7B,kBAAI,KAAK,OAAO,KAAK,KAAK;AAAQ;AAClC,kBAAI,KAAK,SAAS,KAAK,aAAa,GAAG;AACrC,yBAAS,QAAQ,KAAK,OAAO;AAAc,sBAAI,KAAK,MAAM,MAAM,IAAI;AAAG,0BAAM;AAAA,cAC/E;AACA,uBAASA,WAAU,KAAK;AAAS,oBAAIA,QAAO,SAAS,MAAM,MAAM,IAAI;AAAG,yBAAO;AAC/E,mBAAK,WAAW,OAAO,KAAK,MAAM;AAClC,uBAAS,KAAK,KAAK;AAAS,qBAAK,MAAM,KAAK,CAAC;AAAA,YAC/C;AACA,eAAK,WAAW,IAAI;AACpB,iBAAO;AAAA,QACT;AAAA,QAEA,OAAO,KAAa;AAClB,cAAI,KAAK,aAAa,QAAQ,KAAK,YAAY;AAAK,kBAAM,IAAI,WAAW,8BAA8B;AACvG,eAAK,YAAY;AAAA,QACnB;AAAA,QAEQ,cAAcjD,QAAe;AACnC,cAAI,CAAC,KAAK,UAAW,OAAO,KAAK,oBAAoBA,QAAO,KAAK,iBAAiB,KAC9E,CAAC,KAAK,UAAW,QAAQ,KAAK,MAAM,IAAI;AAAG,mBAAO;AACtD,cAAI,QAAQ,KAAK,UAAW,UAAU,IAAI;AAC1C,cAAI,CAAC;AAAO,mBAAO;AACnB,eAAK,qBAAqB;AAC1B,eAAK,YAAYiB,YAAW,KAAK,mBAAmB,KAAK,MAAM;AAC/D,eAAK,WAAW;AAChB,cAAI,KAAK,oBAAoB,KAAK,IAAI;AACpC,iBAAK;AACL,iBAAK;AACL,iBAAK,SAAS;AAAA,UAChB,OAAO;AACL,iBAAK,QAAQ;AACb,iBAAK,SAAS;AAAA,UAChB;AACA,iBAAO;AAAA,QACT;AAAA;AAAA,QAGA,IAAI,QAAQ;AACV,iBAAO,KAAK,MAAM;AAAA,QACpB;AAAA;AAAA;AAAA,QAIA,WAAW,QAAQ,KAAK,QAAQ,GAAG;AACjC,iBAAO,KAAK,OAAO,QAAQ,MAAM,KAAK,MAAM,KAAK,EAAE,IAAI;AAAA,QACzD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAOA,WAAW;AACT,eAAK,aAAa,KAAK,KAAK,KAAK;AACjC,cAAI,KAAK,mBAAmB,KAAK,IAAI;AACnC,iBAAK,oBAAoB,KAAK;AAC9B,iBAAK,QAAQ;AACb,iBAAK,SAAS;AACd,mBAAO;AAAA,UACT,OAAO;AACL,iBAAK;AACL,iBAAK,oBAAoB,KAAK,kBAAkB;AAChD,iBAAK,WAAW;AAChB,iBAAK,SAAS;AACd,mBAAO;AAAA,UACT;AAAA,QACF;AAAA,QAEQ,aAAa;AACnB,iBAAO,KAAK,SAAS,KAAK,OAAO,SAAS,KAAK,KAAK,qBAAqB,KAAK,OAAO,KAAK,MAAM,EAAE,IAAI;AACpG,iBAAK;AACL,iBAAK,oBAAoB,KAAK,IAAI,KAAK,mBAAmB,KAAK,OAAO,KAAK,MAAM,EAAE,IAAI;AAAA,UACzF;AAAA,QACF;AAAA;AAAA,QAGA,SAASjB,QAAe;AACtB,cAAIwD,KAAIzB;AACR,UAAAyB,GAAE,MAAMxD;AACR,cAAIA,UAAS,KAAK,IAAI;AACpB,YAAAwD,GAAE,OAAO;AAAA,UACX,OAAO;AACL,YAAAA,GAAE,OAAO,KAAK,YAAYxD,MAAK;AAC/B,YAAAwD,GAAE,OAAOA,GAAE,KAAK;AAChB,gBAAI,KAAK,OAAO,SAAS,GAAG;AAC1B,kBAAI,aAAa,KAAK,mBAAmB,SAAS,KAAK;AACvD,qBAAO,KAAK,OAAO,MAAM,EAAE,KAAKA,GAAE,KAAK;AACrC;AACA,oBAAI,WAAW,KAAK,OAAO,MAAM,EAAE;AACnC,oBAAI,QAAQ,KAAK,YAAY,QAAQ;AACrC,gBAAAA,GAAE,MAAM,WAAW,MAAM;AACzB,gBAAAA,GAAE,OAAOA,GAAE,KAAK,MAAM,GAAG,KAAK,OAAO,SAAS,CAAC,EAAE,KAAK,UAAU,IAAI;AACpE,6BAAaA,GAAE,MAAMA,GAAE,KAAK;AAAA,cAC9B;AAAA,YACF;AAAA,UACF;AACA,iBAAOA;AAAA,QACT;AAAA;AAAA,QAGA,WAAW;AACT,cAAI,EAAC,KAAI,IAAI,MAAM,EAAC,MAAA5D,OAAM,KAAAR,KAAG,IAAI,KAAK,SAAS,KAAK,iBAAiB;AACrE,eAAK,kBAAkBA;AACvB,eAAK,MAAMQ,KAAI;AACf,iBAAO,KAAK,QAAQ,KAAK,MAAM,QAAQ,KAAK,SAAS;AACnD,gBAAI,KAAK,KAAK,MAAM,KAAK,KAAK,GAAG,UAAU,KAAK,OAAO,kBAAkB,GAAG,IAAI;AAChF,gBAAI,CAAC;AAAS,oBAAM,IAAI,MAAM,6BAA6BuB,MAAK,GAAG,IAAI,CAAC;AACxE,gBAAI,CAAC,QAAQ,IAAI,MAAM,IAAI;AAAG;AAC9B,iBAAK,QAAQ;AAAA,UACf;AAAA,QACF;AAAA,QAEQ,YAAY,KAAa;AAC/B,cAAI,OAAO,KAAK,MAAM,MAAM,GAAG,GAAGvB;AAClC,cAAI,CAAC,KAAK,MAAM,YAAY;AAC1B,gBAAI6D,OAAM,KAAK,QAAQ,IAAI;AAC3B,YAAA7D,QAAO6D,OAAM,IAAI,OAAO,KAAK,MAAM,GAAGA,IAAG;AAAA,UAC3C,OAAO;AACL,YAAA7D,QAAO,QAAQ,OAAO,KAAK;AAAA,UAC7B;AACA,iBAAO,MAAMA,MAAK,SAAS,KAAK,KAAKA,MAAK,MAAM,GAAG,KAAK,KAAK,GAAG,IAAIA;AAAA,QACtE;AAAA;AAAA,QAGA,cAAc;AAAE,iBAAO,KAAK,QAAQ,KAAK,YAAY,KAAK,YAAY;AAAA,QAAE;AAAA;AAAA,QAGxE,aAAa,MAAYI,QAAe,QAAQ,GAAG;AACjD,eAAK,QAAQkB,gBAAe,OAAO,MAAM,OAAO,KAAK,YAAYlB,QAAO,KAAK,MAAM,MAAM,KAAK,YAAY,KAAK,KAAK,KAAK,MAAM;AAC/H,eAAK,MAAM,KAAK,KAAK,KAAK;AAAA,QAC5B;AAAA;AAAA;AAAA,QAIA,eAAe,MAAcA,QAAe,QAAQ,GAAG;AACrD,eAAK,aAAa,KAAK,OAAO,YAAY,IAAI,GAAGA,QAAO,KAAK;AAAA,QAC/D;AAAA;AAAA,QAGA,QAAQ,OAAoB,MAAcnB,KAAa;AACrD,cAAI,OAAO,SAAS;AAAU,oBAAQ,IAAI,KAAK,KAAK,OAAO,QAAQ,MAAM,KAAK,GAAGyB,OAAMA,QAAOzB,OAAA,OAAAA,MAAM,KAAK,YAAY,KAAK,IAAI;AAC9H,eAAK,MAAM,SAAS,OAAO,OAAO,KAAK,MAAM,IAAI;AAAA,QACnD;AAAA;AAAA;AAAA,QAIA,WAAWa,MAAc;AACvB,eAAK,MAAM,SAASA,KAAI,OAAO,KAAK,OAAO,OAAO,GAAGA,KAAI,OAAO,KAAK,MAAM,IAAI;AAAA,QACjF;AAAA;AAAA;AAAA;AAAA,QAKA,eAAe,MAAiBA,MAAc;AAC5C,eAAK,QAAQ,KAAK,OACf,cAAcsB,aAAYtB,KAAI,UAAU,KAAK,KAAK,GAAG,CAACA,KAAI,IAAI,EAC9D,OAAOA,KAAI,MAAMA,KAAI,KAAKA,KAAI,IAAI,GAAGA,KAAI,IAAI;AAAA,QAClD;AAAA;AAAA,QAGA,gBAAgB;AACd,cAAI,KAAK,KAAK,MAAM,IAAI;AACxB,cAAIgE,OAAM,KAAK,MAAM,KAAK,MAAM,SAAS,CAAC;AAC1C,UAAAA,KAAI,SAAS,GAAG,OAAO,KAAK,OAAO,OAAO,GAAG,GAAG,OAAOA,KAAI,IAAI;AAC/D,eAAK,QAAQA;AAAA,QACf;AAAA,QAEQ,SAAS;AACf,iBAAO,KAAK,MAAM,SAAS;AAAG,iBAAK,cAAc;AACjD,iBAAO,KAAK,QAAQ,KAAK,MAAM,OAAO,KAAK,OAAO,SAAS,KAAK,SAAS,CAAC;AAAA,QAC5E;AAAA,QAEQ,QAAQ,MAAY;AAC1B,iBAAO,KAAK,OAAO,SAAS,IAC1B7D,YAAW,KAAK,QAAQ,GAAG,KAAK,SAAS,KAAK,OAAO,CAAC,EAAE,MAAM,KAAK,iBAAiB,IAAI;AAAA,QAC5F;AAAA;AAAA,QAGA,WAAW,MAAiB;AAC1B,mBAASoD,WAAU,KAAK;AAAS,gBAAIA,QAAO,OAAO,MAAM,IAAI;AAAG;AAChE,cAAI,SAASjC,aAAY,KAAK,OAAO,YAAY,KAAK,SAAS,KAAK,KAAK,GAAG,KAAK,KAAK;AACtF,eAAK,QAAQ,KAAK,OACf,cAAc,QAAQ,CAAC,KAAK,KAAK,EACjC,OAAO,oBAAgB,KAAK,QAAQ,MAAM,GAAG,KAAK,KAAK;AAAA,QAC5D;AAAA,QAMA,IAAI,MAAqB,MAAcnC,KAAa,UAAwC;AAC1F,cAAI,OAAO,QAAQ;AAAU,mBAAOa,KAAI,KAAK,OAAO,YAAY,IAAI,GAAG,MAAMb,KAAK,QAAQ;AAC1F,iBAAO,IAAIuD,aAAY,MAAM,IAAI;AAAA,QACnC;AAAA;AAAA,QAGA,IAAI,SAAS;AAAE,iBAAO,IAAID,QAAO,KAAK,OAAO,OAAO;AAAA,QAAE;AAAA,MACxD;AAsLO,MAAMF,kBAAN,MAAM,wBAAuB,OAAO;AAAA;AAAA,QAKzC,YAGW,SAEA,cAEA,kBAEA,YAEA,cAEA,mBAEA,eAEA,aAEA,UACT;AACA,gBAAM;AAlBG;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAtBX;AAAA,2CAAsC,uBAAO,OAAO,IAAI;AAyBtD,mBAAS0B,MAAK,QAAQ;AAAO,iBAAK,UAAUA,GAAE,IAAI,IAAIA,GAAE;AAAA,QAC1D;AAAA,QAEA,YAAY,OAAc,WAAoC,QAA6D;AACzH,cAAIJ,SAAsB,IAAIvB,cAAa,MAAM,OAAO,WAAW,MAAM;AACzE,mBAAS4B,MAAK,KAAK;AAAU,YAAAL,SAAQK,GAAEL,QAAO,OAAO,WAAW,MAAM;AACtE,iBAAOA;AAAA,QACT;AAAA;AAAA,QAGA,UAAU,MAAyB;AACjC,cAAIM,UAAS1D,eAAc,IAAI;AAC/B,cAAI,CAAC0D;AAAQ,mBAAO;AACpB,cAAI,EAAC,SAAS,kBAAiB,IAAI;AACnC,cAAI,eAAe,KAAK,aAAa,MAAM,GAAG,mBAAmB,KAAK,iBAAiB,MAAM,GACzF,aAAa,KAAK,WAAW,MAAM,GAAG,gBAAgB,KAAK,cAAc,MAAM,GAC/E,cAAc,KAAK,YAAY,MAAM,GAAG,eAAe,KAAK,aAAa,MAAM,GAC/E,WAAW,KAAK;AAEpB,cAAI3D,UAAS2D,QAAO,WAAW,GAAG;AAChC,gCAAoB,OAAO,OAAO,CAAC,GAAG,iBAAiB;AACvD,gBAAI3B,aAAY,QAAQ,MAAM,MAAM,GAAG;AACvC,qBAAS,KAAK2B,QAAO,aAAa;AAChC,kBAAI,EAAC,MAAApD,OAAM,OAAO,WAAW,MAAK,IAAI,OAAO,KAAK,WAAW,EAAC,MAAM,EAAC,IAAgB;AACrF,kBAAIyB,WAAU,KAAK,CAAAyB,OAAKA,GAAE,QAAQlD,KAAI;AAAG;AACzC,kBAAI;AAAW,gBAAC,kBAA0ByB,WAAU,MAAM,IACxD,CAAC5D,KAAoB,IAAkB,SAAe,UAAW,IAAI,MAAMA,IAAG,KAAK;AACrF,kBAAIwF,MAAK5B,WAAU;AACnB,kBAAI,QAAQ,YAAY,CAAC,SAAS,cAAc,IAAI,CAAC,QAAQ,SACzD4B,OAAM,uBAAoBA,OAAM,0BAAsB,CAAC,SAAS,aAAa,SAAS,IAAI,CAAC,SAAS,WAAW;AACnH,cAAA5B,WAAU,KAAK,SAAS,OAAO;AAAA,gBAC7B,IAAA4B;AAAA,gBACA,MAAArD;AAAA,gBACA,OAAO,SAAS,CAAC,CAAC,SAAS,OAAO,KAAK,CAAC;AAAA,cAC1C,CAAC,CAAC;AACF,kBAAI,OAAO;AACT,oBAAI,CAAC;AAAQ,2BAAS,CAAC;AACvB,oBAAI,MAAM,QAAQ,KAAK,KAAK,iBAAiB;AAAK,yBAAOA,KAAI,IAAI;AAAA;AAC5D,yBAAO,OAAO,QAAQ,KAAK;AAAA,cAClC;AAAA,YACF;AACA,sBAAU,IAAI,QAAQyB,UAAS;AAC/B,gBAAI;AAAQ,wBAAU,QAAQ,OAAO,UAAU,MAAM,CAAC;AAAA,UACxD;AAEA,cAAIhC,UAAS2D,QAAO,KAAK;AAAG,sBAAU,QAAQ,OAAO,GAAGA,QAAO,KAAK;AAEpE,cAAI3D,UAAS2D,QAAO,MAAM,GAAG;AAC3B,qBAASE,OAAMF,QAAO,QAAQ;AAC5B,kBAAI,QAAQ,KAAK,WAAW,QAAQE,GAAE,GAAG,SAAS,KAAK,YAAY,QAAQA,GAAE;AAC7E,kBAAI,QAAQ;AAAI,6BAAa,KAAK,IAAI,iBAAiB,KAAK,IAAI;AAChE,kBAAI,SAAS;AAAI,8BAAc,MAAM,IAAI;AAAA,YAC3C;AAAA,UACF;AAEA,cAAI7D,UAAS2D,QAAO,UAAU,GAAG;AAC/B,qBAASG,SAAQH,QAAO,YAAY;AAClC,kBAAI,QAAQ,WAAW,QAAQG,MAAK,IAAI;AACxC,kBAAI,QAAQ,IAAI;AACd,6BAAa,KAAK,IAAIA,MAAK;AAC3B,iCAAiB,KAAK,IAAIA,MAAK;AAAA,cACjC,OAAO;AACL,oBAAI,MAAMA,MAAK,SAASzD,UAAS,YAAYyD,MAAK,MAAM,IACpDA,MAAK,QAAQzD,UAAS,YAAYyD,MAAK,KAAK,IAAI,IAAI,WAAW,SAAS;AAC5E,6BAAa,OAAO,KAAK,GAAGA,MAAK,KAAK;AACtC,iCAAiB,OAAO,KAAK,GAAGA,MAAK,IAAI;AACzC,2BAAW,OAAO,KAAK,GAAGA,MAAK,IAAI;AAAA,cACrC;AACA,kBAAIA,MAAK;AAAS,6BAAa,KAAKA,MAAK,OAAO;AAAA,YAClD;AAAA,UACF;AAEA,cAAI9D,UAAS2D,QAAO,WAAW,GAAG;AAChC,qBAASG,SAAQH,QAAO,aAAa;AACnC,kBAAI,QAAQ,YAAY,QAAQG,MAAK,IAAI;AACzC,kBAAI,QAAQ,IAAI;AACd,8BAAc,KAAK,IAAIA,MAAK;AAAA,cAC9B,OAAO;AACL,oBAAI,MAAMA,MAAK,SAASzD,UAAS,aAAayD,MAAK,MAAM,IACrDA,MAAK,QAAQzD,UAAS,aAAayD,MAAK,KAAK,IAAI,IAAI,YAAY,SAAS;AAC9E,8BAAc,OAAO,KAAK,GAAGA,MAAK,KAAK;AACvC,4BAAY,OAAO,KAAK,GAAGA,MAAK,IAAI;AAAA,cACtC;AAAA,YACF;AAAA,UACF;AAEA,cAAIH,QAAO;AAAM,uBAAW,SAAS,OAAOA,QAAO,IAAI;AAEvD,iBAAO,IAAI;AAAA,YAAe;AAAA,YACA;AAAA,YAAc;AAAA,YAAkB;AAAA,YAChC;AAAA,YAAc;AAAA,YACd;AAAA,YAAe;AAAA,YAAa;AAAA,UAAQ;AAAA,QAChE;AAAA;AAAA,QAGA,YAAYpD,OAAc;AACxB,cAAI,QAAQ,KAAK,UAAUA,KAAI;AAC/B,cAAI,SAAS;AAAM,kBAAM,IAAI,WAAW,sBAAsBA,KAAI,GAAG;AACrE,iBAAO;AAAA,QACT;AAAA;AAAA;AAAA;AAAA,QAKA,YAAYb,OAAcE,SAAgB;AACxC,cAAI,KAAK,IAAI+C,eAAc,MAAMjD,OAAME,OAAM;AAC7C;AAAO,qBAAS,MAAMA,SAAQ,MAAM,GAAG,OAAM;AAC3C,kBAAI,OAAO,GAAG,KAAK,GAAG;AACtB,uBAAS,SAAS,KAAK;AAAe,oBAAI,OAAO;AAC/C,sBAAI,SAAS,MAAM,IAAI,MAAM,GAAG;AAChC,sBAAI,UAAU,GAAG;AAAE,0BAAM;AAAQ,6BAAS;AAAA,kBAAM;AAAA,gBAClD;AACA;AAAA,YACF;AACA,iBAAO,GAAG,eAAe,CAAC;AAAA,QAC5B;AAAA,MACF;AAiCA,MAAIoC,aAAY,CAAC,SAAS,IAAI;AAC9B,eAAS,IAAI,GAAGzB,OAAMA,QAAOU,MAAK,CAAC,GAAG,KAAK;AACzC,QAAAe,WAAU,CAAC,IAAI,SAAS,OAAO;AAAA,UAC7B,IAAI;AAAA,UACJ,MAAAzB;AAAA,UACA,OAAO,KAAK,kBAAc,CAAC,IAAI,CAAC,CAAC,SAAS,OAAO,KAAKa,qBAAoB,CAAC,SAAS,cAAc,IAAI,CAAC,SAAS,WAAW,CAAC,CAAC;AAAA,UAC7H,KAAKb,SAAQ;AAAA,QACf,CAAC;AAAA,MACH;AAEA,MAAMH,QAAuB,CAAC;AAE9B,MAAM6B,UAAN,MAAa;AAAA,QAGX,YAAqB,SAAkB;AAAlB;AAFrB,yCAAoB,CAAC;AACrB,uCAAgB,CAAC;AAAA,QACuB;AAAA,QAExC,MAAM,MAAY,MAActD,KAAY,WAAW,GAAG;AACxD,eAAK,QAAQ,KAAK,MAAM,MAAMA,KAAI,IAAI,WAAW,CAAC;AAClD,iBAAO;AAAA,QACT;AAAA,QAEA,cAAc,MAA0CiB,UAAS,GAAG;AAClE,mBAASR,MAAK;AAAM,YAAAA,GAAE,QAAQ,MAAMQ,OAAM;AAC1C,iBAAO;AAAA,QACT;AAAA,QAEA,OAAO,MAAY,QAAgB;AACjC,iBAAO,KAAK,MAAM;AAAA,YAChB,QAAQ,KAAK;AAAA,YACb,SAAS,KAAK;AAAA,YACd,QAAQ,KAAK;AAAA,YACb,OAAO;AAAA,YACP;AAAA,UACF,CAAC;AAAA,QACH;AAAA,MACF;AAGO,MAAMY,WAAN,MAAc;AAAA;AAAA,QAEnB,YAGW,MAEA,MAEA7B,KAEA,WAA+CyB,OACxD;AAPS;AAEA;AAEA,oBAAAzB;AAEA;AAAA,QACR;AAAA;AAAA,QAGH,QAAQ,KAAaiB,SAAgB;AACnC,cAAI,WAAW,IAAI,QAAQ;AAC3B,cAAI,cAAc,KAAK,UAAUA,OAAM;AACvC,cAAI,QAAQ,KAAK,KAAK,MAAM,KAAK,OAAOA,SAAQ,KAAK,KAAKA,SAAQ,IAAI,QAAQ,SAAS,IAAI,QAAQ;AAAA,QACrG;AAAA;AAAA,QAGA,OAAO,SAAwB;AAC7B,iBAAO,IAAIqC,QAAO,OAAO,EAAE,cAAc,KAAK,UAAU,CAAC,KAAK,IAAI,EAAE,OAAO,KAAK,MAAM,KAAK,KAAK,KAAK,IAAI;AAAA,QAC3G;AAAA,MACF;AAEA,MAAMC,eAAN,MAAkB;AAAA,QAChB,YAAqB,MAAqB,MAAc;AAAnC;AAAqB;AAAA,QAAe;AAAA,QAEzD,IAAI,KAAK;AAAE,iBAAO,KAAK,OAAO,KAAK,KAAK;AAAA,QAAO;AAAA,QAE/C,IAAI,OAAO;AAAE,iBAAO,KAAK,KAAK,KAAK;AAAA,QAAG;AAAA,QAEtC,IAAI,WAAW;AAAE,iBAAO9B;AAAA,QAAK;AAAA,QAE7B,QAAQ,KAAaR,SAAgB;AACnC,cAAI,MAAM,KAAK,KAAK,IAAI;AACxB,cAAI,QAAQ,KAAK,IAAI,MAAM,SAAS,GAAG,KAAK,OAAOA,SAAQ,KAAK,KAAKA,SAAQ,EAAE;AAAA,QACjF;AAAA,QAEA,SAAe;AAAE,iBAAO,KAAK;AAAA,QAAK;AAAA,MACpC;AA6BA,MAAMuC,sBAAoC,EAAC,SAAS,YAAY,MAAM,eAAc;AACpF,MAAMC,oBAAkC,EAAC,SAAS,YAAY,MAAM,eAAc;AAClF,MAAMC,aAA2B,CAAC;AAAlC,MAAqCC,cAA4B,CAAC;AAElE,MAAMC,mBAAN,MAAsB;AAAA,QACpB,YAAqB,MACA,MACA5D,KACF,MAAY;AAHV;AACA;AACA,oBAAAA;AACF;AAAA,QAAa;AAAA,MAClC;AAEA,MAAM6D,aAAY;AAEX,MAAIC,eAAc;AACzB,UAAI;AAAE,QAAAA,eAAc,IAAI,OAAO,6DAA6D,GAAG;AAAA,MAAE,SAAS,GAAG;AAAA,MAAC;AAE9G,MAAMC,iBAA4F;AAAA,QAChG,OAAO,IAAI,MAAM5C,QAAO;AACtB,cAAI,QAAQ,MAAiBA,UAAS,GAAG,MAAM;AAAG,mBAAO;AACzD,cAAI,UAAU,GAAG,KAAKA,SAAQ,CAAC;AAC/B,mBAAS,IAAI,GAAG,IAAI0C,WAAU,QAAQ;AAAK,gBAAIA,WAAU,WAAW,CAAC,KAAK;AACxE,qBAAO,GAAG,OAAOhD,KAAI,iBAAaM,QAAOA,SAAQ,CAAC,CAAC;AACrD,iBAAO;AAAA,QACT;AAAA,QAEA,OAAO,IAAI,MAAMA,QAAO;AACtB,cAAI,QAAQ;AAAc,mBAAO;AACjC,cAAI,IAAI,6BAA6B,KAAK,GAAG,MAAMA,SAAQ,GAAGA,SAAQ,EAAE,CAAC;AACzE,iBAAO,IAAI,GAAG,OAAON,KAAI,iBAAaM,QAAOA,SAAQ,IAAI,EAAE,CAAC,EAAE,MAAM,CAAC,IAAI;AAAA,QAC3E;AAAA,QAEA,WAAW,IAAI,MAAMA,QAAO;AAC1B,cAAI,QAAQ,MAAgBA,UAAS,GAAG,KAAKA,SAAQ,CAAC,KAAK;AAAI,mBAAO;AACtE,cAAI,MAAMA,SAAQ;AAClB,iBAAO,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,KAAK;AAAI;AAC3C,cAAI,OAAO,MAAMA,QAAO,UAAU;AAClC,iBAAO,MAAM,GAAG,KAAK,OAAO;AAC1B,gBAAI,GAAG,KAAK,GAAG,KAAK,IAAI;AACtB;AACA,kBAAI,WAAW,QAAQ,GAAG,KAAK,MAAM,CAAC,KAAK;AACzC,uBAAO,GAAG,OAAON,KAAI,qBAAiBM,QAAO,MAAM,GAAG;AAAA,kBACpDN,KAAI,mBAAeM,QAAOA,SAAQ,IAAI;AAAA,kBACtCN,KAAI,mBAAe,MAAM,IAAI,MAAM,MAAM,CAAC;AAAA,gBAC5C,CAAC,CAAC;AAAA,YACN,OAAO;AACL,wBAAU;AAAA,YACZ;AAAA,UACF;AACA,iBAAO;AAAA,QACT;AAAA,QAEA,QAAQ,IAAI,MAAMM,QAAO;AACvB,cAAI,QAAQ,MAAgBA,UAAS,GAAG,MAAM;AAAG,mBAAO;AACxD,cAAI,QAAQ,GAAG,MAAMA,SAAQ,GAAG,GAAG,GAAG;AACtC,cAAI,MAAM,sIAAsI,KAAK,KAAK;AAC1J,cAAI;AAAK,mBAAO,GAAG,OAAON,KAAI,cAAUM,QAAOA,SAAQ,IAAI,IAAI,CAAC,EAAE,MAAM,CAAC;AACzE,cAAIiE,WAAU,+BAA+B,KAAK,KAAK;AACvD,cAAIA;AAAS,mBAAO,GAAG,OAAOvE,KAAI,kBAAcM,QAAOA,SAAQ,IAAIiE,SAAQ,CAAC,EAAE,MAAM,CAAC;AACrF,cAAI,WAAW,cAAc,KAAK,KAAK;AACvC,cAAI;AAAU,mBAAO,GAAG,OAAOvE,KAAI,gCAA4BM,QAAOA,SAAQ,IAAI,SAAS,CAAC,EAAE,MAAM,CAAC;AACrG,cAAI,IAAI,mKAAmK,KAAK,KAAK;AACrL,cAAI,CAAC;AAAG,mBAAO;AACf,iBAAO,GAAG,OAAON,KAAI,kBAAcM,QAAOA,SAAQ,IAAI,EAAE,CAAC,EAAE,MAAM,CAAC;AAAA,QACpE;AAAA,QAEA,SAAS,IAAI,MAAMA,QAAO;AACxB,cAAI,QAAQ,MAAM,QAAQ;AAAI,mBAAO;AACrC,cAAI,MAAMA,SAAQ;AAClB,iBAAO,GAAG,KAAK,GAAG,KAAK;AAAM;AAC7B,cAAI,SAAS,GAAG,MAAMA,SAAQ,GAAGA,MAAK,GAAG,QAAQ,GAAG,MAAM,KAAK,MAAM,CAAC;AACtE,cAAI,UAAU2C,aAAY,KAAK,MAAM,GAAG,SAASA,aAAY,KAAK,KAAK;AACvE,cAAI,UAAU,QAAQ,KAAK,MAAM,GAAG,SAAS,QAAQ,KAAK,KAAK;AAC/D,cAAI,eAAe,CAAC,WAAW,CAAC,UAAU,WAAW;AACrD,cAAI,gBAAgB,CAAC,YAAY,CAAC,WAAW,UAAU;AACvD,cAAI,UAAU,iBAAiB,QAAQ,MAAM,CAAC,iBAAiB;AAC/D,cAAI,WAAW,kBAAkB,QAAQ,MAAM,CAAC,gBAAgB;AAChE,iBAAO,GAAG,OAAO,IAAIF;AAAA,YAAgB,QAAQ,KAAKJ,sBAAqBC;AAAA,YAAkBtC;AAAA,YAAO;AAAA,aAC1D,UAAU,eAAY,MAAM,WAAW,gBAAa;AAAA,UAAE,CAAC;AAAA,QAC/F;AAAA,QAEA,UAAU,IAAI,MAAMA,QAAO;AACzB,cAAI,QAAQ,MAAiB,GAAG,KAAKA,SAAQ,CAAC,KAAK;AACjD,mBAAO,GAAG,OAAON,KAAI,oBAAgBM,QAAOA,SAAQ,CAAC,CAAC;AACxD,cAAI,QAAQ,IAAI;AACd,gBAAI,MAAMA,SAAQ;AAClB,mBAAO,GAAG,KAAK,GAAG,KAAK;AAAI;AAC3B,gBAAI,GAAG,KAAK,GAAG,KAAK,MAAM,OAAOA,SAAQ;AACvC,qBAAO,GAAG,OAAON,KAAI,oBAAgBM,QAAO,MAAM,CAAC,CAAC;AAAA,UACxD;AACA,iBAAO;AAAA,QACT;AAAA,QAEA,KAAK,IAAI,MAAMA,QAAO;AACpB,iBAAO,QAAQ,KAAe,GAAG,OAAO,IAAIyC,iBAAgBF,YAAWvC,QAAOA,SAAQ,GAAG,YAAS,CAAC,IAAI;AAAA,QACzG;AAAA,QAEA,MAAM,IAAI,MAAMA,QAAO;AACrB,iBAAO,QAAQ,MAAgB,GAAG,KAAKA,SAAQ,CAAC,KAAK,KACjD,GAAG,OAAO,IAAIyC,iBAAgBD,aAAYxC,QAAOA,SAAQ,GAAG,YAAS,CAAC,IAAI;AAAA,QAChF;AAAA,QAEA,QAAQ,IAAI,MAAMA,QAAO;AACvB,cAAI,QAAQ;AAAc,mBAAO;AAEjC,mBAAS,IAAI,GAAG,MAAM,SAAS,GAAG,KAAK,GAAG,KAAK;AAC7C,gBAAI,OAAO,GAAG,MAAM,CAAC;AACrB,gBAAI,gBAAgByC,qBAAoB,KAAK,QAAQF,cAAa,KAAK,QAAQC,cAAa;AAG1F,kBAAI,CAAC,KAAK,QAAQ,GAAG,UAAU,KAAK,EAAE,KAAKxC,UAAS,CAAC,QAAQ,KAAK,GAAG,MAAMA,SAAQ,GAAGA,SAAQ,CAAC,CAAC,GAAG;AACjG,mBAAG,MAAM,CAAC,IAAI;AACd,uBAAO;AAAA,cACT;AAGA,kBAAIY,WAAU,GAAG,YAAY,CAAC;AAC9B,kBAAIsD,QAAO,GAAG,MAAM,CAAC,IAAIvD,YAAW,IAAIC,UAAS,KAAK,QAAQ2B,aAAY,gBAAY,gBAAY,KAAK,MAAMvC,SAAQ,CAAC;AAEtH,kBAAI,KAAK,QAAQuC;AAAW,yBAAS4B,KAAI,GAAGA,KAAI,GAAGA,MAAK;AACtD,sBAAI,IAAI,GAAG,MAAMA,EAAC;AAClB,sBAAI,aAAa1B,oBAAmB,EAAE,QAAQF;AAAW,sBAAE,OAAO;AAAA,gBACpE;AACA,qBAAO2B,MAAK;AAAA,YACd;AAAA,UACF;AACA,iBAAO;AAAA,QACT;AAAA,MACF;AA8FO,MAAMrB,iBAAN,MAAoB;AAAA;AAAA,QAKzB,YAEWI,SAEArD,OAEAE,SACT;AALS,wBAAAmD;AAEA,sBAAArD;AAEA,wBAAAE;AATX;AAAA,uCAA8C,CAAC;AAAA,QAU5C;AAAA;AAAA;AAAA,QAIH,KAAK,KAAa;AAAE,iBAAO,OAAO,KAAK,MAAM,KAAK,KAAK,KAAK,WAAW,MAAM,KAAK,MAAM;AAAA,QAAE;AAAA;AAAA,QAG1F,IAAI,MAAM;AAAE,iBAAO,KAAK,SAAS,KAAK,KAAK;AAAA,QAAO;AAAA;AAAA;AAAA,QAIlD,MAAM,MAAcjB,KAAY;AAAE,iBAAO,KAAK,KAAK,MAAM,OAAO,KAAK,QAAQA,MAAK,KAAK,MAAM;AAAA,QAAE;AAAA;AAAA,QAG/F,OAAOa,MAAgC;AACrC,eAAK,MAAM,KAAKA,IAAG;AACnB,iBAAOA,KAAI;AAAA,QACb;AAAA;AAAA;AAAA;AAAA;AAAA,QAMA,aAAa,MAAqB,MAAcb,KAAY,MAAe,OAAgB;AACzF,iBAAO,KAAK,OAAO,IAAI4D,iBAAgB,MAAM,MAAM5D,MAAK,OAAO,eAAY,MAAM,QAAQ,gBAAa,EAAE,CAAC;AAAA,QAC3G;AAAA;AAAA,QAGA,WAAWa,MAAc;AACvB,iBAAO,KAAK,OAAOA,IAAG;AAAA,QACxB;AAAA;AAAA;AAAA,QAIA,eAAe,MAAc;AAE3B,mBAAS,IAAI,MAAM,IAAI,KAAK,MAAM,QAAQ,KAAK;AAC7C,gBAAI,QAAQ,KAAK,MAAM,CAAC;AACxB,gBAAI,EAAE,iBAAiB+C,oBAAmB,MAAM,KAAK,WAAY,MAAM,OAAO;AAAc;AAE5F,gBAAI,MAAM,MAAM,QAAQJ,uBAAsB,MAAM,QAAQC;AAC5D,gBAAI,YAAY,MAAM,KAAK,MAAM;AACjC,gBAAI,MAAmC6B,KAAI,IAAI;AAE/C,mBAAOA,MAAK,MAAMA,MAAK;AACrB,kBAAI,OAAO,KAAK,MAAMA,EAAC;AACvB,kBAAI,gBAAgB1B,oBAAoB,KAAK,OAAO,gBAAc,KAAK,QAAQ,MAAM;AAAA,cAEjF,EAAE,QAAS,MAAM,OAAO,gBAAe,KAAK,OAAO,mBAChD,KAAK,KAAK,KAAK,OAAO,aAAa,KAAK,OAAO,KAAK,KAAK,KAAK,QAAQ,KAAK,YAAY,KAAK;AACjG,uBAAO;AACP;AAAA,cACF;AAAA,YACF;AACA,gBAAI,CAAC;AAAM;AAEX,gBAAI,OAAO,MAAM,KAAK,SAAS7B,WAAU,CAAC;AAC1C,gBAAIZ,SAAQ,KAAK,MAAMZ,OAAM,MAAM;AAGnC,gBAAI,KAAK;AACP,kBAAI,OAAO,KAAK,IAAI,GAAG,KAAK,KAAK,KAAK,MAAM,SAAS;AACrD,cAAAY,SAAQ,KAAK,KAAK;AAClB,cAAAZ,OAAM,MAAM,OAAO;AACnB,qBAAO,QAAQ,IAAI,aAAa;AAAA,YAClC;AAEA,gBAAI,KAAK,KAAK;AAAM,cAAAwB,SAAQ,KAAK,KAAK,IAAI,KAAK,KAAK,MAAMZ,QAAO,KAAK,EAAE,CAAC;AACzE,qBAASoE,KAAID,KAAI,GAAGC,KAAI,GAAGA,MAAK;AAC9B,kBAAI,KAAK,MAAMA,EAAC,aAAa1D;AAAS,gBAAAE,SAAQ,KAAK,KAAK,MAAMwD,EAAC,CAAY;AAC3E,mBAAK,MAAMA,EAAC,IAAI;AAAA,YAClB;AACA,gBAAI,MAAM,KAAK;AAAM,cAAAxD,SAAQ,KAAK,KAAK,IAAI,MAAM,KAAK,MAAM,MAAM,MAAMxB,IAAG,CAAC;AAC5E,gBAAIiF,WAAU,KAAK,IAAI,MAAMrE,QAAOZ,MAAKwB,QAAO;AAEhD,iBAAK,MAAMuD,EAAC,IAAI,OAAO,KAAK,QAAQnE,SAAQ,IAAIyC,iBAAgB,KAAK,MAAM,KAAK,MAAMzC,QAAO,KAAK,IAAI,IAAI;AAC1G,gBAAI,OAAO,KAAK,MAAM,CAAC,IAAI,OAAO,MAAM,MAAMZ,OAAM,IAAIqD,iBAAgB,MAAM,MAAMrD,MAAK,MAAM,IAAI,MAAM,IAAI,IAAI;AAEjH,gBAAI;AAAM,mBAAK,MAAM,OAAO,GAAG,GAAGiF,QAAO;AAAA;AACpC,mBAAK,MAAM,CAAC,IAAIA;AAAA,UACvB;AAGA,cAAI,SAAS,CAAC;AACd,mBAAS,IAAI,MAAM,IAAI,KAAK,MAAM,QAAQ,KAAK;AAC7C,gBAAI,OAAO,KAAK,MAAM,CAAC;AACvB,gBAAI,gBAAgB3D;AAAS,qBAAO,KAAK,IAAI;AAAA,UAC/C;AACA,iBAAO;AAAA,QACT;AAAA;AAAA;AAAA;AAAA,QAKA,qBAAqB,MAAqB;AACxC,mBAAS,IAAI,KAAK,MAAM,SAAS,GAAG,KAAK,GAAG,KAAK;AAC/C,gBAAI,OAAO,KAAK,MAAM,CAAC;AACvB,gBAAI,gBAAgB+B,oBAAmB,KAAK,QAAQ;AAAM,qBAAO;AAAA,UACnE;AACA,iBAAO;AAAA,QACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAOA,YAAY,YAAoB;AAC9B,cAAI7B,WAAU,KAAK,eAAe,UAAU;AAC5C,eAAK,MAAM,SAAS;AACpB,iBAAOA;AAAA,QACT;AAAA;AAAA;AAAA;AAAA,QAKA,UAAU,MAAc;AAAE,iBAAOjC,WAAU,KAAK,MAAM,OAAO,KAAK,MAAM,IAAI,KAAK;AAAA,QAAO;AAAA,QAKxF,IAAI,MAAqB,MAAcE,KAAa,UAAwC;AAC1F,cAAI,OAAO,QAAQ;AAAU,mBAAOa,KAAI,KAAK,OAAO,YAAY,IAAI,GAAG,MAAMb,KAAK,QAAQ;AAC1F,iBAAO,IAAIuD,aAAY,MAAM,IAAI;AAAA,QACnC;AAAA,MACF;AAqBA,MAAMU,WAAU,CAAC,mBAAgB,kBAAe,qBAAkB,kBAAe;AAEjF,MAAMC,kBAAN,MAAqB;AAAA,QAUnB,YAAqB,WAA6C,OAAc;AAA3D;AAA6C;AARlE;AAAA,mCAAI;AAEJ;AAAA,0CAAgC;AAChC,6CAAc;AAGd;AAAA;AAAA,wCAA4B;AAG1B,cAAI,UAAU;AAAQ,iBAAK,WAAW,UAAU,KAAK,GAAG;AAAA,QAC1D;AAAA,QAEA,eAAe;AACb,eAAK,WAAW,KAAK,IAAI,KAAK,UAAU,SAAS,KAAK,UAAU,KAAK,GAAG,IAAI;AAC5E,eAAK,SAAS;AACd,eAAK,cAAc;AAAA,QACrB;AAAA,QAEA,OAAO,KAAa,WAAmB;AACrC,iBAAO,KAAK,YAAY,KAAK,SAAS,MAAM;AAAK,iBAAK,aAAa;AACnE,cAAI,CAAC,KAAK,YAAY,KAAK,SAAS,QAAQ,MAAM,MAAM,IAAI;AAAI,mBAAO;AACvE,cAAI,KAAK,cAAc,GAAG;AACxB,gBAAI3D,OAAM,KAAK,SAAS;AACxB,mBAAOA,OAAM,KAAK,KAAK,MAAM,KAAKA,OAAM,GAAGA,IAAG,KAAK;AAAM,cAAAA;AACzD,iBAAK,cAAcA,OAAMA,OAAM,IAAI;AAAA,UACrC;AAEA,cAAI,IAAI,KAAK;AACb,cAAI,CAAC,GAAG;AACN,gBAAI,KAAK,SAAS,KAAK,SAAS,KAAK,OAAO;AAC5C,cAAE,WAAW;AAAA,UACf;AAEA,cAAI,OAAO,MAAM,KAAK,SAAS;AAC/B,iBAAO,EAAE,MAAM;AAAM,gBAAI,CAAC,EAAE,OAAO;AAAG,qBAAO;AAC7C,qBAAS;AACP,gBAAI,EAAE,QAAQ;AAAM,qBAAO,KAAK,SAAS,QAAQ;AACjD,gBAAI,CAAC,EAAE,WAAW,IAAI;AAAG,qBAAO;AAAA,UAClC;AAAA,QACF;AAAA,QAEA,QAAQgE,OAAc;AACpB,cAAI,OAAO,KAAK,OAAQ;AACxB,iBAAO,QAAQ,KAAK,KAAK,SAAS,WAAW,KAAKA;AAAA,QACpD;AAAA,QAEA,UAAU,IAAkB;AAC1B,cAAIkB,OAAM,KAAK,QAAS,MAAM,KAAK,SAAU,QAAQ,UAAU,KAAK,eAAe,KAAK,SAAU,UAAU,IAAI;AAChH,cAAItE,SAAQ,GAAG,mBAAmBZ,OAAMY,QAAO,SAAS,GAAG,MAAM,SAAS;AAC1E,cAAI,UAAUZ,MAAK,QAAQ;AAC3B,qBAAS;AACP,gBAAIkF,KAAI,KAAK,MAAM,SAAS;AAC1B,kBAAIA,KAAI,KAAK,eAAeA,KAAI,WAAW;AAAG;AAC9C;AAAA,YACF;AACA,gBAAI,MAAMrD,YAAWqD,KAAI,OAAO,KAAK,GAAG,MAAM;AAC9C,gBAAIA,KAAI,KAAK,OAAO,GAAG,OAAO,GAAG,MAAM,EAAE,IAAI;AAC3C,iBAAG,QAAQA,KAAI,MAAO,GAAG;AAAA,YAC3B,OAAO;AACL,kBAAI,QAAQ,IAAI,KAAK,GAAG,OAAO,QAAQ,MAAM,kBAAc,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,MAAM,QAAQ;AAC1F,iBAAG,kBAAkB,IAAI,OAAOA,KAAI,IAAK;AACzC,iBAAG,QAAQ,OAAO,GAAG;AAAA,YACvB;AAKA,gBAAIA,KAAI,KAAK,GAAG,OAAO,GAAG;AACxB,kBAAIxB,SAAQ,QAAQwB,KAAI,KAAK,EAAE,IAAI,GAAG;AACpC,gBAAAlF,OAAMkF,KAAI,KAAK;AACf,yBAAS,GAAG,MAAM,SAAS;AAAA,cAC7B,OAAO;AACL,gBAAAlF,OAAM;AACN,yBAAS;AACT,0BAAUkF,KAAI,KAAK;AACnB,wBAAQ,GAAG,MAAM,SAAS;AAAA,cAC5B;AAAA,YACF;AACA,gBAAI,CAACA,KAAI,YAAY;AAAG;AAAA,UAC1B;AACA,iBAAO,GAAG,MAAM,SAAS,SAAS,QAAQ;AACxC,eAAG,MAAM,SAAS,IAAI;AACtB,eAAG,MAAM,UAAU,IAAI;AAAA,UACzB;AACA,iBAAOlF,OAAMY;AAAA,QACf;AAAA,MACF;AAcA,MAAMgD,wBAAuB,UAAU;AAAA,QACrC,kBAAkB,KAAE;AAAA,QACpB,gBAAgB,KAAE;AAAA,QAClB,sCAAsC,KAAE;AAAA,QACxC,sCAAsC,KAAE;AAAA,QACxC,mBAAmB,KAAE;AAAA,QACrB,mBAAmB,KAAE;AAAA,QACrB,mBAAmB,KAAE;AAAA,QACrB,mBAAmB,KAAE;AAAA,QACrB,wBAAwB,KAAE;AAAA,QAC1B,QAAQ,KAAE;AAAA,QACV,QAAQ,KAAE;AAAA,QACV,gBAAgB,KAAE;AAAA,QAClB,sBAAsB,KAAE;AAAA,QACxB,sBAAsB,KAAE;AAAA,QACxB,kCAAkC,KAAE;AAAA,QACpC,kBAAkB,KAAE;AAAA,QACpB,uBAAuB,KAAE;AAAA,QACzB,KAAK,KAAE;AAAA,QACP,0EAA0E,KAAE;AAAA,QAC5E,sBAAsB,KAAE;AAAA,QACxB,WAAW,KAAE;AAAA,QACb,WAAW,KAAE;AAAA,MACf,CAAC;AAGM,MAAMC,UAAS,IAAIhB;AAAA,QACxB,IAAI,QAAQC,UAAS,EAAE,OAAOc,qBAAoB;AAAA,QAClD,OAAO,KAAKtB,oBAAmB,EAAE,IAAI,CAAA6C,OAAK7C,qBAAoB6C,EAAC,CAAC;AAAA,QAChE,OAAO,KAAK7C,oBAAmB,EAAE,IAAI,CAAA6C,OAAK1C,mBAAkB0C,EAAC,CAAC;AAAA,QAC9D,OAAO,KAAK7C,oBAAmB;AAAA,QAC/BI;AAAA,QACAR;AAAA,QACA,OAAO,KAAKsB,cAAa,EAAE,IAAI,CAAA2B,OAAK3B,eAAc2B,EAAC,CAAC;AAAA,QACpD,OAAO,KAAK3B,cAAa;AAAA,QACzB,CAAC;AAAA,MACH;AAAA;AAAA;;;ACz2DA,MAEM4B,cAEAC,cACAC,cACAC,cACAC,cACAC,cACAC,cAEAC,OAEAC,QAEAC,iBAEAC,OACAC,aACAC,YAEAC,QAEAC,OAEAC,YAEAC,aAEAC,cAEAC,QAEOC;AAjCb,MAAAC,cAAA;AAAA;AAAA;AAAA,MAAAC;AAEA,MAAMrB,eAAc;AAEpB,MAAMC,eAAc;AACpB,MAAMC,eAAc;AACpB,MAAMC,eAAc;AACpB,MAAMC,eAAc;AACpB,MAAMC,eAAc;AACpB,MAAMC,eAAc;AAEpB,MAAMC,QAAO;AAEb,MAAMC,SAAQ;AAEd,MAAMC,kBAAiB;AAEvB,MAAMC,QAAO;AACb,MAAMC,cAAa;AACnB,MAAMC,aAAY;AAElB,MAAMC,SAAQ;AAEd,MAAMC,QAAO;AAEb,MAAMC,aAAY;AAElB,MAAMC,cAAa;AAEnB,MAAMC,eAAc;AAEpB,MAAMC,SAAQ;AAEP,MAAMC,qBAA+C;AAAA,QACxD,CAACG,sBAAkB,CAAC,GAAGtB;AAAA,QACvB,CAACsB,uBAAmB,CAAC,GAAGZ;AAAA,QACxB,CAACY,wBAAoB,CAAC,GAAGZ;AAAA,QACzB,CAACY,wBAAoB,CAAC,GAAGX;AAAA,QACzB,CAACW,4BAAwB,CAAC,GAAGb;AAAA,QAC7B,CAACa,wBAAoB,CAAC,GAAGN;AAAA,QACzB,CAACM,yBAAqB,CAAC,GAAGL;AAAA,QAC1B,CAACK,sBAAkB,CAAC,GAAG;AAAA,QACvB,CAACA,yBAAqB,CAAC,GAAGrB;AAAA;AAAA,QAC1B,CAACqB,0BAAqB,CAAC,GAAGpB;AAAA,QAC1B,CAACoB,0BAAqB,CAAC,GAAGnB;AAAA,QAC1B,CAACmB,0BAAqB,CAAC,GAAGlB;AAAA,QAC1B,CAACkB,0BAAqB,CAAC,GAAGjB;AAAA,QAC1B,CAACiB,0BAAqB,CAAC,GAAGhB;AAAA,QAC1B,CAACgB,6BAAwB,CAAC,GAAG;AAAA,QAC7B,CAACA,6BAAwB,CAAC,GAAG;AAAA,QAC7B,CAACA,wBAAmB,CAAC,GAAGV;AAAA,QACxB,CAACU,4BAAuB,CAAC,GAAGf;AAAA,QAC5B,CAACe,wBAAmB,CAAC,GAAGP;AAAA,QACxB,CAACO,2BAAsB,CAAC,GAAGZ;AAAA,QAC3B,CAACY,yCAAoC,CAAC,GAAGZ;AAAA;AAAA,QAEzC,CAACY,qBAAgB,CAAC,GAAG;AAAA,QACrB,CAACA,qBAAgB,CAAC,GAAG;AAAA,QACrB,CAACA,wBAAmB,CAAC,GAAG;AAAA,QACxB,CAACA,uBAAkB,CAAC,GAAG;AAAA,QACvB,CAACA,6BAAwB,CAAC,GAAG;AAAA,QAC7B,CAACA,mBAAc,CAAC,GAAGf;AAAA,QACnB,CAACe,oBAAe,CAAC,GAAGT;AAAA,QACpB,CAACS,yBAAoB,CAAC,GAAG;AAAA,QACzB,CAACA,sBAAiB,CAAC,GAAG;AAAA,QACtB,CAACA,sBAAiB,CAAC,GAAG;AAAA,QACtB,CAACA,oCAA+B,CAAC,GAAG;AAAA,QACpC,CAACA,kBAAa,CAAC,GAAGf;AAAA;AAAA,QAElB,CAACe,yBAAoB,CAAC,GAAG;AAAA,QACzB,CAACA,wBAAmB,CAAC,GAAG;AAAA,QACxB,CAACA,uBAAkB,CAAC,GAAG;AAAA,QACvB,CAACA,uBAAkB,CAAC,GAAG;AAAA,QACvB,CAACA,2BAAsB,CAAC,GAAG;AAAA,QAC3B,CAACA,uBAAkB,CAAC,GAAG;AAAA,QACvB,CAACA,uBAAkB,CAAC,GAAG;AAAA,QACvB,CAACA,uBAAkB,CAAC,GAAG;AAAA,QACvB,CAACA,wBAAmB,CAAC,GAAG;AAAA,QACxB,CAACA,wBAAmB,CAAC,GAAG;AAAA;AAAA,QAGxB,CAAC,OAAO,GAAGd;AAAA,QACX,CAAC,aAAa,GAAG;AAAA,QACjB,CAAC,UAAU,GAAG;AAAA,QACd,CAAC,WAAW,GAAG;AAAA,QACf,CAAC,gBAAgB,GAAG;AAAA,QACpB,CAAC,OAAO,GAAGU;AAAA,QACX,CAAC,EAAE,GAAGJ;AAAA,MACV;AAAA;AAAA;;;ACLA,WAASS,kBAAiB,MAAkBC,OAAc,SAAiB;AACvE,UAAM,EAAC,MAAM,IAAAC,IAAE,IAAI,KAAK,MAAM,UAAU;AACxC,SAAK,SAAS;AAAA,MACV,SAAS;AAAA,QACL,EAAC,MAAM,QAAQ,QAAO;AAAA,QACtB,EAAC,MAAMA,KAAI,QAAQ,QAAO;AAAA,MAC9B;AAAA,IACJ,CAAC;AAAA,EACL;AAGA,WAASC,qBAAoB,OAAoC;AAC7D,UAAM,EAAC,OAAM,IAAI,MAAM;AACvB,QAAI,OAAO,WAAW,KAAK,OAAO,CAAC,EAAE;AAAO,aAAO;AACnD,UAAM,EAAC,MAAM,IAAAD,IAAE,IAAI,MAAM,UAAU;AACnC,UAAMD,QAAO,MAAM,IAAI,YAAY,MAAMC,GAAE;AAG3C,QACI,CAACD,SACEA,MAAK,KAAK,EAAE,WAAW,KACvB,CAACG,2BAAsB,uBAAuB,KAAK;AACxD,aAAO;AAET,WAAO;AAAA,MACH,MAAM,OAAOF,OAAM;AAAA,MACnB,QAAQ,CAAC,SAAqB,IAAIG,mBAAkBJ,OAAM,IAAI;AAAA,MAC9D,OAAO;AAAA,MACP,YAAY;AAAA,MACZ,OAAO;AAAA,IACX;AAAA,EACJ;AAgCO,WAASK,2BAA0B,MAAkB,UAAsB;AAE9E,UAAM,4BAA4B,KAAK,MAAM,MAAMC,oBAAmB;AAEtE,QAAI,CAAC,2BAA2B;AAC5B,eAAS;AACT;AAAA,IACJ;AAEA,SAAK,SAAS;AAAA,MACV,SAASC,qBAAoB,GAAG,KAAK;AAAA,IACzC,CAAC;AAED,aAAS;AAGT,SAAK,SAAS;AAAA,MACV,SAASA,qBAAoB,GAAG,yBAAyB;AAAA,IAC7D,CAAC;AAAA,EACL;AArKA,MAKMA,sBAEAD,sBAiBOE,sBAGPC,wBAiBAL,oBAyEAM,yBAWAC;AAhIN,MAAAC,mCAAA;AAAA;AAAA;AAAA,MAAAC;AACA;AACA,MAAAC;AAGA,MAAMP,uBAAsB,YAAY,OAAgB;AAExD,MAAMD,uBAAsB,WAAW,OAAgB;AAAA,QACnD,SAAS;AACL,iBAAO;AAAA,QACX;AAAA,QACA,OAAO,OAAOS,KAAI;AAEd,qBAAWC,WAAUD,IAAG,SAAS;AAC7B,gBAAIC,QAAO,GAAGT,oBAAmB,GAAG;AAChC,qBAAOS,QAAO;AAAA,YAClB;AAAA,UACJ;AAEA,iBAAO;AAAA,QACX;AAAA,MACJ,CAAC;AAGM,MAAMR,uBAAsB,YAAY,OAAuB;AAGtE,MAAMC,yBAAwB,WAAW,OAAuB;AAAA,QAC5D,QAAQ,CAAC,UAAuB;AAAA,QAChC,QAAQ,CAAC,OAAOM,QAAO;AACnB,cAAIA,IAAG,WAAW;AAEd,mBAAO;AAAA,UACX;AACA,mBAASC,WAAUD,IAAG,SAAS;AAC3B,gBAAIC,QAAO,GAAGR,oBAAmB,GAAG;AAChC,qBAAOQ,QAAO;AAAA,YAClB;AAAA,UACJ;AACA,iBAAO;AAAA,QACX;AAAA,QACA,SAAS,CAAAC,OAAK,YAAY,KAAKA,EAAC;AAAA,MACpC,CAAC;AAED,MAAMb,qBAAN,MAA+C;AAAA,QAQ3C,YAAYJ,OAAc,MAAkB;AAP5C;AACA;AACA;AACA;AACA;AACA;AAGI,eAAK,OAAOA;AACZ,eAAK,OAAO;AACZ,eAAK,SAAS,EAAC,GAAG,GAAG,GAAG,EAAC;AACzB,eAAK,UAAU;AACf,eAAK,SAAS;AAEd,eAAK,MAAM,SAAS,cAAc,KAAK;AACvC,eAAK,IAAI,YAAY;AAGrB,cAAI,aAAa,SAAS,cAAc,MAAM;AAC9C,qBAAW,cAAc;AACzB,qBAAW,UAAU,MAAM;AAGvB,YAAAD,kBAAiB,MAAMC,OAAM,IAAI;AAAA,UACrC;AACA,eAAK,IAAI,YAAY,UAAU;AAAA,QACnC;AAAA,QAEA,UAAgB;AACZ,eAAK,IAAI,OAAO;AAAA,QACpB;AAAA,QAEA,MAAM,MAAwB;AAC1B,eAAK,OAAO;AAAA,QAChB;AAAA,MACJ;AAqCA,MAAMU,0BAAyB,WAAW,eAAe,GAAG,CAAC,WAAW;AAIpE,YAAI,OAAO,gBAAgB,OAAO,MAAM,MAAMJ,oBAAmB,GAAG;AAChE,gBAAM,UAAUJ,qBAAoB,OAAO,KAAK;AAChD,gBAAMc,UAAS,UAAUR,qBAAoB,GAAG,OAAO,IAAIA,qBAAoB,GAAG,IAAI;AACtF,iBAAO,KAAK,SAAS,EAAC,SAASQ,QAAM,CAAC;AAAA,QAC1C;AAAA,MACJ,CAAC;AAED,MAAML,6BAA4B,WAAW,UAAU;AAAA,QACnD,oCAAoC;AAAA,UAChC,iBAAiB;AAAA,UACjB,OAAO;AAAA,UACP,QAAQ;AAAA,UACR,SAAS;AAAA,UACT,cAAc;AAAA,UACd,8BAA8B;AAAA,YAC1B,gBAAgB;AAAA,UACpB;AAAA,UACA,6BAA6B;AAAA,YACzB,gBAAgB;AAAA,UACpB;AAAA,QACJ;AAAA,MACJ,CAAC;AAAA;AAAA;;;AClID,WAASO,qBAAoB,SAAS,IAAI;AACtC,WAAO,SAAS,MAAM,KAAK,IAAI,EAAE,SAAS,EAAE,IAAI,MAAM,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,MAAM,GAAG,EAAE;AAAA,EAChG;AA+KO,WAASC,gBAAeC,UAAS,CAAC,GAAG;AACxC,WAAO;AAAA,MACHC;AAAA,MACA,OAAO;AAAA,QACH,OAAO;AAAA,QACP,qBAAqB;AAAA,QACrB,QAAQ,MAAM;AAnM1B,cAAAC;AAoMgB,mBAAOA,MAAA,KAAK,OAAOD,sBAAqB,MAAjC,gBAAAC,IAAoC,YAAW,SAAS;AAAA,QACnE;AAAA,QACA,WAAW,MAAM,MAAM,cAAc;AACjC,gBAAM,aAAa,KAAK,MAAM,IAAI,OAAO,KAAK,IAAI,EAAE;AACpD,gBAAM,cAAcC,2BAAsB,eAAe,KAAK,KAAK,EAAE;AACrE,gBAAM,uBAAuBA,2BAAsB,qBAAqB,KAAK,KAAK;AAClF,cAAI,gBAAgB,cAAc,KAAK,WAAW,KAAK,CAAC,sBAAuB;AAC3E,kBAAM,oBAAoB,aAAa,KAAK,YAAU;AAClD,kBAAI,kBAAkBC,iBAAgB;AAClC,uBAAO;AAAA,cACX;AAAA,YACJ,CAAC;AACD,gBAAI;AAAmB,qBAAO;AAC9B,mBAAO,IAAIA,gBAAe,SAAS,IAAI;AAAA,UAC3C;AACA,iBAAO;AAAA,QACX;AAAA,MACJ,CAAC;AAAA,MACDC;AAAA,IACJ;AAAA,EACJ;AAxNA,MAeMD,iBA0HAC,sBAiBOJ;AA1Jb,MAAAK,kCAAA;AAAA;AAAA;AAAA,MAAAC;AACA;AACA;AACA,MAAAC;AACA,MAAAD;AACA,MAAAA;AACA,MAAAE;AACA;AACA;AAEA;AACA,MAAAC;AAIA,MAAMN,kBAAN,cAA6B,aAAa;AAAA,QAEtC,YAAqB,MAAgB;AACjC,gBAAM;AADW;AADrB,8BAAQ;AAGJ,eAAK,OAAO,KAAK,WAAW,KAAK,IAAI;AAAA,QACzC;AAAA,QACA,WAAW,MAA6B;AAEpC,gBAAM,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mEAOuC,KAAK,IAAI;AAAA;AAAA;AAAA;AAAA;AAKpE,gBAAM,OAAO,SAAS,cAAc,KAAK;AACzC,eAAK,YAAY;AACjB,eAAK,YAAY;AACjB,iBAAO;AAAA,QACX;AAAA,QACA,kBAAkB,MAAiB,eAA4B,KAAa;AAExE,gBAAM,OAAO,KAAK,MAAM,IAAI,OAAO,GAAG;AACtC,kBAAQ,IAAI,kBAAkB,KAAK,IAAI;AACvC,kBAAQ,IAAI,iBAAiB,KAAK,MAAM;AACxC,kBAAQ,IAAI,mBAAmB,aAAa;AAC5C,gBAAM,OAAO,aAAa,KAAK,IAAI;AACnC,kBAAQ,IAAI,aAAa,IAAI;AAC7B,gBAAMO,WAAU,KAAK,SAAS,CAAC;AAC/B,kBAAQ,IAAI,WAAWA,QAAO;AAE9B,cAAI,aAAa;AAEjB,UAAAC,OAAM,MAAM,WAAW,CAACC,UAAS;AAC7B,gBAAIA,MAAK,SAAS,WAAW;AAEzB,oBAAMF,WAAUE;AAChB,cAAAF,SAAQ,QAAQ;AAEhB,cAAAC,OAAMD,UAAS,QAAQ,CAAC,aAAa;AACjC,oBAAI,SAAS,SAAS,QAAQ;AAE1B,2BAAS,QAAQ;AAAA,gBACrB;AAAA,cACJ,CAAC;AACD,2BAAa;AAAA,YACjB;AAAA,UACJ,CAAC;AAED,cAAI,YAAY;AACZ,kBAAM,iBAAiB,WAAW,IAAI;AACtC,kBAAM,eAAe,eAAe,SAAS,IAAI,IAAI,eAAe,MAAM,GAAG,EAAE,IAAI;AACnF,gBAAI,gBAAgB;AAAA,cAChB,SAAS,CAAC,EAAE,MAAM,KAAK,MAAM,IAAI,KAAK,IAAI,QAAQ,aAAa,CAAC;AAAA;AAAA,cAEhE,WAAW,EAAE,QAAQ,KAAK,MAAM,MAAM,KAAK,OAAK,aAAa,OAAO;AAAA,YACxE;AACA,YAAAG,2BAA0B,MAAM,MAAM;AAClC,mBAAK,SAAS,aAAa;AAAA,YAC/B,CAAC;AAAA,UAEL;AAAA,QACJ;AAAA,QACA,SAASC,UAAsB,MAAkB,KAAa;AAC1D,4BAAMA,UAAS;AAAA,YACX,UAAU,SAAS;AAAA,YACnB,eAAe,EAAE,UAAU,QAAO;AAAA,YAClC,WAAW;AAAA,YACX,OAAO;AAAA,YACP,WAAW;AAAA,YACX,SAAS,KAAK;AAAA,YACd,WAAW;AAAA,YACX,aAAa;AAAA,YACb,SAAS;AAAA,YACT,OAAO;AAAA,YACP,QAAQ,CAAC,aAAa;AAClB,oBAAM,cAAc,SAAS,OAAO,cAAc,YAAY;AAC9D,kBAAI,aAAa;AACb,4BAAY,iBAAiB,SAAS,CAAC,UAAU;AAC7C,wBAAM,aAAa,MAAM;AACzB,uBAAK,kBAAkB,MAAM,YAAY,GAAG;AAAA,gBAChD,CAAC;AAAA,cACL;AAAA,YACJ;AAAA,UACJ,CAAC,EAAE,KAAK;AAAA,QACZ;AAAA,QACA,GAAG,OAAuB;AACtB,iBAAO,KAAK,QAAQ,MAAM;AAAA,QAC9B;AAAA,QACA,MAAM,MAAkB;AACpB,cAAI,OAAO,SAAS,cAAc,MAAM;AACxC,eAAK,KAAKjB,qBAAoB,oBAAoB;AAClD,eAAK,MAAM,SAAS;AAEpB,eAAK,YAAYkB,mBAAkB,KAAK,KAAK,IAAI;AACjD,eAAK,YAAY,aAAa,KAAK,KAAK,IAAI;AAkB5C,iBAAO;AAAA,QACX;AAAA,MACJ;AAEA,MAAMX,uBAAsB,WAAW,UAAU;AAAA,QAC7C,sBAAsB;AAAA,UAClB,aAAa;AAAA,QACjB;AAAA,QACA,wCAAwC;AAAA,UACpC,SAAS;AAAA,UACT,eAAe;AAAA,UACf,YAAY;AAAA,QAChB;AAAA,QACA,6CAA6C,CAE7C;AAAA,QACA,6BAA6B,EAAE,iBAAiB,UAAU;AAAA,QAC1D,4BAA4B,EAAE,iBAAiB,UAAU;AAAA,QACzD,uDAAuD,EAAE,MAAM,UAAS;AAAA,MAC5E,CAAC;AAEM,MAAMJ,yBAAwB,WAAW,UAAU,MAAM;AAAA,QAE5D,YAAY,MAAkB;AAD9B;AAEI,eAAK,UAAU,KAAK,aAAa,IAAI;AAAA,QACzC;AAAA,QACA,OAAO,QAAoB;AACvB,cAAI,OAAO,cAAc,OAAO,iBAAiB;AAC7C,iBAAK,UAAU,KAAK,aAAa,OAAO,IAAI;AAAA,UAChD;AAAA,QACJ;AAAA,QACA,aAAa,MAAkB;AAC3B,gBAAM,UAAU,IAAI,gBAAgC;AACpD,cAAI,gBAAgB;AACpB,gBAAM,OAAO,WAAW,KAAK,KAAK;AAClC,eAAK,QAAQ;AAAA,YACT,MAAM,KAAK,SAAS;AAAA,YACpB,IAAI,KAAK,SAAS;AAAA,YAClB,OAAO,CAACY,UAAwB;AAC5B,kBAAI,OAAOA,MAAK,MAAMI,MAAKJ,MAAK;AAChC,kBAAIA,MAAK,KAAK;AAAO;AAErB,kBAAI,aAAa,KAAK,MAAM,IAAI,OAAO,IAAI,EAAE;AAE7C,kBAAI,aAAa,eAAe;AAE5B,gCAAgB;AAGhB,wBAAQ,IAAI,MAAMI,KAAI,IAAIb,gBAAeS,MAAK,IAAI,CAAC;AAAA,cACvD;AAAA,YACJ;AAAA,UACJ,CAAC;AACD,iBAAO,QAAQ,OAAO;AAAA,QAC1B;AAAA,MACJ,CAAC;AAAA;AAAA;;;AC5LD,MAIMK,qBAOAC,oBA+BAC;AA1CN,MAAAC,qBAAA;AAAA;AAAA;AAAA,MAAAC;AAIA,MAAMJ,sBAAqB,IAAI,eAAe;AAAA,QAC1C,QAAQ;AAAA,QACR,YAAY,WAAS,WAAW,QAAQ;AAAA,UACpC,QAAQ,IAAIC,mBAAkB,MAAM,CAAC,CAAC;AAAA,QAC1C,CAAC;AAAA,MACL,CAAC;AAED,MAAMA,qBAAN,cAAgC,WAAW;AAAA,QAGvC,YAAYI,UAAiB;AACzB,gBAAM;AAHV;AAII,eAAK,UAAUA;AAAA,QACnB;AAAA,QAEA,GAAG,OAA0B;AACzB,iBAAO,KAAK,WAAW,MAAM;AAAA,QACjC;AAAA,QAEA,QAAQ;AACJ,cAAI,OAAO,SAAS,cAAc,MAAM;AACxC,cAAI,CAAC,KAAK;AAAS,mBAAO;AAC1B,eAAK,YAAY;AACjB,eAAK,cAAc,KAAK;AACxB,iBAAO;AAAA,QACX;AAAA,QAEA,cAAc;AACV,iBAAO;AAAA,QACX;AAAA,QAEA,QAAQ,KAAkB;AACtB,cAAI,OAAO;AAAA,QACf;AAAA,MACJ;AAIA,MAAMH,sBAAqB,WAAW;AAAA,QAClC,MAAM;AAAA,UAEF,YAAY,MAAkB;AAD9B;AAEI,iBAAK,eAAeF,oBAAmB,WAAW,IAAI;AAAA,UAC1D;AAAA,UACA,OAAO,QAAoB;AACvB,iBAAK,eAAeA,oBAAmB,WAAW,QAAQ,KAAK,YAAY;AAAA,UAC/E;AAAA,QACJ;AAAA,QAAG;AAAA,UACC,aAAa,CAAC,aAAkB;AAC5B,mBAAO,SAAS;AAAA,UACpB;AAAA,UACA,SAAS,CAAC,WACN,WAAW,aAAa,GAAG,CAAC,SAAc;AAxDtD,gBAAAM;AAyDgB,qBAAOA,MAAA,KAAK,OAAO,MAAM,MAAlB,gBAAAA,IAAqB,iBAAgB,WAAW;AAAA,UAC3D,CAAC;AAAA,QACT;AAAA,MACJ;AAAA;AAAA;;;AC5DA,MAOMC,qBAOAC,oBAyCAC;AAvDN,MAAAC,mBAAA;AAAA;AAAA;AAAA,MAAAC;AAKA;AAEA,MAAMJ,sBAAqB,IAAI,eAAe;AAAA,QAC1C,QAAQ;AAAA,QACR,YAAY,WAAS,WAAW,QAAQ;AAAA,UACpC,QAAQ,IAAIC,mBAAkB,MAAM,CAAC,CAAC;AAAA,QAC1C,CAAC;AAAA,MACL,CAAC;AAED,MAAMA,qBAAN,cAAgC,WAAW;AAAA,QAGvC,YAAYI,UAAiB;AACzB,gBAAM;AAHV;AAII,eAAK,UAAUA;AAAA,QACnB;AAAA,QAEA,GAAG,OAA0B;AACzB,iBAAO,KAAK,WAAW,MAAM;AAAA,QACjC;AAAA,QAEA,QAAQ;AACJ,gBAAM,OAAO,SAAS,cAAc,MAAM;AAC1C,eAAK,YAAY;AAEjB,cAAI,KAAK,SAAS;AACd,qDAAY,OAAO,KAAK,OAAO,EAAE,KAAK,CAAC,WAAe;AAClD,kBAAI,OAAO,CAAC,GAAE;AACV,qBAAK,cAAe,OAAO,CAAC,EAAE,MAAM,CAAC,EAAE;AAAA,cAC3C,OAAO;AAEH,qBAAK,cAAc,IAAI,KAAK,OAAO;AAAA,cACvC;AAAA,YACJ,CAAC,EAAE,MAAM,MAAM;AAEX,mBAAK,cAAc,IAAI,KAAK,OAAO;AAAA,YACvC,CAAC;AAAA,UACL;AACA,iBAAO;AAAA,QACX;AAAA,QAEA,cAAc;AACV,iBAAO;AAAA,QACX;AAAA,QAEA,QAAQ,KAAkB;AACtB,cAAI,OAAO;AAAA,QACf;AAAA,MACJ;AAEA,MAAMH,2BAA0B,WAAW;AAAA,QACvC,MAAM;AAAA,UAEF,YAAY,MAAkB;AAD9B;AAEI,iBAAK,eAAeF,oBAAmB,WAAW,IAAI;AAAA,UAC1D;AAAA,UACA,OAAO,QAAoB;AACvB,iBAAK,eAAeA,oBAAmB,WAAW,QAAQ,KAAK,YAAY;AAAA,UAC/E;AAAA,QACJ;AAAA,QAAG;AAAA,UACC,aAAa,CAAC,aAAkB;AAC5B,mBAAO,SAAS;AAAA,UACpB;AAAA,UACA,SAAS,CAAC,WACN,WAAW,aAAa,GAAG,CAAC,SAAc;AArEtD,gBAAAM;AAsEgB,qBAAOA,MAAA,KAAK,OAAO,MAAM,MAAlB,gBAAAA,IAAqB,iBAAgB,WAAW;AAAA,UAC3D,CAAC;AAAA,QACT;AAAA,MACJ;AAAA;AAAA;;;ACvEO,WAASC,oBAAmBC,QAAqB,CAAC,GAAGC,WAAkB,KAAK;AAC/E,WAAO,CAAC,YAA+B;AACnC,UAAI,SAAS,IAAI,OAAOA,WAAU,SAAS;AAC3C,UAAI,OAAO,QAAQ,YAAY,MAAM;AACrC,UAAI,CAAC;AAAM,eAAO;AAClB,UAAI,QAAQ,KAAK,QAAQ,KAAK,MAAM,CAAC,QAAQ,UAAU;AACnD,eAAO;AAAA,MACX;AACA,aAAO;AAAA,QACH,MAAM,6BAAM;AAAA,QACZ,SAAS,CAAC,GAAGD,KAAI;AAAA,QACjB,QAAQ;AAAA,MACZ;AAAA,IACJ;AAAA,EACJ;AAhBA,MAAAE,gBAAA;AAAA;AAAA;AAAA;AAAA;;;ACIA,WAAsB,gBAAgB;AAAA;AAClC,aAAO,MAAM,0CAAK,EAAC,qBAAI,CAAC;AAAA,IAC5B;AAAA;AACO,WAASC,kBAAiBC,WAAkB,KAAK;AACpD,WAAO,CAAO,YAA+B;AACzC,UAAI,SAAS,IAAI,OAAOA,WAAU,SAAS;AAC3C,UAAI,OAAO,QAAQ,YAAY,MAAM;AACrC,UAAI,CAAC;AAAM,eAAO;AAClB,UAAI,QAAQ,KAAK,QAAQ,KAAK,MAAM,CAAC,QAAQ,UAAU;AACnD,eAAO;AAAA,MACX;AACA,UAAI,KAAK,KAAK,SAAS,KAAK,KAAK,KAAK,WAAWA,QAAO;AAAG,aAAK,OAAO,KAAK,KAAK,UAAU,CAAC;AAC5F,YAAM,SAAS,MAAM,yCAAY,OAAO,KAAK,IAAI;AACjD,aAAO;AAAA,QACH,MAAM,6BAAM;AAAA,QACZ,SAAS,OAAO,IAAI,CAAC,UAAc;AAC/B,iBAAO;AAAA,YACH,OAAO,MAAM,MAAM,CAAC,EAAE;AAAA,YACtB,QAAQ,MAAM,MAAM,CAAC,EAAE;AAAA,YACvB,OAAO,MAAM,MAAM,CAAC,EAAE;AAAA,YACtB,cAAc,MAAM,MAAM,CAAC,EAAE;AAAA,UACjC;AAAA,QACJ,CAAC;AAAA,QACD,QAAQ;AAAA,MACZ;AAAA,IACJ;AAAA,EACJ;AA9BA,MAAAC,eAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;;;ACsCA,WAASC,sBAAqB,MAAkB,QAA8C;AAC1F,UAAM,UAAoC,CAAC;AAC3C,UAAMC,OAAM,KAAK,MAAM;AACvB,QAAI;AAEJ,YAAQ,QAAQC,eAAc,KAAKD,KAAI,SAAS,CAAC,OAAO,MAAM;AAC1D,YAAM,OAAO,MAAM;AACnB,YAAME,MAAK,OAAO,MAAM,CAAC,EAAE;AAC3B,YAAM,SAAS,WAAW,OAAO;AAAA,QAC7B,QAAQ,IAAIC,eAAc;AAAA,UACtB,IAAID;AAAA,UACJ,KAAK,MAAM,CAAC;AAAA,UACZ;AAAA,QACJ,CAAC;AAAA,QACD,MAAM;AAAA,MACV,CAAC;AACD,cAAQ,KAAK,OAAO,MAAMA,GAAE,CAAC;AAAA,IACjC;AAEA,WAAO,WAAW,IAAI,OAAO;AAAA,EACjC;AA+BO,WAASE,oBAAmB,EAAE,QAAQ,OAAO,QAAAC,SAAQ,OAAO,IAA+B,CAAC,GAAG;AAClG,WAAO,WAAW;AAAA,MACd,MAAM,cAAc;AAAA,QAGhB,YAAY,MAAkB;AAF9B;AACA;AAEI,cAAI,QAAQ;AACR,iBAAK,YAAYC,eAAc,QAAQ,OAAOD,SAAQ,MAAM;AAC5D,iBAAK,cAAc,KAAK,UAAU,WAAW,IAAI;AAAA,UACrD,OAAO;AACH,iBAAK,cAAcN,sBAAqB,MAAM,MAAM;AAAA,UACxD;AAAA,QACJ;AAAA,QACA,OAAO,QAAoB;AACvB,cAAI,OAAO,cAAc,OAAO,iBAAiB;AAC7C,gBAAI,UAAU,KAAK,WAAW;AAC1B,mBAAK,cAAc,KAAK,UAAU,WAAW,QAAQ,KAAK,WAAW;AAAA,YACzE,OAAO;AACH,mBAAK,cAAcA,sBAAqB,OAAO,MAAM,MAAM;AAAA,YAC/D;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ;AAAA,MACA;AAAA,QACI,aAAa,CAACQ,OAAMA,GAAE;AAAA,MAC1B;AAAA,IACJ;AAAA,EACJ;AAtHA,MAWMC,UACAP,gBAOAE,gBA2CAG,gBA0DOG,iBAcAC;AAtIb,MAAAC,8BAAA;AAAA;AAAA;AAAA,MAAAC;AAWA,MAAMJ,WAAU;AAChB,MAAMP,iBAAgB;AAOtB,MAAME,iBAAN,cAA4B,WAAW;AAAA,QAEnC,YAAY,OAAuB;AAC/B,gBAAM;AAFV,8BAAiB;AAGb,eAAK,QAAQ;AAAA,QACjB;AAAA,QACA,GAAG,OAAsB;AACrB,iBAAO,KAAK,MAAM,QAAQ,MAAM,MAAM,OAAO,KAAK,MAAM,OAAO,MAAM,MAAM;AAAA,QAC/E;AAAA,QACA,QAAQ;AACJ,gBAAM,UAAU,SAAS,cAAc,GAAG;AAC1C,kBAAQ,OAAO,KAAK,MAAM;AAC1B,kBAAQ,SAAS;AACjB,kBAAQ,YAAYK;AACpB,kBAAQ,YAAY;AACpB,kBAAQ,MAAM;AACd,gBAAM,SAAS,KAAK,MAAM,UAAU,KAAK,MAAM,OAAO,OAAO;AAC7D,iBAAO,UAAU;AAAA,QACrB;AAAA,MACJ;AAwBA,MAAMF,iBAAgB,CAClB,QACA,WACA,SACA,WAEA,IAAI,eAAe;AAAA,QACf,QAAQ,UAAUL;AAAA,QAClB,UAAU,CAACY,MAAK,MAAMX,KAAI,OAAO,SAAS;AACtC,gBAAM,MAAM,MAAM,CAAC;AACnB,cAAI,SAAS,WAAW,OAAO,YAAY,aAAa,QAAQ,KAAK,MAAM,OAAO,MAAMA,GAAE,IAAI;AAC9F,cAAI,aAAa,UAAU,GAAG,GAAG;AAC7B,qBAAS,UAAU,GAAG;AAAA,UAC1B;AACA,gBAAMY,SAAQZ,KACVa,OAAMb;AACV,gBAAM,WAAW,IAAIC,eAAc,EAAE,IAAIW,QAAO,KAAK,QAAQ,OAAO,CAAC;AACrE,UAAAD,KAAI,MAAMX,KAAI,WAAW,KAAK,EAAE,OAAO,0BAA0B,CAAC,CAAC;AACnE,UAAAW,KAAIC,QAAOC,MAAK,WAAW,OAAO,EAAE,QAAQ,UAAU,MAAM,EAAE,CAAC,CAAC;AAAA,QACpE;AAAA,MACJ,CAAC;AAsCE,MAAMN,kBAAiB,WAAW,UAAU;AAAA,QAC/C,uBAAuB;AAAA,UACnB,SAAS;AAAA,UACT,eAAe;AAAA,UACf,YAAY;AAAA,QAChB;AAAA,QACA,2BAA2B;AAAA,UACvB,SAAS;AAAA,QACb;AAAA,QACA,4BAA4B;AAAA,UACxB,gBAAgB;AAAA,QACpB;AAAA,MACJ,CAAC;AAEM,MAAMC,aAAuB,CAACN,oBAAmB,GAAGK,eAAc;AAAA;AAAA;;;AC3HzE,WAASO,UAASC,QAAO,QAAQ;AAC7B,QAAI,OAAO,OAAO,OAAOA,OAAM,IAAI,GAAGC,MAAK,OAAO,OAAOD,OAAM,EAAE;AACjE,WAAO,OAAOC,MAAK,EAAC,MAAM,IAAAA,IAAE,IAAI;AAAA,EACpC;AAEA,WAASC,oBAAmB,MAAM;AAC9B,SAAK,SAAS;AAAA,MACV,SAAS,KAAK,MAAM,UAAU,OAAO,OAAO,CAAAC,OAAK,CAACA,GAAE,KAAK,EACpD,IAAI,CAAAA,OAAKC,cAAa,GAAGD,EAAC,CAAC;AAAA,IACpC,CAAC;AACD,WAAO;AAAA,EACX;AAEA,WAASE,sBAAqB,MAAM;AAChC,QAAI,cAAc,KAAK,MAAM,MAAMC,kBAAiB;AACpD,QAAI,UAAU,CAAC;AACf,aAAS,OAAO,KAAK,MAAM,UAAU,QAAQ;AACzC,kBAAY,QAAQ,IAAI,MAAM,IAAI,IAAI,CAAC,OAAO,QAAQ;AAClD,YAAI,OAAO,KAAK,IAAI,IAAI,MAAM,KAAK,GAAGL,MAAK,KAAK,IAAI,IAAI,IAAI,GAAG;AAC/D,YAAI,OAAOA;AAAI,kBAAQ,KAAKM,iBAAgB,GAAG,EAAC,MAAM,IAAAN,IAAE,CAAC,CAAC;AAAA,MAC9D,CAAC;AAAA,IACL;AACA,SAAK,SAAS,EAAC,QAAO,CAAC;AACvB,WAAO;AAAA,EACX;AAyBA,WAASO,UAAS,QAAQL,IAAG;AACzB,QAAI,WAAW,CAAC;AAChB,WAAO,QAAQA,GAAE,MAAMA,GAAE,IAAI,CAAC,MAAMF,KAAI,SAAS;AAC7C,UAAI,OAAOE,GAAE;AAAM,iBAAS,KAAK,KAAK,MAAM,MAAMA,GAAE,IAAI,CAAC;AACzD,UAAIF,MAAKE,GAAE;AAAI,iBAAS,KAAK,KAAK,MAAMA,GAAE,IAAIF,GAAE,CAAC;AAAA,IACrD,CAAC;AACD,WAAO,OAAO,OAAO;AAAA,MACjB,YAAYE,GAAE;AAAA,MACd,UAAUA,GAAE;AAAA,MACZ,QAAQ,MAAM;AAAA,MACd,KAAK;AAAA,IACT,CAAC;AAAA,EACL;AAEA,WAASM,UAAS,QAAQN,IAAG;AACzB,WAAO,QAAQA,GAAE,MAAMA,GAAE,IAAI,CAAC,MAAMF,QAAO;AACvC,UAAI,OAAOE,GAAE;AAAM,QAAAA,KAAI,EAAC,MAAM,IAAIA,GAAE,GAAE;AACtC,UAAIF,MAAKE,GAAE;AAAI,QAAAA,KAAI,EAAC,MAAMA,GAAE,MAAM,IAAAF,IAAE;AAAA,IACxC,CAAC;AACD,WAAO,OAAO,OAAO;AAAA,MACjB,YAAYE,GAAE;AAAA,MACd,UAAUA,GAAE;AAAA,MACZ,QAAQ,MAAM;AAAA,MACd,KAAK,CAACO,WAAU,MAAMP,GAAE,MAAMA,GAAE,EAAE,CAAC;AAAA,IACvC,CAAC;AAAA,EACL;AAwBA,WAASQ,qBAAoB;AACzB,WAAO;AAAA,MACHL;AAAA,MACAM;AAAA,MACAC;AAAA,IACJ;AAAA,EACJ;AAnHA,MAIMT,eAGAG,kBA8BAG,YAIAJ,oBA8CAM,kBAiBAC;AAxGN,MAAAC,2BAAA;AAAA;AAAA;AAAA,MAAAC;AACA;AACA,MAAAA;AAEA,MAAMX,gBAAe,YAAY,OAAO;AAAA,QACpC,KAAKL;AAAA,MACT,CAAC;AACD,MAAMQ,mBAAkB,YAAY,OAAO;AAAA,QACvC,KAAKR;AAAA,MACT,CAAC;AA4BD,MAAMW,aAAY,WAAW,KAAK;AAAA,QAC9B,YAAY,EAAC,OAAO,0CAAyC;AAAA,MACjE,CAAC;AAED,MAAMJ,qBAAoB,WAAW,OAAO;AAAA,QACxC,SAAS;AACL,iBAAO,WAAW;AAAA,QACtB;AAAA,QACA,OAAO,QAAQU,KAAI;AACf,mBAAS,OAAO,IAAIA,IAAG,OAAO;AAC9B,mBAASC,MAAKD,IAAG,SAAS;AACtB,gBAAIC,GAAE,GAAGb,aAAY;AACjB,uBAASK,UAAS,QAAQQ,GAAE,KAAK;AAAA,qBAC5BA,GAAE,GAAGV,gBAAe;AACzB,uBAASC,UAAS,QAAQS,GAAE,KAAK;AAAA,UACzC;AACA,iBAAO;AAAA,QACX;AAAA,QACA,SAAS,WAAS,WAAW,YAAY,KAAK,KAAK;AAAA,MACvD,CAAC;AA+BD,MAAML,mBAAkB,gBAAgB,GAAG,CAAAI,QAAM;AAC7C,YAAI,QAAQ,CAAC;AACb,iBAASC,MAAKD,IAAG,SAAS;AACtB,cAAIC,GAAE,GAAGb,aAAY;AAAG,kBAAM,KAAKG,iBAAgB,GAAGU,GAAE,KAAK,CAAC;AAAA,mBACrDA,GAAE,GAAGV,gBAAe;AAAG,kBAAM,KAAKH,cAAa,GAAGa,GAAE,KAAK,CAAC;AAAA,QACvE;AACA,YAAI,SAASD,IAAG,WAAW,MAAMV,kBAAiB;AAClD,QAAAU,IAAG,QAAQ,kBAAkB,CAAC,QAAQ,SAAS;AAC3C,iBAAO,QAAQ,QAAQ,MAAM,CAAC,OAAO,QAAQ;AACzC,gBAAI,SAAS,UAAU,OAAO,MAAM;AAChC,kBAAI,OAAO,KAAK,IAAI,QAAQ,KAAK,GAAGf,MAAK,KAAK,IAAI,MAAM,GAAG;AAC3D,kBAAI,OAAOA;AAAI,sBAAM,KAAKG,cAAa,GAAG,EAAC,MAAM,IAAAH,IAAE,CAAC,CAAC;AAAA,YACzD;AAAA,UACJ,CAAC;AAAA,QACL,CAAC;AACD,eAAO;AAAA,MACX,CAAC;AACD,MAAMY,mBAAkB,OAAO,GAAG;AAAA,QAC9B,EAAC,KAAK,SAAS,KAAKX,oBAAkB;AAAA,QACtC,EAAC,KAAK,eAAe,KAAKG,sBAAoB;AAAA,MAClD,CAAC;AAAA;AAAA;;;AC7FD,WAAS,gBAAgB,MAAM;AAC3B,QAAI,MAAM,SAAS,cAAc,KAAK;AACtC,QAAI,cAAc;AAClB,QAAI,YAAY;AAChB,WAAO,EAAC,KAAK,MAAM,IAAG;AAAA,EAC1B;AAoBA,WAAS,YAAY;AACjB,WAAO,CAAC,gBAAgB,OAAO,GAAG,UAAU,GAAG,SAAS;AAAA,EAC5D;AAzCA,MAGM,YAEA,gBAgBA,YAUA;AA/BN;AAAA;AAAA;AAAA,MAAAa;AACA;AAEA,MAAM,aAAa,YAAY,OAAO;AAEtC,MAAM,iBAAiB,WAAW,OAAO;AAAA,QACrC,QAAQ,MAAM;AAAA,QACd,OAAO,OAAOC,KAAI;AACd,mBAASC,MAAKD,IAAG;AAAS,gBAAIC,GAAE,GAAG,UAAU;AAAG,sBAAQA,GAAE;AAC1D,iBAAO;AAAA,QACX;AAAA,QACA,SAAS,CAAAC,OAAK,UAAU,KAAKA,IAAG,CAAAC,QAAMA,MAAK,kBAAkB,IAAI;AAAA,MACrE,CAAC;AASD,MAAM,aAAa,CAAC;AAAA,QAChB,KAAK;AAAA,QACL,IAAI,MAAM;AACN,eAAK,SAAS;AAAA,YACV,SAAS,WAAW,GAAG,CAAC,KAAK,MAAM,MAAM,cAAc,CAAC;AAAA,UAC5D,CAAC;AACD,iBAAO;AAAA,QACX;AAAA,MACJ,CAAC;AAED,MAAM,YAAY,WAAW,UAAU;AAAA,QACnC,kBAAkB;AAAA,UACd,SAAS;AAAA,UACT,iBAAiB;AAAA,UACjB,YAAY;AAAA,QAChB;AAAA,MACJ,CAAC;AAAA;AAAA;;;ACnCD,WAASC,YAAWC,MAAK;AACrB,QAAIC,SAAQ,GAAG,OAAOD,KAAI,KAAK;AAC/B,WAAO,CAAC,KAAK,KAAK,EAAE,MAAM;AACtB,UAAI,SAAS;AACb,eAAS,IAAI,GAAG,IAAI,KAAK,MAAM,QAAQ,KAAK;AAExC,YAAI,UAAU,KAAK,KAAK,KAAK,MAAM,CAAC,CAAC;AAErC,YAAI,WAAW,4CAA4C,KAAK,KAAK,MAAM,CAAC,CAAC;AAE7E,YAAI,WAAW,CAAC,QAAQ;AACpB,UAAAC;AACA,mBAAS;AAAA,QACb,WAAW,CAAC,WAAW,QAAQ;AAC3B,mBAAS;AAAA,QACb,WAAW,UAAU;AACjB,UAAAA;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AACA,WAAO,4DAA4DA,MAAK;AAAA,EAC5E;AAEO,WAASC,aAAY,KAAK;AAC7B,WAAO,WAAW,UAAU,MAAM;AAAA,MAC9B,OAAO,QAAQ;AACX,YAAI,OAAO;AACP,cAAI,YAAYH,YAAW,OAAO,MAAM,GAAG;AAAA,MACnD;AAAA,IACJ,CAAC;AAAA,EACL;AAhCA,MAAAI,oBAAA;AAAA;AAAA;AAAA,MAAAC;AAAA;AAAA;;;ACGA,WAASC,eAAcC,OAAkB,MAAcC,KAAY;AACjE,QAAI,SAAS,CAAC;AACd,aAASC,KAAIF,MAAK,YAAY,MAAM,QAAOE,KAAIA,GAAE,aAAa;AAC5D,UAAI,UAAUA,KAAIA,GAAE,OAAOD;AAC3B,UAAI,UAAU;AAAK,eAAO,KAAK,EAAC,MAAM,KAAK,IAAI,QAAO,CAAC;AACvD,UAAI,CAACC;AAAG;AACR,YAAMA,GAAE;AAAA,IACV;AACA,WAAO;AAAA,EACT;AAIO,WAASC,WAAUC,SAUJ;AACpB,QAAI,EAAC,YAAY,WAAU,IAAIA;AAC/B,QAAI,OAAO,WAAW,CAACJ,OAAqB,UAAiB;AAC3D,UAAIK,MAAKL,MAAK,KAAK;AACnB,UAAI,eAAeK,4BAAwBA,4BAAwB;AACjE,YAAI,OAAO;AACX,YAAIA,2BAAuB;AACzB,cAAI,WAAWL,MAAK,KAAK,0BAAsB;AAC/C,cAAI;AAAU,mBAAO,MAAM,KAAK,SAAS,MAAM,SAAS,EAAE;AAAA,QAC5D;AACA,YAAIM,UAAS,WAAW,IAAI;AAC5B,YAAIA;AACF,iBAAO,EAAC,QAAAA,SAAQ,SAAS,CAAAN,UAAQA,MAAK,KAAK,wBAAmB;AAAA,MAClE,WAAW,eAAeK,6BAAwBA,0BAAqB;AACrE,eAAO,EAAC,QAAQ,YAAY,SAASN,eAAcC,MAAK,MAAMA,MAAK,MAAMA,MAAK,EAAE,EAAC;AAAA,MACnF;AACA,aAAO;AAAA,IACT,CAAC;AACD,WAAO,EAAC,KAAI;AAAA,EACd;AA7CA,MAAAO,aAAA;AAAA;AAAA;AAAA,MAAAC;AACA,MAAAC;AAAA;AAAA;;;AC+BA,WAASC,UAAS,IAAkB,MAAc,SAAS,GAAG,MAAkBC,UAAS,GAAG;AAC1F,QAAIC,SAAQ,GAAG,QAAQ,MAAM,YAAY,IAAI,UAAU,IAAI,MAAM;AACjE,QAAI,YAAY,MAAM;AACpB,WAAM,KAAK,GAAG;AAAA,QAAI;AAAA,QAAaD,UAAS;AAAA,QAAWA,UAAS;AAAA,QAC3C,GAAG,OAAO,YAAY,KAAK,MAAM,WAAW,OAAO,GAAGA,UAAS,SAAS;AAAA,MAAC,CAAC;AAAA,IAC7F;AAEA,aAAS,IAAI,QAAQ,IAAI,KAAK,QAAQ,KAAK;AACzC,UAAI,OAAO,KAAK,WAAW,CAAC;AAC5B,UAAI,QAAQ,OAAiB,CAAC,KAAK;AACjC,YAAI,CAAC,SAAS,YAAY;AAAI,UAAAC;AAC9B,gBAAQ;AACR,YAAI,MAAM;AACR,cAAI,YAAY;AAAI,sBAAU;AAC9B,eAAK,KAAK,GAAG,IAAI,kBAAkB,IAAID,SAAQ,IAAIA,UAAS,CAAC,CAAC;AAAA,QAChE;AACA,oBAAY,UAAU;AAAA,MACxB,WAAW,OAAO,QAAQ,MAAM,QAAQ,GAAG;AACzC,YAAI,YAAY;AAAG,sBAAY;AAC/B,kBAAU,IAAI;AAAA,MAChB;AACA,YAAM,CAAC,OAAO,QAAQ;AAAA,IACxB;AACA,QAAI,YAAY,IAAI;AAClB,MAAAC;AACA,UAAI;AAAM,kBAAU;AAAA,IACtB;AACA,WAAOA;AAAA,EACT;AAEA,WAASC,SAAQ,KAAaC,QAAe;AAC3C,aAAS,IAAIA,QAAO,IAAI,IAAI,QAAQ,KAAK;AACvC,UAAI,OAAO,IAAI,WAAW,CAAC;AAC3B,UAAI,QAAQ;AAAe,eAAO;AAClC,UAAI,QAAQ;AAAe;AAAA,IAC7B;AACA,WAAO;AAAA,EACT;AAoGA,WAASF,OAAM,KAAa,MAAcG,KAAY,IAAY;AAChE,QAAI,SAAS;AACb,aAAS,IAAI,MAAM,IAAIA,KAAI;AAAK,UAAI,IAAI,CAAC,KAAK;AAAI;AAClD,WAAO;AAAA,EACT;AAEA,WAASC,gBAAeC,OAAc,MAAc;AAClD,IAAAC,OAAM,YAAY;AAClB,QAAI,IAAIA,OAAM,KAAKD,KAAI;AACvB,QAAI,CAAC;AAAG,aAAO;AACf,QAAIE,OAAM,OAAO,EAAE,CAAC,EAAE;AACtB,eAAS;AACP,UAAI,OAAOF,MAAKE,OAAM,CAAC,GAAGC;AAC1B,UAAI,aAAa,KAAK,IAAI,KACtB,QAAQ,OAAOR,OAAMK,OAAM,MAAME,MAAK,GAAG,IAAIP,OAAMK,OAAM,MAAME,MAAK,GAAG;AACzE,QAAAA;AAAA,eACO,QAAQ,QAAQC,KAAI,6BAA6B,KAAKH,MAAK,MAAM,MAAME,IAAG,CAAC;AAClF,QAAAA,OAAM,OAAOC,GAAE;AAAA;AAEf;AAAA,IACJ;AACA,WAAOD;AAAA,EACT;AAEA,WAASE,kBAAiBJ,OAAc,MAAc;AACpD,IAAAK,SAAQ,YAAY;AACpB,QAAI,IAAIA,SAAQ,KAAKL,KAAI;AACzB,QAAI,CAAC;AAAG,aAAO;AACf,QAAI,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,SAAS,CAAC;AAC/B,WAAO,QAAQ,OAAO,QAAQ,MAAM,KAAK,OAAO,EAAE,CAAC,EAAE,UAAU,QAAQ,MAAM,IAAI;AAAA,EACnF;AAqCA,WAASM,eAAc,IAAYC,OAAc,MAAc;AAC7D,WAAO,CAAC,IAAmB,MAAc,QAAgB;AACvD,UAAI,QAAQ,MAAM,GAAG,KAAK,MAAM,CAAC,KAAK;AAAI,eAAO;AACjD,UAAI,OAAO,CAAC,GAAG,IAAI,MAAM,KAAK,MAAM,CAAC,CAAC;AACtC,eAAS,IAAI,MAAM,GAAG,IAAI,GAAG,KAAK,KAAK;AACrC,YAAIC,QAAO,GAAG,KAAK,CAAC;AACpB,YAAIA,SAAQ;AACV,iBAAO,GAAG,WAAW,GAAG,IAAID,OAAM,KAAK,IAAI,GAAG,KAAK,OAAO,GAAG,IAAI,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AACpF,YAAIC,SAAQ;AACV,eAAK,KAAK,GAAG,IAAI,UAAU,GAAG,MAAM,CAAC,CAAC;AACxC,YAAIC,OAAMD,KAAI;AAAG;AAAA,MACnB;AACA,aAAO;AAAA,IACT;AAAA,EACF;AA1PA,MAIME,qBAKOC,gBA8DPC,gBAEAC,cAyCOC,QAoBPC,aAgBOC,WAcPC,aACAhB,QACAI,UACAa,iBAqCOC,WA8BAC,MAqBAC,cAcAC,YAaAC;AA1Rb,MAAAC,kBAAA;AAAA;AAAA;AAAA,MAAAC;AAEA,MAAAC;AAEA,MAAMhB,sBAAqB,EAAC,SAAS,iBAAiB,MAAM,oBAAmB;AAKxE,MAAMC,iBAAgC;AAAA,QAC3C,aAAa,CAAC;AAAA,UACZ,MAAM;AAAA,UACN,OAAO,EAAC,qBAAqB,KAAE,cAAa;AAAA,QAC9C,GAAG;AAAA,UACD,MAAM;AAAA,UACN,OAAO,KAAE;AAAA,QACX,CAAC;AAAA,QACD,aAAa,CAAC;AAAA,UACZ,MAAM;AAAA,UACN,MAAM,IAAI,MAAM,KAAK;AACnB,gBAAI,QAAQ,OAAiB,GAAG,KAAK,MAAM,CAAC,KAAK,OAAO,GAAG,KAAK,MAAM,CAAC,KAAK;AAAK,qBAAO;AACxF,gBAAI,SAAS,GAAG,MAAM,MAAM,GAAG,GAAG,GAAG,QAAQ,GAAG,MAAM,MAAM,GAAG,MAAM,CAAC;AACtE,gBAAI,UAAU,QAAQ,KAAK,MAAM,GAAG,SAAS,QAAQ,KAAK,KAAK;AAC/D,gBAAI,UAAUgB,aAAY,KAAK,MAAM,GAAG,SAASA,aAAY,KAAK,KAAK;AACvE,mBAAO,GAAG;AAAA,cAAajB;AAAA,cAAoB;AAAA,cAAK,MAAM;AAAA,cAC/B,CAAC,WAAW,CAAC,UAAU,WAAW;AAAA,cAClC,CAAC,YAAY,CAAC,WAAW,UAAU;AAAA,YAAO;AAAA,UACnE;AAAA,UACA,OAAO;AAAA,QACT,CAAC;AAAA,MACH;AAyCA,MAAME,iBAAgB;AAEtB,MAAMC,eAAN,MAA6C;AAAA,QAA7C;AAIE;AAAA;AAAA;AAAA,sCAAiC;AAAA;AAAA,QAEjC,SAAS,IAAkB,MAAY,MAAiB;AACtD,cAAI,KAAK,QAAQ,MAAM;AACrB,iBAAK,OAAO;AACZ,gBAAI;AACJ,iBAAK,KAAK,QAAQ,MAAM,KAAK,QAAQ,MAAM,KAAK,QAAQ,QACpDD,eAAc,KAAK,WAAW,KAAK,KAAK,MAAM,KAAK,GAAG,CAAC,GAAG;AAC5D,kBAAI,WAAsB,CAAC,GAAG,aAAanB,UAAS,IAAI,KAAK,SAAS,GAAG,UAAU,KAAK,KAAK;AAC7F,kBAAI,cAAcA,UAAS,IAAI,UAAU,KAAK,GAAG;AAC/C,qBAAK,OAAO;AAAA,kBAAC,GAAG,IAAI,eAAe,KAAK,OAAO,KAAK,QAAQ,KAAK,QAAQ,QAAQ,QAAQ;AAAA,kBAC5E,GAAG,IAAI,kBAAkB,GAAG,YAAY,KAAK,KAAK,GAAG,YAAY,KAAK,KAAK,MAAM;AAAA,gBAAC;AAAA,YACnG;AAAA,UACF,WAAW,KAAK,MAAM;AACpB,gBAAImC,WAAqB,CAAC;AAC1B,YAAAnC,UAAS,IAAI,KAAK,MAAM,KAAK,KAAKmC,UAAS,GAAG,SAAS;AACvD,iBAAK,KAAK,KAAK,GAAG,IAAI,YAAY,GAAG,YAAY,KAAK,KAAK,GAAG,YAAY,KAAK,KAAK,QAAQA,QAAO,CAAC;AAAA,UACtG;AACA,iBAAO;AAAA,QACT;AAAA,QAEA,OAAO,IAAkB,MAAiB;AACxC,cAAI,CAAC,KAAK;AAAM,mBAAO;AACvB,aAAG,eAAe,MAAM,GAAG,IAAI,SAAS,KAAK,OAAO,KAAK,QAAQ,KAAK,QAAQ,QAAQ,KAAK,IAA0B,CAAC;AACtH,iBAAO;AAAA,QACT;AAAA,MACF;AAWO,MAAMd,SAAwB;AAAA,QACnC,aAAa;AAAA,UACX,EAAC,MAAM,SAAS,OAAO,KAAI;AAAA,UAC3B,EAAC,MAAM,eAAe,OAAO,EAAC,mBAAmB,KAAE,QAAO,EAAC;AAAA,UAC3D;AAAA,UACA,EAAC,MAAM,aAAa,OAAO,KAAE,QAAO;AAAA,UACpC,EAAC,MAAM,kBAAkB,OAAO,KAAE,sBAAqB;AAAA,QACzD;AAAA,QACA,YAAY,CAAC;AAAA,UACX,MAAM;AAAA,UACN,KAAK,GAAG,MAAM;AAAE,mBAAOlB,SAAQ,KAAK,SAAS,CAAC,IAAI,IAAIiB,iBAAc;AAAA,UAAK;AAAA,UACzE,QAAQ,IAAI,MAAM,MAAM;AACtB,gBAAI,KAAK,QAAQ,KAAK,OAAK,aAAaA,YAAW,KAAK,CAACjB,SAAQ,KAAK,MAAM,KAAK,OAAO;AAAG,qBAAO;AAClG,gBAAI,OAAO,GAAG,SAAS,GAAG,kBAAkB,CAAC,EAAE;AAC/C,mBAAOgB,eAAc,KAAK,IAAI,KAAKnB,UAAS,IAAI,KAAK,MAAM,KAAK,OAAO,KAAKA,UAAS,IAAI,MAAM,KAAK,OAAO;AAAA,UAC7G;AAAA,UACA,QAAQ;AAAA,QACV,CAAC;AAAA,MACH;AAEA,MAAMsB,cAAN,MAA4C;AAAA,QAC1C,WAAW;AAAE,iBAAO;AAAA,QAAM;AAAA,QAE1B,OAAO,IAAkB,MAAiB;AACxC,aAAG,eAAe,MAAM,GAAG,IAAI,QAAQ,KAAK,OAAO,KAAK,QAAQ,KAAK,QAAQ,QAAQ;AAAA,YACnF,GAAG,IAAI,cAAc,KAAK,OAAO,KAAK,QAAQ,CAAC;AAAA,YAC/C,GAAG,GAAG,OAAO,YAAY,KAAK,QAAQ,MAAM,CAAC,GAAG,KAAK,QAAQ,CAAC;AAAA,UAChE,CAAC,CAAC;AACF,iBAAO;AAAA,QACT;AAAA,MACF;AAMO,MAAMC,YAA2B;AAAA,QACtC,aAAa;AAAA,UACX,EAAC,MAAM,QAAQ,OAAO,MAAM,OAAO,KAAE,KAAI;AAAA,UACzC,EAAC,MAAM,cAAc,OAAO,KAAE,KAAI;AAAA,QACpC;AAAA,QACA,YAAY,CAAC;AAAA,UACX,MAAM;AAAA,UACN,KAAK,IAAI,MAAM;AACb,mBAAO,kBAAkB,KAAK,KAAK,OAAO,KAAK,GAAG,WAAW,EAAE,QAAQ,aAAa,IAAID,gBAAa;AAAA,UACvG;AAAA,UACA,OAAO;AAAA,QACT,CAAC;AAAA,MACH;AAEA,MAAME,cAAa;AACnB,MAAMhB,SAAQ;AACd,MAAMI,WAAU;AAChB,MAAMa,kBAAiB;AAqChB,MAAMC,YAA2B;AAAA,QACtC,aAAa,CAAC;AAAA,UACZ,MAAM;AAAA,UACN,MAAM,IAAI,MAAM,QAAQ;AACtB,gBAAI,MAAM,SAAS,GAAG;AACtB,YAAAF,YAAW,YAAY;AACvB,gBAAI,IAAIA,YAAW,KAAK,GAAG,IAAI,GAAGf,OAAM;AACxC,gBAAI,CAAC;AAAG,qBAAO;AACf,gBAAI,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG;AAChB,cAAAA,OAAMH,gBAAe,GAAG,MAAM,MAAM,EAAE,CAAC,EAAE,MAAM;AAAA,YACjD,WAAW,EAAE,CAAC,GAAG;AACf,cAAAG,OAAME,kBAAiB,GAAG,MAAM,GAAG;AAAA,YACrC,OAAO;AACL,cAAAF,OAAME,kBAAiB,GAAG,MAAM,MAAM,EAAE,CAAC,EAAE,MAAM;AACjD,kBAAIF,OAAM,MAAM,EAAE,CAAC,KAAK,SAAS;AAC/B,gBAAAgB,gBAAe,YAAYhB;AAC3B,oBAAIgB,gBAAe,KAAK,GAAG,IAAI;AAC/B,oBAAI;AAAG,kBAAAhB,OAAM,EAAE,QAAQ,EAAE,CAAC,EAAE;AAAA,cAC9B;AAAA,YACF;AACA,gBAAIA,OAAM;AAAG,qBAAO;AACpB,eAAG,WAAW,GAAG,IAAI,OAAO,QAAQA,OAAM,GAAG,MAAM,CAAC;AACpD,mBAAOA,OAAM,GAAG;AAAA,UAClB;AAAA,QACF,CAAC;AAAA,MACH;AAKO,MAAMkB,OAAM,CAACN,QAAOE,WAAUL,gBAAeQ,SAAQ;AAqBrD,MAAME,eAA8B;AAAA,QACzC,aAAa;AAAA,UACX,EAAC,MAAM,eAAe,OAAO,KAAE,QAAQ,KAAE,OAAO,EAAC;AAAA,UACjD,EAAC,MAAM,mBAAmB,OAAO,KAAE,sBAAqB;AAAA,QAC1D;AAAA,QACA,aAAa,CAAC;AAAA,UACZ,MAAM;AAAA,UACN,OAAOf,eAAc,IAAc,eAAe,iBAAiB;AAAA,QACrE,CAAC;AAAA,MACH;AAKO,MAAMgB,aAA4B;AAAA,QACvC,aAAa;AAAA,UACX,EAAC,MAAM,aAAa,OAAO,KAAE,QAAQ,KAAE,OAAO,EAAC;AAAA,UAC/C,EAAC,MAAM,iBAAiB,OAAO,KAAE,sBAAqB;AAAA,QACxD;AAAA,QACA,aAAa,CAAC;AAAA,UACZ,MAAM;AAAA,UACN,OAAOhB,eAAc,KAAe,aAAa,eAAe;AAAA,QAClE,CAAC;AAAA,MACH;AAIO,MAAMiB,SAAwB;AAAA,QACnC,aAAa,CAAC,EAAC,MAAM,SAAS,OAAO,KAAE,UAAS,CAAC;AAAA,QACjD,aAAa,CAAC;AAAA,UACZ,MAAM;AAAA,UACN,MAAM,IAAI,MAAM,KAAK;AACnB,gBAAI;AACJ,gBAAI,QAAQ,MAAgB,EAAE,QAAQ,kBAAkB,KAAK,GAAG,MAAM,MAAM,GAAG,GAAG,GAAG,CAAC;AAAI,qBAAO;AACjG,mBAAO,GAAG,WAAW,GAAG,IAAI,SAAS,KAAK,MAAM,IAAI,MAAM,CAAC,EAAE,MAAM,CAAC;AAAA,UACtE;AAAA,QACF,CAAC;AAAA,MACH;AAAA;AAAA;;;ACpSA,MAAAM,8BAAA;AAAA;AAAA;AAAA,MAAAC;AAKA,MAAAC;AACA,MAAAC;AAAA;AAAA;;;ACmBA,WAASC,WAAU,MAAgB;AACjC,QAAI,QAAQ,8BAA8B,KAAK,KAAK,IAAI;AACxD,WAAO,QAAQ,CAAC,MAAM,CAAC,IAAI;AAAA,EAC7B;AAEA,WAASC,gBAAe,YAAwB,OAAe;AAC7D,QAAI,OAAO;AACX,eAAS;AACP,UAAI,OAAO,KAAK,aAAaC;AAC7B,UAAI,CAAC,SAASA,WAAUF,WAAU,KAAK,IAAI,MAAM,QAAQE,YAAW;AAAO;AAC3E,aAAO;AAAA,IACT;AACA,WAAO,KAAK;AAAA,EACd;AAaO,WAASC,QAAOC,SAAwB;AAC7C,WAAO,IAAI,SAASC,OAAMD,SAAQ,CAACE,aAAY,GAAG,UAAU;AAAA,EAC9D;AAiBO,WAASC,eACd,WACA,iBACA;AACA,WAAO,CAAC,SAAiB;AACvB,UAAI,QAAQ,WAAW;AACrB,YAAI,QAAQ;AAEZ,eAAO,MAAM,KAAK,IAAI,EAAG,CAAC;AAC1B,YAAI,OAAO,aAAa;AAAY,kBAAQ,UAAU,IAAI;AAAA;AACrD,kBAAQ,oBAAoB,kBAAkB,WAAW,MAAM,IAAI;AACxE,YAAI,iBAAiB;AACnB,iBAAO,MAAM,UAAU,MAAM,QAAQ,SAAS,SAAS,aAAa,kBAAkB,MAAM,KAAK,CAAC;AAAA,iBAC3F;AACP,iBAAO,MAAM;AAAA,MACjB;AACA,aAAO,kBAAkB,gBAAgB,SAAS;AAAA,IACpD;AAAA,EACF;AAxFA,MAKMF,OAEAG,cAEAC,aA+BAH,eAgBOI,qBAEPC,WAUOC;AApEb,MAAAC,iBAAA;AAAA;AAAA;AAAA,MAAAC;AAEA,MAAAC;AACA,MAAAD;AAEA,MAAMT,QAAO,oBAAoB,EAAC,eAAe,EAAC,OAAO,EAAC,MAAM,QAAQ,OAAO,MAAK,EAAC,EAAC,CAAC;AAEvF,MAAMG,eAAc,IAAI,SAAiB;AAEzC,MAAMC,cAAaL,QAAW,UAAU;AAAA,QACtC,OAAO;AAAA,UACL,aAAa,IAAI,UAAQ;AACvB,mBAAO,CAAC,KAAK,GAAG,OAAO,KAAK,KAAK,GAAG,UAAU,KAAKJ,WAAU,IAAI,KAAK,OAAO,SACzE,CAAC,MAAM,WAAW,EAAC,MAAM,MAAM,IAAI,OAAO,KAAK,IAAI,EAAE,IAAI,IAAI,KAAK,GAAE;AAAA,UAC1E,CAAC;AAAA,UACDQ,aAAY,IAAIR,UAAS;AAAA,UACzB,eAAe,IAAI;AAAA,YACjB,UAAU,MAAM;AAAA,UAClB,CAAC;AAAA,UACD,iBAAiB,IAAI;AAAA,YACnB,UAAUK;AAAA,UACZ,CAAC;AAAA,QACH;AAAA,MACF,CAAC;AAiBD,MAAMC,gBAAe,YAAY,GAAG,CAAC,OAAOU,QAAOC,SAAQ;AACzD,iBAASC,QAA0B,WAAW,KAAK,EAAE,aAAaD,MAAK,EAAE,GAAGC,OAAMA,QAAOA,MAAK,QAAQ;AACpG,cAAIA,MAAK,OAAOF;AAAO;AACvB,cAAId,WAAUgB,MAAK,KAAK,KAAKV,YAAW;AACxC,cAAIN,YAAW;AAAM;AACrB,cAAI,OAAOD,gBAAeiB,OAAMhB,QAAO;AACvC,cAAI,OAAOe;AAAK,mBAAO,EAAC,MAAMA,MAAK,IAAI,KAAI;AAAA,QAC7C;AACA,eAAO;AAAA,MACT,CAAC;AAOM,MAAMP,sBAAqBP,QAAOM,WAAU;AAEnD,MAAME,YAAWF,YAAW,UAAU,CAACU,MAAKC,YAAWC,cAAaC,QAAO;AAAA,QACzE,OAAO;AAAA,UACL,aAAa,IAAI;AAAA,YACf,OAAO,CAAC,MAAM,WAAW,EAAC,MAAM,MAAM,IAAI,OAAO,KAAK,IAAI,EAAE,IAAI,IAAI,KAAK,GAAE;AAAA,UAC7E,CAAC;AAAA,QACH;AAAA,MACF,CAAC,CAAC;AAIK,MAAMV,oBAAmBT,QAAOQ,SAAQ;AAAA;AAAA;;;ACnC/C,WAASY,YAAWC,OAAkBC,MAAW;AAC/C,QAAI,QAAQ,CAAC;AACb,aAASC,OAAyBF,OAAME,QAAOA,KAAI,QAAQ,YAAYA,OAAMA,KAAI,QAAQ;AACvF,UAAIA,KAAI,QAAQ,cAAcA,KAAI,QAAQ,gBAAgBA,KAAI,QAAQ;AACpE,cAAM,KAAKA,IAAG;AAAA,IAClB;AACA,QAAI,UAAU,CAAC;AACf,aAAS,IAAI,MAAM,SAAS,GAAG,KAAK,GAAG,KAAK;AAC1C,UAAIF,QAAO,MAAM,CAAC,GAAG;AACrB,UAAI,OAAOC,KAAI,OAAOD,MAAK,IAAI,GAAG,WAAWA,MAAK,OAAO,KAAK;AAC9D,UAAIA,MAAK,QAAQ,cAAc;AAC7B,gBAAQ,KAAK,IAAIG,SAAQH,OAAM,UAAU,UAAU,IAAI,IAAI,IAAI,IAAI,CAAC;AAAA,MACtE,WAAWA,MAAK,QAAQ,iBAAiB,QAAQ,WAAW,KAAK,KAAK,KAAK,MAAM,QAAQ,CAAC,IAAI;AAC5F,gBAAQ,KAAK,IAAIG,SAAQH,OAAM,UAAU,WAAW,MAAM,CAAC,EAAE,QAAQ,IAAI,MAAM,CAAC,GAAG,KAAK,IAAI,CAAC;AAAA,MAC/F,WAAWA,MAAK,QAAQ,cAAcA,MAAK,OAAQ,QAAQ,kBAC/C,QAAQ,qBAAqB,KAAK,KAAK,KAAK,MAAM,QAAQ,CAAC,IAAI;AACzE,YAAI,QAAQ,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,EAAE;AACrC,YAAI,MAAM,UAAU,GAAG;AAAE,kBAAQ,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC;AAAG,iBAAO;AAAA,QAAE;AAC5E,gBAAQ,KAAK,IAAIG,SAAQH,MAAK,QAAS,UAAU,WAAW,KAAK,MAAM,CAAC,GAAG,OAAO,MAAM,CAAC,GAAGA,KAAI,CAAC;AAAA,MACnG,WAAWA,MAAK,QAAQ,cAAcA,MAAK,OAAQ,QAAQ,iBAC/C,QAAQ,qCAAqC,KAAK,KAAK,KAAK,MAAM,QAAQ,CAAC,IAAI;AACzF,YAAI,QAAQ,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,EAAE;AACrC,YAAI,MAAM,SAAS,GAAG;AAAE,kBAAQ,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC;AAAG,iBAAO;AAAA,QAAE;AAC3E,YAAI,OAAO,MAAM,CAAC;AAClB,YAAI,MAAM,CAAC;AAAG,kBAAQ,MAAM,CAAC,EAAE,QAAQ,QAAQ,GAAG;AAClD,gBAAQ,KAAK,IAAIG,SAAQH,MAAK,QAAS,UAAU,WAAW,KAAK,MAAM,CAAC,GAAG,OAAO,MAAMA,KAAI,CAAC;AAAA,MAC/F;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAEA,WAASI,YAAW,MAAkBH,MAAW;AAC/C,WAAO,sBAAsB,KAAKA,KAAI,YAAY,KAAK,MAAM,KAAK,OAAO,EAAE,CAAC;AAAA,EAC9E;AAEA,WAASI,cAAa,OAAmBJ,MAAW,SAAuBK,UAAS,GAAG;AACrF,aAAS,OAAO,IAAIN,QAAO,WAAS;AAClC,UAAIA,MAAK,QAAQ,YAAY;AAC3B,YAAI,IAAII,YAAWJ,OAAMC,IAAG;AAC5B,YAAIM,UAAS,CAAC,EAAE,CAAC;AACjB,YAAI,QAAQ,GAAG;AACb,cAAIA,WAAU,OAAO;AAAG;AACxB,kBAAQ,KAAK,EAAC,MAAMP,MAAK,OAAO,EAAE,CAAC,EAAE,QAAQ,IAAIA,MAAK,OAAO,EAAE,CAAC,EAAE,QAAQ,QAAQ,OAAO,OAAO,IAAIM,OAAM,EAAC,CAAC;AAAA,QAC9G;AACA,eAAOC;AAAA,MACT;AACA,UAAI,OAAOP,MAAK;AAChB,UAAI,CAAC;AAAM;AACX,MAAAA,QAAO;AAAA,IACT;AAAA,EACF;AAEA,WAASQ,iBAAgBC,UAAiB,OAAoB;AAC5D,QAAI,QAAQ,UAAU,KAAKA,QAAO,EAAG,CAAC,EAAE;AACxC,QAAI,CAAC,SAAS,MAAM,MAAM,UAAU,KAAK;AAAM,aAAOA;AACtD,QAAI,MAAM,YAAYA,UAAS,GAAG,KAAK;AACvC,QAAIC,SAAQ;AACZ,aAAS,IAAI,KAAK,IAAI,KAAI;AACxB,UAAI,KAAK,GAAG;AAAE,QAAAA,UAAS;AAAM,aAAK;AAAA,MAAE,OAC/B;AAAE,QAAAA,UAAS;AAAK;AAAA,MAAI;AAAA,IAC3B;AACA,WAAOA,SAAQD,SAAQ,MAAM,KAAK;AAAA,EACpC;AAmFA,WAASE,QAAOX,OAAkB;AAChC,WAAOA,MAAK,QAAQ,eAAeA,MAAK,QAAQ;AAAA,EAClD;AAEA,WAASY,sBAAqB,MAAY,KAAa;AACrD,QAAIZ,QAAO,KAAK,aAAa,KAAK,EAAE,GAAG,OAAO;AAC9C,QAAIW,QAAOX,KAAI,GAAG;AAChB,aAAOA,MAAK;AACZ,MAAAA,QAAOA,MAAK;AAAA,IACd;AACA,aAAS,MAAM,OAAOA,MAAK,YAAY,IAAI,KAAI;AAC7C,UAAIW,QAAO,IAAI,GAAG;AAChB,eAAO,KAAK;AAAA,MACd,WAAW,KAAK,QAAQ,iBAAiB,KAAK,QAAQ,cAAc;AAClE,QAAAX,QAAO,KAAK;AACZ,eAAOA,MAAK;AAAA,MACd,OAAO;AACL;AAAA,MACF;AAAA,IACF;AACA,WAAOA;AAAA,EACT;AAvMA,MAKMG,UAqGOU,8BAwGAC;AAlNb,MAAAC,iBAAA;AAAA;AAAA;AAAA;AACA,MAAAC;AAEA,MAAAC;AAEA,MAAMd,WAAN,MAAc;AAAA,QACZ,YACWH,OACA,MACAkB,KACA,aACA,YACA,MACA,MACT;AAPS,sBAAAlB;AACA;AACA,oBAAAkB;AACA;AACA;AACA;AACA;AAAA,QACR;AAAA,QAEH,MAAM,UAAyB,WAAW,MAAM;AAC9C,cAAI,SAAS,KAAK,eAAe,KAAK,KAAK,QAAQ,eAAe,MAAM;AACxE,cAAI,YAAY,MAAM;AACpB,mBAAO,OAAO,SAAS;AAAU,wBAAU;AAC3C,mBAAO;AAAA,UACT,OAAO;AACL,qBAAS,IAAI,KAAK,KAAK,KAAK,OAAO,OAAO,SAAS,KAAK,WAAW,QAAQ,IAAI,GAAG;AAAK,wBAAU;AACjG,mBAAO,UAAU,WAAW,KAAK,aAAa;AAAA,UAChD;AAAA,QACF;AAAA,QAEA,OAAOjB,MAAWkB,MAAa;AAC7B,cAAIZ,UAAS,KAAK,KAAK,QAAQ,gBAAgB,OAAQ,CAACH,YAAW,KAAK,MAAOH,IAAG,EAAE,CAAC,IAAIkB,IAAI,IAAI;AACjG,iBAAO,KAAK,cAAcZ,UAAS,KAAK,OAAO,KAAK;AAAA,QACtD;AAAA,MACF;AA2EO,MAAMM,+BAA4C,CAAC,EAAC,OAAO,UAAAO,UAAQ,MAAM;AAC9E,YAAI,OAAO,WAAW,KAAK,GAAG,EAAC,KAAAnB,KAAG,IAAI;AACtC,YAAI,OAAO,MAAM,UAAU,MAAM,cAAc,CAAAoB,WAAS;AACtD,cAAI,CAACA,OAAM,SAAS,CAACC,kBAAiB,WAAW,OAAOD,OAAM,IAAI;AAAG,mBAAO,OAAO,EAAC,OAAAA,OAAK;AACzF,cAAI,MAAMA,OAAM,MAAM,OAAOpB,KAAI,OAAO,GAAG;AAC3C,cAAI,UAAUF,YAAW,KAAK,aAAa,KAAK,EAAE,GAAGE,IAAG;AACxD,iBAAO,QAAQ,UAAU,QAAQ,QAAQ,SAAS,CAAC,EAAE,OAAO,MAAM,KAAK;AAAM,oBAAQ,IAAI;AACzF,cAAI,CAAC,QAAQ;AAAQ,mBAAO,OAAO,EAAC,OAAAoB,OAAK;AACzC,cAAI,QAAQ,QAAQ,QAAQ,SAAS,CAAC;AACtC,cAAI,MAAM,KAAK,MAAM,WAAW,SAAS,MAAM,KAAK;AAAM,mBAAO,OAAO,EAAC,OAAAA,OAAK;AAE9E,cAAI,YAAY,OAAQ,MAAM,KAAK,MAAM,WAAW,UAAW,CAAC,KAAK,KAAK,KAAK,KAAK,MAAM,MAAM,EAAE,CAAC;AAEnG,cAAI,MAAM,QAAQ,WAAW;AAE3B,gBAAI,MAAM,KAAK,WAAY,MAAM,OAC7B,KAAK,OAAO,KAAK,CAAC,SAAS,KAAKpB,KAAI,OAAO,KAAK,OAAO,CAAC,EAAE,IAAI,GAAG;AACnE,kBAAI,OAAO,QAAQ,SAAS,IAAI,QAAQ,QAAQ,SAAS,CAAC,IAAI;AAC9D,kBAAI,OAAOsB,UAAS;AACpB,kBAAI,QAAQ,KAAK,MAAM;AACrB,wBAAQ,KAAK,OAAO,KAAK;AACzB,gBAAAA,UAAS,KAAK,OAAOtB,MAAK,CAAC;AAAA,cAC7B,OAAO;AACL,wBAAQ,KAAK,QAAQ,OAAO,KAAK,KAAK;AAAA,cACxC;AACA,kBAAIuB,WAAwB,CAAC,EAAC,MAAM,OAAO,IAAI,KAAK,QAAAD,QAAM,CAAC;AAC3D,kBAAI,MAAM,KAAK,QAAQ;AAAe,gBAAAlB,cAAa,MAAM,MAAOJ,MAAKuB,UAAS,EAAE;AAChF,kBAAI,QAAQ,KAAK,KAAK,QAAQ;AAAe,gBAAAnB,cAAa,KAAK,MAAOJ,MAAKuB,QAAO;AAClF,qBAAO,EAAC,OAAO,gBAAgB,OAAO,QAAQD,QAAO,MAAM,GAAG,SAAAC,SAAO;AAAA,YACvE,OAAO;AACL,kBAAID,UAAS;AACb,uBAAS,IAAI,GAAGE,KAAI,QAAQ,SAAS,GAAG,KAAKA,IAAG,KAAK;AACnD,gBAAAF,WAAU,QAAQ,CAAC,EAAE,MAAM,IAAIE,KAAI,YAAY,KAAK,MAAM,GAAG,QAAQ,IAAI,CAAC,EAAE,IAAI,IAAIF,QAAO,SAAS,MAAM,IAAIE,EAAC;AAAA,cACjH;AACA,cAAAF,UAASf,iBAAgBe,SAAQ,KAAK;AACtC,qBAAO;AAAA,gBAAC,OAAO,gBAAgB,OAAO,MAAMA,QAAO,SAAS,CAAC;AAAA,gBACrD,SAAS,EAAC,MAAM,KAAK,MAAM,QAAQA,UAAS,MAAM,UAAS;AAAA,cAAC;AAAA,YACtE;AAAA,UACF;AAEA,cAAI,MAAM,KAAK,QAAQ,gBAAgB,aAAa,KAAK,MAAM;AAC7D,gBAAI,WAAWtB,KAAI,OAAO,KAAK,OAAO,CAAC,GAAG,SAAS,QAAQ,KAAK,SAAS,IAAI;AAE7E,gBAAI,UAAU,OAAO,SAAS,MAAM,MAAM;AACxC,kBAAIuB,WAAU,MAAM,QAAQ;AAAA,gBAAC,EAAC,MAAM,SAAS,OAAO,OAAO,OAAO,IAAI,SAAS,GAAE;AAAA,gBACpD,EAAC,MAAM,KAAK,OAAO,MAAM,MAAM,IAAI,KAAK,GAAE;AAAA,cAAC,CAAC;AACzE,qBAAO,EAAC,OAAOH,OAAM,IAAIG,QAAO,GAAG,SAAAA,SAAO;AAAA,YAC5C;AAAA,UACF;AAEA,cAAIA,WAAwB,CAAC;AAC7B,cAAI,MAAM,KAAK,QAAQ;AAAe,YAAAnB,cAAa,MAAM,MAAOJ,MAAKuB,QAAO;AAC5E,cAAI,YAAY,MAAM,QAAQ,MAAM,KAAK,OAAO,KAAK;AACrD,cAAID,UAAS;AAEb,cAAI,CAAC,aAAa,kBAAkB,KAAK,KAAK,IAAI,EAAG,CAAC,EAAE,UAAU,MAAM,IAAI;AAC1E,qBAAS,IAAI,GAAGE,KAAI,QAAQ,SAAS,GAAG,KAAKA,IAAG,KAAK;AACnD,cAAAF,WAAU,KAAKE,MAAK,CAAC,YAAY,QAAQ,CAAC,EAAE,OAAOxB,MAAK,CAAC,IACrD,QAAQ,CAAC,EAAE,MAAM,IAAIwB,KAAI,YAAY,KAAK,MAAM,GAAG,QAAQ,IAAI,CAAC,EAAE,IAAI,IAAIF,QAAO,SAAS,IAAI;AAAA,YACpG;AAAA,UACF;AACA,cAAI,OAAO;AACX,iBAAO,OAAO,KAAK,QAAQ,KAAK,KAAK,KAAK,KAAK,OAAO,OAAO,KAAK,OAAO,CAAC,CAAC;AAAG;AAC9E,UAAAA,UAASf,iBAAgBe,SAAQ,KAAK;AACtC,UAAAC,SAAQ,KAAK,EAAC,MAAM,IAAI,KAAK,QAAQ,MAAM,YAAYD,QAAM,CAAC;AAC9D,iBAAO,EAAC,OAAO,gBAAgB,OAAO,OAAOA,QAAO,SAAS,CAAC,GAAG,SAAAC,SAAO;AAAA,QAC1E,CAAC;AACD,YAAI;AAAM,iBAAO;AACjB,QAAAJ,UAAS,MAAM,OAAO,SAAS,EAAC,gBAAgB,MAAM,WAAW,QAAO,CAAC,CAAC;AAC1E,eAAO;AAAA,MACT;AAkCO,MAAMN,wBAAqC,CAAC,EAAC,OAAO,UAAAM,UAAQ,MAAM;AACvE,YAAI,OAAO,WAAW,KAAK;AAC3B,YAAI,OAAO,MAAM,UAAU,MAAM,cAAc,CAAAC,WAAS;AACtD,cAAI,MAAMA,OAAM,MAAM,EAAC,KAAApB,KAAG,IAAI;AAC9B,cAAIoB,OAAM,SAASC,kBAAiB,WAAW,OAAOD,OAAM,IAAI,GAAG;AACjE,gBAAI,OAAOpB,KAAI,OAAO,GAAG;AACzB,gBAAI,UAAUF,YAAWa,sBAAqB,MAAM,GAAG,GAAGX,IAAG;AAC7D,gBAAI,QAAQ,QAAQ;AAClB,kBAAI,QAAQ,QAAQ,QAAQ,SAAS,CAAC;AACtC,kBAAI,WAAW,MAAM,KAAK,MAAM,WAAW,UAAU,MAAM,aAAa,IAAI;AAE5E,kBAAI,MAAM,KAAK,OAAO,YAAY,CAAC,KAAK,KAAK,KAAK,KAAK,MAAM,UAAU,MAAM,KAAK,IAAI,CAAC;AACrF,uBAAO;AAAA,kBAAC,OAAO,gBAAgB,OAAO,KAAK,OAAO,QAAQ;AAAA,kBAClD,SAAS,EAAC,MAAM,KAAK,OAAO,UAAU,IAAI,IAAG;AAAA,gBAAC;AACxD,kBAAI,MAAM,KAAK,QAAQ;AAAA;AAAA;AAAA,eAIlB,CAAC,MAAM,QAAQ,KAAK,QAAQ,MAAM,KAAK,QAAQ,CAAC,KAAK,KAAK,KAAK,KAAK,MAAM,GAAG,MAAM,EAAE,CAAC,IAAI;AAC7F,oBAAIyB,SAAQ,KAAK,OAAO,MAAM;AAE9B,oBAAI,MAAM,QAAQ,MAAM,KAAK,OAAO,MAAM,KAAK,QAAQ,KAAK,KAAK,KAAK,KAAK,MAAM,MAAM,MAAM,MAAM,EAAE,CAAC,GAAG;AACvG,sBAAIH,UAAS,MAAM,MAAM,YAAY,KAAK,MAAM,GAAG,MAAM,EAAE,IAAI,YAAY,KAAK,MAAM,GAAG,MAAM,IAAI,CAAC;AACpG,sBAAIG,UAAS,KAAK;AAAM,oBAAAH,UAASf,iBAAgBe,SAAQ,KAAK;AAC9D,yBAAO;AAAA,oBAAC,OAAO,gBAAgB,OAAOG,SAAQH,QAAO,MAAM;AAAA,oBACnD,SAAS,EAAC,MAAMG,QAAO,IAAI,KAAK,OAAO,MAAM,IAAI,QAAAH,QAAM;AAAA,kBAAC;AAAA,gBAClE;AAEA,oBAAIG,SAAQ;AACV,yBAAO,EAAC,OAAO,gBAAgB,OAAOA,MAAK,GAAG,SAAS,EAAC,MAAMA,QAAO,IAAI,IAAG,EAAC;AAAA,cACjF;AAAA,YACF;AAAA,UACF;AACA,iBAAO,OAAO,EAAC,OAAAL,OAAK;AAAA,QACtB,CAAC;AACD,YAAI;AAAM,iBAAO;AACjB,QAAAD,UAAS,MAAM,OAAO,SAAS,EAAC,gBAAgB,MAAM,WAAW,SAAQ,CAAC,CAAC;AAC3E,eAAO;AAAA,MACT;AAAA;AAAA;;;AClOO,WAASO,UAASC,UAyBrB,CAAC,GAAG;AACN,QAAI;AAAA,MAAC;AAAA,MACA;AAAA,MACA,YAAY;AAAA,MACZ,MAAM,EAAC,QAAAC,QAAM,IAAIC;AAAA,MACjB,mBAAmB;AAAA,IAAI,IAAIF;AAChC,QAAI,EAAEC,mBAAkBE;AAAiB,YAAM,IAAI,WAAW,gEAAgE;AAC9H,QAAI,aAAaH,QAAO,aAAa,CAACA,QAAO,UAAU,IAAI,CAAC;AAC5D,QAAI,UAAU,CAACI,aAAY,OAAO,GAAG;AACrC,QAAI,+BAA+B,iBAAiB;AAClD,cAAQ,KAAK,oBAAoB,OAAO;AACxC,oBAAc,oBAAoB;AAAA,IACpC,WAAW,qBAAqB;AAC9B,oBAAc;AAAA,IAChB;AACA,QAAI,aAAa,iBAAiB,cAAcC,eAAc,eAAe,WAAW,IAAI;AAC5F,eAAW,KAAKC,WAAU,EAAC,YAAY,YAAYF,aAAY,SAAS,OAAM,CAAC,CAAC;AAChF,QAAI;AAAW,cAAQ,KAAK,KAAK,KAAK,OAAO,GAAGG,eAAc,CAAC,CAAC;AAChE,QAAI,OAAOC,QAAOP,QAAO,UAAU,UAAU,CAAC;AAC9C,QAAI;AAAkB,cAAQ,KAAK,KAAK,KAAK,GAAG,EAAC,cAAcQ,mBAAiB,CAAC,CAAC;AAClF,WAAO,IAAI,gBAAgB,MAAM,OAAO;AAAA,EAC1C;AAEA,WAASA,mBAAkB,SAA4B;AACrD,QAAI,EAAC,OAAO,IAAG,IAAI,SAAS,IAAI,4BAA4B,KAAK,MAAM,SAAS,MAAM,IAAI,GAAG,CAAC;AAC9F,QAAI,CAAC;AAAG,aAAO;AACf,QAAI,OAAO,WAAW,KAAK,EAAE,aAAa,KAAK,EAAE;AACjD,WAAO,QAAQ,CAAC,KAAK,KAAK,OAAO;AAC/B,UAAI,KAAK,QAAQ,eAAe,KAAK,QAAQ,gBAAgB,KAAK,QAAQ,gCACtE,KAAK,QAAQ,kBAAkB,KAAK,QAAQ,UAAU,KAAK,QAAQ;AAAS,eAAO;AACvF,aAAO,KAAK;AAAA,IACd;AAEA,WAAO;AAAA,MACL,MAAM,MAAM,EAAE,CAAC,EAAE;AAAA,MAAQ,IAAI;AAAA,MAC7B,SAASC,oBAAmB;AAAA,MAC5B,UAAU;AAAA,IACZ;AAAA,EACF;AAGA,WAASA,sBAAqB;AAC5B,QAAIC;AAAiB,aAAOA;AAC5B,QAAI,SAAS,qBAAqB,IAAI,kBAAkB,YAAY,OAAO,EAAC,YAAYP,aAAW,CAAC,GAAG,GAAG,IAAI,CAAC;AAC/G,WAAOO,mBAAkB,SAAS,OAAO,UAAU,CAAC;AAAA,EACtD;AA5FA,MAcaJ,iBAKPH,cAoEFO;AAvFJ,MAAAC,iCAAA;AAAA;AAAA;AAAA;AACA,MAAAC;AACA,MAAAA;AACA,MAAAA;AACA,MAAAC;AACA,MAAAD;AACA,MAAAE;AACA,MAAAC;AAOO,MAAMT,kBAAwC;AAAA,QACnD,EAAC,KAAK,SAAS,KAAKU,6BAA2B;AAAA,QAC/C,EAAC,KAAK,aAAa,KAAKC,sBAAoB;AAAA,MAC9C;AAEA,MAAMd,eAAce,MAAK,EAAC,kBAAkB,MAAK,CAAC;AAoElD,MAAIR,mBAAgD;AAAA;AAAA;;;ACzEpD,WAASS,4BAA2B,MAAkB;AAClD,WAAO,IAAIC,sBAAqB,IAAI;AAAA,EACxC;AAhBA,MAIaC,wBACAC,uBAaPF,uBAuJAG,iBA8BAC;AAvMN,MAAAC,iCAAA;AAAA;AAAA;AAAA,MAAAC;AACA;AACA;AACA;AACO,MAAML,yBAAwB,YAAY,OAAgB;AAC1D,MAAMC,wBAAuB,WAAW,OAAO;AAAA,QAClD,QAAQ,MAAM;AAAA,QACd,OAAO,OAAOK,KAAI;AACd,mBAASC,MAAKD,IAAG;AAAS,gBAAIC,GAAE,GAAGP,sBAAqB;AAAG,sBAAQO,GAAE;AACrE,iBAAO;AAAA,QACX;AAAA,QACA,SAAS,CAAAC,OAAK,UAAU,KAAKA,IAAG,CAAAC,QAAMA,MAAKX,8BAA6B,IAAI;AAAA,MAChF,CAAC;AAMD,MAAMC,wBAAN,MAA4C;AAAA,QAMxC,YAAY,MAAkB;AAL9B;AACA;AACA;AACA,4CAAsB;AACtB;AAiGA,gDAAiB,CAAC,UAAkB;AAChC,gBAAI,CAAC,KAAK;AAAY,mBAAK,WAAW;AAAA,UAC1C;AAEA,+CAAgB;AAnGZ,eAAK,aAAa;AAClB,eAAK,MAAM,SAAS,cAAc,KAAK;AACvC,eAAK,IAAI,YAAY;AAErB,eAAK,aAAa,SAAS,cAAc,SAAS;AAClD,eAAK,WAAW,YAAY;AAE5B,eAAK,IAAI,YAAY,KAAK,UAAU;AACpC,eAAK,WAAW;AAIhB,gBAAM,gBAAgB,KAAK,WAAW,IAAI,sBAAsB,EAAE,SAAS;AAC3E,eAAK,IAAI,MAAM,SAAS,gBAAc;AAEtC,eAAK,aAAa,SAAS,cAAc,KAAK;AAC9C,eAAK,WAAW,YAAY;AAC5B,eAAK,WAAW,YAAY;AAC5B,eAAK,WAAW,UAAU,MAAM;AAC5B,iBAAK,aAAa,CAAC,KAAK;AACxB,gBAAI,KAAK,YAAW;AAChB,mBAAK,IAAI,MAAM,SAAS,KAAK,WAAW,IAAI,sBAAsB,EAAE,SAAQ;AAC5E,mBAAK,IAAI,MAAM,YAAY;AAAA,YAC/B,OAAO;AACH,oBAAMW,iBAAgB,KAAK,WAAW,IAAI,sBAAsB,EAAE,SAAS;AAC3E,mBAAK,IAAI,MAAM,SAASA,iBAAc;AACtC,mBAAK,IAAI,MAAM,YAAY;AAAA,YAC/B;AACA,iBAAK,iBAAiB;AACtB,iBAAK,WAAW;AAAA,UACpB;AACA,eAAK,IAAI,YAAY,KAAK,UAAU;AAGpC,cAAI,cAAc,SAAS,cAAc,KAAK;AAC9C,sBAAY,YAAY;AACxB,sBAAY,YAAY;AACxB,sBAAY,UAAU,MAAM;AAExB,iBAAK,WAAW,SAAS;AAAA,cACrB,SAASV,uBAAsB,GAAG,KAAK;AAAA,YAC3C,CAAC;AAAA,UACL;AACA,eAAK,IAAI,YAAY,WAAW;AAAA,QACpC;AAAA,QAEA,QAAQ;AAEJ,eAAK,WAAW,MAAM;AACtB,mBAAS,iBAAiB,gBAAgB,KAAK,cAAc;AAC7D,eAAK,2BAA2B;AAAA,QACpC;AAAA,QAEA,UAAU;AAEN,eAAK,WAAW,MAAM;AACtB,mBAAS,oBAAoB,gBAAgB,KAAK,cAAc;AAAA,QACpE;AAAA,QAEA,OAAO,QAA0B;AAC7B,gBAAM,OAAO,OAAO;AACpB,eAAK,aAAa;AAClB,cAAI,OAAO,cAAc,OAAO,iBAAiB;AAC7C,gBAAI,CAAC,KAAK,YAAY;AAElB,oBAAM,gBAAgB,KAAK,WAAW,IAAI,sBAAsB,EAAE,SAAS;AAC3E,mBAAK,IAAI,MAAM,SAAS,gBAAc;AACtC,mBAAK,WAAW;AAAA,YACpB;AAGA,iBAAK,2BAA2B;AAAA,UACpC;AAAA,QACJ;AAAA,QAEA,IAAI,MAAe;AACf,iBAAO;AAAA,QACX;AAAA,QAEA,mBAAmB;AACf,cAAI,KAAK,YAAY;AACjB,iBAAK,WAAW,YAAY;AAAA,UAChC,OAAO;AACH,iBAAK,WAAW,YAAY;AAAA,UAChC;AAAA,QACJ;AAAA,QAEA,6BAA6B;AACzB,cAAI,KAAK,WAAW,IAAI,sBAAsB,EAAE,UAAU,KAAK;AAC3D,iBAAK,WAAW,MAAM,UAAU;AAAA,UACpC,OAAO;AACH,iBAAK,WAAW,MAAM,UAAU;AAAA,UACpC;AAAA,QACJ;AAAA;AAAA,QAOA,aAAmB;AAEf,gCAAsB,MAAM;AACxB,gBAAI,KAAK,YAAY;AAEjB,oBAAMW,QAAO,KAAK,WAAW,MAAM,IAAI,SAAS;AAChD,oBAAMC,QAAOV,gBAAeS,KAAI;AAChC,mBAAK,WAAW,YAAYC;AAAA,YAChC,OAAO;AACH,oBAAM,OAAO,KAAK,WAAW,IAAI,sBAAsB;AAEvD,oBAAM,cAAc,KAAK,IAAI,sBAAsB;AAGnD,oBAAM,YAAY,KAAK,MAAM,KAAK,WAAW;AAC7C,oBAAM,eAAe,YAAY,MAAM,KAAK,WAAW;AAGvD,oBAAM,mBAAmB;AACzB,oBAAM,kBAAkB,mBAAmB,KAAK,gBAAgB,SAAS;AACzE,mBAAK,gBAAgB;AAIrB,oBAAM,eAAe,KAAK,WAAW,kBAAkB,SAAS;AAChE,oBAAM,kBAAkB,KAAK,WAAW,kBAAkB,YAAY;AAEtE,kBAAIC,SAAQ,aAAa;AACzB,kBAAIC,OAAM,gBAAgB;AAE1B,kBAAI,YAAY,KAAK,WAAW,MAAM,IAAI,OAAOD,MAAK;AACtD,sBAAQ,IAAI,cAAc,UAAU,MAAM,EAAE;AAG5C,oBAAMF,QAAO,KAAK,WAAW,MAAM,IAAI,YAAYE,QAAOC,IAAG;AAG7D,oBAAMF,QAAOV,gBAAeS,KAAI;AAChC,mBAAK,WAAW,YAAYC;AAAA,YAChC;AAAA,UACJ,CAAC;AAAA,QACL;AAAA,MACJ;AAEA,MAAMV,kBAAiB,CAACa,cAAqB;AACzC,eAAO,UAAUA,WAAU;AAAA,UACvB,YAAY,CAAC,IAAI,CAAC;AAAA,UAClB,gBAAgB,CAAC,QAAQ,CAAC;AAAA,QAC9B,CAAC;AAAA,MACL;AAyBA,MAAMZ,wBAAuB,WAAW,UAAU;AAAA,QAC9C,8BAA8B;AAAA,UAC1B,UAAU;AAAA,UACV,WAAW;AAAA,QACf;AAAA,QACA,2BAA2B;AAAA,UACvB,UAAU;AAAA,UACV,KAAK;AAAA,UACL,OAAO;AAAA,UACP,QAAQ;AAAA,UACR,iBAAiB;AAAA,QACrB;AAAA,QACA,0BAA0B;AAAA,UACtB,UAAU;AAAA,UACV,KAAK;AAAA,UACL,OAAO;AAAA,UACP,QAAQ;AAAA,UACR,iBAAiB;AAAA,QACrB;AAAA,QAEA,qCAAqC,EAAE,iBAAiB,UAAU;AAAA,QAClE,oCAAoC,EAAE,iBAAiB,UAAU;AAAA,MACrE,CAAC;AAAA;AAAA;;;AC7ND,MA0Caa,UAmBFC,kBAEEC,qBAAAC;AA/Db,MAAAC,2BAAA;AAAA;AAAA;AAAA,MAAAC;AAQA;AACA,MAAAC;AACA,MAAAC;AACA,MAAAF;AACA,MAAAA;AAQA,MAAAG;AACA,MAAAC;AACA,MAAAJ;AACA,MAAAA;AAEA;AACA,MAAAK;AACA,MAAAC;AACA,MAAAC;AACA,MAAAC;AACA,MAAAC;AACA,MAAAC;AACA,MAAAC;AACA;AACA,MAAAC;AACA,MAAAC;AAEA,MAAAC;AAKO,MAAMnB,WAAU,CAAC,QAA4C;AAChE,YAAI,QAAQ,QAAW;AACnB,iBAAO;AAAA,QACX;AACA,YAAI,OAAO,MAAM;AACb,iBAAO;AAAA,QACX;AACA,YAAI,OAAO,IAAI;AACX,iBAAO;AAAA,QACX;AACA,YAAI,OAAO,KAAK;AACZ,iBAAO;AAAA,QACX;AACA,YAAI,IAAI,UAAU,GAAG;AACjB,iBAAO;AAAA,QACX;AACA,eAAO;AAAA,MACX;AAEO,MAAIC,mBAAkB,IAAI;AAE1B,MAAMC,sBAAN,MAAMA,oBAAkB;AAAA,QAM3B,YAAYkB,SAAoB;AAFhC;AAAA;AAAA;AAAA,8BAAiB;AAmIjB;AAAA;AAAA;AAAA;AAAA,0CAAW,CAAC,UAAuB;AAC/B,iBAAK,QAAQ,SAAS,KAAK;AAAA,UAC/B;AAkFJ,0CAAW,CAAC,MAAeC,QAAwB;AAC/C,mBAAO,KAAK,QAAQ,MAAM,SAAS,MAAMA,GAAE;AAAA,UAC/C;AACA,8CAAe,MAAc;AACzB,mBAAOnB,oBAAkB,aAAa,KAAK,OAAO;AAAA,UACtD;AACA,8CAAe,MAAc;AACzB,mBAAOA,oBAAkB,aAAa,KAAK,OAAO;AAAA,UACtD;AACA,wDAAyB,MAAc;AACnC,mBAAOA,oBAAkB,uBAAuB,KAAK,OAAO;AAAA,UAChE;AACA,uDAAwB,MAAiC;AACrD,mBAAOA,oBAAkB,sBAAsB,KAAK,OAAO;AAAA,UAC/D;AACA,gDAAiB,MAAc;AAC3B,mBAAO,KAAK,QAAQ;AAAA,UACxB;AACA,oDAAqB,CAAC,WAA8B;AAChD,mBAAO,KAAK,QAAQ,gBAAgB,MAAM;AAAA,UAC9C;AACA,sDAAuB,CAAC,WAA8B;AAClD,mBAAO,KAAK,QAAQ,kBAAkB,MAAM;AAAA,UAChD;AACA,wCAAS,CAAC,SAAiB,OAAeoB,UAAiB,YAAoB,aAAqB;AAChG,YAAApB,oBAAkB,OAAO,KAAK,SAAS,SAAS,OAAOoB,UAAS,YAAY,QAAQ;AAAA,UACxF;AAsNA;AAAA,oDAAqB,CAACA,aAAoB;AACtC,YAAApB,oBAAkB,mBAAmB,KAAK,SAASoB,QAAO;AAAA,UAC9D;AAEA,gDAAiB,MAAM;AACnB,YAAApB,oBAAkB,eAAe,KAAK,OAAO;AAAA,UACjD;AACA,6CAAc,MAAM;AAChB,YAAAA,oBAAkB,YAAY,KAAK,OAAO;AAAA,UAC9C;AACA,+CAAgB,MAAM;AAClB,YAAAA,oBAAkB,cAAc,KAAK,OAAO;AAAA,UAChD;AACA,+CAAgB,MAAM;AAClB,YAAAA,oBAAkB,cAAc,KAAK,OAAO;AAAA,UAChD;AACA,6CAAc,MAAM;AAChB,YAAAA,oBAAkB,YAAY,KAAK,OAAO;AAAA,UAC9C;AACA,4CAAa,MAAM;AACf,YAAAA,oBAAkB,WAAW,KAAK,OAAO;AAAA,UAC7C;AACA,4CAAa,MAAM;AACf,YAAAA,oBAAkB,WAAW,KAAK,OAAO;AAAA,UAC7C;AACA,8CAAe,MAAM;AACjB,YAAAA,oBAAkB,aAAa,KAAK,OAAO;AAAA,UAC/C;AACA,iDAAkB,MAAM;AACpB,YAAAA,oBAAkB,gBAAgB,KAAK,OAAO;AAAA,UAClD;AACA,kDAAmB,MAAM;AACrB,YAAAA,oBAAkB,iBAAiB,KAAK,OAAO;AAAA,UACnD;AACA,8CAAe,MAAM;AACjB,YAAAA,oBAAkB,aAAa,KAAK,OAAO;AAAA,UAC/C;AAEA,kDAAmB,MAAM;AACrB,YAAAA,oBAAkB,iBAAiB,KAAK,OAAO;AAAA,UACnD;AACA,gDAAiB,MAAM;AACnB,YAAAA,oBAAkB,eAAe,KAAK,OAAO;AAAA,UACjD;AACA,4CAAa,MAAM;AACf,YAAAA,oBAAkB,WAAW,KAAK,OAAO;AAAA,UAC7C;AACA,6CAAc,MAAM;AAChB,YAAAA,oBAAkB,YAAY,KAAK,OAAO;AAAA,UAC9C;AACA,uDAAwB,MAAY;AAChC,YAAAA,oBAAkB,sBAAsB,KAAK,OAAO;AAAA,UACxD;AAEA,2DAA4B,CAAC,WAAoB;AAC7C,YAAAA,oBAAkB,0BAA0B,KAAK,SAAS,MAAM;AAAA,UACpE;AAEA,oDAAqB,MAAM;AACvB,YAAAA,oBAAkB,mBAAmB,KAAK,OAAO;AAAA,UACrD;AAEA,gDAAiB,MAAM;AACnB,YAAAA,oBAAkB,eAAe,KAAK,OAAO;AAAA,UACjD;AAEA,yCAAU,MAAM;AACZ,iBAAK,QAAQ,QAAQ;AAAA,UACzB;AAxgBQ,eAAK,UAAUkB;AAAA,QACnB;AAAA;AAAA;AAAA;AAAA,QAKA,IAAI,SAAqB;AACrB,iBAAO,KAAK;AAAA,QAChB;AAAA;AAAA,MAkgBJ;AAvfI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBA1BSlB,qBA0BF,YAAW,CACd,cACA,uBACAqB,MACA,gBACA,uBAA2C;AAE3C,cAAM,oBAAkC,uBAAM;AAAA;AAAA,UAE1C,0BAA0B;AAAA,UAC1B,sBAAsB;AAAA,UACtBC,SAAQ;AAAA,UACRC,gBAAe;AAAA,UACfC,gBAAe;AAAA,UACf,cAAc;AAAA,UACd,WAAW;AAAA,UACX,YAAY,wBAAwB,GAAG,IAAI;AAAA,UAC3C,cAAc;AAAA,UACd,mBAAmB,uBAAuB,EAAE,UAAU,KAAK,CAAC;AAAA,UAC5D,gBAAgB;AAAA,UAChB,cAAc;AAAA,UACd,qBAAqB;AAAA,UACrB,gBAAgB;AAAA,UAChB,oBAAoB;AAAA,UACpB,0BAA0B;AAAA,UAC1B,WAAW;AAAA,UACXzB,iBAAgB,GAAG0B,WAAU;AAAA,UAC7B,OAAO,GAAG;AAAA,YACN,GAAG;AAAA,YACH,GAAG;AAAA,YACH,GAAG;AAAA,YACH,GAAG;AAAA,YACH,GAAG;AAAA,YACH,GAAG;AAAA,YACH;AAAA,UACJ,CAAC;AAAA,QACL,GAAG;AACH,eAAO,YAAY,OAAO;AAAA,UACtB,KAAKJ;AAAA,UACL,YAAY;AAAA,YACR;AAAA,YACAK;AAAA,YACAC;AAAA,YACA,eAAe;AAAA,cACX,UAAU;AAAA,gBACNC,oBAAmB,cAAc,GAAG;AAAA,gBACpCC,kBAAiB;AAAA,cACrB;AAAA,cACA,OAAO;AAAA,cACP,eAAe;AAAA,YACnB,CAAC;AAAA,YACDC;AAAA,YACAC,mBAAkB;AAAA,YAClB,UAAU;AAAA,YACVC,aAAY,qBAAqB;AAAA,YACjC,YAAY,4DAA4D;AAAA,YACxEC,UAAS;AAAA,cACL,MAAMC;AAAA,cACN,WAAW;AAAA,cACX,kBAAkB;AAAA;AAAA,YAEtB,CAAC;AAAA,YAED,WAAW,eAAe,GAAG,CAAC,eAA2B;AACrD,kBAAI,WAAW,YAAY;AACvB,oBAAI,gBAAgB;AAChB,iCAAe,UAAU;AAAA,gBAC7B,OAAO;AACH,0BAAQ,KAAK,+BAA+B;AAAA,gBAChD;AAAA,cACJ;AAAA,YACJ,CAAC;AAAA,YACD,WAAW,iBAAiB;AAAA,cACxB,KAAK,OAAkB,MAAkB;AACrC,oBAAI,oBAAoB;AACpB,qCAAmB,KAAK;AAAA,gBAC5B,OAAO;AACH,0BAAQ,KAAK,mCAAmC;AAAA,gBACpD;AACA,uBAAO;AAAA,cACX;AAAA,cACA,MAAM,OAAuB;AACzB,oBAAI,oBAAoB;AACpB,qCAAmB,KAAK;AAAA,gBAC5B,OAAO;AACH,0BAAQ,KAAK,mCAAmC;AAAA,gBACpD;AACA,uBAAO;AAAA,cACX;AAAA,YACJ,CAAC;AAAA,UACL;AAAA,QACJ,CAAC;AAAA,MACL;AAOA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBA7HSlC,qBA6HF,aAAY,CAAC,OAAoB,WAAmD;AACvF,eAAO,IAAI,WAAW;AAAA,UAClB;AAAA,UACA;AAAA,QACJ,CAAC;AAAA,MACL;AAiBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAnJSA,qBAmJF,YAAW,CAACkB,SAAoB,MAAeC,QAAwB;AAC1E,eAAOD,QAAO,MAAM,SAAS,MAAMC,GAAE;AAAA,MACzC;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA,oBA3JSnB,qBA2JF,gBAAe,CAACkB,YAA+B;AAClD,eAAOA,QAAO,MAAM,IAAI,SAAS;AAAA,MACrC;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAnKSlB,qBAmKF,gBAAe,CAACkB,YAA+B;AAClD,eAAOA,QAAO,MAAM,IAAI;AAAA,MAC5B;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA,oBA3KSlB,qBA2KF,0BAAyB,CAACkB,YAA+B;AAC5D,YAAI,SAASA,QAAO,MAAM,UAAU;AACpC,YAAIiB,QAAO;AACX,YAAI,OAAO,SAAS,GAAG;AACnB,mBAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACpC,gBAAIC,SAAQ,OAAO,CAAC;AACpB,gBAAIA,UAAS,QAAW;AACpB,kBAAI,YAAYlB,QAAO,MAAM,SAASkB,OAAM,MAAMA,OAAM,EAAE;AAC1D,kBAAItC,SAAQ,SAAS,GAAG;AACpB;AAAA,cACJ;AACA,kBAAI,KAAK,GAAG;AACR,gBAAAqC,SAAQ;AAAA,cACZ;AACA,cAAAA,SAAQ;AAAA,YACZ;AAAA,UACJ;AAAA,QACJ;AACA,eAAOA;AAAA,MACX;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA,oBApMSnC,qBAoMF,yBAAwB,CAACkB,YAAkD;AAClF,eAAOA,QAAO,MAAM,UAAU;AAAA,MAClC;AAYA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAlNalB,qBAkNN,UAAS,CAACkB,SAAoB,SAAiB,OAAeE,UAAiB,YAAoB,aAAqB;AAC3H,YAAI,gBAAgB;AAAA;AAAA,UAEhB,SAAS,CAAC,EAAE,MAAM,SAAS,IAAI,OAAO,QAAQA,SAAQ,CAAC;AAAA;AAAA,UAEvD,OAAO,gBAAgB,MAAM,YAAY,QAAQ;AAAA,QACrD;AACA,QAAAF,QAAO,SAAS,aAAa;AAAA,MACjC;AAqCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBA/PalB,qBA+PN,wBAAuB,CAACkB,SAAoBkB,QAAuB,WAAwB;AAC9F,YAAI,MAAM,OAAO;AAEjB,cAAM,aAAqBA,OAAM,OAAO;AACxC,cAAM,WAAmBA,OAAM;AAC/B,cAAM,SAASpC,oBAAK,SAASkB,SAAQ,YAAY,QAAQ;AAEzD,cAAM,aAAqBkB,OAAM;AACjC,cAAM,WAAmBA,OAAM,KAAK;AACpC,cAAM,SAASpC,oBAAK,SAASkB,SAAQ,YAAY,QAAQ;AAEzD,YAAI,UAAU,UAAU,UAAU,QAAQ;AACtC,iBAAO;AAAA,YACH,SAAS;AAAA,cACL,EAAE,MAAM,YAAY,IAAI,UAAU,QAAQ,GAAG;AAAA,cAC7C,EAAE,MAAM,YAAY,IAAI,UAAU,QAAQ,GAAG;AAAA,YACjD;AAAA,YACA,OAAO,gBAAgB,MAAM,YAAY,aAAa,GAAG;AAAA,UAC7D;AAAA,QACJ,OAAO;AACH,iBAAO;AAAA,YACH,SAAS;AAAA,cACL,EAAE,MAAMkB,OAAM,MAAM,QAAQ,OAAO;AAAA,cACnC,EAAE,MAAMA,OAAM,IAAI,QAAQ,OAAO;AAAA,YACrC;AAAA,YACA,OAAO,gBAAgB,MAAMA,OAAM,OAAO,KAAKA,OAAM,KAAK,GAAG;AAAA,UACjE;AAAA,QACJ;AAAA,MACJ;AAUA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBArSapC,qBAqSN,2BAA0B,CAACkB,SAAoBkB,QAAuB,cAAsB,iBAA8B;AAC7H,YAAI,YAAY,aAAa;AAC7B,YAAI,YAAY,aAAa;AAE7B,cAAM,aAAqBA,OAAM,OAAO;AACxC,cAAM,WAAmBA,OAAM;AAC/B,cAAM,SAASpC,oBAAK,SAASkB,SAAQ,YAAY,QAAQ;AAEzD,cAAM,aAAqBkB,OAAM;AACjC,cAAM,WAAmBA,OAAM,KAAK;AACpC,cAAM,SAASpC,oBAAK,SAASkB,SAAQ,YAAY,QAAQ;AAGzD,YAAI,UAAU,gBAAgB,UAAU,cAAc;AAClD,iBAAO;AAAA,YACH,SAAS;AAAA,cACL,EAAE,MAAM,YAAY,IAAI,UAAU,QAAQ,GAAG;AAAA,cAC7C,EAAE,MAAM,YAAY,IAAI,UAAU,QAAQ,GAAG;AAAA,YACjD;AAAA,YACA,OAAO,gBAAgB,MAAM,YAAYkB,OAAM,KAAK,SAAS;AAAA,UACjE;AAAA,QACJ,OAAO;AACH,iBAAO;AAAA,YACH,SAAS;AAAA,cACL,EAAE,MAAMA,OAAM,MAAM,QAAQ,aAAa;AAAA,cACzC,EAAE,MAAMA,OAAM,IAAI,QAAQ,aAAa;AAAA,YAC3C;AAAA,YACA,OAAO,gBAAgB,MAAMA,OAAM,OAAO,WAAWA,OAAM,KAAK,SAAS;AAAA,UAC7E;AAAA,QACJ;AAAA,MACJ;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAzUapC,qBAyUN,sBAAqB,CAACkB,SAAoBE,aAAoB;AACjE,QAAAF,QAAO,SAASA,QAAO,MAAM,iBAAiBE,QAAO,CAAC;AAAA,MAC1D;AAGA;AAAA,oBA9UapB,qBA8UE,kBAAiB,CAACkB,YAAuB;AAEpD,YAAI,EAAE,MAAM,IAAAC,IAAG,IAAID,QAAO,MAAM,UAAU;AAG1C,YAAImB,SAAQnB,QAAO,MAAM,IAAI,OAAO,IAAI,EAAE;AAC1C,YAAIoB,OAAMpB,QAAO,MAAM,IAAI,OAAOC,GAAE,EAAE;AAGtC,YAAI,YAAYD,QAAO,MAAM,IAAI,YAAYmB,QAAOA,SAAQ,CAAC;AAG7D,YAAIE;AACJ,YAAI,cAAc,OAAO;AAErB,UAAAA,MAAKrB,QAAO,MAAM,OAAO;AAAA,YACrB,SAAS,EAAE,MAAMmB,QAAO,IAAIA,SAAQ,EAAE;AAAA,YACtC,WAAW,EAAE,QAAQC,OAAM,GAAG,MAAMA,OAAM,EAAE;AAAA,UAChD,CAAC;AAAA,QACL,OAAO;AAEH,UAAAC,MAAKrB,QAAO,MAAM,OAAO;AAAA,YACrB,SAAS,EAAE,MAAMmB,QAAO,IAAIA,QAAO,QAAQ,MAAM;AAAA,YACjD,WAAW,EAAE,QAAQC,OAAM,GAAG,MAAMA,OAAM,EAAE;AAAA,UAChD,CAAC;AAAA,QACL;AAGA,QAAApB,QAAO,SAASqB,GAAE;AAClB,QAAArB,QAAO,MAAM;AAAA,MACjB;AAGA;AAAA,oBA/WalB,qBA+WE,eAAc,CAACkB,YAAuB;AACjD,QAAAA,QAAO,SAASA,QAAO,MAAM,cAAc,CAACkB,WAA0BpC,oBAAK,qBAAqBkB,SAAQkB,QAAO,IAAI,CAAC,CAAC;AAAA,MACzH;AAGA;AAAA,oBApXapC,qBAoXE,sBAAqB,CAACkB,YAAuB;AACxD,QAAAA,QAAO,SAASA,QAAO,MAAM,cAAc,CAACkB,WAA0BpC,oBAAK,qBAAqBkB,SAAQkB,QAAO,GAAG,CAAC,CAAC;AAAA,MACxH;AAGA;AAAA,oBAzXapC,qBAyXE,iBAAgB,CAACkB,YAAuB;AACnD,QAAAA,QAAO,SAASA,QAAO,MAAM,cAAc,CAACkB,WAA0BpC,oBAAK,qBAAqBkB,SAAQkB,QAAO,GAAG,CAAC,CAAC;AAAA,MACxH;AAEA;AAAA,oBA7XapC,qBA6XE,iBAAgB,CAACkB,YAAuB;AACnD,QAAAA,QAAO,SAASA,QAAO,MAAM,cAAc,CAACkB,WAA0BpC,oBAAK,qBAAqBkB,SAAQkB,QAAO,IAAI,CAAC,CAAC;AAAA,MACzH;AAEA;AAAA,oBAjYapC,qBAiYE,eAAc,CAACkB,YAAuB;AACjD,QAAAA,QAAO,SAASA,QAAO,MAAM,cAAc,CAACkB,WAA0BpC,oBAAK,qBAAqBkB,SAAQkB,QAAO,GAAG,CAAC,CAAC;AAAA,MACxH;AAEA;AAAA,oBArYapC,qBAqYE,cAAa,CAACkB,YAAuB;AAChD,QAAAA,QAAO,SAASA,QAAO,MAAM,cAAc,CAACkB,WAA0BpC,oBAAK,wBAAwBkB,SAAQkB,QAAO,SAAS,QAAQ,CAAC,CAAC;AAAA,MACzI;AAEA;AAAA,oBAzYapC,qBAyYE,cAAa,CAACkB,YAAuB;AAChD,QAAAA,QAAO,SAASA,QAAO,MAAM,cAAc,CAACkB,WAA0BpC,oBAAK,wBAAwBkB,SAAQkB,QAAO,SAAS,QAAQ,CAAC,CAAC;AAAA,MACzI;AAEA;AAAA,oBA7YapC,qBA6YE,gBAAe,CAACkB,YAAuB;AAClD,QAAAlB,oBAAK,mBAAmBkB,SAAQ;AAAA;AAAA;AAAA;AAAA,CAAyB;AAAA,MAC7D;AAGA;AAAA,oBAlZalB,qBAkZE,mBAAkB,CAACkB,YAAuB;AACrD,QAAAlB,oBAAK,mBAAmBkB,SAAQ;AAAA;AAAA,CAAY;AAAA,MAChD;AAEA;AAAA,oBAtZalB,qBAsZE,oBAAmB,CAACkB,YAAuB;AACtD,QAAAlB,oBAAK,mBAAmBkB,SAAQ;AAAA;AAAA,CAAS;AAAA,MAC7C;AAEA;AAAA,oBA1ZalB,qBA0ZE,gBAAe,CAACkB,YAAuB;AAClD,QAAAlB,oBAAK,mBAAmBkB,SAAQ;AAAA;AAAA;AAAA,CAAU;AAAA,MAC9C;AAEA;AAAA,oBA9ZalB,qBA8ZE,oBAAmB,CAACkB,YAAuB;AACtD,QAAAlB,oBAAK,mBAAmBkB,SAAQ;AAAA,GAAM;AACtC,QAAAA,QAAO,MAAM;AAAA,MACjB;AAEA;AAAA,oBAnaalB,qBAmaE,kBAAiB,CAACkB,YAAuB;AACpD,QAAAlB,oBAAK,mBAAmBkB,SAAQ;AAAA,IAAO;AACvC,QAAAA,QAAO,MAAM;AAAA,MACjB;AAEA;AAAA,oBAxaalB,qBAwaE,cAAa,CAACkB,YAAuB;AAChD,QAAAlB,oBAAK,mBAAmBkB,SAAQ;AAAA;AAAA,CAAW;AAAA,MAC/C;AAEA;AAAA,oBA5aalB,qBA4aE,eAAc,CAACkB,YAAuB;AACjD,QAAAlB,oBAAK,mBAAmBkB,SAAQ;AAAA;AAAA,CAAU;AAAA,MAC9C;AAEA;AAAA,oBAhbalB,qBAgbE,yBAAwB,CAACkB,YAAuB;AAC3D,QAAS,GAAOlB,oBAAkB,aAAakB,OAAM,GAAG,EAAE,MAAM,OAAO,QAAQ,YAAY,SAAS,CAAC,EAAc,EAAE,CAAC,EAAE,KAAK,CAAC,kBAAkB;AAC5I,cAAI,SAASlB,oBAAkB,aAAakB,OAAM;AAClD,UAAAlB,oBAAkB,OAAOkB,SAAQ,GAAG,QAAQ,eAAe,GAAG,CAAC;AAAA,QACnE,CAAC;AAAA,MACL;AAEA;AAAA,oBAvbalB,qBAubE,kBAAiB,CAACkB,YAAuB;AACpD,QAAAA,QAAO,SAAS;AAAA,UACZ,SAASsB,uBAAsB,GAAG,CAACtB,QAAO,MAAM,MAAMuB,qBAAoB,CAAC;AAAA,QAC/E,CAAC;AAAA,MAEL;AAEA,oBA9bazC,qBA8bE,6BAA4B,CAACkB,SAAoB,WAAoB;AAChF,YAAI,QAAQ;AACR,UAAAA,QAAO,SAAS;AAAA,YACZ,SAASnB,iBAAgB,YAAY2C,aAAY;AAAA,UACrD,CAAC;AAAA,QACL,OAAO;AACH,UAAAxB,QAAO,SAAS;AAAA,YACZ,SAASnB,iBAAgB,YAAY0B,WAAU;AAAA,UACnD,CAAC;AAAA,QACL;AAAA,MACJ;AAxcO,MAAMxB,qBAAND;AAAA;AAAA;;;AC/DP,MAKO;AALP;AAAA;AAAA;AAAA;AACA,MAAA2C;AACA;AACA;AACA;AACA,MAAO,4CAAP,cAA6B,WAAW;AAAA,QAAxC;AAAA;AAoIE,wDAAyB,CAAC,eAAe;AACvC,iBAAK,cAAc,UAAU;AAC7B,iBAAK,MAAM,KAAK,mBAAmB,UAAU;AAC7C,gBAAI;AACF,2BAAa,QAAQ,cAAa,KAAK,GAAG;AAAA,YAC5C,SAASC,IAAG;AACV,sBAAQ,MAAM,kCAAkCA,EAAC;AAAA,YACnD;AAAA,UACF;AAEA,iEAAkC,CAAC,UAAU;AAC3C,gBAAI;AACJ,oBAAQ,MAAM,MAAM;AAAA,cAClB,KAAK;AACH,wBAAQ,MAAM,KAAK,MAAM,aAAa,KAAK;AAC3C;AAAA,cACF,KAAK;AACH,wBAAQ,MAAM,KAAK,MAAM,cAAc,KAAK;AAC5C;AAAA,cACF;AACE;AAAA,YACJ;AACA,gBAAI,MAAM,WAAW;AAAG;AACxB,oBAAQ,IAAI,mCAAmC,KAAK;AACpD,kBAAM,eAAe;AACrB,kBAAM,QAAQ,UAAQ,KAAK,WAAW,IAAI,CAAC;AAAA,UAC7C;AAEA,4CAAa,CAAC,SAAS;AACrB,oBAAQ,IAAI,gBAAgB,IAAI;AAEhC,kBAAM,aAAa;AACnB,kBAAM,UAAU,KAAK,KAAK,WAAW,OAAO;AAC5C,kBAAM,SAAS,UAAU,gBAAgB;AACzC,kBAAM,OAAO,UAAU,KAAK,aAAa,KAAK;AAE9C,kBAAM,UAAU,WAAW,oBAAoB,iBAAiB,yBAAyB,MAAM,IAAI;AACnG,oBAAQ,QAAQ,YAAU;AACxB,oBAAM,aAAa,OAAO,QAAQ;AAClC,oBAAMC,UAAS,WAAW,QAAQ,KAAK,UAAU;AACjD,sBAAQ,IAAI,UAAUA,OAAM;AAC5B,sBAAQ,IAAI,cAAc,UAAU;AACpC,cAAAA,QAAO,UAAU,IAAI,MAAM;AAC3B,qBAAO,UAAU,IAAI,MAAM;AAAA,YAC7B,CAAC;AACD,uBAAW,4BAA4B;AACvC,iBAAK,QAAQ,IAAI,EAAE,MAAM,CAAAC,WAAS,QAAQ,IAAI,oCAAoCA,MAAK,CAAC;AAAA,UAC1F;AAAA;AAAA,QApKA,aAAa;AACX,eAAK,OAAO,QAAQ;AACpB,eAAK,WAAW,QAAQ;AACxB,eAAK,UAAU,QAAQ;AACvB,eAAK,qBAAqB;AAAA,QAC5B;AAAA,QAEA,UAAU;AACR,gBAAM,eAAe;AAAA,YACnB,EAAC,OAAO,iBAAiB,OAAO,qBAAqB,MAAM,oBAAmB;AAAA,YAC9E,EAAC,OAAO,eAAe,OAAO,2BAA0B;AAAA,YACxD,EAAC,OAAO,uBAAQ,OAAO,0BAAU;AAAA,YACjC,EAAC,OAAO,uBAAQ,OAAO,0BAAU;AAAA,YACjC,EAAC,OAAO,qDAAa,OAAO,wDAAe;AAAA,YAC3C,EAAC,OAAO,mCAAU,OAAO,sCAAY;AAAA,YACrC,EAAC,OAAO,uBAAQ,OAAO,0BAAU;AAAA,UACnC;AAEA,cAAI;AACF,iBAAK,MAAM,aAAa,QAAQ,YAAY,KAAK;AAAA,UACnD,SAASF,IAAG;AACV,oBAAQ,MAAM,kCAAkCA,EAAC;AAAA,UACnD;AACA,eAAK,SAAS,KAAK,WAAW,YAAY;AAC1C,eAAK,cAAc,KAAK,eAAe;AACvC,eAAK,eAAe,KAAK,gBAAgB;AACzC,eAAK,gBAAgB,KAAK,iBAAiB;AAC3C,eAAK,oBAAoB;AACzB,eAAK,kBAAkB,KAAK,mBAAmB;AAC/C,eAAK,mBAAmB;AAAA,QAC1B;AAAA,QAEA,WAAW,cAAa;AACtB,cAAI,QAAQG,mBAAkB;AAAA,YAC1B;AAAA,YACA,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AAAA,UACT;AACA,gBAAM,OAAOA,mBAAkB,UAAU,OAAO,KAAK,0BAA0B;AAE/E,eAAK,cAAc,IAAI;AACvB,iBAAO,IAAIA,mBAAkB,IAAI;AAAA,QACnC;AAAA,QAEA,kBAAkB,YAAY;AAC5B,gBAAM,UAAU,WAAW,iBAAiB,UAAU;AACtD,gBAAM,aAAa;AACnB,kBAAQ,QAAQ,CAAC,WAAW;AAC1B,mBAAO,iBAAiB,SAAS,SAASH,IAAG;AAC3C,oBAAMI,OAAMJ,GAAE,cAAc,QAAQ;AACpC,kBAAII;AAAK,2BAAW,OAAOA,IAAG,EAAE;AAAA,YAClC,CAAC;AAAA,UACH,CAAC;AAAA,QACH;AAAA,QAGA,WAAWJ,IAAG;AACZ,UAAAA,GAAE,eAAe;AACjB,cAAI,CAAC,KAAK,eAAe;AAAG;AAC5B,gBAAM,SAASA,GAAE;AACjB,iBAAO,aAAa,qBAAqB,IAAI;AAC7C,iBAAO,WAAW;AAClB,gBAAM,aAAa;AACnB,gBAAM,UAAU,KAAK;AACrB,mBAAS,kBAAkB;AACzB,mBAAO,WAAW;AAClB,mBAAO,gBAAgB,mBAAmB;AAC1C,yBAAa,WAAW,YAAY;AACpC,qBAAS,oBAAoB,oBAAoB,eAAe;AAChE,gBAAI,SAAS;AAEX,qBAAO,cAAc,IAAI,YAAY,aAAa,CAAC;AAAA,YAErD;AAAA,UACF;AACA,qBAAW,WAAW;AACpB,uBAAW,yBAAyB,cAAc;AAClD,qBAAS,iBAAiB,oBAAoB,eAAe;AAAA,UAC/D,GAAG,KAAK,EAAC,MAAM,KAAI,CAAC;AAAA,QACtB;AAAA,QAEA,2BAA2BA,IAAG;AAC5B,4BAAMA,GAAE,eAAe;AAAA,YACrB,UAAU,SAAS;AAAA,YACnB,SAAS,KAAK,gBAAgB;AAAA,YAC9B,aAAa;AAAA,YACb,SAAS;AAAA,YACT,WAAW;AAAA,YACX,cAAc;AAAA,YACd,SAAS,UAAU;AACjB,uBAAS,QAAQ;AAAA,YACnB;AAAA,UACF,CAAC;AAAA,QACH;AAAA,QAEA,sBAAsBA,IAAG;AACvB,UAAAA,GAAE,eAAe;AACjB,gBAAM,SAASA,GAAE;AACjB,gBAAM,aAAa,OAAO,QAAQ;AAClC,gBAAM,SAAS,KAAK,QAAQ,KAAK,UAAU;AAC3C,iBAAO,UAAU,OAAO,MAAM;AAC9B,iBAAO,UAAU,OAAO,MAAM;AAC9B,eAAK,4BAA4B;AAAA,QACnC;AAAA,QAEA,8BAA8B;AAC5B,gBAAM,WAAW,CAAC,KAAK,mBAAmB,KAAK,gBAAgB;AAC/D,cAAI,SAAS,KAAK,CAAAK,aAAWA,SAAQ,UAAU,SAAS,MAAM,CAAC,GAAG;AAChE,iBAAK,mCAAmC,UAAU,IAAI,MAAM;AAAA,UAC9D;AACA,cAAI,SAAS,MAAM,CAAAA,aAAW,CAACA,SAAQ,UAAU,SAAS,MAAM,CAAC,GAAG;AAClE,iBAAK,mCAAmC,UAAU,OAAO,MAAM;AAAA,UACjE;AAAA,QACF;AAAA;AAAA,QAoDA,mBAAmB,YAAY;AAC7B,gBAAMC,OAAM,WAAW,MAAM;AAC7B,iBAAOA,KAAI,SAAS;AAAA,QACtB;AAAA;AAAA,QAGC,kBAAkBC,gBAAeC,UAAS;AACzC,gBAAM,WAAW,KAAK,yBAAyB,cAAcD,cAAa;AAC1E,mBAAS,QAAQC;AAAA,QACnB;AAAA,QAEC,cAAc,YAAY;AACzB,gBAAMC,YAAW,KAAK,mBAAmB,UAAU;AACnD,eAAK,kBAAkB,qCAAqCA,SAAQ;AAAA,QACtE;AAAA,QAEA,kBAAkB;AAChB,gBAAMC,SAAQ,YAAY,QAAQ;AAClC,gBAAM,aAAa;AACnB,gBAAM,gBAAgB;AAAA,YACpB,eAAe,CAAC,OAAMV,OAAM;AAC1B,oBAAM,YAAW,MAAM;AACvB,yBAAW,OAAO,mBAAmB,SAAS;AAAA,YAChD;AAAA,YACA,OAAOU;AAAA,UACT;AACA,iBAAO,IAAI,yCAAO,aAAa;AAAA,QACjC;AAAA,QAEA,cAAc,WAAW;AACvB,eAAK,SAAS,2BAAkB,cAAc,UAAU,SAAS,CAAC,GAAG,IAAK;AAAA,QAC5E;AAAA,QACA,gBAAgB,WAAW;AACzB,gBAAM,MAAM,UAAU,cAAc,8BAA8B;AAClE,eAAK,aAAa,cAAc,OAAO,KAAI;AAAA,YACzC,aAAa,IAAE,MAAK;AAAA,YACpB,UAAU;AAAA,YACV,WAAU;AAAA,YACV,mBAAmB;AAAA,UACrB,CAAC;AAAA,QACH;AAAA,QAEA,eAAe,WAAW;AACxB,gBAAM,MAAM,UAAU,cAAc,6BAA6B;AACjE,eAAK,YAAY,cAAc,OAAO,KAAK;AAAA,YACzC,mBAAmB,CAAC,iBAAiB;AAAA,YACrC,WAAU;AAAA,YACV,UAAU;AAAA,YACV,aAAa,IAAE,MAAK;AAAA,UACtB,CAAC;AAAA,QACH;AAAA,QACA,sBAAsB;AACpB,gBAAM,OAAO,YAAY,QAAQ;AACjC,gBAAM,aAAa;AAEnB,qBAAW,OAAO,0BAA0B,SAAS,MAAM;AAC3D,sBAAY,GAAG,uBAAuB,WAAW;AAC/C,kBAAM,eAAe,YAAY,QAAQ;AACzC,uBAAW,OAAO,0BAA0B,iBAAiB,MAAM;AAAA,UACrE,CAAC;AAAA,QACH;AAAA,QAEA,qBAAoB;AAClB,mBAAS,iBAAiB,6BAA6B,KAAK,yBAAyB,KAAK,IAAI,CAAC;AAC/F,mBAAS,iBAAiB,wBAAwB,KAAK,qBAAqB,KAAK,IAAI,CAAC;AAAA,QACxF;AAAA,QAEA,uBAAsB;AACpB,mBAAS,oBAAoB,6BAA6B,KAAK,wBAAwB;AACvF,mBAAS,oBAAoB,wBAAwB,KAAK,oBAAoB;AAAA,QAChF;AAAA,QAEA,yBAAyBV,IAAG;AAC1B,kBAAQ,IAAI,0BAA0BA,GAAE,MAAM;AAC9C,eAAK,yBAAyB,aAAa,qBAAqB,IAAI;AAAA,QAEtE;AAAA,QAEA,qBAAqBA,IAAG;AACtB,kBAAQ,IAAI,0BAA0BA,GAAE,MAAM;AAC9C,eAAK,yBAAyB,gBAAgB,mBAAmB;AAAA,QAEnE;AAAA,QAGA,iBAAiB;AAEf,cAAI,KAAK,IAAI,SAAS,EAAE,WAAW,GAAG;AACpC,iBAAK,kBAAkB,UAAU,IAAI,eAAe;AACpD,iBAAK,kBAAkB,UAAU,OAAO,iBAAiB;AACzD,iBAAK,kBAAkB,aAAa,SAAS,sBAAsB;AACnE,kBAAM,UAAU,IAAI,OAAO,UAAU,QAAQ,KAAK,iBAAiB;AACnE,oBAAQ,KAAK;AACb,kBAAM,aAAa;AACnB,uBAAW,WAAW;AACpB,sBAAQ,KAAK;AACb,sBAAQ,QAAQ;AAChB,yBAAW,kBAAkB,UAAU,OAAO,eAAe;AAC7D,yBAAW,kBAAkB,UAAU,IAAI,iBAAiB;AAC5D,yBAAW,kBAAkB,gBAAgB,OAAO;AAAA,YACtD,GAAG,GAAI;AACP,mBAAO;AAAA,UACT;AACA,iBAAO;AAAA,QACT;AAAA,MAEF;AA/RE,oBADK,2CACE,UAAS,EAAE,SAAS,QAAQ;AACnC,oBAFK,2CAEE,WAAU;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA;AAAA;;;AClBF,MAEO;AAFP;AAAA;AAAA;AAAA;AAEA,MAAO,6BAAP,cAA6B,WAAW;AAAA,QAItC,UAAU;AACR,eAAK,OAAO;AAAA,QACd;AAAA,QAEA,aAAa;AACX,eAAK,QAAQ;AAAA,QACf;AAAA,QAEA,SAAS;AACL,cAAI,OAAO,OAAO,KAAK,sBAAsB;AAE7C,iBAAO,kBAAkB;AAAA,QAC7B;AAAA,QAEA,UAAU;AAAA,QACV;AAAA,MAEF;AAnBE,oBAFK,4BAEE,WAAU,CAAC,kBAAkB;AAAA;AAAA;;;ACJtC,MAEO;AAFP;AAAA;AAAA;AAAA;AAEA,MAAO,8BAAP,cAA6B,WAAW;AAAA,QAEtC,UAAU;AACR,eAAK,OAAO;AAAA,QACd;AAAA,QAEA,aAAa;AACX,eAAK,QAAQ;AAAA,QACf;AAAA,QAEA,SAAS;AACP,cAAI,KAAK,qBAAqB;AAC5B,kBAAM,aAAa,KAAK;AACxB,kBAAM,gBAAgB,IAAI,SAAS,UAAU;AAAA,UAC/C;AAAA,QACF;AAAA,QAEA,UAAU;AAAA,QACV;AAAA,MACF;AAlBE,oBADK,6BACE,WAAU,CAAE,eAAgB;AAAA;AAAA;;;ACHrC;;OAAA,SAAA,iCAAAW,OAAA,SAAA;AACA,YAAA,OAAA,YAAA,YAAA,OAAA,WAAA;AACA,iBAAA,UAAA,QAAA;iBACA,OAAA,WAAA,cAAA,OAAA;AACA,iBAAA,CAAA,GAAA,OAAA;iBACA,OAAA,YAAA;AACA,kBAAA,YAAA,IAAA,QAAA;;AAEA,UAAAA,MAAA,YAAA,IAAA,QAAA;MACA,GAAC,QAAA,WAAA;AACD;;UAAA,SAAA,SAAA;ACTA,gBAAA,mBAAA,CAAA;AAGA,qBAAA,oBAAA,UAAA;AAGA,kBAAA,iBAAA,QAAA,GAAA;AACA,uBAAA,iBAAA,QAAA,EAAA;cACA;AAEA,kBAAAC,UAAA,iBAAA,QAAA,IAAA;;gBACA,GAAA;;gBACA,GAAA;;gBACA,SAAA,CAAA;;cACA;AAGA,sBAAA,QAAA,EAAA,KAAAA,QAAA,SAAAA,SAAAA,QAAA,SAAA,mBAAA;AAGA,cAAAA,QAAA,IAAA;AAGA,qBAAAA,QAAA;YACA;AAIA,gCAAA,IAAA;AAGA,gCAAA,IAAA;AAGA,gCAAA,IAAA,SAAAC,UAAAC,OAAA,QAAA;AACA,kBAAA,CAAA,oBAAA,EAAAD,UAAAC,KAAA,GAAA;AACA,uBAAA,eAAAD,UAAAC,OAAA,EAA0C,YAAA,MAAA,KAAA,OAAA,CAAgC;cAC1E;YACA;AAGA,gCAAA,IAAA,SAAAD,UAAA;AACA,kBAAA,OAAA,WAAA,eAAA,OAAA,aAAA;AACA,uBAAA,eAAAA,UAAA,OAAA,aAAA,EAAwD,OAAA,SAAA,CAAkB;cAC1E;AACA,qBAAA,eAAAA,UAAA,cAAA,EAAiD,OAAA,KAAA,CAAc;YAC/D;AAOA,gCAAA,IAAA,SAAA,OAAA,MAAA;AACA,kBAAA,OAAA;AAAA,wBAAA,oBAAA,KAAA;AACA,kBAAA,OAAA;AAAA,uBAAA;AACA,kBAAA,OAAA,KAAA,OAAA,UAAA,YAAA,SAAA,MAAA;AAAA,uBAAA;AACA,kBAAA,KAAA,uBAAA,OAAA,IAAA;AACA,kCAAA,EAAA,EAAA;AACA,qBAAA,eAAA,IAAA,WAAA,EAAyC,YAAA,MAAA,MAAA,CAAiC;AAC1E,kBAAA,OAAA,KAAA,OAAA,SAAA;AAAA,yBAAA,OAAA;AAAA,sCAAA,EAAA,IAAA,KAAA,SAAAE,MAAA;AAAgH,2BAAA,MAAAA,IAAA;kBAAmB,EAAE,KAAA,MAAA,GAAA,CAAA;AACrI,qBAAA;YACA;AAGA,gCAAA,IAAA,SAAAH,SAAA;AACA,kBAAA,SAAAA,WAAAA,QAAA;;gBACA,SAAA,aAAA;AAA2B,yBAAAA,QAAA,SAAA;gBAA0B;;;gBACrD,SAAA,mBAAA;AAAiC,yBAAAA;gBAAe;;AAChD,kCAAA,EAAA,QAAA,KAAA,MAAA;AACA,qBAAA;YACA;AAGA,gCAAA,IAAA,SAAAI,SAAA,UAAA;AAAsD,qBAAA,OAAA,UAAA,eAAA,KAAAA,SAAA,QAAA;YAA+D;AAGrH,gCAAA,IAAA;AAIA,mBAAA,oBAAA,oBAAA,IAAA,GAAA;;;;;AClFA,uBAAA,uBAAA,KAAA;AACA,uBAAA,OAAA,IAAA,aAAA,MAAA;kBACA,WAAA;gBACA;cACA;AAEA,cAAAJ,QAAA,UAAA;;;;;ACNA,cAAAA,QAAA,UAAiB,oBAAQ,GAA4C;;;;;;ACArE,kCAAA,EAAA,mBAAA;AAAA,kCAAA,EAAA,qBAAA,aAAA,WAAA;AAAA,uBAAA;cAAA,CAAA;AAAA,kCAAA,EAAA,qBAAA,YAAA,WAAA;AAAA,uBAAAK;cAAA,CAAA;AAAA,kCAAA,EAAA,qBAAA,UAAA,WAAA;AAAA,uBAAAC;cAAA,CAAA;AAAA,kCAAA,EAAA,qBAAA,cAAA,WAAA;AAAA,uBAAA;cAAA,CAAA;AAAA,kCAAA,EAAA,qBAAA,WAAA,WAAA;AAAA,uBAAA;cAAA,CAAA;AAAA,kCAAA,EAAA,qBAAA,cAAA,WAAA;AAAA,uBAAA;cAAA,CAAA;AAAA,kCAAA,EAAA,qBAAA,aAAA,WAAA;AAAA,uBAAA;cAAA,CAAA;AAAA,kCAAA,EAAA,qBAAA,eAAA,WAAA;AAAA,uBAAA;cAAA,CAAA;AAAA,kCAAA,EAAA,qBAAA,mBAAA,WAAA;AAAA,uBAAA;cAAA,CAAA;AAAA,kCAAA,EAAA,qBAAA,gBAAA,WAAA;AAAA,uBAAA;cAAA,CAAA;AAAA,kCAAA,EAAA,qBAAA,YAAA,WAAA;AAAA,uBAAA;cAAA,CAAA;AAAA,kCAAA,EAAA,qBAAA,UAAA,WAAA;AAAA,uBAAA;cAAA,CAAA;AAAA,kCAAA,EAAA,qBAAA,YAAA,WAAA;AAAA,uBAAA;cAAA,CAAA;AAAA,kCAAA,EAAA,qBAAA,kBAAA,WAAA;AAAA,uBAAA;cAAA,CAAA;AAAA,kCAAA,EAAA,qBAAA,iBAAA,WAAA;AAAA,uBAAA;cAAA,CAAA;AAAA,kCAAA,EAAA,qBAAA,WAAA,WAAA;AAAA,uBAAA;cAAA,CAAA;AAAA,kCAAA,EAAA,qBAAA,oBAAA,WAAA;AAAA,uBAAA;cAAA,CAAA;AAAA,kCAAA,EAAA,qBAAA,oBAAA,WAAA;AAAA,uBAAA;cAAA,CAAA;AAAA,kCAAA,EAAA,qBAAA,iBAAA,WAAA;AAAA,uBAAA;cAAA,CAAA;AAAA,kCAAA,EAAA,qBAAA,wBAAA,WAAA;AAAA,uBAAA;cAAA,CAAA;AAAA,kCAAA,EAAA,qBAAA,gBAAA,WAAA;AAAA,uBAAA;cAAA,CAAA;AAAA,kCAAA,EAAA,qBAAA,mBAAA,WAAA;AAAA,uBAAA;cAAA,CAAA;AAAA,kCAAA,EAAA,qBAAA,0BAAA,WAAA;AAAA,uBAAAC;cAAA,CAAA;AAAA,kCAAA,EAAA,qBAAA,0BAAA,WAAA;AAAA,uBAAAC;cAAA,CAAA;AAgBA,kBAAA,gBAAA,SAAA,GAAAC,IAAA;AACA,gCAAA,OAAA,kBACA,EAAU,WAAA,CAAA,EAAA,aAAgB,SAAA,SAAAC,IAAAD,IAAA;AAAsC,kBAAAC,GAAA,YAAAD;gBAAiB,KACjF,SAAAC,IAAAD,IAAA;AAAyB,2BAAA,KAAAA;AAAA,wBAAA,OAAA,UAAA,eAAA,KAAAA,IAAA,CAAA;AAAA,sBAAAC,GAAA,CAAA,IAAAD,GAAA,CAAA;gBAA8E;AACvG,uBAAA,cAAA,GAAAA,EAAA;cACA;AAEO,uBAAA,UAAA,GAAAA,IAAA;AACP,oBAAA,OAAAA,OAAA,cAAAA,OAAA;AACA,wBAAA,IAAA,UAAA,yBAAA,OAAAA,EAAA,IAAA,+BAAA;AACA,8BAAA,GAAAA,EAAA;AACA,yBAAA,KAAA;AAAmB,uBAAA,cAAA;gBAAsB;AACzC,kBAAA,YAAAA,OAAA,OAAA,OAAA,OAAAA,EAAA,KAAA,GAAA,YAAAA,GAAA,WAAA,IAAA,GAAA;cACA;AAEO,kBAAAJ,YAAA,WAAA;AACP,gBAAAA,YAAA,OAAA,UAAA,SAAAA,UAAAM,IAAA;AACA,2BAAA,GAAA,IAAA,GAAAC,KAAA,UAAA,QAAgD,IAAAA,IAAO,KAAA;AACvD,wBAAA,UAAA,CAAA;AACA,6BAAA,KAAA;AAAA,0BAAA,OAAA,UAAA,eAAA,KAAA,GAAA,CAAA;AAAA,wBAAAD,GAAA,CAAA,IAAA,EAAA,CAAA;kBACA;AACA,yBAAAA;gBACA;AACA,uBAAAN,UAAA,MAAA,MAAA,SAAA;cACA;AAEO,uBAAAC,QAAA,GAAAO,IAAA;AACP,oBAAAF,KAAA,CAAA;AACA,yBAAA,KAAA;AAAA,sBAAA,OAAA,UAAA,eAAA,KAAA,GAAA,CAAA,KAAAE,GAAA,QAAA,CAAA,IAAA;AACA,oBAAAF,GAAA,CAAA,IAAA,EAAA,CAAA;AACA,oBAAA,KAAA,QAAA,OAAA,OAAA,0BAAA;AACA,2BAAA,IAAA,GAAA,IAAA,OAAA,sBAAA,CAAA,GAA4D,IAAA,EAAA,QAAc,KAAA;AAC1E,wBAAAE,GAAA,QAAA,EAAA,CAAA,CAAA,IAAA,KAAA,OAAA,UAAA,qBAAA,KAAA,GAAA,EAAA,CAAA,CAAA;AACA,sBAAAF,GAAA,EAAA,CAAA,CAAA,IAAA,EAAA,EAAA,CAAA,CAAA;kBACA;AACA,uBAAAA;cACA;AAEO,uBAAA,WAAA,YAAA,QAAA,KAAA,MAAA;AACP,oBAAA,IAAA,UAAA,QAAAG,KAAA,IAAA,IAAA,SAAA,SAAA,OAAA,OAAA,OAAA,yBAAA,QAAA,GAAA,IAAA,MAAA;AACA,oBAAA,OAAA,YAAA,YAAA,OAAA,QAAA,aAAA;AAAA,kBAAAA,KAAA,QAAA,SAAA,YAAA,QAAA,KAAA,IAAA;;AACA,2BAAA,IAAA,WAAA,SAAA,GAA4C,KAAA,GAAQ;AAAA,wBAAA,IAAA,WAAA,CAAA;AAAA,sBAAAA,MAAA,IAAA,IAAA,EAAAA,EAAA,IAAA,IAAA,IAAA,EAAA,QAAA,KAAAA,EAAA,IAAA,EAAA,QAAA,GAAA,MAAAA;AACpD,uBAAA,IAAA,KAAAA,MAAA,OAAA,eAAA,QAAA,KAAAA,EAAA,GAAAA;cACA;AAEO,uBAAA,QAAA,YAAA,WAAA;AACP,uBAAA,SAAA,QAAA,KAAA;AAAmC,4BAAA,QAAA,KAAA,UAAA;gBAAoC;cACvE;AAEO,uBAAA,WAAA,aAAA,eAAA;AACP,oBAAA,OAAA,YAAA,YAAA,OAAA,QAAA,aAAA;AAAA,yBAAA,QAAA,SAAA,aAAA,aAAA;cACA;AAEO,uBAAA,UAAA,SAAA,YAAAC,IAAA,WAAA;AACP,yBAAA,MAAA,OAAA;AAA2B,yBAAA,iBAAAA,KAAA,QAAA,IAAAA,GAAA,SAAA,SAAA;AAA+D,4BAAA,KAAA;kBAAgB,CAAE;gBAAE;AAC9G,uBAAA,KAAAA,OAAAA,KAAA,UAAA,SAAA,SAAA,QAAA;AACA,2BAAA,UAAA,OAAA;AAAmC,wBAAA;AAAM,2BAAA,UAAA,KAAA,KAAA,CAAA;oBAA6B,SAAEF,IAAA;AAAY,6BAAAA,EAAA;oBAAW;kBAAE;AACjG,2BAAA,SAAA,OAAA;AAAkC,wBAAA;AAAM,2BAAA,UAAA,OAAA,EAAA,KAAA,CAAA;oBAAiC,SAAEA,IAAA;AAAY,6BAAAA,EAAA;oBAAW;kBAAE;AACpG,2BAAA,KAAA,QAAA;AAA+B,2BAAA,OAAA,QAAA,OAAA,KAAA,IAAA,MAAA,OAAA,KAAA,EAAA,KAAA,WAAA,QAAA;kBAAqF;AACpH,wBAAA,YAAA,UAAA,MAAA,SAAA,cAAA,CAAA,CAAA,GAAA,KAAA,CAAA;gBACA,CAAK;cACL;AAEO,uBAAA,YAAA,SAAA,MAAA;AACP,oBAAA,IAAA,EAAa,OAAA,GAAA,MAAA,WAAA;AAA6B,sBAAAF,GAAA,CAAA,IAAA;AAAA,0BAAAA,GAAA,CAAA;AAA0B,yBAAAA,GAAA,CAAA;gBAAa,GAAE,MAAA,CAAA,GAAA,KAAA,CAAA,EAAA,GAAqBK,IAAAC,IAAAN,IAAA;AACxG,uBAAA,IAAA,EAAgB,MAAA,KAAA,CAAA,GAAA,SAAA,KAAA,CAAA,GAAA,UAAA,KAAA,CAAA,EAAA,GAAqD,OAAA,WAAA,eAAA,EAAA,OAAA,QAAA,IAAA,WAAA;AAAoE,yBAAA;gBAAa,IAAE;AACxJ,yBAAA,KAAAC,IAAA;AAAsB,yBAAA,SAAAM,IAAA;AAAsB,2BAAA,KAAA,CAAAN,IAAAM,EAAA,CAAA;kBAAqB;gBAAG;AACpE,yBAAA,KAAA,IAAA;AACA,sBAAAF;AAAA,0BAAA,IAAA,UAAA,iCAAA;AACA,yBAAA;AAAA,wBAAA;AACA,0BAAAA,KAAA,GAAAC,OAAAN,KAAA,GAAA,CAAA,IAAA,IAAAM,GAAA,QAAA,IAAA,GAAA,CAAA,IAAAA,GAAA,OAAA,OAAAN,KAAAM,GAAA,QAAA,MAAAN,GAAA,KAAAM,EAAA,GAAA,KAAAA,GAAA,SAAA,EAAAN,KAAAA,GAAA,KAAAM,IAAA,GAAA,CAAA,CAAA,GAAA;AAAA,+BAAAN;AACA,0BAAAM,KAAA,GAAAN;AAAA,6BAAA,CAAA,GAAA,CAAA,IAAA,GAAAA,GAAA,KAAA;AACA,8BAAA,GAAA,CAAA,GAAA;wBACA,KAAA;wBAAA,KAAA;AAAA,0BAAAA,KAAA;AAAuC;wBACvC,KAAA;AAAA,4BAAA;AAAkC,iCAAA,EAAS,OAAA,GAAA,CAAA,GAAA,MAAA,MAAA;wBAC3C,KAAA;AAAA,4BAAA;AAAkC,0BAAAM,KAAA,GAAA,CAAA;AAAW,+BAAA,CAAA,CAAA;AAAU;wBACvD,KAAA;AAAA,+BAAA,EAAA,IAAA,IAAA;AAAyC,4BAAA,KAAA,IAAA;AAAc;wBACvD;AACA,8BAAA,EAAAN,KAAA,EAAA,MAAAA,KAAAA,GAAA,SAAA,KAAAA,GAAAA,GAAA,SAAA,CAAA,OAAA,GAAA,CAAA,MAAA,KAAA,GAAA,CAAA,MAAA,IAAA;AAA6G,gCAAA;AAAO;0BAAU;AAC9H,8BAAA,GAAA,CAAA,MAAA,MAAA,CAAAA,MAAA,GAAA,CAAA,IAAAA,GAAA,CAAA,KAAA,GAAA,CAAA,IAAAA,GAAA,CAAA,IAAA;AAAgF,8BAAA,QAAA,GAAA,CAAA;AAAiB;0BAAO;AACxG,8BAAA,GAAA,CAAA,MAAA,KAAA,EAAA,QAAAA,GAAA,CAAA,GAAA;AAAwD,8BAAA,QAAAA,GAAA,CAAA;AAAgB,4BAAAA,KAAA;AAAQ;0BAAO;AACvF,8BAAAA,MAAA,EAAA,QAAAA,GAAA,CAAA,GAAA;AAA8C,8BAAA,QAAAA,GAAA,CAAA;AAAgB,8BAAA,IAAA,KAAA,EAAA;AAAgB;0BAAO;AACrF,8BAAAA,GAAA,CAAA;AAAA,8BAAA,IAAA,IAAA;AACA,4BAAA,KAAA,IAAA;AAAiC;sBACjC;AACA,2BAAA,KAAA,KAAA,SAAA,CAAA;oBACA,SAASE,IAAA;AAAY,2BAAA,CAAA,GAAAA,EAAA;AAAa,sBAAAI,KAAA;oBAAO,UAAE;AAAU,sBAAAD,KAAAL,KAAA;oBAAW;AAChE,sBAAA,GAAA,CAAA,IAAA;AAAA,0BAAA,GAAA,CAAA;AAAmC,yBAAA,EAAS,OAAA,GAAA,CAAA,IAAA,GAAA,CAAA,IAAA,QAAA,MAAA,KAAA;gBAC5C;cACA;AAEO,kBAAA,kBAAA,OAAA,SAAA,SAAAQ,IAAA,GAAAC,IAAAC,KAAA;AACP,oBAAAA,QAAA;AAAA,kBAAAA,MAAAD;AACA,uBAAA,eAAAD,IAAAE,KAAA,EAAkC,YAAA,MAAA,KAAA,WAAA;AAAoC,yBAAA,EAAAD,EAAA;gBAAa,EAAE,CAAE;cACvF,IAAC,SAAAD,IAAA,GAAAC,IAAAC,KAAA;AACD,oBAAAA,QAAA;AAAA,kBAAAA,MAAAD;AACA,gBAAAD,GAAAE,GAAA,IAAA,EAAAD,EAAA;cACA;AAEO,uBAAA,aAAA,GAAAD,IAAA;AACP,yBAAA,KAAA;AAAA,sBAAA,MAAA,aAAA,CAAA,OAAA,UAAA,eAAA,KAAAA,IAAA,CAAA;AAAA,oCAAAA,IAAA,GAAA,CAAA;cACA;AAEO,uBAAA,SAAAA,IAAA;AACP,oBAAA,IAAA,OAAA,WAAA,cAAA,OAAA,UAAA,IAAA,KAAAA,GAAA,CAAA,GAAA,IAAA;AACA,oBAAA;AAAA,yBAAA,EAAA,KAAAA,EAAA;AACA,oBAAAA,MAAA,OAAAA,GAAA,WAAA;AAAA,yBAAA;oBACA,MAAA,WAAA;AACA,0BAAAA,MAAA,KAAAA,GAAA;AAAA,wBAAAA,KAAA;AACA,6BAAA,EAAoB,OAAAA,MAAAA,GAAA,GAAA,GAAA,MAAA,CAAAA,GAAA;oBACpB;kBACA;AACA,sBAAA,IAAA,UAAA,IAAA,4BAAA,iCAAA;cACA;AAEO,uBAAA,OAAAA,IAAAP,IAAA;AACP,oBAAA,IAAA,OAAA,WAAA,cAAAO,GAAA,OAAA,QAAA;AACA,oBAAA,CAAA;AAAA,yBAAAA;AACA,oBAAA,IAAA,EAAA,KAAAA,EAAA,GAAAL,IAAAQ,MAAA,CAAA,GAAAT;AACA,oBAAA;AACA,0BAAAD,OAAA,UAAAA,OAAA,MAAA,EAAAE,KAAA,EAAA,KAAA,GAAA;AAAA,oBAAAQ,IAAA,KAAAR,GAAA,KAAA;gBACA,SACAS,QAAA;AAAmB,kBAAAV,KAAA,EAAM,OAAAU,OAAA;gBAAgB,UACzC;AACA,sBAAA;AACA,wBAAAT,MAAA,CAAAA,GAAA,SAAA,IAAA,EAAA,QAAA;AAAA,wBAAA,KAAA,CAAA;kBACA,UACA;AAAiB,wBAAAD;AAAA,4BAAAA,GAAA;kBAAsB;gBACvC;AACA,uBAAAS;cACA;AAGO,uBAAA,WAAA;AACP,yBAAAA,MAAA,CAAA,GAAA,IAAA,GAA4B,IAAA,UAAA,QAAsB;AAClD,kBAAAA,MAAAA,IAAA,OAAA,OAAA,UAAA,CAAA,CAAA,CAAA;AACA,uBAAAA;cACA;AAGO,uBAAA,iBAAA;AACP,yBAAA,IAAA,GAAA,IAAA,GAAAE,MAAA,UAAA,QAAiD,IAAAA,KAAQ;AAAA,uBAAA,UAAA,CAAA,EAAA;AACzD,yBAAAV,KAAA,MAAA,CAAA,GAAAM,KAAA,GAAA,IAAA,GAAwC,IAAAI,KAAQ;AAChD,2BAAA,IAAA,UAAA,CAAA,GAAAC,KAAA,GAAAC,MAAA,EAAA,QAAwDD,KAAAC,KAAQD,MAAAL;AAChE,oBAAAN,GAAAM,EAAA,IAAA,EAAAK,EAAA;AACA,uBAAAX;cACA;AAEO,uBAAA,cAAAa,KAAA,MAAA;AACP,yBAAA,IAAA,GAAAH,MAAA,KAAA,QAAAC,KAAAE,IAAA,QAAoD,IAAAH,KAAQ,KAAAC;AAC5D,kBAAAE,IAAAF,EAAA,IAAA,KAAA,CAAA;AACA,uBAAAE;cACA;AAEO,uBAAA,QAAAT,IAAA;AACP,uBAAA,gBAAA,WAAA,KAAA,IAAAA,IAAA,QAAA,IAAA,QAAAA,EAAA;cACA;AAEO,uBAAA,iBAAA,SAAA,YAAA,WAAA;AACP,oBAAA,CAAA,OAAA;AAAA,wBAAA,IAAA,UAAA,sCAAA;AACA,oBAAA,IAAA,UAAA,MAAA,SAAA,cAAA,CAAA,CAAA,GAAA,GAAAU,KAAA,CAAA;AACA,uBAAA,IAAA,CAAA,GAAiB,KAAA,MAAA,GAAA,KAAA,OAAA,GAAA,KAAA,QAAA,GAAA,EAAA,OAAA,aAAA,IAAA,WAAA;AAAsF,yBAAA;gBAAa,GAAE;AACtH,yBAAA,KAAAhB,IAAA;AAAsB,sBAAA,EAAAA,EAAA;AAAA,sBAAAA,EAAA,IAAA,SAAAM,IAAA;AAAgC,6BAAA,IAAA,QAAA,SAAA,GAAAT,IAAA;AAAqC,wBAAAmB,GAAA,KAAA,CAAAhB,IAAAM,IAAA,GAAAT,EAAA,CAAA,IAAA,KAAA,OAAAG,IAAAM,EAAA;sBAA0C,CAAE;oBAAE;gBAAG;AAC5I,yBAAA,OAAAN,IAAAM,IAAA;AAA2B,sBAAA;AAAM,yBAAA,EAAAN,EAAA,EAAAM,EAAA,CAAA;kBAAe,SAAEL,IAAA;AAAY,2BAAAe,GAAA,CAAA,EAAA,CAAA,GAAAf,EAAA;kBAAoB;gBAAE;AACpF,yBAAA,KAAAC,IAAA;AAAsB,kBAAAA,GAAA,iBAAA,UAAA,QAAA,QAAAA,GAAA,MAAA,CAAA,EAAA,KAAA,SAAA,MAAA,IAAA,OAAAc,GAAA,CAAA,EAAA,CAAA,GAAAd,EAAA;gBAAoG;AAC1H,yBAAA,QAAA,OAAA;AAA6B,yBAAA,QAAA,KAAA;gBAAuB;AACpD,yBAAA,OAAA,OAAA;AAA4B,yBAAA,SAAA,KAAA;gBAAwB;AACpD,yBAAA,OAAAE,IAAAE,IAAA;AAA2B,sBAAAF,GAAAE,EAAA,GAAAU,GAAA,MAAA,GAAAA,GAAA;AAAA,2BAAAA,GAAA,CAAA,EAAA,CAAA,GAAAA,GAAA,CAAA,EAAA,CAAA,CAAA;gBAAyD;cACpF;AAEO,uBAAA,iBAAAT,IAAA;AACP,oBAAA,GAAA;AACA,uBAAA,IAAA,CAAA,GAAiB,KAAA,MAAA,GAAA,KAAA,SAAA,SAAAN,IAAA;AAA4C,wBAAAA;gBAAS,CAAE,GAAA,KAAA,QAAA,GAAA,EAAA,OAAA,QAAA,IAAA,WAAA;AAAqD,yBAAA;gBAAa,GAAE;AAC5I,yBAAA,KAAAD,IAAAI,IAAA;AAAyB,oBAAAJ,EAAA,IAAAO,GAAAP,EAAA,IAAA,SAAAM,IAAA;AAA6B,4BAAA,IAAA,CAAA,KAAA,EAAoB,OAAA,QAAAC,GAAAP,EAAA,EAAAM,EAAA,CAAA,GAAA,MAAAN,OAAA,SAAA,IAAgDI,KAAAA,GAAAE,EAAA,IAAAA;kBAAgB,IAAEF;gBAAK;cACjJ;AAEO,uBAAA,cAAAG,IAAA;AACP,oBAAA,CAAA,OAAA;AAAA,wBAAA,IAAA,UAAA,sCAAA;AACA,oBAAA,IAAAA,GAAA,OAAA,aAAA,GAAA;AACA,uBAAA,IAAA,EAAA,KAAAA,EAAA,KAAAA,KAAA,OAAA,aAAA,aAAA,SAAAA,EAAA,IAAAA,GAAA,OAAA,QAAA,EAAA,GAAA,IAAA,CAAA,GAA2G,KAAA,MAAA,GAAA,KAAA,OAAA,GAAA,KAAA,QAAA,GAAA,EAAA,OAAA,aAAA,IAAA,WAAA;AAAsF,yBAAA;gBAAa,GAAE;AAChN,yBAAA,KAAAP,IAAA;AAAsB,oBAAAA,EAAA,IAAAO,GAAAP,EAAA,KAAA,SAAAM,IAAA;AAA8B,2BAAA,IAAA,QAAA,SAAA,SAAA,QAAA;AAAgD,sBAAAA,KAAAC,GAAAP,EAAA,EAAAM,EAAA,GAAA,OAAA,SAAA,QAAAA,GAAA,MAAAA,GAAA,KAAA;oBAAuD,CAAE;kBAAE;gBAAG;AAClK,yBAAA,OAAA,SAAA,QAAA,GAAAA,IAAA;AAA4C,0BAAA,QAAAA,EAAA,EAAA,KAAA,SAAAA,IAAA;AAAsC,4BAAA,EAAU,OAAAA,IAAA,MAAA,EAAA,CAAoB;kBAAE,GAAE,MAAA;gBAAU;cAC9H;AAEO,uBAAA,qBAAA,QAAA,KAAA;AACP,oBAAA,OAAA,gBAAA;AAAgC,yBAAA,eAAA,QAAA,OAAA,EAAuC,OAAA,IAAA,CAAa;gBAAE,OAAE;AAAO,yBAAA,MAAA;gBAAkB;AACjH,uBAAA;cACA;AAAA;AAEA,kBAAA,qBAAA,OAAA,SAAA,SAAAC,IAAAD,IAAA;AACA,uBAAA,eAAAC,IAAA,WAAA,EAAyC,YAAA,MAAA,OAAAD,GAAA,CAA6B;cACtE,IAAC,SAAAC,IAAAD,IAAA;AACD,gBAAAC,GAAA,SAAA,IAAAD;cACA;AAEO,uBAAA,aAAAW,MAAA;AACP,oBAAAA,QAAAA,KAAA;AAAA,yBAAAA;AACA,oBAAA,SAAA,CAAA;AACA,oBAAAA,QAAA;AAAA,2BAAAT,MAAAS;AAAA,wBAAAT,OAAA,aAAA,OAAA,UAAA,eAAA,KAAAS,MAAAT,EAAA;AAAA,sCAAA,QAAAS,MAAAT,EAAA;;AACA,mCAAA,QAAAS,IAAA;AACA,uBAAA;cACA;AAEO,uBAAA,gBAAAA,MAAA;AACP,uBAAAA,QAAAA,KAAA,aAAAA,OAAA,EAA4C,SAAAA,KAAA;cAC5C;AAEO,uBAAAtB,wBAAA,UAAA,YAAA;AACP,oBAAA,CAAA,WAAA,IAAA,QAAA,GAAA;AACA,wBAAA,IAAA,UAAA,gDAAA;gBACA;AACA,uBAAA,WAAA,IAAA,QAAA;cACA;AAEO,uBAAAC,wBAAA,UAAA,YAAA,OAAA;AACP,oBAAA,CAAA,WAAA,IAAA,QAAA,GAAA;AACA,wBAAA,IAAA,UAAA,gDAAA;gBACA;AACA,2BAAA,IAAA,UAAA,KAAA;AACA,uBAAA;cACA;;;;;;;;;;;;;;;;;;;;;;;ACtOA,kBAAA,SAAA,oBAAA,CAAA;AAmBA,kBAAM,eAA4B,CAAA;AAMlC,uBAAS,kBAAkBsB,OAAY;AACnC,oBAAMC,OAAM,SAAS,cAAc,KAAvB;AACZ,gBAAAA,KAAI,YAAYD;AAChB,oBAAM,QAAQC,KAAI;AAClB,uBAAO,OAAA,QAAQ,KAAR;cACV;AAMD,uBAAS,WAAgD,UAAiB;AACtE,oBAAI,CAAC,UAAU;AACX,yBAAO;gBACV;AACD,oBAAI,oBAAoB,kBAAkB,oBAAoB,UAAU;AACpE,yBAAO;gBACV;AACD,uBAAO;cACV;AAMD,uBAAS,kBAAkB,UAAgB;AACvC,oBAAM,QAAQ,SAAS,iBAAiB,QAA1B;AACd,uBAAO,OAAA,QAAQ,KAAR;cACV;AAMD,uBAAS,cAAc,OAAwB;AAC3C,oBAAI,WAAqB,CAAA;AACzB,oBAAI,YAAsB,CAAA;AAE1B,oBAAI,EAAC,GAAA,SAAA,SAAA,GAAc,KAAd,GAAsB;AAEvB,6BAAW,MAAM,MAAM,GAAZ;gBACd,OAAM;AACH,6BAAW;gBACd;AAED,iBAAA,GAAA,SAAA,SAAA,GAAA,QAAQ,EAAA,KAAR,UAAiB,SAAA,MAAI;AAAA,sBAAA;AAEjB,sBAAI,OAAM,GAAA,KAAA,SAAA,GAAA,WAAA,KAAK,MAAM,GAAX,CAAA,EAAA,KAAA,UAAoB,SAAA,GAAC;AAC3B,4BAAO,GAAA,MAAA,SAAA,GAAA,CAAC,EAAA,KAAD,CAAC;kBACX,CAFS;AAGV,sBAAI,IAAI,WAAW,GAAG;AAClB,8BAAU,KAAK,IAAI,CAAD,IAAM,MAAM,IAAI,CAAD,CAAjC;kBACH;gBACJ,CARO;AASR,uBAAO;cACV;AAmBD,kBAAA;;gBAAA,WAAA;AAYI,2BAAAC,YAAY,UAAW;AAEnB,yBAAK,QAAQ,CAAA;AACb,yBAAK,SAAS,KAAK,MAAM;AACzB,yBAAK,aAAa,IAAA,MAAA,SAAA,EAAA;AAElB,wBAAI,CAAC,UAAU;AACX;oBACH;AAGD,wBAAI,oBAAoBA,aAAY;AAChC,6BAAO;oBACV;AAED,wBAAI,iBAAgC,CAAA;AACpC,wBAAM,WAAW,oBAAoB,OAAO,SAAS,WAAW;AAChE,yBAAK,WAAW;AAEhB,wBAAI,aAAa,KAAK,aAAa,GAAG;AAClC,uCAAiB,CAAC,QAAD;oBACpB,WAAU,WAAW,QAAD,GAAY;AAE7B,uCAAiB,OAAA,QAAQ,QAAR;oBACpB,WAAU,oBAAoB,OAAO;AAElC,uCAAiB;oBACpB,WAAU,OAAO,aAAa,UAAU;AAAA,0BAAA;AAErC,0BAAM,eAAc,GAAA,MAAA,SAAA,GAAA,YAAA,SAAS,QAAQ,UAAU,EAA3B,CAAA,EAAA,KAAA,SAAA;AACpB,2BAAI,GAAA,SAAA,SAAA,GAAA,WAAW,EAAA,KAAX,aAAoB,GAAT,MAAkB,GAAG;AAEhC,yCAAiB,kBAAkB,WAAD;sBACrC,OAAM;AAEH,yCAAiB,kBAAkB,WAAD;sBACrC;oBACJ;AAED,wBAAM,SAAS,eAAe;AAC9B,wBAAI,CAAC,QAAQ;AAET,6BAAO;oBACV;AAGD,wBAAI,IAAI;AACR,2BAAO,IAAI,QAAQ,KAAK;AACpB,2BAAK,MAAM,KAAK,eAAe,CAAD,CAA9B;oBACH;AACD,yBAAK,SAAS;kBACjB;AAKD,mBAAA,GAAA,gBAAA,SAAA,GAAIA,YAAA,WAAA,MAAE;;;;yBAAN,SAAAC,OAAA;AACI,6BAAO,KAAK,MAAM,CAAX,EAAc;oBACxB;;;kBAFK,CAAN;AAQA,kBAAAD,YAAA,UAAA,UAAA,SAAQE,KAA2D;AAC/D,6BAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AAClC,0BAAM,OAAO,KAAK,MAAM,CAAX;AACb,0BAAM,SAASA,IAAG,KAAK,MAAM,MAAM,CAApB;AACf,0BAAI,WAAW,OAAO;AAClB;sBACH;oBACJ;AACD,2BAAO;kBACV;AAMD,kBAAAF,YAAA,UAAA,QAAA,SAAM,MAAqB;AAAA,wBAAA;AAArB,wBAAA,SAAA,QAAA;AAAA,6BAAA;oBAAqB;AACvB,wBAAM,YAA2B,CAAA;AACjC,qBAAA,GAAA,SAAA,SAAA,GAAA,YAAA,KAAK,KAAL,EAAA,KAAA,WAAmB,SAAA,MAAI;AACnB,gCAAU,KAAK,KAAK,UAAU,CAAC,CAAC,IAAjB,CAAf;oBACH,CAFD;AAGA,2BAAOG,GAAE,SAAD;kBACX;AAMD,kBAAAH,YAAA,UAAA,MAAA,SAAII,QAAiB;AAAjB,wBAAAA,WAAA,QAAA;AAAA,sBAAAA,SAAA;oBAAiB;AACjB,wBAAM,SAAS,KAAK;AACpB,wBAAIA,UAAS,QAAQ;AACjB,sBAAAA,SAAQA,SAAQ;oBACnB;AACD,2BAAOD,GAAE,KAAK,MAAMC,MAAX,CAAD;kBACX;AAKD,kBAAAJ,YAAA,UAAA,QAAA,WAAA;AACI,2BAAO,KAAK,IAAI,CAAT;kBACV;AAKD,kBAAAA,YAAA,UAAA,OAAA,WAAA;AACI,wBAAM,SAAS,KAAK;AACpB,2BAAO,KAAK,IAAI,SAAS,CAAlB;kBACV;AAUD,kBAAAA,YAAA,UAAA,KAAA,SAAG,MAAc,UAA6BE,KAAa;AAAA,wBAAA;AACvD,wBAAI,CAAC;AAAM,6BAAO;AAGlB,wBAAI,OAAO,aAAa,YAAY;AAChC,sBAAAA,MAAK;AACL,iCAAW;oBACd;AAED,4BAAO,GAAA,SAAA,SAAA,GAAA,YAAA,IAAA,EAAA,KAAA,WAAa,SAAA,MAAI;AAEpB,0BAAI,CAAC,UAAU;AAEX,6BAAK,iBAAiB,MAAMA,GAA5B;AACA;sBACH;AAGD,0BAAM,UAAoB,SAApBG,SAA8BxB,IAAC;AACjC,4BAAM,SAASA,GAAE;AACjB,4BAAI,OAAO,QAAQ,QAAf,GAAoC;AACpC;AAAE,0BAAAqB,IAAgB,KAAK,QAAQrB,EAA7B;wBACL;sBACJ;AACD,2BAAK,iBAAiB,MAAM,OAA5B;AAGA,mCAAa,KAAK;wBACd;wBACA;wBACA,IAAIqB;wBACJ;sBAJc,CAAlB;oBAMH,CAxBM;kBAyBV;AAUD,kBAAAF,YAAA,UAAA,MAAA,SAAI,MAAc,UAA6BE,KAAa;AAAA,wBAAA;AACxD,wBAAI,CAAC;AAAM,6BAAO;AAGlB,wBAAI,OAAO,aAAa,YAAY;AAChC,sBAAAA,MAAK;AACL,iCAAW;oBACd;AAED,4BAAO,GAAA,SAAA,SAAA,GAAA,YAAA,IAAA,EAAA,KAAA,WAAa,SAAU,MAAiB;AAE3C,0BAAI,UAAU;AACV,4BAAI,MAAM;AACV,iCAAS,IAAI,GAAG,IAAI,aAAa,QAAQ,KAAK;AAC1C,8BAAI,OAAO,aAAa,CAAD;AACvB,8BAAI,KAAK,aAAa,YAAY,KAAK,OAAOA,OAAM,KAAK,SAAS,MAAM;AACpE,kCAAM;AACN;0BACH;wBACJ;AACD,4BAAI,QAAQ,IAAI;AACJ,8BAAA,WAAY,GAAA,QAAA,SAAA,GAAA,YAAY,EAAA,KAAZ,cAAoB,KAAK,CAAb,EAAgB,CAA5B,EAAL;AACf,+BAAK,oBAAoB,MAAM,OAA/B;wBACH;sBACJ,OAAM;AAEH,6BAAK,oBAAoB,MAAMA,GAA/B;sBACH;oBACJ,CAnBM;kBAoBV;AASD,kBAAAF,YAAA,UAAA,OAAA,SAAK,KAAa,KAAY;AAAA,wBAAA;AAC1B,wBAAI,OAAO,MAAM;AAEb,6BAAO,KAAK,MAAM,CAAX,EAAc,aAAa,GAA3B,KAAmC;oBAC7C;AAGD,4BAAO,GAAA,SAAA,SAAA,GAAA,YAAA,IAAA,EAAA,KAAA,WAAa,SAAU,MAAiB;AAC3C,2BAAK,aAAa,KAAK,GAAvB;oBACH,CAFM;kBAGV;AAMD,kBAAAA,YAAA,UAAA,aAAA,SAAW,KAAW;AAAA,wBAAA;AAClB,qBAAA,GAAA,SAAA,SAAA,GAAA,YAAA,IAAA,EAAA,KAAA,WAAa,SAAU,MAAiB;AACpC,2BAAK,gBAAgB,GAArB;oBACH,CAFD;kBAGH;AAMD,kBAAAA,YAAA,UAAA,WAAA,SAAS,WAAkB;AAAA,wBAAA;AACvB,wBAAI,CAAC,WAAW;AACZ,6BAAO;oBACV;AAED,4BAAO,GAAA,SAAA,SAAA,GAAA,YAAA,IAAA,EAAA,KAAA,WAAa,SAAU,MAAiB;AAC3C,0BAAI,KAAK,WAAW;AAEhB,4BAAI,MAAgB,KAAK,UAAU,MAAM,IAArB;AACpB,+BAAM,GAAAM,SAAA,SAAA,GAAA,GAAG,EAAA,KAAH,KAAW,SAAA,MAAI;AACjB,iCAAO,CAAC,EAAC,GAAA,MAAA,SAAA,GAAA,IAAI,EAAA,KAAJ,IAAI;wBAChB,CAFQ;AAIT,6BAAI,GAAA,SAAA,SAAA,GAAA,GAAG,EAAA,KAAH,KAAY,SAAT,IAAsB,GAAG;AAC5B,8BAAI,KAAK,SAAT;wBACH;AAED,6BAAK,YAAY,IAAI,KAAK,GAAT;sBACpB,OAAM;AAEH,6BAAK,YAAY;sBACpB;oBACJ,CAjBM;kBAkBV;AAMD,kBAAAN,YAAA,UAAA,cAAA,SAAY,WAAkB;AAAA,wBAAA;AAC1B,wBAAI,CAAC,WAAW;AACZ,6BAAO;oBACV;AACD,4BAAO,GAAA,SAAA,SAAA,GAAA,YAAA,IAAA,EAAA,KAAA,WAAa,SAAU,MAAiB;AAC3C,0BAAI,CAAC,KAAK,WAAW;AAEjB;sBACH;AAED,0BAAI,MAAgB,KAAK,UAAU,MAAM,IAArB;AACpB,6BAAM,GAAAM,SAAA,SAAA,GAAA,GAAG,EAAA,KAAH,KAAW,SAAA,MAAI;AACjB,gCAAO,GAAA,MAAA,SAAA,GAAA,IAAI,EAAA,KAAJ,IAAI;AAEX,4BAAI,CAAC,QAAQ,SAAS,WAAW;AAC7B,iCAAO;wBACV;AACD,+BAAO;sBACV,CAPQ;AAST,2BAAK,YAAY,IAAI,KAAK,GAAT;oBACpB,CAjBM;kBAkBV;AAMD,kBAAAN,YAAA,UAAA,WAAA,SAAS,WAAkB;AACvB,wBAAI,CAAC,WAAW;AACZ,6BAAO;oBACV;AACD,wBAAM,OAAO,KAAK,MAAM,CAAX;AACb,wBAAI,CAAC,KAAK,WAAW;AAEjB,6BAAO;oBACV;AACD,wBAAI,MAAgB,KAAK,UAAU,MAAM,IAArB;AACpB,4BAAO,GAAA,UAAA,SAAA,GAAA,GAAG,EAAA,KAAH,KAAa,SAAV;kBACb;AAQD,kBAAAA,YAAA,UAAA,MAAA,SAAI,KAAa,KAAqB;AAAA,wBAAA;AAClC,wBAAI;AACJ,wBAAI,OAAO,IAAI;AACX,qCAAe;oBAClB,OAAM;AACH,qCAAkB,MAAG,MAAI,MAAG;oBAC/B;AACD,4BAAO,GAAA,SAAA,SAAA,GAAA,aAAA,IAAA,EAAA,KAAA,YAAa,SAAA,MAAI;AAAA,0BAAA;AACpB,0BAAM,SAAQ,GAAA,MAAA,SAAA,GAAA,aAAC,KAAK,aAAa,OAAlB,KAA8B,EAA/B,EAAA,KAAA,UAAA;AACd,0BAAI,OAAO;AAEP,4BAAI,YAAsB,cAAc,KAAD;AAGvC,qCAAY,GAAA,KAAA,SAAA,GAAA,SAAS,EAAA,KAAT,WAAc,SAAA,MAAI;AAC1B,+BAAI,GAAA,SAAA,SAAA,GAAA,IAAI,EAAA,KAAJ,MAAa,GAAT,MAAkB,GAAG;AACzB,mCAAO;0BACV,OAAM;AACH,mCAAO;0BACV;wBACJ,CANoB;AAQrB,4BAAI,gBAAgB,OAAM,GAAA,SAAA,SAAA,GAAA,SAAS,EAAA,KAAT,WAAkB,YAAT,IAAyB,GAAG;AAC3D,oCAAU,KAAK,YAAf;wBACH;AAGD,4BAAI,gBAAgB,IAAI;AACpB,sCAAY,cAAc,SAAD;wBAC5B;AAGD,6BAAK,aAAa,SAAS,UAAU,KAAK,IAAf,CAA3B;sBACH,OAAM;AAEH,6BAAK,aAAa,SAAS,YAA3B;sBACH;oBACJ,CA9BM;kBA+BV;AAKD,kBAAAA,YAAA,UAAA,wBAAA,WAAA;AACI,wBAAM,OAAO,KAAK,MAAM,CAAX;AACb,2BAAO,KAAK,sBAAL;kBACV;AAKD,kBAAAA,YAAA,UAAA,OAAA,WAAA;AACI,2BAAO,KAAK,IAAI,WAAW,OAApB;kBACV;AAKD,kBAAAA,YAAA,UAAA,OAAA,WAAA;AACI,2BAAO,KAAK,IAAI,WAAW,MAApB;kBACV;AAKD,kBAAAA,YAAA,UAAA,WAAA,WAAA;AACI,wBAAM,OAAO,KAAK,MAAM,CAAX;AACb,wBAAI,CAAC,MAAM;AACP,6BAAO;oBACV;AAED,2BAAOG,GAAE,KAAK,QAAN;kBACX;AAKD,kBAAAH,YAAA,UAAA,aAAA,WAAA;AACI,wBAAM,OAAO,KAAK,MAAM,CAAX;AACb,wBAAI,CAAC,MAAM;AACP,6BAAO;oBACV;AAED,2BAAOG,GAAE,KAAK,UAAN;kBACX;AAMD,kBAAAH,YAAA,UAAA,kBAAA,SAAgB,WAAqB;AACjC,wBAAM,SAAS,KAAK,QAAL;AACf,wBAAM,OAAO,KAAK,MAAM,CAAX;AACb,2BAAO,KAAK,cAAL,GAAsB;AACzB,6BAAO,cAAc,KAAK,YAAY,OAAO,UAAxB;oBACxB;AACD,yBAAK,OAAO,SAAZ;kBACH;AAMD,kBAAAA,YAAA,UAAA,SAAA,SAAO,WAAqB;AAAA,wBAAA;AACxB,4BAAO,GAAA,SAAA,SAAA,GAAA,aAAA,IAAA,EAAA,KAAA,YAAa,SAAA,MAAI;AACpB,uBAAA,GAAA,SAAA,SAAA,GAAA,SAAS,EAAA,KAAT,WAAkB,SAAU,OAAkB;AAC1C,6BAAK,YAAY,KAAjB;sBACH,CAFQ;oBAGZ,CAJM;kBAKV;AAKD,kBAAAA,YAAA,UAAA,SAAA,WAAA;AAAA,wBAAA;AACI,4BAAO,GAAA,SAAA,SAAA,GAAA,aAAA,IAAA,EAAA,KAAA,YAAa,SAAA,MAAI;AACpB,0BAAI,KAAK,QAAQ;AACb,6BAAK,OAAL;sBACH,OAAM;AACH,4BAAM,WAAS,KAAK;AACpB,oCAAU,SAAO,YAAY,IAAnB;sBACb;oBACJ,CAPM;kBAQV;AAMD,kBAAAA,YAAA,UAAA,YAAA,SAAU,QAAkB;AACxB,wBAAM,OAAO,KAAK,MAAM,CAAX;AACb,wBAAM,QAAQ,OAAO,MAAM,CAAb;AACd,2BAAO,KAAK,SAAS,KAAd;kBACV;AAKD,kBAAAA,YAAA,UAAA,cAAA,WAAA;AACI,wBAAM,OAAO,KAAK,MAAM,CAAX;AACb,2BAAO,KAAK;kBACf;AAMD,kBAAAA,YAAA,UAAA,UAAA,SAAQpB,IAAa;AAAb,wBAAAA,OAAA,QAAA;AAAA,sBAAAA,KAAA;oBAAa;AACjB,wBAAI;AACJ,2BAAO,KAAK,MAAMA,EAAX;AACP,2BAAO;kBACV;AAMD,kBAAAoB,YAAA,UAAA,OAAA,SAAK,UAAgB;AACjB,wBAAM,OAAO,KAAK,MAAM,CAAX;AACb,2BAAOG,GAAE,KAAK,iBAAiB,QAAtB,CAAD;kBACX;AAQD,kBAAAH,YAAA,UAAA,OAAA,SAAK,KAAY;AACb,wBAAI,CAAC,KAAK;AAEN,0BAAM,OAAO,KAAK,MAAM,CAAX;AAEb,6BAAO,KAAK,UAAU,QAAQ,YAAY,WAAA;AAAM,+BAAA;sBAAE,CAA3C;oBACV,OAAM;AAAA,0BAAA;AAEH,8BAAO,GAAA,SAAA,SAAA,GAAA,aAAA,IAAA,EAAA,KAAA,YAAa,SAAUO,OAAiB;AAC3C,wBAAAA,MAAK,YAAY;sBACpB,CAFM;oBAGV;kBACJ;AAQD,kBAAAP,YAAA,UAAA,OAAA,SAAK,KAAY;AACb,wBAAM,OAAO,KAAK,MAAM,CAAX;AACb,wBAAI,CAAC,KAAK;AAEN,6BAAO,KAAK;oBACf,OAAM;AAEH,2BAAK,YAAY;AACjB,6BAAO;oBACV;kBACJ;AAKD,kBAAAA,YAAA,UAAA,MAAA,WAAA;AAAA,wBAAA;AACI,wBAAM,OAAO,KAAK,MAAM,CAAX;AACb,4BAAQ,GAAA,MAAA,SAAA,GAAA,aAAA,KAAa,KAAb,EAAA,KAAA,UAAA;kBACX;AAKD,kBAAAA,YAAA,UAAA,QAAA,WAAA;AAAA,wBAAA;AACI,4BAAO,GAAA,SAAA,SAAA,GAAA,aAAA,IAAA,EAAA,KAAA,YAAa,SAAA,MAAI;AACpB,2BAAK,MAAL;oBACH,CAFM;kBAGV;AAKD,kBAAAA,YAAA,UAAA,OAAA,WAAA;AACI,wBAAM,OAAO,KAAK,MAAM,CAAX;AACb,2BAAOG,GAAE,KAAK,sBAAN;kBACX;AAMD,kBAAAH,YAAA,UAAA,OAAA,WAAA;AACI,wBAAM,OAAO,KAAK,MAAM,CAAX;AACb,2BAAOG,GAAE,KAAK,kBAAN;kBACX;AAMD,kBAAAH,YAAA,UAAA,iBAAA,WAAA;AACI,wBAAM,OAAO,KAAK,MAAM,CAAX;AACb,2BAAOG,GAAE,KAAK,WAAN;kBACX;AAKD,kBAAAH,YAAA,UAAA,SAAA,WAAA;AACI,wBAAM,OAAO,KAAK,MAAM,CAAX;AACb,2BAAOG,GAAE,KAAK,aAAN;kBACX;AAOD,kBAAAH,YAAA,UAAA,cAAA,SAAY,UAAkB,SAAqB;AAC/C,wBAAM,OAAO,WAAW,KAAK,MAAM,CAAX;AACxB,wBAAI,KAAK,aAAa,QAAQ;AAC1B,6BAAO;oBACV;AAED,wBAAM,SAAS,KAAK;AACpB,wBAAI,WAAW,MAAM;AACjB,6BAAO;oBACV;AAED,wBAAI,OAAO,QAAQ,QAAf,GAA0B;AAE1B,6BAAOG,GAAE,MAAD;oBACX;AAGD,2BAAO,KAAK,YAAY,UAAU,MAA3B;kBACV;AAOD,kBAAAH,YAAA,UAAA,oBAAA,SAAkB,UAAkBQ,SAAgB,SAAqB;AACrE,wBAAM,OAAO,WAAW,KAAK,MAAM,CAAX;AACxB,wBAAIL,GAAE,IAAD,EAAO,MAAMK,QAAO,kBAArB,KAA4CL,GAAE,IAAD,EAAO,MAAMK,QAAO,YAArB,GAAoC;AAChF,6BAAO;oBACV;AAED,wBAAM,SAAS,KAAK;AACpB,wBAAI,WAAW,MAAM;AACjB,6BAAO;oBACV;AAED,wBAAI,OAAO,QAAQ,QAAf,GAA0B;AAE1B,6BAAOL,GAAE,MAAD;oBACX;AAGD,2BAAO,KAAK,kBAAkB,UAAUK,SAAQ,MAAzC;kBACV;AAMD,kBAAAR,YAAA,UAAA,QAAA,SAAM,OAA+B;AACjC,wBAAI,iBAAiBA,aAAY;AAC7B,6BAAO,KAAK,MAAM,CAAX,MAAkB,MAAM,MAAM,CAAZ;oBAC5B,WAAU,iBAAiB,aAAa;AACrC,6BAAO,KAAK,MAAM,CAAX,MAAkB;oBAC5B,OAAM;AACH,6BAAO;oBACV;kBACJ;AAMD,kBAAAA,YAAA,UAAA,eAAA,SAAa,UAA6B;AAAA,wBAAA;AACtC,wBAAM,iBAAiBG,GAAE,QAAD;AACxB,wBAAM,gBAAgB,eAAe,MAAM,CAArB;AACtB,wBAAI,CAAC,eAAe;AAChB,6BAAO;oBACV;AACD,4BAAO,GAAA,SAAA,SAAA,GAAA,aAAA,IAAA,EAAA,KAAA,YAAa,SAAA,MAAI;AACpB,0BAAM,SAAS,cAAc;AAC7B,iCAAM,QAAN,WAAM,SAAA,SAAN,OAAQ,aAAa,MAAM,aAA3B;oBACH,CAHM;kBAIV;AAMD,kBAAAH,YAAA,UAAA,cAAA,SAAY,UAA6B;AAAA,wBAAA;AACrC,wBAAM,iBAAiBG,GAAE,QAAD;AACxB,wBAAM,gBAAgB,eAAe,MAAM,CAArB;AACtB,wBAAM,aAAa,iBAAiB,cAAc;AAClD,wBAAI,CAAC,eAAe;AAChB,6BAAO;oBACV;AACD,4BAAO,GAAA,SAAA,SAAA,GAAA,aAAA,IAAA,EAAA,KAAA,YAAa,SAAU,MAAiB;AAC3C,0BAAM,SAAS,cAAc;AAC7B,0BAAI,YAAY;AACZ,+BAAO,aAAa,MAAM,UAA1B;sBACH,OAAM;AACH,+BAAO,YAAY,IAAnB;sBACH;oBACJ,CAPM;kBAQV;AAOD,kBAAAH,YAAA,UAAA,OAAA,SAAQ,KAAa,OAAS;AAC1B,wBAAI,SAAS,MAAM;AAEf,2BAAK,WAAW,IAAI,KAAK,KAAzB;oBACH,OAAM;AAEH,6BAAO,KAAK,WAAW,IAAI,GAApB;oBACV;kBACJ;AAMD,kBAAAA,YAAA,UAAA,aAAA,SAAWQ,SAAc;AAErB,wBAAI,KAAK,SAAS,GAAG;AACjB,6BAAO;oBACV;AAID,wBAAM,UAAU,KAAK,OAAL;AAGhB,wBAAIA,QAAO,UAAU,MAAM,IAAvB,KAAgCA,QAAO,UAAU,MAAM,OAAvB,GAAiC;AACjE,6BAAO;oBACV;AAQD,4BAAQ,QAAQ;AAChB,2BAAO,QAAQ,WAAWA,OAAnB;kBACV;AAMD,kBAAAR,YAAA,UAAA,gBAAA,WAAA;AACI,wBAAM,QAAQ,KAAK,MAAM,CAAX;AACd,2BAAO;sBACH,KAAK,MAAM;sBACX,MAAM,MAAM;sBACZ,OAAO,MAAM;sBACb,QAAQ,MAAM;sBACd,QAAQ,MAAM;oBALX;kBAOV;AAMD,kBAAAA,YAAA,UAAA,YAAA,SAAUS,MAAW;AACjB,wBAAM,QAAQ,KAAK,MAAM,CAAX;AACd,0BAAM,SAAS;sBAAE,KAAGA;oBAAL,CAAf;kBACH;AACL,yBAAAT;gBAAC,EAjuBD;;AAAa,cAAA/B,SAAA,aAAA;AAouBb,uBAASkC,KAAC;AAAC,oBAAA,MAAA,CAAA;yBAAA,KAAA,GAAA,KAAA,UAAA,QAAA,MAAgD;AAAhD,sBAAA,EAAA,IAAA,UAAA,EAAA;;AACP,uBAAA,MAAW,GAAA,MAAA,SAAA,GAAA,UAAU,EAAA,MAAV,YAAU,QAAA,eAAA,CAAA,MAAA,GAAI,GAAJ,CAAV,GAAX;cACH;AAED,cAAAlC,SAAA,SAAA,IAAekC;;;;;ACj1Bf,cAAAnC,QAAA,UAAiB,oBAAQ,GAAuC;;;;;;ACChE,kBAAA0C,UAAa,oBAAQ,CAAqB;AAC1C,kBAAA,2BAA+B,oBAAQ,EAAiD,EAAA;AACxF,kBAAA,WAAe,oBAAQ,GAAwB;AAC/C,kBAAAC,QAAW,oBAAQ,CAAmB;AACtC,kBAAA,OAAW,oBAAQ,EAAoC;AACvD,kBAAA,8BAAkC,oBAAQ,EAA6C;AACvF,kBAAA,MAAU,oBAAQ,EAAkB;AAEpC,kBAAAC,mBAAA,SAAA,mBAAA;AACA,oBAAA,UAAA,SAAA,GAAAnC,IAAA,GAAA;AACA,sBAAA,gBAAA,mBAAA;AACA,4BAAA,UAAA,QAAA;sBACA,KAAA;AAAA,+BAAA,IAAA,kBAAA;sBACA,KAAA;AAAA,+BAAA,IAAA,kBAAA,CAAA;sBACA,KAAA;AAAA,+BAAA,IAAA,kBAAA,GAAAA,EAAA;oBACA;AAAO,2BAAA,IAAA,kBAAA,GAAAA,IAAA,CAAA;kBACP;AAAK,yBAAA,kBAAA,MAAA,MAAA,SAAA;gBACL;AACA,wBAAA,YAAA,kBAAA;AACA,uBAAA;cACA;AAgBA,cAAAT,QAAA,UAAA,SAAA,SAAA,QAAA;AACA,oBAAA,SAAA,QAAA;AACA,oBAAA,SAAA,QAAA;AACA,oBAAA,SAAA,QAAA;AACA,oBAAA,QAAA,QAAA;AAEA,oBAAA,eAAA,SAAA0C,UAAA,SAAAA,QAAA,MAAA,KAAAA,QAAA,MAAA,KAAA,CAAA,GAAsF;AAEtF,oBAAA,SAAA,SAAAC,QAAAA,MAAA,MAAA,MAAAA,MAAA,MAAA,IAAA,CAAA;AACA,oBAAA,kBAAA,OAAA;AAEA,oBAAA,QAAA,YAAA;AACA,oBAAA,KAAA,gBAAA,gBAAA,gBAAA,gBAAA;AAEA,qBAAA,OAAA,QAAA;AACA,2BAAA,SAAA,SAAA,MAAA,UAAA,SAAA,MAAA,OAAA,KAAA,QAAA,MAAA;AAEA,+BAAA,CAAA,UAAA,gBAAA,IAAA,cAAA,GAAA;AAEA,mCAAA,OAAA,GAAA;AAEA,sBAAA;AAAA,wBAAA,QAAA,aAAA;AACA,mCAAA,yBAAA,cAAA,GAAA;AACA,uCAAA,cAAA,WAAA;oBACA;AAAK,uCAAA,aAAA,GAAA;AAGL,mCAAA,cAAA,iBAAA,iBAAA,OAAA,GAAA;AAEA,sBAAA,cAAA,OAAA,mBAAA,OAAA;AAAA;AAGA,sBAAA,QAAA,QAAA;AAAA,qCAAA,KAAA,gBAAAD,OAAA;2BAEA,QAAA,QAAA;AAAA,qCAAAE,iBAAA,cAAA;2BAEA,SAAA,OAAA,kBAAA;AAAA,qCAAA,KAAA,SAAA,MAAA,cAAA;;AAEA,qCAAA;AAGA,sBAAA,QAAA,QAAA,kBAAA,eAAA,QAAA,kBAAA,eAAA,MAAA;AACA,gDAAA,gBAAA,QAAA,IAAA;kBACA;AAEA,yBAAA,GAAA,IAAA;AAEA,sBAAA,OAAA;AACA,wCAAA,SAAA;AACA,wBAAA,CAAA,IAAAD,OAAA,iBAAA,GAAA;AACA,kDAAAA,OAAA,mBAAA,CAAA,CAA+D;oBAC/D;AAEA,oBAAAA,MAAA,iBAAA,EAAA,GAAA,IAAA;AAEA,wBAAA,QAAA,QAAA,mBAAA,CAAA,gBAAA,GAAA,GAAA;AACA,kDAAA,iBAAA,KAAA,cAAA;oBACA;kBACA;gBACA;cACA;;;;;;;;;;;;;;;;;;;AC5FA,kBAAA;;gBAAA,WAAA;AASI,2BAAAE,SAAA;AACI,yBAAK,MAAM,UAAU;AAErB,wBAAM,OAAO,KAAK,IAAI,MAAM,gBAAf;AACb,yBAAK,YAAY,QAAQ,KAAK,CAAD,KAAO,WAAU,GAAA,WAAA,SAAA,GAAS,KAAK,CAAD,CAAb,IAAoB,KAAK,OAAO;AAE9E,yBAAK,YACD,eAAe,KAAK,KAAK,GAAzB,KAAiC,CAAC,iBAAiB,KAAK,KAAK,GAA3B,IAAkC,OAAO;kBAClF;AAGM,kBAAAA,OAAA,UAAA,OAAP,WAAA;AACI,2BAAO,mBAAmB;kBAC7B;AAGM,kBAAAA,OAAA,UAAA,WAAP,WAAA;AACI,2BAAO,UAAU,KAAK,KAAK,GAApB;kBACV;AACL,yBAAAA;gBAAC,EA5BD;;AA+Ba,cAAA5C,SAAA,KAAK,IAAI,MAAJ;AAMlB,uBAAgB,UAAU,QAAmB;AAAA,oBAAA;AAAnB,oBAAA,WAAA,QAAA;AAAA,2BAAA;gBAAmB;AACzC,uBAAO,UAAS,GAAA,OAAA,SAAA,GAAA,WAAA,KAAK,OAAL,EAAc,SAAd,CAAA,EAAA,KAAA,UAA+B,CAA/B;cACnB;AAFD,cAAAA,SAAA,YAAA;AAQA,uBAAgB,kBAAkB6B,OAAY;AAC1C,uBAAOA,MACF,QAAQ,OAAO,MADb,EAEF,QAAQ,OAAO,MAFb,EAGF,QAAQ,OAAO,QAHb,EAIF,QAAQ,iBAAiB,OAJvB;cAKV;AAND,cAAA7B,SAAA,oBAAA;AAQA,uBAAgB,qBAAqB,OAAa;AAC9C,uBAAO,MACF,QAAQ,UAAU,GADhB,EAEF,QAAQ,UAAU,GAFhB,EAGF,QAAQ,YAAY,GAHlB;cAIV;AALD,cAAAA,SAAA,uBAAA;AAiCA,uBAAgB,QACZ,KACAiC,KAGmB;AAEnB,yBAAS,OAAO,KAAK;AACjB,sBAAI,OAAO,UAAU,eAAe,KAAK,KAAK,GAA1C,GAAgD;AAChD,wBAAM,SAASA,IAAG,KAAK,IAAI,GAAD,CAAT;AACjB,wBAAI,WAAW,OAAO;AAElB;oBACH;kBACJ;gBACJ;cACJ;AAhBD,cAAAjC,SAAA,UAAA;AAuBA,uBAAgB,WACZ,SACAiC,KAAkE;AAElE,oBAAI,GAAG,MAAM;AACb,oBAAM,SAAS,QAAQ,UAAU;AACjC,qBAAK,IAAI,GAAG,IAAI,QAAQ,KAAK;AACzB,yBAAO,QAAQ,CAAD;AACd,2BAASA,IAAG,KAAK,SAAS,MAAM,CAAvB;AACT,sBAAI,WAAW,OAAO;AAClB;kBACH;gBACJ;cACJ;AAbD,cAAAjC,SAAA,aAAA;AAqBA,uBAAgB,SACZiC,KACA,UAAsB;AAAtB,oBAAA,aAAA,QAAA;AAAA,6BAAA;gBAAsB;AAEtB,oBAAI,OAAO;AACX,uBAAO,WAAA;AAAA,sBAAA,QAAA;AAAmB,sBAAA,OAAA,CAAA;2BAAA,KAAA,GAAA,KAAA,UAAA,QAAA,MAAU;AAAV,yBAAA,EAAA,IAAA,UAAA,EAAA;;AACtB,sBAAI,CAAC,MAAM;AACP,2BAAO;AACP,qBAAA,GAAA,aAAA,SAAA,GAAW,WAAA;AACP,6BAAO;AACP,sBAAAA,IAAG,KAAI,MAAPA,KAAE,QAAA,eAAA,CAAM,KAAN,GAAe,IAAf,CAAF;oBACH,GAAE,QAHH;kBAIH;gBACJ;cACJ;AAdD,cAAAjC,SAAA,WAAA;AAqBA,uBAAgB6C,UACZZ,KACA,OAAmB;AAAnB,oBAAA,UAAA,QAAA;AAAA,0BAAA;gBAAmB;AAEnB,oBAAI,SAAS;AACb,uBAAO,WAAA;AAAA,sBAAA,QAAA;AAAU,sBAAA,OAAA,CAAA;2BAAA,KAAA,GAAA,KAAA,UAAA,QAAA,MAAU;AAAV,yBAAA,EAAA,IAAA,UAAA,EAAA;;AACb,sBAAI,QAAQ;AACR,2BAAO,aAAa,MAApB;kBACH;AACD,4BAAS,GAAA,aAAA,SAAA,GAAkB,WAAA;AACvB,6BAAS;AACT,oBAAAA,IAAG,KAAI,MAAPA,KAAE,QAAA,eAAA,CAAM,KAAN,GAAe,IAAf,CAAF;kBACH,GAAE,KAHM;gBAIZ;cACJ;AAdD,cAAAjC,SAAA,WAAA6C;AAoBA,uBAAgB,WAAWZ,KAAO;AAC9B,uBAAO,OAAOA,QAAO;cACxB;AAFD,cAAAjC,SAAA,aAAA;AAQA,uBAAgB,UAAa8C,OAAO;AAChC,qBAAI,GAAA,SAAA,SAAA,GAAOA,KAAP,MAAgB,YAAY,OAAOA,SAAQ,cAAcA,UAAS,MAAM;AACxE,yBAAOA;gBACV;AAED,oBAAI;AACJ,qBAAI,GAAA,SAAA,SAAA,GAAcA,KAAd,GAAqB;AACrB,yBAAO,CAAA;gBACV;AAED,oBAAI,EAAC,GAAA,SAAA,SAAA,GAAcA,KAAd,GAAqB;AACtB,yBAAO,CAAA;gBACV;AAED,yBAAS,KAAKA,OAAM;AAChB,sBAAI,OAAO,UAAU,eAAe,KAAKA,OAAM,CAA3C,GAA+C;AAC/C,yBAAK,CAAD,IAAM,UAAUA,MAAK,CAAD,CAAL;kBACtB;gBACJ;AAED,uBAAO;cACV;AArBD,cAAA9C,SAAA,YAAA;AA2BA,uBAAgB+C,SAAWD,OAAO;AAC9B,wBAAO,GAAA,OAAA,SAAA,GAAA,MAAM,SAAN,EAAsB,KAAKA,KAA3B;cACV;AAFD,cAAA9C,SAAA,UAAA+C;AAQA,uBAAgB,gBAAa;AAAA,oBAAA;AACzB,wBAAO,GAAA,OAAA,SAAA,GAAA,YAAA,KAAK,OAAL,EAAc,SAAS,EAAvB,CAAA,EAAA,KAAA,WAAiC,EAAjC;cACV;AAFD,cAAA/C,SAAA,gBAAA;AAQA,uBAAgB,SAAS,KAAW;AAChC,oBAAM,SAAS,4CAA4C,KAAK,GAAjD;AAEf,oBAAI,UAAU;AAAM,yBAAO;AAE3B,oBAAM,UAAS,GAAA,KAAA,SAAA,GAAA,MAAM,EAAA,KAAN,QAAW,SAAA,GAAC;AAAI,0BAAA,GAAA,WAAA,SAAA,GAAS,GAAT,EAAA;gBAAe,CAAzB;AACrB,oBAAMa,KAAI,OAAO,CAAD;AAChB,oBAAM,IAAI,OAAO,CAAD;AAChB,oBAAML,KAAI,OAAO,CAAD;AAEhB,uBAAO,SAAOK,KAAC,OAAK,IAAC,OAAKL,KAAC;cAC9B;AAXD,cAAAR,SAAA,WAAA;;;;;;;;;;;;AC9NA,uBAAgB,WAAQ;cAAK;AAA7B,cAAAA,SAAA,WAAA;AAGa,cAAAA,SAAA,WAAW;AAGX,cAAAA,SAAA,UAAU;AAGV,cAAAA,SAAA,qBAAqB;AAGrB,cAAAA,SAAA,gBAAgB;;;;;ACjB7B,eAAA,SAAAyC,SAAA;AAAA,oBAAA,QAAA,SAAAO,KAAA;AACA,yBAAAA,OAAAA,IAAA,QAAA,QAAAA;gBACA;AAGA,gBAAAjD,QAAA;gBAEA,MAAA,OAAA,cAAA,YAAA,UAAA,KACA,MAAA,OAAA,UAAA,YAAA,MAAA,KACA,MAAA,OAAA,QAAA,YAAA,IAAA,KACA,MAAA,OAAA0C,WAAA,YAAAA,OAAA;gBAEA,SAAA,aAAA,EAAA;;;;;;ACZA,cAAA1C,QAAA,UAAA,CAAA;;;;;ACAA,kBAAA0C,UAAa,oBAAQ,CAAqB;AAC1C,kBAAA,SAAa,oBAAQ,EAAqB;AAC1C,kBAAA,MAAU,oBAAQ,EAAkB;AACpC,kBAAA,MAAU,oBAAQ,EAAkB;AACpC,kBAAA,gBAAoB,oBAAQ,EAA4B;AACxD,kBAAA,oBAAwB,oBAAQ,GAAgC;AAEhE,kBAAA,wBAAA,OAAA,KAAA;AACA,kBAAAQ,UAAAR,QAAA;AACA,kBAAA,wBAAA,oBAAAQ,UAAAA,WAAAA,QAAA,iBAAA;AAEA,cAAAlD,QAAA,UAAA,SAAAE,OAAA;AACA,oBAAA,CAAA,IAAA,uBAAAA,KAAA,GAAA;AACA,sBAAA,iBAAA,IAAAgD,SAAAhD,KAAA;AAAA,0CAAAA,KAAA,IAAAgD,QAAAhD,KAAA;;AACA,0CAAAA,KAAA,IAAA,sBAAA,YAAAA,KAAA;gBACA;AAAG,uBAAA,sBAAAA,KAAA;cACH;;;;;AChBA,cAAAF,QAAA,UAAA,SAAA,MAAA;AACA,oBAAA;AACA,yBAAA,CAAA,CAAA,KAAA;gBACA,SAAGuB,QAAA;AACH,yBAAA;gBACA;cACA;;;;;ACNA,kBAAAoB,QAAW,oBAAQ,CAAmB;AACtC,kBAAA,MAAU,oBAAQ,EAAkB;AACpC,kBAAA,+BAAmC,oBAAQ,EAAwC;AACnF,kBAAA,iBAAqB,oBAAQ,EAAqC,EAAA;AAElE,cAAA3C,QAAA,UAAA,SAAA,MAAA;AACA,oBAAAkD,UAAAP,MAAA,WAAAA,MAAA,SAAA,CAAA;AACA,oBAAA,CAAA,IAAAO,SAAA,IAAA;AAAA,iCAAAA,SAAA,MAAA;oBACA,OAAA,6BAAA,EAAA,IAAA;kBACA,CAAG;cACH;;;;;ACVA,cAAAlD,QAAA,UAAA,SAAAiD,KAAA;AACA,uBAAA,OAAAA,QAAA,WAAAA,QAAA,OAAA,OAAAA,QAAA;cACA;;;;;ACFA,kBAAA,QAAY,oBAAQ,EAAoB;AAGxC,cAAAjD,QAAA,UAAA,CAAA,MAAA,WAAA;AACA,uBAAA,OAAA,eAAA,CAAA,GAAiC,GAAA,EAAM,KAAA,WAAA;AAAmB,yBAAA;gBAAU,EAAE,CAAE,EAAA,CAAA,KAAA;cACxE,CAAC;;;;;ACLD,kBAAA2C,QAAW,oBAAQ,CAAmB;AAEtC,cAAA3C,QAAA,UAAA,SAAA,aAAA;AACA,uBAAA2C,MAAA,cAAA,WAAA;cACA;;;;;ACJA,kBAAAQ,kBAAA,CAAA,EAAuB;AAEvB,cAAAnD,QAAA,UAAA,SAAAiD,KAAA,KAAA;AACA,uBAAAE,gBAAA,KAAAF,KAAA,GAAA;cACA;;;;;ACJA,cAAAjD,QAAA,UAAiB,oBAAQ,GAAmC;;;;;ACA5D,kBAAA,cAAkB,oBAAQ,EAA0B;AACpD,kBAAA,iBAAqB,oBAAQ,GAA6B;AAC1D,kBAAA,WAAe,oBAAQ,EAAwB;AAC/C,kBAAA,cAAkB,oBAAQ,EAA2B;AAErD,kBAAA,uBAAA,OAAA;AAIA,cAAAC,SAAA,IAAA,cAAA,uBAAA,SAAA,eAAAmD,IAAArC,IAAA,YAAA;AACA,yBAAAqC,EAAA;AACA,gBAAArC,KAAA,YAAAA,IAAA,IAAA;AACA,yBAAA,UAAA;AACA,oBAAA;AAAA,sBAAA;AACA,2BAAA,qBAAAqC,IAAArC,IAAA,UAAA;kBACA,SAAGQ,QAAA;kBAAgB;AACnB,oBAAA,SAAA,cAAA,SAAA;AAAA,wBAAA,UAAA,yBAAA;AACA,oBAAA,WAAA;AAAA,kBAAA6B,GAAArC,EAAA,IAAA,WAAA;AACA,uBAAAqC;cACA;;;;;ACnBA,kBAAA,cAAkB,oBAAQ,EAA0B;AACpD,kBAAA,uBAA2B,oBAAQ,EAAqC;AACxE,kBAAA,2BAA+B,oBAAQ,EAAyC;AAEhF,cAAApD,QAAA,UAAA,cAAA,SAAAI,SAAA,KAAA,OAAA;AACA,uBAAA,qBAAA,EAAAA,SAAA,KAAA,yBAAA,GAAA,KAAA,CAAA;cACA,IAAC,SAAAA,SAAA,KAAA,OAAA;AACD,gBAAAA,QAAA,GAAA,IAAA;AACA,uBAAAA;cACA;;;;;;ACPA,kBAAA,UAAA,SAAAiD,WAAA;AACA,oBAAA;AACA,uBAAA,SAAA,WAAA;AACA,sBAAA,OAAA,SAAA,aAAA;AAMA,2BAAA,QAAA,UAAA,YAAA,SAAA,OAAA,CAAA,OAAA,IAAA;kBACA;AAEA,yBAAA;gBACA;cACA,EAAC;AAED,kBAAA,YAAA,SAAAC,aAAA;AACA,oBAAA,OAAA,CAAA;AACA,uBAAA,SAAA,SAAA,QAAA;AACA,sBAAA,OAAA,KAAA,MAAA,MAAA,aAAA;AACA,wBAAA,cAAA,SAAA,cAAA,MAAA;AAEA,wBAAA,OAAA,qBAAA,uBAAA,OAAA,mBAAA;AACA,0BAAA;AAGA,sCAAA,YAAA,gBAAA;sBACA,SAASzC,IAAA;AAET,sCAAA;sBACA;oBACA;AAEA,yBAAA,MAAA,IAAA;kBACA;AAEA,yBAAA,KAAA,MAAA;gBACA;cACA,EAAC;AAED,kBAAA,cAAA,CAAA;AAEA,uBAAA,qBAAA0C,aAAA;AACA,oBAAA,SAAA;AAEA,yBAAA,IAAA,GAAiB,IAAA,YAAA,QAAwB,KAAA;AACzC,sBAAA,YAAA,CAAA,EAAA,eAAAA,aAAA;AACA,6BAAA;AACA;kBACA;gBACA;AAEA,uBAAA;cACA;AAEA,uBAAA,aAAAC,OAAA,SAAA;AACA,oBAAA,aAAA,CAAA;AACA,oBAAAC,eAAA,CAAA;AAEA,yBAAA,IAAA,GAAiB,IAAAD,MAAA,QAAiB,KAAA;AAClC,sBAAA,OAAAA,MAAA,CAAA;AACA,sBAAAE,MAAA,QAAA,OAAA,KAAA,CAAA,IAAA,QAAA,OAAA,KAAA,CAAA;AACA,sBAAAC,SAAA,WAAAD,GAAA,KAAA;AACA,sBAAAH,cAAA,GAAA,OAAAG,KAAA,GAAA,EAAA,OAAAC,MAAA;AACA,6BAAAD,GAAA,IAAAC,SAAA;AACA,sBAAAvB,SAAA,qBAAAmB,WAAA;AACA,sBAAA,MAAA;oBACA,KAAA,KAAA,CAAA;oBACA,OAAA,KAAA,CAAA;oBACA,WAAA,KAAA,CAAA;kBACA;AAEA,sBAAAnB,WAAA,IAAA;AACA,gCAAAA,MAAA,EAAA;AACA,gCAAAA,MAAA,EAAA,QAAA,GAAA;kBACA,OAAK;AACL,gCAAA,KAAA;sBACA,YAAAmB;sBACA,SAAA,SAAA,KAAA,OAAA;sBACA,YAAA;oBACA,CAAO;kBACP;AAEA,kBAAAE,aAAA,KAAAF,WAAA;gBACA;AAEA,uBAAAE;cACA;AAEA,uBAAA,mBAAA,SAAA;AACA,oBAAA,QAAA,SAAA,cAAA,OAAA;AACA,oBAAA,aAAA,QAAA,cAAA,CAAA;AAEA,oBAAA,OAAA,WAAA,UAAA,aAAA;AACA,sBAAA,QAAgB,OAA2C,oBAAA,KAAoB;AAE/E,sBAAA,OAAA;AACA,+BAAA,QAAA;kBACA;gBACA;AAEA,uBAAA,KAAA,UAAA,EAAA,QAAA,SAAA,KAAA;AACA,wBAAA,aAAA,KAAA,WAAA,GAAA,CAAA;gBACA,CAAG;AAEH,oBAAA,OAAA,QAAA,WAAA,YAAA;AACA,0BAAA,OAAA,KAAA;gBACA,OAAG;AACH,sBAAA,SAAA,UAAA,QAAA,UAAA,MAAA;AAEA,sBAAA,CAAA,QAAA;AACA,0BAAA,IAAA,MAAA,yGAAA;kBACA;AAEA,yBAAA,YAAA,KAAA;gBACA;AAEA,uBAAA;cACA;AAEA,uBAAA,mBAAA,OAAA;AAEA,oBAAA,MAAA,eAAA,MAAA;AACA,yBAAA;gBACA;AAEA,sBAAA,WAAA,YAAA,KAAA;cACA;AAIA,kBAAA,cAAA,SAAAG,eAAA;AACA,oBAAA,YAAA,CAAA;AACA,uBAAA,SAAAC,SAAAzB,QAAA,aAAA;AACA,4BAAAA,MAAA,IAAA;AACA,yBAAA,UAAA,OAAA,OAAA,EAAA,KAAA,IAAA;gBACA;cACA,EAAC;AAED,uBAAA,oBAAA,OAAAA,QAAA0B,SAAA,KAAA;AACA,oBAAAC,OAAAD,UAAA,KAAA,IAAA,QAAA,UAAA,OAAA,IAAA,OAAA,IAAqE,EAAA,OAAA,IAAA,KAAA,GAAqB,IAAA,IAAA;AAI1F,oBAAA,MAAA,YAAA;AACA,wBAAA,WAAA,UAAA,YAAA1B,QAAA2B,IAAA;gBACA,OAAG;AACH,sBAAA,UAAA,SAAA,eAAAA,IAAA;AACA,sBAAA,aAAA,MAAA;AAEA,sBAAA,WAAA3B,MAAA,GAAA;AACA,0BAAA,YAAA,WAAAA,MAAA,CAAA;kBACA;AAEA,sBAAA,WAAA,QAAA;AACA,0BAAA,aAAA,SAAA,WAAAA,MAAA,CAAA;kBACA,OAAK;AACL,0BAAA,YAAA,OAAA;kBACA;gBACA;cACA;AAEA,uBAAA,WAAA,OAAA,SAAA,KAAA;AACA,oBAAA2B,OAAA,IAAA;AACA,oBAAA,QAAA,IAAA;AACA,oBAAA,YAAA,IAAA;AAEA,oBAAA,OAAA;AACA,wBAAA,aAAA,SAAA,KAAA;gBACA,OAAG;AACH,wBAAA,gBAAA,OAAA;gBACA;AAEA,oBAAA,aAAA,OAAA,SAAA,aAAA;AACA,kBAAAA,QAAA,uDAAyD,OAAA,KAAA,SAAA,mBAAA,KAAA,UAAA,SAAA,CAAA,CAAA,CAAA,GAAA,KAAA;gBACzD;AAKA,oBAAA,MAAA,YAAA;AACA,wBAAA,WAAA,UAAAA;gBACA,OAAG;AACH,yBAAA,MAAA,YAAA;AACA,0BAAA,YAAA,MAAA,UAAA;kBACA;AAEA,wBAAA,YAAA,SAAA,eAAAA,IAAA,CAAA;gBACA;cACA;AAEA,kBAAA,YAAA;AACA,kBAAA,mBAAA;AAEA,uBAAA,SAAA,KAAA,SAAA;AACA,oBAAA;AACA,oBAAA;AACA,oBAAAD;AAEA,oBAAA,QAAA,WAAA;AACA,sBAAA,aAAA;AACA,0BAAA,cAAA,YAAA,mBAAA,OAAA;AACA,2BAAA,oBAAA,KAAA,MAAA,OAAA,YAAA,KAAA;AACA,kBAAAA,UAAA,oBAAA,KAAA,MAAA,OAAA,YAAA,IAAA;gBACA,OAAG;AACH,0BAAA,mBAAA,OAAA;AACA,2BAAA,WAAA,KAAA,MAAA,OAAA,OAAA;AAEA,kBAAAA,UAAA,SAAAA,UAAA;AACA,uCAAA,KAAA;kBACA;gBACA;AAEA,uBAAA,GAAA;AACA,uBAAA,SAAA,YAAA,QAAA;AACA,sBAAA,QAAA;AACA,wBAAA,OAAA,QAAA,IAAA,OAAA,OAAA,UAAA,IAAA,SAAA,OAAA,cAAA,IAAA,WAAA;AACA;oBACA;AAEA,2BAAA,MAAA,MAAA;kBACA,OAAK;AACL,oBAAAA,QAAA;kBACA;gBACA;cACA;AAEA,cAAA9D,QAAA,UAAA,SAAAwD,OAAA,SAAA;AACA,0BAAA,WAAA,CAAA;AAGA,oBAAA,CAAA,QAAA,aAAA,OAAA,QAAA,cAAA,WAAA;AACA,0BAAA,YAAA,QAAA;gBACA;AAEA,gBAAAA,QAAAA,SAAA,CAAA;AACA,oBAAA,kBAAA,aAAAA,OAAA,OAAA;AACA,uBAAA,SAAA,OAAA,SAAA;AACA,4BAAA,WAAA,CAAA;AAEA,sBAAA,OAAA,UAAA,SAAA,KAAA,OAAA,MAAA,kBAAA;AACA;kBACA;AAEA,2BAAA,IAAA,GAAmB,IAAA,gBAAA,QAA4B,KAAA;AAC/C,wBAAAD,cAAA,gBAAA,CAAA;AACA,wBAAAnB,SAAA,qBAAAmB,WAAA;AACA,gCAAAnB,MAAA,EAAA;kBACA;AAEA,sBAAA,qBAAA,aAAA,SAAA,OAAA;AAEA,2BAAA,KAAA,GAAoB,KAAA,gBAAA,QAA6B,MAAA;AACjD,wBAAA,cAAA,gBAAA,EAAA;AAEA,wBAAA,SAAA,qBAAA,WAAA;AAEA,wBAAA,YAAA,MAAA,EAAA,eAAA,GAAA;AACA,kCAAA,MAAA,EAAA,QAAA;AAEA,kCAAA,OAAA,QAAA,CAAA;oBACA;kBACA;AAEA,oCAAA;gBACA;cACA;;;;;;ACpQA,cAAApC,QAAA,UAAA,SAAA,cAAA;AACA,oBAAAwD,QAAA,CAAA;AAEA,gBAAAA,MAAA,WAAA,SAAAQ,YAAA;AACA,yBAAA,KAAA,IAAA,SAAA,MAAA;AACA,wBAAAC,WAAA,uBAAA,MAAA,YAAA;AAEA,wBAAA,KAAA,CAAA,GAAA;AACA,6BAAA,UAAA,OAAA,KAAA,CAAA,GAAA,IAA4C,EAAA,OAAAA,UAAA,GAAqB;oBACjE;AAEA,2BAAAA;kBACA,CAAK,EAAA,KAAA,EAAA;gBACL;AAIA,gBAAAT,MAAA,IAAA,SAAA,SAAA,YAAA,QAAA;AACA,sBAAA,OAAA,YAAA,UAAA;AAEA,8BAAA,CAAA,CAAA,MAAA,SAAA,EAAA,CAAA;kBACA;AAEA,sBAAA,yBAAA,CAAA;AAEA,sBAAA,QAAA;AACA,6BAAA,IAAA,GAAqB,IAAA,KAAA,QAAiB,KAAA;AAEtC,0BAAAE,MAAA,KAAA,CAAA,EAAA,CAAA;AAEA,0BAAAA,OAAA,MAAA;AACA,+CAAAA,GAAA,IAAA;sBACA;oBACA;kBACA;AAEA,2BAAA,KAAA,GAAoB,KAAA,QAAA,QAAqB,MAAA;AACzC,wBAAA,OAAA,CAAA,EAAA,OAAA,QAAA,EAAA,CAAA;AAEA,wBAAA,UAAA,uBAAA,KAAA,CAAA,CAAA,GAAA;AAEA;oBACA;AAEA,wBAAA,YAAA;AACA,0BAAA,CAAA,KAAA,CAAA,GAAA;AACA,6BAAA,CAAA,IAAA;sBACA,OAAS;AACT,6BAAA,CAAA,IAAA,GAAA,OAAA,YAAA,OAAA,EAAA,OAAA,KAAA,CAAA,CAAA;sBACA;oBACA;AAEA,oBAAAF,MAAA,KAAA,IAAA;kBACA;gBACA;AAEA,uBAAAA;cACA;AAEA,uBAAA,uBAAA,MAAA,cAAA;AACA,oBAAAS,WAAA,KAAA,CAAA,KAAA;AAEA,oBAAA,aAAA,KAAA,CAAA;AAEA,oBAAA,CAAA,YAAA;AACA,yBAAAA;gBACA;AAEA,oBAAA,gBAAA,OAAA,SAAA,YAAA;AACA,sBAAA,gBAAA,UAAA,UAAA;AACA,sBAAA,aAAA,WAAA,QAAA,IAAA,SAAA,QAAA;AACA,2BAAA,iBAAA,OAAA,WAAA,cAAA,EAAA,EAAA,OAAA,QAAA,KAAA;kBACA,CAAK;AACL,yBAAA,CAAAA,QAAA,EAAA,OAAA,UAAA,EAAA,OAAA,CAAA,aAAA,CAAA,EAAA,KAAA,IAAA;gBACA;AAEA,uBAAA,CAAAA,QAAA,EAAA,KAAA,IAAA;cACA;AAGA,uBAAA,UAAA,WAAA;AAEA,oBAAA,SAAA,KAAA,SAAA,mBAAA,KAAA,UAAA,SAAA,CAAA,CAAA,CAAA;AACA,oBAAAlB,QAAA,+DAAmE,OAAA,MAAA;AACnE,uBAAA,OAAA,OAAAA,OAAA,KAAA;cACA;;;;;AC7FA,kBAAA,cAAkB,oBAAQ,EAA0B;AACpD,kBAAA,QAAY,oBAAQ,EAAoB;AACxC,kBAAA,MAAU,oBAAQ,EAAkB;AAEpC,kBAAA,iBAAA,OAAA;AACA,kBAAAmB,SAAA,CAAA;AAEA,kBAAA,UAAA,SAAAjB,KAAA;AAA6B,sBAAAA;cAAU;AAEvC,cAAAjD,QAAA,UAAA,SAAA,aAAA,SAAA;AACA,oBAAA,IAAAkE,QAAA,WAAA;AAAA,yBAAAA,OAAA,WAAA;AACA,oBAAA,CAAA;AAAA,4BAAA,CAAA;AACA,oBAAAC,UAAA,CAAA,EAAA,WAAA;AACA,oBAAA,YAAA,IAAA,SAAA,WAAA,IAAA,QAAA,YAAA;AACA,oBAAA,YAAA,IAAA,SAAA,CAAA,IAAA,QAAA,CAAA,IAAA;AACA,oBAAA,YAAA,IAAA,SAAA,CAAA,IAAA,QAAA,CAAA,IAAA;AAEA,uBAAAD,OAAA,WAAA,IAAA,CAAA,CAAAC,WAAA,CAAA,MAAA,WAAA;AACA,sBAAA,aAAA,CAAA;AAAA,2BAAA;AACA,sBAAAf,KAAA,EAAa,QAAA,GAAA;AAEb,sBAAA;AAAA,mCAAAA,IAAA,GAAA,EAAyC,YAAA,MAAA,KAAA,QAAA,CAAiC;;AAC1E,oBAAAA,GAAA,CAAA,IAAA;AAEA,kBAAAe,QAAA,KAAAf,IAAA,WAAA,SAAA;gBACA,CAAG;cACH;;;;;;;;;;;;ACnBA,kBAAA,SAAA,QAAA,gBAAA,oBAAA,EAAA,CAAA;AAEA,kBAAA;;gBAAA,SAAA,QAAA;AAAsB,0BAAA,UAAAgB,UAAA,MAAA;AAClB,2BAAAA,SAAY,OAAmB5B,SAAc;2BACzC,OAAA,KAAA,MAAM,OAAOA,OAAb,KAAoB;kBACvB;AACL,yBAAA4B;gBAAC,EAJqB,OAAA,SAAA,CAAtB;;AAMA,cAAAnE,SAAA,SAAA,IAAe;;;;;;;;;;;;;;ACVf,kBAAA,aAAA,QAAA,gBAAA,oBAAA,CAAA,CAAA;AAEA,kBAAA,SAAA,QAAA,gBAAA,oBAAA,EAAA,CAAA;AACA,kBAAA,aAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AAEA,kBAAA;;gBAAA,SAAA,QAAA;AAA2B,0BAAA,UAAAoE,eAAA,MAAA;AAGvB,2BAAAA,cAAY,OAAmB7B,SAAgB,MAAkB;AAAjE,wBAAA,QACI,OAAA,KAAA,MAAM,OAAOA,OAAb,KAAoB;AAGpB,yBAAK,QAAQA,QAAO,QAAQ,EAAE,wBAAsB,KAAK,KAA5C;AAGb,wBAAM,YAAoBA,QAAO,OAAO,SAAS,UAAU,KAAK;AAChE,wBAAI,cAAc,MAAM,KAAK,SAAS,QAAQ;AAAA,0BAAA;AAC1C,uBAAA,GAAA,SAAA,SAAA,GAAA,WAAA,KAAK,IAAL,EAAA,KAAA,UAAkB,SAAA,MAAI;AAClB,4BAAM8B,SAAQ,KAAK;AACnB,4BAAM,YAAY,WAAA,SAAA,EAAEA,OAAM,SAAN,CAAF;AAClB,4BAAI,UAAU,SAAS,GAAG;AACtB,8BAAM,WAAW,cAAS,QAAT,cAAS,SAAA,SAAT,UAAW,YAAX;AACjB,8BAAI,YAAY,aAAa,KAAK;AAC9B,4BAAAA,OAAM,SAAS,SAAf;0BACH;wBACJ;sBACJ,CATD;oBAUH;AAGD,wBAAM,WAAW,IAAI,WAAA,SAAA,EAAS,OAAM,IAAnB;AACjB,0BAAK,WAAW;AAGhB,0BACK,GAAG,SAAS,WAAA;AAAA,0BAAA;AACT,0BAAI9B,QAAO,UAAU,SAAjB,KAA+B,MAAM;AACrC;sBACH;AACD,4BAAM,IAAI,WAAWA,QAAO,OAAO,IAAI,MAAlB,CAArB;AAEA,uBAAA,GAAA,SAAA,SAAA,GAAA,YAAAA,QAAO,IAAI,WAAW,uBAAtB,EAAA,KAAA,WAAsD,SAAAN,KAAE;AAAI,+BAAAA,IAAA;sBAAI,CAAhE;AAEA,+BAAS,KAAT;oBACH,CAVL,EAWK,GAAG,cAAc,WAAA;AACd,4BAAM,IAAI,WAAW,MAArB;AAEA,+BAAS,iBAAgB,GAAA,aAAA,SAAA,GAAkB,WAAA;AACvC,iCAAS,KAAT;sBACH,CAFwB;oBAG5B,CAjBL;;kBAkBH;AACL,yBAAAmC;gBAAC,EAhD0B,OAAA,SAAA,CAA3B;;AAkDA,cAAApE,SAAA,SAAA,IAAe;;;;;AC5Df,kBAAA,WAAe,oBAAQ,EAAwB;AAE/C,cAAAD,QAAA,UAAA,SAAAiD,KAAA;AACA,oBAAA,CAAA,SAAAA,GAAA,GAAA;AACA,wBAAA,UAAA,OAAAA,GAAA,IAAA,mBAAA;gBACA;AAAG,uBAAAA;cACH;;;;;ACNA,cAAAjD,QAAA,UAAiB,oBAAQ,GAAkC;;;;;ACA3D,cAAAA,QAAA,UAAiB,oBAAQ,GAAuC;;;;;ACAhE,cAAAA,QAAA,UAAiB,oBAAQ,GAAuC;;;;;ACAhE,cAAAA,QAAA,UAAiB,oBAAQ,GAAmC;;;;;ACC5D,kBAAA,gBAAoB,oBAAQ,EAA6B;AACzD,kBAAA,yBAA6B,oBAAQ,EAAuC;AAE5E,cAAAA,QAAA,UAAA,SAAAiD,KAAA;AACA,uBAAA,cAAA,uBAAAA,GAAA,CAAA;cACA;;;;;ACNA,kBAAA,yBAA6B,oBAAQ,EAAuC;AAI5E,cAAAjD,QAAA,UAAA,SAAA,UAAA;AACA,uBAAA,OAAA,uBAAA,QAAA,CAAA;cACA;;;;;ACNA,kBAAA,OAAW,oBAAQ,EAAoC;AACvD,kBAAA,gBAAoB,oBAAQ,EAA6B;AACzD,kBAAA,WAAe,oBAAQ,EAAwB;AAC/C,kBAAA,WAAe,oBAAQ,EAAwB;AAC/C,kBAAA,qBAAyB,oBAAQ,EAAmC;AAEpE,kBAAAuE,QAAA,CAAA,EAAA;AAGA,kBAAA,eAAA,SAAA,MAAA;AACA,oBAAA,SAAA,QAAA;AACA,oBAAA,YAAA,QAAA;AACA,oBAAA,UAAA,QAAA;AACA,oBAAA,WAAA,QAAA;AACA,oBAAA,gBAAA,QAAA;AACA,oBAAA,WAAA,QAAA,KAAA;AACA,uBAAA,SAAA,OAAA,YAAA,MAAA,gBAAA;AACA,sBAAAnB,KAAA,SAAA,KAAA;AACA,sBAAAoB,QAAA,cAAApB,EAAA;AACA,sBAAA,gBAAA,KAAA,YAAA,MAAA,CAAA;AACA,sBAAA,SAAA,SAAAoB,MAAA,MAAA;AACA,sBAAApC,SAAA;AACA,sBAAAqC,UAAA,kBAAA;AACA,sBAAA,SAAA,SAAAA,QAAA,OAAA,MAAA,IAAA,YAAAA,QAAA,OAAA,CAAA,IAAA;AACA,sBAAA,OAAA;AACA,yBAAU,SAAArC,QAAeA;AAAA,wBAAA,YAAAA,UAAAoC,OAAA;AACzB,8BAAAA,MAAApC,MAAA;AACA,+BAAA,cAAA,OAAAA,QAAAgB,EAAA;AACA,0BAAA,MAAA;AACA,4BAAA;AAAA,iCAAAhB,MAAA,IAAA;iCACA;AAAA,kCAAA,MAAA;4BACA,KAAA;AAAA,qCAAA;4BACA,KAAA;AAAA,qCAAA;4BACA,KAAA;AAAA,qCAAAA;4BACA,KAAA;AAAA,8BAAAmC,MAAA,KAAA,QAAA,KAAA;0BACA;iCAAS;AAAA,iCAAA;sBACT;oBACA;AACA,yBAAA,gBAAA,KAAA,WAAA,WAAA,WAAA;gBACA;cACA;AAEA,cAAAvE,QAAA,UAAA;;;gBAGA,SAAA,aAAA,CAAA;;;gBAGA,KAAA,aAAA,CAAA;;;gBAGA,QAAA,aAAA,CAAA;;;gBAGA,MAAA,aAAA,CAAA;;;gBAGA,OAAA,aAAA,CAAA;;;gBAGA,MAAA,aAAA,CAAA;;;gBAGA,WAAA,aAAA,CAAA;cACA;;;;;;;;;;;;;;;AC3DA,kBAAA,aAAA,QAAA,gBAAA,oBAAA,CAAA,CAAA;AAEA,kBAAA,UAAA,oBAAA,CAAA;AAqBA,kBAAA0E;;gBAAA,WAAA;AAQI,2BAAAA,OAAY,MAAiB,MAAe;AACxC,yBAAK,OAAO;AACZ,yBAAK,OAAO;AACZ,yBAAK,aAAa,WAAA,SAAA,EAAE,yCAAF;AAGlB,wBAAMlC,UAAS,KAAK;AACpB,oBAAAA,QAAO,IAAI,WAAW,YAAY,KAAKkC,OAAM,gBAA7C;AACA,oBAAAlC,QAAO,IAAI,WAAW,mBAAmB,KAAKkC,OAAM,gBAApD;AACA,oBAAAlC,QAAO,IAAI,WAAW,wBAAwB,KAAKkC,OAAM,gBAAzD;kBACH;AAKM,kBAAAA,OAAA,UAAA,SAAP,WAAA;AAAA,wBAAA,QAAA;AACI,wBAAM,OAAO,KAAK;AAClB,wBAAIA,OAAM,aAAa,IAAI,IAAvB,GAA8B;AAE9B;oBACH;AAED,wBAAM,OAAO,KAAK;AAGlB,wBAAM,aAAa,KAAK;AACxB,wBAAM,QAAQ,KAAK,SAAS;AAC5B,wBAAM,OAAO,KAAK,OAAO,aAAa,sBAAzB;AACb,wBAAM,WAAW,KAAK,MAAM,sBAAX;AACjB,wBAAMjC,OAAM,KAAK,SAAS,KAAK,MAAM,SAAS;AAC9C,wBAAIkC,SAAQ,KAAK,QAAQ,SAAS,IAAI,KAAK,OAAO,SAAS;AAC3D,wBAAMC,UAAS;AACf,wBAAI,KAAK,IAAID,KAAT,IAAiBC,SAAQ;AAEzB,0BAAI,SAAS,OAAO,SAAS,gBAAgB,cAAc,GAAG;AAE1D,wBAAAD,QAAO,CAAC,SAAS,QAAQ;sBAC5B,OAAM;AAEH,wBAAAA,QAAO,CAAC,QAAQ,SAAS,QAAQ;sBACpC;oBACJ;AAED,+BACK,IAAI,SAAS,QAAQ,IAD1B,EAEK,IAAI,cAAiBlC,OAAG,IAF7B,EAGK,IAAI,eAAkBkC,QAAI,IAH/B,EAIK,IAAI,WAAW,KAAK,OAAO,OAAO,IAAI,OAAvB,CAJpB;AAOA,wBAAM,YAAY,WAAA,SAAA,EAAE,gDAAF;AAClB,+BAAW,OAAO,SAAlB;AACA,8BAAU,GAAG,SAAS,WAAA;AAClB,4BAAK,OAAL;oBACH,CAFD;AAKA,wBAAM,qBAAqB,WAAA,SAAA,EAAE,uCAAF;AAC3B,wBAAM,uBAAuB,WAAA,SAAA,EAAE,2CAAF;AAC7B,+BAAW,OAAO,kBAAlB,EAAsC,OAAO,oBAA7C;AAGA,wBAAM,SAAS,KAAK;AACpB,wBAAI,QAAQ;AACR,2CAAqB,IAAI,UAAU,SAAS,IAA5C,EAAkD,IAAI,cAAc,MAApE;oBACH;AAGD,wBAAM,OAAO,KAAK,QAAQ,CAAA;AAC1B,wBAAM,cAA4B,CAAA;AAClC,wBAAM,gBAA8B,CAAA;AAEpC,qBAAA,GAAA,SAAA,SAAA,GAAA,IAAI,EAAA,KAAJ,MAAa,SAAC,KAAmB,UAAgB;AAC7C,0BAAI,CAAC,KAAK;AACN;sBACH;AACD,0BAAM,QAAQ,IAAI,SAAS;AAC3B,0BAAM,MAAM,IAAI,OAAO;AAGvB,0BAAM,SAAS,WAAA,SAAA,EAAE,0BAAwB,QAAK,OAA/B;AACf,yCAAmB,OAAO,MAA1B;AACA,0BAAM,WAAW,WAAA,SAAA,EAAE,GAAF;AACjB,2CAAqB,OAAO,QAA5B;AAGA,kCAAY,KAAK,MAAjB;AACA,oCAAc,KAAK,QAAnB;AAGA,0BAAI,aAAa,GAAG;AAChB,+BAAO,KAAK,UAAU,IAAtB;AACA,+BAAO,SAAS,YAAhB;sBACH,OAAM;AACH,iCAAS,KAAT;sBACH;AAGD,6BAAO,GAAG,SAAS,WAAA;AACf,4BAAI,OAAO,KAAK,QAAZ,GAAuB;AACvB;wBACH;AAED,yBAAA,GAAA,SAAA,SAAA,GAAA,WAAW,EAAA,KAAX,aAAoB,SAAAE,SAAM;AACtB,0BAAAA,QAAO,KAAK,UAAU,KAAtB;AACA,0BAAAA,QAAO,YAAY,YAAnB;wBACH,CAHU;AAIX,yBAAA,GAAA,SAAA,SAAA,GAAA,aAAa,EAAA,KAAb,eAAsB,SAAAC,WAAQ;AAC1B,0BAAAA,UAAS,KAAT;wBACH,CAFY;AAKb,+BAAO,KAAK,UAAU,IAAtB;AACA,+BAAO,SAAS,YAAhB;AACA,iCAAS,KAAT;sBACH,CAjBD;oBAkBH,CA5CG;AA+CJ,+BAAW,GAAG,SAAS,SAACjE,IAAQ;AAE5B,sBAAAA,GAAE,gBAAF;oBACH,CAHD;AAMA,yBAAK,MAAM,OAAO,UAAlB;AAGA,yBAAK,gBAAgB,KAAK,aAAa,YAAY,MAA9B;AACrB,yBAAK,gBAAgB,KAAK,aAAa,YAAY,MAA9B;AAGrB,qBAAA,GAAA,SAAA,SAAA,GAAA,IAAI,EAAA,KAAJ,MAAa,SAAC,KAAmBuB,QAAa;AAC1C,0BAAI,CAAC,KAAK;AACN;sBACH;AACD,0BAAM,SAAS,IAAI,UAAU,CAAA;AAC7B,uBAAA,GAAA,SAAA,SAAA,GAAA,MAAM,EAAA,KAAN,QAAe,SAAC,OAAmB;;AAC/B,4BAAM,WAAW,MAAM;AACvB,4BAAM,OAAO,MAAM;AACnB,4BAAMF,MAAK,MAAM,MAAM,QAAA;AACvB,4BAAM,WAAW,cAAcE,MAAD;AAC9B,4BAAM,aAAS2C,MAAG,MAAM,eAAS,QAAAA,QAAA,SAAAA,MAAI;AAErC,4BAAM,SAAS,SAATC,QAAgBnE,IAAQ;AAAA,iCAAA,QAAA,UAAA,OAAA,QAAA,QAAA,WAAA;;;;;AAC1B,kCAAAA,GAAE,gBAAF;AACmB,yCAAA;oCAAA;oCAAMqB,IAAGrB,EAAD;;kCAAR;;AAAb,+CAAakE,IAAA,KAAA;AAEnB,sCAAI,YAAY;AACZ,yCAAK,OAAL;kCACH;;;;;;;2BANyB;wBAO7B;AAED,yBAAA,GAAA,MAAA,SAAA,GAAA,QAAQ,EAAA,KAAR,UAAc,QAAN,EAAgB,GAAG,MAAM,MAAjC;AAEA,4BAAI,aAAa,SAAS,SAAS;AAC/B,mCAAS,GAAG,SAAS,SAAClE,IAAgB;AAClC,gCAAIA,GAAE,WAAW,IAAI;AACjB,qCAAOA,EAAD;4BACT;0BACJ,CAJD;wBAKH;sBACJ,CAzBK;oBA0BT,CA/BG;AAkCJ,wBAAI,WAAU,GAAA,MAAA,SAAA,GAAA,UAAU,EAAA,KAAV,YAAgB,2BAAN;AACxB,wBAAI,QAAQ,QAAQ;AAChB,8BAAQ,IAAI,CAAZ,EAAe,MAAf;oBACH;AAGD,oBAAA6D,OAAM,iBAAN;AAGA,yBAAK,SAAS,IAAd;AACA,oBAAAA,OAAM,aAAa,IAAI,IAAvB;kBACH;AAKM,kBAAAA,OAAA,UAAA,SAAP,WAAA;AACI,wBAAM,OAAO,KAAK;AAClB,wBAAM,aAAa,KAAK;AACxB,wBAAI,YAAY;AACZ,iCAAW,OAAX;oBACH;AAGD,oBAAAA,OAAM,aAAN,QAAA,EAA0B,IAA1B;kBACH;AAKM,kBAAAA,OAAA,mBAAP,WAAA;AAAA,wBAAA;AACI,wBAAIA,OAAM,aAAa,SAAS,GAAG;AAC/B;oBACH;AACD,qBAAA,GAAA,SAAA,SAAA,GAAA,WAAAA,OAAM,YAAN,EAAA,KAAA,UAA2B,SAAA,MAAI;AAC3B,0BAAM,QAAS,KAAmB;AAClC,+BAAS,MAAM,OAAN;oBACZ,CAHD;kBAIH;AAlNM,kBAAAA,OAAA,eAA+B,IAAA,KAAA,SAAA,EAAA;AAmN1C,yBAAAA;gBAAC,EArND;;AAuNA,cAAAzE,SAAA,SAAA,IAAeyE;;;;;ACnPf,kBAAAV,YAAA,CAAA,EAAiB;AAEjB,cAAAhE,QAAA,UAAA,SAAAiD,KAAA;AACA,uBAAAe,UAAA,KAAAf,GAAA,EAAA,MAAA,GAAA,EAAA;cACA;;;;;ACJA,kBAAA,YAAgB,oBAAQ,EAAyB;AAEjD,kBAAAgC,OAAA,KAAA;AAIA,cAAAjF,QAAA,UAAA,SAAA,UAAA;AACA,uBAAA,WAAA,IAAAiF,KAAA,UAAA,QAAA,GAAA,gBAAA,IAAA;cACA;;;;;ACRA,kBAAAtC,QAAW,oBAAQ,CAAmB;AACtC,kBAAAD,UAAa,oBAAQ,CAAqB;AAE1C,kBAAA,YAAA,SAAAwC,WAAA;AACA,uBAAA,OAAAA,aAAA,aAAAA,YAAA;cACA;AAEA,cAAAlF,QAAA,UAAA,SAAA,WAAAmE,SAAA;AACA,uBAAA,UAAA,SAAA,IAAA,UAAAxB,MAAA,SAAA,CAAA,KAAA,UAAAD,QAAA,SAAA,CAAA,IACAC,MAAA,SAAA,KAAAA,MAAA,SAAA,EAAAwB,OAAA,KAAAzB,QAAA,SAAA,KAAAA,QAAA,SAAA,EAAAyB,OAAA;cACA;;;;;ACVA,kBAAA,wBAA4B,oBAAQ,EAAoC;AACxE,kBAAA,iBAAqB,oBAAQ,EAAqC,EAAA;AAClE,kBAAA,8BAAkC,oBAAQ,EAA6C;AACvF,kBAAA,MAAU,oBAAQ,EAAkB;AACpC,kBAAAH,YAAe,oBAAQ,GAA+B;AACtD,kBAAA,kBAAsB,oBAAQ,EAAgC;AAE9D,kBAAA,gBAAA,gBAAA,aAAA;AAEA,cAAAhE,QAAA,UAAA,SAAAiD,KAAA,KAAA,QAAA,YAAA;AACA,oBAAAA,KAAA;AACA,sBAAA,SAAA,SAAAA,MAAAA,IAAA;AACA,sBAAA,CAAA,IAAA,QAAA,aAAA,GAAA;AACA,mCAAA,QAAA,eAAA,EAA6C,cAAA,MAAA,OAAA,IAAA,CAAiC;kBAC9E;AACA,sBAAA,cAAA,CAAA,uBAAA;AACA,gDAAA,QAAA,YAAAe,SAAA;kBACA;gBACA;cACA;;;;;;;;;;;;ACZA,kBAAA,SAAA,QAAA,gBAAA,oBAAA,EAAA,CAAA;AAGA,kBAAA;;gBAAA,SAAA,QAAA;AAAwB,0BAAA,UAAAmB,YAAA,MAAA;AAGpB,2BAAAA,WAAY,OAAmB3C,SAAc;2BACzC,OAAA,KAAA,MAAM,OAAOA,OAAb,KAAoB;kBACvB;AAMM,kBAAA2C,WAAA,UAAA,WAAP,SAAgB,OAAY;AACxB,yBAAK,QAAQ;kBAChB;AACL,yBAAAA;gBAAC,EAduB,OAAA,SAAA,CAAxB;;AAgBA,cAAAlF,SAAA,SAAA,IAAe;;;;;;;;;;;;;;ACrBf,kBAAA,aAAA,QAAA,gBAAA,oBAAA,CAAA,CAAA;AAcA,kBAAAmF;;gBAAA,WAAA;AAQI,2BAAAA,SAAY5C,SAAgB,OAAmB,MAAqB;AAChE,yBAAK,SAASA;AACd,yBAAK,cAAc;AACnB,yBAAK,OAAO;AACZ,yBAAK,QAAQ;AACb,yBAAK,yBAAyB;AAE9B,wBAAM,aAAa,WAAA,SAAA,EAAE,aAAF;AACnB,+BAAW,SAAS,aAApB;AACA,yBAAK,aAAa;kBACrB;AAKO,kBAAA4C,SAAA,UAAA,kBAAR,WAAA;AACI,wBAAM,aAAa,KAAK;AAExB,wBAAI3C,OAAM;AACV,wBAAIkC,QAAO;AAGX,wBAAM,gBAAgB;AAEtB,wBAAM,gBAAgB,SAAS,gBAAgB;AAE/C,wBAAM,iBAAiB,KAAK,YAAY,sBAAjB;AAEvB,wBAAM,eAAe,KAAK,OAAO,UAAU,sBAAtB;AAErB,wBAAM,eAAe,KAAK,YAAY,cAAjB;AACrB,wBAAM,mBAAmB,WAAA,SAAA,EAAE,aAAa,MAAf;AAEzB,wBAAM,YAAY,KAAK,OAAO,UAAU,MAAM,CAA5B,EAA+B;AAEjD,yBAAK,yBAAyB,iBAAiB,MAAM,KAAK,OAAO,kBAAnC;AAE9B,wBAAI,KAAK,wBAAwB;AAE7B,0BAAM,yBAAyB,iBAAiB,sBAAjB,EAAyC;AAEhE,0BAAK,YAAsD,aAA7C,KAAQ,aAAqC,aAA3B,MAAU,eAAiB,aAAL;AAE9D,0BAAM,cAAc,YAAY;AAChC,0BAAI,cAAc,gBAAgB,GAAG;AAEjC,wBAAAlC,OAAM,cAAc,gBAAgB;AACpC,mCAAW,SAAS,gBAApB;sBACH,WAAU,cAAc,eAAe,gBAAgB,wBAAwB;AAE5E,wBAAAA,OAAM,cAAc,eAAe;AACnC,mCAAW,SAAS,kBAApB;sBACH,OAAM;AAEH,wBAAAA,QAAO,cAAc,IAAI,cAAc,KAAK,gBAAgB;AAC5D,mCAAW,SAAS,kBAApB;sBACH;AAED,0BAAI,aAAa,GAAG;AAChB,wBAAAkC,QAAO;sBACV,OAAM;AACH,wBAAAA,QAAO;sBACV;oBACJ,OAAM;AACH,0BAAI,eAAe,MAAM,eAAe;AAEpC,wBAAAlC,OAAM,eAAe,SAAS,gBAAgB;AAC9C,mCAAW,SAAS,kBAApB;sBACH,WAAU,eAAe,MAAM,aAAa,MAAM,eAAe;AAE9D,wBAAAA,OAAM,eAAe,SAAS,gBAAgB;AAC9C,mCAAW,SAAS,kBAApB;sBACH,OAAM;AAEH,wBAAAA,OAAM,eAAe,MAAM,gBAAgB,gBAAgB;AAC3D,mCAAW,SAAS,gBAApB;sBACH;AAED,0BAAI,eAAe,OAAO,GAAG;AACzB,wBAAAkC,QAAO;sBACV,OAAM;AACH,wBAAAA,QAAO,eAAe;sBACzB;oBACJ;AAGD,2BAAO;sBAAE,KAAGlC;sBAAE,MAAIkC;oBAAX;kBACV;AAKO,kBAAAS,SAAA,UAAA,cAAR,WAAA;AAAA,wBAAA,QAAA;AACI,wBAAM,OAAO,KAAK;AAClB,wBAAM5C,UAAS,KAAK;AACpB,wBAAM,cAAc,KAAK;AACzB,wBAAM,aAAa,KAAK;AAExB,qBAAA,GAAA,SAAA,SAAA,GAAA,IAAI,EAAA,KAAJ,MAAa,SAAC,MAA2BJ,QAAa;AAElD,0BAAM,QAAQ,KAAK;AACnB,0BAAM,WAAW,WAAA,SAAA,EAAE,aAAF;AACjB,+BAAS,SAAS,2BAAlB;AACA,+BAAS,OAAO,KAAhB;AACA,iCAAW,OAAO,QAAlB;AAGA,4BAAM,GAAG,SAAS,SAACvB,IAAQ;AACvB,wBAAAA,GAAE,eAAF;AACA,4BAAM,MAAM,KAAK,QAAQ2B,SAAQ,WAArB;AACZ,4BAAI;AAAK,gCAAK,OAAL;sBACZ,CAJD;oBAKH,CAdG;kBAeP;AAKM,kBAAA4C,SAAA,UAAA,SAAP,WAAA;AAAA,wBAAA,UAAA;AACI,wBAAM5C,UAAS,KAAK;AACpB,wBAAM,aAAa,KAAK;AAGxB,yBAAK,YAAL;AAGM,wBAAAuC,MAAgB,KAAK,gBAAL,GAAdtC,OAAGsC,IAAA,KAAEJ,QAAII,IAAA;AACjB,+BAAW,IAAI,OAAUtC,OAAG,IAA5B;AACA,+BAAW,IAAI,QAAWkC,QAAI,IAA9B;AAGA,+BAAW,IAAI,WAAWnC,QAAO,OAAO,IAAI,SAAlB,CAA1B;AAGA,wBAAI,KAAK,wBAAwB;AAC7B,2BAAK,OAAO,mBAAmB,OAAO,UAAtC;oBACH,OAAM;AACH,iCAAA,SAAA,EAAE,MAAF,EAAU,OAAO,UAAjB;oBACH;AAED,yBAAK,QAAQ;AAEb,oBAAAA,QAAO,eAAc,GAAA,MAAA,SAAA,GAAA,WAAA,KAAK,MAAL,EAAA,KAAA,UAAiB,IAAjB,CAArB;AACA,oBAAAA,QAAO,IAAI,WAAW,aAAa,MAAK,GAAA,MAAA,SAAA,GAAA,YAAA,KAAK,MAAL,EAAA,KAAA,WAAiB,IAAjB,CAAxC;kBACH;AAKM,kBAAA4C,SAAA,UAAA,SAAP,WAAA;AACI,yBAAK,WAAW,OAAhB;AACA,yBAAK,QAAQ;kBAChB;AAKD,mBAAA,GAAA,gBAAA,SAAA,GAAWA,SAAA,WAAA,UAAM;;;;yBAAjB,SAAAnD,OAAA;AACI,6BAAO,KAAK;oBACf;;;kBAFgB,CAAjB;AAGJ,yBAAAmD;gBAAC,EAxKD;;AA0KA,cAAAnF,SAAA,SAAA,IAAemF;;;;;AC7Lf,kBAAA,YAAgB,oBAAQ,EAAyB;AAGjD,cAAApF,QAAA,UAAA,SAAAkC,KAAA,MAAA,QAAA;AACA,0BAAAA,GAAA;AACA,oBAAA,SAAA;AAAA,yBAAAA;AACA,wBAAA,QAAA;kBACA,KAAA;AAAA,2BAAA,WAAA;AACA,6BAAAA,IAAA,KAAA,IAAA;oBACA;kBACA,KAAA;AAAA,2BAAA,SAAA,GAAA;AACA,6BAAAA,IAAA,KAAA,MAAA,CAAA;oBACA;kBACA,KAAA;AAAA,2BAAA,SAAA,GAAAzB,IAAA;AACA,6BAAAyB,IAAA,KAAA,MAAA,GAAAzB,EAAA;oBACA;kBACA,KAAA;AAAA,2BAAA,SAAA,GAAAA,IAAA,GAAA;AACA,6BAAAyB,IAAA,KAAA,MAAA,GAAAzB,IAAA,CAAA;oBACA;gBACA;AACA,uBAAA,WAAA;AACA,yBAAAyB,IAAA,MAAA,MAAA,SAAA;gBACA;cACA;;;;;ACvBA,cAAAlC,QAAA,UAAA,SAAAiD,KAAA;AACA,oBAAA,OAAAA,OAAA,YAAA;AACA,wBAAA,UAAA,OAAAA,GAAA,IAAA,oBAAA;gBACA;AAAG,uBAAAA;cACH;;;;;ACJA,kBAAA,kBAAsB,oBAAQ,GAA8B;AAC5D,kBAAAP,UAAa,oBAAQ,CAAqB;AAC1C,kBAAA,WAAe,oBAAQ,EAAwB;AAC/C,kBAAA,8BAAkC,oBAAQ,EAA6C;AACvF,kBAAA,YAAgB,oBAAQ,EAAkB;AAC1C,kBAAA,YAAgB,oBAAQ,EAAyB;AACjD,kBAAA,aAAiB,oBAAQ,EAA0B;AAEnD,kBAAA2C,WAAA3C,QAAA;AACA,kBAAA,KAAAT,MAAA;AAEA,kBAAA,UAAA,SAAAgB,KAAA;AACA,uBAAA,IAAAA,GAAA,IAAAhB,KAAAgB,GAAA,IAAA,IAAAA,KAAA,CAAA,CAAuC;cACvC;AAEA,kBAAA,YAAA,SAAA,MAAA;AACA,uBAAA,SAAAA,KAAA;AACA,sBAAA;AACA,sBAAA,CAAA,SAAAA,GAAA,MAAA,QAAAhB,KAAAgB,GAAA,GAAA,SAAA,MAAA;AACA,0BAAA,UAAA,4BAAA,OAAA,WAAA;kBACA;AAAK,yBAAA;gBACL;cACA;AAEA,kBAAA,iBAAA;AACA,oBAAA,QAAA,IAAAoC,SAAA;AACA,oBAAA,QAAA,MAAA;AACA,oBAAA,QAAA,MAAA;AACA,oBAAA,QAAA,MAAA;AACA,sBAAA,SAAApC,KAAA,UAAA;AACA,wBAAA,KAAA,OAAAA,KAAA,QAAA;AACA,yBAAA;gBACA;AACA,gBAAAhB,OAAA,SAAAgB,KAAA;AACA,yBAAA,MAAA,KAAA,OAAAA,GAAA,KAAA,CAAA;gBACA;AACA,sBAAA,SAAAA,KAAA;AACA,yBAAA,MAAA,KAAA,OAAAA,GAAA;gBACA;cACA,OAAC;AACD,oBAAA,QAAA,UAAA,OAAA;AACA,2BAAA,KAAA,IAAA;AACA,sBAAA,SAAAA,KAAA,UAAA;AACA,8CAAAA,KAAA,OAAA,QAAA;AACA,yBAAA;gBACA;AACA,gBAAAhB,OAAA,SAAAgB,KAAA;AACA,yBAAA,UAAAA,KAAA,KAAA,IAAAA,IAAA,KAAA,IAAA,CAAA;gBACA;AACA,sBAAA,SAAAA,KAAA;AACA,yBAAA,UAAAA,KAAA,KAAA;gBACA;cACA;AAEA,cAAAjD,QAAA,UAAA;gBACA;gBACA,KAAAiC;gBACA;gBACA;gBACA;cACA;;;;;AC5DA,cAAAjC,QAAA,UAAA;;;;;ACAA,cAAAA,QAAA,UAAA,CAAA;;;;;ACAA,cAAAA,QAAA,UAAiB,oBAAQ,GAAoC;;;;;ACA7D,cAAAA,QAAA,UAAiB,oBAAQ,GAAiC;;;;;;;;;;;;;;ACA1D,kBAAA,KAAA,oBAAA,GAAA;AAEA,kBAAA,aAAA,QAAA,gBAAA,oBAAA,CAAA,CAAA;AAOA,uBAAgB,qBAAqB,QAAoB;AACrD,oBAAM,YAA0B,CAAA;AAChC,iBAAA,GAAA,SAAA,SAAA,GAAA,MAAM,EAAA,KAAN,QAAe,SAAC,OAAiB;AAC7B,sBAAM,aAAa,MAAM,YAAN;AACnB,sBAAI,eAAe,GAAA,SAAS,eAAe,eAAe,GAAA,SAAS,eAAe;AAE9E,8BAAU,KAAK,KAAf;kBACH,OAAM;AAEH,wBAAI,MAAM,OAAO;AACb,gCAAU,KAAK,MAAM,KAArB;oBACH,OAAM;AACH,0BAAM,YAAY,MAAM,SAAN;AAClB,oCAAS,QAAT,cAAS,SAAA,UAAT,GAAA,SAAA,SAAA,GAAA,SAAS,EAAA,KAAT,WAAmB,SAAC,KAAgB;AAChC,kCAAU,KAAK,WAAA,SAAA,EAAE,GAAF,CAAf;sBACH,CAFQ;oBAGZ;kBACJ;gBACJ,CAhBK;AAkBN,uBAAO;cACV;AArBD,cAAAC,SAAA,uBAAA;AA4BA,uBAAgB,YAAYuC,SAAgB,OAAmB,WAAkB;AAC7E,oBAAM8C,aAAY9C,QAAO;AACzB,oBAAM+C,SAAQ,SAAS,YAAT;AAMd,oBAAI,MAAM,SAAS,GAAG;AAClB,kBAAAA,OAAM,SAAS,MAAM,MAAM,CAAZ,GAAgB,CAA/B;AACA,kBAAAA,OAAM,OAAO,MAAM,MAAM,MAAM,SAAS,CAA3B,GAA+B,MAAM,MAAM,MAAM,SAAS,CAA3B,EAA8B,WAAW,MAArF;gBACH,OAKI;AACD,kBAAAA,OAAM,mBAAmB,MAAM,MAAM,CAAZ,CAAzB;gBACH;AAKD,6BAAaA,OAAM,SAAS,KAAf;AACb,gBAAAD,WAAU,UAAUC,MAApB;AACA,gBAAAD,WAAU,iBAAV;cACH;AA1BD,cAAArF,SAAA,cAAA;AAgCA,uBAAgB,cAAc,YAAsB;;AAChD,uBAAO,WAAW,QACZ,WAAW,QACX,WAAA,SAAA,GAAC8E,MAAC,WAAW,SAAX,OAAqB,QAAAA,QAAA,SAAA,SAAAA,IAAE,MAAM,CAAR,CAAvB;cACT;AAJD,cAAA9E,SAAA,gBAAA;AAUA,uBAAgB,YAAY,UAAoB;;AAC5C,uBAAO,SAAS,QACV,SAAS,QACT,WAAA,SAAA,GAAC8E,MAAC,SAAS,SAAT,OAAmB,QAAAA,QAAA,SAAA,SAAAA,IAAE,KAAF,EAAS,MAAM,CAAf,CAArB;cACT;AAJD,cAAA9E,SAAA,cAAA;AAYA,uBAAgB,aACZ,OACA,SACA,cAAgC;AAAhC,oBAAA,iBAAA,QAAA;AAAA,iCAAA;gBAAgC;AAEhC,sBAAM,OAAN,EAAe,MAAM,CAArB,EAAwB,aAAa,SAAS,YAA9C;cACH;AAND,cAAAA,SAAA,eAAA;AAWA,uBAAgB,cAAc,QAAc;AACxC,uBAAO,SAAS,cAAc,MAAvB;cACV;AAFD,cAAAA,SAAA,gBAAA;AAOA,uBAAgBuF,0BAAsB;AAClC,uBAAO,SAAS,uBAAT;cACV;AAFD,cAAAvF,SAAA,yBAAAuF;AASA,uBAAgB,sBACZ,QACA,WACA,KAAkB;AAAlB,oBAAA,QAAA,QAAA;AAAA,wBAAA;gBAAkB;AAElB,iBAAA,GAAA,SAAA,SAAA,GAAA,MAAM,EAAA,KAAN,QAAe,SAAC,OAAiB;AAC7B,sBAAM,QAAQ,cAAc,GAAD;AAC3B,wBAAM,YAAY,MAAM,KAAN;AAClB,4BAAU,YAAY,KAAtB;AACA,wBAAM,OAAN;gBACH,CALK;AAMN,uBAAO;cACV;AAZD,cAAAvF,SAAA,wBAAA;;;;;ACtHA,cAAAD,QAAA,UAAA,SAAA,QAAA,OAAA;AACA,uBAAA;kBACA,YAAA,EAAA,SAAA;kBACA,cAAA,EAAA,SAAA;kBACA,UAAA,EAAA,SAAA;kBACA;gBACA;cACA;;;;;ACLA,cAAAA,QAAA,UAAA,SAAAiD,KAAA;AACA,oBAAAA,OAAA;AAAA,wBAAA,UAAA,0BAAAA,GAAA;AACA,uBAAAA;cACA;;;;;;ACJA,kBAAA,SAAa,oBAAQ,GAA+B,EAAA;AACpD,kBAAA,sBAA0B,oBAAQ,EAA6B;AAC/D,kBAAA,iBAAqB,oBAAQ,EAA8B;AAE3D,kBAAA,kBAAA;AACA,kBAAA,mBAAA,oBAAA;AACA,kBAAA,mBAAA,oBAAA,UAAA,eAAA;AAIA,6BAAA,QAAA,UAAA,SAAA,UAAA;AACA,iCAAA,MAAA;kBACA,MAAA;kBACA,QAAA,OAAA,QAAA;kBACA,OAAA;gBACA,CAAG;cAGH,GAAC,SAAA,OAAA;AACD,oBAAA,QAAA,iBAAA,IAAA;AACA,oBAAAwC,UAAA,MAAA;AACA,oBAAArD,SAAA,MAAA;AACA,oBAAAsD;AACA,oBAAAtD,UAAAqD,QAAA;AAAA,yBAAA,EAAsC,OAAA,QAAA,MAAA,KAAA;AACtC,gBAAAC,SAAA,OAAAD,SAAArD,MAAA;AACA,sBAAA,SAAAsD,OAAA;AACA,uBAAA,EAAU,OAAAA,QAAA,MAAA,MAAA;cACV,CAAC;;;;;AC5BD,cAAA1F,QAAA,UAAA,CAAA;;;;;ACAA,kBAAA,qBAAyB,oBAAQ,GAAmC;AACpE,kBAAA,cAAkB,oBAAQ,EAA4B;AAItD,cAAAA,QAAA,UAAA,OAAA,QAAA,SAAA2F,MAAAvC,IAAA;AACA,uBAAA,mBAAAA,IAAA,WAAA;cACA;;;;;ACPA,kBAAA,8BAAkC,oBAAQ,EAA6C;AAEvF,cAAApD,QAAA,UAAA,SAAA,QAAA,KAAA,OAAA,SAAA;AACA,oBAAA,WAAA,QAAA;AAAA,yBAAA,GAAA,IAAA;;AACA,8CAAA,QAAA,KAAA,KAAA;cACA;;;;;ACLA,kCAAQ,GAAqB;AAC7B,kBAAA,eAAmB,oBAAQ,GAA4B;AACvD,kBAAA0C,UAAa,oBAAQ,CAAqB;AAC1C,kBAAA,UAAc,oBAAQ,EAAsB;AAC5C,kBAAA,8BAAkC,oBAAQ,EAA6C;AACvF,kBAAA,YAAgB,oBAAQ,EAAwB;AAChD,kBAAA,kBAAsB,oBAAQ,EAAgC;AAE9D,kBAAA,gBAAA,gBAAA,aAAA;AAEA,uBAAA,mBAAA,cAAA;AACA,oBAAA,aAAAA,QAAA,eAAA;AACA,oBAAA,sBAAA,cAAA,WAAA;AACA,oBAAA,uBAAA,QAAA,mBAAA,MAAA,eAAA;AACA,8CAAA,qBAAA,eAAA,eAAA;gBACA;AACA,0BAAA,eAAA,IAAA,UAAA;cACA;;;;;ACjBA,kBAAA,UAAc,oBAAQ,EAA0B;AAIhD,cAAA1C,QAAA,UAAA,MAAA,WAAA,SAAA,QAAA,KAAA;AACA,uBAAA,QAAA,GAAA,KAAA;cACA;;;;;ACNA,kBAAA,QAAY,oBAAQ,EAAoB;AACxC,kBAAA,kBAAsB,oBAAQ,EAAgC;AAC9D,kBAAA,aAAiB,oBAAQ,EAAgC;AAEzD,kBAAA,UAAA,gBAAA,SAAA;AAEA,cAAAA,QAAA,UAAA,SAAA,aAAA;AAIA,uBAAA,cAAA,MAAA,CAAA,MAAA,WAAA;AACA,sBAAA,QAAA,CAAA;AACA,sBAAA,cAAA,MAAA,cAAA,CAAA;AACA,8BAAA,OAAA,IAAA,WAAA;AACA,2BAAA,EAAc,KAAA,EAAA;kBACd;AACA,yBAAA,MAAA,WAAA,EAAA,OAAA,EAAA,QAAA;gBACA,CAAG;cACH;;;;;AClBA,cAAAA,QAAA,UAAiB,oBAAQ,GAAmC;;;;;;;;;;;;;ACE5D,kBAAA,uBAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AAeA,kBAAA;;gBAAA,WAAA;AAII,2BAAA4F,YAAY,SAA2B;AACnC,yBAAK,UAAU;AACf,yBAAK,qBAAqB,IAAI,qBAAA,SAAA,EAAJ;kBAC7B;AACL,yBAAAA;gBAAC,EARD;;AAAa,cAAA3F,SAAA,aAAA;;;;;;AChBb,kBAAA,6BAAA,CAAA,EAAmC;AACnC,kBAAA,2BAAA,OAAA;AAGA,kBAAA,cAAA,4BAAA,CAAA,2BAAA,KAAA,EAAgF,GAAA,EAAA,GAAO,CAAA;AAIvF,cAAAA,SAAA,IAAA,cAAA,SAAA,qBAAA4F,IAAA;AACA,oBAAA,aAAA,yBAAA,MAAAA,EAAA;AACA,uBAAA,CAAA,CAAA,cAAA,WAAA;cACA,IAAC;;;;;ACZD,kBAAA,WAAe,oBAAQ,EAAwB;AAM/C,cAAA7F,QAAA,UAAA,SAAA,OAAA,kBAAA;AACA,oBAAA,CAAA,SAAA,KAAA;AAAA,yBAAA;AACA,oBAAAkC,KAAA;AACA,oBAAA,oBAAA,QAAAA,MAAA,MAAA,aAAA,cAAA,CAAA,SAAA,MAAAA,IAAA,KAAA,KAAA,CAAA;AAAA,yBAAA;AACA,oBAAA,QAAAA,MAAA,MAAA,YAAA,cAAA,CAAA,SAAA,MAAAA,IAAA,KAAA,KAAA,CAAA;AAAA,yBAAA;AACA,oBAAA,CAAA,oBAAA,QAAAA,MAAA,MAAA,aAAA,cAAA,CAAA,SAAA,MAAAA,IAAA,KAAA,KAAA,CAAA;AAAA,yBAAA;AACA,sBAAA,UAAA,yCAAA;cACA;;;;;;;;;AEbA,kBAAA,OAAA,KAAA;AACA,kBAAA,QAAA,KAAA;AAIA,cAAAlC,QAAA,UAAA,SAAA,UAAA;AACA,uBAAA,MAAA,WAAA,CAAA,QAAA,IAAA,KAAA,WAAA,IAAA,QAAA,MAAA,QAAA;cACA;;;;;ACPA,kBAAA,SAAa,oBAAQ,EAAqB;AAC1C,kBAAA,MAAU,oBAAQ,EAAkB;AAEpC,kBAAA2F,QAAA,OAAA,MAAA;AAEA,cAAA3F,QAAA,UAAA,SAAA,KAAA;AACA,uBAAA2F,MAAA,GAAA,MAAAA,MAAA,GAAA,IAAA,IAAA,GAAA;cACA;;;;;ACPA,kBAAAjC,MAAA;AACA,kBAAA,UAAA,KAAA,OAAA;AAEA,cAAA1D,QAAA,UAAA,SAAA,KAAA;AACA,uBAAA,YAAA,OAAA,QAAA,SAAA,KAAA,GAAA,IAAA,QAAA,EAAA0D,MAAA,SAAA,SAAA,EAAA;cACA;;;;;ACLA,kBAAA,wBAA4B,oBAAQ,EAAoC;AACxE,kBAAA,aAAiB,oBAAQ,EAA0B;AACnD,kBAAA,kBAAsB,oBAAQ,EAAgC;AAE9D,kBAAA,gBAAA,gBAAA,aAAA;AAEA,kBAAA,oBAAA,WAAA,WAAA;AAAgD,uBAAA;cAAkB,EAAE,CAAA,KAAA;AAGpE,kBAAA,SAAA,SAAAT,KAAA,KAAA;AACA,oBAAA;AACA,yBAAAA,IAAA,GAAA;gBACA,SAAG1B,QAAA;gBAAgB;cACnB;AAGA,cAAAvB,QAAA,UAAA,wBAAA,aAAA,SAAAiD,KAAA;AACA,oBAAAG,IAAA,KAAA;AACA,uBAAAH,QAAA,SAAA,cAAAA,QAAA,OAAA,SAEA,QAAA,MAAA,OAAAG,KAAA,OAAAH,GAAA,GAAA,aAAA,MAAA,WAAA,MAEA,oBAAA,WAAAG,EAAA,KAEA,SAAA,WAAAA,EAAA,MAAA,YAAA,OAAAA,GAAA,UAAA,aAAA,cAAA;cACA;;;;;ACzBA,kBAAA,WAAe,oBAAQ,EAAwB;AAC/C,kBAAA,wBAA4B,oBAAQ,GAAuC;AAC3E,kBAAA,WAAe,oBAAQ,EAAwB;AAC/C,kBAAA,OAAW,oBAAQ,EAAoC;AACvD,kBAAA,oBAAwB,oBAAQ,GAAkC;AAClE,kBAAA,+BAAmC,oBAAQ,GAA+C;AAE1F,kBAAA0C,UAAA,SAAA,SAAA,QAAA;AACA,qBAAA,UAAA;AACA,qBAAA,SAAA;cACA;AAEA,kBAAA,UAAA9F,QAAA,UAAA,SAAA,UAAAkC,KAAA,MAAA,YAAA,aAAA;AACA,oBAAA,gBAAA,KAAAA,KAAA,MAAA,aAAA,IAAA,CAAA;AACA,oBAAA,UAAA,QAAAE,QAAA,QAAA,QAAA,MAAA;AAEA,oBAAA,aAAA;AACA,6BAAA;gBACA,OAAG;AACH,2BAAA,kBAAA,QAAA;AACA,sBAAA,OAAA,UAAA;AAAA,0BAAA,UAAA,wBAAA;AAEA,sBAAA,sBAAA,MAAA,GAAA;AACA,yBAAAA,SAAA,GAAA,SAAA,SAAA,SAAA,MAAA,GAAyD,SAAAA,QAAgBA,UAAA;AACzE,+BAAA,aACA,cAAA,SAAA,OAAA,SAAAA,MAAA,CAAA,EAAA,CAAA,GAAA,KAAA,CAAA,CAAA,IACA,cAAA,SAAAA,MAAA,CAAA;AACA,0BAAA,UAAA,kBAAA0D;AAAA,+BAAA;oBACA;AAAO,2BAAA,IAAAA,QAAA,KAAA;kBACP;AACA,6BAAA,OAAA,KAAA,QAAA;gBACA;AAEA,uBAAA,SAAA;AACA,uBAAA,EAAA,OAAA,KAAA,KAAA,QAAA,GAAA,MAAA;AACA,2BAAA,6BAAA,UAAA,eAAA,KAAA,OAAA,UAAA;AACA,sBAAA,OAAA,UAAA,YAAA,UAAA,kBAAAA;AAAA,2BAAA;gBACA;AAAG,uBAAA,IAAAA,QAAA,KAAA;cACH;AAEA,sBAAA,OAAA,SAAA,QAAA;AACA,uBAAA,IAAAA,QAAA,MAAA,MAAA;cACA;;;;;;ACzCA,kBAAA,QAAY,oBAAQ,EAAoB;AAExC,cAAA9F,QAAA,UAAA,SAAA,aAAA,UAAA;AACA,oBAAAmE,UAAA,CAAA,EAAA,WAAA;AACA,uBAAA,CAAA,CAAAA,WAAA,MAAA,WAAA;AAEA,kBAAAA,QAAA,KAAA,MAAA,YAAA,WAAA;AAA+C,0BAAA;kBAAS,GAAE,CAAA;gBAC1D,CAAG;cACH;;;;;ACPA,cAAAnE,QAAA,UAAA;;;;;;ACDA,kBAAA,cAAkB,oBAAQ,EAA2B;AACrD,kBAAA,uBAA2B,oBAAQ,EAAqC;AACxE,kBAAA,2BAA+B,oBAAQ,EAAyC;AAEhF,cAAAA,QAAA,UAAA,SAAAI,SAAA,KAAA,OAAA;AACA,oBAAA,cAAA,YAAA,GAAA;AACA,oBAAA,eAAAA;AAAA,uCAAA,EAAAA,SAAA,aAAA,yBAAA,GAAA,KAAA,CAAA;;AACA,kBAAAA,QAAA,WAAA,IAAA;cACA;;;;;ACTA,cAAAJ,QAAA,UAAiB,oBAAQ,GAAqC;;;;;ACA9D,kBAAA,cAAkB,oBAAQ,EAA0B;AACpD,kBAAA,6BAAiC,oBAAQ,EAA4C;AACrF,kBAAA,2BAA+B,oBAAQ,EAAyC;AAChF,kBAAA,kBAAsB,oBAAQ,EAAgC;AAC9D,kBAAA,cAAkB,oBAAQ,EAA2B;AACrD,kBAAA,MAAU,oBAAQ,EAAkB;AACpC,kBAAA,iBAAqB,oBAAQ,GAA6B;AAE1D,kBAAA,iCAAA,OAAA;AAIA,cAAAC,SAAA,IAAA,cAAA,iCAAA,SAAA,yBAAAmD,IAAArC,IAAA;AACA,gBAAAqC,KAAA,gBAAAA,EAAA;AACA,gBAAArC,KAAA,YAAAA,IAAA,IAAA;AACA,oBAAA;AAAA,sBAAA;AACA,2BAAA,+BAAAqC,IAAArC,EAAA;kBACA,SAAGQ,QAAA;kBAAgB;AACnB,oBAAA,IAAA6B,IAAArC,EAAA;AAAA,yBAAA,yBAAA,CAAA,2BAAA,EAAA,KAAAqC,IAAArC,EAAA,GAAAqC,GAAArC,EAAA,CAAA;cACA;;;;;ACnBA,kBAAA,QAAY,oBAAQ,EAAoB;AACxC,kBAAA,UAAc,oBAAQ,EAA0B;AAEhD,kBAAAgF,SAAA,GAAA;AAGA,cAAA/F,QAAA,UAAA,MAAA,WAAA;AAGA,uBAAA,CAAA,OAAA,GAAA,EAAA,qBAAA,CAAA;cACA,CAAC,IAAA,SAAAiD,KAAA;AACD,uBAAA,QAAAA,GAAA,KAAA,WAAA8C,OAAA,KAAA9C,KAAA,EAAA,IAAA,OAAAA,GAAA;cACA,IAAC;;;;;ACZD,kBAAAP,UAAa,oBAAQ,CAAqB;AAC1C,kBAAA,WAAe,oBAAQ,EAAwB;AAE/C,kBAAAsD,YAAAtD,QAAA;AAEA,kBAAA,SAAA,SAAAsD,SAAA,KAAA,SAAAA,UAAA,aAAA;AAEA,cAAAhG,QAAA,UAAA,SAAAiD,KAAA;AACA,uBAAA,SAAA+C,UAAA,cAAA/C,GAAA,IAAA,CAAA;cACA;;;;;ACTA,kBAAA,UAAc,oBAAQ,EAAsB;AAC5C,kBAAA,QAAY,oBAAQ,GAA2B;AAE/C,eAAAjD,QAAA,UAAA,SAAA,KAAA,OAAA;AACA,uBAAA,MAAA,GAAA,MAAA,MAAA,GAAA,IAAA,UAAA,SAAA,QAAA,CAAA;cACA,GAAC,YAAA,CAAA,CAAA,EAAA,KAAA;gBACD,SAAA;gBACA,MAAA,UAAA,SAAA;gBACA,WAAA;cACA,CAAC;;;;;;ACRD,kBAAAmC,KAAQ,oBAAQ,CAAqB;AACrC,kBAAA,4BAAgC,oBAAQ,GAA0C;AAClF,kBAAA,iBAAqB,oBAAQ,GAAsC;AACnE,kBAAA,iBAAqB,oBAAQ,GAAsC;AACnE,kBAAA,iBAAqB,oBAAQ,EAAgC;AAC7D,kBAAA,8BAAkC,oBAAQ,EAA6C;AACvF,kBAAA,WAAe,oBAAQ,EAAuB;AAC9C,kBAAA,kBAAsB,oBAAQ,EAAgC;AAC9D,kBAAA,UAAc,oBAAQ,EAAsB;AAC5C,kBAAA,YAAgB,oBAAQ,EAAwB;AAChD,kBAAA,gBAAoB,oBAAQ,GAA6B;AAEzD,kBAAA,oBAAA,cAAA;AACA,kBAAA,yBAAA,cAAA;AACA,kBAAA,WAAA,gBAAA,UAAA;AACA,kBAAA,OAAA;AACA,kBAAA,SAAA;AACA,kBAAA,UAAA;AAEA,kBAAA,aAAA,WAAA;AAA8B,uBAAA;cAAa;AAE3C,cAAAnC,QAAA,UAAA,SAAA,UAAA,MAAA,qBAAA,MAAA,SAAA,QAAA,QAAA;AACA,0CAAA,qBAAA,MAAA,IAAA;AAEA,oBAAA,qBAAA,SAAA,MAAA;AACA,sBAAA,SAAA,WAAA;AAAA,2BAAA;AACA,sBAAA,CAAA,0BAAA,QAAA;AAAA,2BAAA,kBAAA,IAAA;AACA,0BAAA,MAAA;oBACA,KAAA;AAAA,6BAAA,SAAA2F,QAAA;AAAyC,+BAAA,IAAA,oBAAA,MAAA,IAAA;sBAA4C;oBACrF,KAAA;AAAA,6BAAA,SAAAM,UAAA;AAA6C,+BAAA,IAAA,oBAAA,MAAA,IAAA;sBAA4C;oBACzF,KAAA;AAAA,6BAAA,SAAA,UAAA;AAA+C,+BAAA,IAAA,oBAAA,MAAA,IAAA;sBAA4C;kBAC3F;AAAK,yBAAA,WAAA;AAAqB,2BAAA,IAAA,oBAAA,IAAA;kBAAsC;gBAChE;AAEA,oBAAA,gBAAA,OAAA;AACA,oBAAA,wBAAA;AACA,oBAAA,oBAAA,SAAA;AACA,oBAAA,iBAAA,kBAAA,QAAA,KACA,kBAAA,YAAA,KACA,WAAA,kBAAA,OAAA;AACA,oBAAA,kBAAA,CAAA,0BAAA,kBAAA,mBAAA,OAAA;AACA,oBAAA,oBAAA,QAAA,UAAA,kBAAA,WAAA,iBAAA;AACA,oBAAA,0BAAA,SAAA;AAGA,oBAAA,mBAAA;AACA,6CAAA,eAAA,kBAAA,KAAA,IAAA,SAAA,CAAA,CAAA;AACA,sBAAA,sBAAA,OAAA,aAAA,yBAAA,MAAA;AACA,wBAAA,CAAA,WAAA,eAAA,wBAAA,MAAA,mBAAA;AACA,0BAAA,gBAAA;AACA,uCAAA,0BAAA,iBAAA;sBACA,WAAS,OAAA,yBAAA,QAAA,KAAA,YAAA;AACT,oDAAA,0BAAA,UAAA,UAAA;sBACA;oBACA;AAEA,mCAAA,0BAAA,eAAA,MAAA,IAAA;AACA,wBAAA;AAAA,gCAAA,aAAA,IAAA;kBACA;gBACA;AAGA,oBAAA,WAAA,UAAA,kBAAA,eAAA,SAAA,QAAA;AACA,0CAAA;AACA,oCAAA,SAAAA,UAAA;AAAyC,2BAAA,eAAA,KAAA,IAAA;kBAAkC;gBAC3E;AAGA,qBAAA,CAAA,WAAA,WAAA,kBAAA,QAAA,MAAA,iBAAA;AACA,8CAAA,mBAAA,UAAA,eAAA;gBACA;AACA,0BAAA,IAAA,IAAA;AAGA,oBAAA,SAAA;AACA,4BAAA;oBACA,QAAA,mBAAA,MAAA;oBACA,MAAA,SAAA,kBAAA,mBAAA,IAAA;oBACA,SAAA,mBAAA,OAAA;kBACA;AACA,sBAAA;AAAA,yBAAA,OAAA,SAAA;AACA,0BAAA,0BAAA,yBAAA,EAAA,OAAA,oBAAA;AACA,iCAAA,mBAAA,KAAA,QAAA,GAAA,CAAA;sBACA;oBACA;;AAAK,oBAAA9D,GAAA,EAAS,QAAA,MAAA,OAAA,MAAA,QAAA,0BAAA,sBAAA,GAAqF,OAAA;gBACnG;AAEA,uBAAA;cACA;;;;;ACzFA,kBAAA,QAAY,oBAAQ,EAAoB;AAExC,cAAAnC,QAAA,UAAA,CAAA,CAAA,OAAA,yBAAA,CAAA,MAAA,WAAA;AAGA,uBAAA,CAAA,OAAA,OAAA,CAAA;cACA,CAAC;;;;;ACND,kBAAA,WAAe,oBAAQ,EAAwB;AAC/C,kBAAAkG,oBAAuB,oBAAQ,GAAuC;AACtE,kBAAA,cAAkB,oBAAQ,EAA4B;AACtD,kBAAA,aAAiB,oBAAQ,EAA0B;AACnD,kBAAApE,QAAW,oBAAQ,GAAmB;AACtC,kBAAA,wBAA4B,oBAAQ,EAAsC;AAC1E,kBAAA,YAAgB,oBAAQ,EAAyB;AAEjD,kBAAA,KAAA;AACA,kBAAA,KAAA;AACA,kBAAA,YAAA;AACA,kBAAA,SAAA;AACA,kBAAA,WAAA,UAAA,UAAA;AAEA,kBAAA,mBAAA,WAAA;cAAoC;AAEpC,kBAAA,YAAA,SAAAmC,UAAA;AACA,uBAAA,KAAA,SAAA,KAAAA,WAAA,KAAA,MAAA,SAAA;cACA;AAGA,kBAAA,4BAAA,SAAAkC,kBAAA;AACA,gBAAAA,iBAAA,MAAA,UAAA,EAAA,CAAA;AACA,gBAAAA,iBAAA,MAAA;AACA,oBAAA,OAAAA,iBAAA,aAAA;AACA,gBAAAA,mBAAA;AACA,uBAAA;cACA;AAGA,kBAAA,2BAAA,WAAA;AAEA,oBAAA,SAAA,sBAAA,QAAA;AACA,oBAAA,KAAA,SAAA,SAAA;AACA,oBAAA;AACA,uBAAA,MAAA,UAAA;AACA,gBAAArE,MAAA,YAAA,MAAA;AAEA,uBAAA,MAAA,OAAA,EAAA;AACA,iCAAA,OAAA,cAAA;AACA,+BAAA,KAAA;AACA,+BAAA,MAAA,UAAA,mBAAA,CAAA;AACA,+BAAA,MAAA;AACA,uBAAA,eAAA;cACA;AAOA,kBAAA;AACA,kBAAA,kBAAA,WAAA;AACA,oBAAA;AAEA,oCAAA,SAAA,UAAA,IAAA,cAAA,UAAA;gBACA,SAAGP,QAAA;gBAAgB;AACnB,kCAAA,kBAAA,0BAAA,eAAA,IAAA,yBAAA;AACA,oBAAA,SAAA,YAAA;AACA,uBAAA;AAAA,yBAAA,gBAAA,SAAA,EAAA,YAAA,MAAA,CAAA;AACA,uBAAA,gBAAA;cACA;AAEA,yBAAA,QAAA,IAAA;AAIA,cAAAvB,QAAA,UAAA,OAAA,UAAA,SAAAyE,QAAArB,IAAA,YAAA;AACA,oBAAA;AACA,oBAAAA,OAAA,MAAA;AACA,mCAAA,SAAA,IAAA,SAAAA,EAAA;AACA,2BAAA,IAAA,iBAAA;AACA,mCAAA,SAAA,IAAA;AAEA,yBAAA,QAAA,IAAAA;gBACA;AAAG,2BAAA,gBAAA;AACH,uBAAA,eAAA,SAAA,SAAA8C,kBAAA,QAAA,UAAA;cACA;;;;;AC7EA,kBAAA,kBAAsB,oBAAQ,EAAgC;AAC9D,kBAAA,WAAe,oBAAQ,EAAwB;AAC/C,kBAAA,kBAAsB,oBAAQ,EAAgC;AAG9D,kBAAA,eAAA,SAAA,aAAA;AACA,uBAAA,SAAA,OAAAE,KAAA,WAAA;AACA,sBAAAhD,KAAA,gBAAA,KAAA;AACA,sBAAA,SAAA,SAAAA,GAAA,MAAA;AACA,sBAAAhB,SAAA,gBAAA,WAAA,MAAA;AACA,sBAAA;AAGA,sBAAA,eAAAgE,OAAAA;AAAA,2BAAA,SAAAhE,QAAA;AACA,8BAAAgB,GAAAhB,QAAA;AAEA,0BAAA,SAAA;AAAA,+BAAA;oBAEA;;AAAK,2BAAY,SAAAA,QAAeA,UAAA;AAChC,2BAAA,eAAAA,UAAAgB,OAAAA,GAAAhB,MAAA,MAAAgE;AAAA,+BAAA,eAAAhE,UAAA;oBACA;AAAK,yBAAA,CAAA,eAAA;gBACL;cACA;AAEA,cAAApC,QAAA,UAAA;;;gBAGA,UAAA,aAAA,IAAA;;;gBAGA,SAAA,aAAA,KAAA;cACA;;;;;AC/BA,kBAAA,YAAgB,oBAAQ,EAAyB;AAEjD,kBAAAqG,OAAA,KAAA;AACA,kBAAApB,OAAA,KAAA;AAKA,cAAAjF,QAAA,UAAA,SAAAoC,QAAA,QAAA;AACA,oBAAA,UAAA,UAAAA,MAAA;AACA,uBAAA,UAAA,IAAAiE,KAAA,UAAA,QAAA,CAAA,IAAApB,KAAA,SAAA,MAAA;cACA;;;;;ACVA,cAAAjF,QAAA,UAAA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;gBACA;cACA;;;;;ACTA,kBAAA,kBAAsB,oBAAQ,EAAgC;AAE9D,kBAAA,gBAAA,gBAAA,aAAA;AACA,kBAAA,OAAA,CAAA;AAEA,mBAAA,aAAA,IAAA;AAEA,cAAAA,QAAA,UAAA,OAAA,IAAA,MAAA;;;;;ACPA,cAAAA,QAAA,UAAA,WAAA;cAA8B;;;;;ACA9B,cAAAA,QAAA,UAAA,SAAAiD,KAAA,aAAA/C,OAAA;AACA,oBAAA,EAAA+C,eAAA,cAAA;AACA,wBAAA,UAAA,gBAAA/C,QAAAA,QAAA,MAAA,MAAA,YAAA;gBACA;AAAG,uBAAA+C;cACH;;;;;ACJA,kBAAA,aAAiB,oBAAQ,EAA2B;AAEpD,cAAAjD,QAAA,UAAA,WAAA,aAAA,WAAA,KAAA;;;;;;ACDA,kBAAA,YAAgB,oBAAQ,EAAyB;AAEjD,kBAAA,oBAAA,SAAAsG,IAAA;AACA,oBAAA,SAAA;AACA,qBAAA,UAAA,IAAAA,GAAA,SAAA,WAAA,UAAA;AACA,sBAAA,YAAA,UAAA,WAAA;AAAA,0BAAA,UAAA,yBAAA;AACA,4BAAA;AACA,2BAAA;gBACA,CAAG;AACH,qBAAA,UAAA,UAAA,OAAA;AACA,qBAAA,SAAA,UAAA,MAAA;cACA;AAGA,cAAAtG,QAAA,QAAA,IAAA,SAAAsG,IAAA;AACA,uBAAA,IAAA,kBAAAA,EAAA;cACA;;;;;ACjBA,kBAAA5D,UAAa,oBAAQ,CAAqB;AAC1C,kBAAA,YAAgB,oBAAQ,EAAgC;AAExD,kBAAA6D,WAAA7D,QAAA;AACA,kBAAA,WAAA6D,YAAAA,SAAA;AACA,kBAAA,KAAA,YAAA,SAAA;AACA,kBAAA,OAAAC;AAEA,kBAAA,IAAA;AACA,wBAAA,GAAA,MAAA,GAAA;AACA,gBAAAA,WAAA,MAAA,CAAA,IAAA,MAAA,CAAA;cACA,WAAC,WAAA;AACD,wBAAA,UAAA,MAAA,aAAA;AACA,oBAAA,CAAA,SAAA,MAAA,CAAA,KAAA,IAAA;AACA,0BAAA,UAAA,MAAA,eAAA;AACA,sBAAA;AAAA,oBAAAA,WAAA,MAAA,CAAA;gBACA;cACA;AAEA,cAAAxG,QAAA,UAAAwG,YAAA,CAAAA;;;;;;;;;;;;;ACdA,kBAAA,aAAA,QAAA,gBAAA,oBAAA,CAAA,CAAA;AACA,kBAAA,SAAA,oBAAA,CAAA;AACA,kBAAA,WAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AACA,kBAAA,cAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AACA,kBAAA,YAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AACA,kBAAA,UAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AACA,kBAAA,UAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AACA,kBAAA,aAAA,QAAA,aAAA,oBAAA,GAAA,CAAA;AACA,kBAAA,mBAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AACA,kBAAA,eAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AACA,kBAAA,iBAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AACA,kBAAA,oBAAA,QAAA,aAAA,oBAAA,GAAA,CAAA;AACA,kBAAA,mBAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AACA,kBAAA,YAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AACA,kBAAA,UAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AACA,kBAAA,UAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AACA,kBAAA,YAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AACA,kBAAA,qBAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AAEA,kBAAA,YAAA,QAAA,aAAA,oBAAA,GAAA,CAAA;AAIA,kBAAA,YAAA,QAAA,gBAAA,oBAAA,EAAA,CAAA;AACA,kBAAA,aAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AACA,kBAAA,iBAAA,QAAA,gBAAA,oBAAA,EAAA,CAAA;AACA,kBAAA,UAAA,QAAA,gBAAA,oBAAA,EAAA,CAAA;AACA,kBAAA,cAAA,QAAA,gBAAA,oBAAA,EAAA,CAAA;AACA,kBAAA,YAAA,QAAA,gBAAA,oBAAA,EAAA,CAAA;AAEA,kBAAI,YAAY;AAEhB,kBAAA;;gBAAA,WAAA;AAoDI,2BAAAC,QAAY,iBAAqC,cAAiC;AAxC3E,yBAAA,sBAAuC,CAAA;AA2BtC,yBAAA,qBAAiC,CAAA;AAerC,yBAAK,KAAK,gBAAc;AAExB,yBAAK,kBAAkB;AACvB,yBAAK,eAAe;AAEpB,+BAAA,kBAAkB,IAAlB;AAIA,yBAAK,SAAS,OAAA,UAAU,SAAA,SAAA,CAAV;AACd,yBAAK,eAAe,WAAA,SAAA,EAAE,aAAF;AACpB,yBAAK,qBAAqB,WAAA,SAAA,EAAE,aAAF;AAC1B,yBAAK,YAAY,WAAA,SAAA,EAAE,aAAF;AACjB,yBAAK,gBAAgB;AACrB,yBAAK,aAAa;AAClB,yBAAK,UAAU;AACf,yBAAK,cAAc;AACnB,yBAAK,mBAAmB;AAExB,yBAAK,YAAY,IAAI,YAAA,SAAA,EAAqB,IAAzB;AACjB,yBAAK,MAAM,IAAI,UAAA,SAAA,EAAW,IAAf;AACX,yBAAK,MAAM,IAAI,QAAA,SAAA,EAAK,IAAT;AACX,yBAAK,QAAQ,IAAI,QAAA,SAAA,EAAM,IAAV;AACb,yBAAK,SAAS,IAAI,UAAA,SAAA,EAAJ;AACd,yBAAK,SAAS,IAAI,QAAA,SAAA,EAAO,IAAX;AACd,yBAAK,UAAU,IAAI,QAAA,SAAA,EAAQ,IAAZ;AACf,yBAAK,oBAAoB,IAAI,mBAAA,SAAA,EAAgB,IAApB;AAEnB,wBAAA1B,MAAsB,UAAA,SAAA,EAAY,IAAZ,GAApB2B,WAAO3B,IAAA,SAAE4B,UAAM5B,IAAA;AACvB,yBAAK,UAAU2B;AACf,yBAAK,SAASC;AACd,yBAAK,WAAW;kBACnB;AAMM,kBAAAF,QAAA,UAAA,gBAAP,SAAqB,SAAiB;AAClC,qCAAA,SAAA,EAAc,MAAM,OAApB;kBACH;AAKM,kBAAAA,QAAA,UAAA,SAAP,WAAA;AAEI,yBAAK,OAAO,KAAK,IAAjB;AAGA,yBAAK,mBAAmB,KAAK,OAAO,eAAZ;AAGxB,wBAAI,CAAC,KAAK,kBAAkB;AACxB,2BAAK,OAAO,kBAAkB;oBACjC;AAGD,mCAAA,SAAA,EAAY,IAAZ;AAGA,+BAAA,SAAA,EAAQ,IAAR;AAGA,yBAAK,IAAI,KAAT;AAGA,yBAAK,MAAM,KAAX;AAGA,sCAAA,SAAA,EAAe,IAAf;AAGA,yBAAK,cAAc,IAAnB;AAGA,iCAAA,SAAA,EAAU,IAAV;AAGA,yBAAK,OAAO,QAAZ;AAEA,yBAAK,QAAQ,QAAb;AAGA,8BAAA,SAAA,EAAY,IAAZ;kBACH;AAMM,kBAAAA,QAAA,UAAA,gBAAP,SAAqBvE,KAAY;AAC7B,yBAAK,mBAAmB,KAAKA,GAA7B;AACA,2BAAO;kBACV;AAKM,kBAAAuE,QAAA,UAAA,UAAP,WAAA;AAAA,wBAAA;AAAA,wBAAA,QAAA;AAEI,qBAAA,GAAA,SAAA,SAAA,GAAA,WAAA,KAAK,kBAAL,EAAA,KAAA,UAAgC,SAAAvE,KAAE;AAAI,6BAAAA,IAAG,KAAH,KAAA;oBAAa,CAAnD;AAEA,yBAAK,aAAa,OAAlB;AACA,yBAAK,mBAAmB,OAAxB;kBACH;AAKM,kBAAAuE,QAAA,UAAA,aAAP,WAAA;AACI,sCAAA,cAAc,IAAd;kBACH;AAKM,kBAAAA,QAAA,UAAA,eAAP,WAAA;AACI,sCAAA,gBAAgB,IAAhB;kBACH;AAMM,kBAAAA,QAAA,UAAA,eAAP,SAAoB/C,KAAU;AAC1B,qCAAA,SAAA,EAAa,MAAMA,GAAnB;kBACH;AAOM,kBAAA+C,QAAA,eAAP,SAAoB,KAAa,MAAS;AACtC,wBAAI,CAAC,QAAQ,OAAO,SAAS;AAAY;AACzC,oBAAAA,QAAO,gCAAgC,GAAvC,IAA8C;kBACjD;AAOM,kBAAAA,QAAA,UAAA,iBAAP,SAAsBvG,OAAc,SAAwB;AACxD,8BAAA,eAAeA,OAAM,SAAS,KAAK,mBAAnC;kBACH;AAOM,kBAAAuG,QAAA,iBAAP,SAAsBvG,OAAc,SAAwB;AACxD,8BAAA,eAAeA,OAAM,SAASuG,QAAO,yBAArC;kBACH;AA/MM,kBAAAA,QAAA,IAAI,WAAA,SAAA;AAEJ,kBAAAA,QAAA,UAAU,UAAA,SAAA;AACV,kBAAAA,QAAA,WAAW,WAAA,SAAA;AACX,kBAAAA,QAAA,eAAe,eAAA,SAAA;AACf,kBAAAA,QAAA,QAAQ,QAAA,SAAA;AACR,kBAAAA,QAAA,YAAY,YAAA,SAAA;AACZ,kBAAAA,QAAA,UAAU,UAAA,SAAA;AACV,kBAAAA,QAAA,kCAAgD,CAAA;AAChD,kBAAAA,QAAA,4BAA6C,CAAA;AAuMxD,yBAAAA;gBAAC,EAlND;;AAoNA,cAAAxG,SAAA,SAAA,IAAe;;;;;ACzPf,kBAAA,WAAe,oBAAQ,EAAwB;AAC/C,kBAAA,UAAc,oBAAQ,EAAuB;AAC7C,kBAAA,kBAAsB,oBAAQ,EAAgC;AAE9D,kBAAA,UAAA,gBAAA,SAAA;AAIA,cAAAD,QAAA,UAAA,SAAA,eAAA,QAAA;AACA,oBAAAsG;AACA,oBAAA,QAAA,aAAA,GAAA;AACA,kBAAAA,KAAA,cAAA;AAEA,sBAAA,OAAAA,MAAA,eAAAA,OAAA,SAAA,QAAAA,GAAA,SAAA;AAAA,oBAAAA,KAAA;2BACA,SAAAA,EAAA,GAAA;AACA,oBAAAA,KAAAA,GAAA,OAAA;AACA,wBAAAA,OAAA;AAAA,sBAAAA,KAAA;kBACA;gBACA;AAAG,uBAAA,KAAAA,OAAA,SAAA,QAAAA,IAAA,WAAA,IAAA,IAAA,MAAA;cACH;;;;;ACnBA,cAAAtG,QAAA,UAAiB,oBAAQ,GAAoC;;;;;ACA7D,kBAAA,yBAA6B,oBAAQ,EAAuC;AAC5E,kBAAA,cAAkB,oBAAQ,EAA0B;AAEpD,kBAAA,aAAA,MAAA,cAAA;AACA,kBAAA,QAAA,OAAA,MAAA,aAAA,aAAA,GAAA;AACA,kBAAA,QAAA,OAAA,aAAA,aAAA,IAAA;AAGA,kBAAA,eAAA,SAAA,MAAA;AACA,uBAAA,SAAA,OAAA;AACA,sBAAAyF,UAAA,OAAA,uBAAA,KAAA,CAAA;AACA,sBAAA,OAAA;AAAA,oBAAAA,UAAAA,QAAA,QAAA,OAAA,EAAA;AACA,sBAAA,OAAA;AAAA,oBAAAA,UAAAA,QAAA,QAAA,OAAA,EAAA;AACA,yBAAAA;gBACA;cACA;AAEA,cAAAzF,QAAA,UAAA;;;gBAGA,OAAA,aAAA,CAAA;;;gBAGA,KAAA,aAAA,CAAA;;;gBAGA,MAAA,aAAA,CAAA;cACA;;;;;AC3BA,cAAAA,QAAA,UAAiB,oBAAQ,GAAqC;;;;;ACA9D,kBAAA,mBAAuB,oBAAQ,GAA4B;AAE3D,kBAAA,UAAc,oBAAQ,GAAmB;AAEzC,uBAAA,QAAA,KAAA;AACA;AAEA,oBAAA,OAAA,YAAA,cAAA,OAAA,qBAAA,UAAA;AACA,kBAAAA,QAAA,UAAA,UAAA,SAAA4G,SAAAC,MAAA;AACA,2BAAA,OAAAA;kBACA;gBACA,OAAG;AACH,kBAAA7G,QAAA,UAAA,UAAA,SAAA4G,SAAAC,MAAA;AACA,2BAAAA,QAAA,OAAA,YAAA,cAAAA,KAAA,gBAAA,WAAAA,SAAA,QAAA,YAAA,WAAA,OAAAA;kBACA;gBACA;AAEA,uBAAA,QAAA,GAAA;cACA;AAEA,cAAA7G,QAAA,UAAA;;;;;ACpBA,kBAAA,kBAAsB,oBAAQ,EAAgC;AAE9D,cAAAC,SAAA,IAAA;;;;;ACFA,cAAAD,QAAA,UAAiB,oBAAQ,GAAoC;;;;;;;;;;;;;ACO7D,kBAAA,UAAA,QAAA,gBAAA,oBAAA,EAAA,CAAA;AASA,kBAAA;;gBAAA,WAAA;AAMI,2BAAA8G,MAAY,OAAmBtE,SAAc;AAA7C,wBAAA,QAAA;AACI,yBAAK,QAAQ;AACb,yBAAK,SAASA;AACd,yBAAK,UAAU;AAGf,0BAAM,GAAG,SAAS,SAAC3B,IAAQ;AAAA,0BAAA;AACvB,8BAAA,SAAA,EAAM,iBAAN;AAGA,uBAAA,GAAA,SAAA,SAAA,GAAA,WAAA2B,QAAO,IAAI,WAAW,eAAtB,EAAA,KAAA,UAA8C,SAAAN,KAAE;AAAI,+BAAAA,IAAA;sBAAI,CAAxD;AAEA,sBAAArB,GAAE,gBAAF;AACA,0BAAI2B,QAAO,UAAU,SAAjB,KAA+B,MAAM;AACrC;sBACH;AACD,4BAAK,aAAa3B,EAAlB;oBACH,CAXD;kBAYH;AAMS,kBAAAiG,MAAA,UAAA,eAAV,SAAuBjG,IAAQ;kBAAU;AAK/B,kBAAAiG,MAAA,UAAA,SAAV,WAAA;AACI,yBAAK,UAAU;AACf,yBAAK,MAAM,SAAS,YAApB;kBACH;AAKS,kBAAAA,MAAA,UAAA,WAAV,WAAA;AACI,yBAAK,UAAU;AACf,yBAAK,MAAM,YAAY,YAAvB;kBACH;AAKD,mBAAA,GAAA,gBAAA,SAAA,GAAWA,MAAA,WAAA,YAAQ;;;;yBAAnB,SAAA7E,OAAA;AACI,6BAAO,KAAK;oBACf;;;kBAFkB,CAAnB;AAGJ,yBAAA6E;gBAAC,EAtDD;;AAwDA,cAAA7G,SAAA,SAAA,IAAe;;;;;;;;;;;;;AC5DF,cAAAA,SAAA,YAAY,CAAC,KAAK,QAAQ,KAAK,QAAnB;AAEzB,uBAAgB,eAAe,eAAyB;AACpD,oBAAI8G,QAAO,cAAc,MAAM,CAApB;AAEX,uBAAOA,UAAQ,GAAA,UAAA,SAAA,GAAA,WAAA9G,SAAA,SAAA,EAAA,KAAA,UAAmB8G,MAAK,QAAxB,GAAmC;AAAA,sBAAA;AAC9C,kBAAAA,QAAOA,MAAK;AAEZ,sBAAIA,MAAK,aAAa,KAAK;AACvB,2BAAOA;kBACV;gBACJ;cACJ;AAVD,cAAA9G,SAAA,iBAAA;AAYA,uBAAS,SAASuC,SAAc;;AAC5B,oBAAM,iBAAiBA,QAAO,UAAU,0BAAjB;AAEvB,oBAAI,GAAAuC,MAAC,mBAAc,QAAd,mBAAc,SAAA,SAAd,eAAgB,WAAK,QAAAA,QAAA,SAAA,SAAAA,IAAE,SAAQ;AAChC,yBAAO;gBACV;AAGD,oBAAI,eAAe,YAAf,MAAiC,KAAK;AACtC,yBAAO;gBACV;AAGD,oBAAM,aAAa,eAAe,cAAD;AAEjC,oBAAI,cAAc,WAAW,aAAa,KAAK;AAC3C,yBAAO;gBACV;AAED,uBAAO;cACV;AAED,cAAA9E,SAAA,SAAA,IAAe;;;;;;;;;;;;;;;AC1Cf,kBAAA,SAAA,oBAAA,CAAA;AACA,kBAAA,gBAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AACA,kBAAA,aAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AASA,kBAAA;;gBAAA,WAAA;AAGI,2BAAA+G,WAAYxE,SAAc;AACtB,yBAAK,SAASA;kBACjB;AAMM,kBAAAwE,WAAA,UAAA,YAAP,SAAiB,KAAa,KAAc,MAAa;AACrD,wBAAMxE,UAAS,KAAK;AACpB,wBAAMyE,UAASzE,QAAO;AAEtB,wBAAM,aAAa;AACnB,wBAAM7B,KAAI,SAAJA,GAAKuG,OAAc,QAA2B;AAA3B,0BAAA,WAAA,QAAA;AAAA,iCAAA;sBAA2B;AAChD,6BAAO1E,QAAO,QAAQ,EAAE,SAAS0E,KAA1B;oBACV;AAOD,wBAAI,YAAY,IAAI,QAAQ,MAAM,MAAlB,EAA0B,QAAQ,MAAM,MAAxC;AAGhB,gCAAY,UAAU,QAAQ,KAAK,GAAvB;AAEZ,wBAAI,WAAW;AAGf,wBAAI,MAAM;AACN,iCAAW,KAAK,QAAQ,KAAK,GAAlB;AAEX,iCAAW,gBAAc,mBAAmB,QAAD,IAAU;oBACxD;AAED,wBAAI,UAAU;AAEd,wBAAI,KAAK;AACL,gCAAU,IAAI,QAAQ,MAAM,MAAlB,EAA0B,QAAQ,MAAM,MAAxC;AAGV,gCAAU,QAAQ,QAAQ,KAAK,GAArB;AAEV,gCAAU,UAAQ,UAAO;oBAC5B;AAGD,oBAAA1E,QAAO,IAAP,IAAA,EACI,cACA,eAAa,YAAS,OAAK,UAAU,WAAQ,mDAFjD;AAKA,oBAAAyE,QAAO,gBAAgB,KAAK,KAAK,IAAjC;AAGA,wBAAI,MAAW,SAAS,cAAc,KAAvB;AACf,wBAAI,SAAS,WAAA;AACT,4BAAM;oBACT;AACD,wBAAI,UAAU,WAAA;AACV,sBAAAA,QAAO,YACHtG,GAAE,sCAAD,GACD,SACA,iBAAeA,GAAE,sCAAD,IAAU,WAAIA,GAAE,0BAAD,IAAQ,OAAK,MAAG,YAAKA,GAAE,sCAAD,CAHzD;AAKA,4BAAM;oBACT;AACD,wBAAI,UAAU,WAAA;AAAM,6BAAC,MAAD;oBAAY;AAChC,wBAAI,MAAM;kBACb;AAMM,kBAAAqG,WAAA,UAAA,YAAP,SAAiB,OAAwB;AAAzC,wBAAA,UAAA;AACI,wBAAI,CAAC,MAAM,QAAQ;AACf;oBACH;AAED,wBAAMxE,UAAS,KAAK;AACpB,wBAAMyE,UAASzE,QAAO;AAItB,wBAAM,aAAa;AACnB,wBAAM7B,KAAI,SAAJA,GAAKuG,OAAY;AACnB,6BAAO1E,QAAO,QAAQ,EAAE,aAAa0E,KAA9B;oBACV;AAKD,wBAAI,kBAAkBD,QAAO;AAE7B,wBAAM,sBAAsBA,QAAO;AAEnC,wBAAM,UAAUA,QAAO;AACvB,wBAAM,WAAW,UAAU,OAAO;AAElC,wBAAM,YAAYA,QAAO;AAEzB,wBAAM,iBAAiBA,QAAO;AAE9B,wBAAM,kBAAkBA,QAAO;AAE/B,wBAAM,yBAAyBA,QAAO;AAEtC,wBAAM,mBAAmBA,QAAO;AAEhC,wBAAM,QAAQA,QAAO;AAErB,wBAAM,UAAUA,QAAO;AAEvB,wBAAM,kBAAkBA,QAAO;AAE/B,wBAAM,kBAAkBA,QAAO;AAE/B,wBAAI,CAAC,iBAAiB;AAElB,0BAAI,CAAC,mBAAmB,CAAC,qBAAqB;AAC1C;sBACH;oBACJ;AAGD,wBAAM,cAAsB,CAAA;AAC5B,wBAAM,WAAqB,CAAA;AAC3B,2BAAA,WAAW,OAAO,SAAA,MAAI;AAElB,0BAAI,CAAC;AAAM;AAEX,0BAAM/G,QAAO,KAAK,QAAQ,KAAK,KAAK,QAAQ,KAAK,GAAvB;AAC1B,0BAAM,OAAO,KAAK;AAGlB,0BAAI,CAACA,SAAQ,CAAC,MAAM;AAChB;sBACH;AAGD,0BAAM,UAAUsC,QAAO,OAAO,gBAAgB,KAAK,GAAnC;AAChB,0BAAM,iBAAiB,OAAK,UAAO;AACnC,0BAAM,sBAAsB,IAAI,OAAO,gBAAgB,GAA3B;AAC5B,0BAAI,oBAAoB,KAAKtC,KAAzB,MAAmC,OAAO;AAE1C,iCAAS,KAAK,WAAIA,QAAI,WAAIS,GAAE,0BAAD,CAA3B;AACA;sBACH;AAED,0BAAI,UAAU,MAAM;AAEhB,iCAAS,KAAK,WAAIT,QAAI,WAAIS,GAAE,cAAD,IAAM,MAAI,WAAQ,GAA7C;AACA;sBACH;AAGD,kCAAY,KAAK,IAAjB;oBACH,CA9BD;AAgCA,wBAAI,SAAS,QAAQ;AACjB,sBAAAsG,QAAO,YAAetG,GAAE,4CAAD,IAAW,SAAS,SAAS,KAAK,IAAd,GAAqB,SAAhE;AACA;oBACH;AAGD,wBAAI,YAAY,WAAW,GAAG;AAC1B,sBAAAsG,QAAO,YAAYtG,GAAE,kDAAD,GAAc,SAAlC;AACA;oBACH;AAED,wBAAI,YAAY,SAAS,WAAW;AAChC,sBAAAsG,QAAO,YAAYtG,GAAE,sCAAD,IAAa,YAAYA,GAAE,oBAAD,GAAS,SAAvD;AACA;oBACH;AAGD,wBAAI,mBAAmB,OAAO,oBAAoB,YAAY;AAAA,0BAAA;AAC1D,sCAAgB,cAAa,GAAA,MAAA,SAAA,GAAA,WAAA,KAAK,SAAL,EAAA,KAAA,UAAoB,IAApB,CAAd;AAGf;oBACH;AAKD,wBAAM,WAAW,IAAI,SAAJ;AACjB,qBAAA,GAAA,SAAA,SAAA,GAAA,WAAW,EAAA,KAAX,aAAoB,SAAC,MAAYyB,QAAa;AAC1C,0BAAIlC,QAAO,kBAAkB,KAAK;AAClC,0BAAI,YAAY,SAAS,GAAG;AAExB,wBAAAA,QAAOA,SAAQkC,SAAQ;sBAC1B;AACD,+BAAS,OAAOlC,OAAM,IAAtB;oBACH,CAPU;AAQX,wBAAI,iBAAiB;AAEjB,0BAAM,qBAAqB,gBAAgB,MAAM,GAAtB;AAC3B,wCAAkB,mBAAmB,CAAD;AACpC,0BAAM,sBAAsB,mBAAmB,CAAD,KAAO;AACrD,uBAAA,GAAA,SAAA,SAAA,GAAA,MAAA,EAAA,KAAA,QAAQ,iBAAiB,SAAC,KAAa,KAAW;AAK9C,4BAAI,wBAAwB;AACxB,+BAAI,GAAA,SAAA,SAAA,GAAA,eAAe,EAAA,KAAf,iBAAwB,GAAT,IAAgB,GAAG;AAClC,+CAAmB;0BACtB,OAAM;AACH,+CAAmB;0BACtB;AACD,4CAAkB,kBAAkB,MAAM,MAAM;wBACnD;AAGD,iCAAS,OAAO,KAAK,GAArB;sBACH,CAhBD;AAiBA,0BAAI,qBAAqB;AACrB,2CAAmB,MAAM;sBAC5B;AAGD,0BAAM,MAAM,cAAA,SAAA,EAAK,iBAAiB;wBAC9B;wBACA;wBACA,SAAS;wBACT,iBAAiB,CAAC,CAAC;wBACnB,YAAY,SAAA,WAAAiH,MAAG;AACX,8BAAI,MAAM;AAAQ,mCAAO,MAAM,OAAOA,MAAK3E,SAAQ,WAA1B;wBAC5B;wBACD,WAAW,SAAA,UAAA2E,MAAG;AACV,0BAAAF,QAAO,YAAYtG,GAAE,sCAAD,GAAY,OAAhC;AACA,8BAAI,MAAM;AAAS,kCAAM,QAAQwG,MAAK3E,OAAnB;wBACtB;wBACD,YAAY,SAAA,WAAC4E,UAASvG,IAAC;AACnB,8BAAM,cAAc,IAAI,WAAA,SAAA,EAAS2B,OAAb;AACpB,8BAAI3B,GAAE,kBAAkB;AACpB,4BAAAuG,WAAUvG,GAAE,SAASA,GAAE;AACvB,wCAAY,KAAKuG,QAAjB;0BACH;wBACJ;wBACD,SAAS,SAAA,QAAAD,MAAG;AACR,0BAAAF,QAAO,YACHtG,GAAE,sCAAD,GACD,SACGA,GAAE,sCAAD,IAAU,WAAIA,GAAE,4CAAD,IAAW,OAAKwG,KAAI,MAH3C;AAKA,8BAAI,MAAM;AAAO,kCAAM,MAAMA,MAAK3E,OAAjB;wBACpB;wBACD,QAAQ,SAAA,OAAC2E,MAAK,WAAS;AACnB,0BAAAF,QAAO,YACHtG,GAAE,sCAAD,GACD,SACAA,GAAE,8DAAD,KAAiB,WAAIA,GAAE,0BAAD,IAAQ,QAAO,SAH1C;AAKA,8BAAI,MAAM;AAAM,kCAAM,KAAKwG,MAAK3E,SAAQ,SAAxB;wBACnB;wBACD,WAAW,SAAA,UAAC2E,MAAK,QAAe;AAC5B,8BAAI,MAAM,cAAc;AAAA,gCAAA;AAEpB,kCAAM,cAAa,GAAA,MAAA,SAAA,GAAA,YAAA,QAAK,SAAL,EAAA,KAAA,WAAoB,OAApB,GAA2B,QAAQ3E,OAAtD;AACA;0BACH;AACD,8BAAI,OAAO,SAAS,KAAK;AAErB,4BAAAyE,QAAO,YACHtG,GAAE,sCAAD,GACD,SACGA,GAAE,8DAAD,IAAc,WAAIA,GAAE,0BAAD,IAAQ,YAAU,OAAO,KAHpD;AAKA,gCAAI,MAAM;AAAM,oCAAM,KAAKwG,MAAK3E,SAAQ,MAAxB;AAChB;0BACH;AAGD,8BAAMO,QAAO,OAAO;AACpB,2BAAA,GAAA,SAAA,SAAA,GAAAA,KAAI,EAAA,KAAJA,OAAa,SAAAsE,OAAI;AACb,gCAAI,OAAOA,UAAS,UAAU;AAC1B,sCAAK,UAAUA,KAAf;4BACH,OAAM;AACH,sCAAK,UAAUA,MAAK,KAAKA,MAAK,KAAKA,MAAK,IAAxC;4BACH;0BACJ,CANG;AASJ,8BAAI,MAAM;AAAS,kCAAM,QAAQF,MAAK3E,SAAQ,MAA3B;wBACtB;sBAhE6B,CAAtB;AAkEZ,0BAAI,OAAO,QAAQ,UAAU;AAEzB,wBAAAyE,QAAO,YAAY,KAAK,OAAxB;sBACH;AAGD;oBACH;AAGD,wBAAI,qBAAqB;AACrB,6BAAA,WAAW,OAAO,SAAA,MAAI;AAClB,4BAAM,QAAQ;AACd,4BAAM,SAAS,IAAI,WAAJ;AACf,+BAAO,cAAc,IAArB;AACA,+BAAO,SAAS,WAAA;AACZ,8BAAI,CAAC,KAAK;AAAQ;AAClB,8BAAM,UAAU,KAAK,OAAO,SAAZ;AAChB,gCAAM,UAAU,SAAS,OAAzB;wBACH;sBACJ,CATD;oBAUH;kBACJ;AACL,yBAAAD;gBAAC,EA5TD;;AA8TA,cAAA/G,SAAA,SAAA,IAAe;;;;;;;;;;;;;;;ACxUf,uBAAS,OAAO,gBAA0B;AACtC,oBAAI,eAAe,QAAQ;AACvB,yBAAO,eAAe,KAAK,OAApB,MAAiC;gBAC3C;AAED,uBAAO;cACV;AAiG2B,cAAAA,SAAA,SAAA;AA5F5B,uBAAS,UAAUuC,SAAc;AAC7B,oBAAM,kBAAkBA,QAAO,UAAU,0BAAjB;AAExB,oBAAI,gBAAgB,WAAW;AAAG;AAElC,wBAAO,GAAA,OAAA,SAAA,GAAA,eAAe,EAAA,KAAf,iBAAsB,SAAA,gBAAc;AACvC,yBAAO,OAAO,cAAD;gBAChB,CAFqB;cAGzB;AAoFmC,cAAAvC,SAAA,YAAA;AA5EpC,uBAAS,kBAAkB8G,OAAY,UAAgB,KAAW;AAAA,oBAAA;AAC9D,oBAAI,CAACA,MAAK,cAAL;AAAsB;AAE3B,oBAAM,UAAUA,MAAK,UAAL;AAEhB,oBAAIO,OAAM;AACV,oBAAI,SAAS,cAAc,IAAI;AAC3B,kBAAAA,OAAM;gBACT;AAED,oBAAI,SAAiB,CAAA;AACrB,iBAAA,GAAA,SAAA,SAAA,GAAA,WAAAP,MAAK,UAAL,EAAA,KAAA,UAAwB,SAAA7F,IAAC;AAErB,sBAAI,CAAC,WAAWA,IAAG,QAAJ,KAAiBoG,MAAK;AACjC,4BAAQ,YAAYpG,GAAE,UAAU,IAAZ,CAApB;AACA,wBAAIA,GAAE,aAAa,MAAM;AACrB,6BAAO,KAAKA,EAAZ;oBACH;kBACJ;AAED,sBAAI,WAAWA,IAAG,QAAJ,GAAe;AACzB,wBAAIA,GAAE,aAAa,GAAG;AAClB,0BAAM,YAAY,kBAAkBA,IAAG,UAAU,GAAd;AACnC,0BAAI,aAAa,UAAU,gBAAgB;AAAI,oCAAO,QAAP,YAAO,SAAA,SAAP,QAAS,YAAY,SAArB;oBAClD;AACD,wBAAIA,GAAE,aAAa,GAAG;AAClB,0BAAI,SAAS,YAAYA,EAArB,GAAyB;AACzB,4BAAM,cAAc,aAAaA,IAAG,GAAJ;AAChC,gCAAQ,cAAc;sBACzB;oBACJ;AACD,oBAAAoG,OAAM;kBACT;gBACJ,CAtBD;AAwBA,iBAAA,GAAA,SAAA,SAAA,GAAA,MAAM,EAAA,KAAN,QAAe,SAAApG,IAAC;AACZ,sBAAM6F,QAAO7F;AACb,kBAAA6F,MAAK,OAAL;gBACH,CAHK;AAKN,uBAAO;cACV;AAmCQ,cAAA9G,SAAA,oBAAA;AA5BT,uBAAS,WAAW8G,OAAY,WAAe;AAE3C,oBAAIA,MAAK,aAAa,GAAG;AACrB,yBAAOA,MAAK,cAAc,UAAU;gBACvC;AAED,uBAAOA,MAAK,SAAS,SAAd;cACV;AAOD,uBAAS,aAAaA,OAAY,KAAaQ,QAAqB;AAArB,oBAAAA,WAAA,QAAA;AAAA,kBAAAA,SAAA;gBAAqB;AAChE,oBAAItD,WAAU8C,MAAK;AACnB,oBAAI,aAAa9C,aAAO,QAAPA,aAAO,SAAA,UAAP,GAAA,OAAA,SAAA,GAAAA,QAAO,EAAA,KAAPA,UAAe,GAAG,GAAX;AACxB,gBAAAA,WAAUA,aAAO,QAAPA,aAAO,SAAA,UAAP,GAAA,OAAA,SAAA,GAAAA,QAAO,EAAA,KAAPA,UAAe,GAAR;AAEjB,oBAAI,CAACsD,QAAO;AACR,sBAAI,OAAOtD;AACX,kBAAAA,WAAU;AACV,+BAAa;gBAChB;AACD,gBAAA8C,MAAK,YAAY;AACjB,uBAAO9C;cACV;AAE8C,cAAAhE,SAAA,eAAA;;;;;;;;;;;ACzG/C,kBAAA,UAAA,oBAAA,GAAA;AAEA,kBAAAuH;;gBAAA,WAAA;AAgBI,2BAAAA,OAAsB,SAAe;AAAf,yBAAA,UAAA;AAFZ,yBAAA,OAAgB;AAGtB,yBAAK,OAAO,IAAI,QAAA,UAAU,OAAd;AACZ,yBAAK,aAAa,IAAI,QAAA,UAAU,OAAd;kBACrB;AAKD,mBAAA,GAAA,gBAAA,SAAA,GAAWA,OAAA,WAAA,QAAI;;;;yBAAf,SAAAvF,OAAA;AACI,6BAAO,CAAC,KAAK,KAAK,MAAM,KAAK,WAAW,IAAjC;oBACV;;;kBAFc,CAAf;AAOO,kBAAAuF,OAAA,UAAA,eAAP,SAAoB,SAAe;AAC/B,yBAAK,KAAK,SAAS,OAAnB;AACA,yBAAK,WAAW,SAAS,OAAzB;kBACH;AAKM,kBAAAA,OAAA,UAAA,OAAP,SAAYzE,OAAO;AACf,wBAAI,KAAK,MAAM;AACX,2BAAK,WAAW,MAAhB;AACA,2BAAK,OAAO;oBACf;AACD,yBAAK,KAAK,QAAQA,KAAlB;AACA,2BAAO;kBACV;AAMM,kBAAAyE,OAAA,UAAA,SAAP,SAActF,KAAqB;AAC/B,qBAAC,KAAK,SAAS,KAAK,OAAO;AAC3B,wBAAIa,QAAO,KAAK,KAAK,SAAV;AACX,wBAAIA,OAAM;AACN,2BAAK,WAAW,QAAQA,KAAxB;AACA,sBAAAb,IAAGa,KAAD;AACF,6BAAO;oBACV;AACD,2BAAO;kBACV;AAMM,kBAAAyE,OAAA,UAAA,UAAP,SAAetF,KAAqB;AAChC,qBAAC,KAAK,SAAS,KAAK,OAAO;AAC3B,wBAAIa,QAAO,KAAK,WAAW,SAAhB;AACX,wBAAIA,OAAM;AACN,2BAAK,KAAK,QAAQA,KAAlB;AACA,sBAAAb,IAAGa,KAAD;AACF,6BAAO;oBACV;AACD,2BAAO;kBACV;AACL,yBAAAyE;gBAAC,EA7ED;;;;;;;ACPA,kBAAA,cAAkB,oBAAQ,EAA0B;AACpD,kBAAA,QAAY,oBAAQ,EAAoB;AACxC,kBAAA,gBAAoB,oBAAQ,EAAsC;AAGlE,cAAAxH,QAAA,UAAA,CAAA,eAAA,CAAA,MAAA,WAAA;AACA,uBAAA,OAAA,eAAA,cAAA,KAAA,GAAA,KAAA;kBACA,KAAA,WAAA;AAAsB,2BAAA;kBAAU;gBAChC,CAAG,EAAA,KAAA;cACH,CAAC;;;;;ACTD,kBAAA,QAAY,oBAAQ,EAAoB;AAExC,kBAAA,cAAA;AAEA,kBAAA,WAAA,SAAA,SAAA,WAAA;AACA,oBAAA,QAAA+C,MAAA,UAAA,OAAA,CAAA;AACA,uBAAA,SAAA,WAAA,OACA,SAAA,SAAA,QACA,OAAA,aAAA,aAAA,MAAA,SAAA,IACA,CAAA,CAAA;cACA;AAEA,kBAAA,YAAA,SAAA,YAAA,SAAA0C,SAAA;AACA,uBAAA,OAAAA,OAAA,EAAA,QAAA,aAAA,GAAA,EAAA,YAAA;cACA;AAEA,kBAAA1C,QAAA,SAAA,OAAA,CAAA;AACA,kBAAA,SAAA,SAAA,SAAA;AACA,kBAAA,WAAA,SAAA,WAAA;AAEA,cAAA/C,QAAA,UAAA;;;;;ACpBA,kBAAA,QAAY,oBAAQ,GAA2B;AAE/C,kBAAA,mBAAA,SAAA;AAGA,kBAAA,OAAA,MAAA,iBAAA,YAAA;AACA,sBAAA,gBAAA,SAAAiD,KAAA;AACA,yBAAA,iBAAA,KAAAA,GAAA;gBACA;cACA;AAEA,cAAAjD,QAAA,UAAA,MAAA;;;;;ACXA,kBAAA0C,UAAa,oBAAQ,CAAqB;AAC1C,kBAAA,YAAgB,oBAAQ,GAAyB;AAEjD,kBAAA,SAAA;AACA,kBAAA,QAAAA,QAAA,MAAA,KAAA,UAAA,QAAA,CAAA,CAAkD;AAElD,cAAA1C,QAAA,UAAA;;;;;;ACLA,kBAAA,iBAAqB,oBAAQ,GAAsC;AACnE,kBAAA,8BAAkC,oBAAQ,EAA6C;AACvF,kBAAA,MAAU,oBAAQ,EAAkB;AACpC,kBAAA,kBAAsB,oBAAQ,EAAgC;AAC9D,kBAAA,UAAc,oBAAQ,EAAsB;AAE5C,kBAAA,WAAA,gBAAA,UAAA;AACA,kBAAA,yBAAA;AAEA,kBAAA,aAAA,WAAA;AAA8B,uBAAA;cAAa;AAI3C,kBAAA,mBAAA,mCAAA;AAEA,kBAAA,CAAA,EAAA,MAAA;AACA,gCAAA,CAAA,EAAA,KAAA;AAEA,oBAAA,EAAA,UAAA;AAAA,2CAAA;qBACA;AACA,sDAAA,eAAA,eAAA,aAAA,CAAA;AACA,sBAAA,sCAAA,OAAA;AAAA,wCAAA;gBACA;cACA;AAEA,kBAAA,qBAAA;AAAA,oCAAA,CAAA;AAGA,kBAAA,CAAA,WAAA,CAAA,IAAA,mBAAA,QAAA,GAAA;AACA,4CAAA,mBAAA,UAAA,UAAA;cACA;AAEA,cAAAA,QAAA,UAAA;gBACA;gBACA;cACA;;;;;ACpCA,kBAAA,MAAU,oBAAQ,EAAkB;AACpC,kBAAA,WAAe,oBAAQ,EAAwB;AAC/C,kBAAA,YAAgB,oBAAQ,EAAyB;AACjD,kBAAA,2BAA+B,oBAAQ,GAAuC;AAE9E,kBAAA,WAAA,UAAA,UAAA;AACA,kBAAA,kBAAA,OAAA;AAIA,cAAAA,QAAA,UAAA,2BAAA,OAAA,iBAAA,SAAAoD,IAAA;AACA,gBAAAA,KAAA,SAAAA,EAAA;AACA,oBAAA,IAAAA,IAAA,QAAA;AAAA,yBAAAA,GAAA,QAAA;AACA,oBAAA,OAAAA,GAAA,eAAA,cAAAA,cAAAA,GAAA,aAAA;AACA,yBAAAA,GAAA,YAAA;gBACA;AAAG,uBAAAA,cAAA,SAAA,kBAAA;cACH;;;;;AChBA,kBAAA,gBAAoB,oBAAQ,EAA4B;AAExD,cAAApD,QAAA,UAAA,iBAEA,CAAA,OAAA,QAEA,OAAA,OAAA,YAAA;;;;;ACNA,kBAAA,MAAU,oBAAQ,EAAkB;AACpC,kBAAA,kBAAsB,oBAAQ,EAAgC;AAC9D,kBAAAyH,WAAc,oBAAQ,EAA6B,EAAA;AACnD,kBAAA,aAAiB,oBAAQ,EAA0B;AAEnD,cAAAzH,QAAA,UAAA,SAAAI,SAAAsH,QAAA;AACA,oBAAAtE,KAAA,gBAAAhD,OAAA;AACA,oBAAA,IAAA;AACA,oBAAA,SAAA,CAAA;AACA,oBAAA;AACA,qBAAA,OAAAgD;AAAA,mBAAA,IAAA,YAAA,GAAA,KAAA,IAAAA,IAAA,GAAA,KAAA,OAAA,KAAA,GAAA;AAEA,uBAAAsE,OAAA,SAAA;AAAA,sBAAA,IAAAtE,IAAA,MAAAsE,OAAA,GAAA,CAAA,GAAA;AACA,qBAAAD,SAAA,QAAA,GAAA,KAAA,OAAA,KAAA,GAAA;kBACA;AACA,uBAAA;cACA;;;;;AChBA,kBAAA,aAAiB,oBAAQ,EAA2B;AAEpD,cAAAzH,QAAA,UAAA,WAAA,YAAA,iBAAA;;;;;ACFA,kBAAA0C,UAAa,oBAAQ,CAAqB;AAE1C,cAAA1C,QAAA,UAAA0C,QAAA;;;;;ACFA,kBAAA,WAAe,oBAAQ,EAAuB;AAE9C,cAAA1C,QAAA,UAAA,SAAA,QAAA,KAAA,SAAA;AACA,yBAAA,OAAA,KAAA;AACA,sBAAA,WAAA,QAAA,UAAA,OAAA,GAAA;AAAA,2BAAA,GAAA,IAAA,IAAA,GAAA;;AACA,6BAAA,QAAA,KAAA,IAAA,GAAA,GAAA,OAAA;gBACA;AAAG,uBAAA;cACH;;;;;;ACNA,kBAAA,aAAiB,oBAAQ,EAA2B;AACpD,kBAAA,uBAA2B,oBAAQ,EAAqC;AACxE,kBAAA,kBAAsB,oBAAQ,EAAgC;AAC9D,kBAAA,cAAkB,oBAAQ,EAA0B;AAEpD,kBAAA,UAAA,gBAAA,SAAA;AAEA,cAAAA,QAAA,UAAA,SAAA,kBAAA;AACA,oBAAA,cAAA,WAAA,gBAAA;AACA,oBAAA,iBAAA,qBAAA;AAEA,oBAAA,eAAA,eAAA,CAAA,YAAA,OAAA,GAAA;AACA,iCAAA,aAAA,SAAA;oBACA,cAAA;oBACA,KAAA,WAAA;AAAwB,6BAAA;oBAAa;kBACrC,CAAK;gBACL;cACA;;;;;AClBA,kBAAA,kBAAsB,oBAAQ,EAAgC;AAC9D,kBAAA,YAAgB,oBAAQ,EAAwB;AAEhD,kBAAA,WAAA,gBAAA,UAAA;AACA,kBAAA,iBAAA,MAAA;AAGA,cAAAA,QAAA,UAAA,SAAAiD,KAAA;AACA,uBAAAA,QAAA,WAAA,UAAA,UAAAA,OAAA,eAAA,QAAA,MAAAA;cACA;;;;;ACTA,kBAAA,UAAc,oBAAQ,EAAsB;AAC5C,kBAAA,YAAgB,oBAAQ,EAAwB;AAChD,kBAAA,kBAAsB,oBAAQ,EAAgC;AAE9D,kBAAA,WAAA,gBAAA,UAAA;AAEA,cAAAjD,QAAA,UAAA,SAAAiD,KAAA;AACA,oBAAAA,OAAA;AAAA,yBAAAA,IAAA,QAAA,KACAA,IAAA,YAAA,KACA,UAAA,QAAAA,GAAA,CAAA;cACA;;;;;ACVA,kBAAA,WAAe,oBAAQ,EAAwB;AAG/C,cAAAjD,QAAA,UAAA,SAAA,UAAAkC,KAAA,OAAA,SAAA;AACA,oBAAA;AACA,yBAAA,UAAAA,IAAA,SAAA,KAAA,EAAA,CAAA,GAAA,MAAA,CAAA,CAAA,IAAAA,IAAA,KAAA;gBAEA,SAAGX,QAAA;AACH,sBAAA,eAAA,SAAA,QAAA;AACA,sBAAA,iBAAA;AAAA,6BAAA,aAAA,KAAA,QAAA,CAAA;AACA,wBAAAA;gBACA;cACA;;;;;ACZA,kBAAA,kBAAsB,oBAAQ,EAAgC;AAE9D,kBAAA,WAAA,gBAAA,UAAA;AACA,kBAAA,eAAA;AAEA,kBAAA;AACA,oBAAA,SAAA;AACA,oBAAA,qBAAA;kBACA,MAAA,WAAA;AACA,2BAAA,EAAc,MAAA,CAAA,CAAA,SAAA;kBACd;kBACA,UAAA,WAAA;AACA,mCAAA;kBACA;gBACA;AACA,mCAAA,QAAA,IAAA,WAAA;AACA,yBAAA;gBACA;AAEA,sBAAA,KAAA,oBAAA,WAAA;AAA8C,wBAAA;gBAAS,CAAE;cACzD,SAACA,QAAA;cAAgB;AAEjB,cAAAvB,QAAA,UAAA,SAAA,MAAA,cAAA;AACA,oBAAA,CAAA,gBAAA,CAAA;AAAA,yBAAA;AACA,oBAAA,oBAAA;AACA,oBAAA;AACA,sBAAAI,UAAA,CAAA;AACA,kBAAAA,QAAA,QAAA,IAAA,WAAA;AACA,2BAAA;sBACA,MAAA,WAAA;AACA,+BAAA,EAAkB,MAAA,oBAAA,KAAA;sBAClB;oBACA;kBACA;AACA,uBAAAA,OAAA;gBACA,SAAGmB,QAAA;gBAAgB;AACnB,uBAAA;cACA;;;;;ACrCA,kBAAA,WAAe,oBAAQ,EAAwB;AAC/C,kBAAA,YAAgB,oBAAQ,EAAyB;AACjD,kBAAA,kBAAsB,oBAAQ,EAAgC;AAE9D,kBAAA,UAAA,gBAAA,SAAA;AAIA,cAAAvB,QAAA,UAAA,SAAAoD,IAAA,oBAAA;AACA,oBAAAkD,KAAA,SAAAlD,EAAA,EAAA;AACA,oBAAAuE;AACA,uBAAArB,OAAA,WAAAqB,KAAA,SAAArB,EAAA,EAAA,OAAA,MAAA,SAAA,qBAAA,UAAAqB,EAAA;cACA;;;;;ACZA,kBAAAjF,UAAa,oBAAQ,CAAqB;AAC1C,kBAAA,QAAY,oBAAQ,EAAoB;AACxC,kBAAA,UAAc,oBAAQ,EAA0B;AAChD,kBAAA,OAAW,oBAAQ,EAAoC;AACvD,kBAAAZ,QAAW,oBAAQ,GAAmB;AACtC,kBAAA,gBAAoB,oBAAQ,EAAsC;AAClE,kBAAA,SAAa,oBAAQ,GAA4B;AAEjD,kBAAA8F,YAAAlF,QAAA;AACA,kBAAA,MAAAA,QAAA;AACA,kBAAA,QAAAA,QAAA;AACA,kBAAA6D,WAAA7D,QAAA;AACA,kBAAA,iBAAAA,QAAA;AACA,kBAAA,WAAAA,QAAA;AACA,kBAAA,UAAA;AACA,kBAAA,QAAA,CAAA;AACA,kBAAA,qBAAA;AACA,kBAAA,OAAA,SAAA;AAEA,kBAAA,MAAA,SAAAgB,KAAA;AAEA,oBAAA,MAAA,eAAAA,GAAA,GAAA;AACA,sBAAAxB,MAAA,MAAAwB,GAAA;AACA,yBAAA,MAAAA,GAAA;AACA,kBAAAxB,IAAA;gBACA;cACA;AAEA,kBAAA,SAAA,SAAAwB,KAAA;AACA,uBAAA,WAAA;AACA,sBAAAA,GAAA;gBACA;cACA;AAEA,kBAAA,WAAA,SAAA,OAAA;AACA,oBAAA,MAAA,IAAA;cACA;AAEA,kBAAAmE,QAAA,SAAAnE,KAAA;AAEA,gBAAAhB,QAAA,YAAAgB,MAAA,IAAAkE,UAAA,WAAA,OAAAA,UAAA,IAAA;cACA;AAGA,kBAAA,CAAA,OAAA,CAAA,OAAA;AACA,sBAAA,SAAA,aAAA1F,KAAA;AACA,sBAAA,OAAA,CAAA;AACA,sBAAA,IAAA;AACA,yBAAA,UAAA,SAAA;AAAA,yBAAA,KAAA,UAAA,GAAA,CAAA;AACA,wBAAA,EAAA,OAAA,IAAA,WAAA;AAEA,qBAAA,OAAAA,OAAA,aAAAA,MAAA,SAAAA,GAAA,GAAA,MAAA,QAAA,IAAA;kBACA;AACA,wBAAA,OAAA;AACA,yBAAA;gBACA;AACA,wBAAA,SAAA,eAAAwB,KAAA;AACA,yBAAA,MAAAA,GAAA;gBACA;AAEA,oBAAA,QAAA6C,QAAA,KAAA,WAAA;AACA,0BAAA,SAAA7C,KAAA;AACA,oBAAA6C,SAAA,SAAA,OAAA7C,GAAA,CAAA;kBACA;gBAEA,WAAG,YAAA,SAAA,KAAA;AACH,0BAAA,SAAAA,KAAA;AACA,6BAAA,IAAA,OAAAA,GAAA,CAAA;kBACA;gBAGA,WAAG,kBAAA,CAAA,QAAA;AACH,4BAAA,IAAA,eAAA;AACA,yBAAA,QAAA;AACA,0BAAA,MAAA,YAAA;AACA,0BAAA,KAAA,KAAA,aAAA,MAAA,CAAA;gBAGA,WACAhB,QAAA,oBACA,OAAA,eAAA,cACA,CAAAA,QAAA,iBACA,CAAA,MAAAmF,KAAA,KACAD,UAAA,aAAA,SACA;AACA,0BAAAC;AACA,kBAAAnF,QAAA,iBAAA,WAAA,UAAA,KAAA;gBAEA,WAAG,sBAAA,cAAA,QAAA,GAAA;AACH,0BAAA,SAAAgB,KAAA;AACA,oBAAA5B,MAAA,YAAA,cAAA,QAAA,CAAA,EAAA,kBAAA,IAAA,WAAA;AACA,sBAAAA,MAAA,YAAA,IAAA;AACA,0BAAA4B,GAAA;oBACA;kBACA;gBAEA,OAAG;AACH,0BAAA,SAAAA,KAAA;AACA,+BAAA,OAAAA,GAAA,GAAA,CAAA;kBACA;gBACA;cACA;AAEA,cAAA1D,QAAA,UAAA;gBACA;gBACA;cACA;;;;;AC1GA,kBAAA,YAAgB,oBAAQ,EAAgC;AAExD,cAAAA,QAAA,UAAA,mCAAA,KAAA,SAAA;;;;;ACFA,kBAAA,WAAe,oBAAQ,EAAwB;AAC/C,kBAAA,WAAe,oBAAQ,EAAwB;AAC/C,kBAAA,uBAA2B,oBAAQ,EAAqC;AAExE,cAAAA,QAAA,UAAA,SAAAsG,IAAAwB,IAAA;AACA,yBAAAxB,EAAA;AACA,oBAAA,SAAAwB,EAAA,KAAAA,GAAA,gBAAAxB;AAAA,yBAAAwB;AACA,oBAAA,oBAAA,qBAAA,EAAAxB,EAAA;AACA,oBAAA,UAAA,kBAAA;AACA,wBAAAwB,EAAA;AACA,uBAAA,kBAAA;cACA;;;;;ACXA,cAAA9H,QAAA,UAAA,SAAA,MAAA;AACA,oBAAA;AACA,yBAAA,EAAY,OAAA,OAAA,OAAA,KAAA,EAAA;gBACZ,SAAGuB,QAAA;AACH,yBAAA,EAAY,OAAA,MAAA,OAAAA,OAAA;gBACZ;cACA;;;;;ACNA,cAAAvB,QAAA,UAAiB,oBAAQ,GAAyB;;;;;;ACClD,kBAAAmC,KAAQ,oBAAQ,CAAU;AAC1B,kBAAAO,UAAa,oBAAQ,CAAqB;AAC1C,kBAAA,yBAA6B,oBAAQ,GAAgC;AACrE,kBAAA,QAAY,oBAAQ,EAAoB;AACxC,kBAAA,8BAAkC,oBAAQ,EAA6C;AACvF,kBAAA,UAAc,oBAAQ,EAAsB;AAC5C,kBAAA,aAAiB,oBAAQ,EAA0B;AACnD,kBAAA,WAAe,oBAAQ,EAAwB;AAC/C,kBAAA,iBAAqB,oBAAQ,EAAgC;AAC7D,kBAAA,iBAAqB,oBAAQ,EAAqC,EAAA;AAClE,kBAAA,UAAc,oBAAQ,EAA8B,EAAA;AACpD,kBAAA,cAAkB,oBAAQ,EAA0B;AACpD,kBAAA,sBAA0B,oBAAQ,EAA6B;AAE/D,kBAAA,mBAAA,oBAAA;AACA,kBAAA,yBAAA,oBAAA;AAEA,cAAA1C,QAAA,UAAA,SAAA,kBAAA,SAAA,QAAA;AACA,oBAAA,SAAA,iBAAA,QAAA,KAAA,MAAA;AACA,oBAAA,UAAA,iBAAA,QAAA,MAAA,MAAA;AACA,oBAAA,QAAA,SAAA,QAAA;AACA,oBAAA,oBAAA0C,QAAA,gBAAA;AACA,oBAAA,kBAAA,qBAAA,kBAAA;AACA,oBAAA,WAAA,CAAA;AACA,oBAAA;AAEA,oBAAA,CAAA,eAAA,OAAA,qBAAA,cACA,EAAA,WAAA,gBAAA,WAAA,CAAA,MAAA,WAAA;AAAmE,sBAAA,kBAAA,EAAA,QAAA,EAAA,KAAA;gBAA0C,CAAE,IAC/G;AAEA,gCAAA,OAAA,eAAA,SAAA,kBAAA,QAAA,KAAA;AACA,yCAAA,WAAA;gBACA,OAAG;AACH,gCAAA,QAAA,SAAA,QAAA,UAAA;AACA,qCAAA,WAAA,QAAA,aAAA,gBAAA,GAAA;sBACA,MAAA;sBACA,YAAA,IAAA,kBAAA;oBACA,CAAO;AACP,wBAAA,YAAA;AAAA,8BAAA,UAAA,OAAA,KAAA,GAAA,QAAA,MAAA;kBACA,CAAK;AAEL,sBAAA,mBAAA,uBAAA,gBAAA;AAEA,0BAAA,CAAA,OAAA,SAAA,UAAA,WAAA,OAAA,OAAA,OAAA,QAAA,UAAA,SAAA,GAAA,SAAA,KAAA;AACA,wBAAA,WAAA,OAAA,SAAA,OAAA;AACA,wBAAA,OAAA,mBAAA,EAAA,WAAA,OAAA,UAAA;AACA,kDAAA,YAAA,WAAA,KAAA,SAAA,GAAAjC,IAAA;AACA,4BAAA,aAAA,iBAAA,IAAA,EAAA;AACA,4BAAA,CAAA,YAAA,WAAA,CAAA,SAAA,CAAA;AAAA,iCAAA,OAAA,QAAA,SAAA;AACA,4BAAA,SAAA,WAAA,GAAA,EAAA,MAAA,IAAA,IAAA,GAAAA,EAAA;AACA,+BAAA,WAAA,OAAA;sBACA,CAAS;oBACT;kBACA,CAAK;AAEL,6BAAA,eAAA,YAAA,WAAA,QAAA;oBACA,cAAA;oBACA,KAAA,WAAA;AACA,6BAAA,iBAAA,IAAA,EAAA,WAAA;oBACA;kBACA,CAAK;gBACL;AAEA,+BAAA,aAAA,kBAAA,OAAA,IAAA;AAEA,yBAAA,gBAAA,IAAA;AACA,gBAAA0B,GAAA,EAAK,QAAA,MAAA,QAAA,KAAA,GAA6B,QAAA;AAElC,oBAAA,CAAA;AAAA,yBAAA,UAAA,aAAA,kBAAA,MAAA;AAEA,uBAAA;cACA;;;;;ACxEA,kBAAA,aAAiB,oBAAQ,EAA0B;AACnD,kBAAA,WAAe,oBAAQ,EAAwB;AAC/C,kBAAA,MAAU,oBAAQ,EAAkB;AACpC,kBAAA,iBAAqB,oBAAQ,EAAqC,EAAA;AAClE,kBAAA,MAAU,oBAAQ,EAAkB;AACpC,kBAAA,WAAe,oBAAQ,GAAuB;AAE9C,kBAAA,WAAA,IAAA,MAAA;AACA,kBAAAuB,MAAA;AAEA,kBAAA,eAAA,OAAA,gBAAA,WAAA;AACA,uBAAA;cACA;AAEA,kBAAA,cAAA,SAAAT,KAAA;AACA,+BAAAA,KAAA,UAAA,EAAgC,OAAA;kBAChC,UAAA,MAAA,EAAAS;;kBACA,UAAA,CAAA;;gBACA,EAAG,CAAE;cACL;AAEA,kBAAA,UAAA,SAAAT,KAAAwB,SAAA;AAEA,oBAAA,CAAA,SAAAxB,GAAA;AAAA,yBAAA,OAAAA,OAAA,WAAAA,OAAA,OAAAA,OAAA,WAAA,MAAA,OAAAA;AACA,oBAAA,CAAA,IAAAA,KAAA,QAAA,GAAA;AAEA,sBAAA,CAAA,aAAAA,GAAA;AAAA,2BAAA;AAEA,sBAAA,CAAAwB;AAAA,2BAAA;AAEA,8BAAAxB,GAAA;gBAEA;AAAG,uBAAAA,IAAA,QAAA,EAAA;cACH;AAEA,kBAAA,cAAA,SAAAA,KAAAwB,SAAA;AACA,oBAAA,CAAA,IAAAxB,KAAA,QAAA,GAAA;AAEA,sBAAA,CAAA,aAAAA,GAAA;AAAA,2BAAA;AAEA,sBAAA,CAAAwB;AAAA,2BAAA;AAEA,8BAAAxB,GAAA;gBAEA;AAAG,uBAAAA,IAAA,QAAA,EAAA;cACH;AAGA,kBAAA,WAAA,SAAAA,KAAA;AACA,oBAAA,YAAA8E,MAAA,YAAA,aAAA9E,GAAA,KAAA,CAAA,IAAAA,KAAA,QAAA;AAAA,8BAAAA,GAAA;AACA,uBAAAA;cACA;AAEA,kBAAA8E,QAAA/H,QAAA,UAAA;gBACA,UAAA;gBACA;gBACA;gBACA;cACA;AAEA,yBAAA,QAAA,IAAA;;;;;;AC3DA,kBAAA,iBAAqB,oBAAQ,EAAqC,EAAA;AAClE,kBAAAyE,UAAa,oBAAQ,EAA4B;AACjD,kBAAA,cAAkB,oBAAQ,GAA2B;AACrD,kBAAA,OAAW,oBAAQ,EAAoC;AACvD,kBAAA,aAAiB,oBAAQ,EAA0B;AACnD,kBAAA,UAAc,oBAAQ,EAAsB;AAC5C,kBAAA,iBAAqB,oBAAQ,EAA8B;AAC3D,kBAAA,aAAiB,oBAAQ,GAA0B;AACnD,kBAAA,cAAkB,oBAAQ,EAA0B;AACpD,kBAAA,UAAc,oBAAQ,GAAgC,EAAA;AACtD,kBAAA,sBAA0B,oBAAQ,EAA6B;AAE/D,kBAAA,mBAAA,oBAAA;AACA,kBAAA,yBAAA,oBAAA;AAEA,cAAAzE,QAAA,UAAA;gBACA,gBAAA,SAAA,SAAA,kBAAA,QAAA,OAAA;AACA,sBAAAsG,KAAA,QAAA,SAAA,MAAA,UAAA;AACA,+BAAA,MAAAA,IAAA,gBAAA;AACA,qCAAA,MAAA;sBACA,MAAA;sBACA,OAAA7B,QAAA,IAAA;sBACA,OAAA;sBACA,MAAA;sBACA,MAAA;oBACA,CAAO;AACP,wBAAA,CAAA;AAAA,2BAAA,OAAA;AACA,wBAAA,YAAA;AAAA,8BAAA,UAAA,KAAA,KAAA,GAAA,MAAA,MAAA;kBACA,CAAK;AAEL,sBAAA,mBAAA,uBAAA,gBAAA;AAEA,sBAAAuD,UAAA,SAAA,MAAA,KAAA,OAAA;AACA,wBAAA,QAAA,iBAAA,IAAA;AACA,wBAAA,QAAA,SAAA,MAAA,GAAA;AACA,wBAAAC,WAAA7F;AAEA,wBAAA,OAAA;AACA,4BAAA,QAAA;oBAEA,OAAO;AACP,4BAAA,OAAA,QAAA;wBACA,OAAAA,SAAA,QAAA,KAAA,IAAA;wBACA;wBACA;wBACA,UAAA6F,YAAA,MAAA;wBACA,MAAA;wBACA,SAAA;sBACA;AACA,0BAAA,CAAA,MAAA;AAAA,8BAAA,QAAA;AACA,0BAAAA;AAAA,wBAAAA,UAAA,OAAA;AACA,0BAAA;AAAA,8BAAA;;AACA,6BAAA;AAEA,0BAAA7F,WAAA;AAAA,8BAAA,MAAAA,MAAA,IAAA;oBACA;AAAO,2BAAA;kBACP;AAEA,sBAAA,WAAA,SAAA,MAAA,KAAA;AACA,wBAAA,QAAA,iBAAA,IAAA;AAEA,wBAAAA,SAAA,QAAA,GAAA;AACA,wBAAA;AACA,wBAAAA,WAAA;AAAA,6BAAA,MAAA,MAAAA,MAAA;AAEA,yBAAA,QAAA,MAAA,OAA+B,OAAO,QAAA,MAAA,MAAA;AACtC,0BAAA,MAAA,OAAA;AAAA,+BAAA;oBACA;kBACA;AAEA,8BAAAkE,GAAA,WAAA;;;oBAGA,OAAA,SAAA,QAAA;AACA,0BAAA,OAAA;AACA,0BAAA,QAAA,iBAAA,IAAA;AACA,0BAAAvD,QAAA,MAAA;AACA,0BAAA,QAAA,MAAA;AACA,6BAAA,OAAA;AACA,8BAAA,UAAA;AACA,4BAAA,MAAA;AAAA,gCAAA,WAAA,MAAA,SAAA,OAAA;AACA,+BAAAA,MAAA,MAAA,KAAA;AACA,gCAAA,MAAA;sBACA;AACA,4BAAA,QAAA,MAAA,OAAA;AACA,0BAAA;AAAA,8BAAA,OAAA;;AACA,6BAAA,OAAA;oBACA;;;oBAGA,UAAA,SAAA,KAAA;AACA,0BAAA,OAAA;AACA,0BAAA,QAAA,iBAAA,IAAA;AACA,0BAAA,QAAA,SAAA,MAAA,GAAA;AACA,0BAAA,OAAA;AACA,4BAAA,OAAA,MAAA;AACA,4BAAA,OAAA,MAAA;AACA,+BAAA,MAAA,MAAA,MAAA,KAAA;AACA,8BAAA,UAAA;AACA,4BAAA;AAAA,+BAAA,OAAA;AACA,4BAAA;AAAA,+BAAA,WAAA;AACA,4BAAA,MAAA,SAAA;AAAA,gCAAA,QAAA;AACA,4BAAA,MAAA,QAAA;AAAA,gCAAA,OAAA;AACA,4BAAA;AAAA,gCAAA;;AACA,+BAAA;sBACA;AAAS,6BAAA,CAAA,CAAA;oBACT;;;oBAGA,SAAA,SAAA,QAAA,YAAA;AACA,0BAAA,QAAA,iBAAA,IAAA;AACA,0BAAA,gBAAA,KAAA,YAAA,UAAA,SAAA,IAAA,UAAA,CAAA,IAAA,QAAA,CAAA;AACA,0BAAA;AACA,6BAAA,QAAA,QAAA,MAAA,OAAA,MAAA,OAAA;AACA,sCAAA,MAAA,OAAA,MAAA,KAAA,IAAA;AAEA,+BAAA,SAAA,MAAA;AAAA,kCAAA,MAAA;sBACA;oBACA;;;oBAGA,KAAA,SAAA,IAAA,KAAA;AACA,6BAAA,CAAA,CAAA,SAAA,MAAA,GAAA;oBACA;kBACA,CAAK;AAEL,8BAAAuD,GAAA,WAAA,SAAA;;oBAEA,KAAA,SAAArE,KAAA,KAAA;AACA,0BAAA,QAAA,SAAA,MAAA,GAAA;AACA,6BAAA,SAAA,MAAA;oBACA;;oBAEA,KAAA,SAAA,IAAA,KAAA,OAAA;AACA,6BAAA+F,QAAA,MAAA,QAAA,IAAA,IAAA,KAAA,KAAA;oBACA;kBACA,IAAK;;oBAEL,KAAA,SAAAE,KAAA,OAAA;AACA,6BAAAF,QAAA,MAAA,QAAA,UAAA,IAAA,IAAA,OAAA,KAAA;oBACA;kBACA,CAAK;AACL,sBAAA;AAAA,mCAAA1B,GAAA,WAAA,QAAA;sBACA,KAAA,WAAA;AACA,+BAAA,iBAAA,IAAA,EAAA;sBACA;oBACA,CAAK;AACL,yBAAAA;gBACA;gBACA,WAAA,SAAAA,IAAA,kBAAA,QAAA;AACA,sBAAA,gBAAA,mBAAA;AACA,sBAAA,6BAAA,uBAAA,gBAAA;AACA,sBAAA,2BAAA,uBAAA,aAAA;AAGA,iCAAAA,IAAA,kBAAA,SAAA,UAAA,MAAA;AACA,qCAAA,MAAA;sBACA,MAAA;sBACA,QAAA;sBACA,OAAA,2BAAA,QAAA;sBACA;sBACA,MAAA;oBACA,CAAO;kBACP,GAAK,WAAA;AACL,wBAAA,QAAA,yBAAA,IAAA;AACA,wBAAA,OAAA,MAAA;AACA,wBAAA,QAAA,MAAA;AAEA,2BAAA,SAAA,MAAA;AAAA,8BAAA,MAAA;AAEA,wBAAA,CAAA,MAAA,UAAA,EAAA,MAAA,OAAA,QAAA,QAAA,MAAA,OAAA,MAAA,MAAA,QAAA;AAEA,4BAAA,SAAA;AACA,6BAAA,EAAgB,OAAA,QAAA,MAAA,KAAA;oBAChB;AAEA,wBAAA,QAAA;AAAA,6BAAA,EAAkC,OAAA,MAAA,KAAA,MAAA,MAAA;AAClC,wBAAA,QAAA;AAAA,6BAAA,EAAoC,OAAA,MAAA,OAAA,MAAA,MAAA;AACpC,2BAAA,EAAc,OAAA,CAAA,MAAA,KAAA,MAAA,KAAA,GAAA,MAAA,MAAA;kBACd,GAAK,SAAA,YAAA,UAAA,CAAA,QAAA,IAAA;AAGL,6BAAA,gBAAA;gBACA;cACA;;;;;ACzLA,kBAAA,wBAA4B,oBAAQ,EAAuC;AAI3E,oCAAA,UAAA;;;;;ACJA,kBAAA,qBAAyB,oBAAQ,GAAmC;AACpE,kBAAA,cAAkB,oBAAQ,EAA4B;AAEtD,kBAAA,aAAA,YAAA,OAAA,UAAA,WAAA;AAIA,cAAArG,SAAA,IAAA,OAAA,uBAAA,SAAA,oBAAAmD,IAAA;AACA,uBAAA,mBAAAA,IAAA,UAAA;cACA;;;;;ACTA,cAAAnD,SAAA,IAAA,OAAA;;;;;ACAA,cAAAD,QAAA,UAAiB,oBAAQ,GAAmC;;;;;;;;;;;ACK5D,cAAAC,SAAA,SAAA,IAAe;gBACX,QAAQ;cADG;;;;;;;;;;;ACAf,cAAAA,SAAA,SAAA,IAAe;gBACX,OAAO;gBACP,QAAQ;gBACR,aAAa;gBACb,kBAAkB;gBAClB,gBAAgB;cALL;;;;;;;;;;;;;;ACAf,kBAAA,SAAA,oBAAA,CAAA;AACA,kBAAA,eAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AAMA,uBAAgB,aAAaY,IAAiB;AAE1C,oBAAM,gBAAgBA,GAAE;AACxB,oBAAI,YAAY;AAChB,oBAAI,iBAAiB,MAAM;AACvB,8BAAa,OAAe,iBAAkB,OAAe,cAAc,QAAQ,MAArC;gBACjD,OAAM;AACH,8BAAY,cAAc,QAAQ,YAAtB;gBACf;AACD,uBAAO,OAAA,kBAAkB,SAAlB;cACV;AAVD,cAAAZ,SAAA,eAAA;AAkBA,uBAAgB,aACZY,IACA,aACA,WAA0B;AAD1B,oBAAA,gBAAA,QAAA;AAAA,gCAAA;gBAA2B;AAC3B,oBAAA,cAAA,QAAA;AAAA,8BAAA;gBAA0B;AAE1B,oBAAM,gBAAgBA,GAAE;AACxB,oBAAI,YAAY;AAChB,oBAAI,eAAe;AACf,8BAAY,cAAc,QAAQ,WAAtB;gBACf;AAGD,oBAAI,CAAC,WAAW;AACZ,sBAAMqG,QAAO,aAAarG,EAAD;AACzB,sBAAI,CAACqG,OAAM;AACP,2BAAO;kBACV;AACD,8BAAY,QAAMA,QAAI;gBACzB;AAGD,4BAAY,UAAU,QAAQ,WAAW,SAAC,GAAG,KAAG;AAAK,yBAAA,SAAA;gBAAY,CAArD;AAGZ,4BAAY,UAAU,QAAQ,qBAAqB,EAAvC;AAGZ,4BAAY,aAAA,SAAA,EAAU,WAAW,aAAa,SAAlC;AAEZ,uBAAO;cACV;AA9BD,cAAAjH,SAAA,eAAA;AAoCA,uBAAgB,aAAaY,IAAiB;;AAC1C,oBAAM,SAAiB,CAAA;AACvB,oBAAM,MAAM,aAAaA,EAAD;AACxB,oBAAI,KAAK;AAEL,yBAAO;gBACV;AAED,oBAAM,SAAKkE,MAAGlE,GAAE,mBAAa,QAAAkE,QAAA,SAAA,SAAAA,IAAE;AAE/B,oBAAI,CAAC;AAAO,yBAAO;AAEnB,iBAAA,GAAA,SAAA,SAAA,GAAA,MAAA,EAAA,KAAA,QAAQ,OAAO,SAAC,KAAK,OAAK;AACtB,sBAAM,OAAO,MAAM;AACnB,sBAAI,SAAS,KAAK,IAAd,GAAqB;AACrB,2BAAO,KAAK,MAAM,UAAN,CAAZ;kBACH;gBACJ,CALD;AAOA,uBAAO;cACV;AApBD,cAAA9E,SAAA,eAAA;;;;;AClEA,cAAAD,QAAA,UAAiB,oBAAQ,GAAyB;;;;;ACAlD,cAAAA,QAAA,UAAiB,oBAAQ,GAAmC;;;;;;;;;;;;;;ACI5D,kBAAA,aAAA,QAAA,gBAAA,oBAAA,CAAA,CAAA;AAEA,kBAAA,UAAA,oBAAA,CAAA;AAgBA,kBAAA;;gBAAA,WAAA;AASI,2BAAAmI,UAAY,MAAoB,MAAkB;AAAlD,wBAAA,QAAA;AACI,yBAAK,gBAAgB;AACrB,yBAAK,OAAO;AACZ,yBAAK,OAAO;AAGZ,wBAAM,aAAa,WAAA,SAAA,EAAE,kCAAF;AAGnB,wBAAM,SAAS,WAAA,SAAA,EAAE,QAAM,KAAK,QAAK,MAAlB;AACf,2BAAO,SAAS,cAAhB;AACA,+BAAW,OAAO,MAAlB;AAGA,wBAAM3E,QAAO,KAAK,QAAQ,CAAA;AAC1B,wBAAM,OAAO,KAAK,QAAQ;AAE1B,wBAAM,eAAe,KAAK,gBAAgB,QAAA;AAG1C,wBAAM,QAAQ,WAAA,SAAA,EAAE,iBAAiB,SAAS,SAAS,aAAa,eAAe,SAAjE;AACd,qBAAA,GAAA,SAAA,SAAA,GAAAA,KAAI,EAAA,KAAJA,OAAa,SAAA,MAAI;AACb,0BAAM,QAAQ,KAAK;AAEnB,0BAAM,QAAQ,KAAK;AACnB,0BAAM,MAAM,WAAA,SAAA,EAAE,4BAAF;AACZ,0BAAI,OAAO;AACP,4BAAI,OAAO,KAAX;AACA,8BAAM,OAAO,GAAb;AACA,4BAAI,GAAG,SAAS,SAAC3C,IAAQ;AACrB,uCAAa,KAAD;AAGZ,0BAAAA,GAAE,gBAAF;AAGA,gCAAK,iBAAgB,GAAA,aAAA,SAAA,GAAkB,WAAA;AACnC,kCAAK,KAAL;0BACH,CAFoB;wBAGxB,CAVD;sBAWH;oBACJ,CApBG;AAqBJ,+BAAW,OAAO,KAAlB;AAGA,+BAAW,GAAG,cAAc,WAAA;AACxB,4BAAK,iBAAgB,GAAA,aAAA,SAAA,GAAkB,WAAA;AACnC,8BAAK,KAAL;sBACH,CAFoB;oBAGxB,CAJD;AAOA,yBAAK,aAAa;AAClB,yBAAK,WAAW;AAChB,yBAAK,QAAQ;kBAChB;AAKM,kBAAAsH,UAAA,UAAA,OAAP,WAAA;AACI,wBAAI,KAAK,eAAe;AAEpB,mCAAa,KAAK,aAAN;oBACf;AAED,wBAAM,OAAO,KAAK;AAClB,wBAAM,YAAY,KAAK;AACvB,wBAAM,aAAa,KAAK;AACxB,wBAAI,KAAK,OAAO;AACZ;oBACH;AACD,wBAAI,KAAK,UAAU;AAEf,iCAAW,KAAX;oBACH,OAAM;AAEH,0BAAM,aAAa,UAAU,sBAAV,EAAkC,UAAU;AAC/D,0BAAM,QAAQ,KAAK,KAAK,SAAS;AACjC,iCAAW,IAAI,cAAc,aAAa,IAA1C,EAAgD,IAAI,SAAS,QAAQ,IAArE;AAGA,gCAAU,OAAO,UAAjB;AACA,2BAAK,WAAW;oBACnB;AAGD,yBAAK,QAAQ;kBAChB;AAKM,kBAAAA,UAAA,UAAA,OAAP,WAAA;AACI,wBAAM,aAAa,KAAK;AACxB,wBAAI,CAAC,KAAK,OAAO;AACb;oBACH;AAED,+BAAW,KAAX;AACA,yBAAK,QAAQ;kBAChB;AAED,mBAAA,GAAA,gBAAA,SAAA,GAAWA,UAAA,WAAA,UAAM;yBAAjB,SAAAlG,OAAA;AACI,6BAAO,KAAK;oBACf;;;kBAFgB,CAAjB;AAGJ,yBAAAkG;gBAAC,EAnHD;;AAqHA,cAAAlI,SAAA,SAAA,IAAe;;;;;;;;;;;;;ACtIf,kBAAA,SAAA,oBAAA,CAAA;AAqBA,uBAAS4H,MAAuB,KAAaO,SAAyB;AAClE,oBAAM,MAAM,IAAI,eAAJ;AACZ,oBAAI,KAAK,QAAQ,GAAjB;AAGA,oBAAI,UAAUA,QAAO,WAAW,KAAK;AACrC,oBAAI,YAAY,WAAA;AACZ,0BAAQ,MAAM,uCAAd;AACA,kBAAAA,QAAO,aAAaA,QAAO,UAAU,GAAjB;gBACvB;AAGD,oBAAI,IAAI,QAAQ;AACZ,sBAAI,OAAO,aAAa,SAACvH,IAAgB;AACrC,wBAAMuG,WAAUvG,GAAE,SAASA,GAAE;AAC7B,oBAAAuH,QAAO,cAAcA,QAAO,WAAWhB,UAASvG,EAA3B;kBACxB;gBACJ;AAGD,oBAAIuH,QAAO,SAAS;AAChB,mBAAA,GAAA,SAAA,SAAA,GAAA,MAAA,EAAA,KAAA,QAAQA,QAAO,SAAS,SAAC,KAAa,KAAW;AAC7C,wBAAI,iBAAiB,KAAK,GAA1B;kBACH,CAFD;gBAGH;AAGD,oBAAI,kBAAkB,CAAC,CAACA,QAAO;AAG/B,oBAAIA,QAAO,YAAY;AACnB,sBAAM,eAAeA,QAAO,WAAW,GAAlB;AACrB,sBAAI,iBAAgB,GAAA,SAAA,SAAA,GAAO,YAAP,MAAwB,UAAU;AAClD,wBAAI,aAAa,SAAS;AAEtB,6BAAO,aAAa;oBACvB;kBACJ;gBACJ;AAGD,oBAAI,qBAAqB,WAAA;AACrB,sBAAI,IAAI,eAAe;AAAG;AAC1B,sBAAM,SAAS,IAAI;AACnB,sBAAI,SAAS;AAAK;AAClB,sBAAI,UAAU,OAAO,SAAS;AAAK;AACnC,sBAAI,UAAU,KAAK;AAEf,4BAAQ,MAAM,2DAA6B,MAA3C;AACA,wBAAIA,QAAO;AAAS,sBAAAA,QAAO,QAAQ,GAAf;AACpB;kBACH;AAGD,sBAAM,YAAY,IAAI;AACtB,sBAAI;AACJ,uBAAI,GAAA,SAAA,SAAA,GAAO,SAAP,MAAqB,UAAU;AAC/B,wBAAI;AACA,+BAAS,KAAK,MAAM,SAAX;oBACZ,SAAQ,IAAI;AACT,8BAAQ,MAAM,uEAA+B,SAA7C;AACA,0BAAIA,QAAO;AAAQ,wBAAAA,QAAO,OAAO,KAAK,SAAnB;AACnB;oBACH;kBACJ,OAAM;AACH,6BAAS;kBACZ;AACD,kBAAAA,QAAO,UAAU,KAAK,MAAtB;gBACH;AAGD,oBAAI,KAAKA,QAAO,YAAY,IAA5B;AAEA,uBAAO;cACV;AAED,cAAAnI,SAAA,SAAA,IAAe4H;;;;;;;;;;;;;;ACjGf,kBAAA,aAAA,QAAA,gBAAA,oBAAA,CAAA,CAAA;AAGA,kBAAA;;gBAAA,WAAA;AAQI,2BAAAQ,UAAY7F,SAAc;AACtB,yBAAK,SAASA;AACd,yBAAK,iBAAiBA,QAAO;AAC7B,yBAAK,OAAO,WAAA,SAAA,EAAE,kCAAF;AAEZ,yBAAK,SAAS;AACd,yBAAK,OAAO;AACZ,yBAAK,YAAY;kBACpB;AAMM,kBAAA6F,UAAA,UAAA,OAAP,SAAY,UAAgB;AAA5B,wBAAA,QAAA;AAEI,wBAAI,KAAK,QAAQ;AACb;oBACH;AACD,yBAAK,SAAS;AAGd,wBAAM,OAAO,KAAK;AAClB,wBAAM,iBAAiB,KAAK;AAC5B,mCAAe,OAAO,IAAtB;AAGA,yBAAI,GAAA,KAAA,SAAA,GAAA,IAAa,KAAK,OAAO,KAAK;AAC9B,0BAAI,YAAY,GAAG;AACf,6BAAK,IAAI,SAAS,WAAW,MAAM,GAAnC;AACA,6BAAK,QAAO,GAAA,KAAA,SAAA,GAAA;sBACf;oBACJ;AAGD,wBAAI,YAAY,KAAK;AACrB,wBAAI,WAAW;AACX,mCAAa,SAAD;oBACf;AACD,yBAAK,aAAY,GAAA,aAAA,SAAA,GAAkB,WAAA;AAC/B,4BAAK,KAAL;oBACH,GAAE,GAFc;kBAGpB;AAKO,kBAAAA,UAAA,UAAA,OAAR,WAAA;AACI,wBAAM,OAAO,KAAK;AAClB,yBAAK,OAAL;AAEA,yBAAK,SAAS;AACd,yBAAK,OAAO;AACZ,yBAAK,YAAY;kBACpB;AACL,yBAAAA;gBAAC,EA/DD;;AAiEA,cAAApI,SAAA,SAAA,IAAe;;;;;;;;;;;;;ACpEf,kBAAA,aAAA,QAAA,gBAAA,oBAAA,CAAA,CAAA;AAEA,kBAAA,iBAAA,QAAA,gBAAA,oBAAA,EAAA,CAAA;AAGA,kBAAA,UAAA,oBAAA,EAAA;AAGA,kBAAA,eAAA,QAAA,aAAA,oBAAA,GAAA,CAAA;AAKA,kBAAY;AAAZ,eAAA,SAAYqI,WAAQ;AAChB,gBAAAA,UAAA,aAAA,IAAA;AACA,gBAAAA,UAAA,eAAA,IAAA;cACH,GAHW,WAAArI,SAAA,aAAAA,SAAA,WAAQ,CAAA,EAApB;AAQA,kBAAA;;gBAAA,SAAA,QAAA;AAAmB,0BAAA,UAAAsI,OAAA,MAAA;AACf,2BAAAA,MAAY/F,SAAc;AAA1B,wBAAA,QAAA;AACI,wBAAM,QAAQ,WAAA,SAAA,EACV,sHADU;AAMd,wBAAM,eAAe;sBACjB,OAAO;sBACP,OAAO;sBACP,MAAM;sBACN,MAAM,CACF;wBACI,OAAO,WAAA,SAAA,EAAE,+IAGCA,QAAO,QAAQ,EAAE,kDAAjB,IAAgD,+BAHnD;wBAKP,OAAO,SAAS;sBANpB,GASA;wBACI,OAAO,WAAA,SAAA,EACH,6HAEMA,QAAO,QAAQ,EAAE,kDAAjB,IAAgD,+BAHnD;wBAMP,OAAO,SAAS;sBAPpB,CAVE;sBAoBN,cAAc,SAAA,aAAC,OAAa;AAExB,8BAAK,QAAQ,KAAb;sBACH;oBA3BgB;AA8BrB,4BAAA,OAAA,KAAA,MAAM,OAAOA,SAAQ,YAArB,KAAkC;;kBACrC;AAEM,kBAAA+F,MAAA,UAAA,UAAP,SAAe,MAAmB;AAC9B,wBAAM/F,UAAS,KAAK;AACpB,wBAAM,iBAAiBA,QAAO,UAAU,0BAAjB;AAGvB,wBAAI,mBAAmB;AAAW;AAGlC,yBAAK,0BAA0B,IAA/B;AAGA,yBAAK,gBAAL;kBACH;AAEM,kBAAA+F,MAAA,UAAA,YAAP,SAAiB,YAAwB,UAAsB,WAAqB;AAChF,wBACI,CAAC,WAAW,UACZ,CAAC,SAAS,UACV,UAAU,MAAM,UAAhB,KACA,UAAU,MAAM,QAAhB,GACF;AACE,6BAAO;oBACV;AAED,2BAAO;kBACV;AAEO,kBAAAA,MAAA,UAAA,4BAAR,SAAkC,UAAuB;AACrD,wBAAM/F,UAAS,KAAK;AACpB,wBAAM8C,aAAY9C,QAAO;AAGzB,wBAAM,aAAa,SAAS,YAAT;AAGnB,wBAAI,iBAAiB8C,WAAU,0BAAV;AACrB,wBAAM,aAAcA,WAAU,sBAAV,EAAiD,WAAW9C,OAA5D;AACpB,wBAAM,WAAY8C,WAAU,oBAAV,EAA+C,WAAW9C,OAA1D;AAGlB,wBAAI,CAAC,KAAK,UAAU,YAAY,UAAUA,QAAO,SAA5C,GAAwD;AACzD;oBACH;AAGD,wBAAM,SAAS8C,WAAU,SAAV;AACf,wBAAM,aAAa,WAAM,QAAN,WAAM,SAAA,SAAN,OAAQ;AAG3B,wBAAI,CAAC9C,QAAO,UAAU,MAAM,cAAvB,GAAwC;AACzC,uCAAiB,eAAe,WAAWA,OAA1B;oBACpB;AAED,wBAAM,UAA8B;sBAChC,QAAMA;sBACN;sBACA;sBACA;sBACA;sBACA;oBANgC;AASpC,wBAAI;AAMJ,wBAAI,KAAK,YAAY,cAAjB,GAAgD;AAChD,kCAAY,aAAA,UAAU;oBACzB,WAOG,KAAK,YAAY,UAAjB,KACA,KAAK,YAAY,QAAjB,GACF;AACE,kCAAY,aAAA,UAAU;oBACzB,WAKQ,KAAK,YAAY,UAAjB,GAA4C;AACjD,kCAAY,aAAA,UAAU;oBACzB,WAKQ,KAAK,YAAY,QAAjB,GAA0C;AAC/C,kCAAY,aAAA,UAAU;oBACzB,OAOI;AACD,kCAAY,aAAA,UAAU;oBACzB;AAED,wBAAM,gBAAgB,IAAI,aAAA,SAAA,EACtB,aAAA,iBAAiB,WAAW,SAAS,MAArC,CADkB;AAKtB,4BAAA,YAAYA,SAAQ,cAAc,sBAAd,GAAuC,CAAC,CAAC,UAA7D;kBACH;AAMO,kBAAA+F,MAAA,UAAA,cAAR,SAAoB,OAAiB;AACjC,wBAAM,WAAW,MAAM,YAAN;AACjB,wBAAI,aAAa,SAAS,eAAe,aAAa,SAAS,eAAe;AAC1E,6BAAO;oBACV;AACD,2BAAO;kBACV;AAEM,kBAAAA,MAAA,UAAA,kBAAP,WAAA;kBAAiC;AACrC,yBAAAA;gBAAC,EAxKkB,eAAA,SAAA,CAAnB;;AA0KA,cAAAtI,SAAA,SAAA,IAAe;;;;;ACpMf,cAAAD,QAAA,UAAiB,oBAAQ,GAAgC;;;;;;;;;;;ACOzD,uBAAS,SAASwC,SAAc;AAC5B,oBAAM,iBAAiBA,QAAO,UAAU,0BAAjB;AACvB,oBAAI,EAAC,mBAAc,QAAd,mBAAc,SAAA,SAAd,eAAgB,SAAQ;AACzB,yBAAO;gBACV;AACD,oBACI,eAAe,YAAf,KAAgC,UAChC,eAAe,YAAf,KAAgC,SAChC,eAAe,OAAf,EAAwB,YAAxB,KAAyC,UACzC,eAAe,OAAf,EAAwB,YAAxB,KAAyC,SACzC,OAAO,KAAK,eAAe,OAAf,EAAwB,KAAK,OAA7B,CAAZ,GACF;AACE,yBAAO;gBACV,OAAM;AACH,yBAAO;gBACV;cACJ;AAED,cAAAvC,SAAA,SAAA,IAAe;;;;;;;;;;;;;;ACzBf,kBAAA,aAAA,QAAA,gBAAA,oBAAA,CAAA,CAAA;AACA,kBAAA;;gBAAA,WAAA;AAKI,2BAAAuI,MAAY,YAAuB;;AAC/B,yBAAK,WAAW;AAChB,yBAAK,UAAU;AACf,yBAAK,QAAQ,WAAA,SAAA,EAAE,KAAK,QAAP;AACb,yBAAK,UAASzD,MAAA,eAAU,QAAV,eAAU,SAAA,SAAV,WAAY,WAAZ,OAAsB,QAAAA,QAAA,SAAA,SAAAA,IAAI,MAAM,IAAV;kBACvC;AAEM,kBAAAyD,MAAA,UAAA,OAAP,WAAA;AACI,wBAAM,SAAS,KAAK;AACpB,wBAAM,kBAAkB,KAAK,kBAAL;AAExB,wBAAI,QAAQ;AACR,6BAAO,YAAY,eAAnB;oBACH;kBACJ;AAEM,kBAAAA,MAAA,UAAA,WAAP,WAAA;AACI,wBAAM,QAAQ,KAAK;AACnB,wBAAM,UAAS,GAAA,MAAA,SAAA,GAAA,KAAK,EAAA,KAAL,OAAW,OAAN;AACpB,2BAAO;kBACV;AAEM,kBAAAA,MAAA,UAAA,oBAAP,WAAA;AACI,wBAAM,kBAAkB,KAAK,SAAL,EAAgB,OAAhB;AACxB,2BAAO;kBACV;AAEM,kBAAAA,MAAA,UAAA,UAAP,WAAA;AACI,2BAAO,KAAK;kBACf;AACL,yBAAAA;gBAAC,EAnCD;;AAAa,cAAAvI,SAAA,OAAA;AAqCb,uBAAS,WAAW,YAAuB;AACvC,oBAAMU,KAAI,IAAI,KAAK,UAAT;AACV,gBAAAA,GAAE,KAAF;AACA,uBAAOA;cACV;AAED,cAAAV,SAAA,SAAA,IAAe;;;;;;;;;;;;ACvCf,kCAAA,GAAA;AACA,kCAAA,GAAA;AACA,kCAAA,GAAA;AACA,kCAAA,GAAA;AACA,kCAAA,GAAA;AACA,kCAAA,GAAA;AAEA,kCAAA,GAAA;AACA,kBAAA,UAAA,QAAA,gBAAA,oBAAA,EAAA,CAAA;AAEA,sBAAA,aAAA,oBAAA,GAAA,GAAAA,QAAA;AAGA,kBAAI;AACA;cACH,SAAQ,IAAI;AACT,sBAAM,IAAI,MAAM,8DAAV;cACT;AAED,cAAAA,SAAA,SAAA,IAAe,QAAA,SAAA;;;;;ACxBf,kBAAA,SAAa,oBAAQ,GAAiC;AAEtD,cAAAD,QAAA,UAAA;;;;;ACFA,kCAAQ,GAAyC;AACjD,kBAAA2C,QAAW,oBAAQ,CAAsB;AAEzC,kBAAA8F,UAAA9F,MAAA;AAEA,kBAAA,iBAAA3C,QAAA,UAAA,SAAA0I,gBAAAzF,KAAA,KAAA,MAAA;AACA,uBAAAwF,QAAA,eAAAxF,KAAA,KAAA,IAAA;cACA;AAEA,kBAAAwF,QAAA,eAAA;AAAA,+BAAA,OAAA;;;;;ACTA,kBAAAtG,KAAQ,oBAAQ,CAAqB;AACrC,kBAAA,cAAkB,oBAAQ,EAA0B;AACpD,kBAAA,6BAAiC,oBAAQ,EAAqC;AAI9E,cAAAA,GAAA,EAAG,QAAA,UAAA,MAAA,MAAA,QAAA,CAAA,aAAA,MAAA,CAAA,YAAA,GAAyE;gBAC5E,gBAAA,2BAAA;cACA,CAAC;;;;;ACRD,kBAAA;AAGA,kBAAA,WAAA;AACA,uBAAA;cACA,EAAC;AAED,kBAAA;AAEA,oBAAA,KAAA,IAAA,SAAA,aAAA,EAAA;cACA,SAACtB,IAAA;AAED,oBAAA,OAAA,WAAA;AAAA,sBAAA;cACA;AAMA,cAAAb,QAAA,UAAA;;;;;ACnBA,kBAAA,MAAU,oBAAQ,EAA8E;AAChG,kBAAAiE,WAA0B,oBAAQ,GAA8J;AAEhM,cAAAA,WAAAA,SAAA,aAAAA,SAAA,UAAAA;AAEA,kBAAA,OAAAA,aAAA,UAAA;AACA,gBAAAA,WAAA,CAAA,CAA0BjE,QAAA,GAASiE,UAAA,EAAA,CAAA;cACnC;AAEA,kBAAA,UAAA,CAAA;AAEA,sBAAA,SAAA;AACA,sBAAA,YAAA;AAEA,kBAAA,SAAA,IAAAA,UAAA,OAAA;AAIA,cAAAjE,QAAA,UAAAiE,SAAA,UAAA,CAAA;;;;;ACjBA,kBAAA,8BAAkC,oBAAQ,EAAsD;AAChG,cAAAhE,WAAA,4BAAA,KAAA;AAEA,cAAAA,SAAA,KAAA,CAAcD,QAAA,GAAS,uhDAA+9C,EAAA,CAAA;AAEt/C,cAAAA,QAAA,UAAAC;;;;;ACNA,kBAAA,MAAU,oBAAQ,EAA8E;AAChG,kBAAAgE,WAA0B,oBAAQ,GAA4J;AAE9L,cAAAA,WAAAA,SAAA,aAAAA,SAAA,UAAAA;AAEA,kBAAA,OAAAA,aAAA,UAAA;AACA,gBAAAA,WAAA,CAAA,CAA0BjE,QAAA,GAASiE,UAAA,EAAA,CAAA;cACnC;AAEA,kBAAA,UAAA,CAAA;AAEA,sBAAA,SAAA;AACA,sBAAA,YAAA;AAEA,kBAAA,SAAA,IAAAA,UAAA,OAAA;AAIA,cAAAjE,QAAA,UAAAiE,SAAA,UAAA,CAAA;;;;;ACjBA,kBAAA,8BAAkC,oBAAQ,EAAsD;AAChG,kBAAA,kCAAsC,oBAAQ,GAAyD;AACvG,kBAAA,gCAAoC,oBAAQ,GAA8B;AAC1E,cAAAhE,WAAA,4BAAA,KAAA;AACA,kBAAA,qCAAA,gCAAA,6BAAA;AAEA,cAAAA,SAAA,KAAA,CAAcD,QAAA,GAAS,0DAA2C,qCAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAAgrF,EAAA,CAAA;AAElvF,cAAAA,QAAA,UAAAC;;;;;;ACPA,cAAAD,QAAA,UAAA,SAAA,KAAA,SAAA;AACA,oBAAA,CAAA,SAAA;AAEA,4BAAA,CAAA;gBACA;AAGA,sBAAA,OAAA,IAAA,aAAA,IAAA,UAAA;AAEA,oBAAA,OAAA,QAAA,UAAA;AACA,yBAAA;gBACA;AAGA,oBAAA,eAAA,KAAA,GAAA,GAAA;AAEA,wBAAA,IAAA,MAAA,GAAA,EAAA;gBACA;AAEA,oBAAA,QAAA,MAAA;AAEA,yBAAA,QAAA;gBACA;AAIA,oBAAA,cAAA,KAAA,GAAA,KAAA,QAAA,YAAA;AACA,yBAAA,IAAA,OAAA,IAAA,QAAA,MAAA,KAAA,EAAA,QAAA,OAAA,KAAA,GAAA,GAAA;gBACA;AAEA,uBAAA;cACA;;;;;;ACjCA,kCAAA,EAAA,mBAAA;AAAe,kCAAA,SAAA,IAAA;;;;;ACAf,kBAAA,MAAU,oBAAQ,EAA8E;AAChG,kBAAAiE,WAA0B,oBAAQ,GAA6J;AAE/L,cAAAA,WAAAA,SAAA,aAAAA,SAAA,UAAAA;AAEA,kBAAA,OAAAA,aAAA,UAAA;AACA,gBAAAA,WAAA,CAAA,CAA0BjE,QAAA,GAASiE,UAAA,EAAA,CAAA;cACnC;AAEA,kBAAA,UAAA,CAAA;AAEA,sBAAA,SAAA;AACA,sBAAA,YAAA;AAEA,kBAAA,SAAA,IAAAA,UAAA,OAAA;AAIA,cAAAjE,QAAA,UAAAiE,SAAA,UAAA,CAAA;;;;;ACjBA,kBAAA,8BAAkC,oBAAQ,EAAsD;AAChG,cAAAhE,WAAA,4BAAA,KAAA;AAEA,cAAAA,SAAA,KAAA,CAAcD,QAAA,GAAS,+1CAA40C,EAAA,CAAA;AAEn2C,cAAAA,QAAA,UAAAC;;;;;ACNA,kBAAA,MAAU,oBAAQ,EAA8E;AAChG,kBAAAgE,WAA0B,oBAAQ,GAA4J;AAE9L,cAAAA,WAAAA,SAAA,aAAAA,SAAA,UAAAA;AAEA,kBAAA,OAAAA,aAAA,UAAA;AACA,gBAAAA,WAAA,CAAA,CAA0BjE,QAAA,GAASiE,UAAA,EAAA,CAAA;cACnC;AAEA,kBAAA,UAAA,CAAA;AAEA,sBAAA,SAAA;AACA,sBAAA,YAAA;AAEA,kBAAA,SAAA,IAAAA,UAAA,OAAA;AAIA,cAAAjE,QAAA,UAAAiE,SAAA,UAAA,CAAA;;;;;ACjBA,kBAAA,8BAAkC,oBAAQ,EAAsD;AAChG,cAAAhE,WAAA,4BAAA,KAAA;AAEA,cAAAA,SAAA,KAAA,CAAcD,QAAA,GAAS,+1FAAg2F,EAAA,CAAA;AAEv3F,cAAAA,QAAA,UAAAC;;;;;ACNA,kBAAA,MAAU,oBAAQ,EAA8E;AAChG,kBAAAgE,WAA0B,oBAAQ,GAA6J;AAE/L,cAAAA,WAAAA,SAAA,aAAAA,SAAA,UAAAA;AAEA,kBAAA,OAAAA,aAAA,UAAA;AACA,gBAAAA,WAAA,CAAA,CAA0BjE,QAAA,GAASiE,UAAA,EAAA,CAAA;cACnC;AAEA,kBAAA,UAAA,CAAA;AAEA,sBAAA,SAAA;AACA,sBAAA,YAAA;AAEA,kBAAA,SAAA,IAAAA,UAAA,OAAA;AAIA,cAAAjE,QAAA,UAAAiE,SAAA,UAAA,CAAA;;;;;ACjBA,kBAAA,8BAAkC,oBAAQ,EAAsD;AAChG,cAAAhE,WAAA,4BAAA,KAAA;AAEA,cAAAA,SAAA,KAAA,CAAcD,QAAA,GAAS,4hIAAg4H,EAAA,CAAA;AAEv5H,cAAAA,QAAA,UAAAC;;;;;ACNA,kBAAA,MAAU,oBAAQ,EAA8E;AAChG,kBAAAgE,WAA0B,oBAAQ,GAAgK;AAElM,cAAAA,WAAAA,SAAA,aAAAA,SAAA,UAAAA;AAEA,kBAAA,OAAAA,aAAA,UAAA;AACA,gBAAAA,WAAA,CAAA,CAA0BjE,QAAA,GAASiE,UAAA,EAAA,CAAA;cACnC;AAEA,kBAAA,UAAA,CAAA;AAEA,sBAAA,SAAA;AACA,sBAAA,YAAA;AAEA,kBAAA,SAAA,IAAAA,UAAA,OAAA;AAIA,cAAAjE,QAAA,UAAAiE,SAAA,UAAA,CAAA;;;;;ACjBA,kBAAA,8BAAkC,oBAAQ,EAAsD;AAChG,cAAAhE,WAAA,4BAAA,KAAA;AAEA,cAAAA,SAAA,KAAA,CAAcD,QAAA,GAAS,u6BAAo6B,EAAA,CAAA;AAE37B,cAAAA,QAAA,UAAAC;;;;;;;;ACDA,kBAAI,CAAC,QAAQ,UAAU,SAAS;AAC5B,wBAAQ,UAAU,UAAU,SAAU,GAAC;AACnC,sBAAI,UAA+B,KAAK,cAAc,iBAAiB,CAApC;AACnC,sBAAI,IAAY,QAAQ;AACxB,uBAAK,GAAG,KAAK,GAAG,KAAK;AACjB,wBAAI,QAAQ,KAAK,CAAb,MAAoB;AAAM;kBACjC;AACD,yBAAO,IAAI;gBACd;cACJ;AAGD,kBAAI,CAAA,SAAA,SAAA,GAAiB;AACjB,uBAAO,UAAP,SAAA,SAAA;cACH;;;;;ACnBD,cAAAD,QAAA,UAAiB,oBAAQ,GAA6B;;;;;ACAtD,kBAAA,SAAa,oBAAQ,GAAkB;AAEvC,cAAAA,QAAA,UAAA;;;;;ACFA,kCAAQ,EAAmC;AAC3C,kCAAQ,EAAkC;AAC1C,kCAAQ,EAA4C;AACpD,kCAAQ,GAA0B;AAClC,kCAAQ,GAAsC;AAC9C,kCAAQ,GAAkC;AAC1C,kBAAA2C,QAAW,oBAAQ,CAAsB;AAEzC,cAAA3C,QAAA,UAAA2C,MAAA;;;;;ACRA,kBAAA,YAAgB,oBAAQ,EAAyB;AACjD,kBAAA,yBAA6B,oBAAQ,EAAuC;AAG5E,kBAAA,eAAA,SAAA,mBAAA;AACA,uBAAA,SAAA,OAAA,KAAA;AACA,sBAAAgF,KAAA,OAAA,uBAAA,KAAA,CAAA;AACA,sBAAAgB,YAAA,UAAA,GAAA;AACA,sBAAA,OAAAhB,GAAA;AACA,sBAAA,OAAA;AACA,sBAAAgB,YAAA,KAAAA,aAAA;AAAA,2BAAA,oBAAA,KAAA;AACA,0BAAAhB,GAAA,WAAAgB,SAAA;AACA,yBAAA,QAAA,SAAA,QAAA,SAAAA,YAAA,MAAA,SACA,SAAAhB,GAAA,WAAAgB,YAAA,CAAA,KAAA,SAAA,SAAA,QACA,oBAAAhB,GAAA,OAAAgB,SAAA,IAAA,QACA,oBAAAhB,GAAA,MAAAgB,WAAAA,YAAA,CAAA,KAAA,QAAA,SAAA,OAAA,SAAA,SAAA;gBACA;cACA;AAEA,cAAA3I,QAAA,UAAA;;;gBAGA,QAAA,aAAA,KAAA;;;gBAGA,QAAA,aAAA,IAAA;cACA;;;;;AC1BA,kBAAA0C,UAAa,oBAAQ,CAAqB;AAC1C,kBAAA,gBAAoB,oBAAQ,GAA6B;AAEzD,kBAAA2C,WAAA3C,QAAA;AAEA,cAAA1C,QAAA,UAAA,OAAAqF,aAAA,cAAA,cAAA,KAAA,cAAAA,QAAA,CAAA;;;;;ACLA,kBAAA3C,UAAa,oBAAQ,CAAqB;AAC1C,kBAAA,8BAAkC,oBAAQ,EAA6C;AAEvF,cAAA1C,QAAA,UAAA,SAAA,KAAA,OAAA;AACA,oBAAA;AACA,8CAAA0C,SAAA,KAAA,KAAA;gBACA,SAAGnB,QAAA;AACH,kBAAAmB,QAAA,GAAA,IAAA;gBACA;AAAG,uBAAA;cACH;;;;;;ACRA,kBAAA,oBAAwB,oBAAQ,GAA6B,EAAA;AAC7D,kBAAA+B,UAAa,oBAAQ,EAA4B;AACjD,kBAAA,2BAA+B,oBAAQ,EAAyC;AAChF,kBAAA,iBAAqB,oBAAQ,EAAgC;AAC7D,kBAAA,YAAgB,oBAAQ,EAAwB;AAEhD,kBAAA,aAAA,WAAA;AAA8B,uBAAA;cAAa;AAE3C,cAAAzE,QAAA,UAAA,SAAA,qBAAA,MAAA,MAAA;AACA,oBAAA,gBAAA,OAAA;AACA,oCAAA,YAAAyE,QAAA,mBAAA,EAA6D,MAAA,yBAAA,GAAA,IAAA,EAAA,CAA0C;AACvG,+BAAA,qBAAA,eAAA,OAAA,IAAA;AACA,0BAAA,aAAA,IAAA;AACA,uBAAA;cACA;;;;;ACfA,kBAAA,QAAY,oBAAQ,EAAoB;AAExC,cAAAzE,QAAA,UAAA,CAAA,MAAA,WAAA;AACA,yBAAA,IAAA;gBAAgB;AAChB,kBAAA,UAAA,cAAA;AACA,uBAAA,OAAA,eAAA,IAAA,EAAA,CAAA,MAAA,EAAA;cACA,CAAC;;;;;ACND,kBAAA,cAAkB,oBAAQ,EAA0B;AACpD,kBAAA,uBAA2B,oBAAQ,EAAqC;AACxE,kBAAA,WAAe,oBAAQ,EAAwB;AAC/C,kBAAA,aAAiB,oBAAQ,EAA0B;AAInD,cAAAA,QAAA,UAAA,cAAA,OAAA,mBAAA,SAAAkG,kBAAA9C,IAAA,YAAA;AACA,yBAAAA,EAAA;AACA,oBAAAuC,QAAA,WAAA,UAAA;AACA,oBAAA,SAAAA,MAAA;AACA,oBAAAvD,SAAA;AACA,oBAAA;AACA,uBAAA,SAAAA;AAAA,uCAAA,EAAAgB,IAAA,MAAAuC,MAAAvD,QAAA,GAAA,WAAA,GAAA,CAAA;AACA,uBAAAgB;cACA;;;;;;ACdA,kBAAA,wBAA4B,oBAAQ,EAAoC;AACxE,kBAAA,UAAc,oBAAQ,EAAsB;AAI5C,cAAApD,QAAA,UAAA,wBAAA,CAAA,EAA2C,WAAA,SAAAgE,YAAA;AAC3C,uBAAA,aAAA,QAAA,IAAA,IAAA;cACA;;;;;ACRA,kBAAA,WAAe,oBAAQ,EAAwB;AAC/C,kBAAA,qBAAyB,oBAAQ,GAAmC;AAMpE,cAAAhE,QAAA,UAAA,OAAA,mBAAA,eAAA,CAAA,IAA4D,WAAA;AAC5D,oBAAA,iBAAA;AACA,oBAAA,OAAA,CAAA;AACA,oBAAA;AACA,oBAAA;AACA,2BAAA,OAAA,yBAAA,OAAA,WAAA,WAAA,EAAA;AACA,yBAAA,KAAA,MAAA,CAAA,CAAA;AACA,mCAAA,gBAAA;gBACA,SAAGuB,QAAA;gBAAgB;AACnB,uBAAA,SAAA,eAAA6B,IAAA,OAAA;AACA,2BAAAA,EAAA;AACA,qCAAA,KAAA;AACA,sBAAA;AAAA,2BAAA,KAAAA,IAAA,KAAA;;AACA,oBAAAA,GAAA,YAAA;AACA,yBAAAA;gBACA;cACA,EAAC,IAAA;;;;;ACvBD,kBAAA,WAAe,oBAAQ,EAAwB;AAE/C,cAAApD,QAAA,UAAA,SAAAiD,KAAA;AACA,oBAAA,CAAA,SAAAA,GAAA,KAAAA,QAAA,MAAA;AACA,wBAAA,UAAA,eAAA,OAAAA,GAAA,IAAA,iBAAA;gBACA;AAAG,uBAAAA;cACH;;;;;;ACLA,kBAAA,kBAAsB,oBAAQ,EAAgC;AAC9D,kBAAA,mBAAuB,oBAAQ,EAAiC;AAChE,kBAAA,YAAgB,oBAAQ,EAAwB;AAChD,kBAAA,sBAA0B,oBAAQ,EAA6B;AAC/D,kBAAA,iBAAqB,oBAAQ,EAA8B;AAE3D,kBAAA,iBAAA;AACA,kBAAA,mBAAA,oBAAA;AACA,kBAAA,mBAAA,oBAAA,UAAA,cAAA;AAYA,cAAAjD,QAAA,UAAA,eAAA,OAAA,SAAA,SAAA,UAAA,MAAA;AACA,iCAAA,MAAA;kBACA,MAAA;kBACA,QAAA,gBAAA,QAAA;;kBACA,OAAA;;kBACA;;gBACA,CAAG;cAGH,GAAC,WAAA;AACD,oBAAA,QAAA,iBAAA,IAAA;AACA,oBAAA,SAAA,MAAA;AACA,oBAAA,OAAA,MAAA;AACA,oBAAAoC,SAAA,MAAA;AACA,oBAAA,CAAA,UAAAA,UAAA,OAAA,QAAA;AACA,wBAAA,SAAA;AACA,yBAAA,EAAY,OAAA,QAAA,MAAA,KAAA;gBACZ;AACA,oBAAA,QAAA;AAAA,yBAAA,EAA8B,OAAAA,QAAA,MAAA,MAAA;AAC9B,oBAAA,QAAA;AAAA,yBAAA,EAAgC,OAAA,OAAAA,MAAA,GAAA,MAAA,MAAA;AAChC,uBAAA,EAAU,OAAA,CAAAA,QAAA,OAAAA,MAAA,CAAA,GAAA,MAAA,MAAA;cACV,GAAC,QAAA;AAKD,wBAAA,YAAA,UAAA;AAGA,+BAAA,MAAA;AACA,+BAAA,QAAA;AACA,+BAAA,SAAA;;;;;AClDA,cAAApC,QAAA,UAAA;gBACA,aAAA;gBACA,qBAAA;gBACA,cAAA;gBACA,gBAAA;gBACA,aAAA;gBACA,eAAA;gBACA,cAAA;gBACA,sBAAA;gBACA,UAAA;gBACA,mBAAA;gBACA,gBAAA;gBACA,iBAAA;gBACA,mBAAA;gBACA,WAAA;gBACA,eAAA;gBACA,cAAA;gBACA,UAAA;gBACA,kBAAA;gBACA,QAAA;gBACA,aAAA;gBACA,eAAA;gBACA,eAAA;gBACA,gBAAA;gBACA,cAAA;gBACA,eAAA;gBACA,kBAAA;gBACA,kBAAA;gBACA,gBAAA;gBACA,kBAAA;gBACA,eAAA;gBACA,WAAA;cACA;;;;;;ACjCA,kBAAAmC,KAAQ,oBAAQ,CAAqB;AACrC,kBAAA,UAAc,oBAAQ,EAAsB;AAC5C,kBAAAO,UAAa,oBAAQ,CAAqB;AAC1C,kBAAA,aAAiB,oBAAQ,EAA2B;AACpD,kBAAA,gBAAoB,oBAAQ,GAAyC;AACrE,kBAAA,WAAe,oBAAQ,EAAuB;AAC9C,kBAAA,cAAkB,oBAAQ,GAA2B;AACrD,kBAAA,iBAAqB,oBAAQ,EAAgC;AAC7D,kBAAA,aAAiB,oBAAQ,GAA0B;AACnD,kBAAA,WAAe,oBAAQ,EAAwB;AAC/C,kBAAA,YAAgB,oBAAQ,EAAyB;AACjD,kBAAA,aAAiB,oBAAQ,EAA0B;AACnD,kBAAA,UAAc,oBAAQ,EAA0B;AAChD,kBAAA,gBAAoB,oBAAQ,GAA6B;AACzD,kBAAA,UAAc,oBAAQ,EAAsB;AAC5C,kBAAA,8BAAkC,oBAAQ,GAA6C;AACvF,kBAAA,qBAAyB,oBAAQ,GAAkC;AACnE,kBAAA,OAAW,oBAAQ,GAAmB,EAAA;AACtC,kBAAA,YAAgB,oBAAQ,GAAwB;AAChD,kBAAA,iBAAqB,oBAAQ,GAA8B;AAC3D,kBAAA,mBAAuB,oBAAQ,GAAiC;AAChE,kBAAA,6BAAiC,oBAAQ,EAAqC;AAC9E,kBAAA,UAAc,oBAAQ,GAAsB;AAC5C,kBAAA,sBAA0B,oBAAQ,EAA6B;AAC/D,kBAAA,WAAe,oBAAQ,GAAwB;AAC/C,kBAAA,kBAAsB,oBAAQ,EAAgC;AAC9D,kBAAA,aAAiB,oBAAQ,EAAgC;AAEzD,kBAAA,UAAA,gBAAA,SAAA;AACA,kBAAA,UAAA;AACA,kBAAA,mBAAA,oBAAA;AACA,kBAAA,mBAAA,oBAAA;AACA,kBAAA,0BAAA,oBAAA,UAAA,OAAA;AACA,kBAAA,qBAAA;AACA,kBAAAkG,aAAAlG,QAAA;AACA,kBAAAsD,YAAAtD,QAAA;AACA,kBAAA6D,WAAA7D,QAAA;AACA,kBAAA,SAAA,WAAA,OAAA;AACA,kBAAA,uBAAA,2BAAA;AACA,kBAAA,8BAAA;AACA,kBAAA,UAAA,QAAA6D,QAAA,KAAA;AACA,kBAAA,iBAAA,CAAA,EAAAP,aAAAA,UAAA,eAAAtD,QAAA;AACA,kBAAA,sBAAA;AACA,kBAAA,oBAAA;AACA,kBAAA,UAAA;AACA,kBAAA,YAAA;AACA,kBAAA,WAAA;AACA,kBAAA,UAAA;AACA,kBAAA,YAAA;AACA,kBAAA,UAAA,sBAAA,gBAAA;AAEA,kBAAA,SAAA,SAAA,SAAA,WAAA;AACA,oBAAA,yBAAA,cAAA,kBAAA,MAAA,OAAA,kBAAA;AACA,oBAAA,CAAA,wBAAA;AAIA,sBAAA,eAAA;AAAA,2BAAA;AAEA,sBAAA,CAAA,WAAA,OAAA,yBAAA;AAAA,2BAAA;gBACA;AAEA,oBAAA,WAAA,CAAA,mBAAA,UAAA,SAAA;AAAA,yBAAA;AAIA,oBAAA,cAAA,MAAA,cAAA,KAAA,kBAAA;AAAA,yBAAA;AAEA,oBAAA,UAAA,mBAAA,QAAA,CAAA;AACA,oBAAA,cAAA,SAAA,MAAA;AACA,uBAAA,WAAA;kBAAsB,GAAc,WAAA;kBAAe,CAAc;gBACjE;AACA,oBAAA,cAAA,QAAA,cAAA,CAAA;AACA,4BAAA,OAAA,IAAA;AACA,uBAAA,EAAA,QAAA,KAAA,WAAA;gBAAqC,CAAc,aAAA;cACnD,CAAC;AAED,kBAAA,sBAAA,UAAA,CAAA,4BAAA,SAAA,UAAA;AACA,mCAAA,IAAA,QAAA,EAAA,OAAA,EAAA,WAAA;gBAAyD,CAAc;cACvE,CAAC;AAGD,kBAAA,aAAA,SAAAO,KAAA;AACA,oBAAA;AACA,uBAAA,SAAAA,GAAA,KAAA,QAAA,OAAAA,IAAA,SAAA,aAAA,OAAA;cACA;AAEA,kBAAA4F,UAAA,SAAA,SAAA,OAAA,UAAA;AACA,oBAAA,MAAA;AAAA;AACA,sBAAA,WAAA;AACA,oBAAA,QAAA,MAAA;AACA,0BAAA,WAAA;AACA,sBAAA,QAAA,MAAA;AACA,sBAAAC,MAAA,MAAA,SAAA;AACA,sBAAA1G,SAAA;AAEA,yBAAA,MAAA,SAAAA,QAAA;AACA,wBAAA,WAAA,MAAAA,QAAA;AACA,wBAAA,UAAA0G,MAAA,SAAA,KAAA,SAAA;AACA,wBAAA,UAAA,SAAA;AACA,wBAAA,SAAA,SAAA;AACA,wBAAAC,UAAA,SAAA;AACA,wBAAA,QAAA,MAAA;AACA,wBAAA;AACA,0BAAA,SAAA;AACA,4BAAA,CAAAD,KAAA;AACA,8BAAA,MAAA,cAAA;AAAA,8CAAA,SAAA,KAAA;AACA,gCAAA,YAAA;wBACA;AACA,4BAAA,YAAA;AAAA,mCAAA;6BACA;AACA,8BAAAC;AAAA,4BAAAA,QAAA,MAAA;AACA,mCAAA,QAAA,KAAA;AACA,8BAAAA,SAAA;AACA,4BAAAA,QAAA,KAAA;AACA,qCAAA;0BACA;wBACA;AACA,4BAAA,WAAA,SAAA,SAAA;AACA,iCAAAH,WAAA,qBAAA,CAAA;wBACA,WAAW,OAAA,WAAA,MAAA,GAAA;AACX,+BAAA,KAAA,QAAA,SAAA,MAAA;wBACA;AAAW,kCAAA,MAAA;sBACX;AAAS,+BAAA,KAAA;oBACT,SAAOrH,QAAA;AACP,0BAAAwH,WAAA,CAAA;AAAA,wBAAAA,QAAA,KAAA;AACA,6BAAAxH,MAAA;oBACA;kBACA;AACA,wBAAA,YAAA,CAAA;AACA,wBAAA,WAAA;AACA,sBAAA,YAAA,CAAA,MAAA;AAAA,gCAAA,SAAA,KAAA;gBACA,CAAG;cACH;AAEA,kBAAAyH,iBAAA,SAAA9I,OAAA,SAAA,QAAA;AACA,oBAAA,OAAA;AACA,oBAAA,gBAAA;AACA,0BAAA8F,UAAA,YAAA,OAAA;AACA,wBAAA,UAAA;AACA,wBAAA,SAAA;AACA,wBAAA,UAAA9F,OAAA,OAAA,IAAA;AACA,kBAAAwC,QAAA,cAAA,KAAA;gBACA;AAAG,0BAAA,EAAe,SAAA,OAAA;AAClB,oBAAA,UAAAA,QAAA,OAAAxC,KAAA;AAAA,0BAAA,KAAA;yBACAA,UAAA;AAAA,mCAAA,+BAAA,MAAA;cACA;AAEA,kBAAA,cAAA,SAAA,SAAA,OAAA;AACA,qBAAA,KAAAwC,SAAA,WAAA;AACA,sBAAA,QAAA,MAAA;AACA,sBAAA,eAAA,YAAA,KAAA;AACA,sBAAA;AACA,sBAAA,cAAA;AACA,6BAAA,QAAA,WAAA;AACA,0BAAA,SAAA;AACA,wBAAA6D,SAAA,KAAA,sBAAA,OAAA,OAAA;sBACA;AAAS,wBAAAyC,eAAA,qBAAA,SAAA,KAAA;oBACT,CAAO;AAEP,0BAAA,YAAA,WAAA,YAAA,KAAA,IAAA,YAAA;AACA,wBAAA,OAAA;AAAA,4BAAA,OAAA;kBACA;gBACA,CAAG;cACH;AAEA,kBAAA,cAAA,SAAA,OAAA;AACA,uBAAA,MAAA,cAAA,WAAA,CAAA,MAAA;cACA;AAEA,kBAAA,oBAAA,SAAA,SAAA,OAAA;AACA,qBAAA,KAAAtG,SAAA,WAAA;AACA,sBAAA,SAAA;AACA,oBAAA6D,SAAA,KAAA,oBAAA,OAAA;kBACA;AAAK,oBAAAyC,eAAA,mBAAA,SAAA,MAAA,KAAA;gBACL,CAAG;cACH;AAEA,kBAAA,OAAA,SAAA9G,KAAA,SAAA,OAAA,QAAA;AACA,uBAAA,SAAA,OAAA;AACA,kBAAAA,IAAA,SAAA,OAAA,OAAA,MAAA;gBACA;cACA;AAEA,kBAAA,iBAAA,SAAA,SAAA,OAAA,OAAA,QAAA;AACA,oBAAA,MAAA;AAAA;AACA,sBAAA,OAAA;AACA,oBAAA;AAAA,0BAAA;AACA,sBAAA,QAAA;AACA,sBAAA,QAAA;AACA,gBAAA2G,QAAA,SAAA,OAAA,IAAA;cACA;AAEA,kBAAA,kBAAA,SAAA,SAAA,OAAA,OAAA,QAAA;AACA,oBAAA,MAAA;AAAA;AACA,sBAAA,OAAA;AACA,oBAAA;AAAA,0BAAA;AACA,oBAAA;AACA,sBAAA,YAAA;AAAA,0BAAAD,WAAA,kCAAA;AACA,sBAAA,OAAA,WAAA,KAAA;AACA,sBAAA,MAAA;AACA,8BAAA,WAAA;AACA,0BAAA,UAAA,EAAuB,MAAA,MAAA;AACvB,0BAAA;AACA,6BAAA;0BAAA;0BACA,KAAA,iBAAA,SAAA,SAAA,KAAA;0BACA,KAAA,gBAAA,SAAA,SAAA,KAAA;wBACA;sBACA,SAASrH,QAAA;AACT,uCAAA,SAAA,SAAAA,QAAA,KAAA;sBACA;oBACA,CAAO;kBACP,OAAK;AACL,0BAAA,QAAA;AACA,0BAAA,QAAA;AACA,oBAAAsH,QAAA,SAAA,OAAA,KAAA;kBACA;gBACA,SAAGtH,QAAA;AACH,iCAAA,SAAA,EAA6B,MAAA,MAAA,GAAcA,QAAA,KAAA;gBAC3C;cACA;AAGA,kBAAA,QAAA;AAEA,qCAAA,SAAA0H,SAAA,UAAA;AACA,6BAAA,MAAA,oBAAA,OAAA;AACA,4BAAA,QAAA;AACA,2BAAA,KAAA,IAAA;AACA,sBAAA,QAAA,iBAAA,IAAA;AACA,sBAAA;AACA,6BAAA,KAAA,iBAAA,MAAA,KAAA,GAAA,KAAA,gBAAA,MAAA,KAAA,CAAA;kBACA,SAAK1H,QAAA;AACL,mCAAA,MAAA,OAAAA,MAAA;kBACA;gBACA;AAEA,2BAAA,SAAA0H,SAAA,UAAA;AACA,mCAAA,MAAA;oBACA,MAAA;oBACA,MAAA;oBACA,UAAA;oBACA,QAAA;oBACA,WAAA,CAAA;oBACA,WAAA;oBACA,OAAA;oBACA,OAAA;kBACA,CAAK;gBACL;AACA,yBAAA,YAAA,YAAA,mBAAA,WAAA;;;kBAGA,MAAA,SAAA,KAAA,aAAA,YAAA;AACA,wBAAA,QAAA,wBAAA,IAAA;AACA,wBAAA,WAAA,qBAAA,mBAAA,MAAA,kBAAA,CAAA;AACA,6BAAA,KAAA,OAAA,eAAA,aAAA,cAAA;AACA,6BAAA,OAAA,OAAA,cAAA,cAAA;AACA,6BAAA,SAAA,UAAA1C,SAAA,SAAA;AACA,0BAAA,SAAA;AACA,0BAAA,UAAA,KAAA,QAAA;AACA,wBAAA,MAAA,SAAA;AAAA,sBAAAsC,QAAA,MAAA,OAAA,KAAA;AACA,2BAAA,SAAA;kBACA;;;kBAGA,SAAA,SAAA,YAAA;AACA,2BAAA,KAAA,KAAA,QAAA,UAAA;kBACA;gBACA,CAAG;AACH,uCAAA,WAAA;AACA,sBAAA,UAAA,IAAA,SAAA;AACA,sBAAA,QAAA,iBAAA,OAAA;AACA,uBAAA,UAAA;AACA,uBAAA,UAAA,KAAA,iBAAA,SAAA,KAAA;AACA,uBAAA,SAAA,KAAA,gBAAA,SAAA,KAAA;gBACA;AACA,2CAAA,IAAA,uBAAA,SAAAvC,IAAA;AACA,yBAAAA,OAAA,sBAAAA,OAAA,iBACA,IAAA,qBAAAA,EAAA,IACA,4BAAAA,EAAA;gBACA;AAEA,oBAAA,CAAA,WAAA,OAAA,iBAAA,YAAA;AACA,+BAAA,cAAA,UAAA;AAGA,2BAAA,cAAA,WAAA,QAAA,SAAA,KAAA,aAAA,YAAA;AACA,wBAAA,OAAA;AACA,2BAAA,IAAA,mBAAA,SAAA,SAAA,QAAA;AACA,iCAAA,KAAA,MAAA,SAAA,MAAA;oBACA,CAAO,EAAA,KAAA,aAAA,UAAA;kBAEP,GAAK,EAAG,QAAA,KAAA,CAAe;AAGvB,sBAAA,OAAA,UAAA;AAAA,oBAAAnE,GAAA,EAAwC,QAAA,MAAA,YAAA,MAAA,QAAA,KAAA,GAA+C;;sBAEvF,OAAA,SAAA+G,OAAA,OAAA;AACA,+BAAA,eAAA,oBAAA,OAAA,MAAAxG,SAAA,SAAA,CAAA;sBACA;oBACA,CAAK;gBACL;cACA;AAEA,cAAAP,GAAA,EAAG,QAAA,MAAA,MAAA,MAAA,QAAA,OAAA,GAA2C;gBAC9C,SAAA;cACA,CAAC;AAED,6BAAA,oBAAA,SAAA,OAAA,IAAA;AACA,yBAAA,OAAA;AAEA,+BAAA,WAAA,OAAA;AAGA,cAAAA,GAAA,EAAG,QAAA,SAAA,MAAA,MAAA,QAAA,OAAA,GAA8C;;;gBAGjD,QAAA,SAAA,OAAArB,IAAA;AACA,sBAAA,aAAA,qBAAA,IAAA;AACA,6BAAA,OAAA,KAAA,QAAAA,EAAA;AACA,yBAAA,WAAA;gBACA;cACA,CAAC;AAED,cAAAqB,GAAA,EAAG,QAAA,SAAA,MAAA,MAAA,QAAA,WAAA,OAAA,GAAyD;;;gBAG5D,SAAA,SAAA,QAAA2F,IAAA;AACA,yBAAA,eAAA,WAAA,SAAA,iBAAA,qBAAA,MAAAA,EAAA;gBACA;cACA,CAAC;AAED,cAAA3F,GAAA,EAAG,QAAA,SAAA,MAAA,MAAA,QAAA,oBAAA,GAA2D;;;gBAG9D,KAAA,SAAAgH,KAAA,UAAA;AACA,sBAAA7C,KAAA;AACA,sBAAA,aAAA,qBAAAA,EAAA;AACA,sBAAA,UAAA,WAAA;AACA,sBAAA,SAAA,WAAA;AACA,sBAAA,SAAA,QAAA,WAAA;AACA,wBAAA,kBAAA,UAAAA,GAAA,OAAA;AACA,wBAAAL,UAAA,CAAA;AACA,wBAAA,UAAA;AACA,wBAAA,YAAA;AACA,4BAAA,UAAA,SAAA,SAAA;AACA,0BAAA7D,SAAA;AACA,0BAAA,gBAAA;AACA,sBAAA6D,QAAA,KAAA,MAAA;AACA;AACA,sCAAA,KAAAK,IAAA,OAAA,EAAA,KAAA,SAAA,OAAA;AACA,4BAAA;AAAA;AACA,wCAAA;AACA,wBAAAL,QAAA7D,MAAA,IAAA;AACA,0BAAA,aAAA,QAAA6D,OAAA;sBACA,GAAS,MAAA;oBACT,CAAO;AACP,sBAAA,aAAA,QAAAA,OAAA;kBACA,CAAK;AACL,sBAAA,OAAA;AAAA,2BAAA,OAAA,KAAA;AACA,yBAAA,WAAA;gBACA;;;gBAGA,MAAA,SAAA,KAAA,UAAA;AACA,sBAAAK,KAAA;AACA,sBAAA,aAAA,qBAAAA,EAAA;AACA,sBAAA,SAAA,WAAA;AACA,sBAAA,SAAA,QAAA,WAAA;AACA,wBAAA,kBAAA,UAAAA,GAAA,OAAA;AACA,4BAAA,UAAA,SAAA,SAAA;AACA,sCAAA,KAAAA,IAAA,OAAA,EAAA,KAAA,WAAA,SAAA,MAAA;oBACA,CAAO;kBACP,CAAK;AACL,sBAAA,OAAA;AAAA,2BAAA,OAAA,KAAA;AACA,yBAAA,WAAA;gBACA;cACA,CAAC;;;;;AC1XD,kBAAA5D,UAAa,oBAAQ,CAAqB;AAC1C,kBAAA,2BAA+B,oBAAQ,EAAiD,EAAA;AACxF,kBAAA,UAAc,oBAAQ,EAA0B;AAChD,kBAAA,YAAgB,oBAAQ,GAAmB,EAAA;AAC3C,kBAAA,SAAa,oBAAQ,GAA4B;AAEjD,kBAAA0G,oBAAA1G,QAAA,oBAAAA,QAAA;AACA,kBAAA6D,WAAA7D,QAAA;AACA,kBAAAuG,WAAAvG,QAAA;AACA,kBAAA,UAAA,QAAA6D,QAAA,KAAA;AAEA,kBAAA,2BAAA,yBAAA7D,SAAA,gBAAA;AACA,kBAAA,iBAAA,4BAAA,yBAAA;AAEA,kBAAA,OAAA,MAAA,MAAAmG,SAAA,QAAA9B,OAAA,SAAA;AAGA,kBAAA,CAAA,gBAAA;AACA,wBAAA,WAAA;AACA,sBAAA,QAAA7E;AACA,sBAAA,YAAA,SAAAqE,SAAA;AAAA,2BAAA,KAAA;AACA,yBAAA,MAAA;AACA,oBAAArE,MAAA,KAAA;AACA,2BAAA,KAAA;AACA,wBAAA;AACA,sBAAAA,IAAA;oBACA,SAAOX,QAAA;AACP,0BAAA;AAAA,wBAAAsH,QAAA;;AACA,+BAAA;AACA,4BAAAtH;oBACA;kBACA;AAAK,yBAAA;AACL,sBAAA;AAAA,2BAAA,MAAA;gBACA;AAGA,oBAAA,SAAA;AACA,kBAAAsH,UAAA,WAAA;AACA,oBAAAtC,SAAA,SAAA,KAAA;kBACA;gBAEA,WAAG6C,qBAAA,CAAA,QAAA;AACH,2BAAA;AACA,kBAAArC,QAAA,SAAA,eAAA,EAAA;AACA,sBAAAqC,kBAAA,KAAA,EAAA,QAAArC,OAAA,EAA+C,eAAA,KAAA,CAAsB;AACrE,kBAAA8B,UAAA,WAAA;AACA,oBAAA9B,MAAA,OAAA,SAAA,CAAA;kBACA;gBAEA,WAAGkC,YAAAA,SAAA,SAAA;AAEH,4BAAAA,SAAA,QAAA,MAAA;AACA,yBAAA,QAAA;AACA,kBAAAJ,UAAA,WAAA;AACA,yBAAA,KAAA,SAAA,KAAA;kBACA;gBAOA,OAAG;AACH,kBAAAA,UAAA,WAAA;AAEA,8BAAA,KAAAnG,SAAA,KAAA;kBACA;gBACA;cACA;AAEA,cAAA1C,QAAA,UAAA,kBAAA,SAAAkC,KAAA;AACA,oBAAA,OAAA,EAAc,IAAAA,KAAA,MAAA,OAAA;AACd,oBAAA;AAAA,uBAAA,OAAA;AACA,oBAAA,CAAA,MAAA;AACA,yBAAA;AACA,kBAAA2G,QAAA;gBACA;AAAG,uBAAA;cACH;;;;;AC7EA,kBAAAnG,UAAa,oBAAQ,CAAqB;AAE1C,cAAA1C,QAAA,UAAA,SAAA,GAAAS,IAAA;AACA,oBAAA4I,WAAA3G,QAAA;AACA,oBAAA2G,YAAAA,SAAA,OAAA;AACA,4BAAA,WAAA,IAAAA,SAAA,MAAA,CAAA,IAAAA,SAAA,MAAA,GAAA5I,EAAA;gBACA;cACA;;;;;;ACNA,kBAAA0B,KAAQ,oBAAQ,CAAqB;AACrC,kBAAA,YAAgB,oBAAQ,EAAyB;AACjD,kBAAA,6BAAiC,oBAAQ,EAAqC;AAC9E,kBAAA,UAAc,oBAAQ,GAAsB;AAC5C,kBAAA,UAAc,oBAAQ,EAAsB;AAI5C,cAAAA,GAAA,EAAG,QAAA,WAAA,MAAA,KAAA,GAAgC;gBACnC,YAAA,SAAA,WAAA,UAAA;AACA,sBAAAmE,KAAA;AACA,sBAAA,aAAA,2BAAA,EAAAA,EAAA;AACA,sBAAA,UAAA,WAAA;AACA,sBAAA,SAAA,WAAA;AACA,sBAAA,SAAA,QAAA,WAAA;AACA,wBAAA,iBAAA,UAAAA,GAAA,OAAA;AACA,wBAAAL,UAAA,CAAA;AACA,wBAAA,UAAA;AACA,wBAAA,YAAA;AACA,4BAAA,UAAA,SAAA,SAAA;AACA,0BAAA7D,SAAA;AACA,0BAAA,gBAAA;AACA,sBAAA6D,QAAA,KAAA,MAAA;AACA;AACA,qCAAA,KAAAK,IAAA,OAAA,EAAA,KAAA,SAAA,OAAA;AACA,4BAAA;AAAA;AACA,wCAAA;AACA,wBAAAL,QAAA7D,MAAA,IAAA,EAA2B,QAAA,aAAA,MAAA;AAC3B,0BAAA,aAAA,QAAA6D,OAAA;sBACA,GAAS,SAAApF,IAAA;AACT,4BAAA;AAAA;AACA,wCAAA;AACA,wBAAAoF,QAAA7D,MAAA,IAAA,EAA2B,QAAA,YAAA,QAAAvB,GAAA;AAC3B,0BAAA,aAAA,QAAAoF,OAAA;sBACA,CAAS;oBACT,CAAO;AACP,sBAAA,aAAA,QAAAA,OAAA;kBACA,CAAK;AACL,sBAAA,OAAA;AAAA,2BAAA,OAAA,KAAA;AACA,yBAAA,WAAA;gBACA;cACA,CAAC;;;;;;ACzCD,kBAAA9D,KAAQ,oBAAQ,CAAqB;AACrC,kBAAA,UAAc,oBAAQ,EAAsB;AAC5C,kBAAA,gBAAoB,oBAAQ,GAAyC;AACrE,kBAAA,QAAY,oBAAQ,EAAoB;AACxC,kBAAA,aAAiB,oBAAQ,EAA2B;AACpD,kBAAA,qBAAyB,oBAAQ,GAAkC;AACnE,kBAAA,iBAAqB,oBAAQ,GAA8B;AAC3D,kBAAA,WAAe,oBAAQ,EAAuB;AAG9C,kBAAA,cAAA,CAAA,CAAA,iBAAA,MAAA,WAAA;AACA,8BAAA,UAAA,SAAA,EAAA,KAAA,EAA2C,MAAA,WAAA;gBAAoB,EAAc,GAAE,WAAA;gBAAe,CAAc;cAC5G,CAAC;AAID,cAAAA,GAAA,EAAG,QAAA,WAAA,OAAA,MAAA,MAAA,MAAA,QAAA,YAAA,GAAkE;gBACrE,WAAA,SAAA,WAAA;AACA,sBAAAmE,KAAA,mBAAA,MAAA,WAAA,SAAA,CAAA;AACA,sBAAA,aAAA,OAAA,aAAA;AACA,yBAAA,KAAA;oBACA,aAAA,SAAAwB,IAAA;AACA,6BAAA,eAAAxB,IAAA,UAAA,CAAA,EAAA,KAAA,WAAA;AAAgE,+BAAAwB;sBAAU,CAAE;oBAC5E,IAAO;oBACP,aAAA,SAAAjH,IAAA;AACA,6BAAA,eAAAyF,IAAA,UAAA,CAAA,EAAA,KAAA,WAAA;AAAgE,8BAAAzF;sBAAS,CAAE;oBAC3E,IAAO;kBACP;gBACA;cACA,CAAC;AAGD,kBAAA,CAAA,WAAA,OAAA,iBAAA,cAAA,CAAA,cAAA,UAAA,SAAA,GAAA;AACA,yBAAA,cAAA,WAAA,WAAA,WAAA,SAAA,EAAA,UAAA,SAAA,CAAA;cACA;;;;;ACnCA,kCAAQ,EAA4C;AACpD,kBAAA,UAAc,oBAAQ,GAA2B;AACjD,kBAAA,UAAc,oBAAQ,EAAyB;AAC/C,kBAAA,iBAAA,MAAA;AAEA,kBAAA,eAAA;gBACA,cAAA;gBACA,UAAA;cACA;AAEA,cAAAb,QAAA,UAAA,SAAAiD,KAAA;AACA,oBAAAqG,OAAArG,IAAA;AACA,uBAAAA,QAAA,kBAAAA,eAAA,SAAAqG,SAAA,eAAA,WAEA,aAAA,eAAA,QAAArG,GAAA,CAAA,IAAA,UAAAqG;cACA;;;;;ACfA,kBAAA,SAAa,oBAAQ,GAAoC;AAEzD,cAAAtJ,QAAA,UAAA;;;;;ACFA,kCAAQ,GAAoC;AAC5C,kBAAA,eAAmB,oBAAQ,EAAkC;AAE7D,cAAAA,QAAA,UAAA,aAAA,OAAA,EAAA;;;;;;ACFA,kBAAAmC,KAAQ,oBAAQ,CAAqB;AACrC,kBAAA,UAAc,oBAAQ,GAA6B;AAInD,cAAAA,GAAA,EAAG,QAAA,SAAA,OAAA,MAAA,QAAA,CAAA,EAAA,WAAA,QAAA,GAA8D;gBACjE;cACA,CAAC;;;;;;ACPD,kBAAA,WAAe,oBAAQ,EAA8B,EAAA;AACrD,kBAAA,sBAA0B,oBAAQ,EAAqC;AACvE,kBAAA,0BAA8B,oBAAQ,EAA0C;AAEhF,kBAAA,gBAAA,oBAAA,SAAA;AACA,kBAAA,iBAAA,wBAAA,SAAA;AAIA,cAAAnC,QAAA,UAAA,CAAA,iBAAA,CAAA,iBAAA,SAAA,QAAA,YAAA;AACA,uBAAA,SAAA,MAAA,YAAA,UAAA,SAAA,IAAA,UAAA,CAAA,IAAA,MAAA;cACA,IAAC,CAAA,EAAA;;;;;ACZD,kBAAA,SAAa,oBAAQ,GAAyB;AAE9C,cAAAA,QAAA,UAAA;;;;;ACFA,kCAAQ,GAAiC;AACzC,kBAAA2C,QAAW,oBAAQ,CAAsB;AAEzC,cAAA3C,QAAA,UAAA2C,MAAA,MAAA;;;;;ACHA,kBAAAR,KAAQ,oBAAQ,CAAqB;AACrC,kBAAA,UAAc,oBAAQ,EAAuB;AAI7C,cAAAA,GAAA,EAAG,QAAA,SAAA,MAAA,KAAA,GAA8B;gBACjC;cACA,CAAC;;;;;ACPD,kBAAA,SAAa,oBAAQ,GAAuB;AAE5C,cAAAnC,QAAA,UAAA;;;;;ACFA,kBAAAuJ,OAAU,oBAAQ,GAAsB;AAExC,kBAAA,iBAAA,MAAA;AAEA,cAAAvJ,QAAA,UAAA,SAAAiD,KAAA;AACA,oBAAAqG,OAAArG,IAAA;AACA,uBAAAA,QAAA,kBAAAA,eAAA,SAAAqG,SAAA,eAAA,MAAAC,OAAAD;cACA;;;;;ACPA,kCAAQ,GAA+B;AACvC,kBAAA,eAAmB,oBAAQ,EAAkC;AAE7D,cAAAtJ,QAAA,UAAA,aAAA,OAAA,EAAA;;;;;;ACFA,kBAAAmC,KAAQ,oBAAQ,CAAqB;AACrC,kBAAA,OAAW,oBAAQ,EAA8B,EAAA;AACjD,kBAAA,+BAAmC,oBAAQ,EAA+C;AAC1F,kBAAA,0BAA8B,oBAAQ,EAA0C;AAEhF,kBAAA,sBAAA,6BAAA,KAAA;AAEA,kBAAA,iBAAA,wBAAA,KAAA;AAKA,cAAAA,GAAA,EAAG,QAAA,SAAA,OAAA,MAAA,QAAA,CAAA,uBAAA,CAAA,eAAA,GAAgF;gBACnF,KAAA,SAAAoH,KAAA,YAAA;AACA,yBAAA,KAAA,MAAA,YAAA,UAAA,SAAA,IAAA,UAAA,CAAA,IAAA,MAAA;gBACA;cACA,CAAC;;;;;ACjBD,kBAAA,SAAa,oBAAQ,GAAwB;AAE7C,cAAAvJ,QAAA,UAAA;;;;;ACFA,kBAAA,OAAW,oBAAQ,GAAwB;AAE3C,kBAAA,kBAAA,OAAA;AAEA,cAAAA,QAAA,UAAA,SAAAiD,KAAA;AACA,oBAAAqG,OAAArG,IAAA;AACA,uBAAA,OAAAA,QAAA,YAAAA,QAAA,mBACAA,eAAA,UAAAqG,SAAA,gBAAA,OAAA,OAAAA;cACA;;;;;ACRA,kCAAQ,GAAiC;AACzC,kBAAA,eAAmB,oBAAQ,EAAkC;AAE7D,cAAAtJ,QAAA,UAAA,aAAA,QAAA,EAAA;;;;;;ACFA,kBAAAmC,KAAQ,oBAAQ,CAAqB;AACrC,kBAAA,QAAY,oBAAQ,EAA0B,EAAA;AAC9C,kBAAA,yBAA6B,oBAAQ,GAAiC;AAItE,cAAAA,GAAA,EAAG,QAAA,UAAA,OAAA,MAAA,QAAA,uBAAA,MAAA,EAAA,GAAwE;gBAC3E,MAAA,SAAA,OAAA;AACA,yBAAA,MAAA,IAAA;gBACA;cACA,CAAC;;;;;ACXD,kBAAA,QAAY,oBAAQ,EAAoB;AACxC,kBAAA,cAAkB,oBAAQ,EAA0B;AAEpD,kBAAA,MAAA;AAIA,cAAAnC,QAAA,UAAA,SAAA,aAAA;AACA,uBAAA,MAAA,WAAA;AACA,yBAAA,CAAA,CAAA,YAAA,WAAA,EAAA,KAAA,IAAA,WAAA,EAAA,KAAA,OAAA,YAAA,WAAA,EAAA,SAAA;gBACA,CAAG;cACH;;;;;ACXA,kBAAA,SAAa,oBAAQ,GAAc;AAEnC,cAAAA,QAAA,UAAA;;;;;ACFA,kCAAQ,GAAsB;AAC9B,kCAAQ,EAAmC;AAC3C,kCAAQ,EAAkC;AAC1C,kCAAQ,EAA4C;AACpD,kBAAA2C,QAAW,oBAAQ,CAAsB;AAEzC,cAAA3C,QAAA,UAAA2C,MAAA;;;;;;ACLA,kBAAA,aAAiB,oBAAQ,GAAyB;AAClD,kBAAA,mBAAuB,oBAAQ,GAAgC;AAI/D,cAAA3C,QAAA,UAAA,WAAA,OAAA,SAAAwJ,OAAA;AACA,uBAAA,SAAAC,OAAA;AAAyB,yBAAAD,MAAA,MAAA,UAAA,SAAA,UAAA,CAAA,IAAA,MAAA;gBAAgE;cACzF,GAAC,gBAAA;;;;;ACRD,kBAAA,QAAY,oBAAQ,EAAoB;AAExC,cAAAxJ,QAAA,UAAA,CAAA,MAAA,WAAA;AACA,uBAAA,OAAA,aAAA,OAAA,kBAAA,CAAA,CAAwD,CAAA;cACxD,CAAC;;;;;ACJD,kBAAA,SAAa,oBAAQ,GAA4B;AAEjD,cAAAA,QAAA,UAAA;;;;;ACFA,kBAAAyH,WAAc,oBAAQ,GAA2B;AAEjD,kBAAA,iBAAA,MAAA;AAEA,cAAAzH,QAAA,UAAA,SAAAiD,KAAA;AACA,oBAAAqG,OAAArG,IAAA;AACA,uBAAAA,QAAA,kBAAAA,eAAA,SAAAqG,SAAA,eAAA,UAAA7B,WAAA6B;cACA;;;;;ACPA,kCAAQ,GAAoC;AAC5C,kBAAA,eAAmB,oBAAQ,EAAkC;AAE7D,cAAAtJ,QAAA,UAAA,aAAA,OAAA,EAAA;;;;;;ACFA,kBAAAmC,KAAQ,oBAAQ,CAAqB;AACrC,kBAAA,WAAe,oBAAQ,EAA6B,EAAA;AACpD,kBAAA,sBAA0B,oBAAQ,EAAqC;AACvE,kBAAA,0BAA8B,oBAAQ,EAA0C;AAEhF,kBAAA,gBAAA,CAAA,EAAA;AAEA,kBAAA,gBAAA,CAAA,CAAA,iBAAA,IAAA,CAAA,CAAA,EAAA,QAAA,GAAA,EAAA,IAAA;AACA,kBAAA,gBAAA,oBAAA,SAAA;AACA,kBAAA,iBAAA,wBAAA,WAAA,EAAyD,WAAA,MAAA,GAAA,EAAA,CAAwB;AAIjF,cAAAA,GAAA,EAAG,QAAA,SAAA,OAAA,MAAA,QAAA,iBAAA,CAAA,iBAAA,CAAA,eAAA,GAA2F;gBAC9F,SAAA,SAAAsF,SAAA,eAAA;AACA,yBAAA,gBAEA,cAAA,MAAA,MAAA,SAAA,KAAA,IACA,SAAA,MAAA,eAAA,UAAA,SAAA,IAAA,UAAA,CAAA,IAAA,MAAA;gBACA;cACA,CAAC;;;;;ACrBD,kBAAA,SAAa,oBAAQ,GAA0B;AAE/C,cAAAzH,QAAA,UAAA;;;;;ACFA,kBAAA0J,UAAa,oBAAQ,GAAyB;AAE9C,kBAAA,iBAAA,MAAA;AAEA,cAAA1J,QAAA,UAAA,SAAAiD,KAAA;AACA,oBAAAqG,OAAArG,IAAA;AACA,uBAAAA,QAAA,kBAAAA,eAAA,SAAAqG,SAAA,eAAA,SAAAI,UAAAJ;cACA;;;;;ACPA,kCAAQ,GAAkC;AAC1C,kBAAA,eAAmB,oBAAQ,EAAkC;AAE7D,cAAAtJ,QAAA,UAAA,aAAA,OAAA,EAAA;;;;;;ACFA,kBAAAmC,KAAQ,oBAAQ,CAAqB;AACrC,kBAAA,kBAAsB,oBAAQ,EAAgC;AAC9D,kBAAA,YAAgB,oBAAQ,EAAyB;AACjD,kBAAA,WAAe,oBAAQ,EAAwB;AAC/C,kBAAA,WAAe,oBAAQ,EAAwB;AAC/C,kBAAA,qBAAyB,oBAAQ,EAAmC;AACpE,kBAAA,iBAAqB,oBAAQ,EAA8B;AAC3D,kBAAA,+BAAmC,oBAAQ,EAA+C;AAC1F,kBAAA,0BAA8B,oBAAQ,EAA0C;AAEhF,kBAAA,sBAAA,6BAAA,QAAA;AACA,kBAAA,iBAAA,wBAAA,UAAA,EAAwD,WAAA,MAAA,GAAA,GAAA,GAAA,EAAA,CAA8B;AAEtF,kBAAAkE,OAAA,KAAA;AACA,kBAAApB,OAAA,KAAA;AACA,kBAAA,mBAAA;AACA,kBAAA,kCAAA;AAKA,cAAA9C,GAAA,EAAG,QAAA,SAAA,OAAA,MAAA,QAAA,CAAA,uBAAA,CAAA,eAAA,GAAgF;gBACnF,QAAA,SAAAuH,QAAAnC,QAAA,aAAA;AACA,sBAAAnE,KAAA,SAAA,IAAA;AACA,sBAAA,MAAA,SAAAA,GAAA,MAAA;AACA,sBAAA,cAAA,gBAAAmE,QAAA,GAAA;AACA,sBAAA,kBAAA,UAAA;AACA,sBAAA,aAAA,mBAAAoC,IAAAvI,IAAA,MAAAO;AACA,sBAAA,oBAAA,GAAA;AACA,kCAAA,oBAAA;kBACA,WAAK,oBAAA,GAAA;AACL,kCAAA;AACA,wCAAA,MAAA;kBACA,OAAK;AACL,kCAAA,kBAAA;AACA,wCAAAsD,KAAAoB,KAAA,UAAA,WAAA,GAAA,CAAA,GAAA,MAAA,WAAA;kBACA;AACA,sBAAA,MAAA,cAAA,oBAAA,kBAAA;AACA,0BAAA,UAAA,+BAAA;kBACA;AACA,kBAAAsD,KAAA,mBAAAvG,IAAA,iBAAA;AACA,uBAAAhC,KAAA,GAAeA,KAAA,mBAAuBA,MAAA;AACtC,2BAAA,cAAAA;AACA,wBAAA,QAAAgC;AAAA,qCAAAuG,IAAAvI,IAAAgC,GAAA,IAAA,CAAA;kBACA;AACA,kBAAAuG,GAAA,SAAA;AACA,sBAAA,cAAA,mBAAA;AACA,yBAAAvI,KAAA,aAA2BA,KAAA,MAAA,mBAA6BA,MAAA;AACxD,6BAAAA,KAAA;AACA,sBAAAO,MAAAP,KAAA;AACA,0BAAA,QAAAgC;AAAA,wBAAAA,GAAAzB,GAAA,IAAAyB,GAAA,IAAA;;AACA,+BAAAA,GAAAzB,GAAA;oBACA;AACA,yBAAAP,KAAA,KAAmBA,KAAA,MAAA,oBAAA,aAA2CA;AAAA,6BAAAgC,GAAAhC,KAAA,CAAA;kBAC9D,WAAK,cAAA,mBAAA;AACL,yBAAAA,KAAA,MAAA,mBAAuCA,KAAA,aAAiBA,MAAA;AACxD,6BAAAA,KAAA,oBAAA;AACA,sBAAAO,MAAAP,KAAA,cAAA;AACA,0BAAA,QAAAgC;AAAA,wBAAAA,GAAAzB,GAAA,IAAAyB,GAAA,IAAA;;AACA,+BAAAA,GAAAzB,GAAA;oBACA;kBACA;AACA,uBAAAP,KAAA,GAAeA,KAAA,aAAiBA,MAAA;AAChC,oBAAAgC,GAAAhC,KAAA,WAAA,IAAA,UAAAA,KAAA,CAAA;kBACA;AACA,kBAAAgC,GAAA,SAAA,MAAA,oBAAA;AACA,yBAAAuG;gBACA;cACA,CAAC;;;;;ACrED,kBAAA,SAAa,oBAAQ,GAA0B;AAE/C,cAAA3J,QAAA,UAAA;;;;;ACFA,kBAAA,SAAa,oBAAQ,GAAyB;AAE9C,kBAAA,iBAAA,MAAA;AAEA,cAAAA,QAAA,UAAA,SAAAiD,KAAA;AACA,oBAAAqG,OAAArG,IAAA;AACA,uBAAAA,QAAA,kBAAAA,eAAA,SAAAqG,SAAA,eAAA,SAAA,SAAAA;cACA;;;;;ACPA,kCAAQ,GAAkC;AAC1C,kBAAA,eAAmB,oBAAQ,EAAkC;AAE7D,cAAAtJ,QAAA,UAAA,aAAA,OAAA,EAAA;;;;;;ACFA,kBAAAmC,KAAQ,oBAAQ,CAAqB;AACrC,kBAAA,UAAc,oBAAQ,EAA8B,EAAA;AACpD,kBAAA,+BAAmC,oBAAQ,EAA+C;AAC1F,kBAAA,0BAA8B,oBAAQ,EAA0C;AAEhF,kBAAA,sBAAA,6BAAA,QAAA;AAEA,kBAAA,iBAAA,wBAAA,QAAA;AAKA,cAAAA,GAAA,EAAG,QAAA,SAAA,OAAA,MAAA,QAAA,CAAA,uBAAA,CAAA,eAAA,GAAgF;gBACnF,QAAA,SAAA,OAAA,YAAA;AACA,yBAAA,QAAA,MAAA,YAAA,UAAA,SAAA,IAAA,UAAA,CAAA,IAAA,MAAA;gBACA;cACA,CAAC;;;;;ACjBD,kBAAA,SAAa,oBAAQ,GAA4B;AAEjD,cAAAnC,QAAA,UAAA;;;;;ACFA,kBAAA,gBAAoB,oBAAQ,GAA2B;AACvD,kBAAA,iBAAqB,oBAAQ,GAA4B;AAEzD,kBAAA,iBAAA,MAAA;AACA,kBAAA,kBAAA,OAAA;AAEA,cAAAA,QAAA,UAAA,SAAAiD,KAAA;AACA,oBAAAqG,OAAArG,IAAA;AACA,oBAAAA,QAAA,kBAAAA,eAAA,SAAAqG,SAAA,eAAA;AAAA,yBAAA;AACA,oBAAA,OAAArG,QAAA,YAAAA,QAAA,mBAAAA,eAAA,UAAAqG,SAAA,gBAAA,UAAA;AACA,yBAAA;gBACA;AAAG,uBAAAA;cACH;;;;;ACZA,kCAAQ,GAAoC;AAC5C,kBAAA,eAAmB,oBAAQ,EAAkC;AAE7D,cAAAtJ,QAAA,UAAA,aAAA,OAAA,EAAA;;;;;;ACFA,kBAAAmC,KAAQ,oBAAQ,CAAqB;AACrC,kBAAA,YAAgB,oBAAQ,EAA6B,EAAA;AACrD,kBAAA,mBAAuB,oBAAQ,EAAiC;AAChE,kBAAA,0BAA8B,oBAAQ,EAA0C;AAEhF,kBAAA,iBAAA,wBAAA,WAAA,EAAyD,WAAA,MAAA,GAAA,EAAA,CAAwB;AAIjF,cAAAA,GAAA,EAAG,QAAA,SAAA,OAAA,MAAA,QAAA,CAAA,eAAA,GAAwD;gBAC3D,UAAA,SAAA,SAAAiE,KAAA;AACA,yBAAA,UAAA,MAAAA,KAAA,UAAA,SAAA,IAAA,UAAA,CAAA,IAAA,MAAA;gBACA;cACA,CAAC;AAGD,+BAAA,UAAA;;;;;ACjBA,kCAAQ,GAAqC;AAC7C,kBAAA,eAAmB,oBAAQ,EAAkC;AAE7D,cAAApG,QAAA,UAAA,aAAA,QAAA,EAAA;;;;;;ACFA,kBAAAmC,KAAQ,oBAAQ,CAAqB;AACrC,kBAAA,aAAiB,oBAAQ,GAA2B;AACpD,kBAAA,yBAA6B,oBAAQ,EAAuC;AAC5E,kBAAA,uBAA2B,oBAAQ,GAAsC;AAIzE,cAAAA,GAAA,EAAG,QAAA,UAAA,OAAA,MAAA,QAAA,CAAA,qBAAA,UAAA,EAAA,GAA2E;gBAC9E,UAAA,SAAA,SAAA,cAAA;AACA,yBAAA,CAAA,CAAA,CAAA,OAAA,uBAAA,IAAA,CAAA,EACA,QAAA,WAAA,YAAA,GAAA,UAAA,SAAA,IAAA,UAAA,CAAA,IAAA,MAAA;gBACA;cACA,CAAC;;;;;ACbD,kBAAA,WAAe,oBAAQ,GAAwB;AAE/C,cAAAnC,QAAA,UAAA,SAAAiD,KAAA;AACA,oBAAA,SAAAA,GAAA,GAAA;AACA,wBAAA,UAAA,+CAAA;gBACA;AAAG,uBAAAA;cACH;;;;;ACNA,kBAAA,WAAe,oBAAQ,EAAwB;AAC/C,kBAAA,UAAc,oBAAQ,EAA0B;AAChD,kBAAA,kBAAsB,oBAAQ,EAAgC;AAE9D,kBAAA,QAAA,gBAAA,OAAA;AAIA,cAAAjD,QAAA,UAAA,SAAAiD,KAAA;AACA,oBAAA;AACA,uBAAA,SAAAA,GAAA,OAAA,WAAAA,IAAA,KAAA,OAAA,SAAA,CAAA,CAAA,WAAA,QAAAA,GAAA,KAAA;cACA;;;;;ACXA,kBAAA,kBAAsB,oBAAQ,EAAgC;AAE9D,kBAAA,QAAA,gBAAA,OAAA;AAEA,cAAAjD,QAAA,UAAA,SAAA,aAAA;AACA,oBAAA,SAAA;AACA,oBAAA;AACA,wBAAA,WAAA,EAAA,MAAA;gBACA,SAAGa,IAAA;AACH,sBAAA;AACA,2BAAA,KAAA,IAAA;AACA,2BAAA,MAAA,WAAA,EAAA,MAAA;kBACA,SAAKG,IAAA;kBAAY;gBACjB;AAAG,uBAAA;cACH;;;;;ACdA,kBAAA,SAAa,oBAAQ,GAAwB;AAE7C,cAAAhB,QAAA,UAAA;;;;;ACFA,kBAAA,OAAW,oBAAQ,GAA0B;AAE7C,kBAAA,oBAAA,SAAA;AAEA,cAAAA,QAAA,UAAA,SAAAiD,KAAA;AACA,oBAAAqG,OAAArG,IAAA;AACA,uBAAAA,QAAA,qBAAAA,eAAA,YAAAqG,SAAA,kBAAA,OAAA,OAAAA;cACA;;;;;ACPA,kCAAQ,GAAmC;AAC3C,kBAAA,eAAmB,oBAAQ,EAAkC;AAE7D,cAAAtJ,QAAA,UAAA,aAAA,UAAA,EAAA;;;;;ACHA,kBAAAmC,KAAQ,oBAAQ,CAAqB;AACrC,kBAAA,OAAW,oBAAQ,GAA4B;AAI/C,cAAAA,GAAA,EAAG,QAAA,YAAA,OAAA,KAAA,GAAkC;gBACrC;cACA,CAAC;;;;;;ACND,kBAAA,YAAgB,oBAAQ,EAAyB;AACjD,kBAAA,WAAe,oBAAQ,EAAwB;AAE/C,kBAAA,QAAA,CAAA,EAAA;AACA,kBAAA,YAAA,CAAA;AAEA,kBAAA,YAAA,SAAAmE,IAAA,YAAA,MAAA;AACA,oBAAA,EAAA,cAAA,YAAA;AACA,2BAAA9C,QAAA,CAAA,GAAA,IAAA,GAA8B,IAAA,YAAgB;AAAA,oBAAAA,MAAA,CAAA,IAAA,OAAA,IAAA;AAE9C,4BAAA,UAAA,IAAA,SAAA,OAAA,kBAAAA,MAAA,KAAA,GAAA,IAAA,GAAA;gBACA;AAAG,uBAAA,UAAA,UAAA,EAAA8C,IAAA,IAAA;cACH;AAIA,cAAAtG,QAAA,UAAA,SAAA,QAAA,SAAA,KAAA,MAAA;AACA,oBAAAkC,MAAA,UAAA,IAAA;AACA,oBAAA,WAAA,MAAA,KAAA,WAAA,CAAA;AACA,oBAAA,gBAAA,SAAA,QAAA;AACA,sBAAA,OAAA,SAAA,OAAA,MAAA,KAAA,SAAA,CAAA;AACA,yBAAA,gBAAA,gBAAA,UAAAA,KAAA,KAAA,QAAA,IAAA,IAAAA,IAAA,MAAA,MAAA,IAAA;gBACA;AACA,oBAAA,SAAAA,IAAA,SAAA;AAAA,gCAAA,YAAAA,IAAA;AACA,uBAAA;cACA;;;;;AC1BA,cAAAlC,QAAA,UAAiB,oBAAQ,GAAuC;;;;;ACAhE,kBAAA,SAAa,oBAAQ,GAA0B;AAE/C,cAAAA,QAAA,UAAA;;;;;ACFA,kCAAQ,GAAkC;AAC1C,kCAAQ,EAAkC;AAC1C,kCAAQ,EAA4C;AACpD,kBAAA,+BAAmC,oBAAQ,EAA2C;AAEtF,cAAAA,QAAA,UAAA,6BAAA,EAAA,UAAA;;;;;ACLA,cAAAA,QAAA,UAAiB,oBAAQ,GAA8B;;;;;ACAvD,kBAAA,SAAa,oBAAQ,GAAiB;AACtC,kCAAQ,GAA2C;AACnD,kCAAQ,GAAqC;AAC7C,kCAAQ,GAAwC;AAChD,kCAAQ,GAA2C;AAEnD,kCAAQ,GAAyC;AAEjD,cAAAA,QAAA,UAAA;;;;;ACRA,kCAAQ,GAA+B;AACvC,kCAAQ,EAAmC;AAC3C,kCAAQ,GAAyB;AACjC,kCAAQ,GAAwC;AAChD,kCAAQ,GAAqC;AAC7C,kCAAQ,GAAsC;AAC9C,kCAAQ,GAA8C;AACtD,kCAAQ,GAAkC;AAC1C,kCAAQ,GAA+B;AACvC,kCAAQ,GAAmC;AAC3C,kCAAQ,GAAiC;AACzC,kCAAQ,GAAgC;AACxC,kCAAQ,GAAiC;AACzC,kCAAQ,GAA+B;AACvC,kCAAQ,GAAsC;AAC9C,kCAAQ,GAAuC;AAC/C,kCAAQ,GAAqC;AAC7C,kCAAQ,GAAqC;AAC7C,kCAAQ,GAAqC;AAC7C,kBAAA2C,QAAW,oBAAQ,CAAsB;AAEzC,cAAA3C,QAAA,UAAA2C,MAAA;;;;;;ACpBA,kBAAAR,KAAQ,oBAAQ,CAAqB;AACrC,kBAAA,QAAY,oBAAQ,EAAoB;AACxC,kBAAA,UAAc,oBAAQ,EAAuB;AAC7C,kBAAA,WAAe,oBAAQ,EAAwB;AAC/C,kBAAA,WAAe,oBAAQ,EAAwB;AAC/C,kBAAA,WAAe,oBAAQ,EAAwB;AAC/C,kBAAA,iBAAqB,oBAAQ,EAA8B;AAC3D,kBAAA,qBAAyB,oBAAQ,EAAmC;AACpE,kBAAA,+BAAmC,oBAAQ,EAA+C;AAC1F,kBAAA,kBAAsB,oBAAQ,EAAgC;AAC9D,kBAAA,aAAiB,oBAAQ,EAAgC;AAEzD,kBAAA,uBAAA,gBAAA,oBAAA;AACA,kBAAA,mBAAA;AACA,kBAAA,iCAAA;AAKA,kBAAA,+BAAA,cAAA,MAAA,CAAA,MAAA,WAAA;AACA,oBAAA,QAAA,CAAA;AACA,sBAAA,oBAAA,IAAA;AACA,uBAAA,MAAA,OAAA,EAAA,CAAA,MAAA;cACA,CAAC;AAED,kBAAA,kBAAA,6BAAA,QAAA;AAEA,kBAAA,qBAAA,SAAAiB,IAAA;AACA,oBAAA,CAAA,SAAAA,EAAA;AAAA,yBAAA;AACA,oBAAA,aAAAA,GAAA,oBAAA;AACA,uBAAA,eAAA,SAAA,CAAA,CAAA,aAAA,QAAAA,EAAA;cACA;AAEA,kBAAA,SAAA,CAAA,gCAAA,CAAA;AAKA,cAAAjB,GAAA,EAAG,QAAA,SAAA,OAAA,MAAA,QAAA,OAAA,GAA+C;gBAClD,QAAA,SAAAyH,QAAA,KAAA;AACA,sBAAAxG,KAAA,SAAA,IAAA;AACA,sBAAAuG,KAAA,mBAAAvG,IAAA,CAAA;AACA,sBAAAxC,KAAA;AACA,sBAAA,GAAAQ,IAAA,QAAA,KAAAyI;AACA,uBAAA,IAAA,IAAA,SAAA,UAAA,QAA2C,IAAA,QAAY,KAAA;AACvD,oBAAAA,KAAA,MAAA,KAAAzG,KAAA,UAAA,CAAA;AACA,wBAAA,mBAAAyG,EAAA,GAAA;AACA,4BAAA,SAAAA,GAAA,MAAA;AACA,0BAAAjJ,KAAA,MAAA;AAAA,8BAAA,UAAA,8BAAA;AACA,2BAAAQ,KAAA,GAAmBA,KAAA,KAASA,MAAAR;AAAA,4BAAAQ,MAAAyI;AAAA,yCAAAF,IAAA/I,IAAAiJ,GAAAzI,EAAA,CAAA;oBAC5B,OAAO;AACP,0BAAAR,MAAA;AAAA,8BAAA,UAAA,8BAAA;AACA,qCAAA+I,IAAA/I,MAAAiJ,EAAA;oBACA;kBACA;AACA,kBAAAF,GAAA,SAAA/I;AACA,yBAAA+I;gBACA;cACA,CAAC;;;;;;AC1DD,kBAAAxH,KAAQ,oBAAQ,CAAqB;AACrC,kBAAAO,UAAa,oBAAQ,CAAqB;AAC1C,kBAAA,aAAiB,oBAAQ,EAA2B;AACpD,kBAAA,UAAc,oBAAQ,EAAsB;AAC5C,kBAAA,cAAkB,oBAAQ,EAA0B;AACpD,kBAAA,gBAAoB,oBAAQ,EAA4B;AACxD,kBAAA,oBAAwB,oBAAQ,GAAgC;AAChE,kBAAA,QAAY,oBAAQ,EAAoB;AACxC,kBAAA,MAAU,oBAAQ,EAAkB;AACpC,kBAAA,UAAc,oBAAQ,EAAuB;AAC7C,kBAAA,WAAe,oBAAQ,EAAwB;AAC/C,kBAAA,WAAe,oBAAQ,EAAwB;AAC/C,kBAAA,WAAe,oBAAQ,EAAwB;AAC/C,kBAAA,kBAAsB,oBAAQ,EAAgC;AAC9D,kBAAA,cAAkB,oBAAQ,EAA2B;AACrD,kBAAA,2BAA+B,oBAAQ,EAAyC;AAChF,kBAAA,qBAAyB,oBAAQ,EAA4B;AAC7D,kBAAA,aAAiB,oBAAQ,EAA0B;AACnD,kBAAA,4BAAgC,oBAAQ,GAA4C;AACpF,kBAAA,8BAAkC,oBAAQ,GAAqD;AAC/F,kBAAA,8BAAkC,oBAAQ,GAA8C;AACxF,kBAAA,iCAAqC,oBAAQ,EAAiD;AAC9F,kBAAA,uBAA2B,oBAAQ,EAAqC;AACxE,kBAAA,6BAAiC,oBAAQ,EAA4C;AACrF,kBAAA,8BAAkC,oBAAQ,EAA6C;AACvF,kBAAA,WAAe,oBAAQ,EAAuB;AAC9C,kBAAA,SAAa,oBAAQ,EAAqB;AAC1C,kBAAA,YAAgB,oBAAQ,EAAyB;AACjD,kBAAA,aAAiB,oBAAQ,EAA0B;AACnD,kBAAA,MAAU,oBAAQ,EAAkB;AACpC,kBAAA,kBAAsB,oBAAQ,EAAgC;AAC9D,kBAAA,+BAAmC,oBAAQ,EAAwC;AACnF,kBAAA,wBAA4B,oBAAQ,EAAuC;AAC3E,kBAAA,iBAAqB,oBAAQ,EAAgC;AAC7D,kBAAA,sBAA0B,oBAAQ,EAA6B;AAC/D,kBAAA,WAAe,oBAAQ,EAA8B,EAAA;AAErD,kBAAA,SAAA,UAAA,QAAA;AACA,kBAAA,SAAA;AACA,kBAAA,YAAA;AACA,kBAAA,eAAA,gBAAA,aAAA;AACA,kBAAA,mBAAA,oBAAA;AACA,kBAAA,mBAAA,oBAAA,UAAA,MAAA;AACA,kBAAA,kBAAA,OAAA,SAAA;AACA,kBAAA,UAAAA,QAAA;AACA,kBAAA,aAAA,WAAA,QAAA,WAAA;AACA,kBAAA,iCAAA,+BAAA;AACA,kBAAA,uBAAA,qBAAA;AACA,kBAAA,4BAAA,4BAAA;AACA,kBAAA,6BAAA,2BAAA;AACA,kBAAA,aAAA,OAAA,SAAA;AACA,kBAAA,yBAAA,OAAA,YAAA;AACA,kBAAA,yBAAA,OAAA,2BAAA;AACA,kBAAA,yBAAA,OAAA,2BAAA;AACA,kBAAA,wBAAA,OAAA,KAAA;AACA,kBAAA,UAAAA,QAAA;AAEA,kBAAA,aAAA,CAAA,WAAA,CAAA,QAAA,SAAA,KAAA,CAAA,QAAA,SAAA,EAAA;AAGA,kBAAA,sBAAA,eAAA,MAAA,WAAA;AACA,uBAAA,mBAAA,qBAAA,CAAA,GAAmD,KAAA;kBACnD,KAAA,WAAA;AAAsB,2BAAA,qBAAA,MAAA,KAAA,EAAyC,OAAA,EAAA,CAAW,EAAA;kBAAI;gBAC9E,CAAG,CAAA,EAAA,KAAA;cACH,CAAC,IAAA,SAAAU,IAAArC,IAAA,YAAA;AACD,oBAAA,4BAAA,+BAAA,iBAAAA,EAAA;AACA,oBAAA;AAAA,yBAAA,gBAAAA,EAAA;AACA,qCAAAqC,IAAArC,IAAA,UAAA;AACA,oBAAA,6BAAAqC,OAAA,iBAAA;AACA,uCAAA,iBAAArC,IAAA,yBAAA;gBACA;cACA,IAAC;AAED,kBAAA,OAAA,SAAA,KAAA,aAAA;AACA,oBAAA,SAAA,WAAA,GAAA,IAAA,mBAAA,QAAA,SAAA,CAAA;AACA,iCAAA,QAAA;kBACA,MAAA;kBACA;kBACA;gBACA,CAAG;AACH,oBAAA,CAAA;AAAA,yBAAA,cAAA;AACA,uBAAA;cACA;AAEA,kBAAA,WAAA,oBAAA,SAAAkC,KAAA;AACA,uBAAA,OAAAA,OAAA;cACA,IAAC,SAAAA,KAAA;AACD,uBAAA,OAAAA,GAAA,aAAA;cACA;AAEA,kBAAA,kBAAA,SAAA,eAAAG,IAAArC,IAAA,YAAA;AACA,oBAAAqC,OAAA;AAAA,kCAAA,wBAAArC,IAAA,UAAA;AACA,yBAAAqC,EAAA;AACA,oBAAA,MAAA,YAAArC,IAAA,IAAA;AACA,yBAAA,UAAA;AACA,oBAAA,IAAA,YAAA,GAAA,GAAA;AACA,sBAAA,CAAA,WAAA,YAAA;AACA,wBAAA,CAAA,IAAAqC,IAAA,MAAA;AAAA,2CAAAA,IAAA,QAAA,yBAAA,GAAA,CAAA,CAAyF,CAAA;AACzF,oBAAAA,GAAA,MAAA,EAAA,GAAA,IAAA;kBACA,OAAK;AACL,wBAAA,IAAAA,IAAA,MAAA,KAAAA,GAAA,MAAA,EAAA,GAAA;AAAA,sBAAAA,GAAA,MAAA,EAAA,GAAA,IAAA;AACA,iCAAA,mBAAA,YAAA,EAAmD,YAAA,yBAAA,GAAA,KAAA,EAAA,CAAiD;kBACpG;AAAK,yBAAA,oBAAAA,IAAA,KAAA,UAAA;gBACL;AAAG,uBAAA,qBAAAA,IAAA,KAAA,UAAA;cACH;AAEA,kBAAA,oBAAA,SAAA8C,kBAAA9C,IAAA,YAAA;AACA,yBAAAA,EAAA;AACA,oBAAA0G,cAAA,gBAAA,UAAA;AACA,oBAAAnE,QAAA,WAAAmE,WAAA,EAAA,OAAA,uBAAAA,WAAA,CAAA;AACA,yBAAAnE,OAAA,SAAA,KAAA;AACA,sBAAA,CAAA,eAAA,sBAAA,KAAAmE,aAAA,GAAA;AAAA,oCAAA1G,IAAA,KAAA0G,YAAA,GAAA,CAAA;gBACA,CAAG;AACH,uBAAA1G;cACA;AAEA,kBAAA,UAAA,SAAAqB,QAAArB,IAAA,YAAA;AACA,uBAAA,eAAA,SAAA,mBAAAA,EAAA,IAAA,kBAAA,mBAAAA,EAAA,GAAA,UAAA;cACA;AAEA,kBAAA,wBAAA,SAAA,qBAAAyC,IAAA;AACA,oBAAA9E,KAAA,YAAA8E,IAAA,IAAA;AACA,oBAAA,aAAA,2BAAA,KAAA,MAAA9E,EAAA;AACA,oBAAA,SAAA,mBAAA,IAAA,YAAAA,EAAA,KAAA,CAAA,IAAA,wBAAAA,EAAA;AAAA,yBAAA;AACA,uBAAA,cAAA,CAAA,IAAA,MAAAA,EAAA,KAAA,CAAA,IAAA,YAAAA,EAAA,KAAA,IAAA,MAAA,MAAA,KAAA,KAAA,MAAA,EAAAA,EAAA,IAAA,aAAA;cACA;AAEA,kBAAA,4BAAA,SAAA,yBAAAqC,IAAArC,IAAA;AACA,oBAAAkC,MAAA,gBAAAG,EAAA;AACA,oBAAA,MAAA,YAAArC,IAAA,IAAA;AACA,oBAAAkC,QAAA,mBAAA,IAAA,YAAA,GAAA,KAAA,CAAA,IAAA,wBAAA,GAAA;AAAA;AACA,oBAAA,aAAA,+BAAAA,KAAA,GAAA;AACA,oBAAA,cAAA,IAAA,YAAA,GAAA,KAAA,EAAA,IAAAA,KAAA,MAAA,KAAAA,IAAA,MAAA,EAAA,GAAA,IAAA;AACA,6BAAA,aAAA;gBACA;AACA,uBAAA;cACA;AAEA,kBAAA,uBAAA,SAAA,oBAAAG,IAAA;AACA,oBAAAsE,SAAA,0BAAA,gBAAAtE,EAAA,CAAA;AACA,oBAAA,SAAA,CAAA;AACA,yBAAAsE,QAAA,SAAA,KAAA;AACA,sBAAA,CAAA,IAAA,YAAA,GAAA,KAAA,CAAA,IAAA,YAAA,GAAA;AAAA,2BAAA,KAAA,GAAA;gBACA,CAAG;AACH,uBAAA;cACA;AAEA,kBAAA,yBAAA,SAAA,sBAAAtE,IAAA;AACA,oBAAA,sBAAAA,OAAA;AACA,oBAAAsE,SAAA,0BAAA,sBAAA,yBAAA,gBAAAtE,EAAA,CAAA;AACA,oBAAA,SAAA,CAAA;AACA,yBAAAsE,QAAA,SAAA,KAAA;AACA,sBAAA,IAAA,YAAA,GAAA,MAAA,CAAA,uBAAA,IAAA,iBAAA,GAAA,IAAA;AACA,2BAAA,KAAA,WAAA,GAAA,CAAA;kBACA;gBACA,CAAG;AACH,uBAAA;cACA;AAIA,kBAAA,CAAA,eAAA;AACA,0BAAA,SAAAxE,UAAA;AACA,sBAAA,gBAAA;AAAA,0BAAA,UAAA,6BAAA;AACA,sBAAA,cAAA,CAAA,UAAA,UAAA,UAAA,CAAA,MAAA,SAAA,SAAA,OAAA,UAAA,CAAA,CAAA;AACA,sBAAA,MAAA,IAAA,WAAA;AACA,sBAAA,SAAA,SAAA,OAAA;AACA,wBAAA,SAAA;AAAA,6BAAA,KAAA,wBAAA,KAAA;AACA,wBAAA,IAAA,MAAA,MAAA,KAAA,IAAA,KAAA,MAAA,GAAA,GAAA;AAAA,2BAAA,MAAA,EAAA,GAAA,IAAA;AACA,wCAAA,MAAA,KAAA,yBAAA,GAAA,KAAA,CAAA;kBACA;AACA,sBAAA,eAAA;AAAA,wCAAA,iBAAA,KAAA,EAA8E,cAAA,MAAA,KAAA,OAAA,CAAkC;AAChH,yBAAA,KAAA,KAAA,WAAA;gBACA;AAEA,yBAAA,QAAA,SAAA,GAAA,YAAA,SAAAc,YAAA;AACA,yBAAA,iBAAA,IAAA,EAAA;gBACA,CAAG;AAEH,yBAAA,SAAA,iBAAA,SAAA,aAAA;AACA,yBAAA,KAAA,IAAA,WAAA,GAAA,WAAA;gBACA,CAAG;AAEH,2CAAA,IAAA;AACA,qCAAA,IAAA;AACA,+CAAA,IAAA;AACA,0CAAA,IAAA,4BAAA,IAAA;AACA,4CAAA,IAAA;AAEA,6CAAA,IAAA,SAAA9D,OAAA;AACA,yBAAA,KAAA,gBAAAA,KAAA,GAAAA,KAAA;gBACA;AAEA,oBAAA,aAAA;AAEA,uCAAA,QAAA,SAAA,GAAA,eAAA;oBACA,cAAA;oBACA,KAAA,SAAA,cAAA;AACA,6BAAA,iBAAA,IAAA,EAAA;oBACA;kBACA,CAAK;AACL,sBAAA,CAAA,SAAA;AACA,6BAAA,iBAAA,wBAAA,uBAAA,EAAgF,QAAA,KAAA,CAAe;kBAC/F;gBACA;cACA;AAEA,cAAAiC,GAAA,EAAG,QAAA,MAAA,MAAA,MAAA,QAAA,CAAA,eAAA,MAAA,CAAA,cAAA,GAAyE;gBAC5E,QAAA;cACA,CAAC;AAED,uBAAA,WAAA,qBAAA,GAAA,SAAAjC,OAAA;AACA,sCAAAA,KAAA;cACA,CAAC;AAED,cAAAiC,GAAA,EAAG,QAAA,QAAA,MAAA,MAAA,QAAA,CAAA,cAAA,GAAqD;;;gBAGxD,OAAA,SAAA,KAAA;AACA,sBAAAsD,UAAA,OAAA,GAAA;AACA,sBAAA,IAAA,wBAAAA,OAAA;AAAA,2BAAA,uBAAAA,OAAA;AACA,sBAAA,SAAA,QAAAA,OAAA;AACA,yCAAAA,OAAA,IAAA;AACA,yCAAA,MAAA,IAAAA;AACA,yBAAA;gBACA;;;gBAGA,QAAA,SAAA,OAAA,KAAA;AACA,sBAAA,CAAA,SAAA,GAAA;AAAA,0BAAA,UAAA,MAAA,kBAAA;AACA,sBAAA,IAAA,wBAAA,GAAA;AAAA,2BAAA,uBAAA,GAAA;gBACA;gBACA,WAAA,WAAA;AAA0B,+BAAA;gBAAmB;gBAC7C,WAAA,WAAA;AAA0B,+BAAA;gBAAoB;cAC9C,CAAC;AAED,cAAAtD,GAAA,EAAG,QAAA,UAAA,MAAA,MAAA,QAAA,CAAA,eAAA,MAAA,CAAA,YAAA,GAA2E;;;gBAG9E,QAAA;;;gBAGA,gBAAA;;;gBAGA,kBAAA;;;gBAGA,0BAAA;cACA,CAAC;AAED,cAAAA,GAAA,EAAG,QAAA,UAAA,MAAA,MAAA,QAAA,CAAA,cAAA,GAAuD;;;gBAG1D,qBAAA;;;gBAGA,uBAAA;cACA,CAAC;AAID,cAAAA,GAAA,EAAG,QAAA,UAAA,MAAA,MAAA,QAAA,MAAA,WAAA;AAA0D,4CAAA,EAAA,CAAA;cAAkC,CAAE,EAAA,GAAG;gBACpG,uBAAA,SAAA,sBAAAc,KAAA;AACA,yBAAA,4BAAA,EAAA,SAAAA,GAAA,CAAA;gBACA;cACA,CAAC;AAID,kBAAA,YAAA;AACA,oBAAA,wBAAA,CAAA,iBAAA,MAAA,WAAA;AACA,sBAAA,SAAA,QAAA;AAEA,yBAAA,WAAA,CAAA,MAAA,CAAA,KAAA,YAEA,WAAA,EAAqB,GAAA,OAAA,CAAY,KAAA,QAEjC,WAAA,OAAA,MAAA,CAAA,KAAA;gBACA,CAAG;AAEH,gBAAAd,GAAA,EAAK,QAAA,QAAA,MAAA,MAAA,QAAA,sBAAA,GAA4D;;kBAEjE,WAAA,SAAA4H,WAAA9G,KAAA,UAAA+G,QAAA;AACA,wBAAA,OAAA,CAAA/G,GAAA;AACA,wBAAAb,SAAA;AACA,wBAAA;AACA,2BAAA,UAAA,SAAAA;AAAA,2BAAA,KAAA,UAAAA,QAAA,CAAA;AACA,gCAAA;AACA,wBAAA,CAAA,SAAA,QAAA,KAAAa,QAAA,UAAA,SAAAA,GAAA;AAAA;AACA,wBAAA,CAAA,QAAA,QAAA;AAAA,iCAAA,SAAA,KAAA,OAAA;AACA,4BAAA,OAAA,aAAA;AAAA,kCAAA,UAAA,KAAA,MAAA,KAAA,KAAA;AACA,4BAAA,CAAA,SAAA,KAAA;AAAA,iCAAA;sBACA;AACA,yBAAA,CAAA,IAAA;AACA,2BAAA,WAAA,MAAA,MAAA,IAAA;kBACA;gBACA,CAAG;cACH;AAIA,kBAAA,CAAA,QAAA,SAAA,EAAA,YAAA,GAAA;AACA,4CAAA,QAAA,SAAA,GAAA,cAAA,QAAA,SAAA,EAAA,OAAA;cACA;AAGA,6BAAA,SAAA,MAAA;AAEA,yBAAA,MAAA,IAAA;;;;;ACtTA,kBAAA,kBAAsB,oBAAQ,EAAgC;AAC9D,kBAAA,4BAAgC,oBAAQ,GAA4C,EAAA;AAEpF,kBAAAe,YAAA,CAAA,EAAiB;AAEjB,kBAAA,cAAA,OAAA,UAAA,YAAA,UAAA,OAAA,sBACA,OAAA,oBAAA,MAAA,IAAA,CAAA;AAEA,kBAAA,iBAAA,SAAAf,KAAA;AACA,oBAAA;AACA,yBAAA,0BAAAA,GAAA;gBACA,SAAG1B,QAAA;AACH,yBAAA,YAAA,MAAA;gBACA;cACA;AAGA,cAAAvB,QAAA,QAAA,IAAA,SAAA,oBAAAiD,KAAA;AACA,uBAAA,eAAAe,UAAA,KAAAf,GAAA,KAAA,oBACA,eAAAA,GAAA,IACA,0BAAA,gBAAAA,GAAA,CAAA;cACA;;;;;ACrBA,kBAAA,wBAA4B,oBAAQ,EAAuC;AAI3E,oCAAA,eAAA;;;;;;;;;AEJA,kBAAA,wBAA4B,oBAAQ,EAAuC;AAI3E,oCAAA,aAAA;;;;;ACJA,kBAAA,wBAA4B,oBAAQ,EAAuC;AAI3E,oCAAA,oBAAA;;;;;ACJA,kBAAA,wBAA4B,oBAAQ,EAAuC;AAI3E,oCAAA,OAAA;;;;;ACJA,kBAAA,wBAA4B,oBAAQ,EAAuC;AAG3E,oCAAA,UAAA;;;;;ACHA,kBAAA,wBAA4B,oBAAQ,EAAuC;AAI3E,oCAAA,SAAA;;;;;ACJA,kBAAA,wBAA4B,oBAAQ,EAAuC;AAI3E,oCAAA,QAAA;;;;;ACJA,kBAAA,wBAA4B,oBAAQ,EAAuC;AAI3E,oCAAA,SAAA;;;;;ACJA,kBAAA,wBAA4B,oBAAQ,EAAuC;AAI3E,oCAAA,OAAA;;;;;ACJA,kBAAA,wBAA4B,oBAAQ,EAAuC;AAI3E,oCAAA,aAAA;;;;;ACJA,kBAAA,wBAA4B,oBAAQ,EAAuC;AAI3E,oCAAA,aAAA;;;;;ACJA,kBAAA,wBAA4B,oBAAQ,EAAuC;AAI3E,oCAAA,aAAA;;;;;ACJA,kBAAA,iBAAqB,oBAAQ,EAAgC;AAI7D,6BAAA,MAAA,QAAA,IAAA;;;;;ACJA,kBAAAP,UAAa,oBAAQ,CAAqB;AAC1C,kBAAA,iBAAqB,oBAAQ,EAAgC;AAI7D,6BAAAA,QAAA,MAAA,QAAA,IAAA;;;;;ACLA,kBAAA,wBAA4B,oBAAQ,EAAuC;AAI3E,oCAAA,cAAA;;;;;ACJA,kBAAA,wBAA4B,oBAAQ,EAAuC;AAI3E,oCAAA,SAAA;;;;;ACJA,kBAAA,wBAA4B,oBAAQ,EAAuC;AAI3E,oCAAA,YAAA;;;;;ACJA,kBAAA,wBAA4B,oBAAQ,EAAuC;AAI3E,oCAAA,cAAA;;;;;ACHA,kBAAA,wBAA4B,oBAAQ,EAAuC;AAE3E,oCAAA,YAAA;;;;;ACHA,cAAA1C,QAAA,UAAiB,oBAAQ,GAA+B;;;;;ACAxD,kBAAA,SAAa,oBAAQ,GAAiB;AAEtC,cAAAA,QAAA,UAAA;;;;;ACFA,kCAAQ,GAAyB;AACjC,kBAAA2C,QAAW,oBAAQ,CAAmB;AAEtC,cAAA3C,QAAA,UAAA2C,MAAA;;;;;ACHA,kBAAAR,KAAQ,oBAAQ,CAAqB;AACrC,kBAAA,yBAA6B,oBAAQ,GAA+B;AAIpE,cAAAA,GAAA,EAAG,QAAA,MAAA,QAAA,YAAA,uBAAA,GAA2D;gBAC9D,UAAA;cACA,CAAC;;;;;ACPD,kBAAAO,UAAa,oBAAQ,CAAqB;AAC1C,kBAAA,OAAW,oBAAQ,EAA0B,EAAA;AAC7C,kBAAA,cAAkB,oBAAQ,EAA0B;AAEpD,kBAAA,YAAAA,QAAA;AACA,kBAAA,MAAA;AACA,kBAAA,SAAA,UAAA,cAAA,IAAA,MAAA,KAAA,UAAA,cAAA,MAAA,MAAA;AAIA,cAAA1C,QAAA,UAAA,SAAA,SAAAiK,UAAAxE,SAAA,OAAA;AACA,oBAAAkC,KAAA,KAAA,OAAAlC,OAAA,CAAA;AACA,uBAAA,UAAAkC,IAAA,UAAA,MAAA,IAAA,KAAAA,EAAA,IAAA,KAAA,GAAA;cACA,IAAC;;;;;ACbD,kBAAA,SAAa,oBAAQ,GAAyB;AAE9C,cAAA3H,QAAA,UAAA;;;;;ACFA,kBAAA,QAAY,oBAAQ,GAAwB;AAE5C,kBAAA,iBAAA,MAAA;AAEA,cAAAA,QAAA,UAAA,SAAAiD,KAAA;AACA,oBAAAqG,OAAArG,IAAA;AACA,uBAAAA,QAAA,kBAAAA,eAAA,SAAAqG,SAAA,eAAA,QAAA,QAAAA;cACA;;;;;ACPA,kCAAQ,GAAiC;AACzC,kBAAA,eAAmB,oBAAQ,EAAkC;AAE7D,cAAAtJ,QAAA,UAAA,aAAA,OAAA,EAAA;;;;;;ACFA,kBAAAmC,KAAQ,oBAAQ,CAAqB;AACrC,kBAAA,WAAe,oBAAQ,EAAwB;AAC/C,kBAAA,UAAc,oBAAQ,EAAuB;AAC7C,kBAAA,kBAAsB,oBAAQ,EAAgC;AAC9D,kBAAA,WAAe,oBAAQ,EAAwB;AAC/C,kBAAA,kBAAsB,oBAAQ,EAAgC;AAC9D,kBAAA,iBAAqB,oBAAQ,EAA8B;AAC3D,kBAAA,kBAAsB,oBAAQ,EAAgC;AAC9D,kBAAA,+BAAmC,oBAAQ,EAA+C;AAC1F,kBAAA,0BAA8B,oBAAQ,EAA0C;AAEhF,kBAAA,sBAAA,6BAAA,OAAA;AACA,kBAAA,iBAAA,wBAAA,SAAA,EAAuD,WAAA,MAAA,GAAA,GAAA,GAAA,EAAA,CAA8B;AAErF,kBAAA,UAAA,gBAAA,SAAA;AACA,kBAAA,cAAA,CAAA,EAAA;AACA,kBAAAkE,OAAA,KAAA;AAKA,cAAAlE,GAAA,EAAG,QAAA,SAAA,OAAA,MAAA,QAAA,CAAA,uBAAA,CAAA,eAAA,GAAgF;gBACnF,OAAA,SAAA,MAAAoF,QAAAD,MAAA;AACA,sBAAAlE,KAAA,gBAAA,IAAA;AACA,sBAAA,SAAA,SAAAA,GAAA,MAAA;AACA,sBAAAhC,KAAA,gBAAAmG,QAAA,MAAA;AACA,sBAAA,MAAA,gBAAAD,SAAA,SAAA,SAAAA,MAAA,MAAA;AAEA,sBAAA,aAAA,QAAA1G;AACA,sBAAA,QAAAwC,EAAA,GAAA;AACA,kCAAAA,GAAA;AAEA,wBAAA,OAAA,eAAA,eAAA,gBAAA,SAAA,QAAA,YAAA,SAAA,IAAA;AACA,oCAAA;oBACA,WAAO,SAAA,WAAA,GAAA;AACP,oCAAA,YAAA,OAAA;AACA,0BAAA,gBAAA;AAAA,sCAAA;oBACA;AACA,wBAAA,gBAAA,SAAA,gBAAA,QAAA;AACA,6BAAA,YAAA,KAAAA,IAAAhC,IAAA,GAAA;oBACA;kBACA;AACA,2BAAA,KAAA,gBAAA,SAAA,QAAA,aAAAiF,KAAA,MAAAjF,IAAA,CAAA,CAAA;AACA,uBAAAR,KAAA,GAAeQ,KAAA,KAASA,MAAAR;AAAA,wBAAAQ,MAAAgC;AAAA,qCAAA,QAAAxC,IAAAwC,GAAAhC,EAAA,CAAA;AACxB,yBAAA,SAAAR;AACA,yBAAA;gBACA;cACA,CAAC;;;;;AChDD,kCAAQ,GAAuB;AAC/B,kBAAA+B,QAAW,oBAAQ,CAAmB;AAEtC,cAAA3C,QAAA,UAAA2C,MAAA;;;;;ACHA,kBAAAR,KAAQ,oBAAQ,CAAqB;AACrC,kBAAAO,UAAa,oBAAQ,CAAqB;AAC1C,kBAAA,YAAgB,oBAAQ,EAAgC;AAExD,kBAAA,QAAA,CAAA,EAAA;AACA,kBAAA,OAAA,WAAA,KAAA,SAAA;AAEA,kBAAA,OAAA,SAAA,WAAA;AACA,uBAAA,SAAA,SAAA,SAAA;AACA,sBAAA,YAAA,UAAA,SAAA;AACA,sBAAA,OAAA,YAAA,MAAA,KAAA,WAAA,CAAA,IAAA;AACA,yBAAA,UAAA,YAAA,WAAA;AAEA,qBAAA,OAAA,WAAA,aAAA,UAAA,SAAA,OAAA,GAAA,MAAA,MAAA,IAAA;kBACA,IAAK,SAAA,OAAA;gBACL;cACA;AAIA,cAAAP,GAAA,EAAG,QAAA,MAAA,MAAA,MAAA,QAAA,KAAA,GAAyC;;;gBAG5C,YAAA,KAAAO,QAAA,UAAA;;;gBAGA,aAAA,KAAAA,QAAA,WAAA;cACA,CAAC;;;;;;;;;;;;;ACtBD,kBAAA,UAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AAOA,kBAAA,WAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AACA,kBAAA,UAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AACA,kBAAA,UAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AACA,kBAAA,QAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AACA,kBAAA,UAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AACA,kBAAA,SAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AACA,kBAAA,SAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AACA,kBAAA,YAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AACA,kBAAA,UAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AAsGA,kBAAMwH,kBAAgB,GAAA,QAAA,SAAA;gBAClB,CAAA;gBACA,QAAA,SAAA;gBACA,SAAA,SAAA;gBACA,QAAA,SAAA;gBACA,MAAA,SAAA;gBACA,QAAA,SAAA;gBACA,QAAA,SAAA;gBACA,OAAA,SAAA;gBACA,OAAA,SAAA;gBACA,UAAA,SAAA;gBACA,QAAA,SAAA;;gBAEA;kBACI,WAAW,SAAA,UAAUhD,OAAcG,OAAY;AAC3C,2BAAO;kBACV;gBAHL;cAbkB;AAoBtB,cAAApH,SAAA,SAAA,IAAeiK;;;;;AC9If,kBAAA,SAAa,oBAAQ,GAAwB;AAE7C,cAAAlK,QAAA,UAAA;;;;;ACFA,kCAAQ,GAAgC;AACxC,kBAAA2C,QAAW,oBAAQ,CAAsB;AAEzC,cAAA3C,QAAA,UAAA2C,MAAA,OAAA;;;;;ACHA,kBAAAR,KAAQ,oBAAQ,CAAqB;AACrC,kBAAA,SAAa,oBAAQ,GAA4B;AAIjD,cAAAA,GAAA,EAAG,QAAA,UAAA,MAAA,MAAA,QAAA,OAAA,WAAA,OAAA,GAAiE;gBACpE;cACA,CAAC;;;;;;ACND,kBAAA,cAAkB,oBAAQ,EAA0B;AACpD,kBAAA,QAAY,oBAAQ,EAAoB;AACxC,kBAAA,aAAiB,oBAAQ,EAA0B;AACnD,kBAAA,8BAAkC,oBAAQ,GAA8C;AACxF,kBAAA,6BAAiC,oBAAQ,EAA4C;AACrF,kBAAA,WAAe,oBAAQ,EAAwB;AAC/C,kBAAA,gBAAoB,oBAAQ,EAA6B;AAEzD,kBAAA,eAAA,OAAA;AACA,kBAAA,iBAAA,OAAA;AAIA,cAAAnC,QAAA,UAAA,CAAA,gBAAA,MAAA,WAAA;AAEA,oBAAA,eAAA,aAAA,EAAmC,GAAA,EAAA,GAAO,aAAA,eAAA,CAAA,GAAgC,KAAA;kBAC1E,YAAA;kBACA,KAAA,WAAA;AACA,mCAAA,MAAA,KAAA;sBACA,OAAA;sBACA,YAAA;oBACA,CAAO;kBACP;gBACA,CAAG,GAAA,EAAI,GAAA,EAAA,CAAO,CAAA,EAAA,MAAA;AAAA,yBAAA;AAEd,oBAAA2J,KAAA,CAAA;AACA,oBAAAQ,KAAA,CAAA;AAEA,oBAAA,SAAA,OAAA;AACA,oBAAA,WAAA;AACA,gBAAAR,GAAA,MAAA,IAAA;AACA,yBAAA,MAAA,EAAA,EAAA,QAAA,SAAA,KAAA;AAA6C,kBAAAQ,GAAA,GAAA,IAAA;gBAAc,CAAE;AAC7D,uBAAA,aAAA,CAAA,GAAwBR,EAAA,EAAA,MAAA,KAAA,KAAA,WAAA,aAAA,CAAA,GAA+CQ,EAAA,CAAA,EAAA,KAAA,EAAA,KAAA;cACvE,CAAC,IAAA,SAAA,OAAA,QAAA,QAAA;AACD,oBAAAC,KAAA,SAAA,MAAA;AACA,oBAAA,kBAAA,UAAA;AACA,oBAAAhI,SAAA;AACA,oBAAA,wBAAA,4BAAA;AACA,oBAAA,uBAAA,2BAAA;AACA,uBAAA,kBAAAA,QAAA;AACA,sBAAAuF,KAAA,cAAA,UAAAvF,QAAA,CAAA;AACA,sBAAAuD,QAAA,wBAAA,WAAAgC,EAAA,EAAA,OAAA,sBAAAA,EAAA,CAAA,IAAA,WAAAA,EAAA;AACA,sBAAA,SAAAhC,MAAA;AACA,sBAAAlE,KAAA;AACA,sBAAA;AACA,yBAAA,SAAAA,IAAA;AACA,0BAAAkE,MAAAlE,IAAA;AACA,wBAAA,CAAA,eAAA,qBAAA,KAAAkG,IAAA,GAAA;AAAA,sBAAAyC,GAAA,GAAA,IAAAzC,GAAA,GAAA;kBACA;gBACA;AAAG,uBAAAyC;cACH,IAAC;;;;;;;;;;;ACND,cAAAnK,SAAA,SAAA,IAAe;gBACX,OAAO;kBACH;kBACA;kBACA;;kBAEA;kBACA;kBACA;kBACA;kBACA;kBACA;kBACA;kBACA;kBACA;kBACA;kBACA;kBACA;kBACA;kBACA;kBACA;kBACA;kBACA;kBACA;kBACA;kBACA;kBACA;gBAzBG;gBA4BP,WAAW,CACP,gBACA,gBACA,gBACA,sBACA,4BACA,4BACA,gBACA,4BACA,SACA,UACA,WACA,mBACA,aAbO;;gBAiBX,WAAW;kBACP,WAAW;oBACP,MAAM;oBACN,OAAO;kBAFA;kBAIX,OAAO;oBACH,MAAM;oBACN,OAAO;kBAFJ;kBAIP,QAAQ;oBACJ,MAAM;oBACN,OAAO;kBAFH;kBAIR,OAAO;oBACH,MAAM;oBACN,OAAO;kBAFJ;kBAIP,WAAW;oBACP,MAAM;oBACN,OAAO;kBAFA;kBAIX,YAAY;oBACR,MAAM;oBACN,OAAO;kBAFC;kBAIZ,aAAa;oBACT,MAAM;oBACN,OAAO;kBAFE;gBAzBN;;;;;;;;;;;gBA0CX,QAAQ,CACJ,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,SAVI;;gBAcR,cAAc,CACV,QACA,KACA,MACA,OACA,OACA,QACA,cACA,QACA,cACA,cACA,QACA,OACA,OACA,MACA,UACA,OACA,YACA,OACA,UACA,iBACA,MArBU;gBAwBd,aAAa;;;;;;gBAMb,UAAU,CACN;;kBAEI,OAAO;;kBAEP,MAAM;;kBAEN,SAAS,omBAAyL,MAC9L,IADK;gBANb,GAUA;;kBAEI,OAAO;;kBAEP,MAAM;;kBAEN,SAAS,uSAAuF,MAC5F,IADK;gBANb,CAXM;gBAuBV,aAAa,CAAC,KAAK,QAAQ,OAAO,KAAK,OAAO,GAAjC;gBAEb,WAAW;gBAEX,aAAa;gBAEb,kBAAkB;;gBAGlB,qBAAqB;cApKV;;;;;;;;;;;ACxCf,kBAAA,UAAA,oBAAA,CAAA;AAcA,uBAAS,YAAY,WAAmB,WAAmB,WAAkB;AACzE,uBAAO,MAAM,SAAb;AACA,oBAAI,WAAW;AACX,0BAAQ,MAAM,iBAAiB,SAA/B;gBACH;cACJ;AAED,cAAAA,SAAA,SAAA,IAAe;gBACX,iBAAiB;gBAEjB,UAAU;gBACV,SAAS,QAAA;gBACT,QAAQ,QAAA;gBAER,iBAAiB;gBACjB;cARW;;;;;;;;;;;ACrBf,cAAAA,SAAA,SAAA,IAAe;;gBAEX,kBAAkB;;gBAGlB,gBAAgB;;;gBAIhB,iBAAiB,SAAA,gBAAUgE,UAAe;AAEtC,yBAAOA;gBACV;cAZU;;;;;;;;;;;ACAf,cAAAhE,SAAA,SAAA,IAAe;gBACX,cAAc;cADH;;;;;;;;;;;ACCf,kBAAA,UAAA,oBAAA,CAAA;AAoBA,cAAAA,SAAA,SAAA,IAAe;;gBAEX,cAAc,SAAA,aAAU,KAAa,KAAc,MAAa;AAC5D,yBAAO;gBACV;;gBAED,aAAa;;gBAGb,gBAAgB;;gBAGhB,iBAAiB;;gBAGjB,iBAAiB,QAAA;;gBAGjB,iBAAiB,CAAC,OAAO,QAAQ,OAAO,OAAO,KAA9B;;gBAGjB,iBAAiB;;gBAGjB,qBAAqB;;gBAGrB,kBAAkB,IAAI,OAAO;;gBAG7B,oBAAoB;;gBAGpB,gBAAgB;;gBAGhB,iBAAiB,CAAA;;gBAGjB,wBAAwB;;gBAGxB,kBAAkB,CAAA;;gBAGlB,gBAAgB,CAAA;;gBAGhB,kBAAkB,KAAK;;gBAGvB,iBAAiB;;gBAGjB,iBAAiB;;gBAGjB,oBAAoB;cAzDT;;;;;;;;;;;AC1Bf,cAAAA,SAAA,SAAA,IAAe;gBACX,MAAM;gBACN,WAAW;kBACP,SAAS;oBACL,YAAY;sBACR,cAAI;sBACJ,cAAI;sBACJ,cAAI;sBACJ,cAAI;sBACJ,cAAI;sBACJ,QAAG;sBACH,gCAAO;sBACP,OAAO;wBACH,OAAO;0BACH,cAAI;0BACJ,cAAI;0BACJ,cAAI;0BACJ,cAAI;0BACJ,cAAI;0BACJ,oBAAK;0BACL,oBAAK;0BACL,cAAI;0BACJ,cAAI;0BACJ,0BAAM;0BACN,oBAAK;0BACL,cAAI;0BACJ,cAAI;0BACJ,cAAI;0BACJ,cAAI;0BACJ,cAAI;0BACJ,cAAI;0BACJ,cAAI;0BACJ,cAAI;0BACJ,cAAI;0BACJ,oBAAK;0BACL,cAAI;0BACJ,cAAI;0BACJ,cAAI;0BACJ,0BAAM;0BACN,0BAAM;wBA1BH;wBA4BP,cAAc;0BACV,0BAAM;0BACN,0BAAM;0BACN,0BAAM;0BACN,0BAAM;0BACN,0BAAM;0BACN,0BAAM;0BACN,0BAAM;0BACN,0BAAM;0BACN,cAAI;0BACJ,MAAM;4BACF,cAAI;0BADF;0BAGN,QAAQ;4BACJ,0BAAM;4BACN,0BAAM;0BAFF;0BAIR,SAAS;4BACL,cAAI;4BACJ,cAAI;4BACJ,cAAI;4BACJ,cAAI;0BAJC;0BAMT,MAAM;4BACF,0BAAM;4BACN,0BAAM;0BAFJ;wBAvBI;wBA4Bd,YAAY;0BACR,UAAU;4BACN,cAAI;4BACJ,cAAI;4BACJ,OAAO;4BACP,cAAI;0BAJE;0BAMV,OAAO;4BACH,0BAAM;4BACN,0BAAM;4BACN,0BAAM;4BACN,sCAAQ;4BACR,0BAAM;0BALH;0BAOP,MAAM;4BACF,cAAI;4BACJ,0BAAM;4BACN,0BAAM;4BACN,0BAAM;0BAJJ;0BAMN,OAAO;4BACH,0BAAM;4BACN,0BAAM;0BAFH;0BAIP,OAAO;4BACH,QAAG;4BACH,QAAG;4BACH,QAAG;4BACH,cAAI;4BACJ,oBAAK;4BACL,oBAAK;4BACL,oBAAK;4BACL,oBAAK;4BACL,0BAAM;4BACN,0BAAM;4BACN,0BAAM;4BACN,0BAAM;0BAZH;0BAcP,MAAM;4BACF,0BAAM;4BACN,0BAAM;4BACN,0BAAM;0BAHJ;wBAtCE;sBAzDT;sBAsGP,UAAU;wBACN,oBAAK;wBACL,cAAI;wBACJ,0BAAM;wBACN,0BAAM;wBACN,0BAAM;wBACN,sCAAQ;wBACR,sCAAQ;wBACR,sCAAQ;wBACR,sCAAQ;wBACR,sCAAQ;wBACR,sCAAQ;wBACR,4CAAS;wBACT,4CAAS;wBACT,8DAAY;wBACZ,oEAAa;wBACb,0EAAc;wBACd,8GAAoB;wBACpB,sCAAQ;wBACR,0BAAM;wBACN,0BAAM;wBACN,4CAAS;wBACT,oBAAK;wBACL,sCAAQ;wBACR,sCAAQ;wBACR,sCAAQ;wBACR,8DAAY;sBA1BN;oBA9GF;kBADP;kBA6IT,IAAI;oBACA,YAAY;sBACR,cAAI;sBACJ,cAAI;sBACJ,cAAI;sBACJ,cAAI;sBACJ,cAAI;sBACJ,QAAG;sBACH,gCAAO;sBACP,OAAO;wBACH,OAAO;0BACH,cAAI;0BACJ,cAAI;0BACJ,cAAI;0BACJ,cAAI;0BACJ,cAAI;0BACJ,oBAAK;0BACL,oBAAK;0BACL,cAAI;0BACJ,cAAI;0BACJ,0BAAM;0BACN,oBAAK;0BACL,cAAI;0BACJ,cAAI;0BACJ,cAAI;0BACJ,cAAI;0BACJ,cAAI;0BACJ,cAAI;0BACJ,cAAI;0BACJ,cAAI;0BACJ,cAAI;0BACJ,oBAAK;0BACL,cAAI;0BACJ,cAAI;0BACJ,cAAI;0BACJ,0BAAM;0BACN,0BAAM;wBA1BH;wBA4BP,cAAc;0BACV,0BAAM;0BACN,0BAAM;0BACN,0BAAM;0BACN,0BAAM;0BACN,0BAAM;0BACN,0BAAM;0BACN,0BAAM;0BACN,0BAAM;0BACN,cAAI;0BACJ,MAAM;4BACF,cAAI;0BADF;0BAGN,QAAQ;4BACJ,0BAAM;4BACN,0BAAM;0BAFF;0BAIR,SAAS;4BACL,cAAI;4BACJ,cAAI;4BACJ,cAAI;4BACJ,cAAI;0BAJC;0BAMT,MAAM;4BACF,0BAAM;4BACN,0BAAM;0BAFJ;wBAvBI;wBA4Bd,YAAY;0BACR,UAAU;4BACN,cAAI;4BACJ,cAAI;0BAFE;0BAIV,OAAO;4BACH,0BAAM;4BACN,0BAAM;4BACN,0BAAM;4BACN,sCAAQ;4BACR,0BAAM;0BALH;0BAOP,MAAM;4BACF,cAAI;4BACJ,0BAAM;4BACN,0BAAM;4BACN,0BAAM;0BAJJ;0BAMN,OAAO;4BACH,0BAAM;4BACN,0BAAM;0BAFH;0BAIP,OAAO;4BACH,QAAG;4BACH,QAAG;4BACH,QAAG;4BACH,cAAI;4BACJ,oBAAK;4BACL,oBAAK;4BACL,oBAAK;4BACL,oBAAK;4BACL,0BAAM;4BACN,0BAAM;4BACN,0BAAM;4BACN,0BAAM;0BAZH;0BAcP,MAAM;4BACF,0BAAM;4BACN,0BAAM;4BACN,0BAAM;0BAHJ;wBApCE;sBAzDT;sBAoGP,UAAU;wBACN,oBAAK;wBACL,cAAI;wBACJ,0BAAM;wBACN,0BAAM;wBACN,0BAAM;wBACN,sCAAQ;wBACR,sCAAQ;wBACR,sCAAQ;wBACR,sCAAQ;wBACR,sCAAQ;wBACR,sCAAQ;wBACR,4CAAS;wBACT,4CAAS;wBACT,8DAAY;wBACZ,oEAAa;wBACb,0EAAc;wBACd,8GACI;wBACJ,sCAAQ;wBACR,0BAAM;wBACN,0BAAM;wBACN,4CAAS;wBACT,oBAAK;wBACL,sCAAQ;wBACR,sCAAQ;wBACR,sCAAQ;wBACR,8DAAY;sBA3BN;oBA5GF;kBADZ;gBA9IG;cAFA;;;;;;;;;;;ACKf,kBAAA,SAAA,oBAAA,CAAA;AAKA,uBAAS,iBAAc;AACnB,oBAAI,OAAA,GAAG,KAAH,KAAa,OAAA,GAAG,WAAW;AAC3B,yBAAO;gBACV;AACD,uBAAO;cACV;AAED,cAAAA,SAAA,SAAA,IAAe;gBACX;gBACA,gBAAgB;cAFL;;;;;;;;;;;ACXf,kBAAA,UAAA,oBAAA,CAAA;AAoBA,cAAAA,SAAA,SAAA,IAAe;;gBAEX,kBAAkB,SAAA,iBAAC,OAAa;AAC5B,yBAAO;gBACV;;gBAGD,qBAAqB,QAAA;;gBAGrB,eAAe;;gBAGf,mBAAmB,CAAC,KAAD;;gBAGnB,mBAAmB;;gBAGnB,oBAAoB,IAAI,OAAO,OAAO;;;;gBAMtC,iBAAiB;;gBAGjB,mBAAmB,CAAA;;gBAGnB,0BAA0B;;gBAG1B,oBAAoB,CAAA;;gBAGpB,kBAAkB,CAAA;;gBAGlB,oBAAoB,MAAO,KAAK,KAAK;;gBAGrC,sBAAsB;;gBAGtB,mBAAmB;;gBAGnB,mBAAmB;cAjDR;;;;;;;;;;;;;ACtBf,kBAAA,aAAA,QAAA,gBAAA,oBAAA,CAAA,CAAA;AACA,kBAAA,SAAA,oBAAA,CAAA;AAEA,kBAAA,UAAA,oBAAA,CAAA;AAEA,kBAAA;;gBAAA,WAAA;AAII,2BAAAoK,mBAAY7H,SAAc;AAFlB,yBAAA,gBAA0C;AAG9C,yBAAK,SAASA;kBACjB;AAKM,kBAAA6H,mBAAA,UAAA,WAAP,WAAA;AACI,2BAAO,KAAK;kBACf;AAMM,kBAAAA,mBAAA,UAAA,YAAP,SAAiB,QAAc;AAC3B,wBAAI,QAAQ;AAER,2BAAK,gBAAgB;AACrB;oBACH;AAGD,wBAAM/E,aAAY,OAAO,aAAP;AAClB,wBAAIA,WAAU,eAAe,GAAG;AAC5B;oBACH;AACD,wBAAMC,SAAQD,WAAU,WAAW,CAArB;AAGd,wBAAM,iBAAiB,KAAK,0BAA0BC,MAA/B;AACvB,wBAAI,EAAC,mBAAc,QAAd,mBAAc,SAAA,SAAd,eAAgB,SAAQ;AAEzB;oBACH;AACD,wBACI,eAAe,KAAK,iBAApB,MAA2C,WAC3C,eAAe,YAAY,yBAA3B,GACF;AAGE;oBACH;AAED,wBAAM/C,UAAS,KAAK;AACpB,wBAAM,YAAYA,QAAO;AACzB,wBAAI,UAAU,UAAU,cAApB,GAAqC;AACrC,0BAAI,UAAU,MAAM,CAAhB,MAAuB,eAAe,MAAM,CAArB,GAAyB;AAAA,4BAAA;AAChD,6BAAI,GAAA,MAAA,SAAA,GAAA,WAAA,UAAU,KAAV,CAAA,EAAA,KAAA,QAAA,MAA4B,QAAA,SAAS;AACrC,8BAAM,YAAY,UAAU,SAAV;AAClB,8BAAM,QAAQ,cAAS,QAAT,cAAS,SAAA,SAAT,UAAW,KAAX;AACd,0BAAAA,QAAO,UAAU,kBAAkB,OAAqB,MAAM,IAA9D;AACA,0BAAAA,QAAO,UAAU,iBAAjB;wBACH;sBACJ;AAED,2BAAK,gBAAgB+C;oBACxB;kBACJ;AAMM,kBAAA8E,mBAAA,UAAA,gBAAP,SAAqB,SAAwB;AAAxB,wBAAA,YAAA,QAAA;AAAA,gCAAA;oBAAwB;AACzC,wBAAM9E,SAAQ,KAAK;AACnB,wBAAIA,QAAO;AACP,sBAAAA,OAAM,SAAS,OAAf;oBACH;kBACJ;AAKM,kBAAA8E,mBAAA,UAAA,mBAAP,WAAA;AACI,wBAAM9E,SAAQ,KAAK;AACnB,wBAAIA,QAAO;AACP,6BAAOA,OAAM,SAAN;oBACV,OAAM;AACH,6BAAO;oBACV;kBACJ;AAMM,kBAAA8E,mBAAA,UAAA,4BAAP,SAAiC9E,QAAa;AAC1C,wBAAIzE;AACJ,oBAAAA,KAAIyE,UAAS,KAAK;AAClB,wBAAI;AACJ,wBAAIzE,IAAG;AACH,6BAAOA,GAAE;AACT,6BAAO,WAAA,SAAA,EAAE,KAAK,aAAa,IAAI,OAAO,KAAK,UAApC;oBACV;kBACJ;AAMM,kBAAAuJ,mBAAA,UAAA,wBAAP,SAA6B9E,QAAa;AACtC,wBAAIzE;AACJ,oBAAAA,KAAIyE,UAAS,KAAK;AAClB,wBAAI;AACJ,wBAAIzE,IAAG;AACH,6BAAOA,GAAE;AACT,6BAAO,WAAA,SAAA,EAAE,KAAK,aAAa,IAAI,OAAO,KAAK,UAApC;oBACV;kBACJ;AAMM,kBAAAuJ,mBAAA,UAAA,sBAAP,SAA2B9E,QAAa;AACpC,wBAAIzE;AACJ,oBAAAA,KAAIyE,UAAS,KAAK;AAClB,wBAAI;AACJ,wBAAIzE,IAAG;AACH,6BAAOA,GAAE;AACT,6BAAO,WAAA,SAAA,EAAE,KAAK,aAAa,IAAI,OAAO,KAAK,UAApC;oBACV;kBACJ;AAKM,kBAAAuJ,mBAAA,UAAA,mBAAP,WAAA;AACI,wBAAM9E,SAAQ,KAAK;AACnB,wBAAIA,UAASA,OAAM,gBAAgB;AAC/B,0BAAIA,OAAM,mBAAmBA,OAAM,cAAc;AAC7C,4BAAIA,OAAM,gBAAgBA,OAAM,WAAW;AACvC,iCAAO;wBACV;sBACJ;oBACJ;AACD,2BAAO;kBACV;AAKM,kBAAA8E,mBAAA,UAAA,mBAAP,WAAA;AACI,wBAAM/E,aAAY,OAAO,aAAP;AAClB,wBAAMxE,KAAI,KAAK;AACf,wBAAIwE,cAAaxE,IAAG;AAChB,sBAAAwE,WAAU,gBAAV;AACA,sBAAAA,WAAU,SAASxE,EAAnB;oBACH;kBACJ;AAKM,kBAAAuJ,mBAAA,UAAA,mBAAP,WAAA;AACI,wBAAM7H,UAAS,KAAK;AACpB,wBAAM+C,SAAQ,KAAK,SAAL;AACd,wBAAI;AAEJ,wBAAI,CAACA,QAAO;AAER;oBACH;AACD,wBAAI,CAAC,KAAK,iBAAL,GAAyB;AAE1B;oBACH;AAED,wBAAI;AAEA,0BAAI,OAAA,GAAG,SAAH,GAAe;AAEf,wBAAA/C,QAAO,IAAP,IAAA,EAAc,cAAc,SAA5B;AAEA,wBAAA+C,OAAM,OAAOA,OAAM,cAAcA,OAAM,YAAY,CAAnD;AAEA,6BAAK,UAAUA,MAAf;sBACH,OAAM;AACH,gCAAQ,WAAA,SAAA,EAAE,0BAAF;AACR,wBAAA/C,QAAO,IAAP,IAAA,EAAc,cAAc,KAA5B;AACA,6BAAK,kBAAkB,OAAO,IAA9B;sBACH;oBACJ,SAAQ,IAAI;oBAEZ;kBACJ;AAMM,kBAAA6H,mBAAA,UAAA,qBAAP,SAA0B,UAAgB,QAAY;AAClD,wBAAI/E,aAAY,OAAO,eAAe,OAAO,aAAP,IAAwB,SAAS,aAAT;AAE9D,oBAAAA,eAAS,QAATA,eAAS,SAAA,SAATA,WAAW,gBAAX;AACA,wBAAMC,SAAQ,SAAS,YAAT;AACd,oBAAAA,OAAM,SAAS,UAAU,CAAzB;AAEA,oBAAAA,OAAM,OAAO,QAAQ,OAAO,WAAW,UAAU,CAAjD;AAEA,yBAAK,UAAUA,MAAf;AAEA,yBAAK,iBAAL;kBACH;AAOM,kBAAA8E,mBAAA,UAAA,oBAAP,SAAyB,OAAmB,SAAmB,WAAmB;AAC9E,wBAAI,CAAC,MAAM,QAAQ;AACf;oBACH;AAED,wBAAM,OAAO,MAAM,MAAM,CAAZ;AACb,wBAAM9E,SAAQ,SAAS,YAAT;AAEd,wBAAI,WAAW;AACX,sBAAAA,OAAM,mBAAmB,IAAzB;oBACH,OAAM;AAEH,sBAAAA,OAAM,WAAW,IAAjB;oBACH;AAED,wBAAI,WAAW,MAAM;AAEjB,sBAAAA,OAAM,SAAS,OAAf;AAEA,0BAAI,CAAC,SAAS;AACV,6BAAK,UAAUA,MAAf;AACA,6BAAK,OAAO,UAAU,WAAW,IAAjC;sBACH;oBACJ;AAGD,yBAAK,UAAUA,MAAf;kBACH;AAMM,kBAAA8E,mBAAA,UAAA,4BAAP,WAAA;;AAEI,wBAAI;AAEJ,wBAAM,cAAUtF,MAAG,KAAK,sBAAL,OAA4B,QAAAA,QAAA,SAAA,SAAAA,IAAE,WAAW,KAAK,MAAlB;AAC/C,wBAAM,YAAQ,KAAG,KAAK,oBAAL,OAA0B,QAAA,OAAA,SAAA,SAAA,GAAE,WAAW,KAAK,MAAlB;AAE3C,gCAAY,KAAK,qBAAqB,WAAA,SAAA,EAAE,UAAF,GAAe,WAAA,SAAA,EAAE,QAAF,CAAzC;AAEZ,2BAAO;kBACV;AASM,kBAAAsF,mBAAA,UAAA,aAAP,SAAkBtD,OAAY4B,WAAiB;;AAC3C,wBAAMpD,SAAQ,KAAK,SAAL;AAEd,wBAAI,MACAwB,MAAK,aAAa,KAAKhC,MAAAgC,MAAK,eAAS,QAAAhC,QAAA,SAAA,SAAAA,IAAE,SAAoBgC,MAAK,WAAW;AAC/E,yBAAK,OAAA,GAAG,aAAa,OAAA,GAAG,KAAH,MAAc,QAAQ,GAAG;AAE1C,0BAAIA,MAAK,aAAa,KAAKA,MAAK,WAAW,MAAM,CAAtB,EAAyB,aAAa,MAAM;AACnE,8BAAM,MAAM;sBACf;oBACJ;AACD,wBAAI,MAAc4B,cAAQ,QAARA,cAAQ,SAARA,YAAY;AAC9B,wBAAI,CAACpD,QAAO;AACR;oBACH;AACD,wBAAIwB,OAAM;AACN,sBAAAxB,OAAM,SAASwB,OAAM,GAArB;AACA,sBAAAxB,OAAM,OAAOwB,OAAM,GAAnB;AACA,2BAAK,iBAAL;oBACH;kBACJ;AAKM,kBAAAsD,mBAAA,UAAA,eAAP,WAAA;AACI,wBAAM/E,aAAY,OAAO,aAAP;AAElB,2BAAOA,eAAS,QAATA,eAAS,SAAA,SAATA,WAAW;kBACrB;AAKM,kBAAA+E,mBAAA,UAAA,4BAAP,WAAA;AACI,wBAAM/E,aAAY,OAAO,aAAP;AAClB,wBAAIA,YAAW;AACX,sBAAAA,WAAU,gBAAV;oBACH;kBACJ;AAMM,kBAAA+E,mBAAA,UAAA,uBAAP,SAA4B,OAAmB,UAAoB;AAC/D,wBAAI,QAAsB,CAAA;AAC1B,wBAAI,QAAQ;AAKZ,wBAAI;AACA,0BAAI,QAAoB;AACxB,0BAAM,YAAY,KAAK,OAAO;AAE9B,6BAAO,OAAO;AACV,4BAAM,QAAQ,UAAK,QAAL,UAAK,SAAA,SAAL,MAAO,WAAW,KAAK,MAAvB;AACd,4BAAI,MAAM,YAAN,MAAwB;AAAQ,kCAAQ;AAC5C,4BAAI,MAAM,SAAS,GAAG;AAClB,gCAAM,KAAK,WAAA,SAAA,EAAE,KAAF,CAAX;AAIA,+BAAI,aAAQ,QAAR,aAAQ,SAAA,SAAR,SAAU,MAAM,KAAhB,MAA0B,UAAU,MAAM,KAAhB,GAAwB;AAClD,oCAAQ;0BACX,OAAM;AACH,oCAAQ,MAAM,eAAN;0BACX;wBACJ;sBACJ;oBACJ,SAAQxJ,IAAG;AACR,8BAAQ;oBACX;AACD,2BAAO;kBACV;AAOM,kBAAAwJ,mBAAA,UAAA,iBAAP,SAAsBtD,OAAU;AAC5B,wBAAMxB,SAAQ,KAAK,SAAL;AACd,oBAAAA,WAAK,QAALA,WAAK,SAAA,SAALA,OAAO,SAASwB,OAAM,CAAtB;AACA,oBAAAxB,WAAK,QAALA,WAAK,SAAA,SAALA,OAAO,OAAOwB,OAAM,CAApB;kBACH;AACL,yBAAAsD;gBAAC,EAlWD;;AAoWA,cAAApK,SAAA,SAAA,IAAe;;;;;;;;;;;;ACxWf,kBAAA,aAAA,QAAA,gBAAA,oBAAA,CAAA,CAAA;AAGA,kBAAA;;gBAAA,WAAA;AAGI,2BAAAqK,SAAY9H,SAAc;AACtB,yBAAK,SAASA;kBACjB;AAOM,kBAAA8H,SAAA,UAAA,IAAA,IAAP,SAAUpK,OAAc,OAA2B;AAC/C,wBAAMsC,UAAS,KAAK;AAEpB,wBAAIA,QAAO,OAAO,cAAc;AAC5B,+BAAS,YAAY,gBAAgB,OAAO,MAA5C;oBACH;AAED,wBAAM8C,aAAY9C,QAAO;AAGzB,wBAAI,CAAC8C,WAAU,SAAV,GAAsB;AACvB;oBACH;AAGD,oBAAAA,WAAU,iBAAV;AAGA,4BAAQpF,OAAR;sBACI,KAAK;AACD,6BAAK,WAAW,KAAhB;AACA;sBACJ,KAAK;AACD,6BAAK,WAAW,KAAhB;AACA;sBACJ;AAEI,6BAAK,YAAYA,OAAM,KAAvB;AACA;oBAVR;AAcA,oBAAAsC,QAAO,MAAM,aAAb;AAGA,oBAAA8C,WAAU,UAAV;AACA,oBAAAA,WAAU,iBAAV;kBACH;AAMO,kBAAAgF,SAAA,UAAA,aAAR,SAAmBxI,OAAY;AAC3B,wBAAMU,UAAS,KAAK;AACpB,wBAAM+C,SAAQ/C,QAAO,UAAU,SAAjB;AACd,wBAAI+C,UAAS;AAAM;AAEnB,wBAAI,KAAK,sBAAsB,YAA3B,GAA0C;AAE1C,2BAAK,YAAY,cAAczD,KAA/B;oBACH,WAAUyD,OAAM,YAAY;AAEzB,sBAAAA,OAAM,eAAN;AACA,0BAAI,WAAA,SAAA,EAAEzD,KAAF,EAAQ,MAAM,SAAS,GAAG;AAC1B,wBAAAyD,OAAM,WAAW,WAAA,SAAA,EAAEzD,KAAF,EAAQ,MAAM,CAAd,CAAjB;sBACH,OAAM;AACH,4BAAI,UAAU,SAAS,cAAc,GAAvB;AACd,gCAAQ,YAAY,SAAS,eAAeA,KAAxB,CAApB;AACA,wBAAAyD,OAAM,WAAW,OAAjB;sBACH;AACD,sBAAA/C,QAAO,UAAU,cAAjB;oBACH;kBAKJ;AAMO,kBAAA8H,SAAA,UAAA,aAAR,SAAmB,OAAiB;AAChC,wBAAM9H,UAAS,KAAK;AACpB,wBAAM+C,SAAQ/C,QAAO,UAAU,SAAjB;AACd,wBAAI+C,UAAS;AAAM;AAEnB,wBAAIA,OAAM,YAAY;AAClB,sBAAAA,OAAM,eAAN;AACA,sBAAAA,OAAM,WAAW,MAAM,MAAM,CAAZ,CAAjB;oBACH;kBACJ;AAOO,kBAAA+E,SAAA,UAAA,cAAR,SAAoBpK,OAAc,OAAa;AAC3C,6BAAS,YAAYA,OAAM,OAAO,KAAlC;kBACH;AAMM,kBAAAoK,SAAA,UAAA,oBAAP,SAAyBpK,OAAY;AACjC,2BAAO,SAAS,kBAAkBA,KAA3B;kBACV;AAMM,kBAAAoK,SAAA,UAAA,oBAAP,SAAyBpK,OAAY;AACjC,2BAAO,SAAS,kBAAkBA,KAA3B;kBACV;AAMM,kBAAAoK,SAAA,UAAA,wBAAP,SAA6BpK,OAAY;AACrC,2BAAO,SAAS,sBAAsBA,KAA/B;kBACV;AACL,yBAAAoK;gBAAC,EAhID;;AAkIA,cAAArK,SAAA,SAAA,IAAe;;;;;;;;;;;;;;;;;ACrIf,kBAAA,aAAA,QAAA,gBAAA,oBAAA,CAAA,CAAA;AAEA,kBAAA,UAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AACA,kBAAA,SAAA,oBAAA,CAAA;AACA,kBAAA,oBAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AACA,kBAAA,sBAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AACA,kBAAA,UAAA,oBAAA,CAAA;AAoDA,kBAAAsK;;gBAAA,WAAA;AAII,2BAAAA,MAAY/H,SAAc;AACtB,yBAAK,SAASA;AAEd,yBAAK,aAAa;sBACd,cAAc,CAAA;sBACd,cAAc,CAAA;sBACd,YAAY,CAAA;sBACZ,aAAa,CAAA;sBACb,eAAe,CAAA;sBACf,aAAa,CAAA;sBACb,aAAa,CAAA;sBACb,eAAe,CAAA;sBACf,eAAe,CAAA;sBACf,iBAAiB,CAAA;sBACjB,gBAAgB,CAAA;sBAChB,kBAAkB,CAAA;sBAClB,aAAa,CAAA;sBACb,iBAAiB,CAAA;sBACjB,iBAAiB,CAAA;sBACjB,kBAAkB,CAAA;sBAClB,oBAAoB,CAAA;sBACpB,gBAAgB,CAAA;sBAChB,2BAA2B,CAAA;sBAC3B,kBAAkB,CAAA;sBAClB,iBAAiB,CAAA;sBACjB,yBAAyB,CAAA;sBACzB,iBAAiB,CAAA;sBACjB,kBAAkB,CAAA;oBAxBJ;kBA0BrB;AAKM,kBAAA+H,MAAA,UAAA,OAAP,WAAA;AAEI,yBAAK,WAAL;AAGA,yBAAK,gBAAL;AAGA,4BAAA,SAAA,EAAe,IAAf;kBACH;AAKM,kBAAAA,MAAA,UAAA,oBAAP,WAAA;AAAA,wBAAA;AACI,wBAAMzI,QAAO,KAAK,KAAL;AACb,wBAAM,gBAAe,GAAA,MAAA,SAAA,GAAA,WAAA,KAAK,OAAO,kBAAZ,EAAA,KAAA,UAAoC,cAApC;AACrB,iCAAa,KAAb;AACA,wBAAI,KAAK,OAAO;AAAa;AAC7B,wBAAI,CAACA,SAAQA,UAAS;AAAK,mCAAa,KAAb;kBAC9B;AAKM,kBAAAyI,MAAA,UAAA,QAAP,WAAA;AACI,yBAAK,KAAK,QAAA,OAAV;kBACH;AAMM,kBAAAA,MAAA,UAAA,OAAP,SAAY,KAAY;AACpB,wBAAM/H,UAAS,KAAK;AACpB,wBAAM,YAAYA,QAAO;AAGzB,wBAAI,OAAO,MAAM;AACb,0BAAI,SAAO,UAAU,KAAV;AAEX,+BAAO,OAAK,QAAQ,YAAY,EAAzB;AAEP,+BAAO,OAAK,QAAQ,eAAe,EAA5B;AAEP,+BAAO,OAAK,QAAQ,QAAA,oBAAoB,EAAjC;AAEP,+BAAO,OAAK,QAAQ,QAAA,eAAe,KAA5B;AAoBP,0BAAM,iBAA0C,OAAK,MAAM,4BAAX;AAChD,0BAAI,mBAAmB,MAAM;AACzB,yBAAA,GAAA,SAAA,SAAA,GAAA,cAAc,EAAA,KAAd,gBAAuB,SAAA,MAAI;AACvB,8BAAI,CAAC,KAAK,MAAM,KAAX,GAAmB;AACpB,qCAAO,OAAK,QAAQ,MAAM,KAAK,UAAU,GAAG,KAAK,SAAS,CAAhC,IAAqC,IAAxD;0BACV;wBACJ,CAJa;sBAKjB;AACD,6BAAO;oBACV;AAGD,2BAAM,GAAA,MAAA,SAAA,GAAA,GAAG,EAAA,KAAH,GAAG;AACT,wBAAI,QAAQ,IAAI;AACZ,4BAAM,QAAA;oBACT;AACD,yBAAI,GAAA,SAAA,SAAA,GAAA,GAAG,EAAA,KAAH,KAAY,GAAT,MAAkB,GAAG;AAExB,4BAAM,QAAM,MAAG;oBAClB;AACD,8BAAU,KAAK,GAAf;AAGA,oBAAAA,QAAO,cAAP;kBACH;AAMM,kBAAA+H,MAAA,UAAA,UAAP,SAAe,UAAsB;AACjC,wBAAMzI,QAAO,oBAAA,SAAA,EAAkB,QAAlB,EAA4B,SAA5B;AACb,wBAAMU,UAAS,KAAK;AACpB,wBAAM,YAAYA,QAAO;AAEzB,wBAAI,CAACV;AAAM;AAEX,8BAAU,gBAAgBA,KAA1B;kBACH;AAKM,kBAAAyI,MAAA,UAAA,UAAP,WAAA;AACI,wBAAM/H,UAAS,KAAK;AACpB,wBAAM,YAAYA,QAAO;AACzB,2BAAO,kBAAA,SAAA,EAAgB,SAAhB;kBACV;AAWM,kBAAA+H,MAAA,UAAA,OAAP,SAAY,KAAY;AACpB,wBAAM/H,UAAS,KAAK;AACpB,wBAAM,YAAYA,QAAO;AAGzB,wBAAI,OAAO,MAAM;AACb,0BAAI0E,QAAO,UAAU,KAAV;AAEX,sBAAAA,QAAOA,MAAK,QAAQ,YAAY,EAAzB;AACP,6BAAOA;oBACV;AAGD,8BAAU,KAAK,QAAM,MAAG,MAAxB;AAGA,oBAAA1E,QAAO,cAAP;kBACH;AAMM,kBAAA+H,MAAA,UAAA,SAAP,SAAczI,OAAY;AACtB,wBAAMU,UAAS,KAAK;AACpB,yBAAI,GAAA,SAAA,SAAA,GAAAV,KAAI,EAAA,KAAJA,OAAa,GAAT,MAAkB,GAAG;AAEzB,sBAAAA,QAAO,QAAMA,QAAI;oBACpB;AACD,yBAAK,KAAK,KAAK,KAAL,IAAcA,KAAxB;AAEA,oBAAAU,QAAO,cAAP;kBACH;AAKO,kBAAA+H,MAAA,UAAA,aAAR,WAAA;AACI,wBAAM/H,UAAS,KAAK;AACpB,wBAAM,YAAYA,QAAO;AACzB,wBAAM,YAAY,WAAA,SAAA,EAAE,QAAF;AAGlB,6BAAS,YAAS;AAEd,sBAAAA,QAAO,UAAU,UAAjB;AAEA,sBAAAA,QAAO,MAAM,aAAb;oBACH;AAGD,8BAAU,GAAG,SAAS,SAAtB;AAGA,6BAAS,qBAAkB;AACvB,gCAAS;AACT,gCAAU,IAAI,SAAS,kBAAvB;oBACH;AACD,8BAAU,GAAG,SAAS,kBAAtB;AAEA,6BAAS,gBAAa;AAElB,gCAAS;AACT,gCAAU,IAAI,WAAW,aAAzB;oBACH;AACD,6BAAS,mBAAgB;AAErB,gCAAU,GAAG,WAAW,aAAxB;AAEA,gCAAU,IAAI,cAAc,gBAA5B;oBACH;AACD,8BAAU,GAAG,aAAa,WAAA;AAEtB,gCAAU,GAAG,cAAc,gBAA3B;oBACH,CAHD;AAKA,8BAAU,GAAG,WAAW,SAAC3B,IAAa;AAElC,gCAAU,IAAI,cAAc,gBAA5B;AAEA,uBAAA,GAAA,aAAA,SAAA,GAAW,WAAA;AACP,4BAAMyE,aAAY9C,QAAO;AACzB,4BAAM+C,SAAQD,WAAU,SAAV;AACd,4BAAIC,WAAU;AAAM;AACpB,kCAAS;sBACZ,GAAE,CALH;oBAMH,CAVD;kBAWH;AAKO,kBAAAgF,MAAA,UAAA,kBAAR,WAAA;AACI,wBAAM/H,UAAS,KAAK;AACpB,wBAAM,YAAYA,QAAO;AACzB,wBAAM,aAAa,KAAK;AAGxB,8BAAU,GAAG,SAAS,SAAC3B,IAAQ;AAC3B,0BAAM,cAAc,WAAW;AAC/B,uBAAA,GAAA,SAAA,SAAA,GAAA,WAAW,EAAA,KAAX,aAAoB,SAAAqB,KAAE;AAAI,+BAAAA,IAAArB,EAAE;sBAAG,CAApB;oBACd,CAHD;AAMA,8BAAU,GAAG,SAAS,SAACA,IAAgB;AACnC,0BAAIA,GAAE,YAAY;AAAI;AACtB,0BAAM,gBAAgB,WAAW;AACjC,uBAAA,GAAA,SAAA,SAAA,GAAA,aAAa,EAAA,KAAb,eAAsB,SAAAqB,KAAE;AAAI,+BAAAA,IAAArB,EAAE;sBAAG,CAApB;oBAChB,CAJD;AAOA,8BAAU,GAAG,SAAS,SAACA,IAAgB;AACnC,0BAAM,cAAc,WAAW;AAC/B,uBAAA,GAAA,SAAA,SAAA,GAAA,WAAW,EAAA,KAAX,aAAoB,SAAAqB,KAAE;AAAI,+BAAAA,IAAArB,EAAE;sBAAG,CAApB;oBACd,CAHD;AAMA,8BAAU,GAAG,WAAW,SAACA,IAAgB;AACrC,0BAAM,gBAAgB,WAAW;AACjC,uBAAA,GAAA,SAAA,SAAA,GAAA,aAAa,EAAA,KAAb,eAAsB,SAAAqB,KAAE;AAAI,+BAAAA,IAAArB,EAAE;sBAAG,CAApB;oBAChB,CAHD;AAMA,8BAAU,GAAG,SAAS,SAACA,IAAgB;AACnC,0BAAIA,GAAE,YAAY,KAAKA,GAAE,YAAY;AAAI;AACzC,0BAAM,iBAAiB,WAAW;AAClC,uBAAA,GAAA,SAAA,SAAA,GAAA,cAAc,EAAA,KAAd,gBAAuB,SAAAqB,KAAE;AAAI,+BAAAA,IAAArB,EAAE;sBAAG,CAApB;oBACjB,CAJD;AAOA,8BAAU,GAAG,WAAW,SAACA,IAAgB;AACrC,0BAAIA,GAAE,YAAY,KAAKA,GAAE,YAAY;AAAI;AACzC,0BAAM,mBAAmB,WAAW;AACpC,uBAAA,GAAA,SAAA,SAAA,GAAA,gBAAgB,EAAA,KAAhB,kBAAyB,SAAAqB,KAAE;AAAI,+BAAAA,IAAArB,EAAE;sBAAG,CAApB;oBACnB,CAJD;AAOA,8BAAU,GAAG,SAAS,SAACA,IAAiB;AACpC,0BAAI,OAAA,GAAG,KAAH;AAAW;AAGf,sBAAAA,GAAE,eAAF;AAEA,0BAAM,cAAc,WAAW;AAC/B,uBAAA,GAAA,SAAA,SAAA,GAAA,WAAW,EAAA,KAAX,aAAoB,SAAAqB,KAAE;AAAI,+BAAAA,IAAArB,EAAE;sBAAG,CAApB;oBACd,CARD;AAWA,8BAAU,GAAG,WAAW,SAACA,IAAgB;AACrC;;yBAEK2B,QAAO,WAAWA,QAAO,sBACzB3B,GAAE,WAAWA,GAAE,YAChBA,GAAE,YAAY;wBAChB;AAEE,wBAAAA,GAAE,eAAF;AAEA,4BAAIA,GAAE,UAAU;AAEZ,0BAAA2B,QAAO,QAAQ,QAAf;wBACH,OAAM;AAEH,0BAAAA,QAAO,QAAQ,OAAf;wBACH;sBACJ;oBACJ,CAlBD;AAqBA,8BAAU,GAAG,SAAS,SAAC3B,IAAgB;AACnC,0BAAIA,GAAE,YAAY;AAAG;AACrB,sBAAAA,GAAE,eAAF;AACA,0BAAM,cAAc,WAAW;AAC/B,uBAAA,GAAA,SAAA,SAAA,GAAA,WAAW,EAAA,KAAX,aAAoB,SAAAqB,KAAE;AAAI,+BAAAA,IAAArB,EAAE;sBAAG,CAApB;oBACd,CALD;AAQA,8BAAU,GAAG,WAAW,SAACA,IAAgB;AACrC,0BAAIA,GAAE,YAAY;AAAG;AACrB,sBAAAA,GAAE,eAAF;AACA,0BAAM,gBAAgB,WAAW;AACjC,uBAAA,GAAA,SAAA,SAAA,GAAA,aAAa,EAAA,KAAb,eAAsB,SAAAqB,KAAE;AAAI,+BAAAA,IAAArB,EAAE;sBAAG,CAApB;oBAChB,CALD;AAQA,8BAAU;sBACN;;sBAEA,OAAA,SAAS,SAACA,IAAQ;AACd,4BAAM,mBAAmB,WAAW;AACpC,yBAAA,GAAA,SAAA,SAAA,GAAA,gBAAgB,EAAA,KAAhB,kBAAyB,SAAAqB,KAAE;AAAI,iCAAAA,IAAArB,EAAE;wBAAG,CAApB;sBACnB,GAAE,GAHH;oBAHJ;AAUA,6BAAS,eAAeA,IAAQ;AAE5B,sBAAAA,GAAE,eAAF;oBACH;AAED,+BAAA,SAAA,EAAE,QAAF,EACK,GAAG,aAAa,cADrB,EAEK,GAAG,QAAQ,cAFhB,EAGK,GAAG,aAAa,cAHrB,EAIK,GAAG,YAAY,cAJpB;AAMA,oBAAA2B,QAAO,cAAc,WAAA;AACjB,iCAAA,SAAA,EAAE,QAAF,EACK,IAAI,aAAa,cADtB,EAEK,IAAI,QAAQ,cAFjB,EAGK,IAAI,aAAa,cAHtB,EAIK,IAAI,YAAY,cAJrB;oBAKH,CAND;AAQA,8BAAU,GAAG,QAAQ,SAAC3B,IAAY;AAC9B,sBAAAA,GAAE,eAAF;AACA,0BAAM,SAAS,WAAW;AAC1B,uBAAA,GAAA,SAAA,SAAA,GAAA,MAAM,EAAA,KAAN,QAAe,SAAAqB,KAAE;AAAI,+BAAAA,IAAArB,EAAE;sBAAG,CAApB;oBACT,CAJD;AAOA,8BAAU,GAAG,SAAS,SAACA,IAAQ;AAE3B,0BAAI,QAA2B;AAE/B,0BAAM,SAASA,GAAE;AACjB,0BAAM,UAAU,WAAA,SAAA,EAAE,MAAF;AAChB,0BAAI,QAAQ,YAAR,MAA0B,KAAK;AAE/B,gCAAQ;sBACX,OAAM;AAEH,4BAAM,UAAU,QAAQ,YAAY,GAApB;AAChB,4BAAI,WAAW,MAAM;AAEjB,kCAAQ;wBACX;sBACJ;AAED,0BAAI,CAAC;AAAO;AAEZ,0BAAM,kBAAkB,WAAW;AACnC,uBAAA,GAAA,SAAA,SAAA,GAAA,eAAe,EAAA,KAAf,iBAAwB,SAAAqB,KAAE;AAAI,+BAAAA,IAAA,KAAE;sBAAqB,CAAtC;oBAClB,CAtBD;AAyBA,8BAAU,GAAG,SAAS,SAACrB,IAAQ;AAE3B,0BAAI,OAA0B;AAE9B,0BAAM,SAASA,GAAE;AACjB,0BAAM,UAAU,WAAA,SAAA,EAAE,MAAF;AAGhB,0BAAI,QAAQ,YAAR,MAA0B,SAAS,CAAC,QAAQ,MAAM,CAAd,EAAiB,aAAa,YAA9B,GAA6C;AAEjF,wBAAAA,GAAE,gBAAF;AACA,+BAAO;sBACV;AACD,0BAAI,CAAC;AAAM;AAEX,0BAAM,iBAAiB,WAAW;AAClC,uBAAA,GAAA,SAAA,SAAA,GAAA,cAAc,EAAA,KAAd,gBAAuB,SAAAqB,KAAE;AAAI,+BAAAA,IAAA,IAAE;sBAAoB,CAArC;oBACjB,CAjBD;AAoBA,8BAAU,GAAG,SAAS,SAACrB,IAAQ;AAE3B,0BAAI,QAA2B;AAE/B,0BAAM,SAASA,GAAE;AACjB,0BAAM,UAAU,WAAA,SAAA,EAAE,MAAF;AAChB,0BAAI,QAAQ,YAAR,MAA0B,OAAO;AAEjC,gCAAQ;sBACX,OAAM;AAEH,4BAAM,UAAU,QAAQ,YAAY,KAApB;AAChB,4BAAI,YAAY,MAAM;AAElB,kCAAQ;wBACX;sBACJ;AAED,0BAAI,CAAC;AAAO;AAEZ,0BAAM,kBAAkB,WAAW;AACnC,uBAAA,GAAA,SAAA,SAAA,GAAA,eAAe,EAAA,KAAf,iBAAwB,SAAAqB,KAAE;AAAI,+BAAAA,IAAA,KAAE;sBAAqB,CAAtC;oBAClB,CAtBD;AAyBA,8BAAU,GAAG,SAAS,SAACrB,IAAQ;AAE3B,0BAAI,aAAgC;AAEpC,0BAAM,SAASA,GAAE;AACjB,0BAAM,UAAU,WAAA,SAAA,EAAE,MAAF;AAEhB,0BAAI,QAAQ,YAAR,MAA0B,MAAM;AAChC,qCAAa;sBAChB,OAAM;AACH,mCAAW;sBACd;AAED,0BAAI,CAAC;AAAY;AAEjB,sBAAA2B,QAAO,UAAU,kBAAkB,UAAnC;AACA,sBAAAA,QAAO,UAAU,iBAAjB;AACA,0BAAM,uBAAuB,WAAW;AACxC,uBAAA,GAAA,SAAA,SAAA,GAAA,oBAAoB,EAAA,KAApB,sBAA6B,SAAAN,KAAE;AAAI,+BAAAA,IAAA,UAAE;sBAA0B,CAA3C;oBACvB,CAnBD;AAsBA,oBAAAM,QAAO,aAAa,GAAG,SAAS,SAAC3B,IAAQ;AACrC,0BAAM,qBAAqB,WAAW;AACtC,uBAAA,GAAA,SAAA,SAAA,GAAA,kBAAkB,EAAA,KAAlB,oBAA2B,SAAAqB,KAAE;AAAI,+BAAAA,IAAArB,EAAE;sBAAG,CAApB;oBACrB,CAHD;AAMA,oBAAA2B,QAAO,mBAAmB,GAAG,aAAa,SAAC3B,IAAa;AACpD,0BAAM,SAASA,GAAE;AACjB,0BAAM,UAAU,WAAA,SAAA,EAAE,MAAF;AAChB,0BAAI,QAAQ,SAAS,iBAAjB,GAAqC;AAErC,4BAAM,4BAA4B,WAAW;AAC7C,yBAAA,GAAA,SAAA,SAAA,GAAA,yBAAyB,EAAA,KAAzB,2BAAkC,SAAAqB,KAAE;AAAI,iCAAAA,IAAA;wBAAI,CAAnB;sBAC5B;oBACJ,CARD;AAWA,8BAAU,GAAG,SAAS,SAACrB,IAAa;AAEhC,0BAAI,OAA0B;AAE9B,0BAAM,SAASA,GAAE;AAGjB,6BAAO,WAAA,SAAA,EAAE,MAAF,EAAU,kBAAkB,SAAS2B,SAAQ,MAA7C;AAGP,0BAAI,CAAC;AAAM;AAEX,0BAAM,mBAAmB,WAAW;AACpC,uBAAA,GAAA,SAAA,SAAA,GAAA,gBAAgB,EAAA,KAAhB,kBAAyB,SAAAN,KAAE;AAAI,+BAAAA,IAAG,MAAHrB,EAAE;sBAAuB,CAAxC;oBACnB,CAdD;AAiBA,8BAAU,GAAG,WAAW,SAACA,IAAgB;AACrC,0BAAIA,GAAE,YAAY;AAAI;AACtB,0BAAM,kBAAkB,WAAW;AACnC,uBAAA,GAAA,SAAA,SAAA,GAAA,eAAe,EAAA,KAAf,iBAAwB,SAAAqB,KAAE;AAAI,+BAAAA,IAAArB,EAAE;sBAAG,CAApB;oBAClB,CAJD;AAOA,8BAAU,GAAG,SAAS,SAACA,IAAQ;AAE3B,0BAAI,SAA4B;AAEhC,0BAAM,SAASA,GAAE;AACjB,0BAAM,UAAU,WAAA,SAAA,EAAE,MAAF;AAGhB,0BAAI,QAAQ,YAAR,MAA0B,SAAS;AAEnC,wBAAAA,GAAE,gBAAF;AACA,iCAAS;sBACZ;AAED,0BAAI,CAAC;AAAQ;AAEb,0BAAM,mBAAmB,WAAW;AACpC,uBAAA,GAAA,SAAA,SAAA,GAAA,gBAAgB,EAAA,KAAhB,kBAAyB,SAAAqB,KAAE;AAAI,+BAAAA,IAAA,MAAE;sBAAsB,CAAvC;oBACnB,CAlBD;kBAmBH;AACL,yBAAAqI;gBAAC,EAzhBD;;AA2hBA,cAAAtK,SAAA,SAAA,IAAesK;;;;;AC1lBf,kBAAA,SAAa,oBAAQ,GAAwB;AAE7C,cAAAvK,QAAA,UAAA;;;;;ACFA,kBAAAwK,QAAW,oBAAQ,GAAuB;AAE1C,kBAAA,iBAAA,MAAA;AAEA,cAAAxK,QAAA,UAAA,SAAAiD,KAAA;AACA,oBAAAqG,OAAArG,IAAA;AACA,uBAAAA,QAAA,kBAAAA,eAAA,SAAAqG,SAAA,eAAA,OAAAkB,QAAAlB;cACA;;;;;ACPA,kCAAQ,GAAgC;AACxC,kBAAA,eAAmB,oBAAQ,EAAkC;AAE7D,cAAAtJ,QAAA,UAAA,aAAA,OAAA,EAAA;;;;;;ACFA,kBAAAmC,KAAQ,oBAAQ,CAAqB;AACrC,kBAAA,QAAY,oBAAQ,EAA8B,EAAA;AAClD,kBAAA,mBAAuB,oBAAQ,EAAiC;AAChE,kBAAA,0BAA8B,oBAAQ,EAA0C;AAEhF,kBAAA,OAAA;AACA,kBAAA,cAAA;AAEA,kBAAA,iBAAA,wBAAA,IAAA;AAGA,kBAAA,QAAA,CAAA;AAAA,sBAAA,CAAA,EAAA,IAAA,EAAA,WAAA;AAA4C,gCAAA;gBAAqB,CAAE;AAInE,cAAAA,GAAA,EAAG,QAAA,SAAA,OAAA,MAAA,QAAA,eAAA,CAAA,eAAA,GAAuE;gBAC1E,MAAA,SAAAqI,MAAA,YAAA;AACA,yBAAA,MAAA,MAAA,YAAA,UAAA,SAAA,IAAA,UAAA,CAAA,IAAA,MAAA;gBACA;cACA,CAAC;AAGD,+BAAA,IAAA;;;;;;;;;;;;ACjBA,kBAAA,sBAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AACA,kBAAA,kBAAA,QAAA,aAAA,oBAAA,GAAA,CAAA;AACA,kBAAA,iBAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AACA,kBAAA,oBAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AACA,kBAAA,qBAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AAMA,uBAAS,cAActD,OAAU;AAC7B,oBAAM1E,UAAS0E,MAAK;AACpB,oBAAM,aAAaA,MAAK;AAGxB,oCAAA,SAAA,EAAe1E,SAAQ,WAAW,eAAe,WAAW,eAA5D;AAGA,gCAAA,SAAA,EAAcA,SAAQ,WAAW,gBAAgB,WAAW,gBAA5D;AAGA,gCAAA,WAAWA,SAAQ,WAAW,WAA9B;AAGA,+BAAA,SAAA,EAAUA,SAAQ,WAAW,aAA7B;AAGA,kCAAA,SAAA,EAAcA,SAAQ,WAAW,WAAjC;AAGA,mCAAA,SAAA,EAAeA,SAAQ,WAAW,cAAlC;cACH;AAED,cAAAvC,SAAA,SAAA,IAAe;;;;;;;;;;;;;ACjCf,kBAAA,UAAA,oBAAA,CAAA;AACA,kBAAA,aAAA,QAAA,gBAAA,oBAAA,CAAA,CAAA;AAQA,uBAAS,eAAeuC,SAAgB,eAA2B,iBAA2B;AAC1F,yBAAS,aAAa,gBAA0B;AAAA,sBAAA;AAC5C,sBAAM,KAAK,WAAA,SAAA,EAAE,QAAA,OAAF;AACX,qBAAG,aAAa,cAAhB;AACA,uBAAI,GAAA,SAAA,SAAA,GAAA,WAAA,eAAe,KAAf,CAAA,EAAA,KAAA,UAA8B,MAA9B,KAAyC,GAAG;AAE5C,uBAAG,OAAH;AACA;kBACH;AAED,kBAAAA,QAAO,UAAU,kBAAkB,IAAI,MAAM,IAA7C;AACA,kBAAAA,QAAO,UAAU,iBAAjB;AACA,iCAAe,OAAf;gBACH;AAGD,yBAASN,MAAE;AACP,sBAAM,YAAYM,QAAO;AACzB,sBAAM,iBAAiBA,QAAO,UAAU,0BAAjB;AACvB,sBAAM,cAAc,eAAe,OAAf;AAEpB,sBAAI,YAAY,KAAZ,MAAuB,qBAAqB;AAG5C,iCAAa,WAAD;AACZ;kBACH;AAED,sBACI,eAAe,YAAf,MAAiC,UACjC,eAAe,KAAf,MAA0B,MAC1B,eAAe,KAAK,MAApB,MAAgC,aAClC;AAEE,iCAAa,WAAD;AACZ;kBACH;AAED,sBAAI,CAAC,YAAY,MAAM,SAAlB,GAA8B;AAE/B;kBACH;AAED,sBAAM,WAAW,eAAe,YAAf;AACjB,sBAAI,aAAa,OAAO,eAAe,KAAK,iBAApB,MAA2C,MAAM;AAErE;kBACH;AAED,sBAAI,eAAe,KAAf,GAAuB;AAEvB;kBACH;AAGD,+BAAa,cAAD;gBACf;AACD,8BAAc,KAAKN,GAAnB;AAGA,yBAAS,qBAAqBrB,IAAQ;;AAElC,kBAAA2B,QAAO,UAAU,WAASuC,MAAC,aAAY,OAAE,QAAAA,QAAA,SAAA,SAAAA,IAAE,WAAW,CAAb,CAAzC;AACA,sBAAM,cAAcvC,QAAO,UAAU,0BAAjB;AACpB,sBAAI,YAAY,OAAOA,QAAO,YAAY;AAGtC,oBAAA3B,GAAE,eAAF;AACA,oBAAA2B,QAAO,IAAP,IAAA,EAAc,cAAc,aAA5B;kBACH;gBACJ;AACD,gCAAgB,KAAK,oBAArB;cACH;AAED,cAAAvC,SAAA,SAAA,IAAe;;;;;;;;;;;;;;;ACpFf,kBAAA,UAAA,oBAAA,CAAA;AAEA,kBAAA,aAAA,QAAA,gBAAA,oBAAA,CAAA,CAAA;AAQA,uBAAS,cAAcuC,SAAgB,gBAA4B,kBAA4B;AAC3F,yBAAS,OAAI;AACT,sBAAM,YAAYA,QAAO;AACzB,sBAAMV,QAAOU,QAAO,UAAU,KAAjB;AACb,sBAAM0E,QAAO1E,QAAO,UAAU,KAAjB;AACb,sBAAM,WAAU,GAAA,MAAA,SAAA,GAAAV,KAAI,EAAA,KAAJA,KAAI;AAOpB,sBAAM,YAAsB,CAAC,eAAe,QAAQ,8BAA8B,QAAA,OAAtD;AAG5B,sBAAI,QAAQ,KAAKoF,KAAb,MAAuB,CAAC,YAAW,GAAA,UAAA,SAAA,GAAA,SAAS,EAAA,KAAT,WAAmB,OAAV,IAAqB;AAEjE,8BAAU,KAAK,QAAA,OAAf;AAMA,wBAAM,gBAAgB,UAAU,QAAV;AAGtB,oBAAA1E,QAAO,UAAU,mBACb,cAAc,WAAW,CAAzB,GACA,cAAc,WAAW,CAAzB,CAFJ;AAKA,wBAAM,iBAAiBA,QAAO,UAAU,0BAAjB;AAEvB,oBAAAA,QAAO,UAAU,iBAAjB;AAIA,oBAAAA,QAAO,UAAU,WAAW,eAAe,QAAf,GAA0B,CAAtD;kBACH;gBACJ;AACD,+BAAe,KAAK,IAApB;AAEA,yBAAS,OAAO3B,IAAQ;AAAA,sBAAA;AACpB,sBAAM,YAAY2B,QAAO;AACzB,sBAAM,WAAU,GAAA,MAAA,SAAA,GAAA,WAAA,UAAU,KAAV,EAAiB,YAAjB,CAAA,EAAA,KAAA,QAAA;AAChB,sBAAI,YAAY,QAAA,SAAS;AAErB,oBAAA3B,GAAE,eAAF;AACA;kBACH;gBACJ;AACD,iCAAiB,KAAK,MAAtB;cACH;AAOD,uBAAgB,WAAW2B,SAAgB,WAAqB;AAC5D,yBAAS,KAAK3B,IAAgB;AAAA,sBAAA;AAC1B,sBAAIA,GAAE,YAAY,IAAI;AAClB;kBACH;AAED,sBAAM,YAAY2B,QAAO;AACzB,sBAAM,WAAU,GAAA,MAAA,SAAA,GAAA,YAAA,UAAU,KAAV,EAAiB,YAAjB,CAAA,EAAA,KAAA,SAAA;AAGhB,sBAAI,CAAC,WAAW,YAAY,QAAQ;AAEhC,wBAAM,KAAK,WAAA,SAAA,EAAE,QAAA,OAAF;AACX,8BAAU,KAAK,GAAf;AACA,8BAAU,OAAO,EAAjB;AACA,oBAAAA,QAAO,UAAU,kBAAkB,IAAI,OAAO,IAA9C;AACA,oBAAAA,QAAO,UAAU,iBAAjB;AAGA,oBAAAA,QAAO,UAAU,WAAW,GAAG,QAAH,GAAc,CAA1C;kBACH;gBACJ;AAED,0BAAU,KAAK,IAAf;cACH;AAxBD,cAAAvC,SAAA,aAAA;AA0BA,cAAAA,SAAA,SAAA,IAAe;;;;;;;;;;;ACxFf,uBAAS,WAAWuC,SAAgB,eAAyB;AAEzD,yBAASN,MAAE;AACP,sBAAI,CAACM,QAAO,IAAI,sBAAsB,YAAjC,GAAgD;AAEjD;kBACH;AACD,sBAAM,iBAAiBA,QAAO,UAAU,0BAAjB;AACvB,sBAAI,CAAC,gBAAgB;AACjB;kBACH;AACD,sBAAM,cAAc,eAAe,OAAf;AACpB,sBAAM,oBAAoB,eAAe,YAAf;AAC1B,sBAAM,iBAAiB,YAAY,YAAZ;AAEvB,sBACI,qBAAqB,UACrB,mBAAmB,UACnB,mBAAmB,SACnB,OAAO,KAAK,cAAZ,GACF;AAEE,oBAAAA,QAAO,IAAP,IAAA,EAAc,cAAcA,QAAO,OAAO,WAA1C;kBACH,OAAM;AAEH,oBAAAA,QAAO,IAAP,IAAA,EAAc,cAAc,0BAA5B;kBACH;gBACJ;AAGD,8BAAc,KAAKN,GAAnB;cACH;AAED,cAAAjC,SAAA,SAAA,IAAe;;;;;;;;;;;;;ACvCf,kBAAA,gBAAA,oBAAA,GAAA;AACA,kBAAA,SAAA,oBAAA,CAAA;AACA,kBAAA,UAAA,oBAAA,CAAA;AAgBA,uBAAS,WAAWwK,WAAgB;AAAA,oBAAA;AAChC,oBAAM,SAAQ,GAAA,MAAA,SAAA,GAAA,WAAAA,UACT,QAAQ,YAAY,KADX,EAET,QAAQ,cAAc,MAFb,CAAA,EAAA,KAAA,QAAA;AAMd,oBAAM,gBAAgB,SAAS,cAAc,KAAvB;AAEtB,8BAAc,YAAY;AAE1B,uBAAO,cAAc,UAAU,QAAQ,eAAe,EAA/C;cACV;AAOD,uBAAS,WAAW,KAAW;AAC3B,oBAAI,YAAY,IAAI,QAAQ,iBAAiB,IAA7B,EAAmC,QAAQ,aAAa,EAAxD;AAEhB,uBAAO;cACV;AAOD,uBAAS,gBAAgB3I,OAAY;;AACjC,oBAAIA,UAAS;AAAI,yBAAO;AAExB,oBAAM,YAAY,SAAS,cAAc,KAAvB;AAClB,0BAAU,YAAYA;AAEtB,yBAAOiD,MAAA,UAAU,gBAAU,QAAAA,QAAA,SAAA,SAAAA,IAAE,cAAa;cAC7C;AAOD,uBAAS,iBAAiB,SAA+B;AACrD,oBAAI,EAAC,YAAO,QAAP,YAAO,SAAA,SAAP,QAAS;AAAQ,yBAAO;AAE7B,oBAAM,MAAM,QAAQ,MAAM,CAAd;AAEZ,uBAAO,IAAI,aAAa,OAAO,IAAI,cAAc;cACpD;AAOD,uBAAS,cAAcvC,SAAgB,aAAuB;AAC1D,yBAASN,IAAGrB,IAAQ;AAEhB,sBAAMoG,UAASzE,QAAO;AACtB,sBAAM,mBAAmByE,QAAO;AAChC,sBAAM,iBAAiBA,QAAO;AAC9B,sBAAM,kBAAkBA,QAAO;AAG/B,sBAAI,YAAY,cAAA,aAAapG,IAAqB,kBAAkB,cAApD;AAChB,sBAAI,YAAY,cAAA,aAAaA,EAAb;AAChB,8BAAY,UAAU,QAAQ,QAAQ,MAA1B;AAEZ,sBAAM,iBAAiB2B,QAAO,UAAU,0BAAjB;AACvB,sBAAI,CAAC,gBAAgB;AACjB;kBACH;AACD,sBAAM,WAAW,mBAAc,QAAd,mBAAc,SAAA,SAAd,eAAgB,YAAhB;AACjB,sBAAM,WAAW,mBAAc,QAAd,mBAAc,SAAA,SAAd,eAAgB,WAAWA,OAA3B;AAEjB,sBAAI,cAAsB;AAC1B,sBAAI,SAAS,MAAM,CAAf,GAAmB;AACnB,kCAAc,aAAQ,QAAR,aAAQ,SAAA,SAAR,SAAU,YAAV;kBACjB;AAED,sBAAI,aAAa,UAAU,gBAAgB,OAAO;AAC9C,wBAAI,mBAAmB,OAAA,WAAW,eAAX,GAA6B;AAEhD,kCAAY,MAAM,gBAAgB,SAAD,KAAe;oBACnD;AACD,oBAAAA,QAAO,IAAP,IAAA,EAAc,cAAc,WAAW,SAAD,CAAtC;AACA;kBACH;AAID,sBAAI,QAAA,SAAS,KAAK,SAAd,KAA4B,kBAAkB;AAE9C,wBAAI,mBAAmB,OAAA,WAAW,eAAX,GAA6B;AAEhD,kCAAY,MAAM,gBAAgB,SAAD,KAAe;oBACnD;AAID,wBAAM,aAAa,UAAU,QAAQ,QAAA,UAAU,SAAU6E,OAAY;AACjE,6BAAO,cAAYA,QAAI,uBAAqBA,QAAI;oBACnD,CAFkB;AAGnB,wBAAM9B,SAAQ/C,QAAO,UAAU,SAAjB;AAId,wBAAMT,OAAM,SAAS,cAAc,KAAvB;AACZ,wBAAM,WAAW,SAAS,uBAAT;AAEjB,oBAAAA,KAAI,YAAY;AAEhB,wBAAIwD,UAAS;AAAM;AAGnB,2BAAOxD,KAAI,WAAW,QAAQ;AAC1B,+BAAS,OAAOA,KAAI,WAAW,CAAf,CAAhB;oBACH;AAGD,wBAAM,UAAU,SAAS,iBAAiB,GAA1B;AAChB,qBAAA,GAAA,SAAA,SAAA,GAAA,OAAO,EAAA,KAAP,SAAgB,SAAA,KAAG;AACf,0BAAI,YAAY,IAAI;oBACvB,CAFM;AAIP,wBAAIwD,OAAM,YAAY;AAClB,sBAAAA,OAAM,eAAN;AACA,sBAAAA,OAAM,WAAW,QAAjB;oBACH;AAED,oBAAA/C,QAAO,UAAU,0BAAjB;AAEA;kBACH;AAED,sBAAI,CAAC,WAAW;AACZ;kBACH;AACD,sBAAI;AAGA,wBAAI,mBAAmB,OAAA,WAAW,eAAX,GAA6B;AAEhD,kCAAY,MAAM,gBAAgB,SAAD,KAAe;oBACnD;AAED,wBAAI,aAAsB,4BAA4B,KAAK,SAAjC;AAE1B,wBAAI,cAAc,kBAAkB;AAChC,sBAAAA,QAAO,IAAP,IAAA,EAAc,cAAc,KAAG,WAAW,SAAD,CAAzC;oBACH,OAAM;AACH,0BAAMV,QAAO,WAAW,SAAD;AAEvB,0BAAI,gBAAgBA,KAAD,GAAQ;AACvB,4BAAM,UAAUU,QAAO;AACvB,wBAAAA,QAAO,IAAP,IAAA,EAAc,cAAcV,KAA5B;AAEA,4BAAI,QAAQ,MAAM,cAAd,GAA+B;AAE/B,0BAAAU,QAAO,UAAU,iBAAjB;AACA;wBACH;AAED,4BAAI,iBAAiB,QAAD,GAAY;AAC5B,mCAAS,OAAT;wBACH;sBACJ,OAAM;AACH,wBAAAA,QAAO,IAAP,IAAA,EAAc,cAAcV,KAA5B;sBASH;oBACJ;kBACJ,SAAQ,IAAI;AAET,wBAAI,mBAAmB,OAAA,WAAW,eAAX,GAA6B;AAEhD,kCAAY,MAAM,gBAAgB,SAAD,KAAe;oBACnD;AACD,oBAAAU,QAAO,IAAP,IAAA,EAAc,cAAc,KAAG,WAAW,SAAD,CAAzC;kBACH;gBACJ;AAED,4BAAY,KAAKN,GAAjB;cACH;AAED,cAAAjC,SAAA,SAAA,IAAe;;;;;;;;;;;;;;;ACpNf,kBAAA,SAAA,oBAAA,GAAA;AACA,kBAAA,wBAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AAWA,uBAAS,gBAAgB6B,OAAY;AACjC,oBAAM,gBAAgB;AACtB,oBAAM,cAAc;AACpB,uBAAOA,MAAK,QAAQ,eAAe,SAAC,GAAS;AAEzC,sBAAM,SAAS,EAAE,MAAM,WAAR;AACf,sBAAI,UAAU;AAAM,2BAAO;AAC3B,yBAAO,OAAO,CAAD;gBAChB,CALM;cAMV;AAOD,uBAAS,YAAY,KAAa,WAAkB;AAAA,oBAAA;AAChD,uBAAM,GAAA,MAAA,SAAA,GAAA,WAAA,IAAI,YAAJ,CAAA,EAAA,KAAA,QAAA;AAGN,oBAAI,OAAA,YAAY,IAAI,GAAhB,GAAsB;AACtB,yBAAO;gBACV;AAGD,oBAAI,WAAW;AACX,sBAAI,QAAQ,OAAO;AACf,2BAAO;kBACV;gBACJ;AAED,uBAAO;cACV;AAOD,uBAAS,aAAa,KAAa,OAAiB;AAChD,oBAAI,SAAS;AAGb,yBAAS,MAAI;AAGb,oBAAI,aAAuB,CAAA;AAC3B,iBAAA,GAAA,SAAA,SAAA,GAAA,KAAK,EAAA,KAAL,OAAc,SAAC,MAAc;AACzB,6BAAW,KAAQ,KAAK,OAAI,OAAK,KAAK,QAAK,GAA3C;gBACH,CAFI;AAGL,oBAAI,WAAW,SAAS,GAAG;AACvB,2BAAS,SAAS,MAAM,WAAW,KAAK,GAAhB;gBAC3B;AAGD,oBAAM,UAAU,OAAA,WAAW,IAAI,GAAf;AAChB,yBAAS,UAAU,UAAU,MAAM,MAAM;AAEzC,uBAAO;cACV;AAMD,uBAAS,WAAW,KAAW;AAC3B,uBAAO,OAAK,MAAG;cAClB;AAQD,uBAAS,UAAUA,OAAc,aAA6B,WAA0B;AAAvD,oBAAA,gBAAA,QAAA;AAAA,gCAAA;gBAA2B;AAAE,oBAAA,cAAA,QAAA;AAAA,8BAAA;gBAA0B;AACpF,oBAAI,YAAsB,CAAA;AAG1B,oBAAI,UAAU;AACd,yBAAS,aAAa,KAAW;AAC7B,yBAAM,GAAA,MAAA,SAAA,GAAA,GAAG,EAAA,KAAH,GAAG;AACT,sBAAI,CAAC;AAAK;AACV,sBAAI,OAAA,WAAW,IAAI,GAAf;AAAqB;AACzB,4BAAU;gBACb;AACD,yBAAS,aAAU;AACf,4BAAU;gBACb;AAGD,oBAAM,aAAa,IAAI,sBAAA,SAAA,EAAJ;AACnB,2BAAW,MAAMA,OAAM;kBACnB,cAAA,SAAA,aAAa,KAAa,OAAS;AAE/B,iCAAa,GAAD;AAGZ,wBAAI,YAAY,KAAK,SAAN,GAAkB;AAC7B;oBACH;AAGD,wBAAM,oBAAoB,OAAA,gBAAgB,IAAI,GAApB,KAA4B,CAAA;AACtD,wBAAM,cAA0B,CAAA;AAChC,qBAAA,GAAA,SAAA,SAAA,GAAA,KAAK,EAAA,KAAL,OAAc,SAAC,MAAc;AAEzB,0BAAM5B,QAAO,KAAK;AAGlB,0BAAIA,UAAS,SAAS;AAElB,4BAAI,CAAC,aAAa;AACd,sCAAY,KAAK,IAAjB;wBACH;AACD;sBACH;AAGD,2BAAI,GAAA,UAAA,SAAA,GAAA,iBAAiB,EAAA,KAAjB,mBAA2BA,KAAV,MAAoB,OAAO;AAE5C;sBACH;AACD,kCAAY,KAAK,IAAjB;oBACH,CAnBI;AAsBL,wBAAM4B,QAAO,aAAa,KAAK,WAAN;AACzB,8BAAU,KAAKA,KAAf;kBACH;kBACD,YAAA,SAAA,WAAW,KAAW;AAClB,wBAAI,CAAC,KAAK;AACN;oBACH;AAGD,wBAAI,YAAY,SAAS,SAAV;AAAsB;AACrC,8BAAU,KAAK,GAAf;kBACH;kBACD,YAAA,SAAA,WAAW,KAAW;AAElB,wBAAI,YAAY,KAAK,SAAN,GAAkB;AAC7B;oBACH;AAGD,wBAAMA,QAAO,WAAW,GAAD;AACvB,8BAAU,KAAKA,KAAf;AAGA,+BAAU;kBACb;kBACD,SAAA,SAAA4I,SAAQ,KAAW;AAEf,iCAAa,GAAD;kBACf;gBA/DkB,CAAvB;AAkEA,oBAAI,SAAS,UAAU,KAAK,EAAf;AAGb,yBAAS,gBAAgB,MAAD;AAExB,uBAAO;cACV;AAED,cAAAzK,SAAA,SAAA,IAAe;;;;;;;;;;;;;;ACjLF,cAAAA,SAAA,cAAc,IAAA,KAAA,SAAA,EAAQ,CAC/B,WACA,YACA,QACA,QACA,QACA,QACA,UACA,SACA,QACA,SACA,UACA,SACA,OACA,UACA,KAf+B,CAAR;AAmBd,cAAAA,SAAA,kBAAkB,IAAA,KAAA,SAAA,EAAQ,CACnC,CAAC,OAAO,CAAC,OAAO,KAAR,CAAR,GACA,CAAC,KAAK,CAAC,QAAQ,QAAT,CAAN,GACA,CAAC,MAAM,CAAC,WAAW,SAAZ,CAAP,GACA,CAAC,MAAM,CAAC,WAAW,SAAZ,CAAP,CAJmC,CAAR;AAQlB,cAAAA,SAAA,aAAa,IAAA,KAAA,SAAA,EAAQ,CAC9B,QACA,QACA,YACA,MACA,OACA,MACA,OACA,SACA,WACA,OAV8B,CAAR;AAcb,cAAAA,SAAA,iBAAiB,IAAA,KAAA,SAAA,EAAQ,CAClC,MACA,MACA,MACA,MACA,MACA,KACA,MACA,MACA,SACA,cACA,OACA,MACA,MAbkC,CAAR;;;;;AC/C9B,kBAAA,SAAa,oBAAQ,GAAc;AAEnC,cAAAD,QAAA,UAAA;;;;;ACFA,kCAAQ,GAAsB;AAC9B,kCAAQ,EAAmC;AAC3C,kCAAQ,EAAkC;AAC1C,kCAAQ,EAA4C;AACpD,kBAAA2C,QAAW,oBAAQ,CAAsB;AAEzC,cAAA3C,QAAA,UAAA2C,MAAA;;;;;;ACLA,kBAAA,aAAiB,oBAAQ,GAAyB;AAClD,kBAAA,mBAAuB,oBAAQ,GAAgC;AAI/D,cAAA3C,QAAA,UAAA,WAAA,OAAA,SAAAwJ,OAAA;AACA,uBAAA,SAAAmB,OAAA;AAAyB,yBAAAnB,MAAA,MAAA,UAAA,SAAA,UAAA,CAAA,IAAA,MAAA;gBAAgE;cACzF,GAAC,gBAAA;;;;;ACgDD,uBAAA,mBAAA;cAAA;AAEA,+BAAA,YAAA;gBACA,SAAA;;gBAIA,YAAA;gBACA,UAAA;gBACA,QAAA;gBAEA,OAAA,SAAA,GAAA,UAAA;AACA,sBAAA;AAAA,yBAAA,iBAAA;AAEA,sBAAA,IAAA;AACA,sBAAA,KAAA,IAAA,IAAA,IAAApH;AACA,sBAAA,eAAA;AACA,sBAAA,QAAA;AACA,yBAAA,EAAA,SAAA,GAAA;AAEA,wBAAA,EAAA,UAAA,GAAA,CAAA,KAAA,QAAA;AACA,sBAAAA,SAAA,EAAA,QAAA,KAAA;AACA,0BAAAA,UAAA,IAAA;AACA,6BAAA,eAAA,QAAA,EAAA,UAAA,GAAAA,MAAA,CAAA;AACA,4BAAA,EAAA,UAAAA,SAAA,CAAA;AACA,uCAAA;sBACA,OAAiB;AACjB,uCAAA;sBACA;oBACA,WAGA,EAAA,UAAA,GAAA,CAAA,KAAA,MAAA;AACA,0BAAA,KAAA,SAAA,KAAA,CAAA,GAAA;AACA,6BAAA,OAAA;AACA,6BAAA,OAAA;AACA,6BAAA,OAAA;AAEA,2BAAA,QAAA,KAAA,UAAA,WAAA;AACA,iCAAA,MAAA,YAAA,MAAA,OAAA,SAAA;wBACA,CAAqB;AAErB,4BAAA;AACA,uCAAA;sBACA,OAAiB;AACjB,uCAAA;sBACA;oBACA,WAEA,EAAA,OAAA,CAAA,KAAA,KAAA;AACA,0BAAA,KAAA,WAAA,KAAA,CAAA,GAAA;AACA,6BAAA,OAAA;AACA,6BAAA,OAAA;AACA,6BAAA,OAAA;AAEA,2BAAA,QAAA,KAAA,YAAA,WAAA;AACA,iCAAA,MAAA,cAAA,MAAA,OAAA,SAAA;wBACA,CAAqB;AAErB,4BAAA;AACA,uCAAA;sBACA,OAAiB;AACjB,uCAAA;sBACA;oBACA;AAEA,wBAAA,cAAA;AACA,sBAAAA,SAAA,EAAA,QAAA,GAAA;AACA,0BAAAA,UAAA,IAAA;AACA,6BAAA,eAAA,WAAA,CAAA;AACA,4BAAA;sBACA,OAAiB;AACjB,6BAAA,eAAA,WAAA,EAAA,UAAA,GAAAA,MAAA,CAAA;AACA,4BAAA,EAAA,UAAAA,MAAA;sBACA;oBACA;AAEA,mCAAA;kBACA;gBACA;gBAEA,eAAA,SAAA,MAAA,UAAA,OAAA;AACA,sBAAA,QAAA,KAAA,gBAAA,UAAA,KAAA;AACA,uBAAA,eAAA,aAAA,UAAA,KAAA;gBACA;gBAEA,aAAA,SAAA,MAAA,UAAA;AACA,uBAAA,eAAA,WAAA,QAAA;gBACA;gBAEA,iBAAA,SAAA,UAAA,GAAA;AACA,sBAAA,QAAA;AACA,sBAAA,QAAA,CAAA;AACA,oBAAA,QAAA,KAAA,QAAA,SAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA;AACA,0BAAA,KAAA,MAAA,eAAA,UAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,EAAA,CAAA;kBACA,CAAS;AACT,yBAAA;gBACA;gBAEA,gBAAA,SAAA,UAAA,YAAA,OAAA;AACA,sBAAA,QAAA;AACA,sBAAA,UAAA,CAAA;AAAA,4BAAA,UAAA,CAAA;2BACA,UAAA,CAAA;AAAA,4BAAA,UAAA,CAAA;2BACA,UAAA,CAAA;AAAA,4BAAA,UAAA,CAAA;AAEA,sBAAAwI,SAAA,CAAA,SAAA,CAAA,UAAA,CAAA;AACA,yBAAA,EAAgB,MAAA,OAAA,OAAAA,SAAA,OAAA,MAAA;gBAChB;cACA;AAGA,cAAA5K,QAAA,UAAA;;;;;;;;;;;AC1JA,uBAAS,eAAewC,SAAgB,gBAA0B;AAC9D,yBAAS,QAAQ,MAAgB;AAC7B,kBAAAA,QAAO,UAAU,kBAAkB,IAAnC;AACA,kBAAAA,QAAO,UAAU,iBAAjB;gBACH;AACD,+BAAe,KAAK,OAApB;cACH;AAED,cAAAvC,SAAA,SAAA,IAAe;;;;;;;;;;;;;AChBf,kBAAA,SAAA,oBAAA,CAAA;AACA,kBAAA,aAAA,QAAA,gBAAA,oBAAA,CAAA,CAAA;AAiBA,uBAAS,gBAAgB,OAAiB;AACtC,oBAAM,SAAuB,CAAA;AAE7B,oBAAM,YAAY,MAAM,WAAN,KAAsB,CAAA;AACxC,iBAAA,GAAA,SAAA,SAAA,GAAA,SAAS,EAAA,KAAT,WAAkB,SAAC,SAAoB;AACnC,sBAAI;AACJ,sBAAM,WAAW,QAAQ;AAGzB,sBAAI,aAAa,GAAG;AAChB,iCAAa,QAAQ,eAAe;AACpC,iCAAa,OAAA,kBAAkB,UAAlB;kBAChB;AAGD,sBAAI,aAAa,GAAG;AAChB,iCAAa,CAAA;AACb,iCAAa;AAGb,+BAAW,MAAM,QAAQ,SAAS,YAAjB;AAEjB,wBAAM,WAAW,CAAA;AACjB,wBAAM,WAAW,QAAQ;AACzB,wBAAM,iBAAiB,SAAS,UAAU;AAC1C,6BAAS,IAAI,GAAG,IAAI,gBAAgB,KAAK;AACrC,0BAAM,OAAO,SAAS,CAAD;AACrB,+BAAS,KAAK;wBACV,MAAM,KAAK;wBACX,OAAO,KAAK;sBAFF,CAAd;oBAIH;AACD,+BAAW,QAAQ;AAEnB,+BAAW,WAAW,gBAAgB,WAAA,SAAA,EAAE,OAAF,CAAD;kBACxC;AAED,sBAAI,YAAY;AACZ,2BAAO,KAAK,UAAZ;kBACH;gBACJ,CApCQ;AAqCT,uBAAO;cACV;AAED,cAAAA,SAAA,SAAA,IAAe;;;;;;;;;;;;;;AC9Df,kBAAA,aAAA,QAAA,gBAAA,oBAAA,CAAA,CAAA;AAGA,uBAAS,kBACL,UACA,QAA4C;AAA5C,oBAAA,WAAA,QAAA;AAAA,2BAAe,SAAS,cAAc,KAAvB;gBAA6B;AAG5C,oBAAIF,QAAO;AAGX,iBAAA,GAAA,SAAA,SAAA,GAAA,QAAQ,EAAA,KAAR,UAAiB,SAAA,MAAI;AACjB,sBAAI;AAGJ,sBAAI,OAAO,SAAS,UAAU;AAC1B,2BAAO,SAAS,eAAe,IAAxB;kBACV;AAGD,uBAAI,GAAA,SAAA,SAAA,GAAO,IAAP,MAAgB,UAAU;AAAA,wBAAA;AAC1B,2BAAO,SAAS,cAAc,KAAK,GAA5B;AACP,qBAAA,GAAA,SAAA,SAAA,GAAA,WAAA,KAAK,KAAL,EAAA,KAAA,UAAmB,SAAA,MAAI;AACnB,iCAAA,SAAA,EAAE,IAAF,EAAQ,KAAK,KAAK,MAAM,KAAK,KAA7B;oBACH,CAFD;AAKA,wBAAI,KAAK,YAAY,KAAK,SAAS,SAAS,GAAG;AAC3C,wCAAkB,KAAK,UAAU,KAAK,YAAL,CAAhB;oBACpB;kBACJ;AACD,0BAAQA,MAAK,YAAY,IAAjB;gBACX,CArBO;AAsBR,uBAAO,WAAA,SAAA,EAAEA,KAAF;cACV;AAED,cAAAE,SAAA,SAAA,IAAe;;;;;;;;;;;;;;;;;;;;;ACpCf,kBAAA,UAAA,QAAA,gBAAA,oBAAA,EAAA,CAAA;AAEA,kBAAA,cAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AACA,kBAAA,aAAA,QAAA,gBAAA,oBAAA,CAAA,CAAA;AAGA,kBAAA;;gBAAA,WAAA;AAKI,2BAAA4K,OAAYrI,SAAc;AACtB,yBAAK,SAASA;AACd,yBAAK,WAAW,CAAA;AAChB,yBAAK,kBAAkB,YAAA,SAAA;kBAC1B;AAOM,kBAAAqI,OAAA,UAAA,SAAP,SAAc,KAAa,MAAS;AAChC,wBAAI,CAAC,QAAQ,OAAO,SAAS;AAAY;AACzC,yBAAK,gBAAgB,GAArB,IAA4B;kBAC/B;AAGM,kBAAAA,OAAA,UAAA,OAAP,WAAA;AAAA,wBAAA,UAAA;AAAA,wBAAA,QAAA;AAEI,wBAAM5D,UAAS,KAAK,OAAO;AAG3B,wBAAI,eAA+BA,QAAO;AAC1C,yBAAI,GAAA,SAAA,SAAA,GAAc,YAAd,MAAgC;AAAO,qCAAe,CAAA;AAC1D,oBAAAA,QAAO,SAAQ,GAAA3E,SAAA,SAAA,GAAA,WAAA2E,QAAO,KAAP,EAAA,KAAA,UAAoB,SAAA,KAAG;AAAI,8BAAA,GAAA,UAAA,SAAA,GAAA,YAAY,EAAA,KAAZ,cAAsB,GAAV,MAAZ;oBAAoC,CAA/D;AAGf,wBAAI,sBAA+B,GAAA,MAAA,SAAA,GAAY,QAAA,SAAA,EAAO,+BAAnB;AACnC,0CAAqB,GAAA3E,SAAA,SAAA,GAAA,kBAAkB,EAAA,KAAlB,oBAA0B,SAAA,KAAG;AAAI,8BAAA,GAAA,UAAA,SAAA,GAAA,YAAY,EAAA,KAAZ,cAAA,GAAY;oBAAc,CAAzC;AACvC,qBAAA,GAAA,SAAA,SAAA,GAAA,kBAAkB,EAAA,KAAlB,oBAA2B,SAAC,KAAW;AACnC,6BAAO,QAAA,SAAA,EAAO,gCAAgC,GAAvC;oBACV,CAFiB;AAIlB,qBAAA,GAAA,SAAA,SAAA,GAAA,YAAA2E,QAAO,KAAP,EAAA,KAAA,WAAqB,SAAA6D,UAAO;AACxB,0BAAMC,mBAAkB,MAAK,gBAAgBD,QAArB;AACxB,4BAAK,cAAcA,UAASC,gBAA5B;oBACH,CAHD;AAMA,6BAA+B,KAAA,GAAAhG,OAAA,GAAA,SAAA,SAAA,GAAe,QAAA,SAAA,EAAO,+BAAtB,GAAA,KAAAA,IAAA,QAAA,MAAwD;AAA9E,0BAAA,KAAAA,IAAA,EAAA,GAAC,UAAO,GAAA,CAAA,GAAE,UAAO,GAAA,CAAA;AACtB,0BAAM,kBAAkB;AACxB,2BAAK,cAAc,SAAS,eAA5B;oBACH;AAGD,yBAAK,cAAL;AAEA,wBAAIkC,QAAO,kBAAkB;AAEzB,2BAAK,kBAAL;oBACH;kBACJ;AAOO,kBAAA4D,OAAA,UAAA,gBAAR,SAAsB,SAAiB,iBAAoB;AAAA,wBAAA;AACvD,wBAAI,mBAAmB,QAAQ,OAAO,oBAAoB,YAAY;AAElE;oBACH;AACD,yBAAI,GAAA,MAAA,SAAA,GAAA,YAAA,KAAK,QAAL,EAAA,KAAA,WAAmB,SAAA,MAAI;AAAI,6BAAA,KAAK,QAAL;oBAAoB,CAA/C,GAAkD;AAClD,8BAAQ,KAAK,0CAAY,OAAzB;oBACH,OAAM;AACH,0BAAM,IAAI,IAAI,gBAAgB,KAAK,MAAzB;AACV,wBAAE,MAAM;AACR,2BAAK,SAAS,KAAK,CAAnB;oBACH;kBACJ;AAGO,kBAAAA,OAAA,UAAA,oBAAR,WAAA;AACI,wBAAMrI,UAAS,KAAK;AACpB,wBAAM,eAAeA,QAAO;AAC5B,wBAAMyE,UAASzE,QAAO;AAGtB,wBAAM,sBAAsByE,QAAO;AACnC,wBAAM,aAAa,WAAA,SAAA,EACf,mDAAiD,sBAAmB,8HADrD;AAQnB,+BAAW,IAAI,cAAc,QAA7B;AACA,iCAAa,OAAO,UAApB;AAEA,+BAAW,IAAI,WAAWzE,QAAO,OAAO,IAAI,SAAlB,CAA1B;AAEA,wBAAI,gBAAwB;AAE5B,6BAAS,qBAAkB;AACvB,0BAAI,eAAe;AACf,qCAAa,aAAD;sBACf;oBACJ;AAGD,6BAASwI,QAAI;AACT,yCAAkB;AAClB,iCAAW,IAAI,cAAc,QAA7B;oBACH;AAGD,iCACK,GAAG,aAAa,SAACnK,IAAa;AAC3B,0BAAM,SAASA,GAAE;AACjB,0BAAM,UAAU,WAAA,SAAA,EAAE,MAAF;AAChB,0BAAI;AACJ,0BAAI;AAEJ,0BAAI,QAAQ,UAAU,YAAlB,GAAiC;AACjC,wBAAAmK,MAAI;AACJ;sBACH;AAED,0BAAI,QAAQ,YAAY,eAApB,KAAwC,MAAM;AAE9C,wBAAAA,MAAI;sBACP,OAAM;AACH,4BAAI,QAAQ,KAAK,YAAb,GAA4B;AAC5B,kCAAQ,QAAQ,KAAK,YAAb;AACR,oCAAU;wBACb,OAAM;AACH,8BAAM,UAAU,QAAQ,YAAY,WAApB;AAChB,8BAAI,WAAW,MAAM;AACjB,oCAAQ,QAAQ,KAAK,YAAb;AACR,sCAAU;0BACb;wBACJ;sBACJ;AAED,0BAAI,SAAS,SAAS;AAClB,2CAAkB;AAClB,4BAAM,eAAe,QAAQ,cAAR;AACrB,mCAAW,KAAKxI,QAAO,QAAQ,EAAE,iBAAiB,KAAlC,CAAhB;AACA,4BAAM,gBAAgB,WAAW,cAAX;AACtB,4BAAMmC,QACF,aAAa,OAAO,aAAa,QAAQ,IAAI,cAAc,QAAQ;AACvE,mCAAW,IAAI,QAAWA,QAAI,IAA9B;AAGA,4BAAI,wBAAwB,MAAM;AAC9B,qCAAW,IAAI,OAAU,aAAa,MAAM,cAAc,SAAS,IAAC,IAApE;wBACH,WAAU,wBAAwB,QAAQ;AACvC,qCAAW,IAAI,OAAU,aAAa,MAAM,aAAa,SAAS,IAAC,IAAnE;wBACH;AAED,yCAAgB,GAAA,aAAA,SAAA,GAAkB,WAAA;AAC9B,qCAAW,IAAI,cAAc,SAA7B;wBACH,GAAE,GAFa;sBAGnB,OAAM;AACH,wBAAAqG,MAAI;sBACP;oBACJ,CAlDL,EAmDK,GAAG,cAAc,WAAA;AACd,sBAAAA,MAAI;oBACP,CArDL;kBAsDH;AAEO,kBAAAH,OAAA,UAAA,gBAAR,WAAA;AAAA,wBAAA;AACI,wBAAMrI,UAAS,KAAK;AACpB,wBAAM,eAAeA,QAAO;AAG5B,qBAAA,GAAA,SAAA,SAAA,GAAA,YAAA,KAAK,QAAL,EAAA,KAAA,WAAsB,SAAA,MAAI;AACtB,0BAAM,QAAQ,KAAK;AACnB,0BAAI,OAAO;AACP,qCAAa,OAAO,KAApB;sBACH;oBACJ,CALD;kBAMH;AAOM,kBAAAqI,OAAA,UAAA,WAAP,SAAgB,KAAW;AACvB,wBAAM,WAAW,KAAK;AACtB,6BAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,IAAI,GAAG,KAAK;AAC7C,0BAAI,SAAS,CAAD,EAAI,QAAQ;AAAK,+BAAO,SAAS,CAAD;oBAC/C;AAED,2BAAO,SAAS,CAAD;kBAClB;AAKM,kBAAAA,OAAA,UAAA,eAAP,WAAA;AAAA,wBAAA;AACI,qBAAA,GAAA,SAAA,SAAA,GAAA,YAAA,KAAK,QAAL,EAAA,KAAA,WAAsB,SAAA,MAAI;AAAA,0BAAA;AACtB,uBAAA,GAAA,aAAA,SAAA,IAAY,GAAA,MAAA,SAAA,GAAA,YAAA,KAAa,eAAb,EAAA,KAAA,WAAkC,IAAlC,GAAyC,GAArD;oBACH,CAFD;kBAGH;AACL,yBAAAA;gBAAC,EA5MD;;AA8MA,cAAA5K,SAAA,SAAA,IAAe;;;;;ACzNf,cAAAD,QAAA,UAAiB,oBAAQ,GAAiC;;;;;ACA1D,kBAAA,SAAa,oBAAQ,GAAsB;AAE3C,cAAAA,QAAA,UAAA;;;;;ACFA,kCAAQ,GAA8B;AACtC,kBAAA2C,QAAW,oBAAQ,CAAsB;AAEzC,cAAA3C,QAAA,UAAA2C,MAAA,OAAA;;;;;ACHA,kBAAAR,KAAQ,oBAAQ,CAAqB;AACrC,kBAAA,WAAe,oBAAQ,EAAwB;AAC/C,kBAAA,aAAiB,oBAAQ,EAA0B;AACnD,kBAAA,QAAY,oBAAQ,EAAoB;AAExC,kBAAA,sBAAA,MAAA,WAAA;AAA6C,2BAAA,CAAA;cAAe,CAAE;AAI9D,cAAAA,GAAA,EAAG,QAAA,UAAA,MAAA,MAAA,QAAA,oBAAA,GAA4D;gBAC/D,MAAA,SAAAwD,MAAA1C,KAAA;AACA,yBAAA,WAAA,SAAAA,GAAA,CAAA;gBACA;cACA,CAAC;;;;;ACbD,kBAAA,SAAa,oBAAQ,GAAyB;AAE9C,cAAAjD,QAAA,UAAA;;;;;ACFA,kCAAQ,GAAiC;AACzC,kBAAA2C,QAAW,oBAAQ,CAAsB;AAEzC,cAAA3C,QAAA,UAAA2C,MAAA,OAAA;;;;;ACHA,kBAAAR,KAAQ,oBAAQ,CAAqB;AACrC,kBAAA,WAAe,oBAAQ,GAA8B,EAAA;AAIrD,cAAAA,GAAA,EAAG,QAAA,UAAA,MAAA,KAAA,GAA+B;gBAClC,SAAA,SAAA,QAAAiB,IAAA;AACA,yBAAA,SAAAA,EAAA;gBACA;cACA,CAAC;;;;;ACTD,kBAAA,cAAkB,oBAAQ,EAA0B;AACpD,kBAAA,aAAiB,oBAAQ,EAA0B;AACnD,kBAAA,kBAAsB,oBAAQ,EAAgC;AAC9D,kBAAA,uBAA2B,oBAAQ,EAA4C,EAAA;AAG/E,kBAAA,eAAA,SAAA,YAAA;AACA,uBAAA,SAAAH,KAAA;AACA,sBAAAG,KAAA,gBAAAH,GAAA;AACA,sBAAA0C,QAAA,WAAAvC,EAAA;AACA,sBAAA,SAAAuC,MAAA;AACA,sBAAA,IAAA;AACA,sBAAA,SAAA,CAAA;AACA,sBAAA;AACA,yBAAA,SAAA,GAAA;AACA,0BAAAA,MAAA,GAAA;AACA,wBAAA,CAAA,eAAA,qBAAA,KAAAvC,IAAA,GAAA,GAAA;AACA,6BAAA,KAAA,aAAA,CAAA,KAAAA,GAAA,GAAA,CAAA,IAAAA,GAAA,GAAA,CAAA;oBACA;kBACA;AACA,yBAAA;gBACA;cACA;AAEA,cAAApD,QAAA,UAAA;;;gBAGA,SAAA,aAAA,IAAA;;;gBAGA,QAAA,aAAA,KAAA;cACA;;;;;AC/BA,kBAAA,SAAa,oBAAQ,GAAwB;AAE7C,cAAAA,QAAA,UAAA;;;;;ACFA,kBAAA,OAAW,oBAAQ,GAAuB;AAE1C,kBAAA,iBAAA,MAAA;AAEA,cAAAA,QAAA,UAAA,SAAAiD,KAAA;AACA,oBAAAqG,OAAArG,IAAA;AACA,uBAAAA,QAAA,kBAAAA,eAAA,SAAAqG,SAAA,eAAA,OAAA,OAAAA;cACA;;;;;ACPA,kCAAQ,GAAgC;AACxC,kBAAA,eAAmB,oBAAQ,EAAkC;AAE7D,cAAAtJ,QAAA,UAAA,aAAA,OAAA,EAAA;;;;;;ACFA,kBAAAmC,KAAQ,oBAAQ,CAAqB;AACrC,kBAAA,QAAY,oBAAQ,EAA8B,EAAA;AAClD,kBAAA,sBAA0B,oBAAQ,EAAqC;AACvE,kBAAA,0BAA8B,oBAAQ,EAA0C;AAEhF,kBAAA,gBAAA,oBAAA,MAAA;AACA,kBAAA,iBAAA,wBAAA,MAAA;AAIA,cAAAA,GAAA,EAAG,QAAA,SAAA,OAAA,MAAA,QAAA,CAAA,iBAAA,CAAA,eAAA,GAA0E;gBAC7E,MAAA,SAAA,KAAA,YAAA;AACA,yBAAA,MAAA,MAAA,YAAA,UAAA,SAAA,IAAA,UAAA,CAAA,IAAA,MAAA;gBACA;cACA,CAAC;;;;;;;;;;;;ACVD,kBAAA,UAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AACA,kBAAA,UAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AACA,kBAAA,UAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AACA,kBAAA,UAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AACA,kBAAA,UAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AACA,kBAAA,UAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AACA,kBAAA,UAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AACA,kBAAA,cAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AACA,kBAAA,UAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AACA,kBAAA,UAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AACA,kBAAA,WAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AACA,kBAAA,WAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AACA,kBAAA,WAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AACA,kBAAA,WAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AACA,kBAAA,WAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AACA,kBAAA,WAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AACA,kBAAA,WAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AACA,kBAAA,WAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AACA,kBAAA,WAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AACA,kBAAA,WAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AACA,kBAAA,WAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AACA,kBAAA,SAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AACA,kBAAA,WAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AACA,kBAAA,SAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AAMA,cAAAlC,SAAA,SAAA,IAAe;gBACX,MAAM,QAAA,SAAA;gBACN,MAAM,QAAA,SAAA;gBACN,QAAQ,QAAA,SAAA;gBACR,MAAM,QAAA,SAAA;gBACN,WAAW,QAAA,SAAA;gBACX,eAAe,QAAA,SAAA;gBACf,UAAU,QAAA,SAAA;gBACV,UAAU,YAAA,SAAA;gBACV,SAAS,QAAA,SAAA;gBACT,OAAO,QAAA,SAAA;gBACP,WAAW,SAAA,SAAA;gBACX,WAAW,SAAA,SAAA;gBACX,OAAO,SAAA,SAAA;gBACP,OAAO,SAAA,SAAA;gBACP,QAAQ,SAAA,SAAA;gBACR,UAAU,SAAA,SAAA;gBACV,MAAM,SAAA,SAAA;gBACN,YAAY,SAAA,SAAA;gBACZ,MAAM,SAAA,SAAA;gBACN,MAAM,SAAA,SAAA;gBACN,OAAO,SAAA,SAAA;gBACP,MAAM,OAAA,SAAA;gBACN,WAAW,SAAA,SAAA;gBACX,MAAM,OAAA,SAAA;cAxBK;;;;;;;;;;;;AC7Bf,kBAAA,YAAA,QAAA,gBAAA,oBAAA,EAAA,CAAA;AACA,kBAAA,aAAA,QAAA,gBAAA,oBAAA,CAAA,CAAA;AAIA,kBAAA;;gBAAA,SAAA,QAAA;AAAmB,0BAAA,UAAAgL,OAAA,MAAA;AACf,2BAAAA,MAAYzI,SAAc;AAA1B,wBAAA,QAAA;AACI,wBAAM,QAAQ,WAAA,SAAA,EACV,qHADU;AAKd,4BAAA,OAAA,KAAA,MAAM,OAAOA,OAAb,KAAoB;;kBACvB;AAKM,kBAAAyI,MAAA,UAAA,eAAP,WAAA;AACI,wBAAMzI,UAAS,KAAK;AACpB,wBAAM,gBAAgBA,QAAO,UAAU,iBAAjB;AAEtB,wBAAI,eAAe;AAEf,sBAAAA,QAAO,UAAU,iBAAjB;oBACH;AAGD,oBAAAA,QAAO,IAAP,IAAA,EAAc,MAAd;AAEA,wBAAI,eAAe;AAEf,sBAAAA,QAAO,UAAU,cAAjB;AACA,sBAAAA,QAAO,UAAU,iBAAjB;oBACH;kBACJ;AAKM,kBAAAyI,MAAA,UAAA,kBAAP,WAAA;AACI,wBAAMzI,UAAS,KAAK;AACpB,wBAAIA,QAAO,IAAI,kBAAkB,MAA7B,GAAsC;AACtC,2BAAK,OAAL;oBACH,OAAM;AACH,2BAAK,SAAL;oBACH;kBACJ;AACL,yBAAAyI;gBAAC,EA3CkB,UAAA,SAAA,CAAnB;;AA6CA,cAAAhL,SAAA,SAAA,IAAe;;;;;;;;;;;;;;;;;AClDf,kBAAA,iBAAA,QAAA,gBAAA,oBAAA,EAAA,CAAA;AACA,kBAAA,aAAA,QAAA,gBAAA,oBAAA,CAAA,CAAA;AAGA,kBAAA,SAAA,oBAAA,CAAA;AAEA,kBAAA,UAAA,oBAAA,CAAA;AAEA,kBAAA;;gBAAA,SAAA,QAAA;AAAmB,0BAAA,UAAAiL,OAAA,MAAA;AAEf,2BAAAA,MAAY1I,SAAc;AAA1B,wBAAA,QAAA;AACI,wBAAM,QAAQ,WAAA,SAAA,EACV,uFADU;AAGd,wBAAM,eAAe;sBACjB,OAAO;sBACP,OAAO;sBACP,MAAM;sBACN,MAAM,CACF;wBAAE,OAAO,WAAA,SAAA,EAAE,aAAF;wBAAkB,OAAO;sBAAlC,GACA;wBAAE,OAAO,WAAA,SAAA,EAAE,aAAF;wBAAkB,OAAO;sBAAlC,GACA;wBAAE,OAAO,WAAA,SAAA,EAAE,aAAF;wBAAkB,OAAO;sBAAlC,GACA;wBAAE,OAAO,WAAA,SAAA,EAAE,aAAF;wBAAkB,OAAO;sBAAlC,GACA;wBAAE,OAAO,WAAA,SAAA,EAAE,aAAF;wBAAkB,OAAO;sBAAlC,GACA;wBACI,OAAO,WAAA,SAAA,EAAE,QAAMA,QAAO,QAAQ,EAAE,sCAAjB,IAA8C,MAAtD;wBACP,OAAO;sBAFX,CANE;sBAWN,cAAc,SAAA,aAAC,OAAa;AAExB,8BAAK,QAAQ,KAAb;sBACH;oBAlBgB;AAoBrB,4BAAA,OAAA,KAAA,MAAM,OAAOA,SAAQ,YAArB,KAAkC;AAElC,wBAAM,kBAAkBA,QAAO,OAAO;AAEtC,wBAAI,iBAAiB;AACjB,4BAAK,cAAc,CAAA;AACnB,4BAAK,mBAAL;AACA,4BAAK,YAAL;oBACH;;kBACJ;AAMM,kBAAA0I,MAAA,UAAA,UAAP,SAAe,OAAa;AACxB,wBAAM1I,UAAS,KAAK;AACpB,wBAAM,iBAAiBA,QAAO,UAAU,0BAAjB;AACvB,wBAAI,kBAAkBA,QAAO,UAAU,MAAM,cAAvB,GAAwC;AAG1D,2BAAK,iBAAiB,KAAtB;oBACH,OAAM;AAAA,0BAAA;AAEH,2BACI,GAAA,SAAA,SAAA,GAAA,WAAA,CAAC,MAAM,MAAM,MAAM,SAAS,MAAM,MAAM,QAAQ,IAAhD,CAAA,EAAA,KAAA,UACI,WAAA,SAAA,EAAE,cAAF,EAAkB,YAAlB,CADJ,IAEI,IACN;AACE;sBACH;AAED,sBAAAA,QAAO,IAAP,IAAA,EAAc,eAAe,KAA7B;oBACH;AAGD,8BAAU,SAAS,KAAK,uBAAL;kBACtB;AAKO,kBAAA0I,MAAA,UAAA,yBAAR,WAAA;AACI,wBAAM1I,UAAS,KAAK;AACpB,wBAAM,MAAMA,QAAO,UAAU,0BAAjB;AACZ,wBAAMkB,MAAK,OAAA,cAAA;AACX,+BAAA,SAAA,EAAE,GAAF,EAAO,KAAK,MAAMA,GAAlB;kBACH;AAKO,kBAAAwH,MAAA,UAAA,qBAAR,WAAA;AAAA,wBAAA,QAAA;AACI,wBAAM1I,UAAS,KAAK;AACpB,oBAAAA,QAAO,IAAI,WAAW,aAAa,KAAK,WAAA;AACpC,4BAAK,YAAL;oBACH,CAFD;kBAGH;AAKO,kBAAA0I,MAAA,UAAA,cAAR,WAAA;AACI,wBAAM1I,UAAS,KAAK;AACpB,wBAAM,YAAY,KAAK,OAAO;AAC9B,wBAAM,kBAAkBA,QAAO,OAAO;AACtC,wBAAM,SAAQ,GAAA,MAAA,SAAA,GAAA,SAAS,EAAA,KAAT,WAAe,gBAAN;AACvB,wBAAM,WAAuB,CAAA;AAC7B,qBAAA,GAAA,SAAA,SAAA,GAAA,KAAK,EAAA,KAAL,OAAc,SAAC,MAAMJ,QAAK;AACtB,0BAAM,QAAQ,WAAA,SAAA,EAAE,IAAF;AACd,0BAAIsB,MAAK,MAAM,KAAK,IAAX;AACT,0BAAM,MAAM,MAAM,YAAN;AACZ,0BAAMwD,QAAO,MAAM,KAAN;AACb,0BAAI,CAACxD,KAAI;AACL,wBAAAA,MAAK,OAAA,cAAA;AACL,8BAAM,KAAK,MAAMA,GAAjB;sBACH;AAED,0BAAI,CAACwD;AAAM;AACX,+BAAS,KAAK;wBACV;wBACA,IAAExD;wBACF,MAAIwD;sBAHM,CAAd;oBAKH,CAhBI;AAkBL,yBAAI,GAAA,WAAA,SAAA,GAAe,KAAK,WAApB,OAAqC,GAAA,WAAA,SAAA,GAAe,QAAf,GAA0B;AAC/D,2BAAK,cAAc;AACnB,yCAAmB,gBAAgB,QAAD;oBACrC;kBACJ;AAKO,kBAAAgE,MAAA,UAAA,mBAAR,SAAyB,OAAa;AAAtC,wBAAA,QAAA;;AACI,wBAAM1I,UAAS,KAAK;AACpB,wBAAM,aAAaA,QAAO;AAE1B,wBAAM,iBAAgBuC,MAAA,WAAW,0BAAX,OAAsC,QAAAA,QAAA,SAAA,SAAAA,IAAE,MAAM,CAAR;AAE5D,wBAAM,cAAc,CAChB,OACA,SACA,SACA,MACA,MACA,MACA,MACA,OACA,MACA,YAVgB;AAapB,wBAAM,YAAY,WAAA,SAAA,EAAE,WAAW,sBAAX,CAAF;AAClB,wBAAI,UAAU,WAAA,SAAA,EAAE,WAAW,oBAAX,CAAF;AAEd,wBACI,QAAQ,MAAM,CAAd,EAAiB,cAAc,WAAA,SAAA,EAAE,QAAA,OAAF,EAAW,MAAM,CAAjB,EAAoB,aACnD,CAAC,QAAQ,MAAM,CAAd,EAAiB,aACpB;AACE,gCAAU,QAAQ,KAAR;oBACb;AAED,wBAAM,eAA6B,CAAA;AACnC,iCAAa,KAAK,UAAU,WAAWvC,OAArB,CAAlB;AAEA,wBAAM,YAAsB,CAAA;AAE5B,wBAAM,aAAS,KAAG,WAAW,SAAX,OAAqB,QAAA,OAAA,SAAA,SAAA,GAAE,wBAAwB;AAEjE,kCAAS,QAAT,cAAS,SAAA,UAAT,GAAA,SAAA,SAAA,GAAA,SAAS,EAAA,KAAT,WAAmB,SAAC,MAAMJ,QAAK;AAC3B,0BAAI,SAAS,aAAa,CAAD,EAAI,QAAhB,GAA2B;AACpC,kCAAU,KAAKA,MAAf;sBACH;AACD,0BAAI,SAAS,QAAQ,WAAWI,OAAnB,EAA2B,QAA3B,GAAsC;AAC/C,kCAAU,KAAKJ,MAAf;sBACH;oBACJ,CAPQ;AAST,wBAAI,IAAI;AAER,2BAAO,aAAa,CAAD,EAAI,QAAhB,MAA8B,QAAQ,WAAWI,OAAnB,EAA2B,QAA3B,GAAsC;AAEvE,0BAAI,CAAC,aAAa,CAAD,EAAI,MAAM,CAAtB;AAA0B;AAC/B,0BAAI,IAAI,WAAA,SAAA,EAAE,aAAa,CAAD,EAAI,KAAhB,EAAuB,QAAvB,CAAF;AACR,mCAAa,KAAK,CAAlB;AACA;oBACH;AAED,qCAAY,QAAZ,iBAAY,SAAA,UAAZ,GAAA,SAAA,SAAA,GAAA,YAAY,EAAA,KAAZ,cAAsB,SAAC,OAAOJ,QAAK;AAE/B,0BAAI,CAAC,MAAK,OAAO,OAAO,WAAnB,GAAiC;AAClC,4BAAM,KAAK,WAAA,SAAA,EAAE,KAAF;AACX,4BAAM,cAAc,MAAM,OAAN,EAAe,QAAf;AAEpB,2BAAG,KAAK,KAAG,MAAM,KAAN,CAAX;AAEA,oCAAY,aAAa,GAAG,QAAH,GAAc,MAAM,QAAN,CAAvC;AAEA,8BAAM,OAAN;sBACH;oBACJ,CAZW;AAcZ,+BAAW,mBACP,cAAc,SAAS,UAAU,CAAD,CAAhC,GACA,cAAc,SAAS,UAAU,CAAD,CAAhC,CAFJ;kBAIH;AAMO,kBAAA8I,MAAA,UAAA,SAAR,SAAe,MAAkB,WAAmB;AAApD,wBAAA,QAAA;;AACI,wBAAI,CAAC;AAAM,6BAAO;AAClB,yBAAI,GAAA,UAAA,SAAA,GAAA,SAAS,EAAA,KAAT,WAAmB,SAAI,QAAJ,SAAI,SAAA,SAAJ,KAAM,YAAN,CAAV;AAAgC,6BAAO;AACpD,wBAAI,QAAQ;AACZ,qBAAAnG,MAAA,KAAK,SAAL,OAAe,QAAAA,QAAA,SAAA,UAAA,GAAA,SAAA,SAAA,GAAAA,GAAA,EAAA,KAAAA,KAAU,SAAA,OAAK;AAC1B,8BAAQ,MAAK,OAAO,WAAA,SAAA,EAAE,KAAF,GAAU,SAAtB;oBACX,CAFc;AAGf,2BAAO;kBACV;AAIM,kBAAAmG,MAAA,UAAA,kBAAP,WAAA;AACI,wBAAM1I,UAAS,KAAK;AACpB,wBAAM,MAAM;AACZ,wBAAM,WAAWA,QAAO,IAAI,kBAAkB,aAA7B;AACjB,wBAAI,IAAI,KAAK,QAAT,GAAoB;AACpB,2BAAK,OAAL;oBACH,OAAM;AACH,2BAAK,SAAL;oBACH;kBACJ;AACL,yBAAA0I;gBAAC,EA9NkB,eAAA,SAAA,CAAnB;;AAgOA,cAAAjL,SAAA,SAAA,IAAe;;;;;AC7Of,cAAAD,QAAA,UAAiB,oBAAQ,GAAoC;;;;;ACA7D,kBAAA,SAAa,oBAAQ,GAAyB;AAE9C,cAAAA,QAAA,UAAA;;;;;ACFA,kCAAQ,GAAiC;AACzC,kBAAA,OAAW,oBAAQ,CAAsB;AAEzC,kBAAA,CAAA,KAAA;AAAA,qBAAA,OAAA,EAA6B,WAAA,KAAA,UAAA;AAG7B,cAAAA,QAAA,UAAA,SAAA+J,WAAA9G,KAAA,UAAA+G,QAAA;AACA,uBAAA,KAAA,KAAA,UAAA,MAAA,MAAA,SAAA;cACA;;;;;ACRA,kBAAA7H,KAAQ,oBAAQ,CAAqB;AACrC,kBAAA,aAAiB,oBAAQ,EAA2B;AACpD,kBAAA,QAAY,oBAAQ,EAAoB;AAExC,kBAAA,aAAA,WAAA,QAAA,WAAA;AACA,kBAAAgJ,MAAA;AACA,kBAAA,MAAA;AACA,kBAAAC,MAAA;AAEA,kBAAA,MAAA,SAAA,OAAAxG,SAAAa,SAAA;AACA,oBAAA,OAAAA,QAAA,OAAAb,UAAA,CAAA;AACA,oBAAA,OAAAa,QAAA,OAAAb,UAAA,CAAA;AACA,oBAAA,IAAA,KAAA,KAAA,KAAA,CAAAwG,IAAA,KAAA,IAAA,KAAAA,IAAA,KAAA,KAAA,KAAA,CAAA,IAAA,KAAA,IAAA,GAAA;AACA,yBAAA,QAAA,MAAA,WAAA,CAAA,EAAA,SAAA,EAAA;gBACA;AAAG,uBAAA;cACH;AAEA,kBAAA,SAAA,MAAA,WAAA;AACA,uBAAA,WAAA,cAAA,MAAA,sBACA,WAAA,QAAA,MAAA;cACA,CAAC;AAED,kBAAA,YAAA;AAEA,gBAAAjJ,GAAA,EAAK,QAAA,QAAA,MAAA,MAAA,QAAA,OAAA,GAA6C;;kBAElD,WAAA,SAAA4H,WAAA9G,KAAA,UAAA+G,QAAA;AACA,wBAAA,SAAA,WAAA,MAAA,MAAA,SAAA;AACA,2BAAA,OAAA,UAAA,WAAA,OAAA,QAAAmB,KAAA,GAAA,IAAA;kBACA;gBACA,CAAG;cACH;;;;;;;;;;;;;AC1BA,kBAAA,cAAA,QAAA,gBAAA,oBAAA,EAAA,CAAA;AAEA,kBAAA,aAAA,QAAA,gBAAA,oBAAA,CAAA,CAAA;AACA,kBAAA,sBAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AACA,kBAAA,cAAA,QAAA,aAAA,oBAAA,EAAA,CAAA;AACA,kBAAA,UAAA,QAAA,gBAAA,oBAAA,EAAA,CAAA;AAEA,kBAAA,UAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AACA,kBAAA,UAAA,oBAAA,CAAA;AAEA,kBAAAE;;gBAAA,SAAA,QAAA;AAAmB,0BAAA,UAAAA,OAAA,MAAA;AACf,2BAAAA,MAAY7I,SAAc;AAA1B,wBAAA,QAAA;AACI,wBAAM,QAAQ,WAAA,SAAA,EACV,qFADU;AAGd,4BAAA,OAAA,KAAA,MAAM,OAAOA,OAAb,KAAoB;AAGpB,4BAAA,SAAA,EAAUA,OAAV;;kBACH;AAKM,kBAAA6I,MAAA,UAAA,eAAP,WAAA;AACI,wBAAM7I,UAAS,KAAK;AACpB,wBAAI;AAQJ,wBAAI,iBAAiBA,QAAO,UAAU,0BAAjB;AACrB,wBAAM,YAAYA,QAAO;AACzB,wBAAMV,QAAO,UAAU,KAAV;AACb,wBAAM,YAAW,GAAA,MAAA,SAAA,GAAAA,KAAI,EAAA,KAAJA,KAAI;AAErB,wBAAI,aAAa,QAAA,SAAS;AACtB,0BAAM,cAAc,UAAU,SAAV;AAEpB,sBAAAU,QAAO,UAAU,kBAAkB,aAA2B,MAAM,IAApE;AAGA,uCAAiBA,QAAO,UAAU,0BAAjB;oBACpB;AAGD,wBAAI,kBAAkBA,QAAO,UAAU,MAAM,cAAvB,GAAwC;AAC1D;oBACH;AAED,wBAAI,KAAK,UAAU;AACf,0BAAI0E,QAAO;AACX,0BAAI,OAAO;AAGX,kCAAY1E,QAAO,UAAU,0BAAjB;AAEZ,0BAAI,CAAC,WAAW;AACZ;sBACH;AAED,0BAAI,UAAU,YAAV,MAA4B,KAAK;AACjC,4BAAM,cAAc,YAAA,eAAe,SAAf;AAEpB,oCAAY,WAAA,SAAA,EAAE,WAAF;sBACf;AAED,sBAAA0E,QAAO,UAAU,MAAM,CAAhB,EAAmB;AAC1B,6BAAO,UAAU,KAAK,MAAf;AAGP,2BAAK,YAAYA,OAAM,IAAvB;oBACH,OAAM;AAEH,0BAAI1E,QAAO,UAAU,iBAAjB,GAAqC;AAErC,6BAAK,YAAY,IAAI,EAArB;sBACH,OAAM;AAEH,6BAAK,YAAYA,QAAO,UAAU,iBAAjB,GAAqC,EAAtD;sBACH;oBACJ;kBACJ;AAOO,kBAAA6I,MAAA,UAAA,cAAR,SAAoBnE,OAAcG,OAAY;AAC1C,wBAAM,OAAO,oBAAA,SAAA,EAAgB,KAAK,QAAQH,OAAMG,KAAnC;AACb,wBAAM,QAAQ,IAAI,QAAA,SAAA,EAAM,MAAM,IAAhB;AACd,0BAAM,OAAN;kBACH;AAKM,kBAAAgE,MAAA,UAAA,kBAAP,WAAA;AACI,wBAAM7I,UAAS,KAAK;AACpB,wBAAI,YAAA,SAAA,EAASA,OAAT,GAAkB;AAClB,2BAAK,OAAL;oBACH,OAAM;AACH,2BAAK,SAAL;oBACH;kBACJ;AACL,yBAAA6I;gBAAC,EAnGkB,YAAA,SAAA,CAAnB;;AAqGA,cAAApL,SAAA,SAAA,IAAeoL;;;;;;;;;;;;;;;AC7Gf,kBAAA,SAAA,oBAAA,CAAA;AACA,kBAAA,aAAA,QAAA,gBAAA,oBAAA,CAAA,CAAA;AACA,kBAAA,cAAA,QAAA,aAAA,oBAAA,EAAA,CAAA;AACA,kBAAA,SAAA,oBAAA,GAAA;AAEA,uBAAA,UAAyB7I,SAAgB0E,OAAcG,OAAY;AAE/D,oBAAM,cAAc,OAAA,UAAU,YAAV;AACpB,oBAAM,cAAc,OAAA,UAAU,YAAV;AACpB,oBAAM,UAAU,OAAA,UAAU,QAAV;AAChB,oBAAM,WAAW,OAAA,UAAU,SAAV;AAGjB,oBAAM,gBAAgB,YAAA,SAAA,EAAS7E,OAAT,IAAmB,iBAAiB;AAE1D,oBAAI;AAKJ,yBAAS,iBAAc;AACnB,sBAAI,CAAC,YAAA,SAAA,EAASA,OAAT;AAAkB;AAEvB,sBAAM,YAAYA,QAAO,UAAU,0BAAjB;AAClB,sBAAI,CAAC;AAAW;AAChB,kBAAAA,QAAO,UAAU,kBAAkB,SAAnC;AACA,kBAAAA,QAAO,UAAU,iBAAjB;AAEA,kCAAgB;gBACnB;AAOD,yBAAS,WAAW0E,OAAcG,OAAY;AAY1C,sBAAM,aAAaH,MAAK,QAAQ,MAAM,MAAnB,EAA2B,QAAQ,MAAM,MAAzC;AAEnB,sBAAM,QAAoB,WAAA,SAAA,EAAE,wBAAsB,aAAU,MAAlC;AAC1B,sBAAM,UAAU,MAAM,MAAM,CAAZ;AAGhB,0BAAQ,YAAYA;AAGpB,0BAAQ,OAAOG;AAEf,sBAAI,YAAA,SAAA,EAAS7E,OAAT,GAAkB;AAElB,mCAAc;AACd,oBAAAA,QAAO,IAAP,IAAA,EAAc,cAAc,KAA5B;kBACH,OAAM;AAEH,oBAAAA,QAAO,IAAP,IAAA,EAAc,cAAc,KAA5B;kBACH;gBACJ;AAKD,yBAAS,UAAO;AACZ,sBAAI,CAAC,YAAA,SAAA,EAASA,OAAT,GAAkB;AACnB;kBACH;AAED,iCAAc;AAUd,sBAAI,cAAc,YAAd,MAAgC,KAAK;AAAA,wBAAA;AACrC,wBAAM,WAAW,cAAc,MAAM,CAApB;AACjB,wBAAM,iBAAiB,SAAS;AAGhC,wBAAI,mBAAkB,GAAA,UAAA,SAAA,GAAA,WAAA,YAAA,SAAA,EAAA,KAAA,UAAmB,eAAe,QAAlC,GAA6C;AAE/D,qCAAe,YAAY,SAAS;oBACvC,OAAM;AAEH,sBAAAA,QAAO,IAAP,IAAA,EAAc,cAAc,WAAW,SAAS,YAAY,SAA5D;oBACH;kBACJ,OAAM;AAEH,wBAAM,cAAc,YAAA,eAAe,aAAf;AAEpB,wBAAM,mBAAmB,YAAY;AAErC,oBAAAA,QAAO,IAAP,IAAA,EAAc,cAAc,WAAW,mBAAmB,SAA1D;kBACH;gBACJ;AAMD,yBAAS,UAAU0E,OAAcG,OAAY;AAEzC,sBAAM,QAAQ7E,QAAO,OAAO,UAAU0E,OAAMG,KAA9B;AACd,sBAAI,UAAU,QAAW;kBAExB,WAAU,UAAU,MAAM;AAEvB,2BAAO;kBACV,OAAM;AAEH,oBAAA7E,QAAO,OAAO,YAAY,OAAO,SAAjC;kBACH;AACD,yBAAO;gBACV;AAED,oBAAM,OAAO;kBACT,OAAO;kBACP,QAAQ;;;;kBAMR,MAAM,CACF;;oBAEI,OAAOA,QAAO,QAAQ,EAAE,oCAAjB;;oBAEP,KAAK,4EAEa,cAAW,qIAGFA,QAAO,QAAQ,EAAE,gDAAjB,IAA8C,yGAGvD,cAAW,qIAGFA,QAAO,QAAQ,EAAE,QAAjB,IAAqB,uKAGR,UAAO,uDAC7BA,QAAO,QAAQ,EAAE,cAAjB,IAAsB,oGAEA,WAAQ,yCAAuC,gBAAa,yCAClFA,QAAO,QAAQ,EAAE,gDAAjB,IAA8C;;oBAKhE,QAAQ;;sBAEJ;wBACI,UAAU,MAAM;wBAChB,MAAM;wBACN,IAAI,SAAAN,MAAA;AAAA,8BAAA,WAAA,WAAA;;AAEA,8BAAM,0BAA0BM,QAAO,UAAU,0BAAjB;AAChC,8BAAM,QAAQ,4BAAuB,QAAvB,4BAAuB,SAAA,SAAvB,wBAAyB,MAAM,CAA/B;AAGd,0BAAAA,QAAO,UAAU,iBAAjB;AACA,8BAAM,UAAUA,QAAO,UAClB,0BADW,EACiB,CADjB,EAEX,QAFW;AAGhB,8BAAM8C,aAAY,OAAO,aAAP;AAElB,8BAAM,QAAQ,WAAA,SAAA,EAAE,MAAM,WAAR;AACd,8BAAM,QAAQ,WAAA,SAAA,EAAE,MAAM,WAAR;AACd,8BAAI+B,SAAO,GAAA,MAAA,SAAA,GAAA,YAAA,MAAM,IAAN,CAAA,EAAA,KAAA,SAAA;AACX,8BAAIH,SAAO,GAAA,MAAA,SAAA,GAAA,YAAA,MAAM,IAAN,CAAA,EAAA,KAAA,SAAA;AAEX,8BAAIpF,QAAe;AAEnB,8BAAIwD,cAAa,EAACA,eAAS,QAATA,eAAS,SAAA,SAATA,WAAW,cAAa;AACtC,4BAAAxD,SAAIiD,MAAG,OAAA,WAAWO,YAAW,OAAtB,OAA8B,QAAAP,QAAA,SAAA,UAAA,GAAA,MAAA,SAAA,GAAAA,GAAA,EAAA,KAAAA,GAAA;0BACxC;AAGD,8BAAM0F,YAAW3I,UAAI,QAAJA,UAAI,SAAA,SAAJA,MAAM,QAAQ,UAAU,EAAxB;AACjB,8BAAM,eAAW,KAAG2I,cAAQ,QAARA,cAAQ,SAAA,SAARA,UAAU,YAAM,QAAA,OAAA,SAAA,KAAI;AAKxC,8BAAI,eAAevD,MAAK,QAAQ;AAC5B,gCAAM,YAAYA,MAAK,UAAU,GAAG,WAAlB;AAClB,gCAAM,UAAUA,MAAK,UAAU,WAAf;AAChB,gCAAIuD,cAAa,WAAW;AACxB,8BAAAvD,QAAOuD,YAAW;4BACrB;0BACJ;AAED,8BAAI,CAACpD;AAAM;AAEX,8BAAI,CAACH;AAAM,4BAAAA,QAAOG;AAElB,8BAAI,CAAC,UAAUH,OAAMG,KAAP;AAAc;AAU5B,+BAAI,UAAK,QAAL,UAAK,SAAA,SAAL,MAAO,cAAa,KAAK;AACzB,kCAAM,aAAa,QAAQA,KAA3B;AACA,kCAAM,YAAYH;AAElB,mCAAO;0BACV;AAGD,+BAAI,UAAK,QAAL,UAAK,SAAA,SAAL,MAAO,cAAa,QAAO,GAAA,UAAA,SAAA,GAAA,YAAA,YAAA,SAAA,EAAA,KAAA,WAAmB,MAAM,QAAzB,GAAoC;AAC/D,gCAAM,QAAQ,YAAA,eAAe,uBAAf;AAGd,gCAAI,OAAO;AAEP,oCAAM,aAAa,QAAQG,KAA3B;AAGA,oCAAM,YAAYH;AAElB,qCAAO;4BACV;0BACJ;AAGD,qCAAWA,OAAMG,KAAP;AAGV,iCAAO;wBACV;wBACD,WAAW;sBApFf;;sBAuFA;wBACI,UAAU,MAAM;wBAChB,MAAM;wBACN,IAAI,SAAAnF,MAAA;AAEA,kCAAO;AAGP,iCAAO;wBACV;sBATL;oBAzFI;kBA3BZ,CADE;;;;;;;;;kBA2IN,cAAA,SAAA,aAAa,YAAwB,MAAY;AAC7C,wBAAI,UAAU;AACd,wBAAI,aAAa;AACjB,wBAAI;AAGJ,wBAAI,SAAS,QAAQ;AACjB,gCAAU,MAAI;AACd,mCAAagF;oBAChB;AAGD,wBAAI,SAAS,QAAQ;AACjB,gCAAU,MAAI;AACd,mCAAaG;oBAChB;AAED,gCAAW,GAAA,MAAA,SAAA,GAAA,UAAU,EAAA,KAAV,YAAgB,OAAN,EAAe,MAAM,CAA/B;AAEX,6BAAS,QAAQ;kBACpB;gBAvKQ;AA0Kb,uBAAO;cACV;AAtSD,cAAApH,SAAA,SAAA,IAAA;;;;;;;;;;;;;ACPA,uBAAS,WAAW8G,OAAY,SAAe;AAC3C,oBAAI,cAAoBA;AACxB,oBAAI,UAAgBA;AACpB,mBAAG;AACC,sBAAI,YAAY,gBAAgB;AAAS;AACzC,4BAAU;AACV,sBAAI,YAAY,YAAY;AACxB,kCAAc,gBAAW,QAAX,gBAAW,SAAA,SAAX,YAAa;kBAC9B;gBACJ,UAAQ,gBAAW,QAAX,gBAAW,SAAA,SAAX,YAAa,cAAa;AAEnC,uBAAO;cACV;AA4IQ,cAAA9G,SAAA,aAAA;AArIT,uBAAS,eAAe8G,OAAY9C,UAAe;AAC/C,oBAAI,UAAU8C,MAAK;AACnB,oBAAI,OAAO;AACX,oBAAIA,MAAK,aAAa,KAAK,eAAe,KAAK,OAApB,GAA8B;AACrD,yBAAO9C;gBACV;AACD,oBAAI8C,MAAK,aAAa,GAAG;AACrB,sBAAM,QAASA,MAAiB,aAAa,OAA9B;AACf,sBAAM,OAAQA,MAAiB,aAAa,MAA9B;AACd,sBAAMuE,SAASvE,MAAiB,aAAa,OAA9B;AACf,sBAAI;AAAO,2BAAO,QAAO,aAAW,QAAK;AACzC,sBAAI;AAAM,2BAAO,QAAO,YAAU,OAAI;AACtC,sBAAIuE;AAAO,2BAAO,QAAO,aAAWA,SAAK;gBAC5C;AACD,0BAAU,QAAQ,YAAR;AACV,uBAAO,MAAI,UAAU,OAAI,MAAIrH,WAAO,OAAK,UAAO;cACnD;AAqHoB,cAAAhE,SAAA,iBAAA;AA5GrB,uBAAS,eAAe,SAAiB8G,OAAY,UAAkB,SAAgB;;AACnF,oBAAI,oBAAgBhC,MAAGgC,MAAK,iBAAW,QAAAhC,QAAA,SAAA,SAAAA,IAAE,UAAU,UAAU,OAAtB;AACvC,oBAAI,cAA2BgC;AAC/B,oBAAI9C,WAAU;AACd,mBAAG;AACC,kBAAAA,WAAU,eAAe,aAAa,qBAAgB,QAAhB,qBAAgB,SAAhB,mBAAoB,EAAlC;AACxB,qCAAmBA;AACnB,gCAAc,gBAAW,QAAX,gBAAW,SAAA,SAAX,YAAa;gBAC9B,SAAQ,eAAe,YAAY,gBAAgB;AAEpD,uBAAOA;cACV;AAiGoC,cAAAhE,SAAA,iBAAA;AA1FrC,uBAAS,WAAWqF,YAAsB,SAAa;;AAC3C,oBAAA,aAA0EA,WAAhE,YAAE,YAA8DA,WAArD,WAAgB,YAAqCA,WAA5B,cAAe,WAAaA,WAAL;AAC7E,oBAAM,WAAOP,MAAG,QAAQ,iBAAW,QAAAA,QAAA,SAAAA,MAAI;AACvC,oBAAM,SAAS,gBAAgB,OAAD;AAE9B,oBAAId,WAAkB;AACtB,oBAAI,eAAuB;AAC3B,oBAAI,gBAAwB;AAC5B,oBAAI,aAAqB;AAEzB,oBAAI,YAAY;AAChB,oBAAI,UAAU;AAEd,oBAAI,cAAc;AAGlB,oBAAI,eAAU,QAAV,eAAU,SAAA,SAAV,WAAY,YAAY,cAAS,QAAT,cAAS,SAAT,YAAa,IAArC,GAA4C;AAC5C,sBAAI,eAAe,eAAe,SAAS,YAAY,WAAW,QAAjC;AACjC,iCAAe,aAAa,QAAQ,YAAT;AAC3B,yBAAO;gBACV;AAGD,oBAAI;AAAY,iCAAe,eAAe,SAAS,YAAY,cAAS,QAAT,cAAS,SAAT,YAAa,CAAnC;AAG7C,oBAAI;AAAW,+BAAa,eAAe,SAAS,WAAW,GAAG,QAAxB;AAG1C,oBAAI,YAAY;AAEZ,8BAAY,WAAW,YAAY,OAAb;gBACzB;AACD,oBAAI,WAAW;AAEX,4BAAU,WAAW,WAAW,OAAZ;gBACvB;AAGD,+BAAW,KAAG,cAAS,QAAT,cAAS,SAAA,SAAT,UAAW,iBAAW,QAAA,OAAA,SAAA,KAAI;AACxC,uBAAO,EAAC,gBAAW,QAAX,gBAAW,SAAA,SAAX,YAAa,YAAY,YAAO,QAAP,YAAO,SAAP,UAAW,IAApC,IAA2C;AAC/C,sBAAM,kBAAkB,gBAAW,QAAX,gBAAW,SAAA,SAAX,YAAa;AACrC,sBAAI,oBAAoB,SAAS;AAC7B,oCAAgB,iBAAgB,gBAAW,QAAX,gBAAW,SAAA,SAAX,YAAa;kBAChD,OAAM;AACH,wBAAI,cAAU,MAAA,KAAG,gBAAW,QAAX,gBAAW,SAAA,SAAX,YAAa,gBAAU,QAAA,OAAA,SAAA,SAAA,GAAE,mBAAa,QAAA,OAAA,SAAA,SAAA,GAAE;AACzD,wBAAI;AACA,sCAAgB,gBAAgB,eAAe,aAAa,eAAU,QAAV,eAAU,SAAV,aAAc,EAA5B;kBACrD;AAED,sBAAM,iBAAasH,MAAG,gBAAW,QAAX,gBAAW,SAAA,SAAX,YAAa,iBAAW,QAAAA,QAAA,SAAAA,MAAI;AAClD,sBAAI,kBAAkB;AAAa;AACnC,gCAAc;gBACjB;AAED,gBAAAtH,WAAU,KAAG,eAAe,gBAAgB;AAG5C,gBAAAA,WAAU,aAAa,QAAQA,QAAT;AAEtB,uBAAOA;cACV;AA6BoD,cAAAhE,SAAA,aAAA;AAxBrD,uBAAS,gBAAgB8G,OAAU;;AAC/B,oBAAM,WAAOhC,MAAGgC,MAAK,iBAAW,QAAAhC,QAAA,SAAAA,MAAI;AACpC,oBAAI,SAAS,CAAA;AACb,wBAAOgC,UAAI,QAAJA,UAAI,SAAA,SAAJA,MAAM,iBAAgB,SAAS;AAClC,sBAAIA,MAAK,aAAa,OAAOA,MAAK,aAAa,SAAS;AACpD,2BAAO,KAAKA,KAAZ;kBACH;AACD,kBAAAA,QAAOA,MAAK,WAAW,CAAhB;gBACV;AACD,uBAAO;cACV;AAOD,uBAAS,aAAa,QAAgB9C,UAAe;AACjD,iBAAA,GAAA,SAAA,SAAA,GAAA,MAAM,EAAA,KAAN,QAAe,SAAA/C,IAAC;AACZ,kBAAA+C,WAAU,eAAe/C,IAAG+C,QAAJ;gBAC3B,CAFK;AAGN,uBAAOA;cACV;;;;;;;;;;;;ACrJD,kBAAA,kBAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AAMA,uBAAS,UAAUzB,SAAc;AAE7B,gCAAA,SAAA,EAAiBA,OAAjB;cACH;AAED,cAAAvC,SAAA,SAAA,IAAe;;;;;;;;;;;;;ACZf,kBAAA,aAAA,QAAA,gBAAA,oBAAA,CAAA,CAAA;AACA,kBAAA,YAAA,QAAA,gBAAA,oBAAA,EAAA,CAAA;AAEA,kBAAA,cAAA,oBAAA,EAAA;AAKA,uBAAS,iBAAiBuC,SAAc;AACpC,oBAAI;AAMJ,yBAAS,gBAAgB,OAAiB;AACtC,sBAAM,OAAwB,CAC1B;oBACI,OAAO,WAAA,SAAA,EAAE,WAASA,QAAO,QAAQ,EAAE,gDAAjB,IAA8C,SAAzD;oBACP,SAAS,SAAA,QAACA,SAAgBgJ,QAAiB;AACvC,0BAAMnE,QAAOmE,OAAM,KAAK,MAAX;AACb,6BAAO,KAAKnE,OAAM,SAAlB;AAGA,6BAAO;oBACV;kBARL,GAUA;oBACI,OAAO,WAAA,SAAA,EAAE,WAAS7E,QAAO,QAAQ,EAAE,gDAAjB,IAA8C,SAAzD;oBACP,SAAS,SAAA,QAACA,SAAgBgJ,QAAiB;;AAEvC,sBAAAhJ,QAAO,UAAU,kBAAkBgJ,MAAnC;AACA,sBAAAhJ,QAAO,UAAU,iBAAjB;AAEA,0BAAM,cAAcgJ,OAAM,WAAN;AAEpB,2BAAI,gBAAW,QAAX,gBAAW,SAAA,SAAX,YAAa,YAAb,OAA+B,OAAO;AAEtC,4BAAM,cAAU,MAAAzG,MAAGvC,QAAO,UAAU,0BAAjB,OAA4C,QAAAuC,QAAA,SAAA,SAAAA,IAAE,SAAF,OAAU,QAAA,OAAA,SAAA,SAAA,GACnE,MAAM,CAD6D,EAC1D,SAAS,CADiD;AAGzE,wBAAAvC,QAAO,IAAP,IAAA,EACI,cACA,iDACU,eAAU,QAAV,eAAU,SAAA,SAAV,WAAY,aAAa,KAAzB,KAA8B,+CAC5B,eAAU,QAAV,eAAU,SAAA,SAAV,WAAY,aAAa,OAAzB,KAAgC,GAJhD;sBAMH,OAAM;AAAA,4BAAA;AAQH,4BAAM,WAAWgJ,OAAM,MAAM,CAAZ;AAGjB,4BAAM,mBAAmB,SAAS;AAGlC,4BAAM,iBAAiB,SAAS;AAEhC,4BAAI,mBAAkB,GAAA,UAAA,SAAA,GAAA,WAAA,YAAA,SAAA,EAAA,KAAA,UAAmB,eAAe,QAAlC,GAA6C;AAC/D,yCAAe,YAAY;wBAC9B,OAAM;AACH,0BAAAhJ,QAAO,IAAP,IAAA,EAAc,cAAc,WAAW,mBAAmB,SAA1D;wBACH;sBACJ;AAGD,6BAAO;oBACV;kBA7CL,CAX0B;AA6D9B,4BAAU,IAAI,UAAA,SAAA,EAAQA,SAAQ,OAAO,IAA3B;AACV,0BAAQ,OAAR;gBACH;AAKD,yBAAS,kBAAe;AAEpB,sBAAI,SAAS;AACT,4BAAQ,OAAR;AACA,8BAAU;kBACb;gBACJ;AAED,uBAAO;kBACH;kBACA;gBAFG;cAIV;AAMD,uBAAS,iBAAiBA,SAAc;AAC9B,oBAAAuC,MAAuC,iBAAiBvC,OAAD,GAArD,kBAAeuC,IAAA,iBAAE,kBAAeA,IAAA;AAGxC,gBAAAvC,QAAO,IAAI,WAAW,gBAAgB,KAAK,eAA3C;AAGA,gBAAAA,QAAO,IAAI,WAAW,YAAY,KAAK,eAAvC;AACA,gBAAAA,QAAO,IAAI,WAAW,YAAY,KAAK,eAAvC;AACA,gBAAAA,QAAO,IAAI,WAAW,mBAAmB,KAAK,eAA9C;AACA,gBAAAA,QAAO,IAAI,WAAW,gBAAgB,KAAK,eAA3C;AACA,gBAAAA,QAAO,IAAI,WAAW,iBAAiB,KAAK,eAA5C;cACH;AAED,cAAAvC,SAAA,SAAA,IAAe;;;;;;;;;;;;ACpHf,kBAAA,YAAA,QAAA,gBAAA,oBAAA,EAAA,CAAA;AACA,kBAAA,aAAA,QAAA,gBAAA,oBAAA,CAAA,CAAA;AAIA,kBAAA;;gBAAA,SAAA,QAAA;AAAqB,0BAAA,UAAAwL,SAAA,MAAA;AACjB,2BAAAA,QAAYjJ,SAAc;AAA1B,wBAAA,QAAA;AACI,wBAAM,QAAQ,WAAA,SAAA,EACV,uHADU;AAKd,4BAAA,OAAA,KAAA,MAAM,OAAOA,OAAb,KAAoB;;kBACvB;AAKM,kBAAAiJ,QAAA,UAAA,eAAP,WAAA;AACI,wBAAMjJ,UAAS,KAAK;AACpB,wBAAM,gBAAgBA,QAAO,UAAU,iBAAjB;AAEtB,wBAAI,eAAe;AAEf,sBAAAA,QAAO,UAAU,iBAAjB;oBACH;AAGD,oBAAAA,QAAO,IAAP,IAAA,EAAc,QAAd;AAEA,wBAAI,eAAe;AAEf,sBAAAA,QAAO,UAAU,cAAjB;AACA,sBAAAA,QAAO,UAAU,iBAAjB;oBACH;kBACJ;AAKM,kBAAAiJ,QAAA,UAAA,kBAAP,WAAA;AACI,wBAAMjJ,UAAS,KAAK;AACpB,wBAAIA,QAAO,IAAI,kBAAkB,QAA7B,GAAwC;AACxC,2BAAK,OAAL;oBACH,OAAM;AACH,2BAAK,SAAL;oBACH;kBACJ;AACL,yBAAAiJ;gBAAC,EA3CoB,UAAA,SAAA,CAArB;;AA6CA,cAAAxL,SAAA,SAAA,IAAe;;;;;;;;;;;;ACjDf,kBAAA,YAAA,QAAA,gBAAA,oBAAA,EAAA,CAAA;AACA,kBAAA,aAAA,QAAA,gBAAA,oBAAA,CAAA,CAAA;AAIA,kBAAA;;gBAAA,SAAA,QAAA;AAAwB,0BAAA,UAAAyL,YAAA,MAAA;AACpB,2BAAAA,WAAYlJ,SAAc;AAA1B,wBAAA,QAAA;AACI,wBAAM,QAAQ,WAAA,SAAA,EACV,gIADU;AAKd,4BAAA,OAAA,KAAA,MAAM,OAAOA,OAAb,KAAoB;;kBACvB;AAKM,kBAAAkJ,WAAA,UAAA,eAAP,WAAA;AACI,wBAAMlJ,UAAS,KAAK;AACpB,wBAAM,gBAAgBA,QAAO,UAAU,iBAAjB;AAEtB,wBAAI,eAAe;AAEf,sBAAAA,QAAO,UAAU,iBAAjB;oBACH;AAGD,oBAAAA,QAAO,IAAP,IAAA,EAAc,WAAd;AAEA,wBAAI,eAAe;AAEf,sBAAAA,QAAO,UAAU,cAAjB;AACA,sBAAAA,QAAO,UAAU,iBAAjB;oBACH;kBACJ;AAKM,kBAAAkJ,WAAA,UAAA,kBAAP,WAAA;AACI,wBAAMlJ,UAAS,KAAK;AACpB,wBAAIA,QAAO,IAAI,kBAAkB,WAA7B,GAA2C;AAC3C,2BAAK,OAAL;oBACH,OAAM;AACH,2BAAK,SAAL;oBACH;kBACJ;AACL,yBAAAkJ;gBAAC,EA3CuB,UAAA,SAAA,CAAxB;;AA6CA,cAAAzL,SAAA,SAAA,IAAe;;;;;;;;;;;;ACnDf,kBAAA,YAAA,QAAA,gBAAA,oBAAA,EAAA,CAAA;AACA,kBAAA,aAAA,QAAA,gBAAA,oBAAA,CAAA,CAAA;AAIA,kBAAA;;gBAAA,SAAA,QAAA;AAA4B,0BAAA,UAAA0L,gBAAA,MAAA;AACxB,2BAAAA,eAAYnJ,SAAc;AAA1B,wBAAA,QAAA;AACI,wBAAM,QAAQ,WAAA,SAAA,EACV,oIADU;AAKd,4BAAA,OAAA,KAAA,MAAM,OAAOA,OAAb,KAAoB;;kBACvB;AAKM,kBAAAmJ,eAAA,UAAA,eAAP,WAAA;AACI,wBAAMnJ,UAAS,KAAK;AACpB,wBAAM,gBAAgBA,QAAO,UAAU,iBAAjB;AAEtB,wBAAI,eAAe;AAEf,sBAAAA,QAAO,UAAU,iBAAjB;oBACH;AAGD,oBAAAA,QAAO,IAAP,IAAA,EAAc,eAAd;AAEA,wBAAI,eAAe;AAEf,sBAAAA,QAAO,UAAU,cAAjB;AACA,sBAAAA,QAAO,UAAU,iBAAjB;oBACH;kBACJ;AAKM,kBAAAmJ,eAAA,UAAA,kBAAP,WAAA;AACI,wBAAMnJ,UAAS,KAAK;AACpB,wBAAIA,QAAO,IAAI,kBAAkB,eAA7B,GAA+C;AAC/C,2BAAK,OAAL;oBACH,OAAM;AACH,2BAAK,SAAL;oBACH;kBACJ;AACL,yBAAAmJ;gBAAC,EA3C2B,UAAA,SAAA,CAA5B;;AA6CA,cAAA1L,SAAA,SAAA,IAAe;;;;;;;;;;;;ACjDf,kBAAA,iBAAA,QAAA,gBAAA,oBAAA,EAAA,CAAA;AACA,kBAAA,aAAA,QAAA,gBAAA,oBAAA,CAAA,CAAA;AAGA,kBAAA,kBAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AAEA,kBAAA;;gBAAA,SAAA,QAAA;AAAwB,0BAAA,UAAA2L,YAAA,MAAA;AACpB,2BAAAA,WAAYpJ,SAAc;AAA1B,wBAAA,QAAA;AACI,wBAAM,QAAQ,WAAA,SAAA,EACV,qHADU;AAKd,wBAAI,gBAAgB,IAAI,gBAAA,SAAA,EAAcA,QAAO,OAAO,SAAhC;AACpB,wBAAM,eAAe;sBACjB,OAAO;sBACP,OAAO;sBACP,MAAM;sBACN,MAAM,cAAc,YAAd;sBACN,cAAc,SAAA,aAAC,OAAa;AAExB,8BAAK,QAAQ,KAAb;sBACH;oBARgB;AAUrB,4BAAA,OAAA,KAAA,MAAM,OAAOA,SAAQ,YAArB,KAAkC;;kBACrC;AAMM,kBAAAoJ,WAAA,UAAA,UAAP,SAAe,OAAa;;AACxB,wBAAMpJ,UAAS,KAAK;AACpB,wBAAM,mBAAmBA,QAAO,UAAU,iBAAjB;AAEzB,wBAAM,kBAAcuC,MAAGvC,QAAO,UAAU,0BAAjB,OAA4C,QAAAuC,QAAA,SAAA,SAAAA,IAAE,MAAM,CAAR;AAEnE,wBAAI,kBAAkB;AAAM;AAE5B,wBAAM,UAAS,mBAAc,QAAd,mBAAc,SAAA,SAAd,eAAgB,SAAS,YAAzB,OAA2C;AAC1D,wBAAM,eAAc,mBAAc,QAAd,mBAAc,SAAA,SAAd,eAAgB,aAAa,MAA7B,OAAyC;AAE7D,wBAAI,kBAAkB;AAClB,0BAAI,UAAU,CAAC,aAAa;AACxB,4BAAM,SAASvC,QAAO,UAAU,0BAAjB;AACf,wBAAAA,QAAO,UAAU,kBAAkB,OAAO,CAAD,CAAzC;AACA,wBAAAA,QAAO,UAAU,WAAW,OAAO,CAAD,EAAI,MAAM,CAAhB,CAA5B;sBACH;AACD,sBAAAA,QAAO,UAAU,eAAe,cAAhC;AAEA,sBAAAA,QAAO,UAAU,iBAAjB;oBACH;AAED,oBAAAA,QAAO,IAAP,IAAA,EAAc,YAAY,KAA1B;AAEA,wBAAI,kBAAkB;AAElB,sBAAAA,QAAO,UAAU,cAAjB;AACA,sBAAAA,QAAO,UAAU,iBAAjB;oBACH;kBACJ;AAMM,kBAAAoJ,WAAA,UAAA,kBAAP,WAAA;kBAQC;AACL,yBAAAA;gBAAC,EArEuB,eAAA,SAAA,CAAxB;;AAuEA,cAAA3L,SAAA,SAAA,IAAe;;;;;;;;;;;;;AC/Ef,kBAAA,aAAA,QAAA,gBAAA,oBAAA,CAAA,CAAA;AAUA,kBAAA;;gBAAA,WAAA;AAEI,2BAAA4L,eAAYrI,OAAmB;AAA/B,wBAAA,QAAA;AACI,yBAAK,WAAW,CAAA;AAChB,qBAAA,GAAA,SAAA,SAAA,GAAAA,KAAI,EAAA,KAAJA,OAAa,SAAA,WAAS;AAGlB,0BAAM,aAAa,OAAO,cAAc,WAAW,YAAY,UAAU;AACzE,0BAAM,WAAW,OAAO,cAAc,WAAW,YAAY,UAAU;AACvE,4BAAK,SAAS,KAAK;wBACf,OAAO,WAAA,SAAA,EAAE,4BAA0B,aAAU,QAAM,WAAQ,MAApD;wBACP,OAAO;sBAFQ,CAAnB;oBAIH,CATG;kBAUP;AAEM,kBAAAqI,eAAA,UAAA,cAAP,WAAA;AACI,2BAAO,KAAK;kBACf;AACL,yBAAAA;gBAAC,EAnBD;;AAqBA,cAAA5L,SAAA,SAAA,IAAe;;;;;;;;;;;;AC7Bf,kBAAA,iBAAA,QAAA,gBAAA,oBAAA,EAAA,CAAA;AACA,kBAAA,aAAA,QAAA,gBAAA,oBAAA,CAAA,CAAA;AAGA,kBAAA,iBAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AAEA,kBAAA;;gBAAA,SAAA,QAAA;AAAuB,0BAAA,UAAA6L,WAAA,MAAA;AACnB,2BAAAA,UAAYtJ,SAAc;AAA1B,wBAAA,QAAA;AACI,wBAAM,QAAQ,WAAA,SAAA,EACV,2HADU;AAKd,wBAAI,gBAAgB,IAAI,eAAA,SAAA,EAAaA,QAAO,OAAO,SAA/B;AACpB,wBAAM,eAAe;sBACjB,OAAO;sBACP,OAAO;sBACP,MAAM;sBACN,MAAM,cAAc,YAAd;sBACN,cAAc,SAAA,aAAC,OAAa;AAExB,8BAAK,QAAQ,KAAb;sBACH;oBARgB;AAUrB,4BAAA,OAAA,KAAA,MAAM,OAAOA,SAAQ,YAArB,KAAkC;;kBACrC;AAMM,kBAAAsJ,UAAA,UAAA,UAAP,SAAe,OAAa;;AACxB,wBAAMtJ,UAAS,KAAK;AACpB,wBAAM,mBAAmBA,QAAO,UAAU,iBAAjB;AAEzB,wBAAI,iBAAauC,MAAGvC,QAAO,UAAU,0BAAjB,OAA4C,QAAAuC,QAAA,SAAA,SAAAA,IAAE,MAAM,CAAR;AAEhE,wBAAI,iBAAiB;AAAM;AAE3B,oBAAAvC,QAAO,IAAP,IAAA,EAAc,YAAY,KAA1B;AACA,wBAAI,kBAAkB;AAElB,sBAAAA,QAAO,UAAU,cAAjB;AACA,sBAAAA,QAAO,UAAU,iBAAjB;oBACH;kBACJ;AAMM,kBAAAsJ,UAAA,UAAA,kBAAP,WAAA;kBAAiC;AACrC,yBAAAA;gBAAC,EA9CsB,eAAA,SAAA,CAAvB;;AAgDA,cAAA7L,SAAA,SAAA,IAAe;;;;;;;;;;;;ACxDf,kBAAA,aAAA,QAAA,gBAAA,oBAAA,CAAA,CAAA;AAOA,kBAAA;;gBAAA,WAAA;AAGI,2BAAA8L,cAAYvI,OAAsB;AAC9B,yBAAK,WAAW,CAAA;AAChB,6BAAS,OAAOA,OAAM;AAClB,0BAAM,OAAOA,MAAK,GAAD;AACjB,2BAAK,SAAS,KAAK;wBACf,OAAO,WAAA,SAAA,EAAE,yBAAuB,MAAG,OAAK,KAAK,OAAI,MAA1C;wBACP,OAAO,KAAK;sBAFG,CAAnB;oBAIH;kBACJ;AAEM,kBAAAuI,cAAA,UAAA,cAAP,WAAA;AACI,2BAAO,KAAK;kBACf;AACL,yBAAAA;gBAAC,EAjBD;;AAmBA,cAAA9L,SAAA,SAAA,IAAe;;;;;;;;;;;;;;ACzBf,kBAAA,iBAAA,QAAA,gBAAA,oBAAA,EAAA,CAAA;AACA,kBAAA,aAAA,QAAA,gBAAA,oBAAA,CAAA,CAAA;AAIA,kBAAM,oBAAoB,CAAC,IAAD;AAC1B,kBAAM,wBAAwB,CAAC,YAAD;AAE9B,kBAAA;;gBAAA,SAAA,QAAA;AAAsB,0BAAA,UAAA+L,UAAA,MAAA;AAClB,2BAAAA,SAAYxJ,SAAc;AAA1B,wBAAA,QAAA;AACI,wBAAM,QAAQ,WAAA,SAAA,EACV,+FADU;AAId,wBAAM,eAAe;sBACjB,OAAO;sBACP,OAAO;sBACP,MAAM;sBACN,MAAM,CACF;wBACI,OAAO,WAAA,SAAA,EACH,8HAEMA,QAAO,QAAQ,EAAE,yCAAjB,IAAiD,gCAHpD;wBAMP,OAAO;sBAPX,GASA;wBACI,OAAO,WAAA,SAAA,EACH,gIAEMA,QAAO,QAAQ,EAAE,yCAAjB,IAAiD,gCAHpD;wBAMP,OAAO;sBAPX,GASA;wBACI,OAAO,WAAA,SAAA,EACH,+HAEMA,QAAO,QAAQ,EAAE,yCAAjB,IAAiD,gCAHpD;wBAMP,OAAO;sBAPX,GASA;wBACI,OAAO,WAAA,SAAA,EACH,iIAEMA,QAAO,QAAQ,EAAE,yCAAjB,IAAiD,gCAHpD;wBAMP,OAAO;sBAPX,CA5BE;sBAsCN,cAAc,SAAA,aAAC,OAAa;AAExB,8BAAK,QAAQ,KAAb;sBACH;oBA7CgB;AA+CrB,4BAAA,OAAA,KAAA,MAAM,OAAOA,SAAQ,YAArB,KAAkC;;kBACrC;AAKM,kBAAAwJ,SAAA,UAAA,UAAP,SAAe,OAAa;AACxB,wBAAMxJ,UAAS,KAAK;AACpB,wBAAM8C,aAAY9C,QAAO;AACzB,wBAAM,iBAAiB8C,WAAU,0BAAV;AAGvB,oBAAAA,WAAU,UAAV;AAGA,wBAAM,SAAS9C,QAAO,UAAU,0BAAjB;AACf,wBAAI,mBAAc,QAAd,mBAAc,SAAA,SAAd,eAAgB,QAAQ;AAExB,0BAAI,KAAK,cAAc,gBAAgB,OAAO,CAAD,CAAzC,KAAiD,KAAK,iBAAiB,OAAO,CAAD,CAA5B,GAAkC;AACnF,4BAAM4D,MAAK,KAAK,uBAAuB,gBAAgB,OAAO,CAAD,CAAlD;AACX,4BAAIA,OAAM;AAAM;AAEhB,mCAAA,SAAA,EAAEA,GAAF,EAAM,IAAI,cAAc,KAAxB;sBACH,OAAM;AACH,yBAAA,GAAA,SAAA,SAAA,GAAA,MAAM,EAAA,KAAN,QAAe,SAACA,KAAc;AAC1B,0BAAAA,IAAG,IAAI,cAAc,KAArB;wBACH,CAFK;sBAGT;oBACJ;AAED,oBAAAd,WAAU,iBAAV;kBACH;AAOO,kBAAA0G,SAAA,UAAA,yBAAR,SAA+B5F,KAAgB,OAAiB;AAC5D,wBAAI,aAA0BA,IAAG,MAAM,CAAT;AAC9B,wBAAM,UAAU,MAAM,MAAM,CAAZ;AAEhB,2BAAO,cAAc,MAAM;AACvB,2BAAI,GAAA,SAAA,SAAA,GAAA,iBAAiB,EAAA,KAAjB,mBAA0B,eAAU,QAAV,eAAU,SAAA,SAAV,WAAY,QAArB,MAAmC,IAAI;AACxD,+BAAO;sBACV;AAED,0BAAI,WAAW,eAAe,SAAS;AACnC,+BAAO;sBACV;AACD,mCAAa,WAAW;oBAC3B;AACD,2BAAO;kBACV;AAOO,kBAAA4F,SAAA,UAAA,gBAAR,SAAsB5F,KAAgB,OAAiB;AAEnD,wBAAM,aAAa,KAAK,uBAAuBA,KAAI,KAAhC;AAEnB,wBAAI,cAAc;AAAM,6BAAO;AAE/B,4BAAO,GAAA,SAAA,SAAA,GAAA,iBAAiB,EAAA,KAAjB,mBAA0B,WAAW,QAApB,MAAkC;kBAC7D;AAMO,kBAAA4F,SAAA,UAAA,mBAAR,SAAyB,OAAiB;;AACtC,wBAAI,SAAS;AAAM,6BAAO;AAE1B,4BAAO,GAAA,SAAA,SAAA,GAAA,qBAAqB,EAAA,KAArB,wBAA6BjH,MAAC,MAAM,MAAM,CAAZ,OAAc,QAAAA,QAAA,SAAA,SAAAA,IAAE,QAAzB,MAAuC;kBACtE;AAOM,kBAAAiH,SAAA,UAAA,kBAAP,WAAA;kBAAiC;AACrC,yBAAAA;gBAAC,EA1IqB,eAAA,SAAA,CAAtB;;AA4IA,cAAA/L,SAAA,SAAA,IAAe;;;;;;;;;;;;;ACpJf,kBAAA,aAAA,QAAA,gBAAA,oBAAA,CAAA,CAAA;AAEA,kBAAA,YAAA,QAAA,gBAAA,oBAAA,EAAA,CAAA;AAEA,kBAAA,eAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AACA,kBAAA,sBAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AACA,kBAAA,UAAA,oBAAA,CAAA;AAEA,kBAAA;;gBAAA,SAAA,QAAA;AAAoB,0BAAA,UAAAgM,QAAA,MAAA;AAChB,2BAAAA,OAAYzJ,SAAc;AAA1B,wBAAA,QAAA;AACI,wBAAM,QAAQ,WAAA,SAAA,EACV,4HADU;AAKd,4BAAA,OAAA,KAAA,MAAM,OAAOA,OAAb,KAAoB;AACpB,iCAAA,SAAA,EAAUA,OAAV;;kBACH;AAKM,kBAAAyJ,OAAA,UAAA,eAAP,WAAA;;AACI,wBAAMzJ,UAAS,KAAK;AACpB,wBAAM,gBAAgBA,QAAO,UAAU,iBAAjB;AACtB,wBAAI,cAA4BA,QAAO,UAAU,0BAAjB;AAChC,wBAAM,eAA2B,YAAY,YAAY,SAAS,CAAtB;AAC5C,wBAAM,WAAW,KAAK,eAAL;AAGjB,wBAAI,aAAa,cAAc;AAE3B,0BAAM,cAAc,WAAA,SAAA,EAAE,aAAa,WAAb,CAAF;AACpB,0BAAM,MAAM,YAAY;AACxB,0BAAI,YAAU;AACd,uBAAA,GAAA,SAAA,SAAA,GAAA,WAAW,EAAA,KAAX,aAAoB,SAAC,MAAU;AAC3B,4BAAM,QAAQ,WAAA,SAAA,EAAE,IAAF;AACd,8BAAM,YAAY,SAAlB;AACA,oCAAU;sBACb,CAJU;AAKX,mCAAa,OAAb;AACA,sBAAAA,QAAO,UAAU,WAAW,YAAY,MAAM,MAAM,CAAxB,CAA5B;AAEA,2BAAK,gBAAL;oBACH,OAAM;AAWH,0BAAI,SAAS,oBAAA,SAAA,EAAY,WAAZ;AAGb,0BAAIA,QAAO,UAAU,MAAM,YAAvB,GAAsC;AACtC,4BAAM,iBAAgBuC,MAAAvC,QAAO,UAAU,0BAAjB,OAA4C,QAAAuC,QAAA,SAAA,SAAAA,IAAE,MAAM,CAAR;AAClE,wBAAAvC,QAAO,UAAU,mBACb,cAAc,SAAS,CAAvB,GACA,cAAc,SAAS,CAAvB,CAFJ;AAKA,sCAAcA,QAAO,UAAU,0BAAjB;AACd,iCAAS,oBAAA,SAAA,EAAY,WAAZ;AACT,qCAAa,OAAO,MAApB;sBACH,OAAM;AACH,+BAAO,YAAY,YAAnB;sBACH;AAED,2BAAK,cAAc,WAAnB;AACA,0BAAM,YAAW,KAAA,OAAO,WAAP,OAAmB,QAAA,OAAA,SAAA,SAAA,GAAE,KAAF,EAAS,QAAT;AAEpC,0BAAI,YAAY;AAAM;AAGtB,+BAAS,cACHA,QAAO,UAAU,WAAW,QAA5B,IACAA,QAAO,UAAU,WAAW,UAAU,CAAtC;AAEN,2BAAK,gBAAL;AAEA,iCAAA,SAAA,EAAE,QAAA,OAAF,EAAW,YAAY,MAAvB;AACA;oBACH;AAED,wBAAI,eAAe;AAEf,sBAAAA,QAAO,UAAU,cAAjB;AACA,sBAAAA,QAAO,UAAU,iBAAjB;oBACH;kBACJ;AAKM,kBAAAyJ,OAAA,UAAA,kBAAP,WAAA;;AACI,wBAAMzJ,UAAS,KAAK;AACpB,wBAAM,YAAQuC,MAAGvC,QAAO,UAAU,0BAAjB,EAA6C,CAA7C,OAA+C,QAAAuC,QAAA,SAAA,SAAAA,IAAE,YAAF;AAChE,wBAAI,aAAa,cAAc;AAC3B,2BAAK,OAAL;oBACH,OAAM;AACH,2BAAK,SAAL;oBACH;kBACJ;AAOO,kBAAAkH,OAAA,UAAA,iBAAR,WAAA;AACI,wBAAMzJ,UAAS,KAAK;AACpB,wBAAM,eAAeA,QAAO,UAAU,0BAAjB,EAA6C,CAA7C;AACrB,wBAAM,WAAW,iBAAY,QAAZ,iBAAY,SAAA,SAAZ,aAAc,YAAd;AAEjB,2BAAO;kBACV;AAMO,kBAAAyJ,OAAA,UAAA,gBAAR,SAAsB,YAAwB;AAC1C,qBAAA,GAAA,SAAA,SAAA,GAAA,UAAU,EAAA,KAAV,YAAmB,SAAAlF,OAAI;AACnB,sBAAAA,MAAK,OAAL;oBACH,CAFS;kBAGb;AACL,yBAAAkF;gBAAC,EA1HmB,UAAA,SAAA,CAApB;;AA4HA,cAAAhM,SAAA,SAAA,IAAe;;;;;;;;;;;;ACzIf,kBAAA,UAAA,oBAAA,CAAA;AAEA,kBAAA,aAAA,QAAA,gBAAA,oBAAA,CAAA,CAAA;AACA,uBAAS,UAAUuC,SAAc;AAC7B,yBAAS,WAAW3B,IAAQ;;AACxB,sBAAM,cAAc2B,QAAO,UAAU,0BAAjB;AACpB,sBAAM,iBAAiBA,QAAO,UAAU,0BAAjB,EAA6C,CAA7C;AAGvB,uBAAI,mBAAc,QAAd,mBAAc,SAAA,SAAd,eAAgB,YAAhB,OAAkC,cAAc;AAEhD,wBAAI,YAAY,YAAZ,MAA8B,cAAc;AAC5C,0BAAM,cAAauC,MAAA,YAAY,WAAZ,OAAwB,QAAAA,QAAA,SAAA,SAAAA,IAAE,QAAF;AAC3C,sBAAAvC,QAAO,UAAU,WAAW,UAA5B;oBACH;AACD,wBAAI,YAAY,KAAZ,MAAuB,IAAI;AAC3B,sBAAA3B,GAAE,eAAF;AACA,kCAAY,OAAZ;AACA,0BAAM,WAAW,WAAA,SAAA,EAAE,QAAA,OAAF;AACjB,+BAAS,YAAY,cAArB;AAEA,sBAAA2B,QAAO,UAAU,WAAW,SAAS,QAAT,GAAoB,CAAhD;oBACH;AAGD,wBAAI,eAAe,KAAf,MAA0B,IAAI;AAC9B,qCAAe,OAAf;oBACH;kBACJ;gBACJ;AACD,gBAAAA,QAAO,IAAI,WAAW,gBAAgB,KAAK,UAA3C;cACH;AAED,cAAAvC,SAAA,SAAA,IAAe;;;;;;;;;;;;;ACjCf,kBAAA,aAAA,QAAA,gBAAA,oBAAA,CAAA,CAAA;AAMA,uBAAS,YAAY,YAAwB;AACzC,oBAAM,cAAc,WAAA,SAAA,EAAE,2BAAF;AACpB,iBAAA,GAAA,SAAA,SAAA,GAAA,UAAU,EAAA,KAAV,YAAmB,SAAA8G,OAAI;AACnB,8BAAY,OAAOA,MAAK,MAAM,IAAX,CAAnB;gBACH,CAFS;AAGV,uBAAO;cACV;AAED,cAAA9G,SAAA,SAAA,IAAe;;;;;;;;;;;;;ACRf,kBAAA,iBAAA,QAAA,gBAAA,oBAAA,EAAA,CAAA;AACA,kBAAA,aAAA,QAAA,gBAAA,oBAAA,CAAA,CAAA;AAGA,kBAAA,SAAA,oBAAA,CAAA;AACA,kBAAA;;gBAAA,SAAA,QAAA;AAAwB,0BAAA,UAAAiM,YAAA,MAAA;AACpB,2BAAAA,WAAY1J,SAAc;AAAA,wBAAA;AAA1B,wBAAA,QAAA;AACI,wBAAM,QAAQ,WAAA,SAAA,EACV,kIADU;AAKd,wBAAM,gBAAgB;sBAClB,OAAO;sBACP,OAAO;;sBAEP,MAAM;sBACN,OAAM,GAAA,KAAA,SAAA,GAAA,WAAAA,QAAO,OAAO,MAAd,EAAA,KAAA,UAAyB,SAAA8I,QAAK;AAChC,+BAAO;0BACH,OAAO,WAAA,SAAA,EAAE,qBAAmBA,SAAK,sCAA1B;0BACP,OAAOA;wBAFJ;sBAIV,CALK;sBAMN,cAAc,SAAA,aAAC,OAAa;AAExB,8BAAK,QAAQ,KAAb;sBACH;oBAdiB;AAgBtB,4BAAA,OAAA,KAAA,MAAM,OAAO9I,SAAQ,aAArB,KAAmC;;kBACtC;AAMM,kBAAA0J,WAAA,UAAA,UAAP,SAAe,OAAa;;AACxB,wBAAM1J,UAAS,KAAK;AACpB,wBAAM,mBAAmBA,QAAO,UAAU,iBAAjB;AACzB,wBAAM,kBAAcuC,MAAGvC,QAAO,UAAU,0BAAjB,OAA4C,QAAAuC,QAAA,SAAA,SAAAA,IAAE,MAAM,CAAR;AAEnE,wBAAI,kBAAkB;AAAM;AAE5B,wBAAM,UAAS,mBAAc,QAAd,mBAAc,SAAA,SAAd,eAAgB,SAAS,YAAzB,OAA2C;AAC1D,wBAAM,UAAU,mBAAc,QAAd,mBAAc,SAAA,SAAd,eAAgB,MAAM;AACtC,wBAAM,cAAc,OAAA,SAAS,KAAT,MAAoB;AAExC,wBAAI,kBAAkB;AAClB,0BAAI,UAAU,CAAC,aAAa;AACxB,4BAAM,SAASvC,QAAO,UAAU,0BAAjB;AACf,wBAAAA,QAAO,UAAU,kBAAkB,OAAO,CAAD,CAAzC;AACA,wBAAAA,QAAO,UAAU,WAAW,OAAO,CAAD,EAAI,MAAM,CAAhB,CAA5B;sBACH;AAED,sBAAAA,QAAO,UAAU,iBAAjB;oBACH;AAED,oBAAAA,QAAO,IAAP,IAAA,EAAc,aAAa,KAA3B;AAEA,wBAAI,kBAAkB;AAElB,sBAAAA,QAAO,UAAU,cAAjB;AACA,sBAAAA,QAAO,UAAU,iBAAjB;oBACH;kBACJ;AAKM,kBAAA0J,WAAA,UAAA,kBAAP,WAAA;kBAAiC;AACrC,yBAAAA;gBAAC,EAhEuB,eAAA,SAAA,CAAxB;;AAkEA,cAAAjM,SAAA,SAAA,IAAe;;;;;;;;;;;;;ACvEf,kBAAA,iBAAA,QAAA,gBAAA,oBAAA,EAAA,CAAA;AACA,kBAAA,aAAA,QAAA,gBAAA,oBAAA,CAAA,CAAA;AAIA,kBAAA;;gBAAA,SAAA,QAAA;AAAwB,0BAAA,UAAAkM,YAAA,MAAA;AACpB,2BAAAA,WAAY3J,SAAc;AAAA,wBAAA;AAA1B,wBAAA,QAAA;AACI,wBAAM,QAAQ,WAAA,SAAA,EACV,oIADU;AAKd,wBAAM,gBAAgB;sBAClB,OAAO;sBACP,OAAO;;sBAEP,MAAM;sBACN,OAAM,GAAA,KAAA,SAAA,GAAA,WAAAA,QAAO,OAAO,MAAd,EAAA,KAAA,UAAyB,SAAA8I,QAAK;AAChC,+BAAO;0BACH,OAAO,WAAA,SAAA,EAAE,qBAAmBA,SAAK,kCAA1B;0BACP,OAAOA;wBAFJ;sBAIV,CALK;sBAMN,cAAc,SAAA,aAAC,OAAa;AAExB,8BAAK,QAAQ,KAAb;sBACH;oBAdiB;AAgBtB,4BAAA,OAAA,KAAA,MAAM,OAAO9I,SAAQ,aAArB,KAAmC;;kBACtC;AAMM,kBAAA2J,WAAA,UAAA,UAAP,SAAe,OAAa;;AACxB,wBAAM3J,UAAS,KAAK;AACpB,wBAAM,mBAAmBA,QAAO,UAAU,iBAAjB;AACzB,wBAAM,kBAAcuC,MAAGvC,QAAO,UAAU,0BAAjB,OAA4C,QAAAuC,QAAA,SAAA,SAAAA,IAAE,MAAM,CAAR;AAEnE,wBAAI,kBAAkB;AAAM;AAG5B,wBAAM,iBAAiBvC,QAAO,UAAU,iBAAjB;AAGvB,wBAAI,eAAe,aAAa,OAAO,eAAe,gBAAgB,gBAAgB;AAElF,0BAAM,eAAe,WAAA,SAAA,EAAE,sBAAF,EAA0B,QAA1B;AAErB,qCAAe,YAAY,YAA3B;oBACH;AACD,oBAAAA,QAAO,IAAP,IAAA,EAAc,aAAa,KAA3B;AAEA,wBAAI,kBAAkB;AAElB,sBAAAA,QAAO,UAAU,cAAjB;AACA,sBAAAA,QAAO,UAAU,iBAAjB;oBACH;kBACJ;AAKM,kBAAA2J,WAAA,UAAA,kBAAP,WAAA;kBAAiC;AACrC,yBAAAA;gBAAC,EA5DuB,eAAA,SAAA,CAAxB;;AA8DA,cAAAlM,SAAA,SAAA,IAAe;;;;;;;;;;;;ACpEf,kBAAA,aAAA,QAAA,gBAAA,oBAAA,CAAA,CAAA;AACA,kBAAA,UAAA,QAAA,gBAAA,oBAAA,EAAA,CAAA;AAEA,kBAAA,cAAA,QAAA,gBAAA,oBAAA,EAAA,CAAA;AAEA,kBAAA,sBAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AACA,kBAAA,UAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AAEA,kBAAA;;gBAAA,SAAA,QAAA;AAAoB,0BAAA,UAAAmM,QAAA,MAAA;AAChB,2BAAAA,OAAY5J,SAAc;AAA1B,wBAAA,QAAA;AACI,wBAAM,QAAQ,WAAA,SAAA,EACV,qHADU;AAKd,4BAAA,OAAA,KAAA,MAAM,OAAOA,OAAb,KAAoB;AAGpB,4BAAA,SAAA,EAAUA,OAAV;;kBACH;AAKM,kBAAA4J,OAAA,UAAA,eAAP,WAAA;AAEI,yBAAK,YAAY,EAAjB;kBACH;AAMO,kBAAAA,OAAA,UAAA,cAAR,SAAoB,QAAc;AAC9B,wBAAM,OAAO,oBAAA,SAAA,EAAgB,KAAK,QAAQ,MAA7B;AACb,wBAAM,QAAQ,IAAI,QAAA,SAAA,EAAM,MAAM,IAAhB;AACd,0BAAM,OAAN;kBACH;AAKM,kBAAAA,OAAA,UAAA,kBAAP,WAAA;kBAA2B;AAC/B,yBAAAA;gBAAC,EAnCmB,YAAA,SAAA,CAApB;;AAqCA,cAAAnM,SAAA,SAAA,IAAe;;;;;;;;;;;;;AC3Cf,kBAAA,SAAA,oBAAA,CAAA;AACA,kBAAA,aAAA,QAAA,gBAAA,oBAAA,CAAA,CAAA;AACA,kBAAA,iBAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AACA,kBAAA,UAAA,oBAAA,CAAA;AAEA,uBAAA,UAAyBuC,SAAgB,OAAa;AAClD,oBAAMyE,UAASzE,QAAO;AACtB,oBAAM,cAAc,IAAI,eAAA,SAAA,EAAYA,OAAhB;AAGpB,oBAAM,gBAAgB,OAAA,UAAU,cAAV;AACtB,oBAAM,UAAU,OAAA,UAAU,QAAV;AAChB,oBAAM,gBAAgB,OAAA,UAAU,cAAV;AACtB,oBAAM,aAAa,OAAA,UAAU,cAAV;AAMnB,yBAAS,YAAY6J,QAAa;AAC9B,kBAAA7J,QAAO,IAAP,IAAA,EAAc,cAAc6J,SAAQ,QAAA,OAApC;AAGA,kBAAA7J,QAAO,OAAO,oBAAoB6J,MAAlC;gBACH;AAMD,yBAAS,iBAAiBA,QAAa;AAEnC,sBAAM,QAAQ7J,QAAO,OAAO,iBAAiB6J,MAA/B;AACd,sBAAI,UAAU,MAAM;AAChB,2BAAO;kBACV;AACD,sBAAI,OAAO,UAAU,UAAU;AAE3B,oBAAA7J,QAAO,OAAO,YAAY,OAAO,OAAjC;kBACH;AACD,yBAAO;gBACV;AAID,oBAAM,WAA2B,CAC7B;;kBAEI,OAAOA,QAAO,QAAQ,EAAE,iDAAjB;kBACP,KAAK,wEACc,aAAU,sMAIJ,gBAAa;kBAGtC,QAAQ;;oBAEJ;sBACI,UAAU,MAAM;sBAChB,MAAM;sBACN,IAAI,SAAAN,MAAA;AACA,4BAAM,QAAQ,WAAA,SAAA,EAAE,MAAM,aAAR;AACd,4BAAM,WAAW,MAAM,MAAM,CAAZ;AACjB,4BAAI,UAAU;AACV,mCAAS,MAAT;wBACH,OAAM;AAEH,iCAAO;wBACV;sBACJ;oBAZL;;oBAeA;sBACI,UAAU,MAAM;sBAChB,MAAM;sBACN,IAAI,SAAAA,MAAA;AACA,4BAAM,QAAQ,WAAA,SAAA,EAAE,MAAM,aAAR;AACd,4BAAM,WAAW,MAAM,MAAM,CAAZ;AACjB,4BAAI,CAAC,UAAU;AAEX,iCAAO;wBACV;AAGD,4BAAM,WAAY,SAAiB;AACnC,4BAAI,SAAS,QAAQ;AACjB,sCAAY,YAAY,QAAxB;wBACH;AAGD,+BAAO;sBACV;oBAnBL;kBAjBI;gBAXZ,GAmDA;;kBAEI,OAAOM,QAAO,QAAQ,EAAE,iDAAjB;;kBAEP,KAAK,qEAEa,gBAAa,4HAGJA,QAAO,QAAQ,EAAE,QAAjB,IAAqB,+KAGR,UAAO,mDAC7BA,QAAO,QAAQ,EAAE,cAAjB,IAAsB;;kBAKxC,QAAQ;;oBAEJ;sBACI,UAAU,MAAM;sBAChB,MAAM;sBACN,IAAI,SAAAN,MAAA;AAAA,4BAAA;AAEA,4BAAM,SAAS,WAAA,SAAA,EAAE,MAAM,aAAR;AACf,4BAAImK,UAAQ,GAAA,MAAA,SAAA,GAAA,WAAA,OAAO,IAAP,CAAA,EAAA,KAAA,QAAA;AAGZ,4BAAI,CAACA;AAAO;AAEZ,4BAAI,CAAC,iBAAiBA,MAAD;AAAS;AAE9B,oCAAYA,MAAD;AAGX,+BAAO;sBACV;sBACD,WAAW;oBAlBf;kBAFI;gBAlBZ,CApD6B;AAgGjC,oBAAM,OAAkB;kBACpB,OAAO;kBACP,QAAQ;;kBAGR,MAAM,CAAA;gBALc;AASxB,oBAAI,OAAO,eAAepF,QAAO,qBAAqBA,QAAO,oBAAoB;AAC7E,uBAAK,KAAK,KAAK,SAAS,CAAD,CAAvB;gBACH;AAED,oBAAIA,QAAO,eAAe;AACtB,uBAAK,KAAK,KAAK,SAAS,CAAD,CAAvB;gBACH;AAED,uBAAO;cACV;AA1JD,cAAAhH,SAAA,SAAA,IAAA;;;;;;;;;;;;;;;;ACNA,kBAAA,SAAA,oBAAA,CAAA;AACA,kBAAA,gBAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AACA,kBAAA,aAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AACA,kBAAA,UAAA,oBAAA,CAAA;AACA,kBAAA,SAAA,oBAAA,CAAA;AAYA,kBAAA;;gBAAA,WAAA;AAGI,2BAAAqM,aAAY9J,SAAc;AACtB,yBAAK,SAASA;kBACjB;AAMM,kBAAA8J,aAAA,UAAA,cAAP,SAAmB,OAAwB;AAA3C,wBAAA,QAAA;AACI,wBAAI,CAAC,MAAM,QAAQ;AACf;oBACH;AAED,wBAAM9J,UAAS,KAAK;AACpB,wBAAMyE,UAASzE,QAAO;AAItB,wBAAM,aAAa;AACnB,wBAAM7B,KAAI,SAAJA,GAAKuG,OAAY;AACnB,6BAAO1E,QAAO,QAAQ,EAAE,aAAa0E,KAA9B;oBACV;AAID,wBAAI,oBAAoBD,QAAO;AAE/B,wBAAM,UAAUA,QAAO;AACvB,wBAAM,qBAAqB,UAAU;AAIrC,wBAAM,kBAAkBA,QAAO;AAE/B,wBAAM,oBAAoBA,QAAO;AAEjC,wBAAM,2BAA2BA,QAAO;AAExC,wBAAM,qBAAqBA,QAAO;AAElC,wBAAM,mBAAmBA,QAAO;AAEhC,wBAAM,qBAAqBA,QAAO;AAElC,wBAAM,uBAAuBA,QAAO;AAEpC,wBAAM,oBAAoBA,QAAO;AAEjC,wBAAM,oBAAoBA,QAAO;AAGjC,wBAAM,cAAsB,CAAA;AAC5B,wBAAM,WAAqB,CAAA;AAC3B,2BAAA,WAAW,OAAO,SAAA,MAAI;AAClB,0BAAM/G,QAAO,KAAK;AAClB,0BAAM,OAAO,KAAK,OAAO,OAAO;AAGhC,0BAAI,CAACA,SAAQ,CAAC,MAAM;AAChB;sBACH;AAED,0BAAI,EAAE,6BAA6B,QAAQ;AAEvC,iCAAS,KAAK,WAAI,oBAAiB,WAAIS,GAAE,qCAAD,CAAxC;AACA;sBACH;AAED,0BACI,EAAC,GAAA,MAAA,SAAA,GAAA,iBAAiB,EAAA,KAAjB,mBACG,SAAA,MAAI;AAAI,+BAAA,SAAST,MAAK,MAAM,GAAX,EAAgBA,MAAK,MAAM,GAAX,EAAgB,SAAzC,CAAS;sBAA2C,CAD9C,GAGpB;AAEE,iCAAS,KAAK,WAAIA,QAAI,WAAIS,GAAE,0BAAD,CAA3B;AACA;sBACH;AAED,0BAAI,qBAAqB,MAAM;AAE3B,iCAAS,KAAK,WAAIT,QAAI,WAAIS,GAAE,cAAD,IAAM,MAAI,qBAAkB,GAAvD;AACA;sBACH;AAED,kCAAY,KAAK,IAAjB;oBACH,CAhCD;AAkCA,wBAAI,SAAS,QAAQ;AACjB,sBAAAsG,QAAO,YAAetG,GAAE,4CAAD,IAAW,SAAS,SAAS,KAAK,IAAd,GAAqB,SAAhE;AACA;oBACH;AAED,wBAAI,YAAY,WAAW,GAAG;AAC1B,sBAAAsG,QAAO,YAAYtG,GAAE,kDAAD,GAAc,SAAlC;AACA;oBACH;AAGD,wBAAI,qBAAqB,OAAO,sBAAsB,YAAY;AAAA,0BAAA;AAC9D,wCAAkB,cAAa,GAAA,MAAA,SAAA,GAAA,WAAA,KAAK,WAAL,EAAA,KAAA,UAAsB,IAAtB,CAAd;AACjB;oBACH;AAGD,wBAAM,WAAW,IAAI,SAAJ;AACjB,qBAAA,GAAA,SAAA,SAAA,GAAA,WAAW,EAAA,KAAX,aAAoB,SAAC,MAAYyB,QAAa;AAC1C,0BAAIlC,QAAO,mBAAmB,KAAK;AACnC,0BAAI,YAAY,SAAS,GAAG;AAExB,wBAAAA,QAAOA,SAAQkC,SAAQ;sBAC1B;AACD,+BAAS,OAAOlC,OAAM,IAAtB;oBACH,CAPU;AAYX,wBAAI,mBAAmB;AAEnB,0BAAM,uBAAuB,kBAAkB,MAAM,GAAxB;AAC7B,0CAAoB,qBAAqB,CAAD;AACxC,0BAAM,wBAAwB,qBAAqB,CAAD,KAAO;AACzD,uBAAA,GAAA,SAAA,SAAA,GAAA,MAAA,EAAA,KAAA,QAAQ,mBAAmB,SAAC,KAAa,KAAW;AAKhD,4BAAI,0BAA0B;AAC1B,+BAAI,GAAA,SAAA,SAAA,GAAA,iBAAiB,EAAA,KAAjB,mBAA0B,GAAT,IAAgB,GAAG;AACpC,iDAAqB;0BACxB,OAAM;AACH,iDAAqB;0BACxB;AACD,8CAAoB,oBAAoB,MAAM,MAAM;wBACvD;AAGD,iCAAS,OAAO,KAAK,GAArB;sBACH,CAhBD;AAiBA,0BAAI,uBAAuB;AACvB,6CAAqB,MAAM;sBAC9B;AAGD,0BAAM,MAAM,cAAA,SAAA,EAAK,mBAAmB;wBAChC,SAAS;wBACT;wBACA,SAAS;wBACT,iBAAiB,CAAC,CAAC;wBACnB,YAAY,SAAA,WAAAiH,MAAG;AACX,8BAAI,iBAAiB;AACjB,mCAAO,iBAAiB,OAAOA,MAAK3E,SAAQ,WAArC;wBACd;wBACD,WAAW,SAAA,UAAA2E,MAAG;AACV,0BAAAF,QAAO,YAAYtG,GAAE,sCAAD,GAAY,OAAhC;AACA,8BAAI,iBAAiB;AAAS,6CAAiB,QAAQwG,MAAK3E,OAA9B;wBACjC;wBACD,YAAY,SAAA,WAAC4E,UAASvG,IAAC;AACnB,8BAAM,cAAc,IAAI,WAAA,SAAA,EAAS2B,OAAb;AACpB,8BAAI3B,GAAE,kBAAkB;AACpB,4BAAAuG,WAAUvG,GAAE,SAASA,GAAE;AACvB,wCAAY,KAAKuG,QAAjB;0BACH;wBACJ;wBACD,SAAS,SAAA,QAAAD,MAAG;AACR,0BAAAF,QAAO,YACHtG,GAAE,sCAAD,GACD,SACGA,GAAE,sCAAD,IAAU,WAAIA,GAAE,4CAAD,IAAW,OAAKwG,KAAI,MAH3C;AAKA,8BAAI,iBAAiB;AAAO,6CAAiB,MAAMA,MAAK3E,OAA5B;wBAC/B;wBACD,QAAQ,SAAA,OAAC2E,MAAK,WAAS;AACnB,0BAAAF,QAAO,YACHtG,GAAE,sCAAD,GACD,SACAA,GAAE,8DAAD,KAAiB,WAAIA,GAAE,0BAAD,IAAQ,QAAO,SAH1C;AAKA,8BAAI,iBAAiB;AAAM,6CAAiB,KAAKwG,MAAK3E,SAAQ,SAAnC;wBAC9B;wBACD,WAAW,SAAA,UAAC2E,MAAK,QAAe;AAC5B,8BAAI,iBAAiB,cAAc;AAAA,gCAAA;AAE/B,6CAAiB,cAAa,GAAA,MAAA,SAAA,GAAA,YAAA,MAAK,WAAL,EAAA,KAAA,WAAsB,KAAtB,GAA6B,QAAQ3E,OAAnE;AACA;0BACH;AACD,8BAAI,OAAO,SAAS,KAAK;AAErB,4BAAAyE,QAAO,YACHtG,GAAE,sCAAD,GACD,SACGA,GAAE,8DAAD,IAAc,WAAIA,GAAE,0BAAD,IAAQ,YAAU,OAAO,KAHpD;AAKA,gCAAI,iBAAiB;AAAM,+CAAiB,KAAKwG,MAAK3E,SAAQ,MAAnC;AAC3B;0BACH;AAGD,8BAAMO,QAAO,OAAO;AAEpB,gCAAK,YAAYA,MAAK,GAAtB;AAGA,8BAAI,iBAAiB;AAAS,6CAAiB,QAAQoE,MAAK3E,SAAQ,MAAtC;wBACjC;sBA5D+B,CAAxB;AA8DZ,0BAAI,OAAO,QAAQ,UAAU;AAEzB,wBAAAyE,QAAO,YAAY,KAAK,OAAxB;sBACH;oBACJ;kBACJ;AAMM,kBAAAqF,aAAA,UAAA,cAAP,SAAmB,KAAW;AAC1B,wBAAM9J,UAAS,KAAK;AACpB,wBAAMyE,UAASzE,QAAO;AAEtB,wBAAM,aAAa;AACnB,wBAAM7B,KAAI,SAAJA,GAAKuG,OAAc,QAA2B;AAA3B,0BAAA,WAAA,QAAA;AAAA,iCAAA;sBAA2B;AAChD,6BAAO1E,QAAO,QAAQ,EAAE,SAAS0E,KAA1B;oBACV;AAGD,wBAAI,CAACD,QAAO,mBAAmB;AAC3B,0BAAI,OAAA,GAAG,WAAW;AACd,wBAAAzE,QAAO,IAAP,IAAA,EACI,cACA,2CAAyC,MAAG,wEAFhD;sBAIH,OAAM;AACH,wBAAAA,QAAO,IAAP,IAAA,EACI,cACA,iBAAe,MAAG,0DAAwD,QAAA,OAF9E;sBAIH;oBACJ,OAAM;AACH,sBAAAyE,QAAO,kBAAkB,GAAzB;AACA;oBACH;AAGD,wBAAI,QAAa,SAAS,cAAc,OAAvB;AACjB,0BAAM,SAAS,WAAA;AACX,8BAAQ;oBACX;AACD,0BAAM,UAAU,WAAA;AACZ,sBAAAA,QAAO,YACHtG,GAAE,sCAAD,GACD,SACA,iBAAeA,GAAE,sCAAD,IAAU,WAAIA,GAAE,0BAAD,IAAQ,OAAK,MAAG,YAAKA,GAAE,sCAAD,CAHzD;AAKA,8BAAQ;oBACX;AACD,0BAAM,UAAU,WAAA;AAAM,6BAAC,QAAD;oBAAc;AACpC,0BAAM,MAAM;kBACf;AACL,yBAAA2L;gBAAC,EAvQD;;AAyQA,cAAArM,SAAA,SAAA,IAAe;;;;;AC/Rf,cAAAD,QAAA,UAAiB,oBAAQ,GAA8B;;;;;ACAvD,kBAAA,SAAa,oBAAQ,GAAmB;AAExC,cAAAA,QAAA,UAAA;;;;;ACFA,kCAAQ,GAA2B;AACnC,kBAAA2C,QAAW,oBAAQ,CAAsB;AAEzC,cAAA3C,QAAA,UAAA2C,MAAA,KAAA;;;;;ACHA,kBAAAR,KAAQ,oBAAQ,CAAqB;AAIrC,cAAAA,GAAA,EAAG,QAAA,QAAA,MAAA,KAAA,GAA6B;gBAChC,KAAA,SAAAoK,OAAA;AACA,0BAAA,oBAAA,KAAA,GAAA,QAAA;gBACA;cACA,CAAC;;;;;;;;;;;;ACFD,kBAAA,kBAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AACA,kBAAA,aAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AAMA,uBAAS,UAAU/J,SAAc;AAE7B,gCAAA,SAAA,EAAiBA,OAAjB;AACA,2BAAA,SAAA,EAAuBA,OAAvB;cACH;AAED,cAAAvC,SAAA,SAAA,IAAe;;;;;;;;;;;;;ACdf,kBAAA,aAAA,QAAA,gBAAA,oBAAA,CAAA,CAAA;AACA,kBAAA,YAAA,QAAA,gBAAA,oBAAA,EAAA,CAAA;AAEA,kBAAA,oBAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AAKA,uBAAgB,iBAAiBuC,SAAc;AAC3C,oBAAI;AACJ,oBAAM7B,KAAI,SAAJA,GAAKuG,OAAc,QAAmB;AAAnB,sBAAA,WAAA,QAAA;AAAA,6BAAA;kBAAmB;AACxC,yBAAO1E,QAAO,QAAQ,EAAE,SAAS0E,KAA1B;gBACV;AAKD,yBAAS,iBAAiB,OAAiB;AACvC,sBAAM,OAAwB,CAC1B;oBACI,OAAO,WAAA,SAAA,EAAE,wCAAF;oBACP,SAAS,SAAA,QAAC1E,SAAgBgK,QAAiB;AAEvC,sBAAAA,OAAM,OAAN;AAEA,6BAAO;oBACV;kBAPL,GASA;oBACI,OAAO,WAAA,SAAA,EAAE,mBAAF;oBACP,SAAS,SAAA,QAAChK,SAAgBgK,QAAiB;AACvC,sBAAAA,OAAM,KAAK,SAAS,MAApB;AACA,sBAAAA,OAAM,WAAW,QAAjB;AAEA,6BAAO;oBACV;kBAPL,GASA;oBACI,OAAO,WAAA,SAAA,EAAE,kBAAF;oBACP,SAAS,SAAA,QAAChK,SAAgBgK,QAAiB;AACvC,sBAAAA,OAAM,KAAK,SAAS,KAApB;AACA,sBAAAA,OAAM,WAAW,QAAjB;AAEA,6BAAO;oBACV;kBAPL,GASA;oBACI,OAAO,WAAA,SAAA,EAAE,kBAAF;oBACP,SAAS,SAAA,QAAChK,SAAgBgK,QAAiB;AACvC,sBAAAA,OAAM,KAAK,SAAS,KAApB;AACA,sBAAAA,OAAM,WAAW,QAAjB;AAEA,6BAAO;oBACV;kBAPL,GASA;oBACI,OAAO,WAAA,SAAA,EAAE,WAAS7L,GAAE,cAAD,IAAM,SAAlB;oBACP,SAAS,SAAA,QAAC6B,SAAgBgK,QAAiB;AACvC,sBAAAA,OAAM,WAAW,OAAjB;AACA,sBAAAA,OAAM,WAAW,QAAjB;AAGA,6BAAO;oBACV;kBARL,GAUA;oBACI,OAAO,WAAA,SAAA,EAAE,WAAS7L,GAAE,4BAAD,IAAoB,SAAhC;oBACP,SAAS,SAAA,QAAC6B,SAAgBgK,QAAiB;AAEvC,wCAAA,SAAA,EAAaA,QAAO,MAApB;AAEA,6BAAO;oBACV;kBAPL,GASA;oBACI,OAAO,WAAA,SAAA,EAAE,WAAS7L,GAAE,4BAAD,IAAoB,SAAhC;oBACP,SAAS,SAAA,QAAC6B,SAAgBgK,QAAiB;AAEvC,wCAAA,SAAA,EAAaA,QAAO,QAApB;AAEA,6BAAO;oBACV;kBAPL,GASA;oBACI,OAAO,WAAA,SAAA,EAAE,WAAS7L,GAAE,4BAAD,IAAoB,SAAhC;oBACP,SAAS,SAAA,QAAC6B,SAAgBgK,QAAiB;AAEvC,wCAAA,SAAA,EAAaA,QAAO,OAApB;AAEA,6BAAO;oBACV;kBAPL,CAjE0B;AA4E9B,4BAAU,IAAI,UAAA,SAAA,EAAQhK,SAAQ,OAAO,IAA3B;AACV,0BAAQ,OAAR;gBACH;AAKD,yBAAS,mBAAgB;AAErB,sBAAI,SAAS;AACT,4BAAQ,OAAR;AACA,8BAAU;kBACb;gBACJ;AAED,uBAAO;kBACH;kBACA;gBAFG;cAIV;AAzGD,cAAAvC,SAAA,mBAAA;AA+GA,uBAAwB,iBAAiBuC,SAAc;AAC7C,oBAAAuC,MAAyC,iBAAiBvC,OAAD,GAAvD,mBAAgBuC,IAAA,kBAAE,mBAAgBA,IAAA;AAG1C,gBAAAvC,QAAO,IAAI,WAAW,iBAAiB,KAAK,gBAA5C;AAGA,gBAAAA,QAAO,IAAI,WAAW,YAAY,KAAK,gBAAvC;AACA,gBAAAA,QAAO,IAAI,WAAW,YAAY,KAAK,gBAAvC;AACA,gBAAAA,QAAO,IAAI,WAAW,mBAAmB,KAAK,gBAA9C;AACA,gBAAAA,QAAO,IAAI,WAAW,gBAAgB,KAAK,gBAA3C;AACA,gBAAAA,QAAO,IAAI,WAAW,iBAAiB,KAAK,gBAA5C;AAGA,gBAAAA,QAAO,IAAI,WAAW,aAAa,KAAK,gBAAxC;cACH;AAfD,cAAAvC,SAAA,SAAA,IAAA;;;;;;;;;;;;;ACvHA,kBAAA,aAAA,QAAA,gBAAA,oBAAA,CAAA,CAAA;AAGA,uBAAwB,aAAa,OAAmB,OAAa;AAEjE,oBAAM,WAAW,CAAC,GAAD;AAEjB,oBAAM,UAAU,mBAAmB,OAAO,QAAR;AAElC,oBAAI,SAAS;AACT,6BAAA,SAAA,EAAE,OAAF,EAAW,IAAI,cAAc,KAA7B;gBACH;cACJ;AATD,cAAAA,SAAA,SAAA,IAAA;AAgBA,uBAAS,mBAAmBmG,KAAgB,KAAa;;AACrD,oBAAI,aAA0BA,IAAG,MAAM,CAAT;AAE9B,uBAAO,cAAc,MAAM;AACvB,uBAAI,GAAA,UAAA,SAAA,GAAA,GAAG,EAAA,KAAH,KAAa,eAAU,QAAV,eAAU,SAAA,SAAV,WAAY,QAAtB,GAAiC;AACpC,2BAAO;kBACV;AAED,wBAAIrB,MAAA,eAAU,QAAV,eAAU,SAAA,SAAV,WAAY,gBAAU,QAAAA,QAAA,SAAA,SAAAA,IAAE,cAAa,QAAQ;AAC7C,2BAAO;kBACV;AACD,+BAAa,WAAW;gBAC3B;AACD,uBAAO;cACV;;;;;;;;;;;ACjCD,kBAAA,SAAA,oBAAA,CAAA;AAEA,uBAAwB,uBAAuBvC,SAAc;AACzD,oBAAI,CAAC,OAAA,GAAG;AAAW;AACX,oBAAA,MAAmBA,QAAhB,KAAE8C,aAAc9C,QAAL;AACd,oBAAA,gBAAkB,IAAI,WAAT;AAErB,8BAAc,KAAK,SAAU3B,IAAC;AAG1B,sBAAM,0BAA0ByE,WAAU,0BAAV;AAChC,sBAAI,yBAAyB;AACzB,wBAAM,WAAW,wBAAwB,WAAW9C,OAAnC;AACjB,wBAAM,WAAW,SAAS,SACpB,SAAS,KAAT,EAAgB,SACZ,SAAS,KAAT,IACA,OACJ;AACN,wBAAI,YAAY,SAAS,KAAK,iBAAd,GAAkC;AAE9C,0BAAI8C,WAAU,aAAV,MAA6B,GAAG;AAEhC,4BAAIzE,GAAE,YAAY,GAAG;AACjB,mCAAS,OAAT;wBACH;sBACJ;oBACJ;kBACJ;gBACJ,CArBD;cAsBH;AA3BD,cAAAZ,SAAA,SAAA,IAAA;;;;;;;;;;;;;ACDA,kBAAA,UAAA,oBAAA,CAAA;AACA,kBAAA,aAAA,QAAA,gBAAA,oBAAA,CAAA,CAAA;AAEA,kBAAA,UAAA,QAAA,gBAAA,oBAAA,EAAA,CAAA;AACA,kBAAA,cAAA,QAAA,gBAAA,oBAAA,EAAA,CAAA;AACA,kBAAA,UAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AACA,kBAAA,sBAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AAEA,kBAAAwM;;gBAAA,SAAA,QAAA;AAAoB,0BAAA,UAAAA,QAAA,MAAA;AAGhB,2BAAAA,OAAYjK,SAAc;AAA1B,wBAAA,QAAA;AACI,wBAAI,QAAQ,WAAA,SAAA,EACR,sFADQ;AAGZ,wBAAI,iBAAiB,oBAAA,SAAA,EAAgBA,OAAhB;AACrB,wBAAI,eAAe,gBAAgB;AAAA,0BAAA;AAC/B,8BAAQ,eAAe,eAAe;AACtC,uBAAA,GAAA,KAAA,SAAA,GAAA,WAAA,eAAe,eAAe,MAA9B,EAAA,KAAA,UAAyC,SAAA,OAAK;AAC1C,4BAAM,OAAO,MAAM;AACnB,4BAAMN,MAAK,MAAM,MAAM,QAAA;AACvB,8BAAM,GAAG,MAAM,SAACrB,IAAQ;AACpB,0BAAAA,GAAE,gBAAF;AACA,0BAAAqB,IAAGrB,EAAD;wBACL,CAHD;sBAIH,CAPD;oBAQH;AACD,4BAAA,OAAA,KAAA,MAAM,OAAO2B,OAAb,KAAoB;AACpB,0BAAK,iBAAiB;AAGtB,4BAAA,SAAA,EAAUA,OAAV;;kBACH;AAKM,kBAAAiK,OAAA,UAAA,eAAP,WAAA;AACI,wBAAI,CAAC,KAAK,eAAe,gBAAgB;AACrC,2BAAK,YAAL;oBACH;kBACJ;AAKO,kBAAAA,OAAA,UAAA,cAAR,WAAA;AACI,wBAAM,OAAO,KAAK;AAClB,wBAAM,QAAQ,IAAI,QAAA,SAAA,EAAM,MAAM,IAAhB;AACd,yBAAK,SAAS,KAAd;AACA,0BAAM,OAAN;kBACH;AAKM,kBAAAA,OAAA,UAAA,kBAAP,WAAA;kBAA2B;AAC/B,yBAAAA;gBAAC,EAjDmB,YAAA,SAAA,CAApB;;AAmDA,cAAAxM,SAAA,SAAA,IAAewM;;;;;;;;;;;;AC3Df,kBAAA,cAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AACA,kBAAA,aAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AACA,kBAAA,cAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AACA,kBAAA,kBAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AACA,kBAAA,mBAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AAMA,uBAAS,UAAUjK,SAAc;AAE7B,4BAAA,SAAA,EAAaA,OAAb;AAGA,2BAAA,SAAA,EAAYA,OAAZ;AAIA,4BAAA,SAAA,EAAgBA,OAAhB;AAGA,gCAAA,SAAA,EAAeA,OAAf;AAEA,iCAAA,SAAA,EAAkBA,OAAlB;cACH;AAED,cAAAvC,SAAA,SAAA,IAAe;;;;;;;;;;;;AC3Bf,kBAAA,gBAAA,oBAAA,GAAA;AACA,kBAAA,eAAA,QAAA,gBAAA,oBAAA,EAAA,CAAA;AAOA,uBAAS,gBAAgBuC,SAAgB3B,IAAiB;AACtD,oBAAMoG,UAASzE,QAAO;AACtB,oBAAM,mBAAmByE,QAAO;AAChC,oBAAM,iBAAiBA,QAAO;AAC9B,oBAAI,YAAY,cAAA,aAAapG,IAAG,kBAAkB,cAAlC;AAChB,oBAAI;AAAW,yBAAO;AACtB,oBAAI,YAAY,cAAA,aAAaA,EAAb;AAChB,oBAAI;AAAW,yBAAO;AAEtB,uBAAO;cACV;AAOD,uBAAS,WAAW2B,SAAgB3B,IAAiB;;AACjD,oBAAM6L,WAAQ3H,MAAAlE,GAAE,mBAAa,QAAAkE,QAAA,SAAA,SAAAA,IAAE,UAAS,CAAA;AAExC,yBAAS,IAAI,GAAG,IAAI2H,OAAM,QAAQ,KAAK;AACnC,sBAAM,OAAOA,OAAM,CAAD;AAClB,sBAAI,SAAS,SAAS;AAClB,2BAAO;kBACV;gBACJ;AAED,uBAAO;cACV;AAKD,uBAAS,gBAAgB7L,IAAmB2B,SAAc;AAEtD,oBAAI,CAAC,WAAWA,SAAQ3B,EAAT,GAAa;AACxB,sBAAI,gBAAgB2B,SAAQ3B,EAAT,GAAa;AAE5B;kBACH;gBACJ;AAGD,oBAAM,cAAc,cAAA,aAAaA,EAAb;AACpB,oBAAI,CAAC,YAAY,QAAQ;AACrB;gBACH;AAKD,oBAAM,YAAY,IAAI,aAAA,SAAA,EAAU2B,OAAd;AAClB,0BAAU,UAAU,WAApB;cACH;AAOD,uBAAS,aAAaA,SAAc;AAmBhC,gBAAAA,QAAO,IAAI,WAAW,YAAY,QAAQ,SAAC3B,IAAiB;AACxD,kCAAgBA,IAAG2B,OAAJ;gBAClB,CAFD;cAGH;AAED,cAAAvC,SAAA,SAAA,IAAe;;;;;;;;;;;;AC5Ff,kBAAA,eAAA,QAAA,gBAAA,oBAAA,EAAA,CAAA;AAEA,uBAAwB,YAAYuC,SAAc;AAK9C,yBAAS,eAAe3B,IAAM;AAC1B,sBAAM,QAAQA,GAAE,gBAAgBA,GAAE,aAAa;AAC/C,sBAAI,CAAC,SAAS,CAAC,MAAM,QAAQ;AACzB;kBACH;AAGD,sBAAM,YAAY,IAAI,aAAA,SAAA,EAAU2B,OAAd;AAClB,4BAAU,UAAU,KAApB;gBACH;AAGD,gBAAAA,QAAO,IAAI,WAAW,WAAW,KAAK,cAAtC;cACH;AAlBD,cAAAvC,SAAA,SAAA,IAAA;;;;;;;;;;;;;;;ACFA,kBAAA,aAAA,QAAA,gBAAA,oBAAA,CAAA,CAAA;AACA,kCAAA,GAAA;AACA,kBAAA,SAAA,oBAAA,CAAA;AAUA,uBAAS,aAAa,OAAmB,OAAe,QAAgB0E,OAAclC,MAAW;AAC7F,sBAAM,KAAK,SAAS,WAAS,QAAK,gBAAc,SAAM,cAAYkC,QAAI,aAAWlC,OAAG,KAApF;cACH;AAOD,uBAAS,cAAcD,SAAgB,oBAA8B;AACjE,oBAAM,QAAQ,WAAA,SAAA,EACV,2JADU;AAOd,sBAAM,KAAN;AACA,mCAAmB,OAAO,KAA1B;AACA,uBAAO;cACV;AAOD,uBAAS,YAAY,oBAAgC,OAAmB,MAAgB;AACpF,oBAAM,UAAU,mBAAmB,sBAAnB;AAChB,oBAAM,OAAO,KAAK,sBAAL;AACb,oBAAM,QAAQ,KAAK,MAAM,QAAQ,CAAnB;AACd,oBAAM,QAAQ,KAAK,OAAO,QAAQ,CAApB;AACd,iBAAA,GAAA,MAAA,SAAA,GAAA,KAAK,EAAA,KAAL,OAAW,yBAAN,EAAiC,KAAQ,QAAK,UAAQ,QAAK,IAAhE;AACA,6BACI,QACA,GAAA,aAAA,SAAA,GAAW,KAAX,IACA,GAAA,aAAA,SAAA,GAAW,KAAX,GACA,KAAK,OAAO,QAAQ,MACpB,KAAK,MAAM,QAAQ,GALX;AAOZ,sBAAM,KAAN;cACH;AAKD,uBAAgB,iBAAiBA,SAAc;AAC3C,oBAAM,qBAAqBA,QAAO;AAClC,oBAAI;AAGJ,oBAAM,QAAQ,cAAcA,SAAQ,kBAAT;AAO3B,yBAAS,eAAemK,QAAmB,YAAsB;AAC7D,kBAAAA,OAAM,GAAG,SAAS,SAAU9L,IAAQ;AAChC,oBAAAA,GAAE,gBAAF;kBACH,CAFD;AAGA,kBAAA8L,OAAM,GAAG,aAAa,oBAAoB,SAAC9L,IAAa;AAEpD,oBAAAA,GAAE,eAAF;AAEA,wBAAI,CAAC;AAAY;AAEjB,wBAAM,SAASA,GAAE;AACjB,wBAAM,SAASA,GAAE;AACjB,wBAAM,UAAU,WAAW,sBAAX;AAChB,wBAAM,UAAU,WAAW,sBAAX;AAChB,wBAAM,QAAQ,QAAQ;AACtB,wBAAM,SAAS,QAAQ;AACvB,wBAAM8D,QAAO,QAAQ,OAAO,QAAQ;AACpC,wBAAMlC,OAAM,QAAQ,MAAM,QAAQ;AAClC,wBAAM,QAAQ,QAAQ;AAEtB,wBAAI,OAAO;AACX,wBAAI,OAAO;AACX,wBAAM,YAAY,WAAA,SAAA,EAAE,QAAF;AAElB,6BAAS,YAAS;AACd,gCAAU,IAAI,aAAa,gBAA3B;AACA,gCAAU,IAAI,WAAW,cAAzB;oBACH;AAED,6BAAS,iBAAiB,IAAc;AACpC,yBAAG,gBAAH;AACA,yBAAG,eAAH;AAEA,6BAAO,SAAS,GAAG,UAAU;AAC7B,6BAAO,UAAU,GAAG,UAAU;AAG9B,0BAAI,OAAO,QAAQ,OAAO;AACtB,+BAAO,OAAO;sBACjB;AAED,8BAAO,GAAA,aAAA,SAAA,GAAW,KAAK,QAAQ,CAAb,CAAX;AACP,8BAAO,GAAA,aAAA,SAAA,GAAW,KAAK,QAAQ,CAAb,CAAX;AAEP,uBAAA,GAAA,MAAA,SAAA,GAAAkK,MAAK,EAAA,KAALA,QACU,yBADL,EAEA,KACM,KAAK,QAAQ,CAAb,EAAgB,QAAQ,OAAO,EAA/B,IAAkC,UAAQ,KACxC,QAAQ,CADgC,EAExC,QAAQ,OAAO,EAFyB,IAEtB,IAL/B;AAOA,mCAAaA,QAAO,MAAM,MAAMhI,OAAMlC,IAA1B;oBACf;AACD,8BAAU,GAAG,aAAa,gBAA1B;AAEA,6BAAS,iBAAc;AACnB,iCAAW,KAAK,SAAS,OAAO,EAAhC;AACA,iCAAW,KAAK,UAAU,OAAO,EAAjC;AACA,0BAAM,aAAa,WAAW,sBAAX;AACnB,mCACIkK,QACA,MACA,MACA,WAAW,OAAO,QAAQ,MAC1B,WAAW,MAAM,QAAQ,GALjB;AASZ,gCAAS;oBACZ;AACD,8BAAU,GAAG,WAAW,cAAxB;AAGA,8BAAU,GAAG,cAAc,SAA3B;kBACH,CAtED;gBAuEH;AAGD,yBAAS,SAAS,SAAmB;AACjC,sBAAI,OAAA,GAAG,KAAH;AAAW,2BAAO;AACtB,sBAAI,SAAS;AACT,iCAAa;AACb,gCAAY,oBAAoB,OAAO,UAA5B;kBACd;gBACJ;AAGD,yBAAS,WAAQ;AACb,mBAAA,GAAA,MAAA,SAAA,GAAA,kBAAkB,EAAA,KAAlB,oBAAwB,oBAAN,EAA4B,KAA9C;gBACH;AAGD,+BAAe,OAAO,kBAAR;AAGd,2BAAA,SAAA,EAAE,QAAF,EAAY,GAAG,SAAS,QAAxB;AACA,gBAAAnK,QAAO,cAAc,WAAA;AACjB,6BAAA,SAAA,EAAE,QAAF,EAAY,IAAI,SAAS,QAAzB;gBACH,CAFD;AAIA,uBAAO;kBACH;kBACA;gBAFG;cAIV;AApHD,cAAAvC,SAAA,mBAAA;AAyHA,uBAAwB,gBAAgBuC,SAAc;AAC5C,oBAAAuC,MAAyB,iBAAiBvC,OAAD,GAAvC,WAAQuC,IAAA,UAAE,WAAQA,IAAA;AAG1B,gBAAAvC,QAAO,IAAI,WAAW,eAAe,KAAK,QAA1C;AAGA,gBAAAA,QAAO,IAAI,WAAW,iBAAiB,KAAK,QAA5C;AACA,gBAAAA,QAAO,IAAI,WAAW,YAAY,KAAK,QAAvC;AACA,gBAAAA,QAAO,IAAI,WAAW,mBAAmB,KAAK,QAA9C;AACA,gBAAAA,QAAO,IAAI,WAAW,gBAAgB,KAAK,QAA3C;AACA,gBAAAA,QAAO,IAAI,WAAW,aAAa,KAAK,QAAxC;cACH;AAZD,cAAAvC,SAAA,SAAA,IAAA;;;;;ACzLA,cAAAD,QAAA,UAAiB,oBAAQ,GAAiC;;;;;ACA1D,kBAAA,SAAa,oBAAQ,GAAmB;AAExC,cAAAA,QAAA,UAAA;;;;;ACFA,kCAAQ,GAA2B;AACnC,kBAAA2C,QAAW,oBAAQ,CAAmB;AAEtC,cAAA3C,QAAA,UAAA2C,MAAA;;;;;ACHA,kBAAAR,KAAQ,oBAAQ,CAAqB;AACrC,kBAAA,2BAA+B,oBAAQ,GAAiC;AAIxE,cAAAA,GAAA,EAAG,QAAA,MAAA,QAAA,cAAA,yBAAA,GAA+D;gBAClE,YAAA;cACA,CAAC;;;;;ACPD,kBAAAO,UAAa,oBAAQ,CAAqB;AAC1C,kBAAA,OAAW,oBAAQ,EAA0B,EAAA;AAC7C,kBAAA,cAAkB,oBAAQ,EAA0B;AAEpD,kBAAA,cAAAA,QAAA;AACA,kBAAA,SAAA,IAAA,YAAA,cAAA,IAAA,MAAA;AAIA,cAAA1C,QAAA,UAAA,SAAA,SAAA4M,YAAAnH,SAAA;AACA,oBAAA,gBAAA,KAAA,OAAAA,OAAA,CAAA;AACA,oBAAA,SAAA,YAAA,aAAA;AACA,uBAAA,WAAA,KAAA,cAAA,OAAA,CAAA,KAAA,MAAA,KAAA;cACA,IAAC;;;;;ACbD,kBAAA,MAAU,oBAAQ,EAA8E;AAChG,kBAAAxB,WAA0B,oBAAQ,GAAiK;AAEnM,cAAAA,WAAAA,SAAA,aAAAA,SAAA,UAAAA;AAEA,kBAAA,OAAAA,aAAA,UAAA;AACA,gBAAAA,WAAA,CAAA,CAA0BjE,QAAA,GAASiE,UAAA,EAAA,CAAA;cACnC;AAEA,kBAAA,UAAA,CAAA;AAEA,sBAAA,SAAA;AACA,sBAAA,YAAA;AAEA,kBAAA,SAAA,IAAAA,UAAA,OAAA;AAIA,cAAAjE,QAAA,UAAAiE,SAAA,UAAA,CAAA;;;;;ACjBA,kBAAA,8BAAkC,oBAAQ,EAAsD;AAChG,cAAAhE,WAAA,4BAAA,KAAA;AAEA,cAAAA,SAAA,KAAA,CAAcD,QAAA,GAAS,koBAA+nB,EAAA,CAAA;AAEtpB,cAAAA,QAAA,UAAAC;;;;;;;;;;;;;ACDA,kBAAA,aAAA,QAAA,gBAAA,oBAAA,CAAA,CAAA;AACA,kBAAA,YAAA,QAAA,gBAAA,oBAAA,EAAA,CAAA;AAMA,uBAAgB,iBAAiBuC,SAAc;AAC3C,oBAAI;AACJ,oBAAM7B,KAAI,SAAJA,GAAKuG,OAAc,QAAmB;AAAnB,sBAAA,WAAA,QAAA;AAAA,6BAAA;kBAAmB;AACxC,yBAAO1E,QAAO,QAAQ,EAAE,SAAS0E,KAA1B;gBACV;AAMD,yBAAS,eAAe,OAAiB;AACrC,sBAAM,OAAwB,CAC1B;oBACI,OAAO,WAAA,SAAA,EAAE,wCAAF;oBACP,SAAS,SAAA,QAAC1E,SAAgBgK,QAAiB;AAEvC,sBAAAhK,QAAO,UAAU,kBAAkBgK,MAAnC;AACA,sBAAAhK,QAAO,UAAU,iBAAjB;AACA,sBAAAA,QAAO,IAAP,IAAA,EAAc,QAAd;AAEA,6BAAO;oBACV;kBATL,GAWA;oBACI,OAAO,WAAA,SAAA,EAAE,kBAAF;oBACP,SAAS,SAAA,QAACA,SAAgBgK,QAAiB;AACvC,sBAAAA,OAAM,KAAK,SAAS,KAApB;AACA,sBAAAA,OAAM,WAAW,QAAjB;AAGA,6BAAO;oBACV;kBARL,GAUA;oBACI,OAAO,WAAA,SAAA,EAAE,kBAAF;oBACP,SAAS,SAAA,QAAChK,SAAgBgK,QAAiB;AACvC,sBAAAA,OAAM,KAAK,SAAS,KAApB;AACA,sBAAAA,OAAM,WAAW,QAAjB;AAGA,6BAAO;oBACV;kBARL,GAUA;oBACI,OAAO,WAAA,SAAA,EAAE,mBAAF;oBACP,SAAS,SAAA,QAAChK,SAAgBgK,QAAiB;AACvC,sBAAAA,OAAM,KAAK,SAAS,MAApB;AACA,sBAAAA,OAAM,WAAW,QAAjB;AAGA,6BAAO;oBACV;kBARL,CAhC0B;AA4C9B,uBAAK,KAAK;oBACN,OAAO,WAAA,SAAA,EAAE,WAAS7L,GAAE,cAAD,IAAM,SAAlB;oBACP,SAAS,SAAA,QAAC6B,SAAgBgK,QAAiB;AACvC,sBAAAA,OAAM,WAAW,OAAjB;AACA,sBAAAA,OAAM,WAAW,QAAjB;AAGA,6BAAO;oBACV;kBARK,CAAV;AAWA,sBAAI,MAAM,KAAK,WAAX,GAAyB;AACzB,yBAAK,KAAK;sBACN,OAAO,WAAA,SAAA,EAAE,WAAS7L,GAAE,0BAAD,IAAQ,SAApB;sBACP,SAAS,SAAA,QAAC6B,SAAgBgK,QAAiB;AACvC,4BAAInF,QAAOmF,OAAM,KAAK,WAAX;AACX,4BAAInF,OAAM;AACN,0BAAAA,QAAO,mBAAmBA,KAAD;AACzB,iCAAO,KAAKA,OAAM,SAAlB;wBACH;AAED,+BAAO;sBACV;oBAVK,CAAV;kBAYH;AAED,4BAAU,IAAI,UAAA,SAAA,EAAQ7E,SAAQ,OAAO,IAA3B;AACV,0BAAQ,OAAR;gBACH;AAKD,yBAAS,iBAAc;AAEnB,sBAAI,SAAS;AACT,4BAAQ,OAAR;AACA,8BAAU;kBACb;gBACJ;AAED,uBAAO;kBACH;kBACA;gBAFG;cAIV;AApGD,cAAAvC,SAAA,mBAAA;AA0GA,uBAAwB,iBAAiBuC,SAAc;AAC7C,oBAAAuC,MAAqC,iBAAiBvC,OAAD,GAAnD,iBAAcuC,IAAA,gBAAE,iBAAcA,IAAA;AAGtC,gBAAAvC,QAAO,IAAI,WAAW,eAAe,KAAK,cAA1C;AAGA,gBAAAA,QAAO,IAAI,WAAW,YAAY,KAAK,cAAvC;AACA,gBAAAA,QAAO,IAAI,WAAW,YAAY,KAAK,cAAvC;AACA,gBAAAA,QAAO,IAAI,WAAW,mBAAmB,KAAK,cAA9C;AACA,gBAAAA,QAAO,IAAI,WAAW,gBAAgB,KAAK,cAA3C;AACA,gBAAAA,QAAO,IAAI,WAAW,iBAAiB,KAAK,cAA5C;AACA,gBAAAA,QAAO,IAAI,WAAW,0BAA0B,KAAK,cAArD;AAGA,gBAAAA,QAAO,IAAI,WAAW,aAAa,KAAK,cAAxC;cACH;AAhBD,cAAAvC,SAAA,SAAA,IAAA;;;;;;;;;;;ACpHA,uBAAwB,uBAAuBuC,SAAc;AACjD,oBAAA,MAAmBA,QAAhB,KAAE8C,aAAc9C,QAAL;AACd,oBAAA,gBAAkB,IAAI,WAAT;AAErB,8BAAc,KAAK,SAAU3B,IAAC;AAE1B,sBAAM,0BAA0ByE,WAAU,0BAAV;AAChC,sBAAMC,SAAQD,WAAU,SAAV;AAEd,sBACI,CAACC,UACD,CAAC,2BACD1E,GAAE,YAAY,KACd,CAACyE,WAAU,iBAAV,GACH;AACE;kBACH;AACK,sBAAA,iBAAgCC,OAAlB,gBAAE,cAAgBA,OAAL;AAGjC,sBAAI,WAAwB;AAC5B,sBAAI,gBAAgB,GAAG;AAEnB,2BACI,mBAAmB,wBAAwB,MAAM,CAA9B,KACnB,wBAAwB,MAAM,CAA9B,EAAiC,SAAS,cAA1C,KACA,eAAe,cACf,CAAC,UACH;AACE,0BAAI,eAAe,iBAAiB;AAChC,mCAAW,eAAe;AAC1B;sBACH;AACD,uCAAiB,eAAe;oBACnC;kBACJ,WAAU,eAAe,aAAa,GAAG;AAEtC,+BAAW,eAAe,WAAW,cAAc,CAAxC;kBACd;AAED,sBAAI,CAAC,UAAU;AACX;kBACH;AAED,sBAAI,0BAA0B;AAG9B,yBAAO,wBAAwB,WAAW,QAAQ;AAC9C,8CACI,wBAAwB,WAAW,wBAAwB,WAAW,SAAS,CAA/E;kBACP;AAED,sBACI,mCAAmC,eACnC,wBAAwB,YAAY,OACtC;AACE,4CAAwB,OAAxB;AACA,oBAAA1E,GAAE,eAAF;kBACH;gBACJ,CAvDD;cAwDH;AA5DD,cAAAZ,SAAA,SAAA,IAAA;;;;;;;;;;;;;;ACIA,kBAAA,aAAA,QAAA,gBAAA,oBAAA,CAAA,CAAA;AACA,kBAAA,SAAA,oBAAA,CAAA;AAEA,kBAAA,eAAA,QAAA,gBAAA,oBAAA,EAAA,CAAA;AASA,uBAAA,UAAyBuC,SAAc;AAAA,oBAAA;AACnC,oBAAMyE,UAASzE,QAAO;AACtB,oBAAM,YAAY,IAAI,aAAA,SAAA,EAAUA,OAAd;AAGlB,oBAAM,cAAc,OAAA,UAAU,eAAV;AACpB,oBAAM,WAAW,OAAA,UAAU,YAAV;AACjB,oBAAM,YAAY,OAAA,UAAU,gBAAV;AAClB,oBAAM,eAAe,OAAA,UAAU,oBAAV;AACrB,oBAAM,gBAAgB,OAAA,UAAU,qBAAV;AACtB,oBAAM,YAAY,OAAA,UAAU,UAAV;AAElB,oBAAM,aAAa;AACnB,oBAAM7B,KAAI,SAAJA,GAAKuG,OAAc,QAA2B;AAA3B,sBAAA,WAAA,QAAA;AAAA,6BAAA;kBAA2B;AAChD,yBAAO1E,QAAO,QAAQ,EAAE,SAAS0E,KAA1B;gBACV;AAMD,yBAAS,aAAa,KAAa,gBAAyB,iBAAwB;AAEhF,sBAAM,QAAQD,QAAO,aAAa,GAApB;AACd,sBAAI,UAAU,MAAM;AAChB,2BAAO;kBACV,WAAU,OAAO,UAAU,UAAU;AAElC,oBAAAA,QAAO,YAAY,OAAO,OAA1B;kBACH;AACD,yBAAO;gBACV;AAGD,oBAAM,mBAAmBA,QAAO,uBAAuB,IAAI,KAAK;AAChE,oBAAM,WAAkB,GAAA,KAAA,SAAA,GAAA,WAAAA,QAAO,eAAP,EAAA,KAAA,UAA2B,SAAC,MAAY;AAAK,yBAAA,WAAA;gBAAe,CAA5D,EAA8D,KAAK,GAAnE;AAUxB,oBAAM,kBAAkB,SAAlB4F,iBAAmB,gBAAwB,WAAmB,WAAiB;AACjF,yBAAA,iBAAe,iBAAc,mBAAiB,YAAS,8BACxC,cAAW,sDACN,YAAS,qGAGR,WAAQ,mBAAiB,mBAAgB,cAAY,UAAO;gBAE1E;AACX,oBAAM,eAA+B;;kBAEjC;oBACI,UAAU,MAAM;oBAChB,MAAM;oBACN,IAAI,SAAA3K,MAAA;AACA,0BAAM,qBAAqB+E,QAAO;AAClC,0BAAI,sBAAsB,OAAO,uBAAuB,YAAY;AAChE,2CAAkB;AAClB,+BAAO;sBACV;AACD,0BAAM,QAAQ,WAAA,SAAA,EAAE,MAAM,QAAR;AACd,0BAAM,WAAW,MAAM,MAAM,CAAZ;AACjB,0BAAI,UAAU;AACV,iCAAS,MAAT;sBACH,OAAM;AAEH,+BAAO;sBACV;oBACJ;kBAjBL;;kBAoBA;oBACI,UAAU,MAAM;oBAChB,MAAM;oBACN,IAAI,SAAA/E,MAAA;AACA,0BAAM,QAAQ,WAAA,SAAA,EAAE,MAAM,QAAR;AACd,0BAAM,WAAW,MAAM,MAAM,CAAZ;AACjB,0BAAI,CAAC,UAAU;AAEX,+BAAO;sBACV;AAGD,0BAAM,WAAW,SAAS;AAC1B,0BAAI,aAAQ,QAAR,aAAQ,SAAA,SAAR,SAAU,QAAQ;AAClB,kCAAU,UAAU,QAApB;sBACH;AAID,0BAAI,UAAU;AACV,iCAAS,QAAQ;sBACpB;AAGD,6BAAO;oBACV;kBAzBL;gBAtBiC;AAmDrC,oBAAM,gBAAgB,CAClB,6BACU,YAAS,qFAGAvB,GAAE,0BAAD,IAAQ,KALV;AAQtB,oBAAIsG,QAAO,gBAAgB;AACvB,gCAAc,KAAK,uCAET,eAAY,qFAGHtG,GAAE,sCAAD,IAAU,KAL9B;gBAMH;AAED,oBAAIsG,QAAO,iBAAiB;AACxB,gCAAc,KAAK,uCAET,gBAAa,qFAGJtG,GAAE,0BAAD,IAAQ,KAL5B;gBAMH;AAED,oBAAM,WAA2B;;kBAE7B;;oBAEI,OAAOA,GAAE,0BAAD;;oBAER,KAAK,gBAAgB,wBAAwB,oBAAoB,EAA7C;;oBAEpB,QAAQ;kBANZ;;kBASA;oBACI,OAAOA,GAAE,0BAAD;oBACR,KAAK,gCACK,cAAc,KAAK,EAAnB,IAAsB,iHAEQ,YAAS,qBAAmBA,GAChE,gBACA,EAFiE,IAGpE;oBAGD,QAAQ,CACJ;sBACI,UAAU,MAAM;sBAChB,MAAM;sBACN,IAAI,SAAAuB,MAAA;AAAA,4BAAA;AACA,4BAAM,WAAW,WAAA,SAAA,EAAE,MAAM,SAAR;AACjB,4BAAM,OAAM,GAAA,MAAA,SAAA,GAAA,YAAA,SAAS,IAAT,CAAA,EAAA,KAAA,SAAA;AAGZ,4BAAI,CAAC;AAAK;AAEV,4BAAI;AACJ,4BAAI+E,QAAO,gBAAgB;AAAA,8BAAA;AACvB,4CAAiB,GAAA,MAAA,SAAA,GAAA,YAAA,WAAA,SAAA,EAAE,MAAM,YAAR,EACZ,IADY,CAAA,EAAA,KAAA,SAAA;wBAGpB;AACD,4BAAI;AACJ,4BAAIA,QAAO,iBAAiB;AAAA,8BAAA;AACxB,6CAAkB,GAAA,MAAA,SAAA,GAAA,YAAA,WAAA,SAAA,EAAE,MAAM,aAAR,EACb,IADa,CAAA,EAAA,KAAA,SAAA;wBAGrB;AAED,4BAAI,CAAC,aAAa,KAAK,gBAAgB,eAAtB;AAAwC;AAEzD,kCAAU,UAAU,KAAK,gBAAgB,eAAzC;AAEA,+BAAO;sBACV;sBACD,WAAW;oBA7Bf,CADI;kBAXZ;gBAX6B;AA4DjC,oBAAM,OAAqB;kBACvB,OAAO;kBACP,QAAQ;kBACR,MAAM,CAAA;kBACN,gBAAgB;oBACZ,OAAO,WAAA,SAAA,EAAE,gBAAgB,YAAY,kBAAkB,cAA/B,CAAjB;oBACP,QAAQ;kBAFI;gBAJO;AAU3B,oBACI,OAAO,eACNA,QAAO,uBACJA,QAAO,mBACPA,QAAO,mBACPA,QAAO,qBACb;AACE,uBAAK,KAAK,KAAK,SAAS,CAAD,CAAvB;gBACH;AAED,oBAAIA,QAAO,aAAa;AACpB,uBAAK,KAAK,KAAK,SAAS,CAAD,CAAvB;AACA,uBAAK,iBAAiB;gBACzB;AAED,uBAAO;cACV;AAzND,cAAAhH,SAAA,SAAA,IAAA;;;;;;;;;;;;;ACbA,kBAAA,aAAA,QAAA,gBAAA,oBAAA,CAAA,CAAA;AAEA,kBAAA,iBAAA,QAAA,gBAAA,oBAAA,EAAA,CAAA;AAEA,kBAAA,oBAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AAEA,kBAAA;;gBAAA,SAAA,QAAA;AAAqB,0BAAA,UAAA6M,SAAA,MAAA;AACjB,2BAAAA,QAAYtK,SAAc;AAA1B,wBAAA,QAAA;AACI,wBAAM,QAAQ,WAAA,SAAA,EACV,gIADU;AAKd,wBAAM,eAAe;sBACjB,OAAO;sBACP,OAAO;sBACP,MAAM;sBACN,MAAM,CACF;wBACI,OAAO,WAAA,SAAA,EACH,+HAEMA,QAAO,QAAQ,EAAE,oDAAjB,IAAkD,+BAHrD;wBAMP,OAAO;sBAPX,GAUA;wBACI,OAAO,WAAA,SAAA,EACH,+HAEMA,QAAO,QAAQ,EAAE,oDAAjB,IAAkD,+BAHrD;wBAMP,OAAO;sBAPX,CAXE;sBAqBN,cAAc,SAAA,aAAC,OAAa;AAExB,8BAAK,QAAQ,KAAb;sBACH;oBA5BgB;AA+BrB,4BAAA,OAAA,KAAA,MAAM,OAAOA,SAAQ,YAArB,KAAkC;;kBACrC;AAMM,kBAAAsK,QAAA,UAAA,UAAP,SAAe,OAAa;AACxB,wBAAMtK,UAAS,KAAK;AACpB,wBAAM,iBAAiBA,QAAO,UAAU,0BAAjB;AAGvB,wBAAI,kBAAkBA,QAAO,UAAU,MAAM,cAAvB,GAAwC;AAG1D,0BAAM,SAASA,QAAO,UAAU,0BAAjB;AACf,0BAAI,OAAO,SAAS,GAAG;AACnB,yBAAA,GAAA,SAAA,SAAA,GAAA,MAAM,EAAA,KAAN,QAAe,SAAC,MAAS;AACrB,4CAAA,SAAA,EAAe,WAAA,SAAA,EAAE,IAAF,GAAS,OAAOA,OAA/B;wBACH,CAFK;sBAGT;oBACJ,OAAM;AAGH,0BAAI,kBAAkB,eAAe,SAAS,GAAG;AAC7C,yBAAA,GAAA,SAAA,SAAA,GAAA,cAAc,EAAA,KAAd,gBAAuB,SAAC,MAAS;AAC7B,4CAAA,SAAA,EAAe,WAAA,SAAA,EAAE,IAAF,GAAS,OAAOA,OAA/B;wBACH,CAFa;sBAGjB;oBACJ;AAGD,oBAAAA,QAAO,UAAU,iBAAjB;AACA,yBAAK,gBAAL;kBACH;AAKM,kBAAAsK,QAAA,UAAA,kBAAP,WAAA;AACI,wBAAMtK,UAAS,KAAK;AACpB,wBAAM,iBAAiBA,QAAO,UAAU,sBAAjB;AACvB,wBAAM,sBAAsB,WAAA,SAAA,EAAE,cAAF,EAAkB,WAAWA,OAA7B;AAE5B,wBAAI,oBAAoB,UAAU;AAAG;AAErC,wBAAI,oBAAoB,MAAM,CAA1B,EAA6B,MAAM,aAAnC,KAAqD,IAAI;AACzD,2BAAK,OAAL;oBACH,OAAM;AACH,2BAAK,SAAL;oBACH;kBACJ;AACL,yBAAAsK;gBAAC,EA1FoB,eAAA,SAAA,CAArB;;AA4FA,cAAA7M,SAAA,SAAA,IAAe;;;;;;;;;;;;;;AC7Ff,kBAAA,0BAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AACA,kBAAA,0BAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AAEA,kBAAM,cAAc;AACpB,kBAAM,eAAe;AAErB,uBAAS,iBAAiBuC,SAAc;AAC5B,oBAAA,cAAgBA,QAAO,OAAZ;AAEnB,oBAAI,OAAO,gBAAgB,UAAU;AACjC,sBAAI,YAAY,KAAK,WAAjB,GAA+B;AAAA,wBAAA;AACzB,wBAAAuC,OAAgB,GAAA,OAAA,SAAA,GAAA,YAAA,GAAA,MAAA,SAAA,GAAA,WAAW,EAAA,KAAX,WAAW,EAAQ,MAAM,WAAzB,CAAA,EAAA,KAAA,UAA6C,GAAG,CAAhD,GAAf,QAAKA,IAAA,CAAA,GAAE,OAAIA,IAAA,CAAA;AAClB,2BAAO;sBACH,OAAO,OAAO,KAAD;sBACb;oBAFG;kBAIV,WAAU,aAAa,KAAK,WAAlB,GAAgC;AACvC,2BAAO;sBACH,OAAO,QAAO,GAAA,MAAA,SAAA,GAAA,WAAW,EAAA,KAAX,WAAW,EAAQ,MAAM,YAAzB,EAAwC,CAAxC,CAAD;sBACb,MAAM;oBAFH;kBAIV;gBACJ,WAAU,YAAY,UAAU,UAAU,YAAY,MAAM;AACzD,yBAAO;gBACV;AAED,uBAAO;kBACH,OAAO;kBACP,MAAM;gBAFH;cAIV;AAED,uBAAS,eAAe,OAAmB,MAAcvC,SAAc;AACnE,oBAAM,QAAQ,MAAM,WAAWA,OAAjB;AACd,oBAAM,MAAM;AAEZ,oBAAI,IAAI,KAAK,MAAM,YAAN,CAAT,GAA+B;AAC/B,sBAAI,SAAS;AAAY,4CAAA,SAAA,EAAoB,OAAO,iBAAiBA,OAAD,CAA3C;2BAChB,SAAS;AAAY,4CAAA,SAAA,EAAoB,OAAO,iBAAiBA,OAAD,CAA3C;gBACjC;cACJ;AAED,cAAAvC,SAAA,SAAA,IAAe;;;;;;;;;;;;AC5Cf,uBAAS,oBAAoB,OAAmB,SAA2B;AACvE,oBAAM,QAAQ,MAAM,MAAM,CAAZ;AACd,oBAAI,MAAM,MAAM,aAAZ,MAA+B,IAAI;AACnC,wBAAM,IAAI,gBAAgB,QAAQ,QAAQ,QAAQ,IAAlD;gBACH,OAAM;AACH,sBAAM,QAAQ,MAAM,MAAM,aAAZ;AACd,sBAAM,UAAS,GAAA,OAAA,SAAA,GAAA,KAAK,EAAA,KAAL,OAAY,GAAG,MAAM,SAAS,QAAQ,KAAK,MAAtC;AACpB,sBAAM,SAAS,OAAO,MAAD,IAAW,QAAQ;AACxC,wBAAM,IAAI,gBAAgB,KAAG,SAAS,QAAQ,IAA9C;gBACH;cACJ;AAED,cAAAA,SAAA,SAAA,IAAe;;;;;;;;;;;;ACZf,uBAAS,oBAAoB,OAAmB,SAA2B;AACvE,oBAAM,QAAQ,MAAM,MAAM,CAAZ;AACd,oBAAI,MAAM,MAAM,aAAZ,MAA+B,IAAI;AACnC,sBAAM,QAAQ,MAAM,MAAM,aAAZ;AACd,sBAAM,UAAS,GAAA,OAAA,SAAA,GAAA,KAAK,EAAA,KAAL,OAAY,GAAG,MAAM,SAAS,QAAQ,KAAK,MAAtC;AACpB,sBAAM,SAAS,OAAO,MAAD,IAAW,QAAQ;AACxC,sBAAI,SAAS,GAAG;AACZ,0BAAM,IAAI,gBAAgB,KAAG,SAAS,QAAQ,IAA9C;kBACH,OAAM;AACH,0BAAM,IAAI,gBAAgB,EAA1B;kBACH;gBACJ;cACJ;AAED,cAAAA,SAAA,SAAA,IAAe;;;;;;;;;;;;AClBf,kBAAA,aAAA,QAAA,gBAAA,oBAAA,CAAA,CAAA;AAEA,kBAAA,cAAA,QAAA,gBAAA,oBAAA,EAAA,CAAA;AACA,kBAAA,UAAA,QAAA,gBAAA,oBAAA,EAAA,CAAA;AAEA,kBAAA,sBAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AAEA,kBAAA;;gBAAA,SAAA,QAAA;AAAuB,0BAAA,UAAA8M,WAAA,MAAA;AACnB,2BAAAA,UAAYvK,SAAc;AAA1B,wBAAA,QAAA;AACI,wBAAM,QAAQ,WAAA,SAAA,EACV,sHADU;AAKd,4BAAA,OAAA,KAAA,MAAM,OAAOA,OAAb,KAAoB;;kBACvB;AAIO,kBAAAuK,UAAA,UAAA,cAAR,WAAA;AACI,wBAAM,OAAO,oBAAA,SAAA,EAAgB,KAAK,MAArB;AACb,wBAAM,QAAQ,IAAI,QAAA,SAAA,EAAM,MAAM,IAAhB;AACd,0BAAM,OAAN;kBACH;AAKM,kBAAAA,UAAA,UAAA,eAAP,WAAA;AACI,yBAAK,YAAL;kBACH;AAEM,kBAAAA,UAAA,UAAA,kBAAP,WAAA;kBAA2B;AAC/B,yBAAAA;gBAAC,EA1BsB,YAAA,SAAA,CAAvB;;AA4BA,cAAA9M,SAAA,SAAA,IAAe;;;;;;;;;;;;;;;AChCf,kBAAA,aAAA,QAAA,gBAAA,oBAAA,CAAA,CAAA;AAGA,uBAAA,UAAyBuC,SAAc;AAEnC,oBAAM,WAAgCA,QAAO,OAAO;AAKpD,yBAAS,4BAA4B,KAAiB;AAElD,sBAAI,MAAgB,CAAA;AAGpB,sBAAI,IAAI,QAAQ,SAAS;AAAA,wBAAA;AACrB,2BAAM,GAAA,KAAA,SAAA,GAAA,WAAA,IAAI,OAAJ,EAAA,KAAA,UAAgB,SAAC,KAAiC;AACpD,0BAAI,OAAO,OAAO;AAAU,+BAAO;AACnC,6BAAO,mBAAiB,IAAI,MAAG,6DACO,IAAI,MAAG,kBAAgB,IAAI,MAAG,aAAW,IAAI,MAAG;oBAEzF,CALK;AAMN,2BAAM,GAAAF,SAAA,SAAA,GAAA,GAAG,EAAA,KAAH,KAAW,SAAC,GAAS;AAAK,6BAAA,MAAA;oBAAQ,CAA/B;kBACZ,OAEI;AAAA,wBAAA;AACD,2BAAM,GAAA,KAAA,SAAA,GAAA,YAAA,IAAI,OAAJ,EAAA,KAAA,WAAgB,SAAC,KAAiC;AACpD,6BAAO,iCAA+B,MAAG,OAAK,MAAG;oBACpD,CAFK;kBAGT;AAED,yBAAO,IAAI,KAAK,EAAT,EAAa,QAAQ,WAAW,EAAhC;gBACV;AAED,oBAAM,YAA2B,GAAA,KAAA,SAAA,GAAA,QAAQ,EAAA,KAAR,UAAa,SAAC,KAAiB;AAC5D,yBAAO;oBACH,OAAOE,QAAO,QAAQ,EAAE,+BAA6B,IAAI,KAAlD;;oBAGP,KAAK,UAAQ,4BAA4B,GAAD,IAAK;oBAE7C,QAAQ,CACJ;sBACI,UAAU;sBACV,MAAM;sBACN,IAAI,SAAAN,IAACrB,IAAQ;AAET,4BAAM,UAAU,WAAA,SAAA,EAAEA,GAAE,MAAJ;AAChB,4BAAM,WAAW,QAAQ,YAAR;AACjB,4BAAI;AAEJ,4BAAI,aAAa,OAAO;AAAA,8BAAA;AAEpB,wCAAa,GAAA,MAAA,SAAA,GAAA,YAAA,QAAQ,OAAR,EAAiB,KAAjB,CAAA,EAAA,KAAA,SAAA;wBAChB,OAAM;AAEH,uCAAa,WAAW,QAAQ,KAAR,IAAiB;wBAC5C;AAED,wBAAA2B,QAAO,IAAP,IAAA,EAAc,cAAc,UAA5B;AAEA,+BAAO;sBACV;oBApBL,CADI;kBANL;gBA+BV,CAhCwC;AAoCzC,oBAAM,OAAkB;kBACpB,OAAO;kBACP,QAAQ;kBACR,MAAM;gBAHc;AAKxB,uBAAO;cACV;AAzED,cAAAvC,SAAA,SAAA,IAAA;;;;;;;;;;;;;ACVA,kBAAA,aAAA,QAAA,gBAAA,oBAAA,CAAA,CAAA;AACA,kBAAA,mBAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AACA,kBAAA,mBAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AACA,kBAAA,wBAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AACA,kBAAA,sBAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AACA,kBAAA,oBAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AAeA,kBAAY;AAAZ,eAAA,SAAY+M,YAAS;AACjB,gBAAAA,WAAA,MAAA,IAAA;AACA,gBAAAA,WAAA,MAAA,IAAA;AACA,gBAAAA,WAAA,WAAA,IAAA;AACA,gBAAAA,WAAA,SAAA,IAAA;AACA,gBAAAA,WAAA,OAAA,IAAA;cACH,GANW,YAAA/M,SAAA,cAAAA,SAAA,YAAS,CAAA,EAArB;AAQA,kBAAMgN,UAAS;gBACX,gBAAc,iBAAA,SAAA;gBACd,gBAAc,iBAAA,SAAA;gBACd,qBAAmB,sBAAA,SAAA;gBACnB,mBAAiB,oBAAA,SAAA;gBACjB,iBAAe,kBAAA,SAAA;cALJ;AAQf,uBAAgB,iBACZ,WACA,SACA1H,QAAa;AAEb,oBAAI,cAAc,UAAU,SAASA,WAAU,QAAW;AACtD,wBAAM,IAAI,MAAM,4CAAV;gBACT;AAED,uBAAO,cAAc,UAAU,QACzB,IAAI0H,QAAO,SAAD,EAAY,OAAtB,IACA,IAAIA,QAAO,SAAD,EAAY,SAAS1H,MAA/B;cACT;AAZD,cAAAtF,SAAA,mBAAA;AAiBA,kBAAA;;gBAAA,WAAA;AAGI,2BAAAiN,mBAAYD,SAAuB;AAC/B,yBAAK,SAASA;AACd,yBAAK,OAAO,KAAZ;kBACH;AAED,kBAAAC,mBAAA,UAAA,wBAAA,WAAA;AACI,2BAAO,WAAA,SAAA,EAAE,KAAK,OAAO,mBAAmB,IAA/B,CAAF;kBACV;AACL,yBAAAA;gBAAC,EAXD;;;;;;;;;;;;;;;ACpDA,kBAAA,aAAA,QAAA,gBAAA,oBAAA,CAAA,CAAA;AACA,kBAAA,eAAA,oBAAA,EAAA;AACA,kBAAA,UAAA,oBAAA,EAAA;AAUA,kBAAA;;gBAAA,SAAA,QAAA;AAA4C,0BAAA,UAAAC,iBAAA,MAAA;AACxC,2BAAAA,gBAAY,SAA2B;2BACnC,OAAA,KAAA,MAAM,OAAN,KAAc;kBACjB;AAED,kBAAAA,gBAAA,UAAA,OAAA,WAAA;AACU,wBAAApI,MAAiE,KAAK,SAApE,WAAQA,IAAA,UAAE,aAAUA,IAAA,YAAE,iBAAcA,IAAA,gBAAE,aAAUA,IAAA,YAAE,WAAQA,IAAA;AAElE,wBAAI;AACJ,wBAAM,SAAuB,CAAA;AAG7B,wBAAM,oBAAoB,mBAAc,QAAd,mBAAc,SAAA,SAAd,eAAgB,YAAhB;AAG1B,wBAAM,SAAS,WAAW;AAC1B,wBAAM,OAAO,SAAS;AAQtB,wBACK,CAAC,WAAW,SAAS,CAAC,SAAS,SAC/B,EAAC,WAAM,QAAN,WAAM,SAAA,SAAN,OAAQ,KAAR,EAAe,WAAU,EAAC,SAAI,QAAJ,SAAI,SAAA,SAAJ,KAAM,KAAN,EAAa,SAC3C;AAAA,0BAAA;AAEE;AAAC,uBAAA,GAAA,SAAA,SAAA,GAAA,WAAC,mBAAc,QAAd,mBAAc,SAAA,SAAd,eAAgB,SAAhB,CAAD,EAAA,KAAA,UAAmD,SAAC,OAAkB;AACnE,+BAAO,KAAK,WAAA,SAAA,EAAE,KAAF,CAAZ;sBACH,CAFA;AAQD,0BAAI,sBAAsB,UAAU;AAEhC,6CAAqB,QAAA;0BACjB;0BACA,QAAA,uBAAA;;0BACA;wBAHiB;sBAKxB,OAMI;AAED,6CAAqB,QAAA,cAAc,UAAd;AAGrB,yBAAA,GAAA,SAAA,SAAA,GAAA,MAAM,EAAA,KAAN,QAAe,SAAA,OAAK;AAChB,6CAAmB,YAAY,MAAM,MAAM,CAAZ,CAA/B;wBACH,CAFK;sBAGT;AAGD,2BAAK,mBAAmB,IAAI,kBAA5B;AAGA,8BAAA,aAAa,gBAAgB,oBAAoB,eAAe,MAAM,CAArB,CAAjD;AAGA,qCAAe,OAAf;oBACH,OAMI;AAED,0BAAI,YAAwB;AAC5B,6BAAO,UAAU,QAAQ;AACrB,+BAAO,KAAK,SAAZ;AACA,yBAAA,SAAI,QAAJ,SAAI,SAAA,SAAJ,KAAM,MAAM,SAAZ,KACO,YAAY,WAAA,SAAA,EAAE,MAAF;;0BACZ,YAAY,UAAU,KAAV;;sBACtB;AAGD,0BAAM,WAAwB,OAAsB,KAAtB;AAE9B,0BAAI,WAAwB,KAAoB,KAApB;AAM5B,0BAAI,sBAAsB,UAAU;AAEhC,6CAAqB,QAAA;0BACjB;0BACA,QAAA,uBAAA;;0BACA;wBAHiB;sBAKxB,OAMI;AAED,6CAAqB,QAAA,cAAc,UAAd;AAGrB,yBAAA,GAAA,SAAA,SAAA,GAAA,MAAM,EAAA,KAAN,QAAe,SAAC,OAAiB;AAC7B,6CAAmB,OAAO,MAAM,MAAM,CAAZ,CAA1B;wBACH,CAFK;sBAGT;AAOD,0BAAI,SAAS,UAAU,SAAS,QAAQ;AAEpC,4BAAM,cAA4B,CAAA;AAClC,+BAAO,SAAS,QAAQ;AACpB,sCAAY,KAAK,QAAjB;AACA,qCAAW,SAAS,KAAT;wBACd;AAGD,4BAAM,qBAAmB,QAAA,cAAc,iBAAd;AAGzB,yBAAA,GAAA,SAAA,SAAA,GAAA,WAAW,EAAA,KAAX,aAAoB,SAAC,OAAiB;AAClC,6CAAiB,OAAO,MAAM,MAAM,CAAZ,CAAxB;wBACH,CAFU;AAKX,mCAAA,SAAA,EAAE,kBAAF,EAAoB,YAAY,cAAhC;AAQA,6BAAK,mBAAmB,IAAI,kBAA5B;AACA,4BAAM,oBAAgC,eAAe,KAAf;AACtC,0CAAkB,SACZ,QAAA,aAAa,gBAAgB,oBAAoB,kBAAkB,MAAM,CAAxB,CAAjD,IACA,eAAe,OAAf,EAAwB,MAAM,CAA9B,EAAiC,OAAO,kBAAxC;sBACT,WAQQ,CAAC,SAAS,QAAQ;AAEvB,6BAAK,mBAAmB,IAAI,kBAA5B;AACA,gCAAA,aAAa,gBAAgB,oBAAoB,eAAe,MAAM,CAArB,CAAjD;sBACH,OAQI;AAED,6BAAK,mBAAmB,IAAI,kBAA5B;AACA,4BAAM,oBAAgC,eAAe,KAAf;AACtC,0CAAkB,SACZ,QAAA,aAAa,gBAAgB,oBAAoB,kBAAkB,MAAM,CAAxB,CAAjD,IACA,eAAe,OAAf,EAAwB,MAAM,CAA9B,EAAiC,OAAO,kBAAxC;sBACT;oBACJ;kBACJ;AACL,yBAAAoI;gBAAC,EArL2C,aAAA,UAA5C;;;;;;;;;;;;;;ACLA,kBAAA;;gBAAA,WAAA;AAGI,2BAAAC,sBAAA;AACI,yBAAK,WAAW;kBACnB;AAMM,kBAAAA,oBAAA,UAAA,MAAP,SAAWrK,OAA2B;AAElC,wBAAIA,iBAAgB,kBAAkB;AAAA,0BAAA;AAClC,0BAAM,cAAyB,CAAA;AAC/B,uBAAA,GAAA,SAAA,SAAA,GAAA,WAAAA,MAAK,UAAL,EAAA,KAAA,UAAwB,SAAC,OAAgB;AACrC,oCAAU,KAAK,KAAf;sBACH,CAFD;AAGA,sBAAAA,QAAO;oBACV;AACD,yBAAK,WAAWA;kBACnB;AAMM,kBAAAqK,oBAAA,UAAA,MAAP,WAAA;AACI,2BAAO,KAAK;kBACf;AAKM,kBAAAA,oBAAA,UAAA,QAAP,WAAA;AACI,yBAAK,WAAW;kBACnB;AACL,yBAAAA;gBAAC,EArCD;;AAuCA,cAAAnN,SAAA,SAAA,IAAe;;;;;;;;;;;;;AC9Cf,kBAAA,aAAA,QAAA,gBAAA,oBAAA,CAAA,CAAA;AACA,kBAAA,eAAA,oBAAA,EAAA;AACA,kBAAA,UAAA,oBAAA,EAAA;AAUA,kBAAA;;gBAAA,SAAA,QAAA;AAA4C,0BAAA,UAAAoN,iBAAA,MAAA;AACxC,2BAAAA,gBAAY,SAA2B;2BACnC,OAAA,KAAA,MAAM,OAAN,KAAc;kBACjB;AAED,kBAAAA,gBAAA,UAAA,OAAA,WAAA;;AACU,wBAAA,KAAyD,KAAK,SAA5D7K,UAAM,GAAA,QAAE,WAAQ,GAAA,UAAE,aAAU,GAAA,YAAE,aAAU,GAAA,YAAE,WAAQ,GAAA;AAG1D,wBAAI;AAGJ,wBAAM,SAAuBA,QAAO,UAAU,0BAAjB;AAG7B,wBAAM,gBAAgB,eAAU,QAAV,eAAU,SAAA,SAAV,WAAY,YAAZ;AACtB,wBAAM,cAAc,aAAQ,QAAR,aAAQ,SAAA,SAAR,SAAU,YAAV;AAMpB,wBAAI,kBAAkB,aAAa;AAI/B,0BAAI,OAAO,SAAS,GAAG;AAEnB,+BAAO,MAAP;AACA,+BAAO,IAAP;AAGA,6CAAqB,QAAA;0BACjB,QAAA,qBAAqB,MAArB;;0BACA,QAAA,uBAAA;;wBAFiB;AAUrB,4BAAI,kBAAkB,UAAU;AAE5B,2BAAAuC,MAAA,SAAS,SAAT,OAAmB,QAAAA,QAAA,SAAA,UAAA,GAAA,SAAA,SAAA,GAAAA,GAAA,EAAA,KAAAA,KAAU,SAAC,OAAkB;AAC5C,+CAAmB,OAAO,KAA1B;0BACH,CAFkB;AAKnB,mCAAS,OAAT;AAGA,+BAAK,mBAAmB,IAAI,kBAA5B;AACA,qCAAW,MAAM,CAAjB,EAAoB,OAAO,kBAA3B;wBACH,OAOI;AAED,8BAAM,iBAAiB,SAAS,uBAAT;AACvB,8BAAM,iBAAe,SAAS,uBAAT;AAGrB,8BAAI,YAAwB,QAAA,cAAc,UAAd;AAE5B,iCAAO,UAAU,QAAQ;AACrB,gCAAM,WAAW,UAAU,MAAM,CAAhB;AACjB,wCAAY,UAAU,KAAV;AACZ,2CAAe,OAAO,QAAtB;0BACH;AAGD,8BAAI,UAAsB,QAAA,YAAY,QAAZ;AAE1B,8BAAM,SAAoB,CAAA;AAC1B,iCAAO,QAAQ,QAAQ;AACnB,mCAAO,QAAQ,QAAQ,MAAM,CAAd,CAAf;AACA,sCAAU,QAAQ,KAAR;0BACb;AAED,2BAAA,GAAA,SAAA,SAAA,GAAA,MAAM,EAAA,KAAN,QAAe,SAAC,OAAc;AAC1B,2CAAa,OAAO,KAApB;0BACH,CAFK;AAKN,8BAAM,iBAAiB,QAAA,cAAc,UAAd;AACvB,yCAAe,OAAO,cAAtB;AACA,yCAAe,OAAO,kBAAtB;AACA,yCAAe,OAAO,cAAtB;AACA,+CAAqB;AAGrB,+BAAK,mBAAmB,IAAI,kBAA5B;AACA,qCAAA,SAAA,EAAE,cAAF,EAAkB,YAAY,UAA9B;AAGA,6BAAA,KAAC,WAAW,SAAX,OAAqB,QAAA,OAAA,SAAA,SAAA,GAAE,WAAU,WAAW,OAAX;AAClC,6BAAA,KAAC,SAAS,SAAT,OAAmB,QAAA,OAAA,SAAA,SAAA,GAAE,WAAU,SAAS,OAAT;wBACnC;sBACJ,OAKI;AACD,+BAAO,SAAS;AAGhB,4BAAI,YAAwB,QAAA,cAAc,UAAd;AAE5B,+BAAO,UAAU,QAAQ;AACrB,iCAAO,KAAK,SAAZ;AACA,sCAAY,UAAU,KAAV;wBACf;AAGD,4BAAI,UAAsB,QAAA,YAAY,QAAZ;AAE1B,4BAAM,SAAuB,CAAA;AAE7B,+BAAO,QAAQ,QAAQ;AACnB,iCAAO,QAAQ,OAAf;AACA,oCAAU,QAAQ,KAAR;wBACb;AAGD,+BAAO,KAAI,MAAX,QAAe,MAAf;AAOA,4BAAI,kBAAkB,UAAU;AAG5B,+CAAqB,QAAA,sBACjB,QACA,QAAA,uBAAA,GACA,GAHiB;AAOrB,+BAAK,mBAAmB,IAAI,kBAA5B;AACA,kCAAA,aAAa,YAAY,oBAAoB,SAAS,MAAM,CAAf,CAA7C;wBACH,OAOI;AAED,+CAAqB,QAAA,cAAc,UAAd;AAErB,2BAAA,GAAA,SAAA,SAAA,GAAA,MAAM,EAAA,KAAN,QAAe,SAAC,OAAiB;AAC7B,+CAAmB,OAAO,MAAM,MAAM,CAAZ,CAA1B;0BACH,CAFK;AAIN,+BAAK,mBAAmB,IAAI,kBAA5B;AACA,qCAAA,SAAA,EAAE,kBAAF,EAAsB,YAAY,UAAlC;wBACH;AAGD,2BAAA,KAAC,WAAW,SAAX,OAAqB,QAAA,OAAA,SAAA,SAAA,GAAE,WAAU,SAAS,OAAT;AAClC,2BAAAwG,MAAC,SAAS,SAAT,OAAmB,QAAAA,QAAA,SAAA,SAAAA,IAAE,WAAU,SAAS,OAAT;sBACnC;oBACJ,OAKI;AAED,0BAAM,iBAA+B,CAAA;AAErC,0BAAI,UAAsB,QAAA,YAAY,QAAZ;AAE1B,6BAAO,QAAQ,QAAQ;AACnB,uCAAe,QAAQ,OAAvB;AACA,kCAAU,QAAQ,KAAR;sBACb;AAGD,0BAAM,iBAA+B,CAAA;AAErC,0BAAI,YAAwB,QAAA,cAAc,UAAd;AAE5B,6BAAO,UAAU,QAAQ;AACrB,uCAAe,KAAK,SAApB;AACA,oCAAY,UAAU,KAAV;sBACf;AAGD,2CAAqB,QAAA,uBAAA;AAGrB,6BAAO,MAAP;AACA,6BAAO,IAAP;AAGA,uBAAA,GAAA,SAAA,SAAA,GAAA,cAAc,EAAA,KAAd,gBAAuB,SAAA,OAAK;AAAI,+BAAA,mBAAmB,OAAO,MAAM,MAAhC,CAA0B,CAA1B;sBAAyC,CAA3D;AAGd,2CAAqB,QAAA;wBACjB,QAAA,qBAAqB,MAArB;;wBACA;sBAFiB;AAMrB,uBAAA,GAAA,SAAA,SAAA,GAAA,cAAc,EAAA,KAAd,gBAAuB,SAAA,OAAK;AAAI,+BAAA,mBAAmB,OAAO,MAAM,MAAhC,CAA0B,CAA1B;sBAAyC,CAA3D;AAGd,2BAAK,mBAAmB,IAAI,kBAA5B;AAKA,0BAAI,kBAAkB,UAAU;AAE5B,mCAAW,MAAM,CAAjB,EAAoB,OAAO,kBAA3B;AAGA,2BAAA,KAAC,SAAS,SAAT,OAAmB,QAAA,OAAA,SAAA,SAAA,GAAE,WAAU,SAAS,OAAT;sBACnC,OAKI;AAED,6BAAA,KAAI,SAAS,SAAT,OAAmB,QAAA,OAAA,SAAA,SAAA,GAAE,QAAQ;AAC7B,8BAAM,gBAAgB,SAAS,SAAT;AACtB,kCAAA,aAAa,eAAe,oBAAoB,cAAc,MAAM,CAApB,CAAhD;wBACH,OAAM;AACH,mCAAS,MAAM,CAAf,EAAkB,OAAO,kBAAzB;wBACH;sBACJ;oBACJ;kBACJ;AACL,yBAAA8B;gBAAC,EArP2C,aAAA,UAA5C;;;;;;;;;;;;;;;ACZA,kBAAA,aAAA,QAAA,gBAAA,oBAAA,CAAA,CAAA;AACA,kBAAA,eAAA,oBAAA,EAAA;AACA,kBAAA,UAAA,oBAAA,EAAA;AAQA,kBAAA;;gBAAA,SAAA,QAAA;AAAiD,0BAAA,UAAAC,sBAAA,MAAA;AAC7C,2BAAAA,qBAAY,SAA2B;2BACnC,OAAA,KAAA,MAAM,OAAN,KAAc;kBACjB;AAED,kBAAAA,qBAAA,UAAA,OAAA,WAAA;;AACU,wBAAA,KAA+C,KAAK,SAAlD9K,UAAM,GAAA,QAAE,WAAQ,GAAA,UAAE,aAAU,GAAA,YAAE,aAAU,GAAA;AAGhD,wBAAI;AAGJ,wBAAM,SAAuBA,QAAO,UAAU,0BAAjB;AAG7B,wBAAM,gBAAgB,eAAU,QAAV,eAAU,SAAA,SAAV,WAAY,YAAZ;AAGtB,2BAAO,MAAP;AAGA,wBAAM,iBAA+B,CAAA;AAErC,wBAAI,YAAwB,QAAA,cAAc,UAAd;AAE5B,2BAAO,UAAU,QAAQ;AACrB,qCAAe,KAAK,SAApB;AACA,kCAAY,UAAU,KAAV;oBACf;AAMD,wBAAI,kBAAkB,UAAU;AAC5B,2CAAqB,QAAA,uBAAA;AAErB,uBAAA,GAAA,SAAA,SAAA,GAAA,cAAc,EAAA,KAAd,gBAAuB,SAAA,OAAK;AAAI,+BAAA,mBAAmB,OAAO,MAAM,MAAhC,CAA0B,CAA1B;sBAAyC,CAA3D;AAGd,2CAAqB,QAAA;wBACjB,QAAA,qBAAqB,MAArB;;wBACA;sBAFiB;AAMrB,2BAAK,mBAAmB,IAAI,kBAA5B;AAEA,iCAAW,MAAM,CAAjB,EAAoB,OAAO,kBAA3B;oBACH,OAMI;AAED,2CAAqB,QAAA,cAAc,UAAd;AAErB,uBAAA,GAAA,SAAA,SAAA,GAAA,cAAc,EAAA,KAAd,gBAAuB,SAAA,OAAK;AAAI,+BAAA,mBAAmB,OAAO,MAAM,MAAhC,CAA0B,CAA1B;sBAAyC,CAA3D;AAGd,2CAAqB,QAAA;wBACjB,QAAA,qBAAqB,MAArB;;wBACA;sBAFiB;AAMrB,2BAAK,mBAAmB,IAAI,kBAA5B;AACA,iCAAA,SAAA,EAAE,kBAAF,EAAsB,YAAY,UAAlC;AAGA,yBAAAuC,MAAC,WAAW,SAAX,OAAqB,QAAAA,QAAA,SAAA,SAAAA,IAAE,WAAU,WAAW,OAAX;oBACrC;kBACJ;AACL,yBAAAuI;gBAAC,EA3EgD,aAAA,UAAjD;;;;;;;;;;;;;;;ACVA,kBAAA,aAAA,QAAA,gBAAA,oBAAA,CAAA,CAAA;AACA,kBAAA,eAAA,oBAAA,EAAA;AACA,kBAAA,UAAA,oBAAA,EAAA;AASA,kBAAA;;gBAAA,SAAA,QAAA;AAA+C,0BAAA,UAAAC,oBAAA,MAAA;AAC3C,2BAAAA,mBAAY,SAA2B;2BACnC,OAAA,KAAA,MAAM,OAAN,KAAc;kBACjB;AAED,kBAAAA,mBAAA,UAAA,OAAA,WAAA;;AACU,wBAAA,KAA6C,KAAK,SAAhD/K,UAAM,GAAA,QAAE,WAAQ,GAAA,UAAE,aAAU,GAAA,YAAE,WAAQ,GAAA;AAG9C,wBAAI;AAGJ,wBAAM,SAAuBA,QAAO,UAAU,0BAAjB;AAG7B,wBAAM,cAAc,aAAQ,QAAR,aAAQ,SAAA,SAAR,SAAU,YAAV;AAGpB,2BAAO,IAAP;AAGA,wBAAM,iBAA+B,CAAA;AAErC,wBAAI,UAAsB,QAAA,YAAY,QAAZ;AAE1B,2BAAO,QAAQ,QAAQ;AACnB,qCAAe,QAAQ,OAAvB;AACA,gCAAU,QAAQ,KAAR;oBACb;AAMD,wBAAI,gBAAgB,UAAU;AAE1B,2CAAqB,QAAA;wBACjB,QAAA,qBAAqB,MAArB;;wBACA,QAAA,uBAAA;;sBAFiB;AAKrB,uBAAA,GAAA,SAAA,SAAA,GAAA,cAAc,EAAA,KAAd,gBAAuB,SAAA,OAAK;AAAI,+BAAA,mBAAmB,OAAO,MAAM,MAAhC,CAA0B,CAA1B;sBAAyC,CAA3D;AAGd,2BAAK,mBAAmB,IAAI,kBAA5B;AAEA,2BAAAuC,MAAI,SAAS,SAAT,OAAmB,QAAAA,QAAA,SAAA,SAAAA,IAAE,QAAQ;AAC7B,4BAAM,gBAAgB,SAAS,SAAT;AACtB,gCAAA,aAAa,eAAe,oBAAoB,cAAc,MAAM,CAApB,CAAhD;sBACH,OAAM;AACH,iCAAS,MAAM,CAAf,EAAkB,OAAO,kBAAzB;sBACH;oBACJ,OAMI;AAED,0BAAM,kBAAkB,QAAA,qBAAqB,MAArB;AAExB,sCAAgB,KAAI,MAApB,iBAAwB,cAAxB;AAEA,2CAAqB,QAAA;wBACjB;wBACA,QAAA,cAAc,UAAd;;sBAFiB;AAMrB,2BAAK,mBAAmB,IAAI,kBAA5B;AACA,iCAAA,SAAA,EAAE,kBAAF,EAAsB,aAAa,QAAnC;AAGA,yBAAA,KAAC,SAAS,SAAT,OAAmB,QAAA,OAAA,SAAA,SAAA,GAAE,WAAU,SAAS,OAAT;oBACnC;kBACJ;AACL,yBAAAwI;gBAAC,EA7E8C,aAAA,UAA/C;;;;;;;;;;;;;;ACVA,kBAAA,eAAA,oBAAA,EAAA;AACA,kBAAA,UAAA,oBAAA,EAAA;AAEA,kBAAA;;gBAAA,SAAA,QAAA;AAA6C,0BAAA,UAAAC,kBAAA,MAAA;AAGzC,2BAAAA,iBAAY,SAA6BjI,QAAY;AAArD,wBAAA,QACI,OAAA,KAAA,MAAM,OAAN,KAAc;AACd,0BAAK,QAAQA;;kBAChB;AAED,kBAAAiI,iBAAA,UAAA,OAAA,WAAA;AACU,wBAAAzI,MAAyB,KAAK,SAA5BvC,UAAMuC,IAAA,QAAE,aAAUA,IAAA;AAG1B,wBAAM,SAAuBvC,QAAO,UAAU,0BAAjB;AAG7B,wBAAM,qBAAwC,QAAA;sBAC1C,QAAA,qBAAqB,MAArB;;sBACA,QAAA,cAAc,UAAd;;oBAF0C;AAM9C,yBAAK,mBAAmB,IAAI,kBAA5B;AACA,yBAAK,MAAM,WAAW,kBAAtB;kBACH;AACL,yBAAAgL;gBAAC,EAxB4C,aAAA,UAA7C;;;;;;;;;;;;;;;;ACCA,kBAAA,iBAAA,QAAA,gBAAA,oBAAA,EAAA,CAAA;AACA,kBAAA,aAAA,QAAA,gBAAA,oBAAA,CAAA,CAAA;AAGA,kBAAA,mBAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AAEA,kBAAA;;gBAAA,SAAA,QAAA;AAAyB,0BAAA,UAAAC,aAAA,MAAA;AACrB,2BAAAA,YAAYjL,SAAc;AAA1B,wBAAA,QAAA;AACI,wBAAM,QAAQ,WAAA,SAAA,EACV,mIADU;AAKd,wBAAI,iBAAiB,IAAI,iBAAA,SAAA,EAAeA,SAAQA,QAAO,OAAO,WAAzC;AACrB,wBAAM,eAAe;sBACjB,OAAO;sBACP,OAAO;sBACP,MAAM;sBACN,MAAM,eAAe,YAAf;sBACN,cAAc,SAAA,aAAC,OAAa;AAExB,wBAAAA,QAAO,UAAU,UAAjB;AACA,8BAAK,QAAQ,KAAb;sBACH;oBATgB;AAYrB,4BAAA,OAAA,KAAA,MAAM,OAAOA,SAAQ,YAArB,KAAkC;;kBACrC;AAMM,kBAAAiL,YAAA,UAAA,UAAP,SAAe,OAAa;AACxB,wBAAMjL,UAAS,KAAK;AAGpB,oBAAAA,QAAO,UAAU,iBAAjB;AAGA,wBAAM,iBAAiB,WAAA,SAAA,EAAEA,QAAO,UAAU,0BAAjB,CAAF;AAEvB,wBAAI,CAAC,eAAe,MAAM;AAAQ;AAGlC,wBAAI,kBAAkBA,QAAO,UAAU,MAAM,cAAvB,GAAwC;AAE1D,0BAAI,eAAwB;AAG5B,0BAAM,qBAAkC,WAAA,SAAA,EAAEA,QAAO,UAAU,sBAAjB,CAAF,EACnC,MAAM,CAD6B;AAExC,0BAAM,mBAAgC,WAAA,SAAA,EAAEA,QAAO,UAAU,oBAAjB,CAAF,EAA0C,MAAM,CAAhD;AAGtC,0BAAM,gBAA6B,KAAK,OAAO,kBAAZ;AACnC,0BAAM,cAA2B,KAAK,OAAO,gBAAZ;AAEjC,0BAAM,wBAAwB,eAAe,MAAM,CAArB,EAAwB;AAEtD,+BAAS,IAAI,GAAG,IAAI,sBAAsB,QAAQ,KAAK;AACnD,4BAAM,OAAoB,sBAAsB,CAAD;AAG/C,4BAAI,WAAA,SAAA,EAAE,IAAF,EAAQ,YAAR,MAA0B,KAAK;AAC/B;wBACH;AAED,4BAAI,SAAS,eAAe;AACxB,yCAAe;wBAClB;AAGD,4BAAI,cAAc;AACd,qCAAA,SAAA,EAAE,IAAF,EAAQ,IAAI,eAAe,KAA3B;AAEA,8BAAI,SAAS,aAAa;AACtB,2CAAe;AAGf;0BACH;wBACJ;sBACJ;AAGD,sBAAAA,QAAO,UAAU,mBAAmB,oBAAoB,gBAAxD;AAEA;oBACH;AAID,wBAAM,aAAa,eAAe,MAAM,CAArB;AAGnB,wBAAM,oBAAoB,KAAK,OAAO,UAAZ;AAG1B,wBAAI,WAAA,SAAA,EAAE,iBAAF,EAAqB,YAArB,MAAuC,KAAK;AAC5C;oBACH;AAED,+BAAA,SAAA,EAAE,iBAAF,EAAqB,IAAI,eAAe,KAAxC;AAGA,oBAAAA,QAAO,UAAU,mBAAmB,mBAAmB,iBAAvD;AAEA;kBACH;AAMM,kBAAAiL,YAAA,UAAA,SAAP,SAAc,KAAgB;AAC1B,wBAAI,MAAmB,WAAA,SAAA,EAAE,GAAF,EAAO,MAAM,CAAb;AACvB,wBAAI,CAAC,IAAI,YAAY;AACjB,6BAAO;oBACV;AACD,6BAASC,eAAc,OAAoBlL,SAAc;AACrD,0BAAM,UAAU,WAAA,SAAA,EAAE,MAAM,UAAR;AAChB,0BAAIA,QAAO,UAAU,MAAM,OAAvB,GAAiC;AACjC,+BAAO;sBACV,OAAM;AACH,+BAAOkL,eAAc,QAAQ,MAAM,CAAd,GAAkBlL,OAAnB;sBACvB;oBACJ;AACD,0BAAMkL,eAAc,KAAK,KAAK,MAAX;AAEnB,2BAAO;kBACV;AAOM,kBAAAD,YAAA,UAAA,kBAAP,SAAuB,WAAwB;AAC3C,wBAAI,WAAW;AACf,qBAAA,GAAA,SAAA,SAAA,GAAA,SAAS,EAAA,KAAT,WAAkB,SAAA,MAAI;AAClB,+BAAS,OAAM,GAAA,SAAA,SAAA,GAAA,IAAI,EAAA,KAAJ,MAAa,aAAT,MAA4B,KACxC,WAAW,WAAW,OAAO,MAC9B;oBACT,CAJQ;AAKT,2BAAO;kBACV;AAOM,kBAAAA,YAAA,UAAA,WAAP,SAAgB,UAAgB,QAAY;AACxC,wBAAMjL,UAAS,KAAK;AACpB,wBAAI8C,aAAY,OAAO,eAAe,OAAO,aAAP,IAAwB,SAAS,aAAT;AAE9D,oBAAAA,eAAS,QAATA,eAAS,SAAA,SAATA,WAAW,gBAAX;AACA,wBAAMC,SAAQ,SAAS,YAAT;AACd,wBAAIoI,QAAO;AACX,wBAAIrG,OAAM;AACV,oBAAA/B,OAAM,SAASoI,OAAM,CAArB;AACA,oBAAApI,OAAM,OAAO+B,MAAK,CAAlB;AACA,oBAAAhC,eAAS,QAATA,eAAS,SAAA,SAATA,WAAW,SAASC,MAApB;AAEA,oBAAA/C,QAAO,UAAU,UAAjB;AAEA,oBAAA8C,eAAS,QAATA,eAAS,SAAA,SAATA,WAAW,gBAAX;AAEA,oBAAA9C,QAAO,UAAU,iBAAjB;kBACH;AAKM,kBAAAiL,YAAA,UAAA,kBAAP,WAAA;AACI,wBAAMjL,UAAS,KAAK;AACpB,wBAAM,iBAAiBA,QAAO,UAAU,0BAAjB;AACvB,wBAAI,kBAAkBA,QAAO,UAAU,MAAM,cAAvB,GAAwC;AAE1D;oBACH;AACD,wBAAI,MAAgC,WAAA,SAAA,EAAEA,QAAO,UAAU,sBAAjB,CAAF;AAEpC,wBAAI,IAAI,WAAW;AAAG;AAEtB,0BAAM,KAAK,OAAO,IAAI,MAAM,CAAV,CAAZ;AACN,wBAAI,QAAuB,IAAI,aAAa,OAAjB,IAA4B,IAAI,aAAa,OAAjB,IAA4B;AAGnF,wBAAI,UAAS,GAAA,SAAA,SAAA,GAAA,KAAK,EAAA,KAAL,OAAc,aAAT,MAA4B,IAAI;AAC9C,2BAAK,OAAL;oBACH,OAAM;AACH,2BAAK,SAAL;oBACH;kBACJ;AACL,yBAAAiL;gBAAC,EA9LwB,eAAA,SAAA,CAAzB;;AAgMA,cAAAxN,SAAA,SAAA,IAAe;;;;;;;;;;;;;ACxMf,kBAAA,aAAA,QAAA,gBAAA,oBAAA,CAAA,CAAA;AAIA,kBAAA;;gBAAA,WAAA;AAGI,2BAAA2N,gBAAYpL,SAAgBgB,OAAc;AAA1C,wBAAA,QAAA;AACI,yBAAK,WAAW,CAAC;sBAAE,OAAO,WAAA,SAAA,EAAE,WAAShB,QAAO,QAAQ,EAAE,cAAjB,IAAsB,SAAjC;sBAA6C,OAAO;oBAA7D,CAAD;AAChB,qBAAA,GAAA,SAAA,SAAA,GAAAgB,KAAI,EAAA,KAAJA,OAAa,SAAA,MAAI;AACb,4BAAK,SAAS,KAAK;wBACf,OAAO,WAAA,SAAA,EAAE,WAAS,OAAI,SAAf;wBACP,OAAO;sBAFQ,CAAnB;oBAIH,CALG;kBAMP;AAEM,kBAAAoK,gBAAA,UAAA,cAAP,WAAA;AACI,2BAAO,KAAK;kBACf;AACL,yBAAAA;gBAAC,EAhBD;;AAkBA,cAAA3N,SAAA,SAAA,IAAe;;;;;;;;;;;;ACrBf,kBAAA,aAAA,QAAA,gBAAA,oBAAA,CAAA,CAAA;AAEA,kBAAA,YAAA,QAAA,gBAAA,oBAAA,EAAA,CAAA;AAGA,kBAAA;;gBAAA,SAAA,QAAA;AAAmB,0BAAA,UAAA4N,OAAA,MAAA;AACf,2BAAAA,MAAYrL,SAAc;AAA1B,wBAAA,QAAA;AACI,wBAAM,QAAQ,WAAA,SAAA,EACV,qHADU;AAKd,4BAAA,OAAA,KAAA,MAAM,OAAOA,OAAb,KAAoB;;kBACvB;AAKM,kBAAAqL,MAAA,UAAA,eAAP,WAAA;AACI,wBAAMrL,UAAS,KAAK;AACpB,oBAAAA,QAAO,QAAQ,OAAf;AAGA,wBAAM,WAAWA,QAAO,UAAU,SAAjB;AAEjB,wBAAI,EAAC,aAAQ,QAAR,aAAQ,SAAA,SAAR,SAAU;AAAQ;AAEvB,wBAAM,QAAQ,SAAS,KAAT;AACd,oBAAAA,QAAO,UAAU,kBAAkB,OAAO,OAAO,IAAjD;AACA,oBAAAA,QAAO,UAAU,iBAAjB;kBACH;AAKM,kBAAAqL,MAAA,UAAA,kBAAP,WAAA;AAEI,wBAAI,CAAC,KAAK,OAAO,kBAAkB;AAC/B,0BAAI,KAAK,OAAO,QAAQ,KAAK,CAAzB,GAA6B;AAC7B,6BAAK,OAAL;sBACH,OAAM;AACH,6BAAK,SAAL;sBACH;oBACJ;kBACJ;AACL,yBAAAA;gBAAC,EAxCkB,UAAA,SAAA,CAAnB;;AA0CA,cAAA5N,SAAA,SAAA,IAAe;;;;;;;;;;;;AC/Cf,kBAAA,aAAA,QAAA,gBAAA,oBAAA,CAAA,CAAA;AAEA,kBAAA,YAAA,QAAA,gBAAA,oBAAA,EAAA,CAAA;AAGA,kBAAA;;gBAAA,SAAA,QAAA;AAAmB,0BAAA,UAAA6N,OAAA,MAAA;AACf,2BAAAA,MAAYtL,SAAc;AAA1B,wBAAA,QAAA;AACI,wBAAM,QAAQ,WAAA,SAAA,EACV,qHADU;AAKd,4BAAA,OAAA,KAAA,MAAM,OAAOA,OAAb,KAAoB;;kBACvB;AAKM,kBAAAsL,MAAA,UAAA,eAAP,WAAA;AACI,wBAAMtL,UAAS,KAAK;AACpB,oBAAAA,QAAO,QAAQ,QAAf;AAGA,wBAAM,WAAWA,QAAO,UAAU,SAAjB;AAEjB,wBAAI,EAAC,aAAQ,QAAR,aAAQ,SAAA,SAAR,SAAU;AAAQ;AAEvB,wBAAM,QAAQ,SAAS,KAAT;AACd,oBAAAA,QAAO,UAAU,kBAAkB,OAAO,OAAO,IAAjD;AACA,oBAAAA,QAAO,UAAU,iBAAjB;kBACH;AAKM,kBAAAsL,MAAA,UAAA,kBAAP,WAAA;AAEI,wBAAI,CAAC,KAAK,OAAO,kBAAkB;AAC/B,0BAAI,KAAK,OAAO,QAAQ,KAAK,CAAzB,GAA6B;AAC7B,6BAAK,OAAL;sBACH,OAAM;AACH,6BAAK,SAAL;sBACH;oBACJ;kBACJ;AACL,yBAAAA;gBAAC,EAxCkB,UAAA,SAAA,CAAnB;;AA0CA,cAAA7N,SAAA,SAAA,IAAe;;;;;;;;;;;;AC/Cf,kBAAA,cAAA,QAAA,gBAAA,oBAAA,EAAA,CAAA;AAEA,kBAAA,aAAA,QAAA,gBAAA,oBAAA,CAAA,CAAA;AACA,kBAAA,sBAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AACA,kBAAA,UAAA,QAAA,gBAAA,oBAAA,EAAA,CAAA;AAEA,kBAAA,UAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AAEA,kBAAA8N;;gBAAA,SAAA,QAAA;AAAoB,0BAAA,UAAAA,QAAA,MAAA;AAChB,2BAAAA,OAAYvL,SAAc;AAA1B,wBAAA,QAAA;AACI,wBAAM,QAAQ,WAAA,SAAA,EACV,uFADU;AAGd,4BAAA,OAAA,KAAA,MAAM,OAAOA,OAAb,KAAoB;AAGpB,4BAAA,SAAA,EAAUA,OAAV;;kBACH;AAKM,kBAAAuL,OAAA,UAAA,eAAP,WAAA;AACI,yBAAK,YAAL;kBACH;AAKO,kBAAAA,OAAA,UAAA,cAAR,WAAA;AACI,wBAAM,OAAO,oBAAA,SAAA,EAAgB,KAAK,MAArB;AACb,wBAAM,QAAQ,IAAI,QAAA,SAAA,EAAM,MAAM,IAAhB;AACd,0BAAM,OAAN;kBACH;AAKM,kBAAAA,OAAA,UAAA,kBAAP,WAAA;kBAA2B;AAC/B,yBAAAA;gBAAC,EA/BmB,YAAA,SAAA,CAApB;;AAiCA,cAAA9N,SAAA,SAAA,IAAe8N;;;;;;;;;;;;;ACvCf,kBAAA,SAAA,oBAAA,CAAA;AACA,kBAAA,aAAA,QAAA,gBAAA,oBAAA,CAAA,CAAA;AACA,kCAAA,GAAA;AACA,kBAAA,iBAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AAMA,uBAAS,kBAAkBnN,IAAS;AAEhC,uBAAOA,KAAI,MAAK,GAAA,WAAA,SAAA,GAAiBA,EAAjB;cACnB;AAED,uBAAA,UAAyB4B,SAAc;AACnC,oBAAM,cAAc,IAAI,eAAA,SAAA,EAAYA,OAAhB;AAGpB,oBAAM,QAAQ,OAAA,UAAU,UAAV;AACd,oBAAM,QAAQ,OAAA,UAAU,UAAV;AACd,oBAAM,cAAc,OAAA,UAAU,UAAV;AAEpB,oBAAM,aAAa;AACnB,oBAAM7B,KAAI,SAAJA,GAAKuG,OAAY;AACnB,yBAAO1E,QAAO,QAAQ,EAAE0E,KAAjB;gBACV;AAGD,oBAAM,WAA2B,CAC7B;kBACI,OAAOvG,GAAK,aAAU,0BAAd;kBACR,KAAK,uFAEeA,GAAE,cAAD,IAAM,iDACF,QAAK,4FACVA,GAAK,aAAU,QAAd,IAAkB,iDACd,QAAK,4FAEdA,GAAK,aAAU,QAAd,IAAqBA,GAAK,aAAU,QAAd,IAAqBA,GAAK,aAAU,cAAd,KAAmB,oJAIxC,cAAW,qBAAmBA,GAClE,cADmE,IAEtE;kBAGD,QAAQ,CACJ;oBACI,UAAU,MAAM;oBAChB,MAAM;oBACN,IAAI,SAAAuB,MAAA;AACA,0BAAM,WAAW,OAAO,WAAA,SAAA,EAAE,MAAM,KAAR,EAAe,IAAf,CAAD;AACvB,0BAAM,WAAW,OAAO,WAAA,SAAA,EAAE,MAAM,KAAR,EAAe,IAAf,CAAD;AAEvB,0BAAI,kBAAkB,QAAD,KAAc,kBAAkB,QAAD,GAAY;AAC5D,oCAAY,aAAa,UAAU,QAAnC;AACA,+BAAO;sBACV,OAAM;AACH,wBAAAM,QAAO,OAAO,YAAY,gEAAc,SAAxC;AACA,+BAAO;sBACV;oBAEJ;oBACD,WAAW;kBAhBf,CADI;gBAlBZ,CAD6B;AA4CjC,oBAAM,OAAkB;kBACpB,OAAO;kBACP,QAAQ;kBACR,MAAM,CAAA;gBAHc;AAKxB,qBAAK,KAAK,KAAK,SAAS,CAAD,CAAvB;AAEA,uBAAO;cACV;AAlED,cAAAvC,SAAA,SAAA,IAAA;;;;;ACrBA,cAAAD,QAAA,UAAiB,oBAAQ,GAAuC;;;;;ACAhE,kBAAA,SAAa,oBAAQ,GAA4B;AAEjD,cAAAA,QAAA,UAAA;;;;;ACFA,kCAAQ,GAAoC;AAC5C,kBAAA2C,QAAW,oBAAQ,CAAsB;AAEzC,cAAA3C,QAAA,UAAA2C,MAAA,OAAA;;;;;ACHA,kBAAAR,KAAQ,oBAAQ,CAAqB;AACrC,kBAAA,YAAgB,oBAAQ,GAAyB;AAIjD,cAAAA,GAAA,EAAG,QAAA,UAAA,MAAA,KAAA,GAA+B;gBAClC;cACA,CAAC;;;;;ACPD,kBAAA,WAAe,oBAAQ,EAAwB;AAE/C,kBAAA,QAAA,KAAA;AAIA,cAAAnC,QAAA,UAAA,SAAA,UAAAiD,KAAA;AACA,uBAAA,CAAA,SAAAA,GAAA,KAAA,SAAAA,GAAA,KAAA,MAAAA,GAAA,MAAAA;cACA;;;;;ACRA,kBAAA,MAAU,oBAAQ,EAA8E;AAChG,kBAAAgB,WAA0B,oBAAQ,GAAyK;AAE3M,cAAAA,WAAAA,SAAA,aAAAA,SAAA,UAAAA;AAEA,kBAAA,OAAAA,aAAA,UAAA;AACA,gBAAAA,WAAA,CAAA,CAA0BjE,QAAA,GAASiE,UAAA,EAAA,CAAA;cACnC;AAEA,kBAAA,UAAA,CAAA;AAEA,sBAAA,SAAA;AACA,sBAAA,YAAA;AAEA,kBAAA,SAAA,IAAAA,UAAA,OAAA;AAIA,cAAAjE,QAAA,UAAAiE,SAAA,UAAA,CAAA;;;;;ACjBA,kBAAA,8BAAkC,oBAAQ,EAAsD;AAChG,cAAAhE,WAAA,4BAAA,KAAA;AAEA,cAAAA,SAAA,KAAA,CAAcD,QAAA,GAAS,4IAAyI,EAAA,CAAA;AAEhK,cAAAA,QAAA,UAAAC;;;;;;;;;;;;ACDA,kBAAA,UAAA,oBAAA,CAAA;AAEA,kBAAA,aAAA,QAAA,gBAAA,oBAAA,CAAA,CAAA;AAEA,kBAAA;;gBAAA,WAAA;AAGI,2BAAA+N,aAAYxL,SAAc;AACtB,yBAAK,SAASA;kBACjB;AAOM,kBAAAwL,aAAA,UAAA,eAAP,SAAoB,UAAkB,UAAgB;AAClD,wBAAMxL,UAAS,KAAK;AAGpB,wBAAI,iBAAiB,WAAA,SAAA,EAAEA,QAAO,UAAU,0BAAjB,CAAF;AACrB,wBAAM,MAAM,WAAA,SAAA,EAAE,eAAe,MAAM,CAArB,CAAF,EAA2B,kBAAkB,MAAMA,OAAnD;AACZ,wBAAM,MAAM,WAAA,SAAA,EAAE,eAAe,MAAM,CAArB,CAAF,EAA2B,kBAAkB,MAAMA,OAAnD;AACZ,wBAAI,OAAO,KAAK;AACZ;oBACH;AAED,wBAAM,WAAmB,KAAK,gBAAgB,UAAU,QAA/B;AACzB,oBAAAA,QAAO,IAAP,IAAA,EAAc,cAAc,QAA5B;kBACH;AAOM,kBAAAwL,aAAA,UAAA,kBAAP,SAAuB,UAAkB,UAAgB;AACrD,wBAAI,SAAiB;AACrB,wBAAI,SAAiB;AACrB,6BAAS,IAAI,GAAG,IAAI,UAAU,KAAK;AAC/B,+BAAS;AACT,+BAASvM,KAAI,GAAGA,KAAI,UAAUA,MAAK;AAC/B,4BAAI,MAAM,GAAG;AACT,mCAAS,SAAS;wBACrB,OAAM;AACH,mCAAS,SAAS;wBACrB;sBACJ;AACD,+BAAS,SAAS,SAAS,SAAS;oBACvC;AACD,wBAAM,WACF,2EACA,UACA,qBAAmB,QAAA;AACvB,2BAAO;kBACV;AACL,yBAAAuM;gBAAC,EApDD;;AAsDA,cAAA/N,SAAA,SAAA,IAAe;;;;;;;;;;;;ACzDf,kBAAA,kBAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AACA,kBAAA,gBAAA,oBAAA,GAAA;AAMA,uBAAS,UAAUuC,SAAc;AAE7B,gCAAA,SAAA,EAAYA,OAAZ;AAEA,8BAAA,uBAAuBA,OAAvB;AAEA,8BAAA,eAAeA,OAAf;cACH;AAED,cAAAvC,SAAA,SAAA,IAAe;;;;;;;;;;;;ACjBf,kBAAA,aAAA,QAAA,gBAAA,oBAAA,CAAA,CAAA;AACA,kBAAA,YAAA,QAAA,gBAAA,oBAAA,EAAA,CAAA;AAIA,kBAAA,oBAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AAEA,kBAAA,YAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AACA,kBAAA,UAAA,oBAAA,CAAA;AAKA,uBAAS,iBAAiBuC,SAAc;AACpC,oBAAI;AAMJ,yBAAS,iBAAiB,OAAiB;AACvC,sBAAM,UAAU,IAAI,UAAA,SAAA,EAAQA,OAAZ;AAEhB,sBAAM,aAAa;AACnB,sBAAM7B,KAAI,SAAJA,GAAKuG,OAAc,QAA2B;AAA3B,wBAAA,WAAA,QAAA;AAAA,+BAAA;oBAA2B;AAChD,2BAAO1E,QAAO,QAAQ,EAAE,SAAS0E,KAA1B;kBACV;AAED,sBAAM,OAAwB,CAC1B;;oBAEI,OAAO,WAAA,SAAA,EAAE,WAASvG,GAAE,0BAAD,IAAQ,SAApB;oBACP,SAAS,SAAA,QAAC6B,SAAgBgK,QAAiB;AAEvC,sBAAAhK,QAAO,UAAU,kBAAkBgK,MAAnC;AACA,sBAAAhK,QAAO,UAAU,iBAAjB;AACA,sBAAAA,QAAO,IAAP,IAAA,EAAc,cAAc,QAAA,OAA5B;AAEA,6BAAO;oBACV;kBAVL,GAYA;oBACI,OAAO,WAAA,SAAA,EAAE,WAAS7B,GAAE,oBAAD,IAAO,SAAnB;oBACP,SAAS,SAAA,QAAC6B,SAAgBgK,QAAiB;AAEvC,0BAAI,SAAS,gBAAgBhK,OAAD;AAC5B,0BAAI,QAAQ;AACR,+BAAO;sBACV;AAED,0BAAI,YAAY,WAAA,SAAA,EAAEA,QAAO,UAAU,sBAAjB,CAAF;AAEhB,0BAAI,cAAc,QAAQ,WAAW,UAAU,MAAM,CAAhB,CAAnB;AAClB,0BAAI,CAAC,aAAa;AACd,+BAAO;sBACV;AAED,0BAAMJ,SAAQ,OAAO,QAAQ,mBAAmBoK,OAAM,MAAM,CAAZ,GAAgB,WAA3C,CAAD;AAEpB,0BAAI,UAAU,QAAQ,aAAaA,OAAM,MAAM,CAAZ,CAArB;AAEd,0BAAI,SAAiB,QAAQ,aACzB,kBAAA,SAAA,EAAe,cAAc,WAAA,SAAA,EAAE,OAAF,GAAYpK,MAAzC,EAAgD,MAAM,CAAtD,CADiB;AAGrB,+BAAS,UAAUoK,QAAO,MAAR;AAElB,sBAAAhK,QAAO,UAAU,kBAAkBgK,MAAnC;AACA,sBAAAhK,QAAO,UAAU,iBAAjB;AAEA,sBAAAA,QAAO,IAAP,IAAA,EAAc,cAAc,MAA5B;AAEA,6BAAO;oBACV;kBA/BL,GAiCA;oBACI,OAAO,WAAA,SAAA,EAAE,WAAS7B,GAAE,oBAAD,IAAO,SAAnB;oBACP,SAAS,SAAA,QAAC6B,SAAgBgK,QAAiB;AAEvC,0BAAI,SAAS,gBAAgBhK,OAAD;AAC5B,0BAAI,QAAQ;AACR,+BAAO;sBACV;AAED,0BAAI,YAAY,WAAA,SAAA,EAAEA,QAAO,UAAU,sBAAjB,CAAF;AAEhB,0BAAI,cAAc,QAAQ,WAAW,UAAU,MAAM,CAAhB,CAAnB;AAClB,0BAAI,CAAC,aAAa;AACd,+BAAO;sBACV;AAED,0BAAMJ,SAAQ,OAAO,QAAQ,mBAAmBoK,OAAM,MAAM,CAAZ,GAAgB,WAA3C,CAAD;AAEpB,0BAAI,UAAU,QAAQ,aAAaA,OAAM,MAAM,CAAZ,CAArB;AAEd,0BAAM,WAAmB,kBAAA,SAAA,EAAe,UAAU,WAAA,SAAA,EAAE,OAAF,GAAYpK,MAArC,EAA4C,MAAM,CAAlD,EACpB,SAAS,CADW,EACR,SAAS;AAE1B,0BAAI,SAAiB;AAErB,sBAAAI,QAAO,UAAU,kBAAkBgK,MAAnC;AACA,sBAAAhK,QAAO,UAAU,iBAAjB;AAEA,0BAAI,aAAa,GAAG;AAChB,iCAAS,QAAA;sBACZ,OAAM;AACH,iCAAS,QAAQ,aACb,kBAAA,SAAA,EAAe,UAAU,WAAA,SAAA,EAAE,OAAF,GAAYJ,MAArC,EAA4C,MAAM,CAAlD,CADK;sBAGZ;AACD,+BAAS,UAAUoK,QAAO,MAAR;AAClB,sBAAAhK,QAAO,IAAP,IAAA,EAAc,cAAc,MAA5B;AAEA,6BAAO;oBACV;kBAvCL,GAyCA;oBACI,OAAO,WAAA,SAAA,EAAE,WAAS7B,GAAE,oBAAD,IAAO,SAAnB;oBACP,SAAS,SAAA,QAAC6B,SAAgBgK,QAAiB;AAEvC,0BAAI,SAAS,gBAAgBhK,OAAD;AAC5B,0BAAI,QAAQ;AACR,+BAAO;sBACV;AAED,0BAAI,YAAY,WAAA,SAAA,EAAEA,QAAO,UAAU,sBAAjB,CAAF;AAEhB,0BAAMJ,SAAQ,QAAQ,mBAAmB,UAAU,MAAM,CAAhB,CAA3B;AAEd,0BAAI,UAAU,QAAQ,aAAaoK,OAAM,MAAM,CAAZ,CAArB;AAEd,0BAAI,SAAiB,QAAQ,aACzB,kBAAA,SAAA,EAAe,cAAc,WAAA,SAAA,EAAE,OAAF,GAAYpK,MAAzC,EAAgD,MAAM,CAAtD,CADiB;AAGrB,+BAAS,UAAUoK,QAAO,MAAR;AAElB,sBAAAhK,QAAO,UAAU,kBAAkBgK,MAAnC;AACA,sBAAAhK,QAAO,UAAU,iBAAjB;AAEA,sBAAAA,QAAO,IAAP,IAAA,EAAc,cAAc,MAA5B;AAEA,6BAAO;oBACV;kBA1BL,GA4BA;oBACI,OAAO,WAAA,SAAA,EAAE,WAAS7B,GAAE,oBAAD,IAAO,SAAnB;oBACP,SAAS,SAAA,QAAC6B,SAAgBgK,QAAiB;AAEvC,0BAAI,SAAS,gBAAgBhK,OAAD;AAC5B,0BAAI,QAAQ;AACR,+BAAO;sBACV;AAED,0BAAI,YAAY,WAAA,SAAA,EAAEA,QAAO,UAAU,sBAAjB,CAAF;AAEhB,0BAAMJ,SAAQ,QAAQ,mBAAmB,UAAU,MAAM,CAAhB,CAA3B;AAEd,0BAAI,UAAU,QAAQ,aAAaoK,OAAM,MAAM,CAAZ,CAArB;AAEd,0BAAM,SAAS,kBAAA,SAAA,EAAe,UAAU,WAAA,SAAA,EAAE,OAAF,GAAYpK,MAArC;AAEf,0BAAM,WAAmB,OAAO,MAAM,CAAb,EAAgB,SAAS,CAAzB,EAA4B,SAAS,CAArC,EAAwC,SAAS;AAG1E,0BAAI,SAAiB;AAErB,sBAAAI,QAAO,UAAU,kBAAkBgK,MAAnC;AACA,sBAAAhK,QAAO,UAAU,iBAAjB;AAGA,0BAAI,aAAa,GAAG;AAChB,iCAAS,QAAA;sBACZ,OAAM;AACH,iCAAS,QAAQ,aAAa,OAAO,MAAM,CAAb,CAArB;sBACZ;AACD,+BAAS,UAAUgK,QAAO,MAAR;AAClB,sBAAAhK,QAAO,IAAP,IAAA,EAAc,cAAc,MAA5B;AAEA,6BAAO;oBACV;kBAnCL,GAqCA;oBACI,OAAO,WAAA,SAAA,EAAE,WAAS7B,GAAE,0BAAD,IAAQ,SAApB;oBACP,SAAS,SAAA,QAAC6B,SAAgBgK,QAAiB;AAEvC,0BAAI,SAAS,gBAAgBhK,OAAD;AAC5B,0BAAI,QAAQ;AACR,+BAAO;sBACV;AAED,0BAAI,YAAY,WAAA,SAAA,EAAEA,QAAO,UAAU,sBAAjB,CAAF;AAEhB,0BAAI,cAAc,QAAQ,WAAW,UAAU,MAAM,CAAhB,CAAnB;AAClB,0BAAI,CAAC,aAAa;AACd,+BAAO;sBACV;AAED,0BAAIJ,SAAQ,OAAO,QAAQ,mBAAmBoK,OAAM,MAAM,CAAZ,GAAgB,WAA3C,CAAD;AAClB,0BAAIpK,WAAU,GAAG;AAEb,wBAAAA,SAAQ;sBACX;AAED,0BAAI,UAAU,QAAQ,aAAaoK,OAAM,MAAM,CAAZ,CAArB;AAEd,0BAAI,SAAiB,QAAQ,aACzB,kBAAA,SAAA,EAAe,aAAa,WAAA,SAAA,EAAE,OAAF,GAAYpK,QAAO,IAA/C,EAAqD,MAAM,CAA3D,CADiB;AAGrB,+BAAS,UAAUoK,QAAO,MAAR;AAElB,sBAAAhK,QAAO,UAAU,kBAAkBgK,MAAnC;AACA,sBAAAhK,QAAO,UAAU,iBAAjB;AAEA,sBAAAA,QAAO,IAAP,IAAA,EAAc,cAAc,MAA5B;AAEA,6BAAO;oBACV;kBAnCL,GAqCA;oBACI,OAAO,WAAA,SAAA,EAAE,WAAS7B,GAAE,0BAAD,IAAQ,SAApB;oBACP,SAAS,SAAA,QAAC6B,SAAgBgK,QAAiB;AAEvC,0BAAI,YAAY,WAAA,SAAA,EAAEhK,QAAO,UAAU,sBAAjB,CAAF;AAEhB,0BAAI,cAAc,QAAQ,WAAW,UAAU,MAAM,CAAhB,CAAnB;AAClB,0BAAI,CAAC,aAAa;AACd,+BAAO;sBACV;AAED,0BAAIJ,SAAQ,OAAO,QAAQ,mBAAmBoK,OAAM,MAAM,CAAZ,GAAgB,WAA3C,CAAD;AAClB,0BAAIpK,WAAU,GAAG;AAEb,wBAAAA,SAAQ;sBACX;AAED,0BAAI,UAAU,QAAQ,aAAaoK,OAAM,MAAM,CAAZ,CAArB;AAEd,0BAAI,SAAiB,QAAQ,aACzB,kBAAA,SAAA,EAAe,aAAa,WAAA,SAAA,EAAE,OAAF,GAAYpK,QAAO,IAA/C,EAAqD,MAAM,CAA3D,CADiB;AAGrB,+BAAS,UAAUoK,QAAO,MAAR;AAElB,sBAAAhK,QAAO,UAAU,kBAAkBgK,MAAnC;AACA,sBAAAhK,QAAO,UAAU,iBAAjB;AAEA,sBAAAA,QAAO,IAAP,IAAA,EAAc,cAAc,MAA5B;AAEA,6BAAO;oBACV;kBA9BL,CA7L0B;AA+N9B,4BAAU,IAAI,UAAA,SAAA,EAAQA,SAAQ,OAAO,IAA3B;AACV,0BAAQ,OAAR;gBACH;AAKD,yBAAS,mBAAgB;AAErB,sBAAI,SAAS;AACT,4BAAQ,OAAR;AACA,8BAAU;kBACb;gBACJ;AAED,uBAAO;kBACH;kBACA;gBAFG;cAIV;AAKD,uBAAS,gBAAgBA,SAAc;AACnC,oBAAM,aAAaA,QAAO,UAAU,sBAAjB;AACnB,oBAAM,WAAWA,QAAO,UAAU,oBAAjB;AACjB,qBAAI,eAAU,QAAV,eAAU,SAAA,SAAV,WAAY,MAAM,CAAlB,QAAyB,aAAQ,QAAR,aAAQ,SAAA,SAAR,SAAU,MAAM,CAAhB,IAAoB;AAC7C,yBAAO;gBACV,OAAM;AACH,yBAAO;gBACV;cACJ;AAMD,uBAAwB,iBAAiBA,SAAc;AAC7C,oBAAAuC,MAAyC,iBAAiBvC,OAAD,GAAvD,mBAAgBuC,IAAA,kBAAE,mBAAgBA,IAAA;AAG1C,gBAAAvC,QAAO,IAAI,WAAW,iBAAiB,KAAK,gBAA5C;AAGA,gBAAAA,QAAO,IAAI,WAAW,YAAY,KAAK,gBAAvC;AACA,gBAAAA,QAAO,IAAI,WAAW,YAAY,KAAK,gBAAvC;AACA,gBAAAA,QAAO,IAAI,WAAW,mBAAmB,KAAK,gBAA9C;AACA,gBAAAA,QAAO,IAAI,WAAW,gBAAgB,KAAK,gBAA3C;AACA,gBAAAA,QAAO,IAAI,WAAW,iBAAiB,KAAK,gBAA5C;cACH;AAZD,cAAAvC,SAAA,SAAA,IAAA;AAiBA,uBAAS,UAAU,OAAmB,QAAc;AAEhD,oBAAI,WAAW,MAAM,MAAM,CAAZ,EAAe;AAC9B,oBAAI,CAAC,YAAY,SAAS,cAAc,QAAQ;AAC5C,4BAAU,KAAG,QAAA;gBAChB;AACD,uBAAO;cACV;;;;;;;;;;;;;;;;AC9TD,kBAAA,aAAA,QAAA,gBAAA,oBAAA,CAAA,CAAA;AAOA,uBAAS,cAAc,OAAmB,QAAc;AAEpD,oBAAI,OAAO,kBAAkB,KAAD;AAE5B,oBAAI,YAA0B,GAAA,OAAA,SAAA,GAAA,MAAM,SAAN,EAAsB,MAAM,KAAK,QAAjC;AAE9B,oBAAM,iBAAiB,SAAS,CAAD,EAAI,SAAS;AAE5C,oBAAIgO,MAAK,SAAS,cAAc,IAAvB;AACT,yBAAS,IAAI,GAAG,IAAI,gBAAgB,KAAK;AACrC,sBAAM,KAAK,SAAS,cAAc,IAAvB;AACX,kBAAAA,IAAG,YAAY,EAAf;gBACH;AAED,iBAAA,GAAA,QAAA,SAAA,GAAA,QAAQ,EAAA,KAAR,UAAgB,SAAS,GAAG,GAAGA,GAAvB;AAER,sCAAsB,MAAM,QAAP;AACrB,uBAAO,WAAA,SAAA,EAAE,KAAK,UAAP;cACV;AAOD,uBAAS,cAAc,OAAmB,QAAc;AAEpD,oBAAI,OAAO,kBAAkB,KAAD;AAE5B,oBAAI,YAA0B,GAAA,OAAA,SAAA,GAAA,MAAM,SAAN,EAAsB,MAAM,KAAK,QAAjC;gDAErBC,IAAC;AAAA,sBAAA;AACN,sBAAI,SAAiB,CAAA;AAErB,mBAAA,GAAA,SAAA,SAAA,GAAA,YAAA,GAAA,MAAA,SAAA,GAAW,SAASA,EAAD,EAAI,QAAvB,CAAA,EAAA,KAAA,UAAyC,SAAA,MAAI;AACzC,2BAAO,KAAK,IAAZ;kBACH,CAFD;AAIA,yBAAO,SAASA,EAAD,EAAI,SAAS,WAAW,GAAG;AACtC,6BAASA,EAAD,EAAI,YAAY,SAASA,EAAD,EAAI,SAAS,CAArB,CAAxB;kBACH;AAED,sBAAI,KACA,WAAA,SAAA,EAAE,OAAO,CAAD,CAAR,EAAa,YAAb,MAA+B,OACzB,SAAS,cAAc,IAAvB,IACA,SAAS,cAAc,IAAvB;AAEV,mBAAA,GAAA,QAAA,SAAA,GAAA,MAAM,EAAA,KAAN,QAAc,SAAS,GAAG,GAAG,EAAvB;AAEN,2BAASzM,KAAI,GAAGA,KAAI,OAAO,QAAQA,MAAK;AACpC,6BAASyM,EAAD,EAAI,YAAY,OAAOzM,EAAD,CAA9B;kBACH;;AApBL,yBAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAG;0BAA/B,CAAA;gBAqBR;AAED,sCAAsB,MAAM,QAAP;AACrB,uBAAO,WAAA,SAAA,EAAE,KAAK,UAAP;cACV;AAOD,uBAAS,UAAU,OAAmB,QAAc;AAEhD,oBAAI,OAAO,kBAAkB,KAAD;AAE5B,oBAAI,YAA0B,GAAA,OAAA,SAAA,GAAA,MAAM,SAAN,EAAsB,MAAM,KAAK,QAAjC;AAE9B,iBAAA,GAAA,QAAA,SAAA,GAAA,QAAQ,EAAA,KAAR,UAAgB,QAAQ,CAAhB;AAER,sCAAsB,MAAM,QAAP;AACrB,uBAAO,WAAA,SAAA,EAAE,KAAK,UAAP;cACV;AAOD,uBAAS,UAAU,OAAmB,QAAc;AAEhD,oBAAI,OAAO,kBAAkB,KAAD;AAE5B,oBAAI,YAA0B,GAAA,OAAA,SAAA,GAAA,MAAM,SAAN,EAAsB,MAAM,KAAK,QAAjC;gDAErByM,IAAC;AAAA,sBAAA;AACN,sBAAI,SAAiB,CAAA;AAErB,mBAAA,GAAA,SAAA,SAAA,GAAA,aAAA,GAAA,MAAA,SAAA,GAAW,SAASA,EAAD,EAAI,QAAvB,CAAA,EAAA,KAAA,WAAyC,SAAA,MAAI;AACzC,2BAAO,KAAK,IAAZ;kBACH,CAFD;AAIA,yBAAO,SAASA,EAAD,EAAI,SAAS,WAAW,GAAG;AACtC,6BAASA,EAAD,EAAI,YAAY,SAASA,EAAD,EAAI,SAAS,CAArB,CAAxB;kBACH;AACD,mBAAA,GAAA,QAAA,SAAA,GAAA,MAAM,EAAA,KAAN,QAAc,QAAQ,CAAhB;AAEN,2BAASzM,KAAI,GAAGA,KAAI,OAAO,QAAQA,MAAK;AACpC,6BAASyM,EAAD,EAAI,YAAY,OAAOzM,EAAD,CAA9B;kBACH;;AAdL,yBAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAG;0BAA/B,CAAA;gBAeR;AAED,sCAAsB,MAAM,QAAP;AACrB,uBAAO,WAAA,SAAA,EAAE,KAAK,UAAP;cACV;AAQD,uBAAS,aAAa,OAAmB,QAAgB,MAAY;AAEjE,oBAAI,OAAO,kBAAkB,KAAD;AAE5B,oBAAI,YAA0B,GAAA,OAAA,SAAA,GAAA,MAAM,SAAN,EAAsB,MAAM,KAAK,QAAjC;AAE9B,oBAAM,OAAO,SAAS,MAAD,EAAS;AAE9B,oBAAIwM,MAAK,SAAS,cAAc,IAAvB;gDACAC,IAAC;AAAA,sBAAA;AAEN,sBAAM9H,MAAK,SAAS,cAAc,IAAvB;AACX,sBAAM,MAAM,KAAK8H,EAAD;AAKhB,mBAAA,GAAA,SAAA,SAAA,GAAA,aAAA,GAAA,MAAA,SAAA,GAAW,IAAI,UAAf,CAAA,EAAA,KAAA,WAAmC,SAAA,MAAI;AACnC,oBAAA9H,IAAG,YAAY,IAAf;kBACH,CAFD;AAGA,kBAAA6H,IAAG,YAAY7H,GAAf;;AAXJ,yBAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAG;0BAA3B,CAAA;gBAYR;AAED,iBAAA,GAAA,QAAA,SAAA,GAAA,QAAQ,EAAA,KAAR,UAAgB,QAAQ,GAAG6H,GAAnB;AAER,sCAAsB,MAAM,QAAP;AACrB,uBAAO,WAAA,SAAA,EAAE,KAAK,UAAP;cACV;AAOD,uBAAS,sBAAsB,MAAe,UAAgB;AAE1D,uBAAO,KAAK,SAAS,WAAW,GAAG;AAC/B,uBAAK,YAAY,KAAK,SAAS,CAAd,CAAjB;gBACH;AAED,yBAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;AACtC,uBAAK,YAAY,SAAS,CAAD,CAAzB;gBACH;cACJ;AAOD,uBAAS,kBAAkB,OAAiB;AACxC,oBAAI,OAAO,MAAM,MAAM,CAAZ,EAAe,SAAS,CAAxB;AACX,oBAAI,KAAK,aAAa,YAAY;AAC9B,yBAAO,MAAM,MAAM,CAAZ,EAAe,SAAS,MAAM,MAAM,CAAZ,EAAe,SAAS,SAAS,CAAzD;gBACV;AACD,uBAAO;cACV;AAED,cAAAhO,SAAA,SAAA,IAAe;gBACX;gBACA;gBACA;gBACA;gBACA;cALW;;;;;AClLf,kBAAA,SAAa,oBAAQ,GAAqB;AAE1C,cAAAD,QAAA,UAAA;;;;;ACFA,kCAAQ,EAAkC;AAC1C,kCAAQ,GAA6B;AACrC,kBAAA2C,QAAW,oBAAQ,CAAsB;AAEzC,cAAA3C,QAAA,UAAA2C,MAAA,MAAA;;;;;ACJA,kBAAAR,KAAQ,oBAAQ,CAAqB;AACrC,kBAAA,OAAW,oBAAQ,GAAyB;AAC5C,kBAAA,8BAAkC,oBAAQ,GAA6C;AAEvF,kBAAA,sBAAA,CAAA,4BAAA,SAAA,UAAA;AACA,sBAAA,KAAA,QAAA;cACA,CAAC;AAID,cAAAA,GAAA,EAAG,QAAA,SAAA,MAAA,MAAA,QAAA,oBAAA,GAA2D;gBAC9D;cACA,CAAC;;;;;;ACXD,kBAAA,OAAW,oBAAQ,EAAoC;AACvD,kBAAA,WAAe,oBAAQ,EAAwB;AAC/C,kBAAA,+BAAmC,oBAAQ,GAA+C;AAC1F,kBAAA,wBAA4B,oBAAQ,GAAuC;AAC3E,kBAAA,WAAe,oBAAQ,EAAwB;AAC/C,kBAAA,iBAAqB,oBAAQ,EAA8B;AAC3D,kBAAA,oBAAwB,oBAAQ,GAAkC;AAIlE,cAAAnC,QAAA,UAAA,SAAA,KAAA,WAAA;AACA,oBAAAoD,KAAA,SAAA,SAAA;AACA,oBAAAkD,KAAA,OAAA,QAAA,aAAA,OAAA;AACA,oBAAA,kBAAA,UAAA;AACA,oBAAA,QAAA,kBAAA,IAAA,UAAA,CAAA,IAAA;AACA,oBAAA,UAAA,UAAA;AACA,oBAAA,iBAAA,kBAAAlD,EAAA;AACA,oBAAAhB,SAAA;AACA,oBAAA,QAAA,QAAA,MAAA,UAAA,MAAA;AACA,oBAAA;AAAA,0BAAA,KAAA,OAAA,kBAAA,IAAA,UAAA,CAAA,IAAA,QAAA,CAAA;AAEA,oBAAA,kBAAA,UAAA,EAAAkE,MAAA,SAAA,sBAAA,cAAA,IAAA;AACA,6BAAA,eAAA,KAAAlD,EAAA;AACA,yBAAA,SAAA;AACA,2BAAA,IAAAkD,GAAA;AACA,yBAAU,EAAA,OAAA,KAAA,KAAA,QAAA,GAAA,MAAmClE,UAAA;AAC7C,4BAAA,UAAA,6BAAA,UAAA,OAAA,CAAA,KAAA,OAAAA,MAAA,GAAA,IAAA,IAAA,KAAA;AACA,mCAAA,QAAAA,QAAA,KAAA;kBACA;gBACA,OAAG;AACH,2BAAA,SAAAgB,GAAA,MAAA;AACA,2BAAA,IAAAkD,GAAA,MAAA;AACA,yBAAU,SAAAlE,QAAeA,UAAA;AACzB,4BAAA,UAAA,MAAAgB,GAAAhB,MAAA,GAAAA,MAAA,IAAAgB,GAAAhB,MAAA;AACA,mCAAA,QAAAA,QAAA,KAAA;kBACA;gBACA;AACA,uBAAA,SAAAA;AACA,uBAAA;cACA;;;;;;;;;;;;;;ACnCA,kBAAA,aAAA,QAAA,gBAAA,oBAAA,CAAA,CAAA;AAGA,kBAAA;;gBAAA,WAAA;AAEI,2BAAA+L,SAAY3L,SAAc;AACtB,yBAAK,SAASA;kBACjB;AAMM,kBAAA2L,SAAA,UAAA,aAAP,SAAkB,OAAkB;;AAChC,wBAAI,MAAsC,WAAA,SAAA,EAAE,KAAF,EAAS,MAAM,CAAf;AAC1C,wBAAI,CAAC,IAAI,YAAY;AACjB,6BAAO;oBACV;AACD,2BAAGpJ,MAAG,WAAA,SAAA,EAAE,GAAF,EAAO,YAAY,MAAM,GAAzB,OAA6B,QAAAA,QAAA,SAAA,SAAAA,IAAE,MAAM,CAAR;AACnC,2BAAO;kBACV;AAOM,kBAAAoJ,SAAA,UAAA,qBAAP,SAA0B,OAAoB,MAAiB;AAAA,wBAAA;AAC3D,wBAAI,SAAiB;AACrB,wBAAI,aAAa,MAAM,SAAS,CAAf;AAEjB,wBAAI,WAAW,aAAa,YAAY;AACpC,mCAAa,MAAM,SAAS,MAAM,SAAS,SAAS,CAAvC;oBAChB;AACD,qBAAA,GAAA,SAAA,SAAA,GAAA,YAAA,GAAA,MAAA,SAAA,GAAW,WAAW,QAAtB,CAAA,EAAA,KAAA,UAAwC,SAAC,MAAM/L,QAAK;AAChD,+BAAS,OAAQ,SAASA,SAAS;oBACtC,CAFD;AAGA,2BAAO;kBACV;AAMM,kBAAA+L,SAAA,UAAA,qBAAP,SAA0B,OAAkB;AAAA,wBAAA;;AAExC,wBAAI,SAAiB;AAErB,wBAAI,SACA,WAAA,SAAA,EAAE,KAAF,EAAS,YAAT,MAA2B,QAAQ,WAAA,SAAA,EAAE,KAAF,EAAS,YAAT,MAA2B,OACxD,SACDpJ,MAAC,WAAA,SAAA,EAAE,KAAF,EAAS,YAAY,MAAM,KAA3B,OAAiC,QAAAA,QAAA,SAAA,SAAAA,IAAE,MAAM,CAAR;AAC3C,wBAAI,SAAS,WAAA,SAAA,EAAE,MAAF,EAAU,OAAV;AACb,qBAAA,GAAA,SAAA,SAAA,GAAA,aAAA,GAAA,MAAA,SAAA,GAAW,OAAO,MAAM,CAAb,EAAgB,QAA3B,CAAA,EAAA,KAAA,WAA6C,SAAC,MAAM3C,QAAK;AACrD,+BAAS,SAAU,SAASA,SAAS;oBACxC,CAFD;AAGA,2BAAO;kBACV;AAMM,kBAAA+L,SAAA,UAAA,eAAP,SAAoB,OAAkB;AAClC,wBAAM,UAAU,oEAAkE,WAAA,SAAA,EAC9E,KAD8E,EAEhF,KAFgF,IAE1E;AACR,2BAAO;kBACV;AACL,yBAAAA;gBAAC,EAlED;;AAoEA,cAAAlO,SAAA,SAAA,IAAe;;;;;;;;;;;;;ACvEf,kBAAA,aAAA,QAAA,gBAAA,oBAAA,CAAA,CAAA;AAMA,uBAAS,YAAY,SAAmB;AACpC,oBAAI,CAAC,QAAQ,QAAQ;AACjB,yBAAO;gBACV;AAED,oBAAM,MAAM,QAAQ,MAAM,CAAd;AAEZ,uBAAO,IAAI,aAAa,OAAO,IAAI,cAAc;cACpD;AACD,uBAAgB,eAAeuC,SAAc;AACzC,yBAAS,kBAAkB,MAAkB3B,IAAa;AAEtD,sBAAIA,GAAE,UAAU,GAAG;AACf,wBAAMyE,aAAY,OAAO,aAAP;AAClB,wBAAIA,YAAW;AACH,0BAAA,YAA0BA,WAAjB,WAAE,aAAeA,WAAL;AAC7B,0BAAM,cAAc,WAAA,SAAA,EAAE,eAAU,QAAV,eAAU,SAAA,SAAV,WAAY,aAAd;AAEpB,0BAAI,CAAC,KAAK,UAAU,WAAA,SAAA,EAAE,SAAF,CAAf,GAA8B;AAC/B,4BAAM,MACF,YAAY,MAAM,CAAlB,EAAqB,YAAY,OAC3B,cACA,YAAY,kBAAkB,MAAM9C,OAApC;AACV,4BAAI,KAAK;AACL,8BAAM+C,SAAQ/C,QAAO,UAAU,SAAjB;AACd,0BAAA+C,WAAK,QAALA,WAAK,SAAA,SAALA,OAAO,OAAO,IAAI,MAAM,CAAV,GAAc,IAAI,MAAM,CAAV,EAAa,WAAW,MAApD;AACA,0BAAA/C,QAAO,UAAU,iBAAjB;wBACH;sBACJ;oBACJ;kBACJ;gBACJ;AAED,gBAAAA,QAAO,IAAI,WAAW,iBAAiB,KAAK,iBAA5C;cACH;AAzBD,cAAAvC,SAAA,iBAAA;AA2BA,uBAAgB,uBAAuBuC,SAAc;AACzC,oBAAA,MAAmBA,QAAhB,KAAE8C,aAAc9C,QAAL;AACd,oBAAA,gBAAkB,IAAI,WAAT;AAErB,8BAAc,KAAK,SAAU3B,IAAC;AAE1B,kBAAA2B,QAAO,UAAU,UAAjB;AACA,sBAAM,0BAA0B8C,WAAU,0BAAV;AAChC,sBAAI,yBAAyB;AACzB,wBAAM,WAAW,wBAAwB,WAAW9C,OAAnC;AACjB,wBAAM,WAAW,SAAS,SACpB,SAAS,KAAT,EAAgB,SACZ,SAAS,KAAT,IACA,OACJ;AAGN,wBACI,YACA,SAAS,YAAT,MAA2B,WAC3B8C,WAAU,iBAAV,KACAA,WAAU,aAAV,MAA6B,KAC7BzE,GAAE,YAAY,GAChB;AACE,0BAAM,YAAY,SAAS,KAAT;AAClB,0BAAM,UAAU,CAAC,CAAC,UAAU;AAO5B,0BAAI,WAAW,YAAY,QAAD,GAAY;AAClC,iCAAS,OAAT;AACA,wBAAA2B,QAAO,UAAU,eAAe,UAAU,MAAM,CAAhB,CAAhC;sBACH;AACD,sBAAA3B,GAAE,eAAF;oBACH;kBACJ;gBACJ,CAnCD;cAoCH;AAxCD,cAAAZ,SAAA,yBAAA;;;;;;;;;;;;;;AC1CA,kBAAA,cAAA,QAAA,gBAAA,oBAAA,EAAA,CAAA;AAEA,kBAAA,aAAA,QAAA,gBAAA,oBAAA,CAAA,CAAA;AACA,kBAAA,SAAA,oBAAA,CAAA;AACA,kBAAA,sBAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AACA,kBAAA,cAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AACA,kBAAA,UAAA,QAAA,gBAAA,oBAAA,EAAA,CAAA;AAEA,kBAAA,UAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AAEA,uBAAgB,eAAeuC,SAAgBV,OAAY;AACvD,oBAAI,CAACA;AAAM,yBAAOA;AAElB,gBAAAA,QAAO,oBAAoBA,KAAD;AAE1B,gBAAAA,QAAO,gBAAgBA,KAAD;AAEtB,gBAAAA,QAAO,OAAA,qBAAqBA,KAArB;AAEP,uBAAOA;AAGP,yBAAS,gBAAgBA,OAAY;AACjC,sBAAI,SAASA,MAAK,MAAM,sBAAX;AAEb,sBAAI,WAAW;AAAM,2BAAOA;AAE5B,mBAAA,GAAA,KAAA,SAAA,GAAA,MAAM,EAAA,KAAN,QAAW,SAAA,MAAI;AAEX,oBAAAA,QAAOA,MAAK,QAAQ,MAAM,KAAK,QAAQ,mBAAmB,IAAhC,EAAsC,QAAQ,SAAS,EAAvD,CAAnB;kBACV,CAHK;AAKN,yBAAOA;gBACV;AAGD,yBAAS,oBAAoBA,OAAY;AAAA,sBAAA;AAErC,sBAAI,IAAIA,MAAK,MAAM,sCAAX;AAIR,sBAAI,CAAC,KAAK,CAAC,EAAE;AAAQ,2BAAOA;AAG5B,sBAAIhB,MAAI,GAAA,KAAA,SAAA,GAAA,WAAA,OAAA,UAAU,CAAV,CAAA,EAAA,KAAA,UAAiB,SAACoN,IAAS;AAC/B,oBAAAA,KAAIA,GAAE,QAAQ,4BAA4B,EAAtC;AACJ,2BAAOA,GAAE,QAAQ,YAAY,EAAtB;kBACV,CAHO;AAMR,2BAAS,IAAI,GAAG,IAAI,EAAE,QAAQ,KAAK;AAC/B,oBAAApM,QAAOA,MAAK,QAAQ,EAAE,CAAD,GAAKhB,GAAE,CAAD,CAApB;kBACV;AAED,yBAAO,oBAAoBgB,KAAD;gBAC7B;cACJ;AA/CD,cAAA7B,SAAA,iBAAA;AAiDA,kBAAAmO;;gBAAA,SAAA,QAAA;AAAmB,0BAAA,UAAAA,OAAA,MAAA;AACf,2BAAAA,MAAY5L,SAAc;AAA1B,wBAAA,QAAA;AACI,wBAAM,QAAQ,WAAA,SAAA,EACV,yFADU;AAGd,4BAAA,OAAA,KAAA,MAAM,OAAOA,OAAb,KAAoB;AAGpB,4BAAA,SAAA,EAAUA,OAAV;;kBACH;AAOO,kBAAA4L,MAAA,UAAA,iBAAR,SAAuBlH,OAAY;AAC/B,wBAAI1E,UAAS,KAAK;AAElB,wBAAI,QAAQ,WAAA,SAAA,EAAE,WAAS0E,QAAI,SAAf;AACZ,oBAAA1E,QAAO,IAAP,IAAA,EAAc,cAAc,KAA5B;AACA,oBAAAA,QAAO,UAAU,kBAAkB,OAAO,KAA1C;AACA,oBAAAA,QAAO,UAAU,iBAAjB;kBACH;AAKM,kBAAA4L,MAAA,UAAA,eAAP,WAAA;AACI,wBAAM5L,UAAS,KAAK;AACpB,wBAAM,gBAAgBA,QAAO,UAAU,iBAAjB;AAEtB,wBAAI,KAAK,UAAU;AACf;oBACH,OAAM;AAEH,0BAAIA,QAAO,UAAU,iBAAjB,GAAqC;AAErC,6BAAK,YAAY,IAAI,EAArB;sBACH,OAAM;AAEH,6BAAK,eAAe,aAApB;sBACH;oBACJ;kBACJ;AAOM,kBAAA4L,MAAA,UAAA,cAAP,SAAmBlH,OAAc,cAAoB;AACjD,wBAAM,OAAO,oBAAA,SAAA,EAAgB,KAAK,QAAQA,OAAM,YAAnC;AACb,wBAAM,QAAQ,IAAI,QAAA,SAAA,EAAM,MAAM,IAAhB;AACd,0BAAM,OAAN;kBACH;AAKM,kBAAAkH,MAAA,UAAA,kBAAP,WAAA;AACI,wBAAM5L,UAAS,KAAK;AACpB,wBAAI,YAAA,SAAA,EAASA,OAAT,GAAkB;AAClB,2BAAK,OAAL;oBACH,OAAM;AACH,2BAAK,SAAL;oBACH;kBACJ;AACL,yBAAA4L;gBAAC,EApEkB,YAAA,SAAA,CAAnB;;AAsEA,cAAAnO,SAAA,SAAA,IAAemO;;;;;;;;;;;;;AC/Hf,kBAAA,SAAA,oBAAA,CAAA;AACA,kBAAA,aAAA,QAAA,gBAAA,oBAAA,CAAA,CAAA;AACA,kBAAA,cAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AACA,kBAAA,UAAA,oBAAA,CAAA;AAEA,uBAAA,UAAyB5L,SAAgB0E,OAAc,cAAoB;AAAA,oBAAA;AAEvE,oBAAM,gBAAgB,OAAA,UAAU,cAAV;AACtB,oBAAM,aAAa,OAAA,UAAU,QAAV;AACnB,oBAAM,UAAU,OAAA,UAAU,QAAV;AAMhB,yBAAS,WAAW,cAAsBmH,OAAY;;AAElD,sBAAI,SAAS,YAAA,SAAA,EAAS7L,OAAT;AAEb,sBAAI,QAAQ;AACR,mCAAc;kBACjB;AAED,sBAAMyB,YAAOc,MAAGvC,QAAO,UAAU,sBAAjB,OAAwC,QAAAuC,QAAA,SAAA,SAAAA,IAAE,MAAM,CAAR,EAAW;AAEnE,sBAAId,UAAS;AACT,oBAAAzB,QAAO,IAAP,IAAA,EAAc,cAAc,QAAA,OAA5B;kBACH;AAGD,sBAAI,aAAa6L,MAAK,QAAQ,MAAM,MAAnB,EAA2B,QAAQ,MAAM,MAAzC;AAGjB,sBAAI7L,QAAO,WAAW;AAClB,iCAAaA,QAAO,UAAU,cAAc,UAA/B,EAA2C;kBAC3D;AAGD,kBAAAA,QAAO,IAAP,IAAA,EAAc,cAAc,uBAAqB,eAAY,OAAK,aAAU,eAA5E;AAEA,sBAAM,QAAQA,QAAO,UAAU,sBAAjB;AACd,sBAAM,YAAY,UAAK,QAAL,UAAK,SAAA,SAAL,MAAO,WAAWA,OAAlB;AAGlB,uBAAI,cAAS,QAAT,cAAS,SAAA,SAAT,UAAW,eAAX,EAA4B,MAAM,YAAW,GAAG;AAEhD,+BAAA,SAAA,EAAE,QAAA,OAAF,EAAW,YAAY,SAAvB;kBACH;gBACJ;AAKD,yBAAS,iBAAc;AACnB,sBAAI,CAAC,YAAA,SAAA,EAASA,OAAT;AAAkB;AAGvB,sBAAI;AAEJ,sBAAM,QAAQA,QAAO,UAAU,sBAAjB;AACd,sBAAM,YAAY,UAAK,QAAL,UAAK,SAAA,SAAL,MAAO,WAAWA,OAAlB;AAClB,sBAAI,CAAC;AAAW;AAEhB,kBAAAA,QAAO,UAAU,kBAAkB,SAAnC;AACA,kBAAAA,QAAO,UAAU,iBAAjB;AAEA,kCAAgB;gBACnB;AAED,oBAAM7B,KAAI,SAAJA,GAAKuG,OAAY;AACnB,yBAAO1E,QAAO,QAAQ,EAAE0E,KAAjB;gBACV;AAGD,oBAAM,OAAO;kBACT,OAAO;kBACP,QAAQ;;kBAGR,MAAM,CACF;;oBAEI,OAAOvG,GAAE,gDAAD;;oBAER,KAAK,wDACyB,aAAU,sCAC1B,GAAA,KAAA,SAAA,GAAA,WAAA6B,QAAO,OAAO,YAAd,EAAA,KAAA,UAA+B,SAAA8L,WAAQ;AACrC,6BACI,cACC,gBAAgBA,YAAW,aAAa,MACzC,cACAA,YACA,OACAA,YACA;oBAEP,CAVC,IAUA,gFAEU,gBAAa,mFAAiFpH,MAAK,QACvH,WACA,GAFkH,IAGrH,oIAEuC,UAAO,sBAC3C,YAAA,SAAA,EAAS1E,OAAT,IAAmB7B,GAAE,cAAD,IAASA,GAAE,cAAD,KAAM;;oBAKxC,QAAQ;;sBAEJ;wBACI,UAAU,MAAM;wBAChB,MAAM;wBACN,IAAI,SAAAuB,MAAA;AACA,8BAAM,QAAQ,SAAS,eAAe,aAAxB;AACd,8BAAM,UAAU,WAAA,SAAA,EAAE,MAAM,UAAR;AAEhB,8BAAIqM,gBAAe,QAAQ,IAAR;AAEnB,8BAAIF,QAAO,MAAM;AAGjB,8BAAI,CAACA;AAAM;AAGX,8BAAI,YAAA,SAAA,EAAS7L,OAAT,GAAkB;AAClB,mCAAO;0BACV,OAAM;AAEH,uCAAW+L,eAAcF,KAAf;0BACb;AAGD,iCAAO;wBACV;sBAxBL;oBAFI;kBA7BZ,CADE;gBALG;AAoEb,uBAAO;cACV;AA1ID,cAAApO,SAAA,SAAA,IAAA;;;;;;;;;;;;ACNA,kBAAA,kBAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AACA,kBAAA,yBAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AAMA,uBAAS,UAAUuC,SAAc;AAE7B,gCAAA,SAAA,EAAiBA,OAAjB;AAGA,uCAAA,SAAA,EAAuBA,OAAvB;cACH;AAED,cAAAvC,SAAA,SAAA,IAAe;;;;;;;;;;;;;AChBf,kBAAA,aAAA,QAAA,gBAAA,oBAAA,CAAA,CAAA;AACA,kBAAA,YAAA,QAAA,gBAAA,oBAAA,EAAA,CAAA;AAMA,uBAAgB,iBAAiBuC,SAAc;AAC3C,oBAAI;AAMJ,yBAAS,gBAAgB,OAAiB;AACtC,sBAAM,aAAa;AACnB,sBAAM7B,KAAI,SAAJA,GAAKuG,OAAc,QAA2B;AAA3B,wBAAA,WAAA,QAAA;AAAA,+BAAA;oBAA2B;AAChD,2BAAO1E,QAAO,QAAQ,EAAE,SAAS0E,KAA1B;kBACV;AAED,sBAAM,OAAO,CACT;oBACI,OAAO,WAAA,SAAA,EAAE,WAASvG,GAAE,0BAAD,IAAQ,SAApB;oBACP,SAAS,SAAA,QAAC6B,SAAgBgM,QAAiB;AAEvC,sBAAAA,OAAM,OAAN;AAGA,6BAAO;oBACV;kBARL,CADS;AAcb,4BAAU,IAAI,UAAA,SAAA,EAAQhM,SAAQ,OAAO,IAA3B;AACV,0BAAQ,OAAR;gBACH;AAKD,yBAAS,kBAAe;AAEpB,sBAAI,SAAS;AACT,4BAAQ,OAAR;AACA,8BAAU;kBACb;gBACJ;AAED,uBAAO;kBACH;kBACA;gBAFG;cAIV;AA9CD,cAAAvC,SAAA,mBAAA;AAyDA,uBAAS,iBAAiBY,IAAkB2B,SAAc;AAEtD,oBAAM,iBAAiBA,QAAO,UAAU,0BAAjB;AAGvB,oBAAM,WAAW,mBAAc,QAAd,mBAAc,SAAA,SAAd,eAAgB,WAAWA,OAA3B;AAGjB,oBAAM,cAAc,aAAQ,QAAR,aAAQ,SAAA,SAAR,SAAU,YAAV;AAGpB,oBAAI,gBAAgB;AAAO;AAG3B,gBAAA3B,GAAE,eAAF;AAGA,gBAAA2B,QAAO,IAAP,IAAA,EAAc,cAAc,MAA5B;cACH;AAMD,uBAAwB,iBAAiBA,SAAc;AAC7C,oBAAAuC,MAAuC,iBAAiBvC,OAAD,GAArD,kBAAeuC,IAAA,iBAAE,kBAAeA,IAAA;AAGxC,gBAAAvC,QAAO,IAAI,WAAW,gBAAgB,KAAK,eAA3C;AAGA,gBAAAA,QAAO,IAAI,WAAW,YAAY,KAAK,eAAvC;AACA,gBAAAA,QAAO,IAAI,WAAW,mBAAmB,KAAK,eAA9C;AACA,gBAAAA,QAAO,IAAI,WAAW,gBAAgB,KAAK,eAA3C;AACA,gBAAAA,QAAO,IAAI,WAAW,iBAAiB,KAAK,eAA5C;cACH;AAXD,cAAAvC,SAAA,SAAA,IAAA;;;;;;;;;;;;ACzFA,kBAAA,UAAA,oBAAA,CAAA;AAEA,kBAAA,aAAA,QAAA,gBAAA,oBAAA,CAAA,CAAA;AAMA,uBAAwB,uBAAuBuC,SAAc;AACjD,oBAAA,YAA8BA,QAArB,WAAE8C,aAAmB9C,QAAV,WAAE,MAAQA,QAAL;AACzB,oBAAA,gBAAkB,IAAI,WAAT;AAErB,8BAAc,KAAK,SAAU3B,IAAC;;AAE1B,sBAAIA,GAAE,YAAY;AAAI;AACtB,sBAAMkG,QAAOzB,WAAU,0BAAV;AACb,sBAAM,aAASP,MAAG,UAAU,SAAV,OAAoB,QAAAA,QAAA,SAAA,SAAAA,IAAE,KAAF;AACtC,uBAAIgC,UAAI,QAAJA,UAAI,SAAA,SAAJA,MAAM,MAAM,CAAZ,EAAe,aAAY,UAAS,cAAS,QAAT,cAAS,SAAA,SAAT,UAAW,MAAM,CAAjB,EAAoB,aAAY,OAAO;AAE3E,wBAAM,UAAU,WAAA,SAAA,EAAE,QAAA,OAAF;AAChB,8BAAU,OAAO,OAAjB;kBACH;gBACJ,CAVD;AAYA,8BAAc,KAAK,SAAUlG,IAAC;AAE1B,kBAAA2B,QAAO,UAAU,UAAjB;AACA,sBAAM,0BAA0B8C,WAAU,0BAAV;AAChC,sBAAI,yBAAyB;AACzB,wBAAM,WAAW,wBAAwB,WAAW9C,OAAnC;AAEjB,wBAAM,WAAW,aAAQ,QAAR,aAAQ,SAAA,SAAR,SAAU,KAAV;AAGjB,wBAAM,YAAY,aAAQ,QAAR,aAAQ,SAAA,SAAR,SAAU,eAAV;AAElB,wBAAI,SAAS,WAAU,aAAQ,QAAR,aAAQ,SAAA,SAAR,SAAU,YAAV,OAA4B,SAAS,UAAU,WAAW,GAAG;AAEhF,0BAAI8C,WAAU,aAAV,MAA6B,GAAG;AAEhC,4BAAIzE,GAAE,YAAY,GAAG;AACjB,8BAAM,UAAU,WAAA,SAAA,EAAE,QAAA,OAAF;AAChB,oCAAU,OAAO,OAAjB;wBACH;sBACJ;oBACJ;kBACJ;gBACJ,CAvBD;cAwBH;AAxCD,cAAAZ,SAAA,SAAA,IAAA;;;;;;;;;;;;ACRA,kBAAA,YAAA,QAAA,gBAAA,oBAAA,EAAA,CAAA;AACA,kBAAA,aAAA,QAAA,gBAAA,oBAAA,CAAA,CAAA;AAGA,kBAAA,UAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AACA,kBAAA,SAAA,oBAAA,CAAA;AACA,kBAAA,UAAA,oBAAA,CAAA;AACA,kBAAAwO;;gBAAA,SAAA,QAAA;AAAwB,0BAAA,UAAAA,YAAA,MAAA;AACpB,2BAAAA,WAAYjM,SAAc;AAA1B,wBAAA,QAAA;AACI,wBAAM,QAAQ,WAAA,SAAA,EACV,iGADU;AAGd,4BAAA,OAAA,KAAA,MAAM,OAAOA,OAAb,KAAoB;AAEpB,4BAAA,SAAA,EAAUA,OAAV;;kBACH;AAIM,kBAAAiM,WAAA,UAAA,eAAP,WAAA;AACI,wBAAMjM,UAAS,KAAK;AACpB,wBAAM+C,SAAQ/C,QAAO,UAAU,SAAjB;AAEd,wBAAM,iBAAiBA,QAAO,UAAU,0BAAjB;AACvB,wBAAI,EAAC,mBAAc,QAAd,mBAAc,SAAA,SAAd,eAAgB;AAAQ;AAE7B,wBAAM,cAAc,WAAA,SAAA,EAAE,eAAe,MAAM,CAArB,CAAF;AACpB,wBAAM,YAAY,YAAY,YAAY,SAAS,eAAe,MAAM,CAArB,CAAjC;AAClB,wBAAM,UAAU,YAAY,SAAZ;AAGhB,wBAAI,YAAY,YAAZ,MAA8B;AAAQ;AAE1C,wBAAI,aAAa,WAAA,SAAA,EAAE,UAAU,MAAM,CAAhB,CAAF,EAAsB,YAAtB,MAAwC;AAAS;AAGlE,wBACI,WACA,QAAQ,WAAW,KACnB,WAAA,SAAA,EAAE,QAAQ,MAAM,CAAd,CAAF,EAAoB,YAApB,MAAsC,SACtC,EAAC+C,WAAK,QAALA,WAAK,SAAA,SAALA,OAAO,YACV;AACE;oBACH;AAED,yBAAK,gBAAL;kBACH;AAIO,kBAAAkJ,WAAA,UAAA,kBAAR,WAAA;AAEI,wBAAI,eAAuB,UAAQ,QAAA;AAEnC,wBAAI,OAAA,GAAG,WAAW;AACd,qCAAe;oBAClB;AACD,yBAAK,OAAO,IAAZ,IAAA,EAAmB,cAAc,YAAjC;kBACH;AAIM,kBAAAA,WAAA,UAAA,kBAAP,WAAA;kBAAiC;AACrC,yBAAAA;gBAAC,EAxDuB,UAAA,SAAA,CAAxB;;AAyDA,cAAAxO,SAAA,SAAA,IAAewO;;;;;;;;;;;;AC/Df,kBAAA,kBAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AAKA,uBAAS,UAAUjM,SAAc;AAE7B,gCAAA,SAAA,EAAiBA,OAAjB;cACH;AAED,cAAAvC,SAAA,SAAA,IAAe;;;;;;;;;;;;ACXf,kBAAA,aAAA,QAAA,gBAAA,oBAAA,CAAA,CAAA;AACA,kBAAA,YAAA,QAAA,gBAAA,oBAAA,EAAA,CAAA;AAMA,uBAAS,iBAAiBuC,SAAc;AACpC,oBAAI;AAMJ,yBAAS,qBAAqB,YAAsB;AAEhD,sBAAM,OAAwB,CAC1B;oBACI,OAAO,WAAA,SAAA,EAAE,WAASA,QAAO,QAAQ,EAAE,+BAAjB,IAAuC,SAAlD;oBACP,SAAS,SAAA,QAACA,SAAgBkM,aAAsB;AAE5C,sBAAAlM,QAAO,UAAU,kBAAkBkM,WAAnC;AACA,sBAAAlM,QAAO,UAAU,iBAAjB;AACA,sBAAAA,QAAO,IAAP,IAAA,EAAc,QAAd;AAGA,6BAAO;oBACV;kBAVL,CAD0B;AAe9B,4BAAU,IAAI,UAAA,SAAA,EAAQA,SAAQ,YAAY,IAAhC;AAEV,0BAAQ,OAAR;gBACH;AAKD,yBAAS,uBAAoB;AACzB,sBAAI,SAAS;AACT,4BAAQ,OAAR;AACA,8BAAU;kBACb;gBACJ;AAED,uBAAO;kBACH;kBACA;gBAFG;cAIV;AAED,uBAAwB,iBAAiBA,SAAc;AAC7C,oBAAAuC,MAAiD,iBAAiBvC,OAAD,GAA/D,uBAAoBuC,IAAA,sBAAE,uBAAoBA,IAAA;AAGlD,gBAAAvC,QAAO,IAAI,WAAW,gBAAgB,KAAK,oBAA3C;AAGA,gBAAAA,QAAO,IAAI,WAAW,YAAY,KAAK,oBAAvC;AACA,gBAAAA,QAAO,IAAI,WAAW,YAAY,KAAK,oBAAvC;AACA,gBAAAA,QAAO,IAAI,WAAW,mBAAmB,KAAK,oBAA9C;AACA,gBAAAA,QAAO,IAAI,WAAW,gBAAgB,KAAK,oBAA3C;AACA,gBAAAA,QAAO,IAAI,WAAW,iBAAiB,KAAK,oBAA5C;cACH;AAZD,cAAAvC,SAAA,SAAA,IAAA;;;;;;;;;;;;;ACxDA,kBAAA,aAAA,QAAA,gBAAA,oBAAA,CAAA,CAAA;AACA,kBAAA,YAAA,QAAA,gBAAA,oBAAA,EAAA,CAAA;AAGA,kBAAA,SAAA,oBAAA,EAAA;AACA,kBAAA,eAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AACA,kBAAA,SAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AAEA,kBAAA;;gBAAA,SAAA,QAAA;AAAmB,0BAAA,UAAA0O,OAAA,MAAA;AACf,2BAAAA,MAAYnM,SAAc;AAA1B,wBAAA,QAAA;AACI,wBAAM,QAAQ,WAAA,SAAA,EACV,qJADU;AAKd,4BAAA,OAAA,KAAA,MAAM,OAAOA,OAAb,KAAoB;AACpB,iCAAA,SAAA,EAAUA,OAAV;;kBACH;AAKM,kBAAAmM,MAAA,UAAA,eAAP,WAAA;AACI,wBAAMnM,UAAS,KAAK;AACpB,wBAAI,CAAC,OAAA,UAAUA,OAAV,GAAmB;AAEpB,2BAAK,QAAL;oBACH,OAAM;AAEH,2BAAK,WAAL;AACA,2BAAK,gBAAL;oBACH;kBACJ;AACD,kBAAAmM,MAAA,UAAA,kBAAA,WAAA;AACI,wBAAI,OAAA,UAAU,KAAK,MAAf,GAAwB;AACxB,2BAAK,OAAL;oBACH,OAAM;AACH,2BAAK,SAAL;oBACH;kBACJ;AAKO,kBAAAA,MAAA,UAAA,UAAR,WAAA;AACI,wBAAMnM,UAAS,KAAK;AACpB,wBAAM,cAA4BA,QAAO,UAAU,0BAAjB;AAClC,qBAAA,GAAA,SAAA,SAAA,GAAA,WAAW,EAAA,KAAX,aAAoB,SAAA,OAAK;;AACrB,0BAAM,WAAW,UAAK,QAAL,UAAK,SAAA,SAAL,MAAO,YAAP;AACjB,0BAAI,aAAa,KAAK;AAClB,4BAAM,OAAO,OAAA,SAAA,EAAW,KAAX;AACb,4BAAM,WAAW,KAAK,QAAL;AACjB,4BAAM,SAAQuC,MAAA,SAAS,SAAT,OAAmB,QAAAA,QAAA,SAAA,SAAAA,IAAE,QAAF;AACjC,iCAAS,YAAY,KAArB;AACA,wBAAAvC,QAAO,UAAU,WAAW,KAA5B;AACA,8BAAM,OAAN;sBACH;oBACJ,CAVU;AAWX,yBAAK,gBAAL;kBACH;AAKO,kBAAAmM,MAAA,UAAA,aAAR,WAAA;AACI,wBAAMnM,UAAS,KAAK;AACpB,wBAAM,gBAA8BA,QAAO,UAAU,0BAAjB;AAEpC,qBAAA,GAAA,SAAA,SAAA,GAAA,aAAa,EAAA,KAAb,eAAsB,SAAA,cAAY;;AAC9B,0BAAIyB,YAAU,MAAAc,MAAA,aAAa,WAAb,OAAyB,QAAAA,QAAA,SAAA,SAAAA,IAAE,WAAF,OAAY,QAAA,OAAA,SAAA,SAAA,GAAI,MAAM,IAAV;AACnD,0BAAM,KAAK,WAAA,SAAA,EAAE,SAAF;AACX,yBAAG,OAAOd,QAAV;AACA,yBAAG,YAAY,YAAf;AAEA,uBAAA,KAAA,GAAG,WAAH,OAAe,QAAA,OAAA,SAAA,SAAA,GAAE,IAAI,CAAN,EAAS,OAAT;AACf,sBAAAzB,QAAO,UAAU,WAAW,GAAG,QAAH,CAA5B;AACA,mCAAa,OAAb;oBACH,CATY;kBAUhB;AACL,yBAAAmM;gBAAC,EAvEkB,UAAA,SAAA,CAAnB;;AAyEA,cAAA1O,SAAA,SAAA,IAAe;;;;;ACjFf,cAAAD,QAAA,UAAiB,oBAAQ,GAAoC;;;;;ACA7D,kBAAA,SAAa,oBAAQ,GAAyB;AAE9C,cAAAA,QAAA,UAAA;;;;;ACFA,kBAAA,QAAY,oBAAQ,GAAwB;AAE5C,kBAAA,iBAAA,MAAA;AAEA,cAAAA,QAAA,UAAA,SAAAiD,KAAA;AACA,oBAAAqG,OAAArG,IAAA;AACA,uBAAAA,QAAA,kBAAAA,eAAA,SAAAqG,SAAA,eAAA,QAAA,QAAAA;cACA;;;;;ACPA,kCAAQ,GAAiC;AACzC,kBAAA,eAAmB,oBAAQ,EAAkC;AAE7D,cAAAtJ,QAAA,UAAA,aAAA,OAAA,EAAA;;;;;;ACFA,kBAAAmC,KAAQ,oBAAQ,CAAqB;AACrC,kBAAA,SAAa,oBAAQ,EAA8B,EAAA;AACnD,kBAAA,sBAA0B,oBAAQ,EAAqC;AACvE,kBAAA,0BAA8B,oBAAQ,EAA0C;AAEhF,kBAAA,gBAAA,oBAAA,OAAA;AACA,kBAAA,iBAAA,wBAAA,OAAA;AAIA,cAAAA,GAAA,EAAG,QAAA,SAAA,OAAA,MAAA,QAAA,CAAA,iBAAA,CAAA,eAAA,GAA0E;gBAC7E,OAAA,SAAA,MAAA,YAAA;AACA,yBAAA,OAAA,MAAA,YAAA,UAAA,SAAA,IAAA,UAAA,CAAA,IAAA,MAAA;gBACA;cACA,CAAC;;;;;;;;;;;;;ACdD,kBAAA,aAAA,QAAA,gBAAA,oBAAA,CAAA,CAAA;AACA,kBAAA,SAAA,oBAAA,EAAA;AACA,kBAAA,SAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AACA,kBAAA,SAAA,oBAAA,EAAA;AACA,kBAAA,UAAA,oBAAA,CAAA;AAMA,uBAAS,UAAUK,SAAc;AAK7B,yBAAS,UAAU3B,IAAQ;;AAEvB,sBAAI,OAAA,UAAU2B,OAAV,GAAmB;AACnB,oBAAA3B,GAAE,eAAF;AACA,wBAAMyE,aAAY9C,QAAO;AACzB,wBAAM,iBAAiB8C,WAAU,0BAAV,EAAsC,CAAtC;AACvB,wBAAM,OAAGP,MAAG,eAAe,WAAf,OAA2B,QAAAA,QAAA,SAAA,SAAAA,IAAE,IAAI,CAAN;AACvC,wBAAM,iBAAgB,KAAA,OAAO,aAAP,OAAqB,QAAA,OAAA,SAAA,SAAA,GAAE;AAC7C,wBAAMQ,SAAQD,WAAU,SAAV;AAEd,wBAAI,EAACC,WAAK,QAALA,WAAK,SAAA,SAALA,OAAO,YAAW;AACnB,0BAAM,kBAAkBA,WAAK,QAALA,WAAK,SAAA,SAALA,OAAO,wBAAwB;AACvD,0BAAM,mBAAiBA,WAAK,QAALA,WAAK,SAAA,SAALA,OAAO;AAC9B,0BAAM,iBAAeA,WAAK,QAALA,WAAK,SAAA,SAALA,OAAO;AAC5B,0BAAM,WAAWA,WAAK,QAALA,WAAK,SAAA,SAALA,OAAO;AACxB,0BAAM,SAASA,WAAK,QAALA,WAAK,SAAA,SAALA,OAAO;AACtB,0BAAI,mBAAyB;AAC7B,0BAAI,iBAAuB;AAC3B,0BAAI,YAAuB,CAAA;AAE3B,0CAAe,QAAf,oBAAe,SAAA,UAAf,GAAA,SAAA,SAAA,GAAA,eAAe,EAAA,KAAf,iBAAyB,SAACrE,IAAG,GAAC;AAC1B,4BAAIA,GAAE,SAAS,gBAAX;AAA4B,6CAAiB;AACjD,4BAAIA,GAAE,SAAS,cAAX;AAA0B,2CAAe;sBAChD,CAHc;AAKf,0BAAI,iBAAe,mBAAiB,GAAG;AACnC,4CAAe,QAAf,oBAAe,SAAA,UAAf,GAAA,SAAA,SAAA,GAAA,eAAe,EAAA,KAAf,iBAAyB,SAACA,IAAG,GAAC;AAC1B,8BAAI,KAAK;AAAgB;AACzB,8BAAI,KAAK;AAAc;AACvB,oCAAQ,KAAKA,EAAb;wBACH,CAJc;AAKf,yBAAA,GAAA,SAAA,SAAA,GAAA,SAAO,EAAA,KAAP,WAAgB,SAAAA,IAAC;AACb,0BAAAA,GAAE,OAAF;wBACH,CAFM;sBAGV;AAED,6BAAA,aAAa,kBAAgB,QAA7B;AACA,6BAAA,aAAa,gBAAc,QAAQ,KAAnC;AACA,sBAAAsB,QAAO,UAAU,WAAW,gBAAc,CAA1C;oBACH;AAGD,wBAAI,eAAe,KAAf,MAA0B,IAAI;AAC9B,0BAAM,KAAK,WAAA,SAAA,EAAE,QAAA,OAAF;AACX,yBAAG,YAAY,cAAf;AACA,sBAAA8C,WAAU,WAAW,GAAG,QAAH,CAArB;AACA,qCAAe,OAAf;AACA;oBACH;AAED,wBAAM,MAAMA,WAAU,aAAV;AACZ,wBAAM,iBAAiB,OAAA,kBAAkB,QAAG,QAAH,QAAG,SAAA,SAAH,IAAK,QAAL,GAAwB,eAAe,GAAzD;AACvB,wBAAM,OAAO,OAAA,SAAA,EAAW,WAAA,SAAA,EAAE,cAAF,CAAX;AACb,wBAAM,kBAAkB,KAAK,kBAAL;AACxB,wBAAM,aAAa,gBAAgB,OAAhB,EAAyB,QAAzB;AACnB,wBAAM,WAAW,KAAK,QAAL;AACjB,wBAAM,iBAAiB,gBAAgB,QAAhB,EAA0B;AAEjD,yBAAI,QAAG,QAAH,QAAG,SAAA,SAAH,IAAK,KAAL,OAAgB,IAAI;AACpB,8BAAG,QAAH,QAAG,SAAA,SAAH,IAAK,OAAO,WAAA,SAAA,EAAE,MAAF,CAAZ;oBACH;AACD,6BAAS,YAAY,cAArB;AAEA,wBAAI,CAAC,mBAAkB,mBAAc,QAAd,mBAAc,SAAA,SAAd,eAAgB,iBAAgB,IAAI;AAEvD,2BAAI,mBAAc,QAAd,mBAAc,SAAA,SAAd,eAAgB,cAAa,MAAM;AACnC,4BAAM,MAAM,WAAA,SAAA,EAAE,MAAF;AACZ,4BAAI,YAAY,eAAhB;sBACH;AACD,sBAAAA,WAAU,WAAW,YAAY,CAAjC;oBACH,OAAM;AACH,sBAAAA,WAAU,WAAW,UAArB;oBACH;kBACJ;gBACJ;AAKD,yBAAS,QAAQzE,IAAQ;;AACrB,sBAAI,OAAA,UAAU2B,OAAV,GAAmB;AACnB,wBAAM8C,aAAY9C,QAAO;AACzB,wBAAM,iBAAiB8C,WAAU,0BAAV,EAAsC,CAAtC;AACvB,wBAAM,OAAGP,MAAG,eAAe,WAAf,OAA2B,QAAAA,QAAA,SAAA,SAAAA,IAAE,QAAF;AACvC,wBAAM,KAAK,WAAA,SAAA,EAAE,SAAF;AACX,wBAAM,MAAI,GAAG,QAAH;AACV,wBAAM,iBAAgB,KAAA,OAAO,aAAP,OAAqB,QAAA,OAAA,SAAA,SAAA,GAAE;AAC7C,wBAAM,MAAMO,WAAU,aAAV;AACZ,wBAAM,WAAW,cAAc;AAG/B,wBAAI,eAAe,KAAf,MAA0B,IAAI;AAC9B,sBAAAzE,GAAE,eAAF;AACA,0BAAM,QAAQ,WAAA,SAAA,EAAE,QAAA,OAAF;AACd,4BAAM,YAAY,cAAlB;AACA,qCAAe,OAAf;AACA,sBAAAyE,WAAU,WAAW,MAAM,QAAN,GAAiB,CAAtC;AACA;oBACH;AAGD,yBACI,aAAQ,QAAR,aAAQ,SAAA,SAAR,SAAU,cAAa,UACvB,SAAS,WAAW,CAApB,EAAuB,aAAa,WACpC,QAAQ,GACV;AAAA,0BAAA;AACE,sBAAAzE,GAAE,eAAF;AACA,8BAAG,QAAH,QAAG,SAAA,UAAH,GAAA,SAAA,SAAA,GAAA,WAAA,IAAK,UAAL,EAAA,KAAA,UAAwB,SAACK,IAAGkB,QAAK;AAC7B,4BAAIA,WAAU;AAAG;AACjB,4BAAE,YAAYlB,GAAE,UAAU,IAAZ,CAAd;sBACH,CAHD;AAIA,yBAAG,YAAY,cAAf;AAEA,qCAAe,OAAf;oBACH;kBACJ;gBACJ;AAKD,yBAAS,WAAQ;AACb,sBAAMoE,aAAY9C,QAAO;AACzB,sBAAM,iBAAiB8C,WAAU,0BAAV,EAAsC,CAAtC;AACvB,sBAAI,kBAAkB,OAAA,OAAO,cAAP,GAAwB;AAC1C,wBAAI,eAAe,KAAf,MAA0B,IAAI;AAC9B,iCAAA,SAAA,EAAE,QAAA,OAAF,EAAW,YAAY,cAAvB;AACA,qCAAe,OAAf;oBACH;kBACJ;gBACJ;AAMD,yBAAS,WAAWzE,IAAS;AACzB,sBAAIA,MAAKA,GAAE,kBAAkB,kBAAkB;AAC3C,wBAAIA,GAAE,OAAO,SAAS,YAAY;AAC9B,0BAAIA,GAAE,OAAO,SAAS;AAClB,wBAAAA,GAAE,OAAO,aAAa,WAAW,MAAjC;sBACH,OAAM;AACH,wBAAAA,GAAE,OAAO,gBAAgB,SAAzB;sBACH;oBACJ;kBACJ;gBACJ;AAED,gBAAA2B,QAAO,IAAI,WAAW,gBAAgB,KAAK,SAA3C;AACA,gBAAAA,QAAO,IAAI,WAAW,eAAe,KAAK,QAA1C;AACA,gBAAAA,QAAO,IAAI,WAAW,iBAAiB,KAAK,OAA5C;AACA,gBAAAA,QAAO,IAAI,WAAW,YAAY,KAAK,UAAvC;cACH;AAED,cAAAvC,SAAA,SAAA,IAAe;;;;;;;;;;;;;ACpKf,kBAAA,aAAA,QAAA,gBAAA,oBAAA,CAAA,CAAA;AACA,kBAAA,SAAA,oBAAA,CAAA;AACA,kBAAA,UAAA,oBAAA,CAAA;AACA,kBAAA,SAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AACA,kBAAM,gBAAgB;gBAClB,QAAQ;gBACR,gBAAgB;gBAChB,qBAAqB;cAHH;AAMtB,uBAAA,UAAyBuC,SAAc;AACnC,oBAAM,kBAAkBA,QAAO;AAC/B,oBAAM,mBAAmB,WAAA,SAAA,EAAE,eAAF;AACzB,oBAAM,eAAeA,QAAO;AAE5B,oBAAMyE,UAASzE,QAAO;AACtB,oBAAM,SAASyE,QAAO;AACtB,oBAAM,UAAUzE,QAAO;AAEvB,oBAAM,eAA2B,WAAA,SAAA,EAAE,aAAF;AACjC,oBAAM,qBAAiC,WAAA,SAAA,EAAE,aAAF;AACvC,oBAAI;AACJ,oBAAI;AACJ,oBAAI,eAAkC;AAEtC,oBAAI,gBAAgB,MAAM;AAEtB,8BAAY,iBAAiB,SAAjB;AAGZ,mCAAiB,OAAO,YAAxB,EAAsC,OAAO,kBAA7C;AAGA,+BACK,IAAI,oBAAoB,cAAc,cAD3C,EAEK,IAAI,UAAU,cAAc,MAFjC,EAGK,IAAI,iBAAiB,cAAc,mBAHxC;AAIA,qCACK,IAAI,UAAU,cAAc,MADjC,EAEK,IAAI,cAAc,MAFvB,EAGK,IAAI,UAAa,SAAM,IAH5B;gBAIH,OAAM;AAEH,mCAAiB,OAAO,YAAxB;AAEA,iCAAe,WAAA,SAAA,EAAE,YAAF,EAAgB,SAAhB;AACf,6BAAA,SAAA,EAAE,YAAF,EAAgB,OAAO,kBAAvB;AAEA,8BAAY,mBAAmB,SAAnB;gBACf;AAGD,4BAAY,WAAA,SAAA,EAAE,aAAF;AACZ,0BAAU,KAAK,mBAAmB,MAAlC,EAA0C,IAAI,SAAS,MAAvD,EAA+D,IAAI,UAAU,MAA7E;AAGA,oBAAI;AACJ,oBAAMoM,eAAcpM,QAAO,OAAO;AAClC,oBAAIoM,iBAAgB,OAAA,SAAA,EAAO,aAAa;AACpC,iCAAe,WAAA,SAAA,EAAE,UAAQA,eAAW,QAArB;gBAClB,OAAM;AACH,iCAAe,WAAA,SAAA,EAAE,UAAQ,QAAQ,EAAEA,YAAV,IAAsB,QAAhC;gBAClB;AACD,6BAAa,SAAS,aAAtB;AAGA,oBAAI,aAAa,UAAU,QAAQ;AAC/B,4BAAU,OAAO,SAAjB;AAEA,+BAAa,KAAb;gBACH,OAAM;AACH,4BAAU,OAAO,WAAA,SAAA,EAAE,QAAA,OAAF,CAAjB;gBACH;AAGD,oBAAI,gBAAgB,aAAa,QAAQ;AACrC,4BAAU,OAAO,YAAjB;AAEA,+BAAa,KAAb;gBACH;AAGD,mCAAmB,OAAO,SAA1B;AAGA,mCAAmB,OAAO,YAA1B;AAGA,6BAAa,SAAS,aAAtB,EAAqC,IAAI,WAAWpM,QAAO,OAAO,IAAI,SAAlB,CAApD;AACA,mCAAmB,SAAS,oBAA5B;AACA,mCAAmB,IAAI,WAAWA,QAAO,OAAO,IAAd,CAAlC;AACA,0BAAU,SAAS,UAAnB;AAGA,oBAAM,gBAAgB,OAAA,UAAU,cAAV;AACtB,6BAAa,KAAK,MAAM,aAAxB;AACA,oBAAM,aAAa,OAAA,UAAU,WAAV;AACnB,0BAAU,KAAK,MAAM,UAArB;AAGA,oBAAM,yBAAyB,mBAAmB,sBAAnB,EAA2C;AAC1E,oBAAM,uBAAuB,UAAU,sBAAV,EAAkC;AAC/D,oBAAI,2BAA2B,sBAAsB;AACjD,4BAAU,IAAI,cAAc,yBAAyB,IAArD;gBACH;AAGD,gBAAAA,QAAO,eAAe;AACtB,gBAAAA,QAAO,qBAAqB;AAC5B,gBAAAA,QAAO,YAAY;AACnB,gBAAAA,QAAO,gBAAgB;AACvB,gBAAAA,QAAO,aAAa;cACvB;AAtGD,cAAAvC,SAAA,SAAA,IAAA;AA4GA,uBAAgB,kBAAkBuC,SAAc;AAC5C,oBAAMtC,QAAO;AACb,oBAAM,SAAS;AACP,oBAAA,eAAkCsC,QAAtB,cAAE,kBAAoBA,QAAL;AAErC,oBAAM,MAAM;kBACR,KAAK,WAAA,SAAA,EAAE,aAAF;kBACL,MAAM,WAAA,SAAA,EAAE,aAAF;gBAFE;AAKZ,oBAAI,mBAAmB,MAAM;AACzB,wBAAM,IAAI,MAAM,kJAAV;gBACT,OAAM;AACH,sBAAI,MAAM,WAAA,SAAA,EAAE,eAAF;AACV,sBAAI,CAAC,IAAI,IAAI,MAAM,QAAQ;AACvB,0BAAM,IAAI,MAAM,2DAAY,eAAtB;kBACT;AACD,sBAAI,OAAO,KAAK,IAAI,IAAI,KAAKtC,KAAb,CAAZ,GAAiC;AACjC,0BAAM,IAAI,MAAM,4IAAV;kBACT;gBACJ;AACD,oBAAI,cAAc;AACd,sBAAI,OAAO,WAAA,SAAA,EAAE,YAAF;AACX,sBAAI,CAAC,IAAI,KAAK,MAAM,QAAQ;AACxB,0BAAM,IAAI,MAAM,2DAAY,YAAtB;kBACT;AACD,sBAAI,OAAO,KAAK,IAAI,KAAK,KAAKA,KAAd,CAAZ,GAAkC;AAClC,0BAAM,IAAI,MAAM,4IAAV;kBACT;gBACJ;AAGD,oBAAI,IAAI,KAAKA,OAAMsC,QAAO,EAA1B;AACA,oBAAI,KAAK,KAAKtC,OAAMsC,QAAO,EAA3B;AAGA,gBAAAA,QAAO,cAAc,WAAA;AACjB,sBAAI,IAAI,WAAWtC,KAAnB;AACA,sBAAI,KAAK,WAAWA,KAApB;gBACH,CAHD;cAIH;AAxCD,cAAAD,SAAA,oBAAA;;;;;;;;;;;;ACtHA,kBAAA,aAAA,QAAA,gBAAA,oBAAA,CAAA,CAAA;AACA,kBAAA,UAAA,oBAAA,CAAA;AAOA,uBAAS,cAAcuC,SAAgB,SAAiB;AACpD,oBAAM,YAAYA,QAAO;AACzB,oBAAM,YAAY,UAAU,SAAV;AAClB,oBAAI,CAAC,aAAa,CAAC,UAAU,QAAQ;AAEjC,4BAAU,OAAO,WAAA,SAAA,EAAE,QAAA,OAAF,CAAjB;AACA,gCAAcA,OAAD;AACb;gBACH;AAED,oBAAM,QAAQ,UAAU,KAAV;AAEd,oBAAI,SAAS;AAET,sBAAMV,QAAO,MAAM,KAAN,EAAa,YAAb;AACb,sBAAM,WAAW,MAAM,YAAN;AACjB,sBAAKA,UAAS,UAAUA,UAAS,WAAY,aAAa,KAAK;AAE3D,8BAAU,OAAO,WAAA,SAAA,EAAE,QAAA,OAAF,CAAjB;AACA,kCAAcU,OAAD;AACb;kBACH;gBACJ;AAED,gBAAAA,QAAO,UAAU,kBAAkB,OAAO,OAAO,IAAjD;AACA,oBAAIA,QAAO,OAAO,OAAO;AACrB,kBAAAA,QAAO,UAAU,iBAAjB;gBACH,OAAM;AAEH,kBAAAA,QAAO,UAAU,0BAAjB;gBACH;cACJ;AAED,cAAAvC,SAAA,SAAA,IAAe;;;;;;;;;;;;;ACzCf,kBAAA,aAAA,QAAA,gBAAA,oBAAA,CAAA,CAAA;AAEA,uBAAS,UAAUuC,SAAc;AAE7B,4BAAYA,OAAD;AAGX,kCAAkBA,OAAD;AAGjB,2BAAWA,OAAD;cACb;AAMD,uBAAS,YAAYA,SAAc;AAC/B,gBAAAA,QAAO,IAAI,WAAW,aAAa,KAAK,WAAA;AAC5B,sBAAA,WAAaA,QAAO,OAAZ;AAChB,sBAAI,UAAU;AACV,wBAAMV,QAAOU,QAAO,IAAI,KAAX,KAAqB;AAElC,oBAAAA,QAAO,UAAU;AACjB,6BAASV,KAAD;kBACX;AAED,kBAAAU,QAAO,IAAI,kBAAX;gBACH,CAVD;cAWH;AAMD,uBAAS,kBAAkBA,SAAc;AAErC,gBAAAA,QAAO,UAAU;AAEjB,yBAAS,SAAS3B,IAAQ;AACtB,sBAAM,SAASA,GAAE;AACjB,sBAAM,UAAU,WAAA,SAAA,EAAE,MAAF;AAChB,sBAAM,YAAY2B,QAAO;AACzB,sBAAM,eAAeA,QAAO;AAG5B,sBAAM,UAAU,UAAU,UAAU,OAApB;AAGhB,sBAAM,YAAY,aAAa,UAAU,OAAvB;AAClB,sBAAM,SAAS,aAAa,MAAM,CAAnB,KAAyB3B,GAAE,SAAS,OAAO;AAE1D,sBAAI,CAAC,SAAS;AAEV,wBAAK,aAAa,CAAC,UAAW,CAAC2B,QAAO,SAAS;AAC3C;oBACH;AACD,iCAAaA,OAAD;AACZ,oBAAAA,QAAO,UAAU;kBACpB,OAAM;AACH,wBAAI,CAACA,QAAO,SAAS;AACjB,oCAAcA,OAAD;oBAChB;AAED,oBAAAA,QAAO,UAAU;kBACpB;gBACJ;AAED,oBAAI,SAAS,kBAAkBA,QAAO,UAAU,MAAM,CAAvB,KAA6BA,QAAO,OAAO,OAAO;AAC7E,gCAAcA,OAAD;AACb,kBAAAA,QAAO,UAAU;gBACpB;AAED,2BAAA,SAAA,EAAE,QAAF,EAAY,GAAG,SAAS,QAAxB;AAEA,gBAAAA,QAAO,cAAc,WAAA;AACjB,6BAAA,SAAA,EAAE,QAAF,EAAY,IAAI,SAAS,QAAzB;gBACH,CAFD;cAGH;AAMD,uBAAS,WAAWA,SAAc;AAE9B,gBAAAA,QAAO,UACF,GAAG,oBAAoB,WAAA;AACpB,kBAAAA,QAAO,cAAc;AACrB,kBAAAA,QAAO,IAAI,kBAAX;gBACH,CAJL,EAKK,GAAG,kBAAkB,WAAA;AAClB,kBAAAA,QAAO,cAAc;AACrB,kBAAAA,QAAO,IAAI,kBAAX;gBACH,CARL;cASH;AAMD,uBAAS,aAAaA,SAAc;AAAA,oBAAA;AAChC,oBAAMyE,UAASzE,QAAO;AACtB,oBAAM,SAASyE,QAAO;AACtB,oBAAM,cAAczE,QAAO,IAAI,KAAX,KAAqB;AACzC,iBAAA,GAAA,SAAA,SAAA,GAAA,WAAAA,QAAO,IAAI,WAAW,YAAtB,EAAA,KAAA,UAA2C,SAAAN,KAAE;AAAI,yBAAAA,IAAA;gBAAI,CAArD;AACA,uBAAO,WAAD;cACT;AAMD,uBAAS,cAAcM,SAAc;AACjC,oBAAMyE,UAASzE,QAAO;AACtB,oBAAM,UAAUyE,QAAO;AACvB,oBAAM,cAAczE,QAAO,IAAI,KAAX,KAAqB;AACzC,wBAAQ,WAAD;cACV;AAED,cAAAvC,SAAA,SAAA,IAAe;;;;;;;;;;;ACpHf,uBAAS,YAAYuC,SAAc;AACzB,oBAAAuC,MAAsBvC,QAAO,QAA3B,OAAIuC,IAAA,MAAE,YAASA,IAAA;AAEvB,oBAAIvC,QAAO,WAAW,MAAM;AACxB,sBAAI;AACA,oBAAAA,QAAO,QAAQ,KAAK;sBAChB,IAAI;sBACJ,KAAK;sBACL,WAAW;sBACX,WAAW;oBAJK,CAApB;kBAMH,SAAQjB,QAAO;AACZ,0BAAM,IAAI,MAAM,aAAaA,MAAvB;kBACT;AACD;gBACH;AAGD,gBAAAiB,QAAO,UAAU;kBACb,GAAA,SAAA7B,GAAE,KAAW;AACT,wBAAM,SAAS,IAAI,MAAM,GAAV;AACf,2BAAO,OAAO,OAAO,SAAS,CAAjB;kBAChB;gBAJY;cAMpB;AAED,cAAAV,SAAA,SAAA,IAAe;;;;;;;;;;;;;;AC9Bf,kBAAA,aAAA,QAAA,gBAAA,oBAAA,CAAA,CAAA;AAEA,kCAAA,GAAA;AAEA,kBAAM,qBAAqB;AAC3B,kBAAM,yBAAyB;AAC/B,kBAAM,wBAAwB;AAMjB,cAAAA,SAAA,gBAAgB,SAACuC,SAAc;AACxC,oBAAM,gBAAgB,WAAA,SAAA,EAAEA,QAAO,eAAT;AACtB,oBAAM,qBAAqBA,QAAO;AAClC,oBAAM,eAAeA,QAAO;AAC5B,oBAAM,aAAY,GAAA,MAAA,SAAA,GAAA,YAAY,EAAA,KAAZ,cAAkB,OAAK,kBAAX;AAC9B,oBAAMyE,UAASzE,QAAO;AAEtB,0BAAU,YAAY,kBAAtB;AACA,0BAAU,SAAS,sBAAnB;AACA,8BAAc,SAAS,qBAAvB;AACA,8BAAc,IAAI,WAAWyE,QAAO,gBAApC;AACA,oBAAM,MAAM,aAAa,sBAAb;AACZ,mCAAmB,IAAI,UAAU,iBAAe,IAAI,SAAM,KAA1D;cACH;AAMY,cAAAhH,SAAA,kBAAkB,SAACuC,SAAc;AAC1C,oBAAM,gBAAgB,WAAA,SAAA,EAAEA,QAAO,eAAT;AACtB,oBAAM,qBAAqBA,QAAO;AAClC,oBAAM,eAAeA,QAAO;AAC5B,oBAAM,aAAY,GAAA,MAAA,SAAA,GAAA,YAAY,EAAA,KAAZ,cAAkB,OAAK,sBAAX;AAC9B,oBAAMyE,UAASzE,QAAO;AAEtB,0BAAU,YAAY,sBAAtB;AACA,0BAAU,SAAS,kBAAnB;AACA,8BAAc,YAAY,qBAA1B;AACA,8BAAc,IAAI,WAAW,MAA7B;AACA,mCAAmB,IAAI,UAAUyE,QAAO,SAAS,IAAjD;cACH;AAMD,kBAAM,iBAAiB,SAAjB4H,gBAAkBrM,SAAc;AAElC,oBAAIA,QAAO;AAAc;AACzB,oBAAI,CAACA,QAAO,OAAO;AAAgB;AACnC,oBAAM,eAAeA,QAAO;AAC5B,oBAAM,QAAQ,WAAA,SAAA,EACV,6EACgB,qBAAkB,wBAFxB;AAKd,sBAAM,GAAG,SAAS,SAAU3B,IAAa;AAAA,sBAAA;AACrC,sBAAM,aAAY,GAAA,MAAA,SAAA,GAAA,WAAA,WAAA,SAAA,EAAEA,GAAE,aAAJ,CAAA,EAAA,KAAA,UAAwB,GAAxB;AAClB,sBAAI,UAAU,SAAS,kBAAnB,GAAwC;AACxC,0BAAM,KAAK,cAAc,0BAAzB;AACA,oBAAAZ,SAAA,cAAcuC,OAAd;kBACH,OAAM;AACH,0BAAM,KAAK,cAAc,cAAzB;AACA,oBAAAvC,SAAA,gBAAgBuC,OAAhB;kBACH;gBACJ,CATD;AAWA,6BAAa,OAAO,KAApB;cACH;AAED,cAAAvC,SAAA,SAAA,IAAe;;;;;AC/Ef,kBAAA,MAAU,oBAAQ,EAA8E;AAChG,kBAAAgE,WAA0B,oBAAQ,GAAmK;AAErM,cAAAA,WAAAA,SAAA,aAAAA,SAAA,UAAAA;AAEA,kBAAA,OAAAA,aAAA,UAAA;AACA,gBAAAA,WAAA,CAAA,CAA0BjE,QAAA,GAASiE,UAAA,EAAA,CAAA;cACnC;AAEA,kBAAA,UAAA,CAAA;AAEA,sBAAA,SAAA;AACA,sBAAA,YAAA;AAEA,kBAAA,SAAA,IAAAA,UAAA,OAAA;AAIA,cAAAjE,QAAA,UAAAiE,SAAA,UAAA,CAAA;;;;;ACjBA,kBAAA,8BAAkC,oBAAQ,EAAsD;AAChG,cAAAhE,WAAA,4BAAA,KAAA;AAEA,cAAAA,SAAA,KAAA,CAAcD,QAAA,GAAS,kIAA+H,EAAA,CAAA;AAEtJ,cAAAA,QAAA,UAAAC;;;;;;;;;;;;ACMA,kBAAM,eAAe,SAAf6O,cAAgBtM,SAAgBkB,KAAU;AAAA,oBAAA;AAC5C,oBAAM,YAAYlB,QAAO,WACnBA,QAAO,aACP,GAAA,MAAA,SAAA,GAAA,WAAAA,QAAO,kBAAP,EAAA,KAAA,UAA+B,qBAA/B;AACN,oBAAM,eAAc,GAAA,MAAA,SAAA,GAAA,SAAS,EAAA,KAAT,WAAe,UAAQkB,MAAE,IAAhB;AAC7B,oBAAM,YAAY,YAAY,cAAZ,EAA4B;AAC9C,0BAAU,UAAU,SAApB;cACH;AAED,cAAAzD,SAAA,SAAA,IAAe;;;;;;;;;;;;AChBf,kBAAA,UAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AAEA,kBAAM,OAAO;gBACT,MAAM;gBACN,OAAO;gBACP,SAAS;gBACT,SAAS;gBACT,eAAe;cALN;AAWb,kBAAA;;gBAAA,WAAA;AAAA,2BAAA8O,UAAA;AAEY,yBAAA,OAAa;AAGb,yBAAA,aAAa,QAAA,SAAA,EAAM;kBAgB9B;AAbG,kBAAAA,QAAA,UAAA,MAAA,SAAI,UAAkB;AAClB,wBAAI,YAAY,KAAK,KAAK,QAAV,GAAqB;AACjC,6BAAO,KAAK,aAAa,KAAK,KAAK,QAAV;oBAC5B;AACD,2BAAO,KAAK;kBACf;AAGD,kBAAAA,QAAA,UAAA,OAAA,SAAKvM,SAAc;AACf,wBAAI,KAAK,cAAc,QAAA,SAAA,EAAM,QAAQ;AACjC,2BAAK,aAAaA,QAAO,OAAO;oBACnC;kBACJ;AACL,yBAAAuM;gBAAC,EArBD;;;;;;;;;;;;;;;;ACZA,kBAAA,aAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AACA,kBAAA,SAAA,oBAAA,CAAA;AACA,kBAAA,UAAA,oBAAA,CAAA;AAOA,uBAAS,gBAAgB,WAA6B,KAAS;AAE3D,wBAAO,GAAAzM,SAAA,SAAA,GAAA,SAAS,EAAA,KAAT,WAAiB,SAACyC,KAA+B;sBAA7B,OAAIA,IAAA,MAAE,SAAMA,IAAA,QAAE,gBAAaA,IAAA;AAClD,yBACI,QAAQ,gBACP,QAAQ,iBAAiB,iBAAiB,qBAAqB,UAAU;gBAEjF,CALe;cAMnB;AAKD,kBAAA;;gBAAA,SAAA,QAAA;AAAoC,0BAAA,UAAAiK,SAAA,MAAA;AAWhC,2BAAAA,QAAmBxM,SAAc;AAAjC,wBAAA,QACI,OAAA,KAAA,MAAM,SAAC,WAAW,UAAQ;;AAEtB,kCAAY,gBAAgB,WAAW,SAAS,MAArB;AAG3B,uBAAAuC,MAAA,MAAK,MAAK,KAAI,MAAAA,KAAI,SAAlB;AAGA,0BAAI,CAACvC,QAAO,kBAAkB;AAE1B,4BAAI,CAACA,QAAO,aAAa;AACrB,iCAAO,MAAK,UAAL;wBACV;sBACJ,OAEI;AACD,8BAAK,UAAL;sBACH;oBACJ,CAlBD,KAkBE;AAnBa,0BAAA,SAAAA;AAPX,0BAAA,OAAyB,CAAA;AAKzB,0BAAA,YAAsB,QAAA;;kBAsB7B;AAKO,kBAAAwM,QAAA,UAAA,OAAR,WAAA;AAEI,wBAAI,KAAK,KAAK,QAAQ;AAElB,2BAAK,OAAO,QAAQ,KAAK,KAAK,IAA9B;AAGA,2BAAK,KAAK,SAAS;AAEnB,2BAAK,KAAL;oBACH;kBACJ;AAKM,kBAAAA,QAAA,UAAA,OAAP,WAAA;AAAA,wBAAA;AAEI,qBAAA,GAAA,SAAA,SAAA,GAAA,WAAA,KAAK,OAAO,IAAI,WAAW,YAA3B,EAAA,KAAA,UAAgD,SAAA9M,KAAE;AAAI,6BAAAA,IAAA;oBAAI,CAA1D;kBACH;AAGM,kBAAA8M,QAAA,UAAA,UAAP,WAAA;AAAA,wBAAA,QAAA;AACI,2BAAA,UAAM,QAAO,KAAA,MAAC,KAAK,OAAO,UAAU,MAAM,CAA5B,CAAd;AAEA,wBAAI,UAAU,KAAK,OAAO,OAAO;AACjC,yBAAK,YAAY,OAAA,SAAS,WAAA;AACtB,4BAAK,KAAL;oBACH,GAAE,OAFc;AAIjB,wBAAI,CAAC,KAAK,OAAO,kBAAkB;AAC/B,2BAAK,OAAO,UAAU,GAAG,kBAAkB,WAAA;AACvC,8BAAK,UAAL;sBACH,CAFD;oBAGH;kBACJ;AACL,yBAAAA;gBAAC,EAxEmC,WAAA,SAAA,CAApC;;;;;;;;;;;;;AClBA,kBAAA;;gBAAA,WAAA;AAiCI,2BAAAC,UAAY/M,KAAc,SAA8B;AAAxD,wBAAA,QAAA;AAnBU,yBAAA,UAAgC;sBACtC,SAAS;sBACT,WAAW;sBACX,YAAY;sBACZ,mBAAmB;sBACnB,eAAe;sBACf,uBAAuB;oBANe;AAoBtC,yBAAK,WAAW,SAAA,WAAS;AACrB,sBAAAA,IAAG,WAAW,KAAZ;oBACL;AACD,yBAAK,WAAW,IAAI,iBAAiB,KAAK,QAA1B;AAChB,gCAAY,KAAK,UAAU;kBAC9B;AAED,mBAAA,GAAA,gBAAA,SAAA,GAAW+M,UAAA,WAAA,UAAM;yBAAjB,SAAAhN,OAAA;AACI,6BAAO,KAAK;oBACf;;;kBAFgB,CAAjB;AAQO,kBAAAgN,UAAA,UAAA,UAAP,SAAelI,OAAU;AACrB,wBAAI,EAAE,KAAK,gBAAgB,OAAO;AAC9B,2BAAK,OAAOA;AACZ,2BAAK,QAAL;oBACH;kBACJ;AAKM,kBAAAkI,UAAA,UAAA,UAAP,WAAA;AACI,wBAAI,KAAK,MAAM;AACX,2BAAK,SAAS,QAAQ,KAAK,MAAM,KAAK,OAAtC;AACA,6BAAO;oBACV;AACD,0BAAM,IAAI,MAAM,oHAAV;kBACT;AAKM,kBAAAA,UAAA,UAAA,aAAP,WAAA;AACI,wBAAIzL,QAAO,KAAK,SAAS,YAAd;AACX,oBAAAA,MAAK,UAAU,KAAK,SAASA,KAAd;AACf,yBAAK,SAAS,WAAd;kBACH;AACL,yBAAAyL;gBAAC,EA3ED;;;;;;;;;;;;;;ACLA,kBAAA,YAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AACA,kBAAA,WAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AACA,kBAAA,UAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AAMA,kBAAAC;;gBAAA,WAAA;AAUI,2BAAAA,SAAmB1M,SAAc;AAAd,yBAAA,SAAAA;AACf,yBAAK,UAAU,IAAI,UAAA,SAAA,EAAaA,OAAjB;AACf,yBAAK,SAAS,IAAI,SAAA,SAAA,EAAYA,OAAhB;AACd,yBAAK,QAAQ,IAAI,QAAA,SAAA,EAAWA,OAAf;kBAChB;AAKD,mBAAA,GAAA,gBAAA,SAAA,GAAW0M,SAAA,WAAA,QAAI;;;;yBAAf,SAAAjN,OAAA;AACI,6BAAO,KAAK,OAAO;oBACtB;;;kBAFc,CAAf;AAOO,kBAAAiN,SAAA,UAAA,UAAP,WAAA;AACI,yBAAK,QAAQ,QAAb;AACA,yBAAK,OAAO,QAAZ;AAEA,qBAAC,KAAK,OAAO,oBAAoB,KAAK,MAAM,QAAX;kBACpC;AAKM,kBAAAA,SAAA,UAAA,OAAP,SAAY,WAA2B;AACnC,wBAAI,UAAU,QAAQ;AAClB,2BAAK,QAAQ,KAAK,SAAlB;AACA,2BAAK,OAAO,KAAZ;AAEA,uBAAC,KAAK,OAAO,oBAAoB,KAAK,MAAM,KAAX;oBACpC;kBACJ;AAKM,kBAAAA,SAAA,UAAA,SAAP,WAAA;AACI,yBAAK,OAAO,OAAO,WAAnB;AACA,wBAAM,MAAM,KAAK,QAAQ,OAAb;AACZ,wBAAI,KAAK;AACL,2BAAK,OAAO,OAAZ;AAEA,0BAAI,CAAC,KAAK,OAAO,kBAAkB;AAC/B,6BAAK,MAAM,OAAX;AACA,6BAAK,OAAO,UAAU,MAAtB;sBACH;oBACJ;AACD,yBAAK,OAAO,OAAO,QAAnB;AAEA,2BAAO,KAAK,OAAO,OAAO,KAAnB;kBACV;AAKM,kBAAAA,SAAA,UAAA,UAAP,WAAA;AACI,yBAAK,OAAO,OAAO,WAAnB;AACA,wBAAM,MAAM,KAAK,QAAQ,QAAb;AACZ,wBAAI,KAAK;AACL,2BAAK,OAAO,QAAZ;AAEA,0BAAI,CAAC,KAAK,OAAO,kBAAkB;AAC/B,6BAAK,MAAM,QAAX;AACA,6BAAK,OAAO,UAAU,MAAtB;sBACH;oBACJ;AACD,yBAAK,OAAO,OAAO,QAAnB;AAEA,2BAAO,KAAK,OAAO,OAAO,KAAnB;kBACV;AACL,yBAAAA;gBAAC,EAlFD;;;;;;;;;;;;;;ACRA,kBAAA,SAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AACA,kBAAA,SAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AAGA,kBAAA;;gBAAA,WAAA;AAMI,2BAAAC,cAAmB3M,SAAc;AAAd,yBAAA,SAAAA;kBAAkB;AAKrC,kBAAA2M,cAAA,UAAA,UAAA,WAAA;AACI,wBAAI,KAAK,OAAO,kBAAkB;AAE9B,2BAAK,QAAQ,IAAI,OAAA,SAAA,EAAU,KAAK,MAAnB;oBAChB,OAAM;AAEH,2BAAK,QAAQ,IAAI,OAAA,SAAA,EAAU,KAAK,MAAnB;oBAChB;AACD,yBAAK,MAAM,QAAX;kBACH;AAKM,kBAAAA,cAAA,UAAA,OAAP,SAAY,WAA2B;AACnC,wBAAI,KAAK,OAAO,kBAAkB;AAC9B;AAAE,2BAAK,MAAoB,KAAzB;oBACL,OAAM;AACH;AAAE,2BAAK,MAAoB,QAAQ,SAAjC;oBACL;kBACJ;AAKM,kBAAAA,cAAA,UAAA,SAAP,WAAA;;AACI,4BAAApK,MAAO,KAAK,WAAK,QAAAA,QAAA,SAAA,SAAAA,IAAE,OAAF;kBACpB;AAKM,kBAAAoK,cAAA,UAAA,UAAP,WAAA;;AACI,4BAAApK,MAAO,KAAK,WAAK,QAAAA,QAAA,SAAA,SAAAA,IAAE,QAAF;kBACpB;AACL,yBAAAoK;gBAAC,EA9CD;;;;;;;;;;;;;;ACJA,kBAAA,UAAA,QAAA,gBAAA,oBAAA,EAAA,CAAA;AACA,kBAAA,YAAA,QAAA,gBAAA,oBAAA,GAAA,CAAA;AACA,kBAAA,kBAAA,oBAAA,GAAA;AAIA,kBAAA;;gBAAA,SAAA,QAAA;AAAuC,0BAAA,UAAAC,YAAA,MAAA;AACnC,2BAAAA,WAAmB5M,SAAc;AAAjC,wBAAA,QACI,OAAA,KAAA,MAAMA,QAAO,OAAO,cAApB,KAAmC;AADpB,0BAAA,SAAAA;;kBAElB;AAEM,kBAAA4M,WAAA,UAAA,UAAP,WAAA;AACI,yBAAK,aAAa,KAAK,OAAO,OAAO,cAArC;kBACH;AAKM,kBAAAA,WAAA,UAAA,UAAP,SAAerM,OAAsB;AACjC,yBAAK,KAAK,UAAA,SAAA,EAAQA,KAAR,CAAV;AACA,2BAAO;kBACV;AAKM,kBAAAqM,WAAA,UAAA,SAAP,WAAA;AACI,2BAAO,OAAA,UAAM,OAAM,KAAA,MAAC,SAAArM,OAAI;AACpB,sCAAA,OAAOA,KAAP;oBACH,CAFM;kBAGV;AAKM,kBAAAqM,WAAA,UAAA,UAAP,WAAA;AACI,2BAAO,OAAA,UAAM,QAAO,KAAA,MAAC,SAAArM,OAAI;AACrB,sCAAA,QAAQA,KAAR;oBACH,CAFM;kBAGV;AACL,yBAAAqM;gBAAC,EAlCsC,QAAA,SAAA,CAAvC;;;;;;;;;;;;;;ACFA,kBAAA;;gBAAA,WAAA;AAgBI,2BAAAC,WAAYhJ,MAAe;AAAf,wBAAAA,SAAA,QAAA;AAAA,sBAAAA,OAAA;oBAAe;AAZjB,yBAAA,OAAY,CAAA;AAKZ,yBAAA,MAAc;AAKd,yBAAA,QAAiB;AAGvB,oBAAAA,OAAM,KAAK,IAAIA,IAAT;AACN,oBAAAA,SAAQ,KAAK,MAAMA;kBACtB;AAKM,kBAAAgJ,WAAA,UAAA,WAAP,SAAgB,SAAe;AAC3B,8BAAU,KAAK,IAAI,OAAT;AACV,wBAAI,CAAC,KAAK,SAAS,CAAC,MAAM,OAAD,GAAW;AAChC,2BAAK,MAAM;AACX,2BAAK,QAAQ;oBAChB;kBACJ;AAKD,mBAAA,GAAA,gBAAA,SAAA,GAAWA,WAAA,WAAA,QAAI;;;;yBAAf,SAAApN,OAAA;AACI,6BAAO,KAAK,KAAK;oBACpB;;;kBAFc,CAAf;AAQO,kBAAAoN,WAAA,UAAA,UAAP,SAAetM,OAAO;AAClB,yBAAK,KAAK,QAAQA,KAAlB;AACA,wBAAI,KAAK,OAAO,KAAK,OAAO,KAAK,KAAK;AAClC,2BAAK,KAAK,SAAS,KAAK;oBAC3B;AACD,2BAAO;kBACV;AAKM,kBAAAsM,WAAA,UAAA,WAAP,WAAA;AACI,2BAAO,KAAK,KAAK,MAAV;kBACV;AAKM,kBAAAA,WAAA,UAAA,QAAP,WAAA;AACI,yBAAK,KAAK,SAAS;AACnB,2BAAO;kBACV;AACL,yBAAAA;gBAAC,EAjED;;AAAa,cAAApP,SAAA,YAAA;;;;;;;;;;;;;;ACHb,kBAAA,SAAA,oBAAA,CAAA;AAKA,uBAAgB,YAAY8C,OAAY;AACpC,wBAAQA,OAAR;kBACI,KAAK;AACD,2BAAO;kBACX,KAAK;AACD,2BAAO;kBACX;AACI,2BAAO;gBANf;cAQH;AATD,cAAA9C,SAAA,cAAA;AAcA,uBAAgB,aAAa8C,OAAoB;AAC7C,wBAAQA,MAAK,MAAb;kBACI,KAAK;AACD,2BAAQA,MAAK,OAAmB,aAAaA,MAAK,aAA1C,KAAsE;kBAClF,KAAK;AACD,2BAAOA,MAAK,OAAO;kBACvB;AACI,2BAAO;gBANf;cAQH;AATD,cAAA9C,SAAA,eAAA;AAcA,uBAAgB,aAAa8C,OAAoB;AAC7C,oBAAM,OAAkB,CAAA;AACxB,oBAAIA,MAAK,WAAW,QAAQ;AACxB,uBAAK,MAAM,OAAA,QAAQA,MAAK,UAAb;gBACd;AACD,oBAAIA,MAAK,aAAa,QAAQ;AAC1B,uBAAK,SAAS,OAAA,QAAQA,MAAK,YAAb;gBACjB;AACD,uBAAO;cACV;AATD,cAAA9C,SAAA,eAAA;AAcA,uBAAgB,gBAAgB8C,OAAoB;AAChD,oBAAI;AACJ,oBAAIA,MAAK,iBAAiB;AACtB,yBAAO;oBACH,MAAM;oBACN,QAAQA,MAAK;kBAFV;gBAIV,WAAUA,MAAK,aAAa;AACzB,yBAAO;oBACH,MAAM;oBACN,QAAQA,MAAK;kBAFV;gBAIV,OAAM;AACH,yBAAO;oBACH,MAAM;oBACN,QAAQA,MAAK;kBAFV;gBAIV;AACD,uBAAO;cACV;AAnBD,cAAA9C,SAAA,kBAAA;AAwBA,kBAAM,MAAM,CAAC,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,IAA3C;AAKZ,uBAAwBqP,SAAQvM,OAAsB;AAClD,oBAAM,OAAkB,CAAA;AAGxB,oBAAI,aAA2B;AAE/B,oBAAM,cAAsB,CAAA;AAC5B,iBAAA,GAAA,SAAA,SAAA,GAAAA,KAAI,EAAA,KAAJA,OAAa,SAAC,QAAQX,QAAK;AACvB,sBAAM,OAAgB;oBAClB,MAAM,YAAY,OAAO,IAAR;oBACjB,QAAQ,OAAO;oBACf,MAAM,OAAO,iBAAiB;oBAC9B,OAAO,aAAa,MAAD,KAAY;oBAC/B,UAAU,OAAO,YAAY;oBAC7B,OAAO,aAAa,MAAD;oBACnB,UAAU,gBAAgB,MAAD;kBAPP;AAStB,uBAAK,KAAK,IAAV;AAEA,sBAAI,CAAC,OAAA,GAAG,WAAW;AACf;kBACH;AAID,sBAAI,cAAc,OAAO,WAAW,UAAU,OAAO,WAAW,CAAlB,EAAqB,YAAY,GAAG;AAE9E,wBAAM,gBAAgB,OAAO,WAAW,CAAlB;AACtB,wBAAM,gBAAyB;sBAC3B,MAAM;sBACN,QAAQ;sBACR,MAAM;sBACN,OAAO;sBACP,UAAU;sBACV,OAAO;wBACH,KAAK,CAAC,UAAD;sBADF;sBAGP,UAAU;wBACN,MAAM;wBACN,QAAQ;sBAFF;oBATiB;AAe/B,yBAAI,GAAA,SAAA,SAAA,GAAA,GAAG,EAAA,KAAH,KAAY,cAAc,QAAvB,KAAoC,IAAI;AAC3C,oCAAc,MAAM,MAAM,OAAA,QAAQ,cAAc,UAAtB;AAC1B,2BAAK,KAAK,aAAV;oBACH,WAEQ,WAAW,YAAY,GAAG;AAC/B,0BAAImN,UAAS,eAAe,WAAhB,GAA8B;AACtC,sCAAc,MAAM,MAAM,OAAA,QAAQ,cAAc,UAAtB;sBAC7B;AACD,2BAAK,KAAK,aAAV;oBACH,YAGG,GAAA,SAAA,SAAA,GAAA,GAAG,EAAA,KAAH,KAAY,OAAO,OAAO,QAAvB,KAAoC,MACvCA,UAAS,eAAe,WAAhB,GACV;AACE,oCAAc,MAAM,MAAM,OAAA,QAAQ,cAAc,UAAtB;AAC1B,2BAAK,KAAK,aAAV;oBACH;kBACJ;AAED,sBAAI,KAAK,QAAQ,UAAU,OAAO,aAAa,UAAU,GAAG;AACxD,iCAAa,OAAO,aAAa,CAApB;AACb,gCAAY,KAAK,UAAjB;kBACH,OAAM;AACH,iCAAa;AACb,gCAAY,SAAS;kBACxB;gBACJ,CAhEG;AAiEJ,uBAAO;cACV;AAzED,cAAAtP,SAAA,SAAA,IAAAqP;AA4EA,uBAASC,UAAS,KAAW,QAAc;AACvC,oBAAI5L,SAAQ;AACZ,yBAAS,IAAI,OAAO,SAAS,GAAG,IAAI,GAAG,KAAK;AACxC,sBAAI,IAAI,SAAS,OAAO,CAAD,CAAnB,GAAyB;AACzB,oBAAAA;kBACH,OAAM;AACH;kBACH;gBACJ;AACD,uBAAOA;cACV;;;;;;;;;;;;;;AC7JD,uBAAS,WAAWZ,OAAeS,OAAY;AAC3C,oBAAIgM,aAAYzM,MAAK,SAAS;AAC9B,wBAAQA,MAAK,SAAS,MAAtB;kBAEI,KAAK;AACD,wBAAIyM,WAAU,aAAa;AACvB,sBAAAA,aAAYA,WAAU;AACtB,uBAAA,GAAA,SAAA,SAAA,GAAAhM,KAAI,EAAA,KAAJA,OAAa,SAAC,MAAU;AACpB,wBAAAT,MAAK,OAAO,aAAa,MAAMyM,UAA/B;sBACH,CAFG;oBAGP,OAAM;AACH,uBAAA,GAAA,SAAA,SAAA,GAAAhM,KAAI,EAAA,KAAJA,OAAa,SAAC,MAAU;AACpB,wBAAAT,MAAK,OAAO,YAAY,IAAxB;sBACH,CAFG;oBAGP;AACD;kBAEJ,KAAK;AACD,qBAAA,GAAA,SAAA,SAAA,GAAAS,KAAI,EAAA,KAAJA,OAAa,SAAC,MAAU;AACpB,sBAAAT,MAAK,OAAO,aAAa,MAAMyM,UAA/B;oBACH,CAFG;AAGJ;kBAGJ;AACI,qBAAA,GAAA,SAAA,SAAA,GAAAhM,KAAI,EAAA,KAAJA,OAAa,SAAC,MAAU;AACpB,sBAAAgM,WAAU,YAAY,IAAtB;oBACH,CAFG;AAGJ;gBA1BR;cA4BH;AAID,uBAAS,WAAWzM,OAAa;AAC7B,yBAA6B,KAAA,GAAAgC,OAAA,GAAA,SAAA,SAAA,GAAehC,MAAK,KAApB,GAAA,KAAAgC,IAAA,QAAA,MAA4B;AAAhD,sBAAA,KAAAA,IAAA,EAAA,GAAC,WAAQ,GAAA,CAAA,GAAEvB,QAAI,GAAA,CAAA;AACpB,0BAAQ,UAAR;oBAEI,KAAK;AACD,uBAAA,GAAA,SAAA,SAAA,GAAAA,KAAI,EAAA,KAAJA,OAAa,SAAC,MAAU;AACpB,wBAAAT,MAAK,OAAO,YAAY,IAAxB;sBACH,CAFG;AAGJ;oBAEJ,SAAS;AACL,iCAAWA,OAAMS,KAAP;AACV;oBACH;kBAXL;gBAaH;cACJ;AAKD,uBAAS,WAAWT,OAAa;AAC7B,oBAAI,SAASA,MAAK;AAClB,oBAAIA,MAAK,YAAY,MAAM;AACvB,yBAAO,gBAAgBA,MAAK,IAA5B;gBACH,OAAM;AACH,yBAAO,aAAaA,MAAK,MAAMA,MAAK,QAApC;gBACH;cACJ;AAKD,uBAAS,WAAWA,OAAa;AAC7B,gBAAAA,MAAK,OAAO,cAAcA,MAAK;cAClC;AAED,kBAAM,YAAY;gBACd,MAAM;gBACN,MAAM;gBACN,MAAM;cAHQ;AAOlB,uBAAgB,OAAOA,OAAe;AAClC,yBAAS,IAAIA,MAAK,SAAS,GAAG,IAAI,IAAI,KAAK;AACvC,sBAAI,OAAOA,MAAK,CAAD;AACf,4BAAU,KAAK,IAAN,EAAY,IAArB;gBACH;cACJ;AALD,cAAA9C,SAAA,SAAA;AASA,uBAAS,YAAY8C,OAAa;AAC9B,yBAA6B,KAAA,GAAAgC,OAAA,GAAA,SAAA,SAAA,GAAehC,MAAK,KAApB,GAAA,KAAAgC,IAAA,QAAA,MAA4B;AAAhD,sBAAA,KAAAA,IAAA,EAAA,GAAC,WAAQ,GAAA,CAAA,GAAEvB,QAAI,GAAA,CAAA;AACpB,0BAAQ,UAAR;oBACI,KAAK,OAAO;AACR,iCAAWT,OAAMS,KAAP;AACV;oBACH;oBAED,SAAS;AACL,uBAAA,GAAA,SAAA,SAAA,GAAAA,KAAI,EAAA,KAAJA,OAAa,SAAC,MAAU;AACpB;AAAE,6BAAK,WAAoB,YAAY,IAArC;sBACL,CAFG;AAGJ;oBACH;kBAXL;gBAaH;cACJ;AAED,uBAAS,YAAYT,OAAa;AAC9B,gBAAAA,MAAK,OAAO,cAAcA,MAAK;cAClC;AAED,uBAAS,YAAYA,OAAa;AAC9B;AAAE,gBAAAA,MAAK,OAAuB,aAAaA,MAAK,MAAMA,MAAK,KAAzD;cACL;AAED,kBAAM,aAAa;gBACf,MAAM;gBACN,MAAM;gBACN,MAAM;cAHS;AAOnB,uBAAgB,QAAQA,OAAe;AACnC,yBAAiB,KAAA,GAAA,SAAAA,OAAA,KAAA,OAAA,QAAA,MAAM;AAAlB,sBAAI,OAAI,OAAA,EAAA;AACT,6BAAW,KAAK,IAAN,EAAY,IAAtB;gBACH;cACJ;AAJD,cAAA9C,SAAA,UAAA;;;;;;;;;;;AC9HA,kBAAA,UAAA,oBAAA,GAAA;AAEA,kBAAA;;gBAAA,WAAA;AAII,2BAAAwP,WAAmBjN,SAAc;AAAd,yBAAA,SAAAA;AACf,yBAAK,OAAO,IAAI,QAAA,UAAJ;kBACf;AAKD,kBAAAiN,WAAA,UAAA,UAAA,WAAA;AACI,yBAAK,KAAK,SAAS,KAAK,OAAO,OAAO,cAAtC;AAEA,yBAAK,KAAK,WAAW,KAAK,OAAO,UAAU,KAAtB,CAArB;kBACH;AAKM,kBAAAA,WAAA,UAAA,OAAP,WAAA;AACI,yBAAK,KAAK,WAAW,KAAK,OAAO,UAAU,KAAtB,CAArB;AACA,2BAAO;kBACV;AAKM,kBAAAA,WAAA,UAAA,SAAP,WAAA;AACI,wBAAI1M,QAAO,KAAK,KAAK,KAAV;AACX,wBAAIA,OAAM;AACN,2BAAK,OAAO,UAAU,KAAKA,KAA3B;AACA,6BAAO;oBACV;AACD,2BAAO;kBACV;AAKM,kBAAA0M,WAAA,UAAA,UAAP,WAAA;AACI,wBAAI1M,QAAO,KAAK,KAAK,KAAV;AACX,wBAAIA,OAAM;AACN,2BAAK,OAAO,UAAU,KAAKA,KAA3B;AACA,6BAAO;oBACV;AACD,2BAAO;kBACV;AACL,yBAAA0M;gBAAC,EAhDD;;;;;;;;;;;;;;;ACCA,kBAAA;;gBAAA,WAAA;AAAA,2BAAAC,aAAA;AAIc,yBAAA,OAAY,CAAA;AAKZ,yBAAA,MAAc;AAKd,yBAAA,QAAQ;AAGR,yBAAA,OAAO;kBAqEpB;AAhEG,kBAAAA,WAAA,UAAA,WAAA,SAAS,SAAe;AACpB,8BAAU,KAAK,IAAI,OAAT;AACV,gCAAY,KAAK,MAAM;kBAC1B;AAKD,mBAAA,GAAA,gBAAA,SAAA,GAAIA,WAAA,WAAA,QAAI;;;;yBAAR,SAAAzN,OAAA;AACI,6BAAO,KAAK,KAAK;oBACpB;;;kBAFO,CAAR;AAQO,kBAAAyN,WAAA,UAAA,aAAP,SAA+B3M,OAAO;AAElC,wBAAI,KAAK,MAAM;AAAA,0BAAA;AACX,uBAAA,GAAA,QAAA,SAAA,GAAA,WAAA,KAAK,IAAL,EAAA,KAAA,UAAiB,KAAK,QAAQ,CAA9B;AACA,2BAAK,OAAO;oBACf;AACD,yBAAK,KAAK,KAAKA,KAAf;AAEA,2BAAO,KAAK,OAAO,KAAK,OAAO,KAAK,KAAK;AACrC,2BAAK,KAAK,MAAV;oBACH;AAED,yBAAK,QAAQ,KAAK,OAAO;AACzB,2BAAO;kBACV;AAKM,kBAAA2M,WAAA,UAAA,UAAP,WAAA;AACI,2BAAO,KAAK,KAAK,KAAK,KAAf;kBACV;AAKM,kBAAAA,WAAA,UAAA,OAAP,WAAA;AACI,qBAAC,KAAK,SAAS,KAAK,OAAO;AAC3B,yBAAK;AACL,wBAAI,KAAK,QAAQ,GAAG;AAChB,2BAAK,QAAQ;AACb,6BAAO;oBACV;AACD,2BAAO,KAAK,QAAL;kBACV;AAKM,kBAAAA,WAAA,UAAA,OAAP,WAAA;AACI,qBAAC,KAAK,SAAS,KAAK,OAAO;AAC3B,yBAAK;AACL,wBAAI,KAAK,SAAS,KAAK,MAAM;AACzB,2BAAK,QAAQ,KAAK,OAAO;AACzB,6BAAO;oBACV;AACD,2BAAO,KAAK,QAAL;kBACV;AACL,yBAAAA;gBAAC,EAtFD;;AAAa,cAAAzP,SAAA,YAAA;;;;;;;;;;;;ACHb,kBAAA,UAAA,QAAA,gBAAA,oBAAA,EAAA,CAAA;AAIA,kBAAA;;gBAAA,SAAA,QAAA;AAAyC,0BAAA,UAAA0P,cAAA,MAAA;AAWrC,2BAAAA,aAAmBnN,SAAc;AAAjC,wBAAA,QACI,OAAA,KAAA,MAAMA,QAAO,OAAO,cAApB,KAAmC;AADpB,0BAAA,SAAAA;AAPX,0BAAA,OAAe;AASnB,0BAAK,SAASA,QAAO,UAAU,MAAM,CAAvB;;kBACjB;AAKM,kBAAAmN,aAAA,UAAA,UAAP,WAAA;AAAA,wBAAA,QAAA;AACI,yBAAK,SAAS,KAAK,OAAO,UAAU,MAAM,CAA5B;AACd,yBAAK,OAAO,UAAU,GAAG,UAAU,WAAA;AAC/B,4BAAK,OAAO,MAAK,OAAO;oBAC3B,CAFD;AAGA,yBAAK,aAAa,KAAK,OAAO,OAAO,cAArC;kBACH;AAKM,kBAAAA,aAAA,UAAA,OAAP,WAAA;AACI,2BAAA,UAAM,KAAI,KAAA,MAAC,CAAC,KAAK,MAAM,KAAK,OAAO,SAAxB,CAAX;AACA,2BAAO;kBACV;AAKM,kBAAAA,aAAA,UAAA,SAAP,WAAA;AAAA,wBAAA,QAAA;AACI,2BAAO,OAAA,UAAM,OAAM,KAAA,MAAC,SAAA5M,OAAI;AACpB,4BAAK,OAAO,YAAYA,MAAK,CAAD;oBAC/B,CAFM;kBAGV;AAKM,kBAAA4M,aAAA,UAAA,UAAP,WAAA;AAAA,wBAAA,QAAA;AACI,2BAAO,OAAA,UAAM,QAAO,KAAA,MAAC,SAAA5M,OAAI;AACrB,4BAAK,OAAO,YAAYA,MAAK,CAAD;oBAC/B,CAFM;kBAGV;AACL,yBAAA4M;gBAAC,EApDwC,QAAA,SAAA,CAAzC;;;;;;;;;;;;;;ACJA,kBAAA,UAAA,QAAA,gBAAA,oBAAA,EAAA,CAAA;AAGA,kBAAA,aAAA,QAAA,gBAAA,oBAAA,CAAA,CAAA;AACA,kBAAA,SAAA,oBAAA,CAAA;AAMA,uBAAS,cAAcpK,QAAY;AAC/B,uBAAO;kBACH,OAAO,CAACA,OAAM,gBAAgBA,OAAM,WAA7B;kBACP,KAAK,CAACA,OAAM,cAAcA,OAAM,SAA3B;kBACL,MAAMA,OAAM;kBACZ,WAAWA,OAAM;gBAJd;cAMV;AAKD,kBAAA;;gBAAA,SAAA,QAAA;AAAwC,0BAAA,UAAAqK,aAAA,MAAA;AAapC,2BAAAA,YAAmBpN,SAAc;AAAjC,wBAAA,QACI,OAAA,KAAA,MAAMA,QAAO,OAAO,cAApB,KAAmC;AADpB,0BAAA,SAAAA;AAEf,0BAAK,YAAY,cAAc,SAAS,YAAT,CAAD;AAC9B,0BAAK,OAAOA,QAAO,UAAU,MAAM,CAAvB;AACZ,0BAAK,kBAAkB,OAAA,SAAS,WAAA;AAC5B,4BAAK,YAAY,cAAc,MAAK,WAAN;oBACjC,GAAEA,QAAO,OAAO,eAFM;;kBAG1B;AAKD,mBAAA,GAAA,gBAAA,SAAA,GAAWoN,YAAA,WAAA,eAAW;;;;yBAAtB,SAAA3N,OAAA;AACI,0BAAMqD,aAAY,SAAS,aAAT;AAClB,6BAAOA,cAAaA,WAAU,aAAaA,WAAU,WAAW,CAArB,IAA0B,SAAS,YAAT;oBACxE;;;kBAHqB,CAAtB;AAQO,kBAAAsK,YAAA,UAAA,UAAP,WAAA;AACI,wBAAMpL,QAAO;AAEb,yBAAK,OAAO,KAAK,OAAO,UAAU,MAAM,CAA5B;AACZ,yBAAK,aAAa,KAAK,OAAO,OAAO,cAArC;AAEA,6BAAS,kBAAe;AACpB,0BAAMyI,UAASzI,MAAK;AACpB,0BACIA,MAAK,SAASyI,QAAO,2BACrBzI,MAAK,KAAK,SAASyI,QAAO,uBAA1B,GACF;AAEE,4BAAI,CAACzI,MAAK,OAAO,aAAa;AAC1B,0BAAAA,MAAK,gBAAL;wBACH;sBACJ;oBACJ;AAED,6BAAS,eAAe3D,IAAgB;AACpC,0BAAIA,GAAE,OAAO,eAAeA,GAAE,OAAO,UAAU;AAE3C,wBAAA2D,MAAK,gBAAL;sBACH;oBACJ;AAED,+BAAA,SAAA,EAAE,QAAF,EAAY,GAAG,mBAAmB,eAAlC;AAEA,yBAAK,OAAO,cAAc,WAAA;AACtB,iCAAA,SAAA,EAAE,QAAF,EAAY,IAAI,mBAAmB,eAAnC;oBACH,CAFD;AAKA,oBAAAA,MAAK,OAAO,UAAU,GAAG,WAAW,cAApC;kBACH;AAKM,kBAAAoL,YAAA,UAAA,OAAP,WAAA;AACI,wBAAI,UAAU,cAAc,KAAK,WAAN;AAC3B,2BAAA,UAAM,KAAI,KAAA,MAAC,CAAC,KAAK,WAAW,OAAjB,CAAX;AACA,yBAAK,YAAY;AACjB,2BAAO;kBACV;AAMM,kBAAAA,YAAA,UAAA,MAAP,SAAWrK,QAA4B;AACnC,wBAAI;AACA,0BAAIA,QAAO;AACP,4BAAM0H,UAAS,KAAK;AACpB,wBAAAA,QAAO,SAAQ,MAAfA,SAAmB1H,OAAM,KAAzB;AACA,wBAAA0H,QAAO,OAAM,MAAbA,SAAiB1H,OAAM,GAAvB;AACA,6BAAK,OAAO,MAAM,aAAlB;AACA,+BAAO;sBACV;oBACJ,SAAQ,KAAK;AACV,6BAAO;oBACV;AACD,2BAAO;kBACV;AAKM,kBAAAqK,YAAA,UAAA,SAAP,WAAA;AAAA,wBAAA,QAAA;AACI,2BAAO,OAAA,UAAM,OAAM,KAAA,MAAC,SAAA7M,OAAI;AACpB,4BAAK,IAAIA,MAAK,CAAD,CAAb;oBACH,CAFM;kBAGV;AAKM,kBAAA6M,YAAA,UAAA,UAAP,WAAA;AAAA,wBAAA,QAAA;AACI,2BAAO,OAAA,UAAM,QAAO,KAAA,MAAC,SAAA7M,OAAI;AACrB,4BAAK,IAAIA,MAAK,CAAD,CAAb;oBACH,CAFM;kBAGV;AACL,yBAAA6M;gBAAC,EAnHuC,QAAA,SAAA,CAAxC;;;;;;;;;;;;;;;ACtBA,kBAAA,aAAA,QAAA,gBAAA,oBAAA,CAAA,CAAA;AACA,kCAAA,GAAA;AAEA,uBAAwB,YAAYpN,SAAc;AAC9C,oBAAI,YAAqB;AACzB,oBAAI;AACJ,oBAAI;AAGJ,gBAAAA,QAAO,IAAI,WAAW,aAAa,KAAK,WAAA;AACpC,sBAAI,WAAW;AACX,qBAAA,GAAA,MAAA,SAAA,GAAA,WAAW,EAAA,KAAX,aAAiB,sBAAN,EAA8B,KAAKA,QAAO,UAAU,KAAjB,CAA9C;kBACH;gBACJ,CAJD;AAOA,yBAASkE,WAAO;AACZ,sBAAI;AAAW;AAEf,kBAAAlE,QAAO,UAAU,KAAjB;AAEA,sBAAI,2BAA2BA,QAAO,OAAO,IAAI,eAAlB;AAC/B,sBAAMyB,WAAUzB,QAAO,IAAI,KAAX;AAChB,gCAAc,WAAA,SAAA,EACV,oDAAkD,2BAAwB,mEAC1ByB,WAAO,4BAF7C;AAKd,kBAAAzB,QAAO,mBAAmB,OAAO,WAAjC;AAEA,sBAAI,kBAAkBA,QAAO,OAAO,IAAI,MAAlB;AACtB,6BAAW,WAAA,SAAA,EAAE,kDAAgD,kBAAe,UAAjE;AACX,kBAAAA,QAAO,aAAa,OAAO,QAA3B;AACA,8BAAY;AACZ,kBAAAA,QAAO,WAAW;gBACrB;AAGD,yBAASmE,UAAM;AACX,sBAAI,CAAC;AAAW;AAChB,8BAAY,OAAZ;AACA,2BAAS,OAAT;AACA,kBAAAnE,QAAO,UAAU,KAAjB;AACA,8BAAY;AACZ,kBAAAA,QAAO,WAAW;gBACrB;AAED,uBAAO;kBAAE,SAAOkE;kBAAE,QAAMC;gBAAjB;cACV;AA7CD,cAAA1G,SAAA,SAAA,IAAA;;;;;ACRA,kBAAA,MAAU,oBAAQ,EAA8E;AAChG,kBAAAgE,WAA0B,oBAAQ,GAA+J;AAEjM,cAAAA,WAAAA,SAAA,aAAAA,SAAA,UAAAA;AAEA,kBAAA,OAAAA,aAAA,UAAA;AACA,gBAAAA,WAAA,CAAA,CAA0BjE,QAAA,GAASiE,UAAA,EAAA,CAAA;cACnC;AAEA,kBAAA,UAAA,CAAA;AAEA,sBAAA,SAAA;AACA,sBAAA,YAAA;AAEA,kBAAA,SAAA,IAAAA,UAAA,OAAA;AAIA,cAAAjE,QAAA,UAAAiE,SAAA,UAAA,CAAA;;;;;ACjBA,kBAAA,8BAAkC,oBAAQ,EAAsD;AAChG,cAAAhE,WAAA,4BAAA,KAAA;AAEA,cAAAA,SAAA,KAAA,CAAcD,QAAA,GAAS,6cAA0c,EAAA,CAAA;AAEje,cAAAA,QAAA,UAAAC;;;;;;;;;;;ACDA,kBAAA;;gBAAA,WAAA;AACI,2BAAA4P,iBAAmBrN,SAAc;AAAjC,wBAAA,QAAA;AAAmB,yBAAA,SAAAA;AAEf,wBAAMgH,QAAO,SAAPA,QAAO;AACT,0BAAM,gBAAgB,SAAS;AAC/B,0BAAI,kBAAkBhH,QAAO,UAAU,MAAM,CAAvB,GAA2B;AAC7C,8BAAK,KAAL;sBACH;oBACJ;AAGD,2BAAO,SAAS,iBAAiB,mBAAmBgH,KAApD;AAGA,yBAAK,OAAO,cAAc,WAAA;AACtB,6BAAO,SAAS,oBAAoB,mBAAmBA,KAAvD;oBACH,CAFD;kBAGH;AAEM,kBAAAqG,iBAAA,UAAA,OAAP,WAAA;;AAEY,wBAAA,oBAAsB,KAAK,OAAO,OAAjB;AACzB,wBAAI,mBAAmB;AACnB,0BAAMvK,aAAY,KAAK,OAAO;AAC9B,sBAAAA,WAAU,UAAV;AACA,0BAAI,CAACA,WAAU,iBAAV;AACD,0CAAkB;;0BAEd,MAAMA,WAAU,iBAAV;;0BAEN,OAAIP,MAAEO,WAAU,0BAAV,OAAqC,QAAAP,QAAA,SAAA,SAAAA,IAAE,MAAM,CAAR,EAAW;;0BAEtD,WAAWO;wBANG,CAAD;oBAQxB;kBACJ;AACL,yBAAAuK;gBAAC,EApCD;;;;;;;;;;;;;;;;;;ACLA,kBAAA,WAAA,QAAA,gBAAA,oBAAA,EAAA,CAAA;AACA,kBAAA,SAAA,oBAAA,CAAA;AAoBA,uBAAgBC,gBAAe5P,OAAc,SAA0B,QAAuB;AAC1F,oBAAI,CAACA,OAAM;AACP,wBAAM,IAAI,UAAU,oBAAd;gBACT;AAED,oBAAI,CAAC,SAAS;AACV,wBAAM,IAAI,UAAU,uBAAd;gBACT;AAED,oBAAI,CAAC,QAAQ,WAAW;AACpB,wBAAM,IAAI,UAAU,iCAAd;gBACT;AAED,oBAAI,QAAQ,aAAa,OAAO,QAAQ,cAAc,YAAY;AAC9D,wBAAM,IAAI,UAAU,mCAAd;gBACT;AAED,oBAAI,OAAOA,KAAD,GAAQ;AACd,0BAAQ,KAAK,YAAUA,QAAI,mDAA3B;gBACH;AAED,uBAAOA,KAAD,IAAS;cAClB;AAtBD,cAAAD,SAAA,iBAAA6P;AA4BA,uBAAwB,YAAYtN,SAAc;AAC9C,oBAAM,WAA2B,GAAA,QAAA,SAAA,GAC7B,CAAA,GACA,OAAA,UAAU,SAAA,SAAA,EAAO,yBAAjB,GACA,OAAA,UAAUA,QAAO,mBAAjB,CAH6B;AAMjC,oBAAMyD,WAAS,GAAA,SAAA,SAAA,GAAe,OAAf;AACf,iBAAA,GAAA,SAAA,SAAA,GAAAA,OAAM,EAAA,KAANA,SAAe,SAAClB,KAAe;sBAAd7E,QAAI6E,IAAA,CAAA,GAAE,UAAOA,IAAA,CAAA;AAC1B,0BAAQ,KAAK,YAAU7E,QAAI,eAA3B;AACQ,sBAAA,YAAsB,QAAb,WAAE+G,UAAW,QAAL;AACzB,4BAAUzE,SAAQyE,OAAT;AACT,0BAAQ,KAAK,YAAU/G,QAAI,0BAA3B;gBACH,CALK;cAMT;AAdD,cAAAD,SAAA,SAAA,IAAA;;;;;;;;;;;;;;;;;;;;ACjDA,MAKA,mBACO;AANP;AAAA;AAAA;AAAA;AACA,MAAA8P;AACA;AACA;AACA;AACA,0BAAc;AACd,MAAO,yCAAP,cAA6B,WAAW;AAAA,QAAxC;AAAA;AA+2BE,wDAAyB,CAAC,eAAe;AACvC,iBAAK,cAAc,UAAU;AAC7B,iBAAK,MAAM,KAAK,mBAAmB,UAAU;AAC7C,gBAAI;AACF,2BAAa,QAAQ,cAAa,KAAK,GAAG;AAAA,YAC5C,SAASC,IAAG;AACV,sBAAQ,MAAM,kCAAkCA,EAAC;AAAA,YACnD;AAAA,UACF;AAEA,iEAAkC,CAAC,UAAU;AAC3C,gBAAI;AACJ,oBAAQ,MAAM,MAAM;AAAA,cAClB,KAAK;AACH,wBAAQ,MAAM,KAAK,MAAM,aAAa,KAAK;AAC3C;AAAA,cACF,KAAK;AACH,wBAAQ,MAAM,KAAK,MAAM,cAAc,KAAK;AAC5C;AAAA,cACF;AACE;AAAA,YACJ;AACA,gBAAI,MAAM,WAAW;AAAG;AACxB,oBAAQ,IAAI,mCAAmC,KAAK;AACpD,kBAAM,eAAe;AACrB,kBAAM,QAAQ,UAAQ,KAAK,WAAW,IAAI,CAAC;AAAA,UAC7C;AAEA,4CAAa,CAAC,SAAS;AACrB,oBAAQ,IAAI,gBAAgB,IAAI;AAEhC,kBAAM,aAAa;AACnB,kBAAM,UAAU,KAAK,KAAK,WAAW,OAAO;AAC5C,kBAAM,SAAS,UAAU,gBAAgB;AACzC,kBAAM,OAAO,UAAU,KAAK,aAAa,KAAK;AAE9C,kBAAM,UAAU,WAAW,oBAAoB,iBAAiB,yBAAyB,MAAM,IAAI;AACnG,oBAAQ,QAAQ,YAAU;AACxB,oBAAM,aAAa,OAAO,QAAQ;AAClC,oBAAMC,UAAS,WAAW,QAAQ,KAAK,UAAU;AACjD,sBAAQ,IAAI,UAAUA,OAAM;AAC5B,sBAAQ,IAAI,cAAc,UAAU;AACpC,cAAAA,QAAO,UAAU,IAAI,MAAM;AAC3B,qBAAO,UAAU,IAAI,MAAM;AAAA,YAC7B,CAAC;AACD,uBAAW,4BAA4B;AACvC,iBAAK,QAAQ,IAAI,EAAE,MAAM,CAAAC,WAAS,QAAQ,IAAI,oCAAoCA,MAAK,CAAC;AAAA,UAC1F;AAAA;AAAA,QA/4BA,aAAa;AACX,eAAK,OAAO,QAAQ;AACpB,eAAK,WAAW,QAAQ;AACxB,eAAK,UAAU,QAAQ;AACvB,eAAK,qBAAqB;AAAA,QAC5B;AAAA,QAEA,UAAU;AACR,gBAAM,eAAe;AAAA,YACnB,EAAC,OAAO,iBAAiB,OAAO,qBAAqB,MAAM,oBAAmB;AAAA,YAC9E,EAAC,OAAO,eAAe,OAAO,2BAA0B;AAAA,YACxD,EAAC,OAAO,uBAAQ,OAAO,0BAAU;AAAA,YACjC,EAAC,OAAO,uBAAQ,OAAO,0BAAU;AAAA,YACjC,EAAC,OAAO,qDAAa,OAAO,wDAAe;AAAA,YAC3C,EAAC,OAAO,mCAAU,OAAO,sCAAY;AAAA,YACrC,EAAC,OAAO,uBAAQ,OAAO,0BAAU;AAAA,UACnC;AAEA,cAAI;AACF,iBAAK,MAAM,aAAa,QAAQ,YAAY,KAAK;AAAA,UACnD,SAASF,IAAG;AACV,oBAAQ,MAAM,kCAAkCA,EAAC;AAAA,UACnD;AACA,eAAK,SAAS,KAAK,WAAW,YAAY;AAC1C,eAAK,cAAc,KAAK,eAAe;AAEvC,eAAK,gBAAgB,KAAK,iBAAiB;AAC3C,eAAK,oBAAoB;AAEzB,eAAK,mBAAmB;AACxB,eAAK,aAAa,kBAAAG,OAAC;AAAA,QACrB;AAAA,QAEA,WAAW,cAAa;AACtB,cAAI,QAAQC,mBAAkB;AAAA,YAC1B;AAAA,YACA,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AAAA,UACT;AACA,gBAAM,OAAOA,mBAAkB,UAAU,OAAO,KAAK,0BAA0B;AAE/E,eAAK,cAAc,IAAI;AACvB,iBAAO,IAAIA,mBAAkB,IAAI;AAAA,QACnC;AAAA,QACA,aAAaJ,IAAE;AACb,mBAAS,iBAAiB,sBAAsB,WAAY;AAC1D,aAAC,gBAAgB,EAAE,QAAQ,SAAUK,UAAS;AAE5C,sBAAQ,IAAIA,QAAO;AAEnB,kBAAIC,UAAS,IAAIN,GAAE,SAAS,eAAeK,QAAO,CAAC;AAGnD,cAAAC,QAAO,OAAO,kBAAkB;AAChC,cAAAA,QAAO,OAAO,iBAAiB;AAC/B,cAAAA,QAAO,OAAO,iBAAiB;AAAA,gBAC7B,cAAc,SAAU,WAAW,QAAQ;AAKvC,sBAAI,OAAO,SAAS;AAEhB,wBAAI,SAAS,OAAO;AACpB,8BAAU,MAAM;AAAA,kBAEpB,OAAO;AAEH,0BAAM,wBAAmB,OAAO,OAAO;AAAA,kBAC3C;AAAA,gBACJ;AAAA,cACF;AAEA,cAAAA,QAAO,OAAO,QAAQ;AAAA,gBACpB;AAAA;AAAA,gBACA;AAAA;AAAA,gBACA;AAAA;AAAA,gBACA;AAAA;AAAA,gBACA;AAAA;AAAA,gBACA;AAAA;AAAA,gBACA;AAAA;AAAA,gBACA;AAAA;AAAA,gBACA;AAAA;AAAA,gBACA;AAAA;AAAA,gBACA;AAAA;AAAA,gBACA;AAAA;AAAA,gBACA;AAAA;AAAA,gBACA;AAAA;AAAA,gBACA;AAAA;AAAA,gBACA;AAAA;AAAA;AAAA,gBAEA;AAAA;AAAA,gBACA;AAAA;AAAA,gBACA;AAAA;AAAA,gBACA;AAAA,gBACA;AAAA;AAAA,gBACA;AAAA;AAAA;AAAA,cAEF;AACA,cAAAA,QAAO,OAAO;AACd,uBAAS,cAAc,cAAc,EAAE,UAAU,IAAI,gBAAgB;AAErE,kBAAIC,OAAM,SAAS,eAAe,aAAa;AAC/C,kBAAI,QAAQ,SAAS,cAAc,OAAO;AAE1C,oBAAM,WAAW,IAAI,iBAAiB,CAAC,eAAeC,cAAa;AAC/D,sBAAM,cAAcF,QAAO,IAAI,KAAK;AACpC,wBAAQ,IAAI,MAAM;AAClB,wBAAQ,IAAI,WAAW;AACvB,yBAAQ,YAAY,eAAe;AAC/B,sBAAI,SAAS,SAAS,aAAa;AAC/B,0BAAM,OAAO;AACb,0BAAM,OAAO;AACb,0BAAM,OAAO;AACb,0BAAM,KAAK;AACX,0BAAM,QAAQ;AACd,oBAAAC,KAAI,YAAY,KAAK;AAAA,kBACzB,WAAW,SAAS,SAAS,cAAc;AACvC,0BAAM,OAAO;AACb,0BAAM,OAAO;AACb,0BAAM,OAAO;AACb,0BAAM,KAAK;AACX,0BAAM,QAAQ;AACd,oBAAAA,KAAI,YAAY,KAAK;AAAA,kBACzB,WAAW,SAAS,SAAS,iBAAiB;AAC1C,0BAAM,OAAO;AACb,0BAAM,OAAO;AACb,0BAAM,OAAO;AACb,0BAAM,KAAK;AACX,0BAAM,QAAQ;AACd,oBAAAA,KAAI,YAAY,KAAK;AAAA,kBACzB;AAAA,gBACJ;AAAA,cACJ,CAAC;AAGD,oBAAME,UAAS,EAAE,YAAY,MAAM,WAAW,MAAM,eAAe,MAAM,SAAS,KAAK;AAGvF,oBAAM,cAAc,SAAS,eAAe,gBAAgB;AAC5D,kBAAI,aAAa;AAEb,yBAAS,QAAQ,aAAaA,OAAM;AAAA,cACxC,OAAO;AACH,wBAAQ,IAAI,2BAA2B;AAAA,cAC3C;AAAA,YAEF,CAAC;AAED,kBAAM,iCAAiC;AAAA,cACrC,QAAQ;AAAA,cACR,SAAS;AAAA,gBACP,gBAAgB;AAAA,gBAChB,UAAU;AAAA,cACZ;AAAA,YACF,CAAC,EACA,KAAK,cAAY,SAAS,KAAK,CAAC,EAChC,KAAK,CAAAC,UAAQ;AACZ,sBAAQ,IAAIA,MAAK,MAAM;AACvB,kBAAGA,MAAK,WAAW,MAAK;AACtB,oBAAI,QAAQ;AAAA,kBAAC,cAAI;AAAA,kBAAS,cAAI;AAAA,kBAAQ,cAAI;AAAA,kBAAc,cAAI;AAAA,kBAAU,cAAI;AAAA,kBAAU,oBAAK;AAAA,kBAAa,oBAAK;AAAA,kBAAiB,0BAAM;AAAA,kBAAc,oBAAK;AAAA,kBACnJ,cAAI;AAAA,kBAAQ,cAAI;AAAA,kBAAW,cAAI;AAAA,kBAAQ,cAAI;AAAA,kBAAO,cAAI;AAAA,kBAAQ,cAAG;AAAA,kBAAS,cAAI;AAAA,kBAAS,cAAI;AAAA,kBAAS,cAAI;AAAA,kBAAO,cAAI;AAAA,kBAAS,oBAAK;AAAA,kBAAe,cAAI;AAAA,gBAAa;AACnK,sBAAM,mBAAmB,SAAS,iBAAiB,yCAAyC;AAE5F,sBAAM,WAAW,SAAS,iBAAiB,cAAc;AACzD,yBAAS,QAAQ,CAAAL,aAAW;AAE1B,0BAAQ,IAAIA,SAAQ,aAAa,YAAY,CAAC;AAE5C,kBAAAA,SAAQ,aAAa,cAAc,MAAMA,SAAQ,aAAa,YAAY,CAAC,CAAC;AAAA,gBAGhF,CAAC;AAED,yBAAS,cAAc,+BAA+B,EAAE,iBAAiB,SAAS,WAAW;AAE3F,uBAAK,cAAc,eAAe,EAAE,cAAc;AAGlD,uBAAK,iBAAiB,WAAW,EAAE,QAAQ,UAAQ;AACjD,0BAAMM,QAAO,KAAK;AAClB,4BAAOA,OAAM;AAAA,sBACX,KAAK;AAAM,6BAAK,cAAc;AAAa;AAAA,oBAC7C;AAAA,kBACF,CAAC;AAAA,gBACH,CAAC;AAED,yBAAS,cAAc,gCAAgC,EAAE,iBAAiB,SAAS,WAAW;AAE5F,wBAAM,QAAQ,KAAK,cAAc,eAAe;AAChD,sBAAI,MAAM,gBAAgB,4BAAQ;AAChC,0BAAM,cAAc;AAAA,kBACtB;AAGA,wBAAM,YAAY,KAAK,iBAAiB,aAAa;AACrD,4BAAU,QAAQ,UAAQ;AACxB,0BAAM,cAAc,KAAK,YAAY,KAAK;AAC1C,4BAAO,aAAa;AAAA,sBAClB,KAAK;AAAM,6BAAK,cAAc;AAAU;AAAA,sBACxC,KAAK;AAAM,6BAAK,cAAc;AAAY;AAAA,sBAC1C,KAAK;AAAM,6BAAK,cAAc;AAAS;AAAA,sBACvC,KAAK;AAAO,6BAAK,cAAc;AAAY;AAAA,sBAC3C,KAAK;AAAQ,6BAAK,cAAc;AAAc;AAAA,sBAC9C,KAAK;AAAQ,6BAAK,cAAc;AAAW;AAAA,sBAC3C,KAAK;AAAM,6BAAK,cAAc;AAAU;AAAA,sBACxC,KAAK;AAAQ,6BAAK,cAAc;AAAmB;AAAA,sBAEnD;AAAS,4BAAI,SAAS,KAAK,WAAW;AAAG;AAAA,oBAC3C;AAAA,kBACF,CAAC;AAAA,gBACH,CAAC;AAED,yBAAS,cAAc,oCAAoC,EAAE,iBAAiB,SAAS,WAAW;AAEhG,wBAAM,QAAQ,KAAK,cAAc,eAAe;AAChD,sBAAI,MAAM,gBAAgB,4BAAQ;AAChC,0BAAM,cAAc;AAAA,kBACtB;AAAA,gBACF,CAAC;AAED,yBAAS,cAAc,oCAAoC,EAAE,iBAAiB,SAAS,WAAW;AAEhG,wBAAM,QAAQ,KAAK,cAAc,eAAe;AAChD,sBAAI,MAAM,gBAAgB,4BAAQ;AAChC,0BAAM,cAAc;AAAA,kBACtB;AAAA,gBACF,CAAC;AAGD,yBAAS,cAAc,8BAA8B,EAAE,iBAAiB,SAAS,WAAW;AAE1F,wBAAM,aAAa,KAAK,cAAc,oCAAoC;AAC1E,sBAAI,WAAW,gBAAgB,gBAAM;AACnC,+BAAW,cAAc;AAAA,kBAC3B;AAGA,wBAAM,YAAY,SAAS,cAAc,oBAAoB;AAC7D,4BAAU,cAAc;AAGxB,wBAAM,WAAW,SAAS,cAAc,oBAAoB;AAC5D,2BAAS,cAAc;AAIvB,wBAAM,YAAY,SAAS,cAAc,gBAAgB;AACzD,0BAAQ,IAAI,SAAS;AACrB,4BAAU,cAAc;AAGxB,wBAAM,YAAY,SAAS,cAAc,iBAAiB;AAC1D,4BAAU,cAAc;AAAA,gBAC1B,CAAC;AAID,sBAAM,YAAY,SAAS,cAAc,yBAAyB;AAGlE,0BAAU,iBAAiB,SAAS,SAASX,IAAG;AAC9C,wBAAM,QAAQ,KAAK,cAAc,eAAe;AAChD,wBAAM,cAAc;AAElB,wBAAM,YAAY,KAAK,iBAAiB,aAAa;AAGrD,4BAAU,QAAQ,UAAQ;AACtB,0BAAM,cAAc,KAAK,YAAY,KAAK;AAC1C,0BAAM,cAAc;AAAA,sBAChB,gBAAM;AAAA,sBACN,gBAAM;AAAA,sBACN,gBAAM;AAAA,sBACN,gBAAM;AAAA,oBACV,EAAE,WAAW;AAEb,wBAAI,aAAa;AACb,2BAAK,cAAc;AAAA,oBACvB;AAAA,kBACJ,CAAC;AAAA,gBACL,CAAC;AAID,sBAAM,YAAY,SAAS,cAAc,sBAAsB;AAG/D,0BAAU,iBAAiB,SAAS,WAAW;AAE7C,uBAAK,aAAa,cAAc,OAAO;AAEvC,uBAAK,cAAc,iBAAiB,EAAE,QAAQ;AAE9C,uBAAK,cAAc,iBAAiB,EAAE,QAAQ;AAE9C,uBAAK,cAAc,aAAa,EAAE,cAAc;AAChD,uBAAK,iBAAiB,WAAW,EAAE,QAAQ,UAAQ;AACjD,yBAAK,cAAc,KAAK,YAAY,QAAQ,gBAAM,WAAW;AAC7D,yBAAK,cAAc,KAAK,YAAY,QAAQ,gBAAM,UAAU;AAAA,kBAC9D,CAAC;AAAA,gBACH,CAAC;AAKD,sBAAM,YAAY,SAAS,cAAc,sBAAsB;AAG/D,0BAAU,iBAAiB,SAAS,WAAW;AAE7C,uBAAK,aAAa,cAAc,OAAO;AAGvC,uBAAK,cAAc,iBAAiB,EAAE,QAAQ;AAC9C,uBAAK,cAAc,mBAAmB,EAAE,QAAQ;AAChD,uBAAK,cAAc,iBAAiB,EAAE,QAAQ;AAG9C,uBAAK,cAAc,aAAa,EAAE,cAAc;AAChD,uBAAK,iBAAiB,WAAW,EAAE,QAAQ,UAAQ;AACjD,yBAAK,cAAc,KAAK,YAAY,QAAQ,4BAAQ,cAAc;AAClE,yBAAK,cAAc,KAAK,YAAY,QAAQ,4BAAQ,YAAY;AAAA,kBAClE,CAAC;AAID,uBAAK,cAAc,oBAAoB,EAAE,cAAc;AAEvD,uBAAK,cAAc,wBAAwB,EAAE,cAAc;AAE3D,uBAAK,cAAc,4BAA4B,EAAE,cAAc;AAE/D,uBAAK,cAAc,6BAA6B,EAAE,cAAc;AAKhE,2BAAS,cAAc,kBAAkB,EAAE,cAAc;AAAA,gBAG3D,CAAC;AAID,yBAAS,iBAAiB,sBAAsB,EAAE,QAAQ,eAAa;AACnE,4BAAU,iBAAiB,SAAS,WAAW;AAE3C,yBAAK,cAAc,yBAAyB,EAAE,cAAc;AAG5D,0BAAM,eAAe,KAAK,cAAc,wBAAwB;AAChE,iCAAa,cAAc,6BAA6B,EAAE,cAAc;AACxE,iCAAa,cAAc,8BAA8B,EAAE,cAAc;AACzE,iCAAa,cAAc,8BAA8B,EAAE,cAAc;AAGzE,iCAAa,cAAc,QAAQ,EAAE,cAAc;AAAA,kBACvD,CAAC;AAAA,gBACL,CAAC;AAGD,yBAAS,cAAc,oCAAoC,EAAE,iBAAiB,SAAS,WAAW;AAEhG,wBAAM,WAAW,KAAK,cAAc,eAAe;AAGnD,wBAAM,QAAQ,SAAS,cAAc,eAAe;AACpD,wBAAM,cAAc;AAAA,gBACtB,CAAC;AAGD,yBAAS,iBAAiB,uBAAuB,EAAE,QAAQ,gBAAc;AACrE,6BAAW,iBAAiB,SAAS,WAAW;AAE5C,yBAAK,cAAc,yBAAyB,EAAE,cAAc;AAG5D,yBAAK,cAAc,QAAQ,EAAE,cAAc;AAAA,kBAC/C,CAAC;AAAA,gBACL,CAAC;AAGD,yBAAS,cAAc,kCAAkC,EAAE,iBAAiB,SAAS,SAAS,OAAO;AAEjG,wBAAM,WAAW,KAAK,cAAc,eAAe;AACnD,0BAAQ,IAAI,SAAS;AAErB,2BAAS,cAAc,eAAe,EAAE,cAAc;AAGtD,2BAAS,iBAAiB,WAAW,EAAE,QAAQ,UAAQ;AACrD,yBAAK,cAAc,GAAG,EAAE,cAAc,KAAK,cAAc,GAAG,EAAE,YAC3D,QAAQ,4BAAQ,gBAAgB,EAChC,QAAQ,4BAAQ,cAAc;AAAA,kBACnC,CAAC;AAAA,gBACL,CAAC;AAAA,cAEH;AAAA,YAEF,CAAC,EACA,MAAM,CAAAE,WAAS,QAAQ,MAAM,UAAUA,MAAK,CAAC;AAAA,UAChD,CAAC;AACD,mBAAS,iBAAiB,oBAAoB,WAAY;AAExD,aAAC,gBAAgB,EAAE,QAAQ,SAAUG,UAAS;AAE5C,sBAAQ,IAAIA,QAAO;AAEnB,kBAAIC,UAAS,IAAIN,GAAE,SAAS,eAAeK,QAAO,CAAC;AAGnD,cAAAC,QAAO,OAAO,kBAAkB;AAChC,cAAAA,QAAO,OAAO,iBAAiB;AAC/B,cAAAA,QAAO,OAAO,iBAAiB;AAAA,gBAC7B,cAAc,SAAU,WAAW,QAAQ;AAMvC,sBAAI,OAAO,SAAS;AAEhB,wBAAI,SAAS,OAAO;AACpB,8BAAU,MAAM;AAAA,kBAEpB,OAAO;AAEH,0BAAM,wBAAmB,OAAO,OAAO;AAAA,kBAC3C;AAAA,gBACJ;AAAA,cACF;AAEA,cAAAA,QAAO,OAAO,QAAQ;AAAA,gBACpB;AAAA;AAAA,gBACA;AAAA;AAAA,gBACA;AAAA;AAAA,gBACA;AAAA;AAAA,gBACA;AAAA;AAAA,gBACA;AAAA;AAAA,gBACA;AAAA;AAAA,gBACA;AAAA;AAAA,gBACA;AAAA;AAAA,gBACA;AAAA;AAAA,gBACA;AAAA;AAAA,gBACA;AAAA;AAAA,gBACA;AAAA;AAAA,gBACA;AAAA;AAAA,gBACA;AAAA;AAAA,gBACA;AAAA;AAAA;AAAA,gBAEA;AAAA;AAAA,gBACA;AAAA;AAAA,gBACA;AAAA;AAAA,gBACA;AAAA,gBACA;AAAA;AAAA,gBACA;AAAA;AAAA;AAAA,cAEF;AAEA,cAAAA,QAAO,OAAO;AACd,uBAAS,cAAc,cAAc,EAAE,UAAU,IAAI,gBAAgB;AACrE,kBAAIC,OAAM,SAAS,eAAe,aAAa;AAC/C,kBAAI,QAAQ,SAAS,cAAc,OAAO;AAE1C,oBAAM,WAAW,IAAI,iBAAiB,CAAC,eAAeC,cAAa;AAC/D,sBAAM,cAAcF,QAAO,IAAI,KAAK;AACpC,wBAAQ,IAAI,OAAO;AACnB,wBAAQ,IAAI,WAAW;AACvB,yBAAQ,YAAY,eAAe;AAC/B,sBAAI,SAAS,SAAS,aAAa;AAC/B,0BAAM,OAAO;AACb,0BAAM,OAAO;AACb,0BAAM,OAAO;AACb,0BAAM,KAAK;AACX,0BAAM,QAAQ;AACd,oBAAAC,KAAI,YAAY,KAAK;AAAA,kBACzB,WAAW,SAAS,SAAS,cAAc;AACvC,0BAAM,OAAO;AACb,0BAAM,OAAO;AACb,0BAAM,OAAO;AACb,0BAAM,KAAK;AACX,0BAAM,QAAQ;AACd,oBAAAA,KAAI,YAAY,KAAK;AAAA,kBACzB,WAAW,SAAS,SAAS,iBAAiB;AAC1C,0BAAM,OAAO;AACb,0BAAM,OAAO;AACb,0BAAM,OAAO;AACb,0BAAM,KAAK;AACX,0BAAM,QAAQ;AACd,oBAAAA,KAAI,YAAY,KAAK;AAAA,kBACzB;AAAA,gBACJ;AAAA,cACJ,CAAC;AAGD,oBAAME,UAAS,EAAE,YAAY,MAAM,WAAW,MAAM,eAAe,MAAM,SAAS,KAAK;AAGvF,oBAAM,cAAc,SAAS,eAAe,gBAAgB;AAC5D,kBAAI,aAAa;AAEb,yBAAS,QAAQ,aAAaA,OAAM;AAAA,cACxC,OAAO;AACH,wBAAQ,IAAI,2BAA2B;AAAA,cAC3C;AAAA,YAEF,CAAC;AAED,kBAAM,iCAAiC;AAAA,cACrC,QAAQ;AAAA,cACR,SAAS;AAAA,gBACP,gBAAgB;AAAA,gBAChB,UAAU;AAAA,cACZ;AAAA,YACF,CAAC,EACA,KAAK,cAAY,SAAS,KAAK,CAAC,EAChC,KAAK,CAAAC,UAAQ;AACZ,sBAAQ,IAAIA,MAAK,MAAM;AACvB,kBAAGA,MAAK,WAAW,MAAK;AACtB,oBAAI,QAAQ;AAAA,kBAAC,cAAI;AAAA,kBAAS,cAAI;AAAA,kBAAQ,cAAI;AAAA,kBAAc,cAAI;AAAA,kBAAU,cAAI;AAAA,kBAAU,oBAAK;AAAA,kBAAa,oBAAK;AAAA,kBAAiB,0BAAM;AAAA,kBAAc,oBAAK;AAAA,kBACnJ,cAAI;AAAA,kBAAQ,cAAI;AAAA,kBAAW,cAAI;AAAA,kBAAQ,cAAI;AAAA,kBAAO,cAAI;AAAA,kBAAQ,cAAG;AAAA,kBAAS,cAAI;AAAA,kBAAS,cAAI;AAAA,kBAAS,cAAI;AAAA,kBAAO,cAAI;AAAA,kBAAS,oBAAK;AAAA,kBAAe,cAAI;AAAA,gBAAa;AACnK,sBAAM,mBAAmB,SAAS,iBAAiB,yCAAyC;AAE5F,sBAAM,WAAW,SAAS,iBAAiB,cAAc;AACzD,yBAAS,QAAQ,CAAAL,aAAW;AAE1B,0BAAQ,IAAIA,SAAQ,aAAa,YAAY,CAAC;AAE5C,kBAAAA,SAAQ,aAAa,cAAc,MAAMA,SAAQ,aAAa,YAAY,CAAC,CAAC;AAAA,gBAGhF,CAAC;AAED,yBAAS,cAAc,+BAA+B,EAAE,iBAAiB,SAAS,WAAW;AAE3F,uBAAK,cAAc,eAAe,EAAE,cAAc;AAGlD,uBAAK,iBAAiB,WAAW,EAAE,QAAQ,UAAQ;AACjD,0BAAMM,QAAO,KAAK;AAClB,4BAAOA,OAAM;AAAA,sBACX,KAAK;AAAM,6BAAK,cAAc;AAAa;AAAA,oBAC7C;AAAA,kBACF,CAAC;AAAA,gBACH,CAAC;AAED,yBAAS,cAAc,gCAAgC,EAAE,iBAAiB,SAAS,WAAW;AAE5F,wBAAM,QAAQ,KAAK,cAAc,eAAe;AAChD,sBAAI,MAAM,gBAAgB,4BAAQ;AAChC,0BAAM,cAAc;AAAA,kBACtB;AAGA,wBAAM,YAAY,KAAK,iBAAiB,aAAa;AACrD,4BAAU,QAAQ,UAAQ;AACxB,0BAAM,cAAc,KAAK,YAAY,KAAK;AAC1C,4BAAO,aAAa;AAAA,sBAClB,KAAK;AAAM,6BAAK,cAAc;AAAU;AAAA,sBACxC,KAAK;AAAM,6BAAK,cAAc;AAAY;AAAA,sBAC1C,KAAK;AAAM,6BAAK,cAAc;AAAS;AAAA,sBACvC,KAAK;AAAO,6BAAK,cAAc;AAAY;AAAA,sBAC3C,KAAK;AAAQ,6BAAK,cAAc;AAAc;AAAA,sBAC9C,KAAK;AAAQ,6BAAK,cAAc;AAAW;AAAA,sBAC3C,KAAK;AAAM,6BAAK,cAAc;AAAU;AAAA,sBACxC,KAAK;AAAQ,6BAAK,cAAc;AAAmB;AAAA,sBAEnD;AAAS,4BAAI,SAAS,KAAK,WAAW;AAAG;AAAA,oBAC3C;AAAA,kBACF,CAAC;AAAA,gBACH,CAAC;AAED,yBAAS,cAAc,oCAAoC,EAAE,iBAAiB,SAAS,WAAW;AAEhG,wBAAM,QAAQ,KAAK,cAAc,eAAe;AAChD,sBAAI,MAAM,gBAAgB,4BAAQ;AAChC,0BAAM,cAAc;AAAA,kBACtB;AAAA,gBACF,CAAC;AAED,yBAAS,cAAc,oCAAoC,EAAE,iBAAiB,SAAS,WAAW;AAEhG,wBAAM,QAAQ,KAAK,cAAc,eAAe;AAChD,sBAAI,MAAM,gBAAgB,4BAAQ;AAChC,0BAAM,cAAc;AAAA,kBACtB;AAAA,gBACF,CAAC;AAGD,yBAAS,cAAc,8BAA8B,EAAE,iBAAiB,SAAS,WAAW;AAE1F,wBAAM,aAAa,KAAK,cAAc,oCAAoC;AAC1E,sBAAI,WAAW,gBAAgB,gBAAM;AACnC,+BAAW,cAAc;AAAA,kBAC3B;AAGA,wBAAM,YAAY,SAAS,cAAc,oBAAoB;AAC7D,4BAAU,cAAc;AAGxB,wBAAM,WAAW,SAAS,cAAc,oBAAoB;AAC5D,2BAAS,cAAc;AAIvB,wBAAM,YAAY,SAAS,cAAc,gBAAgB;AACzD,0BAAQ,IAAI,SAAS;AACrB,4BAAU,cAAc;AAGxB,wBAAM,YAAY,SAAS,cAAc,iBAAiB;AAC1D,4BAAU,cAAc;AAAA,gBAC1B,CAAC;AAID,sBAAM,YAAY,SAAS,cAAc,yBAAyB;AAGlE,0BAAU,iBAAiB,SAAS,SAASX,IAAG;AAC9C,wBAAM,QAAQ,KAAK,cAAc,eAAe;AAChD,wBAAM,cAAc;AAElB,wBAAM,YAAY,KAAK,iBAAiB,aAAa;AAGrD,4BAAU,QAAQ,UAAQ;AACtB,0BAAM,cAAc,KAAK,YAAY,KAAK;AAC1C,0BAAM,cAAc;AAAA,sBAChB,gBAAM;AAAA,sBACN,gBAAM;AAAA,sBACN,gBAAM;AAAA,sBACN,gBAAM;AAAA,oBACV,EAAE,WAAW;AAEb,wBAAI,aAAa;AACb,2BAAK,cAAc;AAAA,oBACvB;AAAA,kBACJ,CAAC;AAAA,gBACL,CAAC;AAID,sBAAM,YAAY,SAAS,cAAc,sBAAsB;AAG/D,0BAAU,iBAAiB,SAAS,WAAW;AAE7C,uBAAK,aAAa,cAAc,OAAO;AAEvC,uBAAK,cAAc,iBAAiB,EAAE,QAAQ;AAE9C,uBAAK,cAAc,iBAAiB,EAAE,QAAQ;AAE9C,uBAAK,cAAc,aAAa,EAAE,cAAc;AAChD,uBAAK,iBAAiB,WAAW,EAAE,QAAQ,UAAQ;AACjD,yBAAK,cAAc,KAAK,YAAY,QAAQ,gBAAM,WAAW;AAC7D,yBAAK,cAAc,KAAK,YAAY,QAAQ,gBAAM,UAAU;AAAA,kBAC9D,CAAC;AAAA,gBACH,CAAC;AAKD,sBAAM,YAAY,SAAS,cAAc,sBAAsB;AAG/D,0BAAU,iBAAiB,SAAS,WAAW;AAE7C,uBAAK,aAAa,cAAc,OAAO;AAGvC,uBAAK,cAAc,iBAAiB,EAAE,QAAQ;AAC9C,uBAAK,cAAc,mBAAmB,EAAE,QAAQ;AAChD,uBAAK,cAAc,iBAAiB,EAAE,QAAQ;AAG9C,uBAAK,cAAc,aAAa,EAAE,cAAc;AAChD,uBAAK,iBAAiB,WAAW,EAAE,QAAQ,UAAQ;AACjD,yBAAK,cAAc,KAAK,YAAY,QAAQ,4BAAQ,cAAc;AAClE,yBAAK,cAAc,KAAK,YAAY,QAAQ,4BAAQ,YAAY;AAAA,kBAClE,CAAC;AAID,uBAAK,cAAc,oBAAoB,EAAE,cAAc;AAEvD,uBAAK,cAAc,wBAAwB,EAAE,cAAc;AAE3D,uBAAK,cAAc,4BAA4B,EAAE,cAAc;AAE/D,uBAAK,cAAc,6BAA6B,EAAE,cAAc;AAKhE,2BAAS,cAAc,kBAAkB,EAAE,cAAc;AAAA,gBAG3D,CAAC;AAID,yBAAS,iBAAiB,sBAAsB,EAAE,QAAQ,eAAa;AACnE,4BAAU,iBAAiB,SAAS,WAAW;AAE3C,yBAAK,cAAc,yBAAyB,EAAE,cAAc;AAG5D,0BAAM,eAAe,KAAK,cAAc,wBAAwB;AAChE,iCAAa,cAAc,6BAA6B,EAAE,cAAc;AACxE,iCAAa,cAAc,8BAA8B,EAAE,cAAc;AACzE,iCAAa,cAAc,8BAA8B,EAAE,cAAc;AAGzE,iCAAa,cAAc,QAAQ,EAAE,cAAc;AAAA,kBACvD,CAAC;AAAA,gBACL,CAAC;AAGD,yBAAS,cAAc,oCAAoC,EAAE,iBAAiB,SAAS,WAAW;AAEhG,wBAAM,WAAW,KAAK,cAAc,eAAe;AAGnD,wBAAM,QAAQ,SAAS,cAAc,eAAe;AACpD,wBAAM,cAAc;AAAA,gBACtB,CAAC;AAGD,yBAAS,iBAAiB,uBAAuB,EAAE,QAAQ,gBAAc;AACrE,6BAAW,iBAAiB,SAAS,WAAW;AAE5C,yBAAK,cAAc,yBAAyB,EAAE,cAAc;AAG5D,yBAAK,cAAc,QAAQ,EAAE,cAAc;AAAA,kBAC/C,CAAC;AAAA,gBACL,CAAC;AAGD,yBAAS,cAAc,kCAAkC,EAAE,iBAAiB,SAAS,SAAS,OAAO;AAEjG,wBAAM,WAAW,KAAK,cAAc,eAAe;AACnD,0BAAQ,IAAI,SAAS;AAErB,2BAAS,cAAc,eAAe,EAAE,cAAc;AAGtD,2BAAS,iBAAiB,WAAW,EAAE,QAAQ,UAAQ;AACrD,yBAAK,cAAc,GAAG,EAAE,cAAc,KAAK,cAAc,GAAG,EAAE,YAC3D,QAAQ,4BAAQ,gBAAgB,EAChC,QAAQ,4BAAQ,cAAc;AAAA,kBACnC,CAAC;AAAA,gBACL,CAAC;AAAA,cAEH;AAAA,YAEF,CAAC,EACA,MAAM,CAAAE,WAAS,QAAQ,MAAM,UAAUA,MAAK,CAAC;AAAA,UAChD,CAAC;AAAA,QACH;AAAA,QAEA,iBAAgB;AAEd,kBAAQ,IAAI,OAAO,OAAO,IAAI;AAC9B,gBAAM,iCAAiC;AAAA,YACrC,QAAQ;AAAA,YACR,SAAS;AAAA,cACP,gBAAgB;AAAA,cAChB,UAAU;AAAA,YACZ;AAAA,UACF,CAAC,EACA,KAAK,cAAY,SAAS,KAAK,CAAC,EAChC,KAAK,CAAAQ,UAAQ;AACZ,oBAAQ,IAAIA,MAAK,MAAM;AACvB,kBAAM,WAAW,SAAS,iBAAiB,cAAc;AACzD,qBAAS,QAAQ,CAAAL,aAAW;AAE1B,sBAAQ,IAAIA,SAAQ,aAAa,YAAY,CAAC;AAC9C,kBAAGA,SAAQ,aAAa,YAAY,MAAM,gBAAK;AAC7C,gBAAAA,SAAQ,aAAa,cAAc,KAAK;AAAA,cAC1C;AAAA,YAEF,CAAC;AAAA,UACH,CAAC,EACA,MAAM,CAAAH,WAAS,QAAQ,MAAM,UAAUA,MAAK,CAAC;AAAA,QAChD;AAAA,QACA,kBAAkB,YAAY;AAC5B,kBAAQ,IAAI,YAAY;AACxB,gBAAM,UAAU,WAAW,iBAAiB,UAAU;AACtD,gBAAM,aAAa;AACnB,kBAAQ,QAAQ,CAAC,WAAW;AAC1B,mBAAO,iBAAiB,SAAS,SAASF,IAAG;AAC3C,oBAAMY,OAAMZ,GAAE,cAAc,QAAQ;AACpC,kBAAIY;AAAK,2BAAW,OAAOA,IAAG,EAAE;AAAA,YAClC,CAAC;AAAA,UACH,CAAC;AAAA,QACH;AAAA,QAGA,WAAWZ,IAAG;AACZ,UAAAA,GAAE,eAAe;AACjB,cAAI,CAAC,KAAK,eAAe;AAAG;AAC5B,gBAAM,SAASA,GAAE;AACjB,iBAAO,aAAa,qBAAqB,IAAI;AAC7C,iBAAO,WAAW;AAClB,gBAAM,aAAa;AACnB,gBAAM,UAAU,KAAK;AACrB,mBAAS,kBAAkB;AACzB,mBAAO,WAAW;AAClB,mBAAO,gBAAgB,mBAAmB;AAC1C,yBAAa,WAAW,YAAY;AACpC,qBAAS,oBAAoB,oBAAoB,eAAe;AAChE,gBAAI,SAAS;AAEX,qBAAO,cAAc,IAAI,YAAY,aAAa,CAAC;AAAA,YAErD;AAAA,UACF;AACA,qBAAW,WAAW;AACpB,uBAAW,yBAAyB,cAAc;AAClD,qBAAS,iBAAiB,oBAAoB,eAAe;AAAA,UAC/D,GAAG,KAAK,EAAC,MAAM,KAAI,CAAC;AAAA,QACtB;AAAA,QAEA,2BAA2BA,IAAG;AAC5B,4BAAMA,GAAE,eAAe;AAAA,YACrB,UAAU,SAAS;AAAA,YACnB,SAAS,KAAK,gBAAgB;AAAA,YAC9B,aAAa;AAAA,YACb,SAAS;AAAA,YACT,WAAW;AAAA,YACX,cAAc;AAAA,YACd,SAAS,UAAU;AACjB,uBAAS,QAAQ;AAAA,YACnB;AAAA,UACF,CAAC;AAAA,QACH;AAAA,QAEA,sBAAsBA,IAAG;AACvB,UAAAA,GAAE,eAAe;AACjB,gBAAM,SAASA,GAAE;AACjB,gBAAM,aAAa,OAAO,QAAQ;AAClC,gBAAM,SAAS,KAAK,QAAQ,KAAK,UAAU;AAC3C,iBAAO,UAAU,OAAO,MAAM;AAC9B,iBAAO,UAAU,OAAO,MAAM;AAC9B,eAAK,4BAA4B;AAAA,QACnC;AAAA,QAEA,8BAA8B;AAC5B,gBAAM,WAAW,CAAC,KAAK,mBAAmB,KAAK,gBAAgB;AAC/D,cAAI,SAAS,KAAK,CAAAK,aAAWA,SAAQ,UAAU,SAAS,MAAM,CAAC,GAAG;AAChE,iBAAK,mCAAmC,UAAU,IAAI,MAAM;AAAA,UAC9D;AACA,cAAI,SAAS,MAAM,CAAAA,aAAW,CAACA,SAAQ,UAAU,SAAS,MAAM,CAAC,GAAG;AAClE,iBAAK,mCAAmC,UAAU,OAAO,MAAM;AAAA,UACjE;AAAA,QACF;AAAA;AAAA,QAoDA,mBAAmB,YAAY;AAC7B,gBAAMQ,OAAM,WAAW,MAAM;AAC7B,iBAAOA,KAAI,SAAS;AAAA,QACtB;AAAA;AAAA,QAGC,kBAAkBC,gBAAeC,UAAS;AACzC,gBAAM,WAAW,KAAK,yBAAyB,cAAcD,cAAa;AAC1E,mBAAS,QAAQC;AAAA,QACnB;AAAA,QAEC,cAAc,YAAY;AACzB,gBAAMC,YAAW,KAAK,mBAAmB,UAAU;AACnD,eAAK,kBAAkB,qCAAqCA,SAAQ;AAAA,QACtE;AAAA,QAEA,kBAAkB;AAChB,gBAAMC,SAAQ,YAAY,QAAQ;AAClC,gBAAM,aAAa;AACnB,gBAAM,gBAAgB;AAAA,YACpB,eAAe,CAAC,OAAMjB,OAAM;AAC1B,oBAAM,YAAW,MAAM;AACvB,yBAAW,OAAO,mBAAmB,SAAS;AAAA,YAChD;AAAA,YACA,OAAOiB;AAAA,UACT;AACA,iBAAO,IAAI,yCAAO,aAAa;AAAA,QACjC;AAAA,QAEA,cAAc,WAAW;AACvB,eAAK,SAAS,2BAAkB,cAAc,UAAU,SAAS,CAAC,GAAG,IAAK;AAAA,QAC5E;AAAA,QACA,gBAAgB,WAAW;AACzB,gBAAM,MAAM,UAAU,cAAc,8BAA8B;AAClE,eAAK,aAAa,cAAc,OAAO,KAAI;AAAA,YACzC,aAAa,IAAE,MAAK;AAAA,YACpB,UAAU;AAAA,YACV,WAAU;AAAA,YACV,mBAAmB;AAAA,UACrB,CAAC;AAAA,QACH;AAAA,QAEA,eAAe,WAAW;AACxB,gBAAM,MAAM,UAAU,cAAc,6BAA6B;AACjE,eAAK,YAAY,cAAc,OAAO,KAAK;AAAA,YACzC,mBAAmB,CAAC,iBAAiB;AAAA,YACrC,WAAU;AAAA,YACV,UAAU;AAAA,YACV,aAAa,IAAE,MAAK;AAAA,UACtB,CAAC;AAAA,QACH;AAAA,QACA,sBAAsB;AACpB,gBAAM,OAAO,YAAY,QAAQ;AACjC,gBAAM,aAAa;AAEnB,qBAAW,OAAO,0BAA0B,SAAS,MAAM;AAC3D,sBAAY,GAAG,uBAAuB,WAAW;AAC/C,kBAAM,eAAe,YAAY,QAAQ;AACzC,uBAAW,OAAO,0BAA0B,iBAAiB,MAAM;AAAA,UACrE,CAAC;AAAA,QACH;AAAA,QAEA,qBAAoB;AAClB,mBAAS,iBAAiB,6BAA6B,KAAK,yBAAyB,KAAK,IAAI,CAAC;AAC/F,mBAAS,iBAAiB,wBAAwB,KAAK,qBAAqB,KAAK,IAAI,CAAC;AAAA,QACxF;AAAA,QAEA,uBAAsB;AACpB,mBAAS,oBAAoB,6BAA6B,KAAK,wBAAwB;AACvF,mBAAS,oBAAoB,wBAAwB,KAAK,oBAAoB;AAAA,QAChF;AAAA,QAEA,yBAAyBjB,IAAG;AAC1B,kBAAQ,IAAI,0BAA0BA,GAAE,MAAM;AAC9C,eAAK,yBAAyB,aAAa,qBAAqB,IAAI;AAAA,QAEtE;AAAA,QAEA,qBAAqBA,IAAG;AACtB,kBAAQ,IAAI,0BAA0BA,GAAE,MAAM;AAC9C,eAAK,yBAAyB,gBAAgB,mBAAmB;AAAA,QAEnE;AAAA,QAGA,iBAAiB;AAEf,cAAI,KAAK,IAAI,SAAS,EAAE,WAAW,GAAG;AACpC,iBAAK,kBAAkB,UAAU,IAAI,eAAe;AACpD,iBAAK,kBAAkB,UAAU,OAAO,iBAAiB;AAEzD,kBAAM,UAAU,IAAI,OAAO,UAAU,QAAQ,KAAK,iBAAiB;AACnE,oBAAQ,KAAK;AACb,kBAAM,aAAa;AACnB,uBAAW,WAAW;AACpB,sBAAQ,KAAK;AACb,sBAAQ,QAAQ;AAChB,yBAAW,kBAAkB,UAAU,OAAO,eAAe;AAC7D,yBAAW,kBAAkB,UAAU,IAAI,iBAAiB;AAC5D,yBAAW,kBAAkB,gBAAgB,OAAO;AAAA,YACtD,GAAG,GAAI;AACP,mBAAO;AAAA,UACT;AACA,iBAAO;AAAA,QACT;AAAA,MAEF;AA1gCE,oBADK,wCACE,UAAS,EAAE,SAAS,QAAQ;AACnC,oBAFK,wCAEE,WAAU;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA;AAAA,MAEJ;AAAA;AAAA;;;ACnBF,MAEO;AAFP;AAAA;AAAA;AAAA;AAEA,MAAO,0BAAP,cAA6B,WAAW;AAAA,QAItC,UAAU;AACR,eAAK,OAAO;AAAA,QACd;AAAA,QAEA,aAAa;AACX,eAAK,QAAQ;AAAA,QACf;AAAA,QAEA,SAAS;AACP,cAAI,OAAO,OAAO,KAAK,sBAAsB;AAC7C,cAAI,KAAK,2BAA2B;AAClC,gBAAI,OAAO,OAAO,KAAK,sBAAsB;AAAA,UAC/C;AACA,iBAAO,kBAAkB;AAAA,QAC3B;AAAA,QAEA,UAAU;AAAA,QACV;AAAA,MAEF;AArBE,oBAFK,yBAEE,WAAU,CAAC,oBAAoB,kBAAkB;AAAA;AAAA;;;ACJ1D,MAEO;AAFP;AAAA;AAAA;AAAA;AAEA,MAAO,2BAAP,cAA6B,WAAW;AAAA,QAEtC,UAAU;AACR,eAAK,OAAO;AAAA,QACd;AAAA,QAEA,aAAa;AACX,eAAK,QAAQ;AAAA,QACf;AAAA,QAEA,SAAS;AACP,cAAI,KAAK,qBAAqB;AAC5B,kBAAM,aAAa,KAAK;AACxB,kBAAM,gBAAgB,IAAI,SAAS,UAAU;AAAA,UAC/C;AAAA,QACF;AAAA,QAEA,UAAU;AAAA,QACV;AAAA,MACF;AAlBE,oBADK,0BACE,WAAU,CAAE,eAAgB;AAAA;AAAA;;;ACHvB,WAASkB,GAAEA,IAAE;AAAC,QAAIC,KAAE,EAAE,IAAID,EAAC;AAAE,IAAAC,MAAGA,GAAE,QAAQ;AAAA,EAAC;AAAC,WAAS,EAAED,IAAE;AAAC,QAAIC,KAAE,EAAE,IAAID,EAAC;AAAE,IAAAC,MAAGA,GAAE,OAAO;AAAA,EAAC;AAApG,MAAI,GAAqG,GAA0+EC,IAAW;AAA9lF;AAAA;AAAA,MAAI,IAAE,oBAAI;AAA2F,MAAI,IAAE;AAAK,qBAAa,OAAO,WAAS,IAAE,SAASC,IAAE;AAAC,eAAOA;AAAA,MAAC,GAAG,UAAQ,SAASA,IAAE;AAAC,eAAOA;AAAA,MAAC,GAAE,EAAE,SAAO,SAASA,IAAE;AAAC,eAAOA;AAAA,MAAC,OAAK,IAAE,SAASH,IAAEC,IAAE;AAAC,eAAOD,MAAG,MAAM,UAAU,QAAQ,KAAKA,GAAE,SAAOA,KAAE,CAACA,EAAC,GAAE,SAASA,IAAE;AAAC,iBAAO,SAASA,IAAE;AAAC,gBAAGA,MAAGA,GAAE,YAAU,eAAaA,GAAE,YAAU,CAAC,EAAE,IAAIA,EAAC,GAAE;AAAC,kBAAIC,IAAEG,KAAE,MAAKF,KAAE,OAAO,iBAAiBF,EAAC,GAAE,KAAGC,KAAED,GAAE,OAAM,WAAU;AAAC,kBAAE,EAAC,wBAAuB,OAAKC,MAAG,CAACD,GAAE,MAAM,WAAWC,EAAC,GAAE,kBAAiB,KAAI,CAAC,GAAEA,KAAED,GAAE;AAAA,cAAK,IAAG,IAAE,SAASC,IAAE;AAAC,gBAAAD,GAAE,oBAAoB,oBAAmB,CAAC,GAAEA,GAAE,oBAAoB,mBAAkB,CAAC,GAAEA,GAAE,oBAAoB,SAAQ,CAAC,GAAE,OAAO,oBAAoB,UAAS,CAAC,GAAE,OAAO,KAAKC,EAAC,EAAE,QAAQ,SAASE,IAAE;AAAC,yBAAOH,GAAE,MAAMG,EAAC,IAAEF,GAAEE,EAAC;AAAA,gBAAC,CAAC,GAAE,EAAE,OAAOH,EAAC;AAAA,cAAC,EAAE,KAAKA,IAAE,EAAC,QAAOA,GAAE,MAAM,QAAO,QAAOA,GAAE,MAAM,QAAO,WAAUA,GAAE,MAAM,WAAU,WAAUA,GAAE,MAAM,WAAU,WAAUA,GAAE,MAAM,WAAU,UAASA,GAAE,MAAM,SAAQ,CAAC;AAAE,cAAAA,GAAE,iBAAiB,oBAAmB,CAAC,GAAEA,GAAE,iBAAiB,mBAAkB,CAAC,GAAEA,GAAE,iBAAiB,SAAQ,CAAC,GAAE,OAAO,iBAAiB,UAAS,CAAC,GAAEA,GAAE,MAAM,YAAU,UAASA,GAAE,MAAM,WAAS,cAAa,EAAE,IAAIA,IAAE,EAAC,SAAQ,GAAE,QAAO,EAAC,CAAC,GAAE,EAAE;AAAA,YAAC;AAAC,qBAAS,EAAEG,IAAE;AAAC,kBAAIF,IAAEI,IAAEC,KAAEH,GAAE,kBAAiBI,KAAE,WAASD,KAAE,OAAKA,IAAE,IAAEH,GAAE,wBAAuB,IAAE,WAAS,KAAG,GAAE,IAAED,GAAE;AAAU,kBAAG,MAAIF,GAAE,iBAAe,eAAaE,GAAE,SAAOF,GAAE,MAAM,SAAO,SAAO,WAASE,GAAE,WAASF,GAAE,MAAM,SAAO,eAAc,MAAIC,KAAE,SAASE,IAAE;AAAC,yBAAQH,KAAE,CAAC,GAAEG,MAAGA,GAAE,cAAYA,GAAE,sBAAsB;AAAS,kBAAAA,GAAE,WAAW,aAAWH,GAAE,KAAK,CAACG,GAAE,YAAWA,GAAE,WAAW,SAAS,CAAC,GAAEA,KAAEA,GAAE;AAAW,uBAAO,WAAU;AAAC,yBAAOH,GAAE,QAAQ,SAASG,IAAE;AAAC,wBAAIH,KAAEG,GAAE,CAAC,GAAEF,KAAEE,GAAE,CAAC;AAAE,oBAAAH,GAAE,MAAM,iBAAe,QAAOA,GAAE,YAAUC,IAAED,GAAE,MAAM,iBAAe;AAAA,kBAAI,CAAC;AAAA,gBAAC;AAAA,cAAC,EAAEA,EAAC,GAAEA,GAAE,MAAM,SAAO,KAAIK,KAAE,kBAAgBH,GAAE,YAAUF,GAAE,gBAAc,WAAWE,GAAE,UAAU,IAAE,WAAWA,GAAE,aAAa,KAAGF,GAAE,eAAa,WAAWE,GAAE,cAAc,IAAE,WAAWA,GAAE,iBAAiB,GAAE,WAASA,GAAE,aAAWG,KAAE,WAAWH,GAAE,SAAS,KAAG,aAAWA,GAAE,cAAYF,GAAE,MAAM,WAAS,WAAUK,KAAE,WAAWH,GAAE,SAAS,KAAG,aAAWA,GAAE,cAAYF,GAAE,MAAM,WAAS,WAAUA,GAAE,MAAM,SAAOK,KAAE,MAAKE,OAAIP,GAAE,MAAM,YAAUO,KAAGN,MAAGA,GAAE,GAAEG,OAAIC,OAAIL,GAAE,cAAc,IAAI,MAAM,oBAAmB,EAAC,SAAQ,KAAE,CAAC,CAAC,GAAEI,KAAEC,KAAG,MAAIH,GAAE,YAAU,CAACK,KAAG;AAAC,oBAAIC,KAAEN,GAAE;AAAU,6BAAWA,GAAE,aAAWF,GAAE,MAAM,YAAU,YAAUQ,KAAE,QAAM,UAAS,EAAE,EAAC,kBAAiBA,IAAE,wBAAuB,KAAE,CAAC;AAAA,cAAC;AAAA,YAAC;AAAC,qBAAS,IAAG;AAAC,gBAAE,EAAC,wBAAuB,MAAG,kBAAiB,KAAI,CAAC;AAAA,YAAC;AAAA,UAAC,EAAER,EAAC;AAAA,QAAC,CAAC,GAAEA;AAAA,MAAC,GAAG,UAAQ,SAASG,IAAE;AAAC,eAAOA,MAAG,MAAM,UAAU,QAAQ,KAAKA,GAAE,SAAOA,KAAE,CAACA,EAAC,GAAEH,EAAC,GAAEG;AAAA,MAAC,GAAE,EAAE,SAAO,SAASA,IAAE;AAAC,eAAOA,MAAG,MAAM,UAAU,QAAQ,KAAKA,GAAE,SAAOA,KAAE,CAACA,EAAC,GAAE,CAAC,GAAEA;AAAA,MAAC;AAAG,MAAID,KAAE;AAAE,MAAO,uBAAQA;AAAA;AAAA;;;ACAtmF,MAAAO,KAKM,oBAgDC;AArDP;AAAA;AAAA;AAAA;AACA,MAAAC;AACA;AAGA,MAAM,sBAAqBD,MAAA,cAAc,WAAW;AAAA,QAGhD,UAAU;AACN,eAAK,OAAO;AAAA,QAChB;AAAA,QAEA,aAAa;AACT,eAAK,QAAQ;AAAA,QACjB;AAAA;AAAA,QAGA,WAAWE,IAAG;AACV,gBAAM,WAAY,KAAK,WAAW,cAAc,UAAU;AAC1D,cAAI,SAAS,MAAM,KAAK,MAAM,IAAI;AAC9B,YAAAA,GAAE,eAAe;AACjB;AAAA,UACJ;AACA,gBAAM,mBAAmB,KAAK;AAC9B,2BAAiB,UAAU,IAAI,MAAM;AAAA,QACzC;AAAA,QAEA,SAAS;AAEL,cAAI,KAAK,eAAe;AACpB,kBAAM,WAAY,KAAK,WAAW,cAAc,UAAU;AAC1D,iCAAS,QAAQ;AAAA,UACrB;AAGA,eAAK,WAAW,IAAI,iBAAiB,CAAC,eAAe,aAAa;AAC9D,qBAAQ,YAAY,eAAe;AAC/B,kBAAI,SAAS,SAAS,aAAa;AAE/B,yBAAS,OAAO,cAAc,UAAU,KAAK,qBAAS,SAAS,OAAO,cAAc,UAAU,CAAC;AAAA,cACnG;AAAA,YACJ;AAAA,UACJ,CAAC;AAED,eAAK,SAAS,QAAQ,KAAK,SAAS,EAAE,WAAW,MAAM,SAAS,KAAK,CAAC;AAAA,QAC1E;AAAA,QAEA,UAAU;AACN,eAAK,SAAS,WAAW;AAAA,QAC7B;AAAA,MAEJ,GA7CI,cADuBF,KAChB,WAAU,CAAC,YAAY,MAAM,IACpC,cAFuBA,KAEhB,kBAAiB,uBAFDA;AAgD3B,MAAO,8BAAQ;AAAA;AAAA;;;ACrDf,MAEO;AAFP;AAAA;AAAA;AAAA;AAEA,MAAO,6BAAP,cAA6B,WAAW;AAAA,QAEtC,UAAU;AAAA,QAEV;AAAA,MAEF;AALE,oBADK,4BACE,UAAS,EAAE,MAAM,OAAO;AAAA;AAAA;;;ACHjC;AAAA;AACA,OAAC,SAAS,iCAAiCG,OAAM,SAAS;AACzD,YAAG,OAAO,YAAY,YAAY,OAAO,WAAW;AACnD,iBAAO,UAAU,QAAQ;AAAA,iBAClB,OAAO,WAAW,cAAc,OAAO;AAC9C,iBAAO,CAAC,GAAG,OAAO;AAAA,iBACX,OAAO,YAAY;AAC1B,kBAAQ,SAAS,IAAI,QAAQ;AAAA;AAE7B,UAAAA,MAAK,SAAS,IAAI,QAAQ;AAAA,MAC5B,GAAG,QAAQ,WAAW;AACtB;AAAA;AAAA,UAAiB,WAAW;AAClB;AACA,gBAAI,sBAAuB;AAAA;AAAA,cAE/B;AAAA;AAAA,gBACC,SAAS,yBAAyBC,UAASC,sBAAqB;AAIvE,yBAAO,eAAeD,UAAS,cAAe;AAAA,oBAC5C,OAAO;AAAA,kBACT,CAAE;AACF,kBAAAA,SAAQ,eAAeA,SAAQ,kBAAkBA,SAAQ,gBAAgBA,SAAQ,YAAY;AAC7F,sBAAI,cAAcC,qBAAoB,GAAG;AACzC,sBAAI,YAAY,SAAUC,KAAI;AAC5B,wBAAI,QAAQA,IAAG,OACb,QAAQA,IAAG,OACXC,MAAKD,IAAG,IACR,UAAUA,IAAG,SACb,WAAWA,IAAG,UACd,YAAYA,IAAG,WACf,mBAAmBA,IAAG,kBACtBE,eAAcF,IAAG,aACjB,UAAUA,IAAG;AACf,2BAAO;AAAA,sBACL,MAAM,YAAY,aAAa;AAAA,sBAC/B;AAAA,sBACA;AAAA,sBACA,IAAIC;AAAA,sBACJ;AAAA,sBACA;AAAA,sBACA;AAAA,sBACA;AAAA,sBACA,aAAaC;AAAA,sBACb;AAAA,oBACF;AAAA,kBACF;AACA,kBAAAJ,SAAQ,YAAY;AACpB,sBAAI,gBAAgB,SAAU,SAAS;AACrC,2BAAO;AAAA,sBACL,MAAM,YAAY,aAAa;AAAA,sBAC/B;AAAA,oBACF;AAAA,kBACF;AACA,kBAAAA,SAAQ,gBAAgB;AACxB,sBAAI,kBAAkB,SAAU,QAAQ;AACtC,wBAAI,WAAW,QAAQ;AACrB,+BAAS;AAAA,oBACX;AACA,2BAAO;AAAA,sBACL,MAAM,YAAY,aAAa;AAAA,sBAC/B;AAAA,oBACF;AAAA,kBACF;AACA,kBAAAA,SAAQ,kBAAkB;AAC1B,sBAAI,eAAe,WAAY;AAC7B,2BAAO;AAAA,sBACL,MAAM,YAAY,aAAa;AAAA,oBACjC;AAAA,kBACF;AACA,kBAAAA,SAAQ,eAAe;AAAA,gBAEjB;AAAA;AAAA;AAAA,cAEA;AAAA;AAAA,gBACC,SAAS,yBAAyBA,UAASC,sBAAqB;AAIvE,yBAAO,eAAeD,UAAS,cAAe;AAAA,oBAC5C,OAAO;AAAA,kBACT,CAAE;AACF,kBAAAA,SAAQ,WAAW;AACnB,sBAAI,cAAcC,qBAAoB,GAAG;AACzC,sBAAI,WAAW,SAAUC,KAAI;AAC3B,wBAAI,QAAQA,IAAG,OACbC,MAAKD,IAAG,IACR,SAASA,IAAG,QACZ,WAAWA,IAAG;AAChB,2BAAO;AAAA,sBACL,MAAM,YAAY,aAAa;AAAA,sBAC/B;AAAA,sBACA,IAAIC;AAAA,sBACJ;AAAA,sBACA;AAAA,oBACF;AAAA,kBACF;AACA,kBAAAH,SAAQ,WAAW;AAAA,gBAEb;AAAA;AAAA;AAAA,cAEA;AAAA;AAAA,gBACC,SAAS,yBAAyBA,UAASC,sBAAqB;AAIvE,yBAAO,eAAeD,UAAS,cAAe;AAAA,oBAC5C,OAAO;AAAA,kBACT,CAAE;AACF,kBAAAA,SAAQ,gBAAgBA,SAAQ,aAAaA,SAAQ,UAAU;AAC/D,sBAAI,cAAcC,qBAAoB,GAAG;AACzC,sBAAI,UAAU,SAAUC,KAAI;AAC1B,wBAAI,QAAQA,IAAG,OACb,QAAQA,IAAG,OACXC,MAAKD,IAAG,IACR,WAAWA,IAAG,UACd,UAAUA,IAAG,SACb,mBAAmBA,IAAG,kBACtBE,eAAcF,IAAG,aACjB,UAAUA,IAAG;AACf,2BAAO;AAAA,sBACL,MAAM,YAAY,aAAa;AAAA,sBAC/B;AAAA,sBACA;AAAA,sBACA,IAAIC;AAAA,sBACJ;AAAA,sBACA;AAAA,sBACA;AAAA,sBACA,aAAaC;AAAA,sBACb;AAAA,oBACF;AAAA,kBACF;AACA,kBAAAJ,SAAQ,UAAU;AAClB,sBAAI,aAAa,SAAUG,KAAI,UAAU;AACvC,2BAAO;AAAA,sBACL,MAAM,YAAY,aAAa;AAAA,sBAC/B,IAAIA;AAAA,sBACJ;AAAA,oBACF;AAAA,kBACF;AACA,kBAAAH,SAAQ,aAAa;AACrB,sBAAI,gBAAgB,SAAUG,KAAI,aAAa;AAC7C,2BAAO;AAAA,sBACL,MAAM,YAAY,aAAa;AAAA,sBAC/B,IAAIA;AAAA,sBACJ;AAAA,oBACF;AAAA,kBACF;AACA,kBAAAH,SAAQ,gBAAgB;AAAA,gBAElB;AAAA;AAAA;AAAA,cAEA;AAAA;AAAA,gBACC,SAAS,yBAAyBA,UAASC,sBAAqB;AAIvE,yBAAO,eAAeD,UAAS,cAAe;AAAA,oBAC5C,OAAO;AAAA,kBACT,CAAE;AACF,kBAAAA,SAAQ,eAAeA,SAAQ,UAAUA,SAAQ,WAAW;AAC5D,sBAAI,cAAcC,qBAAoB,GAAG;AACzC,sBAAI,WAAW,WAAY;AACzB,2BAAO;AAAA,sBACL,MAAM,YAAY,aAAa;AAAA,oBACjC;AAAA,kBACF;AACA,kBAAAD,SAAQ,WAAW;AACnB,sBAAI,UAAU,SAAU,OAAO;AAC7B,2BAAO;AAAA,sBACL,MAAM,YAAY,aAAa;AAAA,sBAC/B;AAAA,oBACF;AAAA,kBACF;AACA,kBAAAA,SAAQ,UAAU;AAClB,sBAAI,eAAe,SAAU,WAAW;AACtC,2BAAO;AAAA,sBACL,MAAM,YAAY,aAAa;AAAA,sBAC/B;AAAA,oBACF;AAAA,kBACF;AACA,kBAAAA,SAAQ,eAAe;AAAA,gBAEjB;AAAA;AAAA;AAAA,cAEA;AAAA;AAAA,gBACC,SAAS,yBAAyBA,UAASC,sBAAqB;AAIvE,sBAAI,gBAAgB,QAAQ,KAAK,iBAAiB,SAAUI,KAAI,MAAMC,OAAM;AAC1E,wBAAIA,SAAQ,UAAU,WAAW;AAAG,+BAAS,IAAI,GAAG,IAAI,KAAK,QAAQC,KAAI,IAAI,GAAG,KAAK;AACnF,4BAAIA,OAAM,EAAE,KAAK,OAAO;AACtB,8BAAI,CAACA;AAAI,4BAAAA,MAAK,MAAM,UAAU,MAAM,KAAK,MAAM,GAAG,CAAC;AACnD,0BAAAA,IAAG,CAAC,IAAI,KAAK,CAAC;AAAA,wBAChB;AAAA,sBACF;AACA,2BAAOF,IAAG,OAAOE,OAAM,MAAM,UAAU,MAAM,KAAK,IAAI,CAAC;AAAA,kBACzD;AACA,sBAAI,kBAAkB,QAAQ,KAAK,mBAAmB,SAAUC,MAAK;AACnE,2BAAOA,QAAOA,KAAI,aAAaA,OAAM;AAAA,sBACnC,WAAWA;AAAA,oBACb;AAAA,kBACF;AACA,yBAAO,eAAeR,UAAS,cAAe;AAAA,oBAC5C,OAAO;AAAA,kBACT,CAAE;AACF,sBAAI,cAAc,gBAAgBC,qBAAoB,GAAG,CAAC;AAE1D,sBAAI,YAAY,gBAAgBA,qBAAoB,GAAG,CAAC;AACxD,sBAAI,YAAYA,qBAAoB,GAAG;AACvC,sBAAI,WAAWA,qBAAoB,GAAG;AACtC,sBAAI,UAAUA,qBAAoB,GAAG;AACrC,sBAAI,SAASA,qBAAoB,GAAG;AACpC,sBAAI,eAAeA,qBAAoB,GAAG;AAC1C,sBAAI,cAAcA,qBAAoB,GAAG;AACzC,sBAAI,aAAaA,qBAAoB,GAAG;AACxC,sBAAI,UAAUA,qBAAoB,GAAG;AACrC,sBAAI,aAAaA,qBAAoB,GAAG;AACxC,sBAAI,UAAU,gBAAgBA,qBAAoB,GAAG,CAAC;AACtD,sBAAI,cAAc,gBAAgBA,qBAAoB,GAAG,CAAC;AAE1D,sBAAI,UAAU,sBAAsB,SAAS,gBAAgB,SAAS,mBAAmB,SAAS,gBAAgB;AAClH,sBAAI,gBAAgB,CAAC;AAKrB,sBAAIQ;AAAA;AAAA,oBAAuB,WAAY;AACrC,+BAASA,SAAQC,UAAS,YAAY;AACpC,4BAAIA,aAAY,QAAQ;AACtB,0BAAAA,WAAU;AAAA,wBACZ;AACA,4BAAI,eAAe,QAAQ;AACzB,uCAAa,CAAC;AAAA,wBAChB;AACA,4BAAI,QAAQ;AACZ,4BAAI,WAAW,cAAc,QAAW;AACtC,kCAAQ,KAAK,qLAAqL;AAAA,wBACpM;AACA,6BAAK,SAAS,YAAY,QAAQ;AAAA,0BAAI,CAAC,WAAW,gBAAgBD,SAAQ,SAAS,SAAS,UAAU;AAAA;AAAA;AAAA,0BAGtG;AAAA,4BACE,YAAY,SAAU,GAAG,aAAa;AACpC,qCAAO,cAAc,CAAC,GAAG,aAAa,IAAI;AAAA,4BAC5C;AAAA,0BACF;AAAA,wBAAC;AACD,4BAAI,wBAAwB,GAAG,QAAQ,MAAM,KAAK,QAAQ,WAAW,cAAc;AACnF,4BAAI,qBAAqB,QAAQ;AAC/B,kCAAQ,KAAK,mCAAmC,qBAAqB,KAAK,IAAI,CAAC;AAAA,wBACjF;AACA,4BAAI,gBAAgB,OAAOC,aAAY,WAAW,SAAS,cAAcA,QAAO,IAAIA;AACpF,4BAAI,EAAE,yBAAyB,oBAAoB,yBAAyB,oBAAoB;AAC9F,gCAAM,UAAU,qEAAqE;AAAA,wBACvF;AACA,6BAAK,iBAAiB,cAAc,SAAS,YAAY;AACzD,6BAAK,sBAAsB,cAAc,SAAS,YAAY;AAC9D,6BAAK,2BAA2B,cAAc,SAAS,YAAY;AACnE,6BAAK,mBAAmB,KAAK,uBAAuB,KAAK;AACzD,6BAAK,OAAO,gBAAgB,KAAK,4BAA4B,KAAK,OAAO;AACzE,4BAAI,CAAC,CAAC,QAAQ,QAAQ,EAAE,SAAS,GAAG,OAAO,KAAK,OAAO,qBAAqB,CAAC,GAAG;AAC9E,+BAAK,OAAO,wBAAwB;AAAA,wBACtC;AACA,4BAAI,WAAW,iBAAiB,OAAO,WAAW,kBAAkB,YAAY;AAC9E,8BAAIC,MAAK,WAAW,yBAAyB,SAAS,WAAW,gBAAgB,IAAI,OAAO,WAAW,aAAa;AACpH,+BAAK,OAAO,gBAAgBA,IAAG,KAAK,KAAKA,GAAE;AAAA,wBAC7C;AACA,4BAAI,KAAK,gBAAgB;AACvB,+BAAK,gBAAgB,IAAI,aAAa,aAAa;AAAA,4BACjD,SAAS;AAAA,4BACT,YAAY,KAAK,OAAO;AAAA,4BACxB,WAAW,KAAK,OAAO;AAAA,0BACzB,CAAC;AAAA,wBACH,OAAO;AACL,+BAAK,gBAAgB,IAAI,aAAa,cAAc;AAAA,4BAClD,SAAS;AAAA,4BACT,YAAY,KAAK,OAAO;AAAA,4BACxB,UAAU,SAAUC,OAAM;AACxB,qCAAO,MAAM,WAAW,OAAOA,KAAI;AAAA,4BACrC;AAAA,0BACF,CAAC;AAAA,wBACH;AACA,6BAAK,cAAc;AACnB,6BAAK,SAAS,IAAI,QAAQ,QAAQ;AAClC,6BAAK,gBAAgB,WAAW;AAChC,6BAAK,gBAAgB,WAAW;AAChC,6BAAK,aAAa,WAAW;AAC7B,6BAAK,gBAAgB;AACrB,6BAAK,aAAa,CAAC,CAAC,KAAK,OAAO;AAChC,6BAAK,mBAAmB;AACxB,6BAAK,qBAAqB;AAC1B,6BAAK,UAAU;AACf,6BAAK,oBAAoB,KAAK,0BAA0B;AACxD,6BAAK,WAAW,GAAG,QAAQ,YAAY,KAAK,cAAc,SAAS,UAAU;AAK7E,6BAAK,aAAa,KAAK,cAAc;AACrC,4BAAI,CAAC,KAAK,YAAY;AACpB,8BAAI,mBAAmB,OAAO,iBAAiB,KAAK,cAAc,OAAO,EAAE;AAC3E,8BAAI,oBAAoB,OAAO,iBAAiB,SAAS,eAAe,EAAE;AAC1E,8BAAI,qBAAqB,mBAAmB;AAC1C,iCAAK,aAAa;AAAA,0BACpB;AAAA,wBACF;AACA,6BAAK,WAAW;AAAA,0BACd,YAAY;AAAA,wBACd;AACA,4BAAI,KAAK,kBAAkB;AAEzB,+BAAK,gBAAgB,KAAK,cAAc;AAExC,+BAAK,iBAAiB,KAAK,cAAc;AAAA,wBAC3C;AAEA,6BAAK,iBAAiB,KAAK,OAAO;AAElC,6BAAK,eAAe,KAAK,OAAO;AAEhC,4BAAI,KAAK,cAAc,SAAS,KAAK,gBAAgB;AACnD,8BAAI,cAAc,KAAK,cAAc,MAAM,MAAM,KAAK,OAAO,SAAS;AACtE,+BAAK,eAAe,KAAK,aAAa,OAAO,WAAW;AAAA,wBAC1D;AAEA,4BAAI,KAAK,cAAc,SAAS;AAC9B,+BAAK,cAAc,QAAQ,QAAQ,SAAUC,SAAQ;AACnD,kCAAM,eAAe,KAAK;AAAA,8BACxB,OAAOA,QAAO;AAAA,8BACd,OAAOA,QAAO;AAAA,8BACd,UAAU,CAAC,CAACA,QAAO;AAAA,8BACnB,UAAUA,QAAO,YAAYA,QAAO,WAAW;AAAA,8BAC/C,aAAaA,QAAO,UAAU,MAAMA,QAAO,aAAa,aAAa;AAAA,8BACrE,mBAAmB,GAAG,QAAQ,uBAAuBA,QAAO,QAAQ,gBAAgB;AAAA,4BACtF,CAAC;AAAA,0BACH,CAAC;AAAA,wBACH;AACA,6BAAK,UAAU,KAAK,QAAQ,KAAK,IAAI;AACrC,6BAAK,WAAW,KAAK,SAAS,KAAK,IAAI;AACvC,6BAAK,UAAU,KAAK,QAAQ,KAAK,IAAI;AACrC,6BAAK,WAAW,KAAK,SAAS,KAAK,IAAI;AACvC,6BAAK,aAAa,KAAK,WAAW,KAAK,IAAI;AAC3C,6BAAK,WAAW,KAAK,SAAS,KAAK,IAAI;AACvC,6BAAK,eAAe,KAAK,aAAa,KAAK,IAAI;AAC/C,6BAAK,cAAc,KAAK,YAAY,KAAK,IAAI;AAC7C,6BAAK,eAAe,KAAK,aAAa,KAAK,IAAI;AAC/C,6BAAK,eAAe,KAAK,aAAa,KAAK,IAAI;AAC/C,6BAAK,eAAe,KAAK,aAAa,KAAK,IAAI;AAC/C,6BAAK,eAAe,KAAK,aAAa,KAAK,IAAI;AAC/C,6BAAK,cAAc,KAAK,YAAY,KAAK,IAAI;AAC7C,6BAAK,eAAe,KAAK,aAAa,KAAK,IAAI;AAC/C,6BAAK,kBAAkB,KAAK,gBAAgB,KAAK,IAAI;AACrD,6BAAK,eAAe,KAAK,aAAa,KAAK,IAAI;AAE/C,4BAAI,KAAK,cAAc,UAAU;AAC/B,8BAAI,CAAC,KAAK,OAAO,QAAQ;AACvB,oCAAQ,KAAK,+DAA+D;AAAA,8BAC1E,SAASH;AAAA,4BACX,CAAC;AAAA,0BACH;AACA,+BAAK,cAAc;AACnB;AAAA,wBACF;AAEA,6BAAK,KAAK;AAAA,sBACZ;AACA,6BAAO,eAAeD,UAAS,YAAY;AAAA,wBACzC,KAAK,WAAY;AACf,iCAAO,OAAO,kBAAkB;AAAA,4BAC9B,IAAI,UAAU;AACZ,qCAAO;AAAA,4BACT;AAAA,4BACA,IAAI,YAAY;AACd,qCAAO,YAAY;AAAA,4BACrB;AAAA,0BACF,CAAC;AAAA,wBACH;AAAA,wBACA,YAAY;AAAA,wBACZ,cAAc;AAAA,sBAChB,CAAC;AACD,sBAAAA,SAAQ,UAAU,OAAO,WAAY;AACnC,4BAAI,KAAK,aAAa;AACpB;AAAA,wBACF;AACA,6BAAK,iBAAiB;AACtB,6BAAK,gBAAgB;AACrB,6BAAK,iBAAiB;AACtB,6BAAK,OAAO,UAAU,KAAK,OAAO;AAClC,6BAAK,QAAQ;AACb,6BAAK,mBAAmB;AACxB,4BAAI,gBAAgB,CAAC,KAAK,OAAO,YAAY,KAAK,cAAc,QAAQ,aAAa,UAAU;AAC/F,4BAAI,eAAe;AACjB,+BAAK,QAAQ;AAAA,wBACf;AACA,6BAAK,cAAc;AACnB,4BAAI,iBAAiB,KAAK,OAAO;AAEjC,4BAAI,kBAAkB,OAAO,mBAAmB,YAAY;AAC1D,yCAAe,KAAK,IAAI;AAAA,wBAC1B;AAAA,sBACF;AACA,sBAAAA,SAAQ,UAAU,UAAU,WAAY;AACtC,4BAAI,CAAC,KAAK,aAAa;AACrB;AAAA,wBACF;AACA,6BAAK,sBAAsB;AAC3B,6BAAK,cAAc,OAAO;AAC1B,6BAAK,eAAe,OAAO,KAAK,cAAc,OAAO;AACrD,6BAAK,WAAW;AAChB,4BAAI,KAAK,kBAAkB;AACzB,+BAAK,cAAc,UAAU,KAAK;AAAA,wBACpC;AACA,6BAAK,aAAa,YAAY;AAC9B,6BAAK,cAAc;AAAA,sBACrB;AACA,sBAAAA,SAAQ,UAAU,SAAS,WAAY;AACrC,4BAAI,KAAK,cAAc,YAAY;AACjC,+BAAK,cAAc,OAAO;AAAA,wBAC5B;AACA,4BAAI,KAAK,eAAe,YAAY;AAClC,+BAAK,mBAAmB;AACxB,+BAAK,MAAM,OAAO;AAClB,+BAAK,eAAe,OAAO;AAAA,wBAC7B;AACA,+BAAO;AAAA,sBACT;AACA,sBAAAA,SAAQ,UAAU,UAAU,WAAY;AACtC,4BAAI,CAAC,KAAK,cAAc,YAAY;AAClC,+BAAK,cAAc,QAAQ;AAAA,wBAC7B;AACA,4BAAI,CAAC,KAAK,eAAe,YAAY;AACnC,+BAAK,sBAAsB;AAC3B,+BAAK,MAAM,QAAQ;AACnB,+BAAK,eAAe,QAAQ;AAAA,wBAC9B;AACA,+BAAO;AAAA,sBACT;AACA,sBAAAA,SAAQ,UAAU,gBAAgB,SAAU,MAAM,UAAU;AAC1D,4BAAI,aAAa,QAAQ;AACvB,qCAAW;AAAA,wBACb;AACA,4BAAI,CAAC,QAAQ,CAAC,KAAK,IAAI;AACrB,iCAAO;AAAA,wBACT;AACA,4BAAIN,MAAK,KAAK,IACZD,MAAK,KAAK,SACV,UAAUA,QAAO,SAAS,KAAKA,KAC/B,KAAK,KAAK,OACV,QAAQ,OAAO,SAAS,KAAK,IAC7B,KAAK,KAAK,OACV,QAAQ,OAAO,SAAS,KAAK;AAC/B,4BAAI,QAAQ,WAAW,IAAI,KAAK,OAAO,aAAa,OAAO,IAAI;AAC/D,6BAAK,OAAO,UAAU,GAAG,QAAQ,eAAeC,KAAI,IAAI,CAAC;AACzD,4BAAI,UAAU;AACZ,+BAAK,cAAc,aAAa,YAAY,OAAO,eAAe;AAAA,4BAChE,IAAIA;AAAA,4BACJ;AAAA,4BACA;AAAA,4BACA,YAAY,SAAS,MAAM,QAAQ,MAAM,QAAQ;AAAA,0BACnD,CAAC;AAAA,wBACH;AACA,+BAAO;AAAA,sBACT;AACA,sBAAAM,SAAQ,UAAU,kBAAkB,SAAU,MAAM;AAClD,4BAAI,CAAC,QAAQ,CAAC,KAAK,IAAI;AACrB,iCAAO;AAAA,wBACT;AACA,4BAAIN,MAAK,KAAK,IACZD,MAAK,KAAK,SACV,UAAUA,QAAO,SAAS,KAAKA,KAC/B,KAAK,KAAK,OACV,QAAQ,OAAO,SAAS,KAAK,IAC7B,KAAK,KAAK,OACV,QAAQ,OAAO,SAAS,KAAK;AAC/B,4BAAI,QAAQ,WAAW,IAAI,KAAK,OAAO,aAAa,OAAO,IAAI;AAC/D,6BAAK,OAAO,UAAU,GAAG,QAAQ,eAAeC,KAAI,KAAK,CAAC;AAC1D,6BAAK,cAAc,aAAa,YAAY,OAAO,eAAe;AAAA,0BAChE,IAAIA;AAAA,0BACJ;AAAA,0BACA;AAAA,0BACA,YAAY,SAAS,MAAM,QAAQ,MAAM,QAAQ;AAAA,wBACnD,CAAC;AACD,+BAAO;AAAA,sBACT;AACA,sBAAAM,SAAQ,UAAU,eAAe,WAAY;AAC3C,4BAAI,QAAQ;AACZ,6BAAK,OAAO,MAAM,QAAQ,SAAU,MAAM;AACxC,iCAAO,MAAM,cAAc,IAAI;AAAA,wBACjC,CAAC;AACD,+BAAO;AAAA,sBACT;AACA,sBAAAA,SAAQ,UAAU,iBAAiB,WAAY;AAC7C,4BAAI,QAAQ;AACZ,6BAAK,OAAO,MAAM,QAAQ,SAAU,MAAM;AACxC,iCAAO,MAAM,gBAAgB,IAAI;AAAA,wBACnC,CAAC;AACD,+BAAO;AAAA,sBACT;AACA,sBAAAA,SAAQ,UAAU,2BAA2B,SAAU,OAAO;AAC5D,4BAAI,QAAQ;AACZ,6BAAK,OAAO,YAAY,OAAO,SAAU,MAAM;AAC7C,iCAAO,KAAK,UAAU;AAAA,wBACxB,CAAC,EAAE,QAAQ,SAAU,MAAM;AACzB,iCAAO,MAAM,YAAY,IAAI;AAAA,wBAC/B,CAAC;AACD,+BAAO;AAAA,sBACT;AACA,sBAAAA,SAAQ,UAAU,oBAAoB,SAAU,YAAY;AAC1D,4BAAI,QAAQ;AACZ,6BAAK,OAAO,YAAY,OAAO,SAAUP,KAAI;AAC3C,8BAAIC,MAAKD,IAAG;AACZ,iCAAOC,QAAO;AAAA,wBAChB,CAAC,EAAE,QAAQ,SAAU,MAAM;AACzB,iCAAO,MAAM,YAAY,IAAI;AAAA,wBAC/B,CAAC;AACD,+BAAO;AAAA,sBACT;AACA,sBAAAM,SAAQ,UAAU,yBAAyB,SAAU,UAAU;AAC7D,4BAAI,QAAQ;AACZ,4BAAI,aAAa,QAAQ;AACvB,qCAAW;AAAA,wBACb;AACA,6BAAK,OAAO,uBAAuB,QAAQ,SAAU,MAAM;AACzD,gCAAM,YAAY,IAAI;AAGtB,8BAAI,UAAU;AACZ,kCAAM,eAAe,KAAK,KAAK;AAAA,0BACjC;AAAA,wBACF,CAAC;AACD,+BAAO;AAAA,sBACT;AACA,sBAAAA,SAAQ,UAAU,eAAe,SAAU,mBAAmB;AAC5D,4BAAI,QAAQ;AACZ,4BAAI,KAAK,SAAS,UAAU;AAC1B,iCAAO;AAAA,wBACT;AACA,8CAAsB,WAAY;AAChC,gCAAM,SAAS,KAAK;AACpB,gCAAM,eAAe,KAAK,MAAM,SAAS,qBAAqB;AAC9D,8BAAI,CAAC,qBAAqB,MAAM,YAAY;AAC1C,kCAAM,MAAM,MAAM;AAAA,0BACpB;AACA,gCAAM,cAAc,aAAa,YAAY,OAAO,cAAc,CAAC,CAAC;AAAA,wBACtE,CAAC;AACD,+BAAO;AAAA,sBACT;AACA,sBAAAA,SAAQ,UAAU,eAAe,SAAU,kBAAkB;AAC3D,4BAAI,QAAQ;AACZ,4BAAI,CAAC,KAAK,SAAS,UAAU;AAC3B,iCAAO;AAAA,wBACT;AACA,8CAAsB,WAAY;AAChC,gCAAM,SAAS,KAAK;AACpB,gCAAM,eAAe,MAAM;AAC3B,8BAAI,CAAC,oBAAoB,MAAM,YAAY;AACzC,kCAAM,MAAM,uBAAuB;AACnC,kCAAM,MAAM,KAAK;AAAA,0BACnB;AACA,gCAAM,cAAc,aAAa,YAAY,OAAO,cAAc,CAAC,CAAC;AAAA,wBACtE,CAAC;AACD,+BAAO;AAAA,sBACT;AACA,sBAAAA,SAAQ,UAAU,WAAW,SAAU,WAAW;AAChD,4BAAI,cAAc,QAAQ;AACxB,sCAAY;AAAA,wBACd;AACA,4BAAIK,UAAS,KAAK,OAAO,YAAY,OAAO,SAAU,eAAe,MAAM;AACzE,8BAAI,YAAY,YAAY,KAAK,QAAQ;AACzC,wCAAc,KAAK,SAAS;AAC5B,iCAAO;AAAA,wBACT,GAAG,CAAC,CAAC;AACL,+BAAO,KAAK,sBAAsBA,QAAO,CAAC,IAAIA;AAAA,sBAChD;AACA,sBAAAL,SAAQ,UAAU,WAAW,SAAU,OAAO;AAC5C,4BAAI,QAAQ;AACZ,4BAAI,CAAC,KAAK,aAAa;AACrB,iCAAO;AAAA,wBACT;AACA,8BAAM,QAAQ,SAAU,OAAO;AAC7B,iCAAO,MAAM,iBAAiB,KAAK;AAAA,wBACrC,CAAC;AACD,+BAAO;AAAA,sBACT;AACA,sBAAAA,SAAQ,UAAU,mBAAmB,SAAU,OAAO;AACpD,4BAAI,QAAQ;AACZ,4BAAI,CAAC,KAAK,eAAe,KAAK,gBAAgB;AAC5C,iCAAO;AAAA,wBACT;AAEA,4BAAI,cAAc,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC,KAAK;AAEvD,oCAAY,QAAQ,SAAU,KAAK;AACjC,iCAAO,MAAM,4BAA4B,GAAG;AAAA,wBAC9C,CAAC;AACD,+BAAO;AAAA,sBACT;AAgEA,sBAAAA,SAAQ,UAAU,aAAa,SAAU,uBAAuB,OAAO,OAAO,gBAAgB;AAC5F,4BAAI,QAAQ;AACZ,4BAAI,0BAA0B,QAAQ;AACpC,kDAAwB,CAAC;AAAA,wBAC3B;AACA,4BAAI,UAAU,QAAQ;AACpB,kCAAQ;AAAA,wBACV;AACA,4BAAI,UAAU,QAAQ;AACpB,kCAAQ;AAAA,wBACV;AACA,4BAAI,mBAAmB,QAAQ;AAC7B,2CAAiB;AAAA,wBACnB;AACA,4BAAI,CAAC,KAAK,aAAa;AACrB,gCAAM,IAAI,eAAe,gEAAgE;AAAA,wBAC3F;AACA,4BAAI,CAAC,KAAK,kBAAkB;AAC1B,gCAAM,IAAI,UAAU,mDAAmD;AAAA,wBACzE;AACA,4BAAI,OAAO,UAAU,YAAY,CAAC,OAAO;AACvC,gCAAM,IAAI,UAAU,mEAAmE;AAAA,wBACzF;AAEA,4BAAI,gBAAgB;AAClB,+BAAK,aAAa;AAAA,wBACpB;AACA,4BAAI,OAAO,0BAA0B,YAAY;AAE/C,8BAAI,YAAY,sBAAsB,IAAI;AAC1C,8BAAI,OAAO,YAAY,cAAc,qBAAqB,SAAS;AAGjE,mCAAO,IAAI,QAAQ,SAAU,SAAS;AACpC,qCAAO,sBAAsB,OAAO;AAAA,4BACtC,CAAC,EAAE,KAAK,WAAY;AAClB,qCAAO,MAAM,oBAAoB,IAAI;AAAA,4BACvC,CAAC,EAAE,KAAK,WAAY;AAClB,qCAAO;AAAA,4BACT,CAAC,EAAE,KAAK,SAAUG,OAAM;AACtB,qCAAO,MAAM,WAAWA,OAAM,OAAO,OAAO,cAAc;AAAA,4BAC5D,CAAC,EAAE,MAAM,SAAU,KAAK;AACtB,kCAAI,CAAC,MAAM,OAAO,QAAQ;AACxB,wCAAQ,MAAM,GAAG;AAAA,8BACnB;AAAA,4BACF,CAAC,EAAE,KAAK,WAAY;AAClB,qCAAO,MAAM,oBAAoB,KAAK;AAAA,4BACxC,CAAC,EAAE,KAAK,WAAY;AAClB,qCAAO;AAAA,4BACT,CAAC;AAAA,0BACH;AAEA,8BAAI,CAAC,MAAM,QAAQ,SAAS,GAAG;AAC7B,kCAAM,IAAI,UAAU,4FAA4F,OAAO,OAAO,SAAS,CAAC;AAAA,0BAC1I;AAEA,iCAAO,KAAK,WAAW,WAAW,OAAO,OAAO,KAAK;AAAA,wBACvD;AACA,4BAAI,CAAC,MAAM,QAAQ,qBAAqB,GAAG;AACzC,gCAAM,IAAI,UAAU,oHAAoH;AAAA,wBAC1I;AACA,6BAAK,eAAe,mBAAmB;AACvC,6BAAK,cAAc;AACnB,8CAAsB,QAAQ,SAAU,eAAe;AACrD,8BAAI,cAAc,SAAS;AACzB,kCAAM,UAAU;AAAA,8BACd,IAAI,cAAc,KAAK,SAAS,GAAG,OAAO,cAAc,EAAE,GAAG,EAAE,IAAI;AAAA,8BACnE,OAAO;AAAA,8BACP,UAAU;AAAA,8BACV,UAAU;AAAA,4BACZ,CAAC;AAAA,0BACH,OAAO;AACL,gCAAI,SAAS;AACb,kCAAM,WAAW;AAAA,8BACf,OAAO,OAAO,KAAK;AAAA,8BACnB,OAAO,OAAO,KAAK;AAAA,8BACnB,YAAY,CAAC,CAAC,OAAO;AAAA,8BACrB,YAAY,CAAC,CAAC,OAAO;AAAA,8BACrB,aAAa,CAAC,CAAC,OAAO;AAAA,8BACtB,kBAAkB,OAAO;AAAA,4BAC3B,CAAC;AAAA,0BACH;AAAA,wBACF,CAAC;AACD,6BAAK,aAAa;AAClB,+BAAO;AAAA,sBACT;AACA,sBAAAH,SAAQ,UAAU,eAAe,WAAY;AAC3C,6BAAK,OAAO,UAAU,GAAG,UAAU,cAAc,CAAC;AAClD,+BAAO;AAAA,sBACT;AACA,sBAAAA,SAAQ,UAAU,aAAa,WAAY;AACzC,6BAAK,OAAO,UAAU,GAAG,OAAO,UAAU,CAAC;AAC3C,+BAAO;AAAA,sBACT;AACA,sBAAAA,SAAQ,UAAU,aAAa,WAAY;AACzC,4BAAI,sBAAsB,CAAC,KAAK;AAChC,6BAAK,MAAM,MAAM,mBAAmB;AACpC,4BAAI,CAAC,KAAK,kBAAkB,KAAK,YAAY;AAC3C,+BAAK,eAAe;AACpB,+BAAK,OAAO,UAAU,GAAG,UAAU,iBAAiB,IAAI,CAAC;AAAA,wBAC3D;AACA,+BAAO;AAAA,sBACT;AACA,sBAAAA,SAAQ,UAAU,UAAU,WAAY;AACtC,4BAAI,KAAK,OAAO,UAAU,GAAG;AAC3B;AAAA,wBACF;AACA,6BAAK,gBAAgB,KAAK,OAAO;AACjC,4BAAI,eAAe,KAAK,cAAc,YAAY,KAAK,WAAW,WAAW,KAAK,cAAc,WAAW,KAAK,WAAW,UAAU,KAAK,cAAc,UAAU,KAAK,WAAW;AAClL,4BAAI,sBAAsB,KAAK;AAC/B,4BAAI,oBAAoB,KAAK,cAAc,UAAU,KAAK,WAAW;AACrE,4BAAI,CAAC,cAAc;AACjB;AAAA,wBACF;AACA,4BAAI,qBAAqB;AACvB,+BAAK,eAAe;AAAA,wBACtB;AACA,4BAAI,mBAAmB;AACrB,+BAAK,aAAa;AAAA,wBACpB;AACA,6BAAK,aAAa,KAAK;AAAA,sBACzB;AACA,sBAAAA,SAAQ,UAAU,iBAAiB,WAAY;AAC7C,4BAAI,QAAQ;AACZ,4BAAIP,MAAK,KAAK,QACZ,eAAeA,IAAG,cAClB,gBAAgBA,IAAG;AACrB,4BAAI,qBAAqB,SAAS,uBAAuB;AACzD,6BAAK,WAAW,MAAM;AACtB,4BAAI,KAAK,OAAO,qBAAqB;AACnC,gDAAsB,WAAY;AAChC,mCAAO,MAAM,WAAW,YAAY;AAAA,0BACtC,CAAC;AAAA,wBACH;AAEA,4BAAI,aAAa,UAAU,KAAK,CAAC,KAAK,cAAc;AAElD,8BAAI,qBAAqB,cAAc,OAAO,SAAU,cAAc;AACpE,mCAAO,aAAa,gBAAgB,QAAQ,aAAa,YAAY;AAAA,0BACvE,CAAC;AACD,8BAAI,mBAAmB,UAAU,GAAG;AAClC,iDAAqB,KAAK,uBAAuB,oBAAoB,kBAAkB;AAAA,0BACzF;AACA,+CAAqB,KAAK,sBAAsB,cAAc,eAAe,kBAAkB;AAAA,wBACjG,WAAW,cAAc,UAAU,GAAG;AACpC,+CAAqB,KAAK,uBAAuB,eAAe,kBAAkB;AAAA,wBACpF;AAEA,4BAAI,mBAAmB,cAAc,mBAAmB,WAAW,SAAS,GAAG;AAC7E,8BAAI,cAAc,KAAK,OAAO;AAC9B,8BAAI,aAAa,KAAK,YAAY,aAAa,KAAK,MAAM,KAAK;AAE/D,8BAAI,WAAW,UAAU;AAEvB,iCAAK,WAAW,OAAO,kBAAkB;AACzC,iCAAK,iBAAiB;AAAA,0BACxB,OAAO;AACL,gCAAI,SAAS,KAAK,aAAa,UAAU,WAAW,MAAM;AAC1D,iCAAK,WAAW,OAAO,MAAM;AAAA,0BAC/B;AAAA,wBACF,OAAO;AAEL,8BAAI,eAAe;AACnB,8BAAI,SAAS;AACb,8BAAI,KAAK,cAAc;AACrB,qCAAS,OAAO,KAAK,OAAO,kBAAkB,aAAa,KAAK,OAAO,cAAc,IAAI,KAAK,OAAO;AACrG,2CAAe,KAAK,aAAa,UAAU,QAAQ,YAAY;AAAA,0BACjE,OAAO;AACL,qCAAS,OAAO,KAAK,OAAO,kBAAkB,aAAa,KAAK,OAAO,cAAc,IAAI,KAAK,OAAO;AACrG,2CAAe,KAAK,aAAa,UAAU,QAAQ,YAAY;AAAA,0BACjE;AACA,+BAAK,WAAW,OAAO,YAAY;AAAA,wBACrC;AAAA,sBACF;AACA,sBAAAO,SAAQ,UAAU,eAAe,WAAY;AAC3C,4BAAI,cAAc,KAAK,OAAO,eAAe,CAAC;AAC9C,6BAAK,SAAS,MAAM;AAGpB,4BAAI,mBAAmB,KAAK,qBAAqB,WAAW;AAE5D,4BAAI,iBAAiB,YAAY;AAC/B,+BAAK,SAAS,OAAO,gBAAgB;AAAA,wBACvC;AAAA,sBACF;AACA,sBAAAA,SAAQ,UAAU,wBAAwB,SAAU,QAAQ,SAAS,UAAU;AAC7E,4BAAI,QAAQ;AACZ,4BAAI,aAAa,QAAQ;AACvB,qCAAW,SAAS,uBAAuB;AAAA,wBAC7C;AACA,4BAAI,kBAAkB,SAAU,OAAO;AACrC,iCAAO,QAAQ,OAAO,SAAU,QAAQ;AACtC,gCAAI,MAAM,qBAAqB;AAC7B,qCAAO,OAAO,YAAY,MAAM;AAAA,4BAClC;AACA,mCAAO,OAAO,YAAY,MAAM,OAAO,MAAM,OAAO,0BAA0B,YAAY,CAAC,OAAO;AAAA,0BACpG,CAAC;AAAA,wBACH;AAEA,4BAAI,KAAK,OAAO,YAAY;AAC1B,iCAAO,KAAK,KAAK,OAAO,MAAM;AAAA,wBAChC;AACA,+BAAO,QAAQ,SAAU,OAAO;AAC9B,8BAAI,eAAe,gBAAgB,KAAK;AACxC,8BAAI,aAAa,UAAU,GAAG;AAC5B,gCAAI,gBAAgB,MAAM,aAAa,eAAe,KAAK;AAC3D,qCAAS,YAAY,aAAa;AAClC,kCAAM,uBAAuB,cAAc,UAAU,IAAI;AAAA,0BAC3D;AAAA,wBACF,CAAC;AACD,+BAAO;AAAA,sBACT;AACA,sBAAAA,SAAQ,UAAU,yBAAyB,SAAU,SAAS,UAAU,aAAa;AACnF,4BAAI,QAAQ;AACZ,4BAAI,aAAa,QAAQ;AACvB,qCAAW,SAAS,uBAAuB;AAAA,wBAC7C;AACA,4BAAI,gBAAgB,QAAQ;AAC1B,wCAAc;AAAA,wBAChB;AAEA,4BAAIP,MAAK,KAAK,QACZ,wBAAwBA,IAAG,uBAC3B,oBAAoBA,IAAG,mBACvB,oBAAoBA,IAAG;AACzB,4BAAI,SAAS,KAAK,eAAe,QAAQ,cAAc,KAAK,OAAO;AACnE,4BAAI,eAAe,SAAU,QAAQ;AACnC,8BAAI,eAAe,0BAA0B,SAAS,MAAM,uBAAuB,CAAC,OAAO,WAAW;AACtG,8BAAI,cAAc;AAChB,gCAAI,eAAe,MAAM,aAAa,UAAU,QAAQ,MAAM,OAAO,cAAc;AACnF,qCAAS,YAAY,YAAY;AAAA,0BACnC;AAAA,wBACF;AACA,4BAAI,sBAAsB;AAC1B,4BAAI,0BAA0B,UAAU,CAAC,KAAK,qBAAqB;AACjE,gDAAsB,QAAQ,OAAO,SAAU,QAAQ;AACrD,mCAAO,CAAC,OAAO;AAAA,0BACjB,CAAC;AAAA,wBACH;AAEA,4BAAI,KAAK,oBAAoB,OAAO,SAAU,KAAK,QAAQ;AACvD,8BAAI,OAAO,aAAa;AACtB,gCAAI,mBAAmB,KAAK,MAAM;AAAA,0BACpC,OAAO;AACL,gCAAI,cAAc,KAAK,MAAM;AAAA,0BAC/B;AACA,iCAAO;AAAA,wBACT,GAAG;AAAA,0BACD,oBAAoB,CAAC;AAAA,0BACrB,eAAe,CAAC;AAAA,wBAClB,CAAC,GACD,qBAAqB,GAAG,oBACxB,gBAAgB,GAAG;AAErB,4BAAI,KAAK,OAAO,cAAc,KAAK,cAAc;AAC/C,wCAAc,KAAK,MAAM;AAAA,wBAC3B;AACA,4BAAI,cAAc,oBAAoB;AAEtC,4BAAI,gBAAgB,KAAK,sBAAsB,cAAc,cAAc,CAAC,GAAG,oBAAoB,IAAI,GAAG,eAAe,IAAI,IAAI;AACjI,4BAAI,KAAK,cAAc;AACrB,wCAAc;AAAA,wBAChB,WAAW,qBAAqB,oBAAoB,KAAK,CAAC,aAAa;AACrE,wCAAc;AAAA,wBAChB;AAEA,iCAAS,IAAI,GAAG,IAAI,aAAa,KAAK,GAAG;AACvC,8BAAI,cAAc,CAAC,GAAG;AACpB,yCAAa,cAAc,CAAC,CAAC;AAAA,0BAC/B;AAAA,wBACF;AACA,+BAAO;AAAA,sBACT;AACA,sBAAAO,SAAQ,UAAU,uBAAuB,SAAU,OAAO,UAAU;AAClE,4BAAI,QAAQ;AACZ,4BAAI,aAAa,QAAQ;AACvB,qCAAW,SAAS,uBAAuB;AAAA,wBAC7C;AAEA,4BAAIP,MAAK,KAAK,QACZ,kBAAkBA,IAAG,iBACrB,SAASA,IAAG,QACZ,mBAAmBA,IAAG;AAExB,4BAAI,mBAAmB,CAAC,KAAK,qBAAqB;AAChD,gCAAM,KAAK,MAAM;AAAA,wBACnB;AACA,4BAAI,KAAK,gBAAgB;AAEvB,+BAAK,cAAc,QAAQ,MAAM,IAAI,SAAUA,KAAI;AACjD,gCAAI,QAAQA,IAAG;AACf,mCAAO;AAAA,0BACT,CAAC,EAAE,KAAK,KAAK,OAAO,SAAS;AAAA,wBAC/B,OAAO;AAEL,+BAAK,cAAc,UAAU;AAAA,wBAC/B;AACA,4BAAI,oBAAoB,SAAU,MAAM;AAEtC,8BAAIa,YAAW,MAAM,aAAa,QAAQ,MAAM,gBAAgB;AAEhE,mCAAS,YAAYA,SAAQ;AAAA,wBAC/B;AAEA,8BAAM,QAAQ,iBAAiB;AAC/B,+BAAO;AAAA,sBACT;AACA,sBAAAN,SAAQ,UAAU,iBAAiB,SAAU,OAAO;AAClD,4BAAI,UAAU,UAAa,UAAU,MAAM;AACzC;AAAA,wBACF;AACA,6BAAK,cAAc,aAAa,YAAY,OAAO,QAAQ;AAAA,0BACzD;AAAA,wBACF,CAAC;AAAA,sBACH;AACA,sBAAAA,SAAQ,UAAU,2BAA2B,SAAU,mBAAmB;AACxE,6BAAK,SAAS;AAAA,0BACZ,OAAO,kBAAkB;AAAA,0BACzB,OAAO,kBAAkB;AAAA,0BACzB,UAAU,kBAAkB;AAAA,0BAC5B,SAAS,kBAAkB;AAAA,0BAC3B,aAAa,kBAAkB;AAAA,wBACjC,CAAC;AACD,6BAAK,eAAe,kBAAkB,KAAK;AAAA,sBAC7C;AACA,sBAAAA,SAAQ,UAAU,sBAAsB,SAAU,aAAaC,UAAS;AACtE,4BAAI,CAAC,eAAe,CAACA,YAAW,CAAC,KAAK,OAAO,eAAe,CAAC,KAAK,OAAO,kBAAkB;AACzF;AAAA,wBACF;AACA,4BAAI,SAASA,SAAQ,cAAcA,SAAQ,WAAW,QAAQ;AAC9D,4BAAI,eAAe,UAAU,YAAY,KAAK,SAAU,MAAM;AAC5D,iCAAO,KAAK,OAAO,SAAS,QAAQ,EAAE;AAAA,wBACxC,CAAC;AACD,4BAAI,CAAC,cAAc;AACjB;AAAA,wBACF;AAEA,6BAAK,YAAY,YAAY;AAC7B,6BAAK,eAAe,aAAa,KAAK;AACtC,4BAAI,KAAK,uBAAuB,KAAK,OAAO,mBAAmB;AAC7D,+BAAK,yBAAyB,KAAK,OAAO,iBAAiB;AAAA,wBAC7D;AAAA,sBACF;AACA,sBAAAD,SAAQ,UAAU,oBAAoB,SAAU,aAAaC,UAAS,aAAa;AACjF,4BAAI,QAAQ;AACZ,4BAAI,gBAAgB,QAAQ;AAC1B,wCAAc;AAAA,wBAChB;AACA,4BAAI,CAAC,eAAe,CAACA,YAAW,CAAC,KAAK,OAAO,eAAe,KAAK,qBAAqB;AACpF;AAAA,wBACF;AACA,4BAAI,WAAWA,SAAQ,QAAQ;AAI/B,oCAAY,QAAQ,SAAU,MAAM;AAClC,8BAAI,KAAK,OAAO,SAAS,GAAG,OAAO,QAAQ,GAAG,EAAE,KAAK,CAAC,KAAK,aAAa;AACtE,kCAAM,cAAc,IAAI;AAAA,0BAC1B,WAAW,CAAC,eAAe,KAAK,aAAa;AAC3C,kCAAM,gBAAgB,IAAI;AAAA,0BAC5B;AAAA,wBACF,CAAC;AAGD,6BAAK,MAAM,MAAM;AAAA,sBACnB;AACA,sBAAAD,SAAQ,UAAU,sBAAsB,SAAU,aAAaC,UAAS;AACtE,4BAAI,CAAC,eAAe,CAACA,UAAS;AAC5B;AAAA,wBACF;AAEA,4BAAIP,MAAKO,SAAQ,QAAQ;AACzB,4BAAI,SAASP,OAAM,KAAK,OAAO,cAAcA,GAAE;AAC/C,4BAAI,CAAC,QAAQ;AACX;AAAA,wBACF;AACA,4BAAI,gBAAgB,YAAY,CAAC,KAAK,YAAY,CAAC,EAAE,UAAU,YAAY,CAAC,EAAE,UAAU;AACxF,4BAAI,oBAAoB,KAAK,SAAS;AAEtC,+BAAO,UAAU;AACjB,6BAAK,cAAc,aAAa,YAAY,OAAO,QAAQ;AAAA,0BACzD;AAAA,wBACF,CAAC;AACD,4BAAI,CAAC,OAAO,YAAY,CAAC,OAAO,UAAU;AACxC,8BAAI,aAAa,KAAK,YAAY,aAAa,OAAO,KAAK;AAC3D,8BAAI,WAAW,UAAU;AACvB,iCAAK,SAAS;AAAA,8BACZ,OAAO,OAAO;AAAA,8BACd,OAAO,OAAO;AAAA,8BACd,UAAU,OAAO;AAAA,8BACjB,SAAS,OAAO;AAAA,8BAChB,kBAAkB,OAAO;AAAA,8BACzB,aAAa,OAAO;AAAA,8BACpB,SAAS,OAAO;AAAA,4BAClB,CAAC;AACD,iCAAK,eAAe,OAAO,KAAK;AAAA,0BAClC;AAAA,wBACF;AACA,6BAAK,WAAW;AAEhB,4BAAI,qBAAqB,KAAK,qBAAqB;AACjD,+BAAK,aAAa,IAAI;AACtB,+BAAK,eAAe,MAAM;AAAA,wBAC5B;AAAA,sBACF;AACA,sBAAAM,SAAQ,UAAU,mBAAmB,SAAU,aAAa;AAC1D,4BAAI,CAAC,KAAK,OAAO,eAAe,CAAC,aAAa;AAC5C;AAAA,wBACF;AACA,4BAAI,WAAW,YAAY,YAAY,SAAS,CAAC;AACjD,4BAAI,sBAAsB,YAAY,KAAK,SAAU,MAAM;AACzD,iCAAO,KAAK;AAAA,wBACd,CAAC;AAGD,4BAAI,KAAK,OAAO,aAAa,CAAC,uBAAuB,UAAU;AAC7D,+BAAK,MAAM,QAAQ,SAAS;AAC5B,+BAAK,MAAM,SAAS;AACpB,+BAAK,YAAY,QAAQ;AACzB,+BAAK,eAAe,SAAS,KAAK;AAAA,wBACpC,OAAO;AACL,8BAAI,CAAC,qBAAqB;AAExB,iCAAK,cAAc,UAAU,KAAK;AAAA,0BACpC;AACA,+BAAK,uBAAuB,IAAI;AAAA,wBAClC;AAAA,sBACF;AACA,sBAAAA,SAAQ,UAAU,gBAAgB,WAAY;AAC5C,6BAAK,OAAO,UAAU,GAAG,OAAO,cAAc,IAAI,CAAC;AAAA,sBACrD;AACA,sBAAAA,SAAQ,UAAU,eAAe,WAAY;AAC3C,6BAAK,OAAO,UAAU,GAAG,OAAO,cAAc,KAAK,CAAC;AAAA,sBACtD;AACA,sBAAAA,SAAQ,UAAU,sBAAsB,SAAU,YAAY;AAC5D,4BAAI,eAAe,QAAQ;AACzB,uCAAa;AAAA,wBACf;AACA,4BAAI,kBAAkB,KAAK,SAAS,SAAS,IAAI,OAAO,KAAK,OAAO,WAAW,WAAW,CAAC;AAC3F,4BAAI,YAAY;AACd,+BAAK,QAAQ;AACb,+BAAK,eAAe,gBAAgB;AACpC,8BAAI,KAAK,qBAAqB;AAC5B,gCAAI,CAAC,iBAAiB;AACpB,gDAAkB,KAAK,aAAa,eAAe,KAAK,OAAO,WAAW;AAC1E,kCAAI,iBAAiB;AACnB,qCAAK,SAAS,OAAO,eAAe;AAAA,8BACtC;AAAA,4BACF,OAAO;AACL,8CAAgB,YAAY,KAAK,OAAO;AAAA,4BAC1C;AAAA,0BACF,OAAO;AACL,iCAAK,MAAM,cAAc,KAAK,OAAO;AAAA,0BACvC;AAAA,wBACF,OAAO;AACL,+BAAK,OAAO;AACZ,+BAAK,eAAe,mBAAmB;AACvC,8BAAI,KAAK,qBAAqB;AAC5B,gCAAI,iBAAiB;AACnB,8CAAgB,YAAY,KAAK,qBAAqB;AAAA,4BACxD;AAAA,0BACF,OAAO;AACL,iCAAK,MAAM,cAAc,KAAK,qBAAqB;AAAA,0BACrD;AAAA,wBACF;AAAA,sBACF;AACA,sBAAAA,SAAQ,UAAU,gBAAgB,SAAU,OAAO;AACjD,4BAAI,CAAC,KAAK,MAAM,YAAY;AAC1B;AAAA,wBACF;AACA,4BAAI,UAAU,KAAK,OAAO;AAC1B,4BAAIP,MAAK,KAAK,QACZ,cAAcA,IAAG,aACjB,gBAAgBA,IAAG;AACrB,4BAAI,qBAAqB,QAAQ,KAAK,SAAUW,SAAQ;AACtD,iCAAO,CAACA,QAAO;AAAA,wBACjB,CAAC;AAED,4BAAI,UAAU,QAAQ,OAAO,UAAU,eAAe,MAAM,UAAU,aAAa;AACjF,8BAAI,cAAc,gBAAgB,KAAK,eAAe,KAAK,IAAI;AAE/D,+BAAK,cAAc,aAAa,YAAY,OAAO,QAAQ;AAAA,4BACzD;AAAA,4BACA;AAAA,0BACF,CAAC;AAAA,wBACH,WAAW,oBAAoB;AAE7B,+BAAK,eAAe;AACpB,+BAAK,OAAO,UAAU,GAAG,UAAU,iBAAiB,IAAI,CAAC;AAAA,wBAC3D;AAAA,sBACF;AACA,sBAAAJ,SAAQ,UAAU,cAAc,SAAU,aAAa,OAAO;AAC5D,4BAAI,aAAa;AACjB,4BAAI,SAAS,OAAO,KAAK,OAAO,gBAAgB,aAAa,KAAK,OAAO,YAAY,KAAK,IAAI,KAAK,OAAO;AAC1G,4BAAI,CAAC,KAAK,qBAAqB;AAC7B,8BAAI,oBAAoB,GAAG,QAAQ,eAAe,aAAa,KAAK;AACpE,8BAAI,KAAK,OAAO,eAAe,KAAK,KAAK,OAAO,gBAAgB,YAAY,QAAQ;AAGlF,yCAAa;AACb,qCAAS,OAAO,KAAK,OAAO,gBAAgB,aAAa,KAAK,OAAO,YAAY,KAAK,OAAO,YAAY,IAAI,KAAK,OAAO;AAAA,0BAC3H;AACA,8BAAI,CAAC,KAAK,OAAO,yBAAyB,oBAAoB,YAAY;AACxE,yCAAa;AACb,qCAAS,OAAO,KAAK,OAAO,mBAAmB,aAAa,KAAK,OAAO,eAAe,KAAK,IAAI,KAAK,OAAO;AAAA,0BAC9G;AACA,8BAAI,KAAK,kBAAkB,KAAK,OAAO,YAAY,cAAc,OAAO,KAAK,OAAO,kBAAkB,cAAc,CAAC,KAAK,OAAO,cAAc,KAAK,GAAG;AACrJ,yCAAa;AACb,qCAAS,OAAO,KAAK,OAAO,sBAAsB,aAAa,KAAK,OAAO,kBAAkB,KAAK,IAAI,KAAK,OAAO;AAAA,0BACpH;AAAA,wBACF;AACA,+BAAO;AAAA,0BACL,UAAU;AAAA,0BACV;AAAA,wBACF;AAAA,sBACF;AACA,sBAAAA,SAAQ,UAAU,iBAAiB,SAAU,OAAO;AAClD,4BAAI,WAAW,OAAO,UAAU,WAAW,MAAM,KAAK,IAAI;AAC1D,4BAAI,eAAe,OAAO,KAAK,kBAAkB,WAAW,KAAK,cAAc,KAAK,IAAI,KAAK;AAC7F,4BAAI,SAAS,SAAS,KAAK,aAAa,GAAG,OAAO,cAAc,GAAG,GAAG;AACpE,iCAAO;AAAA,wBACT;AAEA,4BAAI,WAAW,KAAK,OAAO;AAC3B,4BAAI,SAAS;AACb,4BAAI,UAAU,OAAO,OAAO,KAAK,OAAO,aAAa;AAAA,0BACnD,MAAM,cAAc,CAAC,GAAG,KAAK,OAAO,cAAc,IAAI;AAAA,0BACtD,gBAAgB;AAAA,wBAClB,CAAC;AACD,4BAAI,OAAO,IAAI,UAAU,QAAQ,UAAU,OAAO;AAClD,4BAAI,UAAU,KAAK,OAAO,MAAM;AAChC,6BAAK,gBAAgB;AACrB,6BAAK,qBAAqB;AAC1B,6BAAK,eAAe;AACpB,6BAAK,OAAO,UAAU,GAAG,UAAU,eAAe,OAAO,CAAC;AAC1D,+BAAO,QAAQ;AAAA,sBACjB;AACA,sBAAAA,SAAQ,UAAU,qBAAqB,WAAY;AACjD,4BAAI,kBAAkB,SAAS;AAE/B,wCAAgB,iBAAiB,YAAY,KAAK,aAAa,IAAI;AACnE,6BAAK,eAAe,QAAQ,iBAAiB,WAAW,KAAK,YAAY,IAAI;AAC7E,6BAAK,eAAe,QAAQ,iBAAiB,aAAa,KAAK,cAAc,IAAI;AAEjF,wCAAgB,iBAAiB,SAAS,KAAK,UAAU;AAAA,0BACvD,SAAS;AAAA,wBACX,CAAC;AACD,wCAAgB,iBAAiB,aAAa,KAAK,cAAc;AAAA,0BAC/D,SAAS;AAAA,wBACX,CAAC;AACD,6BAAK,SAAS,QAAQ,iBAAiB,aAAa,KAAK,cAAc;AAAA,0BACrE,SAAS;AAAA,wBACX,CAAC;AACD,4BAAI,KAAK,qBAAqB;AAC5B,+BAAK,eAAe,QAAQ,iBAAiB,SAAS,KAAK,UAAU;AAAA,4BACnE,SAAS;AAAA,0BACX,CAAC;AACD,+BAAK,eAAe,QAAQ,iBAAiB,QAAQ,KAAK,SAAS;AAAA,4BACjE,SAAS;AAAA,0BACX,CAAC;AAAA,wBACH;AACA,6BAAK,MAAM,QAAQ,iBAAiB,SAAS,KAAK,UAAU;AAAA,0BAC1D,SAAS;AAAA,wBACX,CAAC;AACD,6BAAK,MAAM,QAAQ,iBAAiB,SAAS,KAAK,UAAU;AAAA,0BAC1D,SAAS;AAAA,wBACX,CAAC;AACD,6BAAK,MAAM,QAAQ,iBAAiB,QAAQ,KAAK,SAAS;AAAA,0BACxD,SAAS;AAAA,wBACX,CAAC;AACD,4BAAI,KAAK,MAAM,QAAQ,MAAM;AAC3B,+BAAK,MAAM,QAAQ,KAAK,iBAAiB,SAAS,KAAK,cAAc;AAAA,4BACnE,SAAS;AAAA,0BACX,CAAC;AAAA,wBACH;AACA,6BAAK,MAAM,kBAAkB;AAAA,sBAC/B;AACA,sBAAAA,SAAQ,UAAU,wBAAwB,WAAY;AACpD,4BAAI,kBAAkB,SAAS;AAC/B,wCAAgB,oBAAoB,YAAY,KAAK,aAAa,IAAI;AACtE,6BAAK,eAAe,QAAQ,oBAAoB,WAAW,KAAK,YAAY,IAAI;AAChF,6BAAK,eAAe,QAAQ,oBAAoB,aAAa,KAAK,cAAc,IAAI;AACpF,wCAAgB,oBAAoB,SAAS,KAAK,QAAQ;AAC1D,wCAAgB,oBAAoB,aAAa,KAAK,YAAY;AAClE,6BAAK,SAAS,QAAQ,oBAAoB,aAAa,KAAK,YAAY;AACxE,4BAAI,KAAK,qBAAqB;AAC5B,+BAAK,eAAe,QAAQ,oBAAoB,SAAS,KAAK,QAAQ;AACtE,+BAAK,eAAe,QAAQ,oBAAoB,QAAQ,KAAK,OAAO;AAAA,wBACtE;AACA,6BAAK,MAAM,QAAQ,oBAAoB,SAAS,KAAK,QAAQ;AAC7D,6BAAK,MAAM,QAAQ,oBAAoB,SAAS,KAAK,QAAQ;AAC7D,6BAAK,MAAM,QAAQ,oBAAoB,QAAQ,KAAK,OAAO;AAC3D,4BAAI,KAAK,MAAM,QAAQ,MAAM;AAC3B,+BAAK,MAAM,QAAQ,KAAK,oBAAoB,SAAS,KAAK,YAAY;AAAA,wBACxE;AACA,6BAAK,MAAM,qBAAqB;AAAA,sBAClC;AACA,sBAAAA,SAAQ,UAAU,aAAa,SAAU,OAAO;AAC9C,4BAAI,UAAU,MAAM;AACpB,4BAAI,cAAc,KAAK,OAAO;AAC9B,4BAAI,kBAAkB,KAAK,MAAM;AACjC,4BAAI,oBAAoB,KAAK,SAAS;AACtC,4BAAI,WAAW,KAAK,SAAS,YAAY;AACzC,4BAAI,YAAY,OAAO,aAAa,OAAO;AAE3C,4BAAI,mBAAmB,eAAe,KAAK,SAAS;AACpD,4BAAI,WAAW,YAAY,UAAU,UACnC,aAAa,YAAY,UAAU,YACnC,YAAY,YAAY,UAAU,WAClC,QAAQ,YAAY,UAAU,OAC9B,UAAU,YAAY,UAAU,SAChC,SAAS,YAAY,UAAU,QAC/B,WAAW,YAAY,UAAU,UACjC,cAAc,YAAY,UAAU,aACpC,gBAAgB,YAAY,UAAU;AACxC,4BAAI,CAAC,KAAK,kBAAkB,CAAC,qBAAqB,kBAAkB;AAClE,+BAAK,aAAa;AAClB,8BAAI,CAAC,KAAK,MAAM,YAAY;AAM1B,iCAAK,MAAM,SAAS,MAAM,IAAI,YAAY;AAAA,0BAC5C;AAAA,wBACF;AACA,gCAAQ,SAAS;AAAA,0BACf,KAAK;AACH,mCAAO,KAAK,aAAa,OAAO,QAAQ;AAAA,0BAC1C,KAAK;AACH,mCAAO,KAAK,YAAY,OAAO,aAAa,iBAAiB;AAAA,0BAC/D,KAAK;AACH,mCAAO,KAAK,aAAa,iBAAiB;AAAA,0BAC5C,KAAK;AAAA,0BACL,KAAK;AAAA,0BACL,KAAK;AAAA,0BACL,KAAK;AACH,mCAAO,KAAK,gBAAgB,OAAO,iBAAiB;AAAA,0BACtD,KAAK;AAAA,0BACL,KAAK;AACH,mCAAO,KAAK,aAAa,OAAO,aAAa,eAAe;AAAA,0BAC9D;AAAA,wBACF;AAAA,sBACF;AACA,sBAAAA,SAAQ,UAAU,WAAW,SAAUP,KAAI;AACzC,4BAAI,SAASA,IAAG,QACd,UAAUA,IAAG;AACf,4BAAI,QAAQ,KAAK,MAAM;AACvB,4BAAI,cAAc,KAAK,OAAO;AAC9B,4BAAI,aAAa,KAAK,YAAY,aAAa,KAAK;AACpD,4BAAI,UAAU,YAAY,UAAU,UAClC,YAAY,YAAY,UAAU;AAGpC,4BAAI,KAAK,gBAAgB;AACvB,8BAAI,wBAAwB,WAAW,UAAU;AACjD,8BAAI,uBAAuB;AACzB,gCAAI,eAAe,KAAK,aAAa,UAAU,WAAW,MAAM;AAChE,iCAAK,SAAS,QAAQ,YAAY,aAAa;AAC/C,iCAAK,aAAa,IAAI;AAAA,0BACxB,OAAO;AACL,iCAAK,aAAa,IAAI;AAAA,0BACxB;AAAA,wBACF,OAAO;AACL,8BAAI,oBAAoB,YAAY,WAAW,YAAY;AAC3D,8BAAI,sBAAsB,qBAAqB,UAAU,CAAC,OAAO;AACjE,8BAAI,uBAAuB,CAAC,KAAK,kBAAkB,KAAK;AACxD,8BAAI,YAAY,KAAK,cAAc,WAAW;AAC9C,8BAAI,uBAAuB,sBAAsB;AAC/C,iCAAK,eAAe;AACpB,iCAAK,OAAO,UAAU,GAAG,UAAU,iBAAiB,IAAI,CAAC;AAAA,0BAC3D,WAAW,WAAW;AACpB,iCAAK,cAAc,KAAK,MAAM,QAAQ;AAAA,0BACxC;AAAA,wBACF;AACA,6BAAK,aAAa,KAAK,OAAO;AAAA,sBAChC;AACA,sBAAAO,SAAQ,UAAU,eAAe,SAAU,OAAO,UAAU;AAC1D,4BAAI,UAAU,MAAM,SAClB,UAAU,MAAM;AAClB,4BAAI,wBAAwB,WAAW;AAEvC,4BAAI,yBAAyB,UAAU;AACrC,+BAAK,aAAa;AAClB,8BAAI,sBAAsB,KAAK,OAAO,eAAe,CAAC,KAAK,MAAM,SAAS,KAAK,MAAM,YAAY,SAAS;AAC1G,8BAAI,qBAAqB;AACvB,iCAAK,aAAa;AAAA,0BACpB;AAAA,wBACF;AAAA,sBACF;AACA,sBAAAA,SAAQ,UAAU,cAAc,SAAU,OAAO,aAAa,mBAAmB;AAC/E,4BAAI,SAAS,MAAM;AACnB,4BAAI,WAAW,YAAY,UAAU;AACrC,4BAAI,kBAAkB,UAAU,OAAO,aAAa,aAAa;AACjE,4BAAI,KAAK,kBAAkB,UAAU,OAAO,OAAO;AACjD,8BAAI,QAAQ,KAAK,MAAM;AACvB,8BAAI,aAAa,KAAK,YAAY,aAAa,KAAK;AACpD,8BAAI,WAAW,UAAU;AACvB,iCAAK,aAAa,IAAI;AACtB,iCAAK,SAAS;AAAA,8BACZ;AAAA,4BACF,CAAC;AACD,iCAAK,eAAe,KAAK;AACzB,iCAAK,WAAW;AAAA,0BAClB;AAAA,wBACF;AACA,4BAAI,iBAAiB;AACnB,+BAAK,oBAAoB,aAAa,MAAM;AAC5C,gCAAM,eAAe;AAAA,wBACvB;AACA,4BAAI,mBAAmB;AACrB,8BAAI,oBAAoB,KAAK,SAAS,SAAS,IAAI,OAAO,KAAK,OAAO,WAAW,gBAAgB,CAAC;AAClG,8BAAI,mBAAmB;AAErB,gCAAI,YAAY,CAAC,GAAG;AAClB,0CAAY,CAAC,EAAE,UAAU;AAAA,4BAC3B;AAEA,iCAAK,oBAAoB,aAAa,iBAAiB;AAAA,0BACzD;AACA,gCAAM,eAAe;AAAA,wBACvB,WAAW,KAAK,qBAAqB;AACnC,+BAAK,aAAa;AAClB,gCAAM,eAAe;AAAA,wBACvB;AAAA,sBACF;AACA,sBAAAA,SAAQ,UAAU,eAAe,SAAU,mBAAmB;AAC5D,4BAAI,mBAAmB;AACrB,+BAAK,aAAa,IAAI;AACtB,+BAAK,eAAe,MAAM;AAAA,wBAC5B;AAAA,sBACF;AACA,sBAAAA,SAAQ,UAAU,kBAAkB,SAAU,OAAO,mBAAmB;AACtE,4BAAI,UAAU,MAAM,SAClB,UAAU,MAAM;AAClB,4BAAI,UAAU,YAAY,UAAU,UAClC,YAAY,YAAY,UAAU,aAClC,cAAc,YAAY,UAAU;AAEtC,4BAAI,qBAAqB,KAAK,qBAAqB;AACjD,+BAAK,aAAa;AAClB,+BAAK,aAAa;AAClB,8BAAI,eAAe,YAAY,WAAW,YAAY,cAAc,IAAI;AACxE,8BAAI,UAAU,WAAW,YAAY,eAAe,YAAY;AAChE,8BAAI,6BAA6B;AACjC,8BAAI,SAAS;AACb,8BAAI,SAAS;AACX,gCAAI,eAAe,GAAG;AACpB,uCAAS,KAAK,SAAS,QAAQ,cAAc,GAAG,OAAO,4BAA4B,eAAe,CAAC;AAAA,4BACrG,OAAO;AACL,uCAAS,KAAK,SAAS,QAAQ,cAAc,0BAA0B;AAAA,4BACzE;AAAA,0BACF,OAAO;AACL,gCAAI,YAAY,KAAK,SAAS,QAAQ,cAAc,IAAI,OAAO,KAAK,OAAO,WAAW,gBAAgB,CAAC;AACvG,gCAAI,WAAW;AACb,wCAAU,GAAG,QAAQ,eAAe,WAAW,4BAA4B,YAAY;AAAA,4BACzF,OAAO;AACL,uCAAS,KAAK,SAAS,QAAQ,cAAc,0BAA0B;AAAA,4BACzE;AAAA,0BACF;AACA,8BAAI,QAAQ;AAGV,gCAAI,EAAE,GAAG,QAAQ,oBAAoB,QAAQ,KAAK,WAAW,SAAS,YAAY,GAAG;AACnF,mCAAK,WAAW,qBAAqB,QAAQ,YAAY;AAAA,4BAC3D;AACA,iCAAK,iBAAiB,MAAM;AAAA,0BAC9B;AAGA,gCAAM,eAAe;AAAA,wBACvB;AAAA,sBACF;AACA,sBAAAA,SAAQ,UAAU,eAAe,SAAU,OAAO,aAAa,iBAAiB;AAC9E,4BAAI,SAAS,MAAM;AAEnB,4BAAI,CAAC,KAAK,uBAAuB,CAAC,OAAO,SAAS,iBAAiB;AACjE,+BAAK,iBAAiB,WAAW;AACjC,gCAAM,eAAe;AAAA,wBACvB;AAAA,sBACF;AACA,sBAAAA,SAAQ,UAAU,eAAe,WAAY;AAC3C,4BAAI,KAAK,SAAS;AAChB,+BAAK,UAAU;AAAA,wBACjB;AAAA,sBACF;AACA,sBAAAA,SAAQ,UAAU,cAAc,SAAU,OAAO;AAC/C,4BAAI,UAAU,SAAS,MAAM,QAAQ,CAAC,GAAG;AACzC,4BAAI,0BAA0B,KAAK,WAAW,KAAK,eAAe,QAAQ,SAAS,MAAM;AACzF,4BAAI,yBAAyB;AAC3B,8BAAI,0BAA0B,WAAW,KAAK,eAAe,WAAW,WAAW,KAAK,eAAe;AACvG,8BAAI,yBAAyB;AAC3B,gCAAI,KAAK,gBAAgB;AACvB,mCAAK,MAAM,MAAM;AAAA,4BACnB,WAAW,KAAK,0BAA0B;AACxC,mCAAK,aAAa;AAAA,4BACpB;AAAA,0BACF;AAEA,gCAAM,gBAAgB;AAAA,wBACxB;AACA,6BAAK,UAAU;AAAA,sBACjB;AAIA,sBAAAA,SAAQ,UAAU,eAAe,SAAU,OAAO;AAChD,4BAAI,SAAS,MAAM;AACnB,4BAAI,EAAE,kBAAkB,cAAc;AACpC;AAAA,wBACF;AAEA,4BAAI,WAAW,KAAK,WAAW,QAAQ,SAAS,MAAM,GAAG;AAEvD,8BAAI,cAAc,KAAK,WAAW,QAAQ;AAC1C,8BAAI,gBAAgB,KAAK,eAAe,QAAQ,MAAM,WAAW,YAAY,cAAc,MAAM,UAAU,YAAY;AACvH,+BAAK,mBAAmB;AAAA,wBAC1B;AACA,4BAAI,WAAW,KAAK,MAAM,SAAS;AACjC;AAAA,wBACF;AACA,4BAAI,OAAO,OAAO,QAAQ,yCAAyC;AACnE,4BAAI,gBAAgB,aAAa;AAC/B,8BAAI,cAAc,MAAM;AACxB,8BAAI,cAAc,KAAK,OAAO;AAC9B,8BAAI,UAAU,KAAK;AACnB,8BAAI,YAAY,SAAS;AACvB,iCAAK,oBAAoB,aAAa,IAAI;AAAA,0BAC5C,WAAW,UAAU,SAAS;AAC5B,iCAAK,kBAAkB,aAAa,MAAM,WAAW;AAAA,0BACvD,WAAW,YAAY,SAAS;AAC9B,iCAAK,oBAAoB,aAAa,IAAI;AAAA,0BAC5C;AAAA,wBACF;AACA,8BAAM,eAAe;AAAA,sBACvB;AAKA,sBAAAA,SAAQ,UAAU,eAAe,SAAUP,KAAI;AAC7C,4BAAI,SAASA,IAAG;AAChB,4BAAI,kBAAkB,eAAe,YAAY,OAAO,SAAS;AAC/D,+BAAK,iBAAiB,MAAM;AAAA,wBAC9B;AAAA,sBACF;AACA,sBAAAO,SAAQ,UAAU,WAAW,SAAUP,KAAI;AACzC,4BAAI,SAASA,IAAG;AAChB,4BAAI,0BAA0B,KAAK,eAAe,QAAQ,SAAS,MAAM;AACzE,4BAAI,yBAAyB;AAC3B,8BAAI,CAAC,KAAK,SAAS,YAAY,CAAC,KAAK,eAAe,YAAY;AAC9D,gCAAI,KAAK,gBAAgB;AACvB,kCAAI,SAAS,kBAAkB,KAAK,MAAM,SAAS;AACjD,qCAAK,MAAM,MAAM;AAAA,8BACnB;AAAA,4BACF,OAAO;AACL,mCAAK,aAAa;AAClB,mCAAK,eAAe,MAAM;AAAA,4BAC5B;AAAA,0BACF,WAAW,KAAK,uBAAuB,WAAW,KAAK,MAAM,WAAW,CAAC,KAAK,SAAS,QAAQ,SAAS,MAAM,GAAG;AAC/G,iCAAK,aAAa;AAAA,0BACpB;AAAA,wBACF,OAAO;AACL,8BAAI,sBAAsB,KAAK,OAAO,uBAAuB,SAAS;AACtE,8BAAI,qBAAqB;AACvB,iCAAK,eAAe;AAAA,0BACtB;AACA,+BAAK,eAAe,iBAAiB;AACrC,+BAAK,aAAa,IAAI;AAAA,wBACxB;AAAA,sBACF;AACA,sBAAAO,SAAQ,UAAU,WAAW,SAAUP,KAAI;AACzC,4BAAI;AACJ,4BAAI,QAAQ;AACZ,4BAAI,SAASA,IAAG;AAChB,4BAAI,0BAA0B,UAAU,KAAK,eAAe,QAAQ,SAAS,MAAM;AACnF,4BAAI,CAAC,yBAAyB;AAC5B;AAAA,wBACF;AACA,4BAAI,gBAAgB,KAAK,CAAC,GAAG,GAAG,YAAY,SAAS,IAAI,WAAY;AACnE,8BAAI,WAAW,MAAM,MAAM,SAAS;AAClC,kCAAM,eAAe,cAAc;AAAA,0BACrC;AAAA,wBACF,GAAG,GAAG,YAAY,eAAe,IAAI,WAAY;AAC/C,gCAAM,eAAe,cAAc;AACnC,8BAAI,WAAW,MAAM,MAAM,SAAS;AAClC,kCAAM,aAAa,IAAI;AAAA,0BACzB;AAAA,wBACF,GAAG,GAAG,YAAY,oBAAoB,IAAI,WAAY;AACpD,8BAAI,WAAW,MAAM,MAAM,SAAS;AAClC,kCAAM,aAAa,IAAI;AAGvB,kCAAM,eAAe,cAAc;AAAA,0BACrC;AAAA,wBACF,GAAG;AACH,qCAAa,KAAK,cAAc,QAAQ,IAAI,EAAE;AAAA,sBAChD;AACA,sBAAAO,SAAQ,UAAU,UAAU,SAAUP,KAAI;AACxC,4BAAI;AACJ,4BAAI,QAAQ;AACZ,4BAAI,SAASA,IAAG;AAChB,4BAAI,yBAAyB,UAAU,KAAK,eAAe,QAAQ,SAAS,MAAM;AAClF,4BAAI,0BAA0B,CAAC,KAAK,kBAAkB;AACpD,8BAAI,cAAc,KAAK,OAAO;AAC9B,8BAAI,wBAAwB,YAAY,KAAK,SAAU,MAAM;AAC3D,mCAAO,KAAK;AAAA,0BACd,CAAC;AACD,8BAAI,eAAe,KAAK,CAAC,GAAG,GAAG,YAAY,SAAS,IAAI,WAAY;AAClE,gCAAI,WAAW,MAAM,MAAM,SAAS;AAClC,oCAAM,eAAe,iBAAiB;AACtC,kCAAI,uBAAuB;AACzB,sCAAM,eAAe;AAAA,8BACvB;AACA,oCAAM,aAAa,IAAI;AAAA,4BACzB;AAAA,0BACF,GAAG,GAAG,YAAY,eAAe,IAAI,WAAY;AAC/C,kCAAM,eAAe,iBAAiB;AACtC,gCAAI,WAAW,MAAM,MAAM,WAAW,WAAW,MAAM,eAAe,WAAW,CAAC,MAAM,YAAY;AAClG,oCAAM,aAAa,IAAI;AAAA,4BACzB;AAAA,0BACF,GAAG,GAAG,YAAY,oBAAoB,IAAI,WAAY;AACpD,gCAAI,WAAW,MAAM,MAAM,SAAS;AAClC,oCAAM,eAAe,iBAAiB;AACtC,oCAAM,aAAa,IAAI;AACvB,kCAAI,uBAAuB;AACzB,sCAAM,eAAe;AAAA,8BACvB;AAAA,4BACF;AAAA,0BACF,GAAG;AACH,sCAAY,KAAK,cAAc,QAAQ,IAAI,EAAE;AAAA,wBAC/C,OAAO;AAIL,+BAAK,mBAAmB;AACxB,+BAAK,MAAM,QAAQ,MAAM;AAAA,wBAC3B;AAAA,sBACF;AACA,sBAAAO,SAAQ,UAAU,eAAe,WAAY;AAC3C,6BAAK,OAAO,UAAU,GAAG,OAAO,SAAS,KAAK,aAAa,CAAC;AAAA,sBAC9D;AACA,sBAAAA,SAAQ,UAAU,mBAAmB,SAAUO,KAAI;AACjD,4BAAI,QAAQ;AACZ,4BAAIA,QAAO,QAAQ;AACjB,0BAAAA,MAAK;AAAA,wBACP;AACA,4BAAI,UAAU,MAAM,KAAK,KAAK,SAAS,QAAQ,iBAAiB,0BAA0B,CAAC;AAC3F,4BAAI,CAAC,QAAQ,QAAQ;AACnB;AAAA,wBACF;AACA,4BAAI,WAAWA;AACf,4BAAI,qBAAqB,MAAM,KAAK,KAAK,SAAS,QAAQ,iBAAiB,IAAI,OAAO,KAAK,OAAO,WAAW,gBAAgB,CAAC,CAAC;AAE/H,2CAAmB,QAAQ,SAAU,QAAQ;AAC3C,iCAAO,UAAU,OAAO,MAAM,OAAO,WAAW,gBAAgB;AAChE,iCAAO,aAAa,iBAAiB,OAAO;AAAA,wBAC9C,CAAC;AACD,4BAAI,UAAU;AACZ,+BAAK,qBAAqB,QAAQ,QAAQ,QAAQ;AAAA,wBACpD,OAAO;AAEL,8BAAI,QAAQ,SAAS,KAAK,oBAAoB;AAE5C,uCAAW,QAAQ,KAAK,kBAAkB;AAAA,0BAC5C,OAAO;AAEL,uCAAW,QAAQ,QAAQ,SAAS,CAAC;AAAA,0BACvC;AACA,8BAAI,CAAC,UAAU;AACb,uCAAW,QAAQ,CAAC;AAAA,0BACtB;AAAA,wBACF;AACA,iCAAS,UAAU,IAAI,KAAK,OAAO,WAAW,gBAAgB;AAC9D,iCAAS,aAAa,iBAAiB,MAAM;AAC7C,6BAAK,cAAc,aAAa,YAAY,OAAO,iBAAiB;AAAA,0BAClE,IAAI;AAAA,wBACN,CAAC;AACD,4BAAI,KAAK,SAAS,UAAU;AAG1B,+BAAK,MAAM,oBAAoB,SAAS,EAAE;AAC1C,+BAAK,eAAe,oBAAoB,SAAS,EAAE;AAAA,wBACrD;AAAA,sBACF;AACA,sBAAAP,SAAQ,UAAU,WAAW,SAAUP,KAAI;AACzC,4BAAI,QAAQA,IAAG,OACb,KAAKA,IAAG,OACR,QAAQ,OAAO,SAAS,OAAO,IAC/B,KAAKA,IAAG,UACR,WAAW,OAAO,SAAS,KAAK,IAChC,KAAKA,IAAG,SACR,UAAU,OAAO,SAAS,KAAK,IAC/Be,MAAKf,IAAG,kBACR,mBAAmBe,QAAO,SAAS,CAAC,IAAIA,KACxC,KAAKf,IAAG,aACRE,eAAc,OAAO,SAAS,QAAQ,IACtC,KAAKF,IAAG,SACR,UAAU,OAAO,SAAS,KAAK;AACjC,4BAAI,cAAc,OAAO,UAAU,WAAW,MAAM,KAAK,IAAI;AAC7D,4BAAI,QAAQ,KAAK,OAAO;AACxB,4BAAI,cAAc,SAAS;AAC3B,4BAAI,iBAAiB,YAAY;AACjC,4BAAI,QAAQ,WAAW,IAAI,KAAK,OAAO,aAAa,OAAO,IAAI;AAC/D,4BAAIC,MAAK,QAAQ,MAAM,SAAS,IAAI;AAEpC,4BAAI,KAAK,OAAO,cAAc;AAC5B,wCAAc,KAAK,OAAO,eAAe,YAAY,SAAS;AAAA,wBAChE;AAEA,4BAAI,KAAK,OAAO,aAAa;AAC3B,yCAAe,KAAK,OAAO,YAAY,SAAS;AAAA,wBAClD;AACA,6BAAK,OAAO,UAAU,GAAG,QAAQ,SAAS;AAAA,0BACxC,OAAO;AAAA,0BACP,OAAO;AAAA,0BACP,IAAIA;AAAA,0BACJ,UAAU;AAAA,0BACV;AAAA,0BACA;AAAA,0BACA,aAAaC;AAAA,0BACb;AAAA,wBACF,CAAC,CAAC;AACF,4BAAI,KAAK,qBAAqB;AAC5B,+BAAK,kBAAkBD,GAAE;AAAA,wBAC3B;AAEA,6BAAK,cAAc,aAAa,YAAY,OAAO,SAAS;AAAA,0BAC1D,IAAIA;AAAA,0BACJ,OAAO;AAAA,0BACP,OAAO;AAAA,0BACP;AAAA,0BACA,YAAY,SAAS,MAAM,QAAQ,MAAM,QAAQ;AAAA,0BACjD;AAAA,wBACF,CAAC;AAAA,sBACH;AACA,sBAAAM,SAAQ,UAAU,cAAc,SAAU,MAAM;AAC9C,4BAAIN,MAAK,KAAK,IACZ,QAAQ,KAAK,OACb,QAAQ,KAAK,OACb,mBAAmB,KAAK,kBACxB,WAAW,KAAK,UAChB,UAAU,KAAK;AACjB,4BAAI,QAAQ,WAAW,WAAW,IAAI,KAAK,OAAO,aAAa,OAAO,IAAI;AAC1E,4BAAI,CAACA,OAAM,CAAC,UAAU;AACpB;AAAA,wBACF;AACA,6BAAK,OAAO,UAAU,GAAG,QAAQ,YAAYA,KAAI,QAAQ,CAAC;AAC1D,6BAAK,cAAc,aAAa,YAAY,OAAO,YAAY;AAAA,0BAC7D,IAAIA;AAAA,0BACJ;AAAA,0BACA;AAAA,0BACA;AAAA,0BACA,YAAY,SAAS,MAAM,QAAQ,MAAM,QAAQ;AAAA,wBACnD,CAAC;AAAA,sBACH;AACA,sBAAAM,SAAQ,UAAU,aAAa,SAAUP,KAAI;AAC3C,4BAAI,QAAQA,IAAG,OACb,KAAKA,IAAG,OACR,QAAQ,OAAO,SAAS,OAAO,IAC/B,KAAKA,IAAG,YACR,aAAa,OAAO,SAAS,QAAQ,IACrC,KAAKA,IAAG,YACR,aAAa,OAAO,SAAS,QAAQ,IACrCe,MAAKf,IAAG,SACR,UAAUe,QAAO,SAAS,KAAKA,KAC/B,KAAKf,IAAG,kBACR,mBAAmB,OAAO,SAAS,CAAC,IAAI,IACxC,KAAKA,IAAG,aACRE,eAAc,OAAO,SAAS,QAAQ,IACtC,KAAKF,IAAG,SACR,UAAU,OAAO,SAAS,KAAK;AACjC,4BAAI,OAAO,UAAU,eAAe,UAAU,MAAM;AAClD;AAAA,wBACF;AAEA,4BAAI,UAAU,KAAK,OAAO;AAC1B,4BAAI,cAAc,SAAS;AAC3B,4BAAI,WAAW,UAAU,QAAQ,SAAS,IAAI;AAC9C,4BAAI,kBAAkB,GAAG,OAAO,KAAK,SAAS,GAAG,EAAE,OAAO,KAAK,SAAS,YAAY,GAAG,EAAE,OAAO,QAAQ;AACxG,6BAAK,OAAO,UAAU,GAAG,UAAU,WAAW;AAAA,0BAC5C,IAAI;AAAA,0BACJ;AAAA,0BACA,WAAW;AAAA,0BACX;AAAA,0BACA,OAAO;AAAA,0BACP,UAAU;AAAA,0BACV;AAAA,0BACA,aAAaE;AAAA,0BACb;AAAA,wBACF,CAAC,CAAC;AACF,4BAAI,YAAY;AACd,+BAAK,SAAS;AAAA,4BACZ;AAAA,4BACA,OAAO;AAAA,4BACP;AAAA,4BACA;AAAA,4BACA,aAAaA;AAAA,4BACb;AAAA,0BACF,CAAC;AAAA,wBACH;AAAA,sBACF;AACA,sBAAAK,SAAQ,UAAU,YAAY,SAAUP,KAAI;AAC1C,4BAAI,QAAQ;AACZ,4BAAI,QAAQA,IAAG,OACbC,MAAKD,IAAG,IACR,KAAKA,IAAG,UACR,WAAW,OAAO,SAAS,UAAU,IACrC,KAAKA,IAAG,UACR,WAAW,OAAO,SAAS,UAAU;AACvC,4BAAI,gBAAgB,GAAG,QAAQ,QAAQ,UAAU,KAAK,IAAI,MAAM,UAAU,MAAM,KAAK,MAAM,qBAAqB,QAAQ,CAAC;AACzH,4BAAI,UAAUC,OAAM,KAAK,OAAM,oBAAI,KAAK,GAAE,QAAQ,IAAI,KAAK,OAAO,CAAC;AACnE,4BAAI,aAAa,MAAM,WAAW,MAAM,WAAW;AACnD,4BAAI,cAAc;AAChB,+BAAK,OAAO,UAAU,GAAG,SAAS,UAAU;AAAA,4BAC1C,OAAO,MAAM;AAAA,4BACb,IAAI;AAAA,4BACJ,QAAQ;AAAA,4BACR,UAAU;AAAA,0BACZ,CAAC,CAAC;AACF,8BAAI,kBAAkB,SAAU,QAAQ;AACtC,gCAAI,gBAAgB,OAAO,YAAY,OAAO,cAAc,OAAO,WAAW;AAC9E,kCAAM,WAAW;AAAA,8BACf,OAAO,OAAO,QAAQ;AAAA,8BACtB,QAAQ,GAAG,QAAQ,QAAQ,UAAU,MAAM,IAAI,OAAO,QAAQ,IAAI,OAAO;AAAA,8BACzE,YAAY,OAAO;AAAA,8BACnB,YAAY;AAAA,8BACZ;AAAA,8BACA,kBAAkB,OAAO;AAAA,8BACzB,aAAa,OAAO;AAAA,4BACtB,CAAC;AAAA,0BACH;AACA,uCAAa,QAAQ,eAAe;AAAA,wBACtC,OAAO;AACL,+BAAK,OAAO,UAAU,GAAG,SAAS,UAAU;AAAA,4BAC1C,OAAO,MAAM;AAAA,4BACb,IAAI,MAAM;AAAA,4BACV,QAAQ;AAAA,4BACR,UAAU,MAAM;AAAA,0BAClB,CAAC,CAAC;AAAA,wBACJ;AAAA,sBACF;AACA,sBAAAM,SAAQ,UAAU,eAAe,SAAU,UAAU;AACnD,4BAAIP;AACJ,4BAAI,OAAO,CAAC;AACZ,iCAAS,KAAK,GAAG,KAAK,UAAU,QAAQ,MAAM;AAC5C,+BAAK,KAAK,CAAC,IAAI,UAAU,EAAE;AAAA,wBAC7B;AACA,gCAAQA,MAAK,KAAK,WAAW,QAAQ,GAAG,KAAK,MAAMA,KAAI,cAAc,CAAC,MAAM,KAAK,MAAM,GAAG,MAAM,KAAK,CAAC;AAAA,sBACxG;AACA,sBAAAO,SAAQ,UAAU,mBAAmB,WAAY;AAC/C,4BAAI,4BAA4B,KAAK,OAAO;AAC5C,4BAAI,gBAAgB,CAAC;AACrB,4BAAI,6BAA6B,OAAO,8BAA8B,YAAY;AAChF,0CAAgB,0BAA0B,KAAK,MAAM,QAAQ,OAAO;AAAA,wBACtE;AACA,6BAAK,cAAc,GAAG,YAAY,SAAS,YAAY,SAAS,aAAa;AAAA,sBAC/E;AACA,sBAAAA,SAAQ,UAAU,kBAAkB,WAAY;AAC9C,6BAAK,iBAAiB,IAAI,aAAa,UAAU;AAAA,0BAC/C,SAAS,KAAK,aAAa,kBAAkB,KAAK,YAAY,KAAK,kBAAkB,KAAK,qBAAqB,KAAK,OAAO,eAAe,KAAK,cAAc,QAAQ,MAAM,KAAK,OAAO,OAAO;AAAA,0BAC9L,YAAY,KAAK,OAAO;AAAA,0BACxB,MAAM,KAAK,cAAc,QAAQ;AAAA,0BACjC,UAAU,KAAK,OAAO;AAAA,wBACxB,CAAC;AACD,6BAAK,iBAAiB,IAAI,aAAa,UAAU;AAAA,0BAC/C,SAAS,KAAK,aAAa,gBAAgB;AAAA,0BAC3C,YAAY,KAAK,OAAO;AAAA,0BACxB,MAAM,KAAK,cAAc,QAAQ;AAAA,0BACjC,UAAU,KAAK,OAAO;AAAA,wBACxB,CAAC;AACD,6BAAK,QAAQ,IAAI,aAAa,MAAM;AAAA,0BAClC,SAAS,KAAK,aAAa,SAAS,KAAK,iBAAiB;AAAA,0BAC1D,YAAY,KAAK,OAAO;AAAA,0BACxB,MAAM,KAAK,cAAc,QAAQ;AAAA,0BACjC,cAAc,CAAC,KAAK,OAAO;AAAA,wBAC7B,CAAC;AACD,6BAAK,aAAa,IAAI,aAAa,KAAK;AAAA,0BACtC,SAAS,KAAK,aAAa,cAAc,KAAK,mBAAmB;AAAA,wBACnE,CAAC;AACD,6BAAK,WAAW,IAAI,aAAa,KAAK;AAAA,0BACpC,SAAS,KAAK,aAAa,YAAY,KAAK,mBAAmB;AAAA,wBACjE,CAAC;AACD,6BAAK,WAAW,IAAI,aAAa,SAAS;AAAA,0BACxC,SAAS,KAAK,aAAa,UAAU;AAAA,0BACrC,YAAY,KAAK,OAAO;AAAA,0BACxB,MAAM,KAAK,cAAc,QAAQ;AAAA,wBACnC,CAAC;AAAA,sBACH;AACA,sBAAAA,SAAQ,UAAU,mBAAmB,WAAY;AAE/C,6BAAK,cAAc,QAAQ;AAE3B,6BAAK,eAAe,KAAK,KAAK,cAAc,OAAO;AAEnD,6BAAK,eAAe,KAAK,KAAK,eAAe,OAAO;AACpD,4BAAI,KAAK,qBAAqB;AAC5B,+BAAK,MAAM,cAAc,KAAK,OAAO,0BAA0B;AAAA,wBACjE,WAAW,KAAK,mBAAmB;AACjC,+BAAK,MAAM,cAAc,KAAK;AAC9B,+BAAK,MAAM,SAAS;AAAA,wBACtB;AACA,6BAAK,eAAe,QAAQ,YAAY,KAAK,eAAe,OAAO;AACnE,6BAAK,eAAe,QAAQ,YAAY,KAAK,SAAS,OAAO;AAC7D,6BAAK,eAAe,QAAQ,YAAY,KAAK,SAAS,OAAO;AAC7D,4BAAI,CAAC,KAAK,gBAAgB;AACxB,+BAAK,SAAS,QAAQ,YAAY,KAAK,WAAW,OAAO;AAAA,wBAC3D;AACA,4BAAI,CAAC,KAAK,qBAAqB;AAC7B,+BAAK,eAAe,QAAQ,YAAY,KAAK,MAAM,OAAO;AAAA,wBAC5D,WAAW,KAAK,OAAO,eAAe;AACpC,+BAAK,SAAS,QAAQ,aAAa,KAAK,MAAM,SAAS,KAAK,SAAS,QAAQ,UAAU;AAAA,wBACzF;AACA,4BAAI,KAAK,kBAAkB;AACzB,+BAAK,qBAAqB;AAC1B,+BAAK,eAAe;AACpB,+BAAK,cAAc;AACnB,8BAAI,KAAK,cAAc,QAAQ;AAC7B,iCAAK,qBAAqB,KAAK,aAAa;AAAA,0BAC9C,OAAO;AACL,iCAAK,sBAAsB,KAAK,cAAc;AAAA,0BAChD;AACA,+BAAK,aAAa;AAAA,wBACpB;AACA,4BAAI,KAAK,gBAAgB;AACvB,+BAAK,oBAAoB,KAAK,YAAY;AAAA,wBAC5C;AAAA,sBACF;AACA,sBAAAA,SAAQ,UAAU,uBAAuB,SAAU,QAAQ;AACzD,4BAAI,QAAQ;AAEZ,4BAAI,oBAAoB,KAAK,cAAc;AAC3C,4BAAI,qBAAqB,kBAAkB,cAAc,kBAAkB,WAAW,YAAY,UAAU;AAC1G,+BAAK,WAAW;AAAA,4BACd,OAAO,kBAAkB;AAAA,4BACzB,OAAO,kBAAkB;AAAA,4BACzB,YAAY,kBAAkB;AAAA,4BAC9B,YAAY,kBAAkB;AAAA,4BAC9B,aAAa;AAAA,0BACf,CAAC;AAAA,wBACH;AACA,+BAAO,QAAQ,SAAU,OAAO;AAC9B,iCAAO,MAAM,UAAU;AAAA,4BACrB;AAAA,4BACA,IAAI,MAAM,MAAM;AAAA,0BAClB,CAAC;AAAA,wBACH,CAAC;AAAA,sBACH;AACA,sBAAAA,SAAQ,UAAU,wBAAwB,SAAU,SAAS;AAC3D,4BAAI,QAAQ;AAEZ,4BAAI,KAAK,OAAO,YAAY;AAC1B,kCAAQ,KAAK,KAAK,OAAO,MAAM;AAAA,wBACjC;AACA,4BAAI,oBAAoB,QAAQ,KAAK,SAAU,QAAQ;AACrD,iCAAO,OAAO;AAAA,wBAChB,CAAC;AACD,4BAAI,0BAA0B,QAAQ,UAAU,SAAU,QAAQ;AAChE,iCAAO,OAAO,aAAa,UAAa,CAAC,OAAO;AAAA,wBAClD,CAAC;AACD,gCAAQ,QAAQ,SAAU,QAAQS,QAAO;AACvC,8BAAIhB,MAAK,OAAO,OACd,QAAQA,QAAO,SAAS,KAAKA,KAC7B,QAAQ,OAAO,OACf,mBAAmB,OAAO,kBAC1BE,eAAc,OAAO;AACvB,8BAAI,MAAM,kBAAkB;AAE1B,gCAAI,OAAO,SAAS;AAClB,oCAAM,UAAU;AAAA,gCACd,OAAO;AAAA,gCACP,IAAI,OAAO,MAAM;AAAA,8BACnB,CAAC;AAAA,4BACH,OAAO;AAOL,kCAAI,kBAAkB,MAAM,uBAAuB,CAAC,qBAAqBc,WAAU;AACnF,kCAAI,aAAa,kBAAkB,OAAO,OAAO;AACjD,kCAAI,aAAa,OAAO;AACxB,oCAAM,WAAW;AAAA,gCACf;AAAA,gCACA;AAAA,gCACA,YAAY,CAAC,CAAC;AAAA,gCACd,YAAY,CAAC,CAAC;AAAA,gCACd,aAAa,CAAC,CAACd;AAAA,gCACf;AAAA,8BACF,CAAC;AAAA,4BACH;AAAA,0BACF,OAAO;AACL,kCAAM,WAAW;AAAA,8BACf;AAAA,8BACA;AAAA,8BACA,YAAY,CAAC,CAAC,OAAO;AAAA,8BACrB,YAAY,CAAC,CAAC,OAAO;AAAA,8BACrB,aAAa,CAAC,CAAC,OAAO;AAAA,8BACtB;AAAA,4BACF,CAAC;AAAA,0BACH;AAAA,wBACF,CAAC;AAAA,sBACH;AACA,sBAAAK,SAAQ,UAAU,sBAAsB,SAAU,OAAO;AACvD,4BAAI,QAAQ;AACZ,8BAAM,QAAQ,SAAU,MAAM;AAC5B,8BAAI,OAAO,SAAS,YAAY,KAAK,OAAO;AAC1C,kCAAM,SAAS;AAAA,8BACb,OAAO,KAAK;AAAA,8BACZ,OAAO,KAAK;AAAA,8BACZ,UAAU,KAAK;AAAA,8BACf,kBAAkB,KAAK;AAAA,8BACvB,aAAa,KAAK;AAAA,4BACpB,CAAC;AAAA,0BACH;AACA,8BAAI,OAAO,SAAS,UAAU;AAC5B,kCAAM,SAAS;AAAA,8BACb,OAAO;AAAA,4BACT,CAAC;AAAA,0BACH;AAAA,wBACF,CAAC;AAAA,sBACH;AACA,sBAAAA,SAAQ,UAAU,mBAAmB,SAAU,MAAM;AACnD,4BAAI,QAAQ;AACZ,4BAAI,YAAY,GAAG,QAAQ,SAAS,IAAI,EAAE,YAAY;AACtD,4BAAI,aAAa;AAAA,0BACf,QAAQ,WAAY;AAClB,gCAAI,CAAC,KAAK,OAAO;AACf;AAAA,4BACF;AAGA,gCAAI,CAAC,MAAM,gBAAgB;AACzB,oCAAM,WAAW;AAAA,gCACf,OAAO,KAAK;AAAA,gCACZ,OAAO,KAAK;AAAA,gCACZ,YAAY;AAAA,gCACZ,YAAY;AAAA,gCACZ,kBAAkB,KAAK;AAAA,gCACvB,aAAa,KAAK;AAAA,8BACpB,CAAC;AAAA,4BACH,OAAO;AACL,oCAAM,SAAS;AAAA,gCACb,OAAO,KAAK;AAAA,gCACZ,OAAO,KAAK;AAAA,gCACZ,UAAU,KAAK;AAAA,gCACf,kBAAkB,KAAK;AAAA,gCACvB,aAAa,KAAK;AAAA,8BACpB,CAAC;AAAA,4BACH;AAAA,0BACF;AAAA,0BACA,QAAQ,WAAY;AAClB,gCAAI,CAAC,MAAM,gBAAgB;AACzB,oCAAM,WAAW;AAAA,gCACf,OAAO;AAAA,gCACP,OAAO;AAAA,gCACP,YAAY;AAAA,gCACZ,YAAY;AAAA,8BACd,CAAC;AAAA,4BACH,OAAO;AACL,oCAAM,SAAS;AAAA,gCACb,OAAO;AAAA,8BACT,CAAC;AAAA,4BACH;AAAA,0BACF;AAAA,wBACF;AACA,mCAAW,QAAQ,EAAE;AAAA,sBACvB;AACA,sBAAAA,SAAQ,UAAU,8BAA8B,SAAU,OAAO;AAC/D,4BAAI,QAAQ;AACZ,4BAAI,UAAU,KAAK,OAAO;AAE1B,4BAAI,cAAc,QAAQ,KAAK,SAAU,QAAQ;AAC/C,iCAAO,MAAM,OAAO,cAAc,OAAO,OAAO,KAAK;AAAA,wBACvD,CAAC;AACD,4BAAI,eAAe,CAAC,YAAY,UAAU;AACxC,+BAAK,SAAS;AAAA,4BACZ,OAAO,YAAY;AAAA,4BACnB,OAAO,YAAY;AAAA,4BACnB,UAAU,YAAY;AAAA,4BACtB,SAAS,YAAY;AAAA,4BACrB,kBAAkB,YAAY;AAAA,4BAC9B,aAAa,YAAY;AAAA,4BACzB,SAAS,YAAY;AAAA,0BACvB,CAAC;AAAA,wBACH;AAAA,sBACF;AACA,sBAAAA,SAAQ,UAAU,4BAA4B,WAAY;AACxD,4BAAI,KAAK,oBAAoB,KAAK,cAAc,mBAAmB;AACjE,8BAAI,oBAAoB,KAAK,cAAc;AAC3C,iCAAO,oBAAoB,kBAAkB,OAAO;AAAA,wBACtD;AACA,4BAAIP,MAAK,KAAK,QACZE,eAAcF,IAAG,aACjB,mBAAmBA,IAAG;AACxB,4BAAI,UAAU,KAAK,cAAc,QAAQ;AACzC,4BAAIE,cAAa;AACf,8BAAI,kBAAkB;AACpB,mCAAO;AAAA,0BACT;AACA,8BAAI,QAAQ,aAAa;AACvB,mCAAO,QAAQ;AAAA,0BACjB;AAAA,wBACF;AACA,+BAAO;AAAA,sBACT;AACA,6BAAOK;AAAA,oBACT,EAAE;AAAA;AACF,kBAAAT,SAAQ,SAAS,IAAIS;AAAA,gBAEf;AAAA;AAAA;AAAA,cAEA;AAAA;AAAA,gBACC,SAAS,yBAAyBT,UAASC,sBAAqB;AAIvE,yBAAO,eAAeD,UAAS,cAAe;AAAA,oBAC5C,OAAO;AAAA,kBACT,CAAE;AACF,sBAAI,UAAUC,qBAAoB,GAAG;AACrC,sBAAI,cAAcA,qBAAoB,GAAG;AACzC,sBAAI;AAAA;AAAA,oBAAyB,WAAY;AACvC,+BAASkB,WAAUjB,KAAI;AACrB,4BAAIQ,WAAUR,IAAG,SACf,OAAOA,IAAG,MACV,aAAaA,IAAG,YAChBkB,YAAWlB,IAAG;AAChB,6BAAK,UAAUQ;AACf,6BAAK,aAAa;AAClB,6BAAK,OAAO;AACZ,6BAAK,WAAWU;AAChB,6BAAK,SAAS;AACd,6BAAK,YAAY;AACjB,6BAAK,aAAa;AAClB,6BAAK,aAAa;AAClB,6BAAK,YAAY;AACjB,6BAAK,WAAW,KAAK,SAAS,KAAK,IAAI;AACvC,6BAAK,UAAU,KAAK,QAAQ,KAAK,IAAI;AAAA,sBACvC;AACA,sBAAAD,WAAU,UAAU,oBAAoB,WAAY;AAClD,6BAAK,QAAQ,iBAAiB,SAAS,KAAK,QAAQ;AACpD,6BAAK,QAAQ,iBAAiB,QAAQ,KAAK,OAAO;AAAA,sBACpD;AACA,sBAAAA,WAAU,UAAU,uBAAuB,WAAY;AACrD,6BAAK,QAAQ,oBAAoB,SAAS,KAAK,QAAQ;AACvD,6BAAK,QAAQ,oBAAoB,QAAQ,KAAK,OAAO;AAAA,sBACvD;AAKA,sBAAAA,WAAU,UAAU,aAAa,SAAU,aAAa;AACtD,4BAAI,OAAO,gBAAgB,UAAU;AACnC,iCAAO;AAAA,wBACT;AAGA,4BAAI,aAAa;AACjB,4BAAI,KAAK,aAAa,QAAQ;AAC5B,uCAAa,CAAC,OAAO,WAAW,gBAAgB,OAAO,cAAc,GAAG,KAAK,CAAC,EAAE;AAAA,wBAClF,WAAW,KAAK,aAAa,OAAO;AAClC,uCAAa;AAAA,wBACf;AACA,+BAAO;AAAA,sBACT;AACA,sBAAAA,WAAU,UAAU,sBAAsB,SAAU,oBAAoB;AACtE,6BAAK,QAAQ,aAAa,yBAAyB,kBAAkB;AAAA,sBACvE;AACA,sBAAAA,WAAU,UAAU,yBAAyB,WAAY;AACvD,6BAAK,QAAQ,gBAAgB,uBAAuB;AAAA,sBACtD;AACA,sBAAAA,WAAU,UAAU,OAAO,SAAU,aAAa;AAChD,6BAAK,QAAQ,UAAU,IAAI,KAAK,WAAW,SAAS;AACpD,6BAAK,QAAQ,aAAa,iBAAiB,MAAM;AACjD,6BAAK,SAAS;AACd,4BAAI,KAAK,WAAW,WAAW,GAAG;AAChC,+BAAK,QAAQ,UAAU,IAAI,KAAK,WAAW,YAAY;AACvD,+BAAK,YAAY;AAAA,wBACnB;AAAA,sBACF;AACA,sBAAAA,WAAU,UAAU,QAAQ,WAAY;AACtC,6BAAK,QAAQ,UAAU,OAAO,KAAK,WAAW,SAAS;AACvD,6BAAK,QAAQ,aAAa,iBAAiB,OAAO;AAClD,6BAAK,uBAAuB;AAC5B,6BAAK,SAAS;AAEd,4BAAI,KAAK,WAAW;AAClB,+BAAK,QAAQ,UAAU,OAAO,KAAK,WAAW,YAAY;AAC1D,+BAAK,YAAY;AAAA,wBACnB;AAAA,sBACF;AACA,sBAAAA,WAAU,UAAU,QAAQ,WAAY;AACtC,4BAAI,CAAC,KAAK,YAAY;AACpB,+BAAK,QAAQ,MAAM;AAAA,wBACrB;AAAA,sBACF;AACA,sBAAAA,WAAU,UAAU,gBAAgB,WAAY;AAC9C,6BAAK,QAAQ,UAAU,IAAI,KAAK,WAAW,UAAU;AAAA,sBACvD;AACA,sBAAAA,WAAU,UAAU,mBAAmB,WAAY;AACjD,6BAAK,QAAQ,UAAU,OAAO,KAAK,WAAW,UAAU;AAAA,sBAC1D;AACA,sBAAAA,WAAU,UAAU,SAAS,WAAY;AACvC,6BAAK,QAAQ,UAAU,OAAO,KAAK,WAAW,aAAa;AAC3D,6BAAK,QAAQ,gBAAgB,eAAe;AAC5C,4BAAI,KAAK,SAAS,YAAY,iBAAiB;AAC7C,+BAAK,QAAQ,aAAa,YAAY,GAAG;AAAA,wBAC3C;AACA,6BAAK,aAAa;AAAA,sBACpB;AACA,sBAAAA,WAAU,UAAU,UAAU,WAAY;AACxC,6BAAK,QAAQ,UAAU,IAAI,KAAK,WAAW,aAAa;AACxD,6BAAK,QAAQ,aAAa,iBAAiB,MAAM;AACjD,4BAAI,KAAK,SAAS,YAAY,iBAAiB;AAC7C,+BAAK,QAAQ,aAAa,YAAY,IAAI;AAAA,wBAC5C;AACA,6BAAK,aAAa;AAAA,sBACpB;AACA,sBAAAA,WAAU,UAAU,OAAO,SAAUT,UAAS;AAC5C,yBAAC,GAAG,QAAQ,MAAMA,UAAS,KAAK,OAAO;AAAA,sBACzC;AACA,sBAAAS,WAAU,UAAU,SAAS,SAAUT,UAAS;AAC9C,4BAAI,KAAK,QAAQ,YAAY;AAE3B,+BAAK,QAAQ,WAAW,aAAaA,UAAS,KAAK,OAAO;AAE1D,+BAAK,QAAQ,WAAW,YAAY,KAAK,OAAO;AAAA,wBAClD;AAAA,sBACF;AACA,sBAAAS,WAAU,UAAU,kBAAkB,WAAY;AAChD,6BAAK,QAAQ,UAAU,IAAI,KAAK,WAAW,YAAY;AACvD,6BAAK,QAAQ,aAAa,aAAa,MAAM;AAC7C,6BAAK,YAAY;AAAA,sBACnB;AACA,sBAAAA,WAAU,UAAU,qBAAqB,WAAY;AACnD,6BAAK,QAAQ,UAAU,OAAO,KAAK,WAAW,YAAY;AAC1D,6BAAK,QAAQ,gBAAgB,WAAW;AACxC,6BAAK,YAAY;AAAA,sBACnB;AACA,sBAAAA,WAAU,UAAU,WAAW,WAAY;AACzC,6BAAK,aAAa;AAAA,sBACpB;AACA,sBAAAA,WAAU,UAAU,UAAU,WAAY;AACxC,6BAAK,aAAa;AAAA,sBACpB;AACA,6BAAOA;AAAA,oBACT,EAAE;AAAA;AACF,kBAAAnB,SAAQ,SAAS,IAAI;AAAA,gBAEf;AAAA;AAAA;AAAA,cAEA;AAAA;AAAA,gBACC,SAAS,yBAAyBA,UAAS;AAIlD,yBAAO,eAAeA,UAAS,cAAe;AAAA,oBAC5C,OAAO;AAAA,kBACT,CAAE;AACF,sBAAI;AAAA;AAAA,oBAAwB,WAAY;AACtC,+BAASqB,UAASnB,KAAI;AACpB,4BAAIQ,WAAUR,IAAG,SACf,OAAOA,IAAG,MACV,aAAaA,IAAG;AAClB,6BAAK,UAAUQ;AACf,6BAAK,aAAa;AAClB,6BAAK,OAAO;AACZ,6BAAK,WAAW;AAAA,sBAClB;AACA,6BAAO,eAAeW,UAAS,WAAW,yBAAyB;AAAA;AAAA;AAAA;AAAA,wBAIjE,KAAK,WAAY;AACf,iCAAO,KAAK,QAAQ,sBAAsB,EAAE;AAAA,wBAC9C;AAAA,wBACA,YAAY;AAAA,wBACZ,cAAc;AAAA,sBAChB,CAAC;AACD,sBAAAA,UAAS,UAAU,WAAW,SAAU,UAAU;AAChD,+BAAO,KAAK,QAAQ,cAAc,QAAQ;AAAA,sBAC5C;AAIA,sBAAAA,UAAS,UAAU,OAAO,WAAY;AACpC,6BAAK,QAAQ,UAAU,IAAI,KAAK,WAAW,WAAW;AACtD,6BAAK,QAAQ,aAAa,iBAAiB,MAAM;AACjD,6BAAK,WAAW;AAChB,+BAAO;AAAA,sBACT;AAIA,sBAAAA,UAAS,UAAU,OAAO,WAAY;AACpC,6BAAK,QAAQ,UAAU,OAAO,KAAK,WAAW,WAAW;AACzD,6BAAK,QAAQ,aAAa,iBAAiB,OAAO;AAClD,6BAAK,WAAW;AAChB,+BAAO;AAAA,sBACT;AACA,6BAAOA;AAAA,oBACT,EAAE;AAAA;AACF,kBAAArB,SAAQ,SAAS,IAAI;AAAA,gBAEf;AAAA;AAAA;AAAA,cAEA;AAAA;AAAA,gBACC,SAAS,yBAAyBA,UAASC,sBAAqB;AAIvE,sBAAI,kBAAkB,QAAQ,KAAK,mBAAmB,SAAUO,MAAK;AACnE,2BAAOA,QAAOA,KAAI,aAAaA,OAAM;AAAA,sBACnC,WAAWA;AAAA,oBACb;AAAA,kBACF;AACA,yBAAO,eAAeR,UAAS,cAAe;AAAA,oBAC5C,OAAO;AAAA,kBACT,CAAE;AACF,kBAAAA,SAAQ,gBAAgBA,SAAQ,eAAeA,SAAQ,OAAOA,SAAQ,QAAQA,SAAQ,YAAYA,SAAQ,WAAW;AACrH,sBAAI,aAAa,gBAAgBC,qBAAoB,GAAG,CAAC;AACzD,kBAAAD,SAAQ,WAAW,WAAW;AAC9B,sBAAI,cAAc,gBAAgBC,qBAAoB,GAAG,CAAC;AAC1D,kBAAAD,SAAQ,YAAY,YAAY;AAChC,sBAAI,UAAU,gBAAgBC,qBAAoB,EAAE,CAAC;AACrD,kBAAAD,SAAQ,QAAQ,QAAQ;AACxB,sBAAI,SAAS,gBAAgBC,qBAAoB,GAAG,CAAC;AACrD,kBAAAD,SAAQ,OAAO,OAAO;AACtB,sBAAI,kBAAkB,gBAAgBC,qBAAoB,GAAG,CAAC;AAC9D,kBAAAD,SAAQ,eAAe,gBAAgB;AACvC,sBAAI,mBAAmB,gBAAgBC,qBAAoB,GAAG,CAAC;AAC/D,kBAAAD,SAAQ,gBAAgB,iBAAiB;AAAA,gBAEnC;AAAA;AAAA;AAAA,cAEA;AAAA;AAAA,gBACC,SAAS,yBAAyBA,UAASC,sBAAqB;AAIvE,yBAAO,eAAeD,UAAS,cAAe;AAAA,oBAC5C,OAAO;AAAA,kBACT,CAAE;AACF,sBAAI,UAAUC,qBAAoB,GAAG;AACrC,sBAAI,cAAcA,qBAAoB,GAAG;AACzC,sBAAIqB;AAAA;AAAA,oBAAqB,WAAY;AACnC,+BAASA,OAAMpB,KAAI;AACjB,4BAAIQ,WAAUR,IAAG,SACf,OAAOA,IAAG,MACV,aAAaA,IAAG,YAChB,eAAeA,IAAG;AACpB,6BAAK,UAAUQ;AACf,6BAAK,OAAO;AACZ,6BAAK,aAAa;AAClB,6BAAK,eAAe;AACpB,6BAAK,aAAa,KAAK,QAAQ,YAAY,SAAS,aAAa;AACjE,6BAAK,aAAaA,SAAQ;AAC1B,6BAAK,WAAW,KAAK,SAAS,KAAK,IAAI;AACvC,6BAAK,WAAW,KAAK,SAAS,KAAK,IAAI;AACvC,6BAAK,WAAW,KAAK,SAAS,KAAK,IAAI;AACvC,6BAAK,UAAU,KAAK,QAAQ,KAAK,IAAI;AAAA,sBACvC;AACA,6BAAO,eAAeY,OAAM,WAAW,eAAe;AAAA,wBACpD,KAAK,SAAUlB,cAAa;AAC1B,+BAAK,QAAQ,cAAcA;AAAA,wBAC7B;AAAA,wBACA,YAAY;AAAA,wBACZ,cAAc;AAAA,sBAChB,CAAC;AACD,6BAAO,eAAekB,OAAM,WAAW,SAAS;AAAA,wBAC9C,KAAK,WAAY;AACf,kCAAQ,GAAG,QAAQ,UAAU,KAAK,QAAQ,KAAK;AAAA,wBACjD;AAAA,wBACA,KAAK,SAAU,OAAO;AACpB,+BAAK,QAAQ,QAAQ;AAAA,wBACvB;AAAA,wBACA,YAAY;AAAA,wBACZ,cAAc;AAAA,sBAChB,CAAC;AACD,6BAAO,eAAeA,OAAM,WAAW,YAAY;AAAA,wBACjD,KAAK,WAAY;AACf,iCAAO,KAAK,QAAQ;AAAA,wBACtB;AAAA,wBACA,YAAY;AAAA,wBACZ,cAAc;AAAA,sBAChB,CAAC;AACD,sBAAAA,OAAM,UAAU,oBAAoB,WAAY;AAC9C,6BAAK,QAAQ,iBAAiB,SAAS,KAAK,QAAQ;AACpD,6BAAK,QAAQ,iBAAiB,SAAS,KAAK,UAAU;AAAA,0BACpD,SAAS;AAAA,wBACX,CAAC;AACD,6BAAK,QAAQ,iBAAiB,SAAS,KAAK,UAAU;AAAA,0BACpD,SAAS;AAAA,wBACX,CAAC;AACD,6BAAK,QAAQ,iBAAiB,QAAQ,KAAK,SAAS;AAAA,0BAClD,SAAS;AAAA,wBACX,CAAC;AAAA,sBACH;AACA,sBAAAA,OAAM,UAAU,uBAAuB,WAAY;AACjD,6BAAK,QAAQ,oBAAoB,SAAS,KAAK,QAAQ;AACvD,6BAAK,QAAQ,oBAAoB,SAAS,KAAK,QAAQ;AACvD,6BAAK,QAAQ,oBAAoB,SAAS,KAAK,QAAQ;AACvD,6BAAK,QAAQ,oBAAoB,QAAQ,KAAK,OAAO;AAAA,sBACvD;AACA,sBAAAA,OAAM,UAAU,SAAS,WAAY;AACnC,6BAAK,QAAQ,gBAAgB,UAAU;AACvC,6BAAK,aAAa;AAAA,sBACpB;AACA,sBAAAA,OAAM,UAAU,UAAU,WAAY;AACpC,6BAAK,QAAQ,aAAa,YAAY,EAAE;AACxC,6BAAK,aAAa;AAAA,sBACpB;AACA,sBAAAA,OAAM,UAAU,QAAQ,WAAY;AAClC,4BAAI,CAAC,KAAK,YAAY;AACpB,+BAAK,QAAQ,MAAM;AAAA,wBACrB;AAAA,sBACF;AACA,sBAAAA,OAAM,UAAU,OAAO,WAAY;AACjC,4BAAI,KAAK,YAAY;AACnB,+BAAK,QAAQ,KAAK;AAAA,wBACpB;AAAA,sBACF;AACA,sBAAAA,OAAM,UAAU,QAAQ,SAAU,UAAU;AAC1C,4BAAI,aAAa,QAAQ;AACvB,qCAAW;AAAA,wBACb;AACA,4BAAI,KAAK,QAAQ,OAAO;AACtB,+BAAK,QAAQ,QAAQ;AAAA,wBACvB;AACA,4BAAI,UAAU;AACZ,+BAAK,SAAS;AAAA,wBAChB;AACA,+BAAO;AAAA,sBACT;AAKA,sBAAAA,OAAM,UAAU,WAAW,WAAY;AAErC,4BAAIpB,MAAK,KAAK,SACZ,QAAQA,IAAG,OACX,QAAQA,IAAG,OACXE,eAAcF,IAAG;AACnB,8BAAM,WAAW,GAAG,OAAOE,aAAY,SAAS,GAAG,IAAI;AACvD,8BAAM,QAAQ,GAAG,OAAO,MAAM,SAAS,GAAG,IAAI;AAAA,sBAChD;AACA,sBAAAkB,OAAM,UAAU,sBAAsB,SAAU,oBAAoB;AAClE,6BAAK,QAAQ,aAAa,yBAAyB,kBAAkB;AAAA,sBACvE;AACA,sBAAAA,OAAM,UAAU,yBAAyB,WAAY;AACnD,6BAAK,QAAQ,gBAAgB,uBAAuB;AAAA,sBACtD;AACA,sBAAAA,OAAM,UAAU,WAAW,WAAY;AACrC,4BAAI,KAAK,SAAS,YAAY,iBAAiB;AAC7C,+BAAK,SAAS;AAAA,wBAChB;AAAA,sBACF;AACA,sBAAAA,OAAM,UAAU,WAAW,SAAU,OAAO;AAC1C,4BAAI,KAAK,cAAc;AACrB,gCAAM,eAAe;AAAA,wBACvB;AAAA,sBACF;AACA,sBAAAA,OAAM,UAAU,WAAW,WAAY;AACrC,6BAAK,aAAa;AAAA,sBACpB;AACA,sBAAAA,OAAM,UAAU,UAAU,WAAY;AACpC,6BAAK,aAAa;AAAA,sBACpB;AACA,6BAAOA;AAAA,oBACT,EAAE;AAAA;AACF,kBAAAtB,SAAQ,SAAS,IAAIsB;AAAA,gBAEf;AAAA;AAAA;AAAA,cAEA;AAAA;AAAA,gBACC,SAAS,yBAAyBtB,UAASC,sBAAqB;AAIvE,yBAAO,eAAeD,UAAS,cAAe;AAAA,oBAC5C,OAAO;AAAA,kBACT,CAAE;AACF,sBAAI,cAAcC,qBAAoB,GAAG;AACzC,sBAAI;AAAA;AAAA,oBAAoB,WAAY;AAClC,+BAASsB,MAAKrB,KAAI;AAChB,4BAAIQ,WAAUR,IAAG;AACjB,6BAAK,UAAUQ;AACf,6BAAK,YAAY,KAAK,QAAQ;AAC9B,6BAAK,SAAS,KAAK,QAAQ;AAAA,sBAC7B;AACA,sBAAAa,MAAK,UAAU,QAAQ,WAAY;AACjC,6BAAK,QAAQ,YAAY;AAAA,sBAC3B;AACA,sBAAAA,MAAK,UAAU,SAAS,SAAUC,OAAM;AACtC,6BAAK,QAAQ,YAAYA,KAAI;AAAA,sBAC/B;AACA,sBAAAD,MAAK,UAAU,WAAW,SAAU,UAAU;AAC5C,+BAAO,KAAK,QAAQ,cAAc,QAAQ;AAAA,sBAC5C;AACA,sBAAAA,MAAK,UAAU,cAAc,WAAY;AACvC,+BAAO,KAAK,QAAQ,cAAc;AAAA,sBACpC;AACA,sBAAAA,MAAK,UAAU,cAAc,WAAY;AACvC,6BAAK,QAAQ,YAAY;AAAA,sBAC3B;AACA,sBAAAA,MAAK,UAAU,uBAAuB,SAAUb,UAAS,WAAW;AAClE,4BAAI,QAAQ;AACZ,4BAAI,CAACA,UAAS;AACZ;AAAA,wBACF;AACA,4BAAI,aAAa,KAAK,QAAQ;AAE9B,4BAAI,qBAAqB,KAAK,QAAQ,YAAY;AAClD,4BAAI,gBAAgBA,SAAQ;AAE5B,4BAAI,aAAaA,SAAQ,YAAY;AAErC,4BAAI,cAAc,YAAY,IAAI,KAAK,QAAQ,YAAY,aAAa,qBAAqBA,SAAQ;AACrG,8CAAsB,WAAY;AAChC,gCAAM,eAAe,aAAa,SAAS;AAAA,wBAC7C,CAAC;AAAA,sBACH;AACA,sBAAAa,MAAK,UAAU,cAAc,SAAU,WAAW,UAAU,aAAa;AACvE,4BAAI,UAAU,cAAc,aAAa;AACzC,4BAAI,WAAW,SAAS,IAAI,SAAS;AACrC,6BAAK,QAAQ,YAAY,YAAY;AAAA,sBACvC;AACA,sBAAAA,MAAK,UAAU,YAAY,SAAU,WAAW,UAAU,aAAa;AACrE,4BAAI,UAAU,YAAY,eAAe;AACzC,4BAAI,WAAW,SAAS,IAAI,SAAS;AACrC,6BAAK,QAAQ,YAAY,YAAY;AAAA,sBACvC;AACA,sBAAAA,MAAK,UAAU,iBAAiB,SAAU,aAAa,WAAW;AAChE,4BAAI,QAAQ;AACZ,4BAAI,WAAW,YAAY;AAC3B,4BAAI,sBAAsB,KAAK,QAAQ;AACvC,4BAAI,oBAAoB;AACxB,4BAAI,YAAY,GAAG;AACjB,+BAAK,YAAY,qBAAqB,UAAU,WAAW;AAC3D,8BAAI,sBAAsB,aAAa;AACrC,gDAAoB;AAAA,0BACtB;AAAA,wBACF,OAAO;AACL,+BAAK,UAAU,qBAAqB,UAAU,WAAW;AACzD,8BAAI,sBAAsB,aAAa;AACrC,gDAAoB;AAAA,0BACtB;AAAA,wBACF;AACA,4BAAI,mBAAmB;AACrB,gDAAsB,WAAY;AAChC,kCAAM,eAAe,aAAa,SAAS;AAAA,0BAC7C,CAAC;AAAA,wBACH;AAAA,sBACF;AACA,6BAAOA;AAAA,oBACT,EAAE;AAAA;AACF,kBAAAvB,SAAQ,SAAS,IAAI;AAAA,gBAEf;AAAA;AAAA;AAAA,cAEA;AAAA;AAAA,gBACC,SAAS,yBAAyBA,UAASC,sBAAqB;AAIvE,yBAAO,eAAeD,UAAS,cAAe;AAAA,oBAC5C,OAAO;AAAA,kBACT,CAAE;AACF,sBAAI,UAAUC,qBAAoB,GAAG;AACrC,sBAAI;AAAA;AAAA,oBAA8B,WAAY;AAC5C,+BAASwB,gBAAevB,KAAI;AAC1B,4BAAIQ,WAAUR,IAAG,SACf,aAAaA,IAAG;AAClB,6BAAK,UAAUQ;AACf,6BAAK,aAAa;AAClB,4BAAI,EAAEA,oBAAmB,qBAAqB,EAAEA,oBAAmB,oBAAoB;AACrF,gCAAM,IAAI,UAAU,wBAAwB;AAAA,wBAC9C;AACA,6BAAK,aAAa;AAAA,sBACpB;AACA,6BAAO,eAAee,gBAAe,WAAW,YAAY;AAAA,wBAC1D,KAAK,WAAY;AACf,iCAAO,KAAK,QAAQ,QAAQ,WAAW;AAAA,wBACzC;AAAA,wBACA,YAAY;AAAA,wBACZ,cAAc;AAAA,sBAChB,CAAC;AACD,6BAAO,eAAeA,gBAAe,WAAW,OAAO;AAAA,wBACrD,KAAK,WAAY;AACf,iCAAO,KAAK,QAAQ;AAAA,wBACtB;AAAA,wBACA,YAAY;AAAA,wBACZ,cAAc;AAAA,sBAChB,CAAC;AACD,6BAAO,eAAeA,gBAAe,WAAW,SAAS;AAAA,wBACvD,KAAK,WAAY;AACf,iCAAO,KAAK,QAAQ;AAAA,wBACtB;AAAA,wBACA,KAAK,SAAU,OAAO;AAEpB,+BAAK,QAAQ,QAAQ;AAAA,wBACvB;AAAA,wBACA,YAAY;AAAA,wBACZ,cAAc;AAAA,sBAChB,CAAC;AACD,sBAAAA,gBAAe,UAAU,UAAU,WAAY;AAE7C,6BAAK,QAAQ,UAAU,IAAI,KAAK,WAAW,KAAK;AAChD,6BAAK,QAAQ,SAAS;AAEtB,6BAAK,QAAQ,WAAW;AAExB,4BAAI,YAAY,KAAK,QAAQ,aAAa,OAAO;AACjD,4BAAI,WAAW;AACb,+BAAK,QAAQ,aAAa,0BAA0B,SAAS;AAAA,wBAC/D;AACA,6BAAK,QAAQ,aAAa,eAAe,QAAQ;AAAA,sBACnD;AACA,sBAAAA,gBAAe,UAAU,SAAS,WAAY;AAE5C,6BAAK,QAAQ,UAAU,OAAO,KAAK,WAAW,KAAK;AACnD,6BAAK,QAAQ,SAAS;AACtB,6BAAK,QAAQ,gBAAgB,UAAU;AAEvC,4BAAI,YAAY,KAAK,QAAQ,aAAa,wBAAwB;AAClE,4BAAI,WAAW;AACb,+BAAK,QAAQ,gBAAgB,wBAAwB;AACrD,+BAAK,QAAQ,aAAa,SAAS,SAAS;AAAA,wBAC9C,OAAO;AACL,+BAAK,QAAQ,gBAAgB,OAAO;AAAA,wBACtC;AACA,6BAAK,QAAQ,gBAAgB,aAAa;AAG1C,6BAAK,QAAQ,QAAQ,KAAK,QAAQ;AAAA,sBACpC;AAEA,sBAAAA,gBAAe,UAAU,SAAS,WAAY;AAC5C,6BAAK,QAAQ,gBAAgB,UAAU;AACvC,6BAAK,QAAQ,WAAW;AACxB,6BAAK,aAAa;AAAA,sBACpB;AACA,sBAAAA,gBAAe,UAAU,UAAU,WAAY;AAC7C,6BAAK,QAAQ,aAAa,YAAY,EAAE;AACxC,6BAAK,QAAQ,WAAW;AACxB,6BAAK,aAAa;AAAA,sBACpB;AACA,sBAAAA,gBAAe,UAAU,eAAe,SAAU,WAAWb,OAAM;AACjE,yBAAC,GAAG,QAAQ,eAAe,KAAK,SAAS,WAAWA,KAAI;AAAA,sBAC1D;AACA,6BAAOa;AAAA,oBACT,EAAE;AAAA;AACF,kBAAAzB,SAAQ,SAAS,IAAI;AAAA,gBAEf;AAAA;AAAA;AAAA,cAEA;AAAA;AAAA,gBACC,SAAS,yBAAyBA,UAASC,sBAAqB;AAIvE,sBAAI,YAAY,QAAQ,KAAK,aAAa,WAAY;AACpD,wBAAI,gBAAgB,SAAU,GAAGyB,IAAG;AAClC,sCAAgB,OAAO,kBAAkB;AAAA,wBACvC,WAAW,CAAC;AAAA,sBACd,aAAa,SAAS,SAAUC,IAAGD,IAAG;AACpC,wBAAAC,GAAE,YAAYD;AAAA,sBAChB,KAAK,SAAUC,IAAGD,IAAG;AACnB,iCAAS,KAAKA;AAAG,8BAAI,OAAO,UAAU,eAAe,KAAKA,IAAG,CAAC;AAAG,4BAAAC,GAAE,CAAC,IAAID,GAAE,CAAC;AAAA,sBAC7E;AACA,6BAAO,cAAc,GAAGA,EAAC;AAAA,oBAC3B;AACA,2BAAO,SAAU,GAAGA,IAAG;AACrB,0BAAI,OAAOA,OAAM,cAAcA,OAAM;AAAM,8BAAM,IAAI,UAAU,yBAAyB,OAAOA,EAAC,IAAI,+BAA+B;AACnI,oCAAc,GAAGA,EAAC;AAClB,+BAAS,KAAK;AACZ,6BAAK,cAAc;AAAA,sBACrB;AACA,wBAAE,YAAYA,OAAM,OAAO,OAAO,OAAOA,EAAC,KAAK,GAAG,YAAYA,GAAE,WAAW,IAAI,GAAG;AAAA,oBACpF;AAAA,kBACF,EAAE;AACF,sBAAI,kBAAkB,QAAQ,KAAK,mBAAmB,SAAUlB,MAAK;AACnE,2BAAOA,QAAOA,KAAI,aAAaA,OAAM;AAAA,sBACnC,WAAWA;AAAA,oBACb;AAAA,kBACF;AACA,yBAAO,eAAeR,UAAS,cAAe;AAAA,oBAC5C,OAAO;AAAA,kBACT,CAAE;AACF,sBAAI,oBAAoB,gBAAgBC,qBAAoB,GAAG,CAAC;AAChE,sBAAI;AAAA;AAAA,oBAA4B,SAAU,QAAQ;AAChD,gCAAU2B,eAAc,MAAM;AAC9B,+BAASA,cAAa1B,KAAI;AACxB,4BAAIQ,WAAUR,IAAG,SACf,aAAaA,IAAG,YAChB,YAAYA,IAAG;AACjB,4BAAI,QAAQ,OAAO,KAAK,MAAM;AAAA,0BAC5B,SAASQ;AAAA,0BACT;AAAA,wBACF,CAAC,KAAK;AACN,8BAAM,YAAY;AAClB,+BAAO;AAAA,sBACT;AACA,6BAAO,eAAekB,cAAa,WAAW,SAAS;AAAA,wBACrD,KAAK,WAAY;AACf,iCAAO,KAAK,QAAQ;AAAA,wBACtB;AAAA,wBACA,KAAK,SAAU,OAAO;AACpB,+BAAK,QAAQ,aAAa,SAAS,KAAK;AACxC,+BAAK,QAAQ,QAAQ;AAAA,wBACvB;AAAA,wBACA,YAAY;AAAA,wBACZ,cAAc;AAAA,sBAChB,CAAC;AACD,6BAAOA;AAAA,oBACT,EAAE,kBAAkB,OAAO;AAAA;AAC3B,kBAAA5B,SAAQ,SAAS,IAAI;AAAA,gBAEf;AAAA;AAAA;AAAA,cAEA;AAAA;AAAA,gBACC,SAAS,yBAAyBA,UAASC,sBAAqB;AAIvE,sBAAI,YAAY,QAAQ,KAAK,aAAa,WAAY;AACpD,wBAAI,gBAAgB,SAAU,GAAGyB,IAAG;AAClC,sCAAgB,OAAO,kBAAkB;AAAA,wBACvC,WAAW,CAAC;AAAA,sBACd,aAAa,SAAS,SAAUC,IAAGD,IAAG;AACpC,wBAAAC,GAAE,YAAYD;AAAA,sBAChB,KAAK,SAAUC,IAAGD,IAAG;AACnB,iCAAS,KAAKA;AAAG,8BAAI,OAAO,UAAU,eAAe,KAAKA,IAAG,CAAC;AAAG,4BAAAC,GAAE,CAAC,IAAID,GAAE,CAAC;AAAA,sBAC7E;AACA,6BAAO,cAAc,GAAGA,EAAC;AAAA,oBAC3B;AACA,2BAAO,SAAU,GAAGA,IAAG;AACrB,0BAAI,OAAOA,OAAM,cAAcA,OAAM;AAAM,8BAAM,IAAI,UAAU,yBAAyB,OAAOA,EAAC,IAAI,+BAA+B;AACnI,oCAAc,GAAGA,EAAC;AAClB,+BAAS,KAAK;AACZ,6BAAK,cAAc;AAAA,sBACrB;AACA,wBAAE,YAAYA,OAAM,OAAO,OAAO,OAAOA,EAAC,KAAK,GAAG,YAAYA,GAAE,WAAW,IAAI,GAAG;AAAA,oBACpF;AAAA,kBACF,EAAE;AACF,sBAAI,kBAAkB,QAAQ,KAAK,mBAAmB,SAAUlB,MAAK;AACnE,2BAAOA,QAAOA,KAAI,aAAaA,OAAM;AAAA,sBACnC,WAAWA;AAAA,oBACb;AAAA,kBACF;AACA,yBAAO,eAAeR,UAAS,cAAe;AAAA,oBAC5C,OAAO;AAAA,kBACT,CAAE;AACF,sBAAI,oBAAoB,gBAAgBC,qBAAoB,GAAG,CAAC;AAChE,sBAAI;AAAA;AAAA,oBAA6B,SAAU,QAAQ;AACjD,gCAAU4B,gBAAe,MAAM;AAC/B,+BAASA,eAAc3B,KAAI;AACzB,4BAAIQ,WAAUR,IAAG,SACf,aAAaA,IAAG,YAChB,WAAWA,IAAG;AAChB,4BAAI,QAAQ,OAAO,KAAK,MAAM;AAAA,0BAC5B,SAASQ;AAAA,0BACT;AAAA,wBACF,CAAC,KAAK;AACN,8BAAM,WAAW;AACjB,+BAAO;AAAA,sBACT;AACA,6BAAO,eAAemB,eAAc,WAAW,qBAAqB;AAAA,wBAClE,KAAK,WAAY;AACf,iCAAO,KAAK,QAAQ,cAAc,kBAAkB;AAAA,0BAEpD,KAAK,QAAQ,cAAc,qBAAqB;AAAA,wBAClD;AAAA,wBACA,YAAY;AAAA,wBACZ,cAAc;AAAA,sBAChB,CAAC;AACD,6BAAO,eAAeA,eAAc,WAAW,gBAAgB;AAAA,wBAC7D,KAAK,WAAY;AACf,iCAAO,MAAM,KAAK,KAAK,QAAQ,qBAAqB,UAAU,CAAC;AAAA,wBACjE;AAAA,wBACA,YAAY;AAAA,wBACZ,cAAc;AAAA,sBAChB,CAAC;AACD,6BAAO,eAAeA,eAAc,WAAW,WAAW;AAAA,wBACxD,KAAK,WAAY;AACf,iCAAO,MAAM,KAAK,KAAK,QAAQ,OAAO;AAAA,wBACxC;AAAA,wBACA,KAAK,SAAU,SAAS;AACtB,8BAAI,QAAQ;AACZ,8BAAI,WAAW,SAAS,uBAAuB;AAC/C,8BAAI,sBAAsB,SAAUjB,OAAM;AAExC,gCAAIC,UAAS,MAAM,SAASD,KAAI;AAEhC,qCAAS,YAAYC,OAAM;AAAA,0BAC7B;AAEA,kCAAQ,QAAQ,SAAU,YAAY;AACpC,mCAAO,oBAAoB,UAAU;AAAA,0BACvC,CAAC;AACD,+BAAK,kBAAkB,QAAQ;AAAA,wBACjC;AAAA,wBACA,YAAY;AAAA,wBACZ,cAAc;AAAA,sBAChB,CAAC;AACD,sBAAAgB,eAAc,UAAU,oBAAoB,SAAU,UAAU;AAC9D,6BAAK,QAAQ,YAAY;AACzB,6BAAK,QAAQ,YAAY,QAAQ;AAAA,sBACnC;AACA,6BAAOA;AAAA,oBACT,EAAE,kBAAkB,OAAO;AAAA;AAC3B,kBAAA7B,SAAQ,SAAS,IAAI;AAAA,gBAEf;AAAA;AAAA;AAAA,cAEA;AAAA;AAAA,gBACC,SAAS,yBAAyBA,UAAS;AAIlD,yBAAO,eAAeA,UAAS,cAAe;AAAA,oBAC5C,OAAO;AAAA,kBACT,CAAE;AACF,kBAAAA,SAAQ,kBAAkBA,SAAQ,uBAAuBA,SAAQ,kBAAkBA,SAAQ,YAAYA,SAAQ,YAAYA,SAAQ,eAAeA,SAAQ,SAAS;AACnK,kBAAAA,SAAQ,SAAS;AAAA,oBACf,cAAc;AAAA,oBACd,cAAc;AAAA,oBACd,QAAQ;AAAA,oBACR,QAAQ;AAAA,oBACR,QAAQ;AAAA,oBACR,SAAS;AAAA,oBACT,YAAY;AAAA,oBACZ,eAAe;AAAA,oBACf,iBAAiB;AAAA,oBACjB,iBAAiB;AAAA,kBACnB;AACA,kBAAAA,SAAQ,eAAe;AAAA,oBACrB,YAAY;AAAA,oBACZ,gBAAgB;AAAA,oBAChB,kBAAkB;AAAA,oBAClB,eAAe;AAAA,oBACf,WAAW;AAAA,oBACX,UAAU;AAAA,oBACV,aAAa;AAAA,oBACb,gBAAgB;AAAA,oBAChB,WAAW;AAAA,oBACX,UAAU;AAAA,oBACV,gBAAgB;AAAA,kBAClB;AACA,kBAAAA,SAAQ,YAAY;AAAA,oBAClB,UAAU;AAAA,oBACV,YAAY;AAAA,oBACZ,WAAW;AAAA,oBACX,OAAO;AAAA,oBACP,SAAS;AAAA,oBACT,QAAQ;AAAA,oBACR,UAAU;AAAA,oBACV,aAAa;AAAA,oBACb,eAAe;AAAA,kBACjB;AACA,kBAAAA,SAAQ,YAAY;AACpB,kBAAAA,SAAQ,kBAAkB;AAC1B,kBAAAA,SAAQ,uBAAuB;AAC/B,kBAAAA,SAAQ,kBAAkB;AAAA,gBAEpB;AAAA;AAAA;AAAA,cAEA;AAAA;AAAA,gBACC,SAAS,yBAAyBA,UAASC,sBAAqB;AAIvE,yBAAO,eAAeD,UAAS,cAAe;AAAA,oBAC5C,OAAO;AAAA,kBACT,CAAE;AACF,kBAAAA,SAAQ,iBAAiBA,SAAQ,qBAAqB;AACtD,sBAAI,UAAUC,qBAAoB,GAAG;AACrC,kBAAAD,SAAQ,qBAAqB;AAAA,oBAC3B,gBAAgB;AAAA,oBAChB,gBAAgB;AAAA,oBAChB,OAAO;AAAA,oBACP,aAAa;AAAA,oBACb,MAAM;AAAA,oBACN,WAAW;AAAA,oBACX,YAAY;AAAA,oBACZ,cAAc;AAAA,oBACd,MAAM;AAAA,oBACN,gBAAgB;AAAA,oBAChB,cAAc;AAAA,oBACd,YAAY;AAAA,oBACZ,aAAa;AAAA,oBACb,OAAO;AAAA,oBACP,cAAc;AAAA,oBACd,QAAQ;AAAA,oBACR,aAAa;AAAA,oBACb,YAAY;AAAA,oBACZ,WAAW;AAAA,oBACX,eAAe;AAAA,oBACf,kBAAkB;AAAA,oBAClB,eAAe;AAAA,oBACf,cAAc;AAAA,oBACd,cAAc;AAAA,oBACd,WAAW;AAAA,oBACX,WAAW;AAAA,kBACb;AACA,kBAAAA,SAAQ,iBAAiB;AAAA,oBACvB,OAAO,CAAC;AAAA,oBACR,SAAS,CAAC;AAAA,oBACV,QAAQ;AAAA,oBACR,mBAAmB;AAAA,oBACnB,cAAc;AAAA,oBACd,UAAU;AAAA,oBACV,eAAe;AAAA,oBACf,aAAa;AAAA,oBACb,kBAAkB;AAAA,oBAClB,WAAW;AAAA,oBACX,WAAW;AAAA,oBACX,uBAAuB;AAAA,oBACvB,WAAW;AAAA,oBACX,OAAO;AAAA,oBACP,eAAe;AAAA,oBACf,eAAe;AAAA,oBACf,aAAa;AAAA,oBACb,mBAAmB;AAAA,oBACnB,cAAc,CAAC,SAAS,OAAO;AAAA,oBAC/B,UAAU;AAAA,oBACV,qBAAqB;AAAA,oBACrB,YAAY;AAAA,oBACZ,iBAAiB;AAAA,oBACjB,QAAQ,QAAQ;AAAA,oBAChB,aAAa;AAAA,oBACb,kBAAkB;AAAA,oBAClB,wBAAwB;AAAA,oBACxB,cAAc;AAAA,oBACd,aAAa;AAAA,oBACb,uBAAuB;AAAA,oBACvB,aAAa;AAAA,oBACb,eAAe;AAAA,oBACf,eAAe;AAAA,oBACf,gBAAgB;AAAA,oBAChB,gBAAgB;AAAA,oBAChB,mBAAmB;AAAA,oBACnB,aAAa,SAAU,OAAO;AAC5B,6BAAO,0BAA2B,QAAQ,GAAG,QAAQ,UAAU,KAAK,GAAG,OAAQ;AAAA,oBACjF;AAAA,oBACA,aAAa,SAAU,cAAc;AACnC,6BAAO,QAAQ,OAAO,cAAc,sBAAsB;AAAA,oBAC5D;AAAA,oBACA,eAAe,SAAU,QAAQ,QAAQ;AACvC,6BAAO,WAAW;AAAA,oBACpB;AAAA,oBACA,aAAa;AAAA,sBACX,cAAc;AAAA,oBAChB;AAAA,oBACA,SAAS;AAAA,oBACT,gBAAgB;AAAA,oBAChB,2BAA2B;AAAA,oBAC3B,YAAYA,SAAQ;AAAA,kBACtB;AAAA,gBAEM;AAAA;AAAA;AAAA,cAEA;AAAA;AAAA,gBACC,SAAS,yBAAyBA,UAAS;AAIlD,yBAAO,eAAeA,UAAS,cAAe;AAAA,oBAC5C,OAAO;AAAA,kBACT,CAAE;AAAA,gBAEI;AAAA;AAAA;AAAA,cAEA;AAAA;AAAA,gBACC,SAAS,yBAAyBA,UAAS;AAKlD,yBAAO,eAAeA,UAAS,cAAe;AAAA,oBAC5C,OAAO;AAAA,kBACT,CAAE;AAAA,gBAEI;AAAA;AAAA;AAAA,cAEA;AAAA;AAAA,gBACC,SAAS,yBAAyBA,UAAS;AAIlD,yBAAO,eAAeA,UAAS,cAAe;AAAA,oBAC5C,OAAO;AAAA,kBACT,CAAE;AAAA,gBAEI;AAAA;AAAA;AAAA,cAEA;AAAA;AAAA,gBACC,SAAS,yBAAyBA,UAAS;AAIlD,yBAAO,eAAeA,UAAS,cAAe;AAAA,oBAC5C,OAAO;AAAA,kBACT,CAAE;AAAA,gBAEI;AAAA;AAAA;AAAA,cAEA;AAAA;AAAA,gBACC,SAAS,yBAAyBA,UAAS;AAIlD,yBAAO,eAAeA,UAAS,cAAe;AAAA,oBAC5C,OAAO;AAAA,kBACT,CAAE;AAAA,gBAEI;AAAA;AAAA;AAAA,cAEA;AAAA;AAAA,gBACC,SAAS,yBAAyBA,UAAS;AAKlD,yBAAO,eAAeA,UAAS,cAAe;AAAA,oBAC5C,OAAO;AAAA,kBACT,CAAE;AAAA,gBAEI;AAAA;AAAA;AAAA,cAEA;AAAA;AAAA,gBACC,SAAS,yBAAyBA,UAASC,sBAAqB;AAIvE,sBAAI,kBAAkB,QAAQ,KAAK,oBAAoB,OAAO,SAAS,SAAU6B,IAAG,GAAGC,IAAGC,KAAI;AAC5F,wBAAIA,QAAO;AAAW,sBAAAA,MAAKD;AAC3B,wBAAI,OAAO,OAAO,yBAAyB,GAAGA,EAAC;AAC/C,wBAAI,CAAC,SAAS,SAAS,OAAO,CAAC,EAAE,aAAa,KAAK,YAAY,KAAK,eAAe;AACjF,6BAAO;AAAA,wBACL,YAAY;AAAA,wBACZ,KAAK,WAAY;AACf,iCAAO,EAAEA,EAAC;AAAA,wBACZ;AAAA,sBACF;AAAA,oBACF;AACA,2BAAO,eAAeD,IAAGE,KAAI,IAAI;AAAA,kBACnC,IAAI,SAAUF,IAAG,GAAGC,IAAGC,KAAI;AACzB,wBAAIA,QAAO;AAAW,sBAAAA,MAAKD;AAC3B,oBAAAD,GAAEE,GAAE,IAAI,EAAED,EAAC;AAAA,kBACb;AACA,sBAAI,eAAe,QAAQ,KAAK,gBAAgB,SAAU,GAAG/B,UAAS;AACpE,6BAAS,KAAK;AAAG,0BAAI,MAAM,aAAa,CAAC,OAAO,UAAU,eAAe,KAAKA,UAAS,CAAC;AAAG,wCAAgBA,UAAS,GAAG,CAAC;AAAA,kBAC1H;AACA,yBAAO,eAAeA,UAAS,cAAe;AAAA,oBAC5C,OAAO;AAAA,kBACT,CAAE;AACF,+BAAaC,qBAAoB,EAAE,GAAGD,QAAO;AAC7C,+BAAaC,qBAAoB,GAAG,GAAGD,QAAO;AAC9C,+BAAaC,qBAAoB,GAAG,GAAGD,QAAO;AAC9C,+BAAaC,qBAAoB,GAAG,GAAGD,QAAO;AAC9C,+BAAaC,qBAAoB,GAAG,GAAGD,QAAO;AAC9C,+BAAaC,qBAAoB,GAAG,GAAGD,QAAO;AAC9C,+BAAaC,qBAAoB,GAAG,GAAGD,QAAO;AAC9C,+BAAaC,qBAAoB,GAAG,GAAGD,QAAO;AAC9C,+BAAaC,qBAAoB,GAAG,GAAGD,QAAO;AAC9C,+BAAaC,qBAAoB,GAAG,GAAGD,QAAO;AAC9C,+BAAaC,qBAAoB,GAAG,GAAGD,QAAO;AAC9C,+BAAaC,qBAAoB,EAAE,GAAGD,QAAO;AAC7C,+BAAaC,qBAAoB,EAAE,GAAGD,QAAO;AAC7C,+BAAaC,qBAAoB,GAAG,GAAGD,QAAO;AAC9C,+BAAaC,qBAAoB,GAAG,GAAGD,QAAO;AAAA,gBAExC;AAAA;AAAA;AAAA,cAEA;AAAA;AAAA,gBACC,SAAS,yBAAyBA,UAAS;AAIlD,yBAAO,eAAeA,UAAS,cAAe;AAAA,oBAC5C,OAAO;AAAA,kBACT,CAAE;AAAA,gBAEI;AAAA;AAAA;AAAA,cAEA;AAAA;AAAA,gBACC,SAAS,yBAAyBA,UAAS;AAIlD,yBAAO,eAAeA,UAAS,cAAe;AAAA,oBAC5C,OAAO;AAAA,kBACT,CAAE;AAAA,gBAEI;AAAA;AAAA;AAAA,cAEA;AAAA;AAAA,gBACC,SAAS,yBAAyBA,UAAS;AAIlD,yBAAO,eAAeA,UAAS,cAAe;AAAA,oBAC5C,OAAO;AAAA,kBACT,CAAE;AAAA,gBAEI;AAAA;AAAA;AAAA,cAEA;AAAA;AAAA,gBACC,SAAS,yBAAyBA,UAAS;AAIlD,yBAAO,eAAeA,UAAS,cAAe;AAAA,oBAC5C,OAAO;AAAA,kBACT,CAAE;AAAA,gBAEI;AAAA;AAAA;AAAA,cAEA;AAAA;AAAA,gBACC,SAAS,yBAAyBA,UAAS;AAIlD,yBAAO,eAAeA,UAAS,cAAe;AAAA,oBAC5C,OAAO;AAAA,kBACT,CAAE;AAAA,gBAEI;AAAA;AAAA;AAAA,cAEA;AAAA;AAAA,gBACC,SAAS,yBAAyBA,UAAS;AAIlD,yBAAO,eAAeA,UAAS,cAAe;AAAA,oBAC5C,OAAO;AAAA,kBACT,CAAE;AAAA,gBAEI;AAAA;AAAA;AAAA,cAEA;AAAA;AAAA,gBACC,SAAS,yBAAyBA,UAAS;AAIlD,yBAAO,eAAeA,UAAS,cAAe;AAAA,oBAC5C,OAAO;AAAA,kBACT,CAAE;AAAA,gBAEI;AAAA;AAAA;AAAA,cAEA;AAAA;AAAA,gBACC,SAAS,yBAAyBA,UAAS;AAIlD,yBAAO,eAAeA,UAAS,cAAe;AAAA,oBAC5C,OAAO;AAAA,kBACT,CAAE;AAAA,gBAEI;AAAA;AAAA;AAAA,cAEA;AAAA;AAAA,gBACC,SAAS,yBAAyBA,UAAS;AAIlD,yBAAO,eAAeA,UAAS,cAAe;AAAA,oBAC5C,OAAO;AAAA,kBACT,CAAE;AAAA,gBAEI;AAAA;AAAA;AAAA,cAEA;AAAA;AAAA,gBACC,SAAS,yBAAyBA,UAAS;AAKlD,yBAAO,eAAeA,UAAS,cAAe;AAAA,oBAC5C,OAAO;AAAA,kBACT,CAAE;AACF,kBAAAA,SAAQ,wBAAwBA,SAAQ,OAAOA,SAAQ,cAAcA,SAAQ,gBAAgBA,SAAQ,gBAAgBA,SAAQ,cAAcA,SAAQ,cAAcA,SAAQ,UAAUA,SAAQ,WAAWA,SAAQ,qBAAqBA,SAAQ,gBAAgBA,SAAQ,OAAOA,SAAQ,SAASA,SAAQ,UAAUA,SAAQ,aAAaA,SAAQ,gBAAgBA,SAAQ,kBAAkB;AACpX,sBAAI,kBAAkB,SAAUiC,MAAKC,MAAK;AACxC,2BAAO,KAAK,MAAM,KAAK,OAAO,KAAKA,OAAMD,QAAOA,IAAG;AAAA,kBACrD;AACA,kBAAAjC,SAAQ,kBAAkB;AAC1B,sBAAI,gBAAgB,SAAU,QAAQ;AACpC,2BAAO,MAAM,KAAK;AAAA,sBAChB;AAAA,oBACF,GAAG,WAAY;AACb,8BAAQ,GAAGA,SAAQ,iBAAiB,GAAG,EAAE,EAAE,SAAS,EAAE;AAAA,oBACxD,CAAC,EAAE,KAAK,EAAE;AAAA,kBACZ;AACA,kBAAAA,SAAQ,gBAAgB;AACxB,sBAAI,aAAa,SAAUU,UAAS,QAAQ;AAC1C,wBAAIP,MAAKO,SAAQ,MAAMA,SAAQ,QAAQ,GAAG,OAAOA,SAAQ,MAAM,GAAG,EAAE,QAAQ,GAAGV,SAAQ,eAAe,CAAC,CAAC,MAAM,GAAGA,SAAQ,eAAe,CAAC;AACzI,oBAAAG,MAAKA,IAAG,QAAQ,mBAAmB,EAAE;AACrC,oBAAAA,MAAK,GAAG,OAAO,QAAQ,GAAG,EAAE,OAAOA,GAAE;AACrC,2BAAOA;AAAA,kBACT;AACA,kBAAAH,SAAQ,aAAa;AACrB,sBAAI,UAAU,SAAU,KAAK;AAC3B,2BAAO,OAAO,UAAU,SAAS,KAAK,GAAG,EAAE,MAAM,GAAG,EAAE;AAAA,kBACxD;AACA,kBAAAA,SAAQ,UAAU;AAClB,sBAAImC,UAAS,SAAU,MAAM,KAAK;AAChC,2BAAO,QAAQ,UAAa,QAAQ,SAAS,GAAGnC,SAAQ,SAAS,GAAG,MAAM;AAAA,kBAC5E;AACA,kBAAAA,SAAQ,SAASmC;AACjB,sBAAI,OAAO,SAAUzB,UAAS,SAAS;AACrC,wBAAI,YAAY,QAAQ;AACtB,gCAAU,SAAS,cAAc,KAAK;AAAA,oBACxC;AACA,wBAAIA,SAAQ,YAAY;AACtB,0BAAIA,SAAQ,aAAa;AACvB,wBAAAA,SAAQ,WAAW,aAAa,SAASA,SAAQ,WAAW;AAAA,sBAC9D,OAAO;AACL,wBAAAA,SAAQ,WAAW,YAAY,OAAO;AAAA,sBACxC;AAAA,oBACF;AACA,2BAAO,QAAQ,YAAYA,QAAO;AAAA,kBACpC;AACA,kBAAAV,SAAQ,OAAO;AACf,sBAAI,gBAAgB,SAAU,SAAS,UAAU,WAAW;AAC1D,wBAAI,cAAc,QAAQ;AACxB,kCAAY;AAAA,oBACd;AACA,wBAAI,OAAO,GAAG,OAAO,YAAY,IAAI,SAAS,YAAY,gBAAgB;AAC1E,wBAAI,UAAU,QAAQ,IAAI;AAC1B,2BAAO,SAAS;AACd,0BAAI,QAAQ,QAAQ,QAAQ,GAAG;AAC7B,+BAAO;AAAA,sBACT;AACA,gCAAU,QAAQ,IAAI;AAAA,oBACxB;AACA,2BAAO;AAAA,kBACT;AACA,kBAAAA,SAAQ,gBAAgB;AACxB,sBAAI,qBAAqB,SAAUU,UAAS,QAAQ,WAAW;AAC7D,wBAAI,cAAc,QAAQ;AACxB,kCAAY;AAAA,oBACd;AACA,wBAAI,CAACA,UAAS;AACZ,6BAAO;AAAA,oBACT;AACA,wBAAI;AACJ,wBAAI,YAAY,GAAG;AAEjB,kCAAY,OAAO,YAAY,OAAO,gBAAgBA,SAAQ,YAAYA,SAAQ;AAAA,oBACpF,OAAO;AAEL,kCAAYA,SAAQ,aAAa,OAAO;AAAA,oBAC1C;AACA,2BAAO;AAAA,kBACT;AACA,kBAAAV,SAAQ,qBAAqB;AAC7B,sBAAI,WAAW,SAAU,OAAO;AAC9B,wBAAI,OAAO,UAAU,UAAU;AAC7B,6BAAO;AAAA,oBACT;AACA,2BAAO,MAAM,QAAQ,MAAM,OAAO,EAAE,QAAQ,MAAM,MAAM,EAAE,QAAQ,MAAM,MAAM,EAAE,QAAQ,MAAM,QAAQ;AAAA,kBACxG;AACA,kBAAAA,SAAQ,WAAW;AACnB,kBAAAA,SAAQ,UAAU,WAAY;AAC5B,wBAAI,QAAQ,SAAS,cAAc,KAAK;AACxC,2BAAO,SAAU,KAAK;AACpB,0BAAI,eAAe,IAAI,KAAK;AAC5B,4BAAM,YAAY;AAClB,0BAAI,aAAa,MAAM,SAAS,CAAC;AACjC,6BAAO,MAAM,YAAY;AACvB,8BAAM,YAAY,MAAM,UAAU;AAAA,sBACpC;AACA,6BAAO;AAAA,oBACT;AAAA,kBACF,EAAE;AACF,sBAAI,cAAc,SAAUE,KAAI,IAAI;AAClC,wBAAI,QAAQA,IAAG,OACb,KAAKA,IAAG,OACR,QAAQ,OAAO,SAAS,QAAQ;AAClC,wBAAI,SAAS,GAAG,OACd,KAAK,GAAG,OACR,SAAS,OAAO,SAAS,SAAS;AACpC,2BAAO,MAAM,cAAc,QAAQ,CAAC,GAAG;AAAA,sBACrC,aAAa;AAAA,sBACb,mBAAmB;AAAA,sBACnB,SAAS;AAAA,oBACX,CAAC;AAAA,kBACH;AACA,kBAAAF,SAAQ,cAAc;AACtB,sBAAI,cAAc,SAAU,GAAG0B,IAAG;AAChC,wBAAIxB,MAAK,EAAE,OACT,SAASA,QAAO,SAAS,IAAIA;AAC/B,wBAAI,KAAKwB,GAAE,OACT,SAAS,OAAO,SAAS,IAAI;AAC/B,2BAAO,SAAS;AAAA,kBAClB;AACA,kBAAA1B,SAAQ,cAAc;AACtB,sBAAIoC,iBAAgB,SAAU1B,UAAS,MAAM,YAAY;AACvD,wBAAI,eAAe,QAAQ;AACzB,mCAAa;AAAA,oBACf;AACA,wBAAI,QAAQ,IAAI,YAAY,MAAM;AAAA,sBAChC,QAAQ;AAAA,sBACR,SAAS;AAAA,sBACT,YAAY;AAAA,oBACd,CAAC;AACD,2BAAOA,SAAQ,cAAc,KAAK;AAAA,kBACpC;AACA,kBAAAV,SAAQ,gBAAgBoC;AACxB,sBAAI,gBAAgB,SAAU,OAAO,OAAO,KAAK;AAC/C,wBAAI,QAAQ,QAAQ;AAClB,4BAAM;AAAA,oBACR;AACA,2BAAO,MAAM,KAAK,SAAU,MAAM;AAChC,0BAAI,OAAO,UAAU,UAAU;AAC7B,+BAAO,KAAK,GAAG,MAAM,MAAM,KAAK;AAAA,sBAClC;AACA,6BAAO,KAAK,GAAG,MAAM;AAAA,oBACvB,CAAC;AAAA,kBACH;AACA,kBAAApC,SAAQ,gBAAgB;AACxB,sBAAI,cAAc,SAAU,KAAK;AAC/B,2BAAO,KAAK,MAAM,KAAK,UAAU,GAAG,CAAC;AAAA,kBACvC;AACA,kBAAAA,SAAQ,cAAc;AAItB,sBAAI,OAAO,SAAU,GAAG0B,IAAG;AACzB,wBAAI,QAAQ,OAAO,KAAK,CAAC,EAAE,KAAK;AAChC,wBAAI,QAAQ,OAAO,KAAKA,EAAC,EAAE,KAAK;AAChC,2BAAO,MAAM,OAAO,SAAU,GAAG;AAC/B,6BAAO,MAAM,QAAQ,CAAC,IAAI;AAAA,oBAC5B,CAAC;AAAA,kBACH;AACA,kBAAA1B,SAAQ,OAAO;AACf,sBAAI,wBAAwB,SAAU,kBAAkB;AACtD,wBAAI,OAAO,qBAAqB,aAAa;AAC3C,0BAAI;AACF,+BAAO,KAAK,MAAM,gBAAgB;AAAA,sBACpC,SAASqC,IAAG;AACV,+BAAO;AAAA,sBACT;AAAA,oBACF;AACA,2BAAO,CAAC;AAAA,kBACV;AACA,kBAAArC,SAAQ,wBAAwB;AAAA,gBAE1B;AAAA;AAAA;AAAA,cAEA;AAAA;AAAA,gBACC,SAAS,yBAAyBA,UAAS;AAIlD,sBAAI,gBAAgB,QAAQ,KAAK,iBAAiB,SAAUK,KAAI,MAAMC,OAAM;AAC1E,wBAAIA,SAAQ,UAAU,WAAW;AAAG,+BAAS,IAAI,GAAG,IAAI,KAAK,QAAQC,KAAI,IAAI,GAAG,KAAK;AACnF,4BAAIA,OAAM,EAAE,KAAK,OAAO;AACtB,8BAAI,CAACA;AAAI,4BAAAA,MAAK,MAAM,UAAU,MAAM,KAAK,MAAM,GAAG,CAAC;AACnD,0BAAAA,IAAG,CAAC,IAAI,KAAK,CAAC;AAAA,wBAChB;AAAA,sBACF;AACA,2BAAOF,IAAG,OAAOE,OAAM,MAAM,UAAU,MAAM,KAAK,IAAI,CAAC;AAAA,kBACzD;AACA,yBAAO,eAAeP,UAAS,cAAe;AAAA,oBAC5C,OAAO;AAAA,kBACT,CAAE;AACF,kBAAAA,SAAQ,eAAe;AACvB,kBAAAA,SAAQ,eAAe,CAAC;AACxB,2BAAS,QAAQ,OAAO,QAAQ;AAC9B,wBAAI,UAAU,QAAQ;AACpB,8BAAQA,SAAQ;AAAA,oBAClB;AACA,wBAAI,WAAW,QAAQ;AACrB,+BAAS,CAAC;AAAA,oBACZ;AACA,4BAAQ,OAAO,MAAM;AAAA,sBACnB,KAAK,cACH;AACE,4BAAI,kBAAkB;AACtB,4BAAI,SAAS;AAAA,0BACX,IAAI,gBAAgB;AAAA,0BACpB,WAAW,gBAAgB;AAAA,0BAC3B,SAAS,gBAAgB;AAAA,0BACzB,OAAO,gBAAgB;AAAA,0BACvB,OAAO,gBAAgB,SAAS,gBAAgB;AAAA,0BAChD,UAAU,gBAAgB,YAAY;AAAA,0BACtC,UAAU;AAAA,0BACV,QAAQ;AAAA,0BACR,OAAO;AAAA,0BACP,kBAAkB,gBAAgB;AAAA,0BAClC,aAAa,gBAAgB,eAAe;AAAA,wBAC9C;AAMA,+BAAO,cAAc,cAAc,CAAC,GAAG,OAAO,IAAI,GAAG,CAAC,MAAM,GAAG,KAAK;AAAA,sBACtE;AAAA,sBACF,KAAK,YACH;AACE,4BAAI,kBAAkB;AAGtB,4BAAI,gBAAgB,WAAW,IAAI;AACjC,iCAAO,MAAM,IAAI,SAAU,KAAK;AAC9B,gCAAIsC,UAAS;AACb,gCAAIA,QAAO,OAAO,SAAS,GAAG,OAAO,gBAAgB,QAAQ,GAAG,EAAE,GAAG;AACnE,8BAAAA,QAAO,WAAW;AAAA,4BACpB;AACA,mCAAOA;AAAA,0BACT,CAAC;AAAA,wBACH;AACA,+BAAO;AAAA,sBACT;AAAA,sBACF,KAAK,eACH;AACE,4BAAI,qBAAqB;AAGzB,4BAAI,mBAAmB,YAAY,mBAAmB,WAAW,IAAI;AACnE,iCAAO,MAAM,IAAI,SAAU,KAAK;AAC9B,gCAAIA,UAAS;AACb,gCAAIA,QAAO,OAAO,SAAS,GAAG,OAAO,mBAAmB,QAAQ,GAAG,EAAE,GAAG;AACtE,8BAAAA,QAAO,WAAW;AAAA,4BACpB;AACA,mCAAOA;AAAA,0BACT,CAAC;AAAA,wBACH;AACA,+BAAO;AAAA,sBACT;AAAA,sBACF,KAAK,kBACH;AACE,4BAAI,wBAAwB;AAC5B,+BAAO,MAAM,IAAI,SAAU,KAAK;AAC9B,8BAAIA,UAAS;AAGb,0BAAAA,QAAO,SAAS,sBAAsB,QAAQ,KAAK,SAAUpC,KAAI;AAC/D,gCAAI,OAAOA,IAAG,MACZqC,SAAQrC,IAAG;AACb,gCAAI,KAAK,OAAOoC,QAAO,IAAI;AACzB,8BAAAA,QAAO,QAAQC;AACf,qCAAO;AAAA,4BACT;AACA,mCAAO;AAAA,0BACT,CAAC;AACD,iCAAOD;AAAA,wBACT,CAAC;AAAA,sBACH;AAAA,sBACF,KAAK,oBACH;AACE,4BAAI,0BAA0B;AAC9B,+BAAO,MAAM,IAAI,SAAU,KAAK;AAC9B,8BAAIA,UAAS;AACb,0BAAAA,QAAO,SAAS,wBAAwB;AACxC,iCAAOA;AAAA,wBACT,CAAC;AAAA,sBACH;AAAA,sBACF,KAAK,iBACH;AACE,+BAAOtC,SAAQ;AAAA,sBACjB;AAAA,sBACF,SACE;AACE,+BAAO;AAAA,sBACT;AAAA,oBACJ;AAAA,kBACF;AACA,kBAAAA,SAAQ,SAAS,IAAI;AAAA,gBAEf;AAAA;AAAA;AAAA,cAEA;AAAA;AAAA,gBACC,SAAS,yBAAyBA,UAAS;AAIlD,sBAAI,gBAAgB,QAAQ,KAAK,iBAAiB,SAAUK,KAAI,MAAMC,OAAM;AAC1E,wBAAIA,SAAQ,UAAU,WAAW;AAAG,+BAAS,IAAI,GAAG,IAAI,KAAK,QAAQC,KAAI,IAAI,GAAG,KAAK;AACnF,4BAAIA,OAAM,EAAE,KAAK,OAAO;AACtB,8BAAI,CAACA;AAAI,4BAAAA,MAAK,MAAM,UAAU,MAAM,KAAK,MAAM,GAAG,CAAC;AACnD,0BAAAA,IAAG,CAAC,IAAI,KAAK,CAAC;AAAA,wBAChB;AAAA,sBACF;AACA,2BAAOF,IAAG,OAAOE,OAAM,MAAM,UAAU,MAAM,KAAK,IAAI,CAAC;AAAA,kBACzD;AACA,yBAAO,eAAeP,UAAS,cAAe;AAAA,oBAC5C,OAAO;AAAA,kBACT,CAAE;AACF,kBAAAA,SAAQ,eAAe;AACvB,kBAAAA,SAAQ,eAAe,CAAC;AACxB,2BAAS,OAAO,OAAO,QAAQ;AAC7B,wBAAI,UAAU,QAAQ;AACpB,8BAAQA,SAAQ;AAAA,oBAClB;AACA,wBAAI,WAAW,QAAQ;AACrB,+BAAS,CAAC;AAAA,oBACZ;AACA,4BAAQ,OAAO,MAAM;AAAA,sBACnB,KAAK,aACH;AACE,4BAAI,iBAAiB;AACrB,+BAAO,cAAc,cAAc,CAAC,GAAG,OAAO,IAAI,GAAG,CAAC;AAAA,0BACpD,IAAI,eAAe;AAAA,0BACnB,OAAO,eAAe;AAAA,0BACtB,QAAQ,eAAe;AAAA,0BACvB,UAAU,eAAe;AAAA,wBAC3B,CAAC,GAAG,KAAK;AAAA,sBACX;AAAA,sBACF,KAAK,iBACH;AACE,+BAAO,CAAC;AAAA,sBACV;AAAA,sBACF,SACE;AACE,+BAAO;AAAA,sBACT;AAAA,oBACJ;AAAA,kBACF;AACA,kBAAAA,SAAQ,SAAS,IAAI;AAAA,gBAEf;AAAA;AAAA;AAAA,cAEA;AAAA;AAAA,gBACC,SAAS,yBAAyBA,UAASC,sBAAqB;AAIvE,sBAAI,kBAAkB,QAAQ,KAAK,mBAAmB,SAAUO,MAAK;AACnE,2BAAOA,QAAOA,KAAI,aAAaA,OAAM;AAAA,sBACnC,WAAWA;AAAA,oBACb;AAAA,kBACF;AACA,yBAAO,eAAeR,UAAS,cAAe;AAAA,oBAC5C,OAAO;AAAA,kBACT,CAAE;AACF,kBAAAA,SAAQ,eAAe;AACvB,sBAAI,UAAUC,qBAAoB,GAAG;AACrC,sBAAI,UAAU,gBAAgBA,qBAAoB,EAAE,CAAC;AACrD,sBAAI,WAAW,gBAAgBA,qBAAoB,GAAG,CAAC;AACvD,sBAAI,YAAY,gBAAgBA,qBAAoB,GAAG,CAAC;AACxD,sBAAI,YAAY,gBAAgBA,qBAAoB,GAAG,CAAC;AACxD,sBAAI,UAAUA,qBAAoB,GAAG;AACrC,kBAAAD,SAAQ,eAAe;AAAA,oBACrB,QAAQ,CAAC;AAAA,oBACT,OAAO,CAAC;AAAA,oBACR,SAAS,CAAC;AAAA,oBACV,SAAS;AAAA,kBACX;AACA,sBAAI,cAAc,GAAG,QAAQ,iBAAiB;AAAA,oBAC5C,OAAO,QAAQ;AAAA,oBACf,QAAQ,SAAS;AAAA,oBACjB,SAAS,UAAU;AAAA,oBACnB,SAAS,UAAU;AAAA,kBACrB,CAAC;AACD,sBAAI,cAAc,SAAU,aAAa,QAAQ;AAC/C,wBAAI,QAAQ;AAKZ,wBAAI,OAAO,SAAS,aAAa;AAC/B,8BAAQA,SAAQ;AAAA,oBAClB,WAAW,OAAO,SAAS,YAAY;AACrC,8BAAQ,GAAG,QAAQ,aAAa,OAAO,KAAK;AAAA,oBAC9C;AACA,2BAAO,WAAW,OAAO,MAAM;AAAA,kBACjC;AACA,kBAAAA,SAAQ,SAAS,IAAI;AAAA,gBAEf;AAAA;AAAA;AAAA,cAEA;AAAA;AAAA,gBACC,SAAS,yBAAyBA,UAAS;AAIlD,sBAAI,gBAAgB,QAAQ,KAAK,iBAAiB,SAAUK,KAAI,MAAMC,OAAM;AAC1E,wBAAIA,SAAQ,UAAU,WAAW;AAAG,+BAAS,IAAI,GAAG,IAAI,KAAK,QAAQC,KAAI,IAAI,GAAG,KAAK;AACnF,4BAAIA,OAAM,EAAE,KAAK,OAAO;AACtB,8BAAI,CAACA;AAAI,4BAAAA,MAAK,MAAM,UAAU,MAAM,KAAK,MAAM,GAAG,CAAC;AACnD,0BAAAA,IAAG,CAAC,IAAI,KAAK,CAAC;AAAA,wBAChB;AAAA,sBACF;AACA,2BAAOF,IAAG,OAAOE,OAAM,MAAM,UAAU,MAAM,KAAK,IAAI,CAAC;AAAA,kBACzD;AACA,yBAAO,eAAeP,UAAS,cAAe;AAAA,oBAC5C,OAAO;AAAA,kBACT,CAAE;AACF,kBAAAA,SAAQ,eAAe;AACvB,kBAAAA,SAAQ,eAAe,CAAC;AACxB,2BAAS,MAAM,OAAO,QAAQ;AAC5B,wBAAI,UAAU,QAAQ;AACpB,8BAAQA,SAAQ;AAAA,oBAClB;AACA,wBAAI,WAAW,QAAQ;AACrB,+BAAS,CAAC;AAAA,oBACZ;AACA,4BAAQ,OAAO,MAAM;AAAA,sBACnB,KAAK,YACH;AACE,4BAAI,gBAAgB;AAEpB,4BAAI,WAAW,cAAc,cAAc,CAAC,GAAG,OAAO,IAAI,GAAG,CAAC;AAAA,0BAC5D,IAAI,cAAc;AAAA,0BAClB,UAAU,cAAc;AAAA,0BACxB,SAAS,cAAc;AAAA,0BACvB,OAAO,cAAc;AAAA,0BACrB,OAAO,cAAc;AAAA,0BACrB,QAAQ;AAAA,0BACR,aAAa;AAAA,0BACb,kBAAkB,cAAc;AAAA,0BAChC,aAAa,cAAc,eAAe;AAAA,0BAC1C,SAAS;AAAA,wBACX,CAAC,GAAG,KAAK;AACT,+BAAO,SAAS,IAAI,SAAU,KAAK;AACjC,8BAAI,OAAO;AACX,+BAAK,cAAc;AACnB,iCAAO;AAAA,wBACT,CAAC;AAAA,sBACH;AAAA,sBACF,KAAK,eACH;AAEE,+BAAO,MAAM,IAAI,SAAU,KAAK;AAC9B,8BAAI,OAAO;AACX,8BAAI,KAAK,OAAO,OAAO,IAAI;AACzB,iCAAK,SAAS;AAAA,0BAChB;AACA,iCAAO;AAAA,wBACT,CAAC;AAAA,sBACH;AAAA,sBACF,KAAK,kBACH;AACE,4BAAI,wBAAwB;AAC5B,+BAAO,MAAM,IAAI,SAAU,KAAK;AAC9B,8BAAI,OAAO;AACX,8BAAI,KAAK,OAAO,sBAAsB,IAAI;AACxC,iCAAK,cAAc,sBAAsB;AAAA,0BAC3C;AACA,iCAAO;AAAA,wBACT,CAAC;AAAA,sBACH;AAAA,sBACF,SACE;AACE,+BAAO;AAAA,sBACT;AAAA,oBACJ;AAAA,kBACF;AACA,kBAAAA,SAAQ,SAAS,IAAI;AAAA,gBAEf;AAAA;AAAA;AAAA,cAEA;AAAA;AAAA,gBACC,SAAS,yBAAyBA,UAAS;AAIlD,yBAAO,eAAeA,UAAS,cAAe;AAAA,oBAC5C,OAAO;AAAA,kBACT,CAAE;AACF,kBAAAA,SAAQ,eAAe;AACvB,kBAAAA,SAAQ,eAAe;AACvB,sBAAI,UAAU,SAAU,OAAO,QAAQ;AACrC,wBAAI,UAAU,QAAQ;AACpB,8BAAQA,SAAQ;AAAA,oBAClB;AACA,wBAAI,WAAW,QAAQ;AACrB,+BAAS,CAAC;AAAA,oBACZ;AACA,4BAAQ,OAAO,MAAM;AAAA,sBACnB,KAAK,kBACH;AACE,+BAAO,OAAO;AAAA,sBAChB;AAAA,sBACF,SACE;AACE,+BAAO;AAAA,sBACT;AAAA,oBACJ;AAAA,kBACF;AACA,kBAAAA,SAAQ,SAAS,IAAI;AAAA,gBAEf;AAAA;AAAA;AAAA,cAEA;AAAA;AAAA,gBACC,SAAS,yBAAyBA,UAASC,sBAAqB;AAIvE,sBAAI,gBAAgB,QAAQ,KAAK,iBAAiB,SAAUI,KAAI,MAAMC,OAAM;AAC1E,wBAAIA,SAAQ,UAAU,WAAW;AAAG,+BAAS,IAAI,GAAG,IAAI,KAAK,QAAQC,KAAI,IAAI,GAAG,KAAK;AACnF,4BAAIA,OAAM,EAAE,KAAK,OAAO;AACtB,8BAAI,CAACA;AAAI,4BAAAA,MAAK,MAAM,UAAU,MAAM,KAAK,MAAM,GAAG,CAAC;AACnD,0BAAAA,IAAG,CAAC,IAAI,KAAK,CAAC;AAAA,wBAChB;AAAA,sBACF;AACA,2BAAOF,IAAG,OAAOE,OAAM,MAAM,UAAU,MAAM,KAAK,IAAI,CAAC;AAAA,kBACzD;AACA,sBAAI,kBAAkB,QAAQ,KAAK,mBAAmB,SAAUC,MAAK;AACnE,2BAAOA,QAAOA,KAAI,aAAaA,OAAM;AAAA,sBACnC,WAAWA;AAAA,oBACb;AAAA,kBACF;AACA,yBAAO,eAAeR,UAAS,cAAe;AAAA,oBAC5C,OAAO;AAAA,kBACT,CAAE;AAEF,sBAAI,UAAUC,qBAAoB,GAAG;AACrC,sBAAI,UAAU,gBAAgBA,qBAAoB,GAAG,CAAC;AACtD,sBAAI;AAAA;AAAA,oBAAqB,WAAY;AACnC,+BAASuC,SAAQ;AACf,6BAAK,UAAU,GAAG,QAAQ,aAAa,QAAQ,SAAS,OAAO,gCAAgC,OAAO,6BAA6B,CAAC;AAAA,sBACtI;AAIA,sBAAAA,OAAM,UAAU,YAAY,SAAU,UAAU;AAC9C,6BAAK,OAAO,UAAU,QAAQ;AAAA,sBAChC;AAIA,sBAAAA,OAAM,UAAU,WAAW,SAAU,QAAQ;AAC3C,6BAAK,OAAO,SAAS,MAAM;AAAA,sBAC7B;AACA,6BAAO,eAAeA,OAAM,WAAW,SAAS;AAAA;AAAA;AAAA;AAAA,wBAI9C,KAAK,WAAY;AACf,iCAAO,KAAK,OAAO,SAAS;AAAA,wBAC9B;AAAA,wBACA,YAAY;AAAA,wBACZ,cAAc;AAAA,sBAChB,CAAC;AACD,6BAAO,eAAeA,OAAM,WAAW,SAAS;AAAA;AAAA;AAAA;AAAA,wBAI9C,KAAK,WAAY;AACf,iCAAO,KAAK,MAAM;AAAA,wBACpB;AAAA,wBACA,YAAY;AAAA,wBACZ,cAAc;AAAA,sBAChB,CAAC;AACD,6BAAO,eAAeA,OAAM,WAAW,eAAe;AAAA;AAAA;AAAA;AAAA,wBAIpD,KAAK,WAAY;AACf,iCAAO,KAAK,MAAM,OAAO,SAAU,MAAM;AACvC,mCAAO,KAAK,WAAW;AAAA,0BACzB,CAAC;AAAA,wBACH;AAAA,wBACA,YAAY;AAAA,wBACZ,cAAc;AAAA,sBAChB,CAAC;AACD,6BAAO,eAAeA,OAAM,WAAW,0BAA0B;AAAA;AAAA;AAAA;AAAA,wBAI/D,KAAK,WAAY;AACf,iCAAO,KAAK,MAAM,OAAO,SAAU,MAAM;AACvC,mCAAO,KAAK,UAAU,KAAK;AAAA,0BAC7B,CAAC;AAAA,wBACH;AAAA,wBACA,YAAY;AAAA,wBACZ,cAAc;AAAA,sBAChB,CAAC;AACD,6BAAO,eAAeA,OAAM,WAAW,WAAW;AAAA;AAAA;AAAA;AAAA,wBAIhD,KAAK,WAAY;AACf,iCAAO,KAAK,MAAM;AAAA,wBACpB;AAAA,wBACA,YAAY;AAAA,wBACZ,cAAc;AAAA,sBAChB,CAAC;AACD,6BAAO,eAAeA,OAAM,WAAW,iBAAiB;AAAA;AAAA;AAAA;AAAA,wBAItD,KAAK,WAAY;AACf,iCAAO,KAAK,QAAQ,OAAO,SAAU,QAAQ;AAC3C,mCAAO,OAAO,WAAW;AAAA,0BAC3B,CAAC;AAAA,wBACH;AAAA,wBACA,YAAY;AAAA,wBACZ,cAAc;AAAA,sBAChB,CAAC;AACD,6BAAO,eAAeA,OAAM,WAAW,qBAAqB;AAAA;AAAA;AAAA;AAAA,wBAI1D,KAAK,WAAY;AACf,iCAAO,KAAK,QAAQ,OAAO,SAAU,QAAQ;AAC3C,mCAAO,OAAO,aAAa;AAAA,0BAC7B,CAAC;AAAA,wBACH;AAAA,wBACA,YAAY;AAAA,wBACZ,cAAc;AAAA,sBAChB,CAAC;AACD,6BAAO,eAAeA,OAAM,WAAW,qBAAqB;AAAA;AAAA;AAAA;AAAA,wBAI1D,KAAK,WAAY;AACf,iCAAO,KAAK,kBAAkB,OAAO,SAAU,QAAQ;AACrD,mCAAO,OAAO,gBAAgB;AAAA,0BAChC,CAAC;AAAA,wBACH;AAAA,wBACA,YAAY;AAAA,wBACZ,cAAc;AAAA,sBAChB,CAAC;AACD,6BAAO,eAAeA,OAAM,WAAW,qBAAqB;AAAA;AAAA;AAAA;AAAA,wBAI1D,KAAK,WAAY;AACf,iCAAO,cAAc,CAAC,GAAG,KAAK,SAAS,IAAI,EAAE,QAAQ,EAAE,KAAK,SAAU,QAAQ;AAC5E,mCAAO,OAAO,gBAAgB;AAAA,0BAChC,CAAC;AAAA,wBACH;AAAA,wBACA,YAAY;AAAA,wBACZ,cAAc;AAAA,sBAChB,CAAC;AACD,6BAAO,eAAeA,OAAM,WAAW,UAAU;AAAA;AAAA;AAAA;AAAA,wBAI/C,KAAK,WAAY;AACf,iCAAO,KAAK,MAAM;AAAA,wBACpB;AAAA,wBACA,YAAY;AAAA,wBACZ,cAAc;AAAA,sBAChB,CAAC;AACD,6BAAO,eAAeA,OAAM,WAAW,gBAAgB;AAAA;AAAA;AAAA;AAAA,wBAIrD,KAAK,WAAY;AACf,8BAAItC,MAAK,MACP,SAASA,IAAG,QACZ,UAAUA,IAAG;AACf,iCAAO,OAAO,OAAO,SAAU,OAAO;AACpC,gCAAI,WAAW,MAAM,WAAW,QAAQ,MAAM,aAAa;AAC3D,gCAAI,mBAAmB,QAAQ,KAAK,SAAU,QAAQ;AACpD,qCAAO,OAAO,WAAW,QAAQ,OAAO,aAAa;AAAA,4BACvD,CAAC;AACD,mCAAO,YAAY;AAAA,0BACrB,GAAG,CAAC,CAAC;AAAA,wBACP;AAAA,wBACA,YAAY;AAAA,wBACZ,cAAc;AAAA,sBAChB,CAAC;AAID,sBAAAsC,OAAM,UAAU,YAAY,WAAY;AACtC,+BAAO,KAAK,MAAM;AAAA,sBACpB;AAIA,sBAAAA,OAAM,UAAU,gBAAgB,SAAUrC,KAAI;AAC5C,+BAAO,KAAK,cAAc,KAAK,SAAU,QAAQ;AAC/C,iCAAO,OAAO,OAAO,SAASA,KAAI,EAAE;AAAA,wBACtC,CAAC;AAAA,sBACH;AAIA,sBAAAqC,OAAM,UAAU,eAAe,SAAUrC,KAAI;AAC3C,+BAAO,KAAK,OAAO,KAAK,SAAU,OAAO;AACvC,iCAAO,MAAM,OAAOA;AAAA,wBACtB,CAAC;AAAA,sBACH;AACA,6BAAOqC;AAAA,oBACT,EAAE;AAAA;AACF,kBAAAxC,SAAQ,SAAS,IAAI;AAAA,gBAEf;AAAA;AAAA;AAAA,cAEA;AAAA;AAAA,gBACC,SAAS,yBAAyBA,UAAS;AAQlD,yBAAO,eAAeA,UAAS,cAAe;AAAA,oBAC5C,OAAO;AAAA,kBACT,CAAE;AACF,sBAAI,YAAY;AAAA,oBACd,gBAAgB,SAAUE,KAAI,KAAK,iBAAiB,oBAAoB,eAAe,mBAAmB,SAAS;AACjH,0BAAI,iBAAiBA,IAAG,WAAW;AACnC,0BAAIuC,OAAM,OAAO,OAAO,SAAS,cAAc,KAAK,GAAG;AAAA,wBACrD,WAAW;AAAA,sBACb,CAAC;AACD,sBAAAA,KAAI,QAAQ,OAAO;AACnB,0BAAI,KAAK;AACP,wBAAAA,KAAI,MAAM;AAAA,sBACZ;AACA,0BAAI,oBAAoB;AACtB,wBAAAA,KAAI,WAAW;AAAA,sBACjB;AACA,0BAAI,iBAAiB;AACnB,wBAAAA,KAAI,aAAa,QAAQ,gBAAgB,aAAa,SAAS;AAC/D,4BAAI,eAAe;AACjB,0BAAAA,KAAI,aAAa,qBAAqB,MAAM;AAAA,wBAC9C;AAAA,sBACF;AACA,sBAAAA,KAAI,aAAa,iBAAiB,MAAM;AACxC,sBAAAA,KAAI,aAAa,iBAAiB,OAAO;AACzC,0BAAI,SAAS;AACX,wBAAAA,KAAI,aAAa,mBAAmB,OAAO;AAAA,sBAC7C;AACA,6BAAOA;AAAA,oBACT;AAAA,oBACA,gBAAgB,SAAUvC,KAAI;AAC5B,0BAAI,iBAAiBA,IAAG,WAAW;AACnC,6BAAO,OAAO,OAAO,SAAS,cAAc,KAAK,GAAG;AAAA,wBAClD,WAAW;AAAA,sBACb,CAAC;AAAA,oBACH;AAAA,oBACA,UAAU,SAAUA,KAAI,oBAAoB;AAC1C,0BAAI,KAAKA,IAAG,YACVwC,QAAO,GAAG,MACV,aAAa,GAAG,YAChB,YAAY,GAAG;AACjB,6BAAO,OAAO,OAAO,SAAS,cAAc,KAAK,GAAG;AAAA,wBAClD,WAAW,GAAG,OAAOA,OAAM,GAAG,EAAE,OAAO,qBAAqB,aAAa,SAAS;AAAA,sBACpF,CAAC;AAAA,oBACH;AAAA,oBACA,aAAa,SAAUxC,KAAI,OAAO;AAChC,0BAAI;AACJ,0BAAI,YAAYA,IAAG,WACjBE,eAAcF,IAAG,WAAW;AAC9B,6BAAO,OAAO,OAAO,SAAS,cAAc,KAAK,IAAI,KAAK;AAAA,wBACxD,WAAWE;AAAA,sBACb,GAAG,GAAG,YAAY,cAAc,WAAW,IAAI,OAAO,GAAG;AAAA,oBAC3D;AAAA,oBACA,MAAM,SAAUF,KAAI,IAAI,kBAAkB;AACxC,0BAAI,IAAI;AACR,0BAAI,YAAYA,IAAG,WACjBe,MAAKf,IAAG,YACR,OAAOe,IAAG,MACV,SAASA,IAAG,QACZ,mBAAmBA,IAAG,kBACtB,iBAAiBA,IAAG,gBACpBb,eAAca,IAAG;AACnB,0BAAId,MAAK,GAAG,IACV,QAAQ,GAAG,OACX,QAAQ,GAAG,OACX,mBAAmB,GAAG,kBACtB,SAAS,GAAG,QACZ,WAAW,GAAG,UACd,cAAc,GAAG,aACjB,gBAAgB,GAAG;AACrB,0BAAIsC,OAAM,OAAO,OAAO,SAAS,cAAc,KAAK,IAAI,KAAK;AAAA,wBAC3D,WAAW;AAAA,sBACb,GAAG,GAAG,YAAY,cAAc,WAAW,IAAI,OAAO,GAAG;AACzD,6BAAO,OAAOA,KAAI,SAAS;AAAA,wBACzB,MAAM;AAAA,wBACN,IAAItC;AAAA,wBACJ;AAAA,wBACA;AAAA,sBACF,CAAC;AACD,0BAAI,QAAQ;AACV,wBAAAsC,KAAI,aAAa,iBAAiB,MAAM;AAAA,sBAC1C;AACA,0BAAI,UAAU;AACZ,wBAAAA,KAAI,aAAa,iBAAiB,MAAM;AAAA,sBAC1C;AACA,0BAAI,eAAe;AACjB,wBAAAA,KAAI,UAAU,IAAIrC,YAAW;AAAA,sBAC/B;AACA,sBAAAqC,KAAI,UAAU,IAAI,cAAc,mBAAmB,cAAc;AACjE,0BAAI,kBAAkB;AACpB,4BAAI,UAAU;AACZ,0BAAAA,KAAI,UAAU,OAAO,cAAc;AAAA,wBACrC;AACA,wBAAAA,KAAI,QAAQ,YAAY;AAExB,4BAAI,mBAAmB;AACvB,4BAAI,eAAe,OAAO,OAAO,SAAS,cAAc,QAAQ,IAAI,KAAK;AAAA,0BACvE,MAAM;AAAA,0BACN,WAAW;AAAA,wBACb,GAAG,GAAG,YAAY,cAAc,WAAW,IAAI,kBAAkB,GAAG;AACpE,qCAAa,aAAa,cAAc,GAAG,OAAO,kBAAkB,KAAK,EAAE,OAAO,OAAO,GAAG,CAAC;AAC7F,qCAAa,QAAQ,SAAS;AAC9B,wBAAAA,KAAI,YAAY,YAAY;AAAA,sBAC9B;AACA,6BAAOA;AAAA,oBACT;AAAA,oBACA,YAAY,SAAUvC,KAAI,oBAAoB;AAC5C,0BAAIwC,QAAOxC,IAAG,WAAW;AACzB,0BAAIuC,OAAM,OAAO,OAAO,SAAS,cAAc,KAAK,GAAG;AAAA,wBACrD,WAAWC;AAAA,sBACb,CAAC;AACD,0BAAI,CAAC,oBAAoB;AACvB,wBAAAD,KAAI,aAAa,wBAAwB,MAAM;AAAA,sBACjD;AACA,sBAAAA,KAAI,aAAa,QAAQ,SAAS;AAClC,6BAAOA;AAAA,oBACT;AAAA,oBACA,aAAa,SAAUvC,KAAI,IAAI;AAC7B,0BAAI;AACJ,0BAAI,YAAYA,IAAG,WACjB,KAAKA,IAAG,YACR,QAAQ,GAAG,OACX,eAAe,GAAG,cAClB,eAAe,GAAG;AACpB,0BAAIC,MAAK,GAAG,IACV,QAAQ,GAAG,OACX,WAAW,GAAG;AAChB,0BAAIsC,OAAM,OAAO,OAAO,SAAS,cAAc,KAAK,GAAG;AAAA,wBACrD,WAAW,GAAG,OAAO,OAAO,GAAG,EAAE,OAAO,WAAW,eAAe,EAAE;AAAA,sBACtE,CAAC;AACD,sBAAAA,KAAI,aAAa,QAAQ,OAAO;AAChC,6BAAO,OAAOA,KAAI,SAAS;AAAA,wBACzB,OAAO;AAAA,wBACP,IAAItC;AAAA,wBACJ;AAAA,sBACF,CAAC;AACD,0BAAI,UAAU;AACZ,wBAAAsC,KAAI,aAAa,iBAAiB,MAAM;AAAA,sBAC1C;AACA,sBAAAA,KAAI,YAAY,OAAO,OAAO,SAAS,cAAc,KAAK,IAAI,KAAK;AAAA,wBACjE,WAAW;AAAA,sBACb,GAAG,GAAG,YAAY,cAAc,WAAW,IAAI,OAAO,GAAG,CAAC;AAC1D,6BAAOA;AAAA,oBACT;AAAA,oBACA,QAAQ,SAAUvC,KAAI,IAAI,YAAY;AACpC,0BAAI;AACJ,0BAAI,YAAYA,IAAG,WACjB,KAAKA,IAAG,YACR,OAAO,GAAG,MACV,aAAa,GAAG,YAChB,iBAAiB,GAAG,gBACpB,gBAAgB,GAAG,eACnB,eAAe,GAAG,cAClBE,eAAc,GAAG;AACnB,0BAAID,MAAK,GAAG,IACV,QAAQ,GAAG,OACX,QAAQ,GAAG,OACX,UAAU,GAAG,SACb,YAAY,GAAG,WACf,aAAa,GAAG,UAChB,aAAa,GAAG,UAChB,gBAAgB,GAAG;AACrB,0BAAIsC,OAAM,OAAO,OAAO,SAAS,cAAc,KAAK,IAAI,KAAK;AAAA,wBAC3D,IAAI;AAAA,sBACN,GAAG,GAAG,YAAY,cAAc,WAAW,IAAI,OAAO,GAAG,YAAY,GAAG,OAAO,MAAM,GAAG,EAAE,OAAO,UAAU,GAAG,GAAG;AACjH,0BAAI,YAAY;AACd,wBAAAA,KAAI,UAAU,IAAI,aAAa;AAAA,sBACjC;AACA,0BAAI,eAAe;AACjB,wBAAAA,KAAI,UAAU,IAAIrC,YAAW;AAAA,sBAC/B;AACA,sBAAAqC,KAAI,aAAa,QAAQ,WAAW,UAAU,IAAI,aAAa,QAAQ;AACvE,6BAAO,OAAOA,KAAI,SAAS;AAAA,wBACzB,QAAQ;AAAA,wBACR,IAAItC;AAAA,wBACJ;AAAA,wBACA;AAAA,sBACF,CAAC;AACD,0BAAI,YAAY;AACd,wBAAAsC,KAAI,UAAU,IAAI,YAAY;AAC9B,wBAAAA,KAAI,QAAQ,iBAAiB;AAC7B,wBAAAA,KAAI,aAAa,iBAAiB,MAAM;AAAA,sBAC1C,OAAO;AACL,wBAAAA,KAAI,UAAU,IAAI,cAAc;AAChC,wBAAAA,KAAI,QAAQ,mBAAmB;AAAA,sBACjC;AACA,6BAAOA;AAAA,oBACT;AAAA,oBACA,OAAO,SAAUvC,KAAI,kBAAkB;AACrC,0BAAI,KAAKA,IAAG,YACV,QAAQ,GAAG,OACX,cAAc,GAAG;AACnB,0BAAI,MAAM,OAAO,OAAO,SAAS,cAAc,OAAO,GAAG;AAAA,wBACvD,MAAM;AAAA,wBACN,MAAM;AAAA,wBACN,WAAW,GAAG,OAAO,OAAO,GAAG,EAAE,OAAO,WAAW;AAAA,wBACnD,cAAc;AAAA,wBACd,gBAAgB;AAAA,wBAChB,YAAY;AAAA,sBACd,CAAC;AACD,0BAAI,aAAa,QAAQ,SAAS;AAClC,0BAAI,aAAa,qBAAqB,MAAM;AAC5C,0BAAI,aAAa,cAAc,gBAAgB;AAC/C,6BAAO;AAAA,oBACT;AAAA,oBACA,UAAU,SAAUA,KAAI;AACtB,0BAAI,KAAKA,IAAG,YACVwC,QAAO,GAAG,MACV,eAAe,GAAG;AACpB,0BAAID,OAAM,SAAS,cAAc,KAAK;AACtC,sBAAAA,KAAI,UAAU,IAAIC,OAAM,YAAY;AACpC,sBAAAD,KAAI,aAAa,iBAAiB,OAAO;AACzC,6BAAOA;AAAA,oBACT;AAAA,oBACA,QAAQ,SAAUvC,KAAI,WAAW,MAAM;AACrC,0BAAI;AACJ,0BAAI,YAAYA,IAAG,WACjB,KAAKA,IAAG,YACR,OAAO,GAAG,MACV,aAAa,GAAG,YAChB,YAAY,GAAG,WACf,YAAY,GAAG;AACjB,0BAAI,SAAS,QAAQ;AACnB,+BAAO;AAAA,sBACT;AACA,0BAAI,UAAU,CAAC,MAAM,UAAU;AAC/B,0BAAI,SAAS,cAAc;AACzB,gCAAQ,KAAK,SAAS;AAAA,sBACxB,WAAW,SAAS,cAAc;AAChC,gCAAQ,KAAK,SAAS;AAAA,sBACxB;AACA,6BAAO,OAAO,OAAO,SAAS,cAAc,KAAK,IAAI,KAAK,CAAC,GAAG,GAAG,YAAY,cAAc,WAAW,IAAI,WAAW,GAAG,YAAY,QAAQ,KAAK,GAAG,GAAG,GAAG;AAAA,oBAC5J;AAAA,oBACA,QAAQ,SAAUA,KAAI;AACpB,0BAAI,QAAQA,IAAG,OACb,QAAQA,IAAG,OACX,mBAAmBA,IAAG,kBACtB,SAASA,IAAG,QACZ,WAAWA,IAAG;AAChB,0BAAI,MAAM,IAAI,OAAO,OAAO,OAAO,OAAO,MAAM;AAChD,0BAAI,kBAAkB;AACpB,4BAAI,QAAQ,mBAAmB,GAAG,OAAO,gBAAgB;AAAA,sBAC3D;AACA,0BAAI,WAAW,CAAC,CAAC;AACjB,6BAAO;AAAA,oBACT;AAAA,kBACF;AACA,kBAAAF,SAAQ,SAAS,IAAI;AAAA,gBAEf;AAAA;AAAA;AAAA,cAEA;AAAA;AAAA,gBACC,SAAS2C,SAAQ;AAIxB,sBAAI,oBAAoB,SAASC,mBAAkB,OAAO;AACzD,2BAAO,gBAAgB,KAAK,KACxB,CAAC,UAAU,KAAK;AAAA,kBACrB;AAEA,2BAAS,gBAAgB,OAAO;AAC/B,2BAAO,CAAC,CAAC,SAAS,OAAO,UAAU;AAAA,kBACpC;AAEA,2BAAS,UAAU,OAAO;AACzB,wBAAI,cAAc,OAAO,UAAU,SAAS,KAAK,KAAK;AAEtD,2BAAO,gBAAgB,qBACnB,gBAAgB,mBAChB,eAAe,KAAK;AAAA,kBACzB;AAGA,sBAAI,eAAe,OAAO,WAAW,cAAc,OAAO;AAC1D,sBAAI,qBAAqB,eAAe,OAAO,IAAI,eAAe,IAAI;AAEtE,2BAAS,eAAe,OAAO;AAC9B,2BAAO,MAAM,aAAa;AAAA,kBAC3B;AAEA,2BAAS,YAAY,KAAK;AACzB,2BAAO,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;AAAA,kBACnC;AAEA,2BAAS,8BAA8B,OAAO,SAAS;AACtD,2BAAQ,QAAQ,UAAU,SAAS,QAAQ,kBAAkB,KAAK,IAC/D,UAAU,YAAY,KAAK,GAAG,OAAO,OAAO,IAC5C;AAAA,kBACJ;AAEA,2BAAS,kBAAkB,QAAQ,QAAQ,SAAS;AACnD,2BAAO,OAAO,OAAO,MAAM,EAAE,IAAI,SAASlC,UAAS;AAClD,6BAAO,8BAA8BA,UAAS,OAAO;AAAA,oBACtD,CAAC;AAAA,kBACF;AAEA,2BAAS,iBAAiB,KAAK,SAAS;AACvC,wBAAI,CAAC,QAAQ,aAAa;AACzB,6BAAO;AAAA,oBACR;AACA,wBAAI,cAAc,QAAQ,YAAY,GAAG;AACzC,2BAAO,OAAO,gBAAgB,aAAa,cAAc;AAAA,kBAC1D;AAEA,2BAAS,gCAAgC,QAAQ;AAChD,2BAAO,OAAO,wBACX,OAAO,sBAAsB,MAAM,EAAE,OAAO,SAAS,QAAQ;AAC9D,6BAAO,OAAO,qBAAqB,MAAM;AAAA,oBAC1C,CAAC,IACC,CAAC;AAAA,kBACL;AAEA,2BAAS,QAAQ,QAAQ;AACxB,2BAAO,OAAO,KAAK,MAAM,EAAE,OAAO,gCAAgC,MAAM,CAAC;AAAA,kBAC1E;AAEA,2BAAS,mBAAmBmC,SAAQ,UAAU;AAC7C,wBAAI;AACH,6BAAO,YAAYA;AAAA,oBACpB,SAAQ,GAAG;AACV,6BAAO;AAAA,oBACR;AAAA,kBACD;AAGA,2BAAS,iBAAiB,QAAQ,KAAK;AACtC,2BAAO,mBAAmB,QAAQ,GAAG,KACjC,EAAE,OAAO,eAAe,KAAK,QAAQ,GAAG,KACvC,OAAO,qBAAqB,KAAK,QAAQ,GAAG;AAAA,kBAClD;AAEA,2BAAS,YAAY,QAAQ,QAAQ,SAAS;AAC7C,wBAAI,cAAc,CAAC;AACnB,wBAAI,QAAQ,kBAAkB,MAAM,GAAG;AACtC,8BAAQ,MAAM,EAAE,QAAQ,SAAS,KAAK;AACrC,oCAAY,GAAG,IAAI,8BAA8B,OAAO,GAAG,GAAG,OAAO;AAAA,sBACtE,CAAC;AAAA,oBACF;AACA,4BAAQ,MAAM,EAAE,QAAQ,SAAS,KAAK;AACrC,0BAAI,iBAAiB,QAAQ,GAAG,GAAG;AAClC;AAAA,sBACD;AAEA,0BAAI,mBAAmB,QAAQ,GAAG,KAAK,QAAQ,kBAAkB,OAAO,GAAG,CAAC,GAAG;AAC9E,oCAAY,GAAG,IAAI,iBAAiB,KAAK,OAAO,EAAE,OAAO,GAAG,GAAG,OAAO,GAAG,GAAG,OAAO;AAAA,sBACpF,OAAO;AACN,oCAAY,GAAG,IAAI,8BAA8B,OAAO,GAAG,GAAG,OAAO;AAAA,sBACtE;AAAA,oBACD,CAAC;AACD,2BAAO;AAAA,kBACR;AAEA,2BAAS,UAAU,QAAQ,QAAQ,SAAS;AAC3C,8BAAU,WAAW,CAAC;AACtB,4BAAQ,aAAa,QAAQ,cAAc;AAC3C,4BAAQ,oBAAoB,QAAQ,qBAAqB;AAGzD,4BAAQ,gCAAgC;AAExC,wBAAI,gBAAgB,MAAM,QAAQ,MAAM;AACxC,wBAAI,gBAAgB,MAAM,QAAQ,MAAM;AACxC,wBAAI,4BAA4B,kBAAkB;AAElD,wBAAI,CAAC,2BAA2B;AAC/B,6BAAO,8BAA8B,QAAQ,OAAO;AAAA,oBACrD,WAAW,eAAe;AACzB,6BAAO,QAAQ,WAAW,QAAQ,QAAQ,OAAO;AAAA,oBAClD,OAAO;AACN,6BAAO,YAAY,QAAQ,QAAQ,OAAO;AAAA,oBAC3C;AAAA,kBACD;AAEA,4BAAU,MAAM,SAAS,aAAa,OAAO,SAAS;AACrD,wBAAI,CAAC,MAAM,QAAQ,KAAK,GAAG;AAC1B,4BAAM,IAAI,MAAM,mCAAmC;AAAA,oBACpD;AAEA,2BAAO,MAAM,OAAO,SAAS,MAAM,MAAM;AACxC,6BAAO,UAAU,MAAM,MAAM,OAAO;AAAA,oBACrC,GAAG,CAAC,CAAC;AAAA,kBACN;AAEA,sBAAI,cAAc;AAElB,kBAAAF,QAAO,UAAU;AAAA,gBAGX;AAAA;AAAA;AAAA,cAEA;AAAA;AAAA,gBACC,SAAS,yBAAyBG,sBAAqB7C,sBAAqB;AAEnF,kBAAAA,qBAAoB,EAAE6C,oBAAmB;AACpB,kBAAA7C,qBAAoB,EAAE6C,sBAAqB;AAAA;AAAA,oBACzC,WAAW,WAAW;AAAE;AAAA;AAAA,wBAAqB;AAAA;AAAA,oBAAM;AAAA;AAAA,kBACrD,CAAC;AAUtB,2BAAS,QAAQ,OAAO;AACtB,2BAAO,CAAC,MAAM,UACVC,QAAO,KAAK,MAAM,mBAClB,MAAM,QAAQ,KAAK;AAAA,kBACzB;AAGA,wBAAM,WAAW,IAAI;AACrB,2BAAS,aAAa,OAAO;AAE3B,wBAAI,OAAO,SAAS,UAAU;AAC5B,6BAAO;AAAA,oBACT;AACA,wBAAI,SAAS,QAAQ;AACrB,2BAAO,UAAU,OAAO,IAAI,SAAS,CAAC,WAAW,OAAO;AAAA,kBAC1D;AAEA,2BAASC,UAAS,OAAO;AACvB,2BAAO,SAAS,OAAO,KAAK,aAAa,KAAK;AAAA,kBAChD;AAEA,2BAAS,SAAS,OAAO;AACvB,2BAAO,OAAO,UAAU;AAAA,kBAC1B;AAEA,2BAAS,SAAS,OAAO;AACvB,2BAAO,OAAO,UAAU;AAAA,kBAC1B;AAGA,2BAAS,UAAU,OAAO;AACxB,2BACE,UAAU,QACV,UAAU,SACT,aAAa,KAAK,KAAKD,QAAO,KAAK,KAAK;AAAA,kBAE7C;AAEA,2BAAS,SAAS,OAAO;AACvB,2BAAO,OAAO,UAAU;AAAA,kBAC1B;AAGA,2BAAS,aAAa,OAAO;AAC3B,2BAAO,SAAS,KAAK,KAAK,UAAU;AAAA,kBACtC;AAEA,2BAAS,UAAU,OAAO;AACxB,2BAAO,UAAU,UAAa,UAAU;AAAA,kBAC1C;AAEA,2BAASE,SAAQ,OAAO;AACtB,2BAAO,CAAC,MAAM,KAAK,EAAE;AAAA,kBACvB;AAIA,2BAASF,QAAO,OAAO;AACrB,2BAAO,SAAS,OACZ,UAAU,SACR,uBACA,kBACF,OAAO,UAAU,SAAS,KAAK,KAAK;AAAA,kBAC1C;AAEA,wBAAM,8BAA8B;AAEpC,wBAAM,uBAAuB;AAE7B,wBAAM,uCAAuC,CAAC,QAC5C,yBAAyB,GAAG;AAE9B,wBAAM,2BAA2B,CAACb,SAChC,iCAAiCA,IAAG;AAEtC,wBAAM,uBAAuB,CAACgB,UAAS,WAAWA,KAAI;AAEtD,wBAAM,2BAA2B,CAAC,QAChC,6BAA6B,GAAG;AAElC,wBAAM,SAAS,OAAO,UAAU;AAAA,kBAEhC,MAAM,SAAS;AAAA,oBACb,YAAYC,OAAM;AAChB,2BAAK,QAAQ,CAAC;AACd,2BAAK,UAAU,CAAC;AAEhB,0BAAI,cAAc;AAElB,sBAAAA,MAAK,QAAQ,CAAC,QAAQ;AACpB,4BAAI,MAAM,UAAU,GAAG;AAEvB,uCAAe,IAAI;AAEnB,6BAAK,MAAM,KAAK,GAAG;AACnB,6BAAK,QAAQ,IAAI,EAAE,IAAI;AAEvB,uCAAe,IAAI;AAAA,sBACrB,CAAC;AAGD,2BAAK,MAAM,QAAQ,CAAC,QAAQ;AAC1B,4BAAI,UAAU;AAAA,sBAChB,CAAC;AAAA,oBACH;AAAA,oBACA,IAAI,OAAO;AACT,6BAAO,KAAK,QAAQ,KAAK;AAAA,oBAC3B;AAAA,oBACA,OAAO;AACL,6BAAO,KAAK;AAAA,oBACd;AAAA,oBACA,SAAS;AACP,6BAAO,KAAK,UAAU,KAAK,KAAK;AAAA,oBAClC;AAAA,kBACF;AAEA,2BAAS,UAAU,KAAK;AACtB,wBAAIC,QAAO;AACX,wBAAIjD,MAAK;AACT,wBAAI,MAAM;AACV,wBAAI,SAAS;AACb,wBAAI,QAAQ;AAEZ,wBAAI,SAAS,GAAG,KAAK,QAAQ,GAAG,GAAG;AACjC,4BAAM;AACN,sBAAAiD,QAAO,cAAc,GAAG;AACxB,sBAAAjD,MAAK,YAAY,GAAG;AAAA,oBACtB,OAAO;AACL,0BAAI,CAAC,OAAO,KAAK,KAAK,MAAM,GAAG;AAC7B,8BAAM,IAAI,MAAM,qBAAqB,MAAM,CAAC;AAAA,sBAC9C;AAEA,4BAAM+C,QAAO,IAAI;AACjB,4BAAMA;AAEN,0BAAI,OAAO,KAAK,KAAK,QAAQ,GAAG;AAC9B,iCAAS,IAAI;AAEb,4BAAI,UAAU,GAAG;AACf,gCAAM,IAAI,MAAM,yBAAyBA,KAAI,CAAC;AAAA,wBAChD;AAAA,sBACF;AAEA,sBAAAE,QAAO,cAAcF,KAAI;AACzB,sBAAA/C,MAAK,YAAY+C,KAAI;AACrB,8BAAQ,IAAI;AAAA,oBACd;AAEA,2BAAO,EAAE,MAAAE,OAAM,IAAAjD,KAAI,QAAQ,KAAK,MAAM;AAAA,kBACxC;AAEA,2BAAS,cAAc,KAAK;AAC1B,2BAAO,QAAQ,GAAG,IAAI,MAAM,IAAI,MAAM,GAAG;AAAA,kBAC3C;AAEA,2BAAS,YAAY,KAAK;AACxB,2BAAO,QAAQ,GAAG,IAAI,IAAI,KAAK,GAAG,IAAI;AAAA,kBACxC;AAEA,2BAASkD,KAAI,KAAKD,OAAM;AACtB,wBAAIV,QAAO,CAAC;AACZ,wBAAI,MAAM;AAEV,0BAAM,UAAU,CAACY,MAAKF,OAAMlC,WAAU;AACpC,0BAAI,CAAC,UAAUoC,IAAG,GAAG;AACnB;AAAA,sBACF;AACA,0BAAI,CAACF,MAAKlC,MAAK,GAAG;AAEhB,wBAAAwB,MAAK,KAAKY,IAAG;AAAA,sBACf,OAAO;AACL,4BAAI,MAAMF,MAAKlC,MAAK;AAEpB,8BAAM,QAAQoC,KAAI,GAAG;AAErB,4BAAI,CAAC,UAAU,KAAK,GAAG;AACrB;AAAA,wBACF;AAIA,4BACEpC,WAAUkC,MAAK,SAAS,MACvB,SAAS,KAAK,KAAK,SAAS,KAAK,KAAK,UAAU,KAAK,IACtD;AACA,0BAAAV,MAAK,KAAKM,UAAS,KAAK,CAAC;AAAA,wBAC3B,WAAW,QAAQ,KAAK,GAAG;AACzB,gCAAM;AAEN,mCAAS,IAAI,GAAG,MAAM,MAAM,QAAQ,IAAI,KAAK,KAAK,GAAG;AACnD,oCAAQ,MAAM,CAAC,GAAGI,OAAMlC,SAAQ,CAAC;AAAA,0BACnC;AAAA,wBACF,WAAWkC,MAAK,QAAQ;AAEtB,kCAAQ,OAAOA,OAAMlC,SAAQ,CAAC;AAAA,wBAChC;AAAA,sBACF;AAAA,oBACF;AAGA,4BAAQ,KAAK,SAASkC,KAAI,IAAIA,MAAK,MAAM,GAAG,IAAIA,OAAM,CAAC;AAEvD,2BAAO,MAAMV,QAAOA,MAAK,CAAC;AAAA,kBAC5B;AAEA,wBAAM,eAAe;AAAA;AAAA;AAAA;AAAA,oBAInB,gBAAgB;AAAA;AAAA;AAAA,oBAGhB,gBAAgB;AAAA;AAAA,oBAEhB,oBAAoB;AAAA,kBACtB;AAEA,wBAAM,eAAe;AAAA;AAAA;AAAA,oBAGnB,iBAAiB;AAAA;AAAA,oBAEjB,cAAc;AAAA;AAAA,oBAEd,MAAM,CAAC;AAAA;AAAA,oBAEP,YAAY;AAAA;AAAA,oBAEZ,QAAQ,CAAC,GAAGhB,OACV,EAAE,UAAUA,GAAE,QAAS,EAAE,MAAMA,GAAE,MAAM,KAAK,IAAK,EAAE,QAAQA,GAAE,QAAQ,KAAK;AAAA,kBAC9E;AAEA,wBAAM,eAAe;AAAA;AAAA,oBAEnB,UAAU;AAAA;AAAA;AAAA,oBAGV,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAMX,UAAU;AAAA,kBACZ;AAEA,wBAAM,kBAAkB;AAAA;AAAA,oBAEtB,mBAAmB;AAAA;AAAA;AAAA,oBAGnB,OAAO2B;AAAA;AAAA;AAAA;AAAA,oBAIP,gBAAgB;AAAA;AAAA;AAAA;AAAA,oBAIhB,iBAAiB;AAAA;AAAA,oBAEjB,iBAAiB;AAAA,kBACnB;AAEA,sBAAI,SAAS,gEACR,eACA,eACA,eACA;AAGL,wBAAM,QAAQ;AAId,2BAAS,KAAK,SAAS,GAAG,WAAW,GAAG;AACtC,0BAAME,SAAQ,oBAAI,IAAI;AACtB,0BAAM,IAAI,KAAK,IAAI,IAAI,QAAQ;AAE/B,2BAAO;AAAA,sBACL,IAAI,OAAO;AACT,8BAAM,YAAY,MAAM,MAAM,KAAK,EAAE;AAErC,4BAAIA,OAAM,IAAI,SAAS,GAAG;AACxB,iCAAOA,OAAM,IAAI,SAAS;AAAA,wBAC5B;AAGA,8BAAMC,QAAO,IAAI,KAAK,IAAI,WAAW,MAAM,MAAM;AAGjD,8BAAMC,KAAI,WAAW,KAAK,MAAMD,QAAO,CAAC,IAAI,CAAC;AAE7C,wBAAAD,OAAM,IAAI,WAAWE,EAAC;AAEtB,+BAAOA;AAAA,sBACT;AAAA,sBACA,QAAQ;AACN,wBAAAF,OAAM,MAAM;AAAA,sBACd;AAAA,oBACF;AAAA,kBACF;AAAA,kBAEA,MAAM,UAAU;AAAA,oBACd,YAAY;AAAA,sBACV,QAAQ,OAAO;AAAA,sBACf,kBAAkB,OAAO;AAAA,oBAC3B,IAAI,CAAC,GAAG;AACN,2BAAK,OAAO,KAAK,iBAAiB,CAAC;AACnC,2BAAK,QAAQ;AACb,2BAAK,YAAY;AAEjB,2BAAK,gBAAgB;AAAA,oBACvB;AAAA,oBACA,WAAW,OAAO,CAAC,GAAG;AACpB,2BAAK,OAAO;AAAA,oBACd;AAAA,oBACA,gBAAgB,UAAU,CAAC,GAAG;AAC5B,2BAAK,UAAU;AAAA,oBACjB;AAAA,oBACA,QAAQJ,QAAO,CAAC,GAAG;AACjB,2BAAK,OAAOA;AACZ,2BAAK,WAAW,CAAC;AACjB,sBAAAA,MAAK,QAAQ,CAAC,KAAK,QAAQ;AACzB,6BAAK,SAAS,IAAI,EAAE,IAAI;AAAA,sBAC1B,CAAC;AAAA,oBACH;AAAA,oBACA,SAAS;AACP,0BAAI,KAAK,aAAa,CAAC,KAAK,KAAK,QAAQ;AACvC;AAAA,sBACF;AAEA,2BAAK,YAAY;AAGjB,0BAAI,SAAS,KAAK,KAAK,CAAC,CAAC,GAAG;AAC1B,6BAAK,KAAK,QAAQ,CAACO,MAAK,aAAa;AACnC,+BAAK,WAAWA,MAAK,QAAQ;AAAA,wBAC/B,CAAC;AAAA,sBACH,OAAO;AAEL,6BAAK,KAAK,QAAQ,CAACA,MAAK,aAAa;AACnC,+BAAK,WAAWA,MAAK,QAAQ;AAAA,wBAC/B,CAAC;AAAA,sBACH;AAEA,2BAAK,KAAK,MAAM;AAAA,oBAClB;AAAA;AAAA,oBAEA,IAAIA,MAAK;AACP,4BAAM,MAAM,KAAK,KAAK;AAEtB,0BAAI,SAASA,IAAG,GAAG;AACjB,6BAAK,WAAWA,MAAK,GAAG;AAAA,sBAC1B,OAAO;AACL,6BAAK,WAAWA,MAAK,GAAG;AAAA,sBAC1B;AAAA,oBACF;AAAA;AAAA,oBAEA,SAAS,KAAK;AACZ,2BAAK,QAAQ,OAAO,KAAK,CAAC;AAG1B,+BAAS,IAAI,KAAK,MAAM,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK,GAAG;AACpD,6BAAK,QAAQ,CAAC,EAAE,KAAK;AAAA,sBACvB;AAAA,oBACF;AAAA,oBACA,uBAAuB,MAAM,OAAO;AAClC,6BAAO,KAAK,KAAK,SAAS,KAAK,CAAC;AAAA,oBAClC;AAAA,oBACA,OAAO;AACL,6BAAO,KAAK,QAAQ;AAAA,oBACtB;AAAA,oBACA,WAAWA,MAAK,UAAU;AACxB,0BAAI,CAAC,UAAUA,IAAG,KAAKT,SAAQS,IAAG,GAAG;AACnC;AAAA,sBACF;AAEA,0BAAI,SAAS;AAAA,wBACX,GAAGA;AAAA,wBACH,GAAG;AAAA,wBACH,GAAG,KAAK,KAAK,IAAIA,IAAG;AAAA,sBACtB;AAEA,2BAAK,QAAQ,KAAK,MAAM;AAAA,oBAC1B;AAAA,oBACA,WAAWA,MAAK,UAAU;AACxB,0BAAI,SAAS,EAAE,GAAG,UAAU,GAAG,CAAC,EAAE;AAGlC,2BAAK,KAAK,QAAQ,CAAC,KAAK,aAAa;AACnC,4BAAI,QAAQ,IAAI,QAAQ,IAAI,MAAMA,IAAG,IAAI,KAAK,MAAMA,MAAK,IAAI,IAAI;AAEjE,4BAAI,CAAC,UAAU,KAAK,GAAG;AACrB;AAAA,wBACF;AAEA,4BAAI,QAAQ,KAAK,GAAG;AAClB,8BAAI,aAAa,CAAC;AAClB,gCAAM,QAAQ,CAAC,EAAE,gBAAgB,IAAI,MAAM,CAAC;AAE5C,iCAAO,MAAM,QAAQ;AACnB,kCAAM,EAAE,gBAAgB,OAAAC,OAAM,IAAI,MAAM,IAAI;AAE5C,gCAAI,CAAC,UAAUA,MAAK,GAAG;AACrB;AAAA,4BACF;AAEA,gCAAI,SAASA,MAAK,KAAK,CAACV,SAAQU,MAAK,GAAG;AACtC,kCAAI,YAAY;AAAA,gCACd,GAAGA;AAAA,gCACH,GAAG;AAAA,gCACH,GAAG,KAAK,KAAK,IAAIA,MAAK;AAAA,8BACxB;AAEA,yCAAW,KAAK,SAAS;AAAA,4BAC3B,WAAW,QAAQA,MAAK,GAAG;AACzB,8BAAAA,OAAM,QAAQ,CAAC,MAAM5B,OAAM;AACzB,sCAAM,KAAK;AAAA,kCACT,gBAAgBA;AAAA,kCAChB,OAAO;AAAA,gCACT,CAAC;AAAA,8BACH,CAAC;AAAA,4BACH;AAAO;AAAA,0BACT;AACA,iCAAO,EAAE,QAAQ,IAAI;AAAA,wBACvB,WAAW,SAAS,KAAK,KAAK,CAACkB,SAAQ,KAAK,GAAG;AAC7C,8BAAI,YAAY;AAAA,4BACd,GAAG;AAAA,4BACH,GAAG,KAAK,KAAK,IAAI,KAAK;AAAA,0BACxB;AAEA,iCAAO,EAAE,QAAQ,IAAI;AAAA,wBACvB;AAAA,sBACF,CAAC;AAED,2BAAK,QAAQ,KAAK,MAAM;AAAA,oBAC1B;AAAA,oBACA,SAAS;AACP,6BAAO;AAAA,wBACL,MAAM,KAAK;AAAA,wBACX,SAAS,KAAK;AAAA,sBAChB;AAAA,oBACF;AAAA,kBACF;AAEA,2BAAS,YACPE,OACA,MACA,EAAE,QAAQ,OAAO,OAAO,kBAAkB,OAAO,gBAAgB,IAAI,CAAC,GACtE;AACA,0BAAM,UAAU,IAAI,UAAU,EAAE,OAAO,gBAAgB,CAAC;AACxD,4BAAQ,QAAQA,MAAK,IAAI,SAAS,CAAC;AACnC,4BAAQ,WAAW,IAAI;AACvB,4BAAQ,OAAO;AACf,2BAAO;AAAA,kBACT;AAEA,2BAAS,WACPvC,OACA,EAAE,QAAQ,OAAO,OAAO,kBAAkB,OAAO,gBAAgB,IAAI,CAAC,GACtE;AACA,0BAAM,EAAE,MAAAuC,OAAM,QAAQ,IAAIvC;AAC1B,0BAAM,UAAU,IAAI,UAAU,EAAE,OAAO,gBAAgB,CAAC;AACxD,4BAAQ,QAAQuC,KAAI;AACpB,4BAAQ,gBAAgB,OAAO;AAC/B,2BAAO;AAAA,kBACT;AAEA,2BAAS,eACP,SACA;AAAA,oBACE,SAAS;AAAA,oBACT,kBAAkB;AAAA,oBAClB,mBAAmB;AAAA,oBACnB,WAAW,OAAO;AAAA,oBAClB,iBAAiB,OAAO;AAAA,kBAC1B,IAAI,CAAC,GACL;AACA,0BAAM,WAAW,SAAS,QAAQ;AAElC,wBAAI,gBAAgB;AAClB,6BAAO;AAAA,oBACT;AAEA,0BAAM,YAAY,KAAK,IAAI,mBAAmB,eAAe;AAE7D,wBAAI,CAAC,UAAU;AAEb,6BAAO,YAAY,IAAM;AAAA,oBAC3B;AAEA,2BAAO,WAAW,YAAY;AAAA,kBAChC;AAEA,2BAAS,qBACP,YAAY,CAAC,GACb,qBAAqB,OAAO,oBAC5B;AACA,wBAAI,UAAU,CAAC;AACf,wBAAIS,SAAQ;AACZ,wBAAIC,OAAM;AACV,wBAAI,IAAI;AAER,6BAAS,MAAM,UAAU,QAAQ,IAAI,KAAK,KAAK,GAAG;AAChD,0BAAI,QAAQ,UAAU,CAAC;AACvB,0BAAI,SAASD,WAAU,IAAI;AACzB,wBAAAA,SAAQ;AAAA,sBACV,WAAW,CAAC,SAASA,WAAU,IAAI;AACjC,wBAAAC,OAAM,IAAI;AACV,4BAAIA,OAAMD,SAAQ,KAAK,oBAAoB;AACzC,kCAAQ,KAAK,CAACA,QAAOC,IAAG,CAAC;AAAA,wBAC3B;AACA,wBAAAD,SAAQ;AAAA,sBACV;AAAA,oBACF;AAGA,wBAAI,UAAU,IAAI,CAAC,KAAK,IAAIA,UAAS,oBAAoB;AACvD,8BAAQ,KAAK,CAACA,QAAO,IAAI,CAAC,CAAC;AAAA,oBAC7B;AAEA,2BAAO;AAAA,kBACT;AAGA,wBAAM,WAAW;AAEjB,2BAASE,QACPC,OACA,SACA,iBACA;AAAA,oBACE,UAAAC,YAAW,OAAO;AAAA,oBAClB,WAAW,OAAO;AAAA,oBAClB,YAAY,OAAO;AAAA,oBACnB,iBAAiB,OAAO;AAAA,oBACxB,qBAAqB,OAAO;AAAA,oBAC5B,iBAAiB,OAAO;AAAA,oBACxB,iBAAiB,OAAO;AAAA,kBAC1B,IAAI,CAAC,GACL;AACA,wBAAI,QAAQ,SAAS,UAAU;AAC7B,4BAAM,IAAI,MAAM,yBAAyB,QAAQ,CAAC;AAAA,oBACpD;AAEA,0BAAM,aAAa,QAAQ;AAE3B,0BAAM,UAAUD,MAAK;AAErB,0BAAM,mBAAmB,KAAK,IAAI,GAAG,KAAK,IAAIC,WAAU,OAAO,CAAC;AAEhE,wBAAI,mBAAmB;AAEvB,wBAAI,eAAe;AAInB,0BAAM,iBAAiB,qBAAqB,KAAK;AAEjD,0BAAM,YAAY,iBAAiB,MAAM,OAAO,IAAI,CAAC;AAErD,wBAAI9C;AAGJ,4BAAQA,SAAQ6C,MAAK,QAAQ,SAAS,YAAY,KAAK,IAAI;AACzD,0BAAIxB,SAAQ,eAAe,SAAS;AAAA,wBAClC,iBAAiBrB;AAAA,wBACjB;AAAA,wBACA;AAAA,wBACA;AAAA,sBACF,CAAC;AAED,yCAAmB,KAAK,IAAIqB,QAAO,gBAAgB;AACnD,qCAAerB,SAAQ;AAEvB,0BAAI,gBAAgB;AAClB,4BAAI,IAAI;AACR,+BAAO,IAAI,YAAY;AACrB,oCAAUA,SAAQ,CAAC,IAAI;AACvB,+BAAK;AAAA,wBACP;AAAA,sBACF;AAAA,oBACF;AAGA,mCAAe;AAEf,wBAAI,aAAa,CAAC;AAClB,wBAAI,aAAa;AACjB,wBAAI,SAAS,aAAa;AAE1B,0BAAM+C,QAAO,KAAM,aAAa;AAEhC,6BAAS,IAAI,GAAG,IAAI,YAAY,KAAK,GAAG;AAItC,0BAAI,SAAS;AACb,0BAAI,SAAS;AAEb,6BAAO,SAAS,QAAQ;AACtB,8BAAM1B,SAAQ,eAAe,SAAS;AAAA,0BACpC,QAAQ;AAAA,0BACR,iBAAiB,mBAAmB;AAAA,0BACpC;AAAA,0BACA;AAAA,0BACA;AAAA,wBACF,CAAC;AAED,4BAAIA,UAAS,kBAAkB;AAC7B,mCAAS;AAAA,wBACX,OAAO;AACL,mCAAS;AAAA,wBACX;AAEA,iCAAS,KAAK,OAAO,SAAS,UAAU,IAAI,MAAM;AAAA,sBACpD;AAGA,+BAAS;AAET,0BAAIqB,SAAQ,KAAK,IAAI,GAAG,mBAAmB,SAAS,CAAC;AACrD,0BAAI,SAAS,iBACT,UACA,KAAK,IAAI,mBAAmB,QAAQ,OAAO,IAAI;AAGnD,0BAAI,SAAS,MAAM,SAAS,CAAC;AAE7B,6BAAO,SAAS,CAAC,KAAK,KAAK,KAAK;AAEhC,+BAASM,KAAI,QAAQA,MAAKN,QAAOM,MAAK,GAAG;AACvC,4BAAI,kBAAkBA,KAAI;AAC1B,4BAAI,YAAY,gBAAgBH,MAAK,OAAO,eAAe,CAAC;AAE5D,4BAAI,gBAAgB;AAElB,oCAAU,eAAe,IAAI,CAAC,CAAC,CAAC;AAAA,wBAClC;AAGA,+BAAOG,EAAC,KAAM,OAAOA,KAAI,CAAC,KAAK,IAAK,KAAK;AAGzC,4BAAI,GAAG;AACL,iCAAOA,EAAC,MACJ,WAAWA,KAAI,CAAC,IAAI,WAAWA,EAAC,MAAM,IAAK,IAAI,WAAWA,KAAI,CAAC;AAAA,wBACrE;AAEA,4BAAI,OAAOA,EAAC,IAAID,OAAM;AACpB,uCAAa,eAAe,SAAS;AAAA,4BACnC,QAAQ;AAAA,4BACR;AAAA,4BACA;AAAA,4BACA;AAAA,4BACA;AAAA,0BACF,CAAC;AAID,8BAAI,cAAc,kBAAkB;AAElC,+CAAmB;AACnB,2CAAe;AAGf,gCAAI,gBAAgB,kBAAkB;AACpC;AAAA,4BACF;AAGA,4BAAAL,SAAQ,KAAK,IAAI,GAAG,IAAI,mBAAmB,YAAY;AAAA,0BACzD;AAAA,wBACF;AAAA,sBACF;AAGA,4BAAMrB,SAAQ,eAAe,SAAS;AAAA,wBACpC,QAAQ,IAAI;AAAA,wBACZ,iBAAiB;AAAA,wBACjB;AAAA,wBACA;AAAA,wBACA;AAAA,sBACF,CAAC;AAED,0BAAIA,SAAQ,kBAAkB;AAC5B;AAAA,sBACF;AAEA,mCAAa;AAAA,oBACf;AAEA,0BAAM,SAAS;AAAA,sBACb,SAAS,gBAAgB;AAAA;AAAA,sBAEzB,OAAO,KAAK,IAAI,MAAO,UAAU;AAAA,oBACnC;AAEA,wBAAI,gBAAgB;AAClB,4BAAM,UAAU,qBAAqB,WAAW,kBAAkB;AAClE,0BAAI,CAAC,QAAQ,QAAQ;AACnB,+BAAO,UAAU;AAAA,sBACnB,WAAW,gBAAgB;AACzB,+BAAO,UAAU;AAAA,sBACnB;AAAA,oBACF;AAEA,2BAAO;AAAA,kBACT;AAEA,2BAAS,sBAAsB,SAAS;AACtC,wBAAI0B,QAAO,CAAC;AAEZ,6BAAS,IAAI,GAAG,MAAM,QAAQ,QAAQ,IAAI,KAAK,KAAK,GAAG;AACrD,4BAAM,OAAO,QAAQ,OAAO,CAAC;AAC7B,sBAAAA,MAAK,IAAI,KAAKA,MAAK,IAAI,KAAK,KAAM,KAAM,MAAM,IAAI;AAAA,oBACpD;AAEA,2BAAOA;AAAA,kBACT;AAAA,kBAEA,MAAM,YAAY;AAAA,oBAChB,YACE,SACA;AAAA,sBACE,UAAAD,YAAW,OAAO;AAAA,sBAClB,YAAY,OAAO;AAAA,sBACnB,WAAW,OAAO;AAAA,sBAClB,iBAAiB,OAAO;AAAA,sBACxB,iBAAiB,OAAO;AAAA,sBACxB,qBAAqB,OAAO;AAAA,sBAC5B,kBAAkB,OAAO;AAAA,sBACzB,iBAAiB,OAAO;AAAA,oBAC1B,IAAI,CAAC,GACL;AACA,2BAAK,UAAU;AAAA,wBACb,UAAAA;AAAA,wBACA;AAAA,wBACA;AAAA,wBACA;AAAA,wBACA;AAAA,wBACA;AAAA,wBACA;AAAA,wBACA;AAAA,sBACF;AAEA,2BAAK,UAAU,kBAAkB,UAAU,QAAQ,YAAY;AAE/D,2BAAK,SAAS,CAAC;AAEf,0BAAI,CAAC,KAAK,QAAQ,QAAQ;AACxB;AAAA,sBACF;AAEA,4BAAM,WAAW,CAACG,UAAS,eAAe;AACxC,6BAAK,OAAO,KAAK;AAAA,0BACf,SAAAA;AAAA,0BACA,UAAU,sBAAsBA,QAAO;AAAA,0BACvC;AAAA,wBACF,CAAC;AAAA,sBACH;AAEA,4BAAM,MAAM,KAAK,QAAQ;AAEzB,0BAAI,MAAM,UAAU;AAClB,4BAAI,IAAI;AACR,8BAAM,YAAY,MAAM;AACxB,8BAAMN,OAAM,MAAM;AAElB,+BAAO,IAAIA,MAAK;AACd,mCAAS,KAAK,QAAQ,OAAO,GAAG,QAAQ,GAAG,CAAC;AAC5C,+BAAK;AAAA,wBACP;AAEA,4BAAI,WAAW;AACb,gCAAM,aAAa,MAAM;AACzB,mCAAS,KAAK,QAAQ,OAAO,UAAU,GAAG,UAAU;AAAA,wBACtD;AAAA,sBACF,OAAO;AACL,iCAAS,KAAK,SAAS,CAAC;AAAA,sBAC1B;AAAA,oBACF;AAAA,oBAEA,SAASE,OAAM;AACb,4BAAM,EAAE,iBAAiB,eAAe,IAAI,KAAK;AAEjD,0BAAI,CAAC,iBAAiB;AACpB,wBAAAA,QAAOA,MAAK,YAAY;AAAA,sBAC1B;AAGA,0BAAI,KAAK,YAAYA,OAAM;AACzB,4BAAIK,UAAS;AAAA,0BACX,SAAS;AAAA,0BACT,OAAO;AAAA,wBACT;AAEA,4BAAI,gBAAgB;AAClB,0BAAAA,QAAO,UAAU,CAAC,CAAC,GAAGL,MAAK,SAAS,CAAC,CAAC;AAAA,wBACxC;AAEA,+BAAOK;AAAA,sBACT;AAGA,4BAAM;AAAA,wBACJ,UAAAJ;AAAA,wBACA;AAAA,wBACA;AAAA,wBACA;AAAA,wBACA;AAAA,wBACA;AAAA,sBACF,IAAI,KAAK;AAET,0BAAI,aAAa,CAAC;AAClB,0BAAI,aAAa;AACjB,0BAAI,aAAa;AAEjB,2BAAK,OAAO,QAAQ,CAAC,EAAE,SAAS,UAAU,WAAW,MAAM;AACzD,8BAAM,EAAE,SAAS,OAAAzB,QAAO,QAAQ,IAAIuB,QAAOC,OAAM,SAAS,UAAU;AAAA,0BAClE,UAAUC,YAAW;AAAA,0BACrB;AAAA,0BACA;AAAA,0BACA;AAAA,0BACA;AAAA,0BACA;AAAA,0BACA;AAAA,wBACF,CAAC;AAED,4BAAI,SAAS;AACX,uCAAa;AAAA,wBACf;AAEA,sCAAczB;AAEd,4BAAI,WAAW,SAAS;AACtB,uCAAa,CAAC,GAAG,YAAY,GAAG,OAAO;AAAA,wBACzC;AAAA,sBACF,CAAC;AAED,0BAAI,SAAS;AAAA,wBACX,SAAS;AAAA,wBACT,OAAO,aAAa,aAAa,KAAK,OAAO,SAAS;AAAA,sBACxD;AAEA,0BAAI,cAAc,gBAAgB;AAChC,+BAAO,UAAU;AAAA,sBACnB;AAEA,6BAAO;AAAA,oBACT;AAAA,kBACF;AAAA,kBAEA,MAAM,UAAU;AAAA,oBACd,YAAY,SAAS;AACnB,2BAAK,UAAU;AAAA,oBACjB;AAAA,oBACA,OAAO,aAAa,SAAS;AAC3B,6BAAO,SAAS,SAAS,KAAK,UAAU;AAAA,oBAC1C;AAAA,oBACA,OAAO,cAAc,SAAS;AAC5B,6BAAO,SAAS,SAAS,KAAK,WAAW;AAAA,oBAC3C;AAAA,oBACA,SAAiB;AAAA,oBAAC;AAAA,kBACpB;AAEA,2BAAS,SAAS,SAAS,KAAK;AAC9B,0BAAM,UAAU,QAAQ,MAAM,GAAG;AACjC,2BAAO,UAAU,QAAQ,CAAC,IAAI;AAAA,kBAChC;AAAA,kBAIA,MAAM,mBAAmB,UAAU;AAAA,oBACjC,YAAY,SAAS;AACnB,4BAAM,OAAO;AAAA,oBACf;AAAA,oBACA,WAAW,OAAO;AAChB,6BAAO;AAAA,oBACT;AAAA,oBACA,WAAW,aAAa;AACtB,6BAAO;AAAA,oBACT;AAAA,oBACA,WAAW,cAAc;AACvB,6BAAO;AAAA,oBACT;AAAA,oBACA,OAAOwB,OAAM;AACX,4BAAM,UAAUA,UAAS,KAAK;AAE9B,6BAAO;AAAA,wBACL;AAAA,wBACA,OAAO,UAAU,IAAI;AAAA,wBACrB,SAAS,CAAC,GAAG,KAAK,QAAQ,SAAS,CAAC;AAAA,sBACtC;AAAA,oBACF;AAAA,kBACF;AAAA,kBAIA,MAAM,0BAA0B,UAAU;AAAA,oBACxC,YAAY,SAAS;AACnB,4BAAM,OAAO;AAAA,oBACf;AAAA,oBACA,WAAW,OAAO;AAChB,6BAAO;AAAA,oBACT;AAAA,oBACA,WAAW,aAAa;AACtB,6BAAO;AAAA,oBACT;AAAA,oBACA,WAAW,cAAc;AACvB,6BAAO;AAAA,oBACT;AAAA,oBACA,OAAOA,OAAM;AACX,4BAAM7C,SAAQ6C,MAAK,QAAQ,KAAK,OAAO;AACvC,4BAAM,UAAU7C,WAAU;AAE1B,6BAAO;AAAA,wBACL;AAAA,wBACA,OAAO,UAAU,IAAI;AAAA,wBACrB,SAAS,CAAC,GAAG6C,MAAK,SAAS,CAAC;AAAA,sBAC9B;AAAA,oBACF;AAAA,kBACF;AAAA,kBAIA,MAAM,yBAAyB,UAAU;AAAA,oBACvC,YAAY,SAAS;AACnB,4BAAM,OAAO;AAAA,oBACf;AAAA,oBACA,WAAW,OAAO;AAChB,6BAAO;AAAA,oBACT;AAAA,oBACA,WAAW,aAAa;AACtB,6BAAO;AAAA,oBACT;AAAA,oBACA,WAAW,cAAc;AACvB,6BAAO;AAAA,oBACT;AAAA,oBACA,OAAOA,OAAM;AACX,4BAAM,UAAUA,MAAK,WAAW,KAAK,OAAO;AAE5C,6BAAO;AAAA,wBACL;AAAA,wBACA,OAAO,UAAU,IAAI;AAAA,wBACrB,SAAS,CAAC,GAAG,KAAK,QAAQ,SAAS,CAAC;AAAA,sBACtC;AAAA,oBACF;AAAA,kBACF;AAAA,kBAIA,MAAM,gCAAgC,UAAU;AAAA,oBAC9C,YAAY,SAAS;AACnB,4BAAM,OAAO;AAAA,oBACf;AAAA,oBACA,WAAW,OAAO;AAChB,6BAAO;AAAA,oBACT;AAAA,oBACA,WAAW,aAAa;AACtB,6BAAO;AAAA,oBACT;AAAA,oBACA,WAAW,cAAc;AACvB,6BAAO;AAAA,oBACT;AAAA,oBACA,OAAOA,OAAM;AACX,4BAAM,UAAU,CAACA,MAAK,WAAW,KAAK,OAAO;AAE7C,6BAAO;AAAA,wBACL;AAAA,wBACA,OAAO,UAAU,IAAI;AAAA,wBACrB,SAAS,CAAC,GAAGA,MAAK,SAAS,CAAC;AAAA,sBAC9B;AAAA,oBACF;AAAA,kBACF;AAAA,kBAIA,MAAM,yBAAyB,UAAU;AAAA,oBACvC,YAAY,SAAS;AACnB,4BAAM,OAAO;AAAA,oBACf;AAAA,oBACA,WAAW,OAAO;AAChB,6BAAO;AAAA,oBACT;AAAA,oBACA,WAAW,aAAa;AACtB,6BAAO;AAAA,oBACT;AAAA,oBACA,WAAW,cAAc;AACvB,6BAAO;AAAA,oBACT;AAAA,oBACA,OAAOA,OAAM;AACX,4BAAM,UAAUA,MAAK,SAAS,KAAK,OAAO;AAE1C,6BAAO;AAAA,wBACL;AAAA,wBACA,OAAO,UAAU,IAAI;AAAA,wBACrB,SAAS,CAACA,MAAK,SAAS,KAAK,QAAQ,QAAQA,MAAK,SAAS,CAAC;AAAA,sBAC9D;AAAA,oBACF;AAAA,kBACF;AAAA,kBAIA,MAAM,gCAAgC,UAAU;AAAA,oBAC9C,YAAY,SAAS;AACnB,4BAAM,OAAO;AAAA,oBACf;AAAA,oBACA,WAAW,OAAO;AAChB,6BAAO;AAAA,oBACT;AAAA,oBACA,WAAW,aAAa;AACtB,6BAAO;AAAA,oBACT;AAAA,oBACA,WAAW,cAAc;AACvB,6BAAO;AAAA,oBACT;AAAA,oBACA,OAAOA,OAAM;AACX,4BAAM,UAAU,CAACA,MAAK,SAAS,KAAK,OAAO;AAC3C,6BAAO;AAAA,wBACL;AAAA,wBACA,OAAO,UAAU,IAAI;AAAA,wBACrB,SAAS,CAAC,GAAGA,MAAK,SAAS,CAAC;AAAA,sBAC9B;AAAA,oBACF;AAAA,kBACF;AAAA,kBAEA,MAAM,mBAAmB,UAAU;AAAA,oBACjC,YACE,SACA;AAAA,sBACE,UAAAC,YAAW,OAAO;AAAA,sBAClB,YAAY,OAAO;AAAA,sBACnB,WAAW,OAAO;AAAA,sBAClB,iBAAiB,OAAO;AAAA,sBACxB,iBAAiB,OAAO;AAAA,sBACxB,qBAAqB,OAAO;AAAA,sBAC5B,kBAAkB,OAAO;AAAA,sBACzB,iBAAiB,OAAO;AAAA,oBAC1B,IAAI,CAAC,GACL;AACA,4BAAM,OAAO;AACb,2BAAK,eAAe,IAAI,YAAY,SAAS;AAAA,wBAC3C,UAAAA;AAAA,wBACA;AAAA,wBACA;AAAA,wBACA;AAAA,wBACA;AAAA,wBACA;AAAA,wBACA;AAAA,wBACA;AAAA,sBACF,CAAC;AAAA,oBACH;AAAA,oBACA,WAAW,OAAO;AAChB,6BAAO;AAAA,oBACT;AAAA,oBACA,WAAW,aAAa;AACtB,6BAAO;AAAA,oBACT;AAAA,oBACA,WAAW,cAAc;AACvB,6BAAO;AAAA,oBACT;AAAA,oBACA,OAAOD,OAAM;AACX,6BAAO,KAAK,aAAa,SAASA,KAAI;AAAA,oBACxC;AAAA,kBACF;AAAA,kBAIA,MAAM,qBAAqB,UAAU;AAAA,oBACnC,YAAY,SAAS;AACnB,4BAAM,OAAO;AAAA,oBACf;AAAA,oBACA,WAAW,OAAO;AAChB,6BAAO;AAAA,oBACT;AAAA,oBACA,WAAW,aAAa;AACtB,6BAAO;AAAA,oBACT;AAAA,oBACA,WAAW,cAAc;AACvB,6BAAO;AAAA,oBACT;AAAA,oBACA,OAAOA,OAAM;AACX,0BAAIC,YAAW;AACf,0BAAI9C;AAEJ,4BAAM,UAAU,CAAC;AACjB,4BAAM,aAAa,KAAK,QAAQ;AAGhC,8BAAQA,SAAQ6C,MAAK,QAAQ,KAAK,SAASC,SAAQ,KAAK,IAAI;AAC1D,wBAAAA,YAAW9C,SAAQ;AACnB,gCAAQ,KAAK,CAACA,QAAO8C,YAAW,CAAC,CAAC;AAAA,sBACpC;AAEA,4BAAM,UAAU,CAAC,CAAC,QAAQ;AAE1B,6BAAO;AAAA,wBACL;AAAA,wBACA,OAAO,UAAU,IAAI;AAAA,wBACrB;AAAA,sBACF;AAAA,oBACF;AAAA,kBACF;AAGA,wBAAM,YAAY;AAAA,oBAChB;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,kBACF;AAEA,wBAAM,eAAe,UAAU;AAG/B,wBAAM,WAAW;AACjB,wBAAM,WAAW;AAKjB,2BAAS,WAAW,SAAS,UAAU,CAAC,GAAG;AACzC,2BAAO,QAAQ,MAAM,QAAQ,EAAE,IAAI,CAAC,SAAS;AAC3C,0BAAI,QAAQ,KACT,KAAK,EACL,MAAM,QAAQ,EACd,OAAO,CAACK,UAASA,SAAQ,CAAC,CAACA,MAAK,KAAK,CAAC;AAEzC,0BAAI,UAAU,CAAC;AACf,+BAAS,IAAI,GAAG,MAAM,MAAM,QAAQ,IAAI,KAAK,KAAK,GAAG;AACnD,8BAAM,YAAY,MAAM,CAAC;AAGzB,4BAAI,QAAQ;AACZ,4BAAI,MAAM;AACV,+BAAO,CAAC,SAAS,EAAE,MAAM,cAAc;AACrC,gCAAM,WAAW,UAAU,GAAG;AAC9B,8BAAI,QAAQ,SAAS,aAAa,SAAS;AAC3C,8BAAI,OAAO;AACT,oCAAQ,KAAK,IAAI,SAAS,OAAO,OAAO,CAAC;AACzC,oCAAQ;AAAA,0BACV;AAAA,wBACF;AAEA,4BAAI,OAAO;AACT;AAAA,wBACF;AAGA,8BAAM;AACN,+BAAO,EAAE,MAAM,cAAc;AAC3B,gCAAM,WAAW,UAAU,GAAG;AAC9B,8BAAI,QAAQ,SAAS,cAAc,SAAS;AAC5C,8BAAI,OAAO;AACT,oCAAQ,KAAK,IAAI,SAAS,OAAO,OAAO,CAAC;AACzC;AAAA,0BACF;AAAA,wBACF;AAAA,sBACF;AAEA,6BAAO;AAAA,oBACT,CAAC;AAAA,kBACH;AAIA,wBAAM,gBAAgB,oBAAI,IAAI,CAAC,WAAW,MAAM,aAAa,IAAI,CAAC;AAAA,kBA8BlE,MAAM,eAAe;AAAA,oBACnB,YACE,SACA;AAAA,sBACE,kBAAkB,OAAO;AAAA,sBACzB,iBAAiB,OAAO;AAAA,sBACxB,qBAAqB,OAAO;AAAA,sBAC5B,iBAAiB,OAAO;AAAA,sBACxB,iBAAiB,OAAO;AAAA,sBACxB,UAAAL,YAAW,OAAO;AAAA,sBAClB,YAAY,OAAO;AAAA,sBACnB,WAAW,OAAO;AAAA,oBACpB,IAAI,CAAC,GACL;AACA,2BAAK,QAAQ;AACb,2BAAK,UAAU;AAAA,wBACb;AAAA,wBACA;AAAA,wBACA;AAAA,wBACA;AAAA,wBACA;AAAA,wBACA,UAAAA;AAAA,wBACA;AAAA,wBACA;AAAA,sBACF;AAEA,2BAAK,UAAU,kBAAkB,UAAU,QAAQ,YAAY;AAC/D,2BAAK,QAAQ,WAAW,KAAK,SAAS,KAAK,OAAO;AAAA,oBACpD;AAAA,oBAEA,OAAO,UAAU,GAAG,SAAS;AAC3B,6BAAO,QAAQ;AAAA,oBACjB;AAAA,oBAEA,SAASD,OAAM;AACb,4BAAM,QAAQ,KAAK;AAEnB,0BAAI,CAAC,OAAO;AACV,+BAAO;AAAA,0BACL,SAAS;AAAA,0BACT,OAAO;AAAA,wBACT;AAAA,sBACF;AAEA,4BAAM,EAAE,gBAAgB,gBAAgB,IAAI,KAAK;AAEjD,sBAAAA,QAAO,kBAAkBA,QAAOA,MAAK,YAAY;AAEjD,0BAAI,aAAa;AACjB,0BAAI,aAAa,CAAC;AAClB,0BAAI,aAAa;AAGjB,+BAAS,IAAI,GAAG,OAAO,MAAM,QAAQ,IAAI,MAAM,KAAK,GAAG;AACrD,8BAAMO,aAAY,MAAM,CAAC;AAGzB,mCAAW,SAAS;AACpB,qCAAa;AAGb,iCAASJ,KAAI,GAAG,OAAOI,WAAU,QAAQJ,KAAI,MAAMA,MAAK,GAAG;AACzD,gCAAM,WAAWI,WAAUJ,EAAC;AAC5B,gCAAM,EAAE,SAAS,SAAS,OAAA3B,OAAM,IAAI,SAAS,OAAOwB,KAAI;AAExD,8BAAI,SAAS;AACX,0CAAc;AACd,0CAAcxB;AACd,gCAAI,gBAAgB;AAClB,oCAAM,OAAO,SAAS,YAAY;AAClC,kCAAI,cAAc,IAAI,IAAI,GAAG;AAC3B,6CAAa,CAAC,GAAG,YAAY,GAAG,OAAO;AAAA,8BACzC,OAAO;AACL,2CAAW,KAAK,OAAO;AAAA,8BACzB;AAAA,4BACF;AAAA,0BACF,OAAO;AACL,yCAAa;AACb,yCAAa;AACb,uCAAW,SAAS;AACpB;AAAA,0BACF;AAAA,wBACF;AAGA,4BAAI,YAAY;AACd,8BAAI,SAAS;AAAA,4BACX,SAAS;AAAA,4BACT,OAAO,aAAa;AAAA,0BACtB;AAEA,8BAAI,gBAAgB;AAClB,mCAAO,UAAU;AAAA,0BACnB;AAEA,iCAAO;AAAA,wBACT;AAAA,sBACF;AAGA,6BAAO;AAAA,wBACL,SAAS;AAAA,wBACT,OAAO;AAAA,sBACT;AAAA,oBACF;AAAA,kBACF;AAEA,wBAAM,sBAAsB,CAAC;AAE7B,2BAASgC,aAAY,MAAM;AACzB,wCAAoB,KAAK,GAAG,IAAI;AAAA,kBAClC;AAEA,2BAAS,eAAe,SAAS,SAAS;AACxC,6BAAS,IAAI,GAAG,MAAM,oBAAoB,QAAQ,IAAI,KAAK,KAAK,GAAG;AACjE,0BAAI,gBAAgB,oBAAoB,CAAC;AACzC,0BAAI,cAAc,UAAU,SAAS,OAAO,GAAG;AAC7C,+BAAO,IAAI,cAAc,SAAS,OAAO;AAAA,sBAC3C;AAAA,oBACF;AAEA,2BAAO,IAAI,YAAY,SAAS,OAAO;AAAA,kBACzC;AAEA,wBAAM,kBAAkB;AAAA,oBACtB,KAAK;AAAA,oBACL,IAAI;AAAA,kBACN;AAEA,wBAAM,UAAU;AAAA,oBACd,MAAM;AAAA,oBACN,SAAS;AAAA,kBACX;AAEA,wBAAM,eAAe,CAAC,UACpB,CAAC,EAAE,MAAM,gBAAgB,GAAG,KAAK,MAAM,gBAAgB,EAAE;AAE3D,wBAAM,SAAS,CAAC,UAAU,CAAC,CAAC,MAAM,QAAQ,IAAI;AAE9C,wBAAM,SAAS,CAAC,UACd,CAAC,QAAQ,KAAK,KAAK,SAAS,KAAK,KAAK,CAAC,aAAa,KAAK;AAE3D,wBAAM,oBAAoB,CAAC,WAAW;AAAA,oBACpC,CAAC,gBAAgB,GAAG,GAAG,OAAO,KAAK,KAAK,EAAE,IAAI,CAAC,SAAS;AAAA,sBACtD,CAAC,GAAG,GAAG,MAAM,GAAG;AAAA,oBAClB,EAAE;AAAA,kBACJ;AAIA,2BAASC,OAAM,OAAO,SAAS,EAAE,MAAAC,QAAO,KAAK,IAAI,CAAC,GAAG;AACnD,0BAAM,OAAO,CAACC,WAAU;AACtB,0BAAIvB,QAAO,OAAO,KAAKuB,MAAK;AAE5B,4BAAM,cAAc,OAAOA,MAAK;AAEhC,0BAAI,CAAC,eAAevB,MAAK,SAAS,KAAK,CAAC,aAAauB,MAAK,GAAG;AAC3D,+BAAO,KAAK,kBAAkBA,MAAK,CAAC;AAAA,sBACtC;AAEA,0BAAI,OAAOA,MAAK,GAAG;AACjB,8BAAM,MAAM,cAAcA,OAAM,QAAQ,IAAI,IAAIvB,MAAK,CAAC;AAEtD,8BAAM,UAAU,cAAcuB,OAAM,QAAQ,OAAO,IAAIA,OAAM,GAAG;AAEhE,4BAAI,CAAC,SAAS,OAAO,GAAG;AACtB,gCAAM,IAAI,MAAM,qCAAqC,GAAG,CAAC;AAAA,wBAC3D;AAEA,8BAAM,MAAM;AAAA,0BACV,OAAO,YAAY,GAAG;AAAA,0BACtB;AAAA,wBACF;AAEA,4BAAID,OAAM;AACR,8BAAI,WAAW,eAAe,SAAS,OAAO;AAAA,wBAChD;AAEA,+BAAO;AAAA,sBACT;AAEA,0BAAIjD,QAAO;AAAA,wBACT,UAAU,CAAC;AAAA,wBACX,UAAU2B,MAAK,CAAC;AAAA,sBAClB;AAEA,sBAAAA,MAAK,QAAQ,CAAC,QAAQ;AACpB,8BAAM,QAAQuB,OAAM,GAAG;AAEvB,4BAAI,QAAQ,KAAK,GAAG;AAClB,gCAAM,QAAQ,CAAC,SAAS;AACtB,4BAAAlD,MAAK,SAAS,KAAK,KAAK,IAAI,CAAC;AAAA,0BAC/B,CAAC;AAAA,wBACH;AAAA,sBACF,CAAC;AAED,6BAAOA;AAAA,oBACT;AAEA,wBAAI,CAAC,aAAa,KAAK,GAAG;AACxB,8BAAQ,kBAAkB,KAAK;AAAA,oBACjC;AAEA,2BAAO,KAAK,KAAK;AAAA,kBACnB;AAGA,2BAAS,aACP,SACA,EAAE,kBAAkB,OAAO,gBAAgB,GAC3C;AACA,4BAAQ,QAAQ,CAAC,WAAW;AAC1B,0BAAI,aAAa;AAEjB,6BAAO,QAAQ,QAAQ,CAAC,EAAE,KAAK,MAAAgC,OAAM,OAAAjB,OAAM,MAAM;AAC/C,8BAAM,SAAS,MAAM,IAAI,SAAS;AAElC,sCAAc,KAAK;AAAA,0BACjBA,WAAU,KAAK,SAAS,OAAO,UAAUA;AAAA,2BACxC,UAAU,MAAM,kBAAkB,IAAIiB;AAAA,wBACzC;AAAA,sBACF,CAAC;AAED,6BAAO,QAAQ;AAAA,oBACjB,CAAC;AAAA,kBACH;AAEA,2BAAS,iBAAiB,QAAQ5C,OAAM;AACtC,0BAAM,UAAU,OAAO;AACvB,oBAAAA,MAAK,UAAU,CAAC;AAEhB,wBAAI,CAAC,UAAU,OAAO,GAAG;AACvB;AAAA,oBACF;AAEA,4BAAQ,QAAQ,CAAC,UAAU;AACzB,0BAAI,CAAC,UAAU,MAAM,OAAO,KAAK,CAAC,MAAM,QAAQ,QAAQ;AACtD;AAAA,sBACF;AAEA,4BAAM,EAAE,SAAS,MAAM,IAAI;AAE3B,0BAAI,MAAM;AAAA,wBACR;AAAA,wBACA;AAAA,sBACF;AAEA,0BAAI,MAAM,KAAK;AACb,4BAAI,MAAM,MAAM,IAAI;AAAA,sBACtB;AAEA,0BAAI,MAAM,MAAM,IAAI;AAClB,4BAAI,WAAW,MAAM;AAAA,sBACvB;AAEA,sBAAAA,MAAK,QAAQ,KAAK,GAAG;AAAA,oBACvB,CAAC;AAAA,kBACH;AAEA,2BAAS,eAAe,QAAQA,OAAM;AACpC,oBAAAA,MAAK,QAAQ,OAAO;AAAA,kBACtB;AAEA,2BAAS,OACP,SACA,MACA;AAAA,oBACE,iBAAiB,OAAO;AAAA,oBACxB,eAAe,OAAO;AAAA,kBACxB,IAAI,CAAC,GACL;AACA,0BAAM,eAAe,CAAC;AAEtB,wBAAI;AAAgB,mCAAa,KAAK,gBAAgB;AACtD,wBAAI;AAAc,mCAAa,KAAK,cAAc;AAElD,2BAAO,QAAQ,IAAI,CAAC,WAAW;AAC7B,4BAAM,EAAE,IAAI,IAAI;AAEhB,4BAAMA,QAAO;AAAA,wBACX,MAAM,KAAK,GAAG;AAAA,wBACd,UAAU;AAAA,sBACZ;AAEA,0BAAI,aAAa,QAAQ;AACvB,qCAAa,QAAQ,CAAC,gBAAgB;AACpC,sCAAY,QAAQA,KAAI;AAAA,wBAC1B,CAAC;AAAA,sBACH;AAEA,6BAAOA;AAAA,oBACT,CAAC;AAAA,kBACH;AAAA,kBAEA,MAAM,KAAK;AAAA,oBACT,YAAY,MAAM,UAAU,CAAC,GAAGM,QAAO;AACrC,2BAAK,UAAU,kCAAK,SAAW;AAE/B,0BACE,KAAK,QAAQ,qBACb,OACA;AAAA,sBAAC;AAEH,2BAAK,YAAY,IAAI,SAAS,KAAK,QAAQ,IAAI;AAE/C,2BAAK,cAAc,MAAMA,MAAK;AAAA,oBAChC;AAAA,oBAEA,cAAc,MAAMA,QAAO;AACzB,2BAAK,QAAQ;AAEb,0BAAIA,UAAS,EAAEA,kBAAiB,YAAY;AAC1C,8BAAM,IAAI,MAAM,oBAAoB;AAAA,sBACtC;AAEA,2BAAK,WACHA,UACA,YAAY,KAAK,QAAQ,MAAM,KAAK,OAAO;AAAA,wBACzC,OAAO,KAAK,QAAQ;AAAA,wBACpB,iBAAiB,KAAK,QAAQ;AAAA,sBAChC,CAAC;AAAA,oBACL;AAAA,oBAEA,IAAIwC,MAAK;AACP,0BAAI,CAAC,UAAUA,IAAG,GAAG;AACnB;AAAA,sBACF;AAEA,2BAAK,MAAM,KAAKA,IAAG;AACnB,2BAAK,SAAS,IAAIA,IAAG;AAAA,oBACvB;AAAA,oBAEA,OAAO,YAAY,MAAoB,OAAO;AAC5C,4BAAM,UAAU,CAAC;AAEjB,+BAAS,IAAI,GAAG,MAAM,KAAK,MAAM,QAAQ,IAAI,KAAK,KAAK,GAAG;AACxD,8BAAMA,OAAM,KAAK,MAAM,CAAC;AACxB,4BAAI,UAAUA,MAAK,CAAC,GAAG;AACrB,+BAAK,SAAS,CAAC;AACf,+BAAK;AACL,iCAAO;AAEP,kCAAQ,KAAKA,IAAG;AAAA,wBAClB;AAAA,sBACF;AAEA,6BAAO;AAAA,oBACT;AAAA,oBAEA,SAAS,KAAK;AACZ,2BAAK,MAAM,OAAO,KAAK,CAAC;AACxB,2BAAK,SAAS,SAAS,GAAG;AAAA,oBAC5B;AAAA,oBAEA,WAAW;AACT,6BAAO,KAAK;AAAA,oBACd;AAAA,oBAEA,OAAO,OAAO,EAAE,QAAQ,GAAG,IAAI,CAAC,GAAG;AACjC,4BAAM;AAAA,wBACJ;AAAA,wBACA;AAAA,wBACA;AAAA,wBACA;AAAA,wBACA;AAAA,sBACF,IAAI,KAAK;AAET,0BAAI,UAAU,SAAS,KAAK,IACxB,SAAS,KAAK,MAAM,CAAC,CAAC,IACpB,KAAK,kBAAkB,KAAK,IAC5B,KAAK,kBAAkB,KAAK,IAC9B,KAAK,eAAe,KAAK;AAE7B,mCAAa,SAAS,EAAE,gBAAgB,CAAC;AAEzC,0BAAI,YAAY;AACd,gCAAQ,KAAK,MAAM;AAAA,sBACrB;AAEA,0BAAI,SAAS,KAAK,KAAK,QAAQ,IAAI;AACjC,kCAAU,QAAQ,MAAM,GAAG,KAAK;AAAA,sBAClC;AAEA,6BAAO,OAAO,SAAS,KAAK,OAAO;AAAA,wBACjC;AAAA,wBACA;AAAA,sBACF,CAAC;AAAA,oBACH;AAAA,oBAEA,kBAAkB,OAAO;AACvB,4BAAM,WAAW,eAAe,OAAO,KAAK,OAAO;AACnD,4BAAM,EAAE,QAAQ,IAAI,KAAK;AACzB,4BAAM,UAAU,CAAC;AAGjB,8BAAQ,QAAQ,CAAC,EAAE,GAAGK,OAAM,GAAG,KAAK,GAAGP,MAAK,MAAM;AAChD,4BAAI,CAAC,UAAUO,KAAI,GAAG;AACpB;AAAA,wBACF;AAEA,8BAAM,EAAE,SAAS,OAAAxB,QAAO,QAAQ,IAAI,SAAS,SAASwB,KAAI;AAE1D,4BAAI,SAAS;AACX,kCAAQ,KAAK;AAAA,4BACX,MAAMA;AAAA,4BACN;AAAA,4BACA,SAAS,CAAC,EAAE,OAAAxB,QAAO,OAAOwB,OAAM,MAAAP,OAAM,QAAQ,CAAC;AAAA,0BACjD,CAAC;AAAA,wBACH;AAAA,sBACF,CAAC;AAED,6BAAO;AAAA,oBACT;AAAA,oBAEA,eAAe,OAAO;AAEpB,4BAAM,aAAagB,OAAM,OAAO,KAAK,OAAO;AAE5C,4BAAM,WAAW,CAAChD,OAAM,MAAM,QAAQ;AACpC,4BAAI,CAACA,MAAK,UAAU;AAClB,gCAAM,EAAE,OAAO,SAAS,IAAIA;AAE5B,gCAAM,UAAU,KAAK,aAAa;AAAA,4BAChC,KAAK,KAAK,UAAU,IAAI,KAAK;AAAA,4BAC7B,OAAO,KAAK,SAAS,uBAAuB,MAAM,KAAK;AAAA,4BACvD;AAAA,0BACF,CAAC;AAED,8BAAI,WAAW,QAAQ,QAAQ;AAC7B,mCAAO;AAAA,8BACL;AAAA,gCACE;AAAA,gCACA;AAAA,gCACA;AAAA,8BACF;AAAA,4BACF;AAAA,0BACF;AAEA,iCAAO,CAAC;AAAA,wBACV;AAEA,8BAAM,MAAM,CAAC;AACb,iCAAS,IAAI,GAAG,MAAMA,MAAK,SAAS,QAAQ,IAAI,KAAK,KAAK,GAAG;AAC3D,gCAAM,QAAQA,MAAK,SAAS,CAAC;AAC7B,gCAAM,SAAS,SAAS,OAAO,MAAM,GAAG;AACxC,8BAAI,OAAO,QAAQ;AACjB,gCAAI,KAAK,GAAG,MAAM;AAAA,0BACpB,WAAWA,MAAK,aAAa,gBAAgB,KAAK;AAChD,mCAAO,CAAC;AAAA,0BACV;AAAA,wBACF;AACA,+BAAO;AAAA,sBACT;AAEA,4BAAM,UAAU,KAAK,SAAS;AAC9B,4BAAM,YAAY,CAAC;AACnB,4BAAM,UAAU,CAAC;AAEjB,8BAAQ,QAAQ,CAAC,EAAE,GAAG,MAAM,GAAG,IAAI,MAAM;AACvC,4BAAI,UAAU,IAAI,GAAG;AACnB,8BAAI,aAAa,SAAS,YAAY,MAAM,GAAG;AAE/C,8BAAI,WAAW,QAAQ;AAErB,gCAAI,CAAC,UAAU,GAAG,GAAG;AACnB,wCAAU,GAAG,IAAI,EAAE,KAAK,MAAM,SAAS,CAAC,EAAE;AAC1C,sCAAQ,KAAK,UAAU,GAAG,CAAC;AAAA,4BAC7B;AACA,uCAAW,QAAQ,CAAC,EAAE,QAAQ,MAAM;AAClC,wCAAU,GAAG,EAAE,QAAQ,KAAK,GAAG,OAAO;AAAA,4BACxC,CAAC;AAAA,0BACH;AAAA,wBACF;AAAA,sBACF,CAAC;AAED,6BAAO;AAAA,oBACT;AAAA,oBAEA,kBAAkB,OAAO;AACvB,4BAAM,WAAW,eAAe,OAAO,KAAK,OAAO;AACnD,4BAAM,EAAE,MAAA2B,OAAM,QAAQ,IAAI,KAAK;AAC/B,4BAAM,UAAU,CAAC;AAGjB,8BAAQ,QAAQ,CAAC,EAAE,GAAG,MAAM,GAAG,IAAI,MAAM;AACvC,4BAAI,CAAC,UAAU,IAAI,GAAG;AACpB;AAAA,wBACF;AAEA,4BAAI,UAAU,CAAC;AAGf,wBAAAA,MAAK,QAAQ,CAAC,KAAK,aAAa;AAC9B,kCAAQ;AAAA,4BACN,GAAG,KAAK,aAAa;AAAA,8BACnB;AAAA,8BACA,OAAO,KAAK,QAAQ;AAAA,8BACpB;AAAA,4BACF,CAAC;AAAA,0BACH;AAAA,wBACF,CAAC;AAED,4BAAI,QAAQ,QAAQ;AAClB,kCAAQ,KAAK;AAAA,4BACX;AAAA,4BACA;AAAA,4BACA;AAAA,0BACF,CAAC;AAAA,wBACH;AAAA,sBACF,CAAC;AAED,6BAAO;AAAA,oBACT;AAAA,oBACA,aAAa,EAAE,KAAK,OAAO,SAAS,GAAG;AACrC,0BAAI,CAAC,UAAU,KAAK,GAAG;AACrB,+BAAO,CAAC;AAAA,sBACV;AAEA,0BAAI,UAAU,CAAC;AAEf,0BAAI,QAAQ,KAAK,GAAG;AAClB,8BAAM,QAAQ,CAAC,EAAE,GAAGY,OAAM,GAAG,KAAK,GAAGP,MAAK,MAAM;AAC9C,8BAAI,CAAC,UAAUO,KAAI,GAAG;AACpB;AAAA,0BACF;AAEA,gCAAM,EAAE,SAAS,OAAAxB,QAAO,QAAQ,IAAI,SAAS,SAASwB,KAAI;AAE1D,8BAAI,SAAS;AACX,oCAAQ,KAAK;AAAA,8BACX,OAAAxB;AAAA,8BACA;AAAA,8BACA,OAAOwB;AAAA,8BACP;AAAA,8BACA,MAAAP;AAAA,8BACA;AAAA,4BACF,CAAC;AAAA,0BACH;AAAA,wBACF,CAAC;AAAA,sBACH,OAAO;AACL,8BAAM,EAAE,GAAGO,OAAM,GAAGP,MAAK,IAAI;AAE7B,8BAAM,EAAE,SAAS,OAAAjB,QAAO,QAAQ,IAAI,SAAS,SAASwB,KAAI;AAE1D,4BAAI,SAAS;AACX,kCAAQ,KAAK,EAAE,OAAAxB,QAAO,KAAK,OAAOwB,OAAM,MAAAP,OAAM,QAAQ,CAAC;AAAA,wBACzD;AAAA,sBACF;AAEA,6BAAO;AAAA,oBACT;AAAA,kBACF;AAEA,uBAAK,UAAU;AACf,uBAAK,cAAc;AACnB,uBAAK,aAAa;AAClB,uBAAK,SAAS;AAEd;AACE,yBAAK,aAAagB;AAAA,kBACpB;AAEA;AACE,oBAAAD,UAAS,cAAc;AAAA,kBACzB;AAAA,gBAKM;AAAA;AAAA;AAAA,cAEA;AAAA;AAAA,gBACC,SAAS,yBAAyBzB,sBAAqB7C,sBAAqB;AAGnF,kBAAAA,qBAAoB,EAAE6C,oBAAmB;AAGzC,kBAAA7C,qBAAoB,EAAE6C,sBAAqB;AAAA,oBACzC,6BAA6B,WAAW;AAAE;AAAA;AAAA,wBAAqB;AAAA;AAAA,oBAAa;AAAA,oBAC5E,mBAAmB,WAAW;AAAE;AAAA;AAAA,wBAAqB;AAAA;AAAA,oBAAiB;AAAA,oBACtE,sBAAsB,WAAW;AAAE;AAAA;AAAA,wBAAqB;AAAA;AAAA,oBAAoB;AAAA,oBAC5E,mBAAmB,WAAW;AAAE;AAAA;AAAA,wBAAqB;AAAA;AAAA,oBAAiB;AAAA,oBACtE,WAAW,WAAW;AAAE;AAAA;AAAA,wBAAqB;AAAA;AAAA,oBAAS;AAAA,oBACtD,eAAe,WAAW;AAAE;AAAA;AAAA,wBAAqB;AAAA;AAAA,oBAAa;AAAA,oBAC9D,sBAAsB,WAAW;AAAE;AAAA;AAAA,wBAAqB;AAAA;AAAA,oBAAoB;AAAA,kBAC9E,CAAC;AAED;AACA,2BAAS,QAAQ,KAAK;AACpB;AAEA,2BAAO,UAAU,cAAc,OAAO,UAAU,YAAY,OAAO,OAAO,WAAW,SAAUQ,MAAK;AAClG,6BAAO,OAAOA;AAAA,oBAChB,IAAI,SAAUA,MAAK;AACjB,6BAAOA,QAAO,cAAc,OAAO,UAAUA,KAAI,gBAAgB,UAAUA,SAAQ,OAAO,YAAY,WAAW,OAAOA;AAAA,oBAC1H,GAAG,QAAQ,GAAG;AAAA,kBAChB;AACA;AAEA,2BAAS,aAAa,OAAO,MAAM;AACjC,wBAAI,QAAQ,KAAK,MAAM,YAAY,UAAU;AAAM,6BAAO;AAC1D,wBAAI,OAAO,MAAM,OAAO,WAAW;AACnC,wBAAI,SAAS,QAAW;AACtB,0BAAI,MAAM,KAAK,KAAK,OAAO,QAAQ,SAAS;AAC5C,0BAAI,QAAQ,GAAG,MAAM;AAAU,+BAAO;AACtC,4BAAM,IAAI,UAAU,8CAA8C;AAAA,oBACpE;AACA,4BAAQ,SAAS,WAAW,SAAS,QAAQ,KAAK;AAAA,kBACpD;AACA;AAGA,2BAAS,eAAe,KAAK;AAC3B,wBAAI,MAAM,aAAa,KAAK,QAAQ;AACpC,2BAAO,QAAQ,GAAG,MAAM,WAAW,MAAM,OAAO,GAAG;AAAA,kBACrD;AACA;AAEA,2BAAS,gBAAgB,KAAK,KAAK,OAAO;AACxC,0BAAM,eAAe,GAAG;AACxB,wBAAI,OAAO,KAAK;AACd,6BAAO,eAAe,KAAK,KAAK;AAAA,wBAC9B;AAAA,wBACA,YAAY;AAAA,wBACZ,cAAc;AAAA,wBACd,UAAU;AAAA,sBACZ,CAAC;AAAA,oBACH,OAAO;AACL,0BAAI,GAAG,IAAI;AAAA,oBACb;AACA,2BAAO;AAAA,kBACT;AACA;AAEA,2BAAS,QAAQT,SAAQ,gBAAgB;AACvC,wBAAIM,QAAO,OAAO,KAAKN,OAAM;AAC7B,wBAAI,OAAO,uBAAuB;AAChC,0BAAI,UAAU,OAAO,sBAAsBA,OAAM;AACjD,yCAAmB,UAAU,QAAQ,OAAO,SAAU,KAAK;AACzD,+BAAO,OAAO,yBAAyBA,SAAQ,GAAG,EAAE;AAAA,sBACtD,CAAC,IAAIM,MAAK,KAAK,MAAMA,OAAM,OAAO;AAAA,oBACpC;AACA,2BAAOA;AAAA,kBACT;AACA,2BAAS,eAAe,QAAQ;AAC9B,6BAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;AACzC,0BAAI,SAAS,QAAQ,UAAU,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC;AACpD,0BAAI,IAAI,QAAQ,OAAO,MAAM,GAAG,IAAE,EAAE,QAAQ,SAAU,KAAK;AACzD,wCAAgB,QAAQ,KAAK,OAAO,GAAG,CAAC;AAAA,sBAC1C,CAAC,IAAI,OAAO,4BAA4B,OAAO,iBAAiB,QAAQ,OAAO,0BAA0B,MAAM,CAAC,IAAI,QAAQ,OAAO,MAAM,CAAC,EAAE,QAAQ,SAAU,KAAK;AACjK,+BAAO,eAAe,QAAQ,KAAK,OAAO,yBAAyB,QAAQ,GAAG,CAAC;AAAA,sBACjF,CAAC;AAAA,oBACH;AACA,2BAAO;AAAA,kBACT;AACA;AAUA,2BAAS,uBAAuBwB,OAAM;AACpC,2BAAO,2BAA2BA,QAAO,8CAA8CA,QAAO;AAAA,kBAChG;AAGA,sBAAI,eAAgB,WAAY;AAC9B,2BAAO,OAAO,WAAW,cAAc,OAAO,cAAc;AAAA,kBAC9D,EAAG;AAQH,sBAAI,eAAe,SAASC,gBAAe;AACzC,2BAAO,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,EAAE,KAAK,GAAG;AAAA,kBACnE;AAEA,sBAAI,cAAc;AAAA,oBAChB,MAAM,iBAAiB,aAAa;AAAA,oBACpC,SAAS,oBAAoB,aAAa;AAAA,oBAC1C,sBAAsB,SAAS,uBAAuB;AACpD,6BAAO,iCAAiC,aAAa;AAAA,oBACvD;AAAA,kBACF;AAMA,2BAAS,cAAc,KAAK;AAC1B,wBAAI,OAAO,QAAQ,YAAY,QAAQ;AAAM,6BAAO;AACpD,wBAAI,QAAQ;AAEZ,2BAAO,OAAO,eAAe,KAAK,MAAM,MAAM;AAC5C,8BAAQ,OAAO,eAAe,KAAK;AAAA,oBACrC;AAEA,2BAAO,OAAO,eAAe,GAAG,MAAM;AAAA,kBACxC;AAGA,2BAAS,WAAW,KAAK;AACvB,wBAAI,QAAQ;AAAQ,6BAAO;AAC3B,wBAAI,QAAQ;AAAM,6BAAO;AACzB,wBAAI,OAAO,OAAO;AAElB,4BAAQ,MAAM;AAAA,sBACZ,KAAK;AAAA,sBACL,KAAK;AAAA,sBACL,KAAK;AAAA,sBACL,KAAK;AAAA,sBACL,KAAK,YACH;AACE,+BAAO;AAAA,sBACT;AAAA,oBACJ;AAEA,wBAAI,MAAM,QAAQ,GAAG;AAAG,6BAAO;AAC/B,wBAAI,OAAO,GAAG;AAAG,6BAAO;AACxB,wBAAIC,SAAQ,GAAG;AAAG,6BAAO;AACzB,wBAAI,kBAAkB,SAAS,GAAG;AAElC,4BAAQ,iBAAiB;AAAA,sBACvB,KAAK;AAAA,sBACL,KAAK;AAAA,sBACL,KAAK;AAAA,sBACL,KAAK;AAAA,sBACL,KAAK;AAAA,sBACL,KAAK;AACH,+BAAO;AAAA,oBACX;AAGA,2BAAO,KAAK,MAAM,GAAG,EAAE,EAAE,YAAY,EAAE,QAAQ,OAAO,EAAE;AAAA,kBAC1D;AAEA,2BAAS,SAAS,KAAK;AACrB,2BAAO,OAAO,IAAI,gBAAgB,aAAa,IAAI,YAAY,OAAO;AAAA,kBACxE;AAEA,2BAASA,SAAQ,KAAK;AACpB,2BAAO,eAAe,SAAS,OAAO,IAAI,YAAY,YAAY,IAAI,eAAe,OAAO,IAAI,YAAY,oBAAoB;AAAA,kBAClI;AAEA,2BAAS,OAAO,KAAK;AACnB,wBAAI,eAAe;AAAM,6BAAO;AAChC,2BAAO,OAAO,IAAI,iBAAiB,cAAc,OAAO,IAAI,YAAY,cAAc,OAAO,IAAI,YAAY;AAAA,kBAC/G;AAEA,2BAAS,OAAO,KAAK;AACnB,wBAAI,YAAY,OAAO;AAEvB,wBAAI,OAAO;AAAA,oBAAC;AAEZ,2BAAO;AAAA,kBACT;AA4BA,2BAAS,YAAY,SAAS,gBAAgB,UAAU;AACtD,wBAAI;AAEJ,wBAAI,OAAO,mBAAmB,cAAc,OAAO,aAAa,cAAc,OAAO,aAAa,cAAc,OAAO,UAAU,CAAC,MAAM,YAAY;AAClJ,4BAAM,IAAI,MAAO,OAAO,uBAAuB,CAAC,IAAI,CAAC;AAAA,oBACvD;AAEA,wBAAI,OAAO,mBAAmB,cAAc,OAAO,aAAa,aAAa;AAC3E,iCAAW;AACX,uCAAiB;AAAA,oBACnB;AAEA,wBAAI,OAAO,aAAa,aAAa;AACnC,0BAAI,OAAO,aAAa,YAAY;AAClC,8BAAM,IAAI,MAAO,OAAO,uBAAuB,CAAC,IAAI,CAAC;AAAA,sBACvD;AAEA,6BAAO,SAAS,WAAW,EAAE,SAAS,cAAc;AAAA,oBACtD;AAEA,wBAAI,OAAO,YAAY,YAAY;AACjC,4BAAM,IAAI,MAAO,OAAO,uBAAuB,CAAC,IAAI,CAAC;AAAA,oBACvD;AAEA,wBAAI,iBAAiB;AACrB,wBAAI,eAAe;AACnB,wBAAI,mBAAmB,CAAC;AACxB,wBAAI,gBAAgB;AACpB,wBAAI,gBAAgB;AASpB,6BAAS,+BAA+B;AACtC,0BAAI,kBAAkB,kBAAkB;AACtC,wCAAgB,iBAAiB,MAAM;AAAA,sBACzC;AAAA,oBACF;AAQA,6BAAS,WAAW;AAClB,0BAAI,eAAe;AACjB,8BAAM,IAAI,MAAO,OAAO,uBAAuB,CAAC,IAAI,CAAC;AAAA,sBACvD;AAEA,6BAAO;AAAA,oBACT;AA0BA,6BAAS,UAAU,UAAU;AAC3B,0BAAI,OAAO,aAAa,YAAY;AAClC,8BAAM,IAAI,MAAO,OAAO,uBAAuB,CAAC,IAAI,CAAC;AAAA,sBACvD;AAEA,0BAAI,eAAe;AACjB,8BAAM,IAAI,MAAO,OAAO,uBAAuB,CAAC,IAAI,CAAC;AAAA,sBACvD;AAEA,0BAAI,eAAe;AACnB,mDAA6B;AAC7B,oCAAc,KAAK,QAAQ;AAC3B,6BAAO,SAAS,cAAc;AAC5B,4BAAI,CAAC,cAAc;AACjB;AAAA,wBACF;AAEA,4BAAI,eAAe;AACjB,gCAAM,IAAI,MAAO,OAAO,uBAAuB,CAAC,IAAI,CAAC;AAAA,wBACvD;AAEA,uCAAe;AACf,qDAA6B;AAC7B,4BAAI3D,SAAQ,cAAc,QAAQ,QAAQ;AAC1C,sCAAc,OAAOA,QAAO,CAAC;AAC7B,2CAAmB;AAAA,sBACrB;AAAA,oBACF;AA4BA,6BAAS4D,UAAS,QAAQ;AACxB,0BAAI,CAAC,cAAc,MAAM,GAAG;AAC1B,8BAAM,IAAI,MAAO,OAAO,uBAAuB,CAAC,IAAI,CAAC;AAAA,sBACvD;AAEA,0BAAI,OAAO,OAAO,SAAS,aAAa;AACtC,8BAAM,IAAI,MAAO,OAAO,uBAAuB,CAAC,IAAI,CAAC;AAAA,sBACvD;AAEA,0BAAI,eAAe;AACjB,8BAAM,IAAI,MAAO,OAAO,uBAAuB,CAAC,IAAI,CAAC;AAAA,sBACvD;AAEA,0BAAI;AACF,wCAAgB;AAChB,uCAAe,eAAe,cAAc,MAAM;AAAA,sBACpD,UAAE;AACA,wCAAgB;AAAA,sBAClB;AAEA,0BAAI,YAAY,mBAAmB;AAEnC,+BAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;AACzC,4BAAI,WAAW,UAAU,CAAC;AAC1B,iCAAS;AAAA,sBACX;AAEA,6BAAO;AAAA,oBACT;AAaA,6BAAS,eAAe,aAAa;AACnC,0BAAI,OAAO,gBAAgB,YAAY;AACrC,8BAAM,IAAI,MAAO,OAAO,uBAAuB,EAAE,IAAI,CAAC;AAAA,sBACxD;AAEA,uCAAiB;AAKjB,sBAAAA,UAAS;AAAA,wBACP,MAAM,YAAY;AAAA,sBACpB,CAAC;AAAA,oBACH;AASA,6BAAS,aAAa;AACpB,0BAAI;AAEJ,0BAAI,iBAAiB;AACrB,6BAAO,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBASZ,WAAW,SAASC,WAAU,UAAU;AACtC,8BAAI,OAAO,aAAa,YAAY,aAAa,MAAM;AACrD,kCAAM,IAAI,MAAO,OAAO,uBAAuB,EAAE,IAAI,CAAC;AAAA,0BACxD;AAEA,mCAAS,eAAe;AACtB,gCAAI,SAAS,MAAM;AACjB,uCAAS,KAAK,SAAS,CAAC;AAAA,4BAC1B;AAAA,0BACF;AAEA,uCAAa;AACb,8BAAI,cAAc,eAAe,YAAY;AAC7C,iCAAO;AAAA,4BACL;AAAA,0BACF;AAAA,wBACF;AAAA,sBACF,GAAG,KAAK,YAAY,IAAI,WAAY;AAClC,+BAAO;AAAA,sBACT,GAAG;AAAA,oBACL;AAKA,oBAAAD,UAAS;AAAA,sBACP,MAAM,YAAY;AAAA,oBACpB,CAAC;AACD,2BAAO,QAAQ;AAAA,sBACb,UAAUA;AAAA,sBACV;AAAA,sBACA;AAAA,sBACA;AAAA,oBACF,GAAG,MAAM,YAAY,IAAI,YAAY;AAAA,kBACvC;AAgCA,sBAAI,qBAAqB;AAQzB,2BAAS,QAAQ,SAAS;AAExB,wBAAI,OAAO,YAAY,eAAe,OAAO,QAAQ,UAAU,YAAY;AACzE,8BAAQ,MAAM,OAAO;AAAA,oBACvB;AAIA,wBAAI;AAIF,4BAAM,IAAI,MAAM,OAAO;AAAA,oBACzB,SAASzC,IAAG;AAAA,oBAAC;AAAA,kBAEf;AAEA,2BAAS,sCAAsC,YAAY,UAAU,QAAQ,oBAAoB;AAC/F,wBAAI,cAAc,OAAO,KAAK,QAAQ;AACtC,wBAAI,eAAe,UAAU,OAAO,SAAS,YAAY,OAAO,kDAAkD;AAElH,wBAAI,YAAY,WAAW,GAAG;AAC5B,6BAAO;AAAA,oBACT;AAEA,wBAAI,CAAC,cAAc,UAAU,GAAG;AAC9B,6BAAO,SAAS,eAAe,8BAA+B,OAAO,UAAU,IAAI,8DAA+D,YAAa,YAAY,KAAK,MAAM,IAAI;AAAA,oBAC5L;AAEA,wBAAI,iBAAiB,OAAO,KAAK,UAAU,EAAE,OAAO,SAAU,KAAK;AACjE,6BAAO,CAAC,SAAS,eAAe,GAAG,KAAK,CAAC,mBAAmB,GAAG;AAAA,oBACjE,CAAC;AACD,mCAAe,QAAQ,SAAU,KAAK;AACpC,yCAAmB,GAAG,IAAI;AAAA,oBAC5B,CAAC;AACD,wBAAI,UAAU,OAAO,SAAS,YAAY;AAAS;AAEnD,wBAAI,eAAe,SAAS,GAAG;AAC7B,6BAAO,iBAAiB,eAAe,SAAS,IAAI,SAAS,SAAS,OAAO,MAAO,eAAe,KAAK,MAAM,IAAI,gBAAiB,eAAe,QAAQ,8DAA8D,MAAO,YAAY,KAAK,MAAM,IAAI;AAAA,oBAC5P;AAAA,kBACF;AAEA,2BAAS,mBAAmB,UAAU;AACpC,2BAAO,KAAK,QAAQ,EAAE,QAAQ,SAAU,KAAK;AAC3C,0BAAI,UAAU,SAAS,GAAG;AAC1B,0BAAI,eAAe,QAAQ,QAAW;AAAA,wBACpC,MAAM,YAAY;AAAA,sBACpB,CAAC;AAED,0BAAI,OAAO,iBAAiB,aAAa;AACvC,8BAAM,IAAI,MAAO,OAAO,uBAAuB,EAAE,IAAI,CAAC;AAAA,sBACxD;AAEA,0BAAI,OAAO,QAAQ,QAAW;AAAA,wBAC5B,MAAM,YAAY,qBAAqB;AAAA,sBACzC,CAAC,MAAM,aAAa;AAClB,8BAAM,IAAI,MAAO,OAAO,uBAAuB,EAAE,IAAI,CAAC;AAAA,sBACxD;AAAA,oBACF,CAAC;AAAA,kBACH;AAmBA,2BAAS,gBAAgB,UAAU;AACjC,wBAAI,cAAc,OAAO,KAAK,QAAQ;AACtC,wBAAI,gBAAgB,CAAC;AAErB,6BAAS,IAAI,GAAG,IAAI,YAAY,QAAQ,KAAK;AAC3C,0BAAI,MAAM,YAAY,CAAC;AAEvB,0BAAI,OAAO;AAAA,sBAAC;AAEZ,0BAAI,OAAO,SAAS,GAAG,MAAM,YAAY;AACvC,sCAAc,GAAG,IAAI,SAAS,GAAG;AAAA,sBACnC;AAAA,oBACF;AAEA,wBAAI,mBAAmB,OAAO,KAAK,aAAa;AAGhD,wBAAI;AAEJ,wBAAI,OAAO;AAAA,oBAAC;AAEZ,wBAAI;AAEJ,wBAAI;AACF,yCAAmB,aAAa;AAAA,oBAClC,SAASA,IAAG;AACV,4CAAsBA;AAAA,oBACxB;AAEA,2BAAO,SAAS,YAAY,OAAO,QAAQ;AACzC,0BAAI,UAAU,QAAQ;AACpB,gCAAQ,CAAC;AAAA,sBACX;AAEA,0BAAI,qBAAqB;AACvB,8BAAM;AAAA,sBACR;AAEA,0BAAI,OAAO;AAAE,4BAAI;AAAA,sBAAgB;AAEjC,0BAAI,aAAa;AACjB,0BAAI,YAAY,CAAC;AAEjB,+BAAS,KAAK,GAAG,KAAK,iBAAiB,QAAQ,MAAM;AACnD,4BAAI,OAAO,iBAAiB,EAAE;AAC9B,4BAAI,UAAU,cAAc,IAAI;AAChC,4BAAI,sBAAsB,MAAM,IAAI;AACpC,4BAAI,kBAAkB,QAAQ,qBAAqB,MAAM;AAEzD,4BAAI,OAAO,oBAAoB,aAAa;AAC1C,8BAAI,aAAa,UAAU,OAAO;AAClC,gCAAM,IAAI,MAAO,OAAO,uBAAuB,EAAE,IAAI,CAAC;AAAA,wBACxD;AAEA,kCAAU,IAAI,IAAI;AAClB,qCAAa,cAAc,oBAAoB;AAAA,sBACjD;AAEA,mCAAa,cAAc,iBAAiB,WAAW,OAAO,KAAK,KAAK,EAAE;AAC1E,6BAAO,aAAa,YAAY;AAAA,oBAClC;AAAA,kBACF;AAEA,2BAAS,kBAAkB,eAAeyC,WAAU;AAClD,2BAAO,WAAY;AACjB,6BAAOA,UAAS,cAAc,MAAM,MAAM,SAAS,CAAC;AAAA,oBACtD;AAAA,kBACF;AAwBA,2BAAS,mBAAmB,gBAAgBA,WAAU;AACpD,wBAAI,OAAO,mBAAmB,YAAY;AACxC,6BAAO,kBAAkB,gBAAgBA,SAAQ;AAAA,oBACnD;AAEA,wBAAI,OAAO,mBAAmB,YAAY,mBAAmB,MAAM;AACjE,4BAAM,IAAI,MAAO,OAAO,uBAAuB,EAAE,IAAI,CAAC;AAAA,oBACxD;AAEA,wBAAI,sBAAsB,CAAC;AAE3B,6BAAS,OAAO,gBAAgB;AAC9B,0BAAI,gBAAgB,eAAe,GAAG;AAEtC,0BAAI,OAAO,kBAAkB,YAAY;AACvC,4CAAoB,GAAG,IAAI,kBAAkB,eAAeA,SAAQ;AAAA,sBACtE;AAAA,oBACF;AAEA,2BAAO;AAAA,kBACT;AAYA,2BAAS,UAAU;AACjB,6BAAS,OAAO,UAAU,QAAQ,QAAQ,IAAI,MAAM,IAAI,GAAG,OAAO,GAAG,OAAO,MAAM,QAAQ;AACxF,4BAAM,IAAI,IAAI,UAAU,IAAI;AAAA,oBAC9B;AAEA,wBAAI,MAAM,WAAW,GAAG;AACtB,6BAAO,SAAU,KAAK;AACpB,+BAAO;AAAA,sBACT;AAAA,oBACF;AAEA,wBAAI,MAAM,WAAW,GAAG;AACtB,6BAAO,MAAM,CAAC;AAAA,oBAChB;AAEA,2BAAO,MAAM,OAAO,SAAU,GAAGpD,IAAG;AAClC,6BAAO,WAAY;AACjB,+BAAO,EAAEA,GAAE,MAAM,QAAQ,SAAS,CAAC;AAAA,sBACrC;AAAA,oBACF,CAAC;AAAA,kBACH;AAmBA,2BAAS,kBAAkB;AACzB,6BAAS,OAAO,UAAU,QAAQ,cAAc,IAAI,MAAM,IAAI,GAAG,OAAO,GAAG,OAAO,MAAM,QAAQ;AAC9F,kCAAY,IAAI,IAAI,UAAU,IAAI;AAAA,oBACpC;AAEA,2BAAO,SAAUsD,cAAa;AAC5B,6BAAO,WAAY;AACjB,4BAAI,QAAQA,aAAY,MAAM,QAAQ,SAAS;AAE/C,4BAAI,YAAY,SAASF,YAAW;AAClC,gCAAM,IAAI,MAAO,OAAO,uBAAuB,EAAE,IAAI,CAAC;AAAA,wBACxD;AAEA,4BAAI,gBAAgB;AAAA,0BAClB,UAAU,MAAM;AAAA,0BAChB,UAAU,SAASA,YAAW;AAC5B,mCAAO,UAAU,MAAM,QAAQ,SAAS;AAAA,0BAC1C;AAAA,wBACF;AACA,4BAAI,QAAQ,YAAY,IAAI,SAAU,YAAY;AAChD,iCAAO,WAAW,aAAa;AAAA,wBACjC,CAAC;AACD,oCAAY,QAAQ,MAAM,QAAQ,KAAK,EAAE,MAAM,QAAQ;AACvD,+BAAO,eAAe,eAAe,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG;AAAA,0BACnD,UAAU;AAAA,wBACZ,CAAC;AAAA,sBACH;AAAA,oBACF;AAAA,kBACF;AAOA,2BAAS,YAAY;AAAA,kBAAC;AAEtB,sBAAI,OAAO;AAAA,kBAAC;AAAA,gBAKN;AAAA;AAAA;AAAA,YAEI;AAGA,gBAAI,2BAA2B,CAAC;AAGhC,qBAAS,oBAAoB,UAAU;AAEtC,kBAAI,eAAe,yBAAyB,QAAQ;AACpD,kBAAI,iBAAiB,QAAW;AAC/B,uBAAO,aAAa;AAAA,cACrB;AAEA,kBAAInC,UAAS,yBAAyB,QAAQ,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAGjD,SAAS,CAAC;AAAA;AAAA,cACX;AAGA,kCAAoB,QAAQ,EAAE,KAAKA,QAAO,SAASA,SAAQA,QAAO,SAAS,mBAAmB;AAG9F,qBAAOA,QAAO;AAAA,YACf;AAIA,aAAC,WAAW;AAEX,kCAAoB,IAAI,SAASA,SAAQ;AACxC,oBAAI,SAASA,WAAUA,QAAO;AAAA;AAAA,kBAC7B,WAAW;AAAE,2BAAOA,QAAO,SAAS;AAAA,kBAAG;AAAA;AAAA;AAAA,kBACvC,WAAW;AAAE,2BAAOA;AAAA,kBAAQ;AAAA;AAC7B,oCAAoB,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;AAC3C,uBAAO;AAAA,cACR;AAAA,YACD,EAAE;AAGF,aAAC,WAAW;AAEX,kCAAoB,IAAI,SAAS3C,UAASiF,aAAY;AACrD,yBAAQ,OAAOA,aAAY;AAC1B,sBAAG,oBAAoB,EAAEA,aAAY,GAAG,KAAK,CAAC,oBAAoB,EAAEjF,UAAS,GAAG,GAAG;AAClF,2BAAO,eAAeA,UAAS,KAAK,EAAE,YAAY,MAAM,KAAKiF,YAAW,GAAG,EAAE,CAAC;AAAA,kBAC/E;AAAA,gBACD;AAAA,cACD;AAAA,YACD,EAAE;AAGF,aAAC,WAAW;AACX,kCAAoB,IAAI,SAAS,KAAK,MAAM;AAAE,uBAAO,OAAO,UAAU,eAAe,KAAK,KAAK,IAAI;AAAA,cAAG;AAAA,YACvG,EAAE;AAGF,aAAC,WAAW;AAEX,kCAAoB,IAAI,SAASjF,UAAS;AACzC,oBAAG,OAAO,WAAW,eAAe,OAAO,aAAa;AACvD,yBAAO,eAAeA,UAAS,OAAO,aAAa,EAAE,OAAO,SAAS,CAAC;AAAA,gBACvE;AACA,uBAAO,eAAeA,UAAS,cAAc,EAAE,OAAO,KAAK,CAAC;AAAA,cAC7D;AAAA,YACD,EAAE;AAGZ,gBAAI,sBAAsB,CAAC;AAE3B,aAAC,WAAW;AACS,kBAAI,gDAAgD,oBAAoB,GAAG;AAC3E,kBAAI,wDAAqE,oCAAoB,EAAE,6CAA6C;AAC5I,kBAAI,mDAAmD,oBAAoB,GAAG;AAC9E,kBAAI,2DAAwE,oCAAoB,EAAE,gDAAgD;AAClJ,kBAAI,kDAAkD,oBAAoB,GAAG;AAC7E,kBAAI,iDAAiD,oBAAoB,GAAG;AAC5E,kBAAI,kDAAkD,oBAAoB,GAAG;AAQrE,kCAAoB,SAAS,IAAM,sDAAsD;AAAA,YAEtH,EAAE;AACF,kCAAsB,oBAAoB,SAAS;AACzC,mBAAO;AAAA,UACR,EAAG;AAAA;AAAA,MAEZ,CAAC;AAAA;AAAA;;;AC5wND,MACA,gBAKO;AANP;AAAA;AAAA;AAAA;AACA,uBAAoB;AACpB;AACA;AACA,MAAAkF;AACA,MAAAC;AACA,MAAO,kCAAP,cAA6B,WAAW;AAAA,QAAxC;AAAA;AAkDI,qDAAsB,CAAO,YAAY;AACrC,kBAAM,iBAAiB,SAAS,SAAS,EAAE;AAC3C,gBAAI,mBAAmB,IAAI;AACvB,yCAAkB,aAAa,EAAE,MAAM,6CAA6C;AAAA,YACxF;AAAA,UACJ;AACA,oDAAqB,CAAOC,OAAM;AAC9B,kBAAM,cAAcA,GAAE,cAAc,QAAQ;AAC5C,kBAAM,SAASA,GAAE;AACjB,mBAAO,WAAW;AAClB,gBAAI;AACA,oBAAM,WAAW,MAAM,2BAAkB,qBAAqB;AAC9D,kBAAI,YAAY,MAAM;AAAE,uBAAO,UAAU,CAAC,OAAO;AAAQ;AAAA,cAAO;AAChE,qBAAO,SAAS,IAAI,gBAAgB,KAAK,mBAAmB;AAC5D,oBAAM,SAAS,MAAM,SAAS,UAAU;AACxC,oBAAM,iBAAiB,KAAK,kBAAkB;AAC9C,oBAAM,UAAU,MAAM,SAAS,WAAW;AAC1C,kBAAI,QAAQ,YAAY,OAAO,EAAE,GAAG;AAChC,2CAAkB,aAAa,EAAE,MAAM,6CAA6C;AACpF,uBAAO,SAAS,GAAG,gBAAgB,KAAK,mBAAmB;AAC3D,uBAAO,UAAU,CAAC,OAAO;AAAA,cAC7B,OAAO;AACH,oBAAI,OAAO,SAAS;AAChB,sBAAI,mBAAmB,MAAM,eAAe,KAAK,MAAM,OAAO,SAAS;AACnE,yBAAK,MAAM,MAAM,iDAAiD;AAClE,2BAAO,SAAS,QAAQ,EAAE,QAAQ,sBAAsB,CAAC;AACzD,2BAAO,UAAU,CAAC,OAAO;AACzB;AAAA,kBACJ;AAEA,wBAAM,WAAW,MAAM;AAAA,oBAAK,GAAG,WAAW;AAAA,oBACtC,EAAE,MAAM,KAAK,UAAU,EAAE,MAAM,EAAE,SAAS,OAAO,QAAQ,EAAE,CAAC,EAAE;AAAA,kBAClE;AACA,sBAAI,SAAS,IAAI;AACb,0BAAM,UAAU,MAAM,SAAS;AAC/B,wBAAI,QAAQ,SAAS,MAAM;AACvB,2BAAK,MAAM,MAAM,+CAA+C;AAChE,6BAAO,UAAU;AACjB;AAAA,oBACJ;AACA,0BAAM,YAAY,MAAM,OAAO,YAAY,QAAQ,OAAO;AAC1D,0BAAM,eAAe,MAAM,KAAK,GAAG,WAAW,WAAW,EAAE,MAAM,KAAK,UAAU,EAAE,MAAM,EAAE,WAAqB,SAAS,OAAO,QAAS,EAAE,CAAC,EAAE,CAAC;AAC9I,wBAAI,aAAa,IAAI;AACjB,4BAAM,cAAc,MAAM,aAAa;AACvC,0BAAI,YAAY,SAAS,MAAM;AAC3B,6BAAK,kBAAkB,YAAY,GAAG,OAAO,OAAO;AACpD,6BAAK,MAAM,QAAQ,2BAA2B;AAAA,sBAClD,OAAO;AAEH,6BAAK,MAAM,QAAQ,qBAAqB;AACxC,+BAAO,UAAU;AAAA,sBACrB;AAAA,oBACJ,OAAO;AACH,2BAAK,MAAM,MAAM,qBAAqB;AACtC,6BAAO,UAAU;AAAA,oBACrB;AAAA,kBAEJ;AAAA,gBACJ,OAAO;AAEH,sBAAI,mBAAmB,IAAI;AACvB,yBAAK,MAAM,MAAM,4CAA4C;AAC7D;AAAA,kBACJ;AACA,wBAAM,eAAe,MAAM,KAAK,GAAG,WAAW,WAAW,EAAE,MAAM,KAAK,UAAU,EAAE,MAAM,EAAE,SAAS,gBAAgB,QAAQ,SAAU,EAAE,CAAC,EAAE,CAAC;AAC3I,sBAAI,aAAa,IAAI;AACjB,0BAAM,cAAc,MAAM,aAAa;AACvC,wBAAI,YAAY,SAAS,OAAO;AAC5B,2BAAK,kBAAkB,YAAY;AACnC,2BAAK,MAAM,QAAQ,6BAA6B;AAAA,oBACpD,OAAO;AACH,2BAAK,MAAM,MAAM,uBAAuB;AACxC,6BAAO,UAAU;AAAA,oBACrB;AAAA,kBACJ,OAAO;AACH,yBAAK,MAAM,MAAM,uBAAuB;AACxC,2BAAO,UAAU;AAAA,kBACrB;AAAA,gBACJ;AAAA,cACJ;AAAA,YAEJ,SAASC,QAAO;AACZ,kBAAIA,OAAM,QAAQ,mBAAmB;AACjC,qBAAK,MAAM,MAAM,qCAAqC;AACtD,uBAAO,UAAU,CAAC,OAAO;AAAA,cAC7B;AAAA,YACJ,UAAE;AACE,qBAAO,WAAW;AAAA,YACtB;AAAA,UACJ;AAAA;AAAA,QAxIA,aAAa;AACT,gBAAM,aAAa;AACnB,cAAI,OAAO,YAAY,MAAM;AACzB,oBAAQ,IAAI,kDAAkD;AAC9D,iBAAK,WAAW,eAAO,mBAAmB;AAAA,UAC9C,OAAM;AACF,mBAAO,SAAS,GAAG,mBAAmB,SAAgB,UAAU;AAAA;AAC5D,sBAAM,iBAAiB,SAAS,CAAC;AACjC,wBAAQ,IAAI,oBAAoB,cAAc,EAAE;AAChD,2BAAW,WAAW,IAAI,eAAO,gBAAgB,OAAO,QAAQ;AAChE,2BAAW,SAAS,MAAM,WAAW,SAAS,UAAU,cAAc;AAAA,cAC1E;AAAA,aAAC;AAAA,UACL;AACA,eAAK,QAAQ,2BAAkB,aAAa;AAAA,QAChD;AAAA,QAGA,UAAU;AACN,eAAK,OAAO;AAAA,QAChB;AAAA,QAEA,SAAS;AACL,+BAAS,KAAK,QAAQ;AACtB,gBAAM,UAAW,KAAK,QAAQ,cAAc,4CAA4C;AACxF,eAAK,cAAc,OAAO;AAC1B,gBAAM,aAAc,KAAK,QAAQ,cAAc,iCAAiC;AAChF,eAAK,YAAY,UAAU;AAC3B,gBAAM,YAAa,KAAK,QAAQ,cAAc,iBAAiB;AAC/D,eAAK,WAAW,SAAS;AAAA,QAC7B;AAAA,QAEA,WAAW,WAAU;AACjB,gBAAM,mBAAkB,IAAI,aAAa,SAAS;AAClD,gBAAM,aAAa;AACnB,2BAAiB,GAAG,yBAAyB,WAAW;AACpD,uBAAW,QAAQ,cAAc,+BAA+B,EAAE,QAAQ;AAAA,UAC9E,CAAC;AAAA,QACL;AAAA,QAEA,YAAY,WAAU;AAClB,eAAK,UAAU,IAAI,eAAAC,QAAQ,SAAS;AAAA,QACxC;AAAA,QAEA,cAAc,WAAW;AACrB,eAAK,SAAS,2BAAkB,cAAc,SAAS;AAAA,QAC3D;AAAA,QA8FA,IAAI,WAAW;AACX,iBAAO,KAAK,QAAQ,cAAc,UAAU;AAAA,QAChD;AAAA,MAEJ;AAjJI,oBADG,iCACI,WAAU,CAAE,aAAa;AAAA;AAAA;;;ACPpC,MAIO;AAJP;AAAA;AAAA;AAAA;AACA;AACA;AAEA,MAAO,gCAAP,cAA6B,WAAW;AAAA,QACpC,UAAU;AACN,eAAK,OAAO;AAAA,QAChB;AAAA,QAEA,IAAI,WAAW;AACX,iBAAO,KAAK,QAAQ,cAAc,UAAU;AAAA,QAChD;AAAA,QAEA,SAAS;AACL,+BAAS,KAAK,QAAQ;AAEtB,gBAAM,YAAa,KAAK,QAAQ,cAAc,iBAAiB;AAC/D,eAAK,WAAW,SAAS;AAEzB,gBAAM,UAAW,KAAK,QAAQ,cAAc,8CAA8C;AAC1F,eAAK,cAAc,OAAO;AAAA,QAC9B;AAAA,QAEA,WAAW,WAAW;AAClB,cAAI,aAAa,SAAS;AAAA,QAC9B;AAAA,QAEA,cAAc,WAAW;AACrB,eAAK,SAAS,2BAAkB,cAAc,SAAS;AAAA,QAC3D;AAAA,MAEJ;AAAA;AAAA;;;AC/BA,MACM,QAsYC;AAvYP;AAAA;AAAA;AACA,MAAM,SAAS,SAASC,UAAS,SAAS;AAItC,YAAI,MAAM;AAEV,YAAK,OAAOA,aAAY,eAAeA,aAAY,MAAO;AACtD;AAAA,QACJ;AAGA,cAAMC,kBAAiB;AAAA,UACnB,QAAQ;AAAA,UACR,SAAS;AAAA,UACT,SAAS;AAAA,UACT,WAAW;AAAA,UACX,gBAAgB;AAAA,UAChB,gBAAgB;AAAA,QACpB;AAKA,cAAM,aAAa,WAAW;AAC1B,cAAK,OAAO,KAAKD,QAAO,EAAE,IAAI,QAAQ,MAAM,MAAO;AAC/C,kBAAM,OAAO,KAAKA,QAAO,EAAE,IAAI,QAAQ;AAAA,UAC3C,OAAO;AACH,kBAAM;AAAA,UACV;AAAA,QACJ;AAEA,cAAM,QAAQ,WAAW;AACrB,cAAI,UAAUA;AACd,cAAI,UAAU,OAAO,WAAW,CAAC,GAAGC,iBAAgB,OAAO;AAC3D,cAAI,MAAM,OAAO,YAAY,QAAQ;AACrC,cAAI,OAAO,IAAI,QAAQ,aAAa,qBAAqB;AACzD,cAAI,gBAAgB,oBAAoB,IAAI;AAC5C,cAAI,iBAAiB,aAAa,IAAI;AACtC,cAAI,oBAAoB;AACxB,cAAI,gBAAgB;AACpB,cAAI,gBAAgB,SAAS,cAAc,WAAW,QAAQ,CAAC;AAG/D,cAAI,QAAQ,aAAa,kBAAkB,MAAM;AAIjD,cAAI,cAAc,iBAAiB,UAAU,OAAO;AAGpD,kBAAQ;AAGR,iBAAO,KAAK,IAAI,OAAO,EAAE,IAAI,UAAU,GAAG;AAAA,QAC9C;AAEA,cAAM,UAAU,SAASC,IAAG;AACxB,cAAIC,UAAS,WAAW,QAAQ;AAChC,cAAI,UAAU,WAAW,SAAS;AAClC,gBAAM,UAAU,WAAW,SAAS;AACpC,gBAAMC,MAAQ,IAAI,cAAc;AAGhC,cAAKD,YAAW,OAAQ;AACpB,qBAAS;AACT;AAAA,UACJ;AAEA,UAAAA,UAAS,SAASA,OAAM;AACxB,oBAAU,UAAU,SAAS,cAAc,OAAO,IAAI;AACtD,gBAAM,UAAW,CAAC,WAAY,QAAQ,YAAY,QAAQ,eAAgBC;AAE1E,cAAK,YAAY,MAAO;AACpB,gBAAKA,MAAKD,WAAU,SAAU;AAC1B,kBAAK,IAAI,cAAc,aAAa,IAAI,aAAa,MAAM,OAAO;AAC9D,oBAAI,QAAQ,MAAM,OAAO;AACrB;AAAA,gBACJ;AACA,oBAAI,cAAc,aAAa,IAAI,eAAe,IAAI;AACtD,oBAAI,cAAc,aAAa,IAAI,gBAAgB,IAAI;AACvD,oBAAI,QAAQ,aAAa,0BAA0B,MAAM;AAAA,cAC7D;AAEA,kBAAK,IAAI,sBAAsB,MAAO;AAClC,+BAAe,QAAQ,IAAI,SAAS,gBAAgB,GAAG;AACvD,+BAAe,QAAQ,IAAI,SAAS,oBAAoB,GAAG;AAE3D,oBAAI,oBAAoB;AAAA,cAC5B;AAAA,YACJ,OAAO;AACH,kBAAK,IAAI,cAAc,aAAa,IAAI,aAAa,MAAM,MAAM;AAC7D,yBAAS;AACT,oBAAI,cAAc,gBAAgB,IAAI,aAAa;AACnD,oBAAI,cAAc,gBAAgB,IAAI,cAAc;AACpD,oBAAI,QAAQ,gBAAgB,wBAAwB;AAAA,cACxD;AAEA,kBAAK,IAAI,sBAAsB,OAAQ;AACnC,+BAAe,QAAQ,IAAI,SAAS,iBAAiB,GAAG;AACxD,+BAAe,QAAQ,IAAI,SAAS,oBAAoB,GAAG;AAC3D,oBAAI,oBAAoB;AAAA,cAC5B;AAAA,YACJ;AAEA,gBAAI,gBAAgBC;AAAA,UACxB,OAAO;AACH,gBAAKA,MAAKD,WAAU,SAAU;AAC1B,kBAAK,IAAI,cAAc,aAAa,IAAI,aAAa,MAAM,OAAO;AAE9D,oBAAI,QAAQ,MAAM,OAAO;AACrB;AAAA,gBACJ;AAEA,oBAAI,cAAc,aAAa,IAAI,eAAe,IAAI;AACtD,oBAAI,cAAc,aAAa,IAAI,gBAAgB,IAAI;AACvD,oBAAI,QAAQ,aAAa,0BAA0B,MAAM;AAAA,cAC7D;AAEA,kBAAK,IAAI,sBAAsB,MAAO;AAClC,+BAAe,QAAQ,IAAI,SAAS,gBAAgB,GAAG;AACvD,+BAAe,QAAQ,IAAI,SAAS,oBAAoB,GAAG;AAC3D,oBAAI,oBAAoB;AAAA,cAC5B;AAAA,YACJ,OAAO;AACH,kBAAK,IAAI,cAAc,aAAa,IAAI,aAAa,MAAM,MAAO;AAC9D,yBAAS;AACT,oBAAI,cAAc,gBAAgB,IAAI,aAAa;AACnD,oBAAI,cAAc,gBAAgB,IAAI,cAAc;AACpD,oBAAI,QAAQ,gBAAgB,wBAAwB;AAAA,cACxD;AAEA,kBAAK,IAAI,sBAAsB,OAAQ;AACnC,+BAAe,QAAQ,IAAI,SAAS,iBAAiB,GAAG;AACxD,+BAAe,QAAQ,IAAI,SAAS,oBAAoB,GAAG;AAC3D,oBAAI,oBAAoB;AAAA,cAC5B;AAAA,YACJ;AAAA,UACJ;AAEA,cAAI,SAAS;AACT,gBAAK,QAAQ,YAAY,QAAQ,eAAeC,KAAK;AACjD,kBAAI,QAAQ,aAAa,2BAA2B,MAAM;AAAA,YAC9D,OAAO;AACH,kBAAI,QAAQ,gBAAgB,yBAAyB;AAAA,YACzD;AAAA,UACJ;AAAA,QACJ;AAEA,cAAM,UAAU,SAAS,QAAQ;AAE7B,cAAIC,OAAM,WAAW,KAAK;AAC1B,UAAAA,OAAMA,OAAM,SAASA,IAAG,IAAI;AAE5B,gBAAMC,QAAO,WAAW,MAAM;AAC9B,gBAAMC,SAAQ,WAAW,OAAO;AAChC,cAAI,QAAQ,WAAW,OAAO;AAC9B,gBAAM,SAAS,WAAW,QAAQ;AAClC,gBAAM,eAAe,WAAW,cAAc;AAC9C,gBAAM,UAAU,WAAW,OAAO;AAElC,gBAAM,SAAS,iBAAiB;AAChC,cAAI,eAAe,WAAW,eAAe;AAC7C,yBAAe,eAAe,SAAS,YAAY,IAAI;AAEvD,cAAI,SAAS,eAAeF,OAAM,OAAO,YAAY,EAAE,QAAQ;AAC3D,mBAAO;AAAA,UACX;AAEA,cAAK,WAAW,QAAQ,WAAW,WAAW,MAAM,MAAO;AACvD,mBAAO,IAAI,IAAI,SAAS,qBAAqB,WAAW,gBAAgB,CAAC;AACzE,mBAAO,aAAa,IAAI,SAAS,eAAe,WAAW,gBAAgB,CAAC;AAAA,UAChF;AAEA,cAAK,YAAY,MAAO;AACpB,mBAAO,SAAS,IAAI,SAAS,OAAO;AAAA,UACxC;AAEA,cAAK,WAAW,MAAO;AACnB,mBAAO,IAAI,IAAI,SAAS,WAAW,MAAM;AACzC,mBAAO,IAAI,IAAI,SAAS,YAAY,OAAO;AAAA,UAC/C;AAEA,cAAKA,QAAO,GAAI;AACZ,mBAAO,IAAI,IAAI,SAAS,OAAO,OAAOA,IAAG,IAAI,IAAI;AAAA,UACrD;AAEA,cAAK,UAAU,MAAO;AAClB,gBAAI,MAAM,QAAQ,GAAG;AACjB,oBAAM,gBAAgB,SAAS,cAAc,MAAM,QAAQ,CAAC;AAC5D,kBAAI,eAAe;AACf,wBAAQ,OAAO,IAAI,eAAe,OAAO;AAAA,cAC7C;AAAA,YACJ;AAEA,mBAAO,IAAI,IAAI,SAAS,SAAS,KAAK;AAAA,UAC1C;AAEA,cAAKC,UAAS,MAAO;AACjB,gBAAK,OAAOA,KAAI,EAAE,YAAY,MAAM,QAAS;AACzC,oBAAM,aAAa,OAAO,OAAO,IAAI,OAAO,EAAE;AAE9C,kBAAK,cAAc,GAAI;AACnB,uBAAO,IAAI,IAAI,SAAS,QAAQ,OAAO,UAAU,IAAI,IAAI;AAAA,cAC7D;AAAA,YACJ,OAAO;AACH,qBAAO,IAAI,IAAI,SAAS,QAAQA,KAAI;AAAA,YACxC;AAAA,UACJ;AAEA,cAAKC,WAAU,MAAO;AAClB,mBAAO,IAAI,IAAI,SAAS,SAASA,MAAK;AAAA,UAC1C;AAGA,cAAK,iBAAiB,MAAO;AACzB,kBAAM,qBAAqB,SAAS,iBAAiB,YAAY;AAEjE,gBAAK,sBAAsB,mBAAmB,SAAS,GAAI;AACvD,uBAAU,IAAI,GAAG,MAAM,mBAAmB,QAAQ,IAAI,KAAK,KAAM;AAC7D,uBAAO,IAAI,mBAAmB,CAAC,GAAG,eAAe,OAAO,MAAM,IAAI,IAAI;AAAA,cAC1E;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAEA,cAAM,WAAW,WAAW;AACxB,iBAAO,IAAI,IAAI,SAAS,OAAO,EAAE;AACjC,iBAAO,IAAI,IAAI,SAAS,SAAS,EAAE;AACnC,iBAAO,IAAI,IAAI,SAAS,QAAQ,EAAE;AAClC,iBAAO,IAAI,IAAI,SAAS,SAAS,EAAE;AACnC,iBAAO,IAAI,IAAI,SAAS,WAAW,EAAE;AACrC,iBAAO,IAAI,IAAI,SAAS,YAAY,EAAE;AAEtC,gBAAM,eAAe,WAAW,cAAc;AAC9C,gBAAM,UAAU,WAAW,OAAO;AAElC,cAAK,YAAY,MAAO;AACpB,mBAAO,YAAY,IAAI,SAAS,OAAO;AAAA,UAC3C;AAGA,cAAK,iBAAiB,MAAO;AACzB,kBAAM,qBAAqB,SAAS,iBAAiB,YAAY;AAEjE,gBAAK,sBAAsB,mBAAmB,SAAS,GAAI;AACvD,uBAAU,IAAI,GAAG,MAAM,mBAAmB,QAAQ,IAAI,KAAK,KAAM;AAC7D,uBAAO,IAAI,mBAAmB,CAAC,GAAG,eAAe,EAAE;AAAA,cACvD;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAEA,cAAM,SAAS,WAAW;AAAA,QAE1B;AAEA,cAAM,mBAAmB,WAAW;AAChC,cAAI,SAAS,WAAW,OAAO,IAAI,IAAI,SAAS,QAAQ,CAAC;AAEzD,mBAAS,SAAS,WAAW,OAAO,IAAI,IAAI,SAAS,YAAY,CAAC;AAClE,mBAAS,SAAS,WAAW,OAAO,IAAI,IAAI,SAAS,eAAe,CAAC;AAErE,cAAI,OAAO,IAAIP,UAAS,YAAY,GAAG;AACnC,qBAAS,SAAS,WAAW,OAAO,IAAI,IAAI,SAAS,YAAY,CAAC;AAAA,UACtE;AAEA,cAAI,OAAO,IAAIA,UAAS,eAAe,GAAG;AACtC,qBAAS,SAAS,WAAW,OAAO,IAAI,IAAI,SAAS,eAAe,CAAC;AAAA,UACzE;AAEA,iBAAO;AAAA,QACX;AAEA,cAAM,aAAa,SAASQ,OAAM;AAC9B,cAAK,IAAI,QAAQ,aAAa,oBAAoBA,KAAI,MAAM,MAAO;AAC/D,kBAAM,OAAO,IAAI,QAAQ,aAAa,oBAAoBA,KAAI;AAC9D,gBAAI,QAAQ,OAAO,mBAAmB,IAAI;AAE1C,gBAAK,UAAU,QAAQ,OAAO,KAAK,MAAM,QAAS;AAC9C,sBAAQ;AAAA,YACZ,WAAY,UAAU,QAAQ,OAAO,KAAK,MAAM,SAAU;AACtD,sBAAQ;AAAA,YACZ;AAEA,mBAAO;AAAA,UACX,OAAO;AACH,kBAAM,aAAa,OAAO,aAAaA,KAAI;AAE3C,gBAAK,IAAI,QAAQ,UAAU,GAAI;AAC3B,qBAAO,OAAO,mBAAmB,IAAI,QAAQ,UAAU,CAAC;AAAA,YAC5D,OAAO;AACH,qBAAO;AAAA,YACX;AAAA,UACJ;AAAA,QACJ;AAEA,cAAM,WAAW,WAAW;AACxB,cAAI,cAAc,oBAAoB,UAAU,OAAO;AACvD,iBAAO,KAAK,IAAI,OAAO,EAAE,OAAO,QAAQ;AAAA,QAC5C;AAGA,mBAAW;AAOX,YAAI,SAAS,WAAW;AACpB,cAAK,IAAI,cAAc,aAAa,IAAI,aAAa,MAAM,MAAO;AAC9D,qBAAS;AACT,gBAAI,cAAc,gBAAgB,IAAI,aAAa;AACnD,gBAAI,cAAc,gBAAgB,IAAI,cAAc;AACpD,oBAAQ,IAAI;AACZ,gBAAI,cAAc,aAAa,IAAI,eAAe,IAAI;AACtD,gBAAI,cAAc,aAAa,IAAI,gBAAgB,IAAI;AAAA,UAC3D;AAAA,QACJ;AAEA,YAAI,UAAU,WAAW;AACrB,iBAAO,SAAS;AAAA,QACpB;AAGA,YAAI,KAAK,SAASA,OAAM,SAAS;AAC7B,iBAAO,eAAe,GAAG,IAAI,SAASA,OAAM,OAAO;AAAA,QACvD;AAEA,YAAI,MAAM,SAASA,OAAM,SAAS;AAC9B,iBAAO,eAAe,IAAI,IAAI,SAASA,OAAM,OAAO;AAAA,QACxD;AAEA,YAAI,MAAM,SAASA,OAAM,WAAW;AAChC,iBAAO,eAAe,IAAI,IAAI,SAASA,OAAM,SAAS;AAAA,QAC1D;AAEA,YAAI,UAAU,SAASA,OAAM,OAAO;AAChC,iBAAO,eAAe,QAAQ,IAAI,SAASA,OAAM,OAAO,KAAK,KAAK;AAAA,QACtE;AAAA,MACJ;AAGA,aAAO,cAAc,SAASR,UAAS;AACnC,YAAKA,aAAY,QAAQ,OAAO,KAAKA,QAAO,EAAE,IAAI,QAAQ,GAAI;AAC1D,iBAAO,OAAO,KAAKA,QAAO,EAAE,IAAI,QAAQ;AAAA,QAC5C,OAAO;AACH,iBAAO;AAAA,QACX;AAAA,MACJ;AAGA,aAAO,kBAAkB,SAAS,WAAW,2BAA2B;AAEpE,cAAM,WAAW,SAAS,KAAK,iBAAiB,QAAQ;AACxD,YAAI;AAEJ,YAAK,YAAY,SAAS,SAAS,GAAI;AACnC,mBAAS,IAAI,GAAG,MAAM,SAAS,QAAQ,IAAI,KAAK,KAAK;AACjD,qBAAS,IAAI,OAAO,SAAS,CAAC,CAAC;AAAA,UACnC;AAAA,QACJ;AAAA,MACJ;AAGA,aAAO,eAAe,WAAW;AAC7B,YAAI;AACJ,eAAO,iBAAiB,UAAU,WAAW;AACzC,iBAAO,SAAS,OAAO,WAAW;AAE9B,kBAAM,WAAW,SAAS,KAAK,iBAAiB,yBAAyB;AAEzE,gBAAK,YAAY,SAAS,SAAS,GAAI;AACnC,uBAAS,IAAI,GAAG,MAAM,SAAS,QAAQ,IAAI,KAAK,KAAK;AACjD,sBAAM,SAAS,OAAO,YAAY,SAAS,CAAC,CAAC;AAC7C,oBAAI,QAAQ;AACR,yBAAO,OAAO;AAAA,gBAClB;AAAA,cACJ;AAAA,YACJ;AAAA,UACJ,GAAG,GAAG;AAAA,QACV,CAAC;AAAA,MACL;AAGA,aAAO,OAAO,WAAW;AACrB,eAAO,gBAAgB;AACvB,eAAO,aAAa;AAAA,MACxB;AAEA,MAAO,iBAAQ;AAAA;AAAA;;;ACvYf,MAGO;AAHP;AAAA;AAAA;AAAA;AACA;AAEA,MAAO,8BAAP,cAA6B,WAAW;AAAA,QAEtC,UAAU;AACR,eAAK,OAAO;AAAA,QACd;AAAA,QAEA,aAAa;AACX,eAAK,QAAQ;AAAA,QACf;AAAA,QAEA,SAAS;AAEP,cAAI,KAAK,kBAAkB;AACzB,kBAAM,mBAAmB,KAAK;AAC9B,kBAAM,SAAS,IAAI,eAAO,gBAAgB;AAC1C,mBAAO,OAAO;AAAA,UAChB;AAAA,QACF;AAAA,QAEA,UAAU;AAER,cAAI,KAAK,kBAAkB;AACzB,kBAAM,mBAAmB,KAAK;AAC9B,gBAAI,SAAS,eAAO,YAAY,gBAAgB;AAChD,mBAAO,QAAQ;AAAA,UACjB;AAAA,QACF;AAAA,MAEF;AA3BE,oBADK,6BACE,WAAU,CAAC,SAAS;AAAA;AAAA;;;ACmEC,WAAS,OAAO,GAAGS,IAAG;AAClD,QAAIC,KAAI,CAAC;AACT,aAAS,KAAK;AAAG,UAAI,OAAO,UAAU,eAAe,KAAK,GAAG,CAAC,KAAKD,GAAE,QAAQ,CAAC,IAAI;AAAG,QAAAC,GAAE,CAAC,IAAI,EAAE,CAAC;AAC/F,QAAI,KAAK,QAAQ,OAAO,OAAO,0BAA0B;AAAY,eAAS,IAAI,GAAG,IAAI,OAAO,sBAAsB,CAAC,GAAG,IAAI,EAAE,QAAQ,KAAK;AAC3I,YAAID,GAAE,QAAQ,EAAE,CAAC,CAAC,IAAI,KAAK,OAAO,UAAU,qBAAqB,KAAK,GAAG,EAAE,CAAC,CAAC;AAAG,UAAAC,GAAE,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AAAA,MAClG;AACA,WAAOA;AAAA,EACT;AA9EA,MAKM,QA2EA,kBAOA,aAgOA,oBAIA,eAEAC,WAiBA,aAeA,UA6CA,UAwhBA,mBAuKA,mBAqBA;AA9lCN,MAAAC,cAAA;AAAA;AAGA;AAEA,MAAM,SAAS,CAAC,YAAY,eAAe;AACzC,cAAMC,UAAS,WAAW,UAAU;AACpC,YAAI,OAAOA,WAAU,YAAY;AAC/B,iBAAOA;AAAA,QACT,OAAO;AACL,iBAAO,IAAI,SAAS;AAAA,UAAC;AAAA,QACvB;AAAA,MACF;AAoEA,MAAM,mBAAmB;AAAA,QACvB,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,aAAa;AAAA,MACf;AAEA,MAAM,cAAN,MAAkB;AAAA,QAChB,YAAY,YAAY,UAAU,CAAC,GAAG;AACpC,cAAIC,KAAI,IAAI;AACZ,eAAK,MAAM,CAAC,cAAc,SAAS;AACjC,gBAAI,CAAC,KAAK;AAAO;AACjB,iBAAK,OAAO,eAAe,KAAK,KAAK,WAAW,UAAU,OAAO,YAAY,IAAI,kBAAkB,cAAc;AACjH,iBAAK,OAAO,IAAI,OAAO,OAAO;AAAA,cAC5B,cAAc,KAAK;AAAA,YACrB,GAAG,IAAI,CAAC;AACR,iBAAK,OAAO,SAAS;AAAA,UACvB;AACA,eAAK,OAAO,aAAW;AACrB,iBAAK,OAAO,KAAK,KAAK,KAAK,WAAW,UAAU,MAAM,OAAO,IAAI,qCAAqC,cAAc;AAAA,UACtH;AACA,eAAK,WAAW,CAAC,WAAW,UAAU,CAAC,MAAM;AAC3C,gBAAI,KAAK,eAAe;AACtB,oBAAM,EAAC,MAAY,IAAI,SAAS,eAAe,OAAO,SAAS,CAAE,OAAQ,CAAC;AAC1E,oBAAM,cAAc,KAAK,cAAc,WAAW,SAAS,MAAM,YAAY;AAC7E,mBAAK,cAAc,cAAc,WAAW;AAC5C,mBAAK,IAAI,iBAAiB,OAAO,OAAO;AAAA,gBACtC,WAAW,YAAY;AAAA,cACzB,GAAG,YAAY,CAAC;AAAA,YAClB;AAAA,UACF;AACA,eAAK,OAAO,CAAC,YAAY,OAAO,CAAC,MAAM;AACrC,kBAAMD,UAAS,KAAK,WAAW,UAAU;AACzC,gBAAI,OAAOA,WAAU,YAAY;AAC/B,qBAAOA,QAAO,KAAK,KAAK,YAAY,IAAI;AAAA,YAC1C;AAAA,UACF;AACA,eAAK,gBAAgB,CAACE,OAAM,OAAO,WAAW;AAC5C,kBAAM,EAAC,SAAkB,YAAwB,SAAkB,IAAI,SAAS;AAAA,cAC9E,SAAS;AAAA,cACT,YAAY;AAAA,cACZ,UAAU;AAAA,YACZ;AACA,gBAAI,OAAO;AACT,qBAAO,OAAO,QAAQ;AAAA,gBACpB,eAAe;AAAA,cACjB,CAAC;AAAA,YACH;AACA,kBAAM,cAAc,IAAI,YAAY,KAAK,iBAAiBA,KAAI,GAAG;AAAA,cAC/D;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACF,CAAC;AACD,mBAAO;AAAA,UACT;AACA,eAAK,mBAAmB,CAAAA,UAAQ;AAC9B,gBAAI,eAAeA;AACnB,gBAAI,KAAK,gBAAgB,MAAM;AAC7B,6BAAe,GAAG,KAAK,WAAW,UAAU,IAAIA,KAAI;AAAA,YACtD,WAAW,OAAO,KAAK,gBAAgB,UAAU;AAC/C,6BAAe,GAAG,KAAK,WAAW,IAAIA,KAAI;AAAA,YAC5C;AACA,mBAAO;AAAA,UACT;AACA,eAAK,SAAS,MAAMD,MAAK,YAAY,QAAQ,YAAY,SAAS,SAAS,QAAQ,WAAW,QAAQA,QAAO,SAASA,MAAK,WAAW,YAAY,sBAAsB,QAAQ,OAAO,SAAS,KAAK,iBAAiB;AACtN,eAAK,UAAU,KAAK,YAAY,QAAQ,YAAY,SAAS,SAAS,QAAQ,YAAY,QAAQ,OAAO,SAAS,KAAK,iBAAiB;AACxI,eAAK,aAAa;AAClB,eAAK,eAAe,WAAW,QAAQ,MAAM,WAAW,QAAQ,QAAQ;AACxE,eAAK,iBAAiB,YAAY,QAAQ,YAAY,SAAS,SAAS,QAAQ,YAAY,WAAW;AACvG,gBAAM,EAAC,eAAeE,gBAAe,YAAwB,IAAI,OAAO,OAAO,CAAC,GAAG,kBAAkB,OAAO;AAC5G,iBAAO,OAAO,MAAM;AAAA,YAClB,eAAeA;AAAA,YACf;AAAA,UACF,CAAC;AACD,eAAK,uBAAuB,WAAW,WAAW,KAAK,UAAU;AACjE,eAAK,oBAAoB,WAAW,QAAQ,KAAK,UAAU;AAC3D,eAAK,uBAAuB,WAAW,WAAW,KAAK,UAAU;AAAA,QACnE;AAAA,MACF;AAwJA,MAAM,qBAAN,cAAiC,WAAW;AAAA,MAAC;AAE7C,yBAAmB,YAAY,CAAC;AAEhC,MAAM,gBAAgB;AAEtB,MAAML,YAAW,CAACM,KAAIC,QAAO,kBAAkB;AAC7C,YAAI,YAAY;AAChB,eAAO,WAAW;AAChB,gBAAM,OAAO,MAAM,KAAK,SAAS;AACjC,gBAAM,UAAU;AAChB,gBAAM,SAAS,KAAK,IAAK,SAAO,IAAI,MAAO;AAC3C,gBAAM,WAAW,MAAM;AACrB,iBAAK,QAAS,CAAC,KAAKC,WAAU,IAAI,SAAS,OAAOA,MAAK,CAAE;AACzD,mBAAOF,IAAG,MAAM,SAAS,IAAI;AAAA,UAC/B;AACA,cAAI,WAAW;AACb,yBAAa,SAAS;AAAA,UACxB;AACA,sBAAY,WAAW,UAAUC,KAAI;AAAA,QACvC;AAAA,MACF;AAEA,MAAM,cAAc,CAAC,sBAAsB,YAAY;AACrD,cAAM,aAAa;AACnB,cAAM,cAAc,WAAW;AAC/B,oBAAY,UAAU,QAAS,UAAQ;AACrC,cAAI,OAAO,SAAS,UAAU;AAC5B,uBAAW,IAAI,IAAIP,UAAS,WAAW,IAAI,GAAG,YAAY,QAAQ,YAAY,SAAS,SAAS,QAAQ,IAAI;AAAA,UAC9G;AACA,cAAI,OAAO,SAAS,UAAU;AAC5B,kBAAM,EAAC,MAAMI,OAAM,MAAMG,MAAI,IAAI;AACjC,gBAAI,CAACH;AAAM;AACX,uBAAWA,KAAI,IAAIJ,UAAS,WAAWI,KAAI,GAAGG,UAAS,YAAY,QAAQ,YAAY,SAAS,SAAS,QAAQ,KAAK;AAAA,UACxH;AAAA,QACF,CAAE;AAAA,MACJ;AAEA,MAAM,WAAN,cAAuB,YAAY;AAAA,QACjC,YAAY,YAAY,UAAU,CAAC,GAAG;AACpC,gBAAM,YAAY,OAAO;AACzB,eAAK,UAAU,MAAM;AACnB,iBAAK,cAAc,iBAAiB,cAAc,KAAK,OAAO;AAC9D,iBAAK,cAAc,iBAAiB,cAAc,KAAK,OAAO;AAAA,UAChE;AACA,eAAK,YAAY,MAAM;AACrB,iBAAK,cAAc,oBAAoB,cAAc,KAAK,OAAO;AACjE,iBAAK,cAAc,oBAAoB,cAAc,KAAK,OAAO;AAAA,UACnE;AACA,eAAK,UAAU,WAAS;AACtB,iBAAK,KAAK,cAAc,KAAK;AAC7B,iBAAK,IAAI,cAAc;AAAA,cACrB,OAAO;AAAA,YACT,CAAC;AACD,iBAAK,SAAS,cAAc;AAAA,cAC1B,OAAO;AAAA,YACT,CAAC;AAAA,UACH;AACA,eAAK,UAAU,WAAS;AACtB,iBAAK,KAAK,cAAc,KAAK;AAC7B,iBAAK,IAAI,cAAc;AAAA,cACrB,OAAO;AAAA,YACT,CAAC;AACD,iBAAK,SAAS,cAAc;AAAA,cAC1B,OAAO;AAAA,YACT,CAAC;AAAA,UACH;AACA,eAAK,aAAa;AAClB,eAAK,kBAAkB;AACvB,eAAK,QAAQ;AAAA,QACf;AAAA,QACA,oBAAoB;AAClB,gBAAM,uBAAuB,KAAK,WAAW,WAAW,KAAK,KAAK,UAAU;AAC5E,gBAAM,aAAa,MAAM;AACvB,iBAAK,UAAU;AACf,iCAAqB;AAAA,UACvB;AACA,iBAAO,OAAO,KAAK,YAAY;AAAA,YAC7B;AAAA,UACF,CAAC;AAAA,QACH;AAAA,MACF;AAEA,MAAM,WAAW,CAAC,sBAAsB,UAAU,CAAC,MAAM;AACvD,cAAM,aAAa;AACnB,cAAM,WAAW,IAAI,SAAS,YAAY,OAAO;AACjD,eAAO,CAAE,SAAS,SAAS,SAAS,SAAU;AAAA,MAChD;AAohBA,MAAM,oBAAN,cAAgC,YAAY;AAAA,QAC1C,YAAY,YAAY,UAAU,CAAC,GAAG;AACpC,gBAAM,YAAY,OAAO;AACzB,eAAK,UAAU,MAAM;AACnB,iBAAK,SAAS,QAAQ,KAAK,eAAe;AAAA,cACxC,SAAS;AAAA,cACT,eAAe;AAAA,cACf,WAAW;AAAA,cACX,YAAY;AAAA,cACZ,mBAAmB;AAAA,cACnB,iBAAiB,CAAE,KAAK,gBAAgB,KAAK,oBAAqB;AAAA,YACpE,CAAC;AAAA,UACH;AACA,eAAK,YAAY,MAAM;AACrB,iBAAK,SAAS,WAAW;AAAA,UAC3B;AACA,eAAK,WAAW,aAAW;AACzB,uBAAW,YAAY,SAAS;AAC9B,sBAAQ,SAAS,MAAM;AAAA,gBACtB,KAAK;AACJ,sBAAI,WAAW,SAAS,OAAO,aAAa,SAAS,aAAa;AAClE,sBAAI,WAAW,SAAS;AACxB,sBAAI,SAAS,kBAAkB,KAAK,kBAAkB,SAAS,kBAAkB,KAAK,sBAAsB;AAC1G,wBAAI,aAAa,KAAK,4BAA4B,QAAQ;AAC1D,wBAAI,aAAa,KAAK,4BAA4B,QAAQ;AAC1D,wBAAI,iBAAiB,WAAW,OAAQ,YAAU,CAAC,WAAW,SAAS,MAAM,CAAE;AAC/E,wBAAI,eAAe,WAAW,OAAQ,YAAU,CAAC,WAAW,SAAS,MAAM,CAAE;AAC7E,mCAAe,QAAS,YAAU,KAAK,cAAc,KAAK,sBAAsB,MAAM,GAAG,SAAS,QAAQ,iBAAiB,CAAE;AAC7H,iCAAa,QAAS,YAAU,KAAK,YAAY,KAAK,sBAAsB,MAAM,GAAG,SAAS,QAAQ,iBAAiB,CAAE;AAAA,kBAC3H;AACA;AAAA,gBAED,KAAK;AACJ,sBAAI,SAAS,KAAK,qBAAqB,SAAS,MAAM;AACtD,sBAAI,UAAU,MAAM;AAClB;AAAA,kBACF,OAAO;AACL,wBAAI,mBAAmB,KAAK,oCAAoC,MAAM;AACtE,qCAAiB,QAAS,YAAU;AAClC,2BAAK,cAAc,KAAK,sBAAsB,MAAM,GAAG,QAAQ,aAAa;AAAA,oBAC9E,CAAE;AAAA,kBACJ;AACA;AAAA,gBAED,KAAK;AACJ,sBAAI,EAAC,YAAwB,aAA0B,IAAI;AAC3D,6BAAW,QAAS,CAAAE,UAAQ,KAAK,uBAAuBA,OAAM,KAAK,WAAW,CAAE;AAChF,+BAAa,QAAS,CAAAA,UAAQ,KAAK,uBAAuBA,OAAM,KAAK,aAAa,CAAE;AACpF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AACA,eAAK,aAAa;AAClB,eAAK,UAAU;AACf,eAAK,gBAAgB,WAAW;AAChC,eAAK,aAAa,WAAW,MAAM;AACnC,eAAK,mBAAmB,GAAG,KAAK,UAAU;AAC1C,eAAK,iBAAiB,WAAW,MAAM,OAAO;AAC9C,eAAK,uBAAuB,QAAQ,KAAK,UAAU;AACnD,eAAK,UAAU,QAAQ,WAAW,WAAW,YAAY;AACzD,eAAK,kBAAkB,KAAK,QAAQ,IAAK,YAAU,GAAG,KAAK,gBAAgB,GAAG,MAAM,EAAG;AACvF,eAAK,WAAW,IAAI,iBAAiB,KAAK,QAAQ;AAClD,eAAK,kBAAkB;AACvB,eAAK,QAAQ;AAAA,QACf;AAAA,QACA,uBAAuBA,OAAM,6BAA6B;AACxD,cAAI,SAASA;AACb,cAAI,SAAS;AACb,cAAI,mBAAmB,CAAC;AACxB,cAAI,OAAO,YAAY,WAAW,KAAK,oCAAoC,MAAM,EAAE,UAAU,GAAG;AAC9F,qBAAS,KAAK;AACd,qBAAS,KAAK,qBAAqBA,KAAI;AAAA,UACzC,OAAO;AACL,+BAAmB,KAAK,oCAAoC,MAAM;AAAA,UACpE;AACA,cAAI,UAAU,MAAM;AAClB;AAAA,UACF,WAAW,iBAAiB,UAAU,GAAG;AACvC,+BAAmB,KAAK,oCAAoC,MAAM;AAAA,UACpE;AACA,2BAAiB,QAAS,YAAU;AAClC,mBAAO,KAAK,MAAM,KAAK,sBAAsB,MAAM,GAAG,QAAQ,aAAa;AAAA,UAC7E,CAAE;AAAA,QACJ;AAAA,QACA,qBAAqBA,OAAM;AACzB,cAAI,SAASA;AACb,cAAI,mBAAmB,CAAC;AACxB,cAAI,OAAO,YAAY,SAAS;AAC9B,+BAAmB,KAAK,oCAAoC,MAAM;AAAA,UACpE;AACA,iBAAO,OAAO,eAAe,QAAQ,OAAO,cAAc,KAAK,iBAAiB,iBAAiB,UAAU,GAAG;AAC5G,qBAAS,OAAO;AAChB,gBAAI,OAAO,aAAa,SAAS;AAC/B,kBAAIC,oBAAmB,KAAK,oCAAoC,MAAM;AACtE,kBAAIA,kBAAiB,SAAS,GAAG;AAC/B,uBAAO;AAAA,cACT;AAAA,YACF;AAAA,UACF;AACA,cAAI,OAAO,YAAY,SAAS;AAC9B,mBAAO;AAAA,UACT;AACA,cAAI,OAAO,cAAc,MAAM;AAC7B,mBAAO;AAAA,UACT;AACA,cAAI,OAAO,cAAc,KAAK,eAAe;AAC3C,gBAAI,KAAK,oCAAoC,MAAM,EAAE,SAAS,GAAG;AAC/D,qBAAO;AAAA,YACT;AACA,mBAAO;AAAA,UACT;AACA,iBAAO;AAAA,QACT;AAAA,QACA,YAAYN,OAAMK,OAAM,SAAS;AAC/B,cAAI,iBAAiB,GAAGL,KAAI;AAC5B,eAAK,WAAW,cAAc,KAAK,OAAO,KAAK,YAAY,cAAc,EAAE,KAAK,KAAK,YAAYK,KAAI;AACrG,eAAK,IAAI,eAAe;AAAA,YACtB,QAAQL;AAAA,YACR,MAAMK;AAAA,YACN;AAAA,UACF,CAAC;AAAA,QACH;AAAA,QACA,cAAcL,OAAMK,OAAM,SAAS;AACjC,cAAI,iBAAiB,GAAGL,KAAI;AAC5B,eAAK,WAAW,cAAc,KAAK,OAAO,KAAK,YAAY,cAAc,EAAE,KAAK,KAAK,YAAYK,KAAI;AACrG,eAAK,IAAI,iBAAiB;AAAA,YACxB,QAAQL;AAAA,YACR,MAAMK;AAAA,YACN;AAAA,UACF,CAAC;AAAA,QACH;AAAA,QACA,cAAcL,OAAMK,OAAM,SAAS;AACjC,cAAI,iBAAiB,GAAGL,KAAI;AAC5B,eAAK,WAAW,cAAc,KAAK,OAAO,KAAK,YAAY,cAAc,EAAE,KAAK,KAAK,YAAYK,KAAI;AACrG,eAAK,IAAI,iBAAiB;AAAA,YACxB,QAAQL;AAAA,YACR,MAAMK;AAAA,YACN;AAAA,UACF,CAAC;AAAA,QACH;AAAA,QACA,oCAAoCA,OAAM;AACxC,cAAIA,MAAK,YAAY,WAAWA,MAAK,YAAY,YAAY;AAC3D,mBAAO,CAAC;AAAA,UACV;AACA,cAAI,cAAcA;AAClB,iBAAO,KAAK,4BAA4B,YAAY,aAAa,KAAK,oBAAoB,KAAK,YAAY,aAAa,KAAK,cAAc,CAAC;AAAA,QAC9I;AAAA,QACA,4BAA4B,WAAW;AACrC,sBAAY,aAAa;AACzB,cAAI,iBAAiB,KAAK,sBAAsB,SAAS,EAAE,MAAM,GAAG;AACpE,iBAAO,KAAK,QAAQ,OAAQ,CAAAE,OAAK,eAAe,QAAQA,EAAC,MAAM,EAAG;AAAA,QACpE;AAAA,QACA,sBAAsB,QAAQ;AAC5B,iBAAO,OAAO,QAAQ,IAAI,OAAO,KAAK,kBAAkB,GAAG,GAAG,EAAE;AAAA,QAClE;AAAA,QACA,oBAAoB;AAClB,gBAAM,uBAAuB,KAAK,WAAW,WAAW,KAAK,KAAK,UAAU;AAC5E,gBAAM,aAAa,MAAM;AACvB,iBAAK,UAAU;AACf,iCAAqB;AAAA,UACvB;AACA,iBAAO,OAAO,KAAK,YAAY;AAAA,YAC7B;AAAA,UACF,CAAC;AAAA,QACH;AAAA,MACF;AAEA,MAAM,oBAAoB,CAAC,sBAAsB,UAAU,CAAC,MAAM;AAChE,cAAM,aAAa;AACnB,cAAM,WAAW,IAAI,kBAAkB,YAAY,OAAO;AAC1D,eAAO,CAAE,SAAS,SAAS,SAAS,SAAU;AAAA,MAChD;AAiBA,MAAM,qBAAN,cAAiC,WAAW;AAAA,MAAC;AAE7C,yBAAmB,YAAY,CAAC;AAAA;AAAA;;;AChmChC,MAEO;AAFP;AAAA;AAAA;AAAA;AACA,MAAAC;AACA,MAAO,yCAAP,cAA6B,WAAW;AAAA,QAGpC,UAAU;AACN,4BAAkB,MAAM,EAAE,SAAS,CAAC,eAAe,EAAE,CAAC;AACtD,eAAK,aAAa;AAClB,eAAK,SAAS,IAAI,OAAO,KAAK,OAAO;AAAA,QACzC;AAAA,QAEA,yBAAyBC,UAAS;AAE9B,gBAAMC,QAAOD,SAAQ,cAAc,kBAAkB;AACrD,eAAK,cAAcC,KAAI;AAAA,QAC3B;AAAA,QAEA,2BAA2BD,UAAS;AAChC,kBAAQ,IAAI,8BAA8BA,QAAO;AAAA,QACrD;AAAA,QAEA,2BAA2BA,UAAS;AAChC,kBAAQ,IAAI,8BAA8BA,QAAO;AAAA,QACrD;AAAA,QAEA,gBAAgB,OAAO;AACnB,gBAAM,eAAe;AACrB,cAAI,WAAW,MAAM,cAAc,QAAQ,YAAY;AACvD,eAAK,OAAO,OAAO,QAAQ;AAAA,QAC/B;AAAA,QAEA,kBAAkB,OAAO;AACrB,eAAK,cAAc,MAAM,aAAa;AAAA,QAC1C;AAAA,QAEA,cAAcA,UAAS;AACnB,cAAI,KAAK,YAAY;AACjB,iBAAK,kBAAkB,KAAK,UAAU;AAAA,UAC1C;AAEA,eAAK,aAAaA;AAClB,eAAK,eAAe,KAAK,UAAU;AAAA,QACvC;AAAA,QAEA,eAAeA,UAAS;AACpB,UAAAA,SAAQ,UAAU,IAAI,cAAc;AACpC,UAAAA,SAAQ,UAAU,OAAO,eAAe;AAAA,QAC5C;AAAA,QAEA,kBAAkBA,UAAS;AACvB,UAAAA,SAAQ,UAAU,OAAO,cAAc;AACvC,UAAAA,SAAQ,UAAU,IAAI,eAAe;AAAA,QACzC;AAAA,QAEA,qBAAqB,OAAO;AACxB,gBAAM,eAAe;AACrB,gBAAM,MAAM,MAAM,cAAc,QAAQ;AACxC,gBAAM,MAAM,MAAM,cAAc,QAAQ;AACxC,kBAAQ,IAAI,wBAAwB,KAAK,GAAG;AAC5C,gBAAMC,QAAO,MAAM,cAAc,QAAQ,SAAO,GAAG,EAAE,cAAc,mBAAmB;AACtF,eAAK,cAAcA,KAAI;AACvB,eAAK,oBAAoB,OAAO;AAChC,gBAAM,MAAM,KAAK,EAAE,QAAQ,WAAW,OAAO,eAAe,CAAC;AAAA,QACjE;AAAA,MACJ;AA7DI,oBADG,wCACI,WAAU,CAAC,eAAe;AAAA;AAAA;;;;;OCHrC,SAA2CC,IAAMC,IAAAA;AAC1B,oBAAA,OAAZC,WAA0C,YAAA,OAAXC,SACxCA,OAAOD,UAAUD,GAAAA,IACQ,cAAA,OAAXG,UAAyBA,OAAOC,MAC9CD,OAAO,CAAA,GAAIH,EAAAA,IACe,YAAA,OAAZC,UACdA,QAAe,QAAID,GAAAA,IAEnBD,GAAY,QAAIC,GAAAA;MACjB,EAAEK,MAAM,OACT,MAAA;AAAA;ACTA,YAAIC,KAAsB,ECA1BA,GAAwB,CAACL,IAASM,OAAAA;AACjC,mBAAQC,MAAOD;AACXD,YAAAA,GAAoBG,EAAEF,IAAYC,EAAAA,KAAAA,CAASF,GAAoBG,EAAER,IAASO,EAAAA,KAC5EE,OAAOC,eAAeV,IAASO,IAAK,EAAEI,YAAAA,MAAkBC,KAAKN,GAAWC,EAAAA,EAAAA,CAAAA;QAE1E,GCNDF,GAAwB,CAACQ,IAAKC,OAAUL,OAAOM,UAAUC,eAAeC,KAAKJ,IAAKC,EAAAA,GCClFT,GAAyBL,CAAAA,OAAAA;AACH,yBAAA,OAAXkB,UAA0BA,OAAOC,eAC1CV,OAAOC,eAAeV,IAASkB,OAAOC,aAAa,EAAEC,OAAO,SAAA,CAAA,GAE7DX,OAAOC,eAAeV,IAAS,cAAc,EAAEoB,OAAAA,KAAO,CAAA;QAAO,EAAA,GAAAC,KAAA,CAAA;AAAA,QAAAC,GAAA,EAAAD,IAAA,EAAA,SAAA,MAAAE,GAAA,CAAA;AAAA,YAAAf,KAAA,CAAA;ACJ9D,iBAASgB,GAAcC,IAAQC,IAAUC,IAAQC,IAAIC,KAAU,CAAC,GAAA;AAGxDH,UAAAA,cAAoBI,kBAAkBJ,cAAoBK,WAC1DL,KAAWM,MAAMC,KAAKP,EAAAA,IACdM,MAAME,QAAQR,EAAAA,MACtBA,KAAW,CAACA,EAAAA,IAGXM,MAAME,QAAQP,EAAAA,MACfA,KAAS,CAACA,EAAAA;AAGd,qBAAWQ,MAAMT;AACb,uBAAWU,MAAMT;AACbQ,cAAAA,GAAGV,EAAAA,EAAQW,IAAIR,IAAI,iBAACS,SAAAA,SAAmBR,GAAAA;AAI/C,iBAAOG,MAAMjB,UAAUuB,MAAMrB,KAAKsB,WAAW,CAAA;QACjD;AAAA,QAAAjB,GAAA,EAAAd,EAAA,GAAAc,GAAA,EAAAd,IAAA,EAAA,wBAAA,MAAA,GAAA,yBAAA,MAAAgC,IAAA,oBAAA,MAAA,GAAA,WAAA,MAAA,GAAA,KAAA,MAAA,GAAA,IAAA,MAAA,GAAA,gBAAA,MAAA,EAAA,CAAA;AAUO,cAAMC,IAAKjB,GAAckB,KAAK,MAAM,kBAAA,GAU9BC,IAAMnB,GAAckB,KAAK,MAAM,qBAAA;AAOrC,iBAASE,GAAwBC,IAAAA;AACpC,gBAAMC,KAAMC,SAASC,cAAc,KAAA;AAEnC,iBADAF,GAAIG,YAAYJ,GAAKK,KAAAA,GACdJ,GAAIK;QACf;AAiBO,iBAASC,EAAmBC,IAAAA;AAG/B,gBAAMC,KAAkBA,CAACnB,IAAIoB,OAAAA;AACzB,kBAAMnC,KAAQe,GAAGqB,aAAaD,EAAAA;AAE9B,mBADApB,GAAGmB,gBAAgBC,EAAAA,GACZnC;UAAK,GAIVqC,KAAUA,CAACC,IAASC,KAAO,CAAC,MAAA;AAG9B,kBAAMC,KAAMN,GAAgBI,IAAS,MAAA,GAC/BnD,KAAM+C,GAAgBI,IAAS,MAAA,GAC/BG,KAAUD,KAAOD,GAAKC,EAAAA,IAAO,CAAC,IAAKD;AAGzCpD,YAAAA,OAAQoD,GAAKpD,EAAAA,IAAOmD;AACpB,uBAAWI,MAAS9B,MAAMC,KAAKyB,GAAQK,QAAAA,GAAW;AAC9C,oBAAMC,KAAMV,GAAgBQ,IAAO,MAAA,GAC7BG,KAAMR,GAAQK,IAAOE,KAAM,CAAC,IAAIH,EAAAA;AAElCG,cAAAA,OAGCH,GAAQG,EAAAA,MAASH,GAAQG,EAAAA,IAAO,CAAA,IAC5BE,KAAKzD,OAAO0D,KAAKF,EAAAA,EAAKG,SAASH,KAAMH,EAAAA;YAElD;AAEA,mBAAOH;UAAI;AAGf,iBAAOF,GAAQb,GAAwBS,EAAAA,CAAAA;QAC3C;AAOO,iBAASgB,EAAUC,IAAAA;AACtB,cAAIC,KAAOD,GAAIC,QAASD,GAAIE,gBAAgBF,GAAIE,aAAAA;AAChD,cAAID;AACA,mBAAOA;AAGX,cAAIpC,KAAKmC,GAAIG,OAAOC;AAEpB,eADAH,KAAO,CAACD,GAAIG,QAAQtC,EAAAA,GACbA,KAAKA,GAAGuC;AACXH,YAAAA,GAAKL,KAAK/B,EAAAA;AAId,iBADAoC,GAAKL,KAAKnB,UAAU4B,MAAAA,GACbJ;QACX;AAOO,iBAASK,EAAeC,IAAAA;AAC3B,iBAAIA,cAAeC,UACRD,KACe,YAAA,OAARA,KACPA,GAAIE,MAAM,KAAA,EAAOC,OAAO,CAACC,IAAIC,IAAIC,IAAIC,QACxCH,KAAKA,GAAGI,cAAcH,EAAAA,GACfC,KAAKC,GAAEhB,SAAS,IAAIa,GAAGK,aAAaL,KAC5ClC,QAAAA,IAGA;QACX;AAOO,iBAASwC,EAAuBpD,IAAIqD,KAASC,CAAAA,OAAKA,IAAAA;AAErD,mBAASC,GAAarE,IAAAA;AAClB,kBAAMsE,KAAO,CAAC,MAAO,MAAM,GAAA,EAAMC,OAAOvE,GAAEwE,YAAwB,IAAZxE,GAAEyE,OAAAA,CAAAA,KAAiBzE,GAAE0E,SAAS,IAAI,IAAA;AAExF,gBAAIC,KAAQ,GACRrD,KAAMR,GAAG8D;AACb9D,YAAAA,GAAGf,QAAQe,GAAGf,MAAM8E,QAAQ,WAAW,CAACT,IAAGU,OAGnCA,MAAKxD,MAAOwD,KAAIV,GAAErB,UAAUzB,MAC5BA,KAAMwD,IACCX,GAAOI,OAAOH,EAAAA,GAAIE,IAAKK,EAAAA,MAGlCA,MACOP,GAAAA,GAGXtD,GAAGiE,MAAAA,GACHjE,GAAGkE,kBAAkB1D,IAAKA,EAAAA,GAG1BtB,GAAEiF,eAAAA,GACFnE,GAAGoE,cAAc,IAAIC,MAAM,OAAA,CAAA;UAC/B;AAGA/D,YAAGN,IAAI,SAAS,MAAMM,EAAGkC,QAAQ,SAASe,IAAc,EAACe,SAAAA,MAAS,CAAA,CAAA,GAClEhE,EAAGN,IAAI,QAAQ,MAAMQ,EAAIgC,QAAQ,SAASe,EAAAA,CAAAA;QAC9C;ACnLA,cAAA,EAAM,KAACgB,GAAG,KAAEC,GAAG,OAAEC,GAAK,OAAEC,EAAAA,IAASC;AA0B1B,iBAASC,GAASC,IAAGC,IAAGxB,IAAAA;AAE3BwB,UAAAA,MAAK,KACLxB,MAAK;AAEL,gBAAMU,KAAIS,EAJVI,KAAKA,KAAI,MAAO,CAAA,GAMVE,KAAIF,KAAIb,IACRgB,KAAI1B,MAAK,IAAIwB,KACbG,KAAI3B,MAAK,IAAIyB,KAAID,KACjB3F,KAAImE,MAAK,KAAK,IAAIyB,MAAKD,KAEvBI,KAAMlB,KAAI;AAKhB,iBAAO,CACC,MALE,CAACV,IAAG2B,IAAGD,IAAGA,IAAG7F,IAAGmE,EAAAA,EAAG4B,EAAAA,GAMrB,MALE,CAAC/F,IAAGmE,IAAGA,IAAG2B,IAAGD,IAAGA,EAAAA,EAAGE,EAAAA,GAMrB,MALE,CAACF,IAAGA,IAAG7F,IAAGmE,IAAGA,IAAG2B,EAAAA,EAAGC,EAAAA,CAAAA;QAOjC;AAgDO,iBAASC,GAASN,IAAGC,IAAGxB,IAAAA;AAI3B,gBAAM8B,MAAK,KAHXN,MAAK,SACLxB,MAAK,OAEmB;AAYxB,iBAVU,MAAN8B,OAEIN,KADM,MAANM,KACI,IACGA,KAAI,MACPN,KAAIxB,MAAS,IAAJ8B,MAETN,KAAIxB,MAAK,IAAQ,IAAJ8B,MAIlB,CACHP,IACI,MAAJC,IACI,MAAJM,EAAAA;QAER;AASA,iBAASC,GAAShF,IAAGiF,IAAGC,IAAAA;AAKpB,gBAAMC,KAASjB,EAJflE,MAAK,KACLiF,MAAK,KACLC,MAAK,GAAA,GAGCE,KAASjB,EAAInE,IAAGiF,IAAGC,EAAAA,GACnBG,KAAQD,KAASD;AAEvB,cAAIX,IAAGC;AAEP,cAAc,MAAVY;AACAb,YAAAA,KAAIC,KAAI;eACL;AACHA,YAAAA,KAAIY,KAAQD;AACZ,kBAAME,OAAQF,KAASpF,MAAK,IAAMqF,KAAQ,KAAMA,IAC1CE,OAAQH,KAASH,MAAK,IAAMI,KAAQ,KAAMA,IAC1CG,OAAQJ,KAASF,MAAK,IAAMG,KAAQ,KAAMA;AAE5CrF,YAAAA,OAAMoF,KACNZ,KAAIgB,KAAKD,KACFN,OAAMG,KACbZ,KAAK,IAAI,IAAKc,KAAKE,KACZN,OAAME,OACbZ,KAAK,IAAI,IAAKe,KAAKD,KAGnBd,KAAI,IACJA,MAAK,IACEA,KAAI,MACXA,MAAK;UAEb;AAEA,iBAAO,CACC,MAAJA,IACI,MAAJC,IACI,MA3BEW,EAAAA;QA6Bd;AAUA,iBAASK,GAAUC,IAAGC,IAAGC,IAAGC,IAAAA;AAExBF,UAAAA,MAAK,KACLC,MAAK;AAOL,iBAAO,CAAA,GAAIZ,GAJ+B,OAA/B,IAAId,EAAI,IALnBwB,MAAK,QAKsB,KAF3BG,MAAK,QAE+BA,EAAAA,IACM,OAA/B,IAAI3B,EAAI,GAAGyB,MAAK,IAAIE,MAAKA,EAAAA,IACM,OAA/B,IAAI3B,EAAI,GAAG0B,MAAK,IAAIC,MAAKA,EAAAA,EAAAA,CAAAA;QAGxC;AASA,iBAASC,EAAStB,IAAGC,IAAGM,IAAAA;AACpBN,UAAAA,MAAK;AAIL,gBAAMsB,KAAM,KAFZtB,OADAM,MAAK,OACI,MAAMA,KAAI,IAAIA,OAEFA,KAAIN,MAAM,KACzBxB,KAAc,OAAT8B,KAAIN;AACf,iBAAO,CAACD,IAAGwB,MAAMD,EAAAA,IAAM,IAAIA,IAAI9C,EAAAA;QACnC;AAOA,iBAASgD,EAASC,IAAAA;AACd,iBAAOlB,GAAAA,GAAYkB,GAAIC,MAAM,OAAA,EAASC,IAAInD,CAAAA,OAAKoD,SAASpD,IAAG,EAAA,CAAA,CAAA;QAC/D;AAQO,iBAASqD,GAAYzF,IAAAA;AAGxBA,UAAAA,KAAMA,GAAIsF,MAAM,aAAA,IAxNpB,SAA0BpF,IAAAA;AAGtB,gBAA2B,YAAvBA,GAAKwF,YAAAA;AACL,qBAAO;AAGX,kBAAMC,KAAMjG,SAASC,cAAc,QAAA,EAAUiG,WAAW,IAAA;AAExD,mBADAD,GAAIE,YAAY3F,IACS,WAAlByF,GAAIE,YAAuB,OAAOF,GAAIE;UACjD,EA8MsD7F,EAAAA,IAAOA;AAGzD,gBAAM8F,KAAQ,EACVC,MAAM,sDACNC,MAAM,4EACNC,MAAM,gEACNC,MAAM,gEACNC,MAAM,2DAAA,GASJC,KAAWC,CAAAA,OAASA,GAAMd,IAAInD,CAAAA,OAAK,oBAAoBkE,KAAKlE,EAAAA,IAAKG,OAAOH,EAAAA,IAAAA,MAAKmE;AAEnF,cAAIjB;AACJkB;AAAS,uBAAWC,MAAQX;AAGxB,kBAAMR,KAAQQ,GAAMW,EAAAA,EAAMC,KAAK1G,EAAAA;AAK/B,wBAAQyG,IAAAA;kBACJ,KAAK,QAAQ;AACT,0BAAA,CAAO,EAAE5B,IAAGC,IAAGC,IAAGC,EAAAA,IAAKoB,GAASd,EAAAA;AAEhC,wBAAIT,KAAI,OAAOC,KAAI,OAAOC,KAAI,OAAOC,KAAI;AACrC,4BAAMwB;AAGV,2BAAO,EAACG,QAAQ/B,GAAUC,IAAGC,IAAGC,IAAGC,EAAAA,GAAIyB,MAAAA,GAAAA;kBAC3C;kBACA,KAAK,QAAQ;AACT,wBAAA,CAAK,EAAEtH,IAAE,EAAGiF,IAAE,EAAGC,IAAE,EAAD,EAAMtC,EAAAA,IAAKqE,GAASd,EAAAA;AAOtC,wBALAnG,KAAiB,QAAbmG,GAAM,CAAA,IAAcnG,KAAI,MAAO,MAAMA,IACzCiF,KAAiB,QAAbkB,GAAM,CAAA,IAAclB,KAAI,MAAO,MAAMA,IACzCC,KAAiB,QAAbiB,GAAM,CAAA,IAAcjB,KAAI,MAAO,MAAMA,IACzCtC,KAAiB,QAAbuD,GAAM,CAAA,IAAcvD,KAAI,MAAOA,IAE/B5C,KAAI,OAAOiF,KAAI,OAAOC,KAAI,OAAOtC,KAAI,KAAKA,KAAI;AAC9C,4BAAMyE;AAGV,2BAAO,EAACG,QAAQ,CAAA,GAAIxC,GAAShF,IAAGiF,IAAGC,EAAAA,GAAItC,EAAAA,GAAIA,GAAAA,IAAG0E,MAAAA,GAAAA;kBAClD;kBACA,KAAK,QAAQ;AACT,wBAAA,CAAK,EAAEpB,EAAAA,IAAOC;AAEK,0BAAfD,GAAItE,UAA+B,MAAfsE,GAAItE,WACxBsE,KAAMA,GAAI3D,MAAM,EAAA,EAAI6D,IAAInD,CAAAA,OAAKA,KAAIA,EAAAA,EAAGwE,KAAK,EAAA;AAG7C,0BAAMC,KAAMxB,GAAIyB,UAAU,GAAG,CAAA;AAC7B,wBAAI/E,KAAIsD,GAAIyB,UAAU,CAAA;AAKtB,2BAFA/E,KAAIA,KAAKyD,SAASzD,IAAG,EAAA,IAAM,MAAA,QAEpB,EAAC4E,QAAQ,CAAA,GAAIvB,EAASyB,EAAAA,GAAM9E,EAAAA,GAAIA,GAAAA,IAAG0E,MAAAA,GAAAA;kBAC9C;kBACA,KAAK,QAAQ;AACT,wBAAA,CAAK,EAAE9C,IAAGC,IAAGM,IAAE,EAAGnC,EAAAA,IAAKqE,GAASd,EAAAA;AAGhC,wBAFAvD,KAAiB,QAAbuD,GAAM,CAAA,IAAcvD,KAAI,MAAOA,IAE/B4B,KAAI,OAAOC,KAAI,OAAOM,KAAI,OAAOnC,KAAI,KAAKA,KAAI;AAC9C,4BAAMyE;AAGV,2BAAO,EAACG,QAAQ,CAAA,GAAI1B,EAAStB,IAAGC,IAAGM,EAAAA,GAAInC,EAAAA,GAAIA,GAAAA,IAAG0E,MAAAA,GAAAA;kBAClD;kBACA,KAAK,QAAQ;AACT,wBAAA,CAAK,EAAE9C,IAAGC,IAAGxB,IAAE,EAAGL,EAAAA,IAAKqE,GAASd,EAAAA;AAGhC,wBAFAvD,KAAiB,QAAbuD,GAAM,CAAA,IAAcvD,KAAI,MAAOA,IAE/B4B,KAAI,OAAOC,KAAI,OAAOxB,KAAI,OAAOL,KAAI,KAAKA,KAAI;AAC9C,4BAAMyE;AAGV,2BAAO,EAACG,QAAQ,CAAChD,IAAGC,IAAGxB,IAAGL,EAAAA,GAAIA,GAAAA,IAAG0E,MAAAA,GAAAA;kBACrC;gBAAA;AAIR,iBAAO,EAACE,QAAQ,MAAMF,MAAM,KAAA;QAChC;ACrTO,iBAASM,GAAUpD,KAAI,GAAGC,KAAI,GAAGxB,KAAI,GAAGL,KAAI,GAAA;AAC/C,gBAAMI,KAASA,CAAC6E,IAAUC,OAAS,CAACC,KAAAA,OACzBD,GAAAA,CAAMC,KAAYF,GAASzB,IAAInD,CAAAA,OAAKG,OAAOH,GAAE+E,QAAQD,EAAAA,CAAAA,CAAAA,IAAeF,EAAAA,GAGzEI,KAAO,EACTzD,GAAAA,IAAGC,GAAAA,IAAGxB,GAAAA,IAAGL,GAAAA,IAETsF,SAAAA;AACI,kBAAMnB,KAAO,CAACkB,GAAKzD,GAAGyD,GAAKxD,GAAGwD,GAAKhF,GAAGgF,GAAKrF,CAAAA;AAE3C,mBADAmE,GAAKoB,WAAWnF,GAAO+D,IAAMvF,CAAAA,OAAQ,QAAOA,GAAI,CAAA,CAAA,KAAOA,GAAI,CAAA,CAAA,MAAQA,GAAI,CAAA,CAAA,MAAQyG,GAAKrF,CAAAA,GAAAA,GAC7EmE;UACX,GAEAqB,SAAAA;AACI,kBAAMtB,KAAO,CAAA,GAAIhC,GAASmD,GAAKzD,GAAGyD,GAAKxD,GAAGwD,GAAKhF,CAAAA,GAAIgF,GAAKrF,CAAAA;AAExD,mBADAkE,GAAKqB,WAAWnF,GAAO8D,IAAMtF,CAAAA,OAAQ,QAAOA,GAAI,CAAA,CAAA,KAAOA,GAAI,CAAA,CAAA,MAAQA,GAAI,CAAA,CAAA,MAAQyG,GAAKrF,CAAAA,GAAAA,GAC7EkE;UACX,GAEAuB,SAAAA;AACI,kBAAMxB,KAAO,CAAA,GAAItC,GAAS0D,GAAKzD,GAAGyD,GAAKxD,GAAGwD,GAAKhF,CAAAA,GAAIgF,GAAKrF,CAAAA;AAExD,mBADAiE,GAAKsB,WAAWnF,GAAO6D,IAAMrF,CAAAA,OAAQ,QAAOA,GAAI,CAAA,CAAA,KAAOA,GAAI,CAAA,CAAA,KAAOA,GAAI,CAAA,CAAA,KAAOyG,GAAKrF,CAAAA,GAAAA,GAC3EiE;UACX,GAEAyB,SAAAA;AACI,kBAAM1B,KDsCX,SAAmBpC,IAAGC,IAAGxB,IAAAA;AAC5B,oBAAMsF,KAAMhE,GAASC,IAAGC,IAAGxB,EAAAA,GACrBjD,KAAIuI,GAAI,CAAA,IAAK,KACbtD,KAAIsD,GAAI,CAAA,IAAK,KACbrD,KAAIqD,GAAI,CAAA,IAAK,KAEb1C,KAAI3B,EAAI,IAAIlE,IAAG,IAAIiF,IAAG,IAAIC,EAAAA;AAKhC,qBAAO,CACC,OALQ,MAANW,KAAU,KAAK,IAAI7F,KAAI6F,OAAM,IAAIA,MAMnC,OALQ,MAANA,KAAU,KAAK,IAAIZ,KAAIY,OAAM,IAAIA,MAMnC,OALQ,MAANA,KAAU,KAAK,IAAIX,KAAIW,OAAM,IAAIA,MAMnC,MAAJA,EAAAA;YAER,ECvDmCoC,GAAKzD,GAAGyD,GAAKxD,GAAGwD,GAAKhF,CAAAA;AAE5C,mBADA2D,GAAKuB,WAAWnF,GAAO4D,IAAMpF,CAAAA,OAAQ,QAAOA,GAAI,CAAA,CAAA,MAAQA,GAAI,CAAA,CAAA,MAAQA,GAAI,CAAA,CAAA,MAAQA,GAAI,CAAA,CAAA,IAAA,GAC7EoF;UACX,GAEA4B,SAAAA;AACI,kBAAMtC,KDmBX,SAAkB1B,IAAGC,IAAGxB,IAAAA;AAC3B,qBAAOsB,GAASC,IAAGC,IAAGxB,EAAAA,EAAGmD,IAAInD,CAAAA,OACzBoB,EAAMpB,EAAAA,EAAGkF,SAAS,EAAA,EAAIM,SAAS,GAAG,GAAA,CAAA;YAE1C,ECvBiCR,GAAKzD,GAAGyD,GAAKxD,GAAGwD,GAAKhF,CAAAA,GAIpCyF,KAAQT,GAAKrF,KAAK,IAAI,KAAKQ,QAAiB,MAAT6E,GAAKrF,GAASoF,QAAQ,CAAA,CAAA,EAC1DG,SAAS,EAAA,EACTQ,YAAAA,EAAcF,SAAS,GAAG,GAAA;AAI/B,mBAFAC,MAASxC,GAAIxE,KAAKgH,EAAAA,GAClBxC,GAAIiC,WAAW,MAAO,IAAGjC,GAAIuB,KAAK,EAAA,EAAIkB,YAAAA,CAAAA,IAC/BzC;UACX,GAEA0C,OAAOA,MAAMhB,GAAUK,GAAKzD,GAAGyD,GAAKxD,GAAGwD,GAAKhF,GAAGgF,GAAKrF,CAAAA,EAAAA;AAGxD,iBAAOqF;QACX;ACtDA,cAAMY,KAAQ5F,CAAAA,OAAKqB,KAAKH,IAAIG,KAAKJ,IAAIjB,IAAG,CAAA,GAAI,CAAA;AAC7B,iBAAS6F,GAASC,IAAAA;AAE7B,gBAAMd,KAAO,EAGT5I,SAASpB,OAAO+K,OAAO,EACnBC,MAAM,MACNC,UAAUA,MAAM,GAChBC,QAAQA,MAAM,EAAA,GACfJ,EAAAA,GAEHK,UAAUvK,IAAAA;AACN,kBAAA,EAAM,SAACQ,GAAAA,IAAW4I,IAAAA,EACZ,MAACX,IAAI,KAAEvJ,GAAAA,IAAOc;AAIpB,gBAAI0B,SAAS8I,kBAAkBhK,GAAQiK,SAAS;AAC5C,oBAAA,EAAM,MAACL,GAAAA,IAAQhB,GAAK5I,SACdkK,KAAa,cAARxL,IACLyL,KAAgB,iBAARzL,IACR0L,KAAe,gBAAR1L,IACP2L,KAAe,gBAAR3L;AAEb,kBAAa,cAATuJ,OAAuBiC,MAAMC,MAASC,MAAQC,KAAO;AACrD,oBAAIC,KAAK,GACLC,KAAK;AAEI,wBAATX,KACAU,KAAMJ,MAAMC,KAAS,IAAA,KACL,QAATP,KACPU,KAAMJ,MAAMC,KAAAA,KAAc,KAE1BI,KAAKL,KAAAA,KAAWE,KAAO,IAAI,GAC3BE,KAAKD,KAAAA,KAAaF,KAAQ,IAAI,IAGlCvB,GAAK4B,OACDhB,GAAMZ,GAAK6B,MAAMC,IAAK,OAAOJ,EAAAA,GAC7Bd,GAAMZ,GAAK6B,MAAMlE,IAAK,OAAOgE,EAAAA,CAAAA,GAEjC/K,GAAEiF,eAAAA;cACN;AAAW/F,gBAAAA,GAAIiM,WAAW,OAAA,MACtB/B,GAAK5I,QAAQ8J,OAAAA,GACbtK,GAAEiF,eAAAA;YAEV;UACJ,GAEAmG,UAAUnI,IAAAA;AACNoI,cAAK3J,UAAU,CAAC,WAAW,YAAY,aAAA,GAAgB0H,GAAKkC,QAAAA,GAC5DD,EAAK3J,UAAU,CAAC,aAAa,WAAA,GAAc0H,GAAKmC,QAAAA,GAE5CtI,GAAIuI,cACJvI,GAAIgC,eAAAA,GAIRmE,GAAKmC,SAAStI,EAAAA;UAClB,GAEAsI,SAAStI,IAAAA;AACL,kBAAA,EAAM,SAACzC,IAAO,OAAEyK,GAAAA,IAAS7B,IAAAA,EACnB,MAACgB,IAAI,SAAE/H,IAAO,SAAEoI,GAAAA,IAAWjK,IAC3B6F,KAAIoE,GAAQgB,sBAAAA;AAElB,gBAAIP,KAAI,GAAGnE,KAAI;AACf,gBAAI9D,IAAK;AACL,oBAAMyI,KAAQzI,MAAOA,GAAI0I,WAAW1I,GAAI0I,QAAQ,CAAA;AAChDT,cAAAA,KAAIjI,MAAOyI,MAASzI,IAAK2I,UAAU,GACnC7E,KAAI9D,MAAOyI,MAASzI,IAAK4I,UAAU,GAG/BX,KAAI7E,GAAEwE,OACNK,KAAI7E,GAAEwE,OACCK,KAAI7E,GAAEwE,OAAOxE,GAAEyF,UACtBZ,KAAI7E,GAAEwE,OAAOxE,GAAEyF,QAEf/E,KAAIV,GAAE0F,MACNhF,KAAIV,GAAE0F,MACChF,KAAIV,GAAE0F,MAAM1F,GAAE2F,WACrBjF,KAAIV,GAAE0F,MAAM1F,GAAE2F,SAIlBd,MAAK7E,GAAEwE,MACP9D,MAAKV,GAAE0F;YACX;AAAWd,cAAAA,OACPC,KAAID,GAAMC,IAAI7E,GAAEyF,OAChB/E,KAAIkE,GAAMlE,IAAIV,GAAE2F;AAGP,oBAAT5B,OACA/H,GAAQ4J,MAAMpB,OAAQ,QAAOK,KAAI7E,GAAEyF,QAAQ,GAAA,OAAUzJ,GAAQ6J,cAAc,CAAA,QAGlE,QAAT9B,OACA/H,GAAQ4J,MAAMF,MAAO,QAAOhF,KAAIV,GAAE2F,SAAS,GAAA,OAAU3J,GAAQ8J,eAAe,CAAA,QAGhF/C,GAAK6B,QAAQ,EAACC,GAAGA,KAAI7E,GAAEyF,OAAO/E,GAAGA,KAAIV,GAAE2F,OAAAA;AACvC,kBAAMI,KAAKpC,GAAMkB,KAAI7E,GAAEyF,KAAAA,GACjBO,KAAKrC,GAAMjD,KAAIV,GAAE2F,MAAAA;AAEvB,oBAAQ5B,IAAAA;cACJ,KAAK;AACD,uBAAO5J,GAAQ6J,SAAS+B,EAAAA;cAC5B,KAAK;AACD,uBAAO5L,GAAQ6J,SAASgC,EAAAA;cAC5B;AACI,uBAAO7L,GAAQ6J,SAAS+B,IAAIC,EAAAA;YAAAA;UAExC,GAEAf,WAAAA;AACIlC,YAAAA,GAAK5I,QAAQ8J,OAAAA,GACbe,EAAM3J,UAAU,CAAC,WAAW,YAAY,aAAA,GAAgB0H,GAAKkC,QAAAA,GAC7DD,EAAM3J,UAAU,CAAC,aAAa,WAAA,GAAc0H,GAAKmC,QAAAA;UACrD,GAEAe,UAAAA;AACIlD,YAAAA,GAAKmC,SAAAA;UACT,GAEAP,OAAOE,KAAI,GAAGnE,KAAI,GAAA;AACd,kBAAA,EAAM,MAAC8D,IAAI,KAAEkB,IAAG,OAAED,IAAK,QAAEE,GAAAA,IAAU5C,GAAK5I,QAAQiK,QAAQgB,sBAAAA;AAE9B,oBAAtBrC,GAAK5I,QAAQ4J,SACbrD,KAAImE,KAGR9B,GAAKmC,SAAS,EACVK,SAASf,KAAOiB,KAAQZ,IACxBW,SAASE,KAAMC,KAASjF,GAAAA,CAAAA;UAEhC,GAEAwF,UAAAA;AACI,kBAAA,EAAM,SAAC/L,IAAO,WAAE4K,IAAS,WAAEb,GAAAA,IAAanB;AACxCiC,cAAM3J,UAAU,CAAC,WAAW,OAAA,GAAU6I,EAAAA,GACtCc,EAAM,CAAC7K,GAAQiK,SAASjK,GAAQ6B,OAAAA,GAAU,aAAa+I,EAAAA,GACvDC,EAAM,CAAC7K,GAAQiK,SAASjK,GAAQ6B,OAAAA,GAAU,cAAc+I,IAAW,EAC/DhG,SAAAA,MAAS,CAAA;UAEjB,EAAA,GAAA,EAIE,SAAC5E,IAAO,WAAE4K,IAAS,WAAEb,GAAAA,IAAanB;AAQxC,iBAPAiC,EAAK,CAAC7K,GAAQiK,SAASjK,GAAQ6B,OAAAA,GAAU,aAAa+I,EAAAA,GACtDC,EAAK,CAAC7K,GAAQiK,SAASjK,GAAQ6B,OAAAA,GAAU,cAAc+I,IAAW,EAC9DhG,SAAAA,MAAS,CAAA,GAGbiG,EAAK3J,UAAU,CAAC,WAAW,OAAA,GAAU6I,EAAAA,GAE9BnB;QACX;AC9Je,iBAASoD,GAAWtC,KAAM,CAAC,GAAA;AACtCA,UAAAA,KAAM9K,OAAO+K,OAAO,EAChBE,UAAUA,MAAM,GAChBoC,WAAW,IACXpM,UAAU,CAAA,EAAA,GACX6J,EAAAA;AAEH,gBAAMwC,KAAQrB,EAAKnB,GAAI7J,UAAU,SAAS4C,CAAAA,OAAAA;AACtCiH,YAAAA,GAAI7J,SAASsM,QAAQ3M,CAAAA,OACjBA,GAAE4M,UAAU3J,GAAIG,WAAWpD,KAAI,QAAQ,QAAA,EAAUkK,GAAIuC,SAAAA,CAAAA,GAGzDvC,GAAIG,SAASpH,EAAAA,GAGbA,GAAI4J,gBAAAA;UAAiB,CAAA;AAGzB,iBAAO,EACHN,SAASA,MAAMlB,EAAAA,GAASqB,EAAAA,EAAAA;QAEhC;ACrBA,cCwEI1F,KAAmB,EACnB8F,kBAAA,EAAmBC,OAAM,OAAQC,QAAO,OAAQC,KAAA,MAAA,GAChDC,mBAAU,EAAAnB,KAAA,QAAApB,OAAA,QAAAwC,QAAA,QAAAtC,MAAA,OAAA,GACVuC,UAAQ,UACRC,QAAA,GACJC,SAUI,EAAA,GAoJAC,KAAAA,CAAM3H,IAAAd,IAAuCe,OAAAA;AAGtC,gBAAAK,KAAA,YAAA,OAAAN,MAAAA,cAAA4H,cAAA,iBAAAC,WAAA7H,IAAA8H,QAAA5I,MAAAe,MAAAD;AAAA,iBAAA,EAOOoF,OAAAjH,KAACmC,IAAAA;AAEH,kBAAA,EAACuH,WAAWzN,IAAA0N,QAAA7G,GAAAA,IAAAzH,OAAA+K,OAAAjE,IAAAnC,EAAAA;AACN,gBAAA,CAAA8C,MAAAA,CAAA7G;AAGH,oBAAA,IAAsB2N,MAAmB,uCAAA;AACpD,oBAlKE5H,CAAAH,IAAAd,IAAAe,OAAAA;AAAA,oBAAA,EAEF+H,WAAA1H,IACA2H,OAAA9J,IACAsJ,QAAArN,IACAsN,SAAAzG,IACAuG,UAAAU,IACAhB,kBAAAiB,IAAAb,mBACAc,GAAAA,IACA,gCACAJ,WAAGlM,SAAAuM,gBAAAxC,sBAAAA,KACAzE,KAOAnB,KAAAA,EACAgF,MAAMqD,IAAAnC,KAAOoC,GAAAA,IACbrJ,GAAAmH;AAEDnH,cAAAA,GAAAmH,MAAApB,OAAmB,KAAA/F,GAAAmH,MAAAF,MAAA;AAMiB,oBACnC9L,KAAO2F,GAAA6F,sBAAAA,GAAsBtM,KAAA2F,GAAA2G,sBAAAA,GAAA2C,KAAA,EAChCnO,GAAGA,GAAO8L,MAAA5M,GAAA6M,SAAShM,IACnBqG,GAAGpG,GAAOkN,SAAQnN,IAClBmB,GAAGlB,GAAO0K,QAAO3K,IAAekG,GAO9BjG,GAAkC4K,OAAA1L,GAAA2M,QAAA9L,GAAAA,GACpCqO,KAAI,EACJC,IAAIrO,GAAO4K,MACX0D,IAAItO,GAAO4K,OAAO5K,GAAO6L,QAAQ,IAAO3M,GAAA2M,QAAA,GACxC0C,IAAIvO,GAAO4K,OAAA5K,GAAA6L,QAAA3M,GAAA2M,OACX2C,IAAIxO,GAAO8L,KACX2C,IAAIzO,GAAOkN,SAASlN,GAAO+L,SAAA,IAAA7M,GAAA6M,SAAA,GAAA2C,IAKxB1O,GAAQkN,SAAShO,GAAQ6M,OAAAA,GAAAA,CAOhC4C,IAAA1O,KAAW,QAAA,IAAgB4N,GAAApK,MAAA,GAAA,GAAAmL,KAAAb,GAAAY,EAAAA,GAAAE,KAAAf,GAAA7N,EAAAA,GAAAA,EAAA6L,KAAAgD,IAAAlE,MAAAzG,IAAA+I,QAAA9G,IAAAsE,OAAA5D,GAAAA,IAAAb;AACjB,yBAAAJ,MAAY+I,IAAM;AAGpB,sBAAA1N,KAAyD,QAA7B2E,MAA6B,QAAAA;AAGvD,oBAAAkJ,KAACZ,GAAatI,EAAAA;AAYpB,sBAAA,CAAIgB,IAAcmI,EAAAA,IAAoB9N,KAAc,CAAA,OAA0B,MAAA,IAAA,CAAA,QAAA,KAAA,GAAA,CAAA+N,IAAA9I,EAAAA,IAAAjF,KAAA,CAAAhC,GAAA6M,QAAA7M,GAAA2M,KAAAA,IAAA,CAAA3M,GAAA2M,OAAA3M,GAAA6M,MAAAA,GAAAA,CAAAmD,IAAAC,EAAAA,IAAAjO,KAAA,CAAAkF,IAAAU,EAAAA,IAAA,CAAAA,IAAAV,EAAAA,GAAAA,CAAAgJ,IAAAC,EAAAA,IAAAnO,KAAA,CAAA4N,IAAA3K,EAAAA,IAAA,CAAAA,IAAA2K,EAAAA;AAI9E,oBAAA,EAAAC,KAAAK,MAAWL,KAAKE,KAAUrI,KAAAsI;AAGtB,6BAAiBjE,MAAe4D,IAAW;AAE3C,wBAAInJ,KAAA0I,IAAalN,KAAmB,MAAa,OAAyB+J,EAAAA;AAY1E,wBAAA,EAPAvF,KAAA2J,MAA+B3J,KAC/BS,KAAeS,KAAkBuI,KAG1B;AAKH,0BAAAzJ,MAAMxG,GAAA8P,EAAAA,GAAqBD,MAAkB7P,GAAA2H,EAAAA,GAAQhC,GAAAmH,MAAWgD,EAAAA,IAAA,GAAStJ,EAAAA,MAGjDb,GAAAmH,MAAyBnF,EAAAA,IAC5B,GAAAkI,EAAAA,MAAyBjL,IAAa;AAGvD,8BAAqBwL,KAAWpO,KACjBlB,GAAA6L,QAIb,IAAA7L,GAAM+L,SAAiB,GAAAwD,KACvB,IAAAD,KAAiBnJ,KAAInG,GAAAgP,EAAAA,IAAGM,KAAA5J,KAAAS,KAAA;AAAA4I,wBAAAA,KAAA/O,GAAA6G,EAAAA,MAAAkI,MAAAE,KAAAnL,GAAAkI,MAAAgD,EAAAA,IAAA,GAAAO,EAAAA,MAAAzL,GAAAkI,MAAAnF,EAAAA,IAAA,GAAAkI,EAAAA;sBAGlC;AAAY,6BAAAlJ,KAAAoF;oBAAA;kBAAA;cAMpB;AAIJ,qBAcIpG,GACAmH,MACApB,OACUqD,IAAApJ,GAAAmH,MAAAF,MAAAoC,IAAA;YAAA,GAoBNnO,IAAA6G,IAAAX,EAAAA;UAAA,EAAA;QAEP;ACxPc,cAAMuJ,KAAN,MAAMA,GAAAA;UA8FjBC,YAAYxF,IAAAA;AA/BZyF,uDAAAA;AAGAC,2CAAAA;AAGAC,4CAAW;AACXC,yCAAQ;AAGRC,0CAAShH,GAAAA;AACTiH,8CAAajH,GAAAA;AACbkH,iDAAgB,CAAA;AAIhBC,wDAAuB;AAGvBC,kDAAiB,EACbC,MAAM,CAAA,GACNC,MAAM,CAAA,GACNC,MAAM,CAAA,GACNC,MAAM,CAAA,GACNC,OAAO,CAAA,GACPC,QAAQ,CAAA,GACRC,YAAY,CAAA,GACZC,QAAQ,CAAA,GACRC,cAAc,CAAA,EAAA;AAMdC,iBAAKrQ,UAAU0J,KAAM9K,OAAO+K,OAAO,mBAAIsF,GAAMqB,kBAAkB5G,EAAAA;AAE/D,kBAAA,EAAM,UAAC6G,IAAQ,YAAEC,IAAU,OAAEC,IAAK,SAAEC,IAAO,aAAEC,IAAW,SAAE7D,GAAAA,IAAWpD;AAEjE,aAAC,QAAQ,UAAA,EAAYkH,SAASH,EAAAA,KAAAA,CAAWC,OACzChH,GAAIgH,UAAU,MAIbF,GAAWK,gBACZL,GAAWK,cAAc,CAAC;AAI9B,kBAAA,EAAM,SAACC,IAAO,SAAEC,IAAO,KAAEC,IAAG,SAAEC,GAAAA,IAAWT;AACzCA,YAAAA,GAAWO,UAAAA,CAAYJ,MAAeI,IACtCP,GAAWS,UAAUA,MAAWH,MAAWC,MAAWC,IAGtDX,KAAKa,UAAAA,GACLb,KAAKc,iBAAAA,GACLd,KAAKe,YAAAA,GACLf,KAAKgB,YAAAA,GAGDd,MAAYA,GAAShO,UACrBgO,GAASpE,QAAQmF,CAAAA,OAASjB,KAAKkB,UAAUD,EAAAA,CAAAA;AAI7C,kBAAA,EAAM,QAACE,IAAM,KAAEC,GAAAA,IAAOpB,KAAKf;AAC3Be,iBAAKhB,WAAWqC,GAAaF,IAAQC,IAAK,EACtC5E,QAAQC,GAAAA,CAAAA,GAIZ0E,GAAOG,aAAa,QAAQ,QAAA,GAC5BH,GAAOG,aAAa,cAActB,KAAKuB,GAAG,YAAA,CAAA;AAG1C,kBAAMhJ,KAAOyH;AACbA,iBAAKX,uBAAuBmC,sBAAuB,SAASC,KAAAA;AAGxD,kBAAA,CAAKL,GAAI/F;AACL,uBAAOmG,sBAAsBC,EAAAA;AAIjClJ,cAAAA,GAAKmJ,SAASrI,GAAIsI,OAAAA,GAClBpJ,GAAKqJ,qBAAAA,GAGDvI,GAAIwI,0BACJtJ,GAAKuJ,kBAAkBzI,GAAIwI,uBAC3BtJ,GAAKwJ,uBAAuBxJ,GAAKuJ,eAAAA,IAIjCzI,GAAI2I,cACJzJ,GAAKmH,KAAAA,GAITnH,GAAKuG,sBAAAA,OACLvG,GAAK0J,MAAM,MAAA;YACf,CAAA;UACJ;UAMApB,YAAAA;AACI,kBAAA,EAAM,SAAClR,GAAAA,IAAWqQ;AAGlB,uBAAWpI,MAAQ,CAAC,MAAM,WAAA;AACtBjI,cAAAA,GAAQiI,EAAAA,IAAQ4C,EAAiB7K,GAAQiI,EAAAA,CAAAA;AAK7CoI,iBAAKf,SF1LEiD,CAAAA,OAAAA;AAEX,oBAAA,EAAM,YACF/B,IAAU,aACVgC,IAAW,QACXC,IAAM,UACNC,IAAQ,OACRjC,IAAK,aACLE,GAAAA,IACA4B,GAASvS,SAGP2S,KAAS5Q,CAAAA,OAAOA,KAAM,KAAK,+BAC3BtC,KAAI+B,CAAAA,OAAO+Q,GAASX,GAAGpQ,EAAAA,GAEvBvD,KAAO4M,EAAsB;;;UAG7B2H,KAAc,KAAK,kEAAA;;yCAEYE,MAAY,EAAA,iBAAmBjC,EAAAA,KAAUgC,KAAS,4BAA4B,EAAA,gBAAkBhT,GAAE,WAAA,CAAA;uCACpGkT,GAAOnC,GAAWS,OAAAA,CAAAA;4DACG0B,GAAOnC,GAAWM,OAAAA,CAAAA;0FACYrR,GAAE,gBAAA,CAAA;;;;;;iFAMXA,GAAE,cAAA,CAAA;;;wDAG3BkT,GAAOnC,GAAWQ,GAAAA,CAAAA;;uFAEavR,GAAE,UAAA,CAAA;;;4DAG7BkT,GAAOnC,GAAWO,OAAAA,CAAAA;;2FAEatR,GAAE,cAAA,CAAA;;;;qCAIxD+Q,GAAWS,UAAU,KAAK,UAAA;;4DAEH0B,GAAO/T,OAAO0D,KAAKkO,GAAWK,WAAAA,EAAatO,MAAAA,CAAAA;qFAClBoQ,GAAOnC,GAAWK,YAAY+B,KAAAA,CAAAA,gBAAsBnT,GAAE,YAAA,CAAA;;6EAE9DkR,KAAc,QAAQ,MAAA,mBAAyBgC,GAAOnC,GAAWK,YAAYhK,GAAAA,CAAAA;6EAC7E8J,KAAc,QAAQ,MAAA,mBAAyBgC,GAAOnC,GAAWK,YAAYrJ,IAAAA,CAAAA;6EAC7EmJ,KAAc,QAAQ,MAAA,mBAAyBgC,GAAOnC,GAAWK,YAAYpJ,IAAAA,CAAAA;6EAC7EkJ,KAAc,QAAQ,MAAA,mBAAyBgC,GAAOnC,GAAWK,YAAYnJ,IAAAA,CAAAA;iGACzDiL,GAAOnC,GAAWK,YAAYtJ,IAAAA,CAAAA;;yDAEtE9H,GAAE,UAAA,CAAA,mBAA8BkT,GAAOnC,GAAWK,YAAYhB,IAAAA,CAAAA,gBAAqBpQ,GAAE,eAAA,CAAA;6DACjFA,GAAE,YAAA,CAAA,mBAAgCkT,GAAOnC,GAAWK,YAAYV,MAAAA,CAAAA,gBAAuB1Q,GAAE,iBAAA,CAAA;2DAC3FA,GAAE,WAAA,CAAA,mBAA+BkT,GAAOnC,GAAWK,YAAYb,KAAAA,CAAAA,gBAAsBvQ,GAAE,gBAAA,CAAA;;;;KAAA,GAMxIoT,KAAM5U,GAAK4S;AAOjB,qBAJAgC,GAAI7S,QAAQ8S,KAAKnU,CAAAA,OAAAA,CAAMA,GAAEgU,UAAAA,CAAWhU,GAAEyN,UAAU2G,IAAI,QAAA,CAAA,GAGpDF,GAAI5K,OAAO,MAAM4K,GAAI7S,QAAQ8S,KAAKtT,CAAAA,OAAKA,GAAE4M,UAAU4G,SAAS,QAAA,CAAA,GACrD/U;YACV,GEoH+BoS,IAAAA,GAGpBrQ,GAAQwS,gBACRnC,KAAKf,MAAMkC,SAASxR,GAAQM,KAGhCN,GAAQoN,UAAU6F,YAAY5C,KAAKf,MAAMrR,IAAAA;UAC7C;UAEAoT,cAAAA;AACI,kBAAM3H,KAAM2G,KAAKrQ,SACX/B,KAAOoS,KAAKf;AAKlB,gBAFA5F,GAAI0D,UAAU8F,YAAYjV,GAAKA,IAAAA,GAE3ByL,GAAI+I,QAAQ;AACZ,oBAAMU,KAASzJ,GAAIpJ,GAAGuC;AAElB6G,cAAAA,GAAIpJ,GAAG8S,cACPD,GAAOE,aAAapV,GAAKwT,KAAK/H,GAAIpJ,GAAG8S,WAAAA,IAErCD,GAAOF,YAAYhV,GAAKwT,GAAAA;YAEhC;AACI/H,cAAAA,GAAI0D,UAAU6F,YAAYhV,GAAKwT,GAAAA;AAI9B/H,YAAAA,GAAI8I,cAIE9I,GAAI+I,UACX/I,GAAIpJ,GAAGgT,OAAAA,IAFP5J,GAAIpJ,GAAGiT,WAAWC,aAAavV,GAAKA,MAAMyL,GAAIpJ,EAAAA,GAM9CoJ,GAAI+J,YACJpD,KAAKqD,QAAAA,GAIJhK,GAAIiK,eACL1V,GAAKuT,OAAO/F,MAAMmI,aAAa,QAE1BlK,GAAI8I,gBACLvU,GAAK6S,QAAQ+C,UAAUpI,MAAMmI,aAAa,UAIlDvD,KAAKP,KAAAA;UACT;UAEAqB,mBAAAA;AAGI,kBAAM2C,KAAOzD,MACP0D,KAAK1D,KAAKrQ,QAAQwQ,YAClBE,MAAWoD,GAAK9T,QAAQ0Q,WAAW,KAAKsD,OAAO,CAAA,GAAA,CAC9CC,IAAIC,EAAAA,IAAMxD,GAAQ5J,MAAM,UAAA,IAAc4J,KAAU,CAAA,GAGjDyD,KAAWA,MACb9D,KAAKd,WAAWc,KAAKd,SAASc,KAAKb,WAAWjG,MAAAA,IAE5CiH,KAAa,EAEfS,SAASxH,GAAS,EACd5H,SAASiS,GAAKxE,MAAM2B,QAAQmD,QAC5BnK,SAAS6J,GAAKxE,MAAM2B,QAAQA,SAE5BnH,QAAQA,MAAMgK,GAAKxB,MAAM,cAAc,UAAUwB,EAAAA,GACjDjK,SAASa,IAAGnE,IAAAA;AACR,kBAAA,CAAKwN,GAAG9C;AACJ;AAGJ,oBAAMK,KAAQ6C,GAAAA,GAAAA,EACR,OAAC7E,IAAK,SAAEtP,GAAAA,IAAW8T,IAAAA,EACnB,WAACD,IAAS,cAAEQ,GAAAA,IAAgB/E,GAAMwB;AAGpCgD,cAAAA,GAAK1E,YAGLkC,GAAMlM,IAAQ,MAAJsF,IAGV4G,GAAM1N,IAAI,MAAU,MAAJ2C,IAGhB+K,GAAM1N,IAAI,MAAI0N,GAAM1N,IAAI,IACxBkQ,GAAKQ,cAAc,QAAA;AAIvB,oBAAMC,KAAgBjD,GAAMtI,OAAAA,EAASF,SAAS,CAAA;AAC9CuH,mBAAKxO,QAAQ4J,MAAM+I,aAAaD,IAChClE,KAAKpG,QAAQwB,MAAM+I,aAAc;gEACWlD,GAAM/N,CAAAA;wDACd+N,GAAMnM,CAAAA,gBAAiBmM,GAAM/N,CAAAA,0BAA2B+N,GAAM/N,CAAAA;uBAI7FvD,GAAQ2T,aAKD3T,GAAQwS,eAAgBsB,GAAKtE,cAGrCqE,GAAUpI,MAAMgJ,YAAY,eAAeF,EAAAA,KAP3CjF,GAAMkC,OAAO/F,MAAMgJ,YAAY,eAAeF,EAAAA,GAG9CjF,GAAMkC,OAAOpF,UAAUkH,OAAO,OAAA;AAQlC,oBAAM3L,KAAO2J,GAAMnI,OAAAA,EAASL,SAAAA;AAC5B,yBAAK,EAAM,IAACxI,IAAE,OAAEgR,GAAAA,KAAUwC,GAAKrE;AAC3BnP,gBAAAA,GAAG8L,UAAUzE,OAAS2J,GAAMnI,OAAAA,EAASL,SAAAA,IAAa,QAAQ,QAAA,EAAU,YAAA;AAIxEuL,cAAAA,GAAa5I,MAAMgJ,YAAY,eAAeF,EAAAA;YAClD,EAAA,CAAA,GAGJvD,KAAKvH,GAAS,EACVG,MAAa,QAAPsK,KAAa,MAAM,KACzBrS,SAASiS,GAAKxE,MAAM0B,IAAIoD,QACxBnK,SAAS6J,GAAKxE,MAAM0B,IAAI0D,QAExB5K,QAAQA,MAAMgK,GAAKxB,MAAM,cAAc,UAAUwB,EAAAA,GACjDjK,SAASjG,IAAAA;AACL,kBAAA,CAAKmQ,GAAG/C,OAAAA,CAAQ+C,GAAG9C;AACf;AAGJ,oBAAMK,KAAQ6C,GAAAA;AAGVL,cAAAA,GAAK1E,YACLkC,GAAMnM,IAAQ,MAAJvB,KAIdyM,KAAKxO,QAAQ4J,MAAMkJ,kBAAmB,OAAMrD,GAAMnM,CAAAA,gBAClDqL,GAAWS,QAAQnF,QAAAA;YACvB,EAAA,CAAA,GAGJiF,SAAStH,GAAS,EACdG,MAAa,QAAPqK,KAAa,MAAM,KACzBpS,SAASiS,GAAKxE,MAAMyB,QAAQqD,QAC5BnK,SAAS6J,GAAKxE,MAAMyB,QAAQ2D,QAE5B5K,QAAQA,MAAMgK,GAAKxB,MAAM,cAAc,UAAUwB,EAAAA,GACjDjK,SAASjG,IAAAA;AACL,kBAAA,CAAKmQ,GAAGhD,WAAAA,CAAYgD,GAAG9C;AACnB;AAGJ,oBAAMK,KAAQ6C,GAAAA;AAGVL,cAAAA,GAAK1E,YACLkC,GAAM/N,IAAI0B,KAAKD,MAAU,MAAJpB,EAAAA,IAAW,MAIpCyM,KAAKxO,QAAQ4J,MAAM+I,aAAc,iBAAgBlD,GAAM/N,CAAAA,KACvDiN,GAAWS,QAAQnF,QAAAA;YACvB,EAAA,CAAA,GAGJ8I,YAAY5I,GAAW,EACnBnM,UAAUiU,GAAKxE,MAAMuB,YAAY7Q,SACjCiM,WAAW,UAEXpC,SAASrK,IAAAA;AACLsU,cAAAA,GAAK3B,kBAAkB3S,GAAEoD,OAAOjB,aAAa,WAAA,EAAa2H,YAAAA,GAC1DwK,GAAK1E,WAAW0E,GAAKQ,cAAc,QAAA;YACvC,EAAA,CAAA,EAAA;AAIRjE,iBAAKwE,cAAcrE;UACvB;UAEAY,cAAAA;AACI,kBAAA,EAAM,OAAC9B,IAAK,SAAEtP,GAAAA,IAAWqQ,MAEnByE,KAAgB,CAGlBjK,EAAKyE,GAAMuB,YAAYb,OAAO,SAAS,MAAMK,KAAK0E,YAAAA,CAAAA,GAGlDlK,EAAK,CACDyE,GAAMuB,YAAYV,QAClBb,GAAMwB,QAAQ+C,SAAAA,GACf,SAAS,MAAA;AACRxD,mBAAK2E,QAAAA,IAAY3E,KAAKb,cAAca,KAAKd,QAAQ1G,OAAAA,GAAAA,IAAU,GAC3DwH,KAAKiC,MAAM,QAAA;YAAS,CAAA,GAIxBzH,EAAKyE,GAAMuB,YAAYhB,MAAM,SAAS,MAAA;AAAA,eACjCQ,KAAK4E,WAAAA,KAAAA,CAAiBjV,GAAQqS,cAAchC,KAAKP,KAAAA;YAAM,CAAA,GAI5DjF,EAAKyE,GAAMuB,YAAYqE,QAAQ,CAAC,SAAS,OAAA,GAAU1V,CAAAA,OAAAA;AAG3C6Q,mBAAK0B,SAASvS,GAAEoD,OAAOrD,OAAAA,IAAO,KAAA,CAAU8Q,KAAKlB,wBAC7CkB,KAAKiC,MAAM,UAAUjC,KAAKd,QAAQ,SAASc,IAAAA,GAC3CA,KAAKiC,MAAM,cAAc,SAASjC,IAAAA,IAGtC7Q,GAAE2V,yBAAAA;YAA0B,CAAA,GAIhCtK,EAAKyE,GAAMuB,YAAYqE,QAAQ,CAAC,SAAS,MAAA,GAAS1V,CAAAA,OAAAA;AAC9C6Q,mBAAKjB,UAAqB,WAAX5P,GAAEyI,MACjBoI,KAAKjB,WAAWiB,KAAKiE,cAAc,IAAA;YAAK,CAAA,GAI5CzJ,EAAK,CACDyE,GAAM2B,QAAQA,SACd3B,GAAM2B,QAAQmD,QACd9E,GAAM0B,IAAI0D,QACVpF,GAAM0B,IAAIoD,QACV9E,GAAMyB,QAAQ2D,QACdpF,GAAMyB,QAAQqD,MAAAA,GACf,CAAC,aAAa,YAAA,GAAe,MAAM/D,KAAKjB,UAAAA,MAAgB,EAACxK,SAAAA,KAAS,CAAA,CAAA;AAIzE,gBAAA,CAAK5E,GAAQqS,YAAY;AACrB,oBAAM+C,KAAKpV,GAAQqV;AAEnBP,cAAAA,GAAczS,KAGVwI,EAAKyE,GAAMkC,QAAQ,SAAS,MAAMnB,KAAKiF,OAAAA,IAAWjF,KAAKP,KAAAA,IAASO,KAAKN,KAAAA,CAAAA,GAGrElF,EAAK3J,UAAU,SAAS1B,CAAAA,OAAK6Q,KAAKiF,OAAAA,MAAa9V,GAAEd,QAAQ0W,MAAM5V,GAAE+V,SAASH,OAAO/E,KAAKP,KAAAA,CAAAA,GAGtFjF,EAAK3J,UAAU,CAAC,cAAc,WAAA,GAAc1B,CAAAA,OAAAA;AACpC6Q,qBAAKiF,OAAAA,KAAAA,CAAazK,EAAYrL,EAAAA,EAAGgW,KAAKlV,CAAAA,OAAMA,OAAOgP,GAAMmC,OAAOnR,OAAOgP,GAAMkC,MAAAA,KAC7EnB,KAAKP,KAAAA;cACT,GACD,EAACtP,SAAAA,KAAS,CAAA,CAAA;YAErB;AAGA,gBAAIR,GAAQyV,mBAAmB;AAC3B,oBAAMC,KAAS,EACXlO,MAAM,CAAC,KAAK,KAAK,KAAK,CAAA,GACtBE,MAAM,CAAC,KAAK,KAAK,KAAK,CAAA,GACtBD,MAAM,CAAC,KAAK,KAAK,KAAK,CAAA,GACtBF,MAAM,CAAC,KAAK,KAAK,KAAK,GAAA,EAAA;AAG1BsD,gBAAyByE,GAAMuB,YAAYqE,QAAQ,CAACvW,IAAGgX,IAAMxR,OAAAA;AACzD,sBAAMyR,KAAQF,GAAOrF,KAAKwF,uBAAAA,EAAyB3O,YAAAA,CAAAA;AAEnD,oBAAI0O,IAAO;AACP,wBAAM9Q,KAAM8Q,GAAMzR,EAAAA,GAGZ2R,KAAKnX,MAAKmG,MAAO,MAAa,MAAP6Q,KAAcA;AAG3C,yBAAOG,MAAM,IAAI,IAAI/R,QAAQ+R,KAAKhR,KAAMgR,KAAKhR,IAAKiR,YAAY,CAAA,CAAA;gBAClE;AAEA,uBAAOpX;cAAC,CAAA;YAEhB;AAEA,gBAAIqB,GAAQgW,kBAAAA,CAAmBhW,GAAQyS,QAAQ;AAC3C,kBAAIwD,KAAU;AACd,oBAAMrN,KAAOyH;AAGbyE,cAAAA,GAAczS,KACVwI,EAAK/H,QAAQ,CAAC,UAAU,QAAA,GAAW,MAAA;AAC3B8F,gBAAAA,GAAK0M,OAAAA,MAEDtV,GAAQkW,iBACRtN,GAAKkH,KAAAA,GAGO,SAAZmG,MACAA,KAAUE,WAAW,MAAMF,KAAU,MAAM,GAAA,GAG3CpE,sBAAsB,SAASuE,KAAAA;AAC3BxN,kBAAAA,GAAKqJ,qBAAAA,GACQ,SAAZgE,MAAqBpE,sBAAsBuE,EAAAA;gBAChD,CAAA,MAEAC,aAAaJ,EAAAA,GACbA,KAAUE,WAAW,MAAMF,KAAU,MAAM,GAAA;cAEnD,GACD,EAACzV,SAAAA,KAAS,CAAA,CAAA;YAErB;AAGA6P,iBAAKiG,iBAAiBxB;UAC1B;UAEA7C,uBAAAA;AACI,kBAAA,EAAM,SAACjS,GAAAA,IAAWqQ;AAGlB,gBAAA,CAAKrQ,GAAQyS,QAAQ;AAMjB,kBAAA,CALgBpC,KAAKhB,SAAS7E,OAAO,EACjC4C,WAAWlM,SAASqV,KAAKtL,sBAAAA,GACzB2B,UAAU5M,GAAQ4M,SAAAA,CAAAA,GAGR;AACV,sBAAMtM,KAAK+P,KAAKf,MAAMmC,KAChB+E,KAAKlW,GAAG2K,sBAAAA;AACd3K,gBAAAA,GAAGmL,MAAMF,OAAUzI,OAAO2T,cAAcD,GAAGhL,UAAU,IAArC,MAChBlL,GAAGmL,MAAMpB,QAAWvH,OAAO4T,aAAaF,GAAGlL,SAAS,IAAnC;cACrB;YACJ;UACJ;UAEAgJ,cAAcqC,IAAAA;AACV,kBAAA,EAAM,OAACrH,IAAK,QAAEC,IAAM,SAAEvP,GAAAA,IAAWqQ;AAGjC,gBAAIf,GAAMuB,YAAY5I,KAAAA,GAAQ;AAG1B,oBAAMrI,KAAU,KAAI0P,GAAMuB,YAAY5I,KAAAA,EAAOtG,aAAa,WAAA,CAAA;AAC1D2N,cAAAA,GAAMuB,YAAYqE,OAAO3V,QAAkC,cAAA,OAAnBgQ,GAAO3P,EAAAA,IAC3C2P,GAAO3P,EAAAA,EAAAA,EAAUkJ,SAAS9I,GAAQ4W,eAAAA,IAAmB;YAC7D;AAAA,aAGKvG,KAAKlB,uBAAuBkB,KAAKjB,WAClCiB,KAAKiC,MAAM,UAAU/C,IAAQoH,IAAatG,IAAAA;UAElD;UAEA0E,YAAY8B,KAAAA,OAAS;AACjB,kBAAA,EAAM,OAACvH,IAAK,SAAEtP,GAAAA,IAAWqQ;AAGpBrQ,YAAAA,GAAQwS,eACTlD,GAAMkC,OAAO/F,MAAMgJ,YAAY,eAAe,qBAAA,GAGlDnF,GAAMkC,OAAOpF,UAAU2G,IAAI,OAAA,GAEtB/S,GAAQqS,cACThC,KAAKP,KAAAA,GAGTO,KAAKb,aAAa,MACba,KAAKlB,uBAAwB0H,OAG9BxG,KAAKiC,MAAM,QAAQ,IAAA,GACnBjC,KAAKiC,MAAM,OAAA;UAEnB;UAEAwE,iBAAiBtV,IAAAA;AACb,kBAAA,EAAM,QAAC2G,IAAM,MAAEF,IAAI,GAAE1E,GAAAA,IAAK0D,GAAYzF,EAAAA,GAAAA,EAChC,aAACmP,GAAAA,IAAeN,KAAKrQ,SACrB+W,KAAAA,WAAoBxT,MAAyB,MAANA;AAQ7C,mBAJI4E,MAA4B,MAAlBA,GAAO5F,WACjB4F,GAAO,CAAA,IAAA,SAGJ,EACHA,QAAAA,CAAUA,MAAWwI,MAAeoG,KAAsB,OAAO5O,IACjEF,MAAAA,GAAAA;UAER;UAEA2J,GAAGlT,IAAAA;AACC,mBAAO2R,KAAKrQ,QAAQgX,KAAKtY,EAAAA,KAAQuQ,GAAMgI,cAAcvY,EAAAA;UACzD;UAEA4T,MAAM4E,OAAUC,IAAAA;AACZ9G,iBAAKV,eAAeuH,EAAAA,EAAO/K,QAAQ2F,CAAAA,OAAMA,GAAAA,GAAMqF,IAAM9G,IAAAA,CAAAA;UACzD;UAEAzP,GAAGsW,IAAOpF,IAAAA;AAEN,mBADAzB,KAAKV,eAAeuH,EAAAA,EAAO7U,KAAKyP,EAAAA,GACzBzB;UACX;UAEAvP,IAAIoW,IAAOpF,IAAAA;AACP,kBAAMsF,KAAa/G,KAAKV,eAAeuH,EAAAA,KAAU,CAAA,GAC3C/S,KAAQiT,GAAUC,QAAQvF,EAAAA;AAMhC,mBAAA,CAJK3N,MACDiT,GAAUE,OAAOnT,IAAO,CAAA,GAGrBkM;UACX;UAOAkB,UAAUD,IAAAA;AACN,kBAAA,EAAM,QAACnJ,GAAAA,IAAUkI,KAAKyG,iBAAiBxF,EAAAA;AAEvC,gBAAInJ,IAAQ;AACR,oBAAA,EAAM,eAACsH,IAAa,OAAEH,GAAAA,IAASe,MACzBiB,KAAQ/I,GAAAA,GAAaJ,EAAAA,GAGrB7H,KAAKuK,GACN,6CAA4CyG,GAAMtI,OAAAA,EAASF,SAAS,CAAA,CAAA,iBAAmBuH,KAAKuB,GAAG,YAAA,CAAA,KAAA;AAgBpG,qBAZAtC,GAAMiB,SAAS0C,YAAY3S,EAAAA,GAC3BmP,GAAcpN,KAAK,EAAC/B,IAAAA,IAAIgR,OAAAA,GAAAA,CAAAA,GAGxBjB,KAAKiG,eAAejU,KAChBwI,EAAKvK,IAAI,SAAS,MAAA;AACd+P,qBAAK2E,QAAAA,GAAW1D,GAAMzI,OAAAA,GAAAA,IAAU,GAChCwH,KAAKiC,MAAM,gBAAgBhB,EAAAA,GAC3BjB,KAAKiC,MAAM,UAAUhB,IAAO,UAAUjB,IAAAA;cAAK,CAAA,CAAA,GAAA;YAKvD;AAEA,mBAAA;UACJ;UAOAkH,aAAapT,IAAAA;AACT,kBAAMqT,KAAcnH,KAAKZ,cAActL,EAAAA;AAGvC,gBAAIqT,IAAa;AACb,oBAAA,EAAM,IAAClX,GAAAA,IAAMkX;AAKb,qBAFAnH,KAAKf,MAAMiB,SAAS2C,YAAY5S,EAAAA,GAChC+P,KAAKZ,cAAc6H,OAAOnT,IAAO,CAAA,GAAA;YAErC;AAEA,mBAAA;UACJ;UAEA8Q,WAAW4B,KAAAA,OAAS;AAChB,kBAAA,EAAM,SAAC/F,IAAO,QAAEU,GAAAA,IAAUnB,KAAKf,OAGzBiF,KAAgBlE,KAAKd,OAAOvG,OAAAA,EAASF,SAAS,CAAA;AAmBpD,mBAlBAgI,GAAQ+C,UAAUpI,MAAMgJ,YAAY,eAAeF,EAAAA,GAG9ClE,KAAKrQ,QAAQwS,eACdhB,GAAO/F,MAAMgJ,YAAY,eAAeF,EAAAA,GAI5C/C,GAAOpF,UAAUkH,OAAO,OAAA,GAGxBjD,KAAKb,aAAaa,KAAKd,OAAOhG,MAAAA,GAGzB8G,KAAKlB,uBAAwB0H,MAC9BxG,KAAKiC,MAAM,QAAQjC,KAAKd,MAAAA,GAGrBc;UACX;UAKAtE,UAAAA;AAGI0L,iCAAqBpH,KAAKX,oBAAAA,GAG1BW,KAAKiG,eAAenK,QAAQgL,CAAAA,OAAQtM,EAAAA,GAASsM,EAAAA,CAAAA,GAG7CvY,OAAO0D,KAAK+N,KAAKwE,WAAAA,EACZ1I,QAAQzN,CAAAA,OAAO2R,KAAKwE,YAAYnW,EAAAA,EAAKqN,QAAAA,CAAAA;UAC9C;UAMA2L,mBAAAA;AACIrH,iBAAKtE,QAAAA;AACL,kBAAA,EAAM,MAAC9N,IAAI,KAAEwT,GAAAA,IAAOpB,KAAKf;AAGrBrR,YAAAA,GAAK4E,iBACL5E,GAAK4E,cAAcqQ,YAAYjV,EAAAA,GAInCwT,GAAI5O,cAAcqQ,YAAYzB,EAAAA,GAI9B7S,OAAO0D,KAAK+N,IAAAA,EACPlE,QAAQzN,CAAAA,OAAO2R,KAAK3R,EAAAA,IAAO,IAAA;UACpC;UAKAoR,OAAAA;AACI,mBAAA,CAAA,CAAIO,KAAKiF,OAAAA,MACLjF,KAAKf,MAAMmC,IAAIrF,UAAUkH,OAAO,SAAA,GAChCjD,KAAKiC,MAAM,MAAA,GAAA;UAKnB;UAKAvC,OAAAA;AACI,mBAAA,CAAKM,KAAKrQ,QAAQyT,YAAAA,CAAapD,KAAKiF,OAAAA,MAChCjF,KAAKf,MAAMmC,IAAIrF,UAAU2G,IAAI,SAAA,GAC7B1C,KAAK4B,qBAAAA,GACL5B,KAAKiC,MAAM,QAAQjC,KAAKd,MAAAA,GACjBc;UAIf;UAKAiF,SAAAA;AACI,mBAAOjF,KAAKf,MAAMmC,IAAIrF,UAAU4G,SAAS,SAAA;UAC7C;UAWAgC,QAAQ7P,KAAI,KAAKC,KAAI,GAAGxB,KAAI,GAAGL,KAAI,GAAGsT,KAAAA,OAAS;AAG3C,kBAAMc,KAAStH,KAAKjB;AAIpB,gBAHAiB,KAAKjB,UAAAA,OAGDjK,KAAI,KAAKA,KAAI,OAAOC,KAAI,KAAKA,KAAI,OAAOxB,KAAI,KAAKA,KAAI,OAAOL,KAAI,KAAKA,KAAI;AACzE,qBAAA;AAIJ8M,iBAAKd,SAAShH,GAAUpD,IAAGC,IAAGxB,IAAGL,EAAAA;AAGjC,kBAAA,EAAM,KAACyN,IAAG,SAAED,IAAO,SAAEE,GAAAA,IAAWZ,KAAKwE;AAiBrC,mBAhBA7D,GAAIxG,OAAQrF,KAAI,GAAA,GAChB4L,GAAQvG,OAAOjH,EAAAA,GACf0N,GAAQzG,OAAOpF,KAAI,KAAK,IAAKxB,KAAI,GAAA,GAG5BiT,MACDxG,KAAK4E,WAAAA,GAIL0C,MACAtH,KAAKiE,cAAAA,GAITjE,KAAKjB,UAAUuI,IAAAA;UAEnB;UAUA5F,SAAS6F,IAAQf,KAAAA,OAAS;AAGtB,gBAAe,SAAXe;AAEA,qBADAvH,KAAK0E,YAAY8B,EAAAA,GAAAA;AAIrB,kBAAA,EAAM,QAAC1O,IAAM,MAAEF,GAAAA,IAAQoI,KAAKyG,iBAAiBc,EAAAA;AAG7C,gBAAIzP,IAAQ;AAGR,oBAAM0P,KAAQ5P,GAAKqB,YAAAA,GAAAA,EACb,SAACtJ,GAAAA,IAAWqQ,KAAKf,MAAMuB,aACvBjO,KAAS5C,GAAQ8S,KAAKxS,CAAAA,OAAMA,GAAGqB,aAAa,WAAA,MAAiBkW,EAAAA;AAGnE,kBAAIjV,MAAAA,CAAWA,GAAO+P;AAClB,2BAAWrS,MAAMN;AACbM,kBAAAA,GAAG8L,UAAU9L,OAAOsC,KAAS,QAAQ,QAAA,EAAU,QAAA;AAKvD,qBAAA,CAAA,CAAKyN,KAAK2E,QAAAA,GAAW7M,IAAQ0O,EAAAA,KAKtBxG,KAAK+B,uBAAuByF,EAAAA;YACvC;AAEA,mBAAA;UACJ;UAQAzF,uBAAuBnK,IAAAA;AAMnB,mBAHAA,KAAOA,GAAKqB,YAAAA,GAAAA,CAAAA,CAGH+G,KAAKf,MAAMuB,YAAY7Q,QAC3B8S,KAAKlP,CAAAA,OAAKA,GAAEjC,aAAa,WAAA,EAAagJ,WAAW1C,EAAAA,KAAAA,CAAUrE,GAAEkU,MAAAA,CAAAA;UACtE;UAMAjC,yBAAAA;AACI,mBAAOxF,KAAK8B;UAChB;UAKAgC,WAAAA;AACI,mBAAO9D,KAAKd;UAChB;UAMAwI,mBAAAA;AACI,mBAAO1H,KAAKb;UAChB;UAKAwI,UAAAA;AACI,mBAAO3H,KAAKf;UAChB;UAKAoE,UAAAA;AAII,mBAHArD,KAAKP,KAAAA,GACLO,KAAKrQ,QAAQyT,WAAAA,MACbpD,KAAKf,MAAMkC,OAAOpF,UAAU2G,IAAI,UAAA,GACzB1C;UACX;UAKA4H,SAAAA;AAGI,mBAFA5H,KAAKrQ,QAAQyT,WAAAA,OACbpD,KAAKf,MAAMkC,OAAOpF,UAAUkH,OAAO,UAAA,GAC5BjD;UACX;QAAA;AA34BA6H,sBAHiBjJ,IAGjBiJ,SAAerN;AAGfqN,sBANiBjJ,IAMjBiJ,WAAiBC;AAGjBD,sBATiBjJ,IASjBiJ,iBAAuB,EAGnB,aAAa,uBACb,cAAc,8BACd,cAAc,gBACd,kBAAkB,sBAClB,YAAY,QACZ,cAAc,UACd,aAAa,SAGb,iBAAiB,kBACjB,mBAAmB,oBACnB,kBAAkB,mBAClB,cAAc,qBACd,gBAAgB,wBAChB,YAAY,wBACZ,gBAAgB,mBAAA;AAIpBA,sBA/BiBjJ,IA+BjBiJ,mBAAyB,EACrBxF,UAAU,MACVjC,OAAO,WACP+B,aAAAA,OACA1F,SAAS,GACT2G,UAAAA,OACAE,YAAAA,MACAuC,eAAAA,OACAU,iBAAiB,GACjBjG,aAAAA,OACAqF,gBAAAA,MACA5I,WAAW,QAEXoD,YAAY,EACRK,aAAa,CAAC,EAAA,GAGlBmG,MAAM,CAAC,GACPzG,UAAU,MACVkC,QAAAA,OACA/B,SAAS,MAETsB,SAAS,WACTE,uBAAuB,MACvBtF,UAAU,iBACV6I,mBAAAA,MACApD,YAAAA,OAEAgD,cAAc,SAAA;AA4GlB6C,sBAvKiBjJ,IAuKjBiJ,UAAgBlY,CAAAA,OAAW,IAAIiP,GAAMjP,EAAAA;AAvK1B,YAAMiP,KAAN;AA84BX,eAAAzP,KAAAA,GAAA;MAAA,GZ54BJ,CAAA;;;;;AaVA,MACA,cACA4Y,iBAGO;AALP;AAAA;AAAA;AAAA;AACA,qBAAkB;AAClB,MAAAA,kBAAoB;AACpB;AACA;AACA,MAAO,qCAAP,cAA6B,WAAW;AAAA,QAEpC,UAAU;AACN,eAAK,OAAO;AAAA,QAChB;AAAA,QACA,aAAa;AACT,iBAAO,cAAc,IAAI,YAAY,aAAa,CAAC;AAAA,QACvD;AAAA,QACA,SAAS;AACL,+BAAS,KAAK,QAAQ;AAEtB,eAAK,gBAAgB;AACrB,eAAK,gBAAgB;AACrB,eAAK,eAAe;AACpB,eAAK,cAAc;AAAA,QACvB;AAAA,QAEA,IAAI,WAAW;AACX,iBAAO,KAAK,QAAQ,cAAc,UAAU;AAAA,QAChD;AAAA,QAEA,gBAAe;AACX,gBAAM,UAAW,KAAK,QAAQ,cAAc,gDAAgD;AAC5F,cAAI,YAAY,MAAM;AAAE;AAAA,UAAQ;AAChC,eAAK,SAAS,2BAAkB,cAAc,OAAO;AAAA,QACzD;AAAA,QAEA,iBAAgB;AACZ,gBAAM,YAAY,KAAK,QAAQ,cAAc,iBAAiB;AAC9D,cAAI,cAAc,MAAM;AAAE;AAAA,UAAQ;AAClC,gBAAM,uBAAuB,IAAI,aAAa,SAAS;AACvD,gBAAM,aAAa;AACnB,+BAAqB,GAAG,yBAAyB,WAAW;AACxD,uBAAW,QAAQ,cAAc,mDAAmD,EAAE,QAAQ;AAAA,UAClG,CAAC;AAAA,QACL;AAAA,QAEA,kBAAkB;AACd,cAAI,CAAC,KAAK,2BAA2B,CAAC,KAAK,sBAAsB;AAAE;AAAA,UAAQ;AAC3E,eAAK,QAAQ,IAAI,aAAAC,QAAM;AAAA,YACnB,IAAI,KAAK;AAAA,YACT,cAAc;AAAA;AAAA,YAEd,OAAO;AAAA;AAAA,YACP,SAAS,KAAK,QAAQ,cAAc,6CAA6C,EAAE;AAAA,YACnF,UAAU;AAAA,cACN;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACJ;AAAA,YACA,uBAAuB;AAAA,YACvB,YAAY;AAAA,cACR,SAAS;AAAA,cACT,SAAS;AAAA,cACT,KAAK;AAAA,cAEL,aAAa;AAAA,gBACT,KAAK;AAAA,gBACL,MAAM;AAAA,gBACN,MAAM;AAAA,gBACN,OAAO;AAAA,gBACP,OAAO;AAAA,gBACP,MAAM;AAAA,cACV;AAAA,YACJ;AAAA,UACJ,CAAC;AAED,gBAAM,aAAa;AAEnB,eAAK,MAAM,GAAG,QAAQ,CAACC,QAAO,aAAa;AACvC,uBAAW,QAAQ,cAAc,6CAA6C,EAAE,QAAQA,OAAM,OAAO,EAAE,SAAS;AAChH,uBAAW,kBAAkB,MAAM,QAAQA,OAAM,OAAO,EAAE,SAAS;AACnE,uBAAW,MAAM,KAAK;AAAA,UAC1B,CAAC;AAAA,QACL;AAAA,QAEA,kBAAiB;AACb,gBAAMC,MAAK,KAAK,QAAQ,cAAc,6CAA6C;AACnF,cAAIA,QAAO,MAAM;AAAE;AAAA,UAAQ;AAC3B,eAAK,cAAc,IAAI,gBAAAC;AAAA,YACnBD;AAAA,YACA;AAAA,cACI,WAAW;AAAA,cACX,YAAY;AAAA,gBACR,gBAAgB;AAAA,gBAChB,gBAAgB;AAAA,cACpB;AAAA,cACA,2BAA2B,SAAS,SAAS;AACzC,sBAAM,iBAAiB,KAAK,OAAO;AACnC,uBAAO;AAAA,kBACH,QAAQ,SAAS,EAAE,WAAW,GAAGE,OAAM;AACnC,wBAAI,OAAO;AACX,wBAAIA,MAAK,UAAU,IAAI;AACnB,6BAAO,eAAaA,MAAK,QAAM;AAAA,oBACnC;AACA,2BAAO;AAAA,sBACH,oGAGA,OAAO,WAAW,IAAI,IACtB,MACA,OAAO,WAAW,UAAU,IAC5B,MACA;AAAA,wBACIA,MAAK,WACC,WAAW,eACX,WAAW;AAAA,sBACrB,IACA,oDAEA,OAAO,cAAc,IACrB,0EAGA;AAAA,wBACIA,MAAK,WACC,8CACA;AAAA,sBACV,IACA,0CAEA,OAAOA,MAAK,EAAE,IACd,8CAEA,OAAOA,MAAK,KAAK,IACjB,kCAEA;AAAA,wBACIA,MAAK,UAAU,IAAI,oBAAoB;AAAA,sBAC3C,IACA,+FAE+B,OAAK,aACpC,OAAOA,MAAK,KAAK,IACjB;AAAA,oBAGJ;AAAA,kBACJ;AAAA,gBACJ;AAAA,cACJ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,QAEA,WAAWC,IAAG;AACV,cAAI,OAAOA,GAAE,OAAO,SAAS,KAAK,kBAAkB,QAAQ;AAC5D,cAAI,OAAO;AACX,gBAAM,aAAa,GAAG,IAAI,IAAI,IAAI;AAClC,kBAAQ,IAAI,qBAAqB,IAAI;AACrC,eAAK,kBAAkB,YAAY;AAAA,QAEvC;AAAA,QAEA,4BAA4BJ,QAAO;AAC/B,cAAI,eAAe,KAAK,QAAQ,iBAAiB,4CAA4C;AAC7F,uBAAa,QAAQ,SAASK,UAAS;AACnC,YAAAA,SAAQ,MAAM,QAAQL;AAAA,UAC1B,CAAC;AAAA,QACL;AAAA,MACJ;AAnKI,oBADG,oCACI,WAAU,CAAC,kBAAkB,aAAa;AAAA;AAAA;;;ACNrD,MAIO;AAJP;AAAA;AAAA;AAAA;AACA;AACA;AAEA,MAAO,mCAAP,cAA6B,WAAW;AAAA,QAGpC,cAAc,OAAO;AACjB,gBAAM,eAAe;AACrB,cAAI,KAAK,iBAAiB;AACtB,kBAAMM,OAAM,MAAM,cAAc,QAAQ;AACxC,gBAAIA,MAAK;AACL,oBAAM,cAAc,UAAU,OAAO,QAAQ;AAC7C,mBAAK,aAAa,OAAOA,IAAG,EAAE;AAAA,YAClC;AAAA,UACJ;AAAA,QACJ;AAAA,QAEA,sBAAsB,OAAO;AACzB,gBAAM,eAAe;AACrB,cAAI,KAAK,iBAAiB;AACtB,iBAAK,aAAa,sBAAsB,KAAK;AAAA,UACjD;AAAA,QACJ;AAAA,QAEA,UAAU;AACN,eAAK,OAAO;AAAA,QAChB;AAAA,QAEA,aAAa;AACT,eAAK,QAAQ;AAAA,QACjB;AAAA,QAEA,SAAS;AAEL,qCAAkB,aAAa,KAAK,OAAO;AAC3C,eAAK,eAAe;AAAA,QACxB;AAAA,QAEA,UAAU;AAAA,QAEV;AAAA,QAEA,aAAa,OAAM;AACf,gBAAMC,SAAQ,YAAY,QAAQ;AAClC,gBAAM,aAAa;AACnB,gBAAM,cAAc,2BAAkB,gBAAgBA,QAAM,SAAU,OAAOC,IAAE;AAC3E,uBAAW,0BAA0B,KAAK;AAAA,UAC9C,CAAC;AACD,eAAK,aAAa,kBAAM,MAAM,eAAe;AAAA,YACzC,UAAU,SAAS;AAAA,YACnB,SAAS;AAAA,YACT,SAAS;AAAA,YACT,WAAW;AAAA,YACX,cAAc;AAAA,YACd,UAAU;AAAA,YACV,OAAO;AAAA,YACP,aAAa;AAAA,YACb,OAAO;AAAA,YACP,SAAS,UAAU;AACf,uBAAS,QAAQ;AAAA,YACrB;AAAA,UACJ,CAAC;AAAA,QACL;AAAA,QAEA,0BAA0B,OAAM;AAC5B,gBAAM,aAAa,KAAK,QAAQ,cAAc,iBAAiB;AAC/D,gBAAM,UAAU,KAAK,QAAQ,cAAc,+BAA+B;AAC1E,qBAAW,YAAY,MAAM;AAC7B,kBAAQ,QAAQ,MAAM;AAAA,QAC1B;AAAA,QAEA,iBAAgB;AACZ,gBAAM,YAAY,KAAK,QAAQ,cAAc,iBAAiB;AAC9D,cAAI,cAAc,MAAM;AAAE;AAAA,UAAQ;AAClC,gBAAM,uBAAuB,IAAI,aAAa,SAAS;AACvD,gBAAM,aAAa;AACnB,+BAAqB,GAAG,yBAAyB,WAAW;AACxD,uBAAW,QAAQ,cAAc,mDAAmD,EAAE,QAAQ;AAAA,UAClG,CAAC;AAAA,QACL;AAAA,MACJ;AA5EI,oBADG,kCACI,WAAU,CAAC,QAAQ;AAAA;AAAA;;;ACL9B,MAEO;AAFP;AAAA;AAAA;AAAA;AACA,MAAAC;AACA,MAAO,gCAAP,cAA6B,WAAW;AAAA,QAGpC,UAAU;AACN,cAAI,KAAK,iBAAgB;AACrB,qBAAS,MAAM,EAAE,SAAS,KAAK,gBAAgB,CAAC;AAAA,UACpD;AAAA,QACJ;AAAA,QAEA,aAAa;AACV,kBAAQ,IAAI,YAAY;AACvB,eAAK,gBAAgB,MAAM,SAAS;AACpC,eAAK,gBAAgB,MAAM,iBAAiB;AAC5C,eAAK,gBAAgB,MAAM,kBAAkB;AAC7C,eAAK,gBAAgB,QAAQ;AAAA,QACjC;AAAA,QAEA,aAAa;AACT,kBAAQ,IAAI,YAAY;AACxB,eAAK,gBAAgB,MAAM,SAAS;AACpC,eAAK,gBAAgB,MAAM,iBAAiB;AAC5C,eAAK,gBAAgB,MAAM,kBAAkB;AAC7C,eAAK,gBAAgB,QAAQ;AAAA,QACjC;AAAA,QAEA,IAAI,kBAAkB;AAClB,cAAI,CAAC,KAAK;AAA0B,mBAAO;AAC3C,iBAAO,KAAK;AAAA,QAChB;AAAA,MACJ;AA5BI,oBADG,+BACI,WAAU,CAAC,iBAAiB;AAAA;AAAA;;;ACHvC,MAIO;AAJP;AAAA;AAAA;AAAA;AACA;AAGA,MAAO,yCAAP,cAA6B,WAAW;AAAA,QAEpC,UAAU;AACN,eAAK,OAAO;AAAA,QAChB;AAAA,QAEA,aAAa;AACT,eAAK,QAAQ;AAAA,QACjB;AAAA,QAEA,SAAS;AACL,qCAAkB,aAAa,KAAK,OAAO;AAAA,QAC/C;AAAA,QAEA,UAAU;AAAA,QAEV;AAAA,QAEA,cAAc,OAAO;AACjB,gBAAM,eAAe;AACrB,cAAI,KAAK,iBAAiB;AACtB,kBAAMC,OAAM,MAAM,cAAc,QAAQ;AACxC,gBAAIA,MAAK;AACL,oBAAM,cAAc,UAAU,OAAO,QAAQ;AAC7C,mBAAK,aAAa,OAAOA,IAAG,EAAE;AAAA,YAClC;AAAA,UACJ;AAAA,QACJ;AAAA,QAEA,sBAAsB,OAAO;AACzB,gBAAM,eAAe;AACrB,cAAI,KAAK,iBAAiB;AACtB,iBAAK,aAAa,sBAAsB,KAAK;AAAA,UACjD;AAAA,QACJ;AAAA,MAGJ;AApCI,oBADG,wCACI,WAAU,CAAC,QAAQ;AAAA;AAAA;;;ACL9B,MACO;AADP;AAAA;AAAA;AAAA;AACA,MAAO,2BAAP,cAA6B,WAAW;AAAA,QAAxC;AAAA;AAqBI,4CAAa,CAACC,OAAM;AAChB,mBAAO,SAAS,OAAOA,GAAE,cAAc,QAAQ;AAAA,UACnD;AAAA;AAAA,QArBA,UAAU;AACN,eAAK,UAAU;AACf,iBAAO,iBAAiB,cAAc,KAAK,UAAU,KAAK,IAAI,GAAG,KAAK;AAAA,QAC1E;AAAA,QAEA,aAAa;AACT,iBAAO,oBAAoB,cAAc,KAAK,UAAU,KAAK,IAAI,GAAG,KAAK;AAAA,QAC7E;AAAA,QAEA,YAAY;AACR,cAAIC,QAAO,OAAO,SAAS;AAC3B,cAAIA,OAAM;AACN,gBAAI,MAAM,KAAK,WAAW,cAAc,mBAAmBA,KAAI,IAAI;AACnE,gBAAI,KAAK;AACL,kBAAI,UAAU,IAAI,GAAG,EAAE,KAAK;AAAA,YAChC;AAAA,UACJ;AAAA,QACJ;AAAA,MAKJ;AAvBI,oBADG,0BACI,WAAU,CAAC,MAAM;AAAA;AAAA;;;ACF5B,MAEO;AAFP;AAAA;AAAA;AAAA;AAEA,MAAO,iCAAP,cAA6B,WAAW;AAAA,QACpC,UAAU;AAAA,QACV;AAAA,MAEJ;AAAA;AAAA;;;ACNA,MAEO;AAFP;AAAA;AAAA;AAAA;AAEA,MAAO,gCAAP,cAA6B,WAAW;AAAA,QAAxC;AAAA;AAKI,4CAAa,CAACC,OAAM;AAChB,YAAAA,GAAE,eAAe;AACjB,oBAAQ,IAAI,YAAY;AAExB,oBAAQ,IAAI,KAAK,OAAO;AAAA,UAE5B;AAAA;AAAA,QATA,UAAU;AAAA,QACV;AAAA,QAUA,IAAI,UAAU;AACV,iBAAO,KAAK;AAAA,QAChB;AAAA,MAEJ;AAhBI,oBADG,+BACI,UAAS,EAAE,KAAK,OAAO;AAAA;AAAA;;;ACHlC,MAEO;AAFP;AAAA;AAAA;AAAA;AAEA,MAAO,yCAAP,cAA6B,WAAW;AAAA,QAAxC;AAAA;AAkDI,oDAAqB,CAAC,UAAU;AAAA,UAChC;AAAA;AAAA,QAlDA,UAAU;AACN,eAAK,SAAS,IAAI,OAAO,KAAK,OAAO;AACrC,gBAAM,iBAAiB,SAAS,cAAc,8BAA8B,EAAE,aAAa,SAAS;AACpG,eAAK,WAAW,IAAI,iBAAiB,CAAC,eAAe,aAAa;AAC9D,qBAAQ,YAAY,eAAe;AAC/B,kBAAI,SAAS,SAAS,aAAa;AAC/B,sBAAM,aAAa,SAAS,OAAO,cAAc,uBAAuB,cAAc,EAAE;AACxF,oBAAI,YAAY;AACZ,uBAAK,OAAO,OAAO,UAAU;AAC7B,wBAAM,WAAW,WAAW,cAAc,eAAe;AACzD,uBAAK,aAAa;AAClB,uBAAK,eAAe,QAAQ;AAC5B,uBAAK,SAAS,WAAW;AAAA,gBAC7B;AAAA,cACJ;AAAA,YACJ;AAAA,UACJ,CAAC;AACD,eAAK,SAAS,QAAQ,KAAK,SAAS,EAAE,WAAW,MAAM,SAAS,KAAK,CAAC;AAAA,QAC1E;AAAA,QAEA,gBAAgB,OAAO;AACnB,gBAAM,eAAe;AACrB,cAAI,WAAW,MAAM,cAAc,QAAQ,YAAY;AACvD,eAAK,OAAO,OAAO,QAAQ;AAAA,QAC/B;AAAA,QAEA,kBAAkB,OAAO;AACrB,eAAK,cAAc,MAAM,aAAa;AAAA,QAC1C;AAAA,QAEA,cAAcC,UAAS;AACnB,cAAI,KAAK,YAAY;AACjB,iBAAK,kBAAkB,KAAK,UAAU;AAAA,UAC1C;AAEA,eAAK,aAAaA;AAClB,eAAK,eAAe,KAAK,UAAU;AAAA,QACvC;AAAA,QAEA,eAAeA,UAAS;AACpB,UAAAA,SAAQ,UAAU,IAAI,cAAc;AACpC,UAAAA,SAAQ,UAAU,OAAO,eAAe;AAAA,QAC5C;AAAA,QAEA,kBAAkBA,UAAS;AACvB,UAAAA,SAAQ,UAAU,OAAO,cAAc;AACvC,UAAAA,SAAQ,UAAU,IAAI,eAAe;AAAA,QACzC;AAAA,MAIJ;AAAA;AAAA;;;ACtDA,MACAC,iBAGO;AAJP;AAAA;AAAA;AAAA;AACA,MAAAA,kBAAoB;AACpB;AACA;AACA,MAAO,iCAAP,cAA6B,WAAW;AAAA,QACpC,UAAU;AACN,eAAK,OAAO;AAAA,QAChB;AAAA,QAEA,aAAa;AACT,cAAI,KAAK,SAAS;AACd,iBAAK,QAAQ,QAAQ;AAAA,UACzB;AACA,cAAI,KAAK,QAAQ;AACb,iBAAK,OAAO,QAAQ;AAAA,UACxB;AAAA,QACJ;AAAA,QAEA,SAAS;AACL,+BAAS,KAAK,QAAQ;AACtB,gBAAM,UAAW,KAAK,QAAQ,cAAc,uDAAuD;AACnG,eAAK,cAAc,OAAO;AAC1B,gBAAM,aAAc,KAAK,QAAQ,cAAc,4CAA4C;AAC3F,eAAK,YAAY,UAAU;AAC3B,gBAAM,YAAa,KAAK,QAAQ,cAAc,iBAAiB;AAC/D,eAAK,WAAW,SAAS;AAAA,QAC7B;AAAA,QAEA,WAAW,WAAU;AACjB,gBAAM,mBAAkB,IAAI,aAAa,SAAS;AAClD,gBAAM,aAAa;AACnB,2BAAiB,GAAG,yBAAyB,WAAW;AACpD,uBAAW,QAAQ,cAAc,0CAA0C,EAAE,QAAQ;AAAA,UACzF,CAAC;AAAA,QACL;AAAA,QAEA,YAAY,WAAU;AAClB,eAAK,UAAU,IAAI,gBAAAC,QAAQ,WAAU;AAAA,YACjC,WAAW;AAAA,UACf,CAAC;AAAA,QACL;AAAA,QAEA,cAAc,WAAW;AACrB,eAAK,SAAS,2BAAkB,cAAc,SAAS;AAAA,QAC3D;AAAA,QAEA,IAAI,WAAW;AACX,iBAAO,KAAK,QAAQ,cAAc,UAAU;AAAA,QAChD;AAAA,MAEJ;AAAA;AAAA;;;AClDA,MAIO;AAJP;AAAA;AAAA;AAAA;AACA,MAAAC;AACA,MAAAC;AACA;AACA,MAAO,6BAAP,cAA6B,WAAW;AAAA,QAAxC;AAAA;AAWE,wCAAS,CAAC,UAAU;AAClB,kBAAM,MAAM,IAAI,IAAI,KAAK,SAAS;AAClC,gBAAI,aAAa,OAAO,UAAU,KAAK,WAAW;AAClD,iBAAK,oBAAoB,UAAU,OAAO,QAAQ;AAClD,iBAAK,kBAAkB,UAAU,IAAI,QAAQ;AAC7C,gBAAI,IAAI,SAAS,CAAC,EAAE,KAAK,cAAY;AACnC,kBAAI,SAAS,IAAI;AACf,qBAAK,oBAAoB,UAAU,IAAI,QAAQ;AAC/C,oBAAI,KAAK,gBAAgB,IAAI;AAC3B,uBAAK,kBAAkB,UAAU,IAAI,QAAQ;AAAA,gBAC/C,OAAO;AACL,uBAAK,kBAAkB,UAAU,OAAO,QAAQ;AAAA,gBAClD;AAAA,cACF,OAAO;AACL,wBAAQ,IAAI,WAAW,QAAQ;AAAA,cACjC;AAAA,YACF,CAAC;AAAA,UACH;AAEA,6CAAc,CAAC,UAAU;AACvB,iBAAK,kBAAkB,QAAQ;AAC/B,iBAAK,OAAO,KAAK;AAAA,UACnB;AAEA,4CAAa,CAAC,UAAU;AACtB,kBAAM,iBAAiB,MAAM;AAC7B,kBAAM,UAAU,2BAAkB,WAAW;AAC7C,2BAAe,YAAY,OAAO;AAClC,kBAAM,MAAM,IAAI,IAAI,KAAK,aAAa;AACtC,kBAAM,aAAa,eAAe,QAAQ;AAC1C,kBAAM,OAAO,eAAe;AAC5B,kBAAM,IAAI,SAAS,GAAG;AAAA,cACpB,MAAM,KAAK,UAAU,EAAE,oBAAoB,EAAE,KAAW,GAAG,aAAa,WAAW,CAAC;AAAA,cACpF,SAAS;AAAA,gBACP,gBAAgB;AAAA,cAClB;AAAA,YACF,CAAC,EAAE,KAAK,cAAY;AAClB,kBAAI,CAAC,SAAS,IAAI;AAChB,wBAAQ,YAAY,cAAc;AAAA,cACpC,OAAO;AACL,wBAAQ,IAAI,qBAAqB;AAAA,cACnC;AAAA,YACF,CAAC;AAAA,UAEH;AAAA;AAAA,QAhDA,UAAU;AACR,sBAAY,MAAM,EAAE,MAAM,IAAI,CAAC;AAAA,QACjC;AAAA,QAgDA,IAAI,cAAc;AAChB,iBAAO,KAAK,kBAAkB;AAAA,QAChC;AAAA,QAEA,IAAI,YAAY;AACd,iBAAO,KAAK;AAAA,QACd;AAAA,QAEA,IAAI,gBAAgB;AAClB,iBAAO,KAAK;AAAA,QACd;AAAA,MAEF;AApEE,oBADK,4BACE,WAAU,CAAC,eAAe,eAAe,eAAe;AAC/D,oBAFK,4BAEE,UAAS,EAAE,WAAW,QAAQ,eAAe,OAAO;AAE3D,oBAJK,4BAIE,aAAY;AAAA,QACjB;AAAA,MACF;AAAA;AAAA;;;ACVF,MAGO;AAHP;AAAA;AAAA;AAAA;AACA,MAAAC;AACA;AACA,MAAO,qCAAP,cAA6B,WAAW;AAAA,QAAxC;AAAA;AAUI,mDAAoB,CAACC,OAAM;AACvB,YAAAA,GAAE,eAAe;AACjB,gBAAI,OAAOA,GAAE,OAAO;AACpB,gBAAI,MAAM,IAAI,IAAIA,GAAE,OAAO,QAAQ,GAAG;AACtC,gBAAI,aAAa,IAAI,QAAQ,IAAI;AAEjC,qCAAM,UAAU,SAAS,QAAQ,gBAAgB;AACjD,kBAAM,UAAU,IAAI,IAAI,SAAS,GAAG,EAAE,cAAc,eAAe,CAAC;AACpE,oBAAQ,KAAK,CAAC,aAAa;AACvB,uCAAM,UAAU,SAAS,QAAQ,YAAY,KAAK;AAAA,YACtD,CAAC;AAAA,UACL;AAAA;AAAA,QAnBA,UAAU;AACN,eAAK,OAAO;AAAA,QAChB;AAAA,QAEA,SAAS;AAAA,QACT;AAAA,QAgBA,IAAI,aAAa;AACb,iBAAO,KAAK;AAAA,QAChB;AAAA,MAEJ;AA1BI,oBADG,oCACI,WAAU,CAAE,YAAa;AAAA;AAAA;;;ACJpC,MACAC,iBAEO;AAHP;AAAA;AAAA;AAAA;AACA,MAAAA,kBAAoB;AACpB;AACA,MAAO,gCAAP,cAA6B,WAAW;AAAA,QAEpC,UAAU;AACN,eAAK,OAAO;AAAA,QAChB;AAAA,QAEA,SAAS;AACL,eAAK,mBAAmB;AACxB,eAAK,cAAc;AAAA,QACvB;AAAA,QAEA,qBAAqB;AACjB,gBAAMC,MAAK,KAAK,QAAQ,cAAc,6BAA6B;AACnE,cAAIA,QAAO,MAAM;AAAE;AAAA,UAAQ;AAC3B,eAAK,iBAAiB,IAAI,gBAAAC,QAAQD,KAAI;AAAA,YAClC,eAAe;AAAA,YACf,kBAAkB;AAAA,YAClB,WAAW;AAAA,YACX,kBAAkB;AAAA,YAClB,cAAc;AAAA,UAClB,CAAC;AAAA,QACL;AAAA,QAEA,gBAAe;AACX,gBAAM,UAAW,KAAK,QAAQ,cAAc,4BAA4B;AACxE,cAAI,YAAY,MAAM;AAAE;AAAA,UAAQ;AAChC,eAAK,SAAS,2BAAkB,cAAc,OAAO;AAAA,QACzD;AAAA,MACJ;AA3BI,oBADG,+BACI,WAAU,CAAC,iBAAiB,aAAa;AAAA;AAAA;;;ACJpD,MAEO;AAFP;AAAA;AAAA;AAAA;AAEA,MAAO,kCAAP,cAA6B,WAAW;AAAA,QAItC,UAAU;AACR,eAAK,OAAO;AAAA,QACd;AAAA,QAEA,aAAa;AACX,eAAK,QAAQ;AAAA,QACf;AAAA,QAEA,SAAS;AACP,cAAI,OAAO,OAAO,KAAK,sBAAsB;AAAA,QAC/C;AAAA,QAEA,UAAU;AAAA,QACV;AAAA,MAEF;AAjBE,oBAFK,iCAEE,WAAU,CAAC,kBAAkB;AAAA;AAAA;;;ACJtC,MAEO;AAFP;AAAA;AAAA;AAAA;AACA;AACA,MAAO,uCAAP,cAA6B,WAAW;AAAA,QACpC,UAAU;AACN,eAAK,OAAO;AAAA,QAChB;AAAA,QAEA,SAAS;AACL,+BAAS,KAAK,QAAQ;AACtB,gBAAM,YAAa,KAAK,QAAQ,cAAc,iBAAiB;AAC/D,eAAK,WAAW,SAAS;AAAA,QAC7B;AAAA,QAEA,WAAW,WAAU;AACjB,gBAAM,mBAAkB,IAAI,aAAa,SAAS;AAClD,gBAAM,aAAa;AACnB,2BAAiB,GAAG,yBAAyB,WAAW;AACpD,uBAAW,QAAQ,cAAc,+BAA+B,EAAE,QAAQ;AAAA,UAC9E,CAAC;AAAA,QACL;AAAA,QAEA,IAAI,WAAW;AACX,iBAAO,KAAK,QAAQ,cAAc,UAAU;AAAA,QAChD;AAAA,MAEJ;AAAA;AAAA;;;ACzBA,MAGO;AAHP;AAAA;AAAA;AAAA;AACA;AACA;AACA,MAAO,qCAAP,cAA6B,WAAW;AAAA,QAAxC;AAAA;AAuDI,mDAAoB,CAAC,UAAU;AAC3B,kBAAM,cAAc,MAAM,OAAO,QAAQ;AACzC,iBAAK,2BAA2B,WAAW;AAC3C,kBAAM,aAAa,MAAM,OAAO,QAAQ;AACxC,kBAAM,gBAAgB,KAAK,QAAQ,cAAc,UAAU;AAC3D,0BAAc,QAAQ;AAAA,UAC1B;AAAA;AAAA,QA3DA,UAAU;AACN,kBAAQ,IAAI,sCAAsC;AAClD,eAAK,OAAO;AAAA,QAChB;AAAA,QAEA,SAAS;AACL,+BAAS,KAAK,QAAQ;AACtB,eAAK,eAAe;AACpB,eAAK,cAAc;AAEnB,gBAAM,qBAAqB,KAAK,QAAQ,cAAc,wCAAwC;AAC9F,cAAI,oBAAoB;AACpB,kBAAM,cAAc,mBAAmB;AACvC,iBAAK,2BAA2B,WAAW;AAAA,UAC/C;AAAA,QACJ;AAAA,QAEA,IAAI,WAAW;AACX,iBAAO,KAAK,QAAQ,cAAc,UAAU;AAAA,QAChD;AAAA,QAEA,gBAAe;AACX,gBAAM,UAAW,KAAK,QAAQ,cAAc,iCAAiC;AAC7E,cAAI,YAAY,MAAM;AAAE;AAAA,UAAQ;AAChC,eAAK,SAAS,2BAAkB,cAAc,OAAO;AAAA,QACzD;AAAA,QAEA,iBAAgB;AACZ,gBAAM,YAAY,KAAK,QAAQ,cAAc,iBAAiB;AAC9D,cAAI,cAAc,MAAM;AAAE;AAAA,UAAQ;AAClC,gBAAM,uBAAuB,IAAI,aAAa,SAAS;AACvD,gBAAM,aAAa;AACnB,+BAAqB,GAAG,yBAAyB,WAAW;AACxD,uBAAW,QAAQ,cAAc,mDAAmD,EAAE,QAAQ;AAAA,UAClG,CAAC;AAAA,QACL;AAAA,QAEA,2BAA2B,aAAa;AACpC,gBAAM,aAAa,KAAK,QAAQ,cAAc,mDAAmD,WAAW,QAAQ;AACpH,cAAI,eAAe,MAAM;AAAE;AAAA,UAAQ;AACnC,cAAI,gBAAgB,QAAQ;AACxB,uBAAW,cAAc;AAAA,UAC7B,WAAW,gBAAgB,mBAAmB;AAC1C,uBAAW,cAAc;AAAA,UAC7B,WAAW,gBAAgB,eAAe;AACtC,uBAAW,cAAc;AAAA,UAC7B,WAAW,gBAAgB,SAAS;AAChC,uBAAW,cAAc;AAAA,UAC7B,OAAO;AACH,uBAAW,cAAc;AAAA,UAC7B;AAAA,QACJ;AAAA,QAUA,cAAc,OAAO;AACjB,gBAAM,eAAe;AACrB,cAAI,KAAK,iBAAiB;AACtB,kBAAME,OAAM,MAAM,cAAc,QAAQ;AACxC,gBAAIA,MAAK;AACL,oBAAM,cAAc,UAAU,OAAO,QAAQ;AAC7C,mBAAK,aAAa,OAAOA,IAAG,EAAE;AAAA,YAClC;AAAA,UACJ;AAAA,QACJ;AAAA,MAEJ;AAzEI,oBADG,oCACI,WAAU,CAAC,QAAQ;AAAA;AAAA;;;ACJ9B,MAIO;AAJP;AAAA;AAAA;AAAA;AACA,MAAAC;AACA;AAEA,MAAO,mCAAP,cAA6B,WAAW;AAAA,QAAxC;AAAA;AAKI,gDAAiB,CAAC,UAAU;AACxB,kBAAM,eAAe;AACrB,gBAAI,CAAC,KAAK;AAA2B;AACrC,kBAAM,aAAa,MAAM,OAAO;AAChC,kBAAM,UAAU,2BAAkB,WAAW;AAC7C,kBAAM,iBAAiB,MAAM;AAC7B,kBAAM,kBAAkB,eAAe;AACvC,2BAAe,YAAY,OAAO;AAClC,kBAAM,WAAW,IAAI,SAAS;AAC9B,qBAAS,OAAO,0BAA0B,UAAU;AACpD,uBAAW,MAAM;AACb,oBAAM,UAAU,KAAK,KAAK,wBAAwB,EAAE,MAAM,UAAU,cAAc,eAAe,CAAC;AAClG,sBAAQ,KAAK,CAAC,aAAa;AACvB,wBAAQ,YAAY,cAAc;AAClC,+BAAe,UAAU;AAAA,cAC7B,CAAC,EAAE,MAAM,CAACC,WAAU;AAChB,wBAAQ,YAAY,cAAc;AAClC,+BAAe,UAAU,CAAC;AAAA,cAC9B,CAAC;AAAA,YACL,GAAG,GAAG;AAAA,UACV;AAAA;AAAA,QAvBA,UAAU;AAAA,QACV;AAAA,MAwBJ;AA1BI,oBADG,kCACI,UAAS,EAAE,mBAAmB,OAAO;AAAA;AAAA;;;ACLhD,MACO;AADP;AAAA;AAAA;AAAA;AACA,MAAO,kCAAP,cAA6B,WAAW;AAAA,QAAxC;AAAA;AAQI,yDAA0B,CAAC,UAAU;AAEjC,kBAAM,OAAO,cAAc,cAAc,iBAAiB,UAAU,EAAE,QAAQ,CAAC,SAAS;AACpF,eAAC,UAAU,qBAAqB,EAAE,QAAQ,eAAa;AACnD,qBAAK,UAAU,OAAO,SAAS;AAAA,cACnC,CAAC;AAAA,YACL,CAAC;AAED,gBAAI,aAAa,MAAM;AACvB,aAAC,UAAU,qBAAqB,EAAE,QAAQ,eAAa;AACnD,yBAAW,UAAU,IAAI,SAAS;AAAA,YACtC,CAAC;AAAA,UACL;AAAA;AAAA,QAnBA,UAAU;AACN,eAAK,OAAO;AAAA,QAChB;AAAA,QAEA,SAAS;AAAA,QACT;AAAA,MAeJ;AAAA;AAAA;;;ACtBA,MAEO;AAFP;AAAA;AAAA;AAAA;AACA;AACA,MAAO,kCAAP,cAA6B,WAAW;AAAA,QACpC,UAAU;AACN,eAAK,OAAO;AAAA,QAChB;AAAA,QAEA,SAAS;AACL,+BAAS,KAAK,QAAQ;AACtB,eAAK,eAAe;AAAA,QACxB;AAAA,QAEA,IAAI,WAAW;AACX,iBAAO,KAAK,QAAQ,cAAc,UAAU;AAAA,QAChD;AAAA,QAEA,iBAAgB;AACZ,gBAAM,YAAY,KAAK,QAAQ,cAAc,iBAAiB;AAC9D,cAAI,cAAc,MAAM;AAAE;AAAA,UAAQ;AAClC,gBAAM,uBAAuB,IAAI,aAAa,SAAS;AACvD,gBAAM,aAAa;AACnB,+BAAqB,GAAG,yBAAyB,WAAW;AACxD,uBAAW,QAAQ,cAAc,oCAAoC,EAAE,QAAQ;AAAA,UACnF,CAAC;AAAA,QACL;AAAA,MAEJ;AAAA;AAAA;;;AC1BA,MAIO;AAJP;AAAA;AAAA;AAAA;AACA;AACA,MAAAC;AAEA,MAAO,8BAAP,cAA6B,WAAW;AAAA,QAAxC;AAAA;AAUI,gDAAiB,CAAC,UAAU;AACxB,kBAAM,YAAY,OAAO,QAAQ,6CAA6C;AAC9E,gBAAI,CAAC,WAAW;AACZ,oBAAM,eAAe;AACrB,oBAAM,OAAO,UAAU,CAAC,MAAM,OAAO;AACrC;AAAA,YACJ;AAEA,kBAAM,UAAU,KAAK;AACrB,kBAAM,cAAc,MAAM,OAAO,QAAQ;AACzC,kBAAM,UAAU,2BAAkB,WAAW;AAC7C,kBAAM,iBAAiB,MAAM;AAC7B,2BAAe,YAAY,OAAO;AAClC,kBAAM,WAAW,IAAI,SAAS;AAC9B,qBAAS,OAAO,iBAAiB,WAAW;AAC5C,kBAAM,SAAS,MAAM,OAAO,UAAU,WAAW;AACjD,qBAAS,OAAO,mBAAmB,MAAM;AACzC,kBAAM,MAAM,GAAG,OAAO,IAAI,WAAW;AACrC,uBAAW,MAAY;AACnB,kBAAI;AACA,sBAAM,IAAI,KAAK,EAAE,MAAM,UAAU,cAAc,eAAe,CAAC;AAAA,cACnE,SAASC,QAAO;AACZ,wBAAQ,MAAM,2BAA2BA,MAAK;AAAA,cAClD;AAAA,YACJ,IAAG,GAAG;AAAA,UACV;AAAA;AAAA,QAjCA,UAAU;AACN,eAAK,OAAO;AAAA,QAChB;AAAA,QAEA,SAAS;AACL,iBAAO,qBAAqB,KAAK,SAAS,4BAA4B;AAAA,QAC1E;AAAA,MA4BJ;AAnCI,oBADG,6BACI,UAAS,EAAE,KAAK,OAAO;AAAA;AAAA;;;ACLlC,MAGO;AAHP;AAAA;AAAA;AAAA;AACA,MAAAC;AAEA,MAAO,4CAAP,cAA6B,2BAAkB;AAAA,QAA/C;AAAA;AA8BI,0CAAW,CAAC,UAAU;AAClB,kBAAM,QAAQ,MAAM,OAAO;AAC3B,kBAAM,WAAW,MAAM,OAAO,QAAQ;AACtC,kBAAM,gBAAgB,KAAK,QAAQ,cAAc,cAAc,QAAQ,EAAE;AACzE,kBAAM,OAAO,cAAc,SAAS,CAAC,EAAE;AACvC,iBAAK,QAAQ,cAAc,SAAS,QAAQ,EAAE,EAAE,SAAS,CAAC,EAAE,UAAU,OAAO,UAAU;AACvF,gBAAI,OAAO;AACP,mBAAK,aAAa,KAAK,EAAE,MAAM,UAAU,KAAW,CAAC;AACrD,4BAAc,UAAU,OAAO,QAAQ;AACvC,mBAAK,gBAAgB,UAAU,OAAO,QAAQ;AAAA,YAClD,OAAO;AACH,mBAAK,eAAe,KAAK,aAAa,OAAO,UAAQ,KAAK,SAAS,QAAQ;AAC3E,4BAAc,UAAU,IAAI,QAAQ;AACpC,kBAAI,KAAK,aAAa,WAAW,GAAG;AAChC,qBAAK,gBAAgB,UAAU,IAAI,QAAQ;AAAA,cAC/C;AAAA,YACJ;AAAA,UACJ;AAEA,4CAAa,CAAC,UAAU;AACpB,kBAAM,OAAO,MAAM,OAAO;AAC1B,kBAAM,WAAW,MAAM,OAAO,QAAQ;AACtC,iBAAK,eAAe,KAAK,aAAa,IAAI,UAAQ;AAC9C,kBAAI,KAAK,SAAS,UAAU;AACxB,qBAAK,OAAO;AAAA,cAChB;AACA,qBAAO;AAAA,YACX,CAAC;AAAA,UACL;AAEA,6CAAc,CAAC,UAAU;AACrB,kBAAM,eAAe;AACrB,gBAAI,KAAK,aAAa,WAAW,KAAK,CAAC,KAAK,wBAAwB;AAChE;AAAA,YACJ;AACA,oBAAQ,IAAI,gBAAgB,KAAK,YAAY;AAC7C,kBAAM,MAAM,IAAI,IAAI,KAAK,cAAc;AACvC,iBAAK,IAAI,SAAS,GAAG;AAAA,cACjB,MAAM,KAAK,UAAU,EAAE,oBAAoB,EAAE,OAAO,KAAK,aAAa,EAAE,CAAE;AAAA,cAC1E,SAAS;AAAA,gBACL,gBAAgB;AAAA,cACpB;AAAA,YACJ,CAAC,EAAE,KAAK,cAAY;AAChB,kBAAI,SAAS,IAAI;AACb,wBAAQ,IAAI,sBAAsB;AAClC,qBAAK,eAAe,CAAC;AAAA,cACzB,OAAO;AACH,wBAAQ,IAAI,qBAAqB;AAAA,cACrC;AAAA,YACJ,CAAC;AAAA,UACL;AAAA;AAAA,QA7EA,UAAU;AACN,eAAK,eAAe,CAAC;AACrB,eAAK,WAAW,IAAI,iBAAiB,CAAC,eAAe,aAAa;AAC9D,qBAAQ,YAAY,eAAe;AAC/B,kBAAI,SAAS,SAAS,aAAa;AAC/B,qBAAK,aAAa,QAAQ,UAAQ;AAC9B,wBAAM,iBAAiB,SAAS,OAAO,cAAc,SAAS,KAAK,IAAI,EAAE;AACzE,sBAAI,gBAAgB;AAChB,mCAAe,SAAS,CAAC,EAAE,UAAU,IAAI,UAAU;AACnD,0BAAM,gBAAgB,SAAS,OAAO,cAAc,cAAc,KAAK,IAAI,EAAE;AAC7E,kCAAc,UAAU,OAAO,QAAQ;AACvC,kCAAc,SAAS,CAAC,EAAE,QAAQ,KAAK;AACvC,0BAAM,eAAe,SAAS,OAAO,cAAc,uBAAuB,KAAK,IAAI,EAAE;AACrF,iCAAa,UAAU;AAAA,kBAC3B;AAAA,gBACJ,CAAC;AAAA,cACL;AAAA,YACJ;AAAA,UACJ,CAAC;AACD,eAAK,SAAS,QAAQ,KAAK,SAAS,EAAE,WAAW,MAAM,SAAS,KAAK,CAAC;AAAA,QAC1E;AAAA,QAEA,aAAa;AACT,eAAK,SAAS,WAAW;AACzB,eAAK,eAAe,CAAC;AAAA,QACzB;AAAA,QAsDA,IAAI,iBAAiB;AACjB,iBAAO,KAAK;AAAA,QAChB;AAAA,MACJ;AApFI,oBADG,2CACI,WAAU,CAAC,WAAW;AAC7B,oBAFG,2CAEI,UAAS,EAAE,gBAAgB,OAAO;AAAA;AAAA;;;ACL7C,MAIO;AAJP;AAAA;AAAA;AAAA,MAAAC;AACA;AACA,MAAAC;AAEA,MAAO,4BAAP,cAA6B,WAAW;AAAA,QAAxC;AAAA;AAcI,wCAAS,CAAC,UAAU;AAChB,kBAAMC,WAAU,QAAQ,MAAM,OAAO,QAAQ;AAC7C,gBAAIA,aAAY,IAAI;AAChB,mBAAK,aAAa,OAAO,iBAAiB;AAAA,YAC9C,OAAO;AACH,mBAAK,aAAa,IAAI,mBAAmB,MAAM,OAAO,KAAK;AAAA,YAC/D;AACA,iBAAK,gBAAgB;AACrB,iBAAK,cAAc;AAAA,UACvB;AAEA,iDAAkB,MAAM;AACpB,iBAAK,UAAU,SAAS,KAAK,aAAa,SAAS;AAAA,UACvD;AAEA,+CAAgB,MAAM;AAClB,iBAAK,oBAAoB,UAAU,OAAO,QAAQ;AAClD,iBAAK,+BAA+B,UAAU,IAAI,QAAQ;AAC1D,gBAAI,KAAK,UAAU,SAAS,CAAC,EAAE,KAAK,cAAY;AAC5C,kBAAI,SAAS,IAAI;AACb,qBAAK,oBAAoB,UAAU,IAAI,QAAQ;AAC/C,oBAAI,KAAK,kBAAkB,UAAU,IAAI;AACrC,uBAAK,+BAA+B,UAAU,OAAO,QAAQ;AAAA,gBACjE;AAAA,cACJ,OAAO;AACH,wBAAQ,IAAI,WAAW,QAAQ;AAAA,cACnC;AAAA,YACJ,CAAC;AAAA,UACL;AAEA,4CAAa,CAAC,UAAU;AACpB,kBAAM,iBAAiB,MAAM;AAC7B,kBAAM,kBAAkB,eAAe;AACvC,iBAAK,aAAa,OAAO,eAAe;AACxC,iBAAK,aAAa,OAAO,oBAAoB;AAC7C,iBAAK,aAAa,OAAO,oBAAoB;AAC7C,iBAAK,aAAa,OAAO,iBAAiB;AAC1C,oBAAQ,iBAAiB;AAAA,cACrB,KAAK;AACD;AAAA,cACJ,KAAK;AACD,qBAAK,aAAa,IAAI,iBAAiB,CAAC;AACxC;AAAA,cACJ,KAAK;AACD,qBAAK,aAAa,IAAI,sBAAsB,CAAC;AAC7C;AAAA,cACJ,KAAK;AACD,qBAAK,aAAa,IAAI,sBAAsB,CAAC;AAC7C;AAAA,cACJ,KAAK;AACD,qBAAK,aAAa,IAAI,mBAAmB,EAAE;AAC3C;AAAA,YACR;AACA,iBAAK,gBAAgB;AACrB,iBAAK,cAAc;AAAA,UACvB;AAEA,8CAAe,CAAC,UAAU;AACtB,kBAAM,iBAAiB,MAAM;AAC7B,kBAAM,kBAAkB,eAAe;AACvC,iBAAK,aAAa,OAAO,gBAAgB;AAEzC,gBAAI,oBAAoB,OAAO;AAC3B,mBAAK,aAAa,OAAO,gBAAgB;AAAA,YAC7C,OACK;AACD,mBAAK,aAAa,IAAI,kBAAkB,eAAe;AAAA,YAC3D;AACA,iBAAK,gBAAgB;AACrB,iBAAK,cAAc;AAAA,UACvB;AAEA,yCAAU,CAAC,UAAU;AACjB,kBAAM,eAAe;AACrB,iBAAK,aAAa,OAAO,iBAAiB;AAC1C,iBAAK,aAAa,OAAO,eAAe;AACxC,iBAAK,aAAa,OAAO,oBAAoB;AAC7C,iBAAK,aAAa,OAAO,oBAAoB;AAC7C,iBAAK,aAAa,OAAO,iBAAiB;AAC1C,iBAAK,kBAAkB,QAAQ;AAC/B,iBAAK,uBAAuB,QAAQ;AACpC,iBAAK,+BAA+B,UAAU,IAAI,QAAQ;AAE1D,gBAAI,KAAK,6BAA6B;AAClC,mBAAK,yBAAyB,QAAQ;AACtC,mBAAK,aAAa,OAAO,gBAAgB;AAAA,YAC7C;AACA,kBAAM,OAAO,WAAW;AACxB,iBAAK,OAAO;AACZ,uBAAW,MAAM;AACb,oBAAM,OAAO,WAAW;AAAA,YAC5B,GAAG,GAAI;AAAA,UACX;AAEA,oDAAqB,CAAC,UAAU;AAC5B,iBAAK,kBAAkB,QAAQ;AAC/B,iBAAK,kBAAkB,MAAM;AAC7B,iBAAK,+BAA+B,UAAU,IAAI,QAAQ;AAC1D,iBAAK,OAAO;AAAA,UAChB;AAAA;AAAA,QAzGA,UAAU;AACN,sBAAY,MAAM,EAAE,MAAM,IAAI,CAAC;AAC/B,eAAK,YAAY,IAAI,IAAI,KAAK,aAAa;AAC3C,eAAK,eAAe,IAAI,gBAAgB;AAAA,QAC5C;AAAA,QAuGA,IAAI,gBAAgB;AAChB,iBAAO,KAAK;AAAA,QAChB;AAAA,MACJ;AArHI,oBADG,2BACI,UAAS,EAAE,eAAe,OAAO;AACxC,oBAFG,2BAEI,WAAU,CAAC,eAAe,iBAAiB,4BAA4B,oBAAoB,oBAAoB;AAEtH,oBAJG,2BAII,aAAY;AAAA,QACf;AAAA,MACJ;AAAA;AAAA;;;ACVJ,MAEO;AAFP;AAAA;AAAA;AAAA;AAEA,MAAO,oCAAP,cAA6B,WAAW;AAAA,QAGtC,UAAU;AACR,gBAAM,MAAM,uEAAuE,KAAK,OAAO;AAC/F,eAAK,sBAAsB,MAAM,iCAAiC,KAAK,OAAO;AAC9E,gBAAM,GAAG,EACJ,KAAK,cAAY;AACd,gBAAI,CAAC,SAAS,IAAI;AACd,oBAAM,IAAI,MAAM,6BAA6B;AAAA,YACjD;AACA,mBAAO,SAAS,KAAK;AAAA,UACzB,CAAC,EACA,KAAK,CAAAC,UAAQ;AACZ,iBAAK,YAAY,OAAO,mCAAmC,KAAK,OAAO;AACvE,iBAAK,YAAY,SAAS;AAC1B,iBAAK,YAAY,cAAcA,MAAK;AAAA,UACtC,CAAC,EAAE,MAAM,CAAAC,WAAS;AAClB,iBAAK,YAAY,OAAO,mCAAmC,KAAK,OAAO;AACvE,iBAAK,YAAY,SAAS;AAC1B,iBAAK,YAAY,cAAc;AAAA,UACnC,CAAC;AAAA,QACH;AAAA,MAEF;AAvBE,oBADK,mCACE,WAAU,CAAE,mBAAmB,OAAQ;AAC9C,oBAFK,mCAEE,UAAS,EAAE,IAAI,OAAO;AAAA;AAAA;;;ACJ/B,MAIO;AAJP;AAAA;AAAA;AAAA;AAEA,MAAAC;AACA;AACA,MAAO,8BAAP,cAA6B,WAAW;AAAA,QAAxC;AAAA;AAOE,qDAAsB,CAAO,YAAY;AACvC,kBAAM,iBAAiB,SAAS,SAAS,EAAE;AAC3C,gBAAI,mBAAmB,IAAI;AACzB,yCAAkB,aAAa,EAAE,MAAM,6CAA6C;AAAA,YACtF,OAAO;AACL,oBAAM,KAAK,aAAa;AAAA,YAC1B;AAAA,UACF;AAEA,+CAAgB,CAAOC,OAAM;AAC3B,YAAAA,GAAE,eAAe;AACjB,kBAAM,WAAW,MAAM,2BAAkB,qBAAqB;AAC9D,gBAAI,aAAa;AAAM;AACvB,mBAAO,SAAS,IAAI,gBAAgB,KAAK,mBAAmB;AAC5D,iBAAK,SAAS,MAAM,SAAS,UAAU;AACvC,kBAAM,UAAU,MAAM,SAAS,WAAW;AAC1C,gBAAI,QAAQ,YAAY,OAAO,EAAE,GAAG;AAClC,qBAAO,SAAS,GAAG,gBAAgB,KAAK,mBAAmB;AAC3D,yCAAkB,aAAa,EAAE,MAAM,6CAA6C;AAAA,YACtF,OAAO;AACL,oBAAM,KAAK,aAAa;AAAA,YAC1B;AAAA,UACF;AAAA;AAAA,QAzBA,UAAU;AAAA,QACV;AAAA,QA2BM,eAAe;AAAA;AACnB,kBAAM,WAAW,MAAM;AAAA,cAAK,GAAG,KAAK,QAAQ;AAAA,cACxC,EAAC,MAAM,KAAK,UAAU,EAAC,MAAM,EAAC,SAAS,KAAK,OAAO,QAAO,EAAC,CAAC,EAAC;AAAA,YACjE;AACA,gBAAI,SAAS,IAAI;AACf,oBAAM,UAAU,MAAM,SAAS;AAC/B,kBAAI;AACF,sBAAM,YAAY,MAAM,KAAK,OAAO,YAAY,OAAO;AACvD,sBAAM,KAAK,KAAK,UAAU;AAAA,kBACxB,MAAM,KAAK,UAAU,EAAC,MAAM,EAAC,WAAsB,SAAS,KAAK,OAAO,QAAO,EAAC,CAAC;AAAA,kBACjF,cAAc;AAAA,gBAChB,CAAC;AAAA,cACH,SAASC,QAAO;AACd,oBAAIA,OAAM,QAAQ,mBAAmB;AACnC,6CAAkB,aAAa,EAAE,MAAM,8BAA8B;AAAA,gBACvE;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA;AAAA,MACF;AAlDE,oBADK,6BACE,WAAU,CAAE,cAAe;AAClC,oBAFK,6BAEE,UAAS,EAAE,KAAK,OAAO;AAAA;AAAA;;;ACNhC,MAEO;AAFP;AAAA;AAAA;AAAA;AAEA,MAAO,mCAAP,cAA6B,WAAW;AAAA,QAEpC,UAAU;AACN,eAAK,oBAAoB;AAAA,QAC7B;AAAA,QAEA,SAAS,OAAO;AACZ,gBAAM,eAAe;AACrB,gBAAM,YAAY,MAAM,cAAc,QAAQ;AAC9C,gBAAM,iBAAiB,KAAK,QAAQ,cAAc,SAAS;AAC3D,cAAI,eAAe,SAAS,GAAG;AAC3B,2BAAe,QAAQ,SAAS,eAAe,KAAK,IAAI;AAAA,UAC5D;AACA,gBAAM,eAAe,eAAe;AACpC,kBAAQ,IAAI,UAAU,YAAY,cAAc,eAAe,KAAK;AACpE,eAAK,oBAAoB;AAAA,QAC7B;AAAA,QAEA,SAAS,OAAO;AACZ,gBAAM,eAAe;AACrB,gBAAM,YAAY,MAAM,cAAc,QAAQ;AAC9C,gBAAM,iBAAiB,KAAK,QAAQ,cAAc,SAAS;AAC3D,yBAAe,QAAQ,SAAS,eAAe,KAAK,IAAI;AACxD,gBAAM,eAAe,eAAe;AACpC,kBAAQ,IAAI,OAAO,YAAY,cAAc,eAAe,KAAK;AACjE,eAAK,oBAAoB;AAAA,QAC7B;AAAA,QAEA,IAAI,OAAO;AACP,iBAAO,KAAK;AAAA,QAChB;AAAA,QAEA,sBAAsB;AAClB,eAAK,gBAAgB,MAAM,KAAK,KAAK,eAAe,EAAE,OAAO,CAAC,OAAO,YAAY;AAC7E,mBAAO,QAAQ,SAAS,QAAQ,cAAc,mBAAmB,EAAE,KAAK;AAAA,UAC5E,GAAE,CAAC;AACH,cAAI,KAAK,iBAAiB,GAAG;AACzB,iBAAK,KAAK,cAAc,sBAAsB,EAAE,WAAW;AAAA,UAC/D,OAAO;AACH,iBAAK,KAAK,cAAc,sBAAsB,EAAE,WAAW;AAAA,UAC/D;AACA,kBAAQ,IAAI,2BAA2B,KAAK,aAAa;AAAA,QAC7D;AAAA,MAEJ;AA3CI,oBADG,kCACI,WAAU,CAAC,QAAQ,UAAU;AAAA;AAAA;;;ACHxC;AAAA;AAAA;AAIA;AAGA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAiBA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA4BA;AAKA;AAIA;AA5FA,yBAAqB,QAAQ,CAAC,OAAM,QAAQ;AACxC,gBAAQ,IAAI,kCAAkC,GAAG;AACjD,oBAAY,SAAS,KAAK,MAAM,UAAU;AAAA,MAC9C,CAAC;AAeD,kBAAY,SAAS,0BAA0B,yCAA8B;AAC7E,kBAAY,SAAS,qBAAqB,0BAAiB;AAC3D,kBAAY,SAAS,sBAAsB,2BAAkB;AAC7D,kBAAY,SAAS,OAAO,2BAAiB;AAC7C,kBAAY,SAAS,uBAAuB,sCAA2B;AACvE,kBAAY,SAAS,kBAAkB,uBAAc;AACrD,kBAAY,SAAS,mBAAmB,wBAAe;AACvD,kBAAY,SAAS,sBAAsB,2BAAkB;AAC7D,kBAAY,SAAS,qBAAqB,0BAAiB;AAC3D,kBAAY,SAAS,qBAAqB,+BAAyB;AACnE,kBAAY,SAAS,WAAW,0BAAiB;AACjD,kBAAY,SAAS,cAAc,6BAA8B;AA4BjE,kBAAY,SAAS,cAAc,6BAAoB;AACvD,kBAAY,SAAS,uBAAuB,sCAA4B;AACxE,kBAAY,SAAS,mBAAmB,kCAAwB;AAChE,kBAAY,SAAS,iBAAiB,gCAAsB;AAC5D,kBAAY,SAAS,SAAS,wBAAe;AAC7C,kBAAY,SAAS,uBAAuB,sCAA2B;AAEvE,kBAAY,SAAS,eAAe,8BAAqB;AACzD,kBAAY,SAAS,cAAc,6BAAoB;AACvD,kBAAY,SAAS,uBAAuB,sCAA4B;AACxE,kBAAY,SAAS,2BAA2B,8BAAoB;AACpE,kBAAY,SAAS,sBAAsB,0BAAiB;AAC5D,kBAAY,SAAS,+BAA+B,kCAAwB;AAC5E,kBAAY,SAAS,0BAA0B,6BAAmB;AAClE,kBAAY,SAAS,4BAA4B,+BAAqB;AACtE,kBAAY,SAAS,iCAAiC,oCAA0B;AAChF,kBAAY,SAAS,mBAAmB,kCAAwB;AAChE,kBAAY,SAAS,4BAA4B,gCAAuB;AACxE,kBAAY,SAAS,2BAA2B,+BAAqB;AACrE,kBAAY,SAAS,2BAA2B,+BAAqB;AACrE,kBAAY,SAAS,uBAAuB,2BAAkB;AAC9D,kBAAY,SAAS,gCAAgC,sCAA2B;AAChF,kBAAY,SAAS,qCAAqC,yCAA8B;AACxF,kBAAY,SAAS,qBAAqB,yBAAgB;AAI1D,kBAAY,SAAS,kBAAkB,iCAAuB;AAK9D,kBAAY,SAAS,YAAY,2BAAkB;AAInD,kBAAY,SAAS,iBAAiB,gCAAsB;AAAA;AAAA;;;ACrG5D;AAAA;AAAA;AAAA;AACA,MAAcC,OAAM;AAAA;AAAA;;;ACIpB,WAAS,WAAW,UAAU,QAAQ;AACpC,QAAI,cAAc,OAAO;AACzB,QAAI;AACJ,QAAI;AACJ,QAAI;AACJ,QAAI;AACJ,QAAI;AAEF,QAAI,OAAO,aAAa,0BAA0B,SAAS,aAAa,wBAAwB;AAChG;AAAA,IACF;AAEE,aAAS,IAAI,YAAY,SAAS,GAAG,KAAK,GAAG,KAAK;AAClD,aAAO,YAAY,CAAC;AACpB,iBAAW,KAAK;AAChB,yBAAmB,KAAK;AACxB,kBAAY,KAAK;AACjB,UAAI,kBAAkB;AACpB,mBAAW,KAAK,aAAa;AAC7B,oBAAY,SAAS,eAAe,kBAAkB,QAAQ;AAC9D,YAAI,cAAc,WAAW;AAC3B,cAAI,KAAK,WAAW,SAAS;AAC3B,uBAAW,KAAK;AAAA,UAEV;AACR,mBAAS,eAAe,kBAAkB,UAAU,SAAS;AAAA,QAC/D;AAAA,MACF,OAAO;AACL,oBAAY,SAAS,aAAa,QAAQ;AAC1C,YAAI,cAAc,WAAW;AAC3B,mBAAS,aAAa,UAAU,SAAS;AAAA,QAC3C;AAAA,MACF;AAAA,IACF;AAGE,QAAI,gBAAgB,SAAS;AAC/B,aAAS,IAAI,cAAc,SAAS,GAAG,KAAK,GAAG,KAAK;AAClD,aAAO,cAAc,CAAC;AACtB,iBAAW,KAAK;AAChB,yBAAmB,KAAK;AACxB,UAAI,kBAAkB;AACpB,mBAAW,KAAK,aAAa;AAC7B,YAAI,CAAC,OAAO,eAAe,kBAAkB,QAAQ,GAAG;AACtD,mBAAS,kBAAkB,kBAAkB,QAAQ;AAAA,QACvD;AAAA,MACF,OAAO;AACL,YAAI,CAAC,OAAO,aAAa,QAAQ,GAAG;AAClC,mBAAS,gBAAgB,QAAQ;AAAA,QACnC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAaA,WAAS,2BAA2B,KAAK;AACvC,QAAI,WAAWC,KAAI,cAAc,UAAU;AAC3C,aAAS,YAAY;AACrB,WAAO,SAAS,QAAQ,WAAW,CAAC;AAAA,EACtC;AAEA,WAAS,wBAAwB,KAAK;AACpC,QAAI,CAAC,OAAO;AACV,cAAQA,KAAI,YAAY;AACxB,YAAM,WAAWA,KAAI,IAAI;AAAA,IAC3B;AACA,QAAI,WAAW,MAAM,yBAAyB,GAAG;AACjD,WAAO,SAAS,WAAW,CAAC;AAAA,EAC9B;AAEA,WAAS,uBAAuB,KAAK;AACnC,QAAI,WAAWA,KAAI,cAAc,MAAM;AACvC,aAAS,YAAY;AACrB,WAAO,SAAS,WAAW,CAAC;AAAA,EAC9B;AASI,WAAS,UAAU,KAAK;AAC1B,UAAM,IAAI,KAAK;AACf,QAAI,sBAAsB;AAIxB,aAAO,2BAA2B,GAAG;AAAA,IACvC,WAAW,mBAAmB;AAC5B,aAAO,wBAAwB,GAAG;AAAA,IACpC;AACA,WAAO,uBAAuB,GAAG;AAAA,EACnC;AAWI,WAAS,iBAAiB,QAAQ,MAAM;AAC1C,QAAI,eAAe,OAAO;AAC1B,QAAI,aAAa,KAAK;AACtB,QAAI,eAAe;AACnB,QAAI,iBAAiB,YAAY;AAC/B,aAAO;AAAA,IACT;AACA,oBAAgB,aAAa,WAAW,CAAC;AACzC,kBAAc,WAAW,WAAW,CAAC;AAKnC,QAAI,iBAAiB,MAAM,eAAe,IAAI;AAE9C,aAAO,iBAAiB,WAAW,YAAY;AAAA,IACjD,WAAW,eAAe,MAAM,iBAAiB,IAAI;AAEnD,aAAO,eAAe,aAAa,YAAY;AAAA,IACjD,OAAO;AACL,aAAO;AAAA,IACT;AAAA,EACF;AAUI,WAAS,gBAAgBC,OAAM,cAAc;AAC/C,WAAO,CAAC,gBAAgB,iBAAiB,WAAWD,KAAI,cAAcC,KAAI,IAAID,KAAI,gBAAgB,cAAcC,KAAI;AAAA,EACtH;AAII,WAAS,aAAa,QAAQ,MAAM;AACtC,QAAI,WAAW,OAAO;AACtB,WAAO,UAAU;AACf,UAAI,YAAY,SAAS;AACzB,WAAK,YAAY,QAAQ;AACzB,iBAAW;AAAA,IACb;AACA,WAAO;AAAA,EACT;AAEA,WAAS,oBAAoB,QAAQ,MAAMA,OAAM;AAC/C,QAAI,OAAOA,KAAI,MAAM,KAAKA,KAAI,GAAG;AAC/B,aAAOA,KAAI,IAAI,KAAKA,KAAI;AACxB,UAAI,OAAOA,KAAI,GAAG;AAChB,eAAO,aAAaA,OAAM,EAAE;AAAA,MAC9B,OAAO;AACL,eAAO,gBAAgBA,KAAI;AAAA,MAC7B;AAAA,IACF;AAAA,EACF;AAuGA,WAAS,OAAO;AAAA,EAAC;AAEjB,WAAS,kBAAkBC,OAAM;AAC/B,QAAIA,OAAM;AACR,aAAOA,MAAK,gBAAgBA,MAAK,aAAa,IAAI,KAAKA,MAAK;AAAA,IAC9D;AAAA,EACF;AAEA,WAAS,gBAAgBC,aAAY;AACnC,WAAO,SAASC,UAAS,UAAU,QAAQ,SAAS;AAClD,UAAI,CAAC,SAAS;AACZ,kBAAU,CAAC;AAAA,MACb;AACA,UAAI,OAAO,WAAW,UAAU;AAC9B,YAAI,SAAS,aAAa,eAAe,SAAS,aAAa,UAAU,SAAS,aAAa,QAAQ;AACrG,cAAI,aAAa;AACjB,mBAASJ,KAAI,cAAc,MAAM;AACjC,iBAAO,YAAY;AAAA,QACrB,OAAO;AACL,mBAAS,UAAU,MAAM;AAAA,QAC3B;AAAA,MACF,WAAW,OAAO,aAAa,0BAA0B;AACvD,iBAAS,OAAO;AAAA,MAClB;AACA,UAAI,aAAa,QAAQ,cAAc;AACvC,UAAI,oBAAoB,QAAQ,qBAAqB;AACrD,UAAI,cAAc,QAAQ,eAAe;AACzC,UAAI,oBAAoB,QAAQ,qBAAqB;AACrD,UAAI,cAAc,QAAQ,eAAe;AACzC,UAAI,wBAAwB,QAAQ,yBAAyB;AAC7D,UAAI,kBAAkB,QAAQ,mBAAmB;AACjD,UAAI,4BAA4B,QAAQ,6BAA6B;AACrE,UAAI,mBAAmB,QAAQ,oBAAoB;AACnD,UAAI,WAAW,QAAQ,YAAY,SAAS,QAAQ,OAAO;AACzD,eAAO,OAAO,YAAY,KAAK;AAAA,MACjC;AACA,UAAI,eAAe,QAAQ,iBAAiB;AAExC,UAAI,kBAAkB,uBAAO,OAAO,IAAI;AAC5C,UAAI,mBAAmB,CAAC;AACxB,eAAS,gBAAgB,KAAK;AAC5B,yBAAiB,KAAK,GAAG;AAAA,MAC3B;AACA,eAAS,wBAAwBE,OAAM,gBAAgB;AACrD,YAAIA,MAAK,aAAa,cAAc;AAClC,cAAI,WAAWA,MAAK;AACpB,iBAAO,UAAU;AACf,gBAAI,MAAM;AACV,gBAAI,mBAAmB,MAAM,WAAW,QAAQ,IAAI;AAGlD,8BAAgB,GAAG;AAAA,YACrB,OAAO;AAIL,8BAAgB,QAAQ;AACxB,kBAAI,SAAS,YAAY;AACvB,wCAAwB,UAAU,cAAc;AAAA,cAClD;AAAA,YACF;AACA,uBAAW,SAAS;AAAA,UACtB;AAAA,QACF;AAAA,MACF;AAQM,eAAS,WAAWA,OAAM,YAAY,gBAAgB;AAC1D,YAAI,sBAAsBA,KAAI,MAAM,OAAO;AACzC;AAAA,QACF;AACA,YAAI,YAAY;AACd,qBAAW,YAAYA,KAAI;AAAA,QAC7B;AACA,wBAAgBA,KAAI;AACpB,gCAAwBA,OAAM,cAAc;AAAA,MAC9C;AA2BI,eAAS,UAAUA,OAAM;AAC3B,YAAIA,MAAK,aAAa,gBAAgBA,MAAK,aAAa,0BAA0B;AAChF,cAAI,WAAWA,MAAK;AACpB,iBAAO,UAAU;AACf,gBAAI,MAAM,WAAW,QAAQ;AAC7B,gBAAI,KAAK;AACP,8BAAgB,GAAG,IAAI;AAAA,YACzB;AAEU,sBAAU,QAAQ;AAC5B,uBAAW,SAAS;AAAA,UACtB;AAAA,QACF;AAAA,MACF;AACA,gBAAU,QAAQ;AAClB,eAAS,gBAAgBG,KAAI;AAC3B,oBAAYA,GAAE;AACd,YAAI,WAAWA,IAAG;AAClB,eAAO,UAAU;AACf,cAAI,cAAc,SAAS;AAC3B,cAAI,MAAM,WAAW,QAAQ;AAC7B,cAAI,KAAK;AACP,gBAAI,kBAAkB,gBAAgB,GAAG;AAG/B,gBAAI,mBAAmB,iBAAiB,UAAU,eAAe,GAAG;AAC5E,uBAAS,WAAW,aAAa,iBAAiB,QAAQ;AAC1D,sBAAQ,iBAAiB,QAAQ;AAAA,YACnC,OAAO;AACL,8BAAgB,QAAQ;AAAA,YAC1B;AAAA,UACF,OAAO;AAGL,4BAAgB,QAAQ;AAAA,UAC1B;AACA,qBAAW;AAAA,QACb;AAAA,MACF;AACA,eAAS,cAAc,QAAQ,kBAAkB,gBAAgB;AAI/D,eAAO,kBAAkB;AACvB,cAAI,kBAAkB,iBAAiB;AACvC,cAAI,iBAAiB,WAAW,gBAAgB,GAAG;AAGjD,4BAAgB,cAAc;AAAA,UAChC,OAAO;AAGL;AAAA,cAAW;AAAA,cAAkB;AAAA,cAAQ;AAAA;AAAA,YAA2B;AAAA,UAClE;AACA,6BAAmB;AAAA,QACrB;AAAA,MACF;AACA,eAAS,QAAQ,QAAQ,MAAMC,eAAc;AAC3C,YAAI,UAAU,WAAW,IAAI;AAC7B,YAAI,SAAS;AAGX,iBAAO,gBAAgB,OAAO;AAAA,QAChC;AACA,YAAI,CAACA,eAAc;AAEjB,cAAI,kBAAkB,QAAQ,IAAI,MAAM,OAAO;AAC7C;AAAA,UACF;AAEQ,UAAAH,YAAW,QAAQ,IAAI;AAEvB,sBAAY,MAAM;AAC1B,cAAI,0BAA0B,QAAQ,IAAI,MAAM,OAAO;AACrD;AAAA,UACF;AAAA,QACF;AACA,YAAI,OAAO,aAAa,YAAY;AAClC,wBAAc,QAAQ,IAAI;AAAA,QAC5B,OAAO;AACL,4BAAkB,SAAS,QAAQ,IAAI;AAAA,QACzC;AAAA,MACF;AACA,eAAS,cAAc,QAAQ,MAAM;AACnC,YAAI,WAAW,iBAAiB,MAAM;AACtC,YAAI,iBAAiB,KAAK;AAC1B,YAAI,mBAAmB,OAAO;AAC9B,YAAI;AACJ,YAAI;AACJ,YAAI;AACJ,YAAI;AACJ,YAAI;AAEE;AAAO,iBAAO,gBAAgB;AAClC,4BAAgB,eAAe;AAC/B,2BAAe,WAAW,cAAc;AAEhC,mBAAO,CAAC,YAAY,kBAAkB;AAC5C,gCAAkB,iBAAiB;AACnC,kBAAI,eAAe,cAAc,eAAe,WAAW,gBAAgB,GAAG;AAC5E,iCAAiB;AACjB,mCAAmB;AACnB,yBAAS;AAAA,cACX;AACA,+BAAiB,WAAW,gBAAgB;AAC5C,kBAAI,kBAAkB,iBAAiB;AAE7B,kBAAI,eAAe;AAC7B,kBAAI,oBAAoB,eAAe,UAAU;AAC/C,oBAAI,oBAAoB,cAAc;AAEpC,sBAAI,cAAc;AAGhB,wBAAI,iBAAiB,gBAAgB;AAInC,0BAAI,iBAAiB,gBAAgB,YAAY,GAAG;AAClD,4BAAI,oBAAoB,gBAAgB;AAMtC,yCAAe;AAAA,wBACjB,OAAO;AAOL,iCAAO,aAAa,gBAAgB,gBAAgB;AAE9B,8BAAI,gBAAgB;AAGxC,4CAAgB,cAAc;AAAA,0BAChC,OAAO;AAGL;AAAA,8BAAW;AAAA,8BAAkB;AAAA,8BAAQ;AAAA;AAAA,4BAA2B;AAAA,0BAClE;AACA,6CAAmB;AAAA,wBACrB;AAAA,sBACF,OAAO;AAGL,uCAAe;AAAA,sBACjB;AAAA,oBACF;AAAA,kBACF,WAAW,gBAAgB;AAEzB,mCAAe;AAAA,kBACjB;AACA,iCAAe,iBAAiB,SAAS,iBAAiB,kBAAkB,cAAc;AAC1F,sBAAI,cAAc;AAKhB,4BAAQ,kBAAkB,cAAc;AAAA,kBAC1C;AAAA,gBACF,WAAW,oBAAoB,aAAa,mBAAmB,cAAc;AAE3E,iCAAe;AAGD,sBAAI,iBAAiB,cAAc,eAAe,WAAW;AACzE,qCAAiB,YAAY,eAAe;AAAA,kBAC9C;AAAA,gBACF;AAAA,cACF;AACA,kBAAI,cAAc;AAGhB,iCAAiB;AACjB,mCAAmB;AACnB,yBAAS;AAAA,cACX;AAOU,kBAAI,gBAAgB;AAG5B,gCAAgB,cAAc;AAAA,cAChC,OAAO;AAGL;AAAA,kBAAW;AAAA,kBAAkB;AAAA,kBAAQ;AAAA;AAAA,gBAA2B;AAAA,cAClE;AACA,iCAAmB;AAAA,YACrB;AAKQ,gBAAI,iBAAiB,iBAAiB,gBAAgB,YAAY,MAAM,iBAAiB,gBAAgB,cAAc,GAAG;AAEhI,uBAAS,QAAQ,cAAc;AAC/B,sBAAQ,gBAAgB,cAAc;AAAA,YACxC,OAAO;AACL,kBAAI,0BAA0B,kBAAkB,cAAc;AAC9D,kBAAI,4BAA4B,OAAO;AACrC,oBAAI,yBAAyB;AAC3B,mCAAiB;AAAA,gBACnB;AACA,oBAAI,eAAe,WAAW;AAC5B,mCAAiB,eAAe,UAAU,OAAO,iBAAiBH,IAAG;AAAA,gBACvE;AACA,yBAAS,QAAQ,cAAc;AAC/B,gCAAgB,cAAc;AAAA,cAChC;AAAA,YACF;AACA,6BAAiB;AACjB,+BAAmB;AAAA,UACrB;AACA,sBAAc,QAAQ,kBAAkB,cAAc;AACtD,YAAI,mBAAmB,kBAAkB,OAAO,QAAQ;AACxD,YAAI,kBAAkB;AACpB,2BAAiB,QAAQ,IAAI;AAAA,QAC/B;AAAA,MACF;AAEI,UAAI,cAAc;AACtB,UAAI,kBAAkB,YAAY;AAClC,UAAI,aAAa,OAAO;AACxB,UAAI,CAAC,cAAc;AAGjB,YAAI,oBAAoB,cAAc;AACpC,cAAI,eAAe,cAAc;AAC/B,gBAAI,CAAC,iBAAiB,UAAU,MAAM,GAAG;AACvC,8BAAgB,QAAQ;AACxB,4BAAc,aAAa,UAAU,gBAAgB,OAAO,UAAU,OAAO,YAAY,CAAC;AAAA,YAC5F;AAAA,UACF,OAAO;AAEL,0BAAc;AAAA,UAChB;AAAA,QACF,WAAW,oBAAoB,aAAa,oBAAoB,cAAc;AAE5E,cAAI,eAAe,iBAAiB;AAClC,gBAAI,YAAY,cAAc,OAAO,WAAW;AAC9C,0BAAY,YAAY,OAAO;AAAA,YACjC;AACA,mBAAO;AAAA,UACT,OAAO;AAEL,0BAAc;AAAA,UAChB;AAAA,QACF;AAAA,MACF;AACA,UAAI,gBAAgB,QAAQ;AAG1B,wBAAgB,QAAQ;AAAA,MAC1B,OAAO;AACL,YAAI,OAAO,cAAc,OAAO,WAAW,WAAW,GAAG;AACvD;AAAA,QACF;AACA,gBAAQ,aAAa,QAAQ,YAAY;AAMnC,YAAI,kBAAkB;AAC1B,mBAAS,IAAI,GAAG,MAAM,iBAAiB,QAAQ,IAAI,KAAK,KAAK;AAC3D,gBAAI,aAAa,gBAAgB,iBAAiB,CAAC,CAAC;AACpD,gBAAI,YAAY;AACd,yBAAW,YAAY,WAAW,YAAY,KAAK;AAAA,YACrD;AAAA,UACF;AAAA,QACF;AAAA,MACF;AACA,UAAI,CAAC,gBAAgB,gBAAgB,YAAY,SAAS,YAAY;AACpE,YAAI,YAAY,WAAW;AACzB,wBAAc,YAAY,UAAU,SAAS,iBAAiBA,IAAG;AAAA,QACnE;AAMM,iBAAS,WAAW,aAAa,aAAa,QAAQ;AAAA,MAC9D;AACA,aAAO;AAAA,IACT;AAAA,EACF;AAMI,WAAS,QAAQ;AACnB,UAAM,UAAU;AAAA,MACd,cAAc,KAAK,aAAa,eAAe;AAAA,IACjD;AACA,SAAK,eAAe,QAAS,CAAAO,aAAW;AACtC,eAASA,UAAS,QAAQ,eAAe,KAAK,kBAAkB,KAAK,gBAAgB,WAAW,OAAO;AAAA,IACzG,CAAE;AAAA,EACJ;AAMA,WAASC,UAAS,OAAO;AACvB,WAAO,MAAM,QAAQ,uBAAwB,CAAC,GAAG,SAAS,KAAK,YAAY,CAAE;AAAA,EAC/E;AAEA,WAASC,YAAW,OAAO;AACzB,WAAO,MAAM,OAAO,CAAC,EAAE,YAAY,IAAI,MAAM,MAAM,CAAC;AAAA,EACtD;AAEA,WAASC,WAAU,OAAO;AACxB,WAAO,MAAM,QAAQ,YAAa,CAAC,GAAG,SAAS,IAAI,KAAK,YAAY,CAAC,EAAG;AAAA,EAC1E;AAEA,WAASC,UAAS,OAAO;AACvB,WAAO,QAAQ,MAAM,MAAM,SAAS,KAAK,CAAC,IAAI,CAAC;AAAA,EACjD;AAEA,WAASC,UAAS,OAAO;AACvB,QAAI;AACF,aAAO,KAAK,MAAM,KAAK;AAAA,IACzB,SAASC,IAAG;AACV,aAAO;AAAA,IACT;AAAA,EACF;AAWA,WAAS,gBAAgB;AACvB,UAAM,UAAUF,UAAS,KAAK,aAAa,SAAS,CAAC;AACrD,QAAI,QAAQ,SAAS,GAAG;AACtB,WAAK,eAAe,QAAS,CAAAJ,aAAWA,SAAQ,UAAU,IAAI,GAAG,OAAO,CAAE;AAAA,IAC5E,OAAO;AACL,cAAQ,KAAK,gFAAgF;AAAA,IAC/F;AAAA,EACF;AAEA,WAAS,mBAAmB;AAC1B,UAAM,YAAY,KAAK,aAAa,WAAW;AAC/C,QAAI,WAAW;AACb,WAAK,eAAe,QAAS,CAAAA,aAAWA,SAAQ,gBAAgB,SAAS,CAAE;AAAA,IAC7E,OAAO;AACL,cAAQ,KAAK,qFAAqF;AAAA,IACpG;AAAA,EACF;AAEA,WAAS,mBAAmB;AAC1B,UAAM,UAAUI,UAAS,KAAK,aAAa,SAAS,CAAC;AACrD,QAAI,QAAQ,SAAS,GAAG;AACtB,WAAK,eAAe,QAAS,CAAAJ,aAAWA,SAAQ,UAAU,OAAO,GAAG,OAAO,CAAE;AAAA,IAC/E,OAAO;AACL,cAAQ,KAAK,mFAAmF;AAAA,IAClG;AAAA,EACF;AAEA,WAAS,gBAAgB;AACvB,UAAM,YAAY,KAAK,aAAa,WAAW;AAC/C,UAAM,QAAQ,KAAK,aAAa,OAAO,KAAK;AAC5C,QAAI,WAAW;AACb,WAAK,eAAe,QAAS,CAAAA,aAAWA,SAAQ,aAAa,WAAW,KAAK,CAAE;AAAA,IACjF,OAAO;AACL,cAAQ,KAAK,kFAAkF;AAAA,IACjG;AAAA,EACF;AAEA,WAAS,wBAAwB;AAC/B,UAAM,YAAY,KAAK,aAAa,WAAW;AAC/C,UAAM,QAAQ,KAAK,aAAa,OAAO,KAAK;AAC5C,QAAI,WAAW;AACb,WAAK,eAAe,QAAS,CAAAA,aAAWA,SAAQ,QAAQC,UAAS,SAAS,CAAC,IAAI,KAAM;AAAA,IACvF,OAAO;AACL,cAAQ,KAAK,0FAA0F;AAAA,IACzG;AAAA,EACF;AAEA,WAAS,eAAe;AACtB,UAAMP,QAAO,KAAK,aAAa,MAAM;AACrC,UAAM,QAAQW,UAAS,KAAK,aAAa,OAAO,KAAK,EAAE;AACvD,QAAIX,OAAM;AACR,WAAK,eAAe,QAAS,CAAAM,aAAWA,SAAQN,KAAI,IAAI,KAAM;AAAA,IAChE,OAAO;AACL,cAAQ,MAAM,4EAA4E;AAAA,IAC5F;AAAA,EACF;AAEA,WAAS,YAAY;AACnB,UAAMA,QAAO,KAAK,aAAa,MAAM;AACrC,UAAM,QAAQ,KAAK,aAAa,OAAO,KAAK;AAC5C,QAAIA,OAAM;AACR,WAAK,eAAe,QAAS,CAAAM,aAAWA,SAAQ,MAAMN,KAAI,IAAI,KAAM;AAAA,IACtE,OAAO;AACL,cAAQ,MAAM,yEAAyE;AAAA,IACzF;AAAA,EACF;AAEA,WAAS,aAAa;AACpB,UAAM,SAAS,KAAK,aAAa,QAAQ,KAAK;AAC9C,SAAK,eAAe,QAAS,CAAAM,aAAWA,SAAQ,aAAa,SAAS,MAAM,CAAE;AAAA,EAChF;AAEA,WAAS,YAAY;AACnB,UAAM,QAAQ,KAAK,aAAa,OAAO,KAAK;AAC5C,SAAK,eAAe,QAAS,CAAAA,aAAWA,SAAQ,QAAQ,KAAM;AAAA,EAChE;AAEA,WAAS,mBAAmB;AAC1B,UAAM,UAAUI,UAAS,KAAK,aAAa,SAAS,CAAC;AACrD,QAAI,QAAQ,SAAS,GAAG;AACtB,WAAK,eAAe,QAAS,CAAAJ,aAAW;AACtC,gBAAQ,QAAS,eAAaA,SAAQ,UAAU,OAAO,SAAS,CAAE;AAAA,MACpE,CAAE;AAAA,IACJ,OAAO;AACL,cAAQ,KAAK,mFAAmF;AAAA,IAClG;AAAA,EACF;AAEA,WAAS,oBAAoB;AAC3B,UAAM,OAAO,KAAK,aAAa,MAAM,KAAK;AAC1C,UAAMO,MAAK,KAAK,aAAa,IAAI,KAAK;AACtC,QAAI,QAAQA,KAAI;AACd,WAAK,eAAe,QAAS,CAAAP,aAAW;AACtC,cAAM,cAAcA,SAAQ,UAAU,QAAQ,MAAMO,GAAE;AACtD,YAAI,CAAC,aAAa;AAChB,kBAAQ,KAAK,qBAAqB,IAAI,8IAA8IP,QAAO;AAAA,QAC7L;AAAA,MACF,CAAE;AAAA,IACJ,OAAO;AACL,cAAQ,KAAK,+FAA+F;AAAA,IAC9G;AAAA,EACF;AAEA,WAAS,0BAA0B,eAAe;AAChD,kBAAc,gBAAgB;AAC9B,kBAAc,mBAAmB;AACjC,kBAAc,mBAAmB;AACjC,kBAAc,gBAAgB;AAC9B,kBAAc,wBAAwB;AACtC,kBAAc,eAAe;AAC7B,kBAAc,YAAY;AAC1B,kBAAc,aAAa;AAC3B,kBAAc,YAAY;AAC1B,kBAAc,mBAAmB;AACjC,kBAAc,oBAAoB;AAAA,EACpC;AAEA,WAAS,SAAS;AAChB,WAAO,SAAS,OAAO;AAAA,EACzB;AAEA,WAAS,mBAAmB;AAC1B,UAAM,aAAa,KAAK,aAAa,cAAc;AACnD,UAAM,QAAQ,KAAK,aAAa,OAAO;AACvC,UAAM,SAAS,KAAK,aAAa,QAAQ;AACzC,UAAM,WAAW,KAAK,aAAa,UAAU;AAC7C,QAAI,YAAY;AACd,WAAK,eAAe,QAAS,CAAAA,aAAWA,SAAQ,eAAe,eAAe,MAAM,CAAE;AAAA,IACxF,WAAW,SAAS,UAAU,UAAU;AACtC,YAAM,UAAU,CAAC;AACjB,UAAI;AAAO,gBAAQ,QAAQ;AAC3B,UAAI;AAAQ,gBAAQ,SAAS;AAC7B,UAAI;AAAU,gBAAQ,WAAW;AACjC,WAAK,eAAe,QAAS,CAAAA,aAAWA,SAAQ,eAAe,OAAO,CAAE;AAAA,IAC1E,OAAO;AACL,WAAK,eAAe,QAAS,CAAAA,aAAWA,SAAQ,eAAe,CAAE;AAAA,IACnE;AAAA,EACF;AAEA,WAAS,YAAY;AACnB,SAAK,eAAe,QAAS,CAAAA,aAAWA,SAAQ,MAAM,CAAE;AAAA,EAC1D;AAEA,WAAS,YAAY;AACnB,UAAM,QAAQ,KAAK,aAAa,OAAO,KAAK;AAC5C,QAAI,eAAe,SAAS,KAAK,cAAc,OAAO;AACtD,QAAI,CAAC,cAAc;AACjB,qBAAe,SAAS,cAAc,OAAO;AAC7C,eAAS,KAAK,YAAY,YAAY;AAAA,IACxC;AACA,iBAAa,cAAc;AAAA,EAC7B;AAEA,WAAS,uBAAuB,eAAe;AAC7C,kBAAc,SAAS;AACvB,kBAAc,mBAAmB;AACjC,kBAAc,YAAY;AAC1B,kBAAc,YAAY;AAAA,EAC5B;AAEA,WAAS,cAAc;AACrB,UAAM,UAAU,KAAK,aAAa,SAAS;AAC3C,UAAM,QAAQ,KAAK,aAAa,OAAO,KAAK;AAC5C,YAAQ,KAAK,EAAE,OAAO;AAAA,EACxB;AAEA,WAAS,gBAAgB;AACvB,UAAMQ,QAAO,KAAK,MAAM,KAAK,aAAa,MAAM,KAAK,IAAI;AACzD,UAAM,UAAU,KAAK,MAAM,KAAK,aAAa,SAAS,KAAK,IAAI;AAC/D,YAAQ,MAAMA,OAAM,OAAO;AAAA,EAC7B;AAEA,WAAS,qBAAqB,eAAe;AAC3C,kBAAc,cAAc;AAC5B,kBAAc,gBAAgB;AAAA,EAChC;AAEA,WAAS,SAAS;AAChB,YAAQ,KAAK,iOAAiO;AAAA,EAChP;AAEA,WAAS,0BAA0B,eAAe;AAChD,QAAI,CAAC,cAAc,QAAQ;AACzB,oBAAc,SAAS;AAAA,IACzB;AAAA,EACF;AAoBA,WAAS,aAAa;AACpB,UAAM,SAAS,KAAK,aAAa,QAAQ,KAAK;AAC9C,aAAS,SAAS;AAAA,EACpB;AAEA,WAAS,kBAAkB;AACzB,UAAM,sBAAsB,IAAI,oBAAoB,IAAI;AACxD,aAAS,SAAS,oBAAoB,MAAM;AAAA,EAC9C;AAEA,WAAS,wBAAwB,eAAe;AAC9C,kBAAc,aAAa;AAC3B,kBAAc,kBAAkB;AAAA,EAClC;AAEA,WAAS,QAAQ;AACf,UAAM,WAAW,KAAK,aAAa,QAAQ;AAC3C,QAAI,UAAU;AACZ,YAAM,SAAS,SAAS,cAAc,QAAQ;AAC9C,UAAI,QAAQ;AACV,aAAK,eAAe,QAAS,CAAAR,aAAW,OAAO,YAAYA,QAAO,CAAE;AAAA,MACtE,OAAO;AACL,gBAAQ,MAAM,6DAA6D,QAAQ,uCAAuC;AAAA,MAC5H;AAAA,IACF,OAAO;AACL,cAAQ,MAAM,gFAAgF;AAAA,IAChG;AAAA,EACF;AAEA,WAAS,aAAa;AACpB,UAAMS,QAAO,KAAK,gBAAgB,eAAe;AACjD,SAAK,eAAe,QAAS,CAAAT,aAAWA,SAAQ,YAAYS,KAAK;AAAA,EACnE;AAEA,WAAS,uBAAuB;AAC9B,UAAMC,YAAW,KAAK,aAAa,UAAU,KAAK;AAClD,UAAMD,QAAO,KAAK,gBAAgB,eAAe;AACjD,SAAK,eAAe,QAAS,CAAAT,aAAWA,SAAQ,mBAAmBU,WAAUD,KAAI,CAAE;AAAA,EACrF;AAEA,WAAS,uBAAuB;AAC9B,UAAMC,YAAW,KAAK,aAAa,UAAU,KAAK;AAClD,UAAM,UAAU,KAAK,aAAa,MAAM,KAAK;AAC7C,SAAK,eAAe,QAAS,CAAAV,aAAWA,SAAQ,mBAAmBU,WAAU,OAAO,CAAE;AAAA,EACxF;AAEA,WAAS,aAAa;AACpB,UAAMD,QAAO,KAAK,gBAAgB,eAAe;AACjD,SAAK,eAAe,QAAS,CAAAT,aAAWA,SAAQ,YAAYS,KAAK;AAAA,EACnE;AAEA,WAAS,WAAW;AAClB,UAAMf,QAAO,KAAK,aAAa,MAAM;AACrC,UAAMiB,WAAU,KAAK,aAAa,SAAS,KAAK;AAChD,QAAIjB,OAAM;AACR,UAAIkB,QAAO,SAAS,KAAK,cAAc,cAAclB,KAAI,IAAI;AAC7D,UAAI,CAACkB,OAAM;AACT,QAAAA,QAAO,SAAS,cAAc,MAAM;AACpC,QAAAA,MAAK,OAAOlB;AACZ,iBAAS,KAAK,YAAYkB,KAAI;AAAA,MAChC;AACA,MAAAA,MAAK,UAAUD;AAAA,IACjB,OAAO;AACL,cAAQ,MAAM,wEAAwE;AAAA,IACxF;AAAA,EACF;AAEA,WAAS,eAAe;AACtB,UAAME,QAAO,KAAK,aAAa,MAAM,KAAK;AAC1C,SAAK,eAAe,QAAS,CAAAb,aAAWA,SAAQ,cAAca,KAAK;AAAA,EACrE;AAEA,WAAS,mBAAmB,eAAe;AACzC,kBAAc,QAAQ;AACtB,kBAAc,aAAa;AAC3B,kBAAc,uBAAuB;AACrC,kBAAc,uBAAuB;AACrC,kBAAc,aAAa;AAC3B,kBAAc,eAAe;AAC7B,kBAAc,WAAW;AAAA,EAC3B;AAEA,WAAS,iBAAiB;AACxB,UAAMnB,QAAO,KAAK,aAAa,MAAM;AACrC,QAAI,WAAW;AACf,QAAI;AACF,iBAAW,KAAK,gBAAgB;AAAA,IAClC,SAASY,IAAG;AAAA,IAAC;AACb,QAAI;AACF,YAAM,SAAS,WAAW,KAAK,MAAM,QAAQ,IAAI,CAAC;AAClD,UAAIZ,OAAM;AACR,cAAM,UAAU;AAAA,UACd,SAAS;AAAA,UACT,YAAY;AAAA,UACZ;AAAA,QACF;AACA,cAAM,QAAQ,IAAI,YAAYA,OAAM,OAAO;AAC3C,aAAK,eAAe,QAAS,CAAAM,aAAWA,SAAQ,cAAc,KAAK,CAAE;AAAA,MACvE,OAAO;AACL,gBAAQ,KAAK,8EAA8E;AAAA,MAC7F;AAAA,IACF,SAASc,QAAO;AACd,cAAQ,MAAM,sEAAsE,QAAQ,oDAAoD,WAAWA,OAAM,OAAO,GAAG;AAAA,IAC7K;AAAA,EACF;AAEA,WAAS,sBAAsB,eAAe;AAC5C,kBAAc,iBAAiB;AAAA,EACjC;AAEA,WAAS,aAAa;AACpB,SAAK,eAAe,QAAS,UAAQ,KAAK,MAAM,CAAE;AAAA,EACpD;AAEA,WAAS,oBAAoB,eAAe;AAC1C,kBAAc,aAAa;AAAA,EAC7B;AAEA,WAAS,aAAa;AACpB,UAAM,MAAM,KAAK,aAAa,KAAK;AACnC,UAAM,QAAQ,KAAK,aAAa,OAAO;AACvC,UAAM,QAAQ,KAAK,aAAa,OAAO,KAAK;AAC5C,WAAO,QAAQ,UAAU,OAAO,OAAO,GAAG;AAAA,EAC5C;AAEA,WAAS,gBAAgB;AACvB,UAAM,MAAM,KAAK,aAAa,KAAK;AACnC,UAAM,QAAQ,KAAK,aAAa,OAAO;AACvC,UAAM,QAAQ,KAAK,aAAa,OAAO,KAAK;AAC5C,WAAO,QAAQ,aAAa,OAAO,OAAO,GAAG;AAAA,EAC/C;AAEA,WAAS,eAAe;AACtB,WAAO,QAAQ,KAAK;AAAA,EACtB;AAEA,WAAS,kBAAkB;AACzB,WAAO,QAAQ,QAAQ;AAAA,EACzB;AAEA,WAAS,aAAa;AACpB,UAAM,QAAQ,OAAO,KAAK,aAAa,OAAO,CAAC,KAAK;AACpD,WAAO,QAAQ,GAAG,KAAK;AAAA,EACzB;AAEA,WAAS,uBAAuB,eAAe;AAC7C,kBAAc,aAAa;AAC3B,kBAAc,gBAAgB;AAC9B,kBAAc,eAAe;AAC7B,kBAAc,aAAa;AAAA,EAC7B;AAWA,WAAS,eAAe;AACtB,QAAI,CAAC,OAAO,cAAc;AACxB,YAAM,oDAAoD;AAAA,IAC5D,WAAW,aAAa,eAAe,WAAW;AAChD,yBAAmB,IAAI;AAAA,IACzB,WAAW,aAAa,eAAe,UAAU;AAC/C,mBAAa,kBAAkB,EAAE,KAAM,gBAAc;AACnD,YAAI,eAAe,WAAW;AAC5B,6BAAmB,IAAI;AAAA,QACzB;AAAA,MACF,CAAE;AAAA,IACJ;AAAA,EACF;AAEA,WAAS,4BAA4B,eAAe;AAClD,kBAAc,eAAe;AAAA,EAC/B;AAEA,WAAS,QAAQ,MAAM;AACrB,WAAO,SAAS,YAAY,OAAO,iBAAiB,OAAO;AAAA,EAC7D;AAEA,WAAS,gBAAgB;AACvB,UAAM,OAAO,KAAK,aAAa,MAAM;AACrC,YAAQ,IAAI,EAAE,MAAM;AAAA,EACtB;AAEA,WAAS,mBAAmB;AAC1B,UAAM,MAAM,KAAK,aAAa,KAAK;AACnC,UAAM,QAAQ,KAAK,aAAa,OAAO,KAAK;AAC5C,UAAM,OAAO,KAAK,aAAa,MAAM;AACrC,QAAI,KAAK;AACP,cAAQ,IAAI,EAAE,QAAQ,KAAK,KAAK;AAAA,IAClC,OAAO;AACL,cAAQ,KAAK,+EAA+E;AAAA,IAC9F;AAAA,EACF;AAEA,WAAS,sBAAsB;AAC7B,UAAM,MAAM,KAAK,aAAa,KAAK;AACnC,UAAM,OAAO,KAAK,aAAa,MAAM;AACrC,QAAI,KAAK;AACP,cAAQ,IAAI,EAAE,WAAW,GAAG;AAAA,IAC9B,OAAO;AACL,cAAQ,KAAK,kFAAkF;AAAA,IACjG;AAAA,EACF;AAEA,WAAS,uBAAuB,eAAe;AAC7C,kBAAc,gBAAgB;AAC9B,kBAAc,mBAAmB;AACjC,kBAAc,sBAAsB;AAAA,EACtC;AAQA,WAAS,cAAc;AACrB,UAAM,MAAM,KAAK,aAAa,KAAK,KAAK;AACxC,UAAM,cAAc,KAAK,aAAa,cAAc,KAAK;AACzD,UAAM,aAAa,KAAK,aAAa,aAAa;AAClD,UAAM,QAAQ,KAAK,aAAa,OAAO,MAAM;AAC7C,UAAM,UAAU;AAAA,MACd,QAAQ;AAAA,IACV;AACA,QAAI,YAAY;AACd,cAAQ,QAAQ;AAAA,IAClB;AACA,QAAI,SAAS,OAAO,OAAO;AACzB,aAAO,MAAM,MAAM,KAAK,OAAO;AAAA,IACjC,OAAO;AACL,MAAAC,OAAM,SAAS,OAAO,GAAG;AAAA,IAC3B;AAAA,EACF;AAEA,WAAS,oBAAoB;AAC3B,WAAO,MAAM,MAAM,MAAM;AAAA,EAC3B;AAEA,WAAS,qBAAqB,eAAe;AAC3C,kBAAc,cAAc;AAC5B,kBAAc,oBAAoB;AAAA,EACpC;AAEA,WAAS,+BAA+B;AACtC,UAAM,QAAQ,KAAK,aAAa,OAAO,KAAK;AAC5C,WAAO,MAAM,UAAU,QAAQ,YAAY,SAAS,OAAO,KAAK,CAAC;AAAA,EACnE;AAEA,WAAS,0BAA0B;AACjC,WAAO,MAAM,UAAU,QAAQ,YAAY,KAAK;AAAA,EAClD;AAEA,WAAS,0BAA0B;AACjC,WAAO,MAAM,UAAU,QAAQ,YAAY,KAAK;AAAA,EAClD;AAEA,WAAS,gCAAgC,eAAe;AACtD,kBAAc,+BAA+B;AAC7C,kBAAc,0BAA0B;AACxC,kBAAc,0BAA0B;AAAA,EAC1C;AAEA,WAAS,qBAAqB;AAC5B,SAAK,eAAe,QAAS,CAAAf,aAAWA,SAAQ,OAAO,CAAE;AAAA,EAC3D;AAEA,WAAS,sBAAsB;AAC7B,UAAM,MAAM,KAAK,aAAa,KAAK;AACnC,SAAK,eAAe,QAAS,CAAAA,aAAWA,SAAQ,MAAM,GAAI;AAAA,EAC5D;AAEA,WAAS,0BAA0B,eAAe;AAChD,kBAAc,qBAAqB;AACnC,kBAAc,sBAAsB;AAAA,EACtC;AAEA,WAAS,WAAW,eAAe;AACjC,8BAA0B,aAAa;AACvC,2BAAuB,aAAa;AACpC,yBAAqB,aAAa;AAClC,8BAA0B,aAAa;AACvC,4BAAwB,aAAa;AACrC,uBAAmB,aAAa;AAChC,0BAAsB,aAAa;AACnC,wBAAoB,aAAa;AACjC,2BAAuB,aAAa;AACpC,gCAA4B,aAAa;AACzC,2BAAuB,aAAa;AACpC,yBAAqB,aAAa;AAClC,oCAAgC,aAAa;AAC7C,8BAA0B,aAAa;AAAA,EACzC;AAkEA,WAAS,WAAW,eAAe;AACjC,iBAAa,aAAa;AAC1B,eAAW,aAAa;AAAA,EAC1B;AAEA,WAAS,SAASN,OAAM,QAAQ,eAAe;AAC7C,kBAAcA,KAAI,IAAI;AAAA,EACxB;AA5xCA,MAGI,wBAwDA,OAGA,UAEAD,MAEA,sBAEA,mBA+GA,mBA6FA,cAEA,0BAEA,WAEA,cAsZA,UAaE,cA4BF,OAoME,qBA0KA,sBAEA,oBA6DFsB,QAmFA,SAyEAC;AA9xCJ;AAAA;AAGA,MAAI,yBAAyB;AA2D7B,MAAI,WAAW;AAEf,MAAIvB,OAAM,OAAO,aAAa,cAAc,SAAY;AAExD,MAAI,uBAAuB,CAAC,CAACA,QAAO,aAAaA,KAAI,cAAc,UAAU;AAE7E,MAAI,oBAAoB,CAAC,CAACA,QAAOA,KAAI,eAAe,8BAA8BA,KAAI,YAAY;AA+GlG,MAAI,oBAAoB;AAAA,QACtB,QAAQ,SAAS,QAAQ,MAAM;AAC7B,cAAI,aAAa,OAAO;AACxB,cAAI,YAAY;AACd,gBAAI,aAAa,WAAW,SAAS,YAAY;AACjD,gBAAI,eAAe,YAAY;AAC7B,2BAAa,WAAW;AACxB,2BAAa,cAAc,WAAW,SAAS,YAAY;AAAA,YAC7D;AACA,gBAAI,eAAe,YAAY,CAAC,WAAW,aAAa,UAAU,GAAG;AACnE,kBAAI,OAAO,aAAa,UAAU,KAAK,CAAC,KAAK,UAAU;AAIrD,uBAAO,aAAa,YAAY,UAAU;AAC1C,uBAAO,gBAAgB,UAAU;AAAA,cACnC;AAIQ,yBAAW,gBAAgB;AAAA,YACrC;AAAA,UACF;AACA,8BAAoB,QAAQ,MAAM,UAAU;AAAA,QAC9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAOA,OAAO,SAAS,QAAQ,MAAM;AAC5B,8BAAoB,QAAQ,MAAM,SAAS;AAC3C,8BAAoB,QAAQ,MAAM,UAAU;AAC5C,cAAI,OAAO,UAAU,KAAK,OAAO;AAC/B,mBAAO,QAAQ,KAAK;AAAA,UACtB;AACA,cAAI,CAAC,KAAK,aAAa,OAAO,GAAG;AAC/B,mBAAO,gBAAgB,OAAO;AAAA,UAChC;AAAA,QACF;AAAA,QACA,UAAU,SAAS,QAAQ,MAAM;AAC/B,cAAI,WAAW,KAAK;AACpB,cAAI,OAAO,UAAU,UAAU;AAC7B,mBAAO,QAAQ;AAAA,UACjB;AACA,cAAI,aAAa,OAAO;AACxB,cAAI,YAAY;AAGd,gBAAI,WAAW,WAAW;AAC1B,gBAAI,YAAY,YAAY,CAAC,YAAY,YAAY,OAAO,aAAa;AACvE;AAAA,YACF;AACA,uBAAW,YAAY;AAAA,UACzB;AAAA,QACF;AAAA,QACA,QAAQ,SAAS,QAAQ,MAAM;AAC7B,cAAI,CAAC,KAAK,aAAa,UAAU,GAAG;AAClC,gBAAI,gBAAgB;AACpB,gBAAI,IAAI;AAKF,gBAAI,WAAW,OAAO;AAC5B,gBAAI;AACJ,gBAAI;AACJ,mBAAO,UAAU;AACf,yBAAW,SAAS,YAAY,SAAS,SAAS,YAAY;AAC9D,kBAAI,aAAa,YAAY;AAC3B,2BAAW;AACX,2BAAW,SAAS;AAAA,cACtB,OAAO;AACL,oBAAI,aAAa,UAAU;AACzB,sBAAI,SAAS,aAAa,UAAU,GAAG;AACrC,oCAAgB;AAChB;AAAA,kBACF;AACA;AAAA,gBACF;AACA,2BAAW,SAAS;AACpB,oBAAI,CAAC,YAAY,UAAU;AACzB,6BAAW,SAAS;AACpB,6BAAW;AAAA,gBACb;AAAA,cACF;AAAA,YACF;AACA,mBAAO,gBAAgB;AAAA,UACzB;AAAA,QACF;AAAA,MACF;AAEA,MAAI,eAAe;AAEnB,MAAI,2BAA2B;AAE/B,MAAI,YAAY;AAEhB,MAAI,eAAe;AAsZnB,MAAI,WAAW,gBAAgB,UAAU;AAazC,MAAM,eAAe,mBAAiB;AACpC,sBAAc,QAAQ;AAAA,MACxB;AA0BA,MAAI,QAAS,OAAO,OAAO;AAAA,QACzB,WAAW;AAAA,QACX,UAAUQ;AAAA,QACV,YAAYC;AAAA,QACZ,WAAWC;AAAA,QACX,UAAUC;AAAA,QACV,UAAUC;AAAA,MACZ,CAAC;AA6LD,MAAM,sBAAN,MAA0B;AAAA,QACxB,YAAY,eAAe;AACzB,eAAK,kCAAkC,CAAE,CAAE,UAAU,UAAU,KAAM,GAAG,CAAE,QAAQ,QAAQ,KAAM,GAAG,CAAE,WAAW,WAAW,KAAM,GAAG,CAAE,WAAW,WAAW,KAAM,GAAG,CAAE,aAAa,YAAY,IAAK,GAAG,CAAE,UAAU,UAAU,IAAK,GAAG,CAAE,aAAa,YAAY,KAAM,CAAE;AACzQ,eAAK,gBAAgB;AAAA,QACvB;AAAA,QACA,QAAQ;AACN,cAAI,eAAe,GAAG,KAAK,cAAc,aAAa,MAAM,CAAC,IAAI,KAAK,cAAc,aAAa,OAAO,CAAC;AACzG,eAAK,gCAAgC,QAAS,CAAC,CAAC,wBAAwB,WAAW,kBAAkB,MAAM;AACzG,kBAAM,cAAc,KAAK,cAAc,aAAa,sBAAsB;AAC1E,gBAAI,gBAAgB,MAAM;AACxB,oBAAM,gBAAgB,qBAAqB,YAAY,GAAG,SAAS,IAAI,WAAW;AAClF,6BAAe,GAAG,YAAY,KAAK,aAAa;AAAA,YAClD;AAAA,UACF,CAAE;AACF,iBAAO;AAAA,QACT;AAAA,MACF;AA0JA,MAAM,uBAAuB,CAAE,OAAO,QAAQ,SAAS,QAAQ,OAAO,QAAQ,SAAS,QAAQ,WAAW,YAAY,uBAAuB,WAAW,QAAS;AAEjK,MAAM,qBAAqB,mBAAiB;AAC1C,cAAM,QAAQ,cAAc,aAAa,OAAO,KAAK;AACrD,cAAM,aAAa,MAAM,KAAK,cAAc,UAAU,EAAE,OAAQ,eAAa,qBAAqB,SAAS,UAAU,IAAI,CAAE,EAAE,IAAK,eAAa,CAAEJ,UAAS,UAAU,IAAI,GAAGI,UAAS,UAAU,KAAK,CAAE,CAAE;AACvM,cAAM,UAAU,OAAO,YAAY,UAAU;AAC7C,YAAI,aAAa,OAAO,OAAO;AAAA,MACjC;AAwDA,MAAIU,SAAQ;AAAA,QACV,IAAI,WAAW;AACb,iBAAO,OAAO,sBAAsB,OAAO;AAAA,QAC7C;AAAA,MACF;AA+EA,MAAI,UAAW,OAAO,OAAO;AAAA,QAC3B,WAAW;AAAA,QACX;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,UAAU;AAAA,QACV;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AAWD,MAAIC,SAAQ;AAAA,QACV;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA;AAAA;;;ACnyCA,MAAAC,oBAAA;AAAA;AAAA;AAAA;AACA,MAAAC,OAAW,WAAW,MAAM,aAAa;AAAA;AAAA;;;ACDzC;AAAA;AAAA;AAAA;AACA,MAAAC;AAAA;AAAA;;;AC+cA,WAASC,oBAAmB,KAAK;AAC/B,QAAI,OAAO,QAAQ,YAAY;AAC7B,YAAM,IAAI;AAAA,IACZ;AACA,QAAI,OAAO,CAAC,UAAU,KAAK,GAAG,GAAG;AAC/B,YAAM,IAAI,SAAS,cAAc,GAAG;AACpC,QAAE,OAAO;AACT,QAAE,OAAO,EAAE;AACX,QAAE,WAAW,EAAE,SAAS,QAAQ,QAAQ,IAAI;AAC5C,aAAO,EAAE;AAAA,IACX,OAAO;AACL,aAAO;AAAA,IACT;AAAA,EACF;AAEA,WAASC,gBAAe,MAAMC,WAAU,KAAK,KAAK,SAAS,oBAAoB;AAC7E,WAAO,IAAIC,UAAS,GAAG;AAAA,EACzB;AAEA,WAASD,WAAUE,OAAM;AACvB,UAAMC,WAAU,SAAS,KAAK,cAAc,2BAA2BD,KAAI,IAAI;AAC/E,QAAIC,UAAS;AACX,aAAOA,SAAQ,aAAa,SAAS;AAAA,IACvC;AAAA,EACF;AAxeA,MAAI,UAKA,QASEC,MAEAC,eAEAC,oBAgGF,UAiBkBC,gBAA0BC,YAE1CC,qBAEAC,UAEAC,aA2JAC,SAUAC,eAsBAC,wBAqCAC,gBA4EAd;AArbN;AAAA;AAAA,MAAI,WAAW;AAAA,QACb,QAAQ,KAAK;AAAA,QACb,WAAW,KAAK;AAAA,MAClB;AAEA,MAAI,SAAS;AAAA,QACX,OAAO,UAAU;AACf,cAAI,KAAK,SAAS;AAChB,qBAAS,KAAK,KAAK,IAAI,CAAC;AACxB,qBAAS,OAAO,IAAI,iBAAiB,GAAG,QAAQ;AAAA,UAClD;AAAA,QACF;AAAA,MACF;AAEA,MAAMG,OAAM,OAAO,oBAAI,QAAM,QAAQ;AAErC,MAAMC,gBAAe,WAASD,KAAI,IAAI,QAAQ;AAE9C,MAAME,qBAAN,MAAwB;AAAA,QACtB,YAAY,YAAY;AACtB,eAAK,sBAAsB,KAAK,oBAAoB,KAAK,IAAI;AAC7D,eAAK,aAAa;AAClB,eAAK,oBAAoB;AAAA,QAC3B;AAAA,QACA,QAAQ;AACN,cAAI,CAAC,KAAK,UAAU,GAAG;AACrB,iBAAK,YAAYF,KAAI;AACrB,mBAAO,KAAK;AACZ,iBAAK,aAAa;AAClB,6BAAiB,oBAAoB,KAAK,mBAAmB;AAC7D,mBAAO,IAAI,gDAAgD,KAAK,YAAY,cAAc,IAAI;AAAA,UAChG;AAAA,QACF;AAAA,QACA,OAAO;AACL,cAAI,KAAK,UAAU,GAAG;AACpB,iBAAK,YAAYA,KAAI;AACrB,iBAAK,YAAY;AACjB,gCAAoB,oBAAoB,KAAK,mBAAmB;AAChE,mBAAO,IAAI,2BAA2B;AAAA,UACxC;AAAA,QACF;AAAA,QACA,YAAY;AACV,iBAAO,KAAK,aAAa,CAAC,KAAK;AAAA,QACjC;AAAA,QACA,aAAa;AACX,eAAK,WAAWA,KAAI;AAAA,QACtB;AAAA,QACA,gBAAgB;AACd,eAAK,oBAAoB;AACzB,eAAK,WAAW;AAChB,iBAAO,KAAK;AACZ,iBAAO,IAAI,oCAAoC;AAAA,QACjD;AAAA,QACA,mBAAmB;AACjB,eAAK,iBAAiBA,KAAI;AAC1B,iBAAO,IAAI,uCAAuC;AAAA,QACpD;AAAA,QACA,eAAe;AACb,eAAK,YAAY;AACjB,eAAK,KAAK;AAAA,QACZ;AAAA,QACA,cAAc;AACZ,uBAAa,KAAK,WAAW;AAAA,QAC/B;AAAA,QACA,OAAO;AACL,eAAK,cAAc,WAAY,MAAM;AACnC,iBAAK,iBAAiB;AACtB,iBAAK,KAAK;AAAA,UACZ,GAAI,KAAK,gBAAgB,CAAC;AAAA,QAC5B;AAAA,QACA,kBAAkB;AAChB,gBAAM,EAAC,gBAAgC,wBAAgD,IAAI,KAAK;AAChG,gBAAM,UAAU,KAAK,IAAI,IAAI,yBAAyB,KAAK,IAAI,KAAK,mBAAmB,EAAE,CAAC;AAC1F,gBAAM,YAAY,KAAK,sBAAsB,IAAI,IAAI;AACrD,gBAAM,SAAS,YAAY,KAAK,OAAO;AACvC,iBAAO,iBAAiB,MAAM,WAAW,IAAI;AAAA,QAC/C;AAAA,QACA,mBAAmB;AACjB,cAAI,KAAK,kBAAkB,GAAG;AAC5B,mBAAO,IAAI,oEAAoE,KAAK,iBAAiB,kBAAkBC,cAAa,KAAK,WAAW,CAAC,yBAAyB,KAAK,YAAY,cAAc,IAAI;AACjN,iBAAK;AACL,gBAAI,KAAK,qBAAqB,GAAG;AAC/B,qBAAO,IAAI,+EAA+EA,cAAa,KAAK,cAAc,CAAC,IAAI;AAAA,YACjI,OAAO;AACL,qBAAO,IAAI,6BAA6B;AACxC,mBAAK,WAAW,OAAO;AAAA,YACzB;AAAA,UACF;AAAA,QACF;AAAA,QACA,IAAI,cAAc;AAChB,iBAAO,KAAK,WAAW,KAAK,WAAW,KAAK;AAAA,QAC9C;AAAA,QACA,oBAAoB;AAClB,iBAAOA,cAAa,KAAK,WAAW,IAAI,KAAK,YAAY;AAAA,QAC3D;AAAA,QACA,uBAAuB;AACrB,iBAAO,KAAK,kBAAkBA,cAAa,KAAK,cAAc,IAAI,KAAK,YAAY;AAAA,QACrF;AAAA,QACA,sBAAsB;AACpB,cAAI,SAAS,oBAAoB,WAAW;AAC1C,uBAAY,MAAM;AAChB,kBAAI,KAAK,kBAAkB,KAAK,CAAC,KAAK,WAAW,OAAO,GAAG;AACzD,uBAAO,IAAI,uFAAuF,SAAS,eAAe,EAAE;AAC5H,qBAAK,WAAW,OAAO;AAAA,cACzB;AAAA,YACF,GAAI,GAAG;AAAA,UACT;AAAA,QACF;AAAA,MACF;AAEA,MAAAC,mBAAkB,iBAAiB;AAEnC,MAAAA,mBAAkB,0BAA0B;AAE5C,MAAI,WAAW;AAAA,QACb,eAAe;AAAA,UACb,SAAS;AAAA,UACT,YAAY;AAAA,UACZ,MAAM;AAAA,UACN,cAAc;AAAA,UACd,WAAW;AAAA,QACb;AAAA,QACA,oBAAoB;AAAA,UAClB,cAAc;AAAA,UACd,iBAAiB;AAAA,UACjB,gBAAgB;AAAA,QAClB;AAAA,QACA,oBAAoB;AAAA,QACpB,WAAW,CAAE,uBAAuB,yBAA0B;AAAA,MAChE;AAEA,OAAM,EAAC,eAAeC,gBAAe,WAAWC,eAAa;AAE7D,MAAMC,sBAAqBD,WAAU,MAAM,GAAGA,WAAU,SAAS,CAAC;AAElE,MAAME,WAAU,CAAC,EAAE;AAEnB,MAAMC,cAAN,MAAiB;AAAA,QACf,YAAYK,WAAU;AACpB,eAAK,OAAO,KAAK,KAAK,KAAK,IAAI;AAC/B,eAAK,WAAWA;AAChB,eAAK,gBAAgB,KAAK,SAAS;AACnC,eAAK,UAAU,IAAIV,mBAAkB,IAAI;AACzC,eAAK,eAAe;AAAA,QACtB;AAAA,QACA,KAAKW,OAAM;AACT,cAAI,KAAK,OAAO,GAAG;AACjB,iBAAK,UAAU,KAAK,KAAK,UAAUA,KAAI,CAAC;AACxC,mBAAO;AAAA,UACT,OAAO;AACL,mBAAO;AAAA,UACT;AAAA,QACF;AAAA,QACA,OAAO;AACL,cAAI,KAAK,SAAS,GAAG;AACnB,mBAAO,IAAI,uDAAuD,KAAK,SAAS,CAAC,EAAE;AACnF,mBAAO;AAAA,UACT,OAAO;AACL,mBAAO,IAAI,uCAAuC,KAAK,SAAS,CAAC,mBAAmBT,UAAS,EAAE;AAC/F,gBAAI,KAAK,WAAW;AAClB,mBAAK,uBAAuB;AAAA,YAC9B;AACA,iBAAK,YAAY,IAAI,SAAS,UAAU,KAAK,SAAS,KAAKA,UAAS;AACpE,iBAAK,qBAAqB;AAC1B,iBAAK,QAAQ,MAAM;AACnB,mBAAO;AAAA,UACT;AAAA,QACF;AAAA,QACA,MAAM,EAAC,eAA8B,IAAI;AAAA,UACvC,gBAAgB;AAAA,QAClB,GAAG;AACD,cAAI,CAAC,gBAAgB;AACnB,iBAAK,QAAQ,KAAK;AAAA,UACpB;AACA,cAAI,KAAK,OAAO,GAAG;AACjB,mBAAO,KAAK,UAAU,MAAM;AAAA,UAC9B;AAAA,QACF;AAAA,QACA,SAAS;AACP,iBAAO,IAAI,yCAAyC,KAAK,SAAS,CAAC,EAAE;AACrE,cAAI,KAAK,SAAS,GAAG;AACnB,gBAAI;AACF,qBAAO,KAAK,MAAM;AAAA,YACpB,SAASU,QAAO;AACd,qBAAO,IAAI,8BAA8BA,MAAK;AAAA,YAChD,UAAE;AACA,qBAAO,IAAI,0BAA0B,KAAK,YAAY,WAAW,IAAI;AACrE,yBAAW,KAAK,MAAM,KAAK,YAAY,WAAW;AAAA,YACpD;AAAA,UACF,OAAO;AACL,mBAAO,KAAK,KAAK;AAAA,UACnB;AAAA,QACF;AAAA,QACA,cAAc;AACZ,cAAI,KAAK,WAAW;AAClB,mBAAO,KAAK,UAAU;AAAA,UACxB;AAAA,QACF;AAAA,QACA,SAAS;AACP,iBAAO,KAAK,QAAQ,MAAM;AAAA,QAC5B;AAAA,QACA,WAAW;AACT,iBAAO,KAAK,QAAQ,QAAQ,YAAY;AAAA,QAC1C;AAAA,QACA,sBAAsB;AACpB,iBAAOR,SAAQ,KAAKD,qBAAoB,KAAK,YAAY,CAAC,KAAK;AAAA,QACjE;AAAA,QACA,WAAW,QAAQ;AACjB,iBAAOC,SAAQ,KAAK,QAAQ,KAAK,SAAS,CAAC,KAAK;AAAA,QAClD;AAAA,QACA,WAAW;AACT,cAAI,KAAK,WAAW;AAClB,qBAAS,SAAS,SAAS,WAAW;AACpC,kBAAI,SAAS,UAAU,KAAK,MAAM,KAAK,UAAU,YAAY;AAC3D,uBAAO,MAAM,YAAY;AAAA,cAC3B;AAAA,YACF;AAAA,UACF;AACA,iBAAO;AAAA,QACT;AAAA,QACA,uBAAuB;AACrB,mBAAS,aAAa,KAAK,QAAQ;AACjC,kBAAM,UAAU,KAAK,OAAO,SAAS,EAAE,KAAK,IAAI;AAChD,iBAAK,UAAU,KAAK,SAAS,EAAE,IAAI;AAAA,UACrC;AAAA,QACF;AAAA,QACA,yBAAyB;AACvB,mBAAS,aAAa,KAAK,QAAQ;AACjC,iBAAK,UAAU,KAAK,SAAS,EAAE,IAAI,WAAW;AAAA,YAAC;AAAA,UACjD;AAAA,QACF;AAAA,MACF;AAEA,MAAAC,YAAW,cAAc;AAEzB,MAAAA,YAAW,UAAU,SAAS;AAAA,QAC5B,QAAQ,OAAO;AACb,cAAI,CAAC,KAAK,oBAAoB,GAAG;AAC/B;AAAA,UACF;AACA,gBAAM,EAAC,YAAYQ,aAAY,SAAkB,QAAgB,WAAsB,KAAU,IAAI,KAAK,MAAM,MAAM,IAAI;AAC1H,kBAAQ,MAAM;AAAA,YACb,KAAKZ,eAAc;AAClB,mBAAK,QAAQ,cAAc;AAC3B,qBAAO,KAAK,cAAc,OAAO;AAAA,YAElC,KAAKA,eAAc;AAClB,qBAAO,IAAI,0BAA0B,MAAM,EAAE;AAC7C,qBAAO,KAAK,MAAM;AAAA,gBAChB,gBAAgB;AAAA,cAClB,CAAC;AAAA,YAEF,KAAKA,eAAc;AAClB,qBAAO,KAAK,QAAQ,WAAW;AAAA,YAEhC,KAAKA,eAAc;AAClB,mBAAK,cAAc,oBAAoBY,WAAU;AACjD,qBAAO,KAAK,cAAc,OAAOA,aAAY,WAAW;AAAA,YAEzD,KAAKZ,eAAc;AAClB,qBAAO,KAAK,cAAc,OAAOY,WAAU;AAAA,YAE5C;AACC,qBAAO,KAAK,cAAc,OAAOA,aAAY,YAAY,OAAO;AAAA,UAClE;AAAA,QACF;AAAA,QACA,OAAO;AACL,iBAAO,IAAI,kCAAkC,KAAK,YAAY,CAAC,eAAe;AAC9E,eAAK,eAAe;AACpB,cAAI,CAAC,KAAK,oBAAoB,GAAG;AAC/B,mBAAO,IAAI,8DAA8D;AACzE,mBAAO,KAAK,MAAM;AAAA,cAChB,gBAAgB;AAAA,YAClB,CAAC;AAAA,UACH;AAAA,QACF;AAAA,QACA,MAAM,OAAO;AACX,iBAAO,IAAI,yBAAyB;AACpC,cAAI,KAAK,cAAc;AACrB;AAAA,UACF;AACA,eAAK,eAAe;AACpB,eAAK,QAAQ,iBAAiB;AAC9B,iBAAO,KAAK,cAAc,UAAU,gBAAgB;AAAA,YAClD,sBAAsB,KAAK,QAAQ,UAAU;AAAA,UAC/C,CAAC;AAAA,QACH;AAAA,QACA,QAAQ;AACN,iBAAO,IAAI,yBAAyB;AAAA,QACtC;AAAA,MACF;AAEA,MAAMP,UAAS,SAASQ,SAAQC,aAAY;AAC1C,YAAIA,eAAc,MAAM;AACtB,mBAAS,OAAOA,aAAY;AAC1B,kBAAM,QAAQA,YAAW,GAAG;AAC5B,YAAAD,QAAO,GAAG,IAAI;AAAA,UAChB;AAAA,QACF;AACA,eAAOA;AAAA,MACT;AAEA,MAAMP,gBAAN,MAAmB;AAAA,QACjB,YAAYG,WAAU,SAAS,CAAC,GAAG,OAAO;AACxC,eAAK,WAAWA;AAChB,eAAK,aAAa,KAAK,UAAU,MAAM;AACvC,UAAAJ,QAAO,MAAM,KAAK;AAAA,QACpB;AAAA,QACA,QAAQ,QAAQK,QAAO,CAAC,GAAG;AACzB,UAAAA,MAAK,SAAS;AACd,iBAAO,KAAK,KAAKA,KAAI;AAAA,QACvB;AAAA,QACA,KAAKA,OAAM;AACT,iBAAO,KAAK,SAAS,KAAK;AAAA,YACxB,SAAS;AAAA,YACT,YAAY,KAAK;AAAA,YACjB,MAAM,KAAK,UAAUA,KAAI;AAAA,UAC3B,CAAC;AAAA,QACH;AAAA,QACA,cAAc;AACZ,iBAAO,KAAK,SAAS,cAAc,OAAO,IAAI;AAAA,QAChD;AAAA,MACF;AAEA,MAAMH,yBAAN,MAA4B;AAAA,QAC1B,YAAY,eAAe;AACzB,eAAK,gBAAgB;AACrB,eAAK,uBAAuB,CAAC;AAAA,QAC/B;AAAA,QACA,UAAU,cAAc;AACtB,cAAI,KAAK,qBAAqB,QAAQ,YAAY,KAAK,IAAI;AACzD,mBAAO,IAAI,sCAAsC,aAAa,UAAU,EAAE;AAC1E,iBAAK,qBAAqB,KAAK,YAAY;AAAA,UAC7C,OAAO;AACL,mBAAO,IAAI,8CAA8C,aAAa,UAAU,EAAE;AAAA,UACpF;AACA,eAAK,kBAAkB;AAAA,QACzB;AAAA,QACA,OAAO,cAAc;AACnB,iBAAO,IAAI,oCAAoC,aAAa,UAAU,EAAE;AACxE,eAAK,uBAAuB,KAAK,qBAAqB,OAAQ,OAAK,MAAM,YAAa;AAAA,QACxF;AAAA,QACA,oBAAoB;AAClB,eAAK,iBAAiB;AACtB,eAAK,iBAAiB;AAAA,QACxB;AAAA,QACA,mBAAmB;AACjB,uBAAa,KAAK,YAAY;AAAA,QAChC;AAAA,QACA,mBAAmB;AACjB,eAAK,eAAe,WAAY,MAAM;AACpC,gBAAI,KAAK,iBAAiB,OAAO,KAAK,cAAc,cAAc,YAAY;AAC5E,mBAAK,qBAAqB,IAAK,kBAAgB;AAC7C,uBAAO,IAAI,uCAAuC,aAAa,UAAU,EAAE;AAC3E,qBAAK,cAAc,UAAU,YAAY;AAAA,cAC3C,CAAE;AAAA,YACJ;AAAA,UACF,GAAI,GAAG;AAAA,QACT;AAAA,MACF;AAEA,MAAMC,iBAAN,MAAoB;AAAA,QAClB,YAAYC,WAAU;AACpB,eAAK,WAAWA;AAChB,eAAK,YAAY,IAAIF,uBAAsB,IAAI;AAC/C,eAAK,gBAAgB,CAAC;AAAA,QACxB;AAAA,QACA,OAAO,aAAa,OAAO;AACzB,gBAAM,UAAU;AAChB,gBAAM,SAAS,OAAO,YAAY,WAAW,UAAU;AAAA,YACrD;AAAA,UACF;AACA,gBAAM,eAAe,IAAID,cAAa,KAAK,UAAU,QAAQ,KAAK;AAClE,iBAAO,KAAK,IAAI,YAAY;AAAA,QAC9B;AAAA,QACA,IAAI,cAAc;AAChB,eAAK,cAAc,KAAK,YAAY;AACpC,eAAK,SAAS,uBAAuB;AACrC,eAAK,OAAO,cAAc,aAAa;AACvC,eAAK,UAAU,YAAY;AAC3B,iBAAO;AAAA,QACT;AAAA,QACA,OAAO,cAAc;AACnB,eAAK,OAAO,YAAY;AACxB,cAAI,CAAC,KAAK,QAAQ,aAAa,UAAU,EAAE,QAAQ;AACjD,iBAAK,YAAY,cAAc,aAAa;AAAA,UAC9C;AACA,iBAAO;AAAA,QACT;AAAA,QACA,OAAOM,aAAY;AACjB,iBAAO,KAAK,QAAQA,WAAU,EAAE,IAAK,kBAAgB;AACnD,iBAAK,OAAO,YAAY;AACxB,iBAAK,OAAO,cAAc,UAAU;AACpC,mBAAO;AAAA,UACT,CAAE;AAAA,QACJ;AAAA,QACA,OAAO,cAAc;AACnB,eAAK,UAAU,OAAO,YAAY;AAClC,eAAK,gBAAgB,KAAK,cAAc,OAAQ,OAAK,MAAM,YAAa;AACxE,iBAAO;AAAA,QACT;AAAA,QACA,QAAQA,aAAY;AAClB,iBAAO,KAAK,cAAc,OAAQ,OAAK,EAAE,eAAeA,WAAW;AAAA,QACrE;AAAA,QACA,SAAS;AACP,iBAAO,KAAK,cAAc,IAAK,kBAAgB,KAAK,UAAU,YAAY,CAAE;AAAA,QAC9E;AAAA,QACA,UAAU,iBAAiB,MAAM;AAC/B,iBAAO,KAAK,cAAc,IAAK,kBAAgB,KAAK,OAAO,cAAc,cAAc,GAAG,IAAI,CAAE;AAAA,QAClG;AAAA,QACA,OAAO,cAAc,iBAAiB,MAAM;AAC1C,cAAI;AACJ,cAAI,OAAO,iBAAiB,UAAU;AACpC,4BAAgB,KAAK,QAAQ,YAAY;AAAA,UAC3C,OAAO;AACL,4BAAgB,CAAE,YAAa;AAAA,UACjC;AACA,iBAAO,cAAc,IAAK,CAAAG,kBAAgB,OAAOA,cAAa,YAAY,MAAM,aAAaA,cAAa,YAAY,EAAE,GAAG,IAAI,IAAI,MAAU;AAAA,QAC/I;AAAA,QACA,UAAU,cAAc;AACtB,cAAI,KAAK,YAAY,cAAc,WAAW,GAAG;AAC/C,iBAAK,UAAU,UAAU,YAAY;AAAA,UACvC;AAAA,QACF;AAAA,QACA,oBAAoBH,aAAY;AAC9B,iBAAO,IAAI,0BAA0BA,WAAU,EAAE;AACjD,eAAK,QAAQA,WAAU,EAAE,IAAK,kBAAgB,KAAK,UAAU,OAAO,YAAY,CAAE;AAAA,QACpF;AAAA,QACA,YAAY,cAAcI,UAAS;AACjC,gBAAM,EAAC,YAAYJ,YAAU,IAAI;AACjC,iBAAO,KAAK,SAAS,KAAK;AAAA,YACxB,SAASI;AAAA,YACT,YAAYJ;AAAA,UACd,CAAC;AAAA,QACH;AAAA,MACF;AAEA,MAAMlB,YAAN,MAAe;AAAA,QACb,YAAY,KAAK;AACf,eAAK,OAAO;AACZ,eAAK,gBAAgB,IAAIc,eAAc,IAAI;AAC3C,eAAK,aAAa,IAAIJ,YAAW,IAAI;AAAA,QACvC;AAAA,QACA,IAAI,MAAM;AACR,iBAAOb,oBAAmB,KAAK,IAAI;AAAA,QACrC;AAAA,QACA,KAAKmB,OAAM;AACT,iBAAO,KAAK,WAAW,KAAKA,KAAI;AAAA,QAClC;AAAA,QACA,UAAU;AACR,iBAAO,KAAK,WAAW,KAAK;AAAA,QAC9B;AAAA,QACA,aAAa;AACX,iBAAO,KAAK,WAAW,MAAM;AAAA,YAC3B,gBAAgB;AAAA,UAClB,CAAC;AAAA,QACH;AAAA,QACA,yBAAyB;AACvB,cAAI,CAAC,KAAK,WAAW,SAAS,GAAG;AAC/B,mBAAO,KAAK,WAAW,KAAK;AAAA,UAC9B;AAAA,QACF;AAAA,MACF;AAAA;AAAA;;;AC9cA,MAKO;AALP,MAAAO,iBAAA;AAAA;AAAA;AAGA;AAEA,MAAO,mBAAQC,gBAAe;AAAA;AAAA;;;ACL9B;AAAA;AAAA;AAAA,MAAAC;AAEA,uBAAS,cAAc,OAAO,uBAAuB;AAAA,QACnD,YAAY;AAAA,QAEZ;AAAA,QAEA,eAAe;AAAA,QAEf;AAAA,QAEA,SAASC,OAAM;AAEb,kBAAQ,IAAI,+BAA+BA,KAAI;AAE/C,mBAAS,iBAAiB,sBAAsB,EAAE,QAAQ,CAACC,aAAY;AACnE,YAAAA,SAAQ,UAAU,OAAO,QAAQ;AAAA,UACrC,CAAC;AAAA,QACH;AAAA,MACF,CAAC;AAAA;AAAA;;;ACfD,WAAS,YAAY,SAAS,OAAO,QAAQ;AAC3C,UAAM,QAAQ,SAAS,eAAe,0BAA0B;AAChE,QAAI,CAAC;AAAO;AAEZ,UAAM,aAAY,oBAAI,KAAK,GAAE,mBAAmB,SAAS,EAAE,QAAQ,MAAM,CAAC;AAC1E,UAAM,OAAO,SAAS,YAAY,WAAM,SAAS,UAAU,WAAM,SAAS,YAAY,WAAM;AAC5F,UAAMC,SAAQ,SAAS,YAAY,iBAAiB,SAAS,UAAU,gBAAgB,SAAS,YAAY,iBAAiB;AAE7H,UAAM,QAAQ,SAAS,cAAc,KAAK;AAC1C,UAAM,YAAY,QAAQA,MAAK;AAC/B,UAAM,YAAY,iCAAiC,SAAS,YAAY,IAAI,IAAI,OAAO;AAGvF,QAAI,QAAQ,WAAW,GAAG;AACxB,YAAM,YAAY;AAAA,IACpB;AAEA,UAAM,YAAY,KAAK;AACvB,UAAM,YAAY,MAAM;AACxB,YAAQ,KAAK,EAAE,MAAM,WAAW,SAAS,KAAK,CAAC;AAAA,EACjD;AAEA,WAAS,iBAAiBC,OAAM;AAC9B,UAAM,oBAAoB,SAAS,eAAe,wBAAwB;AAC1E,UAAM,cAAc,SAAS,eAAe,4BAA4B;AACxE,UAAM,YAAY,SAAS,eAAe,uBAAuB;AACjE,UAAM,WAAW,SAAS,eAAe,sBAAsB;AAE/D,QAAI,CAAC,qBAAqB,CAAC,eAAe,CAAC,aAAa,CAAC;AAAU;AAEnE,sBAAkB,UAAU,OAAO,QAAQ;AAG3C,UAAM,eAAeA,MAAK,WAAW,IAAI,GAAGA,MAAK,QAAQ,MAAM;AAC/D,gBAAY,MAAM,QAAQ,GAAGA,MAAK,QAAQ;AAC1C,gBAAY,aAAa,iBAAiBA,MAAK,QAAQ;AACvD,gBAAY,cAAc;AAE1B,cAAU,cAAcA,MAAK;AAG7B,QAAIA,MAAK,WAAWA,MAAK,YAAY,+BAAW;AAC9C,YAAM,UAAUA,MAAK,WAAW,WAAW,UAAUA,MAAK,WAAW,cAAc,YAAY;AAC/F,kBAAY,GAAGA,MAAK,OAAO,KAAKA,MAAK,QAAQ,MAAM,OAAO;AAAA,IAC5D;AAEA,QAAIA,MAAK,WAAW,aAAa;AAC/B,YAAM,SAASA,MAAK,UAAU,CAAC;AAC/B,kBAAY,8CAAW,OAAO,mBAAmB,CAAC,4BAAQ,OAAO,gBAAgB,CAAC,uBAAQ,SAAS;AACnG,eAAS,YAAY;AAAA;AAAA;AAAA,gDAGF,OAAO,mBAAmB,CAAC;AAAA,gDAC3B,OAAO,uBAAuB,CAAC;AAAA,gDAC/B,OAAO,gBAAgB,CAAC;AAAA,gDACxB,OAAO,oBAAoB,CAAC;AAAA,oCAC9B,OAAO,UAAU,CAAC;AAAA;AAAA;AAAA,IAGrC,WAAWA,MAAK,WAAW,UAAU;AACnC,kBAAY,iCAAQA,MAAK,aAAa,IAAI,OAAO;AACjD,eAAS,YAAY;AAAA;AAAA,yDAEOA,MAAK,iBAAiB,0BAAM;AAAA;AAAA;AAAA,IAG1D;AAAA,EACF;AAEA,WAAS,0BAA0B;AACjC,UAAM,aAAa,SAAS,eAAe,mBAAmB;AAC9D,QAAI,CAAC;AAAY;AAGjB,UAAM,gBAAgB,WAAW,UAAU,IAAI;AAC/C,eAAW,WAAW,aAAa,eAAe,UAAU;AAE5D,UAAM,UAAU,iBAAS,cAAc,OAAO,uBAAuB;AAAA,MACnE,YAAY;AACV,gBAAQ,IAAI,iCAAiC;AAAA,MAC/C;AAAA,MAEA,eAAe;AACb,gBAAQ,IAAI,oCAAoC;AAAA,MAClD;AAAA,MAEA,SAASA,OAAM;AACb,gBAAQ,IAAI,mCAAmCA,KAAI;AACnD,yBAAiBA,KAAI;AAAA,MACvB;AAAA,IACF,CAAC;AAED,eAAW,iBAAiB,SAAS,SAAS,OAAO;AAhGvD,UAAAC;AAiGI,YAAM,eAAe;AAIrB,gBAAU,CAAC;AACX,YAAM,oBAAoB,SAAS,eAAe,wBAAwB;AAC1E,YAAM,cAAc,SAAS,eAAe,4BAA4B;AACxE,YAAM,YAAY,SAAS,eAAe,uBAAuB;AACjE,YAAM,WAAW,SAAS,eAAe,sBAAsB;AAC/D,YAAM,QAAQ,SAAS,eAAe,0BAA0B;AAEhE,UAAI;AAAmB,0BAAkB,UAAU,OAAO,QAAQ;AAClE,UAAI,aAAa;AACf,oBAAY,MAAM,QAAQ;AAC1B,oBAAY,aAAa,iBAAiB,CAAC;AAC3C,oBAAY,cAAc;AAAA,MAC5B;AACA,UAAI;AAAW,kBAAU,cAAc;AACvC,UAAI;AAAU,iBAAS,YAAY;AACnC,UAAI;AAAO,cAAM,YAAY;AAE7B,kBAAY,uDAAe,MAAM;AAEjC,YAAM,WAAW,QAAQ,KAAK;AAAA,QAC5B,QAAQ;AAAA,QACR,SAAS;AAAA,UACP,UAAU;AAAA,UACV,iBAAgBA,MAAA,SAAS,cAAc,uBAAuB,MAA9C,gBAAAA,IAAiD;AAAA,QACnE;AAAA,QACA,aAAa;AAAA,MACf,CAAC,EACA,KAAK,cAAY;AAChB,YAAI,CAAC,SAAS,IAAI;AAChB,gBAAM,IAAI,MAAM,kDAAU;AAAA,QAC5B;AACA,eAAO,SAAS,KAAK;AAAA,MACvB,CAAC,EACA,KAAK,CAAAD,UAAQ;AACZ,YAAI;AAAW,oBAAU,cAAcA,MAAK,WAAW;AAAA,MACzD,CAAC,EACA,MAAM,CAAAE,WAAS;AACd,YAAI;AAAW,oBAAU,cAAcA,OAAM;AAC7C,YAAI;AAAU,mBAAS,YAAY,wCAAwCA,OAAM,OAAO;AAAA,MAC1F,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AA9IA,MAEI;AAFJ;AAAA;AAAA;AAAA,MAAAC;AAEA,MAAI,UAAU,CAAC;AA8If,eAAS,iBAAiB,oBAAoB,uBAAuB;AACrE,eAAS,iBAAiB,cAAc,uBAAuB;AAAA;AAAA;;;ACjJ/D;AAAA;AAAA;AACA;AACA;AAAA;AAAA;;;ACFA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAGA,MAAAC;AAPA,aAAO,QAAQ;AASf,OAAC,MAAY;AACT,cAAM,cAAc;AAAA,MACxB,IAAG;AACH,cAAQ,IAAI,SAAS,eAAe,SAAS,CAAC;AAC9C,UAAG,SAAS,eAAe,SAAS,GAAE;AACpC,gBAAQ,IAAI,iBAAiB;AAAA,MAE/B;AAEA,eAAS,iBAAiB,8BAA8B,SAASC,IAAE;AAC/D,iCAAM,UAAU,SAAS,QAAQ,gBAAgB;AAAA,MACrD,CAAC;AAED,eAAS,iBAAiB,+BAA+B,SAASA,IAAG;AACjE,iCAAM,UAAU,SAAS,QAAQ,YAAY,KAAK;AAAA,MACtD,CAAC;AAID,eAAS,iBAAiB,sBAAsB,SAASA,IAAG;AAExD,iCAAM,UAAU,SAAS,QAAQ,YAAY,KAAK;AAAA,MACtD,CAAC;AAGD,eAAS,iBAAiB,6BAA6B,SAASA,IAAG;AAAA,MAEnE,CAAC;AAGD,eAAS,iBAAiB,oBAAoB,SAASA,IAAG;AACtD,iCAAM,UAAU,SAAS,QAAQ,YAAY,KAAK;AAAA,MACtD,CAAC;AAGD,eAAS,iBAAiB,uBAAuB,SAASA,IAAG;AACzD,iCAAM,UAAU,SAAS,QAAQ,YAAY,KAAK;AAClD,YAAIA,GAAE,OAAO,YAAYA,GAAE,OAAO,SAAS,IAAI,SAAS,gBAAgB,GAAG;AACvE,mCAAM,UAAU,SAAS,MAAM,gBAAgB;AAC/C,kBAAQ,IAAI,4BAA4BA,GAAE,OAAO,SAAS,GAAG;AAAA,QACjE;AAAA,MACJ,CAAC;AAED,aAAO,uBAAsB,CAACC,UAAS,aAAY;AAC/C,cAAM,qBAAqB,CAAC,EAAE,MAAM,KAAKA,SAAQ,iBAAiB,QAAQ,CAAC;AAC3E,2BAAmB,IAAI,SAAU,kBAAkB;AAC/C,iBAAO,IAAI,OAAO,UAAU,QAAQ,gBAAgB;AAAA,QACxD,CAAC;AAAA,MACL;AAAA;AAAA;",
  "names": ["element", "location", "left", "right", "name", "html", "values", "indent", "string", "content", "_a", "method", "cookie", "node", "id", "Turbo", "HTMLElement", "FrameLoadingStyle", "FetchMethod", "_value", "error", "FormSubmissionState", "FormEnctype", "_request", "x", "y", "_event", "link", "placeholder", "index", "option", "root", "TimingMetric", "VisitState", "SystemStatusCode", "_error", "session", "visit", "meta", "PageStage", "position", "render", "e", "document", "consumer", "data", "error", "identifier", "object", "properties", "consumer", "data", "consumer", "identifier", "subscription", "command", "data", "name", "element", "createConsumer", "x", "data", "method", "name", "element", "root", "dispatchEvent", "object", "start", "error", "x", "k", "b", "n", "lo", "hi", "j", "to", "end", "hex", "bytes", "SparkMD5", "content", "hash", "checksum", "global", "exports", "isNode", "createStore", "queries", "actions", "state", "getState", "processActionQueue", "processDispatchQueue", "data", "dispatch", "query", "defineProperty", "definition", "forin", "createObject", "attr", "node", "name", "isSVGElement", "createElement", "element", "appendChild", "index", "appendChildView", "removeChildView", "isBrowser", "el", "getViewRect", "offset", "left", "top", "right", "bottom", "expandRect", "calculateRectSize", "isNumber", "thereYet", "position", "spring", "interpolate", "f", "setTarget", "get", "easeLinear", "t", "easeInOutQuad", "tween", "start", "set", "createAnimator", "addGetSet", "keys", "o", "getter", "setter", "animations", "animator", "write", "destroy", "addEvent", "fn", "removeEvent", "listeners", "add", "remove", "apis", "isDefined", "defaults", "styles", "getOffset", "getScale", "getRect", "applyStyles", "propsHaveChanged", "updateRect", "createView", "read", "create", "writers", "readers", "getElement", "getChildViews", "getReference", "createChildView", "store", "props", "getStyle", "_read", "_write", "_destroy", "is", "b", "createPainter", "id", "setTimerType", "requestTick", "cancelTick", "tick", "createRoute", "root", "insertBefore", "insertAfter", "isArray", "isEmpty", "trim", "toString", "toArray", "isBoolean", "toBoolean", "isString", "toNumber", "toInt", "toFloat", "isInt", "toBytes", "base", "isFunction", "toFunctionReference", "string", "createServerAPI", "createAction", "method", "toServerAPI", "isNull", "isObject", "isAPI", "getType", "replaceSingleQuotes", "object", "e", "convertTo", "getValueByType", "createOption", "createOptions", "createInitialState", "fromCamels", "createOptionAPI", "createOptionActions", "createOptionQueries", "getUniqueId", "obj", "defaultProps", "gen", "arg", "error", "self", "ownKeys", "_getPrototypeOf", "_setPrototypeOf", "p", "_construct", "Parent", "args", "Class", "_wrapNativeSuper", "_get", "target", "property", "receiver", "value", "_n", "_e", "_s", "it", "res", "desc", "v", "r", "initialize", "O", "placements", "j", "k", "other", "re", "groups", "arrayRemove", "run", "on", "off", "copyObjectPropertiesToObject", "createItemAPI", "item", "removeReleasedItems", "getNonNumeric", "getDecimalSeparator", "getThousandsSeparator", "Type", "applyFilterChain", "applyFilters", "addFilter", "extendDefaultOptions", "defaultOptions", "getOptions", "setOptions", "getItemByQuery", "getNumericAspectRatioFromString", "getActiveItems", "canUpdateFileInput", "isItemInErrorState", "isItemInBusyState", "isItemInReadyState", "isAsync", "option", "hasRoomForItem", "count", "limit", "min", "max", "arrayInsert", "insertItem", "isBase64DataURI", "getFilenameFromURL", "getExtensionFromFilename", "guesstimateExtension", "leftPad", "padding", "getDateString", "getFileFromBlob", "blob", "extension", "file", "getBlobBuilder", "createBlob", "getBlobFromByteStringWithMimeType", "ia", "getMimeTypeFromBase64DataURI", "getBase64DataFromBase64DataURI", "getByteStringFromBase64DataURI", "getBlobFromBase64DataURI", "getFileFromBase64DataURI", "getFileNameFromHeader", "getFileSizeFromHeader", "getTranfserIdFromHeader", "getFileInfoFromHeaders", "createFileLoader", "getProgress", "abort", "load", "loadURL", "isGet", "sendRequest", "process", "createResponse", "code", "createTimeoutResponse", "hasQS", "buildURL", "createFetchFunction", "headers", "processFileChunked", "requestTransferId", "requestTransferOffset", "completeProcessingChunks", "canProcessChunk", "processChunk", "chunk", "ondata", "onerror", "retryProcessChunk", "updateTotalProgress", "processChunks", "abortChunks", "createFileProcessorFunction", "createProcessorFunction", "createRevertFunction", "getRandomNumber", "createPerceivedPerformanceUpdater", "clear", "createFileProcessor", "progressFn", "completeFn", "reset", "getFilenameWithoutExtension", "createFileStub", "isFile", "deepCloneObject", "createItem", "setStatus", "fire", "getFileExtension", "getFileType", "getFileSize", "getFile", "meta", "success", "retryLoad", "abortLoad", "serverFileReference", "requestProcessing", "abortProcessing", "abortProcessingRequestComplete", "revert", "key", "getMetadata", "extend", "getItemIndexByQuery", "getItemById", "fetchBlob", "getDomainFromURL", "isExternalURL", "dynamicLabel", "isMockItem", "listUpdated", "optionalPromise", "sortItems", "compare", "getItemByQueryFromState", "upload", "isValidFile", "handleAdd", "loadComplete", "fetch", "result", "processNow", "processNext", "failure", "noop", "removeFromView", "handleRevert", "formatFilename", "text", "polarToCartesian", "describeArc", "x", "y", "end", "percentageArc", "to", "toNaturalFileSize", "bytes", "removeDecimalsWhenZero", "updateFile", "updateFileSizeOnError", "toPercentage", "main", "didSetItemLoadProgress", "didSetItemProcessProgress", "didRequestItemProcessing", "didAbortItemProcessing", "didCompleteItemProcessing", "calculateFileInfoOffset", "calculateButtonWidth", "calculateFileVerticalCenterOffset", "calculateFileHorizontalCenterOffset", "getLoadIndicatorAlignment", "getProcessIndicatorAlignment", "getRemoveIndicatorAligment", "buttonFilter", "map", "action", "didLoadItem", "createSection", "createDragHelper", "grab", "drag", "dist", "drop", "getItemIndexByPosition", "addItemView", "now", "moveItem", "introItemView", "removeItemView", "getItemHeight", "getItemWidth", "dragItem", "location", "currentIndex", "dragHeight", "itemHeight", "offsetY", "filterSetItemActions", "list", "storeDragCoordinates", "clearDragCoordinates", "attrToggle", "resetFileInput", "setAcceptedFileTypes", "toggleAllowMultiple", "toggleDirectoryFilter", "toggleDisabled", "toggleRequired", "setCaptureMethod", "updateRequiredStatus", "updateFieldValidityStatus", "browser", "updateLabelValue", "addBlob", "moveBlob", "hideBlob", "explodeBlob", "setInputFiles", "getField", "syncFieldPositionsWithItems", "didReorderItems", "didAddItem", "didPrepareOutput", "didSetDisabled", "didRemoveItem", "didDefineValue", "getRootNode", "guesstimateMimeType", "requestDataTransferItems", "hasFiles", "getFiles", "isFileSystemItem", "getFilesFromItem", "getFilesInDirectory", "resolveIfDone", "readEntries", "readBatch", "entry", "correctMissingFileType", "isDirectoryEntry", "isEntry", "getAsEntry", "getLinks", "getLinksFromTransferURLData", "getLinksFromTransferMetaData", "eventPosition", "createDragNDropClient", "getDragNDropObserver", "createDragNDropObserver", "handlers", "elementFromPoint", "point", "isEventTarget", "setDropEffect", "effect", "dragenter", "dragover", "dragleave", "createHopper", "handlePaste", "listen", "unlisten", "createPaster", "cb", "assist", "listModified", "isUsingFilePond", "itemAdded", "itemRemoved", "itemProcessed", "itemProcessedUndo", "itemError", "toCamels", "debounce", "prevent", "panel", "history", "calculateListItemMargin", "calculateListHeight", "calculateRootBoundingBoxHeight", "exceedsMaxFiles", "getDragIndex", "toggleDrop", "toggleBrowse", "togglePaste", "createApp", "visibilityHandler", "resizeHandler", "createEvent", "exposeEvent", "routeActionsToEvents", "route", "prepareFile", "addFile", "isFilePondFile", "removeFile", "addFiles", "processFile", "prepareFiles", "processFiles", "removeFiles", "q", "createAppObject", "lowerCaseFirstLetter", "attributeNameToPropertyName", "mapObject", "getAttributesAsObject", "output", "createAppAtElement", "createAppAPI", "replaceInString", "createWorker", "post", "loadImage", "renameFile", "copyFile", "createAppPlugin", "isOperaMini", "hasPromises", "hasBlobSlice", "hasCreateObjectURL", "hasVisibility", "hasTiming", "hasCSSSupports", "isIE11", "updateOptionTypes", "app", "parse", "find", "registerPlugin", "global", "isImage", "getImageSize", "image", "plugin", "Type", "validateFile", "onReceiveSize", "error", "isBrowser", "global", "plugin", "Type", "isBrowser", "global", "plugin", "Type", "mimeTypeMatchesWildCard", "isValidMimeType", "getItemType", "extension", "validateFile", "applyMimeTypeMap", "map", "handleRejection", "index", "isBrowser", "global", "isPreviewableImage", "obj", "defaultProps", "method", "gen", "arg", "fn", "error", "self", "defaults", "keys", "o", "_getPrototypeOf", "_setPrototypeOf", "p", "e", "_construct", "Parent", "args", "Class", "_wrapNativeSuper", "left", "right", "object", "_get", "target", "property", "receiver", "base", "set", "value", "name", "_n", "_e", "_s", "it", "desc", "id", "r", "initialize", "O", "element", "placements", "j", "k", "other", "re", "groups", "vectorMultiply", "v", "vectorAdd", "b", "vectorNormalize", "vectorRotate", "t", "createVector", "x", "y", "getMarkupValue", "getMarkupStyles", "isDefined", "getMarkupRect", "top", "bottom", "pointsToPathShape", "point", "index", "setAttributes", "svg", "updateRect", "updateEllipse", "updateImage", "updateText", "updateLine", "end", "updatePath", "createShape", "node", "createImage", "createLine", "createMarkupByType", "updateMarkupByType", "toOptionalFraction", "prepareMarkup", "sortMarkupByZIndex", "createMarkupView", "write", "root", "markup", "vectorDot", "vectorSubtract", "vectorDistanceSquared", "vectorDistance", "getOffsetPointOnEdge", "A", "B", "C", "getRotatedRectSize", "w", "tl", "tr", "bl", "calculateCanvasSize", "image", "getImageRectZoomFactor", "getCenteredCropRect", "getCurrentCropSize", "createBitmapView", "create", "createImageCanvasWrapper", "flip", "createClipView", "createImageView", "createImageOverlayView", "mask", "BitmapWorker", "ColorMatrixWorker", "data", "getImageSize", "fixImageOrientation", "createPreviewImage", "isBitmap", "calculateAverageColor", "averageColor", "cloneCanvas", "cloneImageData", "loadImage", "createImageWrapperView", "applyFilter", "removeImageView", "shiftImage", "pushImage", "background", "didUpdateItemMetadata", "canCreateImageBitmap", "didCreatePreviewContainer", "drawPreview", "loadPreviewFallback", "previewImageLoaded", "done", "didDrawPreview", "restoreOverlay", "didThrowError", "didCompleteProcessing", "destroy", "plugin", "Type", "is", "didLoadItem", "rescaleItem", "didResizeView", "didCalculatePreviewSize", "isBrowser", "FilePondRails", "FilePondPluginImageValidateSize", "FilePondPluginFileValidateType", "FilePondPluginFileValidateSize", "FilePondPluginImagePreview", "error", "e", "t", "n", "o", "r", "f", "v", "b", "x", "y", "w", "S", "i", "L", "A", "s", "a", "c", "C", "l", "E", "I", "T", "N", "z", "P", "k", "H", "W", "R", "p", "h", "O", "M", "j", "X", "u", "B", "U", "q", "V", "Y", "J", "G", "$", "d", "K", "Q", "Z", "m", "ee", "te", "ne", "oe", "ie", "re", "FilePondRails", "object", "element", "map", "fetch", "values", "content", "index", "left", "right", "propertyName", "constructor", "name", "definition", "properties", "extend", "k", "v", "identifier", "read", "write", "application", "error", "meta", "shift", "e", "method", "node", "match", "oldValue", "_a", "identifiers", "extended", "b", "logger", "n", "text", "start", "element", "node", "node", "name", "element", "style", "element", "x", "y", "element", "getComputedStyle", "element", "element", "element", "element", "element", "getComputedStyle", "css", "window", "min", "max", "v", "keys", "name", "popperOffsets", "min", "max", "offset", "effect", "toPaddingObject", "padding", "x", "y", "popper", "position", "getComputedStyle", "effect", "window", "hash", "node", "element", "element", "html", "x", "y", "element", "html", "x", "y", "getComputedStyle", "element", "getComputedStyle", "node", "element", "list", "element", "clippingParents", "getComputedStyle", "reference", "element", "start", "_options", "elementContext", "padding", "element", "popperOffsets", "offset", "_options", "padding", "placements", "placement", "b", "name", "padding", "placements", "placement", "start", "_loop", "_i", "checks", "name", "offset", "name", "data", "x", "y", "name", "name", "padding", "popperOffsets", "data", "offset", "min", "max", "start", "maxOffset", "_offset", "element", "node", "element", "modifiers", "map", "fn", "modifiers", "merged", "element", "defaultModifiers", "defaultOptions", "createPopper", "reference", "popper", "options", "index", "fn", "_options", "name", "destroy", "state", "effect", "noopFn", "hasOwnProperty", "obj", "key", "call", "getValueAtIndexOrReturn", "value", "index", "defaultValue", "Array", "isArray", "v", "isType", "type", "str", "toString", "indexOf", "invokeWithArgsOrReturn", "args", "debounce", "fn", "ms", "timeout", "arg", "clearTimeout", "setTimeout", "removeProperties", "keys", "clone", "forEach", "splitBySpaces", "split", "filter", "Boolean", "normalizeToArray", "concat", "pushIfUnique", "arr", "push", "unique", "item", "getBasePlacement", "placement", "arrayFrom", "slice", "removeUndefinedProps", "Object", "reduce", "acc", "undefined", "div", "document", "createElement", "isElement", "some", "isNodeList", "isMouseEvent", "isReferenceElement", "_tippy", "reference", "getArrayOfElements", "querySelectorAll", "setTransitionDuration", "els", "el", "style", "transitionDuration", "setVisibilityState", "state", "setAttribute", "getOwnerDocument", "elementOrElements", "element", "ownerDocument", "body", "isCursorOutsideInteractiveBorder", "popperTreeData", "event", "clientX", "clientY", "every", "popperRect", "popperState", "props", "interactiveBorder", "basePlacement", "offsetData", "modifiersData", "offset", "topDistance", "top", "y", "bottomDistance", "bottom", "leftDistance", "left", "x", "rightDistance", "right", "exceedsTop", "exceedsBottom", "exceedsLeft", "exceedsRight", "updateTransitionEndListener", "box", "action", "listener", "method", "actualContains", "parent", "child", "target", "contains", "getRootNode", "host", "onDocumentTouchStart", "currentInput", "isTouch", "window", "performance", "addEventListener", "onDocumentMouseMove", "now", "lastMouseMoveTime", "removeEventListener", "onWindowBlur", "activeElement", "instance", "blur", "isVisible", "bindGlobalEventListeners", "TOUCH_OPTIONS", "createMemoryLeakWarning", "txt", "join", "clean", "spacesAndTabs", "lineStartWithSpaces", "replace", "trim", "getDevMessage", "message", "getFormattedMessage", "resetVisitedMessages", "visitedMessages", "Set", "warnWhen", "condition", "has", "add", "console", "warn", "errorWhen", "error", "validateTargets", "targets", "didPassFalsyValue", "didPassPlainObject", "prototype", "String", "getExtendedPassedProps", "passedProps", "plugins", "pluginProps", "plugin", "name", "_name", "defaultProps", "getDataAttributeProps", "propKeys", "defaultKeys", "valueAsString", "getAttribute", "JSON", "parse", "e", "evaluateProps", "out", "content", "ignoreAttributes", "aria", "expanded", "interactive", "validateProps", "partialProps", "prop", "nonPluginProps", "didPassUnknownProp", "length", "dangerouslySetInnerHTML", "html", "innerHTML", "createArrowElement", "arrow", "className", "ARROW_CLASS", "SVG_ARROW_CLASS", "appendChild", "setContent", "allowHTML", "textContent", "getChildren", "popper", "firstElementChild", "boxChildren", "children", "find", "node", "classList", "CONTENT_CLASS", "backdrop", "BACKDROP_CLASS", "render", "BOX_CLASS", "onUpdate", "prevProps", "nextProps", "theme", "removeAttribute", "animation", "inertia", "maxWidth", "role", "removeChild", "createTippy", "showTimeout", "hideTimeout", "scheduleHideAnimationFrame", "isVisibleFromClick", "didHideDueToDocumentMouseDown", "didTouchMove", "ignoreOnFirstUpdate", "lastTriggerEvent", "currentTransitionEndListener", "onFirstUpdate", "listeners", "debouncedOnMouseMove", "onMouseMove", "interactiveDebounce", "currentTarget", "id", "idCounter", "popperInstance", "isEnabled", "isDestroyed", "isMounted", "isShown", "clearDelayTimeouts", "setProps", "show", "hide", "hideWithInteractivity", "enable", "disable", "unmount", "destroy", "pluginsHooks", "map", "hasAriaExpanded", "hasAttribute", "addListeners", "handleAriaExpandedAttribute", "handleStyles", "invokeHook", "showOnCreate", "scheduleShow", "trigger", "getDocument", "getNormalizedTouchSettings", "touch", "getIsCustomTouchBehavior", "getIsDefaultRenderFn", "$$tippy", "getCurrentTarget", "parentNode", "getDefaultTemplateChildren", "getDelay", "isShow", "delay", "fromHide", "pointerEvents", "zIndex", "hook", "shouldInvokePropsHook", "pluginHooks", "handleAriaContentAttribute", "attr", "nodes", "triggerTarget", "currentValue", "nextValue", "cleanupInteractiveMouseListeners", "mouseMoveListeners", "onDocumentPress", "actualTarget", "composedPath", "hideOnClick", "removeDocumentPress", "onTouchMove", "onTouchStart", "addDocumentPress", "doc", "onTransitionedOut", "duration", "callback", "onTransitionEnd", "onTransitionedIn", "on", "eventType", "handler", "options", "onTrigger", "passive", "onMouseLeave", "isIE11", "onBlurOrFocusOut", "removeListeners", "shouldScheduleClickHide", "isEventListenerStopped", "wasFocused", "scheduleHide", "isCursorOverReferenceOrPopper", "getNestedPopperTree", "getBoundingClientRect", "shouldBail", "relatedTarget", "createPopperInstance", "destroyPopperInstance", "popperOptions", "getReferenceClientRect", "moveTransition", "computedReference", "contextElement", "tippyModifier", "enabled", "phase", "requires", "attributes", "modifiers", "padding", "adaptive", "createPopper", "mount", "appendTo", "TIPPY_DEFAULT_APPEND_TO", "nextElementSibling", "touchValue", "touchDelay", "requestAnimationFrame", "cancelAnimationFrame", "nestedPopper", "forceUpdate", "isAlreadyVisible", "isDisabled", "isTouchAndTouchDisabled", "onShow", "visibility", "transition", "offsetHeight", "mountedInstances", "isAlreadyHidden", "onHide", "i", "tippy", "optionalProps", "elements", "isSingleContentElement", "isMoreThanOneReferenceElement", "instances", "isBrowser", "renderProps", "setDefaultProps", "applyStylesModifier", "capture", "msCrypto", "animateFill", "followCursor", "inlinePositioning", "sticky", "onAfterUpdate", "onBeforeUpdate", "onCreate", "onDestroy", "onHidden", "onMount", "onShown", "onUntrigger", "onClickOutside", "applyStyles", "effect", "initialStyles", "position", "strategy", "margin", "assign", "styles", "e", "text", "to", "end", "code", "extend", "values", "index", "f", "insert", "b", "left", "selection", "range", "e", "compare", "get", "tr", "extension", "prec", "content", "_a", "defaults", "config", "cur", "string", "n", "start", "offset", "copy", "add", "node", "top", "number", "MapMode", "doc", "process", "i", "r", "main", "x", "id", "init", "create", "base", "v", "map", "effect", "_Transaction", "scrollIntoView", "CharCategory", "require", "j", "phrase", "name", "at", "k", "lo", "hi", "cursor", "layer", "top", "render", "spec", "b", "id", "root", "doc", "j", "mod", "index", "k", "text", "name", "code", "getSelection", "root", "contains", "node", "doc", "elt", "selection", "index", "left", "x", "y", "cur", "top", "rect", "start", "to", "range", "name", "code", "offset", "insert", "text", "flatten", "r", "end", "j", "view", "pos", "b", "from", "add", "right", "bottom", "replace", "br", "type", "order", "_a", "inside", "content", "element", "dist", "f", "e", "main", "event", "extend", "del", "effect", "tr", "DecorationComparator", "scrollIntoView", "base", "read", "shift", "meta", "mod", "map", "is", "command", "k", "cmd", "between", "pieces", "config", "v", "re", "cursor", "asArray", "ie", "init_dist", "track", "_event", "_to", "at", "BlockType", "of", "decorations", "values", "t", "id", "create", "me", "Direction", "cView", "i", "viewport", "handlers", "passive", "exists", "data", "QueryType", "split", "_height", "_value", "_type", "gap", "n", "point", "key", "dispatch", "div", "observers", "cache", "layer", "_t", "deco", "m", "arrow", "editor", "space", "gutter", "gutters", "main", "init_dist", "to", "node", "_a", "getChildren", "cur", "root", "data", "cursor", "types", "children", "positions", "id", "start", "end", "buffer", "index", "j", "length", "lookAhead", "base", "pair", "nodeSize", "nodeStart", "from", "offset", "parse", "r", "range", "b", "split", "copy", "Range", "pos", "init_dist", "config", "parser", "name", "map", "add", "IterMode", "_parent", "e", "n", "cache", "f", "string", "done", "inner", "sameArray", "b", "x", "j", "e", "tags", "map", "all", "to", "node", "init_dist", "base", "t", "mod", "exists", "config", "at", "cursor", "start", "end", "hasChild", "values", "node", "to", "add", "cur", "of", "lineEnd", "closing", "space", "tr", "doc", "r", "head", "line", "indent", "start", "end", "range", "_a", "from", "b", "config", "baseTheme$1", "element", "main", "decorations", "index", "handle", "cursor", "bracket", "text", "pos", "name", "baseTheme", "init_dist", "data", "parser", "top", "base", "viewport", "f", "e", "now", "language", "all", "v", "main", "init_dist", "f", "option", "dispatch", "tr", "getConfig", "data", "to", "r", "range", "comment", "indent", "empty", "end", "history", "config", "e", "command", "selection", "start", "b", "isAdjacent", "t", "_t", "none", "node", "at", "bracket", "effect", "space", "extend", "insert", "init_dist", "o", "_a", "invert", "cur", "nextChar", "lineEnd", "changes", "findFold", "to", "_a", "from", "config", "range", "event", "e", "selection", "init_dist", "init_dist", "range", "to", "node", "bl", "to", "count", "end", "e", "text", "offset", "rangeEnd", "start", "node", "conc", "b", "none", "names", "name", "Element", "content", "Line", "Buffer", "FragmentCursor", "init_dist", "hash", "Type", "indent", "elt", "base", "parser", "parse", "r", "eol", "top", "t", "w", "config", "nodeTypes", "id", "rm", "spec", "comment", "link", "j", "k", "element", "cur", "n", "Image", "values", "index", "init_lib", "init_lib", "characterReference", "list", "start", "remove", "end", "all", "index", "extension", "hasOwnProperty", "left", "right", "code", "list", "handlers", "base", "code", "replace", "value", "code", "colon", "slash", "index", "start", "code", "replace", "tags", "handlers", "data", "encode", "compile", "index", "start", "handle", "hasOwnProperty", "lineEnding", "buffer", "previous", "count", "id", "context", "ok", "max", "start", "code", "previous", "code", "data", "content", "self", "start", "code", "point", "index", "ok", "document", "code", "constructs", "index", "index", "text", "offset", "start", "end", "ok", "attentionMarkers", "previous", "code", "inside", "point", "ok", "start", "code", "ok", "start", "code", "ok", "self", "start", "code", "ok", "start", "code", "inside", "ok", "self", "max", "start", "code", "ok", "self", "start", "code", "meta", "effects", "nok", "ok", "self", "start", "code", "inside", "furtherStart", "index", "code", "ok", "self", "start", "between", "data", "index", "previous", "start", "ok", "previous", "code", "self", "content", "init_content", "ok", "max", "start", "code", "ok", "self", "start", "code", "ok", "start", "code", "inside", "ok", "start", "code", "ok", "self", "identifier", "start", "code", "titleBefore", "ok", "start", "code", "content", "text", "ok", "start", "code", "data", "index", "ok", "self", "start", "code", "slash", "name", "ok", "self", "index", "start", "code", "comment", "end", "index", "offset", "text", "ok", "self", "start", "code", "ok", "self", "start", "code", "ok", "self", "start", "code", "ok", "start", "code", "ok", "start", "code", "ok", "self", "start", "code", "inside", "index", "content", "text", "definition", "heading", "ok", "self", "start", "code", "paragraph", "inside", "init_content", "self", "content", "code", "self", "constructs", "text", "start", "code", "data", "list", "index", "string", "parser", "initialize", "point", "exit", "now", "write", "main", "offset", "go", "code", "constructs", "map", "start", "all", "list", "ok", "from", "index", "disable", "document", "flow", "string", "text", "constructs", "parser", "create", "content", "document", "string", "start", "end", "code", "head", "point", "index", "init_lib", "init_lib", "config", "link", "heading", "blockQuote", "codeText", "definition", "emphasis", "hardBreak", "html", "image", "listItem", "list", "paragraph", "strong", "thematicBreak", "data", "compile", "exit", "index", "point", "start", "create", "node", "text", "string", "extension", "right", "left", "init_lib", "init_lib", "index", "all", "node", "init_lib", "init_lib", "is", "node", "index", "name", "visit", "offset", "init_lib", "init_lib", "visit", "node", "index", "init_lib", "init_lib", "one", "fn", "handlers", "own", "id", "configure", "base", "extension", "index", "own", "list", "left", "right", "node", "exit", "map", "list", "none", "index", "index", "index", "count", "max", "node", "node", "exit", "value", "map", "definition", "node", "exit", "init_definition", "node", "exit", "node", "visit", "heading", "node", "exit", "subexit", "value", "node", "node", "exit", "node", "exit", "reference", "node", "index", "position", "node", "node", "exit", "value", "node", "exit", "text", "reference", "list", "node", "exit", "index", "init_list", "node", "exit", "map", "index", "node", "exit", "init_lib", "init_lib", "node", "fn", "node", "exit", "text", "node", "init_text", "thematicBreak", "init_thematic_break", "init_definition", "init_list", "init_text", "init_thematic_break", "definition", "heading", "list", "text", "thematicBreak", "left", "right", "node", "index", "handle", "index", "left", "right", "map", "start", "one", "value", "config", "index", "position", "start", "end", "b", "config", "now", "shift", "configure", "invalid", "name", "exit", "node", "left", "right", "config", "init_lib", "init_lib", "text", "to", "init_dist", "tr", "effect", "f", "generateRandomDomId", "config", "_a", "init_dist", "heading", "visit", "node", "element", "to", "words", "list", "o", "start", "_a", "text", "to", "main", "range", "b", "option", "space", "left", "offset", "config", "content", "_s", "_v", "j", "max", "off", "applyCompletion", "scrollIntoView", "element", "self", "name", "Option", "compare", "cur", "id", "tr", "r", "snippet", "editor", "baseTheme", "dispatch", "inputHandler", "defaults", "bracket", "doc", "node", "none", "init_dist", "types", "score", "e", "options", "destroy", "ul", "li", "effect", "f", "q", "indent", "pos", "insert", "elt", "name", "add", "_a", "text", "go", "ln", "cl", "percent", "line", "selection", "to", "main", "cursor", "r", "word", "x", "doc", "index", "_to", "f", "_e", "config", "phrase", "lineEnd", "start", "end", "empty", "baseTheme$1", "QueryType", "baseTheme", "init_dist", "code", "tr", "e", "b", "range", "v", "dispatch", "st", "add", "effect", "from", "cur", "name", "content", "t", "e", "r", "n", "o", "ie", "f", "E", "C", "Z", "$", "Q", "rr", "_a", "fn", "gt", "ur", "hu", "Cu", "Ir", "pt", "io", "Je", "e", "r", "n", "t", "Rn", "zn", "Ar", "Mn", "ue", "X", "Br", "fe", "Yn", "Ae", "H", "o", "W", "G", "oe", "le", "se", "ve", "ae", "ce", "ee", "Qe", "Be", "Fe", "Ze", "qr", "qe", "Tr", "$n", "nr", "Kn", "Gn", "U", "Jn", "Vn", "Hn", "Xn", "Ee", "tr", "Qn", "Zn", "Dt", "f", "ir", "Pr", "Xe", "Wn", "V", "re", "R", "x", "B", "b", "v", "y", "k", "E", "Ne", "O", "_a", "Te", "Se", "Lr", "Pe", "ht", "ar", "Ce", "De", "Re", "Or", "be", "wr", "vt", "cr", "sr", "Ft", "Et", "Sr", "Y", "Nn", "Ct", "bt", "er", "xt", "mt", "_r", "Un", "lt", "C", "On", "Ie", "kr", "_e", "Le", "ze", "lr", "vu", "xu", "Pt", "wu", "qu", "Su", "Ou", "Nu", "zu", "Yu", "ju", "Yr", "Ot", "Ku", "Qu", "Oe", "jr", "Mt", "$t", "ne", "Gt", "Jt", "ao", "co", "ho", "Fo", "xo", "wo", "sn", "Lo", "No", "zo", "Vo", "$o", "Ho", "Qo", "gn", "An", "Ln", "ft", "jn", "dt", "or", "Pn", "Sn", "_n", "init_markdown", "In", "_v", "Si", "yt", "kt", "Du", "eu", "ru", "uu", "Me", "tu", "nu", "iu", "Ue", "At", "Bt", "qt", "Nr", "au", "ou", "su", "cu", "lu", "wt", "fu", "xe", "w", "A", "q", "T", "N", "P", "S", "L", "we", "j", "I", "J", "K", "me", "M", "ct", "du", "pu", "mu", "Tt", "St", "Fu", "bu", "ku", "Bu", "Au", "Tu", "Lu", "zr", "Pu", "_u", "_t", "Iu", "Ur", "Mr", "Ru", "Uu", "Mu", "Vu", "$u", "pe", "Lt", "Wu", "It", "Hu", "Nt", "Xu", "Vr", "fr", "Ye", "Ju", "Ve", "Zu", "Rt", "zt", "Dr", "pr", "dr", "Ut", "Yt", "de", "te", "$r", "Vt", "Fp", "je", "Gr", "Hr", "Wt", "hr", "id", "Ht", "Wr", "Kt", "mr", "eo", "en", "Xt", "to", "Qt", "Zt", "Kr", "so", "po", "lo", "rn", "Id", "nn", "tn", "fo", "Do", "vo", "go", "mo", "bo", "Eo", "Co", "on", "un", "Jr", "an", "ko", "yo", "Ao", "_o", "gr", "Po", "Bo", "qo", "$e", "vr", "cn", "ln", "Fr", "So", "Io", "Oo", "fn", "Dn", "Xr", "Qr", "Zr", "Ro", "Yo", "Mo", "Uo", "jo", "Go", "Xo", "Wo", "Jo", "Ko", "Zo", "is", "et", "hn", "rt", "z", "rm", "tt", "_s", "Ge", "vn", "ke", "He", "Er", "ie", "he", "bn", "Cn", "nt", "it", "Cr", "kn", "xn", "yn", "wn", "ut", "br", "Bn", "xr", "at", "We", "Ke", "qn", "yr", "ot", "st", "Tn", "init_dist", "content", "_a", "assign", "obj", "props", "i", "removeNode", "node", "parentNode", "removeChild", "createElement", "type", "children", "key", "ref", "normalizedProps", "arguments", "length", "slice", "call", "defaultProps", "createVNode", "original", "vnode", "undefined", "constructor", "vnodeId", "options", "createRef", "current", "Fragment", "Component", "context", "getDomSibling", "childIndex", "indexOf", "sibling", "updateParentDomPointers", "child", "base", "enqueueRender", "c", "rerenderQueue", "push", "process", "prevDebounce", "debounceRendering", "defer", "queue", "sort", "a", "b", "some", "component", "commitQueue", "oldVNode", "oldDom", "parentDom", "diff", "ownerSVGElement", "commitRoot", "diffChildren", "renderResult", "newParentVNode", "oldParentVNode", "globalContext", "isSvg", "excessDomChildren", "isHydrating", "j", "childVNode", "newDom", "firstChildDom", "refs", "oldChildren", "EMPTY_ARR", "oldChildrenLength", "Array", "isArray", "EMPTY_OBJ", "reorderChildren", "placeChild", "unmount", "applyRef", "tmp", "toChildArray", "out", "nextDom", "sibDom", "outer", "appendChild", "nextSibling", "insertBefore", "diffProps", "dom", "newProps", "oldProps", "hydrate", "setProperty", "setStyle", "style", "value", "IS_NON_DIMENSIONAL", "test", "name", "oldValue", "useCapture", "o", "cssText", "replace", "toLowerCase", "_listeners", "addEventListener", "eventProxyCapture", "eventProxy", "removeEventListener", "e", "setAttribute", "removeAttribute", "event", "newVNode", "isNew", "oldState", "snapshot", "clearProcessingException", "provider", "componentContext", "newType", "contextType", "prototype", "render", "doRender", "sub", "state", "getDerivedStateFromProps", "componentWillMount", "componentDidMount", "componentWillReceiveProps", "shouldComponentUpdate", "forEach", "componentWillUpdate", "componentDidUpdate", "getChildContext", "getSnapshotBeforeUpdate", "diffElementNodes", "diffed", "root", "cb", "oldHtml", "newHtml", "nodeType", "localName", "document", "createTextNode", "createElementNS", "is", "data", "childNodes", "dangerouslySetInnerHTML", "attributes", "innerHTML", "checked", "parentVNode", "skipRemove", "r", "componentWillUnmount", "this", "replaceNode", "firstChild", "__source", "__self", "error", "v", "max", "split", "string", "element", "k", "defaults", "values", "words", "score", "index", "id", "flushAfterPaintEffects", "afterPaintEffects", "pop", "invokeCleanup", "invokeEffect", "hook", "comp", "currentComponent", "cleanup", "shallowDiffers", "PureComponent", "p", "Suspense", "_suspenders", "suspended", "SuspenseList", "_next", "_map", "empty", "isPropagationStopped", "cancelBubble", "isDefaultPrevented", "defaultPrevented", "isValidElement", "currentIndex", "prevRaf", "oldBeforeDiff", "oldBeforeRender", "oldAfterDiff", "oldCommit", "oldBeforeUnmount", "HAS_RAF", "oldDiffHook", "REACT_FORWARD_SYMBOL", "oldCatchError", "oldUnmount", "resolve", "REACT_ELEMENT_TYPE", "CAMEL_PROPS", "IS_DOM", "onChangeInputType", "oldEventHook", "classNameDescriptor", "oldVNodeHook", "ctor", "handled", "getDerivedStateFromError", "setState", "componentDidCatch", "update", "callback", "s", "forceUpdate", "Promise", "then", "bind", "setTimeout", "count", "x", "y", "hooks", "requestAnimationFrame", "raf", "done", "clearTimeout", "timeout", "cancelAnimationFrame", "filter", "hasErrored", "isPureReactComponent", "Symbol", "for", "Forwarded", "promise", "suspendingVNode", "suspendingComponent", "resolved", "onResolved", "onSuspensionComplete", "suspendedVNode", "removeOriginal", "detachedParent", "originalParent", "map", "wasHydrating", "detachedComponent", "detachedClone", "effect", "fallback", "list", "delete", "revealOrder", "size", "delegated", "get", "unsuspend", "wrappedUnsuspend", "Map", "reverse", "set", "_this", "isReactComponent", "Object", "defineProperty", "configurable", "writable", "persist", "nativeEvent", "class", "nonCustomElement", "multiple", "selected", "defaultValue", "className", "enumerable", "$$typeof", "theme", "left", "right", "ii", "start", "end", "position", "placeholderMatcher", "PlaceholderWidget", "init_dist", "content", "_a", "data", "keyword", "keyword", "doc", "to", "handle", "v", "init_dist", "add", "start", "end", "mapRange", "range", "to", "r", "addRange", "init_dist", "tr", "e", "FilePondRails", "error", "_a", "init_dist", "tr", "effect", "f", "FilePondRails", "error", "_a", "setDom", "init_dist", "tr", "effect", "f", "theme", "init_dist", "tr", "e", "f", "on", "doc", "count", "init_dist", "node", "to", "n", "config", "id", "parser", "init_dist", "offset", "count", "start", "to", "text", "end", "m", "node", "next", "Table", "Emoji", "init_dist", "content", "Type", "data", "index", "to", "start", "cursor", "mask", "FragmentCursor", "id", "init_dist", "score", "_a", "parser", "base", "count", "end", "cur", "top", "v", "i", "offset", "range", "n", "r", "fr", "main", "b", "j", "split", "insert", "x", "name", "parse", "w", "config", "copy", "t", "prec", "values", "offset", "name", "getAttrs", "node", "tags", "id", "Element", "n", "attrs", "to", "parser", "init_dist", "space", "dash", "hash", "parser", "init_dist", "inside", "names", "name", "node", "doc", "_a", "callee", "cur", "cursor", "option", "tags", "identifier", "init_dist", "n", "parser", "newline", "space", "slash", "spec_identifier", "parser", "init_dist", "node", "id", "doc", "cache", "top", "name", "config", "max", "android", "init_dist", "parser", "n", "to", "text", "base", "range", "_a", "empty", "insert", "elementName", "doc", "max", "name", "to", "end", "identifier", "elt", "names", "_a", "base", "config", "html", "autoCloseTags", "S", "selfClosers", "init_dist", "n", "parser", "cur", "node", "text", "range", "insert", "heading", "parser", "data", "init_markdown", "init_dist", "start", "end", "node", "Emoji", "node", "doc", "cur", "Context", "offset", "number", "content", "space", "init_dist", "init_markdown", "to", "add", "dispatch", "range", "insert", "changes", "e", "start", "config", "parser", "init_dist", "init_markdown", "html", "text", "ok", "self", "data", "start", "code", "trail", "index", "init_html", "init_html", "ok", "self", "index", "start", "code", "id", "string", "data", "identifier", "tokenizeIndent", "init_syntax", "config", "emptyOptions", "own", "id", "index", "reference", "injected", "init_html", "init_syntax", "init_html", "init_html", "index", "text", "insideSpan", "ok", "previous", "start", "code", "init_syntax", "init_html", "init_syntax", "init_html", "at", "remove", "add", "index", "b", "index", "ok", "self", "start", "code", "index", "map", "range", "now", "end", "b", "init_syntax", "init_html", "init_syntax", "init_lib", "init_lib", "init_html", "ok", "self", "code", "inside", "init_syntax", "init_html", "init_syntax", "init_dist", "tr", "e", "f", "on", "previewHeight", "text", "html", "start", "end", "markdown", "to", "init_dist", "v", "init_dist", "init_markdown", "editor", "to", "content", "doc", "history", "text", "range", "start", "end", "tr", "FetchResponse", "name", "cookie", "object", "element", "FetchRequest", "method", "error", "FetchResponse", "FetchRequest", "init_src", "t", "e", "i", "s", "a", "n", "o", "r", "v", "f", "T", "w", "b", "y", "x", "O", "l", "d", "h", "g", "p", "c", "u", "m", "_a", "M", "I", "N", "S", "E", "name", "types", "t", "error", "keys", "k", "v", "index", "values", "keys", "k", "error", "code", "name", "count", "method", "name", "copy", "offset", "data", "bytes", "v", "start", "end", "left", "_value", "mask", "name", "e", "v", "offset", "_value", "bytes", "BN_0", "data", "_data", "offset", "bytes", "output", "o", "j", "nextChar", "pair", "_signal", "init", "FetchResponse", "error", "FetchRequest", "all", "code", "_headers", "_body", "method", "keys", "index", "process", "location", "_request", "_a", "response", "delay", "k", "stall", "e", "BN_1", "BN_0", "signed", "v", "name", "toString", "index", "_value", "b", "_format", "o", "data", "offset", "_data", "object", "length", "data", "v", "index", "randomBytes", "bytes", "init_utils", "name", "error", "path", "object", "bytes", "_guard", "_data", "init_utils", "names", "index", "args", "start", "end", "keys", "offset", "data", "count", "_a", "number", "n", "b", "hash", "min", "crypto", "data", "r", "defaults", "crypto", "init_utils", "shift", "init_utils", "hash", "to", "hash", "number", "ti", "Ti", "ui", "init_utils", "isLE", "_32n", "wl", "init_utils", "data", "to", "init_utils", "b", "A", "B", "C", "E", "G", "H", "offset", "W2", "T1", "T2", "n", "le", "Al", "add", "Bl", "_l", "Cl", "Dl", "El", "init_utils", "n", "Al", "Bl", "Cl", "Dl", "El", "Fl", "Gl", "Hl", "offset", "randomBytes", "crypto", "init_utils", "_data", "data", "locked", "init_hmac", "init_utils", "B", "round", "x", "Tl", "y", "t", "shift", "init_utils", "R", "j", "number", "data", "bytes", "to", "_data", "data", "locked", "init_utils", "x", "y", "z", "Pi", "Kl", "Kr", "init_utils", "j", "k", "shift", "offset", "al", "ar", "bl", "br", "cl", "cr", "dl", "dr", "el", "er", "rl", "rr", "sr", "tl", "tr", "ripemd160", "_data", "data", "locked", "init_ripemd160", "init_utils", "pbkdf2", "locked", "init_pbkdf2", "init_utils", "randomBytes", "locked", "pi", "ii", "oi", "rotl", "r", "N", "number", "B", "V", "Pi", "j", "k", "init_utils", "b", "scrypt", "N", "r", "init_scrypt", "init_utils", "sha256", "_data", "data", "sha512", "init_sha2", "init_utils", "concatBytes", "utf8ToBytes", "bytes", "u8a", "j", "n", "e", "r", "b2", "_0n", "_1n", "v", "k", "b", "gen", "object", "_2n", "init_utils", "data", "b", "_0n", "_1n", "x", "number", "y", "v", "q", "r", "n", "P", "_2n", "Q", "S", "Z", "Fp", "root", "t2", "n2", "map", "f", "bitLen", "isLE", "bytes", "init_utils", "W", "n", "_0n", "_1n", "base", "window", "f", "mask", "offset", "offset2", "P", "init_utils", "Fp", "toBytes", "point", "concatBytes", "bytes", "x", "y", "b", "x2", "_0n", "n", "error", "Point", "P", "left", "right", "X2", "Y2", "U1", "U2", "b3", "_3n", "t2", "I", "_1n", "f", "Q", "G", "a", "z", "number", "to", "Signature", "r", "R", "ir", "k", "hash", "randomBytes", "e", "q", "C", "_a", "_sig", "s", "is", "v", "_2n", "_4n", "init_utils", "data", "E", "rl", "hash", "create", "init_utils", "y", "P", "_3n", "b2", "_2n", "b22", "t2", "root", "_1n", "_0n", "b", "k", "n", "k2", "N", "BN_0", "BN_1", "_guard", "_r", "init_utils", "r", "v", "_value", "bytes", "s", "_v", "init_utils", "bytes", "point", "pbkdf2", "randomBytes", "ripemd160", "scrypt", "sha256", "sha512", "init_crypto", "init_hmac", "init_ripemd160", "init_pbkdf2", "init_scrypt", "init_sha2", "checksum", "BN_0", "init_crypto", "init_utils", "init_crypto", "init_utils", "error", "resolver", "init_utils", "init_address", "signed", "b", "init_utils", "v", "name", "init_address", "_value", "error", "values", "unique", "name", "index", "keys", "offset", "error", "init_utils", "_value", "count", "_value", "init_utils", "init_utils", "name", "_value", "data", "BN_0", "BN_1", "init_utils", "signed", "name", "_value", "_value", "types", "values", "name", "index", "_value", "id", "init_crypto", "init_utils", "bytes", "N", "register", "range", "start", "end", "b", "offset", "x", "v", "n", "w", "j", "y", "decode", "Q", "S", "B", "br", "r", "add", "cc", "R", "P", "M", "V", "gs", "G", "Emoji", "node", "max", "name", "flatten", "split", "nf", "ef", "unique", "error", "output", "gg", "g", "decomposed", "e", "k", "init_dist", "name", "bytes", "error", "Zeros", "init_crypto", "init_utils", "init_dist", "index", "b", "init_address", "init_utils", "init_address", "init_crypto", "error", "_value", "BN_0", "name", "data", "v", "r", "BN_35", "BN_2", "BN_27", "BN_28", "_data", "Transaction", "init_address", "init_crypto", "init_utils", "types", "init_transaction", "init_address", "init_crypto", "init_transaction", "init_utils", "signed", "count", "value", "types", "values", "index", "sha256", "init_address", "init_crypto", "init_utils", "bytes", "signed", "BN_MAX_UINT256", "BN_1", "BN_0", "_value", "id", "name", "domain", "types", "init_address", "init_crypto", "init_transaction", "init_utils", "error", "_types", "type", "base", "index", "n", "t", "st", "v", "b", "value", "values", "k", "text", "throwError", "offset", "cur", "t", "keyword", "keywords", "modifiers", "_offset", "_guard", "init_utils", "top", "link", "to", "name", "components", "result", "process", "v", "value", "error", "type", "bracket", "indexed", "index", "_a", "e", "id", "inputs", "o", "data", "bytes", "error", "code", "init_utils", "init_address", "types", "values", "text", "bytes", "data", "init_utils", "PanicReasons", "init_crypto", "init_utils", "name", "hash", "code", "error", "index", "f", "j", "values", "names", "b", "data", "bytes", "_data", "ef", "e", "id", "value", "keys", "getValue", "BN_0", "init_utils", "init_transaction", "hash", "number", "index", "v", "data", "to", "root", "blockNumber", "_timeout", "receipt", "error", "_iface", "init_utils", "error", "overrides", "resolver", "index", "BN_0", "error", "method", "values", "internal", "name", "fragment", "e", "t", "listener", "start", "started", "count", "passProperties", "_a", "init_address", "init_utils", "v", "addr", "target", "code", "hash", "init_address", "init_utils", "overrides", "data", "output", "init_contract", "link", "init_address", "init_contract", "init_utils", "name", "data", "error", "FetchRequest", "bytes", "_a", "resolver", "allowNull", "error", "BN_0", "value", "init_address", "init_crypto", "init_transaction", "init_utils", "_url", "init_utils", "name", "parseUnits", "_value", "error", "name", "_chainId", "init_transaction", "init_utils", "_provider", "_poll", "_filter", "_poller", "_running", "_blockNumber", "poll_fn", "b", "error", "hash", "k", "v", "keys", "copy", "_event", "hash", "t", "getTime", "start", "bytes", "error", "offset", "empty", "data", "BN_2", "defaultOptions", "_plugins", "_options", "init_address", "init_contract", "init_transaction", "init_utils", "name", "_network", "FetchRequest", "b", "fromBlock", "toBlock", "address", "filter", "_request", "position", "Transaction", "_filter", "resolver", "node", "count", "index", "listener", "started", "tx", "from", "init_address", "init_transaction", "init_utils", "name", "Transaction", "domain", "types", "copy", "_provider", "_poller", "_running", "_poll", "poll_fn", "init_utils", "error", "error", "defaultOptions", "_options", "_network", "init_address", "init_transaction", "init_utils", "_to", "hash", "tx", "domain", "types", "_value", "value", "_error", "method", "e", "id", "accounts", "bytes", "payload", "r", "FetchRequest", "name", "init_utils", "_network", "error", "FetchRequest", "request", "getHost", "name", "defaultApiKey", "init_utils", "_network", "error", "data", "FetchRequest", "request", "init_utils", "_network", "isPromise", "_plugin", "init_contract", "init_transaction", "init_utils", "_network", "post", "id", "FetchRequest", "request", "response", "result", "k", "error", "e", "data", "transaction", "Transaction", "getGlobal", "_provider", "_filter", "_subs", "init_utils", "_options", "_connect", "error", "getHost", "name", "init_utils", "_network", "error", "FetchRequest", "request", "getHost", "name", "init_utils", "_network", "error", "FetchRequest", "request", "j", "stall", "getTime", "stringify", "value", "config", "blockNumber", "error", "keys", "k", "t", "r", "values", "e", "b", "BN_1", "BN_2", "add", "defaultConfig", "init_utils", "index", "result", "now", "dt", "name", "error", "init_utils", "init_utils", "domain", "types", "_request", "init_utils", "method", "e", "error", "getHost", "name", "init_utils", "_network", "error", "FetchRequest", "request", "init_address", "init_transaction", "init_utils", "to", "Transaction", "domain", "types", "name", "words", "decode", "data", "all", "init_utils", "init_utils", "phrase", "words", "_data", "init_utils", "data", "checksum", "index", "words", "id", "wordlist", "words", "offset", "index", "checksum", "sha256", "_guard", "init_crypto", "init_utils", "phrase", "pbkdf2", "error", "bytes", "S", "T1", "U2", "index", "t", "tt", "i", "r", "name", "__classPrivateFieldSet", "__classPrivateFieldGet", "j", "data", "__classPrivateFieldGet", "__classPrivateFieldSet", "__classPrivateFieldGet", "index", "_a", "data", "init_lib", "object", "path", "cur", "init_utils", "data", "version", "error", "N", "r", "count", "salt", "dkLen", "key", "pbkdf2", "stall", "scrypt", "randomBytes", "mac", "path", "now", "init_lib", "init_address", "init_crypto", "init_transaction", "init_utils", "zpad", "Nibbles", "_value", "sha256", "bytes", "index", "data", "I", "node", "path", "components", "defaultPath", "N", "_guard", "init_crypto", "init_transaction", "init_utils", "ripemd160", "ki", "wordlist", "_a", "randomBytes", "phrase", "Ki", "data", "error", "pbkdf2", "id", "init_lib", "init_address", "init_crypto", "init_utils", "stall", "init_crypto", "init_utils", "_a", "phrase", "wallet", "init_wallet", "data", "maxValue", "data", "words", "all", "init_utils", "data", "checksum", "FetchRequest", "FetchResponse", "N", "Transaction", "defaultPath", "id", "pbkdf2", "randomBytes", "ripemd160", "scrypt", "sha256", "sha512", "init_address", "init_contract", "init_crypto", "init_transaction", "init_utils", "init_wallet", "init_lib", "DEFAULT_OPTIONS", "__assign", "t", "n", "NotyfNotification", "NotyfArrayEvent", "NotyfArray", "index", "fn", "NotyfEvent", "NotyfView", "_a", "notification", "node", "text", "color", "_b", "el", "Notyf", "types", "config", "_a", "init_src", "init_lib", "e", "theme", "FetchRequest", "tags", "Tagify", "error", "e", "placeholder", "markdown", "inputSelector", "content", "doc", "recommendedUsersWidgetController", "autocompleteLightThemeConfig", "init_light_autocomplete_theme", "searchPanelLightThemeConfig", "init_light_search_panel_theme", "main", "lightTheme", "init_light_theme", "init_dist", "init_light_autocomplete_theme", "init_light_search_panel_theme", "autocompleteLightThemeConfig", "searchPanelLightThemeConfig", "autocompleteDarkThemeConfig", "init_dark_autocomplete_theme", "searchPanelDarkThemeConfig", "init_dark_search_panel_theme", "chalky", "coral", "cyan", "invalid", "ivory", "stone", "malibu", "sage", "whiskey", "violet", "darkBackground", "highlightBackground", "background", "tooltipBackground", "selection", "cursor", "main", "oneDarkTheme", "oneDarkHighlightStyle", "index", "init_dark_theme", "init_dist", "init_dark_autocomplete_theme", "init_dark_search_panel_theme", "autocompleteDarkThemeConfig", "searchPanelDarkThemeConfig", "findFold", "to", "_a", "from", "generateRandomDomId", "dropFoldGutter", "config", "foldGutterDefaults", "FoldMarker", "range", "event", "e", "selection", "init_codemirror_drop_fold_gutter", "init_dist", "EditorSelectionHelper", "codemirror_helper_default", "init_codemirror_helper", "init_dist", "range", "to", "node", "skipForList", "bl", "isOrderedList", "isBulletList", "isHorizontalRule", "space", "skipSpace", "skipSpaceBack", "to", "isFencedCode", "isBlockquote", "count", "isSetextUnderline", "inList", "isAtxHeading", "end", "isHTMLBlock", "e", "HTMLBlockStyle", "getListIndent", "addCodeText", "elt", "lineEnd", "text", "injectGaps", "offset", "rangeEnd", "start", "node", "nonEmpty", "resolveConfig", "conc", "b", "none", "findName", "names", "name", "Element", "finishLink", "content", "parseURL", "parseLinkTitle", "parseLinkLabel", "injectMarks", "toRelative", "CompositeBlock", "Type", "LeafBlock", "Line", "DefaultSkipMarkup", "EmptyLine", "CommentEnd", "ProcessingEnd", "DefaultBlockParsers", "LinkReferenceParser", "SetextHeadingParser", "DefaultLeafBlocks", "DefaultEndLeaf", "scanLineResult", "BlockContext", "MarkdownParser", "nodeTypes", "Buffer", "TreeElement", "EmphasisUnderscore", "EmphasisAsterisk", "LinkStart", "ImageStart", "InlineDelimiter", "Escapable", "Punctuation", "DefaultInline", "InlineContext", "NotLast", "FragmentCursor", "markdownHighlighting", "parser", "init_markdown", "init_dist", "hash", "indent", "base", "parse", "r", "eol", "top", "t", "w", "config", "id", "rm", "spec", "comment", "link", "j", "k", "element", "cur", "n", "MarkdownSVG", "ATXHeading1", "ATXHeading2", "ATXHeading3", "ATXHeading4", "ATXHeading5", "ATXHeading6", "Link", "Table", "HorizontalRule", "Code", "Blockquote", "HTMLBlock", "Image", "Plus", "Paragraph", "BulletList", "OrderedList", "Emoji", "MarkdownTypeIcons", "init_icons", "init_markdown", "Type", "wrapWithMarkdown", "text", "to", "getSelectionTooltip", "codemirror_helper_default", "TooltipActionView", "changeWithTooltipDisabled", "tooltipDisplayField", "toggleTooltipEffect", "setSelectionTooltip", "selectionTooltipState", "selectionTooltipPlugin", "selectionTooltipBaseTheme", "init_codemirror_tooltips_action", "init_dist", "init_codemirror_helper", "tr", "effect", "f", "generateRandomDomId", "markdownGutter", "config", "markdownMarkersPlugin", "_a", "codemirror_helper_default", "MarkdownMarker", "markdownGutterTheme", "init_codemirror_markdow_gutter", "init_dist", "init_codemirror_helper", "init_icons", "init_codemirror_tooltips_action", "heading", "visit", "node", "changeWithTooltipDisabled", "element", "MarkdownTypeIcons", "to", "placeholderMatcher", "PlaceholderWidget", "placeholdersPlugin", "init_mention_node", "init_dist", "content", "_a", "placeholderMatcher", "PlaceholderWidget", "emojiPlaceholdersPlugin", "init_emoji_node", "init_dist", "content", "_a", "mentionSuggestions", "data", "keyword", "init_mention", "emojiSuggestions", "keyword", "init_emojis", "hyperLinkDecorations", "doc", "defaultRegexp", "to", "HyperLinkIcon", "hyperLinkExtension", "handle", "linkDecorator", "v", "pathStr", "hyperLinkStyle", "hyperLink", "init_codemirror_hyper_link", "init_dist", "add", "start", "end", "mapRange", "range", "to", "highlightSelection", "r", "addHighlight", "unhighlightSelection", "highlightedRanges", "removeHighlight", "cutRange", "addRange", "highlight", "rangeHighlighting", "invertHighlight", "highlightKeymap", "init_range_highlighting", "init_dist", "tr", "e", "init_dist", "tr", "e", "f", "on", "countWords", "doc", "count", "wordCounter", "init_count_words", "init_dist", "leftOverSpace", "node", "to", "n", "parseCode", "config", "id", "parser", "init_nest", "init_dist", "init_markdown", "parseRow", "offset", "count", "hasPipe", "start", "to", "autolinkURLEnd", "text", "urlRE", "end", "m", "autolinkEmailEnd", "emailRE", "parseSubSuper", "node", "next", "space", "StrikethroughDelim", "Strikethrough", "delimiterLine", "TableParser", "Table", "TaskParser", "TaskList", "autolinkRE", "xmppResourceRE", "Autolink", "GFM", "Superscript", "Subscript", "Emoji", "init_extension", "init_markdown", "init_dist", "Punctuation", "content", "init_lezer_parser_markdown", "init_markdown", "init_nest", "init_extension", "isHeading", "findSectionEnd", "heading", "mkLang", "parser", "data", "headerIndent", "getCodeParser", "headingProp", "commonmark", "commonmarkLanguage", "extended", "markdownLanguage", "init_markdown", "init_dist", "init_lezer_parser_markdown", "start", "end", "node", "GFM", "Subscript", "Superscript", "Emoji", "getContext", "node", "doc", "cur", "Context", "itemNumber", "renumberList", "offset", "number", "normalizeIndent", "content", "space", "isMark", "contextNodeForDelete", "insertNewlineContinueMarkup", "deleteMarkupBackward", "init_commands", "init_dist", "init_markdown", "to", "add", "dispatch", "range", "markdownLanguage", "insert", "changes", "e", "start", "markdown", "config", "parser", "commonmarkLanguage", "MarkdownParser", "htmlNoMatch", "getCodeParser", "parseCode", "markdownKeymap", "mkLang", "htmlTagCompletion", "htmlTagCompletions", "_tagCompletions", "init_codemirror_lang_markdown", "init_dist", "init_lezer_parser_markdown", "init_markdown", "init_commands", "insertNewlineContinueMarkup", "deleteMarkupBackward", "html", "createMarkdownPreviewPanel", "MarkdownPreviewPanel", "toggleMarkdownPreview", "markdownPreviewState", "renderMarkdown", "markdownPreviewTheme", "init_codemirror_preview_panel", "init_dist", "tr", "e", "f", "on", "previewHeight", "text", "html", "start", "end", "markdown", "isBlank", "codemirrorTheme", "_CodemirrorWrapper", "CodemirrorWrapper", "init_codemirror_wrapper", "init_dist", "init_light_theme", "init_dark_theme", "init_codemirror_drop_fold_gutter", "init_codemirror_markdow_gutter", "init_markdown", "init_mention_node", "init_emoji_node", "init_mention", "init_emojis", "init_codemirror_hyper_link", "init_range_highlighting", "init_count_words", "init_codemirror_lang_markdown", "init_codemirror_preview_panel", "editor", "to", "content", "doc", "history", "markdownGutter", "dropFoldGutter", "lightTheme", "placeholdersPlugin", "emojiPlaceholdersPlugin", "mentionSuggestions", "emojiSuggestions", "hyperLink", "rangeHighlighting", "wordCounter", "markdown", "markdownLanguage", "text", "range", "start", "end", "tr", "toggleMarkdownPreview", "markdownPreviewState", "oneDarkTheme", "init_codemirror_wrapper", "e", "target", "error", "CodemirrorWrapper", "cmd", "element", "doc", "inputSelector", "content", "markdown", "theme", "root", "module", "exports", "name", "key", "object", "__assign", "__rest", "__classPrivateFieldGet", "__classPrivateFieldSet", "b", "d", "t", "n", "e", "r", "P", "f", "y", "v", "o", "k", "k2", "ar", "error", "il", "j", "jl", "to", "q", "mod", "html", "div", "DomElement", "get", "fn", "$", "index", "agentFn", "_filter", "elem", "editor", "top", "global", "path", "wrapConstructor", "NavUA", "debounce", "data", "toArray", "it", "Symbol", "hasOwnProperty", "O", "isOldIE", "getTarget", "identifier", "list", "identifiers", "id", "count", "replaceText", "replace", "remove", "css", "toString", "content", "cache", "method", "BtnMenu", "DropListMenu", "$elem", "push", "self", "create", "Panel", "left", "offset", "$title", "$content", "_a", "doneFn", "min", "variable", "PanelMenu", "Tooltip", "WeakMap", "selection", "range", "createDocumentFragment", "string", "point", "keys", "ListHandle", "V", "Result", "split", "document", "values", "defineProperties", "activeXDocument", "el", "max", "C", "process", "version", "Editor", "disable", "enable", "_typeof", "obj", "Menu", "node", "UploadImg", "config", "text", "xhr", "percent", "link", "end", "start", "Cache", "indexOf", "names", "S", "location", "post", "x", "meta", "define", "previous", "add", "DropList", "option", "Progress", "ListType", "List", "todo", "Object", "defineProperty", "position", "TypeError", "notify", "ok", "domain", "dispatchEvent", "Promise", "fetch", "all", "MutationObserver", "console", "own", "map", "init", "Map", "splice", "A", "concat", "E", "properties", "stringify", "space", "parseInt", "defaultConfig", "B", "T", "SelectionAndRange", "Command", "Text", "find", "htmlText", "comment", "Set", "empty", "Menus", "menuKey", "MenuConstructor", "hide", "Bold", "Head", "re", "hi", "Link", "color", "_e", "$link", "Italic", "Underline", "StrikeThrough", "FontStyle", "FontStyleList", "FontSize", "FontSizeList", "Justify", "Quote", "BackColor", "FontColor", "Video", "video", "UploadVideo", "now", "$node", "Image", "types", "$drag", "parseFloat", "getUploadImgTpl", "Indent", "Emoticon", "ClassType", "handle", "ListHandleCommand", "WrapListHandle", "SelectionRangeElem", "JoinListHandle", "StartJoinListHandle", "EndJoinListHandle", "OtherListHandle", "LineHeight", "getParentNode", "star", "lineHeightList", "Undo", "Redo", "Table", "CreateTable", "tr", "i", "getNode", "Code", "code", "language", "languageType", "$code", "splitLine", "$splitLine", "Todo", "placeholder", "initFullScreen", "scrollToHead", "ZIndex", "Change", "Mutation", "History", "ContentCache", "NodeCache", "CeilStack", "compile", "contains", "reference", "HtmlCache", "TailChain", "ScrollCache", "RangeCache", "SelectionChange", "registerPlugin", "init_codemirror_wrapper", "e", "target", "error", "E", "CodemirrorWrapper", "element", "editor", "div", "observer", "config", "data", "text", "cmd", "doc", "inputSelector", "content", "markdown", "theme", "t", "o", "n", "e", "r", "i", "l", "s", "v", "_a", "init_src", "e", "root", "exports", "__webpack_require__", "_a", "id", "placeholder", "to", "pack", "ar", "mod", "Choices", "element", "re", "data", "option", "values", "listItem", "el", "_e", "index", "Container", "position", "Dropdown", "Input", "List", "node", "WrappedElement", "b", "d", "WrappedInput", "WrappedSelect", "o", "k", "k2", "min", "max", "isType", "dispatchEvent", "e", "choice", "score", "Store", "div", "list", "module", "isMergeableObject", "object", "__webpack_exports__", "getTag", "toString", "isBlank", "name", "keys", "path", "get", "obj", "cache", "norm", "n", "doc", "value", "start", "end", "search", "text", "location", "mask", "j", "pattern", "result", "item", "searchers", "register", "parse", "auto", "query", "code", "randomString", "isError", "dispatch", "subscribe", "createStore", "definition", "init_lib", "init_src", "e", "error", "Choices", "element", "defaultOptions", "e", "offset", "st", "top", "left", "right", "name", "e", "t", "debounce", "init_dist", "method", "_a", "name", "dispatchEvent", "fn", "wait", "index", "node", "supportedTargets", "n", "init_dist", "element", "link", "root", "factory", "exports", "module", "define", "amd", "self", "__webpack_require__", "definition", "key", "o", "Object", "defineProperty", "enumerable", "get", "obj", "prop", "prototype", "hasOwnProperty", "call", "Symbol", "toStringTag", "value", "e", "t", "E", "eventListener", "method", "elements", "events", "fn", "options", "HTMLCollection", "NodeList", "Array", "from", "isArray", "el", "ev", "capture", "slice", "arguments", "r", "on", "bind", "off", "createElementFromString", "html", "div", "document", "createElement", "innerHTML", "trim", "firstElementChild", "createFromTemplate", "str", "removeAttribute", "name", "getAttribute", "resolve", "element", "base", "con", "subtree", "child", "children", "arr", "sub", "push", "keys", "length", "eventPath", "evt", "path", "composedPath", "target", "parentElement", "window", "resolveElement", "val", "Element", "split", "reduce", "pv", "cv", "ci", "a", "querySelector", "shadowRoot", "adjustableInputNumbers", "mapper", "v", "handleScroll", "inc", "Number", "shiftKey", "ctrlKey", "deltaY", "index", "selectionStart", "replace", "i", "focus", "setSelectionRange", "preventDefault", "dispatchEvent", "Event", "passive", "min", "max", "floor", "round", "Math", "hsvToRgb", "h", "s", "f", "p", "q", "mod", "hsvToHsl", "l", "rgbToHsv", "g", "b", "minVal", "maxVal", "delta", "dr", "dg", "db", "cmykToHsv", "c", "m", "y", "k", "hslToHsv", "ns", "isNaN", "hexToHsv", "hex", "match", "map", "parseInt", "parseToHSVA", "toLowerCase", "ctx", "getContext", "fillStyle", "regex", "cmyk", "rgba", "hsla", "hsva", "hexa", "numarize", "array", "test", "undefined", "invalid", "type", "exec", "values", "join", "raw", "substring", "HSVaColor", "original", "next", "precision", "toFixed", "that", "toHSVA", "toString", "toHSLA", "toRGBA", "toCMYK", "rgb", "toHEXA", "padStart", "alpha", "toUpperCase", "clone", "clamp", "Moveable", "opt", "assign", "lock", "onchange", "onstop", "_keyboard", "activeElement", "wrapper", "up", "right", "down", "left", "xm", "ym", "update", "cache", "x", "startsWith", "_tapstart", "_", "_tapstop", "_tapmove", "cancelable", "getBoundingClientRect", "touch", "touches", "clientX", "clientY", "width", "top", "height", "style", "offsetWidth", "offsetHeight", "cx", "cy", "trigger", "destroy", "Selectable", "className", "onTap", "forEach", "classList", "stopPropagation", "variantFlipOrder", "start", "middle", "end", "positionFlipOrder", "bottom", "position", "margin", "padding", "D", "HTMLElement", "reference", "popper", "Error", "container", "arrow", "B", "M", "C", "documentElement", "F", "K", "S", "V", "vs", "vm", "ve", "hs", "hm", "he", "$", "R", "j", "u", "n", "d", "w", "z", "L", "P", "T", "O", "H", "Pickr", "constructor", "_initializingActive", "_recalc", "_nanopop", "_root", "_color", "_lastColor", "_swatchColors", "_setupAnimationFrame", "_eventListener", "init", "save", "hide", "show", "clear", "change", "changestop", "cancel", "swatchselect", "this", "DEFAULT_OPTIONS", "swatches", "components", "theme", "sliders", "lockOpacity", "includes", "interaction", "preview", "opacity", "hue", "palette", "_preBuild", "_buildComponents", "_bindEvents", "_finalBuild", "color", "addSwatch", "button", "app", "createPopper", "setAttribute", "_t", "requestAnimationFrame", "cb", "setColor", "default", "_rePositioningPicker", "defaultRepresentation", "_representation", "setColorRepresentation", "showAlways", "_emit", "instance", "useAsButton", "inline", "appClass", "hidden", "input", "int", "find", "add", "contains", "appendChild", "removeChild", "parent", "nextSibling", "insertBefore", "remove", "parentNode", "replaceChild", "disabled", "disable", "comparison", "transition", "lastColor", "inst", "cs", "repeat", "so", "sh", "getColor", "picker", "currentColor", "_updateOutput", "cssRGBaString", "background", "setProperty", "slider", "backgroundColor", "selectable", "_components", "eventBindings", "_clearColor", "setHSVA", "applyColor", "result", "stopImmediatePropagation", "ck", "closeWithKey", "isOpen", "code", "some", "adjustableNumbers", "ranges", "step", "range", "getColorRepresentation", "nv", "toPrecision", "autoReposition", "timeout", "closeOnScroll", "setTimeout", "rs", "clearTimeout", "_eventBindings", "body", "eb", "innerHeight", "innerWidth", "eventSource", "outputPrecision", "silent", "_parseLocalColor", "alphaMakesAChange", "i18n", "I18N_DEFAULTS", "event", "args", "callBacks", "indexOf", "splice", "removeSwatch", "swatchColor", "cancelAnimationFrame", "destroyAndRemove", "recalc", "string", "utype", "click", "getSelectedColor", "getRoot", "enable", "static", "VERSION", "import_choices", "Pickr", "color", "el", "Choices", "data", "e", "element", "cmd", "theme", "e", "init_dist", "cmd", "e", "hash", "e", "element", "import_choices", "Choices", "init_dist", "init_src", "init_src", "e", "import_choices", "el", "Choices", "cmd", "init_src", "error", "init_src", "error", "init_src", "init_src", "init_dist", "keyword", "data", "error", "init_src", "e", "error", "start", "doc", "name", "node", "morphAttrs", "morphdom", "el", "childrenOnly", "element", "camelize", "capitalize", "dasherize", "tokenize", "typecast", "e", "to", "data", "html", "position", "content", "meta", "text", "error", "Proxy", "index", "init_turbo_power", "index", "init_turbo_power", "createWebSocketURL", "createConsumer", "getConfig", "Consumer", "name", "element", "now", "secondsSince", "ConnectionMonitor", "message_types", "protocols", "supportedProtocols", "indexOf", "Connection", "extend", "Subscription", "SubscriptionGuarantor", "Subscriptions", "consumer", "data", "error", "identifier", "object", "properties", "subscription", "command", "init_consumer", "createConsumer", "init_consumer", "data", "element", "color", "data", "_a", "error", "init_consumer", "init_emojis", "e", "element"]
}
